@hivegpt/hiveai-angular 0.0.564 → 0.0.566
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/hivegpt-hiveai-angular.umd.js +53 -33
- package/bundles/hivegpt-hiveai-angular.umd.js.map +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js.map +1 -1
- package/esm2015/lib/components/chat-drawer/chat-drawer.component.js +42 -30
- package/esm2015/lib/components/conversation.service.js +13 -5
- package/fesm2015/hivegpt-hiveai-angular.js +53 -33
- package/fesm2015/hivegpt-hiveai-angular.js.map +1 -1
- package/hivegpt-hiveai-angular.metadata.json +1 -1
- package/lib/components/chat-drawer/chat-drawer.component.d.ts.map +1 -1
- package/lib/components/conversation.service.d.ts +8 -2
- package/lib/components/conversation.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -846,9 +846,16 @@
|
|
|
846
846
|
});
|
|
847
847
|
return timestamp + randomHex;
|
|
848
848
|
};
|
|
849
|
-
|
|
849
|
+
/**
|
|
850
|
+
* Returns a stable conversation id persisted in localStorage.
|
|
851
|
+
*
|
|
852
|
+
* IMPORTANT: call-sites should pass an event-specific scope when needed (e.g. eventId)
|
|
853
|
+
* so switching events does not reuse the previous event's conversation thread.
|
|
854
|
+
*/
|
|
855
|
+
ConversationService.prototype.getKey = function (botId, resetKey, scope) {
|
|
850
856
|
if (resetKey === void 0) { resetKey = false; }
|
|
851
|
-
var
|
|
857
|
+
var normalizedScope = scope != null && String(scope).trim() !== '' ? String(scope).trim() : '';
|
|
858
|
+
var storageKey = "" + this.conversationStorageKeyPrefix + botId + (normalizedScope ? "_" + normalizedScope : '');
|
|
852
859
|
var value = localStorage.getItem(storageKey);
|
|
853
860
|
if (!value || resetKey) {
|
|
854
861
|
value = this.generateKey();
|
|
@@ -856,9 +863,10 @@
|
|
|
856
863
|
}
|
|
857
864
|
return value;
|
|
858
865
|
};
|
|
859
|
-
ConversationService.prototype.getSessionKey = function (sessionId, resetKey) {
|
|
866
|
+
ConversationService.prototype.getSessionKey = function (sessionId, resetKey, scope) {
|
|
860
867
|
if (resetKey === void 0) { resetKey = false; }
|
|
861
|
-
var
|
|
868
|
+
var normalizedScope = scope != null && String(scope).trim() !== '' ? String(scope).trim() : '';
|
|
869
|
+
var storageKey = "" + this.sessionStorageKeyPrefix + sessionId + (normalizedScope ? "_" + normalizedScope : '');
|
|
862
870
|
var value = localStorage.getItem(storageKey);
|
|
863
871
|
if (!value || resetKey) {
|
|
864
872
|
value = this.generateKey();
|
|
@@ -2357,7 +2365,7 @@
|
|
|
2357
2365
|
_this.socketService.connectSocketConnection();
|
|
2358
2366
|
setTimeout(function () {
|
|
2359
2367
|
console.log('YES INIT');
|
|
2360
|
-
var conversation_id = _this.conversationService.getKey(_this.botId);
|
|
2368
|
+
var conversation_id = _this.conversationService.getKey(_this.botId, false, _this.eventId);
|
|
2361
2369
|
_this.socketService.registerUserSpecificHiveSocket(_this.botId, conversation_id, _this.orgId);
|
|
2362
2370
|
setTimeout(function () {
|
|
2363
2371
|
_this.listenSockets();
|
|
@@ -2710,12 +2718,18 @@
|
|
|
2710
2718
|
? String(this.timezone).trim()
|
|
2711
2719
|
: undefined;
|
|
2712
2720
|
return sessions.map(function (raw) {
|
|
2713
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
2721
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
2714
2722
|
// get_my_agenda returns wrapper { id, schedule, isSession }; normalize to inner schedule object
|
|
2715
2723
|
var s = raw && raw.schedule ? raw.schedule : raw;
|
|
2724
|
+
var sessionTzObj = s && typeof s === 'object' ? s.timeZone : null;
|
|
2725
|
+
var sessionIanaTimeZone = sessionTzObj && typeof sessionTzObj === 'object'
|
|
2726
|
+
? String((_a = sessionTzObj.subTimeZone) !== null && _a !== void 0 ? _a : '').trim()
|
|
2727
|
+
: '';
|
|
2716
2728
|
// Support both dateTimeRange (string) and actualDateTimeRange (object with start/end)
|
|
2717
|
-
var whenRaw = (
|
|
2718
|
-
|
|
2729
|
+
var whenRaw = (_c = (_b = s.dateTimeRange) !== null && _b !== void 0 ? _b : s.actualDateTimeRange) !== null && _c !== void 0 ? _c : '';
|
|
2730
|
+
// Prefer user's selected timezone; otherwise use session's IANA zone (subTimeZone) for correct date/day.
|
|
2731
|
+
var formattingTimeZone = (userTimezone || sessionIanaTimeZone || '').trim();
|
|
2732
|
+
var whenFormatted = _this.formatSessionWhen(whenRaw, formattingTimeZone || undefined);
|
|
2719
2733
|
// Only set statusText when session has join/watch roles (so we don't show "You can join this meeting" when there are no buttons)
|
|
2720
2734
|
var hasJoinWatchRole = Array.isArray(s.sessionRoles) &&
|
|
2721
2735
|
s.sessionRoles.some(function (r) {
|
|
@@ -2729,31 +2743,37 @@
|
|
|
2729
2743
|
var statusText = hasJoinWatchRole
|
|
2730
2744
|
? _this.getStatusTextFromSessionRoles(s.sessionRoles)
|
|
2731
2745
|
: '';
|
|
2732
|
-
var
|
|
2733
|
-
? typeof
|
|
2734
|
-
? ((
|
|
2735
|
-
: String(
|
|
2746
|
+
var sessionTimeZoneLabel = sessionTzObj != null
|
|
2747
|
+
? typeof sessionTzObj === 'object'
|
|
2748
|
+
? String((_f = (_e = (_d = sessionTzObj.name) !== null && _d !== void 0 ? _d : sessionTzObj.id) !== null && _e !== void 0 ? _e : sessionTzObj.subTimeZone) !== null && _f !== void 0 ? _f : '').trim()
|
|
2749
|
+
: String(sessionTzObj).trim()
|
|
2736
2750
|
: '';
|
|
2737
|
-
//
|
|
2738
|
-
var
|
|
2739
|
-
var
|
|
2740
|
-
|
|
2751
|
+
// Use an IANA timezone for formatting; use a separate label for UI display.
|
|
2752
|
+
var displayTimeZoneForFormat = formattingTimeZone;
|
|
2753
|
+
var displayTimeZoneLabel = (userTimezone || sessionTimeZoneLabel || '').trim();
|
|
2754
|
+
var tzAbbr = displayTimeZoneForFormat
|
|
2755
|
+
? _this.getTimezoneAbbreviation(displayTimeZoneForFormat)
|
|
2741
2756
|
: '';
|
|
2742
2757
|
var whenWithTz = whenFormatted || (typeof whenRaw === 'object' ? '' : String(whenRaw));
|
|
2743
2758
|
var whenDisplay = tzAbbr
|
|
2744
2759
|
? (whenWithTz + " (" + tzAbbr + ")").trim()
|
|
2745
2760
|
: whenWithTz;
|
|
2746
|
-
var dateBadge = _this.getSessionDateBadge(whenRaw,
|
|
2747
|
-
var timeRange = _this.formatSessionTimeRange(whenRaw,
|
|
2748
|
-
var description = String((
|
|
2749
|
-
var
|
|
2761
|
+
var dateBadge = _this.getSessionDateBadge(whenRaw, displayTimeZoneForFormat || undefined);
|
|
2762
|
+
var timeRange = _this.formatSessionTimeRange(whenRaw, displayTimeZoneForFormat || undefined);
|
|
2763
|
+
var description = String((_h = (_g = s.description) !== null && _g !== void 0 ? _g : s.abstract) !== null && _h !== void 0 ? _h : '').trim();
|
|
2764
|
+
var sessionTypeRaw = s.sessionType != null
|
|
2765
|
+
? typeof s.sessionType === 'object'
|
|
2766
|
+
? ((_k = (_j = s.sessionType.name) !== null && _j !== void 0 ? _j : s.sessionType.title) !== null && _k !== void 0 ? _k : '')
|
|
2767
|
+
: s.sessionType
|
|
2768
|
+
: '';
|
|
2769
|
+
var meetingType = String((_m = (_l = sessionTypeRaw !== null && sessionTypeRaw !== void 0 ? sessionTypeRaw : s.type) !== null && _l !== void 0 ? _l : s.meetingType) !== null && _m !== void 0 ? _m : '').trim();
|
|
2750
2770
|
var sessionTypeLabel = _this.isUnEvent
|
|
2751
2771
|
? _this.getTranslation('Meeting type') || 'Meeting type'
|
|
2752
2772
|
: _this.getTranslation('Session type') || 'Session type';
|
|
2753
2773
|
// Same logic as before design update: prefer tz abbreviation (e.g. EST), else show display timezone string (e.g. "(UTC-03:00) Brasilia)")
|
|
2754
|
-
var timeZoneDisplay = tzAbbr ||
|
|
2774
|
+
var timeZoneDisplay = tzAbbr || displayTimeZoneLabel || '';
|
|
2755
2775
|
// When API returns "Start: N/A, End: N/A, TimeZone: ..." (string), show at least timezone
|
|
2756
|
-
if (!timeRange &&
|
|
2776
|
+
if (!timeRange && (displayTimeZoneForFormat || displayTimeZoneLabel)) {
|
|
2757
2777
|
timeRange = _this.getTranslation('Not specified') || 'Not specified';
|
|
2758
2778
|
}
|
|
2759
2779
|
// Time range with timezone in parentheses when available (same as old whenDisplay format)
|
|
@@ -2761,16 +2781,16 @@
|
|
|
2761
2781
|
? (timeRange + " (" + timeZoneDisplay + ")").trim()
|
|
2762
2782
|
: timeRange;
|
|
2763
2783
|
return {
|
|
2764
|
-
title: String((
|
|
2765
|
-
organizer: String((
|
|
2766
|
-
room: String((
|
|
2784
|
+
title: String((_o = s.title) !== null && _o !== void 0 ? _o : '').trim(),
|
|
2785
|
+
organizer: String((_p = s.organizer) !== null && _p !== void 0 ? _p : '').trim(),
|
|
2786
|
+
room: String((_q = s.roomName) !== null && _q !== void 0 ? _q : '').trim(),
|
|
2767
2787
|
when: whenDisplay,
|
|
2768
2788
|
timeRange: timeRange,
|
|
2769
2789
|
timeRangeWithTz: timeRange ? timeRangeWithTz : timeZoneDisplay || '',
|
|
2770
2790
|
dateDay: dateBadge.day,
|
|
2771
2791
|
dateMonth: dateBadge.month,
|
|
2772
2792
|
description: description,
|
|
2773
|
-
timeZone:
|
|
2793
|
+
timeZone: displayTimeZoneForFormat || displayTimeZoneLabel,
|
|
2774
2794
|
timeZoneDisplay: timeZoneDisplay,
|
|
2775
2795
|
meetingType: meetingType,
|
|
2776
2796
|
sessionTypeLabel: sessionTypeLabel,
|
|
@@ -3891,8 +3911,8 @@
|
|
|
3891
3911
|
};
|
|
3892
3912
|
ChatDrawerComponent.prototype.fetchChatHistory = function () {
|
|
3893
3913
|
this.loading = true;
|
|
3894
|
-
this.conversationKey = this.conversationService.getKey(this.botId, false);
|
|
3895
|
-
this.conSessionKey = this.conversationService.getSessionKey(this.botId, false);
|
|
3914
|
+
this.conversationKey = this.conversationService.getKey(this.botId, false, this.eventId);
|
|
3915
|
+
this.conSessionKey = this.conversationService.getSessionKey(this.botId, false, this.eventId);
|
|
3896
3916
|
var url = this.environment.BASE_URL + "/conversations/" + this.conversationKey + "?session_id=" + this.conSessionKey;
|
|
3897
3917
|
var headers = new i1.HttpHeaders({
|
|
3898
3918
|
accept: 'application/json',
|
|
@@ -4442,7 +4462,7 @@
|
|
|
4442
4462
|
console.log(message);
|
|
4443
4463
|
this.feedbackDone = true;
|
|
4444
4464
|
this.showFeedBackIconsIndex = null;
|
|
4445
|
-
var conversation_id = this.conversationService.getKey(this.botId);
|
|
4465
|
+
var conversation_id = this.conversationService.getKey(this.botId, false, this.eventId);
|
|
4446
4466
|
var url = this.environment.AGENTS_API + "/Conversation/coPilot/" + this.botId + "/conversation/" + conversation_id + "/helpful-response";
|
|
4447
4467
|
fetch(url, {
|
|
4448
4468
|
method: 'POST',
|
|
@@ -4895,7 +4915,7 @@
|
|
|
4895
4915
|
this.isContentLoaded = false;
|
|
4896
4916
|
console.log('API call function');
|
|
4897
4917
|
this.loading = true;
|
|
4898
|
-
var conversation_id = this.conversationService.getKey(this.botId);
|
|
4918
|
+
var conversation_id = this.conversationService.getKey(this.botId, false, this.eventId);
|
|
4899
4919
|
this.conversationId = conversation_id;
|
|
4900
4920
|
var url = this.environment.AGENTS_API + "/ConversationDocuments?conversationId=" + conversation_id + "&botId=" + this.botId;
|
|
4901
4921
|
var headers = new i1.HttpHeaders({
|
|
@@ -5356,7 +5376,7 @@
|
|
|
5356
5376
|
};
|
|
5357
5377
|
ChatDrawerComponent.prototype.startNewConversation = function () {
|
|
5358
5378
|
var _this = this;
|
|
5359
|
-
this.conversationKey = this.conversationService.getKey(this.botId, true);
|
|
5379
|
+
this.conversationKey = this.conversationService.getKey(this.botId, true, this.eventId);
|
|
5360
5380
|
this.chatLog = [this.chatLog[0]];
|
|
5361
5381
|
this.isChatingWithAi = false;
|
|
5362
5382
|
this.chatSocketInitialized = false;
|
|
@@ -5426,7 +5446,7 @@
|
|
|
5426
5446
|
ChatDrawerComponent.prototype.openVoiceModal = function () {
|
|
5427
5447
|
var _this = this;
|
|
5428
5448
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
5429
|
-
var conversationId = (_b = (_a = this.conversationKey) !== null && _a !== void 0 ? _a : this.conversationService.getKey(this.botId, false)) !== null && _b !== void 0 ? _b : '';
|
|
5449
|
+
var conversationId = (_b = (_a = this.conversationKey) !== null && _a !== void 0 ? _a : this.conversationService.getKey(this.botId, false, this.eventId)) !== null && _b !== void 0 ? _b : '';
|
|
5430
5450
|
this.voiceModalConversationId = conversationId;
|
|
5431
5451
|
this.setupVoiceTranscripts();
|
|
5432
5452
|
// Close existing overlay if any
|
|
@@ -5731,7 +5751,7 @@
|
|
|
5731
5751
|
ChatDrawerComponent.decorators = [
|
|
5732
5752
|
{ type: i0.Component, args: [{
|
|
5733
5753
|
selector: 'hivegpt-chat-drawer-package',
|
|
5734
|
-
template: "<!-- <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\n HH:mm\"\n : \"UTC\"\n }}\n -\n {{\n upcomingSession.dateTimeRange.end\n | date: \"MM-dd-yyyy HH:mm\" : \"UTC\"\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 > 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()\">×</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",
|
|
5754
|
+
template: "<!-- <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 : (timezone || upcomingSession.timeZone?.subTimeZone || \"UTC\")\n }}\n -\n {{\n upcomingSession.dateTimeRange.end\n | date\n : \"MM-dd-yyyy HH:mm\"\n : (timezone || upcomingSession.timeZone?.subTimeZone || \"UTC\")\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 > 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()\">×</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",
|
|
5735
5755
|
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
5736
5756
|
styles: ["@import url(\"https://e1cdn.social27.com/digitalevents/liteversion/fonts/segoe-ui/stylesheet.css\");.bot-sticky-header-chat{background:#fff;border:none!important;border-bottom:1px solid #ddd;box-shadow:2px 0 5px #e1e1e1!important;padding:0 0 10px;padding:10px 15px!important;position:fixed;top:0!important;transition:all 1s;width:100%;z-index:100}@media (max-width:768px){.bot-sticky-header-chat{top:0!important}}#botAllChat{padding:0 20px!important}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#e5ccbc}body{overflow:hidden}.ios-device .drawer .chat-footer .form-control{font-size:16px}.hivegpt-chat-bot-wrapper{background:transparent!important;height:100%;inset:0;opacity:0;position:fixed;visibility:hidden;z-index:999999}.hivegpt-chat-bot-wrapper.mat-drawer-container-has-open{background:transparent!important;opacity:1;transition:all .3s;visibility:visible;z-index:999999}.hivegpt-chat-bot-wrapper .mat-drawer:not(.mat-drawer-side){box-shadow:none}.hivegpt-chat-bot-wrapper mat-drawer{background-color:#f2f2f2;background-image:none!important;width:100%}.hivegpt-chat-bot-wrapper mat-drawer.full-width-drawer{max-width:100%}.hivegpt-chat-bot-wrapper .mat-drawer-content{display:flex;flex-direction:column}.hivegpt-chat-bot-wrapper .chat-header{padding:16px 40px;width:100%}.hivegpt-chat-bot-wrapper .chat-header h2{font-family:Segoe UI,sans-serif;font-size:36px;font-weight:500;letter-spacing:-.72px;line-height:108%;margin:0;text-transform:uppercase}.hivegpt-chat-bot-wrapper .chat-header .closeIcon{align-items:center;background:transparent;border:none;border-radius:50%;display:inline-flex;font-size:18px;height:35px;justify-content:center;outline:none;padding:0;position:absolute;right:12px;top:16px;width:35px}.hivegpt-chat-bot-wrapper .chat-main{display:flex;flex:1;flex-direction:column;justify-content:space-between;overflow-y:auto;width:100%}.hivegpt-chat-bot-wrapper .chat-main .innerChat{overflow-y:auto;padding-top:72px!important;width:100%}.hivegpt-chat-bot-wrapper .chat-main .ai h3{font-size:1.3rem!important}.hivegpt-chat-bot-wrapper .chat-main .chat-box{width:100%}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message{margin-left:50px;margin-top:10px;min-height:40px;position:relative}@media (max-width:768px){.hivegpt-chat-bot-wrapper .chat-main .chat-box .message{margin-left:0}}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message p{color:#000;color:#525252;font-family:Segoe UI,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:160%;margin:0;text-align:left}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message p a{color:#17235b!important;cursor:pointer!important;font-weight:700;text-decoration:underline}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta{align-items:end;bottom:-7px;display:flow-root;gap:10px;grid-gap:10px;position:relative;right:-10px;z-index:5}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button{background:transparent;border:none;color:#566563;cursor:pointer;padding:0;transition:all .3s}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button i{display:inline-block}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button:hover{color:#17235b}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button.up:hover i{animation:thumbsUpAnimation .5s ease-in-out;animation-fill-mode:forwards}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button.down:hover i{animation:thumbsDownAnimation .5s ease-in-out;animation-fill-mode:forwards}.hivegpt-chat-bot-wrapper .chat-main .chat{margin-bottom:20px}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message{margin-left:0}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap{background:#fff;border-radius:4px 14px 14px 14px;box-sizing:border-box;margin-top:6px;max-width:100%;overflow-wrap:break-word;padding:10px 14px 10px 26px;width:100%;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content{margin:0;max-width:100%;overflow-wrap:break-word;padding:0;width:100%;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content>div{margin:0;max-width:100%;overflow-wrap:break-word;padding:0;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content>div *{max-width:100%}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .Icon_TimeSTamp{margin:0}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser{color:#fff!important;text-align:right}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box{margin-left:auto;margin-right:0;width:-moz-fit-content;width:fit-content}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message{align-items:flex-end;display:flex;flex-direction:column;margin-left:0;margin-right:0;max-width:100%;padding-right:0;width:-moz-fit-content;width:fit-content}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap{background:#183988;border-radius:14px 4px 14px 14px;color:#fff!important;margin-top:6px;max-width:100%;overflow-wrap:break-word;padding:10px 14px;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap .chat-bubble-content,.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap .chat-bubble-content>div{max-width:100%;overflow-wrap:break-word;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap p,.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message p{color:#fff!important;text-align:left}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .dateTime{margin-left:0;margin-right:10px;text-align:right}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .dateTime span{margin-left:0;margin-right:5px}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .time-cta{justify-content:flex-end}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .Icon_TimeSTamp{justify-content:flex-end;margin:0}.hivegpt-chat-bot-wrapper .chat-main .chat .Icon_TimeSTamp{align-content:center;align-items:center;display:flex;justify-content:left;margin:0 -60px;width:auto}@media (max-width:768px){.hivegpt-chat-bot-wrapper .chat-main .chat .Icon_TimeSTamp{margin:0}}.hivegpt-chat-bot-wrapper .chat-main .chat .dateTime{color:#333232;font-size:15px;font-style:normal;font-weight:300;line-height:140%}.hivegpt-chat-bot-wrapper .chat-main .chat .dateTime span{color:#000;font-size:15px;font-style:normal;font-weight:500;line-height:140%;margin-left:15px;margin-right:5px}.hivegpt-chat-bot-wrapper .chat-main .chat:last-of-type{margin-bottom:0}.hivegpt-chat-bot-wrapper .chatFooterWrapper{background:#fff;border:2px solid hsla(0,0%,85.5%,.5882352941176471);border-radius:10px;box-shadow:2px 0 5px #e1e1e1;margin:0 15px 15px;margin-top:10px!important;transition:all .5s;width:auto}.hivegpt-chat-bot-wrapper .chatFooterWrapper:hover{border:2px solid hsla(0,0%,72.2%,.5882352941176471);box-shadow:2px 0 4px #ddd}.hivegpt-chat-bot-wrapper .chatFooterWrapper .chat-footer-upt{padding:4px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note{align-items:center;background:rgba(27,117,187,.050980392156862744);border-radius:15px;color:#000;display:inline-flex;font-size:12px;gap:8px;line-height:1;margin:0 auto 4px;padding:10px 25px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note a{text-transform:capitalize}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note i{font-size:18px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note i svg{height:18px;width:18px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note span{flex:1;gap:4px;line-height:1.3}.hivegpt-chat-bot-wrapper .chat-footer{align-items:center;display:flex;gap:8px;justify-content:space-between;padding:0;position:relative}.hivegpt-chat-bot-wrapper .chat-footer .form-control{background:#fff!important;border:0;line-height:21px;outline:0;padding:10px;position:relative;width:100%}.hivegpt-chat-bot-wrapper .chat-footer .form-control::-moz-placeholder{color:#6c7a78}.hivegpt-chat-bot-wrapper .chat-footer .form-control::placeholder{color:#6c7a78}.hivegpt-chat-bot-wrapper .chat-footer .form-control:focus{border-color:#e5ccbc}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer{align-items:center;display:flex;gap:8px;justify-content:space-between;margin-bottom:10px;position:absolute;right:15px;text-align:right}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .btn{color:#000;font-weight:500;gap:8px;max-width:150px;padding:0}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat{align-items:center;background:transparent!important;border:none;border-radius:0;box-shadow:0 1px 2px 0 rgba(16,24,40,.05);display:inline-flex;font-size:20px;height:auto;justify-content:center;width:auto}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat:hover{opacity:.8}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-again{background:#17235b;border:1px solid #17235b;color:#fff}.hivegpt-chat-bot-wrapper .cta-faqs{align-items:flex-end;display:flex;flex-direction:column;flex-wrap:wrap;gap:8px;margin-left:auto;max-width:80%;padding:10px 0 0}.hivegpt-chat-bot-wrapper .cta-faqs .cta{background:transparent;border:1px solid #c9a893;border-radius:20px 20px 0 20px;color:#333;cursor:pointer;font-family:Segoe UI,sans-serif;font-size:14px;font-style:normal;font-weight:500;line-height:160%;margin:0;min-height:44px;padding:12px 20px;text-align:left;text-decoration:none;transition:all .3s;white-space:pre-line}.spinner{align-items:center;display:flex;gap:2px;justify-content:center}.spinner>div{animation:bouncedelay 1.4s ease-in-out infinite;animation-fill-mode:both;background-color:#173330;border-radius:100%;display:inline-block;height:5px;width:5px}.spinner .bounce1{animation-delay:-.32s}.spinner .bounce2{animation-delay:-.16s}@keyframes bouncedelay{0%,80%,to{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.time-cta{align-items:center;display:flex;gap:8px;justify-content:start;margin-top:5px}@keyframes thumbsUpAnimation{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes thumbsDownAnimation{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}@media (max-width:767px){.hivegpt-chat-bot-wrapper .chat-footer{padding:10px 24px}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat{max-width:100%}.hivegpt-chat-bot-wrapper .chat-footer .form-control{height:80px}.hivegpt-chat-bot-wrapper .chat-header .closeIcon{height:28px;right:8px;top:8px;width:28px}.hivegpt-chat-bot-wrapper .chat-header .closeIcon span{font-size:14px}.hivegpt-chat-bot-wrapper .chat-header{padding:10px 24px}.hivegpt-chat-bot-wrapper .chat-header h2{font-size:20px}.cta-faqs{padding:10px 0 0}}.body-overflow-hidden{overflow:hidden}.chat-button{align-items:center;background:#17235b;border:#17235b;border-radius:50%;color:#fff;display:inline-flex;font-size:24px;height:50px;justify-content:center;width:50px}textarea{caret-color:#000}.labelChat{font-size:14px;font-weight:400;margin:0 0 10px}.chatType h4{color:#566563;text-align:center}.chatType ul{align-items:center;background:#fff;border-radius:10px;box-shadow:0 .3px .9px rgba(0,0,0,.12),0 1.6px 3.6px rgba(0,0,0,.16);display:flex;justify-content:center;list-style:none;margin:0 0 20px;padding:4px}.chatType ul li{flex:1}.chatType ul li button{align-items:center;background:#fff;border:none;border-radius:10px;font-weight:600;min-height:48px;padding:.375rem;text-align:center;text-shadow:1px 0 rgba(0,0,0,.2);width:100%}.chatType ul li button.active{background:linear-gradient(96deg,#761c79 -10.61%,#761c79 84.59%);box-shadow:0 1px 2px 0 rgba(16,24,40,.05);color:#fff}.cta_suggestions{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:20px}.cta_suggestions button{background:#fff;border:1px solid #174ae4;border-radius:10px;box-shadow:0 1.6px 3.6px 0 rgba(0,0,0,.13),0 .3px .9px 0 rgba(0,0,0,.1);color:#1543cd;font-size:14px;font-weight:600;line-height:1.2;padding:8px 12px;position:relative;text-align:left;transition:all .3s}.cta_suggestions button:hover{background:#eff3ff}.balanced .chat-footer .cta-footer .cta-chat,.balanced .chat-main .chat.botUser .chat-box .message,.balanced .chatType ul li button.active{color:#000}.balanced .chat-main .innerChat .title p span{color:#06f}.balanced mat-drawer{background-image:linear-gradient(180deg,rgba(88,190,251,.05) 60%,rgba(0,102,255,.2) 96.27%)}.balanced .cta_suggestions button:hover{border:1px solid #06f}.precise .chat-footer .cta-footer .cta-chat,.precise .chat-main .chat.botUser .chat-box .message{background:linear-gradient(96deg,#69ca6d -10.61%,#4caf50 84.59%)}.precise .chatType ul li button.active{background:linear-gradient(96deg,#4caf50 -10.61%,#4caf50 84.59%);color:#fff}.precise .chat-main .innerChat .title p span{color:#4caf50}.precise mat-drawer{background-image:linear-gradient(180deg,rgba(76,175,80,.05) 60%,rgba(76,175,80,.3) 96.27%)}.precise .cta_suggestions button:hover{border:1px solid #4caf50}.title{margin-bottom:20px}.title h2{font-size:22px;margin:0}.title h2 span{align-items:center;color:#000;display:inline-flex;gap:10px}.title h2 i{color:#000;font-size:30px;line-height:1}.title h2 i svg{height:30px;width:30px}.title p{font-weight:600;margin:0}.title p span{color:#000}.agenda-items-wrapper{padding-bottom:15px;padding-top:15px}@media (max-width:576px){.list-view .session-detail-wrapper{border:none;flex-direction:column}}.card-background-session{background:#fff;border-radius:8px}.card-background-session .body-text-color{color:#111!important}.card-background-session h2{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;font-size:20px;line-clamp:1;margin-bottom:8px;overflow:hidden}.card-background-session .session-description{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#111!important;display:-webkit-box;font-size:14px;line-clamp:2;overflow:hidden}.card-background-session .color-secondary{color:#111!important}.card-background-session p{font-size:14px}.list-view .session-detail-wrapper .s27-btn-icon{background:transparent;border:transparent}.list-view .session-detail-wrapper{border-left:3px solid transparent;display:flex;margin-bottom:16px}.thumbnail{align-items:center;display:flex;height:160px;justify-content:center;min-width:160px;position:relative;width:160px}.thumbnail img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}@media (max-width:576px){.thumbnail{height:160px;min-height:unset;width:100%}}.thumbnail .play-btn{align-items:center;background-color:transparent;border:0;bottom:0;display:flex;font-size:60px;justify-content:center;left:0;position:absolute;right:0;top:0;width:100%}.thumbnail .play-btn span{font-size:80px;text-shadow:0 0 14px rgba(74,74,74,.45)}.content{flex-grow:1}.actions{background-color:transparent!important}.speakers{margin-bottom:0;margin-top:10px;padding:0}.speakers li{align-items:unset;display:flex}.speakers li .content{font-size:12px!important}.speakers .image{border-radius:100%;height:40px;min-width:40px;overflow:hidden;width:40px}.speakers img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.grid-2-cols{display:grid;grid-gap:15px;grid-template-columns:calc(55% - 10px) calc(50% - 10px);padding-right:20px}@media (max-width:768px){.grid-2-cols{grid-template-columns:calc(50% - 10px) calc(50% - 10px)}}@media (max-width:575px){.grid-3-cols{grid-template-columns:100%}}.quick-prompts-extended{align-items:flex-start!important;margin-left:0!important}.border-shape .s27-scroll::-webkit-scrollbar{border-radius:30px;width:3px}.border-shape .s27-scroll::-webkit-scrollbar-track{background:#f1f1f1;border-radius:30px}.border-shape .s27-scroll::-webkit-scrollbar-thumb{background:#888;border-radius:30px}.box{display:table;height:275px;margin:10px 0;width:100%}.tiktokwrapper{display:grid;gap:10px;grid-template-columns:repeat(2,1fr);height:100%}.tiktokwrapper .tiktokshell{background:#3d2b8f;border:2px solid #fff;border-radius:5px;box-shadow:0 0 6px #494949;height:100%;min-height:275px;min-width:160px;position:relative;width:100%}.tiktokwrapper .overlymask{background-image:url(https://e1cdn.social27.com/digitalevents/HiveGpt/screen-overlay.png);background-position:0 0;bottom:0;height:100%;left:0;position:absolute;width:100%;z-index:6}.tiktokwrapper .videoPhotobox{bottom:0;height:272px;left:0;overflow:hidden;position:absolute;width:auto;z-index:6}.tiktokwrapper .videoPhotobox video{-o-object-fit:cover;border-radius:0;cursor:pointer;height:270px;object-fit:cover;outline:0;transition:.3s ease-in-out;width:100%}.tiktokwrapper .videoPhotobox img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.tiktokwrapper .playBtn{align-items:center;border:none;cursor:pointer;display:flex;height:40px;justify-content:center;left:0;margin:0 auto;position:absolute;right:0;top:105px;transition:all 1s;width:40px;z-index:10}.tiktokwrapper .playBtn:hover{transform:scale(1.2)}.tiktokwrapper .noPhoto{align-items:center;border:none;cursor:pointer;display:flex;height:40px;justify-content:center;left:0;margin:0 auto;position:absolute;right:0;top:105px;transition:all 1s;z-index:6}.tiktokwrapper .noPhoto h3{color:#fff;font-size:46px}.tiktokwrapper .onshell-content{bottom:10px;left:5px;position:absolute;z-index:10}.tiktokwrapper .onshell-content .title-shell{margin:0 10px}.tiktokwrapper .onshell-content h3{color:#fff;font-size:13px;font-weight:500}.tiktokwrapper .onshell-content .companyName{color:#eaeaea;font-size:12px;font-weight:400}.tiktokwrapper .onshell-content .button-shell button{background:#4e4e4e;border:none;border-radius:2px;color:#fff;font-size:11px;margin:0 1px;padding:4px 7px;text-transform:capitalize}.tiktokwrapper .onshell-content .Connectbtn{background:linear-gradient(149deg,#06f,#06f)!important}.skeleton-box{background-color:#dddbdd;display:inline-block;height:1em;overflow:hidden;position:relative}.skeleton-box:after{animation:shimmer 2s infinite;background-image:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.2) 20%,hsla(0,0%,100%,.5) 60%,hsla(0,0%,100%,0));bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:translateX(-100%);z-index:0}@keyframes shimmer{to{transform:translateX(100%)}}.blog-post__headline{font-size:1.25em;font-weight:700}.blog-post__meta{color:#6b6b6b;font-size:.85em}.o-media{display:flex}.o-media__body{flex-grow:1;margin-left:1em}.o-vertical-spacing>*+*{margin-top:.75em}.o-vertical-spacing--l>*+*{margin-top:2em}.copy{background:none;border:none;cursor:pointer;padding:5px;transition:transform .2s ease}.copy.active{transform:scale(1.1)}.copy svg{fill:#566563;height:18px;width:18px}.copyBox{background:#f7f7f7;border-radius:13px;color:#566563;display:flex;float:right;gap:12px;padding:5px 10px;position:relative;width:135px}.copyBox button{background:transparent;border:none;color:#566563;cursor:pointer;padding:0;transition:all .3s}.copyBox button i{display:inline-block}.copyBox button:hover{color:#17235b}.copyBox button.up:hover i{animation:thumbsUpAnimation .5s ease-in-out;animation-fill-mode:forwards}.copyBox button.down:hover i{animation:thumbsDownAnimation .5s ease-in-out;animation-fill-mode:forwards}.din{display:inline-flex}.chatFooterWrapper{background-color:#f5f5f5;border-top:1px solid #ccc;justify-content:center}.chat-footer,.chatFooterWrapper{align-items:center;flex-direction:column}.chat-footer{background:#fff;display:flex;margin-bottom:10px;width:100%}.topinfo-containerbox{align-items:center;background:#f9f9f9;border-bottom:1px solid #efefef;display:none;justify-content:space-between;margin:0;padding:5px 10px 8px;width:100%}@media (max-width:768px){.topinfo-containerbox{flex-direction:column}}.agents_note_wrapper{display:flex;justify-content:space-around}.bottombox-wrapper{display:flex;padding:10px;width:100%}.dropdown-wrapper{margin-right:10px;position:relative}.dropdown-header{align-items:center;background:#fff;border:1px solid #ddd;border-radius:48px;color:#414141!important;cursor:pointer;display:flex;font-size:14px;margin-bottom:0;padding:.5rem 1.5rem;white-space:nowrap}.dropdown-header span{margin-right:8px}.dropdown-menu{background-color:#fff;border:1px solid #ededed;border-radius:5px;bottom:100%!important;box-shadow:0 2px 4px rgba(0,0,0,.1);display:block;left:0;margin-bottom:10px;max-height:200px;overflow-y:auto;padding:0;position:absolute;top:auto;width:230px;z-index:1000}.dropdown-menu label{cursor:pointer;display:block;font-size:16px;padding:5px 15px}.dropdown-menu label input{height:16px;width:16px}.dropdown-menu label:hover{background-color:#f0f0f0}.border-shape{flex-grow:1}.form-control-1{border:1px solid #ddd;border-radius:5px;padding:10px;width:100%}.cta-footer,.text-left .note-section{align-items:center;display:flex}.text-left .note-section{background:#fff;border-radius:5px;box-shadow:0 2px 4px rgba(0,0,0,.1);margin-top:10px;max-width:800px;padding:10px;width:100%}.text-left .note{align-items:center;color:#555;display:flex}.text-left .note i{margin-right:8px}.text-left .note .text{font-size:14px}.card-container{display:flex;gap:15px}.custom-card{background:#fffefe;border:1px solid #ddd;border-radius:.25rem;box-shadow:0 4px 8px rgba(0,0,0,.1);margin-bottom:10px;overflow:hidden;width:18rem}.custom-card .card-body{padding:10px}.custom-card .card-title{font-size:1.25rem;font-weight:700}.custom-card .card-text{font-size:1rem;text-align:left}.custom-card .btn-primary{background-color:#007bff;border:none;border-radius:.25rem}.custom-card .card-footer{background-color:#f8f9fa;color:#6c757d;padding:10px;text-align:center}.list-container{list-style:none;padding:0}.list-container li{background:#f5f5f5;border-radius:8px;font-size:13px;margin-bottom:5px;padding:6px 12px}.list-container li:hover{color:#000;cursor:pointer}.attendee-cards-section,.booth-rep-cards-section,.session-cards-section,.speaker-cards-section,.sponsor-cards-section{display:block;margin-bottom:4px;margin-top:8px;max-width:100%;overflow:visible;visibility:visible;width:100%}.session-cards-section{min-width:0;overflow-x:hidden}.card-message-bubble{border-radius:4px 14px 14px 14px;box-sizing:border-box;margin-bottom:20px;max-width:100%;overflow-wrap:break-word;padding:10px 14px 10px 26px;width:100%}.card-message-bubble .card-message-text{margin:0}.card-message-text{margin-bottom:0}.session-cards-container{display:grid;gap:20px;grid-template-columns:1fr;max-width:100%;min-width:0;overflow:hidden;width:100%}@media (min-width:600px){.session-cards-container{grid-template-columns:repeat(2,1fr)}}.session-card-item{border:none;border-radius:18px;box-sizing:border-box;color:#fff;display:flex;flex-direction:column;justify-content:flex-start;max-width:100%;min-height:220px;min-width:0;overflow:hidden;padding:25px;position:relative}.session-card-item,.session-card-item-ondemand{background:linear-gradient(135deg,#9f7aea,#805ad5)}.session-card-item-ondemand{min-height:auto;min-height:220px;padding:20px 24px}.session-card-item-ondemand .session-card-ondemand-badge{background:#7d69bd;border-radius:999px;color:#fff;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.02em;margin-bottom:8px;padding:4px 10px;width:-moz-fit-content;width:fit-content}.session-card-item-ondemand .session-card-ondemand-available{color:#fff;font-size:14px;font-weight:400;margin-bottom:6px}.session-card-item-ondemand .session-card-ondemand-title{font-size:18px;font-weight:700;line-height:1.3;margin:0 0 8px}.session-card-item-ondemand .session-card-ondemand-desc{-webkit-line-clamp:3;color:#fff;font-size:14px;font-weight:400;line-clamp:3;margin-bottom:12px;opacity:.95}.session-card-item-ondemand .session-card-actions-row{margin-top:auto}.session-card-header{align-items:center;display:flex;margin-bottom:12px;margin-left:80px;min-height:40px}.session-card-date-badge{align-items:center;background:#000;border-radius:50%;display:flex;flex-direction:column;font-size:14px;font-weight:700;height:60px;justify-content:center;left:20px;position:absolute;top:20px;width:60px}.session-card-date-day{color:#fff;display:block;font-size:14px;font-weight:700;line-height:1.2}.session-card-date-month{color:#fff;display:block;font-size:15px;font-weight:700}.session-card-date-na{color:#fff;display:block;font-size:12px;font-weight:700;line-height:1.2}.session-card-room-time{min-width:0;overflow-wrap:break-word}.session-card-room{color:#fff;font-size:18px;font-weight:600;line-height:1.3}.session-card-time{color:#fff;font-size:13px;line-height:1.3;opacity:.9}.session-card-title{color:#fff;font-size:18px;font-weight:600;line-height:1.35;margin:6px 0 8px;min-width:0;overflow-wrap:break-word}.session-card-meta{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.session-card-meta-row{align-items:baseline;display:flex;font-size:13px;gap:8px;line-height:1.35}.session-card-meta-label{color:hsla(0,0%,100%,.9);flex-shrink:0;font-weight:500}.session-card-meta-value{color:#fff;font-weight:400;min-width:0}.session-card-description{-webkit-box-orient:vertical;-webkit-line-clamp:3;color:#fff;display:-webkit-box;flex:1;font-size:14px;line-clamp:3;line-height:1.4;min-height:0;opacity:.95;overflow:hidden}.session-card-status{align-items:center;color:hsla(0,0%,100%,.95);display:flex;font-size:13px;font-weight:400;gap:8px;justify-content:flex-end;margin-bottom:12px}.session-card-status-bullet{background:hsla(0,0%,100%,.9);border-radius:50%;height:6px;min-width:6px;width:6px}.session-card-actions-row{align-items:center;display:flex;flex-wrap:nowrap;gap:12px;justify-content:space-between;margin-top:auto;min-width:0}.session-card-item .speakers-UIcard{align-items:center;display:flex;flex:0 0 auto;min-width:0}.session-card-item .speaker-tooltip-wrap{display:inline-block;position:relative}.session-card-item .speaker-tooltip{background:rgba(0,0,0,.85);border-radius:4px;bottom:100%;color:#fff;font-size:12px;font-weight:500;left:50%;margin-bottom:6px;opacity:0;padding:4px 8px;pointer-events:none;position:absolute;transform:translateX(-50%);transition:opacity .15s ease,visibility .15s ease;visibility:hidden;white-space:nowrap;z-index:10}.session-card-item .speaker-tooltip-wrap:hover .speaker-tooltip{opacity:1;visibility:visible}.session-card-item .speaker{align-items:center;background:#e6e6e6;border-radius:50%;color:#333;display:flex;font-family:Arial,sans-serif;font-weight:600;height:40px;justify-content:center;margin-left:-10px;overflow:hidden;width:40px}.session-card-item .speaker:first-child{margin-left:0}.session-card-item .speaker img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.session-card-item .speaker.initials{font-size:14px}.session-card-item .speaker img:not([src]),.session-card-item .speaker img[src=\"\"]{opacity:0}.session-card-actions{display:flex;flex:0 0 auto;flex-wrap:wrap;gap:10px;justify-content:flex-end;margin-top:0;min-width:0}.session-card-btn{border:none;border-radius:8px;cursor:pointer;font-size:14px;font-weight:600;min-width:80px;padding:8px 20px;transition:opacity .2s}.session-card-btn-primary{background:#000;color:#fff}.session-card-btn-primary:hover{opacity:.9}.session-card-btn-secondary{background:#000;border:none;color:#fff}.session-card-btn-secondary:hover{opacity:.9}.session-card-btn-disabled{cursor:not-allowed!important;opacity:.5;pointer-events:none}.session-card-btn-disabled.session-card-btn-primary,.session-card-btn-disabled.session-card-btn-secondary{background:#000;color:#fff}.session-card-when-disable{color:hsla(0,0%,100%,.9);font-size:13px;font-style:italic;margin-bottom:10px}.session-card-meeting-delayed{color:hsla(0,0%,100%,.95);font-size:13px;margin-bottom:10px}.attendee-cards-container{display:flex;flex-wrap:wrap;gap:20px;width:100%}.attendee-card-item{flex:0 0 calc(25% - 15px);max-width:215px!important}@media (max-width:1200px){.attendee-card-item{flex:0 0 calc(33.33333% - 13.33333px)}}@media (max-width:768px){.attendee-card-item{flex:0 0 calc(50% - 10px)}}@media (max-width:480px){.attendee-card-item{flex:0 0 100%}}.attendee-card{background-color:#5a5a5a;background-position:50%;background-size:cover;border-radius:8px;color:#fff;display:flex;flex-direction:column;height:320px;justify-content:flex-end;min-width:215px;overflow:hidden;padding:20px;position:relative}@media (max-width:480px){.attendee-card-item{max-width:100%!important}.attendee-card{height:490px}}.attendee-card-has-video{background-image:none!important}.attendee-card-video{-o-object-fit:cover;height:100%;left:0;object-fit:cover;position:absolute;top:0;width:100%;z-index:1}.attendee-card-play-btn{border:1px solid hsla(0,0%,100%,.35);border-radius:50%;font-weight:700;height:40px;left:50%;line-height:54px;text-align:center;top:40%;transform:translate(-50%,-50%);width:40px}.attendee-card-mute-btn,.attendee-card-play-btn{align-items:center;background:rgba(0,0,0,.45);color:#fff;cursor:pointer;display:flex;font-size:0;justify-content:center;padding:0;position:absolute;z-index:4}.attendee-card-mute-btn{border:1px solid hsla(0,0%,100%,.25);border-radius:50%;font-weight:600;height:34px;right:10px;top:10px;width:34px}.attendee-card-mute-btn .material-icons,.attendee-card-play-btn .material-icons{font-size:28px;line-height:1}.attendee-card-initials{background:linear-gradient(135deg,#6b7280,#4b5563);color:hsla(0,0%,100%,.9);display:flex;font-size:58px;font-weight:400;justify-content:center;letter-spacing:-2px;padding:50px 0;z-index:1}.attendee-card-initials,.attendee-overlay{height:100%;left:0;position:absolute;top:0;width:100%}.attendee-overlay{background:linear-gradient(0deg,rgba(0,0,0,.85),rgba(0,0,0,.25));pointer-events:none;z-index:2}.attendee-content{position:relative;z-index:3}.attendee-name{font-size:18px;font-weight:600;margin-bottom:4px}.attendee-company,.attendee-name{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;line-clamp:2;overflow:hidden}.attendee-company{font-size:13px;margin-bottom:8px;opacity:.85}.attendee-desc{font-size:14px;margin-bottom:12px;opacity:.95;overflow:hidden}.attendee-desc-collapsed{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;line-clamp:2}.attendee-desc-expanded{display:block;margin-bottom:6px;overflow:visible}.attendee-read-more{background:transparent;border:0;color:hsla(0,0%,100%,.9);cursor:pointer;display:inline-block;font-size:12px;font-weight:600;margin:-6px 0 10px;padding:0;text-decoration:underline}.attendee-buttons{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;gap:8px;width:-moz-fit-content;width:fit-content}.attendee-buttons .btn{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;border:none;border-radius:3px;cursor:pointer;flex:1 1 0;font-size:12px;min-width:80px;padding:5px 8px;text-align:center;text-rendering:optimizeLegibility;white-space:nowrap}@media (max-width:480px){.attendee-buttons{flex-wrap:wrap;width:100%!important}.attendee-buttons .btn{flex:1 1 100%;max-width:100%;white-space:normal}}.attendee-card-btn-connect{background:#0d6efd;color:#fff}.attendee-card-btn-connect:hover:not(:disabled){opacity:.9}.attendee-card-btn-view-profile{background:#494949;color:#fff}.attendee-card-btn-view-profile:hover:not(:disabled){opacity:.9}.attendee-card-btn-request-sent{background:#0d6efd;color:#fff;cursor:not-allowed!important;opacity:.5}.attendee-card-btn-disconnect{background:#0d6efd;color:#fff}.attendee-card-btn-disconnect:hover{background:hsla(0,0%,100%,.3);opacity:.95}.attendee-card-btn:disabled{cursor:not-allowed!important;opacity:.6}.show-more-cards-btn{align-items:center;background:#fff;border:1.5px dashed #ccc;border-radius:12px;color:#06f;cursor:pointer;display:flex;font-size:14px;font-weight:600;justify-content:center;margin-top:12px;padding:10px 16px;width:-moz-fit-content;width:fit-content}.show-more-cards-btn:hover{background:#f8f9fa}.booth-rep-card-grid{display:grid;gap:10px;grid-template-columns:repeat(3,1fr)}@media (max-width:1204px){.booth-rep-card-grid{grid-template-columns:repeat(2,1fr)!important}.booth-rep-card-logo{height:120px!important}.booth-rep-card-logo img{-o-object-fit:contain;max-height:80px!important;object-fit:contain}}@media (max-width:768px){.booth-rep-card-grid{grid-template-columns:repeat(2,1fr)}.booth-rep-card-logo{height:90px!important}.booth-rep-card-logo img{-o-object-fit:contain;max-height:60px!important;object-fit:contain}}.booth-rep-card{background:linear-gradient(90deg,#9faffc,#a1afff 40%,#adb9ff);border-radius:6px;display:flex;flex-direction:column;padding:18px}.booth-rep-card-logo{align-items:center;background:#fff;border:1px solid #f7f7f7;border-radius:4px;box-shadow:0 0 2px #ddd;display:flex;height:140px;justify-content:center;margin-bottom:12px;width:100%}.booth-rep-card-logo img{-o-object-fit:contain;max-height:90px;object-fit:contain}.booth-rep-card-logo-placeholder{color:#9faffc;font-size:48px;font-weight:600;text-transform:uppercase}.booth-rep-card-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#1d2b4f;display:-webkit-box;font-size:18px;font-weight:600;line-clamp:2;margin-bottom:10px;overflow:hidden}.booth-rep-card-desc{-webkit-box-orient:vertical!important;-webkit-line-clamp:3!important;color:#3a3a3a!important;display:-webkit-box!important;font-size:14px!important;line-clamp:3!important;line-height:1.3!important;margin-bottom:18px!important;overflow:hidden!important}.booth-rep-card-btn{align-self:flex-start;background:#494949;border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:14px;margin-top:auto;padding:10px 18px;transition:.3s}.booth-rep-card-btn:hover{background:#5a5a5a}.collapsible-container{margin-bottom:5px;overflow:hidden;width:100%}.collapsible-header{cursor:pointer;display:flex;padding:15px}.collapsible-header .header-icon{font-size:20px;margin-right:10px}.collapsible-header .header-title{flex:1;font-size:18px}.collapsible-header .toggle-icon{font-size:18px;margin-left:18px}.collapsible-content{background-color:#f8f9fa;color:#333;padding:15px;width:100%}.collapsible-content.show{display:block}.researchingCard{margin:5px auto}.card-header{background:#eee;border-bottom:0;border-radius:8px 8px 0 0;display:flex!important;padding:8px 15px;width:auto}.icon{font-size:20px;line-height:5px}.rotate{transform:rotate(180deg)}.collapse{display:none}.uptList{background:rgba(245,222,179,.1411764705882353);border-radius:0 0 10px 10px;margin-bottom:20px!important}.list-group-item{color:#0f0f0f;font-size:15px;margin:1px 0;padding:0 18px}.sources-container{align-items:flex-start;display:flex;gap:15px}.source-card{background-color:#f0f3f5;border-radius:10px;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;justify-content:space-between;padding:15px;position:relative;transition:box-shadow .3s ease;width:100%}.popup{background-color:#fff;border-radius:5px;box-shadow:0 4px 8px rgba(0,0,0,.2);left:50%;opacity:0;padding:10px;position:absolute;top:100%;transform:translateX(-50%) translateY(-10px);transition:opacity .3s ease,transform .3s ease;visibility:hidden;white-space:normal;width:100%;z-index:10}.popup h5{font-size:14px;font-weight:600;line-height:1.2;margin:5px 0 10px}.popup p{font-size:12px;line-height:1.4;margin:0}.popup h5:hover{color:#007bff;cursor:pointer}.popup .source-url{color:#000;text-decoration:none}.popup .source-url:hover{color:#007bff;cursor:pointer;text-decoration:underline}.source-card:hover .popup{opacity:1;transform:translateX(-50%) translateY(-15px);visibility:visible}.source-card:hover{box-shadow:0 4px 8px rgba(0,0,0,.1);transform:scale(1.05)}.source-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;font-size:14px;font-weight:500;height:55px;line-clamp:2;line-height:1.5;overflow:hidden;text-align:left;text-overflow:ellipsis}.source-title img{margin-left:10px;width:20px}.source-url{align-items:center;color:#6c757d;display:flex;font-size:12px;text-align:left}.source-url img{border-radius:50%;height:16px;margin-right:5px;width:16px}.sourceDraweContainer .container{background-color:#fff;padding:20px}.sourceDraweContainer .sources-list{list-style:none;padding:0}.sourceDraweContainer .sources-list li{align-items:flex-start;display:flex;margin-bottom:15px}.sourceDraweContainer .sources-list input[type=checkbox]{flex-shrink:0;margin-right:15px;margin-top:8px}.sourceDraweContainer .source-content{background-color:#f5f2f2;border:1px solid #ddd;border-radius:8px;box-shadow:0 2px 4px rgba(0,0,0,.1);cursor:pointer;flex:1;padding:12px}.sourceDraweContainer .source-content:hover{background:#ccc}.sourceDraweContainer .source-title{display:block;font-size:1rem;font-weight:500;height:auto!important;margin-bottom:4px}.sourceDraweContainer .source-description{display:block;font-size:.875rem}.sourceDraweContainer .image-container{align-items:center;display:flex;margin:10px 0}.sourceDraweContainer .image-container img{-o-object-fit:cover;border:1px solid #ddd;border-radius:50%;height:16px;margin-right:5px;object-fit:cover;width:16px}.sourceDraweContainer .image-container span{color:#555;font-size:13px}.closeButtonEditor{border:0;border-radius:100%;height:32px;padding:3px 0 0;position:absolute;right:10px;top:5px;width:32px}.closeButtonSource{background:none!important;border-color:transparent!important;box-shadow:none!important;color:inherit;cursor:pointer;float:right;margin-top:20px;transition:color .2s ease-in-out}.closeButtonSource.closeplaygroundbutton{display:none!important}.graph-img{background:hsla(0,0%,99.6%,.23137254901960785);border-radius:15px;padding:15px;width:90%}.chat-textarea{background-color:#fff;border:none;box-sizing:border-box;font-size:15px;height:30px;line-height:1.5;overflow-y:hidden;padding:10px;resize:none;transition:all 1s;width:100%}.chat-textarea:focus,.chat-textarea:hover{height:60px}.chat-textarea:focus{outline:none}.fixed-btn{background-color:#000;border:none;border-radius:8px 8px 0 0;color:#fff;cursor:pointer;font-size:16px;padding:5px 12px;position:fixed;right:-22px;top:46%;transform:translateY(-50%) rotate(270deg);transform-origin:center;transition:all .5s;z-index:1000000}.fixed-btn:hover{background-color:#5b5b5b}.fixed-btn-close{background-color:#000;border:none;border-radius:8px 8px 0 0;color:#fff;cursor:pointer;font-size:16px;padding:5px 16px;position:fixed;right:549px;top:46%;transform:translateY(-50%) rotate(270deg);transform-origin:center;transition:all .5s;z-index:1000000}.fixed-btn-close:hover{background-color:#5b5b5b}.btn.rotate{transform:rotate(-15deg)}.btn.rotate:hover{transform:rotate(0deg)}.btn.cta-chat{align-items:center;aspect-ratio:1/1;background:#f3f3f3;border:none;border-radius:50%;color:#787777;display:flex;flex-shrink:0;height:40px!important;justify-content:center;max-height:40px!important;max-width:40px!important;padding:0;width:40px!important}.btn.cta-chat:hover{background:#d7d7d7;color:#666}.btn.cta-chat svg{vertical-align:middle}.btn.cta-chat.voice-btn{border-radius:9999px;flex-shrink:0;gap:8px;justify-content:flex-start;max-width:40px;min-width:40px;overflow:hidden;padding-left:11px;padding-right:11px;transition:max-width .35s ease,width .35s ease,background-color .25s ease,color .25s ease,padding .3s ease;width:40px}.btn.cta-chat.voice-btn .voice-btn-icon{flex-shrink:0}.btn.cta-chat.voice-btn .voice-btn-text{font-size:14px;font-weight:500;max-width:0;opacity:0;overflow:hidden;transition:opacity .25s ease .1s,max-width .3s ease .05s;white-space:nowrap}.btn.cta-chat.voice-btn:hover{background:#0d9488!important;color:#fff!important;padding-left:14px;padding-right:16px}.btn.cta-chat.voice-btn:hover .voice-btn-text{max-width:4em;opacity:1}.chat-footer-upt{padding:4px}.workflowbox{align-items:center;border:1px solid transparent;border-radius:48px;color:#414141!important;cursor:pointer;display:flex;font-size:14px;margin-bottom:0;padding:.5rem 1.5rem;transition:all .5s;white-space:nowrap}.workflowbox:hover{background:#fff;border:1px solid #ddd}.workflowbox svg{margin:0 10px}.edit-boxDrawer{border-left:1px solid #ddd;box-shadow:1px 1px 15px hsla(0,0%,86.7%,.7686274509803922)!important}.edit-boxDrawer mat-drawer-content,ng-deep .edit-boxDrawer mat-drawer-content{margin-left:0!important;margin-right:0!important}.SearchTitle{font-size:16px!important;text-transform:none}.exicution{background:#f9f9f9;margin:30px 0!important;padding:15px 20px}.new-conversationbutton2{align-items:center;background:#f5f5f5;border:1px solid #e3e3e3;border-radius:10px;cursor:pointer;display:flex;font-size:14px;justify-content:space-around;padding:6px;position:absolute;right:88px;top:20px!important;transition:all .5s;width:120px;z-index:1000}.new-conversationbutton2:hover{background:#eee}@media (max-width:768px){.new-conversationbutton2{align-items:center;font-size:11px!important;padding:.5px!important;position:fixed!important;top:22px!important;width:90px!important}}.chat-close-button{align-items:center;color:#333;cursor:pointer;display:flex;font-size:14px;gap:6px;justify-content:center;position:absolute;right:20px;top:25px!important;transition:all .5s;z-index:1000}.chat-close-button .chat-close-button-icon{align-items:center;display:inline-flex;justify-content:center}.chat-close-button .chat-close-button-icon svg{display:block}.chat-close-button:hover{background:#eee}@media (max-width:768px){.chat-close-button{font-size:11px!important;padding:6px 8px!important;position:fixed!important;right:12px!important;top:18px!important}}.NoteTxt{margin:0 auto;margin-bottom:10px!important}.NoteTxt .text{margin:0 5px}.form-container{width:100%}.progress-container{align-items:center;display:flex}.circular-loader{border:4px solid rgba(0,0,0,.1);border-radius:50%;box-sizing:border-box;height:50px;position:relative;width:50px}.loader-spinner{animation:rotate-loader 1s linear infinite;border:2px solid #2196f3;border-radius:50%;border-top-color:transparent;box-sizing:border-box;height:100%;left:0;position:absolute;top:0;width:100%}.loader-text{color:#333;font-size:12px;font-weight:700;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.loader-label{color:#333;font-size:16px;margin-left:20px}.checkmark{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.checkmark-circle{animation:stroke .6s ease-in-out forwards;stroke:#4caf50;stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4}.checkmark-check{animation:stroke-check .4s ease-in-out .4s forwards;stroke:#4caf50;stroke-dasharray:48;stroke-dashoffset:48;stroke-linecap:round;stroke-linejoin:round;stroke-width:4}@keyframes stroke{to{stroke-dashoffset:0}}@keyframes stroke-check{to{stroke-dashoffset:0}}@keyframes rotate-loader{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes checkmark-animation{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}.circular-loader.completed .loader-spinner{animation:none;transform:rotate(1turn)}.icon-button{background-color:transparent;border:none;color:#333;cursor:pointer;font-size:24px}.icon-button:focus{outline:none}.icon-button:hover{color:#007bff}.modal{background-color:rgba(0,0,0,.4);display:block;height:100%;left:0;padding-top:0;position:fixed;top:0;width:100%;z-index:1000001}.modal-content{background-color:#fff;border-radius:8px;box-shadow:0 4px 8px rgba(0,0,0,.1);height:600px;margin:5% auto;padding:20px;position:relative;width:82%}.close{color:#aaa;float:right;font-size:28px;font-weight:700}.close:focus,.close:hover{color:#000;cursor:pointer;text-decoration:none}.SearchTitle.botUser{font-size:30px!important;text-transform:none!important}.SearchTitle.botUser h2,.SearchTitle.botUser p{font-size:1.7rem!important}.title_chat{display:flex;margin:0;padding:0}.title_chat h2{align-items:center;display:flex;font-size:20px;gap:10px;margin:10px 0}.title_chat h2 p{display:inline!important}.title_chat h2 span:before{content:\"\"!important}@media (max-width:768px){.title_chat h2{align-items:start;flex-direction:column;font-size:16px}}.small-title{font-size:12px;margin:2px 0}.titleSection{margin:0}.titleSection h2{color:#000;font-size:20px;margin:0}.inputs-section{background-color:#f7f7f7;border-radius:5px;margin:0 0 10px;padding:10px 15px 0}.inputs-section h3{font-size:16px}.actions-section{background-color:#f9f9f9;border-radius:5px;height:500px;margin-bottom:20px;overflow-y:auto;padding:15px}.timeline{margin-bottom:20px;padding-left:40px;position:relative}.timeline:before{border-right:2px dashed #cecece;content:\"\";height:100%;left:19px;position:absolute}.timeline-item{margin-bottom:20px;position:relative}.timeline-item:before{background-color:#007bff;border-radius:50%;content:\"\";height:20px;left:-30px;position:absolute;top:0;width:20px;z-index:1}.timeline-item h4{color:#000;font-size:16px;font-weight:700;margin:0}.timeline-item pre{background-color:#fff;border:1px solid #ddd;border-radius:5px;padding:10px;white-space:pre-wrap}.timestamp-section{color:#666;font-style:normal;justify-content:space-between}.mic-btn{background-color:#ff4d4d;border:none;border-radius:50%;color:#fff;cursor:pointer;font-size:1.5em;padding:10px}.mic-btn:active{background-color:#f66}.actions-section h3{font-size:16px}.close-wrapper{display:flex;justify-content:right;position:absolute;right:22px;top:0;width:100%}.close_pop{color:#aaa;cursor:pointer;font-size:30px;font-weight:400}.chat-avatar,.close_pop{align-items:center;display:flex;justify-content:center}.chat-avatar{background:#fcfcfc;border:1px solid #dfdfdf;border-radius:50%;flex-shrink:0;height:44px;min-height:44px;min-width:44px;overflow:hidden;width:44px}.chat-avatar-img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.chat-avatar-initials{-moz-user-select:none;-webkit-user-select:none;color:#555;font-size:1rem;font-weight:600;text-transform:uppercase;user-select:none}.chat-avatar-initials-assistant{color:#000}.chat-avatar-initials-user{color:#761c79}.user-Box{align-items:center;display:flex}.bards{position:absolute;right:0;top:20px}::ng-deep .code-container{margin:20px 0;position:relative}::ng-deep .copy-button{background-color:#007bff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:5px 10px;position:absolute;right:10px;top:10px}::ng-deep .copy-button:hover{background-color:#0056b3}::ng-deep .code_block.diff{background-color:#f8f8f8;border-left:4px solid #ccc;overflow:auto;padding:10px}::ng-deep .heading003{color:#000;font-size:20px;font-weight:700}::ng-deep .listing{list-style:decimal;margin:0 25px;padding:0}.line{background-color:#e8e8e8;border-radius:15px;display:inline-block;height:15px;width:15px}.load-2 .line:last-child{animation:loadingB 1.5s 1s infinite;margin:5px 0}.load-2 .line:nth-last-child(2){animation:loadingB 1.5s .5s infinite;margin:5px 0}.load-2 .line:nth-last-child(3){animation:loadingB 1.5s 0s infinite;margin:5px 0}.load-1 .line:last-child{animation:loadingA 1.5s 1.2s infinite;margin:5px 0}.load-1 .line:nth-last-child(2){animation:loadingA 1.5s .8s infinite;margin:5px 0}.load-1 .line:nth-last-child(3){animation:loadingA 1.5s .2s infinite;margin:5px 0}@keyframes loadingB{0%{width:65px}50%{width:235px}to{width:65px}}@keyframes loadingA{0%{width:45px}50%{width:205px}to{width:45px}}.chat-thinking{padding-left:20px!important}.chat-thinking .thinking-row{align-items:center;display:flex;gap:8px;margin-top:6px}.chat-thinking .thinking-dots{align-items:center;display:flex;gap:4px}.chat-thinking .thinking-dot{animation:thinking-bounce 1.4s ease-in-out infinite both;background:#06f;border-radius:50%;height:6px;width:6px}.chat-thinking .thinking-dot:first-child{animation-delay:0s;background:#9ca3af}.chat-thinking .thinking-dot:nth-child(2){animation-delay:.2s;background:#06f}.chat-thinking .thinking-dot:nth-child(3){animation-delay:.4s;background:#17235b}.chat-thinking .thinking-text{color:#6b7280;font-size:14px;font-weight:400}@keyframes thinking-bounce{0%,80%,to{opacity:.6;transform:scale(.8)}40%{opacity:1;transform:scale(1.1)}}.loaderbox{height:60px;margin:10px 0;position:relative}.loader-pkg{bottom:0;left:0;margin:0;top:0;width:250px}.loader--dot,.loader-pkg{height:20px;position:absolute}.loader--dot{animation-duration:3s;animation-iteration-count:infinite;animation-name:loader;animation-timing-function:ease-in-out;background-color:#1a6774;border-radius:100%;width:20px}.loader--dot:first-child{animation-delay:.5s;background-color:#618e93}.loader--dot:nth-child(5){animation-delay:.4s;background-color:#3fb0c3}.loader--dot:nth-child(4){animation-delay:.3s;background-color:#40b8cd}.loader--dot:nth-child(3){animation-delay:.2s;background-color:#ec8828}.loader--dot:nth-child(2){animation-delay:.1s;background-color:#fdc25d}.loader--dot:first-child{animation-delay:0s;background-color:#f4e3be}.loader--text{left:0;margin:0;position:absolute;top:200%;width:4rem}.loader--text:after{animation-duration:3s;animation-iteration-count:infinite;animation-name:loading-text;content:\"Loading\";font-weight:700}@keyframes loader{15%{transform:translateX(230px)}45%{transform:translateX(0)}65%{transform:translateX(230px)}95%{transform:translateX(0)}}@keyframes loading-text{0%{content:\"Loading\"}25%{content:\"Loading.\"}50%{content:\"Loading..\"}75%{content:\"Loading...\"}}::ng-deep .loaderbox{height:60px;margin:10px 0;position:relative}::ng-deep .loader-pkg{bottom:0;height:20px;left:0;margin:0;position:absolute;top:0;width:250px}::ng-deep .loader--dot{animation-duration:3s;animation-iteration-count:infinite;animation-name:loader;animation-timing-function:ease-in-out;background-color:#1a6774;border-radius:100%;height:20px;position:absolute;width:20px}::ng-deep .loader--dot:first-child{animation-delay:.5s;background-color:#618e93}::ng-deep .loader--dot:nth-child(5){animation-delay:.4s;background-color:#3fb0c3}::ng-deep .loader--dot:nth-child(4){animation-delay:.3s;background-color:#40b8cd}::ng-deep .loader--dot:nth-child(3){animation-delay:.2s;background-color:#ec8828}::ng-deep .loader--dot:nth-child(2){animation-delay:.1s;background-color:#fdc25d}::ng-deep .loader--dot:first-child{animation-delay:0s;background-color:#f4e3be}::ng-deep .loader--text{left:0;margin:0;position:absolute;top:200%;width:4rem}::ng-deep .loader--text:after{animation-duration:3s;animation-iteration-count:infinite;animation-name:loading-text;content:\"Loading\";font-weight:700}.agents-popwindowbox{background:#fff;padding:10px;width:100%}.agents-popwindowbox h3{color:#000;font-size:15px}.dropdown-menu-agents{background-color:#fff;border:1px solid #ededed;border-radius:5px;bottom:100%!important;box-shadow:0 2px 4px rgba(0,0,0,.1);display:block;left:0;margin-bottom:10px;padding:0;position:absolute;top:auto;width:270px;z-index:1000}.dropdown-menu-agents .scrollerbox{display:flex;flex:fit-content;flex-direction:column;height:215px;overflow-y:auto}.dropdown-menu-agents label{align-items:center;background:#f9f9f9;border-radius:2px;cursor:pointer;display:flex;font-size:13px;justify-content:start;line-height:16px;margin:2px 0;padding:7px}.dropdown-menu-agents label:hover{background:#ebebeb}.dropdown-menu-agents label input{opacity:0;position:absolute}.dropdown-menu-agents .input-check{border:2px solid #ccc;border-radius:4px;display:inline-block;height:23px;margin-right:5px;position:relative;top:0;transition:.5s;width:25px}.dropdown-menu-agents label input:checked~.input-check{animation:animate .7s ease;background:#06f;border-color:#06f}@keyframes animate{0%{transform:scale(1)}40%{transform:scale(1.3,.7)}55%{transform:scale(1)}70%{transform:scale(1.2,.8)}80%{transform:scale(1)}90%{transform:scale(1.1,.9)}to{transform:scale(1)}}.dropdown-menu-agents .input-check:before{border-bottom:3px solid #fff;border-left:3px solid #fff;content:\"\";height:6px;left:4px;position:absolute;top:6px;transform:scale(0) rotate(-45deg);transition:.5s;width:15px}.dropdown-menu-agents label input:checked~.input-check:before{transform:scale(1) rotate(-45deg)}::ng-deep .h1,::ng-deep h1{font-size:1.165rem}::ng-deep .h2,::ng-deep .h3,::ng-deep h2,::ng-deep h3{font-size:1.125rem}::ng-deep b,::ng-deep strong{font-weight:600}@media (max-width:768px){.note{line-height:15px;margin:0 auto;padding:3px 0 10px;width:90%}}.show-hover{display:none}.chat.bot:hover .show-hover{display:flex!important}"]
|
|
5737
5757
|
},] }
|