@hivegpt/hiveai-angular 0.0.603 → 0.0.605

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"hivegpt-hiveai-angular.mjs","sources":["../../../../projects/hivegpt/eventsgpt-angular/src/lib/utils/utils.ts","../../../../projects/hivegpt/eventsgpt-angular/src/environments/environment.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/voice-modal-tokens.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/audio-analyzer.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/services/platform-token-refresh.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/voice-agent.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/conversation.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/translations/translation.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/video-player/video-player.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/video-player/video-player.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot-html-editor/bot-html-editor.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot-html-editor/bot-html-editor.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chat-drawer/chat-drawer.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chat-drawer/chat-drawer.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chatbot/chatbot.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chatbot/chatbot.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/voice-agent.module.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/NotificationSocket.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/pipes/safe-html.pipe.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/hivegpt.module.ts","../../../../projects/hivegpt/eventsgpt-angular/src/public-api.ts","../../../../projects/hivegpt/eventsgpt-angular/src/hivegpt-hiveai-angular.ts"],"sourcesContent":["const formatHoursAndMinutes = (date: Date) => {\n let hours = date.getHours() % 12;\n const minutes = date.getMinutes();\n const amPm = date.getHours() < 12 ? 'AM' : 'PM';\n if(hours === 0) hours = 12;\n\n const formattedHours = hours < 10 ? `0${hours}` : hours;\n const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;\n\n return `${formattedHours}:${formattedMinutes} ${amPm}`;\n};\n\nexport const formatNow = (timezone?: string) => {\n const now = new Date();\n if (timezone) {\n const options: any = {\n hour12: true,\n hour: 'numeric',\n minute: 'numeric',\n timeZone: timezone,\n };\n return now.toLocaleString('en-US', options);\n }\n return formatHoursAndMinutes(now);\n};\n\nexport const formatTimeStamps = (timezone: string | undefined, timestamps: any) => {\n const date = new Date(timestamps + 'Z');\n const options: any = {\n hour12: true,\n hour: 'numeric',\n minute: 'numeric',\n };\n if (timezone && timezone.trim()) {\n options.timeZone = timezone.trim();\n }\n return date.toLocaleString('en-US', options);\n};\n","\n\nexport const prod_environment = {\n USERS_API: 'https://es-user.social27.com/api',\n BASE_URL: 'https://agent-api.hivegpt.ai',\n AGENTS_API: 'https://hive-ai.social27.com/api',\n API_KEY: '82595783-dc9c-4513-8204-709818d51be3',\n SocketUrl: 'https://notif-v2-ws.social27.com/'\n}\n\n\nexport const dev_environment = {\n USERS_API: 'https://pre-user.social27.com/api',\n BASE_URL: 'https://pre-agent-api.hivegpt.ai',\n AGENTS_API: 'https://hive-pre-ai.social27.com/api',\n API_KEY: '66d59244c50b8fb597a101t1',\n SocketUrl: 'https://notif-ws-staging.social27.com/',\n};\n\n","import { InjectionToken } from '@angular/core';\n\nexport interface VoiceModalConfig {\n apiUrl: string;\n token: string;\n botId: string;\n conversationId: string;\n apiKey: string;\n eventToken: string;\n /** Event scope id (same as host `eventId` / API `events/:eventId/...`). */\n eventId: string;\n eventUrl: string;\n domainAuthority: string;\n agentName: string;\n agentRole: string;\n agentAvatar?: string;\n /** Same base as host `USERS_API` (e.g. `https://es-user.social27.com/api`) for proactive token refresh. */\n usersApiUrl?: string;\n}\n\nexport const VOICE_MODAL_CONFIG = new InjectionToken<VoiceModalConfig>('VOICE_MODAL_CONFIG');\nexport const VOICE_MODAL_CLOSE_CALLBACK = new InjectionToken<() => void>('VOICE_MODAL_CLOSE_CALLBACK');\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Audio analyzer for waveform visualization and local (mic) speaking detection.\n * VoiceAgentService may combine this with WebSocket server events for call state.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AudioAnalyzerService {\n private audioContext: AudioContext | null = null;\n private analyserNode: AnalyserNode | null = null;\n private sourceNode: MediaStreamAudioSourceNode | null = null;\n private dataArray: Uint8Array | null = null;\n private animationFrameId: number | null = null;\n private isRunning = false;\n\n private audioLevelsSubject = new BehaviorSubject<number[]>([]);\n private isUserSpeakingSubject = new BehaviorSubject<boolean>(false);\n\n // Adaptive noise floor detection\n private noiseFloor = 0;\n private noiseFloorSamples: number[] = [];\n private readonly NOISE_FLOOR_SAMPLE_COUNT = 30;\n private readonly SPEAKING_THRESHOLD_MULTIPLIER = 2.5;\n private readonly WAVEFORM_BAR_COUNT = 60;\n // Amplify raw amplitude so normal speech (±10–20 units) maps to visible levels\n private readonly SENSITIVITY_MULTIPLIER = 5;\n private barsBuffer: number[] = new Array(this.WAVEFORM_BAR_COUNT).fill(0);\n\n audioLevels$: Observable<number[]> = this.audioLevelsSubject.asObservable();\n isUserSpeaking$: Observable<boolean> = this.isUserSpeakingSubject.asObservable();\n\n constructor(private ngZone: NgZone) {}\n\n start(stream: MediaStream): void {\n if (this.isRunning) {\n this.stop();\n }\n\n try {\n this.audioContext = new (window.AudioContext || (window as any).webkitAudioContext)();\n if (this.audioContext.state === 'suspended') {\n this.audioContext.resume().catch(console.warn);\n }\n this.sourceNode = this.audioContext.createMediaStreamSource(stream);\n\n this.analyserNode = this.audioContext.createAnalyser();\n this.analyserNode.fftSize = 2048;\n this.analyserNode.smoothingTimeConstant = 0.4;\n\n const bufferLength = this.analyserNode.frequencyBinCount;\n this.dataArray = new Uint8Array(bufferLength);\n\n this.sourceNode.connect(this.analyserNode);\n \n this.isRunning = true;\n this.noiseFloorSamples = [];\n this.noiseFloor = 0;\n \n this.ngZone.runOutsideAngular(() => this.analyze());\n } catch (error) {\n console.error('Error starting audio analyzer:', error);\n this.stop();\n }\n }\n\n stop(): void {\n this.isRunning = false;\n \n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n\n if (this.sourceNode) {\n this.sourceNode.disconnect();\n this.sourceNode = null;\n }\n\n if (this.analyserNode) {\n this.analyserNode.disconnect();\n this.analyserNode = null;\n }\n\n if (this.audioContext && this.audioContext.state !== 'closed') {\n this.audioContext.close().catch(console.error);\n this.audioContext = null;\n }\n\n this.dataArray = null;\n this.audioLevelsSubject.next([]);\n this.isUserSpeakingSubject.next(false);\n }\n\n private analyze(): void {\n if (!this.isRunning || !this.analyserNode || !this.dataArray) {\n return;\n }\n\n this.analyserNode.getByteTimeDomainData(this.dataArray);\n \n // Calculate RMS (Root Mean Square) volume\n const rms = this.calculateRMS(this.dataArray);\n \n // Learn noise floor during initial samples\n if (this.noiseFloorSamples.length < this.NOISE_FLOOR_SAMPLE_COUNT) {\n this.noiseFloorSamples.push(rms);\n if (this.noiseFloorSamples.length === this.NOISE_FLOOR_SAMPLE_COUNT) {\n // Calculate average noise floor\n const sum = this.noiseFloorSamples.reduce((a, b) => a + b, 0);\n this.noiseFloor = sum / this.NOISE_FLOOR_SAMPLE_COUNT;\n }\n } else {\n // Update noise floor adaptively (moving average)\n this.noiseFloor = this.noiseFloor * 0.99 + rms * 0.01;\n }\n\n // Detect if user is speaking\n const threshold = this.noiseFloor * this.SPEAKING_THRESHOLD_MULTIPLIER;\n const isSpeaking = rms > threshold;\n\n // Generate waveform bars\n const bars = this.generateWaveformBars(this.dataArray);\n\n // Only trigger change detection when speaking state actually changes\n if (isSpeaking !== this.isUserSpeakingSubject.value) {\n this.ngZone.run(() => this.isUserSpeakingSubject.next(isSpeaking));\n }\n // Emit audio levels outside Angular's zone — no CD triggered here\n this.audioLevelsSubject.next(bars);\n\n this.animationFrameId = requestAnimationFrame(() => this.analyze());\n }\n\n private calculateRMS(data: Uint8Array): number {\n let sum = 0;\n for (let i = 0; i < data.length; i++) {\n const normalized = (data[i] - 128) / 128;\n sum += normalized * normalized;\n }\n return Math.sqrt(sum / data.length);\n }\n\n private generateWaveformBars(data: Uint8Array): number[] {\n const step = Math.floor(data.length / this.WAVEFORM_BAR_COUNT);\n for (let i = 0; i < this.WAVEFORM_BAR_COUNT; i++) {\n const value = data[i * step];\n const normalized = Math.abs((value - 128) / 128) * 100 * this.SENSITIVITY_MULTIPLIER;\n this.barsBuffer[i] = Math.min(100, Math.max(0, normalized));\n }\n return this.barsBuffer;\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n Inject,\n Injectable,\n InjectionToken,\n Optional,\n PLATFORM_ID,\n} from '@angular/core';\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\nimport { catchError, filter, switchMap, take } from 'rxjs/operators';\n\n/**\n * Default matches Pro-Events `AppConstants.authTokenKey` — same localStorage shape\n * `{ accessToken, refreshToken, ... }` as JSON.\n * Named factory (no arrow fn) so ngc metadata collection accepts it.\n */\nexport function hiveGptAuthStorageKeyFactory(): string {\n return 'authcc-aae1';\n}\n\nexport const HIVEGPT_AUTH_STORAGE_KEY = new InjectionToken<string>(\n 'HIVEGPT_AUTH_STORAGE_KEY',\n {\n providedIn: 'root',\n factory: hiveGptAuthStorageKeyFactory,\n },\n);\n\n/** Subset of platform token refresh response (user/tokenRefresh). */\nexport interface HiveGptPlatformTokenResponse {\n accessToken?: string;\n refreshToken?: string;\n email?: string;\n expiresIn?: number | string;\n [key: string]: unknown;\n}\n\nexport interface EnsureTokenResult {\n accessToken: string;\n /** True when a network refresh was performed successfully. */\n refreshed: boolean;\n /** Full API payload when refreshed (for host `saveTokenAndLoginUser`). */\n authResponse?: HiveGptPlatformTokenResponse;\n}\n\n/**\n * Proactive access-token refresh (JWT `exp`) + single-flight queue, aligned with\n * Pro-Events `EventInterceptor` + `AuthService.refreshToken`.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class PlatformTokenRefreshService {\n private refreshTokenInProgress = false;\n private refreshTokenSubject = new BehaviorSubject<string | null>(null);\n\n private readonly storageKey: string;\n\n constructor(\n private http: HttpClient,\n /** Use `Object` (not `object`) so ngc metadata collection accepts the parameter type. */\n @Inject(PLATFORM_ID) private platformId: Object,\n /**\n * Avoid `string | null` on the parameter — `|` is treated as unsupported expression in ngc metadata.\n */\n @Optional() @Inject(HIVEGPT_AUTH_STORAGE_KEY) authStorageKey: string,\n ) {\n this.storageKey =\n authStorageKey != null && authStorageKey !== ''\n ? authStorageKey\n : 'authcc-aae1';\n }\n\n /** Read parsed auth blob from localStorage (same as host app). */\n readStoredAuth(): HiveGptPlatformTokenResponse | null {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n try {\n const raw = localStorage.getItem(this.storageKey);\n if (!raw) {\n return null;\n }\n return JSON.parse(raw) as HiveGptPlatformTokenResponse;\n } catch {\n return null;\n }\n }\n\n persistAuth(res: HiveGptPlatformTokenResponse): void {\n if (!isPlatformBrowser(this.platformId) || !res) {\n return;\n }\n try {\n localStorage.setItem(this.storageKey, JSON.stringify(res));\n } catch (e) {\n console.warn('[HiveGpt] Failed to persist auth tokens', e);\n }\n }\n\n /**\n * JWT `exp` check without @auth0/angular-jwt (keeps package lean).\n * @param skewSeconds refresh slightly before actual expiry (clock skew).\n */\n isAccessTokenExpired(\n token: string | null | undefined,\n skewSeconds = 60,\n ): boolean {\n if (!token || typeof token !== 'string') {\n return true;\n }\n const expMs = this.getJwtExpirationMs(token);\n if (expMs == null) {\n return false;\n }\n return expMs - skewSeconds * 1000 < Date.now();\n }\n\n private getJwtExpirationMs(token: string): number | null {\n try {\n const parts = token.split('.');\n if (parts.length < 2) {\n return null;\n }\n const payload = parts[1]\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n const padded = payload + '='.repeat((4 - (payload.length % 4)) % 4);\n if (typeof atob === 'undefined') {\n return null;\n }\n const json = JSON.parse(atob(padded)) as { exp?: number };\n if (json?.exp == null || typeof json.exp !== 'number') {\n return null;\n }\n return json.exp * 1000;\n } catch {\n return null;\n }\n }\n\n /**\n * Returns a valid access token: refreshes via `POST {usersApiBaseUrl}/user/tokenRefresh`\n * when JWT is expired and a refresh token exists in storage.\n */\n ensureValidAccessToken(\n currentAccessToken: string | undefined | null,\n usersApiBaseUrl: string,\n ): Observable<EnsureTokenResult> {\n if (!isPlatformBrowser(this.platformId)) {\n return of({\n accessToken: currentAccessToken ?? '',\n refreshed: false,\n });\n }\n\n const stored = this.readStoredAuth();\n const access =\n (currentAccessToken && String(currentAccessToken).trim()) ||\n stored?.accessToken ||\n '';\n const refresh = stored?.refreshToken;\n\n if (access && !this.isAccessTokenExpired(access)) {\n return of({ accessToken: access, refreshed: false });\n }\n\n if (!refresh || typeof refresh !== 'string') {\n return of({ accessToken: access, refreshed: false });\n }\n\n const base = (usersApiBaseUrl || '').replace(/\\/+$/, '');\n if (!base) {\n return of({ accessToken: access, refreshed: false });\n }\n\n const url = `${base}/user/tokenRefresh`;\n\n if (!this.refreshTokenInProgress) {\n this.refreshTokenInProgress = true;\n this.refreshTokenSubject.next(null);\n\n return this.http\n .post<HiveGptPlatformTokenResponse>(url, { refreshToken: refresh })\n .pipe(\n switchMap((authResponse) => {\n this.refreshTokenInProgress = false;\n if (authResponse?.accessToken) {\n this.persistAuth(authResponse);\n this.refreshTokenSubject.next(authResponse.accessToken);\n return of({\n accessToken: authResponse.accessToken,\n refreshed: true,\n authResponse,\n } as EnsureTokenResult);\n }\n this.refreshTokenSubject.next(null);\n return throwError(() => new Error('Token refresh returned no accessToken'));\n }),\n catchError((err) => {\n this.refreshTokenInProgress = false;\n this.refreshTokenSubject.next(null);\n return throwError(() => err);\n }),\n );\n }\n\n return this.refreshTokenSubject.pipe(\n filter((t): t is string => t != null && t !== ''),\n take(1),\n switchMap((token) =>\n of({\n accessToken: token,\n refreshed: true,\n } as EnsureTokenResult),\n ),\n );\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, NgZone, PLATFORM_ID } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, take, throttleTime } from 'rxjs/operators';\nimport { PipecatClient, RTVIEvent } from '@pipecat-ai/client-js';\nimport { WebSocketTransport } from '@pipecat-ai/websocket-transport';\nimport { PlatformTokenRefreshService } from '../../../services/platform-token-refresh.service';\nimport { AudioAnalyzerService } from './audio-analyzer.service';\n\nexport type CallState =\n | 'idle'\n | 'connecting'\n | 'connected'\n | 'listening'\n | 'talking'\n | 'ended';\n\nexport interface TranscriptData {\n text: string;\n final: boolean;\n}\n\n/**\n * Voice agent orchestrator using the official PipecatClient SDK.\n *\n * Audio flow (mirrors the React reference implementation):\n * - Local mic: acquired by PipecatClient.initDevices(); local track fed to\n * AudioAnalyzerService for waveform visualisation.\n * - Bot audio: received as a MediaStreamTrack via RTVIEvent.TrackStarted,\n * played through a hidden <audio> element.\n * - All binary protobuf framing / RTVI protocol handled by\n * @pipecat-ai/client-js + @pipecat-ai/websocket-transport.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class VoiceAgentService {\n private callStateSubject = new BehaviorSubject<CallState>('idle');\n private statusTextSubject = new BehaviorSubject<string>('');\n private durationSubject = new BehaviorSubject<string>('00:00');\n private isMicMutedSubject = new BehaviorSubject<boolean>(false);\n private isUserSpeakingSubject = new BehaviorSubject<boolean>(false);\n private audioLevelsSubject = new BehaviorSubject<number[]>([]);\n private userTranscriptSubject = new Subject<TranscriptData>();\n private botTranscriptSubject = new Subject<string>();\n\n private callStartTime = 0;\n private durationInterval: ReturnType<typeof setInterval> | null = null;\n\n private pcClient: PipecatClient | null = null;\n private botAudioElement: HTMLAudioElement | null = null;\n private lifecycleToken = 0;\n\n private subscriptions = new Subscription();\n private pcEventCleanup: (() => void)[] = [];\n\n callState$: Observable<CallState> = this.callStateSubject.asObservable();\n statusText$: Observable<string> = this.statusTextSubject.asObservable();\n duration$: Observable<string> = this.durationSubject.asObservable();\n isMicMuted$: Observable<boolean> = this.isMicMutedSubject.asObservable();\n isUserSpeaking$: Observable<boolean> = this.isUserSpeakingSubject.asObservable().pipe(distinctUntilChanged());\n audioLevels$: Observable<number[]> = this.audioLevelsSubject.asObservable();\n userTranscript$: Observable<TranscriptData> = this.userTranscriptSubject.asObservable();\n botTranscript$: Observable<string> = this.botTranscriptSubject.asObservable();\n\n constructor(\n private audioAnalyzer: AudioAnalyzerService,\n private platformTokenRefresh: PlatformTokenRefreshService,\n private ngZone: NgZone,\n /** `Object` not `object` — ngc metadata collection rejects the `object` type in DI params. */\n @Inject(PLATFORM_ID) private platformId: Object,\n ) {\n this.subscriptions.add(\n this.audioAnalyzer.audioLevels$.pipe(throttleTime(50)).subscribe((levels) =>\n this.ngZone.run(() => this.audioLevelsSubject.next(levels)),\n ),\n );\n }\n\n /** Reset to idle (e.g. when modal re-opens so user can click Start Call). */\n resetToIdle(): void {\n void this.prepareFreshSession();\n }\n\n /**\n * Hard reset voice session so each modal open starts from a clean state.\n * Closes any previous client and prevents stale callbacks from mutating UI state.\n */\n async prepareFreshSession(): Promise<void> {\n this.lifecycleToken += 1;\n this.stopDurationTimer();\n this.callStartTime = 0;\n this.audioAnalyzer.stop();\n this.stopBotAudio();\n this.isUserSpeakingSubject.next(false);\n this.isMicMutedSubject.next(false);\n this.durationSubject.next('00:00');\n this.statusTextSubject.next('');\n this.callStateSubject.next('idle');\n await this.cleanupPipecatClient();\n }\n\n async connect(\n apiUrl: string,\n token: string,\n botId: string,\n conversationId: string,\n apiKey: string,\n eventToken: string,\n eventId: string,\n eventUrl: string,\n domainAuthority: string,\n usersApiUrl?: string,\n ): Promise<void> {\n if (this.callStateSubject.value !== 'idle') {\n console.warn('[HiveGpt Voice] Call already in progress');\n return;\n }\n\n const connectToken = ++this.lifecycleToken;\n\n try {\n this.callStateSubject.next('connecting');\n this.statusTextSubject.next('Connecting...');\n\n let accessToken = token;\n if (usersApiUrl && isPlatformBrowser(this.platformId)) {\n try {\n const ensured = await this.platformTokenRefresh\n .ensureValidAccessToken(token, usersApiUrl)\n .pipe(take(1))\n .toPromise();\n if (ensured?.accessToken) accessToken = ensured.accessToken;\n } catch (e) {\n console.warn('[HiveGpt Voice] Token refresh failed', e);\n }\n }\n\n const baseUrl = apiUrl.replace(/\\/$/, '');\n\n const pcClient = new PipecatClient({\n transport: new WebSocketTransport(),\n enableMic: true,\n enableCam: false,\n callbacks: {\n onConnected: () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onPipecatConnected();\n }),\n onDisconnected: () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onPipecatDisconnected();\n }),\n onBotReady: () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onBotReady();\n }),\n onUserTranscript: (data) =>\n this.ngZone.run(() =>\n this.isLifecycleActive(connectToken) &&\n this.userTranscriptSubject.next({ text: data.text, final: !!data.final }),\n ),\n onBotTranscript: (data) =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.botTranscriptSubject.next(data.text);\n }),\n onError: (err) => {\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n console.error('[HiveGpt Voice] PipecatClient error', err);\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Connection failed');\n });\n },\n },\n });\n\n this.pcClient = pcClient;\n\n // Bot audio arrives as a MediaStreamTrack — wire to a hidden <audio> element\n const onTrackStarted = (track: MediaStreamTrack, participant?: { local?: boolean }) => {\n if (!this.isLifecycleActive(connectToken)) return;\n if (!participant?.local && track.kind === 'audio') {\n this.ngZone.run(() => this.setupBotAudioTrack(track));\n }\n };\n pcClient.on(RTVIEvent.TrackStarted, onTrackStarted);\n\n // Speaking state comes straight from RTVI events\n const onBotStarted = () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onBotStartedSpeaking();\n });\n pcClient.on(RTVIEvent.BotStartedSpeaking, onBotStarted);\n\n const onBotStopped = () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onBotStoppedSpeaking();\n });\n pcClient.on(RTVIEvent.BotStoppedSpeaking, onBotStopped);\n\n const onUserStarted = () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.isUserSpeakingSubject.next(true);\n this.callStateSubject.next('listening');\n this.statusTextSubject.next('Listening...');\n });\n pcClient.on(RTVIEvent.UserStartedSpeaking, onUserStarted);\n\n const onUserStopped = () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.isUserSpeakingSubject.next(false);\n if (this.callStateSubject.value === 'listening') {\n // Brief 'Processing...' while we wait for the bot to respond.\n this.callStateSubject.next('connected');\n this.statusTextSubject.next('Processing...');\n }\n });\n pcClient.on(RTVIEvent.UserStoppedSpeaking, onUserStopped);\n\n // Store cleanup fns so listeners are removed on disconnect\n this.pcEventCleanup = [\n () => pcClient.off(RTVIEvent.TrackStarted, onTrackStarted),\n () => pcClient.off(RTVIEvent.BotStartedSpeaking, onBotStarted),\n () => pcClient.off(RTVIEvent.BotStoppedSpeaking, onBotStopped),\n () => pcClient.off(RTVIEvent.UserStartedSpeaking, onUserStarted),\n () => pcClient.off(RTVIEvent.UserStoppedSpeaking, onUserStopped),\n ];\n\n // Acquire mic (triggers browser permission prompt)\n await pcClient.initDevices();\n\n // Build headers using the browser Headers API (required by pipecat's APIRequest type)\n const requestHeaders = new Headers();\n requestHeaders.append('Authorization', `Bearer ${accessToken}`);\n requestHeaders.append('x-api-key', apiKey);\n requestHeaders.append('hive-bot-id', botId);\n requestHeaders.append('domain-authority', domainAuthority);\n requestHeaders.append('eventUrl', eventUrl);\n requestHeaders.append('eventId', eventId);\n requestHeaders.append('eventToken', eventToken);\n requestHeaders.append('ngrok-skip-browser-warning', 'true');\n\n // POST to /ai/ask-voice-socket → receives { ws_url } → WebSocketTransport connects\n await pcClient.startBotAndConnect({\n endpoint: `${baseUrl}/ai/ask-voice-socket`,\n headers: requestHeaders,\n requestData: {\n bot_id: botId,\n conversation_id: conversationId,\n voice: 'alloy',\n },\n });\n } catch (error) {\n if (!this.isLifecycleActive(connectToken)) return;\n console.error('[HiveGpt Voice] connect failed', error);\n this.callStateSubject.next('ended');\n await this.cleanupPipecatClient();\n this.statusTextSubject.next('Connection failed');\n throw error;\n }\n }\n\n private onPipecatConnected(): void {\n // Start the duration timer from the moment the session is live.\n this.callStartTime = Date.now();\n this.startDurationTimer();\n this.callStateSubject.next('connected');\n this.statusTextSubject.next('Connected');\n // Preserve any mute action the user made during \"connecting\".\n const shouldBeMuted = this.isMicMutedSubject.value;\n this.pcClient?.enableMic(!shouldBeMuted);\n this.isMicMutedSubject.next(shouldBeMuted);\n }\n\n private onPipecatDisconnected(): void {\n this.stopDurationTimer();\n this.callStartTime = 0;\n this.audioAnalyzer.stop();\n this.stopBotAudio();\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Call Ended');\n }\n\n private onBotReady(): void {\n // Retry track wiring in case tracks weren't ready at onConnected.\n this.startLocalMicAnalyzer();\n const botTrack = (this.pcClient?.tracks() as { bot?: { audio?: MediaStreamTrack } })\n ?.bot?.audio;\n if (botTrack) this.setupBotAudioTrack(botTrack);\n // Bot is initialised — signal that we're now waiting for user input.\n this.statusTextSubject.next('Listening...');\n }\n\n private startLocalMicAnalyzer(): void {\n const localTrack = (this.pcClient?.tracks() as { local?: { audio?: MediaStreamTrack } })\n ?.local?.audio;\n if (localTrack) {\n this.audioAnalyzer.start(new MediaStream([localTrack]));\n }\n }\n\n private onBotStartedSpeaking(): void {\n this.callStateSubject.next('talking');\n this.statusTextSubject.next('Talking...');\n // Mark user as no longer speaking when bot takes the turn.\n this.isUserSpeakingSubject.next(false);\n }\n\n private onBotStoppedSpeaking(): void {\n if (this.callStateSubject.value === 'talking') {\n this.callStateSubject.next('connected');\n this.statusTextSubject.next('Listening...');\n }\n }\n\n private setupBotAudioTrack(track: MediaStreamTrack): void {\n if (!this.botAudioElement) {\n this.botAudioElement = new Audio();\n this.botAudioElement.autoplay = true;\n (this.botAudioElement as any).playsInline = true;\n this.botAudioElement.setAttribute('playsinline', '');\n }\n const existing = (this.botAudioElement.srcObject as MediaStream | null)\n ?.getAudioTracks()[0];\n if (existing?.id === track.id) return;\n\n this.botAudioElement.pause();\n this.botAudioElement.srcObject = new MediaStream([track]);\n this.botAudioElement.play().catch((err) =>\n console.warn('[HiveGpt Voice] Bot audio play blocked', err),\n );\n }\n\n private stopBotAudio(): void {\n if (this.botAudioElement) {\n try {\n this.botAudioElement.pause();\n (this.botAudioElement.srcObject as MediaStream | null)\n ?.getAudioTracks()\n .forEach((t) => t.stop());\n this.botAudioElement.srcObject = null;\n } catch {\n // ignore\n }\n this.botAudioElement = null;\n }\n }\n\n async disconnect(): Promise<void> {\n this.lifecycleToken += 1;\n this.stopDurationTimer();\n this.callStartTime = 0;\n this.audioAnalyzer.stop();\n this.stopBotAudio();\n await this.cleanupPipecatClient();\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Call Ended');\n }\n\n private isLifecycleActive(token: number): boolean {\n return token === this.lifecycleToken;\n }\n\n private async cleanupPipecatClient(): Promise<void> {\n if (this.pcClient) {\n try {\n // Remove all event listeners before disconnecting\n this.pcEventCleanup.forEach(fn => fn());\n this.pcEventCleanup = [];\n await this.pcClient.disconnect();\n } catch {\n // ignore\n }\n this.pcClient = null;\n }\n }\n\n toggleMic(): void {\n const nextMuted = !this.isMicMutedSubject.value;\n // Reflect the user's intent immediately, even if connect is still in progress.\n this.isMicMutedSubject.next(nextMuted);\n if (this.pcClient) {\n this.pcClient.enableMic(!nextMuted);\n }\n if (nextMuted) this.isUserSpeakingSubject.next(false);\n }\n\n private startDurationTimer(): void {\n const tick = () => {\n if (this.callStartTime > 0) {\n const elapsed = Math.floor((Date.now() - this.callStartTime) / 1000);\n const m = Math.floor(elapsed / 60);\n const s = elapsed % 60;\n this.ngZone.run(() => this.durationSubject.next(`${m}:${String(s).padStart(2, '0')}`));\n }\n };\n tick();\n this.ngZone.runOutsideAngular(() => {\n this.durationInterval = setInterval(tick, 1000);\n });\n }\n\n private stopDurationTimer(): void {\n if (this.durationInterval) {\n clearInterval(this.durationInterval);\n this.durationInterval = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy, Output, EventEmitter, Injector } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VoiceAgentService, CallState } from '../../services/voice-agent.service';\nimport { AudioAnalyzerService } from '../../services/audio-analyzer.service';\nimport { VOICE_MODAL_CONFIG, VOICE_MODAL_CLOSE_CALLBACK, VoiceModalConfig } from '../../voice-modal-tokens';\n\n@Component({\n selector: 'hivegpt-voice-agent-modal',\n templateUrl: './voice-agent-modal.component.html',\n styleUrls: ['./voice-agent-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VoiceAgentModalComponent implements OnInit, OnDestroy {\n @Output() close = new EventEmitter<void>();\n @Input() apiUrl!: string;\n @Input() token!: string;\n @Input() botId!: string;\n @Input() conversationId!: string;\n @Input() apiKey: string = '';\n @Input() eventToken: string = '';\n @Input() eventId: string = '';\n @Input() eventUrl: string = '';\n @Input() domainAuthority: string = 'prod-lite';\n @Input() agentName: string = 'AI Assistant';\n @Input() agentRole: string = 'AI Agent Specialist';\n @Input() agentAvatar?: string;\n @Input() usersApiUrl: string = '';\n\n private injectedConfig: VoiceModalConfig | null = null;\n private onCloseCallback: (() => void) | null = null;\n\n constructor(\n public voiceAgentService: VoiceAgentService,\n public audioAnalyzer: AudioAnalyzerService,\n private injector: Injector,\n private cdr: ChangeDetectorRef\n ) {}\n\n /** Hardcoded voice agent avatar (Nia). */\n readonly displayAvatarUrl = 'https://www.jotform.com/uploads/mehmetkarakasli/form_files/1564593667676a8e85f23758.86945537_icon.png';\n\n callState: CallState = 'idle';\n statusText: string = '';\n duration: string = '00:00';\n isMicMuted: boolean = false;\n isUserSpeaking: boolean = false;\n audioLevels: number[] = [];\n private cdPending = false;\n private envelopeCache: { min: number; range: number }[] = [];\n private readonly MAX_BAR_HEIGHT = 42;\n\n /** True while the bot is speaking — drives avatar pulse animation and voice visualizer. */\n get isBotTalking(): boolean { return this.callState === 'talking'; }\n\n /** True while the user is actively speaking — drives waveform active color. */\n get isUserActive(): boolean { return this.callState === 'listening' && this.isUserSpeaking && !this.isMicMuted; }\n\n /** True during the brief processing pause between user speech and bot response. */\n get isProcessing(): boolean { return this.callState === 'connected' && this.statusText === 'Processing...'; }\n\n private subscriptions: Subscription[] = [];\n\n ngOnInit(): void {\n // When opened via Overlay, config is provided by injection\n this.injectedConfig = this.injector.get(VOICE_MODAL_CONFIG, null);\n this.onCloseCallback = this.injector.get(VOICE_MODAL_CLOSE_CALLBACK, null);\n if (this.injectedConfig) {\n this.apiUrl = this.injectedConfig.apiUrl;\n this.token = this.injectedConfig.token;\n this.botId = this.injectedConfig.botId;\n this.conversationId = this.injectedConfig.conversationId;\n this.apiKey = this.injectedConfig.apiKey ?? '';\n this.eventToken = this.injectedConfig.eventToken ?? '';\n this.eventId = this.injectedConfig.eventId ?? '';\n this.eventUrl = this.injectedConfig.eventUrl ?? '';\n this.domainAuthority = this.injectedConfig.domainAuthority ?? 'prod-lite';\n this.agentName = this.injectedConfig.agentName ?? this.agentName;\n this.agentRole = this.injectedConfig.agentRole ?? this.agentRole;\n this.agentAvatar = this.injectedConfig.agentAvatar;\n this.usersApiUrl = this.injectedConfig.usersApiUrl ?? this.usersApiUrl;\n }\n\n this.subscriptions.push(\n this.voiceAgentService.callState$.subscribe(state => {\n this.callState = state;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.statusText$.subscribe(text => {\n this.statusText = text;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.duration$.subscribe(duration => {\n this.duration = duration;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.isMicMuted$.subscribe(muted => {\n this.isMicMuted = muted;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.isUserSpeaking$.subscribe(speaking => {\n this.isUserSpeaking = speaking;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.audioLevels$.subscribe(levels => {\n this.audioLevels = levels;\n this.scheduleCD();\n })\n );\n\n this.initEnvelopeCache(60);\n\n // Always start from a fresh voice session to avoid stale/disconnected state flashes.\n void this.openFreshCallSession();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.disconnect();\n }\n\n /** Batch multiple subscription emissions into a single CD cycle per frame. */\n private scheduleCD(): void {\n if (!this.cdPending) {\n this.cdPending = true;\n requestAnimationFrame(() => {\n this.cdPending = false;\n this.cdr.markForCheck();\n });\n }\n }\n\n isConnecting: boolean = false;\n\n async startCall(): Promise<void> {\n if (this.isConnecting || (this.callState !== 'idle' && this.callState !== 'ended')) return;\n this.isConnecting = true;\n try {\n await this.voiceAgentService.connect(\n this.apiUrl,\n this.token,\n this.botId,\n this.conversationId,\n this.apiKey,\n this.eventToken,\n this.eventId,\n this.eventUrl,\n this.domainAuthority,\n this.usersApiUrl || undefined,\n );\n } catch (error) {\n console.error('Failed to connect voice agent:', error);\n } finally {\n this.isConnecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n await this.voiceAgentService.disconnect();\n }\n\n private async openFreshCallSession(): Promise<void> {\n await this.voiceAgentService.prepareFreshSession();\n await this.startCall();\n }\n\n toggleMic(): void {\n this.voiceAgentService.toggleMic();\n }\n\n /** Pre-compute gaussian envelope so the hot path is a single lookup + multiply. */\n private initEnvelopeCache(total: number): void {\n const center = (total - 1) / 2;\n const sigma = total / 5;\n this.envelopeCache = [];\n for (let i = 0; i < total; i++) {\n const envelope = Math.exp(-((i - center) ** 2) / (2 * sigma * sigma));\n const minH = 2 + envelope * 3;\n const maxH = 4 + envelope * 38;\n this.envelopeCache.push({ min: minH, range: maxH - minH });\n }\n }\n\n /** Returns a 0–1 scale factor for the waveform bar transform (GPU-composited). */\n getWaveformScale(level: number, index: number): number {\n const cached = this.envelopeCache[index];\n if (!cached) return 0.05;\n const n = Math.min(100, Math.max(0, level ?? 0));\n return (cached.min + (n / 100) * cached.range) / this.MAX_BAR_HEIGHT;\n }\n\n trackByIndex(index: number): number { return index; }\n\n /** Status label for active call — driven by callState + service statusText. */\n get statusLabel(): string {\n switch (this.callState) {\n case 'connecting': return 'Connecting...';\n case 'talking': return 'Talking...';\n case 'listening': return 'Listening...';\n // 'connected' covers: initial connect, between turns (Listening / Processing)\n case 'connected': return this.statusText || 'Connected';\n default: return this.statusText || '';\n }\n }\n\n /** Call Again: reset to idle then start a new call. */\n async callAgain(): Promise<void> {\n await this.openFreshCallSession();\n }\n\n /** Back to Chat: close modal and disconnect. */\n backToChat(): void {\n this.endCall();\n }\n\n /** End call but keep modal open to show Call Ended + Call Again / Back to Chat. */\n hangUp(): void {\n this.disconnect();\n }\n\n async endCall(): Promise<void> {\n await this.disconnect();\n this.onCloseCallback?.();\n this.close.emit();\n }\n}\n","<div class=\"voice-agent-modal-overlay\" (click)=\"endCall()\">\n <div\n class=\"voice-container voice-agent-modal\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-left\">\n <div class=\"header-icon\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 1C8.13 1 5 4.13 5 8V14C5 17.87 8.13 21 12 21C15.87 21 19 17.87 19 14V8C19 4.13 15.87 1 12 1Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M12 23C10.34 23 9 21.66 9 20H15C15 21.66 13.66 23 12 23Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n <span class=\"header-title\">Voice</span>\n </div>\n <button\n class=\"close-button\"\n (click)=\"endCall()\"\n type=\"button\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <!-- Avatar Section with glow -->\n <div class=\"avatar-section\">\n <div class=\"avatar-glow\" [class.glow-talking]=\"isBotTalking\" [class.glow-listening]=\"callState === 'listening'\"></div>\n\n <!-- Particle ring — visible while bot is talking -->\n <div *ngIf=\"isBotTalking\" class=\"particles-container\">\n <span *ngFor=\"let i of [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]\"\n class=\"particle\"\n [style.--i]=\"i\"\n [style.animationDelay]=\"(i * 0.15) + 's'\">\n </span>\n </div>\n\n <div class=\"avatar-wrapper\" [class.speaking]=\"isBotTalking\" [class.listening]=\"callState === 'listening'\">\n <img class=\"avatar-image\" [src]=\"displayAvatarUrl\" alt=\"Nia\" />\n </div>\n </div>\n\n <!-- Agent Info: Nia + Collaboration Manager AI Agent Specialist -->\n <div class=\"agent-info\">\n <div class=\"agent-name\">\n Nia\n <span class=\"ai-badge\">AI</span>\n </div>\n <p class=\"agent-role\">COP30 AI Agent </p>\n </div>\n\n <!-- Start Call (when idle only) -->\n <div *ngIf=\"callState === 'idle'\" class=\"start-call-section\">\n <p *ngIf=\"statusText === 'Connection failed'\" class=\"error-message\">\n {{ statusText }}\n </p>\n <button\n class=\"start-call-button\"\n type=\"button\"\n [disabled]=\"isConnecting\"\n (click)=\"startCall()\"\n >\n <span *ngIf=\"isConnecting\">Connecting...</span>\n <span *ngIf=\"!isConnecting && statusText === 'Connection failed'\"\n >Retry</span\n >\n <span *ngIf=\"!isConnecting && statusText !== 'Connection failed'\"\n >Start Call</span\n >\n </button>\n </div>\n\n <!-- Call Ended: status + Call Again / Back to Chat -->\n <div *ngIf=\"callState === 'ended'\" class=\"call-ended-section\">\n <p class=\"call-ended-status\">\n <span class=\"status-text\">Call Ended</span>\n <span class=\"status-timer\">{{ duration }}</span>\n </p>\n <div class=\"call-ended-controls\">\n <button\n class=\"action-btn\"\n type=\"button\"\n (click)=\"callAgain()\"\n title=\"Call Again\"\n >\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </svg>\n Call Again\n </button>\n <button\n class=\"action-btn\"\n type=\"button\"\n (click)=\"backToChat()\"\n title=\"Back to Chat\"\n >\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n Back to Chat\n </button>\n </div>\n </div>\n\n <!-- Status (when connecting or in-call: Talking... / Listening / Connected + timer) -->\n <div\n class=\"status-indicator status-inline\"\n *ngIf=\"callState !== 'idle' && callState !== 'ended'\"\n >\n <div *ngIf=\"callState === 'connecting'\" class=\"status-connecting\">\n <svg\n class=\"spinner\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"31.416\"\n stroke-dashoffset=\"31.416\"\n >\n <animate\n attributeName=\"stroke-dasharray\"\n dur=\"2s\"\n values=\"0 31.416;15.708 15.708;0 31.416;0 31.416\"\n repeatCount=\"indefinite\"\n />\n <animate\n attributeName=\"stroke-dashoffset\"\n dur=\"2s\"\n values=\"0;-15.708;-31.416;-31.416\"\n repeatCount=\"indefinite\"\n />\n </circle>\n </svg>\n <span class=\"status-text\">{{ statusText }}</span>\n </div>\n <div\n *ngIf=\"callState !== 'connecting'\"\n class=\"status-connected status-inline-row\"\n >\n <span class=\"status-text\" [class.status-talking]=\"isBotTalking\" [class.status-listening]=\"callState === 'listening'\" [class.status-processing]=\"isProcessing\">\n {{ statusLabel }}\n </span>\n\n <!-- Animated bars — visible while bot is talking -->\n <div *ngIf=\"isBotTalking\" class=\"voice-visualizer\">\n <div class=\"vbar\"></div>\n <div class=\"vbar\"></div>\n <div class=\"vbar\"></div>\n <div class=\"vbar\"></div>\n </div>\n\n <!-- Bouncing dots — visible during processing pause -->\n <div *ngIf=\"isProcessing\" class=\"processing-dots\">\n <span></span><span></span><span></span>\n </div>\n\n <span class=\"status-timer\">{{ duration }}</span>\n </div>\n </div>\n\n <!-- Waveform: space always reserved during active call, fades in when user speaks (unmuted) -->\n <div\n *ngIf=\"callState === 'connected' || callState === 'listening' || callState === 'talking'\"\n class=\"waveform-container\"\n [class.waveform-visible]=\"isUserActive\"\n >\n <div class=\"waveform-bars\">\n <div\n *ngFor=\"let level of audioLevels; let i = index; trackBy: trackByIndex\"\n class=\"waveform-bar\"\n [class.active]=\"isUserActive\"\n [style.transform]=\"'scaleY(' + getWaveformScale(level, i) + ')'\"\n ></div>\n </div>\n </div>\n\n <!-- Call Controls (when connected) -->\n <div\n class=\"controls\"\n *ngIf=\"\n callState === 'connecting' ||\n callState === 'connected' ||\n callState === 'listening' ||\n callState === 'talking'\n \"\n >\n <div\n style=\"\n display: flex;\n align-items: center;\n gap: 2px;\n flex-direction: column;\n \"\n >\n <button\n class=\"control-btn mic-btn\"\n [class.muted]=\"isMicMuted\"\n (click)=\"toggleMic()\"\n type=\"button\"\n [title]=\"isMicMuted ? 'Unmute' : 'Mute'\"\n >\n <!-- Microphone icon (unmuted) -->\n <svg\n *ngIf=\"!isMicMuted\"\n width=\"24\"\n height=\"24\"\n viewBox=\"-5 0 32 32\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <g transform=\"translate(-105, -307)\">\n <path\n d=\"M111,314 C111,311.238 113.239,309 116,309 C118.761,309 121,311.238 121,314 L121,324 C121,326.762 118.761,329 116,329 C113.239,329 111,326.762 111,324 L111,314 L111,314 Z M116,331 C119.866,331 123,327.866 123,324 L123,314 C123,310.134 119.866,307 116,307 C112.134,307 109,310.134 109,314 L109,324 C109,327.866 112.134,331 116,331 L116,331 Z M127,326 L125,326 C124.089,330.007 120.282,333 116,333 C111.718,333 107.911,330.007 107,326 L105,326 C105.883,330.799 110.063,334.51 115,334.955 L115,337 L114,337 C113.448,337 113,337.448 113,338 C113,338.553 113.448,339 114,339 L118,339 C118.552,339 119,338.553 119,338 C119,337.448 118.552,337 118,337 L117,337 L117,334.955 C121.937,334.51 126.117,330.799 127,326 L127,326 Z\"\n />\n </g>\n </svg>\n <!-- Microphone icon (muted) -->\n <svg\n *ngIf=\"isMicMuted\"\n width=\"24\"\n height=\"24\"\n viewBox=\"-5 0 32 32\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <g transform=\"translate(-105, -307)\">\n <path\n d=\"M111,314 C111,311.238 113.239,309 116,309 C118.761,309 121,311.238 121,314 L121,324 C121,326.762 118.761,329 116,329 C113.239,329 111,326.762 111,324 L111,314 L111,314 Z M116,331 C119.866,331 123,327.866 123,324 L123,314 C123,310.134 119.866,307 116,307 C112.134,307 109,310.134 109,314 L109,324 C109,327.866 112.134,331 116,331 L116,331 Z M127,326 L125,326 C124.089,330.007 120.282,333 116,333 C111.718,333 107.911,330.007 107,326 L105,326 C105.883,330.799 110.063,334.51 115,334.955 L115,337 L114,337 C113.448,337 113,337.448 113,338 C113,338.553 113.448,339 114,339 L118,339 C118.552,339 119,338.553 119,338 C119,337.448 118.552,337 118,337 L117,337 L117,334.955 C121.937,334.51 126.117,330.799 127,326 L127,326 Z\"\n />\n </g>\n <path\n d=\"M2 2 L30 30\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n <span class=\"control-label\">Mute</span>\n </div>\n\n <div\n style=\"\n display: flex;\n align-items: center;\n gap: 2px;\n flex-direction: column;\n \"\n >\n <button\n class=\"control-btn end-call-btn\"\n (click)=\"hangUp()\"\n type=\"button\"\n title=\"End Call\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n <span class=\"control-label\">End Call</span>\n </div>\n </div>\n </div>\n</div>\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BotsService {\n eventDescription = new Subject();\n bot_api = '';\n constructor(private http: HttpClient) { }\n\n setBaseUrl(url: string): void {\n this.bot_api = url.replace(/\\/$/, '') + '/';\n }\n\n fetchSpeechAuthorizationToken(botId: string, apiKey: string, domain: string): Observable<string> {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'hive-bot-id': botId,\n 'domain-authority': domain\n });\n\n const url = `${this.bot_api}speech/issue_token`;\n return this.http.get(url, { headers }).pipe(\n map((resp: any) => {\n return resp.token;\n })\n );\n }\n\n getWorkflowsByOrgId(orgId: string): Observable<any> {\n const url = `${this.bot_api}workflows?org_id=${orgId}`;\n return this.http.get(url);\n }\n\n getWorkflowExecutionById(executionId: string): Observable<any> {\n const apiUrl = `${this.bot_api}workflows/execution/${executionId}`;\n return this.http.get(apiUrl);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConversationService {\n private conversationStorageKeyPrefix = 'conversationKey_';\n private sessionStorageKeyPrefix = 'sessionKey_';\n\n private userSpecificNotification: Subject<any> = new Subject<any>();\n\n constructor() { }\n\n generateKey(): string {\n const timestamp = Math.floor(new Date().getTime() / 1000).toString(16);\n const randomHex = 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, () => {\n return Math.floor(Math.random() * 16).toString(16);\n });\n return timestamp + randomHex;\n }\n\n /**\n * Returns a stable conversation id persisted in localStorage.\n *\n * IMPORTANT: call-sites should pass an event-specific scope when needed (e.g. eventId)\n * so switching events does not reuse the previous event's conversation thread.\n */\n getKey(botId: string, resetKey: boolean = false, scope?: string): string {\n const normalizedScope =\n scope != null && String(scope).trim() !== '' ? String(scope).trim() : '';\n const storageKey = `${this.conversationStorageKeyPrefix}${botId}${\n normalizedScope ? `_${normalizedScope}` : ''\n }`;\n let value = localStorage.getItem(storageKey);\n\n if (!value || resetKey) {\n value = this.generateKey();\n localStorage.setItem(storageKey, value);\n }\n\n return value;\n }\n\n getSessionKey(sessionId: string, resetKey: boolean = false, scope?: string): string {\n const normalizedScope =\n scope != null && String(scope).trim() !== '' ? String(scope).trim() : '';\n const storageKey = `${this.sessionStorageKeyPrefix}${sessionId}${\n normalizedScope ? `_${normalizedScope}` : ''\n }`;\n let value = localStorage.getItem(storageKey);\n\n if (!value || resetKey) {\n value = this.generateKey();\n localStorage.setItem(storageKey, value);\n }\n\n return value;\n }\n\n sendValidatedUserData(message: any) {\n this.userSpecificNotification.next(message);\n }\n\n getUserSpecificNotification(): Observable<any> {\n return this.userSpecificNotification.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslationService {\n private eventId: string | null = null;\n\n setEventId(id: string) {\n this.eventId = id;\n }\n\n getTranslation(key: string): string {\n const lang = (\n localStorage.getItem('defaultLanguage-' + this.eventId) || 'en'\n ).replace(/^\"|\"$/g, '');\n\n const entry = this.translationsData.find((item) => item.Key === key);\n\n if (!entry) {\n return key; // fallback\n }\n\n return entry.Translations[lang] || entry.DefaultValue || key;\n }\n\n private getLang(eventId?: string | null): string {\n const suffix = eventId ? `-${eventId}` : '';\n const storageKey = `defaultLanguage${suffix}`;\n\n return localStorage.getItem(storageKey) || 'en';\n }\n\n private translationsData: any[] = [\n {\n Key: \"Copy\",\n DefaultValue: \"Copy\",\n Translations: {\n en: \"Copy\",\n fr: \"Copier\",\n it: \"Copia\",\n es: \"Copiar\",\n de: \"Kopieren\",\n \"pt-br\": \"Copiar\",\n ar: \"نسخ\",\n zh: \"复制\",\n ru: \"Копировать\"\n }\n}\n,\n {\n\n Key: \"May I assist you with anything else\",\n DefaultValue: \"Great. May I assist you with anything else?\",\n Translations: {\n en: \"Great. May I assist you with anything else?\",\n fr: \"Parfait. Puis-je vous aider avec autre chose ?\",\n it: \"Perfetto. Posso aiutarti con qualcos'altro?\",\n es: \"Genial. ¿Puedo ayudarte con algo más?\",\n de: \"Super. Kann ich Ihnen noch bei etwas anderem helfen?\",\n \"pt-br\": \"Ótimo. Posso ajudar com mais alguma coisa?\",\n ar: \"رائع. هل يمكنني مساعدتك في أي شيء آخر؟\",\n zh: \"太好了。还有什么我可以帮您的吗?\",\n ru: \"Отлично. Могу ли я помочь вам с чем-то ещё?\"\n }\n},\n {\n Key: \"We are sorry we've not been able to answer your question\",\n DefaultValue: \"We are sorry we've not been able to answer your question. However, our dedicated support team is happy to help. Please <a href=\\\"mailto:support@social27.com\\\">click here</a> and a human agent will assist you as soon as possible.\",\n Translations: {\n en: \"We are sorry we've not been able to answer your question. However, our dedicated support team is happy to help. Please <a href=\\\"mailto:support@social27.com\\\">click here</a> and a human agent will assist you as soon as possible.\",\n fr: \"Nous sommes désolés de ne pas avoir pu répondre à votre question. Cependant, notre équipe d'assistance se fera un plaisir de vous aider. Veuillez <a href=\\\"mailto:support@social27.com\\\">cliquer ici</a> et un agent humain vous assistera dès que possible.\",\n it: \"Ci dispiace di non essere riusciti a rispondere alla tua domanda. Tuttavia, il nostro team di supporto dedicato sarà lieto di aiutarti. Ti preghiamo di <a href=\\\"mailto:support@social27.com\\\">fare clic qui</a> e un operatore umano ti assisterà al più presto.\",\n es: \"Lamentamos no haber podido responder a tu pregunta. Sin embargo, nuestro equipo de soporte estará encantado de ayudarte. Por favor, <a href=\\\"mailto:support@social27.com\\\">haz clic aquí</a> y un agente humano te asistirá lo antes posible.\",\n de: \"Es tut uns leid, dass wir Ihre Frage nicht beantworten konnten. Unser engagiertes Support-Team hilft Ihnen jedoch gerne weiter. Bitte <a href=\\\"mailto:support@social27.com\\\">klicken Sie hier</a>, und ein menschlicher Mitarbeiter wird Ihnen so bald wie möglich helfen.\",\n \"pt-br\": \"Lamentamos não ter conseguido responder à sua pergunta. No entanto, nossa equipe de suporte dedicada ficará feliz em ajudar. Por favor, <a href=\\\"mailto:support@social27.com\\\">clique aqui</a> e um agente humano o ajudará o mais rápido possível.\",\n ar: \"نأسف لعدم تمكننا من الإجابة على سؤالك. ومع ذلك، يسعد فريق الدعم المخصص لدينا بمساعدتك. يرجى <a href=\\\"mailto:support@social27.com\\\">النقر هنا</a> وسيساعدك أحد الوكلاء البشريين في أقرب وقت ممكن.\",\n zh: \"很抱歉我们未能回答您的问题。不过,我们的专属支持团队很乐意为您提供帮助。请<a href=\\\"mailto:support@social27.com\\\">点击这里</a>,人工客服将尽快为您提供协助。\",\n ru: \"К сожалению, мы не смогли ответить на ваш вопрос. Однако наша служба поддержки с радостью вам поможет. Пожалуйста, <a href=\\\"mailto:support@social27.com\\\">нажмите здесь</a>, и наш оператор свяжется с вами как можно скорее.\"\n }\n},\n {\n Key: 'Ask anything',\n DefaultValue: 'Ask anything',\n Translations: {\n en: 'Ask anything',\n fr: 'Demandez ce que vous voulez',\n it: 'Chiedi qualsiasi cosa',\n es: 'Pregunta lo que quieras',\n de: 'Frag alles',\n 'pt-br': 'Pergunte qualquer coisa',\n ar: 'اسأل أي شيء',\n zh: '随便问',\n ru: 'Спросите что угодно',\n },\n },\n {\n Key: 'Assistant',\n DefaultValue: 'Assistant',\n Translations: {\n en: 'Assistant',\n fr: 'Assistant',\n it: 'Assistente',\n es: 'Asistente',\n de: 'Assistent',\n 'pt-br': 'Assistente',\n ar: 'مساعد',\n zh: '助手',\n ru: 'Ассистент',\n },\n },\n {\n Key: 'Your personal or company information is kept private and secure within this chat.',\n DefaultValue:\n 'Your personal or company information is kept private and secure within this chat.',\n Translations: {\n en: 'Your personal or company information is kept private and secure within this chat.',\n fr: 'Vos informations personnelles ou celles de votre entreprise sont conservées privées et sécurisées dans cette conversation.',\n it: \"Le tue informazioni personali o aziendali sono mantenute private e sicure all'interno di questa chat.\",\n es: 'Tu información personal o de la empresa se mantiene privada y segura dentro de este chat.',\n de: 'Ihre persönlichen oder geschäftlichen Informationen bleiben in diesem Chat privat und sicher.',\n 'pt-br':\n 'Suas informações pessoais ou da empresa são mantidas privadas e seguras dentro deste chat.',\n ar: 'تظل معلوماتك الشخصية أو معلومات شركتك خاصة وآمنة داخل هذه المحادثة.',\n zh: '您的个人或公司信息在此聊天中保持私密和安全。',\n ru: 'Ваша личная или корпоративная информация остается конфиденциальной и защищенной в этом чате.',\n },\n },\n {\n Key: 'Send message',\n DefaultValue: 'Send message',\n Translations: {\n en: 'Send message',\n fr: 'Envoyer un message',\n it: 'Invia messaggio',\n es: 'Enviar mensaje',\n de: 'Nachricht senden',\n 'pt-br': 'Enviar mensagem',\n ar: 'إرسال رسالة',\n zh: '发送消息',\n ru: 'Отправить сообщение',\n },\n },\n {\n Key: 'Platform GPT',\n DefaultValue: 'Platform GPT',\n Translations: {\n en: 'Platform GPT',\n fr: 'Plateforme GPT',\n it: 'Piattaforma GPT',\n es: 'Plataforma GPT',\n de: 'Plattform GPT',\n 'pt-br': 'Plataforma GPT',\n ar: 'منصة GPT',\n zh: '平台 GPT',\n ru: 'Платформа GPT',\n },\n },\n {\n Key: 'New Chat',\n DefaultValue: 'New Chat',\n Translations: {\n en: 'New Chat',\n fr: 'Nouvelle conversation',\n it: 'Nuova chat',\n es: 'Nuevo chat',\n de: 'Neuer Chat',\n 'pt-br': 'Novo chat',\n ar: 'محادثة جديدة',\n zh: '新聊天',\n ru: 'Новый чат',\n },\n },\n {\n Key: 'You',\n DefaultValue: 'You',\n Translations: {\n en: 'You',\n fr: 'Vous',\n it: 'Tu',\n es: 'Tú',\n de: 'Du',\n 'pt-br': 'Você',\n ar: 'أنت',\n zh: '您',\n ru: 'Вы',\n },\n },\n {\n Key: 'Write your message',\n DefaultValue: 'Write your message',\n Translations: {\n en: 'Write your message',\n fr: 'Écrivez votre message',\n it: 'Scrivi il tuo messaggio',\n es: 'Escribe tu mensaje',\n de: 'Schreiben Sie Ihre Nachricht',\n 'pt-br': 'Escreva sua mensagem',\n ar: 'اكتب رسالتك',\n zh: '写下您的消息',\n ru: 'Напишите ваше сообщение',\n },\n },\n {\n Key: 'Send',\n DefaultValue: 'Send',\n Translations: {\n en: 'Send',\n fr: 'Envoyer',\n it: 'Invia',\n es: 'Enviar',\n de: 'Senden',\n 'pt-br': 'Enviar',\n ar: 'إرسال',\n zh: '发送',\n ru: 'Отправить',\n },\n },\n\n {\n Key: 'Call Interface',\n DefaultValue: 'Call Interface',\n Translations: {\n en: 'Call Interface',\n fr: \"Interface d'appel\",\n it: 'Interfaccia chiamata',\n es: 'Interfaz de llamada',\n de: 'Anrufoberfläche',\n 'pt-br': 'Interface de chamada',\n ar: 'واجهة الاتصال',\n zh: '呼叫界面',\n ru: 'Интерфейс звонка',\n },\n },\n {\n Key: 'Close',\n DefaultValue: 'Close',\n Translations: {\n en: 'Close',\n fr: 'Fermer',\n it: 'Chiudi',\n es: 'Cerrar',\n de: 'Schließen',\n 'pt-br': 'Fechar',\n ar: 'إغلاق',\n zh: '关闭',\n ru: 'Закрыть',\n },\n },\n ];\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { IVideo } from '../../models/video';\nimport { DOCUMENT } from '@angular/common';\n\n@Component({\n selector: 'app-video-player',\n templateUrl: './video-player.component.html',\n styleUrls: ['./video-player.component.scss'],\n})\nexport class VideoPlayerComponent\n implements OnInit, AfterViewInit {\n @Input() currentUserId: string;\n @Input() user: any;\n @Input() eventId: string;\n @Input() videoObj: IVideo;\n @Input() isDev: boolean;\n myFollowingList: Array<string>;\n myPendingSentRequests: Array<string>;\n @Input() type: string;\n isMuted: boolean = true;\n private observer: IntersectionObserver;\n isFullscreen: boolean = false;\n @ViewChild('video') video: any;\n @ViewChild('fullscreenvideo') fullscreenvideo: any;\n isFullscreenvideoPlaying: boolean = false;\n\n @Output() connectWithUser = new EventEmitter<string>();\n @Output() scheduleMeeting = new EventEmitter<any>();\n\n constructor(\n @Inject(DOCUMENT) private doc: any,\n private el: ElementRef,\n private cdr: ChangeDetectorRef\n ) {\n }\n\n ngOnInit(): void {\n }\n\n toggleSound(isMuted = null) {\n this.isMuted = isMuted != null ? isMuted : !this.isMuted;\n setTimeout(() => {\n const video: any = this.doc\n .getElementById(this.video.id.toString());\n if (video) {\n video.muted = this.isMuted;\n this.video.isMuted = this.isMuted;\n }\n\n this.cdr.markForCheck();\n //this.muteToggle.emit(this.isMuted);\n })\n}\n\n togglePlay(playState: boolean, videoEl) {\n this.videoObj.isPlaying = !this.videoObj.isPlaying;\n setTimeout(() => { \n if (playState) { \n this.videoObj.isPlaying = true;\n videoEl.play();\n var pauseBtn = document.getElementById('pause-btn');\n pauseBtn.classList.add('hide-pause-btn');\n\n this.toggleSound(false);\n }\n else{\n this.videoObj.isPlaying = false;\n videoEl.pause();\n }\n this.cdr.markForCheck();\n })\n }\n \n ngAfterViewInit() {\n if (window.innerWidth <= 576) {\n this.observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting === true) {\n this.video.nativeElement.play();\n } else {\n this.video.nativeElement.pause();\n }\n },\n {\n threshold: 0.75,\n }\n );\n\n this.observer.observe(this.el.nativeElement as HTMLElement);\n }\n }\n\n toggleFullscreen() {\n this.isFullscreen = !this.isFullscreen;\n if (!this.isFullscreen) {\n this.fullscreenvideo.nativeElement.pause();\n }\n }\n\n toggleFullscreenPlay() {\n this.isFullscreenvideoPlaying = !this.isFullscreenvideoPlaying;\n\n if (this.isFullscreenvideoPlaying) {\n this.fullscreenvideo.nativeElement.play();\n } else {\n this.fullscreenvideo.nativeElement.pause();\n }\n }\n\n followUser(userId) {\n this.connectWithUser.emit(userId);\n }\n\n checkPendingSentRequest(userId) {\n return this.myPendingSentRequests?.find(a => a == userId);\n }\n\n canUnfollowUser() {\n return false;\n }\n\n canFollowUser() {\n return true;\n }\n\n getIniNames(firstName, lastName) {\n if(!firstName && !lastName) {\n return '';\n }\n \n if (firstName && lastName)\n return (\n firstName.charAt(0).toUpperCase() + lastName.charAt(0).toUpperCase()\n );\n else return firstName.charAt(0).toUpperCase();\n }\n}\n","<div class=\"video-wrapper\" >\n <div class=\"overlymask-video\"></div>\n <video (click)=\"toggleFullscreen()\" #video [loop]=\"true\" [muted]=\"isMuted\" [src]=\"videoObj.processedUrls || videoObj.url\" playsinline\n [controls]=\"false\"></video>\n <div class=\"main-controls\" [class.no-opacity]=\"video.isPlaying\">\n <button mat-icon-button *ngIf=\"!videoObj.isPlaying\"\n attr.aria-label=\"Play Video\"\n title=\"Play Video\" class=\"play-pause-btn\"\n (click)=\"togglePlay(true, video)\">\n <!-- <mat-icon alt=\"Play\">play_arrow</mat-icon> -->\n <span class=\"material-icons notranslate \" aria-hidden=\"true\">play_circle_outline</span>\n </button>\n\n <button mat-icon-button id=\"pause-btn\" [hidden]=\"!videoObj.isPlaying\" class=\"pause_btn play-pause-btn playing\"\n title=\"Pause Video\"\n [class.half-opacity]=\"video.isPlaying\" (click)=\"togglePlay(false, video)\">\n <!-- <mat-icon alt=\"Pause\">pause</mat-icon> -->\n <span class=\"material-icons notranslate \" aria-hidden=\"true\">pause_circle_outline</span>\n </button>\n </div>\n <div class=\"video-actions\">\n <button class=\"button-trasparent action\" (click)=\"toggleSound()\" title=\"Mute\" *ngIf=\"isMuted\">\n <span class=\"material-icons notranslate \" aria-hidden=\"true\">volume_off</span>\n </button>\n <button class=\"button-trasparent action\" (click)=\"toggleSound()\" title=\"Unmute\" *ngIf=\"!isMuted\">\n <span class=\"material-icons notranslate \" aria-hidden=\"true\">volume_up</span>\n </button>\n\n </div>\n</div>\n\n<div class=\"full-screen\" *ngIf=\"isFullscreen\" [ngClass]=\"{'show': isFullscreen}\">\n <div class=\"video-wrapper\">\n <video #fullscreenvideo (click)=\"toggleFullscreenPlay()\" [loop]=\"true\" [muted]=\"isMuted\" [src]=\"videoObj.processedUrls || videoObj.url\"\n playsinline [controls]=\"false\"></video>\n <div (click)=\"toggleFullscreen()\" class=\"close-btn\">\n <span class=\"material-icons notranslate \">clear</span>\n </div>\n <div class=\"video-actions\">\n <button *ngIf=\"!video.isPlaying\" title=\"Play\"\n class=\"material-icons notranslate body-text-color fs-h2 play position-absolute transparent-btn\" (click)=\"togglePlay(true, video)\">\n play_circle_outline\n </button>\n <button id=\"pause-btn\" [hidden]=\"!videoObj.isPlaying\" title=\"Pause\"\n class=\"pause_btn material-icons body-text-color fs-h2 play position-absolute transparent-btn\"\n [class.half-opacity]=\"video.isPlaying\" (click)=\"togglePlay(false, video)\">\n pause_circle_outline\n </button>\n </div>\n </div>\n</div>\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { MatDrawer } from '@angular/material/sidenav';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { of, Subscription } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { formatNow, formatTimeStamps } from '../../utils/utils';\nimport {\n dev_environment,\n prod_environment,\n} from '../../../environments/environment';\nimport { ConversationService } from '../conversation.service';\nimport { Observable } from 'rxjs';\nimport { SocketService } from '../socket-service.service';\n\n@Component({\n selector: 'lib-bot-html-editor',\n templateUrl: './bot-html-editor.component.html',\n styleUrls: ['./bot-html-editor.component.css'],\n})\nexport class BotHtmlEditorComponent implements OnInit {\n @Input() editorContent: Observable<string>;\n @Input() isDocInEditMode: any;\n @Input() documentContent: any;\n @Input() conversationId: any;\n @Input() botId: any;\n\n documentName: any = 'doc name';\n\n environment: {\n USERS_API;\n BASE_URL;\n AGENTS_API;\n };\n\n quillConfig = {\n toolbar: [\n [{ header: '1' }, { header: '2' }, { font: [] }],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['bold', 'italic', 'underline'],\n ['link'],\n ['clean'],\n ],\n };\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient) {}\n\n ngOnInit(): void {\n this.environment = prod_environment;\n\n setTimeout(() => {\n if (this.isDocInEditMode) {\n console.log('In Edit mode');\n this.filldataInForm();\n } else {\n console.log('In save mode');\n }\n }, 2500);\n }\n\n filldataInForm() {\n if (this.documentContent) {\n this.documentName = this.documentContent?.name;\n this.editorContent = this.documentContent?.content;\n this.cdr.detectChanges();\n }\n }\n\n saveContent() {\n if (!this.isDocInEditMode) {\n this.saveContent_http().subscribe();\n } else {\n this.saveContent_http().subscribe();\n }\n }\n\n saveContent_http() {\n console.log('API call function');\n\n const url = `${this.environment.AGENTS_API}/ConversationDocuments?conversationId=${this.conversationId}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n });\n\n let data = {\n name: this.documentName,\n content: this.editorContent,\n };\n\n return this.http.post(url, data, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n // alert('Saved Successfully');\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n\n updateContent_http() {\n console.log('API call function');\n\n const url = `${this.environment.AGENTS_API}/ConversationDocuments/rename?conversationId=${this.conversationId}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n });\n\n let data = {\n name: this.documentName,\n content: this.editorContent,\n };\n\n return this.http.put(url, data, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n // alert('Updated Successfully');\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n}\n","<div style=\"padding: 12px\">\n <div style=\"margin-top: 42px\" class=\"form-group\">\n <input [(ngModel)]=\"documentName\" class=\"form-control\" type=\"text\" />\n <button (click)=\"saveContent()\" class=\"save-btn\">Save</button>\n </div>\n\n <quill-editor\n [(ngModel)]=\"editorContent\"\n [modules]=\"quillConfig\"\n ></quill-editor>\n</div>\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { TranslationService } from '../translations/translation.service';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n} from '@angular/core';\nimport { MatDrawer } from '@angular/material/sidenav';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { of, Subject, Subscription } from 'rxjs';\nimport { catchError, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { PlatformTokenRefreshService } from '../../services/platform-token-refresh.service';\nimport { formatNow, formatTimeStamps } from '../../utils/utils';\nimport {\n dev_environment,\n prod_environment,\n} from '../../../environments/environment';\nimport { ConversationService } from '../conversation.service';\nimport { Observable } from 'rxjs';\n\nimport { FormBuilder, Validators } from '@angular/forms';\nimport * as SpeechSDK from 'microsoft-cognitiveservices-speech-sdk';\nimport { BotsService } from '../bot.service';\nimport * as marked from 'marked';\nimport { VoiceAgentService } from '../voice-agent/services/voice-agent.service';\nimport { VoiceAgentModalComponent } from '../voice-agent/components/voice-agent-modal/voice-agent-modal.component';\nimport {\n VOICE_MODAL_CONFIG,\n VOICE_MODAL_CLOSE_CALLBACK,\n VoiceModalConfig,\n} from '../voice-agent/voice-modal-tokens';\n\nexport enum eClassificationType {\n Live = '6040dce57615f0770af14256',\n OnDemand = '6040dce57615f0770af14257',\n Breakout = '6040dce57615f0770af14258',\n}\n\n@Component({\n selector: 'hivegpt-chat-drawer-package',\n templateUrl: './chat-drawer.component.html',\n styleUrls: ['./chat-drawer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChatDrawerComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('chatMain') private chatMain: ElementRef;\n @ViewChild('myInput', { static: false })\n myInput!: ElementRef<HTMLTextAreaElement>; // Reference to the textarea\n @ViewChildren('closeplaygroundbutton')\n closePlaygroundButtons: QueryList<ElementRef>;\n @ViewChild('drawer') drawer!: MatDrawer;\n @ViewChild('sourcesDrawer') sourcesDrawer!: MatDrawer;\n @ViewChild('editorsDrawer') editorsDrawer!: MatDrawer;\n private bodyOverflowClass = 'body-overflow-hidden';\n private destroy$ = new Subject<void>();\n isCollapsedTrue = false;\n @Input() copilotName: string = 'HiveXGPT';\n @Input() firstName!: string;\n @Input() lastName!: string;\n @Input() apiKey!: string;\n @Input() bgBubbleAi!: string;\n @Input() bgBubbleUser!: string;\n @Input() bgGradient!: string[];\n @Input() botName!: string;\n @Input() botSkills!: string;\n @Input() botId!: string;\n @Input() orgId!: string;\n @Input() closeButtonColor!: string;\n @Input() closeButtonbgColor!: string;\n @Input() credentials!: [];\n @Input() dateTimeColor!: string;\n @Input() dateTextColor!: string;\n @Input() eventId!: string;\n @Input() eventUrl!: string;\n @Input() eventToken!: string;\n @Input() workspaceToken!: string;\n @Input() s27Token!: string;\n @Input() eventName!: string;\n @Input() botIcon!: string;\n readonly displayAvatarUrl =\n 'https://www.jotform.com/uploads/mehmetkarakasli/form_files/1564593667676a8e85f23758.86945537_icon.png';\n /** User profile image URL. Falls back to initials (getUserIdInitials()) if not set. */\n @Input() userAvatarUrl?: string;\n @Input() formFieldBgColor!: string;\n @Input() formFieldTextColor!: string;\n @Input() fullView!: boolean;\n @Input() gradientColors!: string[];\n @Input() greeting!: string;\n @Input() messageTextColorAi!: string;\n @Input() messageTextColorUser!: string;\n @Input() rules!: string;\n @Input() sendButtonColor!: string;\n @Input() sendButtonTextColor!: string;\n @Input() showClose!: boolean;\n @Input() thumbsDownMessages!: string[];\n @Input() thumbsUpMessage!: string;\n /** User's selected timezone (e.g. 'America/New_York'); used for timestamps and session card times. When not set, session data or local time is used. */\n @Input() timezone?: string;\n @Input() unknownResponses!: [];\n @Input() useOpenAi!: boolean;\n @Input() userId!: string;\n @Input() isDev!: boolean;\n /** When true, chat auto-scrolls to bottom when new content is added. Default: false (no auto scroll). */\n @Input() autoScrollOnNewMessage: boolean = false;\n /** Optional API base URL (e.g. ngrok tunnel). When set, all chat/voice requests use this instead of dev/prod default. */\n @Input() baseUrl?: string;\n /** Connections list from host (e.g. from store selectConnectionsList). Each item has userId. When set, used for Connect/Request Sent/Disconnect button state. */\n @Input() connectionsList: any[] = [];\n /** Pending sent request user IDs from host (e.g. from store selectPendingConnectionsSentList). When set, used for Request Sent state. */\n @Input() pendingSentRequestUserIds: any[] = [];\n /** Whether to show Connect / Request Sent / Disconnect buttons on attendee cards (e.g. from userSettings?.isConnectionsEnabled). */\n @Input() isConnectionsEnabled: boolean = true;\n /** When true (UN/COP events): session card shows \"Session type\" label and Join/Watch buttons. When false: shows \"Meeting type\" label and single Play button (same as template2). */\n @Input() isUnEvent: boolean = false;\n\n @Input() againButtonColor!: string[];\n @Input() againButtonTextColor!: string[];\n @Output() feedbackEvent = new EventEmitter<string>();\n @Output() onCloseEvent = new EventEmitter<void>();\n @Output() openPage = new EventEmitter<any>();\n @Output() sessionActions = new EventEmitter<any>();\n /** Emitted when user clicks Join/Watch but action is not yet available (e.g. session not started). Host can show toaster with the message. */\n @Output() sessionActionBlocked = new EventEmitter<string>();\n @Output() closeBot = new EventEmitter<any>();\n @Output() connectWithUser = new EventEmitter<any>();\n /** Emitted when user clicks View profile on a speaker card (get_event_speakers). Host should open speaker detail drawer same as /events/:id/speakers. */\n @Output() viewSpeakerProfile = new EventEmitter<{\n speaker: any;\n speakers: any[];\n }>();\n /** Emitted when user clicks View Booth on a sponsor/booth card (get_event_sponsors, get_event_booths). Host should navigate to events/:eventUrl/sponsors/booths/:boothUrl. */\n @Output() viewBooth = new EventEmitter<{\n boothId?: string;\n boothUrl?: string;\n sponsor?: any;\n }>();\n @Output() scheduleMeeting = new EventEmitter<string>();\n @Output() refreshToken = new EventEmitter<any>();\n /** Emitted after a successful `user/tokenRefresh` so the host can dispatch Login / `saveTokenAndLoginUser`. */\n @Output() tokensRefreshed = new EventEmitter<any>();\n @Output() openSupport = new EventEmitter<any>();\n\n autogenKey = 'Autogen_eDJTtEU-NB0RtIpzq1w';\n addToMyAgendaAction = 'add_to_my_agenda';\n myUpcomingSessionAction = 'my_upcoming_session';\n connectOrFollowAction = 'connect_or_follow';\n aiResponse: string = '';\n chatLog: any[] = [];\n decoder = new TextDecoder();\n feedbackDone: boolean = false;\n greetingMsg: string = '';\n hasBackdropValue: boolean = false;\n input: string = '';\n listenerAdded = false;\n loading: boolean = false;\n mode: string = 'over';\n quickPrompts: any[] = [];\n thumbsDownMsgIndex = 0;\n userName: string = '';\n showStartAgain: boolean = false;\n isIOSDevice: boolean = false;\n showFeedBackIconsIndex: number | null = null;\n temperature: number = 1;\n /** Speaker cache by staff id (filled via get-by-staff-ids). */\n speakers: Record<string, any> = {};\n /** Prevent duplicate speaker fetches across messages. */\n private requestedSpeakerIds = new Set<string>();\n environment: {\n USERS_API;\n BASE_URL;\n AGENTS_API;\n };\n pendingRequests: any;\n myConnections: any;\n conversationKey: string;\n conSessionKey: string = '';\n isFetchDataFor: boolean;\n is401: boolean;\n msg: any;\n chat: any;\n isWorkflowOpen: boolean;\n orgWorkflows: any;\n openWorkflowInput: boolean;\n selectedWorkflow: any;\n workflowForm: any;\n currentWorkflowActionProgress: number = 0;\n currentWorkflowAction: string = '';\n executingWorkflow: boolean;\n workflowExecutionDetails: any;\n showWorkflowExecutionDetails: any;\n currentWorkflowExecutionDetails: any;\n\n speechConfig: SpeechSDK.SpeechConfig;\n recognizer: SpeechSDK.SpeechRecognizer;\n recognizedText: string = '';\n authorizationToken: string = '';\n region: string = 'westeurope'; // Set your Azure region here\n isRecording: boolean;\n isVoiceModalOpen: boolean = false;\n private voiceModalOverlayRef: OverlayRef | null = null;\n private voiceTranscriptSubscriptions: Subscription[] = [];\n\n constructor(\n private fb: FormBuilder,\n private botService: BotsService,\n private cdr: ChangeDetectorRef,\n private http: HttpClient,\n private sanitizer: DomSanitizer,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private conversationService: ConversationService, // private platform: Platform\n private translationService: TranslationService,\n private voiceAgentService: VoiceAgentService,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private injector: Injector,\n private platformTokenRefresh: PlatformTokenRefreshService,\n ) {\n this.chatMain = new ElementRef(null);\n\n // if (this.platform.IOS) {\n // this.isIOSDevice = true;\n // }\n }\n getTranslation(key: string) {\n return this.translationService.getTranslation(key);\n }\n\n /** Time shown next to \"Assistant\" when in thinking/loading state. */\n getLoadingTime(): string {\n return formatNow(this.timezone);\n }\n\n /** User initials for avatar fallback (e.g. \"JD\" from firstName + lastName). */\n getUserIdInitials(): string {\n const first = (this.firstName || '').trim();\n const last = (this.lastName || '').trim();\n if (first && last) return (first[0] + last[0]).toUpperCase();\n if (first) return first.slice(0, 2).toUpperCase();\n if (last) return last.slice(0, 2).toUpperCase();\n return 'U';\n }\n\n /** Attendee initials for card when no photo (e.g. \"Vijay Paliwal\" -> \"VP\", \"Jim\" -> \"J\"). */\n getAttendeeInitials(name: string | null | undefined): string {\n if (!name || typeof name !== 'string') return '?';\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length >= 2)\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return '?';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Handle eventId changes to update translation service\n if (changes.eventId && changes.eventId.currentValue) {\n this.translationService.setEventId(changes.eventId.currentValue);\n }\n\n if (changes.s27Token) {\n if (changes.s27Token.currentValue != changes.s27Token.previousValue) {\n this.s27Token = changes.s27Token.currentValue;\n\n console.log('isFetchDataFor: ', this.isFetchDataFor);\n console.log('msg: ', this.msg);\n console.log('chat: ', this.chat);\n if (this.is401) {\n if (this.isFetchDataFor) {\n this.fetchDataFor(this.msg, this.chat);\n } else {\n this.fetchData(this.msg);\n }\n }\n }\n }\n\n if (changes.baseUrl && this.environment) {\n this.applyBaseUrlOverride();\n }\n }\n\n /** When baseUrl input is set, override environment.BASE_URL so all chat/voice services use it (supports ngrok etc.). */\n private applyBaseUrlOverride(): void {\n const defaultEnv = this.isDev ? dev_environment : prod_environment;\n if (this.baseUrl && typeof this.baseUrl === 'string') {\n const url = this.baseUrl.trim().replace(/\\/+$/, '');\n if (url) {\n this.environment = { ...defaultEnv, BASE_URL: url };\n return;\n }\n }\n this.environment = defaultEnv;\n }\n\n domainAuthorityValue: any = 'prod-lite';\n\n ngOnInit(): void {\n // Set the eventId in translation service to get the correct language from localStorage\n if (this.eventId) {\n this.translationService.setEventId(this.eventId);\n }\n\n this.applyBaseUrlOverride();\n\n const domain = window.location.hostname;\n\n // Determine the header value based on the domain\n\n if (domain.includes('pre-app.social27.com')) {\n this.domainAuthorityValue = 'pre-prod-lite';\n } else if (domain.includes('app.social27.com')) {\n this.domainAuthorityValue = 'prod-lite';\n } else if (domain.includes('hivegpt.io')) {\n this.domainAuthorityValue = 'hivegpt';\n }\n\n // this.fetchMyConnections().subscribe();\n // this.fetchPendingRequests().subscribe();\n\n this.changeTemperature(this.temperature);\n this.fetchBotConfig().subscribe(\n (res) => {\n this.cdr.markForCheck();\n\n this.fetchChatHistory().subscribe(\n (response) => {\n this.loading = false;\n this.mapChatHistory(response);\n this.cdr.markForCheck();\n },\n (err) => {\n console.error('Error fetching chat history:', err);\n },\n );\n },\n (err) => {\n console.error('Error fetching chat history:', err);\n },\n );\n // this.fetchAgents();\n // this.fetchEditorContent();\n this.cdr.markForCheck();\n this.botService\n .fetchSpeechAuthorizationToken(\n this.botId,\n this.apiKey,\n this.domainAuthorityValue,\n )\n .subscribe((token) => {\n this.authorizationToken = token;\n this.initializeSpeechRecognizer(token);\n });\n }\n\n /** Native WebSocket used by `/ask-new` chat flow. */\n private askWebSocket: WebSocket | null = null;\n private askWebSocketConnectionKey = '';\n private activeAskMessageId = '';\n\n /** Initial number of session/attendee cards shown before \"Show X more\". */\n readonly SESSION_CARDS_INITIAL = 6;\n readonly ATTENDEE_CARDS_INITIAL = 9;\n readonly SPEAKER_CARDS_INITIAL = 9;\n readonly SPONSOR_CARDS_INITIAL = 9;\n readonly BOOTH_REP_CARDS_INITIAL = 9;\n /** Message id -> true when user expanded \"Show more\" for sessions/attendees. */\n expandedSessionCardIds: Record<string, boolean> = {};\n expandedAttendeeCardIds: Record<string, boolean> = {};\n expandedSpeakerCardIds: Record<string, boolean> = {};\n expandedSponsorCardIds: Record<string, boolean> = {};\n expandedBoothRepCardIds: Record<string, boolean> = {};\n /** key: `${messageId}:${attendeeId}` -> true when description expanded */\n expandedAttendeeDescriptionIds: Record<string, boolean> = {};\n /** key: `${messageId}:${attendeeId}` -> true when video is playing */\n attendeeVideoPlayingIds: Record<string, boolean> = {};\n /** key: `${messageId}:${attendeeId}` -> true when video is muted (default true) */\n attendeeVideoMutedIds: Record<string, boolean> = {};\n\n /** Strip HTML tags to plain text (e.g. for speaker/attendee description from API). */\n stripHtml(html: string): string {\n if (!html || typeof html !== 'string') return '';\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const text = doc.body?.textContent ?? '';\n return text.replace(/\\s+/g, ' ').trim();\n }\n\n getAttendeeDescription(attendee: any): string {\n const raw =\n attendee?.description ?? attendee?.interests ?? attendee?.jobTitle ?? '';\n const str = typeof raw === 'string' ? raw.trim() : String(raw ?? '').trim();\n // If it looks like HTML, strip tags so card shows plain text\n if (str && /<[a-z][\\s\\S]*>/i.test(str)) return this.stripHtml(str);\n return str;\n }\n\n shouldShowAttendeeReadMore(attendee: any): boolean {\n // heuristic: only show toggle for reasonably long text\n return this.getAttendeeDescription(attendee).length > 90;\n }\n\n private getAttendeeDescKey(chat: any, attendee: any): string | null {\n const msgId = chat?._id;\n const attendeeId = attendee?.id ?? attendee?._id ?? attendee?.userId;\n if (!msgId || !attendeeId) return null;\n return `${msgId}:${attendeeId}`;\n }\n\n isAttendeeDescriptionExpanded(chat: any, attendee: any): boolean {\n const key = this.getAttendeeDescKey(chat, attendee);\n if (!key) return false;\n return !!this.expandedAttendeeDescriptionIds[key];\n }\n\n toggleAttendeeDescription(chat: any, attendee: any, ev?: Event): void {\n ev?.stopPropagation?.();\n const key = this.getAttendeeDescKey(chat, attendee);\n if (!key) return;\n const next = !this.expandedAttendeeDescriptionIds[key];\n this.expandedAttendeeDescriptionIds = {\n ...this.expandedAttendeeDescriptionIds,\n [key]: next,\n };\n this.cdr.markForCheck();\n }\n\n getAttendeeVideoUrl(attendee: any): string {\n const url = attendee?.userVideosModel?.url;\n return typeof url === 'string' ? url.trim() : '';\n }\n\n getAttendeeVideoPoster(attendee: any): string {\n const poster = attendee?.userVideosModel?.thumbnail;\n return typeof poster === 'string' ? poster.trim() : '';\n }\n\n private getAttendeeMediaKey(chat: any, attendee: any): string | null {\n const msgId = chat?._id;\n const attendeeId = attendee?.id ?? attendee?._id ?? attendee?.userId;\n if (!msgId || !attendeeId) return null;\n return `${msgId}:${attendeeId}`;\n }\n\n isAttendeeVideoMuted(chat: any, attendee: any): boolean {\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return true;\n // default true (muted) unless explicitly set to false\n return this.attendeeVideoMutedIds[key] !== false;\n }\n\n isAttendeeVideoPlaying(chat: any, attendee: any): boolean {\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return false;\n return !!this.attendeeVideoPlayingIds[key];\n }\n\n toggleAttendeeVideoMute(\n chat: any,\n attendee: any,\n videoEl?: HTMLVideoElement | null,\n ev?: Event,\n ): void {\n ev?.stopPropagation?.();\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return;\n const next = !this.isAttendeeVideoMuted(chat, attendee);\n this.attendeeVideoMutedIds = { ...this.attendeeVideoMutedIds, [key]: next };\n if (videoEl) {\n videoEl.muted = next;\n // Some browsers require volume to be >0 when unmuting\n if (!next && (videoEl.volume == null || videoEl.volume === 0)) {\n videoEl.volume = 1;\n }\n }\n this.cdr.markForCheck();\n }\n\n toggleAttendeeVideoPlay(\n chat: any,\n attendee: any,\n videoEl?: HTMLVideoElement | null,\n ev?: Event,\n ): void {\n ev?.stopPropagation?.();\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return;\n const next = !this.isAttendeeVideoPlaying(chat, attendee);\n this.attendeeVideoPlayingIds = {\n ...this.attendeeVideoPlayingIds,\n [key]: next,\n };\n if (videoEl) {\n try {\n if (next) {\n const p = videoEl.play();\n if (p && typeof (p as any).catch === 'function') {\n (p as any).catch(() => {\n // If play fails, reflect paused state\n this.attendeeVideoPlayingIds = {\n ...this.attendeeVideoPlayingIds,\n [key]: false,\n };\n this.cdr.markForCheck();\n });\n }\n } else {\n videoEl.pause();\n }\n } catch {\n // ignore\n }\n }\n this.cdr.markForCheck();\n }\n\n onAttendeeVideoPlayState(chat: any, attendee: any, isPlaying: boolean): void {\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return;\n if (this.attendeeVideoPlayingIds[key] === isPlaying) return;\n this.attendeeVideoPlayingIds = {\n ...this.attendeeVideoPlayingIds,\n [key]: isPlaying,\n };\n this.cdr.markForCheck();\n }\n\n /**\n * Format session date/time for display.\n * @param dateTimeRange Session start/end (object with start/end or string with \"Start: ... End: ...\")\n * @param displayTimeZone Optional user-selected timezone (e.g. 'America/New_York'); when set, times are shown in this zone.\n */\n formatSessionWhen(\n dateTimeRange: string | { start?: string; end?: string } | null,\n displayTimeZone?: string,\n ): string {\n const localeOpts = displayTimeZone ? { timeZone: displayTimeZone } : {};\n if (!dateTimeRange) return '';\n if (\n typeof dateTimeRange === 'object' &&\n dateTimeRange?.start &&\n dateTimeRange?.end\n ) {\n try {\n const startDt = new Date(dateTimeRange.start);\n const endDt = new Date(dateTimeRange.end);\n const dateFormatted = startDt.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n ...localeOpts,\n });\n const startTime = startDt.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n ...localeOpts,\n });\n const endTime = endDt.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n ...localeOpts,\n });\n return `${dateFormatted} | ${startTime} - ${endTime}`;\n } catch {\n return '';\n }\n }\n if (typeof dateTimeRange !== 'string') return '';\n const startMatch = dateTimeRange.match(\n /Start:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n const endMatch = dateTimeRange.match(\n /End:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n if (!startMatch || !endMatch) return dateTimeRange;\n try {\n const startStr = startMatch[1];\n const endStr = endMatch[1];\n const startDt = new Date(startStr.replace(' ', 'T') + 'Z');\n const endDt = new Date(endStr.replace(' ', 'T') + 'Z');\n const dateFormatted = startDt.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n ...localeOpts,\n });\n const startTimeShort = startDt.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n ...localeOpts,\n });\n const endTimeShort = endDt.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n ...localeOpts,\n });\n return `${dateFormatted} | ${startTimeShort} - ${endTimeShort}`;\n } catch {\n return dateTimeRange;\n }\n }\n\n /**\n * Get date badge (day + month) for session card from dateTimeRange.\n * Handles dateTimeRange as string (\"Start: 2026-02-20 01:05:00, End: ...\") or object { start, end }.\n * Uses displayTimeZone only when it is a valid IANA identifier; otherwise formats in local time.\n */\n getSessionDateBadge(\n dateTimeRange: string | { start?: string; end?: string } | null,\n displayTimeZone?: string,\n ): { day: string; month: string } {\n if (!dateTimeRange) return { day: '', month: '' };\n try {\n let startDt: Date | null = null;\n if (typeof dateTimeRange === 'object' && dateTimeRange?.start) {\n startDt = new Date(dateTimeRange.start);\n } else if (typeof dateTimeRange === 'string') {\n const startMatch = dateTimeRange.match(\n /Start:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n if (startMatch)\n startDt = new Date(startMatch[1].replace(' ', 'T') + 'Z');\n }\n if (!startDt || isNaN(startDt.getTime())) return { day: '', month: '' };\n const localeOpts = displayTimeZone ? { timeZone: displayTimeZone } : {};\n try {\n const day = startDt.toLocaleDateString('en-US', {\n day: 'numeric',\n ...localeOpts,\n });\n const month = startDt.toLocaleDateString('en-US', {\n month: 'short',\n ...localeOpts,\n });\n return { day, month };\n } catch {\n // displayTimeZone may be non-IANA (e.g. \"(UTC-03:00) Brasilia\"); format without timeZone\n const day = startDt.toLocaleDateString('en-US', { day: 'numeric' });\n const month = startDt.toLocaleDateString('en-US', { month: 'short' });\n return { day, month };\n }\n } catch {\n return { day: '', month: '' };\n }\n }\n\n /**\n * Get time range only (e.g. \"9:00 AM - 10:30 AM\") for session card.\n * Falls back to formatting without timeZone when displayTimeZone is not a valid IANA identifier.\n */\n formatSessionTimeRange(\n dateTimeRange: string | { start?: string; end?: string } | null,\n displayTimeZone?: string,\n ): string {\n if (!dateTimeRange) return '';\n try {\n let startDt: Date | null = null;\n let endDt: Date | null = null;\n if (\n typeof dateTimeRange === 'object' &&\n dateTimeRange?.start &&\n dateTimeRange?.end\n ) {\n startDt = new Date(dateTimeRange.start);\n endDt = new Date(dateTimeRange.end);\n } else if (typeof dateTimeRange === 'string') {\n const startMatch = dateTimeRange.match(\n /Start:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n const endMatch = dateTimeRange.match(\n /End:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n if (startMatch)\n startDt = new Date(startMatch[1].replace(' ', 'T') + 'Z');\n if (endMatch) endDt = new Date(endMatch[1].replace(' ', 'T') + 'Z');\n }\n if (!startDt || isNaN(startDt.getTime())) return '';\n const localeOpts = displayTimeZone ? { timeZone: displayTimeZone } : {};\n try {\n const startTime = startDt.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n ...localeOpts,\n });\n const endTime =\n endDt && !isNaN(endDt.getTime())\n ? endDt.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n ...localeOpts,\n })\n : '';\n return endTime ? `${startTime} - ${endTime}` : startTime;\n } catch {\n const startTime = startDt.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n const endTime =\n endDt && !isNaN(endDt.getTime())\n ? endDt.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n : '';\n return endTime ? `${startTime} - ${endTime}` : startTime;\n }\n } catch {\n return '';\n }\n }\n\n /**\n * IANA timezone ID -> abbreviation map (matches parent app session-layouts / timezones.enum TimeZones).\n * Used so session cards show SAST, EEST, SAWST, ESAST, etc. instead of GMT+1, GMT+2.\n */\n private static readonly TZ_ABBR_MAP: Record<string, string> = {\n 'Pacific/Kiritimati': 'LINT',\n 'Pacific/Apia': 'SST',\n 'Pacific/Tongatapu': 'TST',\n 'Etc/GMT-13': 'UTC',\n 'Pacific/Chatham': 'CHADT',\n 'Asia/Kamchatka': 'ANAT',\n 'Pacific/Fiji': 'FJT',\n 'Etc/GMT-12': 'U',\n 'Pacific/Auckland': 'NZST',\n 'Pacific/Guadalcanal': 'CPST',\n 'Asia/Sakhalin': 'SAKT',\n 'Pacific/Norfolk': 'NFT',\n 'Asia/Magadan': 'MAGT',\n 'Asia/Srednekolymsk': 'SRET',\n 'Pacific/Bougainville': 'BST',\n 'Australia/Lord_Howe': 'LHST',\n 'Asia/Vladivostok': 'VLAT',\n 'Australia/Hobart': 'AEST',\n 'Pacific/Port_Moresby': 'ChST',\n 'Australia/Sydney': 'AEST',\n 'Australia/Brisbane': 'AWST',\n 'Australia/Darwin': 'ACST',\n 'Australia/Adelaide': 'ACST',\n 'Asia/Yakutsk': 'YAKT',\n 'Asia/Seoul': 'KST',\n 'Asia/Pyongyang': 'KST',\n 'Asia/Tokyo': 'TST',\n 'Asia/Chita': 'YAKT',\n 'Australia/Eucla': 'ACWST',\n 'Asia/Ulaanbaatar': 'FST',\n 'Asia/Taipei': 'ULAT',\n 'Australia/Perth': 'AWST',\n 'Asia/Singapore': 'SNST',\n 'Asia/Irkutsk': 'IRKT',\n 'Asia/Shanghai': 'CST',\n 'Asia/Tomsk': 'MSD',\n 'Asia/Novosibirsk': 'NOVT',\n 'Asia/Krasnoyarsk': 'KRAT',\n 'Asia/Hovd': 'SAST',\n 'Asia/Barnaul': 'MSK',\n 'Asia/Bangkok': 'THA',\n 'Asia/Yangon': 'MYST',\n 'Asia/Omsk': 'OMST',\n 'Asia/Dhaka': 'BST',\n 'Asia/Almaty': 'NCAST',\n 'Asia/Kathmandu': 'NPT',\n 'Asia/Colombo': 'SLT',\n 'Asia/Kolkata': 'IST',\n 'Asia/Calcutta': 'IST',\n 'Asia/Qyzylorda': 'CAST',\n 'Asia/Karachi': 'PKT',\n 'Asia/Yekaterinburg': 'YEKT',\n 'Asia/Tashkent': 'WAST',\n 'Asia/Kabul': 'AFT',\n 'Asia/Yerevan': 'AMT',\n 'Europe/Volgograd': 'VST',\n 'Asia/Tbilisi': 'GET',\n 'Europe/Saratov': 'SLT',\n 'Indian/Mauritius': 'MUT',\n 'Europe/Samara': 'SAMT',\n 'Asia/Baku': 'AZT',\n 'Europe/Astrakhan': 'SAMT',\n 'Asia/Dubai': 'ARBST',\n 'Asia/Tehran': 'IDT',\n 'Africa/Nairobi': 'EAST',\n 'Europe/Moscow': 'MSK',\n 'Europe/Minsk': 'MSK',\n 'Asia/Riyadh': 'AST',\n 'Europe/Istanbul': 'TDT',\n 'Asia/Baghdad': 'AST',\n 'Africa/Windhoek': 'NST',\n 'Africa/Tripoli': 'LST',\n 'Africa/Khartoum': 'EAST',\n 'Europe/Kaliningrad': 'KST',\n 'Asia/Jerusalem': 'JDT',\n 'Europe/Kiev': 'EEDT',\n 'Africa/Johannesburg': 'SAST',\n 'Asia/Hebron': 'EET',\n 'Asia/Damascus': 'SDT',\n 'Europe/Chisinau': 'GDT',\n 'Africa/Cairo': 'EST',\n 'Asia/Beirut': 'MEDT',\n 'Europe/Bucharest': 'GDT',\n 'Asia/Amman': 'JST',\n 'Africa/Lagos': 'ECT',\n 'Europe/Warsaw': 'CEDT',\n 'Africa/Casablanca': 'MDT',\n 'Europe/Paris': 'CEST',\n 'Europe/Budapest': 'CEDT',\n 'Europe/Berlin': 'WEDT',\n 'Africa/Sao_Tome': 'GST',\n 'Atlantic/Reykjavik': 'GST',\n 'Europe/London': 'GDT',\n 'Etc/UTC': 'UTC',\n 'Atlantic/Azores': 'ADT',\n 'Atlantic/Cape_Verde': 'CVST',\n 'Etc/GMT+2': 'MST',\n 'America/Araguaina': 'SEST',\n 'America/Sao_Paulo': 'ESAST',\n 'America/Cayenne': 'SEST',\n 'America/Argentina/Buenos_Aires': 'AST',\n 'America/Nuuk': 'WGT',\n 'America/Montevideo': 'MST',\n 'America/Punta_Arenas': 'CLST',\n 'America/Miquelon': 'PMST',\n 'America/Bahia': 'BST',\n 'America/St_Johns': 'NST',\n 'America/Asuncion': 'PRST',\n 'America/Halifax': 'AST',\n 'America/Caracas': 'VST',\n 'America/Cuiaba': 'CBST',\n 'America/La_Paz': 'SAWST',\n 'America/Santiago': 'PSST',\n 'America/Bogota': 'SPST',\n 'America/Cancun': 'EST',\n 'America/New_York': 'ET',\n 'America/Port-au-Prince': 'EDT',\n 'America/Havana': 'EDT',\n 'America/Indiana/Indianapolis': 'EST',\n 'America/Grand_Turk': 'EST',\n 'America/Guatemala': 'CAST',\n 'America/Chicago': 'CT',\n 'Pacific/Easter': 'EAST',\n 'America/Mexico_City': 'CST',\n 'America/Regina': 'CCST',\n 'America/Phoenix': 'MT',\n 'America/Chihuahua': 'MDT',\n 'America/Denver': 'MT',\n 'America/Whitehorse': 'YST',\n 'America/Tijuana': 'PST',\n 'Etc/GMT+8': 'UTC-08',\n 'America/Los_Angeles': 'PT',\n 'America/Anchorage': 'AK',\n 'Etc/GMT+9': 'UTC-09',\n 'Pacific/Marquesas': 'MST',\n 'America/Adak': 'HST',\n 'Pacific/Honolulu': 'HAST',\n 'Etc/GMT+11': 'UTC-11',\n 'Etc/GMT+12': 'BIT',\n };\n\n /**\n * Windows-style \"(UTC±HH:MM) Place\" -> short name (IST, BRT, etc.) so we show \"IST\" not \"((UTC+05:30) India)\".\n */\n private static readonly WINDOWS_TZ_ABBR_MAP: Record<string, string> = {\n '(UTC-03:00) Brasilia': 'BRT',\n '(UTC-03:00) Buenos Aires': 'ART',\n '(UTC+05:30) India': 'IST',\n '(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi': 'IST',\n '(UTC+00:00) Dublin, Edinburgh, London': 'GMT',\n '(UTC+00:00) Monrovia, Reykjavik': 'GMT',\n '(UTC+01:00) Amsterdam, Berlin, Rome, Stockholm': 'CET',\n '(UTC+01:00) Brussels, Copenhagen, Madrid, Paris': 'CET',\n '(UTC+02:00) Athens, Istanbul, Minsk': 'EET',\n '(UTC+02:00) Cairo': 'EET',\n '(UTC+02:00) Jerusalem': 'IST',\n '(UTC+03:00) Moscow, St. Petersburg': 'MSK',\n '(UTC+03:00) Nairobi': 'EAT',\n '(UTC+04:00) Dubai': 'GST',\n '(UTC+05:00) Islamabad, Karachi': 'PKT',\n '(UTC+05:45) Kathmandu': 'NPT',\n '(UTC+06:00) Dhaka': 'BST',\n '(UTC+06:30) Yangon (Rangoon)': 'MMT',\n '(UTC+07:00) Bangkok, Hanoi, Jakarta': 'ICT',\n '(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi': 'CST',\n '(UTC+08:00) Kuala Lumpur, Singapore': 'SGT',\n '(UTC+09:00) Osaka, Sapporo, Tokyo': 'JST',\n '(UTC+09:30) Adelaide': 'ACST',\n '(UTC+10:00) Brisbane': 'AEST',\n '(UTC+10:00) Canberra, Melbourne, Sydney': 'AEST',\n '(UTC+12:00) Auckland, Wellington': 'NZST',\n '(UTC-05:00) Eastern Time (US & Canada)': 'ET',\n '(UTC-06:00) Central Time (US & Canada)': 'CT',\n '(UTC-07:00) Mountain Time (US & Canada)': 'MT',\n '(UTC-08:00) Pacific Time (US & Canada)': 'PT',\n };\n\n /**\n * Windows-style \"(UTC±HH:MM) Place\" -> IANA timezone.\n * This prevents Intl/DatePipe from falling back to browser local time when a Windows label is used.\n */\n private static readonly WINDOWS_TZ_IANA_MAP: Record<string, string> = {\n '(UTC-03:00) Brasilia': 'America/Sao_Paulo',\n '(UTC-03:00) Buenos Aires': 'America/Argentina/Buenos_Aires',\n '(UTC+05:30) India': 'Asia/Kolkata',\n '(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi': 'Asia/Kolkata',\n '(UTC+00:00) Dublin, Edinburgh, London': 'Europe/London',\n '(UTC+00:00) Monrovia, Reykjavik': 'Etc/UTC',\n '(UTC+01:00) Amsterdam, Berlin, Rome, Stockholm': 'Europe/Berlin',\n '(UTC+01:00) Brussels, Copenhagen, Madrid, Paris': 'Europe/Paris',\n '(UTC+02:00) Athens, Istanbul, Minsk': 'Europe/Athens',\n '(UTC+02:00) Cairo': 'Africa/Cairo',\n '(UTC+02:00) Jerusalem': 'Asia/Jerusalem',\n '(UTC+03:00) Moscow, St. Petersburg': 'Europe/Moscow',\n '(UTC+03:00) Nairobi': 'Africa/Nairobi',\n '(UTC+04:00) Dubai': 'Asia/Dubai',\n '(UTC+05:00) Islamabad, Karachi': 'Asia/Karachi',\n '(UTC+05:45) Kathmandu': 'Asia/Kathmandu',\n '(UTC+06:00) Dhaka': 'Asia/Dhaka',\n '(UTC+06:30) Yangon (Rangoon)': 'Asia/Yangon',\n '(UTC+07:00) Bangkok, Hanoi, Jakarta': 'Asia/Bangkok',\n '(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi': 'Asia/Shanghai',\n '(UTC+08:00) Kuala Lumpur, Singapore': 'Asia/Singapore',\n '(UTC+09:00) Osaka, Sapporo, Tokyo': 'Asia/Tokyo',\n '(UTC+09:30) Adelaide': 'Australia/Adelaide',\n '(UTC+10:00) Brisbane': 'Australia/Brisbane',\n '(UTC+10:00) Canberra, Melbourne, Sydney': 'Australia/Sydney',\n '(UTC+12:00) Auckland, Wellington': 'Pacific/Auckland',\n '(UTC-05:00) Eastern Time (US & Canada)': 'America/New_York',\n '(UTC-06:00) Central Time (US & Canada)': 'America/Chicago',\n '(UTC-07:00) Mountain Time (US & Canada)': 'America/Denver',\n '(UTC-08:00) Pacific Time (US & Canada)': 'America/Los_Angeles',\n };\n\n private normalizeToIanaTimeZone(\n tz: string | undefined,\n sessionIanaTimeZone?: string,\n ): string | undefined {\n const raw = (tz ?? '').trim();\n if (!raw) return sessionIanaTimeZone || undefined;\n\n // If user passes the session's Windows id/name, prefer the session's known IANA zone.\n if (\n sessionIanaTimeZone &&\n raw.toLowerCase() === String(sessionIanaTimeZone).trim().toLowerCase()\n ) {\n return sessionIanaTimeZone;\n }\n\n if (raw.startsWith('(UTC') || raw.startsWith('(utc')) {\n const map = (this.constructor as typeof ChatDrawerComponent)\n .WINDOWS_TZ_IANA_MAP;\n const key = Object.keys(map).find(\n (k) => k.toLowerCase() === raw.toLowerCase(),\n );\n if (key) return map[key];\n }\n\n // Otherwise assume it may already be IANA (e.g. \"America/Sao_Paulo\")\n return raw;\n }\n\n /**\n * Get timezone abbreviation (e.g. IST, BRT, SAST) for display after the time.\n * Uses IANA map and Windows-style map so we show \"BRT\" / \"IST\" instead of \"((UTC-03:00) Brasilia)\".\n * Only consults Windows map when input looks like \"(UTC...)\" so existing IANA/Intl behavior is unchanged.\n */\n getTimezoneAbbreviation(tz: string): string {\n if (!tz || !String(tz).trim()) return '';\n const tzId = String(tz).trim();\n if (tzId.startsWith('(UTC') || tzId.startsWith('(utc')) {\n const winMap = (this.constructor as typeof ChatDrawerComponent)\n .WINDOWS_TZ_ABBR_MAP;\n const winKey = Object.keys(winMap).find(\n (k) => k.toLowerCase() === tzId.toLowerCase(),\n );\n if (winKey) return winMap[winKey];\n }\n const map = (this.constructor as typeof ChatDrawerComponent).TZ_ABBR_MAP;\n let mapped = map[tzId];\n if (!mapped) {\n const keyLower = tzId.toLowerCase();\n const entry = Object.entries(map).find(\n ([k]) => k.toLowerCase() === keyLower,\n );\n if (entry) mapped = entry[1];\n }\n if (mapped) return mapped;\n try {\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone: tzId,\n timeZoneName: 'short',\n });\n const parts = formatter.formatToParts(new Date());\n const tzPart = parts.find((p) => p.type === 'timeZoneName');\n const value = (tzPart?.value ?? '').trim();\n if (value && /^GMT[+-]\\d/.test(value)) return '';\n return value;\n } catch {\n return '';\n }\n }\n\n getStatusTextFromSessionRoles(sessionRoles: any): string {\n if (!Array.isArray(sessionRoles) || sessionRoles.length === 0) {\n return this.getTranslation('') || '';\n }\n const first = sessionRoles[0];\n if (typeof first === 'string') {\n return String(first)\n .replace(/^\\s*-\\s*/, '')\n .trim();\n }\n if (first && typeof first === 'object' && (first as any).description) {\n return String((first as any).description).trim();\n }\n return this.getTranslation('') || '';\n }\n\n mapSessionsToCardData(sessions: any[]): any[] {\n if (!Array.isArray(sessions)) return [];\n const userTimezone =\n this.timezone && String(this.timezone).trim()\n ? String(this.timezone).trim()\n : undefined;\n return sessions.map((raw: any) => {\n // get_my_agenda returns wrapper { id, schedule, isSession }; normalize to inner schedule object\n const s = raw && raw.schedule ? raw.schedule : raw;\n const sessionTzObj =\n s && typeof s === 'object' ? (s as any).timeZone : null;\n const sessionIanaTimeZone =\n sessionTzObj && typeof sessionTzObj === 'object'\n ? String(sessionTzObj.subTimeZone ?? '').trim()\n : '';\n // Support both dateTimeRange (string) and actualDateTimeRange (object with start/end)\n const whenRaw = s.dateTimeRange ?? s.actualDateTimeRange ?? '';\n // Prefer user's selected timezone; otherwise use session's IANA zone (subTimeZone) for correct date/day.\n const formattingTimeZone = this.normalizeToIanaTimeZone(\n userTimezone,\n sessionIanaTimeZone,\n );\n const whenFormatted = this.formatSessionWhen(\n whenRaw,\n formattingTimeZone || undefined,\n );\n // Only set statusText when session has join/watch roles (so we don't show \"You can join this meeting\" when there are no buttons)\n const hasJoinWatchRole =\n Array.isArray(s.sessionRoles) &&\n s.sessionRoles.some((r: any) => {\n const name =\n r && typeof r === 'object' && r.sessionRoleName\n ? String(r.sessionRoleName).trim().toLowerCase()\n : String(r ?? '')\n .trim()\n .toLowerCase();\n return name === 'join' || name === 'watch';\n });\n const statusText = hasJoinWatchRole\n ? this.getStatusTextFromSessionRoles(s.sessionRoles)\n : '';\n const sessionTimeZoneLabel =\n sessionTzObj != null\n ? typeof sessionTzObj === 'object'\n ? String(\n sessionTzObj.name ??\n sessionTzObj.id ??\n sessionTzObj.subTimeZone ??\n '',\n ).trim()\n : String(sessionTzObj).trim()\n : '';\n // Use an IANA timezone for formatting; use a separate label for UI display.\n const displayTimeZoneForFormat = formattingTimeZone;\n const displayTimeZoneLabel = (\n userTimezone ||\n sessionTimeZoneLabel ||\n ''\n ).trim();\n const tzAbbr = displayTimeZoneForFormat\n ? this.getTimezoneAbbreviation(displayTimeZoneForFormat)\n : '';\n const whenWithTz =\n whenFormatted || (typeof whenRaw === 'object' ? '' : String(whenRaw));\n const whenDisplay = tzAbbr\n ? `${whenWithTz} (${tzAbbr})`.trim()\n : whenWithTz;\n const dateBadge = this.getSessionDateBadge(\n whenRaw,\n displayTimeZoneForFormat || undefined,\n );\n let timeRange = this.formatSessionTimeRange(\n whenRaw,\n displayTimeZoneForFormat || undefined,\n );\n const description = String(s.description ?? s.abstract ?? '').trim();\n const sessionTypeRaw =\n s.sessionType != null\n ? typeof s.sessionType === 'object'\n ? (s.sessionType.name ?? s.sessionType.title ?? '')\n : s.sessionType\n : '';\n const meetingType = String(\n sessionTypeRaw ?? s.type ?? s.meetingType ?? '',\n ).trim();\n const sessionTypeLabel = this.isUnEvent\n ? this.getTranslation('Meeting type') || 'Meeting type'\n : this.getTranslation('Session type') || 'Session type';\n // Same logic as before design update: prefer tz abbreviation (e.g. EST), else show display timezone string (e.g. \"(UTC-03:00) Brasilia)\")\n const timeZoneDisplay = tzAbbr || displayTimeZoneLabel || '';\n // When API returns \"Start: N/A, End: N/A, TimeZone: ...\" (string), show at least timezone\n if (!timeRange && (displayTimeZoneForFormat || displayTimeZoneLabel)) {\n timeRange = this.getTranslation('Not specified') || 'Not specified';\n }\n // Time range with timezone in parentheses when available (same as old whenDisplay format)\n const timeRangeWithTz = timeZoneDisplay\n ? `${timeRange} (${timeZoneDisplay})`.trim()\n : timeRange;\n return {\n title: String(s.title ?? '').trim(),\n organizer: String(s.organizer ?? '').trim(),\n room: String(s.roomName ?? '').trim(),\n when: whenDisplay,\n timeRange,\n timeRangeWithTz: timeRange ? timeRangeWithTz : timeZoneDisplay || '',\n dateDay: dateBadge.day,\n dateMonth: dateBadge.month,\n description,\n timeZone: displayTimeZoneForFormat || displayTimeZoneLabel,\n timeZoneDisplay,\n meetingType,\n sessionTypeLabel,\n statusText,\n session: s,\n };\n });\n }\n\n getSessionIanaTimeZone(session: any): string {\n const s = session && session.schedule ? session.schedule : session;\n const tzObj = s && typeof s === 'object' ? (s as any).timeZone : null;\n const sessionIana =\n tzObj && typeof tzObj === 'object'\n ? String(tzObj.subTimeZone ?? '').trim()\n : '';\n const userTz =\n this.timezone && String(this.timezone).trim()\n ? String(this.timezone).trim()\n : undefined;\n return this.normalizeToIanaTimeZone(userTz, sessionIana) || 'UTC';\n }\n\n private collectSpeakerIdsFromSessionCards(sessionCards: any[]): string[] {\n if (!Array.isArray(sessionCards)) return [];\n const ids: string[] = [];\n for (const card of sessionCards) {\n const raw = card?.session?.speakers;\n if (Array.isArray(raw)) {\n for (const id of raw) {\n const sid = String(id ?? '').trim();\n if (sid) ids.push(sid);\n }\n }\n }\n return Array.from(new Set(ids));\n }\n\n private attachSpeakersToSessionCards(sessionCards: any[]): void {\n if (!Array.isArray(sessionCards)) return;\n for (const card of sessionCards) {\n const speakerIds: string[] = Array.isArray(card?.session?.speakers)\n ? card.session.speakers\n .map((x: any) => String(x ?? '').trim())\n .filter(Boolean)\n : [];\n const speakersList = speakerIds\n .map((id) => this.speakers[id])\n .filter(Boolean);\n card.speakersList = speakersList;\n if (card?.session && typeof card.session === 'object') {\n card.session.speakersList = speakersList;\n }\n }\n }\n\n private ensureSpeakersForSessionCards(sessionCards: any[]): void {\n const ids = this.collectSpeakerIdsFromSessionCards(sessionCards);\n if (ids.length === 0) return;\n\n const missing = ids.filter(\n (id) => !this.speakers[id] && !this.requestedSpeakerIds.has(id),\n );\n if (missing.length === 0) {\n this.attachSpeakersToSessionCards(sessionCards);\n return;\n }\n missing.forEach((id) => this.requestedSpeakerIds.add(id));\n this.getSpeakersByStaffIds(missing).subscribe({\n next: () => {\n this.attachSpeakersToSessionCards(sessionCards);\n this.cdr.markForCheck();\n },\n error: () => {\n // Best effort: still attach what we have cached\n this.attachSpeakersToSessionCards(sessionCards);\n this.cdr.markForCheck();\n },\n });\n }\n\n getSpeakerPhotoUrl(speaker: any): string | null {\n if (!speaker) return null;\n const candidates = [\n speaker.photo,\n speaker.photoPath,\n speaker.avatarUrl,\n speaker.profileImageUrl,\n speaker.profileImage,\n speaker.profilePicture,\n speaker.imageUrl,\n speaker.image,\n ];\n const url = candidates.find((v) => v != null && String(v).trim() !== '');\n return url ? String(url).trim() : null;\n }\n\n hasSessionCardSpeakers(sessionCard: any): boolean {\n const list =\n sessionCard?.speakersList || sessionCard?.session?.speakersList;\n if (Array.isArray(list) && list.length > 0) return true;\n const ids = sessionCard?.session?.speakers;\n return Array.isArray(ids) && ids.length > 0;\n }\n\n getSpeakerDisplayName(speaker: any): string {\n if (!speaker) return '';\n if (speaker.name != null && String(speaker.name).trim() !== '')\n return String(speaker.name).trim();\n const first =\n speaker.firstName != null ? String(speaker.firstName).trim() : '';\n const last =\n speaker.lastName != null ? String(speaker.lastName).trim() : '';\n return `${first} ${last}`.trim();\n }\n\n getSpeakerInitials(speaker: any): string {\n const name = this.getSpeakerDisplayName(speaker);\n if (name) return this.getAttendeeInitials(name);\n const id = speaker?.id != null ? String(speaker.id) : '';\n return id ? id.slice(0, 2).toUpperCase() : '?';\n }\n\n mapAttendeesToCardData(attendees: any[]): any[] {\n if (!Array.isArray(attendees)) return [];\n return attendees.map((a: any) => ({\n name: String(a.name ?? '').trim(),\n company:\n a.company != null && String(a.company).trim() !== ''\n ? String(a.company).trim()\n : null,\n jobTitle:\n a.jobTitle != null && String(a.jobTitle).trim() !== ''\n ? String(a.jobTitle).trim()\n : null,\n photo:\n a.photo != null && String(a.photo).trim() !== ''\n ? String(a.photo).trim()\n : null,\n id: a.id ?? a.userId ?? a._id ?? a.attendeeId ?? undefined,\n interests:\n a.interests != null && String(a.interests).trim() !== ''\n ? String(a.interests).trim()\n : null,\n description:\n a.description != null && String(a.description).trim() !== ''\n ? String(a.description).trim()\n : null,\n userVideosModel: a.userVideosModel\n ? {\n url:\n a.userVideosModel?.url != null &&\n String(a.userVideosModel.url).trim() !== ''\n ? String(a.userVideosModel.url).trim()\n : null,\n thumbnail:\n a.userVideosModel?.thumbnail != null &&\n String(a.userVideosModel.thumbnail).trim() !== ''\n ? String(a.userVideosModel.thumbnail).trim()\n : null,\n }\n : null,\n }));\n }\n\n mapSpeakersToCardData(speakers: any[]): any[] {\n if (!Array.isArray(speakers)) return [];\n return speakers.map((s: any) => {\n const rawDesc =\n s.description != null && String(s.description).trim() !== ''\n ? String(s.description).trim()\n : null;\n const description = rawDesc\n ? /<[a-z][\\s\\S]*>/i.test(rawDesc)\n ? this.stripHtml(rawDesc)\n : rawDesc\n : null;\n const rawTitle = s.title ?? s.jobTitle;\n const jobTitle =\n rawTitle != null && String(rawTitle).trim() !== ''\n ? String(rawTitle).trim()\n : null;\n return {\n name: this.getSpeakerDisplayName(s),\n company:\n s.company != null && String(s.company).trim() !== ''\n ? String(s.company).trim()\n : null,\n jobTitle,\n photo: this.getSpeakerPhotoUrl(s),\n id: s.id ?? s.userId ?? s._id ?? s.speakerId ?? undefined,\n interests:\n s.interests != null && String(s.interests).trim() !== ''\n ? String(s.interests).trim()\n : null,\n description,\n userVideosModel: s.userVideosModel\n ? {\n url:\n s.userVideosModel?.url != null &&\n String(s.userVideosModel.url).trim() !== ''\n ? String(s.userVideosModel.url).trim()\n : null,\n thumbnail:\n s.userVideosModel?.thumbnail != null &&\n String(s.userVideosModel.thumbnail).trim() !== ''\n ? String(s.userVideosModel.thumbnail).trim()\n : null,\n }\n : null,\n };\n });\n }\n\n mapSponsorsToCardData(sponsors: any[]): any[] {\n if (!Array.isArray(sponsors)) return [];\n return sponsors.map((s: any) => {\n const rawDesc =\n s.boothDescription != null && String(s.boothDescription).trim() !== ''\n ? String(s.boothDescription).trim()\n : null;\n const description = rawDesc\n ? /<[a-z][\\s\\S]*>/i.test(rawDesc)\n ? this.stripHtml(rawDesc)\n : rawDesc\n : null;\n const urlSlug =\n s.url ??\n s.boothUrl ??\n (s.boothID != null ? String(s.boothID) : null) ??\n (s.boothId != null ? String(s.boothId) : null);\n const logoUrl =\n s.logoUrl != null && String(s.logoUrl).trim() !== ''\n ? String(s.logoUrl).trim()\n : null;\n return {\n name: s.name != null ? String(s.name).trim() : '',\n website:\n s.website != null && String(s.website).trim() !== ''\n ? String(s.website).trim()\n : null,\n category: s.category != null ? String(s.category).trim() : null,\n boothID: s.boothID ?? s.boothId ?? null,\n boothTitle: s.boothTitle != null ? String(s.boothTitle).trim() : '',\n description: description ?? null,\n /** Booth URL slug for routing to detail page (e.g. events/:eventUrl/sponsors/booths/:url). */\n url: urlSlug != null ? String(urlSlug).trim() : null,\n logoUrl,\n };\n });\n }\n\n /**\n * Map get_event_booths results into the same shape used by sponsor cards.\n */\n mapBoothsToCardData(booths: any[]): any[] {\n if (!Array.isArray(booths)) return [];\n return booths.map((b: any) => {\n const rawDesc =\n b.description != null && String(b.description).trim() !== ''\n ? String(b.description).trim()\n : null;\n const description = rawDesc\n ? /<[a-z][\\s\\S]*>/i.test(rawDesc)\n ? this.stripHtml(rawDesc)\n : rawDesc\n : null;\n const urlSlug =\n b.url ??\n b.boothUrl ??\n (b.boothId != null ? String(b.boothId) : null) ??\n (b.boothID != null ? String(b.boothID) : null);\n const logoUrl =\n b.logoUrl != null && String(b.logoUrl).trim() !== ''\n ? String(b.logoUrl).trim()\n : null;\n return {\n name: b.company != null ? String(b.company).trim() : '',\n website:\n b.website != null && String(b.website).trim() !== ''\n ? String(b.website).trim()\n : null,\n category: null,\n boothID: b.boothId ?? b.boothID ?? null,\n boothTitle: b.boothTitle != null ? String(b.boothTitle).trim() : '',\n description: description ?? null,\n /** Booth URL slug for routing to detail page (e.g. events/:eventUrl/sponsors/booths/:url). */\n url: urlSlug != null ? String(urlSlug).trim() : null,\n logoUrl,\n };\n });\n }\n\n /**\n * Map get_booth_representatives results into the same shape as attendee cards (for reuse of attendee design).\n */\n mapBoothRepsToCardData(representatives: any[]): any[] {\n if (!Array.isArray(representatives)) return [];\n return representatives.map((r: any) => {\n const first = r.firstName != null ? String(r.firstName).trim() : '';\n const last = r.lastName != null ? String(r.lastName).trim() : '';\n const name = [first, last].filter(Boolean).join(' ') || '';\n const userId =\n r.userId != null && String(r.userId).trim() !== ''\n ? String(r.userId).trim()\n : undefined;\n return {\n name,\n company:\n r.company != null && String(r.company).trim() !== ''\n ? String(r.company).trim()\n : null,\n jobTitle:\n r.jobTitle != null && String(r.jobTitle).trim() !== ''\n ? String(r.jobTitle).trim()\n : null,\n photo:\n r.photoPath != null && String(r.photoPath).trim() !== ''\n ? String(r.photoPath).trim()\n : null,\n id: userId,\n interests: null,\n description:\n r.description != null && String(r.description).trim() !== ''\n ? String(r.description).trim()\n : null,\n userVideosModel: null,\n };\n });\n }\n\n /**\n * Parse get_event_sessions_v2 plain-text content into session objects for cards.\n * Format: \"Found N sessions:\\n1. <title>\\n - Time: Start: ..., End: ..., TimeZone: ...\\n - Room: ...\\n - Type: ...\\n2. ...\"\n */\n parseSessionContentV2(content: string): any[] {\n if (!content || typeof content !== 'string') return [];\n const sessions: any[] = [];\n // Split into blocks by \"1. \", \"2. \", etc. (number + dot + space at line start)\n const blockRegex = /\\n\\d+\\.\\s+/;\n const parts = content.split(blockRegex);\n // First part may be \"Found N sessions:\" or similar; skip if it doesn't look like a session title\n for (let i = 0; i < parts.length; i++) {\n const block = parts[i].trim();\n if (!block) continue;\n const lines = block\n .split(/\\n/)\n .map((l) => l.trim())\n .filter(Boolean);\n const title = lines[0] || '';\n if (!title || /^Found\\s+\\d+\\s+sessions/i.test(title)) continue;\n let dateTimeRange = '';\n let roomName = '';\n let sessionType = '';\n let timeZone = '';\n for (let j = 1; j < lines.length; j++) {\n const line = lines[j];\n const timeMatch = line.match(/Time:\\s*(.+)/i);\n if (timeMatch) {\n dateTimeRange = timeMatch[1].trim();\n const tzMatch = dateTimeRange.match(/TimeZone:\\s*([^,\\n]+)/i);\n if (tzMatch) timeZone = tzMatch[1].trim();\n }\n const roomMatch = line.match(/Room:\\s*(.+)/i);\n if (roomMatch) {\n roomName = roomMatch[1].trim();\n }\n const typeMatch = line.match(/Type:\\s*(.+)/i);\n if (typeMatch) {\n sessionType = typeMatch[1].trim();\n }\n const tzLineMatch = line.match(/TimeZone:\\s*(.+)/i);\n if (tzLineMatch && !timeZone) timeZone = tzLineMatch[1].trim();\n }\n sessions.push({\n title,\n roomName: roomName || undefined,\n dateTimeRange: dateTimeRange || undefined,\n sessionType: sessionType || undefined,\n timeZone: timeZone || undefined,\n sessionRoles: [],\n });\n }\n return sessions;\n }\n\n getVisibleSessionCards(chat: any): any[] {\n const list = chat?.sessionCards ?? [];\n const total = list.length;\n const expanded = this.expandedSessionCardIds[chat?._id];\n const remaining = total - this.SESSION_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.SESSION_CARDS_INITIAL);\n }\n return list;\n }\n\n getVisibleAttendeeCards(chat: any): any[] {\n const list = chat?.attendeeCards ?? [];\n const total = list.length;\n const expanded = this.expandedAttendeeCardIds[chat?._id];\n const remaining = total - this.ATTENDEE_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.ATTENDEE_CARDS_INITIAL);\n }\n return list;\n }\n\n getVisibleSpeakerCards(chat: any): any[] {\n const list = chat?.speakerCards ?? [];\n const total = list.length;\n const expanded = this.expandedSpeakerCardIds[chat?._id];\n const remaining = total - this.SPEAKER_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.SPEAKER_CARDS_INITIAL);\n }\n return list;\n }\n\n getVisibleSponsorCards(chat: any): any[] {\n const list = chat?.sponsorCards ?? [];\n const total = list.length;\n const expanded = this.expandedSponsorCardIds[chat?._id];\n const remaining = total - this.SPONSOR_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.SPONSOR_CARDS_INITIAL);\n }\n return list;\n }\n\n getVisibleBoothRepCards(chat: any): any[] {\n const list = chat?.boothRepCards ?? [];\n const total = list.length;\n const expanded = this.expandedBoothRepCardIds[chat?._id];\n const remaining = total - this.BOOTH_REP_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.BOOTH_REP_CARDS_INITIAL);\n }\n return list;\n }\n\n expandSessionCards(chat: any): void {\n if (chat?._id) {\n this.expandedSessionCardIds = {\n ...this.expandedSessionCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n expandAttendeeCards(chat: any): void {\n if (chat?._id) {\n this.expandedAttendeeCardIds = {\n ...this.expandedAttendeeCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n expandSpeakerCards(chat: any): void {\n if (chat?._id) {\n this.expandedSpeakerCardIds = {\n ...this.expandedSpeakerCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n expandSponsorCards(chat: any): void {\n if (chat?._id) {\n this.expandedSponsorCardIds = {\n ...this.expandedSponsorCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n expandBoothRepCards(chat: any): void {\n if (chat?._id) {\n this.expandedBoothRepCardIds = {\n ...this.expandedBoothRepCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Label for session type on cards: \"Session type\" when isUnEvent, else \"Meeting type\".\n */\n getSessionTypeLabel(): string {\n return this.isUnEvent\n ? this.getTranslation('Meeting type') || 'Meeting type'\n : this.getTranslation('Session type') || 'Session type';\n }\n\n /**\n * Get Join/Watch role buttons from session.sessionRoles for session cards.\n * When isUnEvent is false, returns single \"Watch\" button (same as template2). When true, returns Join/Watch from sessionRoles.\n */\n getSessionRoleButtons(sessionCard: any): { action: string; label: string }[] {\n if (this.isUnEvent === false && sessionCard?.session) {\n return [\n {\n action: 'join',\n label: this.getTranslation('Watch') || 'Watch',\n },\n ];\n }\n const raw = sessionCard?.session?.sessionRoles;\n if (!Array.isArray(raw) || raw.length === 0) return [];\n const roles: { action: string; label: string }[] = [];\n for (const r of raw) {\n const name =\n typeof r === 'object' && r != null && r.sessionRoleName\n ? String(r.sessionRoleName).trim().toLowerCase()\n : String(r).trim().toLowerCase();\n if (name === 'join' || name === 'watch') {\n const label =\n name === 'join'\n ? this.getTranslation('Join') || 'Join'\n : this.getTranslation('Watch') || 'Watch';\n roles.push({ action: name, label });\n }\n }\n return roles;\n }\n\n /**\n * Check if session is on-demand (classificationId === eClassificationType.OnDemand).\n * When true, Join/Watch are always actionable and card uses OnDemand design.\n */\n isSessionOndemand(sessionCard: any): boolean {\n const id =\n sessionCard?.session?.classificationId ?? sessionCard?.classificationId;\n if (id == null || id === '') return false;\n return String(id) === eClassificationType.OnDemand;\n }\n\n /**\n * Whether Join/Watch action is possible (same logic as app template8).\n * Action is allowed when: on-demand session OR isButtonActivated (session has started).\n */\n canPerformSessionAction(sessionCard: any): boolean {\n if (!sessionCard?.session) return false;\n const s = sessionCard.session;\n if (this.isSessionOndemand(sessionCard)) return true;\n return !!s.isButtonActivated;\n }\n\n /**\n * Same logic as app template8: delay in minutes (scheduled start - actual start).\n * Returns undefined if either date missing; > 0 when meeting is delayed.\n */\n getMeetingDelayMinutes(sessionCard: any): number | undefined {\n const s = sessionCard?.session;\n if (!s) return undefined;\n const startDate = s.dateTimeRange?.start;\n const actualStart = s.actualDateTimeRange?.start;\n if (!startDate || !actualStart) return undefined;\n try {\n const diffMs =\n new Date(startDate).getTime() - new Date(actualStart).getTime();\n return Math.floor(diffMs / (1000 * 60));\n } catch {\n return undefined;\n }\n }\n\n /** True when meeting is delayed (same condition as template8: delay minutes > 0, not on-demand, button not activated). */\n isMeetingDelayed(sessionCard: any): boolean {\n const delay = this.getMeetingDelayMinutes(sessionCard);\n if (delay == null || delay <= 0) return false;\n if (this.isSessionOndemand(sessionCard)) return false;\n if (sessionCard?.session?.isButtonActivated) return false;\n return true;\n }\n\n onSessionCardAction(\n sessionCard: any,\n role: { action: string; label: string },\n ): void {\n if (!sessionCard?.session) return;\n if (this.isUnEvent === false) {\n this.sessionActions.emit({\n type: 'session',\n action: role.action,\n session: sessionCard.session,\n sessionCard,\n });\n this.closeChatDrawer();\n return;\n }\n if (!this.canPerformSessionAction(sessionCard)) {\n const message =\n this.getTranslation('You can join/watch at the starting time') ||\n 'You can join/watch at the starting time';\n this.sessionActionBlocked.emit(message);\n return;\n }\n this.sessionActions.emit({\n type: 'session',\n action: role.action,\n session: sessionCard.session,\n sessionCard,\n });\n this.closeChatDrawer();\n }\n\n private closeChatDrawer(): void {\n this.isDrawerOpen = false;\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n try {\n this.drawer?.close();\n this.sourcesDrawer?.close();\n this.editorsDrawer?.close();\n } catch {}\n this.closeBot.emit();\n this.cdr.markForCheck();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.voiceTranscriptSubscriptions.forEach((sub) => sub.unsubscribe());\n this.disconnectAskWebSocket();\n }\n changeTemperature(newTemperature: number) {\n if (this.loading) return;\n this.temperature = newTemperature;\n const wrapper = document.querySelector('.hivegpt-chat-bot-wrapper');\n // Remove existing theme classes from body\n wrapper?.classList.remove('creative', 'balanced', 'precise');\n\n switch (newTemperature) {\n case 0:\n wrapper?.classList.add('creative');\n break;\n case 1:\n wrapper?.classList.add('balanced');\n break;\n case 2:\n wrapper?.classList.add('precise');\n break;\n default:\n break;\n }\n }\n\n onStartAgain() {\n if (this.loading) return;\n this.showStartAgain = false;\n this.chatLog = [];\n this.chatLog.push({\n type: 'ai',\n message: this.greetingMsg,\n\n time: formatNow(this.timezone),\n });\n this.archiveMessages().subscribe();\n }\n\n archiveMessages() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n const url = `${this.environment.BASE_URL}/bot/clear-history/${this.botId}/${this.userId}`;\n return this.http.post(url, {}, { headers }).pipe(\n switchMap((res: any) => {\n return of(res);\n }),\n catchError((error) => {\n return of(null);\n }),\n );\n }\n\n triggerSupport() {\n this.openSupport.emit();\n }\n fetchBotConfig() {\n this.loading = true;\n const headers = new HttpHeaders({\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n const url = `${this.environment.BASE_URL}/bots?bot_id=${this.botId}`;\n return this.http.get(url, { headers }).pipe(\n switchMap((res: any) => {\n this.botName = this.getTranslation(res.Name);\n this.botIcon = res.Icon;\n this.botSkills = res?.Skills;\n this.greetingMsg = res.Greeting\n ? (this.processMessageForDisplay(res.Greeting) as any)\n : '';\n\n this.thumbsDownMessages = res?.NegativeResponses?.length\n ? res.NegativeResponses\n : [\n this.getTranslation(\n `We are sorry we've not been able to answer your question`,\n ),\n ];\n this.quickPrompts = res.QuickPrompts;\n this.cdr.markForCheck();\n this.loading = false;\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n this.loading = false;\n return of(null);\n }),\n );\n }\n\n fetchChatHistory(): Observable<any> {\n this.loading = true;\n\n this.conversationKey = this.conversationService.getKey(\n this.botId,\n false,\n this.eventId,\n );\n this.conSessionKey = this.conversationService.getSessionKey(\n this.botId,\n false,\n this.eventId,\n );\n const url = `${this.environment.BASE_URL}/conversations/${this.conversationKey}?session_id=${this.conSessionKey}`;\n const headers = new HttpHeaders({\n accept: 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n\n return this.http\n .get(url, { headers })\n .pipe(catchError(this.handleError<any>('fetchConversation')));\n }\n\n private handleError<T>(operation = 'operation', result?: T) {\n return (error: any): Observable<T> => {\n console.error(`${operation} failed: ${error.message}`);\n return of(result as T);\n };\n }\n // fetchChatHistory() {\n // this.loading = true;\n // const headers = new HttpHeaders({\n // 'Content-Type': 'application/json',\n // 'x-api-key': this.apiKey,\n // });\n // return this.http\n // .get(`${this.environment.BASE_URL}/conversations/${this.conversationKey}`, { headers })\n // .pipe(\n // switchMap((res: any) => {\n // this.loading = false;\n // return of(res);\n // }),\n // catchError((error: any) => {\n // console.error('Error fetching chat history: ', error);\n // this.loading = false;\n // return of(null);\n // })\n // );\n // }\n\n /** Push a standard AI message from history (sources, graphs, etc.). Used when not converting to session_cards. */\n private pushAiMessageFromHistory(chat: any): void {\n const sourcesList = chat.WebLinks || [];\n const displayedSources = (chat.WebLinks || []).slice(0, 3);\n const remainingSources = (chat.WebLinks || []).slice(3);\n this.chatLog.push({\n type: 'ai',\n message: this.processMessageForDisplay(chat.Text),\n executionGraphs: chat.ExecutionGraphs,\n graphs: chat.Graphs,\n searchTerms: chat.SearchTerms,\n sourcesList: sourcesList,\n displayedSources: displayedSources,\n remainingSources: remainingSources,\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n copied: false,\n isCollapsedTrue: false,\n _id: chat._id,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n }\n\n mapChatHistory(chats: any) {\n this.chatLog.push({\n type: 'ai',\n message: this.greetingMsg,\n time: formatNow(this.timezone),\n });\n if (chats && chats?.Messages?.length) {\n chats?.Messages.forEach((chat: any) => {\n if (chat.Type == 'user') {\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(chat.Text),\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n copied: false,\n isCollapsedTrue: false,\n WorkflowExecutionId: chat.WorkflowExecutionId,\n _id: chat._id,\n });\n }\n if (chat.Type == 'ai') {\n // If this AI message came from session tools, show session cards instead of plain text\n const toolName = chat.toolresults?.tool_name;\n const isSessionTool =\n toolName === 'get_event_sessions' ||\n toolName === 'get_event_sessions_v2' ||\n toolName === 'get_sessions_by_interest' ||\n toolName === 'get_sessions_by_track' ||\n toolName === 'get_speaker_sessions' ||\n toolName === 'get_upcoming_sessions' ||\n toolName === 'get_my_agenda';\n if (\n isSessionTool &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n let sessions: any[] = [];\n try {\n const parsed = JSON.parse(contentStr);\n sessions = parsed?.sessions ?? [];\n } catch (e) {\n sessions = this.parseSessionContentV2(contentStr);\n }\n const mapped = this.mapSessionsToCardData(sessions);\n this.ensureSpeakersForSessionCards(mapped);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'session_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n sessionCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_event_attendees' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_event_attendees, show attendee cards on initial history load\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const attendees = parsed?.attendees ?? [];\n const mapped = this.mapAttendeesToCardData(attendees);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'attendee_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n attendeeCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_event_speakers' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_event_speakers, show speaker cards on initial history load\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const speakers = parsed?.speakers ?? parsed?.speaker ?? [];\n const mapped = this.mapSpeakersToCardData(speakers);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'speaker_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n speakerCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_event_sponsors' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_event_sponsors, show sponsor cards on initial history load\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const sponsors = parsed?.sponsors ?? [];\n const mapped = this.mapSponsorsToCardData(sponsors);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'sponsor_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n sponsorCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_event_booths' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_event_booths, show booth cards using sponsor card design\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const booths = parsed?.booths ?? [];\n const mapped = this.mapBoothsToCardData(booths);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'sponsor_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n sponsorCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_booth_representatives' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_booth_representatives, show booth rep cards (attendee design)\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const representatives = parsed?.representatives ?? [];\n const mapped = this.mapBoothRepsToCardData(representatives);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'booth_rep_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n boothRepCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n }\n });\n this.showStartAgain = true;\n }\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n processMessage(message: string): SafeHtml {\n if (!message || !(message?.length > 0)) {\n return '';\n }\n\n // console.log('here is my message')\n // console.log(message);\n\n message = message.trim();\n\n const markdownLinkRegex = /\\[([^[]+)]\\(([^)]+)\\)/g;\n const urlRegex = /(?<!href=\")\\bhttps?:\\/\\/\\S+(?<![.,])/gi;\n\n if (markdownLinkRegex.test(message)) {\n const html = message.replace(\n markdownLinkRegex,\n '<a href=\"$2\" target=\"_blank\">$1</a>',\n );\n //console.log('Sanitized message: ', message);\n return this.sanitizeHtml(html);\n }\n\n if (urlRegex.test(message)) {\n const html = message.replace(\n urlRegex,\n '<a href=\"$&\" target=\"_blank\">$&</a>',\n );\n // console.log('Sanitized message: ', message);\n return this.sanitizeHtml(html);\n }\n\n message = message.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n message = message.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n // Convert Markdown headers to HTML headers\n message = message.replace(/^(#{1,6})\\s+(.*)$/gm, (match, hashes, text) => {\n const level = hashes.length;\n return `<h${level}>${text}</h${level}>`;\n });\n\n this.cdr.markForCheck();\n const sanitizedMessage = this.sanitizeHtml(message);\n return sanitizedMessage;\n }\n\n ngAfterViewChecked() {\n const feedbackLinks =\n this.elementRef.nativeElement.querySelectorAll('.feedback-link');\n feedbackLinks.forEach((link: any) => {\n link.addEventListener(\n 'click',\n this.onFeedbackClick.bind(this, 'zendesk'),\n );\n });\n // if (this.elementRef.nativeElement.querySelector('.feedback-link')) {\n // this.elementRef.nativeElement\n // .querySelector('.feedback-link')\n // .addEventListener('click', this.onFeedbackClick.bind(this, 'zendesk'));\n // }\n }\n\n sanitizeHtml(html: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n\n onFeedbackClick(value: string) {\n this.feedbackEvent.emit(value);\n }\n\n onClose() {\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n this.onCloseEvent.emit();\n }\n\n sendMessageWithTile(prompt: string) {\n this.input = prompt;\n this.fetchData();\n this.scrollToBottom();\n }\n isChatingWithAi = false;\n fetchData(msg = null) {\n this.input = msg || this.input?.trim();\n this.msg = this.input;\n if (!this.input || this.loading) {\n return;\n }\n\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(this.input),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n\n try {\n const textarea = this.myInput.nativeElement;\n textarea.style.height = 'hidden'; // Reset the height\n textarea.style.height = `62px`;\n } catch (error) {}\n this.cdr.markForCheck();\n\n this.aiResponse = '';\n this.isChatingWithAi = true;\n\n this.makeAskRequest(this.input, this.agents, this.conversationKey);\n }\n fetchDataFor(msg, chat) {\n const inputMsg = msg?.trim();\n if (!inputMsg || this.loading) {\n return;\n }\n try {\n chat.relatedListItems = [];\n this.cdr.detectChanges();\n } catch (error) {}\n\n this.scrollToBottom();\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(inputMsg),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n\n this.cdr.markForCheck();\n\n this.aiResponse = '';\n this.isChatingWithAi = true;\n\n this.makeAskRequest(inputMsg, this.agents, this.conversationKey, msg, chat);\n }\n fetchSmallTalk() {\n this.loading = true;\n this.cdr.markForCheck();\n\n const url = `${this.environment.BASE_URL}/bot/small-talk/${this.botId}/${this.userId}`;\n\n this.http\n .get<{ smallTalk: string }>(url, {\n headers: {\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n },\n })\n .pipe(\n catchError((error) => {\n console.error('Error while fetching small talk:', error);\n\n return of(null);\n }),\n )\n .subscribe((response) => {\n this.loading = false;\n this.cdr.markForCheck();\n\n if (!response) {\n return;\n }\n\n if (response && response.smallTalk) {\n this.chatLog.push({\n type: 'ai',\n message: this.processMessage(response.smallTalk),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 2;\n // this.scrollToBottom();\n this.cdr.markForCheck();\n }\n });\n }\n\n readAllChunks = (stream: any) => {\n const reader = stream.getReader();\n const allSuggestions: string[] = [];\n\n reader.closed.catch((err: any) => {\n if (err) {\n console.error('Error reading stream: ', err);\n }\n\n this.isChatingWithAi = false;\n this.scrollToBottom();\n return;\n });\n\n return new ReadableStream({\n start: (controller) => {\n return this.pump(controller, reader, allSuggestions);\n },\n });\n };\n\n pump(controller: any, reader: any, allSuggestions: string[]) {\n reader.read().then(({ done, value }: any) => {\n const lastItem = this.chatLog[this.chatLog.length - 1];\n\n if (done) {\n lastItem.message = this.processMessageForDisplay(lastItem.message);\n this.chatLog.pop();\n this.chatLog.push(lastItem);\n if (allSuggestions?.length) {\n this.chatLog.push({\n type: 'suggestions',\n suggestions: allSuggestions,\n });\n }\n\n controller.close();\n this.isChatingWithAi = false;\n // this.scrollToBottom();\n this.cdr.markForCheck();\n this.showStartAgain = true;\n\n // setTimeout(() => {\n // this.fetchSmallTalk();\n // },1000)\n return;\n }\n\n let decodedChunk = this.decoder.decode(value, { stream: true });\n this.aiResponse += decodedChunk;\n if (lastItem.type === 'ai') {\n const suggestionsMatch = this.aiResponse.match(/<sug>(.*?)<\\/sug>/g);\n if (suggestionsMatch) {\n suggestionsMatch.forEach((match) => {\n this.aiResponse = this.aiResponse.replace(match, '');\n allSuggestions.push(match?.replace(/<\\/?sug>/g, ''));\n });\n }\n\n lastItem.message = this.aiResponse;\n this.cdr.markForCheck();\n } else {\n this.isChatingWithAi = false;\n\n let aiFormattedData: any;\n\n try {\n console.log('parsing json ');\n aiFormattedData = JSON.parse(JSON.parse(this.aiResponse));\n } catch (e) {\n try {\n console.log('parsing json 2');\n aiFormattedData = JSON.parse(this.aiResponse);\n } catch (e) {}\n }\n\n console.log('parsing json done');\n\n if (aiFormattedData && aiFormattedData?.section_id?.length > 0) {\n if (\n aiFormattedData.section_id == 'company_search' ||\n aiFormattedData.section_id == 'user_search' ||\n aiFormattedData.section_id == 'industry_company_search'\n ) {\n this.fetchMyConnections().subscribe();\n this.fetchPendingRequests().subscribe();\n }\n\n if (aiFormattedData.section_id == this.myUpcomingSessionAction) {\n var speakerIds = [];\n aiFormattedData.content?.forEach((session) => {\n speakerIds = [...speakerIds, ...session.speakers];\n });\n\n if (speakerIds?.length > 0)\n this.getSpeakersByStaffIds(speakerIds).subscribe();\n }\n\n if (\n aiFormattedData.section_id == this.addToMyAgendaAction &&\n aiFormattedData.content?.length > 0\n ) {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n sessionIds: aiFormattedData.content,\n });\n }\n\n if (aiFormattedData.section_id == this.connectOrFollowAction) {\n let usersLen = aiFormattedData.content?.length;\n if (usersLen > 1) {\n this.openPage.next({\n sectionId: 'open_networking_drawer',\n search: aiFormattedData.content,\n });\n } else if (usersLen == 1) {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n connetUserIds: [aiFormattedData.content[0].userId],\n });\n }\n }\n\n if (aiFormattedData.is_open_page == 'true') {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n search: aiFormattedData.content,\n });\n\n if (this.isMobileBrowser()) {\n aiFormattedData.message +=\n '\\n\\n' + '<a id=\"closeBotNow\">Click Here</a> to see results.';\n }\n }\n\n this.chatLog.push({\n type: 'ai',\n message: aiFormattedData.message,\n action: aiFormattedData,\n time: formatNow(this.timezone),\n });\n\n if (this.isMobileBrowser()) {\n setTimeout(() => {\n this.addCloseBotClickEvent();\n }, 500);\n }\n\n this.aiResponse = '';\n } else {\n this.chatLog.push({\n type: 'ai',\n message: this.aiResponse,\n time: formatNow(this.timezone),\n });\n }\n\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n this.cdr.markForCheck();\n }\n\n this.scrollToBottom();\n\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n this.pump(controller, reader, allSuggestions);\n });\n }\n\n submitFeedback(flag: boolean, message) {\n console.log(message);\n\n this.feedbackDone = true;\n this.showFeedBackIconsIndex = null;\n const conversation_id = this.conversationService.getKey(\n this.botId,\n false,\n this.eventId,\n );\n const url = `${this.environment.AGENTS_API}/Conversation/coPilot/${this.botId}/conversation/${conversation_id}/helpful-response`;\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n apiKey: 'Conversation_WIz/qAm+EEmfOkFaUA/weA==',\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n },\n body: JSON.stringify({ messageId: message._id, isHelpful: flag }),\n }).then(() => {\n if (flag) {\n this.chatLog.push({\n type: 'ai',\n message:\n this.thumbsUpMessage ||\n this.getTranslation('May I assist you with anything else'),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n\n this.scrollToBottom();\n this.cdr.markForCheck();\n this.feedbackDone = false;\n this.showFeedBackIconsIndex = null;\n return;\n }\n\n this.chatLog.push({\n type: 'ai',\n message: this.processMessage(\n this.thumbsDownMessages[this.thumbsDownMsgIndex],\n ),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n this.thumbsDownMsgIndex =\n (this.thumbsDownMsgIndex + 1) % this.thumbsDownMessages.length;\n this.scrollToBottom();\n this.cdr.markForCheck();\n setTimeout(() => {\n const supportLink = document.getElementById('supportLink88');\n if (supportLink) {\n supportLink.addEventListener('click', this.triggerSupport.bind(this));\n }\n }, 200);\n this.feedbackDone = false;\n this.showFeedBackIconsIndex = null;\n });\n }\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n // Prevent default behavior (new line)\n event.preventDefault();\n // Call your submit function\n this.handleSubmit(event);\n }\n }\n handleSubmit(event) {\n this.fetchData();\n this.scrollToBottom();\n }\n\n /** Index of the last AI message in chatLog; -1 if none. */\n get lastAiMessageIndex(): number {\n for (let j = this.chatLog.length - 1; j >= 0; j--) {\n if (this.chatLog[j]?.type === 'ai') return j;\n }\n return -1;\n }\n\n handleUpClick(idx: any) {\n if (this.feedbackDone) {\n return;\n }\n\n this.submitFeedback(true, this.chatLog[idx]);\n this.chatLog[idx].liked = !this.chatLog[idx].liked;\n\n if (this.chatLog[idx].unliked) {\n this.chatLog[idx].unliked = !this.chatLog[idx].unliked;\n }\n\n this.cdr.markForCheck();\n }\n\n handleDownClick(idx: any) {\n if (this.feedbackDone) return;\n this.submitFeedback(false, this.chatLog[idx]);\n this.chatLog[idx].unliked = !this.chatLog[idx].unliked;\n if (this.chatLog[idx].liked)\n this.chatLog[idx].liked = !this.chatLog[idx].liked;\n }\n // handleCopyClick(index: any) {\n // // Copy the message to the clipboard\n // const contentToCopy = this.chatLog[index].message;\n // console.log('contentToCopy');\n // console.log(contentToCopy);\n // navigator.clipboard.writeText(contentToCopy).then(() => {\n // // Indicate that the message was copied\n // this.chatLog[index].copied = true;\n // this.cdr.detectChanges();\n // // Reset the copied state after a delay\n // setTimeout(() => {\n // this.chatLog[index].copied = false;\n // this.cdr.detectChanges();\n // }, 2000); // Reset after 2 seconds\n // });\n // }\n copyText(id, index) {\n // Get the text element\n var textElement = document.getElementById(id);\n\n // Create a temporary textarea element to copy the text\n var tempTextArea = document.createElement('textarea');\n tempTextArea.value = textElement.innerText;\n\n // Append the textarea to the body (necessary for the execCommand to work)\n document.body.appendChild(tempTextArea);\n\n // Select the text inside the textarea\n tempTextArea.select();\n\n // Copy the text to the clipboard\n document.execCommand('copy');\n\n // Remove the temporary textarea\n document.body.removeChild(tempTextArea);\n\n // Optionally, you can alert the user or change the button text to indicate the copy was successful\n // alert('Text copied to clipboard!');\n\n this.chatLog[index].copied = true;\n this.cdr.detectChanges();\n // Reset the copied state after a delay\n setTimeout(() => {\n this.chatLog[index].copied = false;\n this.cdr.detectChanges();\n }, 2000); // Reset after 2 seconds\n }\n handleCopyClick(index: any) {\n // Copy the message to the clipboard\n const contentToCopy = this.chatLog[index].message;\n const resutlt = this.copyText('messageText_' + index, index);\n }\n\n sanitizeHTML(html: string): string {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n\n // Create a new document fragment to hold the simplified content\n const fragment = document.createDocumentFragment();\n\n // Append the children of the body of the parsed document to the fragment\n Array.from(doc.body.childNodes).forEach((node) => {\n fragment.appendChild(node.cloneNode(true));\n });\n\n // Create a new div element to hold the simplified HTML\n const simplifiedDiv = document.createElement('div');\n simplifiedDiv.appendChild(fragment);\n\n // Remove complex tags or attributes as needed\n // Example: remove scripts\n simplifiedDiv\n .querySelectorAll('script')\n .forEach((script) => script.remove());\n\n // Return the simplified HTML as a string\n return simplifiedDiv.innerHTML;\n }\n\n currentMessageForEditor: any = '';\n currentIndexForEditor: any = -1;\n handleEditorClick(index: any) {\n if (this.currentIndexForEditor == -1) {\n this.currentIndexForEditor = index;\n this.currentMessageForEditor = this.sanitizeHTML(\n this.chatLog[index].message,\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n // 'SafeValue must use [property]=binding:',\n '',\n );\n\n this.cdr.detectChanges();\n } else {\n if (this.currentIndexForEditor == index) {\n this.currentMessageForEditor += this.sanitizeHTML(\n this.chatLog[index].message,\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n // 'SafeValue must use [property]=binding:',\n '',\n );\n this.cdr.detectChanges();\n } else {\n this.currentIndexForEditor = index;\n this.currentMessageForEditor = this.sanitizeHTML(\n this.chatLog[index].message,\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n // 'SafeValue must use [property]=binding:',\n '',\n );\n this.cdr.detectChanges();\n }\n }\n this.chatLog[index].isEditor = true;\n this.cdr.detectChanges();\n // Reset the copied state after a delay\n setTimeout(() => {\n this.chatLog[index].isEditor = false;\n this.cdr.detectChanges();\n }, 2000); // Reset after 2 seconds\n this.editorsDrawer.open();\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n this.cdr.detectChanges();\n }\n scrollToBottom() {\n if (!this.autoScrollOnNewMessage) {\n return;\n }\n let counter = 0;\n const interval = setInterval(() => {\n this.chatMain.nativeElement.scrollTop =\n this.chatMain.nativeElement.scrollHeight;\n if (counter++ > 5) clearInterval(interval);\n }, 5);\n }\n\n focusOnTextarea() {\n setTimeout(() => {\n if (this.myInput && this.myInput.nativeElement) {\n this.myInput.nativeElement.focus();\n }\n }, 100);\n }\n\n handleAction(action: any) {\n console.info('incoming action from the chatbot AI');\n console.info(action);\n\n if (action?.content) {\n }\n }\n\n ngAfterViewInit() {\n // Check if the drawer is initially open and apply overflow hidden to body if so\n if (this.drawer.opened) {\n this.setBodyOverflow();\n }\n\n // Listen to changes in the drawer being opened or closed\n this.drawer.openedChange.subscribe((opened: boolean) => {\n if (opened) {\n this.setBodyOverflow();\n } else {\n this.removeBodyOverflow();\n }\n });\n\n this.drawer.openedChange.subscribe((opened) => {\n if (opened) {\n setTimeout(() => {\n if (this.myInput && this.myInput.nativeElement) {\n this.myInput.nativeElement.focus(); // Focus on the textarea\n }\n });\n }\n });\n }\n\n private setBodyOverflow() {\n this.renderer.addClass(document.body, this.bodyOverflowClass);\n }\n\n private removeBodyOverflow() {\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n }\n\n getSpeakersByStaffIds(ids: any[]): Observable<any[] | null> {\n const url = `${this.environment.USERS_API}/events/${this.eventId}/users/get-by-staff-ids`;\n const cleanIds = Array.from(\n new Set((ids || []).map((x) => String(x ?? '').trim()).filter(Boolean)),\n );\n if (cleanIds.length === 0) return of(null);\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n });\n return this.http.post<any[]>(url, cleanIds, { headers }).pipe(\n tap((data: any[]) => {\n if (Array.isArray(data) && data.length > 0) {\n data.forEach((speaker) => {\n const id = String(speaker?.id ?? '').trim();\n if (id) this.speakers[id] = speaker;\n });\n this.cdr.markForCheck();\n }\n }),\n catchError((err) => {\n console.error('Error fetching speakers:', err);\n return of(null);\n }),\n );\n }\n\n performSessionAction(sessionId, action) {\n this.sessionActions.next({\n sessionId,\n action,\n });\n }\n\n addCloseBotClickEvent() {\n const element = this.elementRef.nativeElement.querySelector('#closeBotNow');\n if (element) {\n this.renderer.listen(element, 'click', () => {\n this.closeBot.next(null);\n });\n }\n }\n\n isMobileBrowser() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n }\n\n connectToUser(userId) {\n this.connectWithUser.emit({\n connect: !this.canDisconnect(userId),\n userId,\n });\n\n setTimeout(() => {\n this.fetchMyConnections().subscribe((res) => {\n this.cdr.markForCheck();\n });\n this.fetchPendingRequests().subscribe((res) => {\n this.cdr.markForCheck();\n });\n }, 500);\n }\n\n scheduleMeetingWithUser(user) {\n this.scheduleMeeting.emit(user);\n }\n\n /** Whether the given userId has a pending connection request sent (show \"Request Sent\" disabled). */\n checkPendingSentRequest(userId: string | null | undefined): boolean {\n if (userId == null || userId === '') return false;\n const pending = this.pendingSentRequestUserIds?.length\n ? this.pendingSentRequestUserIds\n : this.pendingRequests;\n return !!pending?.find((a: any) => a == userId);\n }\n\n /** Whether this attendee can be followed (show \"Connect\" button). Not connected and no pending sent request. */\n canFollowUser(attendee: { id?: string }): boolean {\n const uid = attendee?.id;\n if (uid == null || uid === '') return false;\n if (this.canUnfollowUser(attendee) || this.checkPendingSentRequest(uid))\n return false;\n return true;\n }\n\n /** Whether this attendee is already connected (show \"Disconnect\" button). */\n canUnfollowUser(attendee: { id?: string }): boolean {\n const uid = attendee?.id;\n if (uid == null || uid === '') return false;\n const list = this.connectionsList?.length\n ? this.connectionsList\n : this.myConnections;\n return !!list?.find((c: any) => (c.userId ?? c.id) == uid);\n }\n\n canConnect(userId) {\n return !(\n this.canDisconnect(userId) ||\n this.pendingRequests.find((a) => a == userId)\n );\n }\n\n canDisconnect(userId) {\n return this.myConnections.find((conn) => conn.userId == userId);\n }\n\n fetchPendingRequests() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n });\n return this.http\n .get(\n `${this.environment.USERS_API}/events/${this.eventId}/connection-requests/autogen/pending-sent-requests?userId=${this.userId}`,\n { headers },\n )\n .pipe(\n switchMap((res: any) => {\n this.pendingRequests = res;\n this.cdr.markForCheck();\n return of(res);\n }),\n catchError((error: any) => {\n console.error('Error fetching pending requests: ', error);\n return of(null);\n }),\n );\n }\n\n fetchMyConnections() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n });\n return this.http\n .get(\n `${this.environment.USERS_API}/events/${this.eventId}/users-connections/autogen?userId=${this.userId}`,\n { headers },\n )\n .pipe(\n switchMap((res: any) => {\n this.myConnections = res;\n this.cdr.markForCheck();\n return of(res);\n }),\n catchError((error: any) => {\n console.error('Error fetching pending requests: ', error);\n return of(null);\n }),\n );\n }\n\n isDropdownOpen: boolean = false;\n agents: any;\n selectedAgents = [];\n allSelected = false;\n // Toggle the dropdown visibility\n toggleDropdown() {\n if (!this.agents) this.fetchAgents();\n this.isDropdownOpen = !this.isDropdownOpen;\n this.cdr.detectChanges();\n }\n\n onSelectAll(event: Event): void {\n this.agents?.forEach((agent) => (agent.selected = false));\n this.cdr.detectChanges();\n }\n\n onAgentChange(agent: any): void {\n //agent.selected = !agent.selected;\n //console.log(agent);\n let agentFound = this.agents.filter((p) => p.id == agent.id);\n if (agentFound && agentFound.length > 0) {\n agentFound[0].selected = !agentFound[0].selected;\n this.cdr.detectChanges();\n }\n this.cdr.detectChanges();\n }\n\n areAllSelected(): boolean {\n return this.agents?.every((agent) => !agent.selected);\n }\n\n getDropdownHeaderText(): string {\n const selectedAgents = this.agents?.filter((agent) => agent.selected);\n if (!selectedAgents) {\n return 'All Agents';\n } else {\n if (selectedAgents && selectedAgents?.length === 0) {\n return 'All Agents';\n } else {\n return selectedAgents?.length > 1\n ? `${selectedAgents?.length} Agents Selected`\n : `${selectedAgents?.length} Agent Selected`;\n }\n }\n }\n fetchAgents_http() {\n this.loading = true;\n const url = `${this.environment.AGENTS_API}/CoPilot/${this.botId}/active-agents`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n });\n\n return this.http.post(url, {}, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n this.agents = res.map((agent) => ({\n ...agent,\n selected: false,\n }));\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n }),\n );\n }\n isDocInEditMode = false;\n documentContent: any;\n\n conversationId: any;\n isContentLoaded = false;\n\n fetchContent_http() {\n this.isDocInEditMode = false;\n this.isContentLoaded = false;\n console.log('API call function');\n this.loading = true;\n const conversation_id = this.conversationService.getKey(\n this.botId,\n false,\n this.eventId,\n );\n this.conversationId = conversation_id;\n const url = `${this.environment.AGENTS_API}/ConversationDocuments?conversationId=${conversation_id}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n 'domain-authority': this.domainAuthorityValue,\n });\n\n return this.http.get(url, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n this.isDocInEditMode = true;\n this.documentContent = res;\n console.log('Get API callled success');\n this.isContentLoaded = true;\n console.log(res);\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config DJ: ', error);\n this.isDocInEditMode = false;\n this.isContentLoaded = true;\n\n if (error?.status == 404) {\n console.log('dash');\n this.isDocInEditMode = false;\n this.isContentLoaded = true;\n }\n return of(null);\n }),\n );\n }\n\n fetchAgents() {\n this.fetchAgents_http().subscribe();\n }\n\n fetchEditorContent() {\n this.fetchContent_http().subscribe();\n }\n\n // events/${eventId}/users-connections\n processMessageForDisplay(markdown: string): SafeHtml {\n try {\n // Create a custom renderer to modify <a> tags\n const renderer = new marked.Renderer();\n\n // Customize anchor tags to include target=\"_blank\"\n renderer.link = (href: string, title: string, text: string) => {\n return `<a href=\"${href}\" title=\"${\n title || ''\n }\" target=\"_blank\">${text}</a>`;\n };\n\n // Parse the markdown content to HTML using marked with the custom renderer\n const markdownContent = marked.parse(markdown, { renderer: renderer });\n\n // Sanitize the parsed HTML using Angular's DomSanitizer\n const sanitizedHtml =\n this.sanitizer.bypassSecurityTrustHtml(markdownContent);\n\n // Return the safe HTML content for display\n return sanitizedHtml;\n } catch (error) {\n console.error('Error processing markdown:', error);\n return ''; // Return an empty string or handle the error appropriately\n }\n }\n\n prepareHtml(markdown: string): string {\n if (!markdown || !(markdown.length > 0)) {\n console.error('Input Markdown is null or empty');\n return '';\n }\n\n // Convert Markdown headers (### or ##) to <strong> for bold headings\n let html = markdown.replace(\n /^(#{1,6})\\s+(.*)$/gm,\n (match, hashes, text) => {\n const level = hashes.length;\n if (level === 3) {\n return `<h3><strong>${text}</strong></h3>`;\n } else if (level === 4) {\n return `<h4><strong>${text}</strong></h4>`;\n }\n return `<strong>${text}</strong>`;\n },\n );\n\n // Convert Markdown code blocks with language to preformatted HTML\n html = html.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (match, lang, code) => {\n const escapedCode = this.escapeHtml(code);\n const language = lang || 'plaintext';\n\n // Create a copy button for the code block\n return `\n <div class=\"code-container\">\n <button id=\"copy-button\" class=\"copy-button\" (click)=\"copyToClipboard('\\`${escapedCode}\\`')\">${this.getTranslation(\n 'Copy',\n )}</button>\n <pre class=\"code_block diff\"><code class=\"language-${language}\">${escapedCode}</code></pre>\n </div>`;\n });\n\n // Convert inline code (wrapped in `backticks`) to inline <code> tags\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\n\n // Convert Markdown bold to HTML <strong>\n html = html.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n\n // Convert numbered lists\n html = html.replace(/^\\d+\\.\\s+(.*)$/gm, '<li>$1</li>');\n\n // Convert bullet point lists\n html = html.replace(/^\\-\\s+(.*)$/gm, '<li>$1</li>');\n\n // Convert Markdown links to HTML links\n html = html.replace(\n /\\[([^\\]]+)]\\(([^)]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\">$1</a>',\n );\n\n // Convert new lines to <br> tags for paragraphs\n html = html.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n return html;\n }\n\n // Helper function to escape HTML characters for code blocks\n escapeHtml(code: string): string {\n return code\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n // Function to copy text to clipboard\n public copyToClipboard(text: string) {\n navigator.clipboard.writeText(text).then(\n () => {\n alert('Code copied to clipboard!');\n },\n (err) => {\n console.error('Could not copy text: ', err);\n },\n );\n }\n\n isCollapsed = false;\n isCollapsedForGraph = false;\n isCollapsedForFGraph = false;\n toggleCollapse() {\n this.isCollapsed = !this.isCollapsed;\n this.cdr.detectChanges();\n }\n\n toggleCollapseGraph() {\n this.isCollapsedForGraph = !this.isCollapsedForGraph;\n this.cdr.detectChanges();\n }\n toggleCollapseFGraph() {\n this.isCollapsedForFGraph = !this.isCollapsedForFGraph;\n this.cdr.detectChanges();\n }\n // [\n // {\n // \"title\": \"AI News January 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"Each month, we compile significant news, trends, and happenings in AI, providing detailed summaries with key points in bullet form for concise yet complete understanding.\",\n // \"link\": \"https://theaitrack.com/ai-news-january-2024/\"\n // },\n // {\n // \"title\": \"Top AI News, January 2024 - Everypixel Journal\",\n // \"desc\": \"In this monthly roundup, we spotlight the top AI news stories from January, including the OpenAI vs. The New York Times Lawsuit.\",\n // \"link\": \"https://journal.everypixel.com/top-ai-news-january-2024\"\n // },\n // {\n // \"title\": \"AI News July 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"This page features AI News for July 2024, highlighting significant events such as Canva acquiring Leonardo AI.\",\n // \"link\": \"https://theaitrack.com/ai-news-july-2024-in-depth-and-concise/\"\n // },\n // {\n // \"title\": \"January news roundup: What's new in the world of AI? - Pluralsight\",\n // \"desc\": \"OpenAI’s new GPT store, business-ready ChatGPT plans, and a predicted rise in AI-powered cybercrime.\",\n // \"link\": \"https://www.pluralsight.com/resources/blog/data/ai-this-month-january-2024\"\n // },\n // {\n // \"title\": \"AI News August 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"This page features AI News for August 2024, with highlights such as Nvidia delaying the “Blackwell” B200 AI chips delivery.\",\n // \"link\": \"https://theaitrack.com/ai-news-august-2024-in-depth-and-concise-duplicate/\"\n // }\n // ]\n dateTime = { now: new Date().toISOString() };\n // Extracts the domain from a URL\n getDomainName(url: string): string {\n try {\n const { hostname } = new URL(url);\n return hostname.replace(/^www\\./, ''); // Remove 'www.' if present\n } catch {\n return 'unknown';\n }\n }\n\n // Generates the favicon URL\n getFaviconUrl(url: string): string {\n const domain = this.getDomainName(url);\n return `https://www.google.com/s2/favicons?sz=128&domain=${domain}`;\n }\n currentSourcesList: any = [];\n onCardClick(sources): void {\n this.currentSourcesList = sources;\n this.cdr.detectChanges();\n this.sourcesDrawer.open();\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n }\n\n isShowEditorButton = true;\n\n openOuterEditor() {\n this.fetchEditorContent();\n this.editorsDrawer.open();\n this.isDrawerOpen = true;\n this.isShowEditorButton = false;\n this.cdr.detectChanges();\n\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n }\n\n onCloseEditor() {\n this.editorsDrawer.close();\n this.isDrawerOpen = false;\n this.isShowEditorButton = true;\n this.cdr.detectChanges(); // Trigger change detection if needed\n this.onDrawerClosed();\n }\n\n onCloseSource() {\n this.sourcesDrawer.close();\n this.isDrawerOpen = false;\n this.cdr.detectChanges(); // Trigger change detection if needed\n this.onDrawerClosed();\n }\n onDrawerClosed() {\n setTimeout(() => {\n this.isDrawerOpen = true;\n this.cdr.detectChanges(); // Trigger change detection if needed\n // Use ngClass to dynamically apply the class\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'block';\n }\n }, 800);\n }\n isDrawerOpen = true;\n\n toggleDrawer(todo) {\n this.isDrawerOpen = todo;\n this.cdr.detectChanges();\n this.updateButtonVisibility();\n }\n updateButtonVisibility() {\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = this.isDrawerOpen ? 'block' : 'none';\n }\n }\n openLinkInNewTab(link: string): void {\n window.open(link, '_blank');\n }\n adjustTextareaHeight(event: any): void {\n try {\n if (event.key === 'Enter' && !event.shiftKey) {\n // Prevents a new line from being added\n event.preventDefault();\n }\n } catch (error) {}\n const textarea = event.target as HTMLTextAreaElement;\n textarea.style.height = 'auto'; // Reset the height\n textarea.style.height = `${textarea.scrollHeight}px`; // Adjust height to match content\n // Ensure the height doesn't exceed the max-height set in CSS\n if (textarea.scrollHeight > 150) {\n textarea.style.height = `150px`; // Adjust height to match content\n textarea.style.overflowY = 'auto'; // Enable scrolling if content exceeds 400px\n } else {\n textarea.style.overflowY = 'hidden'; // Hide scrollbar if content is within limits\n }\n }\n\n toggleWorkflows(value = null) {\n if (!this.checkForCop29BotId()) {\n this.botService.getWorkflowsByOrgId(this.orgId).subscribe((res) => {\n this.orgWorkflows = res;\n this.isWorkflowOpen = value == null ? !this.isWorkflowOpen : value;\n\n if (!this.isWorkflowOpen) {\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n }\n\n this.cdr.detectChanges();\n });\n }\n }\n\n initializeForm() {\n // Create form controls dynamically based on selectedWorkflow.Trigger.InputSchema\n const formControls = {};\n if (this.selectedWorkflow?.Trigger?.InputSchema) {\n this.selectedWorkflow.Trigger.InputSchema.forEach((input) => {\n formControls[input.InputId] = [\n input.Value || '',\n input.Required ? Validators.required : null,\n ];\n });\n }\n\n // Initialize the form\n this.workflowForm = this.fb.group(formControls);\n }\n\n onWorkflowSelected(workflow) {\n this.selectedWorkflow = workflow;\n this.initializeForm();\n this.isWorkflowOpen = false;\n this.openWorkflowInput = true;\n }\n\n onWorkflowSubmit() {\n const container = document.getElementById('botAllChat');\n if (this.workflowForm.valid) {\n console.log(this.workflowForm.value);\n\n var input = this.prepareHtml(\n this.generateMarkdown(\n this.selectedWorkflow.Name,\n this.workflowForm.value,\n ),\n );\n\n // update last two chatLog entries, set showWorkflowExecutionLoader = false\n try {\n this.chatLog[this.chatLog.length - 1]['showWorkflowExecutionLoader'] =\n false;\n this.chatLog[this.chatLog.length - 2]['showWorkflowExecutionLoader'] =\n false;\n } catch (error) {}\n\n this.chatLog.push({\n type: 'user',\n message: input,\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n showWorkflowExecutionLoader: true,\n });\n\n console.log(input);\n\n this.currentWorkflowActionProgress = 0;\n this.currentWorkflowAction =\n 'Executing ' + this.selectedWorkflow.Actions[0].Name;\n this.isChatingWithAi = true;\n this.executingWorkflow = true;\n this.workflowExecutionDetails = {\n Actions: this.selectedWorkflow.Actions,\n Inputs: this.workflowForm.value,\n workflowInputs: this.workflowForm.value,\n WorkflowName: this.selectedWorkflow.Name,\n };\n this.currentWorkflowExecutionDetails = this.workflowExecutionDetails;\n this.scrollToBottom();\n\n this.cdr.detectChanges();\n\n // execute the ask endpoint with workflow input\n this.makeAskRequest(\n input,\n this.agents,\n this.conversationKey,\n '',\n null,\n this.selectedWorkflow['_id'],\n this.workflowForm.value,\n );\n }\n }\n\n makeAskRequest(\n inputMsg: string,\n agents: any[],\n conversationId: string,\n msg?: any,\n chat?: any,\n workflowId?: string,\n workflow_inputs?: any,\n ): void {\n const body = {\n user_question: inputMsg,\n user_id: this.userId,\n bot_id: this.botId,\n message_id: this.conversationService.generateKey(),\n session_id: this.conSessionKey,\n agents: agents?.filter((p) => p.selected).map((p) => p.id) ?? [],\n conversation_id: conversationId,\n first_name: this.firstName,\n last_name: this.lastName,\n };\n\n if (workflowId) {\n body['workflow_id'] = workflowId;\n body['workflow_inputs'] = workflow_inputs;\n }\n\n const usersApi = this.environment.USERS_API;\n this.platformTokenRefresh\n .ensureValidAccessToken(this.s27Token, usersApi)\n .pipe(take(1))\n .subscribe({\n next: (ensured) => {\n let bearer = ensured.accessToken || this.s27Token || '';\n if (ensured.refreshed && ensured.accessToken) {\n this.s27Token = ensured.accessToken;\n if (ensured.authResponse) {\n this.tokensRefreshed.emit(ensured.authResponse);\n }\n }\n this.sendAskMessageOverWebSocket(body, bearer, msg, chat);\n },\n error: () => {\n this.is401 = true;\n this.refreshToken.emit();\n if (msg && chat) {\n this.msg = msg;\n this.chat = chat;\n this.isFetchDataFor = true;\n }\n this.isChatingWithAi = false;\n },\n });\n\n this.input = '';\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n this.isWorkflowOpen = false;\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n private buildAskHeaders(bearerToken: string): any {\n const headers: any = {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + bearerToken,\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n };\n\n if (this.eventUrl) {\n headers['eventurl'] = this.eventUrl;\n }\n if (this.eventId) {\n headers['eventid'] = this.eventId;\n }\n if (this.eventToken) {\n headers['eventtoken'] = this.eventToken;\n }\n if (this.workspaceToken) {\n headers['workspaceToken'] = this.workspaceToken;\n }\n return headers;\n }\n\n private handleAskUnauthorized(msg?: any, chat?: any): void {\n this.is401 = true;\n this.refreshToken.emit();\n if (msg && chat) {\n this.msg = msg;\n this.chat = chat;\n this.isFetchDataFor = true;\n }\n this.isChatingWithAi = false;\n }\n\n private disconnectAskWebSocket(): void {\n if (this.askWebSocket) {\n try {\n this.askWebSocket.close();\n } catch (error) {}\n this.askWebSocket = null;\n }\n this.askWebSocketConnectionKey = '';\n this.activeAskMessageId = '';\n }\n\n private async ensureAskWebSocket(\n bearerToken: string,\n conversationId: string,\n sessionId: string,\n msg?: any,\n chat?: any,\n ): Promise<void> {\n const connectionKey = `${conversationId}:${sessionId}`;\n if (\n this.askWebSocket &&\n this.askWebSocket.readyState === WebSocket.OPEN &&\n this.askWebSocketConnectionKey === connectionKey\n ) {\n return;\n }\n\n this.disconnectAskWebSocket();\n\n const askNewUrl = `${this.environment.BASE_URL}/ai/ask-new`;\n const connectBody = {\n bot_id: this.botId,\n conversation_id: conversationId,\n session_id: sessionId,\n mcp_enable: false,\n };\n\n const response = await fetch(askNewUrl, {\n method: 'POST',\n headers: this.buildAskHeaders(bearerToken),\n body: JSON.stringify(connectBody),\n });\n\n if (response.status === 401 || response.status === 403) {\n this.handleAskUnauthorized(msg, chat);\n throw new Error(`Unauthorized while connecting ask websocket (${response.status})`);\n }\n\n if (!response.ok) {\n const responseText = await response.text();\n throw new Error(\n `Failed to initialize ask websocket (${response.status}): ${responseText}`,\n );\n }\n\n const data = await response.json();\n const wsUrl = data?.ws_url;\n if (!wsUrl || typeof wsUrl !== 'string') {\n throw new Error('ask-new response missing ws_url');\n }\n\n await new Promise<void>((resolve, reject) => {\n const ws = new WebSocket(wsUrl);\n let settled = false;\n\n ws.onopen = () => {\n if (settled) return;\n settled = true;\n this.askWebSocket = ws;\n this.askWebSocketConnectionKey = connectionKey;\n resolve();\n };\n\n ws.onmessage = (event) => {\n this.handleAskWebSocketMessage(event?.data);\n };\n\n ws.onerror = () => {\n if (settled) return;\n settled = true;\n reject(new Error('Ask websocket connection error'));\n };\n\n ws.onclose = () => {\n if (!settled) {\n settled = true;\n reject(new Error('Ask websocket closed before opening'));\n return;\n }\n this.askWebSocket = null;\n };\n });\n }\n\n private upsertAiChatMessage(messageId: string): any {\n let currentChatMessage = this.chatLog.find((p) => p._id == messageId);\n if (!currentChatMessage) {\n currentChatMessage = {\n _id: messageId,\n type: 'ai',\n message: '',\n time: formatNow(this.timezone),\n };\n this.chatLog.push(currentChatMessage);\n }\n return currentChatMessage;\n }\n\n private handleAskWebSocketMessage(rawMessage: any): void {\n if (!rawMessage) return;\n\n let parsed: any = null;\n try {\n parsed =\n typeof rawMessage === 'string' ? JSON.parse(rawMessage) : rawMessage ?? null;\n } catch (error) {\n console.warn('[AskNew WS] Non-JSON payload:', rawMessage);\n return;\n }\n if (!parsed || typeof parsed !== 'object') return;\n\n const payload = parsed?.data ?? {};\n const messageId =\n payload?.message_id || parsed?.message_id || this.activeAskMessageId || '';\n\n switch (parsed?.type) {\n case 'chunk': {\n if (!messageId) return;\n const currentChatMessage = this.upsertAiChatMessage(messageId);\n currentChatMessage.message = `${currentChatMessage.message || ''}${payload?.text || ''}`;\n this.scrollToBottom();\n this.cdr.markForCheck();\n break;\n }\n case 'answer': {\n if (!messageId) {\n this.isChatingWithAi = false;\n this.cdr.markForCheck();\n break;\n }\n const currentChatMessage = this.upsertAiChatMessage(messageId);\n const finalAnswer = payload?.text ?? currentChatMessage.message ?? '';\n currentChatMessage.message = this.processMessageForDisplay(finalAnswer);\n if (Array.isArray(payload?.suggestions)) {\n currentChatMessage.relatedListItems = payload.suggestions;\n }\n if (Array.isArray(payload?.web_results)) {\n currentChatMessage.sourcesList = payload.web_results;\n currentChatMessage.displayedSources = payload.web_results?.slice(0, 3);\n currentChatMessage.remainingSources = payload.web_results?.slice(3);\n }\n if (payload?.tool_results) {\n currentChatMessage.toolResults = payload.tool_results;\n }\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n this.activeAskMessageId = '';\n this.isChatingWithAi = false;\n this.scrollToBottom();\n this.focusOnTextarea();\n this.cdr.markForCheck();\n break;\n }\n case 'error': {\n this.activeAskMessageId = '';\n this.isChatingWithAi = false;\n this.cdr.markForCheck();\n break;\n }\n case 'status':\n default:\n break;\n }\n }\n\n private sendAskMessageOverWebSocket(\n body: any,\n bearerToken: string,\n msg?: any,\n chat?: any,\n ): void {\n const conversationId = body?.conversation_id || this.conversationKey || '';\n const sessionId = body?.session_id || this.conSessionKey || '';\n if (!conversationId || !sessionId) {\n this.isChatingWithAi = false;\n return;\n }\n\n this.ensureAskWebSocket(bearerToken, conversationId, sessionId, msg, chat)\n .then(() => {\n if (!this.askWebSocket || this.askWebSocket.readyState !== WebSocket.OPEN) {\n throw new Error('Ask websocket is not open');\n }\n this.activeAskMessageId = body?.message_id || '';\n this.askWebSocket.send(JSON.stringify(body));\n this.is401 = false;\n })\n .catch((err) => {\n console.error('Error sending ask-new websocket message:', err);\n this.isChatingWithAi = false;\n this.cdr.markForCheck();\n });\n }\n\n makeAskRequestold(\n inputMsg: string,\n agents: any[],\n conversationId: string,\n msg?: any,\n chat?: any,\n workflowId?: string,\n workflow_inputs?: any,\n ): void {\n const url = `${this.environment.BASE_URL}/ai/ask`;\n\n const body: any = {\n user_question: inputMsg,\n user_id: this.userId,\n bot_id: this.botId,\n message_id: this.conversationService.generateKey(),\n agents: agents?.filter((p) => p.selected).map((p) => p.id) ?? [],\n conversation_id: conversationId,\n first_name: this.firstName,\n last_name: this.lastName,\n };\n\n if (workflowId) {\n body['workflow_id'] = workflowId;\n body['workflow_inputs'] = workflow_inputs;\n }\n\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n eventId: this.eventId,\n });\n\n this.http.post(url, body, { headers }).subscribe({\n next: (data) => {\n console.log(data);\n // Additional response handling if needed\n },\n error: (err) => {\n console.error('Error: ', err);\n this.isChatingWithAi = false;\n },\n });\n\n this.input = '';\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n this.isWorkflowOpen = false;\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n generateMarkdown(title, obj) {\n // Initialize markdown with the title\n let markdown = `## ${title}\\n`;\n\n // Loop through the object and append the field names and values\n for (const [key, value] of Object.entries(obj)) {\n var key_label =\n this.selectedWorkflow.Trigger.InputSchema.find(\n (input) => input.InputId === key,\n )?.Label || key;\n markdown += `- **${key_label}**: ${value}\\n`;\n }\n\n return markdown;\n }\n\n showWorkflowHistoryDetails(workflow_id) {\n if (!workflow_id) {\n this.workflowExecutionDetails = this.currentWorkflowExecutionDetails;\n this.showWorkflowExecutionDetails = true;\n this.cdr.detectChanges();\n return;\n }\n\n this.botService.getWorkflowExecutionById(workflow_id).subscribe((res) => {\n if (res && res.Actions && Array.isArray(res.Actions)) {\n res.Actions = res.Actions.map((action) => {\n if (action.InsertTimeStamp) {\n action.InsertTimeStamp = formatTimeStamps(\n this.timezone,\n action.InsertTimeStamp,\n );\n }\n return action;\n });\n }\n\n res.InsertTimeStamp = formatTimeStamps(\n this.timezone,\n res.InsertTimeStamp,\n );\n this.workflowExecutionDetails = res;\n this.showWorkflowExecutionDetails = true;\n this.cdr.detectChanges();\n });\n }\n\n closeModal() {\n this.showWorkflowExecutionDetails = false;\n }\n\n objectToArray(obj: any): any[] {\n return Object.keys(obj).map((key) => ({ key, value: obj[key] }));\n }\n\n startNewConversation() {\n this.conversationKey = this.conversationService.getKey(\n this.botId,\n true,\n this.eventId,\n );\n this.chatLog = [this.chatLog[0]];\n this.isChatingWithAi = false;\n this.disconnectAskWebSocket();\n this.scrollToBottom();\n this.cdr.detectChanges();\n }\n\n initializeSpeechRecognizer(token: string) {\n this.speechConfig = SpeechSDK.SpeechConfig.fromAuthorizationToken(\n token,\n this.region,\n );\n const audioConfig = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();\n this.recognizer = new SpeechSDK.SpeechRecognizer(\n this.speechConfig,\n audioConfig,\n );\n\n this.recognizer.recognizing = (s, e) => {\n if (e.result.reason === SpeechSDK.ResultReason.RecognizingSpeech) {\n this.input = e.result.text;\n console.log(`Recognizing: ${e.result.text}`);\n this.cdr.markForCheck();\n }\n };\n\n this.recognizer.recognized = (s, e) => {\n if (e.result.reason === SpeechSDK.ResultReason.RecognizedSpeech) {\n this.input = e.result.text;\n console.log(`Recognized: ${e.result.text}`);\n this.toggleRecording();\n this.cdr.markForCheck();\n }\n };\n\n this.recognizer.canceled = (s, e) => {\n console.error('Canceled: ', e.errorDetails);\n };\n\n this.recognizer.sessionStopped = (s, e) => {\n console.log('Session stopped.');\n this.recognizer.stopContinuousRecognitionAsync();\n this.fetchData();\n };\n }\n\n toggleRecording() {\n this.isRecording = !this.isRecording;\n\n if (this.isRecording) {\n this.startRecognition();\n } else {\n this.stopRecognition();\n }\n }\n\n startRecognition() {\n this.recognizer.startContinuousRecognitionAsync();\n }\n\n stopRecognition() {\n this.recognizer.stopContinuousRecognitionAsync();\n }\n\n checkForCop29BotId() {\n return (\n this.botId == '66fa3f276c5d71e2717bfea8' ||\n this.botId == '671633545652dd78efec848d'\n );\n }\n\n getLatestTime(time): string {\n if (time) {\n return time;\n }\n return new Date().toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n }); // returns current time in 'shortTime' format\n }\n\n /** Used by the voice modal when opened from this drawer. */\n voiceModalConversationId: string = '';\n\n openVoiceModal(): void {\n const conversationId =\n this.conversationKey ??\n this.conversationService.getKey(this.botId, false, this.eventId) ??\n '';\n this.voiceModalConversationId = conversationId;\n this.setupVoiceTranscripts();\n\n // Close existing overlay if any\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n\n const config: VoiceModalConfig = {\n apiUrl: this.environment?.BASE_URL ?? '',\n token: this.s27Token ?? '',\n botId: this.botId ?? '',\n conversationId,\n apiKey: this.apiKey ?? '',\n eventToken: this.eventToken ?? '',\n eventId: this.eventId,\n eventUrl: this.eventUrl ?? '',\n domainAuthority: this.domainAuthorityValue ?? 'prod-lite',\n agentName: this.botName || 'AI Assistant',\n agentRole: this.botSkills || 'AI Agent Specialist',\n agentAvatar: this.botIcon,\n usersApiUrl: this.environment?.USERS_API ?? '',\n };\n\n const closeCallback = () => {\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n this.closeVoiceModal();\n };\n\n const injector = Injector.create(\n [\n { provide: VOICE_MODAL_CONFIG, useValue: config },\n { provide: VOICE_MODAL_CLOSE_CALLBACK, useValue: closeCallback },\n ],\n this.injector,\n );\n\n const overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n positionStrategy: this.overlay\n .position()\n .global()\n .bottom('0')\n .right('0')\n .left('0')\n .top('0'),\n });\n\n const portal = new ComponentPortal(\n VoiceAgentModalComponent,\n this.viewContainerRef,\n injector,\n );\n overlayRef.attach(portal);\n this.voiceModalOverlayRef = overlayRef;\n this.cdr.markForCheck();\n }\n\n closeVoiceModal(): void {\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n this.isVoiceModalOpen = false;\n this.voiceAgentService.disconnect();\n this.cdr.markForCheck();\n\n // Reload chat history when voice modal closes (same as initial load)\n this.chatLog = [];\n this.fetchChatHistory().subscribe(\n (response) => {\n this.loading = false;\n this.mapChatHistory(response);\n this.cdr.markForCheck();\n },\n (err) => {\n this.loading = false;\n this.cdr.markForCheck();\n console.error(\n 'Error fetching chat history after voice modal close:',\n err,\n );\n // Fallback: show greeting so chat is not empty\n if (this.chatLog.length === 0 && this.greetingMsg) {\n this.mapChatHistory({ Messages: [] });\n }\n },\n );\n }\n\n private setupVoiceTranscripts(): void {\n // Clear existing subscriptions\n this.voiceTranscriptSubscriptions.forEach((sub) => sub.unsubscribe());\n this.voiceTranscriptSubscriptions = [];\n\n // Subscribe to user transcripts\n const userSub = this.voiceAgentService.userTranscript$.subscribe(\n (transcript) => {\n if (transcript.final && transcript.text.trim()) {\n // Add user message to chat\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(transcript.text),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n this.cdr.markForCheck();\n this.scrollToBottom();\n }\n },\n );\n\n // Subscribe to bot transcripts\n const botSub = this.voiceAgentService.botTranscript$.subscribe(\n (transcript) => {\n if (transcript && transcript.trim()) {\n // Check if last message is from bot, update it, otherwise add new\n const lastMessage = this.chatLog[this.chatLog.length - 1];\n if (lastMessage && lastMessage.type === 'ai') {\n lastMessage.message = this.processMessageForDisplay(transcript);\n } else {\n this.chatLog.push({\n type: 'ai',\n message: this.processMessageForDisplay(transcript),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n }\n this.cdr.markForCheck();\n this.scrollToBottom();\n }\n },\n );\n\n this.voiceTranscriptSubscriptions.push(userSub, botSub);\n }\n}\n\nexport { VoiceModalConfig } from '../voice-agent/voice-modal-tokens';\n","<!-- <button\n *ngIf=\"isShowEditorButton && !checkForCop29BotId()\"\n (click)=\"openOuterEditor()\"\n class=\"fixed-btn\"\n>\n <span style=\"font-size: 12px\" class=\"material-icons notranslate\">\n create\n </span>\n Editor\n</button> -->\n\n<button\n *ngIf=\"!isShowEditorButton\"\n (click)=\"onCloseEditor()\"\n class=\"fixed-btn-close\"\n>\n <span style=\"font-size: 12px\" class=\"material-icons notranslate\">\n close\n </span>\n {{ getTranslation(\"Close\") }}\n</button>\n\n<mat-drawer-container\n class=\"hivegpt-chat-bot-wrapper\"\n [ngClass]=\"{ 'mat-drawer-container-has-open': isDrawerOpen }\"\n [class.ios-device]=\"isIOSDevice\"\n [hasBackdrop]=\"hasBackdropValue\"\n>\n <mat-drawer\n class=\"drawer\"\n #drawer\n [position]=\"'start'\"\n [mode]=\"'over'\"\n opened=\"true\"\n [class.full-width-drawer]=\"fullView\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <div class=\"chat-main\">\n <!-- <div class=\"chat-header\">\n <h2> -->\n <!-- {{eventName}} -->\n <!-- </h2> -->\n <!-- <button class=\"closeIcon\" (click)=\"onClose()\">\n <span class=\"material-symbols-outlined\">\n close\n </span>\n </button> -->\n <!-- </div> -->\n\n <div class=\"innerChat\" #chatMain>\n <div (click)=\"startNewConversation()\" class=\"new-conversationbutton2\">\n {{ getTranslation(\"New Chat\") }}\n <span\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14.061\"\n height=\"14.261\"\n viewBox=\"0 0 14.061 14.261\"\n >\n <path\n id=\"Path_164\"\n data-name=\"Path 164\"\n d=\"M10.146,5.075H4.531A1.544,1.544,0,0,0,3,6.631v7.262A1.544,1.544,0,0,0,4.531,15.45h7.146a1.544,1.544,0,0,0,1.531-1.556V8.187m-7.146,4.15L15.25,3m0,0H11.677M15.25,3V6.631\"\n transform=\"translate(-2.25 -1.939)\"\n fill=\"none\"\n stroke=\"#06f\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.5\"\n />\n </svg>\n </span>\n </div>\n <div\n (click)=\"closeBot.emit()\"\n class=\"chat-close-button\"\n role=\"button\"\n [attr.aria-label]=\"getTranslation('Close') || 'Close'\"\n [attr.title]=\"getTranslation('Close') || 'Close'\"\n >\n \n <span class=\"chat-close-button-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </span>\n </div>\n <div class=\"bot-sticky-header-chat\">\n <div class=\"title_chat\">\n <h2>\n <p>\n {{ getTranslation(botName) }}\n <!-- <svg\n *ngIf=\"!checkForCop29BotId()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"31.499\"\n height=\"31.501\"\n viewBox=\"0 0 31.499 31.501\"\n >\n <path\n id=\"Icon_ion-shield-checkmark\"\n data-name=\"Icon ion-shield-checkmark\"\n d=\"M33.685,7.83a1.125,1.125,0,0,0-.925-1.036,49.227,49.227,0,0,1-14.3-4.444,1.125,1.125,0,0,0-.927,0A49.226,49.226,0,0,1,3.24,6.794,1.125,1.125,0,0,0,2.315,7.83a27.621,27.621,0,0,0,1.718,11.9A24.572,24.572,0,0,0,9.07,27.641a25.712,25.712,0,0,0,8.513,6.028,1.125,1.125,0,0,0,.844,0,25.712,25.712,0,0,0,8.513-6.028,24.572,24.572,0,0,0,5.027-7.911,27.621,27.621,0,0,0,1.718-11.9Zm-9.211,5.281-7.791,9a1.125,1.125,0,0,1-.8.389h-.046a1.125,1.125,0,0,1-.788-.322L11.587,18.79a1.125,1.125,0,1,1,1.575-1.607l2.6,2.552,7.01-8.1a1.125,1.125,0,0,1,1.7,1.472Z\"\n transform=\"translate(-2.25 -2.25)\"\n fill=\"#06f\"\n />\n </svg> -->\n </p>\n <span *ngIf=\"!checkForCop29BotId()\">\n <p class=\"small-title\">\n {{ getTranslation(\"AI-powered\")\n }}<span>{{ getTranslation(\"copilot\") }}</span>\n </p>\n </span>\n </h2>\n </div>\n <div class=\"chatType\" style=\"display: none\">\n <h4 class=\"labelChat\">Choose a conversation style</h4>\n <ul>\n <li (click)=\"changeTemperature(0)\">\n <button [ngClass]=\"{ active: temperature === 0 }\">\n <span class=\"top-section-title\"> More Creative </span>\n </button>\n </li>\n <li (click)=\"changeTemperature(1)\" class=\"fdssfd\">\n <button [ngClass]=\"{ active: temperature === 1 }\">\n <span class=\"top-section-title\"> More Balanced </span>\n </button>\n </li>\n <li (click)=\"changeTemperature(2)\">\n <button [ngClass]=\"{ active: temperature === 2 }\">\n <span class=\"top-section-title\"> More Precise </span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n <!-- chattype -->\n <div\n id=\"botAllChat\"\n class=\"chat\"\n [ngClass]=\"{\n botUser: chat?.type === 'user',\n botAi: chat?.type !== 'user'\n }\"\n *ngFor=\"let chat of chatLog; let i = index\"\n >\n <div class=\"chat-box\" *ngIf=\"!(i === 0 && botSkills)\">\n <div class=\"message\">\n <div\n class=\"time-cta\"\n [ngClass]=\"{\n 'time-cta din': showFeedBackIconsIndex === i,\n 'time-cta': showFeedBackIconsIndex != i\n }\"\n >\n <div\n class=\"Icon_TimeSTamp\"\n *ngIf=\"chat?.type === 'ai' && !(i === 0 && botSkills)\"\n >\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span style=\"color: #000 !important;\">{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n\n <div\n class=\"Icon_TimeSTamp\"\n *ngIf=\"\n chat?.type === 'session_cards' ||\n chat?.type === 'attendee_cards'\n \"\n >\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n\n <div class=\"Icon_TimeSTamp\" *ngIf=\"chat?.type === 'user'\">\n <div class=\"user-Box\">\n <div class=\"dateTime\">\n <span>{{ getTranslation(\"You\") }}</span>\n {{ chat?.time }}\n </div>\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"userAvatarUrl\"\n [src]=\"userAvatarUrl\"\n alt=\"You\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!userAvatarUrl\"\n class=\"chat-avatar-initials chat-avatar-initials-user\"\n >{{ getUserIdInitials() }}</span\n >\n </div>\n </div>\n <div class=\"bards\">\n <div\n class=\"bars\"\n *ngIf=\"\n chat?.WorkflowExecutionId ||\n chat?.showWorkflowExecutionLoader\n \"\n >\n <button\n class=\"icon-button\"\n (click)=\"\n showWorkflowHistoryDetails(chat.WorkflowExecutionId)\n \"\n >\n <i class=\"fas fa-bars\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"researchingCard\"\n *ngIf=\"\n (chat?.searchTerms && chat?.searchTerms.length > 0) ||\n (chat?.sourcesList && chat?.sourcesList?.length > 0)\n \"\n >\n <div\n class=\"card-header d-flex align-items-center\"\n (click)=\"toggleCollapse()\"\n >\n <span class=\"icon\"\n ><i class=\"bx bx-plus-circle bx-sm\"></i\n ></span>\n <span class=\"ml-2\"\n >Researching\n <i\n id=\"toggleIcon\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fa-chevron-down': isCollapsed,\n 'fa-chevron-up': !isCollapsed\n }\"\n ></i\n ></span>\n </div>\n <div\n *ngIf=\"chat?.searchTerms && chat?.searchTerms.length > 0\"\n [ngClass]=\"{ collapse: isCollapsed }\"\n >\n <ul class=\"list-group list-group-flush uptList\">\n <li\n *ngFor=\"let term of chat?.searchTerms\"\n class=\"list-group-item\"\n >\n Searching for\n <strong>{{ term }}</strong>\n </li>\n </ul>\n\n <h5\n class=\"mt-2\"\n *ngIf=\"chat?.sourcesList && chat?.sourcesList.length > 0\"\n >\n <i class=\"bx bx-unite\"></i> Sources\n </h5>\n <div\n class=\"sources-container\"\n *ngIf=\"chat?.sourcesList && chat?.sourcesList.length > 0\"\n >\n <div\n class=\"source-card\"\n *ngFor=\"\n let source of chat?.displayedSources;\n let i = index\n \"\n >\n <div>\n <div class=\"source-title\">{{ source.title }}</div>\n <div class=\"source-url\">\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n {{ getDomainName(source.link) }}\n </div>\n <div class=\"popup\">\n <div\n class=\"source-url\"\n (click)=\"openLinkInNewTab(source.link)\"\n >\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n {{ getDomainName(source.link) }}\n </div>\n <h5 (click)=\"openLinkInNewTab(source.link)\">\n {{ source.title }}\n </h5>\n <p (click)=\"openLinkInNewTab(source.link)\">\n {{ source.desc }}\n </p>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"\n chat?.remainingSources &&\n chat?.remainingSources.length > 0\n \"\n >\n <div\n class=\"source-card\"\n (click)=\"onCardClick(chat?.sourcesList)\"\n >\n <div>\n <div class=\"source-title\">\n <img\n *ngFor=\"\n let source of chat?.remainingSources;\n let i = index\n \"\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n </div>\n <div class=\"source-url\">\n View {{ chat?.remainingSources.length }} more\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Session cards (from get_event_sessions tool, same as React Native) -->\n <div\n class=\"session-cards-section\"\n *ngIf=\"\n chat?.type === 'session_cards' &&\n chat?.sessionCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"session-cards-container\">\n <div\n *ngFor=\"\n let session of getVisibleSessionCards(chat);\n let idx = index\n \"\n class=\"session-card-item\"\n [class.session-card-item-ondemand]=\"isSessionOndemand(session)\"\n >\n <!-- OnDemand design: pill, Available Anytime, title, description -->\n <ng-container *ngIf=\"isSessionOndemand(session)\">\n <span class=\"session-card-ondemand-badge\">{{ getTranslation('ON DEMAND') || 'ON DEMAND' }}</span>\n <div class=\"session-card-ondemand-available\">{{ getTranslation('Available Anytime') || 'Available Anytime' }}</div>\n <div class=\"session-card-title session-card-ondemand-title\">{{ session.title }}</div>\n <div\n class=\"session-card-description session-card-ondemand-desc\"\n *ngIf=\"session.description\"\n >\n {{ session.description }}\n </div>\n <div\n class=\"session-card-actions-row\"\n *ngIf=\"session.session && getSessionRoleButtons(session).length > 0\"\n >\n <div class=\"speakers-UIcard\"></div>\n <div class=\"session-card-actions\">\n <button\n *ngFor=\"let role of getSessionRoleButtons(session)\"\n type=\"button\"\n class=\"btn session-card-btn\"\n [class.session-card-btn-primary]=\"role.action === 'join'\"\n [class.session-card-btn-secondary]=\"role.action === 'watch'\"\n [class.session-card-btn-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [attr.aria-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [disabled]=\"!canPerformSessionAction(session)\"\n (click)=\"onSessionCardAction(session, role)\"\n >\n {{ role.label }}\n </button>\n </div>\n </div>\n </ng-container>\n <!-- Default (Live/Breakout) design: date badge, room/time, title, meta, description, actions -->\n <ng-container *ngIf=\"!isSessionOndemand(session)\">\n <div class=\"session-card-header\">\n <div class=\"session-card-date-badge\">\n <ng-container *ngIf=\"session.dateDay || session.dateMonth\">\n <span class=\"session-card-date-day\">{{\n session.dateDay\n }}</span>\n <span class=\"session-card-date-month\">{{\n session.dateMonth\n }}</span>\n </ng-container>\n <span\n *ngIf=\"!session.dateDay && !session.dateMonth\"\n class=\"session-card-date-na\"\n >{{ getTranslation('N/A') || 'N/A' }}</span>\n </div>\n <div class=\"session-card-room-time\">\n <div\n class=\"session-card-room\"\n *ngIf=\"session.room\"\n >\n {{ session.room }}\n </div>\n <div\n class=\"session-card-time\"\n *ngIf=\"session.timeRangeWithTz || session.timeRange\"\n >\n {{ session.timeRangeWithTz || session.timeRange }}\n </div>\n </div>\n </div>\n <div class=\"session-card-title\">{{ session.title }}</div>\n <div\n class=\"session-card-meta\"\n *ngIf=\"(session.organizer && session.organizer.length) || (session.meetingType && session.meetingType.length)\"\n >\n <div class=\"session-card-meta-row\" *ngIf=\"session.organizer && session.organizer.length\">\n <span class=\"session-card-meta-label\">{{\n (getTranslation(\"Organizer\") || \"Organizer\") + \":\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.organizer }}</span>\n </div>\n <!-- <div class=\"session-card-meta-row\" *ngIf=\"session.timeZoneDisplay\">\n <span class=\"session-card-meta-label\">{{\n getTranslation(\"Time zone\") || \"Time zone\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.timeZoneDisplay }}</span>\n </div> -->\n <div class=\"session-card-meta-row\" *ngIf=\"session.meetingType && session.meetingType.length\">\n <span class=\"session-card-meta-label\">{{\n getSessionTypeLabel() + \":\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.meetingType }}</span>\n </div>\n </div>\n <div\n class=\"session-card-description\"\n *ngIf=\"session.description\"\n >\n {{ session.description }}\n </div>\n <div\n class=\"session-card-status\"\n *ngIf=\"\n (session.statusText && session.statusText.length) &&\n getSessionRoleButtons(session).length > 0\n \"\n >\n <span class=\"session-card-status-bullet\"></span>\n {{ session.statusText }}\n </div>\n <!-- <div\n class=\"session-card-when-disable\"\n *ngIf=\"\n session.session?.sessionRoles?.length > 0 &&\n !isSessionOndemand(session) &&\n !session.session?.isExpire &&\n !canPerformSessionAction(session)\n \"\n >\n {{ getTranslation(\"You can join/watch at the starting time\") || \"You can join/watch at the starting time\" }}\n </div> -->\n \n <div\n class=\"session-card-actions-row\"\n *ngIf=\"\n session.session &&\n (getSessionRoleButtons(session).length > 0 || hasSessionCardSpeakers(session))\n \"\n >\n <div class=\"speakers-UIcard\">\n <ng-container\n *ngIf=\"\n (session?.speakersList || session?.session?.speakersList || []).length\n as _speakerCount\n \"\n >\n <ng-container\n *ngFor=\"\n let sp of (session?.speakersList || session?.session?.speakersList || []);\n let i = index\n \"\n >\n <ng-container *ngIf=\"i < 3\">\n <div class=\"speaker\" *ngIf=\"getSpeakerPhotoUrl(sp); else speakerInitials\">\n <img\n [src]=\"getSpeakerPhotoUrl(sp)!\"\n [alt]=\"getSpeakerDisplayName(sp) || 'Speaker'\"\n />\n </div>\n <ng-template #speakerInitials>\n <div class=\"speaker initials\">\n {{ getSpeakerInitials(sp) }}\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <div class=\"speaker initials\" *ngIf=\"_speakerCount > 3\">\n +{{ _speakerCount - 3 }}\n </div>\n </ng-container>\n </div>\n <div class=\"session-card-actions\">\n <button\n *ngFor=\"let role of getSessionRoleButtons(session)\"\n type=\"button\"\n class=\"btn session-card-btn\"\n [class.session-card-btn-primary]=\"\n role.action === 'join'\n \"\n [class.session-card-btn-secondary]=\"\n role.action === 'watch'\n \"\n [class.session-card-btn-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [attr.aria-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [disabled]=\"!canPerformSessionAction(session)\"\n (click)=\"onSessionCardAction(session, role)\"\n >\n {{ role.label }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.sessionCards?.length || 0) -\n SESSION_CARDS_INITIAL >\n 4 &&\n !expandedSessionCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSessionCards(chat)\"\n >\n Show\n {{\n (chat?.sessionCards?.length || 0) - SESSION_CARDS_INITIAL\n }}\n more\n {{\n (chat?.sessionCards?.length || 0) -\n SESSION_CARDS_INITIAL ===\n 1\n ? getTranslation(\"session\") || \"session\"\n : getTranslation(\"sessions\") || \"sessions\"\n }}\n </button>\n </div>\n\n <!-- Attendee cards (from get_event_attendees tool, same as React Native) -->\n <div\n class=\"attendee-cards-section\"\n *ngIf=\"\n chat?.type === 'attendee_cards' &&\n chat?.attendeeCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let attendee of getVisibleAttendeeCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [class.attendee-card-has-video]=\"!!getAttendeeVideoUrl(attendee)\"\n [style.background-image]=\"\n !getAttendeeVideoUrl(attendee) && attendee.photo\n ? 'url(' + attendee.photo + ')'\n : null\n \"\n >\n <ng-container *ngIf=\"getAttendeeVideoUrl(attendee)\">\n <video\n #attendeeVideo\n class=\"attendee-card-video\"\n [attr.poster]=\"getAttendeeVideoPoster(attendee) || null\"\n [muted]=\"isAttendeeVideoMuted(chat, attendee)\"\n playsinline\n preload=\"metadata\"\n (play)=\"onAttendeeVideoPlayState(chat, attendee, true)\"\n (pause)=\"onAttendeeVideoPlayState(chat, attendee, false)\"\n (ended)=\"onAttendeeVideoPlayState(chat, attendee, false)\"\n (click)=\"toggleAttendeeVideoPlay(chat, attendee, attendeeVideo, $event)\"\n >\n <source\n [attr.src]=\"getAttendeeVideoUrl(attendee)\"\n type=\"video/webm\"\n />\n </video>\n\n <button\n type=\"button\"\n class=\"attendee-card-mute-btn\"\n (click)=\"toggleAttendeeVideoMute(chat, attendee, attendeeVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoMuted(chat, attendee)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoMuted(chat, attendee)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoMuted(chat, attendee)\n ? \"volume_off\"\n : \"volume_up\"\n }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"attendee-card-play-btn\"\n (click)=\"toggleAttendeeVideoPlay(chat, attendee, attendeeVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoPlaying(chat, attendee)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoPlaying(chat, attendee)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoPlaying(chat, attendee)\n ? \"pause\"\n : \"play_arrow\"\n }}\n </span>\n </button>\n </ng-container>\n\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!getAttendeeVideoUrl(attendee) && !attendee.photo\"\n >\n {{ getAttendeeInitials(attendee.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ attendee.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"attendee.company\"\n >\n {{ attendee.company }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, attendee)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, attendee)\"\n *ngIf=\"getAttendeeDescription(attendee)\"\n >\n {{ getAttendeeDescription(attendee) }}\n </div>\n \n <div class=\"attendee-buttons\">\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n checkPendingSentRequest(attendee.id)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-request-sent\"\n disabled\n [attr.title]=\"\n getTranslation('Request Sent') || 'Request Sent'\n \"\n >\n {{\n getTranslation(\"Request Sent\") || \"Request Sent\"\n }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n canFollowUser(attendee)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-connect\"\n [attr.title]=\"\n getTranslation('Connect') || 'Connect'\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n connect: true\n })\n \"\n >\n {{ getTranslation(\"Connect\") || \"Connect\" }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n canUnfollowUser(attendee)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-disconnect\"\n [attr.title]=\"\n getTranslation('Disconnect') || 'Disconnect'\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n disconnect: true\n })\n \"\n >\n {{\n getTranslation(\"Disconnect\") || \"Disconnect\"\n }}\n </button>\n </ng-container>\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [disabled]=\"!attendee.id\"\n [attr.title]=\"\n !attendee.id\n ? getTranslation('Profile not available') ||\n 'Profile not available'\n : (getTranslation('View Profile') || 'View Profile')\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n viewProfile: true\n })\n \"\n >\n {{ getTranslation(\"View Profile\") || \"View Profile\" }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL >\n 4 &&\n !expandedAttendeeCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandAttendeeCards(chat)\"\n >\n Show\n {{\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL\n }}\n more\n {{\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL ===\n 1\n ? getTranslation(\"attendee\") || \"attendee\"\n : getTranslation(\"attendees\") || \"attendees\"\n }}\n </button>\n </div>\n\n <!-- Speaker cards (from get_event_speakers tool, same layout/behavior as attendee cards) -->\n <div\n class=\"speaker-cards-section\"\n *ngIf=\"\n chat?.type === 'speaker_cards' &&\n chat?.speakerCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let speaker of getVisibleSpeakerCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [class.attendee-card-has-video]=\"!!getAttendeeVideoUrl(speaker)\"\n [style.background-image]=\"\n !getAttendeeVideoUrl(speaker) && speaker.photo\n ? 'url(' + speaker.photo + ')'\n : null\n \"\n >\n <ng-container *ngIf=\"getAttendeeVideoUrl(speaker)\">\n <video\n #speakerVideo\n class=\"attendee-card-video\"\n [attr.poster]=\"getAttendeeVideoPoster(speaker) || null\"\n [muted]=\"isAttendeeVideoMuted(chat, speaker)\"\n playsinline\n preload=\"metadata\"\n (play)=\"onAttendeeVideoPlayState(chat, speaker, true)\"\n (pause)=\"onAttendeeVideoPlayState(chat, speaker, false)\"\n (ended)=\"onAttendeeVideoPlayState(chat, speaker, false)\"\n (click)=\"toggleAttendeeVideoPlay(chat, speaker, speakerVideo, $event)\"\n >\n <source\n [attr.src]=\"getAttendeeVideoUrl(speaker)\"\n type=\"video/webm\"\n />\n </video>\n\n <button\n type=\"button\"\n class=\"attendee-card-mute-btn\"\n (click)=\"toggleAttendeeVideoMute(chat, speaker, speakerVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoMuted(chat, speaker)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoMuted(chat, speaker)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoMuted(chat, speaker)\n ? \"volume_off\"\n : \"volume_up\"\n }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"attendee-card-play-btn\"\n (click)=\"toggleAttendeeVideoPlay(chat, speaker, speakerVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoPlaying(chat, speaker)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoPlaying(chat, speaker)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoPlaying(chat, speaker)\n ? \"pause\"\n : \"play_arrow\"\n }}\n </span>\n </button>\n </ng-container>\n\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!getAttendeeVideoUrl(speaker) && !speaker.photo\"\n >\n {{ getAttendeeInitials(speaker.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ speaker.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"speaker.jobTitle\"\n >\n {{ speaker.jobTitle }}\n </div>\n <div\n class=\"attendee-company\"\n *ngIf=\"speaker.company\"\n >\n {{ speaker.company }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, speaker)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, speaker)\"\n *ngIf=\"getAttendeeDescription(speaker)\"\n >\n {{ getAttendeeDescription(speaker) }}\n </div>\n \n\n <div class=\"attendee-buttons\">\n \n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [disabled]=\"!speaker.id\"\n [attr.title]=\"\n !speaker.id\n ? getTranslation('Profile not available') ||\n 'Profile not available'\n : (getTranslation('View Profile') || 'View Profile')\n \"\n (click)=\"\n chat?.type === 'speaker_cards'\n ? viewSpeakerProfile.emit({\n speaker,\n speakers: chat.speakerCards || []\n })\n : speaker.id &&\n connectWithUser.emit({\n userId: speaker.id,\n viewProfile: true\n })\n \"\n >\n {{\n getTranslation('View Profile') || 'View Profile'\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL >\n 4 &&\n !expandedSpeakerCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSpeakerCards(chat)\"\n >\n Show\n {{\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL\n }}\n more\n {{\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL ===\n 1\n ? getTranslation('speaker') || 'speaker'\n : getTranslation('speakers') || 'speakers'\n }}\n </button>\n </div>\n\n <!-- Sponsor cards (from get_event_sponsors tool, booth-rep style) -->\n <div\n class=\"sponsor-cards-section\"\n *ngIf=\"\n chat?.type === 'sponsor_cards' &&\n chat?.sponsorCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"booth-rep-card-grid\">\n <div\n *ngFor=\"\n let sponsor of getVisibleSponsorCards(chat);\n let idx = index\n \"\n class=\"booth-rep-card\"\n >\n <div class=\"booth-rep-card-logo\">\n <span\n class=\"booth-rep-card-logo-placeholder\"\n *ngIf=\"!sponsor.logoUrl\"\n >\n {{ sponsor.boothTitle ? sponsor.boothTitle.charAt(0) : (sponsor.name ? sponsor.name.charAt(0) : '') }}\n </span>\n <img\n *ngIf=\"sponsor.logoUrl\"\n [src]=\"sponsor.logoUrl\"\n [alt]=\"sponsor.boothTitle || sponsor.name\"\n />\n </div>\n <h3 class=\"booth-rep-card-title\">\n {{ sponsor.boothTitle || sponsor.name }}\n </h3>\n <p\n class=\"booth-rep-card-desc\"\n *ngIf=\"sponsor.description\"\n >\n {{ sponsor.description }}\n </p>\n <button\n type=\"button\"\n class=\"booth-rep-card-btn\"\n (click)=\"viewBooth.emit({ boothId: sponsor.boothID, boothUrl: sponsor.url, sponsor })\"\n >\n {{ getTranslation('View Sponsor') || 'View Sponsor' }}\n </button>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL >\n 4 &&\n !expandedSponsorCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSponsorCards(chat)\"\n >\n Show\n {{\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL\n }}\n more\n {{\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL ===\n 1\n ? getTranslation('sponsor') || 'sponsor'\n : getTranslation('sponsors') || 'sponsors'\n }}\n </button>\n </div>\n\n <!-- Booth representative cards (from get_booth_representatives tool, same design as attendee cards) -->\n <div\n class=\"attendee-cards-section booth-rep-cards-section\"\n *ngIf=\"\n chat?.type === 'booth_rep_cards' &&\n chat?.boothRepCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let rep of getVisibleBoothRepCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [style.background-image]=\"rep.photo ? 'url(' + rep.photo + ')' : null\"\n >\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!rep.photo\"\n >\n {{ getAttendeeInitials(rep.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ rep.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"rep.company\"\n >\n {{ rep.company }}\n </div>\n <div\n class=\"attendee-company\"\n *ngIf=\"rep.jobTitle\"\n >\n {{ rep.jobTitle }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, rep)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, rep)\"\n *ngIf=\"getAttendeeDescription(rep)\"\n >\n {{ getAttendeeDescription(rep) }}\n </div>\n <div class=\"attendee-buttons\">\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n checkPendingSentRequest(rep.id)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-request-sent\"\n disabled\n [attr.title]=\"\n getTranslation('Request Sent') || 'Request Sent'\n \"\n >\n {{\n getTranslation(\"Request Sent\") || \"Request Sent\"\n }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n canFollowUser(rep)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-connect\"\n [attr.title]=\"\n getTranslation('Connect') || 'Connect'\n \"\n (click)=\"\n rep.id &&\n connectWithUser.emit({\n userId: rep.id,\n connect: true\n })\n \"\n >\n {{ getTranslation(\"Connect\") || \"Connect\" }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n canUnfollowUser(rep)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-disconnect\"\n [attr.title]=\"\n getTranslation('Disconnect') || 'Disconnect'\n \"\n (click)=\"\n rep.id &&\n connectWithUser.emit({\n userId: rep.id,\n disconnect: true\n })\n \"\n >\n {{\n getTranslation(\"Disconnect\") || \"Disconnect\"\n }}\n </button>\n </ng-container>\n <button\n *ngIf=\"rep.id\"\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [attr.title]=\"getTranslation('View Profile') || 'View Profile'\"\n (click)=\"\n connectWithUser.emit({\n userId: rep.id,\n viewProfile: true\n })\n \"\n >\n {{ getTranslation('View Profile') || 'View Profile' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL >\n 4 &&\n !expandedBoothRepCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandBoothRepCards(chat)\"\n >\n Show\n {{\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL\n }}\n more\n {{\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL ===\n 1\n ? getTranslation('representative') || 'representative'\n : getTranslation('representatives') || 'representatives'\n }}\n </button>\n </div>\n\n <div\n class=\"chat-bubble-wrap\"\n *ngIf=\"\n (chat?.type === 'ai' || chat?.type === 'user') &&\n !(i === 0 && botSkills)\n \"\n [ngStyle]=\"{\n background:\n chat?.type === 'ai'\n ? bgBubbleAi || '#fff'\n : chat?.type === 'user'\n ? bgBubbleUser || '#183988'\n : 'transparent',\n color:\n chat?.type === 'ai'\n ? '#000 !important'\n : '#fff !important'\n }\"\n >\n <div id=\"messageText_{{ i }}\" class=\"chat-bubble-content\">\n <div\n *ngIf=\"chat?.type === 'ai' || chat?.type === 'user'\"\n [ngClass]=\"{\n 'SearchTitle ai': chat?.type === 'ai',\n 'SearchTitle user': chat?.type === 'user'\n }\"\n [ngStyle]=\"{\n background: 'transparent',\n color:\n chat?.type === 'ai' && messageTextColorAi\n ? messageTextColorAi\n : chat?.type === 'user'\n ? messageTextColorUser || '#fff'\n : 'defaultColor'\n }\"\n [innerHTML]=\"chat?.message\"\n ></div>\n </div>\n </div>\n\n <div\n class=\"progress-container\"\n *ngIf=\"chat?.showWorkflowExecutionLoader\"\n >\n <div class=\"circular-loader\">\n <div\n class=\"loader-spinner\"\n *ngIf=\"currentWorkflowActionProgress < 100\"\n [ngStyle]=\"{\n transform: 'rotate(' + percentage * 3.6 + 'deg)'\n }\"\n ></div>\n <div\n class=\"checkmark\"\n *ngIf=\"currentWorkflowActionProgress == 100\"\n >\n <svg viewBox=\"0 0 52 52\">\n <circle\n class=\"checkmark-circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkmark-check\"\n fill=\"none\"\n d=\"M14 27l7 7 16-16\"\n />\n </svg>\n </div>\n\n <div\n class=\"loader-text\"\n *ngIf=\"currentWorkflowActionProgress < 100\"\n >\n {{ currentWorkflowActionProgress }}%\n </div>\n </div>\n <div class=\"loader-label\">{{ currentWorkflowAction }}...</div>\n </div>\n\n <div\n class=\"exicution mt-2\"\n *ngIf=\"\n chat?.type === 'ai' &&\n chat?.graphs &&\n chat?.graphs.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-network-chart\"></i> Graphs\n <i\n (click)=\"toggleCollapseFGraph()\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fas fa-chevron-down': isCollapsedForFGraph,\n 'fas fa-chevron-up': !isCollapsedForFGraph\n }\"\n ></i>\n </h5>\n <img\n *ngFor=\"let image of chat?.graphs\"\n class=\"graph-img\"\n [ngClass]=\"{ collapse: isCollapsedForFGraph }\"\n [src]=\"image\"\n alt=\"\"\n />\n </div>\n <ng-container *ngIf=\"!checkForCop29BotId()\">\n <div\n class=\"exicution mt-2\"\n *ngIf=\"\n chat?.type === 'ai' &&\n chat?.executionGraphs &&\n chat?.executionGraphs?.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-network-chart\"></i> Execution Path Diagram\n For Data Visualization Workflow\n <i\n (click)=\"toggleCollapseGraph()\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fas fa-chevron-down': isCollapsedForGraph,\n 'fas fa-chevron-up': !isCollapsedForGraph\n }\"\n ></i>\n </h5>\n <img\n *ngFor=\"let image of chat?.executionGraphs\"\n class=\"graph-img\"\n [ngClass]=\"{ collapse: isCollapsedForGraph }\"\n [src]=\"image\"\n alt=\"\"\n />\n </div>\n </ng-container>\n <div class=\"cta\" *ngIf=\"chat?.type === 'ai' && i > 0 && i === lastAiMessageIndex\">\n <div\n class=\"copyBox\"\n title=\"Copy\"\n [ngClass]=\"\n showFeedBackIconsIndex == i ? 'show-always' : 'show-hover'\n \"\n >\n <button\n title=\"{{ chat?.copied ? 'Copied!' : 'Copy' }}\"\n class=\"copy\"\n [class.active]=\"chat?.copied\"\n (click)=\"handleCopyClick(i)\"\n >\n <i *ngIf=\"chat?.copied\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n\n <i *ngIf=\"!chat?.copied\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.24 2H8.84C8.14 2 7.58 2.56 7.58 3.26V16.84C7.58 17.54 8.14 18.1 8.84 18.1H19.24C19.94 18.1 20.5 17.54 20.5 16.84V3.26C20.5 2.56 19.94 2 19.24 2ZM19.24 16.84H8.84V3.26H19.24V16.84ZM4.74 6.52C4.04 6.52 3.48 7.08 3.48 7.78V20.36C3.48 21.06 4.04 21.62 4.74 21.62H15.14C15.84 21.62 16.4 21.06 16.4 20.36V18.88H14.96V20.36H4.74V7.78H6.18V6.52H4.74Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n </button>\n<!-- \n <button\n *ngIf=\"!checkForCop29BotId()\"\n class=\"up copy\"\n title=\"{{ chat?.isEditor ? 'Added!' : 'Add to editor' }}\"\n (click)=\"handleEditorClick(i)\"\n >\n <svg\n *ngIf=\"!chat?.isEditor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20.152\"\n height=\"20.152\"\n viewBox=\"0 0 20.152 20.152\"\n >\n <g\n id=\"Icon_feather-edit\"\n data-name=\"Icon feather-edit\"\n transform=\"translate(-2.5 -2.166)\"\n >\n <path\n id=\"Path_166\"\n data-name=\"Path 166\"\n d=\"M11.5,6H4.889A1.889,1.889,0,0,0,3,7.889v13.22A1.889,1.889,0,0,0,4.889,23h13.22A1.889,1.889,0,0,0,20,21.108V14.5\"\n transform=\"translate(0 -1.179)\"\n fill=\"none\"\n stroke=\"#393939\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1\"\n />\n <path\n id=\"Path_167\"\n data-name=\"Path 167\"\n d=\"M21.915,3.4a2,2,0,0,1,2.833,2.833l-8.971,8.971L12,16.152l.944-3.777Z\"\n transform=\"translate(-3.334 0)\"\n fill=\"none\"\n stroke=\"#393939\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1\"\n />\n </g>\n </svg>\n\n <i *ngIf=\"chat?.isEditor\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n </button> -->\n\n <button\n class=\"up copy\"\n title=\"Like\"\n [class.active]=\"chat?.liked\"\n (click)=\"handleUpClick(i)\"\n >\n <i *ngIf=\"chat?.liked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.38989 18.4902V8.33022C8.38989 7.93022 8.50989 7.54022 8.72989 7.21022L11.4599 3.15022C11.8899 2.50022 12.9599 2.04022 13.8699 2.38022C14.8499 2.71022 15.4999 3.81022 15.2899 4.79022L14.7699 8.06022C14.7299 8.36022 14.8099 8.63022 14.9799 8.84022C15.1499 9.03022 15.3999 9.15022 15.6699 9.15022H19.7799C20.5699 9.15022 21.2499 9.47022 21.6499 10.0302C22.0299 10.5702 22.0999 11.2702 21.8499 11.9802L19.3899 19.4702C19.0799 20.7102 17.7299 21.7202 16.3899 21.7202H12.4899C11.8199 21.7202 10.8799 21.4902 10.4499 21.0602L9.16989 20.0702C8.67989 19.7002 8.38989 19.1102 8.38989 18.4902Z\"\n fill=\"#17235B\"\n />\n <path\n d=\"M5.21 6.37988H4.18C2.63 6.37988 2 6.97988 2 8.45988V18.5199C2 19.9999 2.63 20.5999 4.18 20.5999H5.21C6.76 20.5999 7.39 19.9999 7.39 18.5199V8.45988C7.39 6.97988 6.76 6.37988 5.21 6.37988Z\"\n fill=\"#17235B\"\n />\n </svg>\n </i>\n <i *ngIf=\"!chat?.liked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.4037 20.9264L10.381 20.9038L10.3557 20.8843L7.72165 18.85L8.02965 18.4516L10.7161 20.5315C10.9228 20.7195 11.2181 20.8517 11.4962 20.9377C11.7978 21.0309 12.1451 21.09 12.4801 21.09H16.2801C16.8572 21.09 17.4266 20.8625 17.8751 20.5306C18.3159 20.2044 18.6912 19.7385 18.8305 19.1997L21.2428 11.8732C21.4379 11.3309 21.4287 10.749 21.0965 10.2887C20.7583 9.81377 20.1844 9.58999 19.5801 9.58999H15.5801C15.2031 9.58999 14.8615 9.43143 14.6276 9.16215L14.627 9.16142C14.3873 8.88649 14.2756 8.51549 14.3345 8.11501L14.8322 4.9195C14.9978 4.1052 14.4664 3.24596 13.7053 2.98804C13.3277 2.85165 12.9297 2.89129 12.61 2.99839C12.2949 3.10396 11.9772 3.30172 11.7881 3.57673L11.7881 3.57671L11.7851 3.58107L7.96352 9.26689L7.55454 8.99314L11.3751 3.30891L11.3755 3.30836C11.8763 2.56103 13.0109 2.19028 13.8726 2.51744L13.8834 2.52151L13.8943 2.52509C14.9044 2.8564 15.556 3.98765 15.3317 5.01314L15.3284 5.02805L15.326 5.04314L14.836 8.19314L14.836 8.19313L14.8351 8.19928C14.8184 8.31642 14.7981 8.60268 15.0138 8.84924L15.0248 8.86177L15.0366 8.87354C15.1833 9.02026 15.3817 9.09999 15.5901 9.09999H19.5901C20.4308 9.09999 21.1176 9.44886 21.5113 10.0079L21.5124 10.0095C21.8964 10.5502 21.9908 11.2849 21.7202 12.0291L21.7175 12.0365L21.7151 12.044L19.3251 19.324L19.3198 19.34L19.3156 19.3564C19.0058 20.5707 17.6766 21.6 16.2801 21.6H12.4801C12.2411 21.6 11.8403 21.5625 11.4297 21.4512C11.0123 21.338 10.6406 21.1633 10.4037 20.9264Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n <path\n d=\"M5.37988 20.4999H4.37988C3.52442 20.4999 2.98559 20.2982 2.65822 19.9825C2.33437 19.6702 2.12988 19.1614 2.12988 18.3499V8.5499C2.12988 7.73843 2.33437 7.22962 2.65822 6.91731C2.98559 6.6016 3.52442 6.3999 4.37988 6.3999H5.37988C6.23534 6.3999 6.77418 6.6016 7.10155 6.91731C7.4254 7.22962 7.62988 7.73843 7.62988 8.5499V18.3499C7.62988 19.1614 7.4254 19.6702 7.10155 19.9825C6.77418 20.2982 6.23534 20.4999 5.37988 20.4999ZM4.37988 6.8999C4.0934 6.8999 3.83578 6.9164 3.61382 6.96689C3.38745 7.01838 3.16822 7.11196 2.99258 7.2876C2.81559 7.46459 2.72807 7.67966 2.68301 7.89002C2.63948 8.09318 2.62988 8.31967 2.62988 8.5499V18.3499C2.62988 18.5801 2.63948 18.8066 2.68301 19.0098C2.72807 19.2201 2.81559 19.4352 2.99258 19.6122C3.16822 19.7878 3.38745 19.8814 3.61382 19.9329C3.83578 19.9834 4.0934 19.9999 4.37988 19.9999H5.37988C5.66637 19.9999 5.92398 19.9834 6.14595 19.9329C6.37232 19.8814 6.59155 19.7878 6.76719 19.6122C6.94418 19.4352 7.0317 19.2201 7.07676 19.0098C7.12028 18.8066 7.12988 18.5801 7.12988 18.3499V8.5499C7.12988 8.31967 7.12028 8.09318 7.07676 7.89002C7.0317 7.67966 6.94418 7.46459 6.76719 7.2876C6.59155 7.11196 6.37232 7.01838 6.14595 6.96689C5.92398 6.9164 5.66637 6.8999 5.37988 6.8999H4.37988Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n </svg>\n </i>\n </button>\n <button\n class=\"down copy\"\n title=\"Dislike\"\n [class.active]=\"chat?.unliked\"\n (click)=\"handleDownClick(i)\"\n >\n <i *ngIf=\"chat?.unliked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.61 5.50002V15.66C15.61 16.06 15.49 16.45 15.27 16.78L12.54 20.84C12.11 21.49 11.04 21.95 10.13 21.61C9.15002 21.28 8.50002 20.18 8.71002 19.2L9.23002 15.93C9.27002 15.63 9.19002 15.36 9.02002 15.15C8.85002 14.96 8.60002 14.84 8.33002 14.84H4.22002C3.43002 14.84 2.75002 14.52 2.35002 13.96C1.97002 13.42 1.90002 12.72 2.15002 12.01L4.61002 4.52002C4.92002 3.28002 6.27002 2.27002 7.61002 2.27002H11.51C12.18 2.27002 13.12 2.50002 13.55 2.93002L14.83 3.92002C15.32 4.30002 15.61 4.88002 15.61 5.50002Z\"\n fill=\"#17235B\"\n />\n\n <path\n d=\"M18.7901 17.6099H19.8201C21.3701 17.6099 22.0001 17.0099 22.0001 15.5299V5.4799C22.0001 3.9999 21.3701 3.3999 19.8201 3.3999H18.7901C17.2401 3.3999 16.6101 3.9999 16.6101 5.4799V15.5399C16.6101 17.0099 17.2401 17.6099 18.7901 17.6099Z\"\n fill=\"#17235B\"\n />\n </svg>\n </i>\n\n <i *ngIf=\"!chat?.unliked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.1237 21.481L10.1148 21.4778L10.1059 21.4748C9.09577 21.1435 8.44416 20.0122 8.66849 18.9867L8.67175 18.9718L8.6741 18.9568L9.1641 15.8068L9.16413 15.8068L9.16501 15.8006C9.18175 15.6835 9.20207 15.3972 8.98633 15.1507L8.97536 15.1381L8.96359 15.1263C8.81687 14.9796 8.61841 14.8999 8.41004 14.8999H4.41004C3.56937 14.8999 2.88252 14.551 2.48884 13.992L2.4877 13.9904C2.10371 13.4497 2.00931 12.715 2.27994 11.9708L2.28263 11.9634L2.28509 11.9559L4.67509 4.67586L4.68035 4.65985L4.68451 4.64353C4.99418 3.42996 6.33271 2.3999 7.72004 2.3999H11.52C11.7591 2.3999 12.1599 2.43736 12.5704 2.54872C12.9878 2.66194 13.3596 2.83655 13.5965 3.07346L13.6191 3.09608L13.6444 3.11563L16.2785 5.14986L15.9705 5.54825L13.2875 3.47111C13.0799 3.2763 12.7837 3.1413 12.5061 3.05412C12.2031 2.95897 11.8551 2.8999 11.52 2.8999H7.72004C7.1429 2.8999 6.57353 3.12735 6.12508 3.45926C5.68428 3.78551 5.30892 4.25142 5.16963 4.79019L2.75738 12.1167C2.56223 12.659 2.57147 13.2409 2.90366 13.7012C3.24183 14.1761 3.81578 14.3999 4.42004 14.3999H8.42004C8.79702 14.3999 9.13867 14.5585 9.37252 14.8277L9.37315 14.8285C9.61286 15.1034 9.72457 15.4745 9.66568 15.875C9.6656 15.8755 9.66552 15.8761 9.66544 15.8766L9.16795 19.0704C9.00242 19.8841 9.53299 20.7428 10.2933 21.0013C10.6685 21.1391 11.0675 21.0978 11.3857 20.9917C11.7001 20.8869 12.0218 20.6898 12.2121 20.4132L12.2121 20.4132L12.215 20.4088L16.0351 14.7253L16.4472 15.0045L12.6251 20.691L12.6249 20.6912C12.259 21.2361 11.5347 21.5999 10.8 21.5999C10.5668 21.5999 10.3358 21.5596 10.1237 21.481Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n <path\n d=\"M19.6201 17.6H18.6201C17.7647 17.6 17.2258 17.3983 16.8985 17.0826C16.5746 16.7703 16.3701 16.2615 16.3701 15.45V5.65C16.3701 4.83853 16.5746 4.32972 16.8985 4.0174C17.2258 3.7017 17.7647 3.5 18.6201 3.5H19.6201C20.4756 3.5 21.0144 3.7017 21.3418 4.0174C21.6656 4.32972 21.8701 4.83853 21.8701 5.65V15.45C21.8701 16.2615 21.6656 16.7703 21.3418 17.0826C21.0144 17.3983 20.4756 17.6 19.6201 17.6ZM18.6201 4C18.3336 4 18.076 4.01649 17.8541 4.06699C17.6277 4.11848 17.4085 4.21206 17.2328 4.3877C17.0558 4.56469 16.9683 4.77976 16.9232 4.99011C16.8797 5.19328 16.8701 5.41977 16.8701 5.65V15.45C16.8701 15.6802 16.8797 15.9067 16.9232 16.1099C16.9683 16.3202 17.0558 16.5353 17.2328 16.7123C17.4085 16.8879 17.6277 16.9815 17.8541 17.033C18.076 17.0835 18.3336 17.1 18.6201 17.1H19.6201C19.9066 17.1 20.1642 17.0835 20.3862 17.033C20.6126 16.9815 20.8318 16.8879 21.0074 16.7123C21.1844 16.5353 21.2719 16.3202 21.317 16.1099C21.3605 15.9067 21.3701 15.6802 21.3701 15.45V5.65C21.3701 5.41977 21.3605 5.19328 21.317 4.99011C21.2719 4.77976 21.1844 4.56469 21.0074 4.3877C20.8318 4.21206 20.6126 4.11848 20.3862 4.06699C20.1642 4.01649 19.9066 4 19.6201 4H18.6201Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n </svg>\n </i>\n </button>\n </div>\n </div>\n <div\n class=\"Related mt-2\"\n *ngIf=\"\n showFeedBackIconsIndex === i &&\n !isChatingWithAi &&\n chat?.relatedListItems &&\n chat?.relatedListItems.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-list-check\"></i> Related\n </h5>\n <div class=\"card-container\" *ngIf=\"chat?.type === 'ai'\">\n <ul class=\"list-container\">\n <ng-container *ngFor=\"let item of chat?.relatedListItems\">\n <li (click)=\"fetchDataFor(item, chat)\">{{ item }}</li>\n </ng-container>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"cta-faqs quick-prompts-extended\"\n *ngIf=\"i == 0 && quickPrompts?.length\"\n >\n <!-- <div *ngFor=\"let tile of quickPrompts\" class=\"cta\"\n (click)=\"sendMessageWithTile(tile.prompt)\">\n Q: {{ tile.text }}\n </div> -->\n <div class=\"cta_suggestions\">\n <button\n *ngFor=\"let tile of quickPrompts\"\n (click)=\"sendMessageWithTile(tile.prompt)\"\n >\n <ng-container *ngIf=\"tile\">{{ tile.text }}</ng-container>\n </button>\n </div>\n </div>\n <div class=\"chat bot\" *ngIf=\"i == 0 && botSkills\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n </div>\n <div\n class=\"chat-bubble-wrap\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <div class=\"chat-bubble-content\">\n <div\n class=\"SearchTitle ai\"\n [innerHTML]=\"processMessageForDisplay(botSkills)\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"chat?.suggestions?.length\">\n <h4 class=\"labelChat\">\n Here are some things EventsGPT Copilot can help you do:\n </h4>\n <div class=\"cta_suggestions\">\n <button\n *ngFor=\"let suggestion of chat?.suggestions\"\n (click)=\"sendMessageWithTile(suggestion)\"\n >\n <ng-container *ngIf=\"suggestion\">{{\n suggestion\n }}</ng-container>\n </button>\n </div>\n </div>\n <div\n *ngIf=\"\n chat?.action?.section_id == 'company_search' ||\n chat?.action?.section_id == 'user_search' ||\n chat?.action?.section_id == 'industry_company_search'\n \"\n >\n <div class=\"box\">\n <div class=\"tiktokwrapper\">\n <div\n class=\"tiktokshell\"\n *ngFor=\"let user of chat?.action.users\"\n >\n <div class=\"videoPhotobox\">\n <ng-conatiner\n *ngIf=\"user?.photoPath && !user.userVideosModel\"\n >\n <img [src]=\"user?.photoPath\" />\n </ng-conatiner>\n <ng-conatiner *ngIf=\"user.userVideosModel\">\n <app-video-player\n *ngIf=\"user?.userVideosModel\"\n [isDev]=\"isDev\"\n [currentUserId]=\"userId\"\n [videoObj]=\"user?.userVideosModel\"\n [user]=\"user\"\n [eventId]=\"eventId\"\n type=\"1\"\n >\n </app-video-player>\n </ng-conatiner>\n </div>\n\n <div\n class=\"noPhoto\"\n *ngIf=\"!user?.photoPath && !user.userVideosModel\"\n >\n <h3>\n {{ user.firstName | slice: 0 : 1\n }}{{ user.lastName | slice: 0 : 1 }}\n </h3>\n </div>\n <div class=\"overlymask\" *ngIf=\"!user.userVideosModel\"></div>\n <div class=\"onshell-content\">\n <div class=\"title-shell\">\n <h3>{{ user.firstName }} {{ user.lastName }}</h3>\n <h3 class=\"companyName\">{{ user.company }}</h3>\n </div>\n <div class=\"button-shell\">\n <button\n class=\"Connectbtn\"\n (click)=\"connectToUser(user.userId)\"\n >\n {{\n canConnect(user.userId)\n ? \"Connect\"\n : canDisconnect(user.userId)\n ? \"Disconnect\"\n : \"Request\n Sent\"\n }}\n </button>\n <button\n class=\"schedulebtn\"\n (click)=\"scheduleMeetingWithUser(user)\"\n >\n Schedule\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"chat?.action?.section_id == myUpcomingSessionAction\">\n <div class=\"agenda-items-wrapper\" class=\"agenda-items-wrapper\">\n <div class=\"list-view\">\n <div\n class=\"session-detail-wrapper card-background-session\"\n *ngFor=\"let upcomingSession of chat?.action.content\"\n >\n <div class=\"thumbnail\">\n <img\n alt=\"Introduction to the Imaging Radar Academy\"\n src=\"https://s27media.azureedge.net/8008/profile_pic/453cea2c-feba-11ed-8c0b-00155d025b0a.png\"\n class=\"\"\n />\n <!---->\n <!---->\n <!----><button\n class=\"play-btn color-primary\"\n title=\"Watch: Introduction to the Imaging Radar Academy\"\n >\n <span class=\"material-icons notranslate\">\n play_circle_outline\n </span>\n <!---->\n </button>\n <!---->\n <!---->\n </div>\n <!---->\n <!---->\n <div class=\"content p-3\">\n <div\n class=\"d-flex justify-content-between align-items-center\"\n >\n <div class=\"d-flex flex-column\">\n <p class=\"fs-xs mb-0 body-text-color\">\n {{\n upcomingSession.dateTimeRange.start\n | date\n : \"MM-dd-yyyy HH:mm\"\n : getSessionIanaTimeZone(upcomingSession)\n }}\n -\n {{\n upcomingSession.dateTimeRange.end\n | date\n : \"MM-dd-yyyy HH:mm\"\n : getSessionIanaTimeZone(upcomingSession)\n }}\n {{ upcomingSession.timeZone.id }}\n </p>\n <!---->\n <!---->\n <!-- <p class=\"fs-xs mb-2 color-secondary\" title=\"Session Type: Generative AI\">Generative AI </p> -->\n <!---->\n </div>\n <div class=\"d-flex align-items-center actions px-2\">\n <!---->\n <button\n (click)=\"\n performSessionAction(\n upcomingSession.id,\n 'view-session'\n )\n \"\n class=\"s27-btn-icon body-text-color\"\n title=\"View Session Information: Introduction to the Imaging Radar Academy\"\n >\n <span class=\"material-icons notranslate\">\n remove_red_eye\n </span>\n </button>\n\n <button\n (click)=\"\n performSessionAction(\n upcomingSession.id,\n 'add-to-agenda'\n )\n \"\n class=\"s27-btn-icon body-text-color\"\n >\n <span\n class=\"material-icons notranslate\"\n title=\"Add Session: Introduction to the Imaging Radar Academy to My agendaa\"\n >\n event_available\n </span>\n </button>\n <!---->\n <!---->\n <!---->\n <!---->\n\n <button\n (click)=\"\n performSessionAction(upcomingSession.id, 'play')\n \"\n class=\"s27-btn-icon body-text-color\"\n title=\"Copy session link to share\"\n >\n <span class=\"material-icons notranslate\">\n play_circle_outline\n </span>\n </button>\n <!---->\n </div>\n </div>\n <h2 class=\"body-text-color\">\n {{ upcomingSession.title }}\n </h2>\n <div\n class=\"session-description color-secondary\"\n [innerHTML]=\"sanitizeHtml(upcomingSession.description)\"\n ></div>\n <ul\n class=\"speakers grid-2-cols\"\n *ngFor=\"let speakerId of upcomingSession.speakers\"\n >\n <li class=\"\">\n <div class=\"image\" title=\"Blair Wunderlich\">\n <img\n alt=\"Blair Wunderlich\"\n [src]=\"speakers[speakerId]?.photoPath\"\n class=\"\"\n />\n <!---->\n <!---->\n <!---->\n </div>\n <!---->\n <div\n class=\"content pl-3\"\n style=\"text-transform: none\"\n >\n <div class=\"mb-0 body-text-color fs-xs fw-500\">\n {{ speakers[speakerId]?.firstName }}\n {{ speakers[speakerId]?.lastName }}\n </div>\n <div class=\"color-secondary fs-xxs\">\n {{ speakers[speakerId]?.jobTitle }}\n </div>\n <div class=\"color-secondary fs-xxs\">\n {{ speakers[speakerId]?.company }}\n </div>\n </div>\n <!---->\n </li>\n </ul>\n <!---->\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Initial load: loading dots when fetching chat history (no \"Thinking\") -->\n <div class=\"chat bot chat-thinking chat-loading-dots\" *ngIf=\"loading && !isChatingWithAi\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img *ngIf=\"displayAvatarUrl || botIcon\" [src]=\"displayAvatarUrl || botIcon\" alt=\"Assistant\" class=\"chat-avatar-img\" />\n <span *ngIf=\"!(displayAvatarUrl || botIcon)\" class=\"chat-avatar-initials chat-avatar-initials-assistant\">A</span>\n </div>\n <div class=\"dateTime\" [style.color]=\"dateTimeColor ? '' : ''\">\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ getLoadingTime() }}\n </div>\n </div>\n </div>\n <div class=\"thinking-row\">\n <div class=\"thinking-dots\">\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n </div>\n <span class=\"thinking-text\">{{ getTranslation(\"Loading\") || \"Loading\" }}...</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Thinking: only when user has sent a message and AI is responding -->\n <div class=\"chat bot chat-thinking\" *ngIf=\"isChatingWithAi && !executingWorkflow\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img *ngIf=\"displayAvatarUrl || botIcon\" [src]=\"displayAvatarUrl || botIcon\" alt=\"Assistant\" class=\"chat-avatar-img\" />\n <span *ngIf=\"!(displayAvatarUrl || botIcon)\" class=\"chat-avatar-initials chat-avatar-initials-assistant\">A</span>\n </div>\n <div class=\"dateTime\" [style.color]=\"dateTimeColor ? '' : ''\">\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ getLoadingTime() }}\n </div>\n </div>\n </div>\n <div class=\"thinking-row\">\n <div class=\"thinking-dots\">\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n </div>\n <span class=\"thinking-text\">{{ getTranslation(\"Thinking\") || \"Thinking\" }}...</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- <div #chatMain></div> -->\n <div\n *ngIf=\"openWorkflowInput && selectedWorkflow && !executingWorkflow\"\n class=\"chatFooterWrapper\"\n >\n <!-- new UI for Chat Message Section by Amit -->\n <div class=\"chat-footer-upt\">\n <div class=\"topinfo-containerbox\">\n <div class=\"agents_note_wrapper\">\n <div>\n <h6>{{ selectedWorkflow?.Name }}</h6>\n {{ selectedWorkflow?.Description }}\n </div>\n </div>\n\n <div class=\"agents_note_wrapper\">\n <button\n mat-icon-button\n class=\"closeButtonSource\"\n (click)=\"toggleWorkflows(false)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"bottombox-wrapper\">\n <!-- here i need to loop through all the input fields selectedWorkflow.Trigger.InputSchema and render the input fields -->\n <!-- Form for Workflow Inputs -->\n <form\n [formGroup]=\"workflowForm\"\n (ngSubmit)=\"onWorkflowSubmit()\"\n class=\"form-container\"\n >\n <div\n *ngFor=\"let input of selectedWorkflow?.Trigger?.InputSchema\"\n class=\"form-group\"\n >\n <label>{{ input.Label }}</label>\n\n <!-- Handle Text Input or Text Area based on requirement -->\n <textarea\n *ngIf=\"input.Type === 'string'\"\n formControlName=\"{{ input.InputId }}\"\n [placeholder]=\"input.Placeholder\"\n [rows]=\"2\"\n [required]=\"input.Required\"\n class=\"form-control\"\n ></textarea>\n\n <!-- Dropdown for Select Options -->\n <select\n *ngIf=\"input.Type === 'select'\"\n formControlName=\"{{ input.InputId }}\"\n class=\"form-control\"\n >\n <option\n *ngFor=\"let option of input.Options\"\n [value]=\"option.Value\"\n >\n {{ option.Label }}\n </option>\n </select>\n </div>\n\n <!-- Submit button aligned to the right -->\n <div class=\"form-group\">\n <button type=\"submit\" class=\"btn btn-primary submit-button\">\n Submit\n </button>\n </div>\n </form>\n </div>\n </div>\n\n <!-- new UI for Chat Message Section by Amit -->\n </div>\n <div *ngIf=\"!openWorkflowInput\" class=\"chatFooterWrapper\">\n <!-- new UI for Chat Message Section by Amit -->\n <div class=\"chat-footer-upt\">\n <div class=\"topinfo-containerbox\" *ngIf=\"!checkForCop29BotId()\">\n <div class=\"agents_note_wrapper\">\n <div class=\"agents-dropdown-wrapper\">\n <div class=\"dropdown-wrapper\" (click)=\"toggleDropdown()\">\n <div class=\"dropdown-header\">\n <span>{{ getDropdownHeaderText() }}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <label (click)=\"onSelectAll()\">\n <input type=\"checkbox\" [checked]=\"areAllSelected()\" />\n All\n </label>\n <label\n *ngFor=\"let agent of agents\"\n (click)=\"onAgentChange(agent)\"\n >\n <input type=\"checkbox\" [(ngModel)]=\"agent.selected\" />\n {{ agent.agentName }}\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"agents_note_wrapper\">\n <div class=\"agents-dropdown-wrapper\">\n <div class=\"dropdown-wrapper\" (click)=\"toggleWorkflows()\">\n <div class=\"dropdown-header\">\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"0\"\n viewBox=\"0 0 256 256\"\n class=\"h-5 w-5\"\n height=\"1.3em\"\n width=\"1.3em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M245.66,74.34l-32-32a8,8,0,0,0-11.32,11.32L220.69,72H192a74.49,74.49,0,0,0-28.35,6.73c-13.62,6.29-30.83,19.71-35.54,48-5.32,31.94-29.1,39.22-41,40.86a40,40,0,1,0,.18,16.06A71.65,71.65,0,0,0,108.13,178C121.75,172,139,158.6,143.89,129.31,150.65,88.77,190.34,88,192,88h28.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,245.66,74.34ZM48,200a24,24,0,1,1,24-24A24,24,0,0,1,48,200Z\"\n ></path></svg\n >&nbsp; Workflows\n </div>\n <div class=\"dropdown-menu\" *ngIf=\"isWorkflowOpen\">\n <label\n *ngFor=\"let orgWorkflow of orgWorkflows\"\n (click)=\"onWorkflowSelected(orgWorkflow)\"\n >\n {{ orgWorkflow.Name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bottombox-wrapper\">\n <!-- <input [disabled]=\"isChatingWithAi\" type=\"text\" class=\"form-control-1 s27-scroll\"\n \n placeholder=\"Ask anything...\" [style.background]=\"formFieldBgColor ? formFieldBgColor : ''\"\n [style.color]=\"formFieldTextColor ? formFieldTextColor : ''\" [(ngModel)]=\"input\"\n (keyup.enter)=\"handleSubmit()\" #myInput /> -->\n <textarea\n [disabled]=\"isChatingWithAi\"\n class=\"form-control-1 s27-scroll chat-textarea\"\n placeholder=\"{{ getTranslation('Ask anything') }}\"\n [(ngModel)]=\"input\"\n (keydown)=\"handleKeydown($event)\"\n (input)=\"adjustTextareaHeight($event)\"\n #myInput\n ></textarea>\n\n \n\n <button\n class=\"btn cta-chat rotate\"\n (click)=\"handleSubmit()\"\n [style.background]=\"sendButtonColor ? sendButtonColor : ''\"\n [style.color]=\"sendButtonTextColor ? sendButtonTextColor : ''\"\n title=\"{{ getTranslation('Send Message') }}\"\n style=\"margin-right: 1px\"\n >\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"0\"\n viewBox=\"0 0 512 512\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M476.59 227.05l-.16-.07L49.35 49.84A23.56 23.56 0 0027.14 52 24.65 24.65 0 0016 72.59v113.29a24 24 0 0019.52 23.57l232.93 43.07a4 4 0 010 7.86L35.53 303.45A24 24 0 0016 327v113.31A23.57 23.57 0 0026.59 460a23.94 23.94 0 0013.22 4 24.55 24.55 0 009.52-1.93L476.4 285.94l.19-.09a32 32 0 000-58.8z\"\n ></path>\n </svg>\n <!-- SEND -->\n </button>\n\n <button\n class=\"btn cta-chat mr-1 voice-btn\"\n (click)=\"openVoiceModal()\"\n type=\"button\"\n title=\"Voice Agent\"\n [style.background]=\"sendButtonColor ? sendButtonColor : ''\"\n [style.color]=\"sendButtonTextColor ? sendButtonTextColor : ''\"\n >\n <svg\n class=\"voice-btn-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g fill-rule=\"nonzero\">\n <path\n d=\"M24,0 L24,24 L0,24 L0,0 L24,0 Z M12.5934901,23.257841 L12.5819402,23.2595131 L12.5108777,23.2950439 L12.4918791,23.2987469 L12.4918791,23.2987469 L12.4767152,23.2950439 L12.4056548,23.2595131 C12.3958229,23.2563662 12.3870493,23.2590235 12.3821421,23.2649074 L12.3780323,23.275831 L12.360941,23.7031097 L12.3658947,23.7234994 L12.3769048,23.7357139 L12.4804777,23.8096931 L12.4953491,23.8136134 L12.4953491,23.8136134 L12.5071152,23.8096931 L12.6106902,23.7357139 L12.6232938,23.7196733 L12.6232938,23.7196733 L12.6266527,23.7031097 L12.609561,23.275831 C12.6075724,23.2657013 12.6010112,23.2592993 12.5934901,23.257841 L12.5934901,23.257841 Z M12.8583906,23.1452862 L12.8445485,23.1473072 L12.6598443,23.2396597 L12.6498822,23.2499052 L12.6498822,23.2499052 L12.6471943,23.2611114 L12.6650943,23.6906389 L12.6699349,23.7034178 L12.6699349,23.7034178 L12.678386,23.7104931 L12.8793402,23.8032389 C12.8914285,23.8068999 12.9022333,23.8029875 12.9078286,23.7952264 L12.9118235,23.7811639 L12.8776777,23.1665331 C12.8752882,23.1545897 12.8674102,23.1470016 12.8583906,23.1452862 L12.8583906,23.1452862 Z M12.1430473,23.1473072 C12.1332178,23.1423925 12.1221763,23.1452606 12.1156365,23.1525954 L12.1099173,23.1665331 L12.0757714,23.7811639 C12.0751323,23.7926639 12.0828099,23.8018602 12.0926481,23.8045676 L12.108256,23.8032389 L12.3092106,23.7104931 L12.3186497,23.7024347 L12.3186497,23.7024347 L12.3225043,23.6906389 L12.340401,23.2611114 L12.337245,23.2485176 L12.337245,23.2485176 L12.3277531,23.2396597 L12.1430473,23.1473072 Z\"\n fill=\"none\"\n ></path>\n <path\n d=\"M12,3 C12.51285,3 12.9355092,3.38604429 12.9932725,3.88337975 L13,4 L13,20 C13,20.5523 12.5523,21 12,21 C11.48715,21 11.0644908,20.613973 11.0067275,20.1166239 L11,20 L11,4 C11,3.44772 11.4477,3 12,3 Z M8,6 C8.55228,6 9,6.44772 9,7 L9,17 C9,17.5523 8.55228,18 8,18 C7.44772,18 7,17.5523 7,17 L7,7 C7,6.44772 7.44772,6 8,6 Z M16,6 C16.5523,6 17,6.44772 17,7 L17,17 C17,17.5523 16.5523,18 16,18 C15.4477,18 15,17.5523 15,17 L15,7 C15,6.44772 15.4477,6 16,6 Z M4,9 C4.55228,9 5,9.44772 5,10 L5,14 C5,14.5523 4.55228,15 4,15 C3.44772,15 3,14.5523 3,14 L3,10 C3,9.44772 3.44772,9 4,9 Z M20,9 C20.51285,9 20.9355092,9.38604429 20.9932725,9.88337975 L21,10 L21,14 C21,14.5523 20.5523,15 20,15 C19.48715,15 19.0644908,14.613973 19.0067275,14.1166239 L19,14 L19,10 C19,9.44772 19.4477,9 20,9 Z\"\n fill=\"#09244B\"\n ></path>\n </g>\n </g>\n </svg>\n <span class=\"voice-btn-text\">Voice</span>\n </button>\n </div>\n </div>\n\n <!-- new UI for Chat Message Section by Amit -->\n </div>\n\n <div class=\"NoteTxt\">\n <div class=\"note\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.882\"\n height=\"12.883\"\n viewBox=\"0 0 12.882 12.883\"\n >\n <path\n id=\"Icon_ion-shield-checkmark\"\n data-name=\"Icon ion-shield-checkmark\"\n d=\"M15.106,4.532a.46.46,0,0,0-.378-.424A20.132,20.132,0,0,1,8.881,2.291a.46.46,0,0,0-.379,0A20.132,20.132,0,0,1,2.655,4.108a.46.46,0,0,0-.378.424A11.3,11.3,0,0,0,2.98,9.4a10.049,10.049,0,0,0,2.06,3.235A10.516,10.516,0,0,0,8.521,15.1a.46.46,0,0,0,.345,0,10.516,10.516,0,0,0,3.481-2.465A10.049,10.049,0,0,0,14.4,9.4,11.3,11.3,0,0,0,15.106,4.532Zm-3.767,2.16L8.153,10.373a.46.46,0,0,1-.328.159H7.806a.46.46,0,0,1-.322-.131L6.069,9.014a.46.46,0,1,1,.644-.657L7.777,9.4,10.644,6.09a.46.46,0,0,1,.7.6Z\"\n transform=\"translate(-2.25 -2.25)\"\n fill=\"#06f\"\n />\n </svg>\n\n <span class=\"text\">{{\n getTranslation(\n \"Your personal or company information is kept private and secure\n within this chat.\"\n )\n }}</span>\n </div>\n </div>\n </mat-drawer-content>\n </mat-drawer>\n <mat-drawer\n class=\"drawer edit-boxDrawer\"\n style=\"width: 45%\"\n #sourcesDrawer\n [position]=\"'end'\"\n [mode]=\"'over'\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <div class=\"sourceDraweContainer\">\n <div class=\"container-fluid\">\n <button\n mat-icon-button\n class=\"closeButtonSource\"\n (click)=\"onCloseSource()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <h1>{{ currentSourcesList?.length }} Sources</h1>\n <!-- <p>Tell me about latest news from Mistral about AI agents announcement done this month</p> -->\n <hr />\n <ul class=\"sources-list\">\n <li *ngFor=\"let item of currentSourcesList; let si = index\">\n <!-- <input type=\"checkbox\" id=\"source1\"> -->\n <div class=\"source-content\" (click)=\"openLinkInNewTab(item.link)\">\n <label for=\"source1\">\n <span class=\"source-title\"\n ><span class=\"ml-1\">{{ si + 1 }}.</span\n >{{ item.title }}</span\n >\n <span class=\"image-container\">\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(item.link)\"\n [alt]=\"getDomainName(item.link) + ' favicon'\"\n />\n <span> {{ getDomainName(item.link) }}</span>\n </span>\n <span class=\"source-description\">{{ item.desc }}</span>\n </label>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </mat-drawer-content>\n </mat-drawer>\n <mat-drawer\n class=\"drawer edit-boxDrawer\"\n style=\"width: 45%\"\n #editorsDrawer\n [position]=\"'end'\"\n [mode]=\"'push'\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <lib-bot-html-editor\n *ngIf=\"isContentLoaded\"\n [editorContent]=\"currentMessageForEditor\"\n [isDocInEditMode]=\"isDocInEditMode\"\n [documentContent]=\"documentContent\"\n [conversationId]=\"conversationId\"\n [botId]=\"botId\"\n ></lib-bot-html-editor>\n </mat-drawer-content>\n </mat-drawer>\n</mat-drawer-container>\n\n<div *ngIf=\"showWorkflowExecutionDetails\" class=\"modal\">\n <div class=\"modal-content\">\n <div class=\"close-wrapper\">\n <span class=\"close_pop\" (click)=\"closeModal()\">&times;</span>\n </div>\n <div class=\"titleSection\">\n <!-- Workflow Title -->\n <h2>{{ workflowExecutionDetails.WorkflowName }}</h2>\n <!-- Workflow Title -->\n </div>\n <!-- Inputs Section -->\n <div class=\"inputs-section\">\n <h3>Inputs</h3>\n <ul>\n <li\n *ngFor=\"let input of objectToArray(workflowExecutionDetails.Inputs)\"\n >\n {{ input.key }}: {{ input.value }}\n </li>\n </ul>\n </div>\n\n <!-- Actions Section (Displayed as Timeline) -->\n <div class=\"actions-section\">\n <h3>Agent Actions</h3>\n <div class=\"timeline\">\n <div\n *ngFor=\"let action of workflowExecutionDetails.Actions\"\n class=\"timeline-item\"\n >\n <div class=\"timestamp-section\">\n <h4>{{ action.ActionName || action.Name }}</h4>\n <p><strong></strong> {{ action.InsertTimeStamp }}</p>\n </div>\n <p [innerHTML]=\"processMessageForDisplay(action.Output)\"></p>\n <!-- <pre>{{ action.Output }}</pre> -->\n </div>\n </div>\n </div>\n\n <!-- Insert Timestamp -->\n <div class=\"timestamp-section\">\n <p>\n <strong>Inserted At:</strong>\n {{ workflowExecutionDetails.InsertTimeStamp }}\n </p>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'hivegpt-chatbot',\n templateUrl: './chatbot.component.html',\n styleUrls: ['./chatbot.component.scss'],\n})\nexport class ChatBotComponent {\n @Input() userId!: string;\n /** Optional user profile image URL; if not set, user initials are shown in chat. */\n @Input() userAvatarUrl?: string;\n /** User's selected timezone (e.g. 'America/New_York'); used for chat timestamps and session card times. */\n @Input() timezone!: string;\n @Input() apiKey!: string;\n @Input() botName!: string;\n @Input() botSkills!: string;\n @Input() botId!: string;\n @Input() closeButtonColor!: string;\n @Input() gradientColors!: string[];\n @Input() greeting!: string;\n @Input() sendButtonColor!: string;\n @Input() useOpenAi!: boolean;\n @Input() showClose!: boolean;\n @Input() bgGradient!: string[];\n @Input() sendButtonTextColor!: string;\n @Input() fullView!: boolean;\n @Input() bgBubbleAi!: string;\n @Input() bgBubbleUser!: string;\n @Input() closeButtonbgColor!: string;\n @Input() messageTextColorAi!: string;\n @Input() messageTextColorUser!: string;\n @Input() dateTimeColor!: string;\n @Input() dateTextColor!: string;\n @Input() formFieldBgColor!: string;\n @Input() formFieldTextColor!: string;\n @Input() thumbsUpMessage!: string;\n @Input() thumbsDownMessages!: string[];\n @Input() eventName!: string;\n @Input() credentials!: [];\n @Input() unknownResponses!: [];\n @Input() rules!: string;\n @Input() eventId!: string;\n @Input() s27Token!: string;\n @Output() tokensRefreshed = new EventEmitter<any>();\n @Input() workspaceToken!: string;\n @Input() isDev!: boolean;\n /** Optional API base URL (e.g. ngrok). When set, chat/voice use this instead of dev/prod default. */\n @Input() baseUrl?: string;\n visible = false;\n\n toggle() {\n this.visible = !this.visible;\n }\n}\n","<button mat-icon-button class=\"chat-button\" color=\"primary\" (click)=\"toggle()\">\n <mat-icon>chat</mat-icon>\n</button>\n\n<ng-container *ngIf=\"visible\">\n <hivegpt-chat-drawer-package\n [apiKey]=\"apiKey\"\n [bgBubbleAi]=\"bgBubbleAi\"\n [bgBubbleUser]=\"bgBubbleUser\"\n [bgGradient]=\"bgGradient\"\n [botName]=\"botName\"\n [closeButtonbgColor]=\"closeButtonbgColor\"\n [closeButtonColor]=\"closeButtonColor\"\n [credentials]=\"credentials\"\n [dateTextColor]=\"dateTextColor\"\n [dateTimeColor]=\"dateTimeColor\"\n [eventId]=\"eventId\"\n [eventName]=\"eventName\"\n [formFieldBgColor]=\"formFieldBgColor\"\n [formFieldTextColor]=\"formFieldTextColor\"\n [fullView]=\"fullView\"\n [greeting]=\"greeting\"\n [gradientColors]=\"gradientColors\"\n [messageTextColorAi]=\"messageTextColorAi\"\n [messageTextColorUser]=\"messageTextColorUser\"\n [sendButtonColor]=\"sendButtonColor\"\n [sendButtonTextColor]=\"sendButtonTextColor\"\n [showClose]=\"showClose\"\n [thumbsDownMessages]=\"thumbsDownMessages\"\n [thumbsUpMessage]=\"thumbsUpMessage\"\n [unknownResponses]=\"unknownResponses\"\n [useOpenAi]=\"useOpenAi\"\n [userId]=\"userId\"\n [userAvatarUrl]=\"userAvatarUrl\"\n [timezone]=\"timezone\"\n [botId]=\"botId\"\n [s27Token]=\"s27Token\"\n (tokensRefreshed)=\"tokensRefreshed.emit($event)\"\n [workspaceToken]=\"workspaceToken\"\n [isDev]=\"isDev\"\n [baseUrl]=\"baseUrl\"\n >\n </hivegpt-chat-drawer-package>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VoiceAgentModalComponent } from './components/voice-agent-modal/voice-agent-modal.component';\nimport { VoiceAgentService } from './services/voice-agent.service';\nimport { AudioAnalyzerService } from './services/audio-analyzer.service';\n\n/**\n * Voice agent module. Uses @pipecat-ai/client-js + @pipecat-ai/websocket-transport\n * (peer dependencies) for WebSocket transport, RTVI protocol, and audio.\n */\n@NgModule({\n declarations: [\n VoiceAgentModalComponent\n ],\n imports: [\n CommonModule\n ],\n providers: [\n VoiceAgentService,\n AudioAnalyzerService,\n ],\n exports: [\n VoiceAgentModalComponent\n ]\n})\nexport class VoiceAgentModule { }\n","import { ApplicationRef, Injectable, InjectionToken, Inject, Optional } from '@angular/core';\nimport { Socket, SocketIoConfig } from 'ngx-socket-io';\nimport { prod_environment } from '../../environments/environment';\n\nexport const SOCKET_URL_TOKEN = new InjectionToken<string>('SOCKET_URL');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationSocket extends Socket {\n constructor(\n appRef: ApplicationRef,\n @Optional() @Inject(SOCKET_URL_TOKEN) socketUrl?: string\n ) {\n const config: SocketIoConfig = {\n url: socketUrl || prod_environment.SocketUrl,\n options: {\n transports: ['websocket', 'polling'],\n reconnection: true,\n autoConnect: true,\n upgrade: true,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 5000,\n reconnectionAttempts: Infinity\n }\n };\n super(config, appRef);\n\n this.on('connect', () => {\n // connected\n });\n\n this.on('disconnect', () => {\n console.warn('Socket disconnected');\n });\n\n this.on('connect_error', (err: any) => {\n console.error('Socket connection error:', err);\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n})\nexport class SafeHtmlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n transform(html): unknown {\n return html ? this.sanitizer.bypassSecurityTrustHtml(html) : '';\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { ChatDrawerComponent } from './components/chat-drawer/chat-drawer.component';\nimport { ChatBotComponent } from './components/chatbot/chatbot.component';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\nimport { VideoPlayerComponent } from './components/video-player/video-player.component';\nimport { QuillModule } from 'ngx-quill';\nimport { BotHtmlEditorComponent } from './components/bot-html-editor/bot-html-editor.component';\nimport { VoiceAgentModule } from './components/voice-agent/voice-agent.module';\n\n@NgModule({\n declarations: [ChatBotComponent, ChatDrawerComponent, VideoPlayerComponent, SafeHtmlPipe, BotHtmlEditorComponent],\n imports: [CommonModule, OverlayModule, MatIconModule, MatSidenavModule, FormsModule, ReactiveFormsModule, QuillModule, VoiceAgentModule],\n exports: [ChatBotComponent, ChatDrawerComponent, VideoPlayerComponent]\n})\nexport class HiveGptModule { }\n","/*\n * Public API Surface of hive-gpt\n */\n\nexport * from './lib/components/chat-drawer/chat-drawer.component';\nexport * from './lib/components/chatbot/chatbot.component';\nexport * from './lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component';\nexport * from './lib/components/voice-agent/services/voice-agent.service';\nexport * from './lib/components/voice-agent/services/audio-analyzer.service';\nexport * from './lib/components/voice-agent/voice-agent.module';\nexport * from './lib/components/voice-agent/voice-modal-tokens';\nexport * from './lib/components/NotificationSocket';\nexport * from './lib/components/video-player/video-player.component';\nexport * from './lib/hivegpt.module';\nexport * from './lib/services/platform-token-refresh.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.VoiceAgentService","i2.AudioAnalyzerService","i3","i1","i2","i2.BotsService","i5.ConversationService","i6.TranslationService","i7.VoiceAgentService","i9.PlatformTokenRefreshService","i13.VideoPlayerComponent","i14.BotHtmlEditorComponent","i3.ChatDrawerComponent"],"mappings":"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"}
1
+ {"version":3,"file":"hivegpt-hiveai-angular.mjs","sources":["../../../../projects/hivegpt/eventsgpt-angular/src/lib/utils/utils.ts","../../../../projects/hivegpt/eventsgpt-angular/src/environments/environment.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/voice-modal-tokens.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/audio-analyzer.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/services/platform-token-refresh.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/services/voice-agent.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/conversation.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/translations/translation.service.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/video-player/video-player.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/video-player/video-player.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot-html-editor/bot-html-editor.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/bot-html-editor/bot-html-editor.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chat-drawer/chat-drawer.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chat-drawer/chat-drawer.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chatbot/chatbot.component.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/chatbot/chatbot.component.html","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/voice-agent/voice-agent.module.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/components/NotificationSocket.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/pipes/safe-html.pipe.ts","../../../../projects/hivegpt/eventsgpt-angular/src/lib/hivegpt.module.ts","../../../../projects/hivegpt/eventsgpt-angular/src/public-api.ts","../../../../projects/hivegpt/eventsgpt-angular/src/hivegpt-hiveai-angular.ts"],"sourcesContent":["const formatHoursAndMinutes = (date: Date) => {\n let hours = date.getHours() % 12;\n const minutes = date.getMinutes();\n const amPm = date.getHours() < 12 ? 'AM' : 'PM';\n if(hours === 0) hours = 12;\n\n const formattedHours = hours < 10 ? `0${hours}` : hours;\n const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;\n\n return `${formattedHours}:${formattedMinutes} ${amPm}`;\n};\n\nexport const formatNow = (timezone?: string) => {\n const now = new Date();\n if (timezone) {\n const options: any = {\n hour12: true,\n hour: 'numeric',\n minute: 'numeric',\n timeZone: timezone,\n };\n return now.toLocaleString('en-US', options);\n }\n return formatHoursAndMinutes(now);\n};\n\nexport const formatTimeStamps = (timezone: string | undefined, timestamps: any) => {\n const date = new Date(timestamps + 'Z');\n const options: any = {\n hour12: true,\n hour: 'numeric',\n minute: 'numeric',\n };\n if (timezone && timezone.trim()) {\n options.timeZone = timezone.trim();\n }\n return date.toLocaleString('en-US', options);\n};\n","\n\nexport const prod_environment = {\n USERS_API: 'https://es-user.social27.com/api',\n BASE_URL: 'https://agent-api.hivegpt.ai',\n AGENTS_API: 'https://hive-ai.social27.com/api',\n API_KEY: '82595783-dc9c-4513-8204-709818d51be3',\n SocketUrl: 'https://notif-v2-ws.social27.com/'\n}\n\n\nexport const dev_environment = {\n USERS_API: 'https://pre-user.social27.com/api',\n BASE_URL: 'https://pre-agent-api.hivegpt.ai',\n AGENTS_API: 'https://hive-pre-ai.social27.com/api',\n API_KEY: '66d59244c50b8fb597a101t1',\n SocketUrl: 'https://notif-ws-staging.social27.com/',\n};\n\n","import { InjectionToken } from '@angular/core';\n\nexport interface VoiceModalConfig {\n apiUrl: string;\n token: string;\n botId: string;\n conversationId: string;\n apiKey: string;\n eventToken: string;\n /** Event scope id (same as host `eventId` / API `events/:eventId/...`). */\n eventId: string;\n eventUrl: string;\n domainAuthority: string;\n agentName: string;\n agentRole: string;\n agentAvatar?: string;\n /** Same base as host `USERS_API` (e.g. `https://es-user.social27.com/api`) for proactive token refresh. */\n usersApiUrl?: string;\n}\n\nexport const VOICE_MODAL_CONFIG = new InjectionToken<VoiceModalConfig>('VOICE_MODAL_CONFIG');\nexport const VOICE_MODAL_CLOSE_CALLBACK = new InjectionToken<() => void>('VOICE_MODAL_CLOSE_CALLBACK');\n","import { Injectable, NgZone } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Audio analyzer for waveform visualization and local (mic) speaking detection.\n * VoiceAgentService may combine this with WebSocket server events for call state.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AudioAnalyzerService {\n private audioContext: AudioContext | null = null;\n private analyserNode: AnalyserNode | null = null;\n private sourceNode: MediaStreamAudioSourceNode | null = null;\n private dataArray: Uint8Array | null = null;\n private animationFrameId: number | null = null;\n private isRunning = false;\n\n private audioLevelsSubject = new BehaviorSubject<number[]>([]);\n private isUserSpeakingSubject = new BehaviorSubject<boolean>(false);\n\n // Adaptive noise floor detection\n private noiseFloor = 0;\n private noiseFloorSamples: number[] = [];\n private readonly NOISE_FLOOR_SAMPLE_COUNT = 30;\n private readonly SPEAKING_THRESHOLD_MULTIPLIER = 2.5;\n private readonly WAVEFORM_BAR_COUNT = 60;\n // Amplify raw amplitude so normal speech (±10–20 units) maps to visible levels\n private readonly SENSITIVITY_MULTIPLIER = 5;\n private barsBuffer: number[] = new Array(this.WAVEFORM_BAR_COUNT).fill(0);\n\n audioLevels$: Observable<number[]> = this.audioLevelsSubject.asObservable();\n isUserSpeaking$: Observable<boolean> = this.isUserSpeakingSubject.asObservable();\n\n constructor(private ngZone: NgZone) {}\n\n start(stream: MediaStream): void {\n if (this.isRunning) {\n this.stop();\n }\n\n try {\n this.audioContext = new (window.AudioContext || (window as any).webkitAudioContext)();\n if (this.audioContext.state === 'suspended') {\n this.audioContext.resume().catch(console.warn);\n }\n this.sourceNode = this.audioContext.createMediaStreamSource(stream);\n\n this.analyserNode = this.audioContext.createAnalyser();\n this.analyserNode.fftSize = 2048;\n this.analyserNode.smoothingTimeConstant = 0.4;\n\n const bufferLength = this.analyserNode.frequencyBinCount;\n this.dataArray = new Uint8Array(bufferLength);\n\n this.sourceNode.connect(this.analyserNode);\n \n this.isRunning = true;\n this.noiseFloorSamples = [];\n this.noiseFloor = 0;\n \n this.ngZone.runOutsideAngular(() => this.analyze());\n } catch (error) {\n console.error('Error starting audio analyzer:', error);\n this.stop();\n }\n }\n\n stop(): void {\n this.isRunning = false;\n \n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n\n if (this.sourceNode) {\n this.sourceNode.disconnect();\n this.sourceNode = null;\n }\n\n if (this.analyserNode) {\n this.analyserNode.disconnect();\n this.analyserNode = null;\n }\n\n if (this.audioContext && this.audioContext.state !== 'closed') {\n this.audioContext.close().catch(console.error);\n this.audioContext = null;\n }\n\n this.dataArray = null;\n this.audioLevelsSubject.next([]);\n this.isUserSpeakingSubject.next(false);\n }\n\n private analyze(): void {\n if (!this.isRunning || !this.analyserNode || !this.dataArray) {\n return;\n }\n\n this.analyserNode.getByteTimeDomainData(this.dataArray);\n \n // Calculate RMS (Root Mean Square) volume\n const rms = this.calculateRMS(this.dataArray);\n \n // Learn noise floor during initial samples\n if (this.noiseFloorSamples.length < this.NOISE_FLOOR_SAMPLE_COUNT) {\n this.noiseFloorSamples.push(rms);\n if (this.noiseFloorSamples.length === this.NOISE_FLOOR_SAMPLE_COUNT) {\n // Calculate average noise floor\n const sum = this.noiseFloorSamples.reduce((a, b) => a + b, 0);\n this.noiseFloor = sum / this.NOISE_FLOOR_SAMPLE_COUNT;\n }\n } else {\n // Update noise floor adaptively (moving average)\n this.noiseFloor = this.noiseFloor * 0.99 + rms * 0.01;\n }\n\n // Detect if user is speaking\n const threshold = this.noiseFloor * this.SPEAKING_THRESHOLD_MULTIPLIER;\n const isSpeaking = rms > threshold;\n\n // Generate waveform bars\n const bars = this.generateWaveformBars(this.dataArray);\n\n // Only trigger change detection when speaking state actually changes\n if (isSpeaking !== this.isUserSpeakingSubject.value) {\n this.ngZone.run(() => this.isUserSpeakingSubject.next(isSpeaking));\n }\n // Emit audio levels outside Angular's zone — no CD triggered here\n this.audioLevelsSubject.next(bars);\n\n this.animationFrameId = requestAnimationFrame(() => this.analyze());\n }\n\n private calculateRMS(data: Uint8Array): number {\n let sum = 0;\n for (let i = 0; i < data.length; i++) {\n const normalized = (data[i] - 128) / 128;\n sum += normalized * normalized;\n }\n return Math.sqrt(sum / data.length);\n }\n\n private generateWaveformBars(data: Uint8Array): number[] {\n const step = Math.floor(data.length / this.WAVEFORM_BAR_COUNT);\n for (let i = 0; i < this.WAVEFORM_BAR_COUNT; i++) {\n const value = data[i * step];\n const normalized = Math.abs((value - 128) / 128) * 100 * this.SENSITIVITY_MULTIPLIER;\n this.barsBuffer[i] = Math.min(100, Math.max(0, normalized));\n }\n return this.barsBuffer;\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n Inject,\n Injectable,\n InjectionToken,\n Optional,\n PLATFORM_ID,\n} from '@angular/core';\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\nimport { catchError, filter, switchMap, take } from 'rxjs/operators';\n\n/**\n * Default matches Pro-Events `AppConstants.authTokenKey` — same localStorage shape\n * `{ accessToken, refreshToken, ... }` as JSON.\n * Named factory (no arrow fn) so ngc metadata collection accepts it.\n */\nexport function hiveGptAuthStorageKeyFactory(): string {\n return 'authcc-aae1';\n}\n\nexport const HIVEGPT_AUTH_STORAGE_KEY = new InjectionToken<string>(\n 'HIVEGPT_AUTH_STORAGE_KEY',\n {\n providedIn: 'root',\n factory: hiveGptAuthStorageKeyFactory,\n },\n);\n\n/** Subset of platform token refresh response (user/tokenRefresh). */\nexport interface HiveGptPlatformTokenResponse {\n accessToken?: string;\n refreshToken?: string;\n email?: string;\n expiresIn?: number | string;\n [key: string]: unknown;\n}\n\nexport interface EnsureTokenResult {\n accessToken: string;\n /** True when a network refresh was performed successfully. */\n refreshed: boolean;\n /** Full API payload when refreshed (for host `saveTokenAndLoginUser`). */\n authResponse?: HiveGptPlatformTokenResponse;\n}\n\n/**\n * Proactive access-token refresh (JWT `exp`) + single-flight queue, aligned with\n * Pro-Events `EventInterceptor` + `AuthService.refreshToken`.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class PlatformTokenRefreshService {\n private refreshTokenInProgress = false;\n private refreshTokenSubject = new BehaviorSubject<string | null>(null);\n\n private readonly storageKey: string;\n\n constructor(\n private http: HttpClient,\n /** Use `Object` (not `object`) so ngc metadata collection accepts the parameter type. */\n @Inject(PLATFORM_ID) private platformId: Object,\n /**\n * Avoid `string | null` on the parameter — `|` is treated as unsupported expression in ngc metadata.\n */\n @Optional() @Inject(HIVEGPT_AUTH_STORAGE_KEY) authStorageKey: string,\n ) {\n this.storageKey =\n authStorageKey != null && authStorageKey !== ''\n ? authStorageKey\n : 'authcc-aae1';\n }\n\n /** Read parsed auth blob from localStorage (same as host app). */\n readStoredAuth(): HiveGptPlatformTokenResponse | null {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n try {\n const raw = localStorage.getItem(this.storageKey);\n if (!raw) {\n return null;\n }\n return JSON.parse(raw) as HiveGptPlatformTokenResponse;\n } catch {\n return null;\n }\n }\n\n persistAuth(res: HiveGptPlatformTokenResponse): void {\n if (!isPlatformBrowser(this.platformId) || !res) {\n return;\n }\n try {\n localStorage.setItem(this.storageKey, JSON.stringify(res));\n } catch (e) {\n console.warn('[HiveGpt] Failed to persist auth tokens', e);\n }\n }\n\n /**\n * JWT `exp` check without @auth0/angular-jwt (keeps package lean).\n * @param skewSeconds refresh slightly before actual expiry (clock skew).\n */\n isAccessTokenExpired(\n token: string | null | undefined,\n skewSeconds = 60,\n ): boolean {\n if (!token || typeof token !== 'string') {\n return true;\n }\n const expMs = this.getJwtExpirationMs(token);\n if (expMs == null) {\n return false;\n }\n return expMs - skewSeconds * 1000 < Date.now();\n }\n\n private getJwtExpirationMs(token: string): number | null {\n try {\n const parts = token.split('.');\n if (parts.length < 2) {\n return null;\n }\n const payload = parts[1]\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n const padded = payload + '='.repeat((4 - (payload.length % 4)) % 4);\n if (typeof atob === 'undefined') {\n return null;\n }\n const json = JSON.parse(atob(padded)) as { exp?: number };\n if (json?.exp == null || typeof json.exp !== 'number') {\n return null;\n }\n return json.exp * 1000;\n } catch {\n return null;\n }\n }\n\n /**\n * Returns a valid access token: refreshes via `POST {usersApiBaseUrl}/user/tokenRefresh`\n * when JWT is expired and a refresh token exists in storage.\n */\n ensureValidAccessToken(\n currentAccessToken: string | undefined | null,\n usersApiBaseUrl: string,\n ): Observable<EnsureTokenResult> {\n if (!isPlatformBrowser(this.platformId)) {\n return of({\n accessToken: currentAccessToken ?? '',\n refreshed: false,\n });\n }\n\n const stored = this.readStoredAuth();\n const access =\n (currentAccessToken && String(currentAccessToken).trim()) ||\n stored?.accessToken ||\n '';\n const refresh = stored?.refreshToken;\n\n if (access && !this.isAccessTokenExpired(access)) {\n return of({ accessToken: access, refreshed: false });\n }\n\n if (!refresh || typeof refresh !== 'string') {\n return of({ accessToken: access, refreshed: false });\n }\n\n const base = (usersApiBaseUrl || '').replace(/\\/+$/, '');\n if (!base) {\n return of({ accessToken: access, refreshed: false });\n }\n\n const url = `${base}/user/tokenRefresh`;\n\n if (!this.refreshTokenInProgress) {\n this.refreshTokenInProgress = true;\n this.refreshTokenSubject.next(null);\n\n return this.http\n .post<HiveGptPlatformTokenResponse>(url, { refreshToken: refresh })\n .pipe(\n switchMap((authResponse) => {\n this.refreshTokenInProgress = false;\n if (authResponse?.accessToken) {\n this.persistAuth(authResponse);\n this.refreshTokenSubject.next(authResponse.accessToken);\n return of({\n accessToken: authResponse.accessToken,\n refreshed: true,\n authResponse,\n } as EnsureTokenResult);\n }\n this.refreshTokenSubject.next(null);\n return throwError(() => new Error('Token refresh returned no accessToken'));\n }),\n catchError((err) => {\n this.refreshTokenInProgress = false;\n this.refreshTokenSubject.next(null);\n return throwError(() => err);\n }),\n );\n }\n\n return this.refreshTokenSubject.pipe(\n filter((t): t is string => t != null && t !== ''),\n take(1),\n switchMap((token) =>\n of({\n accessToken: token,\n refreshed: true,\n } as EnsureTokenResult),\n ),\n );\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, NgZone, PLATFORM_ID } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, take, throttleTime } from 'rxjs/operators';\nimport { PipecatClient, RTVIEvent } from '@pipecat-ai/client-js';\nimport { WebSocketTransport } from '@pipecat-ai/websocket-transport';\nimport { PlatformTokenRefreshService } from '../../../services/platform-token-refresh.service';\nimport { AudioAnalyzerService } from './audio-analyzer.service';\n\nexport type CallState =\n | 'idle'\n | 'connecting'\n | 'connected'\n | 'listening'\n | 'talking'\n | 'ended';\n\nexport interface TranscriptData {\n text: string;\n final: boolean;\n}\n\n/**\n * Voice agent orchestrator using the official PipecatClient SDK.\n *\n * Audio flow (mirrors the React reference implementation):\n * - Local mic: acquired by PipecatClient.initDevices(); local track fed to\n * AudioAnalyzerService for waveform visualisation.\n * - Bot audio: received as a MediaStreamTrack via RTVIEvent.TrackStarted,\n * played through a hidden <audio> element.\n * - All binary protobuf framing / RTVI protocol handled by\n * @pipecat-ai/client-js + @pipecat-ai/websocket-transport.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class VoiceAgentService {\n private callStateSubject = new BehaviorSubject<CallState>('idle');\n private statusTextSubject = new BehaviorSubject<string>('');\n private durationSubject = new BehaviorSubject<string>('00:00');\n private isMicMutedSubject = new BehaviorSubject<boolean>(false);\n private isUserSpeakingSubject = new BehaviorSubject<boolean>(false);\n private audioLevelsSubject = new BehaviorSubject<number[]>([]);\n private userTranscriptSubject = new Subject<TranscriptData>();\n private botTranscriptSubject = new Subject<string>();\n\n private callStartTime = 0;\n private durationInterval: ReturnType<typeof setInterval> | null = null;\n\n private pcClient: PipecatClient | null = null;\n private botAudioElement: HTMLAudioElement | null = null;\n private lifecycleToken = 0;\n\n private subscriptions = new Subscription();\n private pcEventCleanup: (() => void)[] = [];\n\n callState$: Observable<CallState> = this.callStateSubject.asObservable();\n statusText$: Observable<string> = this.statusTextSubject.asObservable();\n duration$: Observable<string> = this.durationSubject.asObservable();\n isMicMuted$: Observable<boolean> = this.isMicMutedSubject.asObservable();\n isUserSpeaking$: Observable<boolean> = this.isUserSpeakingSubject.asObservable().pipe(distinctUntilChanged());\n audioLevels$: Observable<number[]> = this.audioLevelsSubject.asObservable();\n userTranscript$: Observable<TranscriptData> = this.userTranscriptSubject.asObservable();\n botTranscript$: Observable<string> = this.botTranscriptSubject.asObservable();\n\n constructor(\n private audioAnalyzer: AudioAnalyzerService,\n private platformTokenRefresh: PlatformTokenRefreshService,\n private ngZone: NgZone,\n /** `Object` not `object` — ngc metadata collection rejects the `object` type in DI params. */\n @Inject(PLATFORM_ID) private platformId: Object,\n ) {\n this.subscriptions.add(\n this.audioAnalyzer.audioLevels$.pipe(throttleTime(50)).subscribe((levels) =>\n this.ngZone.run(() => this.audioLevelsSubject.next(levels)),\n ),\n );\n }\n\n /** Reset to idle (e.g. when modal re-opens so user can click Start Call). */\n resetToIdle(): void {\n void this.prepareFreshSession();\n }\n\n /**\n * Hard reset voice session so each modal open starts from a clean state.\n * Closes any previous client and prevents stale callbacks from mutating UI state.\n */\n async prepareFreshSession(): Promise<void> {\n this.lifecycleToken += 1;\n this.stopDurationTimer();\n this.callStartTime = 0;\n this.audioAnalyzer.stop();\n this.stopBotAudio();\n this.isUserSpeakingSubject.next(false);\n this.isMicMutedSubject.next(false);\n this.durationSubject.next('00:00');\n this.statusTextSubject.next('');\n this.callStateSubject.next('idle');\n await this.cleanupPipecatClient();\n }\n\n async connect(\n apiUrl: string,\n token: string,\n botId: string,\n conversationId: string,\n apiKey: string,\n eventToken: string,\n eventId: string,\n eventUrl: string,\n domainAuthority: string,\n usersApiUrl?: string,\n ): Promise<void> {\n if (this.callStateSubject.value !== 'idle') {\n console.warn('[HiveGpt Voice] Call already in progress');\n return;\n }\n\n const connectToken = ++this.lifecycleToken;\n\n try {\n this.callStateSubject.next('connecting');\n this.statusTextSubject.next('Connecting...');\n\n let accessToken = token;\n if (usersApiUrl && isPlatformBrowser(this.platformId)) {\n try {\n const ensured = await this.platformTokenRefresh\n .ensureValidAccessToken(token, usersApiUrl)\n .pipe(take(1))\n .toPromise();\n if (ensured?.accessToken) accessToken = ensured.accessToken;\n } catch (e) {\n console.warn('[HiveGpt Voice] Token refresh failed', e);\n }\n }\n\n const baseUrl = apiUrl.replace(/\\/$/, '');\n\n const pcClient = new PipecatClient({\n transport: new WebSocketTransport(),\n enableMic: true,\n enableCam: false,\n callbacks: {\n onConnected: () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onPipecatConnected();\n }),\n onDisconnected: () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onPipecatDisconnected();\n }),\n onBotReady: () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onBotReady();\n }),\n onUserTranscript: (data) =>\n this.ngZone.run(() =>\n this.isLifecycleActive(connectToken) &&\n this.userTranscriptSubject.next({ text: data.text, final: !!data.final }),\n ),\n onBotTranscript: (data) =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.botTranscriptSubject.next(data.text);\n }),\n onError: (err) => {\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n console.error('[HiveGpt Voice] PipecatClient error', err);\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Connection failed');\n });\n },\n },\n });\n\n this.pcClient = pcClient;\n\n // Bot audio arrives as a MediaStreamTrack — wire to a hidden <audio> element\n const onTrackStarted = (track: MediaStreamTrack, participant?: { local?: boolean }) => {\n if (!this.isLifecycleActive(connectToken)) return;\n if (!participant?.local && track.kind === 'audio') {\n this.ngZone.run(() => this.setupBotAudioTrack(track));\n }\n };\n pcClient.on(RTVIEvent.TrackStarted, onTrackStarted);\n\n // Speaking state comes straight from RTVI events\n const onBotStarted = () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onBotStartedSpeaking();\n });\n pcClient.on(RTVIEvent.BotStartedSpeaking, onBotStarted);\n\n const onBotStopped = () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.onBotStoppedSpeaking();\n });\n pcClient.on(RTVIEvent.BotStoppedSpeaking, onBotStopped);\n\n const onUserStarted = () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.isUserSpeakingSubject.next(true);\n this.callStateSubject.next('listening');\n this.statusTextSubject.next('Listening...');\n });\n pcClient.on(RTVIEvent.UserStartedSpeaking, onUserStarted);\n\n const onUserStopped = () =>\n this.ngZone.run(() => {\n if (!this.isLifecycleActive(connectToken)) return;\n this.isUserSpeakingSubject.next(false);\n if (this.callStateSubject.value === 'listening') {\n // Brief 'Processing...' while we wait for the bot to respond.\n this.callStateSubject.next('connected');\n this.statusTextSubject.next('Processing...');\n }\n });\n pcClient.on(RTVIEvent.UserStoppedSpeaking, onUserStopped);\n\n // Store cleanup fns so listeners are removed on disconnect\n this.pcEventCleanup = [\n () => pcClient.off(RTVIEvent.TrackStarted, onTrackStarted),\n () => pcClient.off(RTVIEvent.BotStartedSpeaking, onBotStarted),\n () => pcClient.off(RTVIEvent.BotStoppedSpeaking, onBotStopped),\n () => pcClient.off(RTVIEvent.UserStartedSpeaking, onUserStarted),\n () => pcClient.off(RTVIEvent.UserStoppedSpeaking, onUserStopped),\n ];\n\n // Acquire mic (triggers browser permission prompt)\n await pcClient.initDevices();\n\n // Build headers using the browser Headers API (required by pipecat's APIRequest type)\n const requestHeaders = new Headers();\n requestHeaders.append('Authorization', `Bearer ${accessToken}`);\n requestHeaders.append('x-api-key', apiKey);\n requestHeaders.append('hive-bot-id', botId);\n requestHeaders.append('domain-authority', domainAuthority);\n requestHeaders.append('eventUrl', eventUrl);\n requestHeaders.append('eventId', eventId);\n requestHeaders.append('eventToken', eventToken);\n requestHeaders.append('ngrok-skip-browser-warning', 'true');\n\n // POST to /ai/ask-voice-socket → receives { ws_url } → WebSocketTransport connects\n await pcClient.startBotAndConnect({\n endpoint: `${baseUrl}/ai/ask-ai-voice`,\n headers: requestHeaders,\n requestData: {\n bot_id: botId,\n conversation_id: conversationId,\n voice: 'alloy',\n },\n });\n } catch (error) {\n if (!this.isLifecycleActive(connectToken)) return;\n console.error('[HiveGpt Voice] connect failed', error);\n this.callStateSubject.next('ended');\n await this.cleanupPipecatClient();\n this.statusTextSubject.next('Connection failed');\n throw error;\n }\n }\n\n private onPipecatConnected(): void {\n // Start the duration timer from the moment the session is live.\n this.callStartTime = Date.now();\n this.startDurationTimer();\n this.callStateSubject.next('connected');\n this.statusTextSubject.next('Connected');\n // Preserve any mute action the user made during \"connecting\".\n const shouldBeMuted = this.isMicMutedSubject.value;\n this.pcClient?.enableMic(!shouldBeMuted);\n this.isMicMutedSubject.next(shouldBeMuted);\n }\n\n private onPipecatDisconnected(): void {\n this.stopDurationTimer();\n this.callStartTime = 0;\n this.audioAnalyzer.stop();\n this.stopBotAudio();\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Call Ended');\n }\n\n private onBotReady(): void {\n // Retry track wiring in case tracks weren't ready at onConnected.\n this.startLocalMicAnalyzer();\n const botTrack = (this.pcClient?.tracks() as { bot?: { audio?: MediaStreamTrack } })\n ?.bot?.audio;\n if (botTrack) this.setupBotAudioTrack(botTrack);\n // Bot is initialised — signal that we're now waiting for user input.\n this.statusTextSubject.next('Listening...');\n }\n\n private startLocalMicAnalyzer(): void {\n const localTrack = (this.pcClient?.tracks() as { local?: { audio?: MediaStreamTrack } })\n ?.local?.audio;\n if (localTrack) {\n this.audioAnalyzer.start(new MediaStream([localTrack]));\n }\n }\n\n private onBotStartedSpeaking(): void {\n this.callStateSubject.next('talking');\n this.statusTextSubject.next('Talking...');\n // Mark user as no longer speaking when bot takes the turn.\n this.isUserSpeakingSubject.next(false);\n }\n\n private onBotStoppedSpeaking(): void {\n if (this.callStateSubject.value === 'talking') {\n this.callStateSubject.next('connected');\n this.statusTextSubject.next('Listening...');\n }\n }\n\n private setupBotAudioTrack(track: MediaStreamTrack): void {\n if (!this.botAudioElement) {\n this.botAudioElement = new Audio();\n this.botAudioElement.autoplay = true;\n (this.botAudioElement as any).playsInline = true;\n this.botAudioElement.setAttribute('playsinline', '');\n }\n const existing = (this.botAudioElement.srcObject as MediaStream | null)\n ?.getAudioTracks()[0];\n if (existing?.id === track.id) return;\n\n this.botAudioElement.pause();\n this.botAudioElement.srcObject = new MediaStream([track]);\n this.botAudioElement.play().catch((err) =>\n console.warn('[HiveGpt Voice] Bot audio play blocked', err),\n );\n }\n\n private stopBotAudio(): void {\n if (this.botAudioElement) {\n try {\n this.botAudioElement.pause();\n (this.botAudioElement.srcObject as MediaStream | null)\n ?.getAudioTracks()\n .forEach((t) => t.stop());\n this.botAudioElement.srcObject = null;\n } catch {\n // ignore\n }\n this.botAudioElement = null;\n }\n }\n\n async disconnect(): Promise<void> {\n this.lifecycleToken += 1;\n this.stopDurationTimer();\n this.callStartTime = 0;\n this.audioAnalyzer.stop();\n this.stopBotAudio();\n await this.cleanupPipecatClient();\n this.callStateSubject.next('ended');\n this.statusTextSubject.next('Call Ended');\n }\n\n private isLifecycleActive(token: number): boolean {\n return token === this.lifecycleToken;\n }\n\n private async cleanupPipecatClient(): Promise<void> {\n if (this.pcClient) {\n try {\n // Remove all event listeners before disconnecting\n this.pcEventCleanup.forEach(fn => fn());\n this.pcEventCleanup = [];\n await this.pcClient.disconnect();\n } catch {\n // ignore\n }\n this.pcClient = null;\n }\n }\n\n toggleMic(): void {\n const nextMuted = !this.isMicMutedSubject.value;\n // Reflect the user's intent immediately, even if connect is still in progress.\n this.isMicMutedSubject.next(nextMuted);\n if (this.pcClient) {\n this.pcClient.enableMic(!nextMuted);\n }\n if (nextMuted) this.isUserSpeakingSubject.next(false);\n }\n\n private startDurationTimer(): void {\n const tick = () => {\n if (this.callStartTime > 0) {\n const elapsed = Math.floor((Date.now() - this.callStartTime) / 1000);\n const m = Math.floor(elapsed / 60);\n const s = elapsed % 60;\n this.ngZone.run(() => this.durationSubject.next(`${m}:${String(s).padStart(2, '0')}`));\n }\n };\n tick();\n this.ngZone.runOutsideAngular(() => {\n this.durationInterval = setInterval(tick, 1000);\n });\n }\n\n private stopDurationTimer(): void {\n if (this.durationInterval) {\n clearInterval(this.durationInterval);\n this.durationInterval = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy, Output, EventEmitter, Injector } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VoiceAgentService, CallState } from '../../services/voice-agent.service';\nimport { AudioAnalyzerService } from '../../services/audio-analyzer.service';\nimport { VOICE_MODAL_CONFIG, VOICE_MODAL_CLOSE_CALLBACK, VoiceModalConfig } from '../../voice-modal-tokens';\n\n@Component({\n selector: 'hivegpt-voice-agent-modal',\n templateUrl: './voice-agent-modal.component.html',\n styleUrls: ['./voice-agent-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VoiceAgentModalComponent implements OnInit, OnDestroy {\n @Output() close = new EventEmitter<void>();\n @Input() apiUrl!: string;\n @Input() token!: string;\n @Input() botId!: string;\n @Input() conversationId!: string;\n @Input() apiKey: string = '';\n @Input() eventToken: string = '';\n @Input() eventId: string = '';\n @Input() eventUrl: string = '';\n @Input() domainAuthority: string = 'prod-lite';\n @Input() agentName: string = 'AI Assistant';\n @Input() agentRole: string = 'AI Agent Specialist';\n @Input() agentAvatar?: string;\n @Input() usersApiUrl: string = '';\n\n private injectedConfig: VoiceModalConfig | null = null;\n private onCloseCallback: (() => void) | null = null;\n\n constructor(\n public voiceAgentService: VoiceAgentService,\n public audioAnalyzer: AudioAnalyzerService,\n private injector: Injector,\n private cdr: ChangeDetectorRef\n ) {}\n\n /** Hardcoded voice agent avatar (Nia). */\n readonly displayAvatarUrl = 'https://www.jotform.com/uploads/mehmetkarakasli/form_files/1564593667676a8e85f23758.86945537_icon.png';\n\n callState: CallState = 'idle';\n statusText: string = '';\n duration: string = '00:00';\n isMicMuted: boolean = false;\n isUserSpeaking: boolean = false;\n audioLevels: number[] = [];\n private cdPending = false;\n private envelopeCache: { min: number; range: number }[] = [];\n private readonly MAX_BAR_HEIGHT = 42;\n\n /** True while the bot is speaking — drives avatar pulse animation and voice visualizer. */\n get isBotTalking(): boolean { return this.callState === 'talking'; }\n\n /** True while the user is actively speaking — drives waveform active color. */\n get isUserActive(): boolean { return this.callState === 'listening' && this.isUserSpeaking && !this.isMicMuted; }\n\n /** True during the brief processing pause between user speech and bot response. */\n get isProcessing(): boolean { return this.callState === 'connected' && this.statusText === 'Processing...'; }\n\n private subscriptions: Subscription[] = [];\n\n ngOnInit(): void {\n // When opened via Overlay, config is provided by injection\n this.injectedConfig = this.injector.get(VOICE_MODAL_CONFIG, null);\n this.onCloseCallback = this.injector.get(VOICE_MODAL_CLOSE_CALLBACK, null);\n if (this.injectedConfig) {\n this.apiUrl = this.injectedConfig.apiUrl;\n this.token = this.injectedConfig.token;\n this.botId = this.injectedConfig.botId;\n this.conversationId = this.injectedConfig.conversationId;\n this.apiKey = this.injectedConfig.apiKey ?? '';\n this.eventToken = this.injectedConfig.eventToken ?? '';\n this.eventId = this.injectedConfig.eventId ?? '';\n this.eventUrl = this.injectedConfig.eventUrl ?? '';\n this.domainAuthority = this.injectedConfig.domainAuthority ?? 'prod-lite';\n this.agentName = this.injectedConfig.agentName ?? this.agentName;\n this.agentRole = this.injectedConfig.agentRole ?? this.agentRole;\n this.agentAvatar = this.injectedConfig.agentAvatar;\n this.usersApiUrl = this.injectedConfig.usersApiUrl ?? this.usersApiUrl;\n }\n\n this.subscriptions.push(\n this.voiceAgentService.callState$.subscribe(state => {\n this.callState = state;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.statusText$.subscribe(text => {\n this.statusText = text;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.duration$.subscribe(duration => {\n this.duration = duration;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.isMicMuted$.subscribe(muted => {\n this.isMicMuted = muted;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.isUserSpeaking$.subscribe(speaking => {\n this.isUserSpeaking = speaking;\n this.scheduleCD();\n })\n );\n\n this.subscriptions.push(\n this.voiceAgentService.audioLevels$.subscribe(levels => {\n this.audioLevels = levels;\n this.scheduleCD();\n })\n );\n\n this.initEnvelopeCache(60);\n\n // Always start from a fresh voice session to avoid stale/disconnected state flashes.\n void this.openFreshCallSession();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.disconnect();\n }\n\n /** Batch multiple subscription emissions into a single CD cycle per frame. */\n private scheduleCD(): void {\n if (!this.cdPending) {\n this.cdPending = true;\n requestAnimationFrame(() => {\n this.cdPending = false;\n this.cdr.markForCheck();\n });\n }\n }\n\n isConnecting: boolean = false;\n\n async startCall(): Promise<void> {\n if (this.isConnecting || (this.callState !== 'idle' && this.callState !== 'ended')) return;\n this.isConnecting = true;\n try {\n await this.voiceAgentService.connect(\n this.apiUrl,\n this.token,\n this.botId,\n this.conversationId,\n this.apiKey,\n this.eventToken,\n this.eventId,\n this.eventUrl,\n this.domainAuthority,\n this.usersApiUrl || undefined,\n );\n } catch (error) {\n console.error('Failed to connect voice agent:', error);\n } finally {\n this.isConnecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n await this.voiceAgentService.disconnect();\n }\n\n private async openFreshCallSession(): Promise<void> {\n await this.voiceAgentService.prepareFreshSession();\n await this.startCall();\n }\n\n toggleMic(): void {\n this.voiceAgentService.toggleMic();\n }\n\n /** Pre-compute gaussian envelope so the hot path is a single lookup + multiply. */\n private initEnvelopeCache(total: number): void {\n const center = (total - 1) / 2;\n const sigma = total / 5;\n this.envelopeCache = [];\n for (let i = 0; i < total; i++) {\n const envelope = Math.exp(-((i - center) ** 2) / (2 * sigma * sigma));\n const minH = 2 + envelope * 3;\n const maxH = 4 + envelope * 38;\n this.envelopeCache.push({ min: minH, range: maxH - minH });\n }\n }\n\n /** Returns a 0–1 scale factor for the waveform bar transform (GPU-composited). */\n getWaveformScale(level: number, index: number): number {\n const cached = this.envelopeCache[index];\n if (!cached) return 0.05;\n const n = Math.min(100, Math.max(0, level ?? 0));\n return (cached.min + (n / 100) * cached.range) / this.MAX_BAR_HEIGHT;\n }\n\n trackByIndex(index: number): number { return index; }\n\n /** Status label for active call — driven by callState + service statusText. */\n get statusLabel(): string {\n switch (this.callState) {\n case 'connecting': return 'Connecting...';\n case 'talking': return 'Talking...';\n case 'listening': return 'Listening...';\n // 'connected' covers: initial connect, between turns (Listening / Processing)\n case 'connected': return this.statusText || 'Connected';\n default: return this.statusText || '';\n }\n }\n\n /** Call Again: reset to idle then start a new call. */\n async callAgain(): Promise<void> {\n await this.openFreshCallSession();\n }\n\n /** Back to Chat: close modal and disconnect. */\n backToChat(): void {\n this.endCall();\n }\n\n /** End call but keep modal open to show Call Ended + Call Again / Back to Chat. */\n hangUp(): void {\n this.disconnect();\n }\n\n async endCall(): Promise<void> {\n await this.disconnect();\n this.onCloseCallback?.();\n this.close.emit();\n }\n}\n","<div class=\"voice-agent-modal-overlay\">\n <div\n class=\"voice-container voice-agent-modal\"\n >\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-left\">\n <div class=\"header-icon\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 1C8.13 1 5 4.13 5 8V14C5 17.87 8.13 21 12 21C15.87 21 19 17.87 19 14V8C19 4.13 15.87 1 12 1Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M12 23C10.34 23 9 21.66 9 20H15C15 21.66 13.66 23 12 23Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n <span class=\"header-title\">Voice</span>\n </div>\n <button\n class=\"close-button\"\n (click)=\"endCall()\"\n type=\"button\"\n aria-label=\"Close\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <!-- Avatar Section with glow -->\n <div class=\"avatar-section\">\n <div class=\"avatar-glow\" [class.glow-talking]=\"isBotTalking\" [class.glow-listening]=\"callState === 'listening'\"></div>\n\n <!-- Particle ring — visible while bot is talking -->\n <div *ngIf=\"isBotTalking\" class=\"particles-container\">\n <span *ngFor=\"let i of [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]\"\n class=\"particle\"\n [style.--i]=\"i\"\n [style.animationDelay]=\"(i * 0.15) + 's'\">\n </span>\n </div>\n\n <div class=\"avatar-wrapper\" [class.speaking]=\"isBotTalking\" [class.listening]=\"callState === 'listening'\">\n <img class=\"avatar-image\" [src]=\"displayAvatarUrl\" alt=\"Nia\" />\n </div>\n </div>\n\n <!-- Agent Info: Nia + Collaboration Manager AI Agent Specialist -->\n <div class=\"agent-info\">\n <div class=\"agent-name\">\n Nia\n <span class=\"ai-badge\">AI</span>\n </div>\n <p class=\"agent-role\">COP30 AI Agent </p>\n </div>\n\n <!-- Start Call (when idle only) -->\n <div *ngIf=\"callState === 'idle'\" class=\"start-call-section\">\n <p *ngIf=\"statusText === 'Connection failed'\" class=\"error-message\">\n {{ statusText }}\n </p>\n <button\n class=\"start-call-button\"\n type=\"button\"\n [disabled]=\"isConnecting\"\n (click)=\"startCall()\"\n >\n <span *ngIf=\"isConnecting\">Connecting...</span>\n <span *ngIf=\"!isConnecting && statusText === 'Connection failed'\"\n >Retry</span\n >\n <span *ngIf=\"!isConnecting && statusText !== 'Connection failed'\"\n >Start Call</span\n >\n </button>\n </div>\n\n <!-- Call Ended: status + Call Again / Back to Chat -->\n <div *ngIf=\"callState === 'ended'\" class=\"call-ended-section\">\n <p class=\"call-ended-status\">\n <span class=\"status-text\">Call Ended</span>\n <span class=\"status-timer\">{{ duration }}</span>\n </p>\n <div class=\"call-ended-controls\">\n <button\n class=\"action-btn\"\n type=\"button\"\n (click)=\"callAgain()\"\n title=\"Call Again\"\n >\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </svg>\n Call Again\n </button>\n <button\n class=\"action-btn\"\n type=\"button\"\n (click)=\"backToChat()\"\n title=\"Back to Chat\"\n >\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n Back to Chat\n </button>\n </div>\n </div>\n\n <!-- Status (when connecting or in-call: Talking... / Listening / Connected + timer) -->\n <div\n class=\"status-indicator status-inline\"\n *ngIf=\"callState !== 'idle' && callState !== 'ended'\"\n >\n <div *ngIf=\"callState === 'connecting'\" class=\"status-connecting\">\n <svg\n class=\"spinner\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"31.416\"\n stroke-dashoffset=\"31.416\"\n >\n <animate\n attributeName=\"stroke-dasharray\"\n dur=\"2s\"\n values=\"0 31.416;15.708 15.708;0 31.416;0 31.416\"\n repeatCount=\"indefinite\"\n />\n <animate\n attributeName=\"stroke-dashoffset\"\n dur=\"2s\"\n values=\"0;-15.708;-31.416;-31.416\"\n repeatCount=\"indefinite\"\n />\n </circle>\n </svg>\n <span class=\"status-text\">{{ statusText }}</span>\n </div>\n <div\n *ngIf=\"callState !== 'connecting'\"\n class=\"status-connected status-inline-row\"\n >\n <span class=\"status-text\" [class.status-talking]=\"isBotTalking\" [class.status-listening]=\"callState === 'listening'\" [class.status-processing]=\"isProcessing\">\n {{ statusLabel }}\n </span>\n\n <!-- Animated bars — visible while bot is talking -->\n <div *ngIf=\"isBotTalking\" class=\"voice-visualizer\">\n <div class=\"vbar\"></div>\n <div class=\"vbar\"></div>\n <div class=\"vbar\"></div>\n <div class=\"vbar\"></div>\n </div>\n\n <!-- Bouncing dots — visible during processing pause -->\n <div *ngIf=\"isProcessing\" class=\"processing-dots\">\n <span></span><span></span><span></span>\n </div>\n\n <span class=\"status-timer\">{{ duration }}</span>\n </div>\n </div>\n\n <!-- Waveform: space always reserved during active call, fades in when user speaks (unmuted) -->\n <div\n *ngIf=\"callState === 'connected' || callState === 'listening' || callState === 'talking'\"\n class=\"waveform-container\"\n [class.waveform-visible]=\"isUserActive\"\n >\n <div class=\"waveform-bars\">\n <div\n *ngFor=\"let level of audioLevels; let i = index; trackBy: trackByIndex\"\n class=\"waveform-bar\"\n [class.active]=\"isUserActive\"\n [style.transform]=\"'scaleY(' + getWaveformScale(level, i) + ')'\"\n ></div>\n </div>\n </div>\n\n <!-- Call Controls (when connected) -->\n <div\n class=\"controls\"\n *ngIf=\"\n callState === 'connecting' ||\n callState === 'connected' ||\n callState === 'listening' ||\n callState === 'talking'\n \"\n >\n <div\n style=\"\n display: flex;\n align-items: center;\n gap: 2px;\n flex-direction: column;\n \"\n >\n <button\n class=\"control-btn mic-btn\"\n [class.muted]=\"isMicMuted\"\n (click)=\"toggleMic()\"\n type=\"button\"\n [title]=\"isMicMuted ? 'Unmute' : 'Mute'\"\n >\n <!-- Microphone icon (unmuted) -->\n <svg\n *ngIf=\"!isMicMuted\"\n width=\"24\"\n height=\"24\"\n viewBox=\"-5 0 32 32\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <g transform=\"translate(-105, -307)\">\n <path\n d=\"M111,314 C111,311.238 113.239,309 116,309 C118.761,309 121,311.238 121,314 L121,324 C121,326.762 118.761,329 116,329 C113.239,329 111,326.762 111,324 L111,314 L111,314 Z M116,331 C119.866,331 123,327.866 123,324 L123,314 C123,310.134 119.866,307 116,307 C112.134,307 109,310.134 109,314 L109,324 C109,327.866 112.134,331 116,331 L116,331 Z M127,326 L125,326 C124.089,330.007 120.282,333 116,333 C111.718,333 107.911,330.007 107,326 L105,326 C105.883,330.799 110.063,334.51 115,334.955 L115,337 L114,337 C113.448,337 113,337.448 113,338 C113,338.553 113.448,339 114,339 L118,339 C118.552,339 119,338.553 119,338 C119,337.448 118.552,337 118,337 L117,337 L117,334.955 C121.937,334.51 126.117,330.799 127,326 L127,326 Z\"\n />\n </g>\n </svg>\n <!-- Microphone icon (muted) -->\n <svg\n *ngIf=\"isMicMuted\"\n width=\"24\"\n height=\"24\"\n viewBox=\"-5 0 32 32\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <g transform=\"translate(-105, -307)\">\n <path\n d=\"M111,314 C111,311.238 113.239,309 116,309 C118.761,309 121,311.238 121,314 L121,324 C121,326.762 118.761,329 116,329 C113.239,329 111,326.762 111,324 L111,314 L111,314 Z M116,331 C119.866,331 123,327.866 123,324 L123,314 C123,310.134 119.866,307 116,307 C112.134,307 109,310.134 109,314 L109,324 C109,327.866 112.134,331 116,331 L116,331 Z M127,326 L125,326 C124.089,330.007 120.282,333 116,333 C111.718,333 107.911,330.007 107,326 L105,326 C105.883,330.799 110.063,334.51 115,334.955 L115,337 L114,337 C113.448,337 113,337.448 113,338 C113,338.553 113.448,339 114,339 L118,339 C118.552,339 119,338.553 119,338 C119,337.448 118.552,337 118,337 L117,337 L117,334.955 C121.937,334.51 126.117,330.799 127,326 L127,326 Z\"\n />\n </g>\n <path\n d=\"M2 2 L30 30\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n <span class=\"control-label\">Mute</span>\n </div>\n\n <div\n style=\"\n display: flex;\n align-items: center;\n gap: 2px;\n flex-direction: column;\n \"\n >\n <button\n class=\"control-btn end-call-btn\"\n (click)=\"hangUp()\"\n type=\"button\"\n title=\"End Call\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n <span class=\"control-label\">End Call</span>\n </div>\n </div>\n </div>\n</div>\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BotsService {\n eventDescription = new Subject();\n bot_api = '';\n constructor(private http: HttpClient) { }\n\n setBaseUrl(url: string): void {\n this.bot_api = url.replace(/\\/$/, '') + '/';\n }\n\n fetchSpeechAuthorizationToken(botId: string, apiKey: string, domain: string): Observable<string> {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'hive-bot-id': botId,\n 'domain-authority': domain\n });\n\n const url = `${this.bot_api}speech/issue_token`;\n return this.http.get(url, { headers }).pipe(\n map((resp: any) => {\n return resp.token;\n })\n );\n }\n\n getWorkflowsByOrgId(orgId: string): Observable<any> {\n const url = `${this.bot_api}workflows?org_id=${orgId}`;\n return this.http.get(url);\n }\n\n getWorkflowExecutionById(executionId: string): Observable<any> {\n const apiUrl = `${this.bot_api}workflows/execution/${executionId}`;\n return this.http.get(apiUrl);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConversationService {\n private conversationStorageKeyPrefix = 'conversationKey_';\n private sessionStorageKeyPrefix = 'sessionKey_';\n\n private userSpecificNotification: Subject<any> = new Subject<any>();\n\n constructor() { }\n\n generateKey(): string {\n const timestamp = Math.floor(new Date().getTime() / 1000).toString(16);\n const randomHex = 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, () => {\n return Math.floor(Math.random() * 16).toString(16);\n });\n return timestamp + randomHex;\n }\n\n /**\n * Returns a stable conversation id persisted in localStorage.\n *\n * IMPORTANT: call-sites should pass an event-specific scope when needed (e.g. eventId)\n * so switching events does not reuse the previous event's conversation thread.\n */\n getKey(botId: string, resetKey: boolean = false, scope?: string): string {\n const normalizedScope =\n scope != null && String(scope).trim() !== '' ? String(scope).trim() : '';\n const storageKey = `${this.conversationStorageKeyPrefix}${botId}${\n normalizedScope ? `_${normalizedScope}` : ''\n }`;\n let value = localStorage.getItem(storageKey);\n\n if (!value || resetKey) {\n value = this.generateKey();\n localStorage.setItem(storageKey, value);\n }\n\n return value;\n }\n\n getSessionKey(sessionId: string, resetKey: boolean = false, scope?: string): string {\n const normalizedScope =\n scope != null && String(scope).trim() !== '' ? String(scope).trim() : '';\n const storageKey = `${this.sessionStorageKeyPrefix}${sessionId}${\n normalizedScope ? `_${normalizedScope}` : ''\n }`;\n let value = localStorage.getItem(storageKey);\n\n if (!value || resetKey) {\n value = this.generateKey();\n localStorage.setItem(storageKey, value);\n }\n\n return value;\n }\n\n sendValidatedUserData(message: any) {\n this.userSpecificNotification.next(message);\n }\n\n getUserSpecificNotification(): Observable<any> {\n return this.userSpecificNotification.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslationService {\n private eventId: string | null = null;\n\n setEventId(id: string) {\n this.eventId = id;\n }\n\n getTranslation(key: string): string {\n const lang = (\n localStorage.getItem('defaultLanguage-' + this.eventId) || 'en'\n ).replace(/^\"|\"$/g, '');\n\n const entry = this.translationsData.find((item) => item.Key === key);\n\n if (!entry) {\n return key; // fallback\n }\n\n return entry.Translations[lang] || entry.DefaultValue || key;\n }\n\n private getLang(eventId?: string | null): string {\n const suffix = eventId ? `-${eventId}` : '';\n const storageKey = `defaultLanguage${suffix}`;\n\n return localStorage.getItem(storageKey) || 'en';\n }\n\n private translationsData: any[] = [\n {\n Key: \"Copy\",\n DefaultValue: \"Copy\",\n Translations: {\n en: \"Copy\",\n fr: \"Copier\",\n it: \"Copia\",\n es: \"Copiar\",\n de: \"Kopieren\",\n \"pt-br\": \"Copiar\",\n ar: \"نسخ\",\n zh: \"复制\",\n ru: \"Копировать\"\n }\n}\n,\n {\n\n Key: \"May I assist you with anything else\",\n DefaultValue: \"Great. May I assist you with anything else?\",\n Translations: {\n en: \"Great. May I assist you with anything else?\",\n fr: \"Parfait. Puis-je vous aider avec autre chose ?\",\n it: \"Perfetto. Posso aiutarti con qualcos'altro?\",\n es: \"Genial. ¿Puedo ayudarte con algo más?\",\n de: \"Super. Kann ich Ihnen noch bei etwas anderem helfen?\",\n \"pt-br\": \"Ótimo. Posso ajudar com mais alguma coisa?\",\n ar: \"رائع. هل يمكنني مساعدتك في أي شيء آخر؟\",\n zh: \"太好了。还有什么我可以帮您的吗?\",\n ru: \"Отлично. Могу ли я помочь вам с чем-то ещё?\"\n }\n},\n {\n Key: \"We are sorry we've not been able to answer your question\",\n DefaultValue: \"We are sorry we've not been able to answer your question. However, our dedicated support team is happy to help. Please <a href=\\\"mailto:support@social27.com\\\">click here</a> and a human agent will assist you as soon as possible.\",\n Translations: {\n en: \"We are sorry we've not been able to answer your question. However, our dedicated support team is happy to help. Please <a href=\\\"mailto:support@social27.com\\\">click here</a> and a human agent will assist you as soon as possible.\",\n fr: \"Nous sommes désolés de ne pas avoir pu répondre à votre question. Cependant, notre équipe d'assistance se fera un plaisir de vous aider. Veuillez <a href=\\\"mailto:support@social27.com\\\">cliquer ici</a> et un agent humain vous assistera dès que possible.\",\n it: \"Ci dispiace di non essere riusciti a rispondere alla tua domanda. Tuttavia, il nostro team di supporto dedicato sarà lieto di aiutarti. Ti preghiamo di <a href=\\\"mailto:support@social27.com\\\">fare clic qui</a> e un operatore umano ti assisterà al più presto.\",\n es: \"Lamentamos no haber podido responder a tu pregunta. Sin embargo, nuestro equipo de soporte estará encantado de ayudarte. Por favor, <a href=\\\"mailto:support@social27.com\\\">haz clic aquí</a> y un agente humano te asistirá lo antes posible.\",\n de: \"Es tut uns leid, dass wir Ihre Frage nicht beantworten konnten. Unser engagiertes Support-Team hilft Ihnen jedoch gerne weiter. Bitte <a href=\\\"mailto:support@social27.com\\\">klicken Sie hier</a>, und ein menschlicher Mitarbeiter wird Ihnen so bald wie möglich helfen.\",\n \"pt-br\": \"Lamentamos não ter conseguido responder à sua pergunta. No entanto, nossa equipe de suporte dedicada ficará feliz em ajudar. Por favor, <a href=\\\"mailto:support@social27.com\\\">clique aqui</a> e um agente humano o ajudará o mais rápido possível.\",\n ar: \"نأسف لعدم تمكننا من الإجابة على سؤالك. ومع ذلك، يسعد فريق الدعم المخصص لدينا بمساعدتك. يرجى <a href=\\\"mailto:support@social27.com\\\">النقر هنا</a> وسيساعدك أحد الوكلاء البشريين في أقرب وقت ممكن.\",\n zh: \"很抱歉我们未能回答您的问题。不过,我们的专属支持团队很乐意为您提供帮助。请<a href=\\\"mailto:support@social27.com\\\">点击这里</a>,人工客服将尽快为您提供协助。\",\n ru: \"К сожалению, мы не смогли ответить на ваш вопрос. Однако наша служба поддержки с радостью вам поможет. Пожалуйста, <a href=\\\"mailto:support@social27.com\\\">нажмите здесь</a>, и наш оператор свяжется с вами как можно скорее.\"\n }\n},\n {\n Key: 'Ask anything',\n DefaultValue: 'Ask anything',\n Translations: {\n en: 'Ask anything',\n fr: 'Demandez ce que vous voulez',\n it: 'Chiedi qualsiasi cosa',\n es: 'Pregunta lo que quieras',\n de: 'Frag alles',\n 'pt-br': 'Pergunte qualquer coisa',\n ar: 'اسأل أي شيء',\n zh: '随便问',\n ru: 'Спросите что угодно',\n },\n },\n {\n Key: 'Assistant',\n DefaultValue: 'Assistant',\n Translations: {\n en: 'Assistant',\n fr: 'Assistant',\n it: 'Assistente',\n es: 'Asistente',\n de: 'Assistent',\n 'pt-br': 'Assistente',\n ar: 'مساعد',\n zh: '助手',\n ru: 'Ассистент',\n },\n },\n {\n Key: 'Your personal or company information is kept private and secure within this chat.',\n DefaultValue:\n 'Your personal or company information is kept private and secure within this chat.',\n Translations: {\n en: 'Your personal or company information is kept private and secure within this chat.',\n fr: 'Vos informations personnelles ou celles de votre entreprise sont conservées privées et sécurisées dans cette conversation.',\n it: \"Le tue informazioni personali o aziendali sono mantenute private e sicure all'interno di questa chat.\",\n es: 'Tu información personal o de la empresa se mantiene privada y segura dentro de este chat.',\n de: 'Ihre persönlichen oder geschäftlichen Informationen bleiben in diesem Chat privat und sicher.',\n 'pt-br':\n 'Suas informações pessoais ou da empresa são mantidas privadas e seguras dentro deste chat.',\n ar: 'تظل معلوماتك الشخصية أو معلومات شركتك خاصة وآمنة داخل هذه المحادثة.',\n zh: '您的个人或公司信息在此聊天中保持私密和安全。',\n ru: 'Ваша личная или корпоративная информация остается конфиденциальной и защищенной в этом чате.',\n },\n },\n {\n Key: 'Send message',\n DefaultValue: 'Send message',\n Translations: {\n en: 'Send message',\n fr: 'Envoyer un message',\n it: 'Invia messaggio',\n es: 'Enviar mensaje',\n de: 'Nachricht senden',\n 'pt-br': 'Enviar mensagem',\n ar: 'إرسال رسالة',\n zh: '发送消息',\n ru: 'Отправить сообщение',\n },\n },\n {\n Key: 'Platform GPT',\n DefaultValue: 'Platform GPT',\n Translations: {\n en: 'Platform GPT',\n fr: 'Plateforme GPT',\n it: 'Piattaforma GPT',\n es: 'Plataforma GPT',\n de: 'Plattform GPT',\n 'pt-br': 'Plataforma GPT',\n ar: 'منصة GPT',\n zh: '平台 GPT',\n ru: 'Платформа GPT',\n },\n },\n {\n Key: 'New Chat',\n DefaultValue: 'New Chat',\n Translations: {\n en: 'New Chat',\n fr: 'Nouvelle conversation',\n it: 'Nuova chat',\n es: 'Nuevo chat',\n de: 'Neuer Chat',\n 'pt-br': 'Novo chat',\n ar: 'محادثة جديدة',\n zh: '新聊天',\n ru: 'Новый чат',\n },\n },\n {\n Key: 'You',\n DefaultValue: 'You',\n Translations: {\n en: 'You',\n fr: 'Vous',\n it: 'Tu',\n es: 'Tú',\n de: 'Du',\n 'pt-br': 'Você',\n ar: 'أنت',\n zh: '您',\n ru: 'Вы',\n },\n },\n {\n Key: 'Write your message',\n DefaultValue: 'Write your message',\n Translations: {\n en: 'Write your message',\n fr: 'Écrivez votre message',\n it: 'Scrivi il tuo messaggio',\n es: 'Escribe tu mensaje',\n de: 'Schreiben Sie Ihre Nachricht',\n 'pt-br': 'Escreva sua mensagem',\n ar: 'اكتب رسالتك',\n zh: '写下您的消息',\n ru: 'Напишите ваше сообщение',\n },\n },\n {\n Key: 'Send',\n DefaultValue: 'Send',\n Translations: {\n en: 'Send',\n fr: 'Envoyer',\n it: 'Invia',\n es: 'Enviar',\n de: 'Senden',\n 'pt-br': 'Enviar',\n ar: 'إرسال',\n zh: '发送',\n ru: 'Отправить',\n },\n },\n\n {\n Key: 'Call Interface',\n DefaultValue: 'Call Interface',\n Translations: {\n en: 'Call Interface',\n fr: \"Interface d'appel\",\n it: 'Interfaccia chiamata',\n es: 'Interfaz de llamada',\n de: 'Anrufoberfläche',\n 'pt-br': 'Interface de chamada',\n ar: 'واجهة الاتصال',\n zh: '呼叫界面',\n ru: 'Интерфейс звонка',\n },\n },\n {\n Key: 'Close',\n DefaultValue: 'Close',\n Translations: {\n en: 'Close',\n fr: 'Fermer',\n it: 'Chiudi',\n es: 'Cerrar',\n de: 'Schließen',\n 'pt-br': 'Fechar',\n ar: 'إغلاق',\n zh: '关闭',\n ru: 'Закрыть',\n },\n },\n ];\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { IVideo } from '../../models/video';\nimport { DOCUMENT } from '@angular/common';\n\n@Component({\n selector: 'app-video-player',\n templateUrl: './video-player.component.html',\n styleUrls: ['./video-player.component.scss'],\n})\nexport class VideoPlayerComponent\n implements OnInit, AfterViewInit {\n @Input() currentUserId: string;\n @Input() user: any;\n @Input() eventId: string;\n @Input() videoObj: IVideo;\n @Input() isDev: boolean;\n myFollowingList: Array<string>;\n myPendingSentRequests: Array<string>;\n @Input() type: string;\n isMuted: boolean = true;\n private observer: IntersectionObserver;\n isFullscreen: boolean = false;\n @ViewChild('video') video: any;\n @ViewChild('fullscreenvideo') fullscreenvideo: any;\n isFullscreenvideoPlaying: boolean = false;\n\n @Output() connectWithUser = new EventEmitter<string>();\n @Output() scheduleMeeting = new EventEmitter<any>();\n\n constructor(\n @Inject(DOCUMENT) private doc: any,\n private el: ElementRef,\n private cdr: ChangeDetectorRef\n ) {\n }\n\n ngOnInit(): void {\n }\n\n toggleSound(isMuted = null) {\n this.isMuted = isMuted != null ? isMuted : !this.isMuted;\n setTimeout(() => {\n const video: any = this.doc\n .getElementById(this.video.id.toString());\n if (video) {\n video.muted = this.isMuted;\n this.video.isMuted = this.isMuted;\n }\n\n this.cdr.markForCheck();\n //this.muteToggle.emit(this.isMuted);\n })\n}\n\n togglePlay(playState: boolean, videoEl) {\n this.videoObj.isPlaying = !this.videoObj.isPlaying;\n setTimeout(() => { \n if (playState) { \n this.videoObj.isPlaying = true;\n videoEl.play();\n var pauseBtn = document.getElementById('pause-btn');\n pauseBtn.classList.add('hide-pause-btn');\n\n this.toggleSound(false);\n }\n else{\n this.videoObj.isPlaying = false;\n videoEl.pause();\n }\n this.cdr.markForCheck();\n })\n }\n \n ngAfterViewInit() {\n if (window.innerWidth <= 576) {\n this.observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting === true) {\n this.video.nativeElement.play();\n } else {\n this.video.nativeElement.pause();\n }\n },\n {\n threshold: 0.75,\n }\n );\n\n this.observer.observe(this.el.nativeElement as HTMLElement);\n }\n }\n\n toggleFullscreen() {\n this.isFullscreen = !this.isFullscreen;\n if (!this.isFullscreen) {\n this.fullscreenvideo.nativeElement.pause();\n }\n }\n\n toggleFullscreenPlay() {\n this.isFullscreenvideoPlaying = !this.isFullscreenvideoPlaying;\n\n if (this.isFullscreenvideoPlaying) {\n this.fullscreenvideo.nativeElement.play();\n } else {\n this.fullscreenvideo.nativeElement.pause();\n }\n }\n\n followUser(userId) {\n this.connectWithUser.emit(userId);\n }\n\n checkPendingSentRequest(userId) {\n return this.myPendingSentRequests?.find(a => a == userId);\n }\n\n canUnfollowUser() {\n return false;\n }\n\n canFollowUser() {\n return true;\n }\n\n getIniNames(firstName, lastName) {\n if(!firstName && !lastName) {\n return '';\n }\n \n if (firstName && lastName)\n return (\n firstName.charAt(0).toUpperCase() + lastName.charAt(0).toUpperCase()\n );\n else return firstName.charAt(0).toUpperCase();\n }\n}\n","<div class=\"video-wrapper\" >\n <div class=\"overlymask-video\"></div>\n <video (click)=\"toggleFullscreen()\" #video [loop]=\"true\" [muted]=\"isMuted\" [src]=\"videoObj.processedUrls || videoObj.url\" playsinline\n [controls]=\"false\"></video>\n <div class=\"main-controls\" [class.no-opacity]=\"video.isPlaying\">\n <button mat-icon-button *ngIf=\"!videoObj.isPlaying\"\n attr.aria-label=\"Play Video\"\n title=\"Play Video\" class=\"play-pause-btn\"\n (click)=\"togglePlay(true, video)\">\n <!-- <mat-icon alt=\"Play\">play_arrow</mat-icon> -->\n <span class=\"material-icons notranslate \" aria-hidden=\"true\">play_circle_outline</span>\n </button>\n\n <button mat-icon-button id=\"pause-btn\" [hidden]=\"!videoObj.isPlaying\" class=\"pause_btn play-pause-btn playing\"\n title=\"Pause Video\"\n [class.half-opacity]=\"video.isPlaying\" (click)=\"togglePlay(false, video)\">\n <!-- <mat-icon alt=\"Pause\">pause</mat-icon> -->\n <span class=\"material-icons notranslate \" aria-hidden=\"true\">pause_circle_outline</span>\n </button>\n </div>\n <div class=\"video-actions\">\n <button class=\"button-trasparent action\" (click)=\"toggleSound()\" title=\"Mute\" *ngIf=\"isMuted\">\n <span class=\"material-icons notranslate \" aria-hidden=\"true\">volume_off</span>\n </button>\n <button class=\"button-trasparent action\" (click)=\"toggleSound()\" title=\"Unmute\" *ngIf=\"!isMuted\">\n <span class=\"material-icons notranslate \" aria-hidden=\"true\">volume_up</span>\n </button>\n\n </div>\n</div>\n\n<div class=\"full-screen\" *ngIf=\"isFullscreen\" [ngClass]=\"{'show': isFullscreen}\">\n <div class=\"video-wrapper\">\n <video #fullscreenvideo (click)=\"toggleFullscreenPlay()\" [loop]=\"true\" [muted]=\"isMuted\" [src]=\"videoObj.processedUrls || videoObj.url\"\n playsinline [controls]=\"false\"></video>\n <div (click)=\"toggleFullscreen()\" class=\"close-btn\">\n <span class=\"material-icons notranslate \">clear</span>\n </div>\n <div class=\"video-actions\">\n <button *ngIf=\"!video.isPlaying\" title=\"Play\"\n class=\"material-icons notranslate body-text-color fs-h2 play position-absolute transparent-btn\" (click)=\"togglePlay(true, video)\">\n play_circle_outline\n </button>\n <button id=\"pause-btn\" [hidden]=\"!videoObj.isPlaying\" title=\"Pause\"\n class=\"pause_btn material-icons body-text-color fs-h2 play position-absolute transparent-btn\"\n [class.half-opacity]=\"video.isPlaying\" (click)=\"togglePlay(false, video)\">\n pause_circle_outline\n </button>\n </div>\n </div>\n</div>\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { MatDrawer } from '@angular/material/sidenav';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { of, Subscription } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { formatNow, formatTimeStamps } from '../../utils/utils';\nimport {\n dev_environment,\n prod_environment,\n} from '../../../environments/environment';\nimport { ConversationService } from '../conversation.service';\nimport { Observable } from 'rxjs';\nimport { SocketService } from '../socket-service.service';\n\n@Component({\n selector: 'lib-bot-html-editor',\n templateUrl: './bot-html-editor.component.html',\n styleUrls: ['./bot-html-editor.component.css'],\n})\nexport class BotHtmlEditorComponent implements OnInit {\n @Input() editorContent: Observable<string>;\n @Input() isDocInEditMode: any;\n @Input() documentContent: any;\n @Input() conversationId: any;\n @Input() botId: any;\n\n documentName: any = 'doc name';\n\n environment: {\n USERS_API;\n BASE_URL;\n AGENTS_API;\n };\n\n quillConfig = {\n toolbar: [\n [{ header: '1' }, { header: '2' }, { font: [] }],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['bold', 'italic', 'underline'],\n ['link'],\n ['clean'],\n ],\n };\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient) {}\n\n ngOnInit(): void {\n this.environment = prod_environment;\n\n setTimeout(() => {\n if (this.isDocInEditMode) {\n console.log('In Edit mode');\n this.filldataInForm();\n } else {\n console.log('In save mode');\n }\n }, 2500);\n }\n\n filldataInForm() {\n if (this.documentContent) {\n this.documentName = this.documentContent?.name;\n this.editorContent = this.documentContent?.content;\n this.cdr.detectChanges();\n }\n }\n\n saveContent() {\n if (!this.isDocInEditMode) {\n this.saveContent_http().subscribe();\n } else {\n this.saveContent_http().subscribe();\n }\n }\n\n saveContent_http() {\n console.log('API call function');\n\n const url = `${this.environment.AGENTS_API}/ConversationDocuments?conversationId=${this.conversationId}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n });\n\n let data = {\n name: this.documentName,\n content: this.editorContent,\n };\n\n return this.http.post(url, data, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n // alert('Saved Successfully');\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n\n updateContent_http() {\n console.log('API call function');\n\n const url = `${this.environment.AGENTS_API}/ConversationDocuments/rename?conversationId=${this.conversationId}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n });\n\n let data = {\n name: this.documentName,\n content: this.editorContent,\n };\n\n return this.http.put(url, data, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n // alert('Updated Successfully');\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n })\n );\n }\n}\n","<div style=\"padding: 12px\">\n <div style=\"margin-top: 42px\" class=\"form-group\">\n <input [(ngModel)]=\"documentName\" class=\"form-control\" type=\"text\" />\n <button (click)=\"saveContent()\" class=\"save-btn\">Save</button>\n </div>\n\n <quill-editor\n [(ngModel)]=\"editorContent\"\n [modules]=\"quillConfig\"\n ></quill-editor>\n</div>\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { TranslationService } from '../translations/translation.service';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n} from '@angular/core';\nimport { MatDrawer } from '@angular/material/sidenav';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { of, Subject, Subscription } from 'rxjs';\nimport { catchError, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { PlatformTokenRefreshService } from '../../services/platform-token-refresh.service';\nimport { formatNow, formatTimeStamps } from '../../utils/utils';\nimport {\n dev_environment,\n prod_environment,\n} from '../../../environments/environment';\nimport { ConversationService } from '../conversation.service';\nimport { Observable } from 'rxjs';\n\nimport { FormBuilder, Validators } from '@angular/forms';\nimport * as SpeechSDK from 'microsoft-cognitiveservices-speech-sdk';\nimport { BotsService } from '../bot.service';\nimport * as marked from 'marked';\nimport { VoiceAgentService } from '../voice-agent/services/voice-agent.service';\nimport { VoiceAgentModalComponent } from '../voice-agent/components/voice-agent-modal/voice-agent-modal.component';\nimport {\n VOICE_MODAL_CONFIG,\n VOICE_MODAL_CLOSE_CALLBACK,\n VoiceModalConfig,\n} from '../voice-agent/voice-modal-tokens';\n\nexport enum eClassificationType {\n Live = '6040dce57615f0770af14256',\n OnDemand = '6040dce57615f0770af14257',\n Breakout = '6040dce57615f0770af14258',\n}\n\n@Component({\n selector: 'hivegpt-chat-drawer-package',\n templateUrl: './chat-drawer.component.html',\n styleUrls: ['./chat-drawer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChatDrawerComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('chatMain') private chatMain: ElementRef;\n @ViewChild('myInput', { static: false })\n myInput!: ElementRef<HTMLTextAreaElement>; // Reference to the textarea\n @ViewChildren('closeplaygroundbutton')\n closePlaygroundButtons: QueryList<ElementRef>;\n @ViewChild('drawer') drawer!: MatDrawer;\n @ViewChild('sourcesDrawer') sourcesDrawer!: MatDrawer;\n @ViewChild('editorsDrawer') editorsDrawer!: MatDrawer;\n private bodyOverflowClass = 'body-overflow-hidden';\n private destroy$ = new Subject<void>();\n isCollapsedTrue = false;\n @Input() copilotName: string = 'HiveXGPT';\n @Input() firstName!: string;\n @Input() lastName!: string;\n @Input() apiKey!: string;\n @Input() bgBubbleAi!: string;\n @Input() bgBubbleUser!: string;\n @Input() bgGradient!: string[];\n @Input() botName!: string;\n @Input() botSkills!: string;\n @Input() botId!: string;\n @Input() orgId!: string;\n @Input() closeButtonColor!: string;\n @Input() closeButtonbgColor!: string;\n @Input() credentials!: [];\n @Input() dateTimeColor!: string;\n @Input() dateTextColor!: string;\n @Input() eventId!: string;\n @Input() eventUrl!: string;\n @Input() eventToken!: string;\n @Input() workspaceToken!: string;\n @Input() s27Token!: string;\n @Input() eventName!: string;\n @Input() botIcon!: string;\n readonly displayAvatarUrl =\n 'https://www.jotform.com/uploads/mehmetkarakasli/form_files/1564593667676a8e85f23758.86945537_icon.png';\n /** User profile image URL. Falls back to initials (getUserIdInitials()) if not set. */\n @Input() userAvatarUrl?: string;\n @Input() formFieldBgColor!: string;\n @Input() formFieldTextColor!: string;\n @Input() fullView!: boolean;\n @Input() gradientColors!: string[];\n @Input() greeting!: string;\n @Input() messageTextColorAi!: string;\n @Input() messageTextColorUser!: string;\n @Input() rules!: string;\n @Input() sendButtonColor!: string;\n @Input() sendButtonTextColor!: string;\n @Input() showClose!: boolean;\n @Input() thumbsDownMessages!: string[];\n @Input() thumbsUpMessage!: string;\n /** User's selected timezone (e.g. 'America/New_York'); used for timestamps and session card times. When not set, session data or local time is used. */\n @Input() timezone?: string;\n @Input() unknownResponses!: [];\n @Input() useOpenAi!: boolean;\n @Input() userId!: string;\n @Input() isDev!: boolean;\n /** When true, chat auto-scrolls to bottom when new content is added. Default: false (no auto scroll). */\n @Input() autoScrollOnNewMessage: boolean = false;\n /** Optional API base URL (e.g. ngrok tunnel). When set, all chat/voice requests use this instead of dev/prod default. */\n @Input() baseUrl?: string;\n /** Connections list from host (e.g. from store selectConnectionsList). Each item has userId. When set, used for Connect/Request Sent/Disconnect button state. */\n @Input() connectionsList: any[] = [];\n /** Pending sent request user IDs from host (e.g. from store selectPendingConnectionsSentList). When set, used for Request Sent state. */\n @Input() pendingSentRequestUserIds: any[] = [];\n /** Whether to show Connect / Request Sent / Disconnect buttons on attendee cards (e.g. from userSettings?.isConnectionsEnabled). */\n @Input() isConnectionsEnabled: boolean = true;\n /** When true (UN/COP events): session card shows \"Session type\" label and Join/Watch buttons. When false: shows \"Meeting type\" label and single Play button (same as template2). */\n @Input() isUnEvent: boolean = false;\n\n @Input() againButtonColor!: string[];\n @Input() againButtonTextColor!: string[];\n @Output() feedbackEvent = new EventEmitter<string>();\n @Output() onCloseEvent = new EventEmitter<void>();\n @Output() openPage = new EventEmitter<any>();\n @Output() sessionActions = new EventEmitter<any>();\n /** Emitted when user clicks Join/Watch but action is not yet available (e.g. session not started). Host can show toaster with the message. */\n @Output() sessionActionBlocked = new EventEmitter<string>();\n @Output() closeBot = new EventEmitter<any>();\n @Output() connectWithUser = new EventEmitter<any>();\n /** Emitted when user clicks View profile on a speaker card (get_event_speakers). Host should open speaker detail drawer same as /events/:id/speakers. */\n @Output() viewSpeakerProfile = new EventEmitter<{\n speaker: any;\n speakers: any[];\n }>();\n /** Emitted when user clicks View Booth on a sponsor/booth card (get_event_sponsors, get_event_booths). Host should navigate to events/:eventUrl/sponsors/booths/:boothUrl. */\n @Output() viewBooth = new EventEmitter<{\n boothId?: string;\n boothUrl?: string;\n sponsor?: any;\n }>();\n @Output() scheduleMeeting = new EventEmitter<string>();\n @Output() refreshToken = new EventEmitter<any>();\n /** Emitted after a successful `user/tokenRefresh` so the host can dispatch Login / `saveTokenAndLoginUser`. */\n @Output() tokensRefreshed = new EventEmitter<any>();\n @Output() openSupport = new EventEmitter<any>();\n\n autogenKey = 'Autogen_eDJTtEU-NB0RtIpzq1w';\n addToMyAgendaAction = 'add_to_my_agenda';\n myUpcomingSessionAction = 'my_upcoming_session';\n connectOrFollowAction = 'connect_or_follow';\n aiResponse: string = '';\n chatLog: any[] = [];\n decoder = new TextDecoder();\n feedbackDone: boolean = false;\n greetingMsg: string = '';\n hasBackdropValue: boolean = false;\n input: string = '';\n listenerAdded = false;\n loading: boolean = false;\n mode: string = 'over';\n quickPrompts: any[] = [];\n thumbsDownMsgIndex = 0;\n userName: string = '';\n showStartAgain: boolean = false;\n isIOSDevice: boolean = false;\n showFeedBackIconsIndex: number | null = null;\n temperature: number = 1;\n /** Speaker cache by staff id (filled via get-by-staff-ids). */\n speakers: Record<string, any> = {};\n /** Prevent duplicate speaker fetches across messages. */\n private requestedSpeakerIds = new Set<string>();\n environment: {\n USERS_API;\n BASE_URL;\n AGENTS_API;\n };\n pendingRequests: any;\n myConnections: any;\n conversationKey: string;\n conSessionKey: string = '';\n isFetchDataFor: boolean;\n is401: boolean;\n msg: any;\n chat: any;\n isWorkflowOpen: boolean;\n orgWorkflows: any;\n openWorkflowInput: boolean;\n selectedWorkflow: any;\n workflowForm: any;\n currentWorkflowActionProgress: number = 0;\n currentWorkflowAction: string = '';\n executingWorkflow: boolean;\n workflowExecutionDetails: any;\n showWorkflowExecutionDetails: any;\n currentWorkflowExecutionDetails: any;\n\n speechConfig: SpeechSDK.SpeechConfig;\n recognizer: SpeechSDK.SpeechRecognizer;\n recognizedText: string = '';\n authorizationToken: string = '';\n region: string = 'westeurope'; // Set your Azure region here\n isRecording: boolean;\n isVoiceModalOpen: boolean = false;\n private voiceModalOverlayRef: OverlayRef | null = null;\n private voiceTranscriptSubscriptions: Subscription[] = [];\n\n constructor(\n private fb: FormBuilder,\n private botService: BotsService,\n private cdr: ChangeDetectorRef,\n private http: HttpClient,\n private sanitizer: DomSanitizer,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private conversationService: ConversationService, // private platform: Platform\n private translationService: TranslationService,\n private voiceAgentService: VoiceAgentService,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private injector: Injector,\n private platformTokenRefresh: PlatformTokenRefreshService,\n ) {\n this.chatMain = new ElementRef(null);\n\n // if (this.platform.IOS) {\n // this.isIOSDevice = true;\n // }\n }\n getTranslation(key: string) {\n return this.translationService.getTranslation(key);\n }\n\n /** Time shown next to \"Assistant\" when in thinking/loading state. */\n getLoadingTime(): string {\n return formatNow(this.timezone);\n }\n\n /** User initials for avatar fallback (e.g. \"JD\" from firstName + lastName). */\n getUserIdInitials(): string {\n const first = (this.firstName || '').trim();\n const last = (this.lastName || '').trim();\n if (first && last) return (first[0] + last[0]).toUpperCase();\n if (first) return first.slice(0, 2).toUpperCase();\n if (last) return last.slice(0, 2).toUpperCase();\n return 'U';\n }\n\n /** Attendee initials for card when no photo (e.g. \"Vijay Paliwal\" -> \"VP\", \"Jim\" -> \"J\"). */\n getAttendeeInitials(name: string | null | undefined): string {\n if (!name || typeof name !== 'string') return '?';\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length >= 2)\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return '?';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Handle eventId changes to update translation service\n if (changes.eventId && changes.eventId.currentValue) {\n this.translationService.setEventId(changes.eventId.currentValue);\n }\n\n if (changes.s27Token) {\n if (changes.s27Token.currentValue != changes.s27Token.previousValue) {\n this.s27Token = changes.s27Token.currentValue;\n\n console.log('isFetchDataFor: ', this.isFetchDataFor);\n console.log('msg: ', this.msg);\n console.log('chat: ', this.chat);\n if (this.is401) {\n if (this.isFetchDataFor) {\n this.fetchDataFor(this.msg, this.chat);\n } else {\n this.fetchData(this.msg);\n }\n }\n }\n }\n\n if (changes.baseUrl && this.environment) {\n this.applyBaseUrlOverride();\n }\n }\n\n /** When baseUrl input is set, override environment.BASE_URL so all chat/voice services use it (supports ngrok etc.). */\n private applyBaseUrlOverride(): void {\n const defaultEnv = this.isDev ? dev_environment : prod_environment;\n if (this.baseUrl && typeof this.baseUrl === 'string') {\n const url = this.baseUrl.trim().replace(/\\/+$/, '');\n if (url) {\n this.environment = { ...defaultEnv, BASE_URL: url };\n return;\n }\n }\n this.environment = defaultEnv;\n }\n\n domainAuthorityValue: any = 'prod-lite';\n\n ngOnInit(): void {\n // Set the eventId in translation service to get the correct language from localStorage\n if (this.eventId) {\n this.translationService.setEventId(this.eventId);\n }\n\n this.applyBaseUrlOverride();\n\n const domain = window.location.hostname;\n\n // Determine the header value based on the domain\n\n if (domain.includes('pre-app.social27.com')) {\n this.domainAuthorityValue = 'pre-prod-lite';\n } else if (domain.includes('app.social27.com')) {\n this.domainAuthorityValue = 'prod-lite';\n } else if (domain.includes('hivegpt.io')) {\n this.domainAuthorityValue = 'hivegpt';\n }\n\n // this.fetchMyConnections().subscribe();\n // this.fetchPendingRequests().subscribe();\n\n this.changeTemperature(this.temperature);\n this.fetchBotConfig().subscribe(\n (res) => {\n this.cdr.markForCheck();\n\n this.fetchChatHistory().subscribe(\n (response) => {\n this.loading = false;\n this.mapChatHistory(response);\n this.cdr.markForCheck();\n },\n (err) => {\n console.error('Error fetching chat history:', err);\n },\n );\n },\n (err) => {\n console.error('Error fetching chat history:', err);\n },\n );\n // this.fetchAgents();\n // this.fetchEditorContent();\n this.cdr.markForCheck();\n this.botService\n .fetchSpeechAuthorizationToken(\n this.botId,\n this.apiKey,\n this.domainAuthorityValue,\n )\n .subscribe((token) => {\n this.authorizationToken = token;\n this.initializeSpeechRecognizer(token);\n });\n }\n\n /** Native WebSocket used by `/ask-new` chat flow. */\n private askWebSocket: WebSocket | null = null;\n private askWebSocketConnectionKey = '';\n private activeAskMessageId = '';\n\n /** Initial number of session/attendee cards shown before \"Show X more\". */\n readonly SESSION_CARDS_INITIAL = 6;\n readonly ATTENDEE_CARDS_INITIAL = 9;\n readonly SPEAKER_CARDS_INITIAL = 9;\n readonly SPONSOR_CARDS_INITIAL = 9;\n readonly BOOTH_REP_CARDS_INITIAL = 9;\n /** Message id -> true when user expanded \"Show more\" for sessions/attendees. */\n expandedSessionCardIds: Record<string, boolean> = {};\n expandedAttendeeCardIds: Record<string, boolean> = {};\n expandedSpeakerCardIds: Record<string, boolean> = {};\n expandedSponsorCardIds: Record<string, boolean> = {};\n expandedBoothRepCardIds: Record<string, boolean> = {};\n /** key: `${messageId}:${attendeeId}` -> true when description expanded */\n expandedAttendeeDescriptionIds: Record<string, boolean> = {};\n /** key: `${messageId}:${attendeeId}` -> true when video is playing */\n attendeeVideoPlayingIds: Record<string, boolean> = {};\n /** key: `${messageId}:${attendeeId}` -> true when video is muted (default true) */\n attendeeVideoMutedIds: Record<string, boolean> = {};\n\n /** Strip HTML tags to plain text (e.g. for speaker/attendee description from API). */\n stripHtml(html: string): string {\n if (!html || typeof html !== 'string') return '';\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const text = doc.body?.textContent ?? '';\n return text.replace(/\\s+/g, ' ').trim();\n }\n\n getAttendeeDescription(attendee: any): string {\n const raw =\n attendee?.description ?? attendee?.interests ?? attendee?.jobTitle ?? '';\n const str = typeof raw === 'string' ? raw.trim() : String(raw ?? '').trim();\n // If it looks like HTML, strip tags so card shows plain text\n if (str && /<[a-z][\\s\\S]*>/i.test(str)) return this.stripHtml(str);\n return str;\n }\n\n shouldShowAttendeeReadMore(attendee: any): boolean {\n // heuristic: only show toggle for reasonably long text\n return this.getAttendeeDescription(attendee).length > 90;\n }\n\n private getAttendeeDescKey(chat: any, attendee: any): string | null {\n const msgId = chat?._id;\n const attendeeId = attendee?.id ?? attendee?._id ?? attendee?.userId;\n if (!msgId || !attendeeId) return null;\n return `${msgId}:${attendeeId}`;\n }\n\n isAttendeeDescriptionExpanded(chat: any, attendee: any): boolean {\n const key = this.getAttendeeDescKey(chat, attendee);\n if (!key) return false;\n return !!this.expandedAttendeeDescriptionIds[key];\n }\n\n toggleAttendeeDescription(chat: any, attendee: any, ev?: Event): void {\n ev?.stopPropagation?.();\n const key = this.getAttendeeDescKey(chat, attendee);\n if (!key) return;\n const next = !this.expandedAttendeeDescriptionIds[key];\n this.expandedAttendeeDescriptionIds = {\n ...this.expandedAttendeeDescriptionIds,\n [key]: next,\n };\n this.cdr.markForCheck();\n }\n\n getAttendeeVideoUrl(attendee: any): string {\n const url = attendee?.userVideosModel?.url;\n return typeof url === 'string' ? url.trim() : '';\n }\n\n getAttendeeVideoPoster(attendee: any): string {\n const poster = attendee?.userVideosModel?.thumbnail;\n return typeof poster === 'string' ? poster.trim() : '';\n }\n\n private getAttendeeMediaKey(chat: any, attendee: any): string | null {\n const msgId = chat?._id;\n const attendeeId = attendee?.id ?? attendee?._id ?? attendee?.userId;\n if (!msgId || !attendeeId) return null;\n return `${msgId}:${attendeeId}`;\n }\n\n isAttendeeVideoMuted(chat: any, attendee: any): boolean {\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return true;\n // default true (muted) unless explicitly set to false\n return this.attendeeVideoMutedIds[key] !== false;\n }\n\n isAttendeeVideoPlaying(chat: any, attendee: any): boolean {\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return false;\n return !!this.attendeeVideoPlayingIds[key];\n }\n\n toggleAttendeeVideoMute(\n chat: any,\n attendee: any,\n videoEl?: HTMLVideoElement | null,\n ev?: Event,\n ): void {\n ev?.stopPropagation?.();\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return;\n const next = !this.isAttendeeVideoMuted(chat, attendee);\n this.attendeeVideoMutedIds = { ...this.attendeeVideoMutedIds, [key]: next };\n if (videoEl) {\n videoEl.muted = next;\n // Some browsers require volume to be >0 when unmuting\n if (!next && (videoEl.volume == null || videoEl.volume === 0)) {\n videoEl.volume = 1;\n }\n }\n this.cdr.markForCheck();\n }\n\n toggleAttendeeVideoPlay(\n chat: any,\n attendee: any,\n videoEl?: HTMLVideoElement | null,\n ev?: Event,\n ): void {\n ev?.stopPropagation?.();\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return;\n const next = !this.isAttendeeVideoPlaying(chat, attendee);\n this.attendeeVideoPlayingIds = {\n ...this.attendeeVideoPlayingIds,\n [key]: next,\n };\n if (videoEl) {\n try {\n if (next) {\n const p = videoEl.play();\n if (p && typeof (p as any).catch === 'function') {\n (p as any).catch(() => {\n // If play fails, reflect paused state\n this.attendeeVideoPlayingIds = {\n ...this.attendeeVideoPlayingIds,\n [key]: false,\n };\n this.cdr.markForCheck();\n });\n }\n } else {\n videoEl.pause();\n }\n } catch {\n // ignore\n }\n }\n this.cdr.markForCheck();\n }\n\n onAttendeeVideoPlayState(chat: any, attendee: any, isPlaying: boolean): void {\n const key = this.getAttendeeMediaKey(chat, attendee);\n if (!key) return;\n if (this.attendeeVideoPlayingIds[key] === isPlaying) return;\n this.attendeeVideoPlayingIds = {\n ...this.attendeeVideoPlayingIds,\n [key]: isPlaying,\n };\n this.cdr.markForCheck();\n }\n\n /**\n * Format session date/time for display.\n * @param dateTimeRange Session start/end (object with start/end or string with \"Start: ... End: ...\")\n * @param displayTimeZone Optional user-selected timezone (e.g. 'America/New_York'); when set, times are shown in this zone.\n */\n formatSessionWhen(\n dateTimeRange: string | { start?: string; end?: string } | null,\n displayTimeZone?: string,\n ): string {\n const localeOpts = displayTimeZone ? { timeZone: displayTimeZone } : {};\n if (!dateTimeRange) return '';\n if (\n typeof dateTimeRange === 'object' &&\n dateTimeRange?.start &&\n dateTimeRange?.end\n ) {\n try {\n const startDt = new Date(dateTimeRange.start);\n const endDt = new Date(dateTimeRange.end);\n const dateFormatted = startDt.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n ...localeOpts,\n });\n const startTime = startDt.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n ...localeOpts,\n });\n const endTime = endDt.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n ...localeOpts,\n });\n return `${dateFormatted} | ${startTime} - ${endTime}`;\n } catch {\n return '';\n }\n }\n if (typeof dateTimeRange !== 'string') return '';\n const startMatch = dateTimeRange.match(\n /Start:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n const endMatch = dateTimeRange.match(\n /End:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n if (!startMatch || !endMatch) return dateTimeRange;\n try {\n const startStr = startMatch[1];\n const endStr = endMatch[1];\n const startDt = new Date(startStr.replace(' ', 'T') + 'Z');\n const endDt = new Date(endStr.replace(' ', 'T') + 'Z');\n const dateFormatted = startDt.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n ...localeOpts,\n });\n const startTimeShort = startDt.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n ...localeOpts,\n });\n const endTimeShort = endDt.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n ...localeOpts,\n });\n return `${dateFormatted} | ${startTimeShort} - ${endTimeShort}`;\n } catch {\n return dateTimeRange;\n }\n }\n\n /**\n * Get date badge (day + month) for session card from dateTimeRange.\n * Handles dateTimeRange as string (\"Start: 2026-02-20 01:05:00, End: ...\") or object { start, end }.\n * Uses displayTimeZone only when it is a valid IANA identifier; otherwise formats in local time.\n */\n getSessionDateBadge(\n dateTimeRange: string | { start?: string; end?: string } | null,\n displayTimeZone?: string,\n ): { day: string; month: string } {\n if (!dateTimeRange) return { day: '', month: '' };\n try {\n let startDt: Date | null = null;\n if (typeof dateTimeRange === 'object' && dateTimeRange?.start) {\n startDt = new Date(dateTimeRange.start);\n } else if (typeof dateTimeRange === 'string') {\n const startMatch = dateTimeRange.match(\n /Start:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n if (startMatch)\n startDt = new Date(startMatch[1].replace(' ', 'T') + 'Z');\n }\n if (!startDt || isNaN(startDt.getTime())) return { day: '', month: '' };\n const localeOpts = displayTimeZone ? { timeZone: displayTimeZone } : {};\n try {\n const day = startDt.toLocaleDateString('en-US', {\n day: 'numeric',\n ...localeOpts,\n });\n const month = startDt.toLocaleDateString('en-US', {\n month: 'short',\n ...localeOpts,\n });\n return { day, month };\n } catch {\n // displayTimeZone may be non-IANA (e.g. \"(UTC-03:00) Brasilia\"); format without timeZone\n const day = startDt.toLocaleDateString('en-US', { day: 'numeric' });\n const month = startDt.toLocaleDateString('en-US', { month: 'short' });\n return { day, month };\n }\n } catch {\n return { day: '', month: '' };\n }\n }\n\n /**\n * Get time range only (e.g. \"9:00 AM - 10:30 AM\") for session card.\n * Falls back to formatting without timeZone when displayTimeZone is not a valid IANA identifier.\n */\n formatSessionTimeRange(\n dateTimeRange: string | { start?: string; end?: string } | null,\n displayTimeZone?: string,\n ): string {\n if (!dateTimeRange) return '';\n try {\n let startDt: Date | null = null;\n let endDt: Date | null = null;\n if (\n typeof dateTimeRange === 'object' &&\n dateTimeRange?.start &&\n dateTimeRange?.end\n ) {\n startDt = new Date(dateTimeRange.start);\n endDt = new Date(dateTimeRange.end);\n } else if (typeof dateTimeRange === 'string') {\n const startMatch = dateTimeRange.match(\n /Start:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n const endMatch = dateTimeRange.match(\n /End:\\s*(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2})/,\n );\n if (startMatch)\n startDt = new Date(startMatch[1].replace(' ', 'T') + 'Z');\n if (endMatch) endDt = new Date(endMatch[1].replace(' ', 'T') + 'Z');\n }\n if (!startDt || isNaN(startDt.getTime())) return '';\n const localeOpts = displayTimeZone ? { timeZone: displayTimeZone } : {};\n try {\n const startTime = startDt.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n ...localeOpts,\n });\n const endTime =\n endDt && !isNaN(endDt.getTime())\n ? endDt.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n ...localeOpts,\n })\n : '';\n return endTime ? `${startTime} - ${endTime}` : startTime;\n } catch {\n const startTime = startDt.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n const endTime =\n endDt && !isNaN(endDt.getTime())\n ? endDt.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n : '';\n return endTime ? `${startTime} - ${endTime}` : startTime;\n }\n } catch {\n return '';\n }\n }\n\n /**\n * IANA timezone ID -> abbreviation map (matches parent app session-layouts / timezones.enum TimeZones).\n * Used so session cards show SAST, EEST, SAWST, ESAST, etc. instead of GMT+1, GMT+2.\n */\n private static readonly TZ_ABBR_MAP: Record<string, string> = {\n 'Pacific/Kiritimati': 'LINT',\n 'Pacific/Apia': 'SST',\n 'Pacific/Tongatapu': 'TST',\n 'Etc/GMT-13': 'UTC',\n 'Pacific/Chatham': 'CHADT',\n 'Asia/Kamchatka': 'ANAT',\n 'Pacific/Fiji': 'FJT',\n 'Etc/GMT-12': 'U',\n 'Pacific/Auckland': 'NZST',\n 'Pacific/Guadalcanal': 'CPST',\n 'Asia/Sakhalin': 'SAKT',\n 'Pacific/Norfolk': 'NFT',\n 'Asia/Magadan': 'MAGT',\n 'Asia/Srednekolymsk': 'SRET',\n 'Pacific/Bougainville': 'BST',\n 'Australia/Lord_Howe': 'LHST',\n 'Asia/Vladivostok': 'VLAT',\n 'Australia/Hobart': 'AEST',\n 'Pacific/Port_Moresby': 'ChST',\n 'Australia/Sydney': 'AEST',\n 'Australia/Brisbane': 'AWST',\n 'Australia/Darwin': 'ACST',\n 'Australia/Adelaide': 'ACST',\n 'Asia/Yakutsk': 'YAKT',\n 'Asia/Seoul': 'KST',\n 'Asia/Pyongyang': 'KST',\n 'Asia/Tokyo': 'TST',\n 'Asia/Chita': 'YAKT',\n 'Australia/Eucla': 'ACWST',\n 'Asia/Ulaanbaatar': 'FST',\n 'Asia/Taipei': 'ULAT',\n 'Australia/Perth': 'AWST',\n 'Asia/Singapore': 'SNST',\n 'Asia/Irkutsk': 'IRKT',\n 'Asia/Shanghai': 'CST',\n 'Asia/Tomsk': 'MSD',\n 'Asia/Novosibirsk': 'NOVT',\n 'Asia/Krasnoyarsk': 'KRAT',\n 'Asia/Hovd': 'SAST',\n 'Asia/Barnaul': 'MSK',\n 'Asia/Bangkok': 'THA',\n 'Asia/Yangon': 'MYST',\n 'Asia/Omsk': 'OMST',\n 'Asia/Dhaka': 'BST',\n 'Asia/Almaty': 'NCAST',\n 'Asia/Kathmandu': 'NPT',\n 'Asia/Colombo': 'SLT',\n 'Asia/Kolkata': 'IST',\n 'Asia/Calcutta': 'IST',\n 'Asia/Qyzylorda': 'CAST',\n 'Asia/Karachi': 'PKT',\n 'Asia/Yekaterinburg': 'YEKT',\n 'Asia/Tashkent': 'WAST',\n 'Asia/Kabul': 'AFT',\n 'Asia/Yerevan': 'AMT',\n 'Europe/Volgograd': 'VST',\n 'Asia/Tbilisi': 'GET',\n 'Europe/Saratov': 'SLT',\n 'Indian/Mauritius': 'MUT',\n 'Europe/Samara': 'SAMT',\n 'Asia/Baku': 'AZT',\n 'Europe/Astrakhan': 'SAMT',\n 'Asia/Dubai': 'ARBST',\n 'Asia/Tehran': 'IDT',\n 'Africa/Nairobi': 'EAST',\n 'Europe/Moscow': 'MSK',\n 'Europe/Minsk': 'MSK',\n 'Asia/Riyadh': 'AST',\n 'Europe/Istanbul': 'TDT',\n 'Asia/Baghdad': 'AST',\n 'Africa/Windhoek': 'NST',\n 'Africa/Tripoli': 'LST',\n 'Africa/Khartoum': 'EAST',\n 'Europe/Kaliningrad': 'KST',\n 'Asia/Jerusalem': 'JDT',\n 'Europe/Kiev': 'EEDT',\n 'Africa/Johannesburg': 'SAST',\n 'Asia/Hebron': 'EET',\n 'Asia/Damascus': 'SDT',\n 'Europe/Chisinau': 'GDT',\n 'Africa/Cairo': 'EST',\n 'Asia/Beirut': 'MEDT',\n 'Europe/Bucharest': 'GDT',\n 'Asia/Amman': 'JST',\n 'Africa/Lagos': 'ECT',\n 'Europe/Warsaw': 'CEDT',\n 'Africa/Casablanca': 'MDT',\n 'Europe/Paris': 'CEST',\n 'Europe/Budapest': 'CEDT',\n 'Europe/Berlin': 'WEDT',\n 'Africa/Sao_Tome': 'GST',\n 'Atlantic/Reykjavik': 'GST',\n 'Europe/London': 'GDT',\n 'Etc/UTC': 'UTC',\n 'Atlantic/Azores': 'ADT',\n 'Atlantic/Cape_Verde': 'CVST',\n 'Etc/GMT+2': 'MST',\n 'America/Araguaina': 'SEST',\n 'America/Sao_Paulo': 'ESAST',\n 'America/Cayenne': 'SEST',\n 'America/Argentina/Buenos_Aires': 'AST',\n 'America/Nuuk': 'WGT',\n 'America/Montevideo': 'MST',\n 'America/Punta_Arenas': 'CLST',\n 'America/Miquelon': 'PMST',\n 'America/Bahia': 'BST',\n 'America/St_Johns': 'NST',\n 'America/Asuncion': 'PRST',\n 'America/Halifax': 'AST',\n 'America/Caracas': 'VST',\n 'America/Cuiaba': 'CBST',\n 'America/La_Paz': 'SAWST',\n 'America/Santiago': 'PSST',\n 'America/Bogota': 'SPST',\n 'America/Cancun': 'EST',\n 'America/New_York': 'ET',\n 'America/Port-au-Prince': 'EDT',\n 'America/Havana': 'EDT',\n 'America/Indiana/Indianapolis': 'EST',\n 'America/Grand_Turk': 'EST',\n 'America/Guatemala': 'CAST',\n 'America/Chicago': 'CT',\n 'Pacific/Easter': 'EAST',\n 'America/Mexico_City': 'CST',\n 'America/Regina': 'CCST',\n 'America/Phoenix': 'MT',\n 'America/Chihuahua': 'MDT',\n 'America/Denver': 'MT',\n 'America/Whitehorse': 'YST',\n 'America/Tijuana': 'PST',\n 'Etc/GMT+8': 'UTC-08',\n 'America/Los_Angeles': 'PT',\n 'America/Anchorage': 'AK',\n 'Etc/GMT+9': 'UTC-09',\n 'Pacific/Marquesas': 'MST',\n 'America/Adak': 'HST',\n 'Pacific/Honolulu': 'HAST',\n 'Etc/GMT+11': 'UTC-11',\n 'Etc/GMT+12': 'BIT',\n };\n\n /**\n * Windows-style \"(UTC±HH:MM) Place\" -> short name (IST, BRT, etc.) so we show \"IST\" not \"((UTC+05:30) India)\".\n */\n private static readonly WINDOWS_TZ_ABBR_MAP: Record<string, string> = {\n '(UTC-03:00) Brasilia': 'BRT',\n '(UTC-03:00) Buenos Aires': 'ART',\n '(UTC+05:30) India': 'IST',\n '(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi': 'IST',\n '(UTC+00:00) Dublin, Edinburgh, London': 'GMT',\n '(UTC+00:00) Monrovia, Reykjavik': 'GMT',\n '(UTC+01:00) Amsterdam, Berlin, Rome, Stockholm': 'CET',\n '(UTC+01:00) Brussels, Copenhagen, Madrid, Paris': 'CET',\n '(UTC+02:00) Athens, Istanbul, Minsk': 'EET',\n '(UTC+02:00) Cairo': 'EET',\n '(UTC+02:00) Jerusalem': 'IST',\n '(UTC+03:00) Moscow, St. Petersburg': 'MSK',\n '(UTC+03:00) Nairobi': 'EAT',\n '(UTC+04:00) Dubai': 'GST',\n '(UTC+05:00) Islamabad, Karachi': 'PKT',\n '(UTC+05:45) Kathmandu': 'NPT',\n '(UTC+06:00) Dhaka': 'BST',\n '(UTC+06:30) Yangon (Rangoon)': 'MMT',\n '(UTC+07:00) Bangkok, Hanoi, Jakarta': 'ICT',\n '(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi': 'CST',\n '(UTC+08:00) Kuala Lumpur, Singapore': 'SGT',\n '(UTC+09:00) Osaka, Sapporo, Tokyo': 'JST',\n '(UTC+09:30) Adelaide': 'ACST',\n '(UTC+10:00) Brisbane': 'AEST',\n '(UTC+10:00) Canberra, Melbourne, Sydney': 'AEST',\n '(UTC+12:00) Auckland, Wellington': 'NZST',\n '(UTC-05:00) Eastern Time (US & Canada)': 'ET',\n '(UTC-06:00) Central Time (US & Canada)': 'CT',\n '(UTC-07:00) Mountain Time (US & Canada)': 'MT',\n '(UTC-08:00) Pacific Time (US & Canada)': 'PT',\n };\n\n /**\n * Windows-style \"(UTC±HH:MM) Place\" -> IANA timezone.\n * This prevents Intl/DatePipe from falling back to browser local time when a Windows label is used.\n */\n private static readonly WINDOWS_TZ_IANA_MAP: Record<string, string> = {\n '(UTC-03:00) Brasilia': 'America/Sao_Paulo',\n '(UTC-03:00) Buenos Aires': 'America/Argentina/Buenos_Aires',\n '(UTC+05:30) India': 'Asia/Kolkata',\n '(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi': 'Asia/Kolkata',\n '(UTC+00:00) Dublin, Edinburgh, London': 'Europe/London',\n '(UTC+00:00) Monrovia, Reykjavik': 'Etc/UTC',\n '(UTC+01:00) Amsterdam, Berlin, Rome, Stockholm': 'Europe/Berlin',\n '(UTC+01:00) Brussels, Copenhagen, Madrid, Paris': 'Europe/Paris',\n '(UTC+02:00) Athens, Istanbul, Minsk': 'Europe/Athens',\n '(UTC+02:00) Cairo': 'Africa/Cairo',\n '(UTC+02:00) Jerusalem': 'Asia/Jerusalem',\n '(UTC+03:00) Moscow, St. Petersburg': 'Europe/Moscow',\n '(UTC+03:00) Nairobi': 'Africa/Nairobi',\n '(UTC+04:00) Dubai': 'Asia/Dubai',\n '(UTC+05:00) Islamabad, Karachi': 'Asia/Karachi',\n '(UTC+05:45) Kathmandu': 'Asia/Kathmandu',\n '(UTC+06:00) Dhaka': 'Asia/Dhaka',\n '(UTC+06:30) Yangon (Rangoon)': 'Asia/Yangon',\n '(UTC+07:00) Bangkok, Hanoi, Jakarta': 'Asia/Bangkok',\n '(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi': 'Asia/Shanghai',\n '(UTC+08:00) Kuala Lumpur, Singapore': 'Asia/Singapore',\n '(UTC+09:00) Osaka, Sapporo, Tokyo': 'Asia/Tokyo',\n '(UTC+09:30) Adelaide': 'Australia/Adelaide',\n '(UTC+10:00) Brisbane': 'Australia/Brisbane',\n '(UTC+10:00) Canberra, Melbourne, Sydney': 'Australia/Sydney',\n '(UTC+12:00) Auckland, Wellington': 'Pacific/Auckland',\n '(UTC-05:00) Eastern Time (US & Canada)': 'America/New_York',\n '(UTC-06:00) Central Time (US & Canada)': 'America/Chicago',\n '(UTC-07:00) Mountain Time (US & Canada)': 'America/Denver',\n '(UTC-08:00) Pacific Time (US & Canada)': 'America/Los_Angeles',\n };\n\n private normalizeToIanaTimeZone(\n tz: string | undefined,\n sessionIanaTimeZone?: string,\n ): string | undefined {\n const raw = (tz ?? '').trim();\n if (!raw) return sessionIanaTimeZone || undefined;\n\n // If user passes the session's Windows id/name, prefer the session's known IANA zone.\n if (\n sessionIanaTimeZone &&\n raw.toLowerCase() === String(sessionIanaTimeZone).trim().toLowerCase()\n ) {\n return sessionIanaTimeZone;\n }\n\n if (raw.startsWith('(UTC') || raw.startsWith('(utc')) {\n const map = (this.constructor as typeof ChatDrawerComponent)\n .WINDOWS_TZ_IANA_MAP;\n const key = Object.keys(map).find(\n (k) => k.toLowerCase() === raw.toLowerCase(),\n );\n if (key) return map[key];\n }\n\n // Otherwise assume it may already be IANA (e.g. \"America/Sao_Paulo\")\n return raw;\n }\n\n /**\n * Get timezone abbreviation (e.g. IST, BRT, SAST) for display after the time.\n * Uses IANA map and Windows-style map so we show \"BRT\" / \"IST\" instead of \"((UTC-03:00) Brasilia)\".\n * Only consults Windows map when input looks like \"(UTC...)\" so existing IANA/Intl behavior is unchanged.\n */\n getTimezoneAbbreviation(tz: string): string {\n if (!tz || !String(tz).trim()) return '';\n const tzId = String(tz).trim();\n if (tzId.startsWith('(UTC') || tzId.startsWith('(utc')) {\n const winMap = (this.constructor as typeof ChatDrawerComponent)\n .WINDOWS_TZ_ABBR_MAP;\n const winKey = Object.keys(winMap).find(\n (k) => k.toLowerCase() === tzId.toLowerCase(),\n );\n if (winKey) return winMap[winKey];\n }\n const map = (this.constructor as typeof ChatDrawerComponent).TZ_ABBR_MAP;\n let mapped = map[tzId];\n if (!mapped) {\n const keyLower = tzId.toLowerCase();\n const entry = Object.entries(map).find(\n ([k]) => k.toLowerCase() === keyLower,\n );\n if (entry) mapped = entry[1];\n }\n if (mapped) return mapped;\n try {\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone: tzId,\n timeZoneName: 'short',\n });\n const parts = formatter.formatToParts(new Date());\n const tzPart = parts.find((p) => p.type === 'timeZoneName');\n const value = (tzPart?.value ?? '').trim();\n if (value && /^GMT[+-]\\d/.test(value)) return '';\n return value;\n } catch {\n return '';\n }\n }\n\n getStatusTextFromSessionRoles(sessionRoles: any): string {\n if (!Array.isArray(sessionRoles) || sessionRoles.length === 0) {\n return this.getTranslation('') || '';\n }\n const first = sessionRoles[0];\n if (typeof first === 'string') {\n return String(first)\n .replace(/^\\s*-\\s*/, '')\n .trim();\n }\n if (first && typeof first === 'object' && (first as any).description) {\n return String((first as any).description).trim();\n }\n return this.getTranslation('') || '';\n }\n\n mapSessionsToCardData(sessions: any[]): any[] {\n if (!Array.isArray(sessions)) return [];\n const userTimezone =\n this.timezone && String(this.timezone).trim()\n ? String(this.timezone).trim()\n : undefined;\n return sessions.map((raw: any) => {\n // get_my_agenda returns wrapper { id, schedule, isSession }; normalize to inner schedule object\n const s = raw && raw.schedule ? raw.schedule : raw;\n const sessionTzObj =\n s && typeof s === 'object' ? (s as any).timeZone : null;\n const sessionIanaTimeZone =\n sessionTzObj && typeof sessionTzObj === 'object'\n ? String(sessionTzObj.subTimeZone ?? '').trim()\n : '';\n // Support both dateTimeRange (string) and actualDateTimeRange (object with start/end)\n const whenRaw = s.dateTimeRange ?? s.actualDateTimeRange ?? '';\n // Prefer user's selected timezone; otherwise use session's IANA zone (subTimeZone) for correct date/day.\n const formattingTimeZone = this.normalizeToIanaTimeZone(\n userTimezone,\n sessionIanaTimeZone,\n );\n const whenFormatted = this.formatSessionWhen(\n whenRaw,\n formattingTimeZone || undefined,\n );\n // Only set statusText when session has join/watch roles (so we don't show \"You can join this meeting\" when there are no buttons)\n const hasJoinWatchRole =\n Array.isArray(s.sessionRoles) &&\n s.sessionRoles.some((r: any) => {\n const name =\n r && typeof r === 'object' && r.sessionRoleName\n ? String(r.sessionRoleName).trim().toLowerCase()\n : String(r ?? '')\n .trim()\n .toLowerCase();\n return name === 'join' || name === 'watch';\n });\n const statusText = hasJoinWatchRole\n ? this.getStatusTextFromSessionRoles(s.sessionRoles)\n : '';\n const sessionTimeZoneLabel =\n sessionTzObj != null\n ? typeof sessionTzObj === 'object'\n ? String(\n sessionTzObj.name ??\n sessionTzObj.id ??\n sessionTzObj.subTimeZone ??\n '',\n ).trim()\n : String(sessionTzObj).trim()\n : '';\n // Use an IANA timezone for formatting; use a separate label for UI display.\n const displayTimeZoneForFormat = formattingTimeZone;\n const displayTimeZoneLabel = (\n userTimezone ||\n sessionTimeZoneLabel ||\n ''\n ).trim();\n const tzAbbr = displayTimeZoneForFormat\n ? this.getTimezoneAbbreviation(displayTimeZoneForFormat)\n : '';\n const whenWithTz =\n whenFormatted || (typeof whenRaw === 'object' ? '' : String(whenRaw));\n const whenDisplay = tzAbbr\n ? `${whenWithTz} (${tzAbbr})`.trim()\n : whenWithTz;\n const dateBadge = this.getSessionDateBadge(\n whenRaw,\n displayTimeZoneForFormat || undefined,\n );\n let timeRange = this.formatSessionTimeRange(\n whenRaw,\n displayTimeZoneForFormat || undefined,\n );\n const description = String(s.description ?? s.abstract ?? '').trim();\n const sessionTypeRaw =\n s.sessionType != null\n ? typeof s.sessionType === 'object'\n ? (s.sessionType.name ?? s.sessionType.title ?? '')\n : s.sessionType\n : '';\n const meetingType = String(\n sessionTypeRaw ?? s.type ?? s.meetingType ?? '',\n ).trim();\n const sessionTypeLabel = this.isUnEvent\n ? this.getTranslation('Meeting type') || 'Meeting type'\n : this.getTranslation('Session type') || 'Session type';\n // Same logic as before design update: prefer tz abbreviation (e.g. EST), else show display timezone string (e.g. \"(UTC-03:00) Brasilia)\")\n const timeZoneDisplay = tzAbbr || displayTimeZoneLabel || '';\n // When API returns \"Start: N/A, End: N/A, TimeZone: ...\" (string), show at least timezone\n if (!timeRange && (displayTimeZoneForFormat || displayTimeZoneLabel)) {\n timeRange = this.getTranslation('Not specified') || 'Not specified';\n }\n // Time range with timezone in parentheses when available (same as old whenDisplay format)\n const timeRangeWithTz = timeZoneDisplay\n ? `${timeRange} (${timeZoneDisplay})`.trim()\n : timeRange;\n return {\n title: String(s.title ?? '').trim(),\n organizer: String(s.organizer ?? '').trim(),\n room: String(s.roomName ?? '').trim(),\n when: whenDisplay,\n timeRange,\n timeRangeWithTz: timeRange ? timeRangeWithTz : timeZoneDisplay || '',\n dateDay: dateBadge.day,\n dateMonth: dateBadge.month,\n description,\n timeZone: displayTimeZoneForFormat || displayTimeZoneLabel,\n timeZoneDisplay,\n meetingType,\n sessionTypeLabel,\n statusText,\n session: s,\n };\n });\n }\n\n getSessionIanaTimeZone(session: any): string {\n const s = session && session.schedule ? session.schedule : session;\n const tzObj = s && typeof s === 'object' ? (s as any).timeZone : null;\n const sessionIana =\n tzObj && typeof tzObj === 'object'\n ? String(tzObj.subTimeZone ?? '').trim()\n : '';\n const userTz =\n this.timezone && String(this.timezone).trim()\n ? String(this.timezone).trim()\n : undefined;\n return this.normalizeToIanaTimeZone(userTz, sessionIana) || 'UTC';\n }\n\n private collectSpeakerIdsFromSessionCards(sessionCards: any[]): string[] {\n if (!Array.isArray(sessionCards)) return [];\n const ids: string[] = [];\n for (const card of sessionCards) {\n const raw = card?.session?.speakers;\n if (Array.isArray(raw)) {\n for (const id of raw) {\n const sid = String(id ?? '').trim();\n if (sid) ids.push(sid);\n }\n }\n }\n return Array.from(new Set(ids));\n }\n\n private attachSpeakersToSessionCards(sessionCards: any[]): void {\n if (!Array.isArray(sessionCards)) return;\n for (const card of sessionCards) {\n const speakerIds: string[] = Array.isArray(card?.session?.speakers)\n ? card.session.speakers\n .map((x: any) => String(x ?? '').trim())\n .filter(Boolean)\n : [];\n const speakersList = speakerIds\n .map((id) => this.speakers[id])\n .filter(Boolean);\n card.speakersList = speakersList;\n if (card?.session && typeof card.session === 'object') {\n card.session.speakersList = speakersList;\n }\n }\n }\n\n private ensureSpeakersForSessionCards(sessionCards: any[]): void {\n const ids = this.collectSpeakerIdsFromSessionCards(sessionCards);\n if (ids.length === 0) return;\n\n const missing = ids.filter(\n (id) => !this.speakers[id] && !this.requestedSpeakerIds.has(id),\n );\n if (missing.length === 0) {\n this.attachSpeakersToSessionCards(sessionCards);\n return;\n }\n missing.forEach((id) => this.requestedSpeakerIds.add(id));\n this.getSpeakersByStaffIds(missing).subscribe({\n next: () => {\n this.attachSpeakersToSessionCards(sessionCards);\n this.cdr.markForCheck();\n },\n error: () => {\n // Best effort: still attach what we have cached\n this.attachSpeakersToSessionCards(sessionCards);\n this.cdr.markForCheck();\n },\n });\n }\n\n getSpeakerPhotoUrl(speaker: any): string | null {\n if (!speaker) return null;\n const candidates = [\n speaker.photo,\n speaker.photoPath,\n speaker.avatarUrl,\n speaker.profileImageUrl,\n speaker.profileImage,\n speaker.profilePicture,\n speaker.imageUrl,\n speaker.image,\n ];\n const url = candidates.find((v) => v != null && String(v).trim() !== '');\n return url ? String(url).trim() : null;\n }\n\n hasSessionCardSpeakers(sessionCard: any): boolean {\n const list =\n sessionCard?.speakersList || sessionCard?.session?.speakersList;\n if (Array.isArray(list) && list.length > 0) return true;\n const ids = sessionCard?.session?.speakers;\n return Array.isArray(ids) && ids.length > 0;\n }\n\n getSpeakerDisplayName(speaker: any): string {\n if (!speaker) return '';\n if (speaker.name != null && String(speaker.name).trim() !== '')\n return String(speaker.name).trim();\n const first =\n speaker.firstName != null ? String(speaker.firstName).trim() : '';\n const last =\n speaker.lastName != null ? String(speaker.lastName).trim() : '';\n return `${first} ${last}`.trim();\n }\n\n getSpeakerInitials(speaker: any): string {\n const name = this.getSpeakerDisplayName(speaker);\n if (name) return this.getAttendeeInitials(name);\n const id = speaker?.id != null ? String(speaker.id) : '';\n return id ? id.slice(0, 2).toUpperCase() : '?';\n }\n\n mapAttendeesToCardData(attendees: any[]): any[] {\n if (!Array.isArray(attendees)) return [];\n return attendees.map((a: any) => ({\n name: String(a.name ?? '').trim(),\n company:\n a.company != null && String(a.company).trim() !== ''\n ? String(a.company).trim()\n : null,\n jobTitle:\n a.jobTitle != null && String(a.jobTitle).trim() !== ''\n ? String(a.jobTitle).trim()\n : null,\n photo:\n a.photo != null && String(a.photo).trim() !== ''\n ? String(a.photo).trim()\n : null,\n id: a.id ?? a.userId ?? a._id ?? a.attendeeId ?? undefined,\n interests:\n a.interests != null && String(a.interests).trim() !== ''\n ? String(a.interests).trim()\n : null,\n description:\n a.description != null && String(a.description).trim() !== ''\n ? String(a.description).trim()\n : null,\n userVideosModel: a.userVideosModel\n ? {\n url:\n a.userVideosModel?.url != null &&\n String(a.userVideosModel.url).trim() !== ''\n ? String(a.userVideosModel.url).trim()\n : null,\n thumbnail:\n a.userVideosModel?.thumbnail != null &&\n String(a.userVideosModel.thumbnail).trim() !== ''\n ? String(a.userVideosModel.thumbnail).trim()\n : null,\n }\n : null,\n }));\n }\n\n mapSpeakersToCardData(speakers: any[]): any[] {\n if (!Array.isArray(speakers)) return [];\n return speakers.map((s: any) => {\n const rawDesc =\n s.description != null && String(s.description).trim() !== ''\n ? String(s.description).trim()\n : null;\n const description = rawDesc\n ? /<[a-z][\\s\\S]*>/i.test(rawDesc)\n ? this.stripHtml(rawDesc)\n : rawDesc\n : null;\n const rawTitle = s.title ?? s.jobTitle;\n const jobTitle =\n rawTitle != null && String(rawTitle).trim() !== ''\n ? String(rawTitle).trim()\n : null;\n return {\n name: this.getSpeakerDisplayName(s),\n company:\n s.company != null && String(s.company).trim() !== ''\n ? String(s.company).trim()\n : null,\n jobTitle,\n photo: this.getSpeakerPhotoUrl(s),\n id: s.id ?? s.userId ?? s._id ?? s.speakerId ?? undefined,\n interests:\n s.interests != null && String(s.interests).trim() !== ''\n ? String(s.interests).trim()\n : null,\n description,\n userVideosModel: s.userVideosModel\n ? {\n url:\n s.userVideosModel?.url != null &&\n String(s.userVideosModel.url).trim() !== ''\n ? String(s.userVideosModel.url).trim()\n : null,\n thumbnail:\n s.userVideosModel?.thumbnail != null &&\n String(s.userVideosModel.thumbnail).trim() !== ''\n ? String(s.userVideosModel.thumbnail).trim()\n : null,\n }\n : null,\n };\n });\n }\n\n mapSponsorsToCardData(sponsors: any[]): any[] {\n if (!Array.isArray(sponsors)) return [];\n return sponsors.map((s: any) => {\n const rawDesc =\n s.boothDescription != null && String(s.boothDescription).trim() !== ''\n ? String(s.boothDescription).trim()\n : null;\n const description = rawDesc\n ? /<[a-z][\\s\\S]*>/i.test(rawDesc)\n ? this.stripHtml(rawDesc)\n : rawDesc\n : null;\n const urlSlug =\n s.url ??\n s.boothUrl ??\n (s.boothID != null ? String(s.boothID) : null) ??\n (s.boothId != null ? String(s.boothId) : null);\n const logoUrl =\n s.logoUrl != null && String(s.logoUrl).trim() !== ''\n ? String(s.logoUrl).trim()\n : null;\n return {\n name: s.name != null ? String(s.name).trim() : '',\n website:\n s.website != null && String(s.website).trim() !== ''\n ? String(s.website).trim()\n : null,\n category: s.category != null ? String(s.category).trim() : null,\n boothID: s.boothID ?? s.boothId ?? null,\n boothTitle: s.boothTitle != null ? String(s.boothTitle).trim() : '',\n description: description ?? null,\n /** Booth URL slug for routing to detail page (e.g. events/:eventUrl/sponsors/booths/:url). */\n url: urlSlug != null ? String(urlSlug).trim() : null,\n logoUrl,\n };\n });\n }\n\n /**\n * Map get_event_booths results into the same shape used by sponsor cards.\n */\n mapBoothsToCardData(booths: any[]): any[] {\n if (!Array.isArray(booths)) return [];\n return booths.map((b: any) => {\n const rawDesc =\n b.description != null && String(b.description).trim() !== ''\n ? String(b.description).trim()\n : null;\n const description = rawDesc\n ? /<[a-z][\\s\\S]*>/i.test(rawDesc)\n ? this.stripHtml(rawDesc)\n : rawDesc\n : null;\n const urlSlug =\n b.url ??\n b.boothUrl ??\n (b.boothId != null ? String(b.boothId) : null) ??\n (b.boothID != null ? String(b.boothID) : null);\n const logoUrl =\n b.logoUrl != null && String(b.logoUrl).trim() !== ''\n ? String(b.logoUrl).trim()\n : null;\n return {\n name: b.company != null ? String(b.company).trim() : '',\n website:\n b.website != null && String(b.website).trim() !== ''\n ? String(b.website).trim()\n : null,\n category: null,\n boothID: b.boothId ?? b.boothID ?? null,\n boothTitle: b.boothTitle != null ? String(b.boothTitle).trim() : '',\n description: description ?? null,\n /** Booth URL slug for routing to detail page (e.g. events/:eventUrl/sponsors/booths/:url). */\n url: urlSlug != null ? String(urlSlug).trim() : null,\n logoUrl,\n };\n });\n }\n\n /**\n * Map get_booth_representatives results into the same shape as attendee cards (for reuse of attendee design).\n */\n mapBoothRepsToCardData(representatives: any[]): any[] {\n if (!Array.isArray(representatives)) return [];\n return representatives.map((r: any) => {\n const first = r.firstName != null ? String(r.firstName).trim() : '';\n const last = r.lastName != null ? String(r.lastName).trim() : '';\n const name = [first, last].filter(Boolean).join(' ') || '';\n const userId =\n r.userId != null && String(r.userId).trim() !== ''\n ? String(r.userId).trim()\n : undefined;\n return {\n name,\n company:\n r.company != null && String(r.company).trim() !== ''\n ? String(r.company).trim()\n : null,\n jobTitle:\n r.jobTitle != null && String(r.jobTitle).trim() !== ''\n ? String(r.jobTitle).trim()\n : null,\n photo:\n r.photoPath != null && String(r.photoPath).trim() !== ''\n ? String(r.photoPath).trim()\n : null,\n id: userId,\n interests: null,\n description:\n r.description != null && String(r.description).trim() !== ''\n ? String(r.description).trim()\n : null,\n userVideosModel: null,\n };\n });\n }\n\n /**\n * Parse get_event_sessions_v2 plain-text content into session objects for cards.\n * Format: \"Found N sessions:\\n1. <title>\\n - Time: Start: ..., End: ..., TimeZone: ...\\n - Room: ...\\n - Type: ...\\n2. ...\"\n */\n parseSessionContentV2(content: string): any[] {\n if (!content || typeof content !== 'string') return [];\n const sessions: any[] = [];\n // Split into blocks by \"1. \", \"2. \", etc. (number + dot + space at line start)\n const blockRegex = /\\n\\d+\\.\\s+/;\n const parts = content.split(blockRegex);\n // First part may be \"Found N sessions:\" or similar; skip if it doesn't look like a session title\n for (let i = 0; i < parts.length; i++) {\n const block = parts[i].trim();\n if (!block) continue;\n const lines = block\n .split(/\\n/)\n .map((l) => l.trim())\n .filter(Boolean);\n const title = lines[0] || '';\n if (!title || /^Found\\s+\\d+\\s+sessions/i.test(title)) continue;\n let dateTimeRange = '';\n let roomName = '';\n let sessionType = '';\n let timeZone = '';\n for (let j = 1; j < lines.length; j++) {\n const line = lines[j];\n const timeMatch = line.match(/Time:\\s*(.+)/i);\n if (timeMatch) {\n dateTimeRange = timeMatch[1].trim();\n const tzMatch = dateTimeRange.match(/TimeZone:\\s*([^,\\n]+)/i);\n if (tzMatch) timeZone = tzMatch[1].trim();\n }\n const roomMatch = line.match(/Room:\\s*(.+)/i);\n if (roomMatch) {\n roomName = roomMatch[1].trim();\n }\n const typeMatch = line.match(/Type:\\s*(.+)/i);\n if (typeMatch) {\n sessionType = typeMatch[1].trim();\n }\n const tzLineMatch = line.match(/TimeZone:\\s*(.+)/i);\n if (tzLineMatch && !timeZone) timeZone = tzLineMatch[1].trim();\n }\n sessions.push({\n title,\n roomName: roomName || undefined,\n dateTimeRange: dateTimeRange || undefined,\n sessionType: sessionType || undefined,\n timeZone: timeZone || undefined,\n sessionRoles: [],\n });\n }\n return sessions;\n }\n\n getVisibleSessionCards(chat: any): any[] {\n const list = chat?.sessionCards ?? [];\n const total = list.length;\n const expanded = this.expandedSessionCardIds[chat?._id];\n const remaining = total - this.SESSION_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.SESSION_CARDS_INITIAL);\n }\n return list;\n }\n\n getVisibleAttendeeCards(chat: any): any[] {\n const list = chat?.attendeeCards ?? [];\n const total = list.length;\n const expanded = this.expandedAttendeeCardIds[chat?._id];\n const remaining = total - this.ATTENDEE_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.ATTENDEE_CARDS_INITIAL);\n }\n return list;\n }\n\n getVisibleSpeakerCards(chat: any): any[] {\n const list = chat?.speakerCards ?? [];\n const total = list.length;\n const expanded = this.expandedSpeakerCardIds[chat?._id];\n const remaining = total - this.SPEAKER_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.SPEAKER_CARDS_INITIAL);\n }\n return list;\n }\n\n getVisibleSponsorCards(chat: any): any[] {\n const list = chat?.sponsorCards ?? [];\n const total = list.length;\n const expanded = this.expandedSponsorCardIds[chat?._id];\n const remaining = total - this.SPONSOR_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.SPONSOR_CARDS_INITIAL);\n }\n return list;\n }\n\n getVisibleBoothRepCards(chat: any): any[] {\n const list = chat?.boothRepCards ?? [];\n const total = list.length;\n const expanded = this.expandedBoothRepCardIds[chat?._id];\n const remaining = total - this.BOOTH_REP_CARDS_INITIAL;\n if (remaining > 4 && !expanded) {\n return list.slice(0, this.BOOTH_REP_CARDS_INITIAL);\n }\n return list;\n }\n\n expandSessionCards(chat: any): void {\n if (chat?._id) {\n this.expandedSessionCardIds = {\n ...this.expandedSessionCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n expandAttendeeCards(chat: any): void {\n if (chat?._id) {\n this.expandedAttendeeCardIds = {\n ...this.expandedAttendeeCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n expandSpeakerCards(chat: any): void {\n if (chat?._id) {\n this.expandedSpeakerCardIds = {\n ...this.expandedSpeakerCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n expandSponsorCards(chat: any): void {\n if (chat?._id) {\n this.expandedSponsorCardIds = {\n ...this.expandedSponsorCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n expandBoothRepCards(chat: any): void {\n if (chat?._id) {\n this.expandedBoothRepCardIds = {\n ...this.expandedBoothRepCardIds,\n [chat._id]: true,\n };\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Label for session type on cards: \"Session type\" when isUnEvent, else \"Meeting type\".\n */\n getSessionTypeLabel(): string {\n return this.isUnEvent\n ? this.getTranslation('Meeting type') || 'Meeting type'\n : this.getTranslation('Session type') || 'Session type';\n }\n\n /**\n * Get Join/Watch role buttons from session.sessionRoles for session cards.\n * When isUnEvent is false, returns single \"Watch\" button (same as template2). When true, returns Join/Watch from sessionRoles.\n */\n getSessionRoleButtons(sessionCard: any): { action: string; label: string }[] {\n if (this.isUnEvent === false && sessionCard?.session) {\n return [\n {\n action: 'join',\n label: this.getTranslation('Watch') || 'Watch',\n },\n ];\n }\n const raw = sessionCard?.session?.sessionRoles;\n if (!Array.isArray(raw) || raw.length === 0) return [];\n const roles: { action: string; label: string }[] = [];\n for (const r of raw) {\n const name =\n typeof r === 'object' && r != null && r.sessionRoleName\n ? String(r.sessionRoleName).trim().toLowerCase()\n : String(r).trim().toLowerCase();\n if (name === 'join' || name === 'watch') {\n const label =\n name === 'join'\n ? this.getTranslation('Join') || 'Join'\n : this.getTranslation('Watch') || 'Watch';\n roles.push({ action: name, label });\n }\n }\n return roles;\n }\n\n /**\n * Check if session is on-demand (classificationId === eClassificationType.OnDemand).\n * When true, Join/Watch are always actionable and card uses OnDemand design.\n */\n isSessionOndemand(sessionCard: any): boolean {\n const id =\n sessionCard?.session?.classificationId ?? sessionCard?.classificationId;\n if (id == null || id === '') return false;\n return String(id) === eClassificationType.OnDemand;\n }\n\n /**\n * Whether Join/Watch action is possible (same logic as app template8).\n * Action is allowed when: on-demand session OR isButtonActivated (session has started).\n */\n canPerformSessionAction(sessionCard: any): boolean {\n if (!sessionCard?.session) return false;\n const s = sessionCard.session;\n if (this.isSessionOndemand(sessionCard)) return true;\n return !!s.isButtonActivated;\n }\n\n /**\n * Same logic as app template8: delay in minutes (scheduled start - actual start).\n * Returns undefined if either date missing; > 0 when meeting is delayed.\n */\n getMeetingDelayMinutes(sessionCard: any): number | undefined {\n const s = sessionCard?.session;\n if (!s) return undefined;\n const startDate = s.dateTimeRange?.start;\n const actualStart = s.actualDateTimeRange?.start;\n if (!startDate || !actualStart) return undefined;\n try {\n const diffMs =\n new Date(startDate).getTime() - new Date(actualStart).getTime();\n return Math.floor(diffMs / (1000 * 60));\n } catch {\n return undefined;\n }\n }\n\n /** True when meeting is delayed (same condition as template8: delay minutes > 0, not on-demand, button not activated). */\n isMeetingDelayed(sessionCard: any): boolean {\n const delay = this.getMeetingDelayMinutes(sessionCard);\n if (delay == null || delay <= 0) return false;\n if (this.isSessionOndemand(sessionCard)) return false;\n if (sessionCard?.session?.isButtonActivated) return false;\n return true;\n }\n\n onSessionCardAction(\n sessionCard: any,\n role: { action: string; label: string },\n ): void {\n if (!sessionCard?.session) return;\n if (this.isUnEvent === false) {\n this.sessionActions.emit({\n type: 'session',\n action: role.action,\n session: sessionCard.session,\n sessionCard,\n });\n this.closeChatDrawer();\n return;\n }\n if (!this.canPerformSessionAction(sessionCard)) {\n const message =\n this.getTranslation('You can join/watch at the starting time') ||\n 'You can join/watch at the starting time';\n this.sessionActionBlocked.emit(message);\n return;\n }\n this.sessionActions.emit({\n type: 'session',\n action: role.action,\n session: sessionCard.session,\n sessionCard,\n });\n this.closeChatDrawer();\n }\n\n private closeChatDrawer(): void {\n this.isDrawerOpen = false;\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n try {\n this.drawer?.close();\n this.sourcesDrawer?.close();\n this.editorsDrawer?.close();\n } catch {}\n this.closeBot.emit();\n this.cdr.markForCheck();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.voiceTranscriptSubscriptions.forEach((sub) => sub.unsubscribe());\n this.disconnectAskWebSocket();\n }\n changeTemperature(newTemperature: number) {\n if (this.loading) return;\n this.temperature = newTemperature;\n const wrapper = document.querySelector('.hivegpt-chat-bot-wrapper');\n // Remove existing theme classes from body\n wrapper?.classList.remove('creative', 'balanced', 'precise');\n\n switch (newTemperature) {\n case 0:\n wrapper?.classList.add('creative');\n break;\n case 1:\n wrapper?.classList.add('balanced');\n break;\n case 2:\n wrapper?.classList.add('precise');\n break;\n default:\n break;\n }\n }\n\n onStartAgain() {\n if (this.loading) return;\n this.showStartAgain = false;\n this.chatLog = [];\n this.chatLog.push({\n type: 'ai',\n message: this.greetingMsg,\n\n time: formatNow(this.timezone),\n });\n this.archiveMessages().subscribe();\n }\n\n archiveMessages() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n const url = `${this.environment.BASE_URL}/bot/clear-history/${this.botId}/${this.userId}`;\n return this.http.post(url, {}, { headers }).pipe(\n switchMap((res: any) => {\n return of(res);\n }),\n catchError((error) => {\n return of(null);\n }),\n );\n }\n\n triggerSupport() {\n this.openSupport.emit();\n }\n fetchBotConfig() {\n this.loading = true;\n const headers = new HttpHeaders({\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n const url = `${this.environment.BASE_URL}/bots?bot_id=${this.botId}`;\n return this.http.get(url, { headers }).pipe(\n switchMap((res: any) => {\n this.botName = this.getTranslation(res.Name);\n this.botIcon = res.Icon;\n this.botSkills = res?.Skills;\n this.greetingMsg = res.Greeting\n ? (this.processMessageForDisplay(res.Greeting) as any)\n : '';\n\n this.thumbsDownMessages = res?.NegativeResponses?.length\n ? res.NegativeResponses\n : [\n this.getTranslation(\n `We are sorry we've not been able to answer your question`,\n ),\n ];\n this.quickPrompts = res.QuickPrompts;\n this.cdr.markForCheck();\n this.loading = false;\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n this.loading = false;\n return of(null);\n }),\n );\n }\n\n fetchChatHistory(): Observable<any> {\n this.loading = true;\n\n this.conversationKey = this.conversationService.getKey(\n this.botId,\n false,\n this.eventId,\n );\n this.conSessionKey = this.conversationService.getSessionKey(\n this.botId,\n false,\n this.eventId,\n );\n const url = `${this.environment.BASE_URL}/conversations/${this.conversationKey}?session_id=${this.conSessionKey}`;\n const headers = new HttpHeaders({\n accept: 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n });\n\n return this.http\n .get(url, { headers })\n .pipe(catchError(this.handleError<any>('fetchConversation')));\n }\n\n private handleError<T>(operation = 'operation', result?: T) {\n return (error: any): Observable<T> => {\n console.error(`${operation} failed: ${error.message}`);\n return of(result as T);\n };\n }\n // fetchChatHistory() {\n // this.loading = true;\n // const headers = new HttpHeaders({\n // 'Content-Type': 'application/json',\n // 'x-api-key': this.apiKey,\n // });\n // return this.http\n // .get(`${this.environment.BASE_URL}/conversations/${this.conversationKey}`, { headers })\n // .pipe(\n // switchMap((res: any) => {\n // this.loading = false;\n // return of(res);\n // }),\n // catchError((error: any) => {\n // console.error('Error fetching chat history: ', error);\n // this.loading = false;\n // return of(null);\n // })\n // );\n // }\n\n /** Push a standard AI message from history (sources, graphs, etc.). Used when not converting to session_cards. */\n private pushAiMessageFromHistory(chat: any): void {\n const sourcesList = chat.WebLinks || [];\n const displayedSources = (chat.WebLinks || []).slice(0, 3);\n const remainingSources = (chat.WebLinks || []).slice(3);\n this.chatLog.push({\n type: 'ai',\n message: this.processMessageForDisplay(chat.Text),\n executionGraphs: chat.ExecutionGraphs,\n graphs: chat.Graphs,\n searchTerms: chat.SearchTerms,\n sourcesList: sourcesList,\n displayedSources: displayedSources,\n remainingSources: remainingSources,\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n copied: false,\n isCollapsedTrue: false,\n _id: chat._id,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n }\n\n mapChatHistory(chats: any) {\n this.chatLog.push({\n type: 'ai',\n message: this.greetingMsg,\n time: formatNow(this.timezone),\n });\n if (chats && chats?.Messages?.length) {\n chats?.Messages.forEach((chat: any) => {\n if (chat.Type == 'user') {\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(chat.Text),\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n copied: false,\n isCollapsedTrue: false,\n WorkflowExecutionId: chat.WorkflowExecutionId,\n _id: chat._id,\n });\n }\n if (chat.Type == 'ai') {\n // If this AI message came from session tools, show session cards instead of plain text\n const toolName = chat.toolresults?.tool_name;\n const isSessionTool =\n toolName === 'get_event_sessions' ||\n toolName === 'get_event_sessions_v2' ||\n toolName === 'get_sessions_by_interest' ||\n toolName === 'get_sessions_by_track' ||\n toolName === 'get_speaker_sessions' ||\n toolName === 'get_upcoming_sessions' ||\n toolName === 'get_my_agenda';\n if (\n isSessionTool &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n let sessions: any[] = [];\n try {\n const parsed = JSON.parse(contentStr);\n sessions = parsed?.sessions ?? [];\n } catch (e) {\n sessions = this.parseSessionContentV2(contentStr);\n }\n const mapped = this.mapSessionsToCardData(sessions);\n this.ensureSpeakersForSessionCards(mapped);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'session_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n sessionCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_event_attendees' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_event_attendees, show attendee cards on initial history load\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const attendees = parsed?.attendees ?? [];\n const mapped = this.mapAttendeesToCardData(attendees);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'attendee_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n attendeeCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_event_speakers' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_event_speakers, show speaker cards on initial history load\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const speakers = parsed?.speakers ?? parsed?.speaker ?? [];\n const mapped = this.mapSpeakersToCardData(speakers);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'speaker_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n speakerCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_event_sponsors' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_event_sponsors, show sponsor cards on initial history load\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const sponsors = parsed?.sponsors ?? [];\n const mapped = this.mapSponsorsToCardData(sponsors);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'sponsor_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n sponsorCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_event_booths' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_event_booths, show booth cards using sponsor card design\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const booths = parsed?.booths ?? [];\n const mapped = this.mapBoothsToCardData(booths);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'sponsor_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n sponsorCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else if (\n toolName === 'get_booth_representatives' &&\n chat.toolresults?.tool_result?.messages?.[0]?.content\n ) {\n // If this AI message came from get_booth_representatives, show booth rep cards (attendee design)\n const contentStr = chat.toolresults.tool_result.messages[0].content;\n try {\n const parsed = JSON.parse(contentStr);\n const representatives = parsed?.representatives ?? [];\n const mapped = this.mapBoothRepsToCardData(representatives);\n if (mapped.length > 0) {\n this.chatLog.push({\n _id: chat._id,\n type: 'booth_rep_cards',\n message: chat.Text\n ? this.processMessageForDisplay(chat.Text)\n : '',\n time: formatTimeStamps(this.timezone, chat.InsertTimestamp),\n boothRepCards: mapped,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n } catch (e) {\n this.pushAiMessageFromHistory(chat);\n }\n } else {\n this.pushAiMessageFromHistory(chat);\n }\n }\n });\n this.showStartAgain = true;\n }\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n processMessage(message: string): SafeHtml {\n if (!message || !(message?.length > 0)) {\n return '';\n }\n\n // console.log('here is my message')\n // console.log(message);\n\n message = message.trim();\n\n const markdownLinkRegex = /\\[([^[]+)]\\(([^)]+)\\)/g;\n const urlRegex = /(?<!href=\")\\bhttps?:\\/\\/\\S+(?<![.,])/gi;\n\n if (markdownLinkRegex.test(message)) {\n const html = message.replace(\n markdownLinkRegex,\n '<a href=\"$2\" target=\"_blank\">$1</a>',\n );\n //console.log('Sanitized message: ', message);\n return this.sanitizeHtml(html);\n }\n\n if (urlRegex.test(message)) {\n const html = message.replace(\n urlRegex,\n '<a href=\"$&\" target=\"_blank\">$&</a>',\n );\n // console.log('Sanitized message: ', message);\n return this.sanitizeHtml(html);\n }\n\n message = message.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n message = message.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n // Convert Markdown headers to HTML headers\n message = message.replace(/^(#{1,6})\\s+(.*)$/gm, (match, hashes, text) => {\n const level = hashes.length;\n return `<h${level}>${text}</h${level}>`;\n });\n\n this.cdr.markForCheck();\n const sanitizedMessage = this.sanitizeHtml(message);\n return sanitizedMessage;\n }\n\n ngAfterViewChecked() {\n const feedbackLinks =\n this.elementRef.nativeElement.querySelectorAll('.feedback-link');\n feedbackLinks.forEach((link: any) => {\n link.addEventListener(\n 'click',\n this.onFeedbackClick.bind(this, 'zendesk'),\n );\n });\n // if (this.elementRef.nativeElement.querySelector('.feedback-link')) {\n // this.elementRef.nativeElement\n // .querySelector('.feedback-link')\n // .addEventListener('click', this.onFeedbackClick.bind(this, 'zendesk'));\n // }\n }\n\n sanitizeHtml(html: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n\n onFeedbackClick(value: string) {\n this.feedbackEvent.emit(value);\n }\n\n onClose() {\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n this.onCloseEvent.emit();\n }\n\n sendMessageWithTile(prompt: string) {\n this.input = prompt;\n this.fetchData();\n this.scrollToBottom();\n }\n isChatingWithAi = false;\n fetchData(msg = null) {\n this.input = msg || this.input?.trim();\n this.msg = this.input;\n if (!this.input || this.loading) {\n return;\n }\n\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(this.input),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n\n try {\n const textarea = this.myInput.nativeElement;\n textarea.style.height = 'hidden'; // Reset the height\n textarea.style.height = `62px`;\n } catch (error) {}\n this.cdr.markForCheck();\n\n this.aiResponse = '';\n this.isChatingWithAi = true;\n\n this.makeAskRequest(this.input, this.agents, this.conversationKey);\n }\n fetchDataFor(msg, chat) {\n const inputMsg = msg?.trim();\n if (!inputMsg || this.loading) {\n return;\n }\n try {\n chat.relatedListItems = [];\n this.cdr.detectChanges();\n } catch (error) {}\n\n this.scrollToBottom();\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(inputMsg),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n\n this.cdr.markForCheck();\n\n this.aiResponse = '';\n this.isChatingWithAi = true;\n\n this.makeAskRequest(inputMsg, this.agents, this.conversationKey, msg, chat);\n }\n fetchSmallTalk() {\n this.loading = true;\n this.cdr.markForCheck();\n\n const url = `${this.environment.BASE_URL}/bot/small-talk/${this.botId}/${this.userId}`;\n\n this.http\n .get<{ smallTalk: string }>(url, {\n headers: {\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n },\n })\n .pipe(\n catchError((error) => {\n console.error('Error while fetching small talk:', error);\n\n return of(null);\n }),\n )\n .subscribe((response) => {\n this.loading = false;\n this.cdr.markForCheck();\n\n if (!response) {\n return;\n }\n\n if (response && response.smallTalk) {\n this.chatLog.push({\n type: 'ai',\n message: this.processMessage(response.smallTalk),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 2;\n // this.scrollToBottom();\n this.cdr.markForCheck();\n }\n });\n }\n\n readAllChunks = (stream: any) => {\n const reader = stream.getReader();\n const allSuggestions: string[] = [];\n\n reader.closed.catch((err: any) => {\n if (err) {\n console.error('Error reading stream: ', err);\n }\n\n this.isChatingWithAi = false;\n this.scrollToBottom();\n return;\n });\n\n return new ReadableStream({\n start: (controller) => {\n return this.pump(controller, reader, allSuggestions);\n },\n });\n };\n\n pump(controller: any, reader: any, allSuggestions: string[]) {\n reader.read().then(({ done, value }: any) => {\n const lastItem = this.chatLog[this.chatLog.length - 1];\n\n if (done) {\n lastItem.message = this.processMessageForDisplay(lastItem.message);\n this.chatLog.pop();\n this.chatLog.push(lastItem);\n if (allSuggestions?.length) {\n this.chatLog.push({\n type: 'suggestions',\n suggestions: allSuggestions,\n });\n }\n\n controller.close();\n this.isChatingWithAi = false;\n // this.scrollToBottom();\n this.cdr.markForCheck();\n this.showStartAgain = true;\n\n // setTimeout(() => {\n // this.fetchSmallTalk();\n // },1000)\n return;\n }\n\n let decodedChunk = this.decoder.decode(value, { stream: true });\n this.aiResponse += decodedChunk;\n if (lastItem.type === 'ai') {\n const suggestionsMatch = this.aiResponse.match(/<sug>(.*?)<\\/sug>/g);\n if (suggestionsMatch) {\n suggestionsMatch.forEach((match) => {\n this.aiResponse = this.aiResponse.replace(match, '');\n allSuggestions.push(match?.replace(/<\\/?sug>/g, ''));\n });\n }\n\n lastItem.message = this.aiResponse;\n this.cdr.markForCheck();\n } else {\n this.isChatingWithAi = false;\n\n let aiFormattedData: any;\n\n try {\n console.log('parsing json ');\n aiFormattedData = JSON.parse(JSON.parse(this.aiResponse));\n } catch (e) {\n try {\n console.log('parsing json 2');\n aiFormattedData = JSON.parse(this.aiResponse);\n } catch (e) {}\n }\n\n console.log('parsing json done');\n\n if (aiFormattedData && aiFormattedData?.section_id?.length > 0) {\n if (\n aiFormattedData.section_id == 'company_search' ||\n aiFormattedData.section_id == 'user_search' ||\n aiFormattedData.section_id == 'industry_company_search'\n ) {\n this.fetchMyConnections().subscribe();\n this.fetchPendingRequests().subscribe();\n }\n\n if (aiFormattedData.section_id == this.myUpcomingSessionAction) {\n var speakerIds = [];\n aiFormattedData.content?.forEach((session) => {\n speakerIds = [...speakerIds, ...session.speakers];\n });\n\n if (speakerIds?.length > 0)\n this.getSpeakersByStaffIds(speakerIds).subscribe();\n }\n\n if (\n aiFormattedData.section_id == this.addToMyAgendaAction &&\n aiFormattedData.content?.length > 0\n ) {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n sessionIds: aiFormattedData.content,\n });\n }\n\n if (aiFormattedData.section_id == this.connectOrFollowAction) {\n let usersLen = aiFormattedData.content?.length;\n if (usersLen > 1) {\n this.openPage.next({\n sectionId: 'open_networking_drawer',\n search: aiFormattedData.content,\n });\n } else if (usersLen == 1) {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n connetUserIds: [aiFormattedData.content[0].userId],\n });\n }\n }\n\n if (aiFormattedData.is_open_page == 'true') {\n this.openPage.next({\n sectionId: aiFormattedData.section_id,\n search: aiFormattedData.content,\n });\n\n if (this.isMobileBrowser()) {\n aiFormattedData.message +=\n '\\n\\n' + '<a id=\"closeBotNow\">Click Here</a> to see results.';\n }\n }\n\n this.chatLog.push({\n type: 'ai',\n message: aiFormattedData.message,\n action: aiFormattedData,\n time: formatNow(this.timezone),\n });\n\n if (this.isMobileBrowser()) {\n setTimeout(() => {\n this.addCloseBotClickEvent();\n }, 500);\n }\n\n this.aiResponse = '';\n } else {\n this.chatLog.push({\n type: 'ai',\n message: this.aiResponse,\n time: formatNow(this.timezone),\n });\n }\n\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n this.cdr.markForCheck();\n }\n\n this.scrollToBottom();\n\n // Enqueue the next data chunk into our target stream\n controller.enqueue(value);\n this.pump(controller, reader, allSuggestions);\n });\n }\n\n submitFeedback(flag: boolean, message) {\n console.log(message);\n\n this.feedbackDone = true;\n this.showFeedBackIconsIndex = null;\n const conversation_id = this.conversationService.getKey(\n this.botId,\n false,\n this.eventId,\n );\n const url = `${this.environment.AGENTS_API}/Conversation/coPilot/${this.botId}/conversation/${conversation_id}/helpful-response`;\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n apiKey: 'Conversation_WIz/qAm+EEmfOkFaUA/weA==',\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n },\n body: JSON.stringify({ messageId: message._id, isHelpful: flag }),\n }).then(() => {\n if (flag) {\n this.chatLog.push({\n type: 'ai',\n message:\n this.thumbsUpMessage ||\n this.getTranslation('May I assist you with anything else'),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n\n this.scrollToBottom();\n this.cdr.markForCheck();\n this.feedbackDone = false;\n this.showFeedBackIconsIndex = null;\n return;\n }\n\n this.chatLog.push({\n type: 'ai',\n message: this.processMessage(\n this.thumbsDownMessages[this.thumbsDownMsgIndex],\n ),\n time: formatNow(this.timezone),\n isFeedbackMsg: true,\n });\n this.thumbsDownMsgIndex =\n (this.thumbsDownMsgIndex + 1) % this.thumbsDownMessages.length;\n this.scrollToBottom();\n this.cdr.markForCheck();\n setTimeout(() => {\n const supportLink = document.getElementById('supportLink88');\n if (supportLink) {\n supportLink.addEventListener('click', this.triggerSupport.bind(this));\n }\n }, 200);\n this.feedbackDone = false;\n this.showFeedBackIconsIndex = null;\n });\n }\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n // Prevent default behavior (new line)\n event.preventDefault();\n // Call your submit function\n this.handleSubmit(event);\n }\n }\n handleSubmit(event) {\n this.fetchData();\n this.scrollToBottom();\n }\n\n /** Index of the last AI message in chatLog; -1 if none. */\n get lastAiMessageIndex(): number {\n for (let j = this.chatLog.length - 1; j >= 0; j--) {\n if (this.chatLog[j]?.type === 'ai') return j;\n }\n return -1;\n }\n\n handleUpClick(idx: any) {\n if (this.feedbackDone) {\n return;\n }\n\n this.submitFeedback(true, this.chatLog[idx]);\n this.chatLog[idx].liked = !this.chatLog[idx].liked;\n\n if (this.chatLog[idx].unliked) {\n this.chatLog[idx].unliked = !this.chatLog[idx].unliked;\n }\n\n this.cdr.markForCheck();\n }\n\n handleDownClick(idx: any) {\n if (this.feedbackDone) return;\n this.submitFeedback(false, this.chatLog[idx]);\n this.chatLog[idx].unliked = !this.chatLog[idx].unliked;\n if (this.chatLog[idx].liked)\n this.chatLog[idx].liked = !this.chatLog[idx].liked;\n }\n // handleCopyClick(index: any) {\n // // Copy the message to the clipboard\n // const contentToCopy = this.chatLog[index].message;\n // console.log('contentToCopy');\n // console.log(contentToCopy);\n // navigator.clipboard.writeText(contentToCopy).then(() => {\n // // Indicate that the message was copied\n // this.chatLog[index].copied = true;\n // this.cdr.detectChanges();\n // // Reset the copied state after a delay\n // setTimeout(() => {\n // this.chatLog[index].copied = false;\n // this.cdr.detectChanges();\n // }, 2000); // Reset after 2 seconds\n // });\n // }\n copyText(id, index) {\n // Get the text element\n var textElement = document.getElementById(id);\n\n // Create a temporary textarea element to copy the text\n var tempTextArea = document.createElement('textarea');\n tempTextArea.value = textElement.innerText;\n\n // Append the textarea to the body (necessary for the execCommand to work)\n document.body.appendChild(tempTextArea);\n\n // Select the text inside the textarea\n tempTextArea.select();\n\n // Copy the text to the clipboard\n document.execCommand('copy');\n\n // Remove the temporary textarea\n document.body.removeChild(tempTextArea);\n\n // Optionally, you can alert the user or change the button text to indicate the copy was successful\n // alert('Text copied to clipboard!');\n\n this.chatLog[index].copied = true;\n this.cdr.detectChanges();\n // Reset the copied state after a delay\n setTimeout(() => {\n this.chatLog[index].copied = false;\n this.cdr.detectChanges();\n }, 2000); // Reset after 2 seconds\n }\n handleCopyClick(index: any) {\n // Copy the message to the clipboard\n const contentToCopy = this.chatLog[index].message;\n const resutlt = this.copyText('messageText_' + index, index);\n }\n\n sanitizeHTML(html: string): string {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n\n // Create a new document fragment to hold the simplified content\n const fragment = document.createDocumentFragment();\n\n // Append the children of the body of the parsed document to the fragment\n Array.from(doc.body.childNodes).forEach((node) => {\n fragment.appendChild(node.cloneNode(true));\n });\n\n // Create a new div element to hold the simplified HTML\n const simplifiedDiv = document.createElement('div');\n simplifiedDiv.appendChild(fragment);\n\n // Remove complex tags or attributes as needed\n // Example: remove scripts\n simplifiedDiv\n .querySelectorAll('script')\n .forEach((script) => script.remove());\n\n // Return the simplified HTML as a string\n return simplifiedDiv.innerHTML;\n }\n\n currentMessageForEditor: any = '';\n currentIndexForEditor: any = -1;\n handleEditorClick(index: any) {\n if (this.currentIndexForEditor == -1) {\n this.currentIndexForEditor = index;\n this.currentMessageForEditor = this.sanitizeHTML(\n this.chatLog[index].message,\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n // 'SafeValue must use [property]=binding:',\n '',\n );\n\n this.cdr.detectChanges();\n } else {\n if (this.currentIndexForEditor == index) {\n this.currentMessageForEditor += this.sanitizeHTML(\n this.chatLog[index].message,\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n // 'SafeValue must use [property]=binding:',\n '',\n );\n this.cdr.detectChanges();\n } else {\n this.currentIndexForEditor = index;\n this.currentMessageForEditor = this.sanitizeHTML(\n this.chatLog[index].message,\n );\n this.currentMessageForEditor = this.currentMessageForEditor.replace(\n // 'SafeValue must use [property]=binding:',\n '',\n );\n this.cdr.detectChanges();\n }\n }\n this.chatLog[index].isEditor = true;\n this.cdr.detectChanges();\n // Reset the copied state after a delay\n setTimeout(() => {\n this.chatLog[index].isEditor = false;\n this.cdr.detectChanges();\n }, 2000); // Reset after 2 seconds\n this.editorsDrawer.open();\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n this.cdr.detectChanges();\n }\n scrollToBottom() {\n if (!this.autoScrollOnNewMessage) {\n return;\n }\n let counter = 0;\n const interval = setInterval(() => {\n this.chatMain.nativeElement.scrollTop =\n this.chatMain.nativeElement.scrollHeight;\n if (counter++ > 5) clearInterval(interval);\n }, 5);\n }\n\n focusOnTextarea() {\n setTimeout(() => {\n if (this.myInput && this.myInput.nativeElement) {\n this.myInput.nativeElement.focus();\n }\n }, 100);\n }\n\n handleAction(action: any) {\n console.info('incoming action from the chatbot AI');\n console.info(action);\n\n if (action?.content) {\n }\n }\n\n ngAfterViewInit() {\n // Check if the drawer is initially open and apply overflow hidden to body if so\n if (this.drawer.opened) {\n this.setBodyOverflow();\n }\n\n // Listen to changes in the drawer being opened or closed\n this.drawer.openedChange.subscribe((opened: boolean) => {\n if (opened) {\n this.setBodyOverflow();\n } else {\n this.removeBodyOverflow();\n }\n });\n\n this.drawer.openedChange.subscribe((opened) => {\n if (opened) {\n setTimeout(() => {\n if (this.myInput && this.myInput.nativeElement) {\n this.myInput.nativeElement.focus(); // Focus on the textarea\n }\n });\n }\n });\n }\n\n private setBodyOverflow() {\n this.renderer.addClass(document.body, this.bodyOverflowClass);\n }\n\n private removeBodyOverflow() {\n this.renderer.removeClass(document.body, this.bodyOverflowClass);\n }\n\n getSpeakersByStaffIds(ids: any[]): Observable<any[] | null> {\n const url = `${this.environment.USERS_API}/events/${this.eventId}/users/get-by-staff-ids`;\n const cleanIds = Array.from(\n new Set((ids || []).map((x) => String(x ?? '').trim()).filter(Boolean)),\n );\n if (cleanIds.length === 0) return of(null);\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n });\n return this.http.post<any[]>(url, cleanIds, { headers }).pipe(\n tap((data: any[]) => {\n if (Array.isArray(data) && data.length > 0) {\n data.forEach((speaker) => {\n const id = String(speaker?.id ?? '').trim();\n if (id) this.speakers[id] = speaker;\n });\n this.cdr.markForCheck();\n }\n }),\n catchError((err) => {\n console.error('Error fetching speakers:', err);\n return of(null);\n }),\n );\n }\n\n performSessionAction(sessionId, action) {\n this.sessionActions.next({\n sessionId,\n action,\n });\n }\n\n addCloseBotClickEvent() {\n const element = this.elementRef.nativeElement.querySelector('#closeBotNow');\n if (element) {\n this.renderer.listen(element, 'click', () => {\n this.closeBot.next(null);\n });\n }\n }\n\n isMobileBrowser() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n }\n\n connectToUser(userId) {\n this.connectWithUser.emit({\n connect: !this.canDisconnect(userId),\n userId,\n });\n\n setTimeout(() => {\n this.fetchMyConnections().subscribe((res) => {\n this.cdr.markForCheck();\n });\n this.fetchPendingRequests().subscribe((res) => {\n this.cdr.markForCheck();\n });\n }, 500);\n }\n\n scheduleMeetingWithUser(user) {\n this.scheduleMeeting.emit(user);\n }\n\n /** Whether the given userId has a pending connection request sent (show \"Request Sent\" disabled). */\n checkPendingSentRequest(userId: string | null | undefined): boolean {\n if (userId == null || userId === '') return false;\n const pending = this.pendingSentRequestUserIds?.length\n ? this.pendingSentRequestUserIds\n : this.pendingRequests;\n return !!pending?.find((a: any) => a == userId);\n }\n\n /** Whether this attendee can be followed (show \"Connect\" button). Not connected and no pending sent request. */\n canFollowUser(attendee: { id?: string }): boolean {\n const uid = attendee?.id;\n if (uid == null || uid === '') return false;\n if (this.canUnfollowUser(attendee) || this.checkPendingSentRequest(uid))\n return false;\n return true;\n }\n\n /** Whether this attendee is already connected (show \"Disconnect\" button). */\n canUnfollowUser(attendee: { id?: string }): boolean {\n const uid = attendee?.id;\n if (uid == null || uid === '') return false;\n const list = this.connectionsList?.length\n ? this.connectionsList\n : this.myConnections;\n return !!list?.find((c: any) => (c.userId ?? c.id) == uid);\n }\n\n canConnect(userId) {\n return !(\n this.canDisconnect(userId) ||\n this.pendingRequests.find((a) => a == userId)\n );\n }\n\n canDisconnect(userId) {\n return this.myConnections.find((conn) => conn.userId == userId);\n }\n\n fetchPendingRequests() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n });\n return this.http\n .get(\n `${this.environment.USERS_API}/events/${this.eventId}/connection-requests/autogen/pending-sent-requests?userId=${this.userId}`,\n { headers },\n )\n .pipe(\n switchMap((res: any) => {\n this.pendingRequests = res;\n this.cdr.markForCheck();\n return of(res);\n }),\n catchError((error: any) => {\n console.error('Error fetching pending requests: ', error);\n return of(null);\n }),\n );\n }\n\n fetchMyConnections() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n });\n return this.http\n .get(\n `${this.environment.USERS_API}/events/${this.eventId}/users-connections/autogen?userId=${this.userId}`,\n { headers },\n )\n .pipe(\n switchMap((res: any) => {\n this.myConnections = res;\n this.cdr.markForCheck();\n return of(res);\n }),\n catchError((error: any) => {\n console.error('Error fetching pending requests: ', error);\n return of(null);\n }),\n );\n }\n\n isDropdownOpen: boolean = false;\n agents: any;\n selectedAgents = [];\n allSelected = false;\n // Toggle the dropdown visibility\n toggleDropdown() {\n if (!this.agents) this.fetchAgents();\n this.isDropdownOpen = !this.isDropdownOpen;\n this.cdr.detectChanges();\n }\n\n onSelectAll(event: Event): void {\n this.agents?.forEach((agent) => (agent.selected = false));\n this.cdr.detectChanges();\n }\n\n onAgentChange(agent: any): void {\n //agent.selected = !agent.selected;\n //console.log(agent);\n let agentFound = this.agents.filter((p) => p.id == agent.id);\n if (agentFound && agentFound.length > 0) {\n agentFound[0].selected = !agentFound[0].selected;\n this.cdr.detectChanges();\n }\n this.cdr.detectChanges();\n }\n\n areAllSelected(): boolean {\n return this.agents?.every((agent) => !agent.selected);\n }\n\n getDropdownHeaderText(): string {\n const selectedAgents = this.agents?.filter((agent) => agent.selected);\n if (!selectedAgents) {\n return 'All Agents';\n } else {\n if (selectedAgents && selectedAgents?.length === 0) {\n return 'All Agents';\n } else {\n return selectedAgents?.length > 1\n ? `${selectedAgents?.length} Agents Selected`\n : `${selectedAgents?.length} Agent Selected`;\n }\n }\n }\n fetchAgents_http() {\n this.loading = true;\n const url = `${this.environment.AGENTS_API}/CoPilot/${this.botId}/active-agents`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n });\n\n return this.http.post(url, {}, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n this.agents = res.map((agent) => ({\n ...agent,\n selected: false,\n }));\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config: ', error);\n\n return of(null);\n }),\n );\n }\n isDocInEditMode = false;\n documentContent: any;\n\n conversationId: any;\n isContentLoaded = false;\n\n fetchContent_http() {\n this.isDocInEditMode = false;\n this.isContentLoaded = false;\n console.log('API call function');\n this.loading = true;\n const conversation_id = this.conversationService.getKey(\n this.botId,\n false,\n this.eventId,\n );\n this.conversationId = conversation_id;\n const url = `${this.environment.AGENTS_API}/ConversationDocuments?conversationId=${conversation_id}&botId=${this.botId}`;\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n apiKey: 'WIz/qAm+EEmfOkFaUA/weA==',\n 'domain-authority': this.domainAuthorityValue,\n });\n\n return this.http.get(url, { headers }).pipe(\n switchMap((res: any) => {\n if (res) {\n this.isDocInEditMode = true;\n this.documentContent = res;\n console.log('Get API callled success');\n this.isContentLoaded = true;\n console.log(res);\n }\n this.cdr.markForCheck();\n\n return of(res);\n }),\n catchError((error) => {\n console.error('Error fetching chatbot config DJ: ', error);\n this.isDocInEditMode = false;\n this.isContentLoaded = true;\n\n if (error?.status == 404) {\n console.log('dash');\n this.isDocInEditMode = false;\n this.isContentLoaded = true;\n }\n return of(null);\n }),\n );\n }\n\n fetchAgents() {\n this.fetchAgents_http().subscribe();\n }\n\n fetchEditorContent() {\n this.fetchContent_http().subscribe();\n }\n\n // events/${eventId}/users-connections\n processMessageForDisplay(markdown: string): SafeHtml {\n try {\n // Create a custom renderer to modify <a> tags\n const renderer = new marked.Renderer();\n\n // Customize anchor tags to include target=\"_blank\"\n renderer.link = (href: string, title: string, text: string) => {\n return `<a href=\"${href}\" title=\"${\n title || ''\n }\" target=\"_blank\">${text}</a>`;\n };\n\n // Parse the markdown content to HTML using marked with the custom renderer\n const markdownContent = marked.parse(markdown, { renderer: renderer });\n\n // Sanitize the parsed HTML using Angular's DomSanitizer\n const sanitizedHtml =\n this.sanitizer.bypassSecurityTrustHtml(markdownContent);\n\n // Return the safe HTML content for display\n return sanitizedHtml;\n } catch (error) {\n console.error('Error processing markdown:', error);\n return ''; // Return an empty string or handle the error appropriately\n }\n }\n\n prepareHtml(markdown: string): string {\n if (!markdown || !(markdown.length > 0)) {\n console.error('Input Markdown is null or empty');\n return '';\n }\n\n // Convert Markdown headers (### or ##) to <strong> for bold headings\n let html = markdown.replace(\n /^(#{1,6})\\s+(.*)$/gm,\n (match, hashes, text) => {\n const level = hashes.length;\n if (level === 3) {\n return `<h3><strong>${text}</strong></h3>`;\n } else if (level === 4) {\n return `<h4><strong>${text}</strong></h4>`;\n }\n return `<strong>${text}</strong>`;\n },\n );\n\n // Convert Markdown code blocks with language to preformatted HTML\n html = html.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (match, lang, code) => {\n const escapedCode = this.escapeHtml(code);\n const language = lang || 'plaintext';\n\n // Create a copy button for the code block\n return `\n <div class=\"code-container\">\n <button id=\"copy-button\" class=\"copy-button\" (click)=\"copyToClipboard('\\`${escapedCode}\\`')\">${this.getTranslation(\n 'Copy',\n )}</button>\n <pre class=\"code_block diff\"><code class=\"language-${language}\">${escapedCode}</code></pre>\n </div>`;\n });\n\n // Convert inline code (wrapped in `backticks`) to inline <code> tags\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\n\n // Convert Markdown bold to HTML <strong>\n html = html.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\n\n // Convert numbered lists\n html = html.replace(/^\\d+\\.\\s+(.*)$/gm, '<li>$1</li>');\n\n // Convert bullet point lists\n html = html.replace(/^\\-\\s+(.*)$/gm, '<li>$1</li>');\n\n // Convert Markdown links to HTML links\n html = html.replace(\n /\\[([^\\]]+)]\\(([^)]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\">$1</a>',\n );\n\n // Convert new lines to <br> tags for paragraphs\n html = html.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n return html;\n }\n\n // Helper function to escape HTML characters for code blocks\n escapeHtml(code: string): string {\n return code\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n // Function to copy text to clipboard\n public copyToClipboard(text: string) {\n navigator.clipboard.writeText(text).then(\n () => {\n alert('Code copied to clipboard!');\n },\n (err) => {\n console.error('Could not copy text: ', err);\n },\n );\n }\n\n isCollapsed = false;\n isCollapsedForGraph = false;\n isCollapsedForFGraph = false;\n toggleCollapse() {\n this.isCollapsed = !this.isCollapsed;\n this.cdr.detectChanges();\n }\n\n toggleCollapseGraph() {\n this.isCollapsedForGraph = !this.isCollapsedForGraph;\n this.cdr.detectChanges();\n }\n toggleCollapseFGraph() {\n this.isCollapsedForFGraph = !this.isCollapsedForFGraph;\n this.cdr.detectChanges();\n }\n // [\n // {\n // \"title\": \"AI News January 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"Each month, we compile significant news, trends, and happenings in AI, providing detailed summaries with key points in bullet form for concise yet complete understanding.\",\n // \"link\": \"https://theaitrack.com/ai-news-january-2024/\"\n // },\n // {\n // \"title\": \"Top AI News, January 2024 - Everypixel Journal\",\n // \"desc\": \"In this monthly roundup, we spotlight the top AI news stories from January, including the OpenAI vs. The New York Times Lawsuit.\",\n // \"link\": \"https://journal.everypixel.com/top-ai-news-january-2024\"\n // },\n // {\n // \"title\": \"AI News July 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"This page features AI News for July 2024, highlighting significant events such as Canva acquiring Leonardo AI.\",\n // \"link\": \"https://theaitrack.com/ai-news-july-2024-in-depth-and-concise/\"\n // },\n // {\n // \"title\": \"January news roundup: What's new in the world of AI? - Pluralsight\",\n // \"desc\": \"OpenAI’s new GPT store, business-ready ChatGPT plans, and a predicted rise in AI-powered cybercrime.\",\n // \"link\": \"https://www.pluralsight.com/resources/blog/data/ai-this-month-january-2024\"\n // },\n // {\n // \"title\": \"AI News August 2024: In-Depth and Concise - The AI Track\",\n // \"desc\": \"This page features AI News for August 2024, with highlights such as Nvidia delaying the “Blackwell” B200 AI chips delivery.\",\n // \"link\": \"https://theaitrack.com/ai-news-august-2024-in-depth-and-concise-duplicate/\"\n // }\n // ]\n dateTime = { now: new Date().toISOString() };\n // Extracts the domain from a URL\n getDomainName(url: string): string {\n try {\n const { hostname } = new URL(url);\n return hostname.replace(/^www\\./, ''); // Remove 'www.' if present\n } catch {\n return 'unknown';\n }\n }\n\n // Generates the favicon URL\n getFaviconUrl(url: string): string {\n const domain = this.getDomainName(url);\n return `https://www.google.com/s2/favicons?sz=128&domain=${domain}`;\n }\n currentSourcesList: any = [];\n onCardClick(sources): void {\n this.currentSourcesList = sources;\n this.cdr.detectChanges();\n this.sourcesDrawer.open();\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n }\n\n isShowEditorButton = true;\n\n openOuterEditor() {\n this.fetchEditorContent();\n this.editorsDrawer.open();\n this.isDrawerOpen = true;\n this.isShowEditorButton = false;\n this.cdr.detectChanges();\n\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'none';\n }\n }\n\n onCloseEditor() {\n this.editorsDrawer.close();\n this.isDrawerOpen = false;\n this.isShowEditorButton = true;\n this.cdr.detectChanges(); // Trigger change detection if needed\n this.onDrawerClosed();\n }\n\n onCloseSource() {\n this.sourcesDrawer.close();\n this.isDrawerOpen = false;\n this.cdr.detectChanges(); // Trigger change detection if needed\n this.onDrawerClosed();\n }\n onDrawerClosed() {\n setTimeout(() => {\n this.isDrawerOpen = true;\n this.cdr.detectChanges(); // Trigger change detection if needed\n // Use ngClass to dynamically apply the class\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = 'block';\n }\n }, 800);\n }\n isDrawerOpen = true;\n\n toggleDrawer(todo) {\n this.isDrawerOpen = todo;\n this.cdr.detectChanges();\n this.updateButtonVisibility();\n }\n updateButtonVisibility() {\n const button = document.getElementById('botcloseplaygroundbutton');\n if (button) {\n button.style.display = this.isDrawerOpen ? 'block' : 'none';\n }\n }\n openLinkInNewTab(link: string): void {\n window.open(link, '_blank');\n }\n adjustTextareaHeight(event: any): void {\n try {\n if (event.key === 'Enter' && !event.shiftKey) {\n // Prevents a new line from being added\n event.preventDefault();\n }\n } catch (error) {}\n const textarea = event.target as HTMLTextAreaElement;\n textarea.style.height = 'auto'; // Reset the height\n textarea.style.height = `${textarea.scrollHeight}px`; // Adjust height to match content\n // Ensure the height doesn't exceed the max-height set in CSS\n if (textarea.scrollHeight > 150) {\n textarea.style.height = `150px`; // Adjust height to match content\n textarea.style.overflowY = 'auto'; // Enable scrolling if content exceeds 400px\n } else {\n textarea.style.overflowY = 'hidden'; // Hide scrollbar if content is within limits\n }\n }\n\n toggleWorkflows(value = null) {\n if (!this.checkForCop29BotId()) {\n this.botService.getWorkflowsByOrgId(this.orgId).subscribe((res) => {\n this.orgWorkflows = res;\n this.isWorkflowOpen = value == null ? !this.isWorkflowOpen : value;\n\n if (!this.isWorkflowOpen) {\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n }\n\n this.cdr.detectChanges();\n });\n }\n }\n\n initializeForm() {\n // Create form controls dynamically based on selectedWorkflow.Trigger.InputSchema\n const formControls = {};\n if (this.selectedWorkflow?.Trigger?.InputSchema) {\n this.selectedWorkflow.Trigger.InputSchema.forEach((input) => {\n formControls[input.InputId] = [\n input.Value || '',\n input.Required ? Validators.required : null,\n ];\n });\n }\n\n // Initialize the form\n this.workflowForm = this.fb.group(formControls);\n }\n\n onWorkflowSelected(workflow) {\n this.selectedWorkflow = workflow;\n this.initializeForm();\n this.isWorkflowOpen = false;\n this.openWorkflowInput = true;\n }\n\n onWorkflowSubmit() {\n const container = document.getElementById('botAllChat');\n if (this.workflowForm.valid) {\n console.log(this.workflowForm.value);\n\n var input = this.prepareHtml(\n this.generateMarkdown(\n this.selectedWorkflow.Name,\n this.workflowForm.value,\n ),\n );\n\n // update last two chatLog entries, set showWorkflowExecutionLoader = false\n try {\n this.chatLog[this.chatLog.length - 1]['showWorkflowExecutionLoader'] =\n false;\n this.chatLog[this.chatLog.length - 2]['showWorkflowExecutionLoader'] =\n false;\n } catch (error) {}\n\n this.chatLog.push({\n type: 'user',\n message: input,\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n showWorkflowExecutionLoader: true,\n });\n\n console.log(input);\n\n this.currentWorkflowActionProgress = 0;\n this.currentWorkflowAction =\n 'Executing ' + this.selectedWorkflow.Actions[0].Name;\n this.isChatingWithAi = true;\n this.executingWorkflow = true;\n this.workflowExecutionDetails = {\n Actions: this.selectedWorkflow.Actions,\n Inputs: this.workflowForm.value,\n workflowInputs: this.workflowForm.value,\n WorkflowName: this.selectedWorkflow.Name,\n };\n this.currentWorkflowExecutionDetails = this.workflowExecutionDetails;\n this.scrollToBottom();\n\n this.cdr.detectChanges();\n\n // execute the ask endpoint with workflow input\n this.makeAskRequest(\n input,\n this.agents,\n this.conversationKey,\n '',\n null,\n this.selectedWorkflow['_id'],\n this.workflowForm.value,\n );\n }\n }\n\n makeAskRequest(\n inputMsg: string,\n agents: any[],\n conversationId: string,\n msg?: any,\n chat?: any,\n workflowId?: string,\n workflow_inputs?: any,\n ): void {\n const body = {\n user_question: inputMsg,\n user_id: this.userId,\n bot_id: this.botId,\n message_id: this.conversationService.generateKey(),\n session_id: this.conSessionKey,\n agents: agents?.filter((p) => p.selected).map((p) => p.id) ?? [],\n conversation_id: conversationId,\n first_name: this.firstName,\n last_name: this.lastName,\n };\n\n if (workflowId) {\n body['workflow_id'] = workflowId;\n body['workflow_inputs'] = workflow_inputs;\n }\n\n const usersApi = this.environment.USERS_API;\n this.platformTokenRefresh\n .ensureValidAccessToken(this.s27Token, usersApi)\n .pipe(take(1))\n .subscribe({\n next: (ensured) => {\n let bearer = ensured.accessToken || this.s27Token || '';\n if (ensured.refreshed && ensured.accessToken) {\n this.s27Token = ensured.accessToken;\n if (ensured.authResponse) {\n this.tokensRefreshed.emit(ensured.authResponse);\n }\n }\n this.sendAskMessageOverWebSocket(body, bearer, msg, chat);\n },\n error: () => {\n this.is401 = true;\n this.refreshToken.emit();\n if (msg && chat) {\n this.msg = msg;\n this.chat = chat;\n this.isFetchDataFor = true;\n }\n this.isChatingWithAi = false;\n },\n });\n\n this.input = '';\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n this.isWorkflowOpen = false;\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n private buildAskHeaders(bearerToken: string): any {\n const headers: any = {\n 'Content-Type': 'application/json',\n Authorization: 'Bearer ' + bearerToken,\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n };\n\n if (this.eventUrl) {\n headers['eventurl'] = this.eventUrl;\n }\n if (this.eventId) {\n headers['eventid'] = this.eventId;\n }\n if (this.eventToken) {\n headers['eventtoken'] = this.eventToken;\n }\n if (this.workspaceToken) {\n headers['workspaceToken'] = this.workspaceToken;\n }\n return headers;\n }\n\n private handleAskUnauthorized(msg?: any, chat?: any): void {\n this.is401 = true;\n this.refreshToken.emit();\n if (msg && chat) {\n this.msg = msg;\n this.chat = chat;\n this.isFetchDataFor = true;\n }\n this.isChatingWithAi = false;\n }\n\n private disconnectAskWebSocket(): void {\n if (this.askWebSocket) {\n try {\n this.askWebSocket.close();\n } catch (error) {}\n this.askWebSocket = null;\n }\n this.askWebSocketConnectionKey = '';\n this.activeAskMessageId = '';\n }\n\n private async ensureAskWebSocket(\n bearerToken: string,\n conversationId: string,\n sessionId: string,\n msg?: any,\n chat?: any,\n ): Promise<void> {\n const connectionKey = `${conversationId}:${sessionId}`;\n if (\n this.askWebSocket &&\n this.askWebSocket.readyState === WebSocket.OPEN &&\n this.askWebSocketConnectionKey === connectionKey\n ) {\n return;\n }\n\n this.disconnectAskWebSocket();\n\n const askNewUrl = `${this.environment.BASE_URL}/ai/ask-ai`;\n const connectBody = {\n bot_id: this.botId,\n conversation_id: conversationId,\n session_id: sessionId,\n mcp_enable: false,\n };\n\n const response = await fetch(askNewUrl, {\n method: 'POST',\n headers: this.buildAskHeaders(bearerToken),\n body: JSON.stringify(connectBody),\n });\n\n if (response.status === 401 || response.status === 403) {\n this.handleAskUnauthorized(msg, chat);\n throw new Error(`Unauthorized while connecting ask websocket (${response.status})`);\n }\n\n if (!response.ok) {\n const responseText = await response.text();\n throw new Error(\n `Failed to initialize ask websocket (${response.status}): ${responseText}`,\n );\n }\n\n const data = await response.json();\n const wsUrl = data?.ws_url;\n if (!wsUrl || typeof wsUrl !== 'string') {\n throw new Error('ask-new response missing ws_url');\n }\n\n await new Promise<void>((resolve, reject) => {\n const ws = new WebSocket(wsUrl);\n let settled = false;\n\n ws.onopen = () => {\n if (settled) return;\n settled = true;\n this.askWebSocket = ws;\n this.askWebSocketConnectionKey = connectionKey;\n resolve();\n };\n\n ws.onmessage = (event) => {\n this.handleAskWebSocketMessage(event?.data);\n };\n\n ws.onerror = () => {\n if (settled) return;\n settled = true;\n reject(new Error('Ask websocket connection error'));\n };\n\n ws.onclose = () => {\n if (!settled) {\n settled = true;\n reject(new Error('Ask websocket closed before opening'));\n return;\n }\n this.askWebSocket = null;\n };\n });\n }\n\n private upsertAiChatMessage(messageId: string): any {\n let currentChatMessage = this.chatLog.find((p) => p._id == messageId);\n if (!currentChatMessage) {\n currentChatMessage = {\n _id: messageId,\n type: 'ai',\n message: '',\n time: formatNow(this.timezone),\n };\n this.chatLog.push(currentChatMessage);\n }\n return currentChatMessage;\n }\n\n private getToolContentString(toolResult: any): string {\n const content =\n toolResult?.tool_result?.messages?.[0]?.content ??\n toolResult?.messages?.[0]?.content ??\n toolResult?.content ??\n '';\n if (typeof content === 'string') return content;\n if (content == null) return '';\n try {\n return JSON.stringify(content);\n } catch (error) {\n return '';\n }\n }\n\n private getPrimaryToolResult(toolResults: any): {\n toolName: string;\n content: string;\n } | null {\n if (!toolResults) return null;\n\n const candidates: any[] = [];\n if (Array.isArray(toolResults)) {\n candidates.push(...toolResults);\n } else {\n candidates.push(toolResults);\n if (toolResults?.serializable_to_return) {\n candidates.push(toolResults.serializable_to_return);\n }\n if (typeof toolResults === 'object') {\n Object.entries(toolResults).forEach(([key, value]) => {\n if (value && typeof value === 'object') {\n const v: any = value;\n candidates.push({ ...v, tool_name: v?.tool_name || key });\n }\n });\n }\n }\n\n for (const candidate of candidates) {\n const toolName = candidate?.tool_name;\n const content = this.getToolContentString(candidate);\n if (toolName && content) {\n return { toolName, content };\n }\n }\n\n return null;\n }\n\n private applyToolResultCardMessage(\n currentChatMessage: any,\n messageId: string,\n answerText: string,\n toolResults: any,\n ): boolean {\n const primaryTool = this.getPrimaryToolResult(toolResults);\n if (!primaryTool) return false;\n\n const toolName = primaryTool.toolName;\n const contentStr = primaryTool.content;\n\n const setBase = (type: string) => {\n currentChatMessage._id = messageId;\n currentChatMessage.type = type;\n currentChatMessage.message = answerText\n ? this.processMessageForDisplay(answerText)\n : '';\n currentChatMessage.time = currentChatMessage.time || formatNow(this.timezone);\n };\n\n const isSessionTool =\n toolName === 'get_event_sessions' ||\n toolName === 'get_event_sessions_v2' ||\n toolName === 'get_sessions_by_interest' ||\n toolName === 'get_sessions_by_track' ||\n toolName === 'get_speaker_sessions' ||\n toolName === 'get_upcoming_sessions' ||\n toolName === 'get_my_agenda';\n\n if (isSessionTool) {\n let sessions: any[] = [];\n try {\n const parsed = JSON.parse(contentStr);\n sessions = parsed?.sessions ?? [];\n } catch (error) {\n sessions = this.parseSessionContentV2(contentStr);\n }\n const mapped = this.mapSessionsToCardData(sessions);\n this.ensureSpeakersForSessionCards(mapped);\n if (mapped.length > 0) {\n setBase('session_cards');\n currentChatMessage.sessionCards = mapped;\n return true;\n }\n return false;\n }\n\n if (toolName === 'get_event_attendees') {\n try {\n const parsed = JSON.parse(contentStr);\n const mapped = this.mapAttendeesToCardData(parsed?.attendees ?? []);\n if (mapped.length > 0) {\n setBase('attendee_cards');\n currentChatMessage.attendeeCards = mapped;\n return true;\n }\n } catch (error) {}\n return false;\n }\n\n if (toolName === 'get_event_speakers') {\n try {\n const parsed = JSON.parse(contentStr);\n const mapped = this.mapSpeakersToCardData(\n parsed?.speakers ?? parsed?.speaker ?? [],\n );\n if (mapped.length > 0) {\n setBase('speaker_cards');\n currentChatMessage.speakerCards = mapped;\n return true;\n }\n } catch (error) {}\n return false;\n }\n\n if (toolName === 'get_event_sponsors') {\n try {\n const parsed = JSON.parse(contentStr);\n const mapped = this.mapSponsorsToCardData(parsed?.sponsors ?? []);\n if (mapped.length > 0) {\n setBase('sponsor_cards');\n currentChatMessage.sponsorCards = mapped;\n return true;\n }\n } catch (error) {}\n return false;\n }\n\n if (toolName === 'get_event_booths') {\n try {\n const parsed = JSON.parse(contentStr);\n const mapped = this.mapBoothsToCardData(parsed?.booths ?? []);\n if (mapped.length > 0) {\n setBase('sponsor_cards');\n currentChatMessage.sponsorCards = mapped;\n return true;\n }\n } catch (error) {}\n return false;\n }\n\n if (toolName === 'get_booth_representatives') {\n try {\n const parsed = JSON.parse(contentStr);\n const mapped = this.mapBoothRepsToCardData(parsed?.representatives ?? []);\n if (mapped.length > 0) {\n setBase('booth_rep_cards');\n currentChatMessage.boothRepCards = mapped;\n return true;\n }\n } catch (error) {}\n return false;\n }\n\n return false;\n }\n\n private handleAskWebSocketMessage(rawMessage: any): void {\n if (!rawMessage) return;\n\n let parsed: any = null;\n try {\n parsed =\n typeof rawMessage === 'string' ? JSON.parse(rawMessage) : rawMessage ?? null;\n } catch (error) {\n console.warn('[AskNew WS] Non-JSON payload:', rawMessage);\n return;\n }\n if (!parsed || typeof parsed !== 'object') return;\n\n const payload = parsed?.data ?? {};\n const messageId =\n payload?.message_id || parsed?.message_id || this.activeAskMessageId || '';\n\n switch (parsed?.type) {\n case 'chunk': {\n if (!messageId) return;\n const currentChatMessage = this.upsertAiChatMessage(messageId);\n currentChatMessage.message = `${currentChatMessage.message || ''}${payload?.text || ''}`;\n this.scrollToBottom();\n this.cdr.markForCheck();\n break;\n }\n case 'answer': {\n if (!messageId) {\n this.isChatingWithAi = false;\n this.cdr.markForCheck();\n break;\n }\n const currentChatMessage = this.upsertAiChatMessage(messageId);\n const finalAnswer = payload?.text ?? currentChatMessage.message ?? '';\n const hasCardResponse = this.applyToolResultCardMessage(\n currentChatMessage,\n messageId,\n finalAnswer,\n payload?.tool_results,\n );\n if (!hasCardResponse) {\n currentChatMessage.type = 'ai';\n currentChatMessage.message = this.processMessageForDisplay(finalAnswer);\n }\n if (Array.isArray(payload?.suggestions)) {\n currentChatMessage.relatedListItems = payload.suggestions;\n }\n if (Array.isArray(payload?.web_results)) {\n currentChatMessage.sourcesList = payload.web_results;\n currentChatMessage.displayedSources = payload.web_results?.slice(0, 3);\n currentChatMessage.remainingSources = payload.web_results?.slice(3);\n }\n if (payload?.tool_results) {\n currentChatMessage.toolResults = payload.tool_results;\n }\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n this.activeAskMessageId = '';\n this.isChatingWithAi = false;\n this.scrollToBottom();\n this.focusOnTextarea();\n this.cdr.markForCheck();\n break;\n }\n case 'error': {\n this.activeAskMessageId = '';\n this.isChatingWithAi = false;\n this.cdr.markForCheck();\n break;\n }\n case 'status':\n default:\n break;\n }\n }\n\n private sendAskMessageOverWebSocket(\n body: any,\n bearerToken: string,\n msg?: any,\n chat?: any,\n ): void {\n const conversationId = body?.conversation_id || this.conversationKey || '';\n const sessionId = body?.session_id || this.conSessionKey || '';\n if (!conversationId || !sessionId) {\n this.isChatingWithAi = false;\n return;\n }\n\n this.ensureAskWebSocket(bearerToken, conversationId, sessionId, msg, chat)\n .then(() => {\n if (!this.askWebSocket || this.askWebSocket.readyState !== WebSocket.OPEN) {\n throw new Error('Ask websocket is not open');\n }\n this.activeAskMessageId = body?.message_id || '';\n this.askWebSocket.send(JSON.stringify(body));\n this.is401 = false;\n })\n .catch((err) => {\n console.error('Error sending ask-new websocket message:', err);\n this.isChatingWithAi = false;\n this.cdr.markForCheck();\n });\n }\n\n makeAskRequestold(\n inputMsg: string,\n agents: any[],\n conversationId: string,\n msg?: any,\n chat?: any,\n workflowId?: string,\n workflow_inputs?: any,\n ): void {\n const url = `${this.environment.BASE_URL}/ai/ask`;\n\n const body: any = {\n user_question: inputMsg,\n user_id: this.userId,\n bot_id: this.botId,\n message_id: this.conversationService.generateKey(),\n agents: agents?.filter((p) => p.selected).map((p) => p.id) ?? [],\n conversation_id: conversationId,\n first_name: this.firstName,\n last_name: this.lastName,\n };\n\n if (workflowId) {\n body['workflow_id'] = workflowId;\n body['workflow_inputs'] = workflow_inputs;\n }\n\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'hive-bot-id': this.botId,\n 'domain-authority': this.domainAuthorityValue,\n eventId: this.eventId,\n });\n\n this.http.post(url, body, { headers }).subscribe({\n next: (data) => {\n console.log(data);\n // Additional response handling if needed\n },\n error: (err) => {\n console.error('Error: ', err);\n this.isChatingWithAi = false;\n },\n });\n\n this.input = '';\n this.selectedWorkflow = null;\n this.openWorkflowInput = false;\n this.isWorkflowOpen = false;\n this.scrollToBottom();\n this.cdr.markForCheck();\n }\n\n generateMarkdown(title, obj) {\n // Initialize markdown with the title\n let markdown = `## ${title}\\n`;\n\n // Loop through the object and append the field names and values\n for (const [key, value] of Object.entries(obj)) {\n var key_label =\n this.selectedWorkflow.Trigger.InputSchema.find(\n (input) => input.InputId === key,\n )?.Label || key;\n markdown += `- **${key_label}**: ${value}\\n`;\n }\n\n return markdown;\n }\n\n showWorkflowHistoryDetails(workflow_id) {\n if (!workflow_id) {\n this.workflowExecutionDetails = this.currentWorkflowExecutionDetails;\n this.showWorkflowExecutionDetails = true;\n this.cdr.detectChanges();\n return;\n }\n\n this.botService.getWorkflowExecutionById(workflow_id).subscribe((res) => {\n if (res && res.Actions && Array.isArray(res.Actions)) {\n res.Actions = res.Actions.map((action) => {\n if (action.InsertTimeStamp) {\n action.InsertTimeStamp = formatTimeStamps(\n this.timezone,\n action.InsertTimeStamp,\n );\n }\n return action;\n });\n }\n\n res.InsertTimeStamp = formatTimeStamps(\n this.timezone,\n res.InsertTimeStamp,\n );\n this.workflowExecutionDetails = res;\n this.showWorkflowExecutionDetails = true;\n this.cdr.detectChanges();\n });\n }\n\n closeModal() {\n this.showWorkflowExecutionDetails = false;\n }\n\n objectToArray(obj: any): any[] {\n return Object.keys(obj).map((key) => ({ key, value: obj[key] }));\n }\n\n startNewConversation() {\n this.conversationKey = this.conversationService.getKey(\n this.botId,\n true,\n this.eventId,\n );\n this.chatLog = [this.chatLog[0]];\n this.isChatingWithAi = false;\n this.disconnectAskWebSocket();\n this.scrollToBottom();\n this.cdr.detectChanges();\n }\n\n initializeSpeechRecognizer(token: string) {\n this.speechConfig = SpeechSDK.SpeechConfig.fromAuthorizationToken(\n token,\n this.region,\n );\n const audioConfig = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();\n this.recognizer = new SpeechSDK.SpeechRecognizer(\n this.speechConfig,\n audioConfig,\n );\n\n this.recognizer.recognizing = (s, e) => {\n if (e.result.reason === SpeechSDK.ResultReason.RecognizingSpeech) {\n this.input = e.result.text;\n console.log(`Recognizing: ${e.result.text}`);\n this.cdr.markForCheck();\n }\n };\n\n this.recognizer.recognized = (s, e) => {\n if (e.result.reason === SpeechSDK.ResultReason.RecognizedSpeech) {\n this.input = e.result.text;\n console.log(`Recognized: ${e.result.text}`);\n this.toggleRecording();\n this.cdr.markForCheck();\n }\n };\n\n this.recognizer.canceled = (s, e) => {\n console.error('Canceled: ', e.errorDetails);\n };\n\n this.recognizer.sessionStopped = (s, e) => {\n console.log('Session stopped.');\n this.recognizer.stopContinuousRecognitionAsync();\n this.fetchData();\n };\n }\n\n toggleRecording() {\n this.isRecording = !this.isRecording;\n\n if (this.isRecording) {\n this.startRecognition();\n } else {\n this.stopRecognition();\n }\n }\n\n startRecognition() {\n this.recognizer.startContinuousRecognitionAsync();\n }\n\n stopRecognition() {\n this.recognizer.stopContinuousRecognitionAsync();\n }\n\n checkForCop29BotId() {\n return (\n this.botId == '66fa3f276c5d71e2717bfea8' ||\n this.botId == '671633545652dd78efec848d'\n );\n }\n\n getLatestTime(time): string {\n if (time) {\n return time;\n }\n return new Date().toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n }); // returns current time in 'shortTime' format\n }\n\n /** Used by the voice modal when opened from this drawer. */\n voiceModalConversationId: string = '';\n\n openVoiceModal(): void {\n const conversationId =\n this.conversationKey ??\n this.conversationService.getKey(this.botId, false, this.eventId) ??\n '';\n this.voiceModalConversationId = conversationId;\n this.setupVoiceTranscripts();\n\n // Close existing overlay if any\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n\n const config: VoiceModalConfig = {\n apiUrl: this.environment?.BASE_URL ?? '',\n token: this.s27Token ?? '',\n botId: this.botId ?? '',\n conversationId,\n apiKey: this.apiKey ?? '',\n eventToken: this.eventToken ?? '',\n eventId: this.eventId,\n eventUrl: this.eventUrl ?? '',\n domainAuthority: this.domainAuthorityValue ?? 'prod-lite',\n agentName: this.botName || 'AI Assistant',\n agentRole: this.botSkills || 'AI Agent Specialist',\n agentAvatar: this.botIcon,\n usersApiUrl: this.environment?.USERS_API ?? '',\n };\n\n const closeCallback = () => {\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n this.closeVoiceModal();\n };\n\n const injector = Injector.create(\n [\n { provide: VOICE_MODAL_CONFIG, useValue: config },\n { provide: VOICE_MODAL_CLOSE_CALLBACK, useValue: closeCallback },\n ],\n this.injector,\n );\n\n const overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n positionStrategy: this.overlay\n .position()\n .global()\n .bottom('0')\n .right('0')\n .left('0')\n .top('0'),\n });\n\n const portal = new ComponentPortal(\n VoiceAgentModalComponent,\n this.viewContainerRef,\n injector,\n );\n overlayRef.attach(portal);\n this.voiceModalOverlayRef = overlayRef;\n this.cdr.markForCheck();\n }\n\n closeVoiceModal(): void {\n if (this.voiceModalOverlayRef) {\n this.voiceModalOverlayRef.detach();\n this.voiceModalOverlayRef.dispose();\n this.voiceModalOverlayRef = null;\n }\n this.isVoiceModalOpen = false;\n this.voiceAgentService.disconnect();\n this.cdr.markForCheck();\n\n // Reload chat history when voice modal closes (same as initial load)\n this.chatLog = [];\n this.fetchChatHistory().subscribe(\n (response) => {\n this.loading = false;\n this.mapChatHistory(response);\n this.cdr.markForCheck();\n },\n (err) => {\n this.loading = false;\n this.cdr.markForCheck();\n console.error(\n 'Error fetching chat history after voice modal close:',\n err,\n );\n // Fallback: show greeting so chat is not empty\n if (this.chatLog.length === 0 && this.greetingMsg) {\n this.mapChatHistory({ Messages: [] });\n }\n },\n );\n }\n\n private setupVoiceTranscripts(): void {\n // Clear existing subscriptions\n this.voiceTranscriptSubscriptions.forEach((sub) => sub.unsubscribe());\n this.voiceTranscriptSubscriptions = [];\n\n // Subscribe to user transcripts\n const userSub = this.voiceAgentService.userTranscript$.subscribe(\n (transcript) => {\n if (transcript.final && transcript.text.trim()) {\n // Add user message to chat\n this.chatLog.push({\n type: 'user',\n message: this.processMessageForDisplay(transcript.text),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n this.cdr.markForCheck();\n this.scrollToBottom();\n }\n },\n );\n\n // Subscribe to bot transcripts\n const botSub = this.voiceAgentService.botTranscript$.subscribe(\n (transcript) => {\n if (transcript && transcript.trim()) {\n // Check if last message is from bot, update it, otherwise add new\n const lastMessage = this.chatLog[this.chatLog.length - 1];\n if (lastMessage && lastMessage.type === 'ai') {\n lastMessage.message = this.processMessageForDisplay(transcript);\n } else {\n this.chatLog.push({\n type: 'ai',\n message: this.processMessageForDisplay(transcript),\n time: formatNow(this.timezone),\n copied: false,\n isCollapsedTrue: false,\n });\n this.showFeedBackIconsIndex = this.chatLog.length - 1;\n }\n this.cdr.markForCheck();\n this.scrollToBottom();\n }\n },\n );\n\n this.voiceTranscriptSubscriptions.push(userSub, botSub);\n }\n}\n\nexport { VoiceModalConfig } from '../voice-agent/voice-modal-tokens';\n","<!-- <button\n *ngIf=\"isShowEditorButton && !checkForCop29BotId()\"\n (click)=\"openOuterEditor()\"\n class=\"fixed-btn\"\n>\n <span style=\"font-size: 12px\" class=\"material-icons notranslate\">\n create\n </span>\n Editor\n</button> -->\n\n<button\n *ngIf=\"!isShowEditorButton\"\n (click)=\"onCloseEditor()\"\n class=\"fixed-btn-close\"\n>\n <span style=\"font-size: 12px\" class=\"material-icons notranslate\">\n close\n </span>\n {{ getTranslation(\"Close\") }}\n</button>\n\n<mat-drawer-container\n class=\"hivegpt-chat-bot-wrapper\"\n [ngClass]=\"{ 'mat-drawer-container-has-open': isDrawerOpen }\"\n [class.ios-device]=\"isIOSDevice\"\n [hasBackdrop]=\"hasBackdropValue\"\n>\n <mat-drawer\n class=\"drawer\"\n #drawer\n [position]=\"'start'\"\n [mode]=\"'over'\"\n opened=\"true\"\n [class.full-width-drawer]=\"fullView\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <div class=\"chat-main\">\n <!-- <div class=\"chat-header\">\n <h2> -->\n <!-- {{eventName}} -->\n <!-- </h2> -->\n <!-- <button class=\"closeIcon\" (click)=\"onClose()\">\n <span class=\"material-symbols-outlined\">\n close\n </span>\n </button> -->\n <!-- </div> -->\n\n <div class=\"innerChat\" #chatMain>\n <div (click)=\"startNewConversation()\" class=\"new-conversationbutton2\">\n {{ getTranslation(\"New Chat\") }}\n <span\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14.061\"\n height=\"14.261\"\n viewBox=\"0 0 14.061 14.261\"\n >\n <path\n id=\"Path_164\"\n data-name=\"Path 164\"\n d=\"M10.146,5.075H4.531A1.544,1.544,0,0,0,3,6.631v7.262A1.544,1.544,0,0,0,4.531,15.45h7.146a1.544,1.544,0,0,0,1.531-1.556V8.187m-7.146,4.15L15.25,3m0,0H11.677M15.25,3V6.631\"\n transform=\"translate(-2.25 -1.939)\"\n fill=\"none\"\n stroke=\"#06f\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.5\"\n />\n </svg>\n </span>\n </div>\n <div\n (click)=\"closeBot.emit()\"\n class=\"chat-close-button\"\n role=\"button\"\n [attr.aria-label]=\"getTranslation('Close') || 'Close'\"\n [attr.title]=\"getTranslation('Close') || 'Close'\"\n >\n \n <span class=\"chat-close-button-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </span>\n </div>\n <div class=\"bot-sticky-header-chat\">\n <div class=\"title_chat\">\n <h2>\n <p>\n {{ getTranslation(botName) }}\n <!-- <svg\n *ngIf=\"!checkForCop29BotId()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"31.499\"\n height=\"31.501\"\n viewBox=\"0 0 31.499 31.501\"\n >\n <path\n id=\"Icon_ion-shield-checkmark\"\n data-name=\"Icon ion-shield-checkmark\"\n d=\"M33.685,7.83a1.125,1.125,0,0,0-.925-1.036,49.227,49.227,0,0,1-14.3-4.444,1.125,1.125,0,0,0-.927,0A49.226,49.226,0,0,1,3.24,6.794,1.125,1.125,0,0,0,2.315,7.83a27.621,27.621,0,0,0,1.718,11.9A24.572,24.572,0,0,0,9.07,27.641a25.712,25.712,0,0,0,8.513,6.028,1.125,1.125,0,0,0,.844,0,25.712,25.712,0,0,0,8.513-6.028,24.572,24.572,0,0,0,5.027-7.911,27.621,27.621,0,0,0,1.718-11.9Zm-9.211,5.281-7.791,9a1.125,1.125,0,0,1-.8.389h-.046a1.125,1.125,0,0,1-.788-.322L11.587,18.79a1.125,1.125,0,1,1,1.575-1.607l2.6,2.552,7.01-8.1a1.125,1.125,0,0,1,1.7,1.472Z\"\n transform=\"translate(-2.25 -2.25)\"\n fill=\"#06f\"\n />\n </svg> -->\n </p>\n <span *ngIf=\"!checkForCop29BotId()\">\n <p class=\"small-title\">\n {{ getTranslation(\"AI-powered\")\n }}<span>{{ getTranslation(\"copilot\") }}</span>\n </p>\n </span>\n </h2>\n </div>\n <div class=\"chatType\" style=\"display: none\">\n <h4 class=\"labelChat\">Choose a conversation style</h4>\n <ul>\n <li (click)=\"changeTemperature(0)\">\n <button [ngClass]=\"{ active: temperature === 0 }\">\n <span class=\"top-section-title\"> More Creative </span>\n </button>\n </li>\n <li (click)=\"changeTemperature(1)\" class=\"fdssfd\">\n <button [ngClass]=\"{ active: temperature === 1 }\">\n <span class=\"top-section-title\"> More Balanced </span>\n </button>\n </li>\n <li (click)=\"changeTemperature(2)\">\n <button [ngClass]=\"{ active: temperature === 2 }\">\n <span class=\"top-section-title\"> More Precise </span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n <!-- chattype -->\n <div\n id=\"botAllChat\"\n class=\"chat\"\n [ngClass]=\"{\n botUser: chat?.type === 'user',\n botAi: chat?.type !== 'user'\n }\"\n *ngFor=\"let chat of chatLog; let i = index\"\n >\n <div class=\"chat-box\" *ngIf=\"!(i === 0 && botSkills)\">\n <div class=\"message\">\n <div\n class=\"time-cta\"\n [ngClass]=\"{\n 'time-cta din': showFeedBackIconsIndex === i,\n 'time-cta': showFeedBackIconsIndex != i\n }\"\n >\n <div\n class=\"Icon_TimeSTamp\"\n *ngIf=\"chat?.type === 'ai' && !(i === 0 && botSkills)\"\n >\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span style=\"color: #000 !important;\">{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n\n <div\n class=\"Icon_TimeSTamp\"\n *ngIf=\"\n chat?.type === 'session_cards' ||\n chat?.type === 'attendee_cards'\n \"\n >\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n\n <div class=\"Icon_TimeSTamp\" *ngIf=\"chat?.type === 'user'\">\n <div class=\"user-Box\">\n <div class=\"dateTime\">\n <span>{{ getTranslation(\"You\") }}</span>\n {{ chat?.time }}\n </div>\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"userAvatarUrl\"\n [src]=\"userAvatarUrl\"\n alt=\"You\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!userAvatarUrl\"\n class=\"chat-avatar-initials chat-avatar-initials-user\"\n >{{ getUserIdInitials() }}</span\n >\n </div>\n </div>\n <div class=\"bards\">\n <div\n class=\"bars\"\n *ngIf=\"\n chat?.WorkflowExecutionId ||\n chat?.showWorkflowExecutionLoader\n \"\n >\n <button\n class=\"icon-button\"\n (click)=\"\n showWorkflowHistoryDetails(chat.WorkflowExecutionId)\n \"\n >\n <i class=\"fas fa-bars\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"researchingCard\"\n *ngIf=\"\n (chat?.searchTerms && chat?.searchTerms.length > 0) ||\n (chat?.sourcesList && chat?.sourcesList?.length > 0)\n \"\n >\n <div\n class=\"card-header d-flex align-items-center\"\n (click)=\"toggleCollapse()\"\n >\n <span class=\"icon\"\n ><i class=\"bx bx-plus-circle bx-sm\"></i\n ></span>\n <span class=\"ml-2\"\n >Researching\n <i\n id=\"toggleIcon\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fa-chevron-down': isCollapsed,\n 'fa-chevron-up': !isCollapsed\n }\"\n ></i\n ></span>\n </div>\n <div\n *ngIf=\"chat?.searchTerms && chat?.searchTerms.length > 0\"\n [ngClass]=\"{ collapse: isCollapsed }\"\n >\n <ul class=\"list-group list-group-flush uptList\">\n <li\n *ngFor=\"let term of chat?.searchTerms\"\n class=\"list-group-item\"\n >\n Searching for\n <strong>{{ term }}</strong>\n </li>\n </ul>\n\n <h5\n class=\"mt-2\"\n *ngIf=\"chat?.sourcesList && chat?.sourcesList.length > 0\"\n >\n <i class=\"bx bx-unite\"></i> Sources\n </h5>\n <div\n class=\"sources-container\"\n *ngIf=\"chat?.sourcesList && chat?.sourcesList.length > 0\"\n >\n <div\n class=\"source-card\"\n *ngFor=\"\n let source of chat?.displayedSources;\n let i = index\n \"\n >\n <div>\n <div class=\"source-title\">{{ source.title }}</div>\n <div class=\"source-url\">\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n {{ getDomainName(source.link) }}\n </div>\n <div class=\"popup\">\n <div\n class=\"source-url\"\n (click)=\"openLinkInNewTab(source.link)\"\n >\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n {{ getDomainName(source.link) }}\n </div>\n <h5 (click)=\"openLinkInNewTab(source.link)\">\n {{ source.title }}\n </h5>\n <p (click)=\"openLinkInNewTab(source.link)\">\n {{ source.desc }}\n </p>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"\n chat?.remainingSources &&\n chat?.remainingSources.length > 0\n \"\n >\n <div\n class=\"source-card\"\n (click)=\"onCardClick(chat?.sourcesList)\"\n >\n <div>\n <div class=\"source-title\">\n <img\n *ngFor=\"\n let source of chat?.remainingSources;\n let i = index\n \"\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n </div>\n <div class=\"source-url\">\n View {{ chat?.remainingSources.length }} more\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Session cards (from get_event_sessions tool, same as React Native) -->\n <div\n class=\"session-cards-section\"\n *ngIf=\"\n chat?.type === 'session_cards' &&\n chat?.sessionCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"session-cards-container\">\n <div\n *ngFor=\"\n let session of getVisibleSessionCards(chat);\n let idx = index\n \"\n class=\"session-card-item\"\n [class.session-card-item-ondemand]=\"isSessionOndemand(session)\"\n >\n <!-- OnDemand design: pill, Available Anytime, title, description -->\n <ng-container *ngIf=\"isSessionOndemand(session)\">\n <span class=\"session-card-ondemand-badge\">{{ getTranslation('ON DEMAND') || 'ON DEMAND' }}</span>\n <div class=\"session-card-ondemand-available\">{{ getTranslation('Available Anytime') || 'Available Anytime' }}</div>\n <div class=\"session-card-title session-card-ondemand-title\">{{ session.title }}</div>\n <div\n class=\"session-card-description session-card-ondemand-desc\"\n *ngIf=\"session.description\"\n >\n {{ session.description }}\n </div>\n <div\n class=\"session-card-actions-row\"\n *ngIf=\"session.session && getSessionRoleButtons(session).length > 0\"\n >\n <div class=\"speakers-UIcard\"></div>\n <div class=\"session-card-actions\">\n <button\n *ngFor=\"let role of getSessionRoleButtons(session)\"\n type=\"button\"\n class=\"btn session-card-btn\"\n [class.session-card-btn-primary]=\"role.action === 'join'\"\n [class.session-card-btn-secondary]=\"role.action === 'watch'\"\n [class.session-card-btn-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [attr.aria-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [disabled]=\"!canPerformSessionAction(session)\"\n (click)=\"onSessionCardAction(session, role)\"\n >\n {{ role.label }}\n </button>\n </div>\n </div>\n </ng-container>\n <!-- Default (Live/Breakout) design: date badge, room/time, title, meta, description, actions -->\n <ng-container *ngIf=\"!isSessionOndemand(session)\">\n <div class=\"session-card-header\">\n <div class=\"session-card-date-badge\">\n <ng-container *ngIf=\"session.dateDay || session.dateMonth\">\n <span class=\"session-card-date-day\">{{\n session.dateDay\n }}</span>\n <span class=\"session-card-date-month\">{{\n session.dateMonth\n }}</span>\n </ng-container>\n <span\n *ngIf=\"!session.dateDay && !session.dateMonth\"\n class=\"session-card-date-na\"\n >{{ getTranslation('N/A') || 'N/A' }}</span>\n </div>\n <div class=\"session-card-room-time\">\n <div\n class=\"session-card-room\"\n *ngIf=\"session.room\"\n >\n {{ session.room }}\n </div>\n <div\n class=\"session-card-time\"\n *ngIf=\"session.timeRangeWithTz || session.timeRange\"\n >\n {{ session.timeRangeWithTz || session.timeRange }}\n </div>\n </div>\n </div>\n <div class=\"session-card-title\">{{ session.title }}</div>\n <div\n class=\"session-card-meta\"\n *ngIf=\"(session.organizer && session.organizer.length) || (session.meetingType && session.meetingType.length)\"\n >\n <div class=\"session-card-meta-row\" *ngIf=\"session.organizer && session.organizer.length\">\n <span class=\"session-card-meta-label\">{{\n (getTranslation(\"Organizer\") || \"Organizer\") + \":\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.organizer }}</span>\n </div>\n <!-- <div class=\"session-card-meta-row\" *ngIf=\"session.timeZoneDisplay\">\n <span class=\"session-card-meta-label\">{{\n getTranslation(\"Time zone\") || \"Time zone\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.timeZoneDisplay }}</span>\n </div> -->\n <div class=\"session-card-meta-row\" *ngIf=\"session.meetingType && session.meetingType.length\">\n <span class=\"session-card-meta-label\">{{\n getSessionTypeLabel() + \":\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.meetingType }}</span>\n </div>\n </div>\n <div\n class=\"session-card-description\"\n *ngIf=\"session.description\"\n >\n {{ session.description }}\n </div>\n <div\n class=\"session-card-status\"\n *ngIf=\"\n (session.statusText && session.statusText.length) &&\n getSessionRoleButtons(session).length > 0\n \"\n >\n <span class=\"session-card-status-bullet\"></span>\n {{ session.statusText }}\n </div>\n <!-- <div\n class=\"session-card-when-disable\"\n *ngIf=\"\n session.session?.sessionRoles?.length > 0 &&\n !isSessionOndemand(session) &&\n !session.session?.isExpire &&\n !canPerformSessionAction(session)\n \"\n >\n {{ getTranslation(\"You can join/watch at the starting time\") || \"You can join/watch at the starting time\" }}\n </div> -->\n \n <div\n class=\"session-card-actions-row\"\n *ngIf=\"\n session.session &&\n (getSessionRoleButtons(session).length > 0 || hasSessionCardSpeakers(session))\n \"\n >\n <div class=\"speakers-UIcard\">\n <ng-container\n *ngIf=\"\n (session?.speakersList || session?.session?.speakersList || []).length\n as _speakerCount\n \"\n >\n <ng-container\n *ngFor=\"\n let sp of (session?.speakersList || session?.session?.speakersList || []);\n let i = index\n \"\n >\n <ng-container *ngIf=\"i < 3\">\n <div class=\"speaker\" *ngIf=\"getSpeakerPhotoUrl(sp); else speakerInitials\">\n <img\n [src]=\"getSpeakerPhotoUrl(sp)!\"\n [alt]=\"getSpeakerDisplayName(sp) || 'Speaker'\"\n />\n </div>\n <ng-template #speakerInitials>\n <div class=\"speaker initials\">\n {{ getSpeakerInitials(sp) }}\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <div class=\"speaker initials\" *ngIf=\"_speakerCount > 3\">\n +{{ _speakerCount - 3 }}\n </div>\n </ng-container>\n </div>\n <div class=\"session-card-actions\">\n <button\n *ngFor=\"let role of getSessionRoleButtons(session)\"\n type=\"button\"\n class=\"btn session-card-btn\"\n [class.session-card-btn-primary]=\"\n role.action === 'join'\n \"\n [class.session-card-btn-secondary]=\"\n role.action === 'watch'\n \"\n [class.session-card-btn-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [attr.aria-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [disabled]=\"!canPerformSessionAction(session)\"\n (click)=\"onSessionCardAction(session, role)\"\n >\n {{ role.label }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.sessionCards?.length || 0) -\n SESSION_CARDS_INITIAL >\n 4 &&\n !expandedSessionCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSessionCards(chat)\"\n >\n Show\n {{\n (chat?.sessionCards?.length || 0) - SESSION_CARDS_INITIAL\n }}\n more\n {{\n (chat?.sessionCards?.length || 0) -\n SESSION_CARDS_INITIAL ===\n 1\n ? getTranslation(\"session\") || \"session\"\n : getTranslation(\"sessions\") || \"sessions\"\n }}\n </button>\n </div>\n\n <!-- Attendee cards (from get_event_attendees tool, same as React Native) -->\n <div\n class=\"attendee-cards-section\"\n *ngIf=\"\n chat?.type === 'attendee_cards' &&\n chat?.attendeeCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let attendee of getVisibleAttendeeCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [class.attendee-card-has-video]=\"!!getAttendeeVideoUrl(attendee)\"\n [style.background-image]=\"\n !getAttendeeVideoUrl(attendee) && attendee.photo\n ? 'url(' + attendee.photo + ')'\n : null\n \"\n >\n <ng-container *ngIf=\"getAttendeeVideoUrl(attendee)\">\n <video\n #attendeeVideo\n class=\"attendee-card-video\"\n [attr.poster]=\"getAttendeeVideoPoster(attendee) || null\"\n [muted]=\"isAttendeeVideoMuted(chat, attendee)\"\n playsinline\n preload=\"metadata\"\n (play)=\"onAttendeeVideoPlayState(chat, attendee, true)\"\n (pause)=\"onAttendeeVideoPlayState(chat, attendee, false)\"\n (ended)=\"onAttendeeVideoPlayState(chat, attendee, false)\"\n (click)=\"toggleAttendeeVideoPlay(chat, attendee, attendeeVideo, $event)\"\n >\n <source\n [attr.src]=\"getAttendeeVideoUrl(attendee)\"\n type=\"video/webm\"\n />\n </video>\n\n <button\n type=\"button\"\n class=\"attendee-card-mute-btn\"\n (click)=\"toggleAttendeeVideoMute(chat, attendee, attendeeVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoMuted(chat, attendee)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoMuted(chat, attendee)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoMuted(chat, attendee)\n ? \"volume_off\"\n : \"volume_up\"\n }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"attendee-card-play-btn\"\n (click)=\"toggleAttendeeVideoPlay(chat, attendee, attendeeVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoPlaying(chat, attendee)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoPlaying(chat, attendee)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoPlaying(chat, attendee)\n ? \"pause\"\n : \"play_arrow\"\n }}\n </span>\n </button>\n </ng-container>\n\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!getAttendeeVideoUrl(attendee) && !attendee.photo\"\n >\n {{ getAttendeeInitials(attendee.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ attendee.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"attendee.company\"\n >\n {{ attendee.company }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, attendee)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, attendee)\"\n *ngIf=\"getAttendeeDescription(attendee)\"\n >\n {{ getAttendeeDescription(attendee) }}\n </div>\n \n <div class=\"attendee-buttons\">\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n checkPendingSentRequest(attendee.id)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-request-sent\"\n disabled\n [attr.title]=\"\n getTranslation('Request Sent') || 'Request Sent'\n \"\n >\n {{\n getTranslation(\"Request Sent\") || \"Request Sent\"\n }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n canFollowUser(attendee)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-connect\"\n [attr.title]=\"\n getTranslation('Connect') || 'Connect'\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n connect: true\n })\n \"\n >\n {{ getTranslation(\"Connect\") || \"Connect\" }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n canUnfollowUser(attendee)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-disconnect\"\n [attr.title]=\"\n getTranslation('Disconnect') || 'Disconnect'\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n disconnect: true\n })\n \"\n >\n {{\n getTranslation(\"Disconnect\") || \"Disconnect\"\n }}\n </button>\n </ng-container>\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [disabled]=\"!attendee.id\"\n [attr.title]=\"\n !attendee.id\n ? getTranslation('Profile not available') ||\n 'Profile not available'\n : (getTranslation('View Profile') || 'View Profile')\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n viewProfile: true\n })\n \"\n >\n {{ getTranslation(\"View Profile\") || \"View Profile\" }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL >\n 4 &&\n !expandedAttendeeCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandAttendeeCards(chat)\"\n >\n Show\n {{\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL\n }}\n more\n {{\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL ===\n 1\n ? getTranslation(\"attendee\") || \"attendee\"\n : getTranslation(\"attendees\") || \"attendees\"\n }}\n </button>\n </div>\n\n <!-- Speaker cards (from get_event_speakers tool, same layout/behavior as attendee cards) -->\n <div\n class=\"speaker-cards-section\"\n *ngIf=\"\n chat?.type === 'speaker_cards' &&\n chat?.speakerCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let speaker of getVisibleSpeakerCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [class.attendee-card-has-video]=\"!!getAttendeeVideoUrl(speaker)\"\n [style.background-image]=\"\n !getAttendeeVideoUrl(speaker) && speaker.photo\n ? 'url(' + speaker.photo + ')'\n : null\n \"\n >\n <ng-container *ngIf=\"getAttendeeVideoUrl(speaker)\">\n <video\n #speakerVideo\n class=\"attendee-card-video\"\n [attr.poster]=\"getAttendeeVideoPoster(speaker) || null\"\n [muted]=\"isAttendeeVideoMuted(chat, speaker)\"\n playsinline\n preload=\"metadata\"\n (play)=\"onAttendeeVideoPlayState(chat, speaker, true)\"\n (pause)=\"onAttendeeVideoPlayState(chat, speaker, false)\"\n (ended)=\"onAttendeeVideoPlayState(chat, speaker, false)\"\n (click)=\"toggleAttendeeVideoPlay(chat, speaker, speakerVideo, $event)\"\n >\n <source\n [attr.src]=\"getAttendeeVideoUrl(speaker)\"\n type=\"video/webm\"\n />\n </video>\n\n <button\n type=\"button\"\n class=\"attendee-card-mute-btn\"\n (click)=\"toggleAttendeeVideoMute(chat, speaker, speakerVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoMuted(chat, speaker)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoMuted(chat, speaker)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoMuted(chat, speaker)\n ? \"volume_off\"\n : \"volume_up\"\n }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"attendee-card-play-btn\"\n (click)=\"toggleAttendeeVideoPlay(chat, speaker, speakerVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoPlaying(chat, speaker)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoPlaying(chat, speaker)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoPlaying(chat, speaker)\n ? \"pause\"\n : \"play_arrow\"\n }}\n </span>\n </button>\n </ng-container>\n\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!getAttendeeVideoUrl(speaker) && !speaker.photo\"\n >\n {{ getAttendeeInitials(speaker.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ speaker.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"speaker.jobTitle\"\n >\n {{ speaker.jobTitle }}\n </div>\n <div\n class=\"attendee-company\"\n *ngIf=\"speaker.company\"\n >\n {{ speaker.company }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, speaker)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, speaker)\"\n *ngIf=\"getAttendeeDescription(speaker)\"\n >\n {{ getAttendeeDescription(speaker) }}\n </div>\n \n\n <div class=\"attendee-buttons\">\n \n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [disabled]=\"!speaker.id\"\n [attr.title]=\"\n !speaker.id\n ? getTranslation('Profile not available') ||\n 'Profile not available'\n : (getTranslation('View Profile') || 'View Profile')\n \"\n (click)=\"\n chat?.type === 'speaker_cards'\n ? viewSpeakerProfile.emit({\n speaker,\n speakers: chat.speakerCards || []\n })\n : speaker.id &&\n connectWithUser.emit({\n userId: speaker.id,\n viewProfile: true\n })\n \"\n >\n {{\n getTranslation('View Profile') || 'View Profile'\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL >\n 4 &&\n !expandedSpeakerCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSpeakerCards(chat)\"\n >\n Show\n {{\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL\n }}\n more\n {{\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL ===\n 1\n ? getTranslation('speaker') || 'speaker'\n : getTranslation('speakers') || 'speakers'\n }}\n </button>\n </div>\n\n <!-- Sponsor cards (from get_event_sponsors tool, booth-rep style) -->\n <div\n class=\"sponsor-cards-section\"\n *ngIf=\"\n chat?.type === 'sponsor_cards' &&\n chat?.sponsorCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"booth-rep-card-grid\">\n <div\n *ngFor=\"\n let sponsor of getVisibleSponsorCards(chat);\n let idx = index\n \"\n class=\"booth-rep-card\"\n >\n <div class=\"booth-rep-card-logo\">\n <span\n class=\"booth-rep-card-logo-placeholder\"\n *ngIf=\"!sponsor.logoUrl\"\n >\n {{ sponsor.boothTitle ? sponsor.boothTitle.charAt(0) : (sponsor.name ? sponsor.name.charAt(0) : '') }}\n </span>\n <img\n *ngIf=\"sponsor.logoUrl\"\n [src]=\"sponsor.logoUrl\"\n [alt]=\"sponsor.boothTitle || sponsor.name\"\n />\n </div>\n <h3 class=\"booth-rep-card-title\">\n {{ sponsor.boothTitle || sponsor.name }}\n </h3>\n <p\n class=\"booth-rep-card-desc\"\n *ngIf=\"sponsor.description\"\n >\n {{ sponsor.description }}\n </p>\n <button\n type=\"button\"\n class=\"booth-rep-card-btn\"\n (click)=\"viewBooth.emit({ boothId: sponsor.boothID, boothUrl: sponsor.url, sponsor })\"\n >\n {{ getTranslation('View Sponsor') || 'View Sponsor' }}\n </button>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL >\n 4 &&\n !expandedSponsorCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSponsorCards(chat)\"\n >\n Show\n {{\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL\n }}\n more\n {{\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL ===\n 1\n ? getTranslation('sponsor') || 'sponsor'\n : getTranslation('sponsors') || 'sponsors'\n }}\n </button>\n </div>\n\n <!-- Booth representative cards (from get_booth_representatives tool, same design as attendee cards) -->\n <div\n class=\"attendee-cards-section booth-rep-cards-section\"\n *ngIf=\"\n chat?.type === 'booth_rep_cards' &&\n chat?.boothRepCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let rep of getVisibleBoothRepCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [style.background-image]=\"rep.photo ? 'url(' + rep.photo + ')' : null\"\n >\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!rep.photo\"\n >\n {{ getAttendeeInitials(rep.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ rep.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"rep.company\"\n >\n {{ rep.company }}\n </div>\n <div\n class=\"attendee-company\"\n *ngIf=\"rep.jobTitle\"\n >\n {{ rep.jobTitle }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, rep)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, rep)\"\n *ngIf=\"getAttendeeDescription(rep)\"\n >\n {{ getAttendeeDescription(rep) }}\n </div>\n <div class=\"attendee-buttons\">\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n checkPendingSentRequest(rep.id)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-request-sent\"\n disabled\n [attr.title]=\"\n getTranslation('Request Sent') || 'Request Sent'\n \"\n >\n {{\n getTranslation(\"Request Sent\") || \"Request Sent\"\n }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n canFollowUser(rep)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-connect\"\n [attr.title]=\"\n getTranslation('Connect') || 'Connect'\n \"\n (click)=\"\n rep.id &&\n connectWithUser.emit({\n userId: rep.id,\n connect: true\n })\n \"\n >\n {{ getTranslation(\"Connect\") || \"Connect\" }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n canUnfollowUser(rep)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-disconnect\"\n [attr.title]=\"\n getTranslation('Disconnect') || 'Disconnect'\n \"\n (click)=\"\n rep.id &&\n connectWithUser.emit({\n userId: rep.id,\n disconnect: true\n })\n \"\n >\n {{\n getTranslation(\"Disconnect\") || \"Disconnect\"\n }}\n </button>\n </ng-container>\n <button\n *ngIf=\"rep.id\"\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [attr.title]=\"getTranslation('View Profile') || 'View Profile'\"\n (click)=\"\n connectWithUser.emit({\n userId: rep.id,\n viewProfile: true\n })\n \"\n >\n {{ getTranslation('View Profile') || 'View Profile' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL >\n 4 &&\n !expandedBoothRepCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandBoothRepCards(chat)\"\n >\n Show\n {{\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL\n }}\n more\n {{\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL ===\n 1\n ? getTranslation('representative') || 'representative'\n : getTranslation('representatives') || 'representatives'\n }}\n </button>\n </div>\n\n <div\n class=\"chat-bubble-wrap\"\n *ngIf=\"\n (chat?.type === 'ai' || chat?.type === 'user') &&\n !(i === 0 && botSkills)\n \"\n [ngStyle]=\"{\n background:\n chat?.type === 'ai'\n ? bgBubbleAi || '#fff'\n : chat?.type === 'user'\n ? bgBubbleUser || '#183988'\n : 'transparent',\n color:\n chat?.type === 'ai'\n ? '#000 !important'\n : '#fff !important'\n }\"\n >\n <div id=\"messageText_{{ i }}\" class=\"chat-bubble-content\">\n <div\n *ngIf=\"chat?.type === 'ai' || chat?.type === 'user'\"\n [ngClass]=\"{\n 'SearchTitle ai': chat?.type === 'ai',\n 'SearchTitle user': chat?.type === 'user'\n }\"\n [ngStyle]=\"{\n background: 'transparent',\n color:\n chat?.type === 'ai' && messageTextColorAi\n ? messageTextColorAi\n : chat?.type === 'user'\n ? messageTextColorUser || '#fff'\n : 'defaultColor'\n }\"\n [innerHTML]=\"chat?.message\"\n ></div>\n </div>\n </div>\n\n <div\n class=\"progress-container\"\n *ngIf=\"chat?.showWorkflowExecutionLoader\"\n >\n <div class=\"circular-loader\">\n <div\n class=\"loader-spinner\"\n *ngIf=\"currentWorkflowActionProgress < 100\"\n [ngStyle]=\"{\n transform: 'rotate(' + percentage * 3.6 + 'deg)'\n }\"\n ></div>\n <div\n class=\"checkmark\"\n *ngIf=\"currentWorkflowActionProgress == 100\"\n >\n <svg viewBox=\"0 0 52 52\">\n <circle\n class=\"checkmark-circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkmark-check\"\n fill=\"none\"\n d=\"M14 27l7 7 16-16\"\n />\n </svg>\n </div>\n\n <div\n class=\"loader-text\"\n *ngIf=\"currentWorkflowActionProgress < 100\"\n >\n {{ currentWorkflowActionProgress }}%\n </div>\n </div>\n <div class=\"loader-label\">{{ currentWorkflowAction }}...</div>\n </div>\n\n <div\n class=\"exicution mt-2\"\n *ngIf=\"\n chat?.type === 'ai' &&\n chat?.graphs &&\n chat?.graphs.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-network-chart\"></i> Graphs\n <i\n (click)=\"toggleCollapseFGraph()\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fas fa-chevron-down': isCollapsedForFGraph,\n 'fas fa-chevron-up': !isCollapsedForFGraph\n }\"\n ></i>\n </h5>\n <img\n *ngFor=\"let image of chat?.graphs\"\n class=\"graph-img\"\n [ngClass]=\"{ collapse: isCollapsedForFGraph }\"\n [src]=\"image\"\n alt=\"\"\n />\n </div>\n <ng-container *ngIf=\"!checkForCop29BotId()\">\n <div\n class=\"exicution mt-2\"\n *ngIf=\"\n chat?.type === 'ai' &&\n chat?.executionGraphs &&\n chat?.executionGraphs?.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-network-chart\"></i> Execution Path Diagram\n For Data Visualization Workflow\n <i\n (click)=\"toggleCollapseGraph()\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fas fa-chevron-down': isCollapsedForGraph,\n 'fas fa-chevron-up': !isCollapsedForGraph\n }\"\n ></i>\n </h5>\n <img\n *ngFor=\"let image of chat?.executionGraphs\"\n class=\"graph-img\"\n [ngClass]=\"{ collapse: isCollapsedForGraph }\"\n [src]=\"image\"\n alt=\"\"\n />\n </div>\n </ng-container>\n <div class=\"cta\" *ngIf=\"chat?.type === 'ai' && i > 0 && i === lastAiMessageIndex\">\n <div\n class=\"copyBox\"\n title=\"Copy\"\n [ngClass]=\"\n showFeedBackIconsIndex == i ? 'show-always' : 'show-hover'\n \"\n >\n <button\n title=\"{{ chat?.copied ? 'Copied!' : 'Copy' }}\"\n class=\"copy\"\n [class.active]=\"chat?.copied\"\n (click)=\"handleCopyClick(i)\"\n >\n <i *ngIf=\"chat?.copied\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n\n <i *ngIf=\"!chat?.copied\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.24 2H8.84C8.14 2 7.58 2.56 7.58 3.26V16.84C7.58 17.54 8.14 18.1 8.84 18.1H19.24C19.94 18.1 20.5 17.54 20.5 16.84V3.26C20.5 2.56 19.94 2 19.24 2ZM19.24 16.84H8.84V3.26H19.24V16.84ZM4.74 6.52C4.04 6.52 3.48 7.08 3.48 7.78V20.36C3.48 21.06 4.04 21.62 4.74 21.62H15.14C15.84 21.62 16.4 21.06 16.4 20.36V18.88H14.96V20.36H4.74V7.78H6.18V6.52H4.74Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n </button>\n<!-- \n <button\n *ngIf=\"!checkForCop29BotId()\"\n class=\"up copy\"\n title=\"{{ chat?.isEditor ? 'Added!' : 'Add to editor' }}\"\n (click)=\"handleEditorClick(i)\"\n >\n <svg\n *ngIf=\"!chat?.isEditor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20.152\"\n height=\"20.152\"\n viewBox=\"0 0 20.152 20.152\"\n >\n <g\n id=\"Icon_feather-edit\"\n data-name=\"Icon feather-edit\"\n transform=\"translate(-2.5 -2.166)\"\n >\n <path\n id=\"Path_166\"\n data-name=\"Path 166\"\n d=\"M11.5,6H4.889A1.889,1.889,0,0,0,3,7.889v13.22A1.889,1.889,0,0,0,4.889,23h13.22A1.889,1.889,0,0,0,20,21.108V14.5\"\n transform=\"translate(0 -1.179)\"\n fill=\"none\"\n stroke=\"#393939\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1\"\n />\n <path\n id=\"Path_167\"\n data-name=\"Path 167\"\n d=\"M21.915,3.4a2,2,0,0,1,2.833,2.833l-8.971,8.971L12,16.152l.944-3.777Z\"\n transform=\"translate(-3.334 0)\"\n fill=\"none\"\n stroke=\"#393939\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1\"\n />\n </g>\n </svg>\n\n <i *ngIf=\"chat?.isEditor\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n </button> -->\n\n <button\n class=\"up copy\"\n title=\"Like\"\n [class.active]=\"chat?.liked\"\n (click)=\"handleUpClick(i)\"\n >\n <i *ngIf=\"chat?.liked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.38989 18.4902V8.33022C8.38989 7.93022 8.50989 7.54022 8.72989 7.21022L11.4599 3.15022C11.8899 2.50022 12.9599 2.04022 13.8699 2.38022C14.8499 2.71022 15.4999 3.81022 15.2899 4.79022L14.7699 8.06022C14.7299 8.36022 14.8099 8.63022 14.9799 8.84022C15.1499 9.03022 15.3999 9.15022 15.6699 9.15022H19.7799C20.5699 9.15022 21.2499 9.47022 21.6499 10.0302C22.0299 10.5702 22.0999 11.2702 21.8499 11.9802L19.3899 19.4702C19.0799 20.7102 17.7299 21.7202 16.3899 21.7202H12.4899C11.8199 21.7202 10.8799 21.4902 10.4499 21.0602L9.16989 20.0702C8.67989 19.7002 8.38989 19.1102 8.38989 18.4902Z\"\n fill=\"#17235B\"\n />\n <path\n d=\"M5.21 6.37988H4.18C2.63 6.37988 2 6.97988 2 8.45988V18.5199C2 19.9999 2.63 20.5999 4.18 20.5999H5.21C6.76 20.5999 7.39 19.9999 7.39 18.5199V8.45988C7.39 6.97988 6.76 6.37988 5.21 6.37988Z\"\n fill=\"#17235B\"\n />\n </svg>\n </i>\n <i *ngIf=\"!chat?.liked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.4037 20.9264L10.381 20.9038L10.3557 20.8843L7.72165 18.85L8.02965 18.4516L10.7161 20.5315C10.9228 20.7195 11.2181 20.8517 11.4962 20.9377C11.7978 21.0309 12.1451 21.09 12.4801 21.09H16.2801C16.8572 21.09 17.4266 20.8625 17.8751 20.5306C18.3159 20.2044 18.6912 19.7385 18.8305 19.1997L21.2428 11.8732C21.4379 11.3309 21.4287 10.749 21.0965 10.2887C20.7583 9.81377 20.1844 9.58999 19.5801 9.58999H15.5801C15.2031 9.58999 14.8615 9.43143 14.6276 9.16215L14.627 9.16142C14.3873 8.88649 14.2756 8.51549 14.3345 8.11501L14.8322 4.9195C14.9978 4.1052 14.4664 3.24596 13.7053 2.98804C13.3277 2.85165 12.9297 2.89129 12.61 2.99839C12.2949 3.10396 11.9772 3.30172 11.7881 3.57673L11.7881 3.57671L11.7851 3.58107L7.96352 9.26689L7.55454 8.99314L11.3751 3.30891L11.3755 3.30836C11.8763 2.56103 13.0109 2.19028 13.8726 2.51744L13.8834 2.52151L13.8943 2.52509C14.9044 2.8564 15.556 3.98765 15.3317 5.01314L15.3284 5.02805L15.326 5.04314L14.836 8.19314L14.836 8.19313L14.8351 8.19928C14.8184 8.31642 14.7981 8.60268 15.0138 8.84924L15.0248 8.86177L15.0366 8.87354C15.1833 9.02026 15.3817 9.09999 15.5901 9.09999H19.5901C20.4308 9.09999 21.1176 9.44886 21.5113 10.0079L21.5124 10.0095C21.8964 10.5502 21.9908 11.2849 21.7202 12.0291L21.7175 12.0365L21.7151 12.044L19.3251 19.324L19.3198 19.34L19.3156 19.3564C19.0058 20.5707 17.6766 21.6 16.2801 21.6H12.4801C12.2411 21.6 11.8403 21.5625 11.4297 21.4512C11.0123 21.338 10.6406 21.1633 10.4037 20.9264Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n <path\n d=\"M5.37988 20.4999H4.37988C3.52442 20.4999 2.98559 20.2982 2.65822 19.9825C2.33437 19.6702 2.12988 19.1614 2.12988 18.3499V8.5499C2.12988 7.73843 2.33437 7.22962 2.65822 6.91731C2.98559 6.6016 3.52442 6.3999 4.37988 6.3999H5.37988C6.23534 6.3999 6.77418 6.6016 7.10155 6.91731C7.4254 7.22962 7.62988 7.73843 7.62988 8.5499V18.3499C7.62988 19.1614 7.4254 19.6702 7.10155 19.9825C6.77418 20.2982 6.23534 20.4999 5.37988 20.4999ZM4.37988 6.8999C4.0934 6.8999 3.83578 6.9164 3.61382 6.96689C3.38745 7.01838 3.16822 7.11196 2.99258 7.2876C2.81559 7.46459 2.72807 7.67966 2.68301 7.89002C2.63948 8.09318 2.62988 8.31967 2.62988 8.5499V18.3499C2.62988 18.5801 2.63948 18.8066 2.68301 19.0098C2.72807 19.2201 2.81559 19.4352 2.99258 19.6122C3.16822 19.7878 3.38745 19.8814 3.61382 19.9329C3.83578 19.9834 4.0934 19.9999 4.37988 19.9999H5.37988C5.66637 19.9999 5.92398 19.9834 6.14595 19.9329C6.37232 19.8814 6.59155 19.7878 6.76719 19.6122C6.94418 19.4352 7.0317 19.2201 7.07676 19.0098C7.12028 18.8066 7.12988 18.5801 7.12988 18.3499V8.5499C7.12988 8.31967 7.12028 8.09318 7.07676 7.89002C7.0317 7.67966 6.94418 7.46459 6.76719 7.2876C6.59155 7.11196 6.37232 7.01838 6.14595 6.96689C5.92398 6.9164 5.66637 6.8999 5.37988 6.8999H4.37988Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n </svg>\n </i>\n </button>\n <button\n class=\"down copy\"\n title=\"Dislike\"\n [class.active]=\"chat?.unliked\"\n (click)=\"handleDownClick(i)\"\n >\n <i *ngIf=\"chat?.unliked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.61 5.50002V15.66C15.61 16.06 15.49 16.45 15.27 16.78L12.54 20.84C12.11 21.49 11.04 21.95 10.13 21.61C9.15002 21.28 8.50002 20.18 8.71002 19.2L9.23002 15.93C9.27002 15.63 9.19002 15.36 9.02002 15.15C8.85002 14.96 8.60002 14.84 8.33002 14.84H4.22002C3.43002 14.84 2.75002 14.52 2.35002 13.96C1.97002 13.42 1.90002 12.72 2.15002 12.01L4.61002 4.52002C4.92002 3.28002 6.27002 2.27002 7.61002 2.27002H11.51C12.18 2.27002 13.12 2.50002 13.55 2.93002L14.83 3.92002C15.32 4.30002 15.61 4.88002 15.61 5.50002Z\"\n fill=\"#17235B\"\n />\n\n <path\n d=\"M18.7901 17.6099H19.8201C21.3701 17.6099 22.0001 17.0099 22.0001 15.5299V5.4799C22.0001 3.9999 21.3701 3.3999 19.8201 3.3999H18.7901C17.2401 3.3999 16.6101 3.9999 16.6101 5.4799V15.5399C16.6101 17.0099 17.2401 17.6099 18.7901 17.6099Z\"\n fill=\"#17235B\"\n />\n </svg>\n </i>\n\n <i *ngIf=\"!chat?.unliked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.1237 21.481L10.1148 21.4778L10.1059 21.4748C9.09577 21.1435 8.44416 20.0122 8.66849 18.9867L8.67175 18.9718L8.6741 18.9568L9.1641 15.8068L9.16413 15.8068L9.16501 15.8006C9.18175 15.6835 9.20207 15.3972 8.98633 15.1507L8.97536 15.1381L8.96359 15.1263C8.81687 14.9796 8.61841 14.8999 8.41004 14.8999H4.41004C3.56937 14.8999 2.88252 14.551 2.48884 13.992L2.4877 13.9904C2.10371 13.4497 2.00931 12.715 2.27994 11.9708L2.28263 11.9634L2.28509 11.9559L4.67509 4.67586L4.68035 4.65985L4.68451 4.64353C4.99418 3.42996 6.33271 2.3999 7.72004 2.3999H11.52C11.7591 2.3999 12.1599 2.43736 12.5704 2.54872C12.9878 2.66194 13.3596 2.83655 13.5965 3.07346L13.6191 3.09608L13.6444 3.11563L16.2785 5.14986L15.9705 5.54825L13.2875 3.47111C13.0799 3.2763 12.7837 3.1413 12.5061 3.05412C12.2031 2.95897 11.8551 2.8999 11.52 2.8999H7.72004C7.1429 2.8999 6.57353 3.12735 6.12508 3.45926C5.68428 3.78551 5.30892 4.25142 5.16963 4.79019L2.75738 12.1167C2.56223 12.659 2.57147 13.2409 2.90366 13.7012C3.24183 14.1761 3.81578 14.3999 4.42004 14.3999H8.42004C8.79702 14.3999 9.13867 14.5585 9.37252 14.8277L9.37315 14.8285C9.61286 15.1034 9.72457 15.4745 9.66568 15.875C9.6656 15.8755 9.66552 15.8761 9.66544 15.8766L9.16795 19.0704C9.00242 19.8841 9.53299 20.7428 10.2933 21.0013C10.6685 21.1391 11.0675 21.0978 11.3857 20.9917C11.7001 20.8869 12.0218 20.6898 12.2121 20.4132L12.2121 20.4132L12.215 20.4088L16.0351 14.7253L16.4472 15.0045L12.6251 20.691L12.6249 20.6912C12.259 21.2361 11.5347 21.5999 10.8 21.5999C10.5668 21.5999 10.3358 21.5596 10.1237 21.481Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n <path\n d=\"M19.6201 17.6H18.6201C17.7647 17.6 17.2258 17.3983 16.8985 17.0826C16.5746 16.7703 16.3701 16.2615 16.3701 15.45V5.65C16.3701 4.83853 16.5746 4.32972 16.8985 4.0174C17.2258 3.7017 17.7647 3.5 18.6201 3.5H19.6201C20.4756 3.5 21.0144 3.7017 21.3418 4.0174C21.6656 4.32972 21.8701 4.83853 21.8701 5.65V15.45C21.8701 16.2615 21.6656 16.7703 21.3418 17.0826C21.0144 17.3983 20.4756 17.6 19.6201 17.6ZM18.6201 4C18.3336 4 18.076 4.01649 17.8541 4.06699C17.6277 4.11848 17.4085 4.21206 17.2328 4.3877C17.0558 4.56469 16.9683 4.77976 16.9232 4.99011C16.8797 5.19328 16.8701 5.41977 16.8701 5.65V15.45C16.8701 15.6802 16.8797 15.9067 16.9232 16.1099C16.9683 16.3202 17.0558 16.5353 17.2328 16.7123C17.4085 16.8879 17.6277 16.9815 17.8541 17.033C18.076 17.0835 18.3336 17.1 18.6201 17.1H19.6201C19.9066 17.1 20.1642 17.0835 20.3862 17.033C20.6126 16.9815 20.8318 16.8879 21.0074 16.7123C21.1844 16.5353 21.2719 16.3202 21.317 16.1099C21.3605 15.9067 21.3701 15.6802 21.3701 15.45V5.65C21.3701 5.41977 21.3605 5.19328 21.317 4.99011C21.2719 4.77976 21.1844 4.56469 21.0074 4.3877C20.8318 4.21206 20.6126 4.11848 20.3862 4.06699C20.1642 4.01649 19.9066 4 19.6201 4H18.6201Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n </svg>\n </i>\n </button>\n </div>\n </div>\n <div\n class=\"Related mt-2\"\n *ngIf=\"\n showFeedBackIconsIndex === i &&\n !isChatingWithAi &&\n chat?.relatedListItems &&\n chat?.relatedListItems.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-list-check\"></i> Related\n </h5>\n <div class=\"card-container\" *ngIf=\"chat?.type === 'ai'\">\n <ul class=\"list-container\">\n <ng-container *ngFor=\"let item of chat?.relatedListItems\">\n <li (click)=\"fetchDataFor(item, chat)\">{{ item }}</li>\n </ng-container>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"cta-faqs quick-prompts-extended\"\n *ngIf=\"i == 0 && quickPrompts?.length\"\n >\n <!-- <div *ngFor=\"let tile of quickPrompts\" class=\"cta\"\n (click)=\"sendMessageWithTile(tile.prompt)\">\n Q: {{ tile.text }}\n </div> -->\n <div class=\"cta_suggestions\">\n <button\n *ngFor=\"let tile of quickPrompts\"\n (click)=\"sendMessageWithTile(tile.prompt)\"\n >\n <ng-container *ngIf=\"tile\">{{ tile.text }}</ng-container>\n </button>\n </div>\n </div>\n <div class=\"chat bot\" *ngIf=\"i == 0 && botSkills\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n </div>\n <div\n class=\"chat-bubble-wrap\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <div class=\"chat-bubble-content\">\n <div\n class=\"SearchTitle ai\"\n [innerHTML]=\"processMessageForDisplay(botSkills)\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"chat?.suggestions?.length\">\n <h4 class=\"labelChat\">\n Here are some things EventsGPT Copilot can help you do:\n </h4>\n <div class=\"cta_suggestions\">\n <button\n *ngFor=\"let suggestion of chat?.suggestions\"\n (click)=\"sendMessageWithTile(suggestion)\"\n >\n <ng-container *ngIf=\"suggestion\">{{\n suggestion\n }}</ng-container>\n </button>\n </div>\n </div>\n <div\n *ngIf=\"\n chat?.action?.section_id == 'company_search' ||\n chat?.action?.section_id == 'user_search' ||\n chat?.action?.section_id == 'industry_company_search'\n \"\n >\n <div class=\"box\">\n <div class=\"tiktokwrapper\">\n <div\n class=\"tiktokshell\"\n *ngFor=\"let user of chat?.action.users\"\n >\n <div class=\"videoPhotobox\">\n <ng-conatiner\n *ngIf=\"user?.photoPath && !user.userVideosModel\"\n >\n <img [src]=\"user?.photoPath\" />\n </ng-conatiner>\n <ng-conatiner *ngIf=\"user.userVideosModel\">\n <app-video-player\n *ngIf=\"user?.userVideosModel\"\n [isDev]=\"isDev\"\n [currentUserId]=\"userId\"\n [videoObj]=\"user?.userVideosModel\"\n [user]=\"user\"\n [eventId]=\"eventId\"\n type=\"1\"\n >\n </app-video-player>\n </ng-conatiner>\n </div>\n\n <div\n class=\"noPhoto\"\n *ngIf=\"!user?.photoPath && !user.userVideosModel\"\n >\n <h3>\n {{ user.firstName | slice: 0 : 1\n }}{{ user.lastName | slice: 0 : 1 }}\n </h3>\n </div>\n <div class=\"overlymask\" *ngIf=\"!user.userVideosModel\"></div>\n <div class=\"onshell-content\">\n <div class=\"title-shell\">\n <h3>{{ user.firstName }} {{ user.lastName }}</h3>\n <h3 class=\"companyName\">{{ user.company }}</h3>\n </div>\n <div class=\"button-shell\">\n <button\n class=\"Connectbtn\"\n (click)=\"connectToUser(user.userId)\"\n >\n {{\n canConnect(user.userId)\n ? \"Connect\"\n : canDisconnect(user.userId)\n ? \"Disconnect\"\n : \"Request\n Sent\"\n }}\n </button>\n <button\n class=\"schedulebtn\"\n (click)=\"scheduleMeetingWithUser(user)\"\n >\n Schedule\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"chat?.action?.section_id == myUpcomingSessionAction\">\n <div class=\"agenda-items-wrapper\" class=\"agenda-items-wrapper\">\n <div class=\"list-view\">\n <div\n class=\"session-detail-wrapper card-background-session\"\n *ngFor=\"let upcomingSession of chat?.action.content\"\n >\n <div class=\"thumbnail\">\n <img\n alt=\"Introduction to the Imaging Radar Academy\"\n src=\"https://s27media.azureedge.net/8008/profile_pic/453cea2c-feba-11ed-8c0b-00155d025b0a.png\"\n class=\"\"\n />\n <!---->\n <!---->\n <!----><button\n class=\"play-btn color-primary\"\n title=\"Watch: Introduction to the Imaging Radar Academy\"\n >\n <span class=\"material-icons notranslate\">\n play_circle_outline\n </span>\n <!---->\n </button>\n <!---->\n <!---->\n </div>\n <!---->\n <!---->\n <div class=\"content p-3\">\n <div\n class=\"d-flex justify-content-between align-items-center\"\n >\n <div class=\"d-flex flex-column\">\n <p class=\"fs-xs mb-0 body-text-color\">\n {{\n upcomingSession.dateTimeRange.start\n | date\n : \"MM-dd-yyyy HH:mm\"\n : getSessionIanaTimeZone(upcomingSession)\n }}\n -\n {{\n upcomingSession.dateTimeRange.end\n | date\n : \"MM-dd-yyyy HH:mm\"\n : getSessionIanaTimeZone(upcomingSession)\n }}\n {{ upcomingSession.timeZone.id }}\n </p>\n <!---->\n <!---->\n <!-- <p class=\"fs-xs mb-2 color-secondary\" title=\"Session Type: Generative AI\">Generative AI </p> -->\n <!---->\n </div>\n <div class=\"d-flex align-items-center actions px-2\">\n <!---->\n <button\n (click)=\"\n performSessionAction(\n upcomingSession.id,\n 'view-session'\n )\n \"\n class=\"s27-btn-icon body-text-color\"\n title=\"View Session Information: Introduction to the Imaging Radar Academy\"\n >\n <span class=\"material-icons notranslate\">\n remove_red_eye\n </span>\n </button>\n\n <button\n (click)=\"\n performSessionAction(\n upcomingSession.id,\n 'add-to-agenda'\n )\n \"\n class=\"s27-btn-icon body-text-color\"\n >\n <span\n class=\"material-icons notranslate\"\n title=\"Add Session: Introduction to the Imaging Radar Academy to My agendaa\"\n >\n event_available\n </span>\n </button>\n <!---->\n <!---->\n <!---->\n <!---->\n\n <button\n (click)=\"\n performSessionAction(upcomingSession.id, 'play')\n \"\n class=\"s27-btn-icon body-text-color\"\n title=\"Copy session link to share\"\n >\n <span class=\"material-icons notranslate\">\n play_circle_outline\n </span>\n </button>\n <!---->\n </div>\n </div>\n <h2 class=\"body-text-color\">\n {{ upcomingSession.title }}\n </h2>\n <div\n class=\"session-description color-secondary\"\n [innerHTML]=\"sanitizeHtml(upcomingSession.description)\"\n ></div>\n <ul\n class=\"speakers grid-2-cols\"\n *ngFor=\"let speakerId of upcomingSession.speakers\"\n >\n <li class=\"\">\n <div class=\"image\" title=\"Blair Wunderlich\">\n <img\n alt=\"Blair Wunderlich\"\n [src]=\"speakers[speakerId]?.photoPath\"\n class=\"\"\n />\n <!---->\n <!---->\n <!---->\n </div>\n <!---->\n <div\n class=\"content pl-3\"\n style=\"text-transform: none\"\n >\n <div class=\"mb-0 body-text-color fs-xs fw-500\">\n {{ speakers[speakerId]?.firstName }}\n {{ speakers[speakerId]?.lastName }}\n </div>\n <div class=\"color-secondary fs-xxs\">\n {{ speakers[speakerId]?.jobTitle }}\n </div>\n <div class=\"color-secondary fs-xxs\">\n {{ speakers[speakerId]?.company }}\n </div>\n </div>\n <!---->\n </li>\n </ul>\n <!---->\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Initial load: loading dots when fetching chat history (no \"Thinking\") -->\n <div class=\"chat bot chat-thinking chat-loading-dots\" *ngIf=\"loading && !isChatingWithAi\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img *ngIf=\"displayAvatarUrl || botIcon\" [src]=\"displayAvatarUrl || botIcon\" alt=\"Assistant\" class=\"chat-avatar-img\" />\n <span *ngIf=\"!(displayAvatarUrl || botIcon)\" class=\"chat-avatar-initials chat-avatar-initials-assistant\">A</span>\n </div>\n <div class=\"dateTime\" [style.color]=\"dateTimeColor ? '' : ''\">\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ getLoadingTime() }}\n </div>\n </div>\n </div>\n <div class=\"thinking-row\">\n <div class=\"thinking-dots\">\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n </div>\n <span class=\"thinking-text\">{{ getTranslation(\"Loading\") || \"Loading\" }}...</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Thinking: only when user has sent a message and AI is responding -->\n <div class=\"chat bot chat-thinking\" *ngIf=\"isChatingWithAi && !executingWorkflow\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img *ngIf=\"displayAvatarUrl || botIcon\" [src]=\"displayAvatarUrl || botIcon\" alt=\"Assistant\" class=\"chat-avatar-img\" />\n <span *ngIf=\"!(displayAvatarUrl || botIcon)\" class=\"chat-avatar-initials chat-avatar-initials-assistant\">A</span>\n </div>\n <div class=\"dateTime\" [style.color]=\"dateTimeColor ? '' : ''\">\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ getLoadingTime() }}\n </div>\n </div>\n </div>\n <div class=\"thinking-row\">\n <div class=\"thinking-dots\">\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n </div>\n <span class=\"thinking-text\">{{ getTranslation(\"Thinking\") || \"Thinking\" }}...</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- <div #chatMain></div> -->\n <div\n *ngIf=\"openWorkflowInput && selectedWorkflow && !executingWorkflow\"\n class=\"chatFooterWrapper\"\n >\n <!-- new UI for Chat Message Section by Amit -->\n <div class=\"chat-footer-upt\">\n <div class=\"topinfo-containerbox\">\n <div class=\"agents_note_wrapper\">\n <div>\n <h6>{{ selectedWorkflow?.Name }}</h6>\n {{ selectedWorkflow?.Description }}\n </div>\n </div>\n\n <div class=\"agents_note_wrapper\">\n <button\n mat-icon-button\n class=\"closeButtonSource\"\n (click)=\"toggleWorkflows(false)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"bottombox-wrapper\">\n <!-- here i need to loop through all the input fields selectedWorkflow.Trigger.InputSchema and render the input fields -->\n <!-- Form for Workflow Inputs -->\n <form\n [formGroup]=\"workflowForm\"\n (ngSubmit)=\"onWorkflowSubmit()\"\n class=\"form-container\"\n >\n <div\n *ngFor=\"let input of selectedWorkflow?.Trigger?.InputSchema\"\n class=\"form-group\"\n >\n <label>{{ input.Label }}</label>\n\n <!-- Handle Text Input or Text Area based on requirement -->\n <textarea\n *ngIf=\"input.Type === 'string'\"\n formControlName=\"{{ input.InputId }}\"\n [placeholder]=\"input.Placeholder\"\n [rows]=\"2\"\n [required]=\"input.Required\"\n class=\"form-control\"\n ></textarea>\n\n <!-- Dropdown for Select Options -->\n <select\n *ngIf=\"input.Type === 'select'\"\n formControlName=\"{{ input.InputId }}\"\n class=\"form-control\"\n >\n <option\n *ngFor=\"let option of input.Options\"\n [value]=\"option.Value\"\n >\n {{ option.Label }}\n </option>\n </select>\n </div>\n\n <!-- Submit button aligned to the right -->\n <div class=\"form-group\">\n <button type=\"submit\" class=\"btn btn-primary submit-button\">\n Submit\n </button>\n </div>\n </form>\n </div>\n </div>\n\n <!-- new UI for Chat Message Section by Amit -->\n </div>\n <div *ngIf=\"!openWorkflowInput\" class=\"chatFooterWrapper\">\n <!-- new UI for Chat Message Section by Amit -->\n <div class=\"chat-footer-upt\">\n <div class=\"topinfo-containerbox\" *ngIf=\"!checkForCop29BotId()\">\n <div class=\"agents_note_wrapper\">\n <div class=\"agents-dropdown-wrapper\">\n <div class=\"dropdown-wrapper\" (click)=\"toggleDropdown()\">\n <div class=\"dropdown-header\">\n <span>{{ getDropdownHeaderText() }}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <label (click)=\"onSelectAll()\">\n <input type=\"checkbox\" [checked]=\"areAllSelected()\" />\n All\n </label>\n <label\n *ngFor=\"let agent of agents\"\n (click)=\"onAgentChange(agent)\"\n >\n <input type=\"checkbox\" [(ngModel)]=\"agent.selected\" />\n {{ agent.agentName }}\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"agents_note_wrapper\">\n <div class=\"agents-dropdown-wrapper\">\n <div class=\"dropdown-wrapper\" (click)=\"toggleWorkflows()\">\n <div class=\"dropdown-header\">\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"0\"\n viewBox=\"0 0 256 256\"\n class=\"h-5 w-5\"\n height=\"1.3em\"\n width=\"1.3em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M245.66,74.34l-32-32a8,8,0,0,0-11.32,11.32L220.69,72H192a74.49,74.49,0,0,0-28.35,6.73c-13.62,6.29-30.83,19.71-35.54,48-5.32,31.94-29.1,39.22-41,40.86a40,40,0,1,0,.18,16.06A71.65,71.65,0,0,0,108.13,178C121.75,172,139,158.6,143.89,129.31,150.65,88.77,190.34,88,192,88h28.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,245.66,74.34ZM48,200a24,24,0,1,1,24-24A24,24,0,0,1,48,200Z\"\n ></path></svg\n >&nbsp; Workflows\n </div>\n <div class=\"dropdown-menu\" *ngIf=\"isWorkflowOpen\">\n <label\n *ngFor=\"let orgWorkflow of orgWorkflows\"\n (click)=\"onWorkflowSelected(orgWorkflow)\"\n >\n {{ orgWorkflow.Name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bottombox-wrapper\">\n <!-- <input [disabled]=\"isChatingWithAi\" type=\"text\" class=\"form-control-1 s27-scroll\"\n \n placeholder=\"Ask anything...\" [style.background]=\"formFieldBgColor ? formFieldBgColor : ''\"\n [style.color]=\"formFieldTextColor ? formFieldTextColor : ''\" [(ngModel)]=\"input\"\n (keyup.enter)=\"handleSubmit()\" #myInput /> -->\n <textarea\n [disabled]=\"isChatingWithAi\"\n class=\"form-control-1 s27-scroll chat-textarea\"\n placeholder=\"{{ getTranslation('Ask anything') }}\"\n [(ngModel)]=\"input\"\n (keydown)=\"handleKeydown($event)\"\n (input)=\"adjustTextareaHeight($event)\"\n #myInput\n ></textarea>\n\n \n\n <button\n class=\"btn cta-chat rotate\"\n (click)=\"handleSubmit()\"\n [style.background]=\"sendButtonColor ? sendButtonColor : ''\"\n [style.color]=\"sendButtonTextColor ? sendButtonTextColor : ''\"\n title=\"{{ getTranslation('Send Message') }}\"\n style=\"margin-right: 1px\"\n >\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"0\"\n viewBox=\"0 0 512 512\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M476.59 227.05l-.16-.07L49.35 49.84A23.56 23.56 0 0027.14 52 24.65 24.65 0 0016 72.59v113.29a24 24 0 0019.52 23.57l232.93 43.07a4 4 0 010 7.86L35.53 303.45A24 24 0 0016 327v113.31A23.57 23.57 0 0026.59 460a23.94 23.94 0 0013.22 4 24.55 24.55 0 009.52-1.93L476.4 285.94l.19-.09a32 32 0 000-58.8z\"\n ></path>\n </svg>\n <!-- SEND -->\n </button>\n\n <button\n class=\"btn cta-chat mr-1 voice-btn\"\n (click)=\"openVoiceModal()\"\n type=\"button\"\n title=\"Voice Agent\"\n [style.background]=\"sendButtonColor ? sendButtonColor : ''\"\n [style.color]=\"sendButtonTextColor ? sendButtonTextColor : ''\"\n >\n <svg\n class=\"voice-btn-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g fill-rule=\"nonzero\">\n <path\n d=\"M24,0 L24,24 L0,24 L0,0 L24,0 Z M12.5934901,23.257841 L12.5819402,23.2595131 L12.5108777,23.2950439 L12.4918791,23.2987469 L12.4918791,23.2987469 L12.4767152,23.2950439 L12.4056548,23.2595131 C12.3958229,23.2563662 12.3870493,23.2590235 12.3821421,23.2649074 L12.3780323,23.275831 L12.360941,23.7031097 L12.3658947,23.7234994 L12.3769048,23.7357139 L12.4804777,23.8096931 L12.4953491,23.8136134 L12.4953491,23.8136134 L12.5071152,23.8096931 L12.6106902,23.7357139 L12.6232938,23.7196733 L12.6232938,23.7196733 L12.6266527,23.7031097 L12.609561,23.275831 C12.6075724,23.2657013 12.6010112,23.2592993 12.5934901,23.257841 L12.5934901,23.257841 Z M12.8583906,23.1452862 L12.8445485,23.1473072 L12.6598443,23.2396597 L12.6498822,23.2499052 L12.6498822,23.2499052 L12.6471943,23.2611114 L12.6650943,23.6906389 L12.6699349,23.7034178 L12.6699349,23.7034178 L12.678386,23.7104931 L12.8793402,23.8032389 C12.8914285,23.8068999 12.9022333,23.8029875 12.9078286,23.7952264 L12.9118235,23.7811639 L12.8776777,23.1665331 C12.8752882,23.1545897 12.8674102,23.1470016 12.8583906,23.1452862 L12.8583906,23.1452862 Z M12.1430473,23.1473072 C12.1332178,23.1423925 12.1221763,23.1452606 12.1156365,23.1525954 L12.1099173,23.1665331 L12.0757714,23.7811639 C12.0751323,23.7926639 12.0828099,23.8018602 12.0926481,23.8045676 L12.108256,23.8032389 L12.3092106,23.7104931 L12.3186497,23.7024347 L12.3186497,23.7024347 L12.3225043,23.6906389 L12.340401,23.2611114 L12.337245,23.2485176 L12.337245,23.2485176 L12.3277531,23.2396597 L12.1430473,23.1473072 Z\"\n fill=\"none\"\n ></path>\n <path\n d=\"M12,3 C12.51285,3 12.9355092,3.38604429 12.9932725,3.88337975 L13,4 L13,20 C13,20.5523 12.5523,21 12,21 C11.48715,21 11.0644908,20.613973 11.0067275,20.1166239 L11,20 L11,4 C11,3.44772 11.4477,3 12,3 Z M8,6 C8.55228,6 9,6.44772 9,7 L9,17 C9,17.5523 8.55228,18 8,18 C7.44772,18 7,17.5523 7,17 L7,7 C7,6.44772 7.44772,6 8,6 Z M16,6 C16.5523,6 17,6.44772 17,7 L17,17 C17,17.5523 16.5523,18 16,18 C15.4477,18 15,17.5523 15,17 L15,7 C15,6.44772 15.4477,6 16,6 Z M4,9 C4.55228,9 5,9.44772 5,10 L5,14 C5,14.5523 4.55228,15 4,15 C3.44772,15 3,14.5523 3,14 L3,10 C3,9.44772 3.44772,9 4,9 Z M20,9 C20.51285,9 20.9355092,9.38604429 20.9932725,9.88337975 L21,10 L21,14 C21,14.5523 20.5523,15 20,15 C19.48715,15 19.0644908,14.613973 19.0067275,14.1166239 L19,14 L19,10 C19,9.44772 19.4477,9 20,9 Z\"\n fill=\"currentColor\"\n ></path>\n </g>\n </g>\n </svg>\n <span class=\"voice-btn-text\">Voice</span>\n </button>\n </div>\n </div>\n\n <!-- new UI for Chat Message Section by Amit -->\n </div>\n\n <div class=\"NoteTxt\">\n <div class=\"note\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.882\"\n height=\"12.883\"\n viewBox=\"0 0 12.882 12.883\"\n >\n <path\n id=\"Icon_ion-shield-checkmark\"\n data-name=\"Icon ion-shield-checkmark\"\n d=\"M15.106,4.532a.46.46,0,0,0-.378-.424A20.132,20.132,0,0,1,8.881,2.291a.46.46,0,0,0-.379,0A20.132,20.132,0,0,1,2.655,4.108a.46.46,0,0,0-.378.424A11.3,11.3,0,0,0,2.98,9.4a10.049,10.049,0,0,0,2.06,3.235A10.516,10.516,0,0,0,8.521,15.1a.46.46,0,0,0,.345,0,10.516,10.516,0,0,0,3.481-2.465A10.049,10.049,0,0,0,14.4,9.4,11.3,11.3,0,0,0,15.106,4.532Zm-3.767,2.16L8.153,10.373a.46.46,0,0,1-.328.159H7.806a.46.46,0,0,1-.322-.131L6.069,9.014a.46.46,0,1,1,.644-.657L7.777,9.4,10.644,6.09a.46.46,0,0,1,.7.6Z\"\n transform=\"translate(-2.25 -2.25)\"\n fill=\"#06f\"\n />\n </svg>\n\n <span class=\"text\">{{\n getTranslation(\n \"Your personal or company information is kept private and secure\n within this chat.\"\n )\n }}</span>\n </div>\n </div>\n </mat-drawer-content>\n </mat-drawer>\n <mat-drawer\n class=\"drawer edit-boxDrawer\"\n style=\"width: 45%\"\n #sourcesDrawer\n [position]=\"'end'\"\n [mode]=\"'over'\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <div class=\"sourceDraweContainer\">\n <div class=\"container-fluid\">\n <button\n mat-icon-button\n class=\"closeButtonSource\"\n (click)=\"onCloseSource()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <h1>{{ currentSourcesList?.length }} Sources</h1>\n <!-- <p>Tell me about latest news from Mistral about AI agents announcement done this month</p> -->\n <hr />\n <ul class=\"sources-list\">\n <li *ngFor=\"let item of currentSourcesList; let si = index\">\n <!-- <input type=\"checkbox\" id=\"source1\"> -->\n <div class=\"source-content\" (click)=\"openLinkInNewTab(item.link)\">\n <label for=\"source1\">\n <span class=\"source-title\"\n ><span class=\"ml-1\">{{ si + 1 }}.</span\n >{{ item.title }}</span\n >\n <span class=\"image-container\">\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(item.link)\"\n [alt]=\"getDomainName(item.link) + ' favicon'\"\n />\n <span> {{ getDomainName(item.link) }}</span>\n </span>\n <span class=\"source-description\">{{ item.desc }}</span>\n </label>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </mat-drawer-content>\n </mat-drawer>\n <mat-drawer\n class=\"drawer edit-boxDrawer\"\n style=\"width: 45%\"\n #editorsDrawer\n [position]=\"'end'\"\n [mode]=\"'push'\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <lib-bot-html-editor\n *ngIf=\"isContentLoaded\"\n [editorContent]=\"currentMessageForEditor\"\n [isDocInEditMode]=\"isDocInEditMode\"\n [documentContent]=\"documentContent\"\n [conversationId]=\"conversationId\"\n [botId]=\"botId\"\n ></lib-bot-html-editor>\n </mat-drawer-content>\n </mat-drawer>\n</mat-drawer-container>\n\n<div *ngIf=\"showWorkflowExecutionDetails\" class=\"modal\">\n <div class=\"modal-content\">\n <div class=\"close-wrapper\">\n <span class=\"close_pop\" (click)=\"closeModal()\">&times;</span>\n </div>\n <div class=\"titleSection\">\n <!-- Workflow Title -->\n <h2>{{ workflowExecutionDetails.WorkflowName }}</h2>\n <!-- Workflow Title -->\n </div>\n <!-- Inputs Section -->\n <div class=\"inputs-section\">\n <h3>Inputs</h3>\n <ul>\n <li\n *ngFor=\"let input of objectToArray(workflowExecutionDetails.Inputs)\"\n >\n {{ input.key }}: {{ input.value }}\n </li>\n </ul>\n </div>\n\n <!-- Actions Section (Displayed as Timeline) -->\n <div class=\"actions-section\">\n <h3>Agent Actions</h3>\n <div class=\"timeline\">\n <div\n *ngFor=\"let action of workflowExecutionDetails.Actions\"\n class=\"timeline-item\"\n >\n <div class=\"timestamp-section\">\n <h4>{{ action.ActionName || action.Name }}</h4>\n <p><strong></strong> {{ action.InsertTimeStamp }}</p>\n </div>\n <p [innerHTML]=\"processMessageForDisplay(action.Output)\"></p>\n <!-- <pre>{{ action.Output }}</pre> -->\n </div>\n </div>\n </div>\n\n <!-- Insert Timestamp -->\n <div class=\"timestamp-section\">\n <p>\n <strong>Inserted At:</strong>\n {{ workflowExecutionDetails.InsertTimeStamp }}\n </p>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'hivegpt-chatbot',\n templateUrl: './chatbot.component.html',\n styleUrls: ['./chatbot.component.scss'],\n})\nexport class ChatBotComponent {\n @Input() userId!: string;\n /** Optional user profile image URL; if not set, user initials are shown in chat. */\n @Input() userAvatarUrl?: string;\n /** User's selected timezone (e.g. 'America/New_York'); used for chat timestamps and session card times. */\n @Input() timezone!: string;\n @Input() apiKey!: string;\n @Input() botName!: string;\n @Input() botSkills!: string;\n @Input() botId!: string;\n @Input() closeButtonColor!: string;\n @Input() gradientColors!: string[];\n @Input() greeting!: string;\n @Input() sendButtonColor!: string;\n @Input() useOpenAi!: boolean;\n @Input() showClose!: boolean;\n @Input() bgGradient!: string[];\n @Input() sendButtonTextColor!: string;\n @Input() fullView!: boolean;\n @Input() bgBubbleAi!: string;\n @Input() bgBubbleUser!: string;\n @Input() closeButtonbgColor!: string;\n @Input() messageTextColorAi!: string;\n @Input() messageTextColorUser!: string;\n @Input() dateTimeColor!: string;\n @Input() dateTextColor!: string;\n @Input() formFieldBgColor!: string;\n @Input() formFieldTextColor!: string;\n @Input() thumbsUpMessage!: string;\n @Input() thumbsDownMessages!: string[];\n @Input() eventName!: string;\n @Input() credentials!: [];\n @Input() unknownResponses!: [];\n @Input() rules!: string;\n @Input() eventId!: string;\n @Input() s27Token!: string;\n @Output() tokensRefreshed = new EventEmitter<any>();\n @Input() workspaceToken!: string;\n @Input() isDev!: boolean;\n /** Optional API base URL (e.g. ngrok). When set, chat/voice use this instead of dev/prod default. */\n @Input() baseUrl?: string;\n visible = false;\n\n toggle() {\n this.visible = !this.visible;\n }\n}\n","<button mat-icon-button class=\"chat-button\" color=\"primary\" (click)=\"toggle()\">\n <mat-icon>chat</mat-icon>\n</button>\n\n<ng-container *ngIf=\"visible\">\n <hivegpt-chat-drawer-package\n [apiKey]=\"apiKey\"\n [bgBubbleAi]=\"bgBubbleAi\"\n [bgBubbleUser]=\"bgBubbleUser\"\n [bgGradient]=\"bgGradient\"\n [botName]=\"botName\"\n [closeButtonbgColor]=\"closeButtonbgColor\"\n [closeButtonColor]=\"closeButtonColor\"\n [credentials]=\"credentials\"\n [dateTextColor]=\"dateTextColor\"\n [dateTimeColor]=\"dateTimeColor\"\n [eventId]=\"eventId\"\n [eventName]=\"eventName\"\n [formFieldBgColor]=\"formFieldBgColor\"\n [formFieldTextColor]=\"formFieldTextColor\"\n [fullView]=\"fullView\"\n [greeting]=\"greeting\"\n [gradientColors]=\"gradientColors\"\n [messageTextColorAi]=\"messageTextColorAi\"\n [messageTextColorUser]=\"messageTextColorUser\"\n [sendButtonColor]=\"sendButtonColor\"\n [sendButtonTextColor]=\"sendButtonTextColor\"\n [showClose]=\"showClose\"\n [thumbsDownMessages]=\"thumbsDownMessages\"\n [thumbsUpMessage]=\"thumbsUpMessage\"\n [unknownResponses]=\"unknownResponses\"\n [useOpenAi]=\"useOpenAi\"\n [userId]=\"userId\"\n [userAvatarUrl]=\"userAvatarUrl\"\n [timezone]=\"timezone\"\n [botId]=\"botId\"\n [s27Token]=\"s27Token\"\n (tokensRefreshed)=\"tokensRefreshed.emit($event)\"\n [workspaceToken]=\"workspaceToken\"\n [isDev]=\"isDev\"\n [baseUrl]=\"baseUrl\"\n >\n </hivegpt-chat-drawer-package>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VoiceAgentModalComponent } from './components/voice-agent-modal/voice-agent-modal.component';\nimport { VoiceAgentService } from './services/voice-agent.service';\nimport { AudioAnalyzerService } from './services/audio-analyzer.service';\n\n/**\n * Voice agent module. Uses @pipecat-ai/client-js + @pipecat-ai/websocket-transport\n * (peer dependencies) for WebSocket transport, RTVI protocol, and audio.\n */\n@NgModule({\n declarations: [\n VoiceAgentModalComponent\n ],\n imports: [\n CommonModule\n ],\n providers: [\n VoiceAgentService,\n AudioAnalyzerService,\n ],\n exports: [\n VoiceAgentModalComponent\n ]\n})\nexport class VoiceAgentModule { }\n","import { ApplicationRef, Injectable, InjectionToken, Inject, Optional } from '@angular/core';\nimport { Socket, SocketIoConfig } from 'ngx-socket-io';\nimport { prod_environment } from '../../environments/environment';\n\nexport const SOCKET_URL_TOKEN = new InjectionToken<string>('SOCKET_URL');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationSocket extends Socket {\n constructor(\n appRef: ApplicationRef,\n @Optional() @Inject(SOCKET_URL_TOKEN) socketUrl?: string\n ) {\n const config: SocketIoConfig = {\n url: socketUrl || prod_environment.SocketUrl,\n options: {\n transports: ['websocket', 'polling'],\n reconnection: true,\n autoConnect: true,\n upgrade: true,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 5000,\n reconnectionAttempts: Infinity\n }\n };\n super(config, appRef);\n\n this.on('connect', () => {\n // connected\n });\n\n this.on('disconnect', () => {\n console.warn('Socket disconnected');\n });\n\n this.on('connect_error', (err: any) => {\n console.error('Socket connection error:', err);\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n})\nexport class SafeHtmlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n transform(html): unknown {\n return html ? this.sanitizer.bypassSecurityTrustHtml(html) : '';\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { ChatDrawerComponent } from './components/chat-drawer/chat-drawer.component';\nimport { ChatBotComponent } from './components/chatbot/chatbot.component';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\nimport { VideoPlayerComponent } from './components/video-player/video-player.component';\nimport { QuillModule } from 'ngx-quill';\nimport { BotHtmlEditorComponent } from './components/bot-html-editor/bot-html-editor.component';\nimport { VoiceAgentModule } from './components/voice-agent/voice-agent.module';\n\n@NgModule({\n declarations: [ChatBotComponent, ChatDrawerComponent, VideoPlayerComponent, SafeHtmlPipe, BotHtmlEditorComponent],\n imports: [CommonModule, OverlayModule, MatIconModule, MatSidenavModule, FormsModule, ReactiveFormsModule, QuillModule, VoiceAgentModule],\n exports: [ChatBotComponent, ChatDrawerComponent, VideoPlayerComponent]\n})\nexport class HiveGptModule { }\n","/*\n * Public API Surface of hive-gpt\n */\n\nexport * from './lib/components/chat-drawer/chat-drawer.component';\nexport * from './lib/components/chatbot/chatbot.component';\nexport * from './lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component';\nexport * from './lib/components/voice-agent/services/voice-agent.service';\nexport * from './lib/components/voice-agent/services/audio-analyzer.service';\nexport * from './lib/components/voice-agent/voice-agent.module';\nexport * from './lib/components/voice-agent/voice-modal-tokens';\nexport * from './lib/components/NotificationSocket';\nexport * from './lib/components/video-player/video-player.component';\nexport * from './lib/hivegpt.module';\nexport * from './lib/services/platform-token-refresh.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.VoiceAgentService","i2.AudioAnalyzerService","i3","i1","i2","i2.BotsService","i5.ConversationService","i6.TranslationService","i7.VoiceAgentService","i9.PlatformTokenRefreshService","i13.VideoPlayerComponent","i14.BotHtmlEditorComponent","i3.ChatDrawerComponent"],"mappings":"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"}