@aslaluroba/help-center 1.1.13 → 1.1.15

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.
@@ -338,17 +338,24 @@ class TranslationService {
338
338
  title: 'مركز المساعدة'
339
339
  }
340
340
  };
341
- currentLang = new BehaviorSubject('en');
342
- constructor() { }
341
+ _currentLang = new BehaviorSubject('en');
342
+ currentLang = this._currentLang.asObservable();
343
+ constructor() {
344
+ console.log('TranslationService: Initialized');
345
+ }
343
346
  translate(key) {
344
- const lang = this.currentLang.value;
347
+ const lang = this._currentLang.value;
348
+ console.log('TranslationService: Translating key', key, 'for language', lang);
345
349
  return this.translations[lang][key] || key;
346
350
  }
347
351
  setLanguage(lang) {
348
- this.currentLang.next(lang);
352
+ console.log('TranslationService: Setting language to', lang);
353
+ this._currentLang.next(lang);
349
354
  }
350
355
  getCurrentLang() {
351
- return this.currentLang.value;
356
+ const currentLang = this._currentLang.value;
357
+ console.log('TranslationService: Getting current language', currentLang);
358
+ return currentLang;
352
359
  }
353
360
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
354
361
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: TranslationService, providedIn: 'root' });
@@ -962,16 +969,24 @@ class HelpCenterWidgetComponent {
962
969
  helpScreenId;
963
970
  showArrow = true;
964
971
  messageLabel = null;
965
- currentLang = 'en';
972
+ set currentLang(value) {
973
+ this._currentLang = value;
974
+ this.isRTL = value === 'ar';
975
+ }
976
+ get currentLang() {
977
+ return this._currentLang;
978
+ }
966
979
  isIntroScreenEnabled = false;
967
980
  chatMessagesContainer;
981
+ _currentLang = 'en';
982
+ langSubscription;
983
+ isRTL = false;
968
984
  // State variables
969
985
  isPopupOpen = false;
970
986
  helpScreenData = null;
971
987
  status = 'idle';
972
988
  error = null;
973
989
  showArrowAnimation = false;
974
- isRTL = this.currentLang === 'en' ? false : true;
975
990
  showTooltip = false;
976
991
  sessionId = null;
977
992
  isSignalRConnected = false;
@@ -1003,6 +1018,16 @@ class HelpCenterWidgetComponent {
1003
1018
  if (!this.isIntroScreenEnabled) {
1004
1019
  this.showHelpScreenData = true;
1005
1020
  }
1021
+ // Subscribe to language changes
1022
+ this.langSubscription = this.translationService.currentLang.subscribe((lang) => {
1023
+ this.currentLang = lang;
1024
+ });
1025
+ }
1026
+ ngOnDestroy() {
1027
+ // Clean up subscription
1028
+ if (this.langSubscription) {
1029
+ this.langSubscription.unsubscribe();
1030
+ }
1006
1031
  }
1007
1032
  async handleTogglePopup() {
1008
1033
  this.isPopupOpen = !this.isPopupOpen;
@@ -1217,9 +1242,6 @@ class HelpCenterWidgetComponent {
1217
1242
  }
1218
1243
  }
1219
1244
  handleClosePopup() {
1220
- if (this.showChat) {
1221
- this.handleEndChat();
1222
- }
1223
1245
  this.showHelpScreenData = false;
1224
1246
  this.showChat = false;
1225
1247
  this.isPopupOpen = false;
@@ -1288,7 +1310,7 @@ class HelpCenterWidgetComponent {
1288
1310
  window.open(url, '_blank');
1289
1311
  }
1290
1312
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HelpCenterWidgetComponent, deps: [{ token: ApiService }, { token: SignalRService }, { token: TokenService }, { token: TranslationService }], target: i0.ɵɵFactoryTarget.Component });
1291
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: HelpCenterWidgetComponent, isStandalone: true, selector: "app-help-center-widget", inputs: { getToken: "getToken", helpScreenId: "helpScreenId", showArrow: "showArrow", messageLabel: "messageLabel", currentLang: "currentLang", isIntroScreenEnabled: "isIntroScreenEnabled" }, viewQueries: [{ propertyName: "chatMessagesContainer", first: true, predicate: ["chatMessagesContainer"], descendants: true }], ngImport: i0, template: "<div class=\"help-center-container\" [dir]=\"getDirection()\">\n <!-- Arrow Animation -->\n <div *ngIf=\"showArrowAnimation && !isPopupOpen\" class=\"arrow-animation\">\n <div class=\"message-box\">\n <p>\n {{ messageLabel || 'Need assistance Or You want to try the Product? Click here' }}\n </p>\n <button class=\"close-button\" (click)=\"handleCloseArrowAnimation()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\">\n <path d=\"M1 1L11 11M1 11L11 1\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </button>\n <div class=\"arrow-tip\"></div>\n </div>\n </div>\n\n <!-- Help Button -->\n <button class=\"help-button\" (click)=\"handleTogglePopup()\">\n <span class=\"help-button-content\">\n <img src=\"/logo-white.svg\" alt=\"BabylAI Logo\" class=\"help-button-logo\" />\n </span>\n </button>\n\n <!-- Help Popup -->\n <div\n *ngIf=\"isPopupOpen\"\n class=\"help-popup\"\n [ngClass]=\"{\n 'is-open': isPopupOpen,\n 'is-closed': !isPopupOpen,\n 'has-gradient': isPopupOpen && !showHelpScreenData && !showChat\n }\"\n >\n <app-confirmation-dialog\n *ngIf=\"showEndChatConfirmation\"\n [title]=\"'LeavingDialogTitle' | translate\"\n [body]=\"'LeavingDialogBody' | translate\"\n [confirmText]=\"'Confirm' | translate\"\n [cancelText]=\"'Cancel' | translate\"\n (onConfirm)=\"confirmEndChat()\"\n (onCancel)=\"cancelEndChat()\"\n ></app-confirmation-dialog>\n\n <!-- Loading State -->\n <div *ngIf=\"status === 'loading'\" class=\"loading-state\">\n <ng-container *ngIf=\"!showHelpScreenData\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <ng-container *ngIf=\"showHelpScreenData\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <app-loading></app-loading>\n </div>\n\n <!-- Error State -->\n <div *ngIf=\"status === 'failed'\" class=\"error-message\">\n <span>Error: {{ error }}</span>\n </div>\n\n <!-- Content -->\n <ng-container *ngIf=\"status === 'succeeded'\">\n <!-- Headers -->\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData && !showChat\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData && !showChat\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showBackButton]=\"isIntroScreenEnabled && showHelpScreenData\"\n [showLogo]=\"false\"\n (onClose)=\"handleHideHelpScreenData()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-header>\n\n <ng-container *ngIf=\"showHelpScreenData && sessionId\">\n <app-button variant=\"icon-bg\" (click)=\"handleShowChat()\" class=\"chat-button\">\n <img src=\"/icons/chat.svg\" alt=\"Close\" class=\"icon-full\" />\n </app-button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"showChat\">\n <app-chat-header\n [showBackButton]=\"showChat\"\n [showLogo]=\"false\"\n (onClose)=\"handleEndChat()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-chat-header>\n\n <app-chat\n class=\"chat-container\"\n [messages]=\"messages\"\n [needsAgent]=\"needsAgent\"\n [assistantStatus]=\"assistantStatus\"\n [isSignalRConnected]=\"isSignalRConnected\"\n [isChatClosed]=\"isChatClosed\"\n (sendMessageEvent)=\"sendMessage($event)\"\n [currentLang]=\"currentLang\"\n [loading]=\"chatIsLoading\"\n ></app-chat>\n </ng-container>\n\n <!-- Main Content -->\n <div class=\"main-content\" *ngIf=\"!showChat\">\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData\">\n <div class=\"intro-section\">\n <h1 class=\"intro-title\">{{ 'ChatIntroMessage' | translate }}</h1>\n </div>\n\n <div class=\"cards-section\">\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"card-content\">\n <div class=\"babylai-info\">\n <div class=\"logo-container\">\n <img src=\"/logo-white.svg\" alt=\"Chat\" class=\"logo\" />\n </div>\n <div class=\"info-text\">\n <h4 class=\"info-title\">{{ 'BabylaiTitle' | translate }}</h4>\n <p class=\"info-description\">{{ 'BabylaiDescription' | translate }}</p>\n </div>\n </div>\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"handleShowHelpScreenData()\">\n {{ 'ChatNow' | translate }}\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'TryBableAI' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net/signup')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'ContactUs' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n </div>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData\">\n <img src=\"/images/stars.svg\" alt=\"help-center-widget-icon\" class=\"stars\" />\n <app-help-screen-data [helpScreenData]=\"helpScreenData\" (handleStartNewChat)=\"handleStartNewChat($event)\"></app-help-screen-data>\n </ng-container>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <a href=\"https://babylai.net\" target=\"_blank\" class=\"footer-link\" [ngClass]=\"{ 'light-text': !showHelpScreenData && !showChat }\">\n {{ 'PoweredByBabylAI' | translate }}\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.help-center-container{position:fixed;bottom:1.25rem;right:1.25rem;z-index:9999}.arrow-animation{position:fixed;bottom:5rem;right:1rem;z-index:1300;display:flex;flex-direction:column;align-items:flex-end;animation:float 3s infinite ease-in-out}.arrow-animation .message-box{background-color:#ad49e1;color:#fff;padding:.75rem 1rem;border-radius:9999px;box-shadow:#64646f33 0 7px 29px;margin-bottom:1rem;max-width:200px;position:relative}.arrow-animation .message-box p{font-size:.75rem;font-weight:700;margin:0}.arrow-animation .message-box .close-button{position:absolute;top:-8px;right:-8px;width:1.25rem;height:1.25rem;border-radius:9999px;background-color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#171717;padding:3px}.arrow-animation .message-box .close-button:hover{background-color:#451d5a;color:#fff}.arrow-animation .message-box .arrow-tip{position:absolute;bottom:-10px;right:1.25rem;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #ad49e1}.help-button{width:3.5rem;height:3.5rem;border-radius:9999px;background-color:#ad49e1;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:#64646f33 0 7px 29px;transition:transform .2s ease-out;position:fixed;bottom:1.25rem;right:1.25rem;z-index:1000}.help-button:hover{background-color:#451d5a;transform:scale(1.05)}.help-button:active{transform:scale(.95)}.help-button-content{display:flex;align-items:center;justify-content:center}.help-button-logo{width:1.5rem;height:1.5rem}.help-popup{position:fixed;bottom:5rem;right:1.25rem;width:360px;height:684px;border-radius:1.5rem;box-shadow:#64646f33 0 7px 29px;display:flex;flex-direction:column;z-index:1000;background-color:#f3f3f3;overflow:hidden}.help-popup.is-open{width:360px}.help-popup.is-closed{width:60px}.help-popup.has-gradient{background:linear-gradient(to bottom,#ad49e1,#ad49e199)}.error-message{bottom:22.5rem;right:1.25rem;padding:1rem;border-radius:.5rem;box-shadow:#64646f33 0 7px 29px;height:100%;text-align:center;display:flex;align-items:center;justify-content:center}.chat-button{position:absolute;bottom:1.25rem;right:1.25rem;padding:.75rem!important}.chat-container{height:100%;margin-top:.5rem;padding:.5rem;max-height:85%}.main-content{flex:1;display:flex;flex-direction:column;gap:1rem;overflow-y:auto;padding:1rem;width:100%;box-sizing:border-box}.stars{position:absolute;top:0;right:0;width:15.42rem;height:13.49rem;opacity:.5}.intro-section{display:flex;flex-direction:column;gap:1rem}.intro-section .intro-title{font-size:3.75rem;font-weight:700;color:#fff;line-height:3.5rem}.cards-section{display:flex;flex-direction:column;gap:1rem;margin-top:2rem;width:100%;box-sizing:border-box;padding:0}.cards-section app-card{width:100%;display:block}.cards-section app-card ::ng-deep .card{width:100%;box-sizing:border-box}.cards-section app-card ::ng-deep .card__content{width:100%;box-sizing:border-box}.card-content{display:flex;flex-direction:column;gap:1rem;width:100%;box-sizing:border-box}.babylai-info{display:flex;align-items:center;justify-content:flex-start;gap:.75rem;width:100%}.logo-container{display:flex;align-items:center;justify-content:center;max-width:3rem;min-width:3rem;width:3rem;height:3rem;border-radius:9999px;background-color:#ad49e1}.logo-container .logo{width:1.25rem;height:1.25rem}.info-text{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:0;flex:1}.info-text .info-title{font-size:1rem;color:#606060;font-weight:600}.info-text .info-description{font-size:1rem;color:#0a0a0a}.action-card{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%}.action-card .action-text{font-size:1rem;color:#0a0a0a}.action-card .icon{width:1.25rem;height:1.25rem}.action-card .icon-rtl{transform:rotate(180deg)}.footer{display:flex;justify-content:space-between;align-items:center;padding:1.25rem}.footer .footer-link{font-size:.75rem;color:#919191;width:100%;text-align:center}.footer .footer-link.light-text{color:#fff}.icon-full{width:100%}\n", "@import\"https://fonts.googleapis.com/css2?family=Cairo:wght@200..1000&display=swap\";*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body,h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd,ul,ol{margin:0;padding:0}ul,ol{list-style:none}html{scroll-behavior:smooth}body{min-height:100vh;text-rendering:optimizeSpeed;line-height:1.5;font-family:Cairo,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture{max-width:100%;display:block}input,button,textarea,select{font:inherit}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}button{background:none;border:none;padding:0;cursor:pointer;font:inherit;color:inherit}a{color:inherit;text-decoration:none}table{border-collapse:collapse;border-spacing:0}:root{--black-white-50: #ffffff;--black-white-100: #f3f3f3;--black-white-200: #e2e2e2;--black-white-300: #919191;--black-white-400: #606060;--black-white-500: #333333;--black-white-600: #1f1f1f;--black-white-700: #171717;--black-white-800: #0a0a0a;--black-white-900: #050505;--black-white-950: #000000;--black-white-default: #333333}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.animate-accordion-down{animation:accordion-down .2s ease-out}.animate-accordion-up{animation:accordion-up .2s ease-out}.animate-float{animation:float 3s infinite ease-in-out}html,body{font-family:Cairo,sans-serif}.help-center-container{width:100%;height:100%}div#wave{position:relative}div#wave .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:3px;background:#ad49e1;animation:wave 1.3s linear infinite}div#wave .dot:nth-child(2){animation-delay:-1.1s}div#wave .dot:nth-child(3){animation-delay:-.9s}@keyframes wave{0%,60%,to{transform:initial}30%{transform:translateY(-10px)}}\n", ":host{display:block;width:100%;height:100%}.help-center-container{width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: CardComponent, selector: "app-card", inputs: ["variant", "class"] }, { kind: "component", type: CardContentComponent, selector: "app-card-content", inputs: ["class"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["variant", "type", "disabled", "fullWidth", "className", "size", "direction"], outputs: ["onClick"] }, { kind: "component", type: HelpScreenDataComponent, selector: "app-help-screen-data", inputs: ["helpScreenData", "title"], outputs: ["handleStartNewChat"] }, { kind: "component", type: HeaderComponent, selector: "app-header", inputs: ["headerType", "showBackButton", "showLogo", "logoSrc", "logoAlt", "language", "showCloseButton"], outputs: ["onBack", "onClose"] }, { kind: "component", type: ChatHeaderComponent, selector: "app-chat-header", inputs: ["showBackButton", "showLogo", "logoSrc", "logoAlt", "language"], outputs: ["onBack", "onClose"] }, { kind: "component", type: ChatComponent, selector: "app-chat", inputs: ["messages", "needsAgent", "assistantStatus", "isSignalRConnected", "isChatClosed", "currentLang", "loading"], outputs: ["sendMessageEvent"] }, { kind: "component", type: LoadingComponent, selector: "app-loading" }, { kind: "component", type: ConfirmationDialogComponent, selector: "app-confirmation-dialog", inputs: ["title", "body", "confirmText", "cancelText"], outputs: ["onConfirm", "onCancel"] }] });
1313
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.11", type: HelpCenterWidgetComponent, isStandalone: true, selector: "app-help-center-widget", inputs: { getToken: "getToken", helpScreenId: "helpScreenId", showArrow: "showArrow", messageLabel: "messageLabel", currentLang: "currentLang", isIntroScreenEnabled: "isIntroScreenEnabled" }, viewQueries: [{ propertyName: "chatMessagesContainer", first: true, predicate: ["chatMessagesContainer"], descendants: true }], ngImport: i0, template: "<div class=\"help-center-container\" [dir]=\"getDirection()\">\n <!-- Arrow Animation -->\n <div *ngIf=\"showArrowAnimation && !isPopupOpen\" class=\"arrow-animation\">\n <div class=\"message-box\">\n <p>\n {{ messageLabel || 'Need assistance Or You want to try the Product? Click here' }}\n </p>\n <button class=\"close-button\" (click)=\"handleCloseArrowAnimation()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\">\n <path d=\"M1 1L11 11M1 11L11 1\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </button>\n <div class=\"arrow-tip\"></div>\n </div>\n </div>\n\n <!-- Help Button -->\n <button class=\"help-button\" (click)=\"handleTogglePopup()\">\n <span class=\"help-button-content\">\n <img src=\"/logo-white.svg\" alt=\"BabylAI Logo\" class=\"help-button-logo\" />\n </span>\n </button>\n\n <!-- Help Popup -->\n <div\n *ngIf=\"isPopupOpen\"\n class=\"help-popup\"\n [ngClass]=\"{\n 'is-open': isPopupOpen,\n 'is-closed': !isPopupOpen,\n 'has-gradient': isPopupOpen && !showHelpScreenData && !showChat\n }\"\n >\n <app-confirmation-dialog\n *ngIf=\"showEndChatConfirmation\"\n [title]=\"'LeavingDialogTitle' | translate\"\n [body]=\"'LeavingDialogBody' | translate\"\n [confirmText]=\"'Confirm' | translate\"\n [cancelText]=\"'Cancel' | translate\"\n (onConfirm)=\"confirmEndChat()\"\n (onCancel)=\"cancelEndChat()\"\n ></app-confirmation-dialog>\n\n <!-- Loading State -->\n <div *ngIf=\"status === 'loading'\" class=\"loading-state\">\n <ng-container *ngIf=\"!showHelpScreenData\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <ng-container *ngIf=\"showHelpScreenData\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <app-loading></app-loading>\n </div>\n\n <!-- Error State -->\n <div *ngIf=\"status === 'failed'\" class=\"error-message\">\n <span>Error: {{ error }}</span>\n </div>\n\n <!-- Content -->\n <ng-container *ngIf=\"status === 'succeeded'\">\n <!-- Headers -->\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData && !showChat\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData && !showChat\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showBackButton]=\"isIntroScreenEnabled && showHelpScreenData\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n (onBack)=\"isIntroScreenEnabled ? handleBack() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n\n <ng-container *ngIf=\"showHelpScreenData && sessionId\">\n <app-button variant=\"icon-bg\" (click)=\"handleShowChat()\" class=\"chat-button\">\n <img src=\"/icons/chat.svg\" alt=\"Close\" class=\"icon-full\" />\n </app-button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"showChat\">\n <app-chat-header\n [showBackButton]=\"showChat\"\n [showLogo]=\"false\"\n (onClose)=\"handleEndChat()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-chat-header>\n\n <app-chat\n class=\"chat-container\"\n [messages]=\"messages\"\n [needsAgent]=\"needsAgent\"\n [assistantStatus]=\"assistantStatus\"\n [isSignalRConnected]=\"isSignalRConnected\"\n [isChatClosed]=\"isChatClosed\"\n (sendMessageEvent)=\"sendMessage($event)\"\n [currentLang]=\"currentLang\"\n [loading]=\"chatIsLoading\"\n ></app-chat>\n </ng-container>\n\n <!-- Main Content -->\n <div class=\"main-content\" *ngIf=\"!showChat\">\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData\">\n <div class=\"intro-section\">\n <h1 class=\"intro-title\">{{ 'ChatIntroMessage' | translate }}</h1>\n </div>\n\n <div class=\"cards-section\">\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"card-content\">\n <div class=\"babylai-info\">\n <div class=\"logo-container\">\n <img src=\"/logo-white.svg\" alt=\"Chat\" class=\"logo\" />\n </div>\n <div class=\"info-text\">\n <h4 class=\"info-title\">{{ 'BabylaiTitle' | translate }}</h4>\n <p class=\"info-description\">{{ 'BabylaiDescription' | translate }}</p>\n </div>\n </div>\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"handleShowHelpScreenData()\">\n {{ 'ChatNow' | translate }}\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'TryBableAI' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net/signup')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'ContactUs' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n </div>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData\">\n <img src=\"/images/stars.svg\" alt=\"help-center-widget-icon\" class=\"stars\" />\n <app-help-screen-data [helpScreenData]=\"helpScreenData\" (handleStartNewChat)=\"handleStartNewChat($event)\"></app-help-screen-data>\n </ng-container>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <a href=\"https://babylai.net\" target=\"_blank\" class=\"footer-link\" [ngClass]=\"{ 'light-text': !showHelpScreenData && !showChat }\">\n {{ 'PoweredByBabylAI' | translate }}\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.help-center-container{position:fixed;bottom:1.25rem;right:1.25rem;z-index:1000;width:auto;height:auto;display:flex;flex-direction:column;align-items:flex-end}.arrow-animation{position:fixed;bottom:5rem;right:1rem;z-index:1300;display:flex;flex-direction:column;align-items:flex-end;animation:float 3s infinite ease-in-out}.arrow-animation .message-box{background-color:#ad49e1;color:#fff;padding:.75rem 1rem;border-radius:9999px;box-shadow:#64646f33 0 7px 29px;margin-bottom:1rem;max-width:200px;position:relative}.arrow-animation .message-box p{font-size:.75rem;font-weight:700;margin:0}.arrow-animation .message-box .close-button{position:absolute;top:-8px;right:-8px;width:1.25rem;height:1.25rem;border-radius:9999px;background-color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#171717;padding:3px}.arrow-animation .message-box .close-button:hover{background-color:#451d5a;color:#fff}.arrow-animation .message-box .arrow-tip{position:absolute;bottom:-10px;right:1.25rem;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #ad49e1}.help-button{width:3.5rem;height:3.5rem;border-radius:9999px;background-color:#ad49e1;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:#64646f33 0 7px 29px;transition:transform .2s ease-out;position:fixed;bottom:1.25rem;right:1.25rem;z-index:1000}.help-button:hover{background-color:#451d5a;transform:scale(1.05)}.help-button:active{transform:scale(.95)}.help-button-content{display:flex;align-items:center;justify-content:center}.help-button-logo{width:1.5rem;height:1.5rem}.help-popup{position:fixed;bottom:5rem;right:1.25rem;width:360px;height:684px;border-radius:1.5rem;box-shadow:#64646f33 0 7px 29px;display:flex;flex-direction:column;z-index:1000;background-color:#f3f3f3;overflow:hidden}.help-popup.is-open{width:360px}.help-popup.is-closed{width:60px}.help-popup.has-gradient{background:linear-gradient(to bottom,#ad49e1,#ad49e199)}.error-message{bottom:22.5rem;right:1.25rem;padding:1rem;border-radius:.5rem;box-shadow:#64646f33 0 7px 29px;height:100%;text-align:center;display:flex;align-items:center;justify-content:center}.chat-button{position:absolute;bottom:1.25rem;right:1.25rem;padding:.75rem!important}.chat-container{height:100%;margin-top:.5rem;padding:.5rem;max-height:85%}.main-content{flex:1;display:flex;flex-direction:column;gap:1rem;overflow-y:auto;padding:1rem;width:100%;box-sizing:border-box}.stars{position:absolute;top:0;right:0;width:15.42rem;height:13.49rem;opacity:.5;z-index:-1}.intro-section{display:flex;flex-direction:column;gap:1rem}.intro-section .intro-title{font-size:3.75rem;font-weight:700;color:#fff;line-height:3.5rem}.cards-section{display:flex;flex-direction:column;gap:1rem;margin-top:2rem;width:100%;box-sizing:border-box;padding:0}.cards-section app-card{width:100%;display:block}.cards-section app-card ::ng-deep .card{width:100%;box-sizing:border-box}.cards-section app-card ::ng-deep .card__content{width:100%;box-sizing:border-box}.card-content{display:flex;flex-direction:column;gap:1rem;width:100%;box-sizing:border-box}.babylai-info{display:flex;align-items:center;justify-content:flex-start;gap:.75rem;width:100%}.logo-container{display:flex;align-items:center;justify-content:center;max-width:3rem;min-width:3rem;width:3rem;height:3rem;border-radius:9999px;background-color:#ad49e1}.logo-container .logo{width:1.25rem;height:1.25rem}.info-text{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:0;flex:1}.info-text .info-title{font-size:1rem;color:#606060;font-weight:600}.info-text .info-description{font-size:1rem;color:#0a0a0a}.action-card{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%}.action-card .action-text{font-size:1rem;color:#0a0a0a}.action-card .icon{width:1.25rem;height:1.25rem}.action-card .icon-rtl{transform:rotate(180deg)}.footer{display:flex;justify-content:space-between;align-items:center;padding:1.25rem}.footer .footer-link{font-size:.75rem;color:#919191;width:100%;text-align:center}.footer .footer-link.light-text{color:#fff}.icon-full{width:100%}\n", "@import\"https://fonts.googleapis.com/css2?family=Cairo:wght@200..1000&display=swap\";*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body,h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd,ul,ol{margin:0;padding:0}ul,ol{list-style:none}html{scroll-behavior:smooth}body{min-height:100vh;text-rendering:optimizeSpeed;line-height:1.5;font-family:Cairo,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture{max-width:100%;display:block}input,button,textarea,select{font:inherit}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}button{background:none;border:none;padding:0;cursor:pointer;font:inherit;color:inherit}a{color:inherit;text-decoration:none}table{border-collapse:collapse;border-spacing:0}:root{--black-white-50: #ffffff;--black-white-100: #f3f3f3;--black-white-200: #e2e2e2;--black-white-300: #919191;--black-white-400: #606060;--black-white-500: #333333;--black-white-600: #1f1f1f;--black-white-700: #171717;--black-white-800: #0a0a0a;--black-white-900: #050505;--black-white-950: #000000;--black-white-default: #333333}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.animate-accordion-down{animation:accordion-down .2s ease-out}.animate-accordion-up{animation:accordion-up .2s ease-out}.animate-float{animation:float 3s infinite ease-in-out}html,body{font-family:Cairo,sans-serif}div#wave{position:relative}div#wave .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:3px;background:#ad49e1;animation:wave 1.3s linear infinite}div#wave .dot:nth-child(2){animation-delay:-1.1s}div#wave .dot:nth-child(3){animation-delay:-.9s}@keyframes wave{0%,60%,to{transform:initial}30%{transform:translateY(-10px)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: CardComponent, selector: "app-card", inputs: ["variant", "class"] }, { kind: "component", type: CardContentComponent, selector: "app-card-content", inputs: ["class"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["variant", "type", "disabled", "fullWidth", "className", "size", "direction"], outputs: ["onClick"] }, { kind: "component", type: HelpScreenDataComponent, selector: "app-help-screen-data", inputs: ["helpScreenData", "title"], outputs: ["handleStartNewChat"] }, { kind: "component", type: HeaderComponent, selector: "app-header", inputs: ["headerType", "showBackButton", "showLogo", "logoSrc", "logoAlt", "language", "showCloseButton"], outputs: ["onBack", "onClose"] }, { kind: "component", type: ChatHeaderComponent, selector: "app-chat-header", inputs: ["showBackButton", "showLogo", "logoSrc", "logoAlt", "language"], outputs: ["onBack", "onClose"] }, { kind: "component", type: ChatComponent, selector: "app-chat", inputs: ["messages", "needsAgent", "assistantStatus", "isSignalRConnected", "isChatClosed", "currentLang", "loading"], outputs: ["sendMessageEvent"] }, { kind: "component", type: LoadingComponent, selector: "app-loading" }, { kind: "component", type: ConfirmationDialogComponent, selector: "app-confirmation-dialog", inputs: ["title", "body", "confirmText", "cancelText"], outputs: ["onConfirm", "onCancel"] }] });
1292
1314
  }
1293
1315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: HelpCenterWidgetComponent, decorators: [{
1294
1316
  type: Component,
@@ -1305,7 +1327,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
1305
1327
  ChatComponent,
1306
1328
  LoadingComponent,
1307
1329
  ConfirmationDialogComponent
1308
- ], template: "<div class=\"help-center-container\" [dir]=\"getDirection()\">\n <!-- Arrow Animation -->\n <div *ngIf=\"showArrowAnimation && !isPopupOpen\" class=\"arrow-animation\">\n <div class=\"message-box\">\n <p>\n {{ messageLabel || 'Need assistance Or You want to try the Product? Click here' }}\n </p>\n <button class=\"close-button\" (click)=\"handleCloseArrowAnimation()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\">\n <path d=\"M1 1L11 11M1 11L11 1\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </button>\n <div class=\"arrow-tip\"></div>\n </div>\n </div>\n\n <!-- Help Button -->\n <button class=\"help-button\" (click)=\"handleTogglePopup()\">\n <span class=\"help-button-content\">\n <img src=\"/logo-white.svg\" alt=\"BabylAI Logo\" class=\"help-button-logo\" />\n </span>\n </button>\n\n <!-- Help Popup -->\n <div\n *ngIf=\"isPopupOpen\"\n class=\"help-popup\"\n [ngClass]=\"{\n 'is-open': isPopupOpen,\n 'is-closed': !isPopupOpen,\n 'has-gradient': isPopupOpen && !showHelpScreenData && !showChat\n }\"\n >\n <app-confirmation-dialog\n *ngIf=\"showEndChatConfirmation\"\n [title]=\"'LeavingDialogTitle' | translate\"\n [body]=\"'LeavingDialogBody' | translate\"\n [confirmText]=\"'Confirm' | translate\"\n [cancelText]=\"'Cancel' | translate\"\n (onConfirm)=\"confirmEndChat()\"\n (onCancel)=\"cancelEndChat()\"\n ></app-confirmation-dialog>\n\n <!-- Loading State -->\n <div *ngIf=\"status === 'loading'\" class=\"loading-state\">\n <ng-container *ngIf=\"!showHelpScreenData\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <ng-container *ngIf=\"showHelpScreenData\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <app-loading></app-loading>\n </div>\n\n <!-- Error State -->\n <div *ngIf=\"status === 'failed'\" class=\"error-message\">\n <span>Error: {{ error }}</span>\n </div>\n\n <!-- Content -->\n <ng-container *ngIf=\"status === 'succeeded'\">\n <!-- Headers -->\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData && !showChat\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData && !showChat\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showBackButton]=\"isIntroScreenEnabled && showHelpScreenData\"\n [showLogo]=\"false\"\n (onClose)=\"handleHideHelpScreenData()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-header>\n\n <ng-container *ngIf=\"showHelpScreenData && sessionId\">\n <app-button variant=\"icon-bg\" (click)=\"handleShowChat()\" class=\"chat-button\">\n <img src=\"/icons/chat.svg\" alt=\"Close\" class=\"icon-full\" />\n </app-button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"showChat\">\n <app-chat-header\n [showBackButton]=\"showChat\"\n [showLogo]=\"false\"\n (onClose)=\"handleEndChat()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-chat-header>\n\n <app-chat\n class=\"chat-container\"\n [messages]=\"messages\"\n [needsAgent]=\"needsAgent\"\n [assistantStatus]=\"assistantStatus\"\n [isSignalRConnected]=\"isSignalRConnected\"\n [isChatClosed]=\"isChatClosed\"\n (sendMessageEvent)=\"sendMessage($event)\"\n [currentLang]=\"currentLang\"\n [loading]=\"chatIsLoading\"\n ></app-chat>\n </ng-container>\n\n <!-- Main Content -->\n <div class=\"main-content\" *ngIf=\"!showChat\">\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData\">\n <div class=\"intro-section\">\n <h1 class=\"intro-title\">{{ 'ChatIntroMessage' | translate }}</h1>\n </div>\n\n <div class=\"cards-section\">\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"card-content\">\n <div class=\"babylai-info\">\n <div class=\"logo-container\">\n <img src=\"/logo-white.svg\" alt=\"Chat\" class=\"logo\" />\n </div>\n <div class=\"info-text\">\n <h4 class=\"info-title\">{{ 'BabylaiTitle' | translate }}</h4>\n <p class=\"info-description\">{{ 'BabylaiDescription' | translate }}</p>\n </div>\n </div>\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"handleShowHelpScreenData()\">\n {{ 'ChatNow' | translate }}\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'TryBableAI' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net/signup')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'ContactUs' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n </div>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData\">\n <img src=\"/images/stars.svg\" alt=\"help-center-widget-icon\" class=\"stars\" />\n <app-help-screen-data [helpScreenData]=\"helpScreenData\" (handleStartNewChat)=\"handleStartNewChat($event)\"></app-help-screen-data>\n </ng-container>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <a href=\"https://babylai.net\" target=\"_blank\" class=\"footer-link\" [ngClass]=\"{ 'light-text': !showHelpScreenData && !showChat }\">\n {{ 'PoweredByBabylAI' | translate }}\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.help-center-container{position:fixed;bottom:1.25rem;right:1.25rem;z-index:9999}.arrow-animation{position:fixed;bottom:5rem;right:1rem;z-index:1300;display:flex;flex-direction:column;align-items:flex-end;animation:float 3s infinite ease-in-out}.arrow-animation .message-box{background-color:#ad49e1;color:#fff;padding:.75rem 1rem;border-radius:9999px;box-shadow:#64646f33 0 7px 29px;margin-bottom:1rem;max-width:200px;position:relative}.arrow-animation .message-box p{font-size:.75rem;font-weight:700;margin:0}.arrow-animation .message-box .close-button{position:absolute;top:-8px;right:-8px;width:1.25rem;height:1.25rem;border-radius:9999px;background-color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#171717;padding:3px}.arrow-animation .message-box .close-button:hover{background-color:#451d5a;color:#fff}.arrow-animation .message-box .arrow-tip{position:absolute;bottom:-10px;right:1.25rem;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #ad49e1}.help-button{width:3.5rem;height:3.5rem;border-radius:9999px;background-color:#ad49e1;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:#64646f33 0 7px 29px;transition:transform .2s ease-out;position:fixed;bottom:1.25rem;right:1.25rem;z-index:1000}.help-button:hover{background-color:#451d5a;transform:scale(1.05)}.help-button:active{transform:scale(.95)}.help-button-content{display:flex;align-items:center;justify-content:center}.help-button-logo{width:1.5rem;height:1.5rem}.help-popup{position:fixed;bottom:5rem;right:1.25rem;width:360px;height:684px;border-radius:1.5rem;box-shadow:#64646f33 0 7px 29px;display:flex;flex-direction:column;z-index:1000;background-color:#f3f3f3;overflow:hidden}.help-popup.is-open{width:360px}.help-popup.is-closed{width:60px}.help-popup.has-gradient{background:linear-gradient(to bottom,#ad49e1,#ad49e199)}.error-message{bottom:22.5rem;right:1.25rem;padding:1rem;border-radius:.5rem;box-shadow:#64646f33 0 7px 29px;height:100%;text-align:center;display:flex;align-items:center;justify-content:center}.chat-button{position:absolute;bottom:1.25rem;right:1.25rem;padding:.75rem!important}.chat-container{height:100%;margin-top:.5rem;padding:.5rem;max-height:85%}.main-content{flex:1;display:flex;flex-direction:column;gap:1rem;overflow-y:auto;padding:1rem;width:100%;box-sizing:border-box}.stars{position:absolute;top:0;right:0;width:15.42rem;height:13.49rem;opacity:.5}.intro-section{display:flex;flex-direction:column;gap:1rem}.intro-section .intro-title{font-size:3.75rem;font-weight:700;color:#fff;line-height:3.5rem}.cards-section{display:flex;flex-direction:column;gap:1rem;margin-top:2rem;width:100%;box-sizing:border-box;padding:0}.cards-section app-card{width:100%;display:block}.cards-section app-card ::ng-deep .card{width:100%;box-sizing:border-box}.cards-section app-card ::ng-deep .card__content{width:100%;box-sizing:border-box}.card-content{display:flex;flex-direction:column;gap:1rem;width:100%;box-sizing:border-box}.babylai-info{display:flex;align-items:center;justify-content:flex-start;gap:.75rem;width:100%}.logo-container{display:flex;align-items:center;justify-content:center;max-width:3rem;min-width:3rem;width:3rem;height:3rem;border-radius:9999px;background-color:#ad49e1}.logo-container .logo{width:1.25rem;height:1.25rem}.info-text{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:0;flex:1}.info-text .info-title{font-size:1rem;color:#606060;font-weight:600}.info-text .info-description{font-size:1rem;color:#0a0a0a}.action-card{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%}.action-card .action-text{font-size:1rem;color:#0a0a0a}.action-card .icon{width:1.25rem;height:1.25rem}.action-card .icon-rtl{transform:rotate(180deg)}.footer{display:flex;justify-content:space-between;align-items:center;padding:1.25rem}.footer .footer-link{font-size:.75rem;color:#919191;width:100%;text-align:center}.footer .footer-link.light-text{color:#fff}.icon-full{width:100%}\n", "@import\"https://fonts.googleapis.com/css2?family=Cairo:wght@200..1000&display=swap\";*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body,h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd,ul,ol{margin:0;padding:0}ul,ol{list-style:none}html{scroll-behavior:smooth}body{min-height:100vh;text-rendering:optimizeSpeed;line-height:1.5;font-family:Cairo,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture{max-width:100%;display:block}input,button,textarea,select{font:inherit}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}button{background:none;border:none;padding:0;cursor:pointer;font:inherit;color:inherit}a{color:inherit;text-decoration:none}table{border-collapse:collapse;border-spacing:0}:root{--black-white-50: #ffffff;--black-white-100: #f3f3f3;--black-white-200: #e2e2e2;--black-white-300: #919191;--black-white-400: #606060;--black-white-500: #333333;--black-white-600: #1f1f1f;--black-white-700: #171717;--black-white-800: #0a0a0a;--black-white-900: #050505;--black-white-950: #000000;--black-white-default: #333333}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.animate-accordion-down{animation:accordion-down .2s ease-out}.animate-accordion-up{animation:accordion-up .2s ease-out}.animate-float{animation:float 3s infinite ease-in-out}html,body{font-family:Cairo,sans-serif}.help-center-container{width:100%;height:100%}div#wave{position:relative}div#wave .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:3px;background:#ad49e1;animation:wave 1.3s linear infinite}div#wave .dot:nth-child(2){animation-delay:-1.1s}div#wave .dot:nth-child(3){animation-delay:-.9s}@keyframes wave{0%,60%,to{transform:initial}30%{transform:translateY(-10px)}}\n", ":host{display:block;width:100%;height:100%}.help-center-container{width:100%;height:100%}\n"] }]
1330
+ ], template: "<div class=\"help-center-container\" [dir]=\"getDirection()\">\n <!-- Arrow Animation -->\n <div *ngIf=\"showArrowAnimation && !isPopupOpen\" class=\"arrow-animation\">\n <div class=\"message-box\">\n <p>\n {{ messageLabel || 'Need assistance Or You want to try the Product? Click here' }}\n </p>\n <button class=\"close-button\" (click)=\"handleCloseArrowAnimation()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\">\n <path d=\"M1 1L11 11M1 11L11 1\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </button>\n <div class=\"arrow-tip\"></div>\n </div>\n </div>\n\n <!-- Help Button -->\n <button class=\"help-button\" (click)=\"handleTogglePopup()\">\n <span class=\"help-button-content\">\n <img src=\"/logo-white.svg\" alt=\"BabylAI Logo\" class=\"help-button-logo\" />\n </span>\n </button>\n\n <!-- Help Popup -->\n <div\n *ngIf=\"isPopupOpen\"\n class=\"help-popup\"\n [ngClass]=\"{\n 'is-open': isPopupOpen,\n 'is-closed': !isPopupOpen,\n 'has-gradient': isPopupOpen && !showHelpScreenData && !showChat\n }\"\n >\n <app-confirmation-dialog\n *ngIf=\"showEndChatConfirmation\"\n [title]=\"'LeavingDialogTitle' | translate\"\n [body]=\"'LeavingDialogBody' | translate\"\n [confirmText]=\"'Confirm' | translate\"\n [cancelText]=\"'Cancel' | translate\"\n (onConfirm)=\"confirmEndChat()\"\n (onCancel)=\"cancelEndChat()\"\n ></app-confirmation-dialog>\n\n <!-- Loading State -->\n <div *ngIf=\"status === 'loading'\" class=\"loading-state\">\n <ng-container *ngIf=\"!showHelpScreenData\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <ng-container *ngIf=\"showHelpScreenData\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <app-loading></app-loading>\n </div>\n\n <!-- Error State -->\n <div *ngIf=\"status === 'failed'\" class=\"error-message\">\n <span>Error: {{ error }}</span>\n </div>\n\n <!-- Content -->\n <ng-container *ngIf=\"status === 'succeeded'\">\n <!-- Headers -->\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData && !showChat\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData && !showChat\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showBackButton]=\"isIntroScreenEnabled && showHelpScreenData\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n (onBack)=\"isIntroScreenEnabled ? handleBack() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n\n <ng-container *ngIf=\"showHelpScreenData && sessionId\">\n <app-button variant=\"icon-bg\" (click)=\"handleShowChat()\" class=\"chat-button\">\n <img src=\"/icons/chat.svg\" alt=\"Close\" class=\"icon-full\" />\n </app-button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"showChat\">\n <app-chat-header\n [showBackButton]=\"showChat\"\n [showLogo]=\"false\"\n (onClose)=\"handleEndChat()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-chat-header>\n\n <app-chat\n class=\"chat-container\"\n [messages]=\"messages\"\n [needsAgent]=\"needsAgent\"\n [assistantStatus]=\"assistantStatus\"\n [isSignalRConnected]=\"isSignalRConnected\"\n [isChatClosed]=\"isChatClosed\"\n (sendMessageEvent)=\"sendMessage($event)\"\n [currentLang]=\"currentLang\"\n [loading]=\"chatIsLoading\"\n ></app-chat>\n </ng-container>\n\n <!-- Main Content -->\n <div class=\"main-content\" *ngIf=\"!showChat\">\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData\">\n <div class=\"intro-section\">\n <h1 class=\"intro-title\">{{ 'ChatIntroMessage' | translate }}</h1>\n </div>\n\n <div class=\"cards-section\">\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"card-content\">\n <div class=\"babylai-info\">\n <div class=\"logo-container\">\n <img src=\"/logo-white.svg\" alt=\"Chat\" class=\"logo\" />\n </div>\n <div class=\"info-text\">\n <h4 class=\"info-title\">{{ 'BabylaiTitle' | translate }}</h4>\n <p class=\"info-description\">{{ 'BabylaiDescription' | translate }}</p>\n </div>\n </div>\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"handleShowHelpScreenData()\">\n {{ 'ChatNow' | translate }}\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'TryBableAI' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net/signup')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'ContactUs' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n </div>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData\">\n <img src=\"/images/stars.svg\" alt=\"help-center-widget-icon\" class=\"stars\" />\n <app-help-screen-data [helpScreenData]=\"helpScreenData\" (handleStartNewChat)=\"handleStartNewChat($event)\"></app-help-screen-data>\n </ng-container>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <a href=\"https://babylai.net\" target=\"_blank\" class=\"footer-link\" [ngClass]=\"{ 'light-text': !showHelpScreenData && !showChat }\">\n {{ 'PoweredByBabylAI' | translate }}\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.help-center-container{position:fixed;bottom:1.25rem;right:1.25rem;z-index:1000;width:auto;height:auto;display:flex;flex-direction:column;align-items:flex-end}.arrow-animation{position:fixed;bottom:5rem;right:1rem;z-index:1300;display:flex;flex-direction:column;align-items:flex-end;animation:float 3s infinite ease-in-out}.arrow-animation .message-box{background-color:#ad49e1;color:#fff;padding:.75rem 1rem;border-radius:9999px;box-shadow:#64646f33 0 7px 29px;margin-bottom:1rem;max-width:200px;position:relative}.arrow-animation .message-box p{font-size:.75rem;font-weight:700;margin:0}.arrow-animation .message-box .close-button{position:absolute;top:-8px;right:-8px;width:1.25rem;height:1.25rem;border-radius:9999px;background-color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#171717;padding:3px}.arrow-animation .message-box .close-button:hover{background-color:#451d5a;color:#fff}.arrow-animation .message-box .arrow-tip{position:absolute;bottom:-10px;right:1.25rem;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid #ad49e1}.help-button{width:3.5rem;height:3.5rem;border-radius:9999px;background-color:#ad49e1;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:#64646f33 0 7px 29px;transition:transform .2s ease-out;position:fixed;bottom:1.25rem;right:1.25rem;z-index:1000}.help-button:hover{background-color:#451d5a;transform:scale(1.05)}.help-button:active{transform:scale(.95)}.help-button-content{display:flex;align-items:center;justify-content:center}.help-button-logo{width:1.5rem;height:1.5rem}.help-popup{position:fixed;bottom:5rem;right:1.25rem;width:360px;height:684px;border-radius:1.5rem;box-shadow:#64646f33 0 7px 29px;display:flex;flex-direction:column;z-index:1000;background-color:#f3f3f3;overflow:hidden}.help-popup.is-open{width:360px}.help-popup.is-closed{width:60px}.help-popup.has-gradient{background:linear-gradient(to bottom,#ad49e1,#ad49e199)}.error-message{bottom:22.5rem;right:1.25rem;padding:1rem;border-radius:.5rem;box-shadow:#64646f33 0 7px 29px;height:100%;text-align:center;display:flex;align-items:center;justify-content:center}.chat-button{position:absolute;bottom:1.25rem;right:1.25rem;padding:.75rem!important}.chat-container{height:100%;margin-top:.5rem;padding:.5rem;max-height:85%}.main-content{flex:1;display:flex;flex-direction:column;gap:1rem;overflow-y:auto;padding:1rem;width:100%;box-sizing:border-box}.stars{position:absolute;top:0;right:0;width:15.42rem;height:13.49rem;opacity:.5;z-index:-1}.intro-section{display:flex;flex-direction:column;gap:1rem}.intro-section .intro-title{font-size:3.75rem;font-weight:700;color:#fff;line-height:3.5rem}.cards-section{display:flex;flex-direction:column;gap:1rem;margin-top:2rem;width:100%;box-sizing:border-box;padding:0}.cards-section app-card{width:100%;display:block}.cards-section app-card ::ng-deep .card{width:100%;box-sizing:border-box}.cards-section app-card ::ng-deep .card__content{width:100%;box-sizing:border-box}.card-content{display:flex;flex-direction:column;gap:1rem;width:100%;box-sizing:border-box}.babylai-info{display:flex;align-items:center;justify-content:flex-start;gap:.75rem;width:100%}.logo-container{display:flex;align-items:center;justify-content:center;max-width:3rem;min-width:3rem;width:3rem;height:3rem;border-radius:9999px;background-color:#ad49e1}.logo-container .logo{width:1.25rem;height:1.25rem}.info-text{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:0;flex:1}.info-text .info-title{font-size:1rem;color:#606060;font-weight:600}.info-text .info-description{font-size:1rem;color:#0a0a0a}.action-card{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%}.action-card .action-text{font-size:1rem;color:#0a0a0a}.action-card .icon{width:1.25rem;height:1.25rem}.action-card .icon-rtl{transform:rotate(180deg)}.footer{display:flex;justify-content:space-between;align-items:center;padding:1.25rem}.footer .footer-link{font-size:.75rem;color:#919191;width:100%;text-align:center}.footer .footer-link.light-text{color:#fff}.icon-full{width:100%}\n", "@import\"https://fonts.googleapis.com/css2?family=Cairo:wght@200..1000&display=swap\";*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body,h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd,ul,ol{margin:0;padding:0}ul,ol{list-style:none}html{scroll-behavior:smooth}body{min-height:100vh;text-rendering:optimizeSpeed;line-height:1.5;font-family:Cairo,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture{max-width:100%;display:block}input,button,textarea,select{font:inherit}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}button{background:none;border:none;padding:0;cursor:pointer;font:inherit;color:inherit}a{color:inherit;text-decoration:none}table{border-collapse:collapse;border-spacing:0}:root{--black-white-50: #ffffff;--black-white-100: #f3f3f3;--black-white-200: #e2e2e2;--black-white-300: #919191;--black-white-400: #606060;--black-white-500: #333333;--black-white-600: #1f1f1f;--black-white-700: #171717;--black-white-800: #0a0a0a;--black-white-900: #050505;--black-white-950: #000000;--black-white-default: #333333}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.animate-accordion-down{animation:accordion-down .2s ease-out}.animate-accordion-up{animation:accordion-up .2s ease-out}.animate-float{animation:float 3s infinite ease-in-out}html,body{font-family:Cairo,sans-serif}div#wave{position:relative}div#wave .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:3px;background:#ad49e1;animation:wave 1.3s linear infinite}div#wave .dot:nth-child(2){animation-delay:-1.1s}div#wave .dot:nth-child(3){animation-delay:-.9s}@keyframes wave{0%,60%,to{transform:initial}30%{transform:translateY(-10px)}}\n"] }]
1309
1331
  }], ctorParameters: () => [{ type: ApiService }, { type: SignalRService }, { type: TokenService }, { type: TranslationService }], propDecorators: { getToken: [{
1310
1332
  type: Input
1311
1333
  }], helpScreenId: [{
@@ -1323,11 +1345,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
1323
1345
  args: ['chatMessagesContainer']
1324
1346
  }] } });
1325
1347
 
1348
+ // src/app/language.service.ts
1349
+ class LanguageService {
1350
+ translationService;
1351
+ constructor(translationService) {
1352
+ this.translationService = translationService;
1353
+ }
1354
+ switchLanguage(language) {
1355
+ console.log('LanguageService: Switching language to', language);
1356
+ this.translationService.setLanguage(language);
1357
+ }
1358
+ getCurrentLang() {
1359
+ const currentLang = this.translationService.getCurrentLang();
1360
+ console.log('LanguageService: Current language is', currentLang);
1361
+ return currentLang;
1362
+ }
1363
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: LanguageService, deps: [{ token: TranslationService }], target: i0.ɵɵFactoryTarget.Injectable });
1364
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: LanguageService, providedIn: 'root' });
1365
+ }
1366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: LanguageService, decorators: [{
1367
+ type: Injectable,
1368
+ args: [{
1369
+ providedIn: 'root'
1370
+ }]
1371
+ }], ctorParameters: () => [{ type: TranslationService }] });
1372
+
1326
1373
  // Components and Modules
1327
1374
 
1328
1375
  /**
1329
1376
  * Generated bundle index. Do not edit.
1330
1377
  */
1331
1378
 
1332
- export { ApiService, HelpCenterWidgetComponent, SignalRService, TokenService, TranslatePipe, TranslationService };
1379
+ export { ApiService, HelpCenterWidgetComponent, LanguageService, SignalRService, TokenService, TranslatePipe, TranslationService };
1333
1380
  //# sourceMappingURL=aslaluroba-help-center.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"aslaluroba-help-center.mjs","sources":["../../../src/app/shared/components/card/card.component.ts","../../../src/app/shared/components/button/button.component.ts","../../../src/app/services/translation.service.ts","../../../src/app/pipes/translate.pipe.ts","../../../src/app/help-screen-data/help-screen-data.component.ts","../../../src/app/help-screen-data/help-screen-data.component.html","../../../src/app/shared/components/header/header.component.ts","../../../src/app/shared/components/loading/loading.component.ts","../../../src/app/chat/chat.component.ts","../../../src/app/chat/chat.component.html","../../../src/app/shared/components/confirmation-dialog/confirmation-dialog.component.ts","../../../src/app/services/api.service.ts","../../../src/app/services/signalrService.service.ts","../../../src/app/services/token.service.ts","../../../src/app/help-center-widget/help-center-widget.component.ts","../../../src/app/help-center-widget/help-center-widget.component.html","../../../public_api.ts","../../../aslaluroba-help-center.ts"],"sourcesContent":["import { Component, Input, HostBinding, ViewEncapsulation } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\n@Component({\n selector: 'app-card',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardComponent {\n @Input() variant: 'default' | 'rounded' | 'shadowed' = 'default'\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card']\n classes.push(`card--${this.variant}`)\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-header',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardHeaderComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__header']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-title',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardTitleComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__title']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-description',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardDescriptionComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__description']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-content',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardContentComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__content']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-footer',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardFooterComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__footer']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n","import { CommonModule } from '@angular/common'\nimport { Component, EventEmitter, Input, Output } from '@angular/core'\n\ntype ButtonVariant = 'default' | 'icon-bg' | 'icon-only' | 'outline'\ntype ButtonType = 'button' | 'submit' | 'reset'\n\n@Component({\n selector: 'app-button',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./button.component.scss'],\n template: `\n <button [type]=\"type\" [disabled]=\"disabled\" [class]=\"getButtonClasses()\" (click)=\"onClick.emit($event)\" [dir]=\"direction\">\n <ng-content></ng-content>\n </button>\n `\n})\nexport class ButtonComponent {\n @Input() variant: ButtonVariant = 'default'\n @Input() type: ButtonType = 'button'\n @Input() disabled = false\n @Input() fullWidth = false\n @Input() className = ''\n @Input() size: 'default' | 'small' = 'default'\n @Input() direction: 'ltr' | 'rtl' = 'ltr'\n @Output() onClick = new EventEmitter<MouseEvent>()\n\n getButtonClasses(): string {\n const classes = ['button']\n\n // Add variant class\n classes.push(`button--${this.variant}`)\n\n // Add full width class if needed\n if (this.fullWidth) {\n classes.push('button--full-width')\n }\n\n // Add size class if needed\n if (this.size) {\n classes.push(`button--${this.size}`)\n }\n\n // Add direction class\n classes.push(`button--${this.direction}`)\n\n // Add custom classes\n if (this.className) {\n classes.push(this.className)\n }\n\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-button-content',\n standalone: true,\n imports: [CommonModule],\n template: ` <ng-content></ng-content> `\n})\nexport class ButtonContentComponent {}\n\n@Component({\n selector: 'app-icon-button',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n template: `\n <app-button variant=\"icon-bg\" [className]=\"className\" [disabled]=\"disabled\" (onClick)=\"onClick.emit($event)\">\n <ng-content></ng-content>\n </app-button>\n `\n})\nexport class IconButtonComponent {\n @Input() className = ''\n @Input() disabled = false\n @Output() onClick = new EventEmitter<MouseEvent>()\n}\n\n@Component({\n selector: 'app-transparent-icon-button',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n template: `\n <app-button variant=\"icon-only\" [className]=\"className\" [disabled]=\"disabled\" (onClick)=\"onClick.emit($event)\">\n <ng-content></ng-content>\n </app-button>\n `\n})\nexport class TransparentIconButtonComponent {\n @Input() className = ''\n @Input() disabled = false\n @Output() onClick = new EventEmitter<MouseEvent>()\n}\n","// src/app/services/translation.service.ts\nimport { Injectable } from '@angular/core'\nimport { BehaviorSubject } from 'rxjs'\nimport { Language } from '../types'\n\nconst defaultTranslations = {\n ChatIntroMessage: '',\n BabylaiTitle: '',\n BabylaiDescription: '',\n ChatNow: '',\n TryBableAI: '',\n ContactUs: '',\n PickTopicTitle: '',\n BabylAI: '',\n ChatPlaceholder: '',\n PoweredByBabylAI: '',\n EndChat: '',\n LeavingDialogTitle: '',\n LeavingDialogBody: '',\n Confirm: '',\n Cancel: '',\n title: ''\n} as const\n\nexport type TranslationKey = keyof typeof defaultTranslations\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationService {\n private translations = {\n en: {\n ChatIntroMessage: 'Chat with BabylAI 🚀',\n BabylaiTitle: 'BabylAI',\n BabylaiDescription: \"Hey there! 👋 I'm BabylAI, here to assist you.\",\n ChatNow: 'Chat Now',\n TryBableAI: 'Try BabylAI for Free 🎉',\n ContactUs: \"Contact us, Let's Talk! 💬\",\n PickTopicTitle: 'Pick a Topic to Get Started',\n BabylAI: 'BabylAI',\n ChatPlaceholder: 'Type your message...',\n PoweredByBabylAI: 'Powered by BabylAI',\n EndChat: 'End Chat',\n LeavingDialogTitle: 'Leaving so soon? 👋',\n LeavingDialogBody: \"Don't worry, you can come back anytime. We're always here if you need help or have questions.\",\n Confirm: 'Confirm',\n Cancel: 'Cancel',\n title: 'Help Center'\n },\n ar: {\n ChatIntroMessage: 'دردش مع BabylAI 🚀',\n BabylaiTitle: 'BabylAI',\n BabylaiDescription: 'مرحبا! 👋 أنا BabylAI، هنا لتساعدك.',\n ChatNow: 'دردش الآن',\n TryBableAI: 'جرب BabylAI مجانا 🎉',\n ContactUs: 'تواصل معنا, دعنا نتحدث! 💬',\n PickTopicTitle: 'اختر موضوع للبدء',\n BabylAI: 'BabylAI',\n ChatPlaceholder: 'اكتب رسالتك...',\n PoweredByBabylAI: 'مدعوم من BabylAI',\n EndChat: 'إنهاء الدردشة',\n LeavingDialogTitle: 'هل تغادر بالفعل؟ 👋',\n LeavingDialogBody: 'لا تقلق، يمكنك العودة في أي وقت. نحن دائماً هنا إذا كنت بحاجة إلى مساعدة أو لديك أسئلة.',\n Confirm: 'تأكيد',\n Cancel: 'إلغاء',\n title: 'مركز المساعدة'\n }\n }\n\n private currentLang = new BehaviorSubject<Language>('en')\n\n constructor() {}\n\n translate(key: TranslationKey): string {\n const lang = this.currentLang.value as Language\n return this.translations[lang][key] || key\n }\n\n setLanguage(lang: Language) {\n this.currentLang.next(lang)\n }\n\n getCurrentLang(): Language {\n return this.currentLang.value\n }\n}\n","// src/app/pipes/translate.pipe.ts\nimport { Pipe, PipeTransform } from '@angular/core'\nimport { TranslationService } from '../services/translation.service'\nimport { TranslationKey } from '../services/translation.service' // Add this import\n\n@Pipe({\n name: 'translate',\n standalone: true\n})\nexport class TranslatePipe implements PipeTransform {\n constructor(private translationService: TranslationService) {}\n\n transform(key: TranslationKey): string {\n return this.translationService.translate(key)\n }\n}\n","import { Component, Input, OnInit, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { CardComponent, CardContentComponent } from '../shared/components/card/card.component'\nimport { ButtonComponent } from '../shared/components/button/button.component'\nimport { TranslatePipe } from '../pipes/translate.pipe'\n\ninterface Tenant {\n id: string\n name: string\n key: string\n}\n\ninterface Assistant {\n id: string\n tenantId: string\n tenant: Tenant\n name: string\n openAIAssistantId: string\n greeting: string\n closing: string\n}\n\ninterface HelpScreenOption {\n id: string\n helpScreenId: string\n parentOptionId: string | null\n parentOption: HelpScreenOption | null\n nestedOptions: HelpScreenOption[]\n assistantId: string\n assistant: Assistant\n title: string\n paragraphs: string[]\n files: any[]\n chatWithUs: boolean\n hasNestedOptions: boolean\n order: number\n}\n\ninterface HelpScreenData {\n id: string\n tenantId: string\n tenant: Tenant\n title: string\n description: string\n options: HelpScreenOption[]\n chatWithUs: boolean\n}\n\n@Component({\n selector: 'app-help-screen-data',\n standalone: true,\n imports: [CommonModule, CardComponent, CardContentComponent, ButtonComponent, TranslatePipe],\n templateUrl: './help-screen-data.component.html',\n styleUrls: ['./help-screen-data.component.scss']\n})\nexport class HelpScreenDataComponent implements OnInit {\n @Input() helpScreenData: HelpScreenData | null = null\n @Input() title: string = ''\n @Output() handleStartNewChat = new EventEmitter<HelpScreenOption>()\n\n expandedItemId: string | null = null\n\n ngOnInit() {}\n\n toggleExpand(itemId: string): void {\n if (this.expandedItemId === itemId) {\n this.expandedItemId = null\n } else {\n this.expandedItemId = itemId\n setTimeout(() => {\n const element = document.getElementById(itemId)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n }\n }, 100)\n }\n }\n\n startNewChat(option: HelpScreenOption): void {\n this.handleStartNewChat.emit(option)\n }\n}\n","<div class=\"help-screen\">\n <h1 class=\"help-screen__title\">\n {{ 'PickTopicTitle' | translate }}\n </h1>\n <ng-container *ngFor=\"let item of helpScreenData?.options\">\n <app-card [id]=\"item.id\" variant=\"rounded\" class=\"help-screen__card\" (click)=\"toggleExpand(item.id)\">\n <app-card-content>\n <!-- Header section (always visible) -->\n <div class=\"help-screen__header\">\n <h4 class=\"help-screen__title-text\">{{ item.title }}</h4>\n <div\n class=\"help-screen__arrow-container\"\n [ngClass]=\"{\n 'help-screen__arrow-container--expanded': expandedItemId === item.id,\n 'help-screen__arrow-container--collapsed': expandedItemId !== item.id\n }\"\n >\n <img src=\"/icons/arrow-stripped-colored.svg\" alt=\"arrow-down\" />\n </div>\n </div>\n\n <!-- Expanded content (visible only when expanded) -->\n <div *ngIf=\"expandedItemId === item.id\" class=\"help-screen__content\">\n <ng-container>\n <div *ngFor=\"let paragraph of item.paragraphs\" class=\"help-screen__paragraph\">\n {{ paragraph }}\n </div>\n </ng-container>\n\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"startNewChat(item)\">{{ 'ChatNow' | translate }}</app-button>\n </div>\n </app-card-content>\n </app-card>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { Component, EventEmitter, HostListener, Input, Output } from '@angular/core'\nimport { ButtonComponent } from '../button'\nimport { TranslatePipe } from '../../../pipes/translate.pipe'\n\ntype HeaderType = 'standard' | 'minimal'\n\n@Component({\n selector: 'app-header',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n styleUrls: ['./header.component.scss'],\n template: `\n <div class=\"header\">\n <app-button\n *ngIf=\"showBackButton\"\n variant=\"icon-bg\"\n className=\"button--white-bg\"\n [direction]=\"isRtl ? 'rtl' : 'ltr'\"\n (click)=\"onBack.emit()\"\n >\n <img src=\"/icons/arrow-stripped-colored.svg\" alt=\"Back\" class=\"header__back-button-icon\" [class.rtl]=\"isRtl\" />\n </app-button>\n <app-button\n *ngIf=\"showCloseButton\"\n variant=\"icon-bg\"\n [direction]=\"isRtl ? 'rtl' : 'ltr'\"\n className=\"button--close-button\"\n (click)=\"onClose.emit()\"\n >\n <img src=\"/icons/close-circle.svg\" alt=\"Close\" />\n </app-button>\n <img *ngIf=\"showLogo\" [src]=\"logoSrc\" [alt]=\"logoAlt\" class=\"header__logo\" />\n <app-button *ngIf=\"!showBackButton && !showCloseButton\" variant=\"icon-only\" class=\"header__close-button\" (click)=\"onClose.emit()\">\n <img src=\"/icons/close-circle.svg\" alt=\"Close\" />\n </app-button>\n </div>\n `\n})\nexport class HeaderComponent {\n @Input() headerType: HeaderType = 'standard'\n @Input() showBackButton = false\n @Input() showLogo = true\n @Input() logoSrc = '/logo-white.svg'\n @Input() logoAlt = 'BabylAI Logo'\n @Input() language = 'en'\n @Input() showCloseButton = false\n @Output() onBack = new EventEmitter<void>()\n @Output() onClose = new EventEmitter<void>()\n\n get isRtl(): boolean {\n return this.language === 'ar'\n }\n}\n\n@Component({\n selector: 'app-chat-header',\n standalone: true,\n imports: [CommonModule, ButtonComponent, TranslatePipe],\n styleUrls: ['./header.component.scss'],\n template: `\n <div class=\"chat-header\">\n <div class=\"chat-header__actions\">\n <app-button size=\"small\" variant=\"icon-bg\" className=\"chat-header__button button--light-bg\" (click)=\"onBack.emit()\">\n <img src=\"/icons/arrow-stripped-colored.svg\" alt=\"Back\" [style.transform]=\"isRtl ? 'rotate(180deg)' : 'rotate(0deg)'\" />\n </app-button>\n <div class=\"chat-header__menu\" data-menu-container>\n <app-button\n size=\"small\"\n variant=\"icon-bg\"\n className=\"chat-header__button button--light-bg\"\n (click)=\"$event.stopPropagation(); isMenuOpen = !isMenuOpen\"\n >\n <img src=\"/icons/menu.svg\" alt=\"Menu\" />\n </app-button>\n <div *ngIf=\"isMenuOpen\" class=\"chat-header__menu-dropdown\" [ngClass]=\"{ rtl: isRtl, ltr: !isRtl }\">\n <div class=\"chat-header__menu-dropdown-content\">\n <button (click)=\"onClose.emit(); isMenuOpen = false\" class=\"chat-header__menu-button\" [ngClass]=\"{ rtl: isRtl, ltr: !isRtl }\">\n {{ 'EndChat' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"chat-header__brand\">\n <img src=\"/logo-primary.svg\" [alt]=\"logoAlt\" />\n <p>{{ 'BabylAI' | translate }}</p>\n </div>\n </div>\n `\n})\nexport class ChatHeaderComponent {\n isMenuOpen = false\n @Input() showBackButton = false\n @Input() showLogo = true\n @Input() logoSrc = '/logo-white.svg'\n @Input() logoAlt = 'BabylAI Logo'\n @Input() language = 'en'\n @Output() onBack = new EventEmitter<void>()\n @Output() onClose = new EventEmitter<void>()\n\n get isRtl(): boolean {\n return this.language === 'ar'\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as HTMLElement\n const menuContainer = target.closest('[data-menu-container]')\n if (!menuContainer && this.isMenuOpen) {\n this.isMenuOpen = false\n }\n }\n}\n","import { Component } from '@angular/core'\n\n@Component({\n selector: 'app-loading',\n styleUrls: ['./loading.component.scss'],\n template: `\n <div class=\"loading\">\n <img src=\"/images/animatedLogo.gif\" alt=\"Animated Logo\" class=\"loading__logo\" />\n </div>\n `,\n standalone: true\n})\nexport class LoadingComponent {}\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnInit } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { MarkdownComponent } from 'ngx-markdown'\nimport { ButtonComponent } from '../shared/components/button'\nimport { CardComponent, CardContentComponent } from '../shared/components/card'\nimport { LoadingComponent } from '../shared/components/loading/loading.component'\nimport { TranslatePipe } from '../pipes/translate.pipe'\nimport 'prismjs'\nimport 'prismjs/components/prism-typescript'\nimport 'prismjs/components/prism-javascript'\nimport 'prismjs/components/prism-css'\nimport 'prismjs/components/prism-json'\nimport 'prismjs/components/prism-markdown'\nimport 'prismjs/themes/prism-okaidia.css'\n\ninterface Message {\n id: string | number\n sender: 'user' | 'assistant' | 'agent'\n senderType: number\n messageContent: string\n sentAt: Date\n isSeen: boolean\n}\n\n@Component({\n selector: 'app-chat',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MarkdownComponent,\n ButtonComponent,\n CardComponent,\n CardContentComponent,\n LoadingComponent,\n TranslatePipe\n ],\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.scss']\n})\nexport class ChatComponent implements OnInit {\n @Input() messages: Message[] = []\n @Input() needsAgent: boolean = false\n @Input() assistantStatus: string = 'idle'\n @Input() isSignalRConnected: boolean = false\n @Input() isChatClosed: boolean = false\n @Output() sendMessageEvent = new EventEmitter<string>()\n @ViewChild('chatMessagesContainer') chatMessagesContainer!: ElementRef\n @Input() currentLang: string = 'en'\n @Input() loading: boolean = false\n\n messageText: string = ''\n\n get firstAgentMessageIndex(): number {\n return this.messages.findIndex((message) => message.senderType === 2)\n }\n\n cleanMessageContent(content: string): string {\n // Remove excessive newlines (more than 2 consecutive newlines)\n return content.replace(/\\n{3,}/g, '\\n\\n').trim()\n }\n\n ngOnInit(): void {\n // Initialize component\n }\n\n ngAfterViewChecked(): void {\n this.scrollToBottom()\n }\n\n scrollToBottom(): void {\n try {\n this.chatMessagesContainer.nativeElement.scrollTop = this.chatMessagesContainer.nativeElement.scrollHeight\n } catch (err) {\n console.error('Error scrolling to bottom:', err)\n }\n }\n\n sendMessage(): void {\n if (!this.messageText.trim() || !this.isSignalRConnected || this.isChatClosed) return\n this.sendMessageEvent.emit(this.messageText)\n this.messageText = ''\n }\n\n hasAgentMessageBeenSent(messages: any[]): boolean {\n return messages.some((message) => message.senderType === 2 || message.senderType === 3)\n }\n}\n","<div class=\"chat\">\n <div class=\"chat__messages\" #chatMessagesContainer>\n <div *ngFor=\"let message of messages; let i = index\" class=\"chat__message-group\">\n <div class=\"chat__separator\" *ngIf=\"i === firstAgentMessageIndex && message.senderType === 2\">\n <img src=\"/images/seperator.svg\" alt=\"separator\" />\n </div>\n <div class=\"chat__message-container\" [class.chat__message-container--user]=\"message.senderType === 1\">\n <div class=\"chat__avatar\" [class.chat__avatar--hidden]=\"i > 0 && messages[i - 1].senderType === message.senderType\">\n @if (message.senderType === 3) {\n <span class=\"chat__avatar-wrapper chat__avatar-wrapper--assistant\">\n <img src=\"/logo-white.svg\" alt=\"robot\" class=\"chat__avatar-image\" />\n </span>\n } @else if (needsAgent || message.senderType === 2) {\n <span class=\"chat__avatar-wrapper chat__avatar-wrapper--agent\">\n <img src=\"/icons/person.svg\" alt=\"agent\" class=\"chat__avatar-image\" />\n </span>\n }\n </div>\n <app-card\n variant=\"rounded\"\n [class]=\"'chat__message ' + (message.senderType === 1 ? 'chat__message--user' : 'chat__message--assistant')\"\n >\n <app-card-content>\n <div class=\"chat__message-content\">\n <markdown\n [data]=\"cleanMessageContent(message.messageContent)\"\n ngPreserveWhitespaces\n [inline]=\"false\"\n class=\"prose\"\n [class.prose-invert]=\"message.senderType === 1\"\n >\n </markdown>\n </div>\n </app-card-content>\n </app-card>\n </div>\n </div>\n\n <div *ngIf=\"assistantStatus === 'typing' && firstAgentMessageIndex === -1\" class=\"chat__typing\">\n <div class=\"chat__avatar\">\n <span class=\"chat__avatar-wrapper chat__avatar-wrapper--agent\">\n <img src=\"/images/animatedLogo.gif\" alt=\"Loading\" class=\"chat__avatar-image\" />\n </span>\n </div>\n <app-card variant=\"rounded\" class=\"chat__message chat__message--assistant\">\n <app-card-content>\n <div id=\"wave\">\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </div>\n </app-card-content>\n </app-card>\n </div>\n <div *ngIf=\"loading\" class=\"chat__loading\">\n <app-loading />\n </div>\n </div>\n\n <form (ngSubmit)=\"sendMessage()\" class=\"chat__input-container\">\n <div class=\"chat__input-wrapper\">\n <input\n type=\"text\"\n [(ngModel)]=\"messageText\"\n name=\"messageText\"\n [placeholder]=\"'ChatPlaceholder' | translate\"\n [disabled]=\"isChatClosed\"\n class=\"chat__input\"\n />\n <button type=\"submit\" [disabled]=\"!messageText.trim() || !isSignalRConnected || isChatClosed\" class=\"chat__send-button\">\n <img\n src=\"/icons/send.svg\"\n alt=\"send-message\"\n class=\"chat__send-button-icon\"\n [class.chat__send-button-icon--rtl]=\"currentLang === 'ar'\"\n />\n </button>\n </div>\n </form>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ButtonComponent } from '../button'\n\n@Component({\n selector: 'app-confirmation-dialog',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n styleUrls: ['./confirmation-dialog.component.scss'],\n template: `\n <div class=\"dialog\">\n <div class=\"dialog__content\">\n <h3 class=\"dialog__title\">{{ title }}</h3>\n <p class=\"dialog__body\">{{ body }}</p>\n <div class=\"dialog__actions\">\n <app-button variant=\"outline\" [fullWidth]=\"true\" (click)=\"onCancel.emit()\">\n {{ cancelText }}\n </app-button>\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"onConfirm.emit()\">\n {{ confirmText }}\n </app-button>\n </div>\n </div>\n </div>\n `\n})\nexport class ConfirmationDialogComponent {\n @Input() title: string = ''\n @Input() body: string = ''\n @Input() confirmText: string = 'Confirm'\n @Input() cancelText: string = 'Cancel'\n @Output() onConfirm = new EventEmitter<void>()\n @Output() onCancel = new EventEmitter<void>()\n}\n","import { Injectable } from '@angular/core'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n private getTokenFunction: (() => Promise<string>) | null = null\n private baseUrl: string | null = null\n\n initializeAPI(url: string, getToken: () => Promise<string>) {\n this.getTokenFunction = getToken\n this.baseUrl = url\n }\n\n async getValidToken(forceRefresh = false): Promise<string> {\n if (!this.getTokenFunction) {\n throw new Error('API module not initialized. Call initializeAPI(getToken) first.')\n }\n\n let storedToken = localStorage.getItem('chatbot-token')\n let storedExpiry = localStorage.getItem('chatbot-token-expiry')\n\n const currentTime = Math.floor(Date.now() / 1000)\n\n if (!storedToken || !storedExpiry || currentTime >= Number(storedExpiry) || forceRefresh) {\n const tokenResponse = await this.getTokenFunction()\n\n if (!tokenResponse) {\n throw new Error('Invalid token response from getTokenFunction')\n }\n\n storedToken = tokenResponse\n storedExpiry = String(currentTime + 900)\n\n localStorage.setItem('chatbot-token', storedToken)\n localStorage.setItem('chatbot-token-expiry', storedExpiry)\n }\n\n return storedToken\n }\n\n private async fetchWithAuth(url: string, options: RequestInit, retry = true): Promise<Response> {\n if (!options.headers) {\n options.headers = {}\n }\n\n const headers = options.headers as Record<string, string>\n headers['Authorization'] = `Bearer ${await this.getValidToken()}`\n\n let response = await fetch(url, options)\n\n if ((response.status === 401 || response.status === 403) && retry) {\n console.warn('Token expired. Fetching new token...')\n\n const newToken = await this.getValidToken(true)\n headers['Authorization'] = `Bearer ${newToken}`\n\n response = await fetch(url, options)\n }\n\n return response\n }\n\n async apiRequest(endpoint: string, method = 'GET', body: any = null, customHeaders: Record<string, string> = {}): Promise<Response> {\n if (!this.baseUrl) {\n throw new Error('API not initialized. Call initializeAPI first.')\n }\n\n const url = `${this.baseUrl}/${endpoint}`\n\n const options: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders\n },\n body: body ? JSON.stringify(body) : null\n }\n\n const response = await this.fetchWithAuth(url, options)\n\n if (!response.ok) {\n const errorData = await response.json()\n throw new Error(errorData.message || 'API request failed')\n }\n\n return response\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SignalRService {\n private connection: signalR.HubConnection | null = null;\n private isConnected = false;\n private baseURL = 'http://localhost:5086'; // Replace with your API URL\n private hubUrl = 'https://babylai.net'; // Replace with your SignalR hub URL\n\n async startConnection(\n sessionId: string,\n apiKey: string,\n onMessageReceived: (\n message: string,\n senderType: string,\n needsAgent: boolean\n ) => void\n ): Promise<void> {\n console.log('sessionId:', sessionId);\n\n if (this.isConnected) return;\n\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(\n `${this.hubUrl}/clientHub?access_token=${encodeURIComponent(apiKey)}`,\n {\n withCredentials: true,\n transport:\n signalR.HttpTransportType.WebSockets |\n signalR.HttpTransportType.LongPolling,\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-SignalR-User-Agent':\n 'Microsoft SignalR/8.0 (8.0.7; Unknown OS; Browser; Unknown Runtime Version)',\n },\n skipNegotiation: false,\n accessTokenFactory: () => apiKey,\n }\n )\n .withAutomaticReconnect()\n .configureLogging(signalR.LogLevel.Information)\n .build();\n\n this.connection.on(\n 'ReceiveMessage',\n (message: string, senderType: string, needsAgent: boolean) => {\n console.log(\n 'Received message from SignalR:',\n message,\n senderType,\n needsAgent\n );\n onMessageReceived(message, senderType, needsAgent);\n }\n );\n\n try {\n await this.connection.start();\n console.log('SignalR connection started successfully.');\n\n this.isConnected = true;\n await this.joinGroup(sessionId);\n console.log('SignalR group joined.');\n } catch (error) {\n console.error('Error connecting to SignalR', error);\n this.isConnected = false;\n }\n }\n\n async joinGroup(sessionId: string): Promise<void> {\n if (this.connection) {\n try {\n console.log(`Attempting to join group with session ID: ${sessionId}`);\n await this.connection.invoke('JoinGroup', sessionId);\n console.log(`Joined group with session ID: ${sessionId}`);\n } catch (error) {\n console.error('Error joining SignalR group:', error);\n }\n }\n }\n\n async leaveGroup(sessionId: string): Promise<void> {\n if (this.connection && this.isConnected) {\n try {\n await this.connection.invoke('LeaveGroup', sessionId);\n console.log(`Left group with session ID: ${sessionId}`);\n } catch (error) {\n console.error('Error leaving SignalR group:', error);\n }\n }\n }\n\n async stopConnection(): Promise<void> {\n if (this.connection && this.isConnected) {\n await this.connection.stop();\n this.isConnected = false;\n console.log('SignalR disconnected.');\n }\n }\n}\n","import { Injectable } from '@angular/core'\n\nexport interface TokenResponse {\n token: string\n expiresIn: number\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenService {\n private baseUrl: string | null = null\n\n initializeService(baseUrl: string) {\n this.baseUrl = baseUrl\n }\n\n async getToken(): Promise<TokenResponse> {\n if (!this.baseUrl) {\n throw new Error('Token service not initialized. Call initializeService first.')\n }\n\n try {\n const response = await fetch(`${this.baseUrl}/Auth/client/get-token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n tenantId: '2176c188-8cb4-4fc3-8366-2d32e601f7e5',\n apiKey: 'I/22UK34I6xAhglfPXTwPAgUuVyJw8TdnG26ZLI5gYQ='\n })\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch token')\n }\n\n const data = await response.json()\n return {\n token: data.token,\n expiresIn: data.expiresIn || 3600 // Default to 1 hour if not provided\n }\n } catch (error) {\n throw new Error('Failed to get authentication token')\n }\n }\n}\n","import { Component, Input, OnInit, ViewChild, ElementRef } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { ApiService } from '../services/api.service'\nimport { SignalRService } from '../services/signalrService.service'\nimport { TokenService } from '../services/token.service'\nimport { CardComponent, CardContentComponent } from '../shared/components/card/card.component'\nimport { ButtonComponent } from '../shared/components/button'\nimport { HelpScreenDataComponent } from '../help-screen-data/help-screen-data.component'\nimport { HeaderComponent, ChatHeaderComponent } from '../shared/components/header'\nimport { ChatComponent } from '../chat/chat.component'\nimport { LoadingComponent } from '../shared/components/loading/loading.component'\nimport { ConfirmationDialogComponent } from '../shared/components/confirmation-dialog/confirmation-dialog.component'\nimport { TranslatePipe } from '../pipes/translate.pipe'\nimport { TranslationService } from '../services/translation.service'\n\ninterface Option {\n id: string\n helpScreenId: string\n parentOptionId: string | null\n nestedOptions: Option[]\n title: string\n paragraphs: string[]\n chatWithUs: boolean\n assistantId?: string\n assistant?: {\n id: string\n tenantId: string\n tenant: {\n id: string\n name: string\n key: string\n }\n name: string\n openAIAssistantId: string\n greeting: string\n closing: string\n }\n hasNestedOptions: boolean\n order: number\n}\n\ninterface Message {\n id: string | number\n sender: 'user' | 'assistant' | 'agent'\n senderType: number\n messageContent: string\n sentAt: Date\n isSeen: boolean\n}\n\n@Component({\n selector: 'app-help-center-widget',\n templateUrl: './help-center-widget.component.html',\n styleUrls: ['./help-center-widget.component.scss', '../../styles.scss'],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TranslatePipe,\n CardComponent,\n CardContentComponent,\n ButtonComponent,\n HelpScreenDataComponent,\n HeaderComponent,\n ChatHeaderComponent,\n ChatComponent,\n LoadingComponent,\n ConfirmationDialogComponent\n ],\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .help-center-container {\n width: 100%;\n height: 100%;\n }\n `\n ]\n})\nexport class HelpCenterWidgetComponent implements OnInit {\n @Input() getToken!: () => Promise<string>\n @Input() helpScreenId!: string\n @Input() showArrow: boolean = true\n @Input() messageLabel: string | null = null\n @Input() currentLang: string = 'en'\n @Input() isIntroScreenEnabled: boolean = false\n @ViewChild('chatMessagesContainer') chatMessagesContainer!: ElementRef\n\n // State variables\n isPopupOpen = false\n helpScreenData: any = null\n status = 'idle'\n error: string | null = null\n showArrowAnimation = false\n isRTL: boolean = this.currentLang === 'en' ? false : true\n showTooltip = false\n sessionId: string | null = null\n isSignalRConnected = false\n isChatClosed = false\n showChat = false\n messageText: string = ''\n isTyping = false\n messages: Message[] = []\n showHelpScreenData = false\n chatIsLoading = false\n\n isOpen = false\n\n needsAgent = false\n assistantStatus = 'idle'\n\n selectedOption: Option | null = null\n selectedNestedOption: Option | null = null\n\n private baseUrl = 'https://babylai.net/api'\n\n showEndChatConfirmation = false\n\n constructor(\n private apiService: ApiService,\n private signalRService: SignalRService,\n private tokenService: TokenService,\n private translationService: TranslationService\n ) {}\n\n ngOnInit() {\n this.showArrowAnimation = this.showArrow\n this.tokenService.initializeService(this.baseUrl)\n this.apiService.initializeAPI(this.baseUrl, this.getToken)\n console.log('🚀 ~ HelpCenterWidgetComponent ~ ngOnInit ~ isIntroScreenEnabled:', this.isIntroScreenEnabled)\n if (!this.isIntroScreenEnabled) {\n this.showHelpScreenData = true\n }\n }\n\n async handleTogglePopup() {\n this.isPopupOpen = !this.isPopupOpen\n this.showArrowAnimation = this.isPopupOpen\n\n if (this.isPopupOpen) {\n await this.fetchHelpScreenData()\n }\n }\n\n private async fetchHelpScreenData() {\n this.status = 'loading'\n this.error = null\n\n try {\n const response = await this.apiService.apiRequest(`client/clientHelpScreen/${this.helpScreenId}`, 'GET')\n this.helpScreenData = await response.json()\n this.status = 'succeeded'\n } catch (error: any) {\n this.error = error.message\n this.status = 'failed'\n }\n }\n\n async createChatSession() {\n try {\n const chatSessionCreateDto = {\n optionId: this.selectedOption?.id,\n helpScreenId: this.helpScreenId\n }\n\n const response = await this.apiService.apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto)\n const data = await response.json()\n this.sessionId = data.id\n return data\n } catch (error) {\n console.error('Error creating chat session:', error)\n throw error\n }\n }\n\n async sendMessage(messageText?: string) {\n const textToSend = messageText || this.messageText\n if (!textToSend.trim() || !this.isSignalRConnected || this.isChatClosed) return\n\n try {\n this.assistantStatus = 'typing'\n\n // Add user message\n this.messages.push({\n id: Date.now(),\n sender: 'user',\n senderType: 1,\n messageContent: textToSend,\n sentAt: new Date(),\n isSeen: false\n })\n\n if (!this.sessionId) {\n await this.createChatSession()\n }\n\n const messageDto = { messageContent: textToSend }\n await this.apiService.apiRequest(`Client/ClientChatSession/${this.sessionId}/send-message`, 'POST', messageDto)\n\n // Clear message input\n this.messageText = ''\n\n // Update message as seen\n this.messages = this.messages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg))\n } catch (error) {\n console.error('Error sending message:', error)\n this.assistantStatus = 'idle'\n this.messages.push({\n id: Date.now(),\n sender: 'assistant',\n senderType: 3,\n messageContent: 'Failed to send the message. Please try again.\\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',\n sentAt: new Date(),\n isSeen: true\n })\n }\n }\n\n async sendMessageToChatSession(chatSessionId: string, messageDto: any) {\n try {\n const response = await this.apiService.apiRequest(`Client/ClientChatSession/${chatSessionId}/send-message`, 'POST', messageDto)\n return await response.json()\n } catch (error) {\n console.error('Error sending message:', error)\n throw error\n }\n }\n\n handleReceiveMessage(message: string, senderType: string, needsAgent: boolean) {\n if (needsAgent) {\n this.needsAgent = true\n }\n\n const sender = this.getSenderType(parseInt(senderType))\n\n this.messages.push({\n id: Date.now(),\n sender: sender,\n senderType: parseInt(senderType),\n messageContent: message,\n sentAt: new Date(),\n isSeen: true\n })\n\n console.log(this.messages)\n\n this.assistantStatus = 'idle'\n this.scrollToBottom()\n }\n\n private getSenderType(senderType: number): 'user' | 'assistant' | 'agent' {\n switch (senderType) {\n case 1:\n return 'user'\n case 2:\n return 'agent'\n default:\n return 'assistant'\n }\n }\n\n async handleStartNewChat(option: Option) {\n this.selectedOption = option\n this.chatIsLoading = true\n if (!this.isSignalRConnected) {\n try {\n await this.createChatSession()\n const tokenResponse = await this.apiService.getValidToken()\n this.showChat = true\n this.isChatClosed = false\n this.showHelpScreenData = false\n\n await this.signalRService.startConnection(this.sessionId!, tokenResponse, this.handleReceiveMessage.bind(this))\n this.isSignalRConnected = true\n // add greeting message\n this.messages.push({\n id: Date.now(),\n sender: 'assistant',\n senderType: 3,\n messageContent:\n option.assistant?.greeting ||\n (this.currentLang === 'en' ? 'Hello! How can I assist you today?' : 'مرحباً! كيف يمكنني مساعدتك اليوم؟'),\n sentAt: new Date(),\n isSeen: true\n })\n\n this.chatIsLoading = false\n } catch (error) {\n console.error('Error connecting to SignalR:', error)\n this.chatIsLoading = false\n }\n } else {\n this.showChat = true\n this.isChatClosed = false\n this.showHelpScreenData = false\n this.chatIsLoading = false\n }\n }\n\n private async startNewChatSession(option: any) {\n try {\n this.status = 'loading'\n this.error = ''\n this.messages = []\n\n const chatSessionCreateDto = {\n helpScreenId: this.helpScreenId,\n optionId: option.id\n }\n\n const response = await this.apiService.apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto)\n const createdSession = await response.json()\n this.sessionId = createdSession.id\n\n // Add greeting message\n this.messages.push({\n id: Date.now(),\n sender: 'assistant',\n senderType: 3,\n messageContent: option.assistant?.greeting || 'Hello! How can I assist you today?\\nمرحباً! كيف يمكنني مساعدتك اليوم؟',\n sentAt: new Date(),\n isSeen: true\n })\n\n this.isSignalRConnected = true\n this.isChatClosed = false\n this.status = 'succeeded'\n } catch (error: any) {\n console.error('Chat start error:', error)\n this.error = error.message || 'Failed to start chat session'\n this.status = 'failed'\n }\n }\n\n async handleStartChat(option: any) {\n this.showChat = true\n await this.startNewChatSession(option)\n }\n\n async handleEndChat() {\n this.showEndChatConfirmation = true\n }\n\n async confirmEndChat() {\n this.showEndChatConfirmation = false\n if (this.sessionId) {\n await this.closeChatSession(this.sessionId)\n this.sessionId = null\n }\n this.showChat = false\n this.showHelpScreenData = true\n this.messages = []\n this.needsAgent = false\n this.assistantStatus = 'idle'\n this.selectedOption = null\n this.selectedNestedOption = null\n }\n\n cancelEndChat() {\n this.showEndChatConfirmation = false\n }\n\n async closeChatSession(chatSessionId: string) {\n try {\n const response = await this.apiService.apiRequest(`Client/ClientChatSession/${chatSessionId}/close`, 'POST')\n return await response.json()\n } catch (error) {\n console.error('Error closing chat session:', error)\n throw error\n }\n }\n\n handleClosePopup() {\n if (this.showChat) {\n this.handleEndChat()\n }\n this.showHelpScreenData = false\n this.showChat = false\n this.isPopupOpen = false\n this.selectedOption = null\n this.selectedNestedOption = null\n }\n\n handleCloseArrowAnimation() {\n this.showArrowAnimation = false\n }\n\n handleBack() {\n if (this.showChat) {\n this.showChat = false\n this.showHelpScreenData = true\n } else if (this.selectedNestedOption) {\n this.selectedNestedOption = null\n } else if (this.selectedOption) {\n this.selectedOption = null\n } else if (this.showHelpScreenData) {\n this.showHelpScreenData = false\n }\n }\n\n handleShowChat() {\n this.showChat = true\n this.showHelpScreenData = false\n }\n\n selectOption(option: Option) {\n this.selectedOption = option\n this.selectedNestedOption = null\n }\n\n selectNestedOption(nestedOption: Option) {\n this.selectedNestedOption = nestedOption\n }\n\n handleShowHelpScreenData() {\n this.showHelpScreenData = true\n }\n\n handleHideHelpScreenData() {\n this.showHelpScreenData = false\n }\n\n private scrollToBottom(): void {\n setTimeout(() => {\n if (this.chatMessagesContainer) {\n const element = this.chatMessagesContainer.nativeElement\n element.scrollTop = element.scrollHeight\n }\n })\n }\n\n getDirection() {\n return this.currentLang === 'ar' ? 'rtl' : 'ltr'\n }\n\n get helpScreenDataList() {\n if (!this.helpScreenData?.options) return []\n // Transform options to the format expected by HelpScreenDataComponent\n return this.helpScreenData.options.map((option: any) => ({\n icon: option.icon || '/icons/default.svg',\n title: option.title,\n description: option.paragraphs?.[0] || '',\n actionLabel: option.chatWithUs ? 'Chat Now' : '',\n action: option.chatWithUs ? () => this.handleStartChat(option) : null\n }))\n }\n\n navigateToUrl(url: string): void {\n window.open(url, '_blank')\n }\n}\n","<div class=\"help-center-container\" [dir]=\"getDirection()\">\n <!-- Arrow Animation -->\n <div *ngIf=\"showArrowAnimation && !isPopupOpen\" class=\"arrow-animation\">\n <div class=\"message-box\">\n <p>\n {{ messageLabel || 'Need assistance Or You want to try the Product? Click here' }}\n </p>\n <button class=\"close-button\" (click)=\"handleCloseArrowAnimation()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\">\n <path d=\"M1 1L11 11M1 11L11 1\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </button>\n <div class=\"arrow-tip\"></div>\n </div>\n </div>\n\n <!-- Help Button -->\n <button class=\"help-button\" (click)=\"handleTogglePopup()\">\n <span class=\"help-button-content\">\n <img src=\"/logo-white.svg\" alt=\"BabylAI Logo\" class=\"help-button-logo\" />\n </span>\n </button>\n\n <!-- Help Popup -->\n <div\n *ngIf=\"isPopupOpen\"\n class=\"help-popup\"\n [ngClass]=\"{\n 'is-open': isPopupOpen,\n 'is-closed': !isPopupOpen,\n 'has-gradient': isPopupOpen && !showHelpScreenData && !showChat\n }\"\n >\n <app-confirmation-dialog\n *ngIf=\"showEndChatConfirmation\"\n [title]=\"'LeavingDialogTitle' | translate\"\n [body]=\"'LeavingDialogBody' | translate\"\n [confirmText]=\"'Confirm' | translate\"\n [cancelText]=\"'Cancel' | translate\"\n (onConfirm)=\"confirmEndChat()\"\n (onCancel)=\"cancelEndChat()\"\n ></app-confirmation-dialog>\n\n <!-- Loading State -->\n <div *ngIf=\"status === 'loading'\" class=\"loading-state\">\n <ng-container *ngIf=\"!showHelpScreenData\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <ng-container *ngIf=\"showHelpScreenData\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <app-loading></app-loading>\n </div>\n\n <!-- Error State -->\n <div *ngIf=\"status === 'failed'\" class=\"error-message\">\n <span>Error: {{ error }}</span>\n </div>\n\n <!-- Content -->\n <ng-container *ngIf=\"status === 'succeeded'\">\n <!-- Headers -->\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData && !showChat\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData && !showChat\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showBackButton]=\"isIntroScreenEnabled && showHelpScreenData\"\n [showLogo]=\"false\"\n (onClose)=\"handleHideHelpScreenData()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-header>\n\n <ng-container *ngIf=\"showHelpScreenData && sessionId\">\n <app-button variant=\"icon-bg\" (click)=\"handleShowChat()\" class=\"chat-button\">\n <img src=\"/icons/chat.svg\" alt=\"Close\" class=\"icon-full\" />\n </app-button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"showChat\">\n <app-chat-header\n [showBackButton]=\"showChat\"\n [showLogo]=\"false\"\n (onClose)=\"handleEndChat()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-chat-header>\n\n <app-chat\n class=\"chat-container\"\n [messages]=\"messages\"\n [needsAgent]=\"needsAgent\"\n [assistantStatus]=\"assistantStatus\"\n [isSignalRConnected]=\"isSignalRConnected\"\n [isChatClosed]=\"isChatClosed\"\n (sendMessageEvent)=\"sendMessage($event)\"\n [currentLang]=\"currentLang\"\n [loading]=\"chatIsLoading\"\n ></app-chat>\n </ng-container>\n\n <!-- Main Content -->\n <div class=\"main-content\" *ngIf=\"!showChat\">\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData\">\n <div class=\"intro-section\">\n <h1 class=\"intro-title\">{{ 'ChatIntroMessage' | translate }}</h1>\n </div>\n\n <div class=\"cards-section\">\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"card-content\">\n <div class=\"babylai-info\">\n <div class=\"logo-container\">\n <img src=\"/logo-white.svg\" alt=\"Chat\" class=\"logo\" />\n </div>\n <div class=\"info-text\">\n <h4 class=\"info-title\">{{ 'BabylaiTitle' | translate }}</h4>\n <p class=\"info-description\">{{ 'BabylaiDescription' | translate }}</p>\n </div>\n </div>\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"handleShowHelpScreenData()\">\n {{ 'ChatNow' | translate }}\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'TryBableAI' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net/signup')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'ContactUs' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n </div>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData\">\n <img src=\"/images/stars.svg\" alt=\"help-center-widget-icon\" class=\"stars\" />\n <app-help-screen-data [helpScreenData]=\"helpScreenData\" (handleStartNewChat)=\"handleStartNewChat($event)\"></app-help-screen-data>\n </ng-container>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <a href=\"https://babylai.net\" target=\"_blank\" class=\"footer-link\" [ngClass]=\"{ 'light-text': !showHelpScreenData && !showChat }\">\n {{ 'PoweredByBabylAI' | translate }}\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n","// Components and Modules\nexport * from './src/app/help-center-widget/help-center-widget.component'\n\n// Services\nexport * from './src/app/services/api.service'\nexport * from './src/app/services/signalrService.service'\nexport * from './src/app/services/token.service'\nexport * from './src/app/services/translation.service'\n\n// Types\nexport * from './src/app/types'\n\n// Pipes\nexport * from './src/app/pipes/translate.pipe'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.TranslationService","i1.ApiService","i2.SignalRService","i3.TokenService","i4.TranslationService","i5"],"mappings":"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"}
1
+ {"version":3,"file":"aslaluroba-help-center.mjs","sources":["../../../src/app/shared/components/card/card.component.ts","../../../src/app/shared/components/button/button.component.ts","../../../src/app/services/translation.service.ts","../../../src/app/pipes/translate.pipe.ts","../../../src/app/help-screen-data/help-screen-data.component.ts","../../../src/app/help-screen-data/help-screen-data.component.html","../../../src/app/shared/components/header/header.component.ts","../../../src/app/shared/components/loading/loading.component.ts","../../../src/app/chat/chat.component.ts","../../../src/app/chat/chat.component.html","../../../src/app/shared/components/confirmation-dialog/confirmation-dialog.component.ts","../../../src/app/services/api.service.ts","../../../src/app/services/signalrService.service.ts","../../../src/app/services/token.service.ts","../../../src/app/help-center-widget/help-center-widget.component.ts","../../../src/app/help-center-widget/help-center-widget.component.html","../../../src/app/language.service.ts","../../../public_api.ts","../../../aslaluroba-help-center.ts"],"sourcesContent":["import { Component, Input, HostBinding, ViewEncapsulation } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\n@Component({\n selector: 'app-card',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardComponent {\n @Input() variant: 'default' | 'rounded' | 'shadowed' = 'default'\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card']\n classes.push(`card--${this.variant}`)\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-header',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardHeaderComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__header']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-title',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardTitleComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__title']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-description',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardDescriptionComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__description']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-content',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardContentComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__content']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-card-footer',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./card.component.scss'],\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None\n})\nexport class CardFooterComponent {\n @Input() class = ''\n\n @HostBinding('class')\n get hostClasses(): string {\n const classes = ['card__footer']\n if (this.class) {\n classes.push(this.class)\n }\n return classes.join(' ')\n }\n}\n","import { CommonModule } from '@angular/common'\nimport { Component, EventEmitter, Input, Output } from '@angular/core'\n\ntype ButtonVariant = 'default' | 'icon-bg' | 'icon-only' | 'outline'\ntype ButtonType = 'button' | 'submit' | 'reset'\n\n@Component({\n selector: 'app-button',\n standalone: true,\n imports: [CommonModule],\n styleUrls: ['./button.component.scss'],\n template: `\n <button [type]=\"type\" [disabled]=\"disabled\" [class]=\"getButtonClasses()\" (click)=\"onClick.emit($event)\" [dir]=\"direction\">\n <ng-content></ng-content>\n </button>\n `\n})\nexport class ButtonComponent {\n @Input() variant: ButtonVariant = 'default'\n @Input() type: ButtonType = 'button'\n @Input() disabled = false\n @Input() fullWidth = false\n @Input() className = ''\n @Input() size: 'default' | 'small' = 'default'\n @Input() direction: 'ltr' | 'rtl' = 'ltr'\n @Output() onClick = new EventEmitter<MouseEvent>()\n\n getButtonClasses(): string {\n const classes = ['button']\n\n // Add variant class\n classes.push(`button--${this.variant}`)\n\n // Add full width class if needed\n if (this.fullWidth) {\n classes.push('button--full-width')\n }\n\n // Add size class if needed\n if (this.size) {\n classes.push(`button--${this.size}`)\n }\n\n // Add direction class\n classes.push(`button--${this.direction}`)\n\n // Add custom classes\n if (this.className) {\n classes.push(this.className)\n }\n\n return classes.join(' ')\n }\n}\n\n@Component({\n selector: 'app-button-content',\n standalone: true,\n imports: [CommonModule],\n template: ` <ng-content></ng-content> `\n})\nexport class ButtonContentComponent {}\n\n@Component({\n selector: 'app-icon-button',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n template: `\n <app-button variant=\"icon-bg\" [className]=\"className\" [disabled]=\"disabled\" (onClick)=\"onClick.emit($event)\">\n <ng-content></ng-content>\n </app-button>\n `\n})\nexport class IconButtonComponent {\n @Input() className = ''\n @Input() disabled = false\n @Output() onClick = new EventEmitter<MouseEvent>()\n}\n\n@Component({\n selector: 'app-transparent-icon-button',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n template: `\n <app-button variant=\"icon-only\" [className]=\"className\" [disabled]=\"disabled\" (onClick)=\"onClick.emit($event)\">\n <ng-content></ng-content>\n </app-button>\n `\n})\nexport class TransparentIconButtonComponent {\n @Input() className = ''\n @Input() disabled = false\n @Output() onClick = new EventEmitter<MouseEvent>()\n}\n","// src/app/services/translation.service.ts\nimport { Injectable } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { Language } from '../types'\n\nconst defaultTranslations = {\n ChatIntroMessage: '',\n BabylaiTitle: '',\n BabylaiDescription: '',\n ChatNow: '',\n TryBableAI: '',\n ContactUs: '',\n PickTopicTitle: '',\n BabylAI: '',\n ChatPlaceholder: '',\n PoweredByBabylAI: '',\n EndChat: '',\n LeavingDialogTitle: '',\n LeavingDialogBody: '',\n Confirm: '',\n Cancel: '',\n title: ''\n} as const\n\nexport type TranslationKey = keyof typeof defaultTranslations\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslationService {\n private translations = {\n en: {\n ChatIntroMessage: 'Chat with BabylAI 🚀',\n BabylaiTitle: 'BabylAI',\n BabylaiDescription: \"Hey there! 👋 I'm BabylAI, here to assist you.\",\n ChatNow: 'Chat Now',\n TryBableAI: 'Try BabylAI for Free 🎉',\n ContactUs: \"Contact us, Let's Talk! 💬\",\n PickTopicTitle: 'Pick a Topic to Get Started',\n BabylAI: 'BabylAI',\n ChatPlaceholder: 'Type your message...',\n PoweredByBabylAI: 'Powered by BabylAI',\n EndChat: 'End Chat',\n LeavingDialogTitle: 'Leaving so soon? 👋',\n LeavingDialogBody: \"Don't worry, you can come back anytime. We're always here if you need help or have questions.\",\n Confirm: 'Confirm',\n Cancel: 'Cancel',\n title: 'Help Center'\n },\n ar: {\n ChatIntroMessage: 'دردش مع BabylAI 🚀',\n BabylaiTitle: 'BabylAI',\n BabylaiDescription: 'مرحبا! 👋 أنا BabylAI، هنا لتساعدك.',\n ChatNow: 'دردش الآن',\n TryBableAI: 'جرب BabylAI مجانا 🎉',\n ContactUs: 'تواصل معنا, دعنا نتحدث! 💬',\n PickTopicTitle: 'اختر موضوع للبدء',\n BabylAI: 'BabylAI',\n ChatPlaceholder: 'اكتب رسالتك...',\n PoweredByBabylAI: 'مدعوم من BabylAI',\n EndChat: 'إنهاء الدردشة',\n LeavingDialogTitle: 'هل تغادر بالفعل؟ 👋',\n LeavingDialogBody: 'لا تقلق، يمكنك العودة في أي وقت. نحن دائماً هنا إذا كنت بحاجة إلى مساعدة أو لديك أسئلة.',\n Confirm: 'تأكيد',\n Cancel: 'إلغاء',\n title: 'مركز المساعدة'\n }\n }\n\n private _currentLang = new BehaviorSubject<Language>('en')\n public readonly currentLang: Observable<Language> = this._currentLang.asObservable()\n\n constructor() {\n console.log('TranslationService: Initialized')\n }\n\n translate(key: TranslationKey): string {\n const lang = this._currentLang.value as Language\n console.log('TranslationService: Translating key', key, 'for language', lang)\n return this.translations[lang][key] || key\n }\n\n setLanguage(lang: Language) {\n console.log('TranslationService: Setting language to', lang)\n this._currentLang.next(lang)\n }\n\n getCurrentLang(): Language {\n const currentLang = this._currentLang.value\n console.log('TranslationService: Getting current language', currentLang)\n return currentLang\n }\n}\n","// src/app/pipes/translate.pipe.ts\nimport { Pipe, PipeTransform } from '@angular/core'\nimport { TranslationService } from '../services/translation.service'\nimport { TranslationKey } from '../services/translation.service' // Add this import\n\n@Pipe({\n name: 'translate',\n standalone: true\n})\nexport class TranslatePipe implements PipeTransform {\n constructor(private translationService: TranslationService) {}\n\n transform(key: TranslationKey): string {\n return this.translationService.translate(key)\n }\n}\n","import { Component, Input, OnInit, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { CardComponent, CardContentComponent } from '../shared/components/card/card.component'\nimport { ButtonComponent } from '../shared/components/button/button.component'\nimport { TranslatePipe } from '../pipes/translate.pipe'\n\ninterface Tenant {\n id: string\n name: string\n key: string\n}\n\ninterface Assistant {\n id: string\n tenantId: string\n tenant: Tenant\n name: string\n openAIAssistantId: string\n greeting: string\n closing: string\n}\n\ninterface HelpScreenOption {\n id: string\n helpScreenId: string\n parentOptionId: string | null\n parentOption: HelpScreenOption | null\n nestedOptions: HelpScreenOption[]\n assistantId: string\n assistant: Assistant\n title: string\n paragraphs: string[]\n files: any[]\n chatWithUs: boolean\n hasNestedOptions: boolean\n order: number\n}\n\ninterface HelpScreenData {\n id: string\n tenantId: string\n tenant: Tenant\n title: string\n description: string\n options: HelpScreenOption[]\n chatWithUs: boolean\n}\n\n@Component({\n selector: 'app-help-screen-data',\n standalone: true,\n imports: [CommonModule, CardComponent, CardContentComponent, ButtonComponent, TranslatePipe],\n templateUrl: './help-screen-data.component.html',\n styleUrls: ['./help-screen-data.component.scss']\n})\nexport class HelpScreenDataComponent implements OnInit {\n @Input() helpScreenData: HelpScreenData | null = null\n @Input() title: string = ''\n @Output() handleStartNewChat = new EventEmitter<HelpScreenOption>()\n\n expandedItemId: string | null = null\n\n ngOnInit() {}\n\n toggleExpand(itemId: string): void {\n if (this.expandedItemId === itemId) {\n this.expandedItemId = null\n } else {\n this.expandedItemId = itemId\n setTimeout(() => {\n const element = document.getElementById(itemId)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n }\n }, 100)\n }\n }\n\n startNewChat(option: HelpScreenOption): void {\n this.handleStartNewChat.emit(option)\n }\n}\n","<div class=\"help-screen\">\n <h1 class=\"help-screen__title\">\n {{ 'PickTopicTitle' | translate }}\n </h1>\n <ng-container *ngFor=\"let item of helpScreenData?.options\">\n <app-card [id]=\"item.id\" variant=\"rounded\" class=\"help-screen__card\" (click)=\"toggleExpand(item.id)\">\n <app-card-content>\n <!-- Header section (always visible) -->\n <div class=\"help-screen__header\">\n <h4 class=\"help-screen__title-text\">{{ item.title }}</h4>\n <div\n class=\"help-screen__arrow-container\"\n [ngClass]=\"{\n 'help-screen__arrow-container--expanded': expandedItemId === item.id,\n 'help-screen__arrow-container--collapsed': expandedItemId !== item.id\n }\"\n >\n <img src=\"/icons/arrow-stripped-colored.svg\" alt=\"arrow-down\" />\n </div>\n </div>\n\n <!-- Expanded content (visible only when expanded) -->\n <div *ngIf=\"expandedItemId === item.id\" class=\"help-screen__content\">\n <ng-container>\n <div *ngFor=\"let paragraph of item.paragraphs\" class=\"help-screen__paragraph\">\n {{ paragraph }}\n </div>\n </ng-container>\n\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"startNewChat(item)\">{{ 'ChatNow' | translate }}</app-button>\n </div>\n </app-card-content>\n </app-card>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { Component, EventEmitter, HostListener, Input, Output } from '@angular/core'\nimport { ButtonComponent } from '../button'\nimport { TranslatePipe } from '../../../pipes/translate.pipe'\n\ntype HeaderType = 'standard' | 'minimal'\n\n@Component({\n selector: 'app-header',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n styleUrls: ['./header.component.scss'],\n template: `\n <div class=\"header\">\n <app-button\n *ngIf=\"showBackButton\"\n variant=\"icon-bg\"\n className=\"button--white-bg\"\n [direction]=\"isRtl ? 'rtl' : 'ltr'\"\n (click)=\"onBack.emit()\"\n >\n <img src=\"/icons/arrow-stripped-colored.svg\" alt=\"Back\" class=\"header__back-button-icon\" [class.rtl]=\"isRtl\" />\n </app-button>\n <app-button\n *ngIf=\"showCloseButton\"\n variant=\"icon-bg\"\n [direction]=\"isRtl ? 'rtl' : 'ltr'\"\n className=\"button--close-button\"\n (click)=\"onClose.emit()\"\n >\n <img src=\"/icons/close-circle.svg\" alt=\"Close\" />\n </app-button>\n <img *ngIf=\"showLogo\" [src]=\"logoSrc\" [alt]=\"logoAlt\" class=\"header__logo\" />\n <app-button *ngIf=\"!showBackButton && !showCloseButton\" variant=\"icon-only\" class=\"header__close-button\" (click)=\"onClose.emit()\">\n <img src=\"/icons/close-circle.svg\" alt=\"Close\" />\n </app-button>\n </div>\n `\n})\nexport class HeaderComponent {\n @Input() headerType: HeaderType = 'standard'\n @Input() showBackButton = false\n @Input() showLogo = true\n @Input() logoSrc = '/logo-white.svg'\n @Input() logoAlt = 'BabylAI Logo'\n @Input() language = 'en'\n @Input() showCloseButton = false\n @Output() onBack = new EventEmitter<void>()\n @Output() onClose = new EventEmitter<void>()\n\n get isRtl(): boolean {\n return this.language === 'ar'\n }\n}\n\n@Component({\n selector: 'app-chat-header',\n standalone: true,\n imports: [CommonModule, ButtonComponent, TranslatePipe],\n styleUrls: ['./header.component.scss'],\n template: `\n <div class=\"chat-header\">\n <div class=\"chat-header__actions\">\n <app-button size=\"small\" variant=\"icon-bg\" className=\"chat-header__button button--light-bg\" (click)=\"onBack.emit()\">\n <img src=\"/icons/arrow-stripped-colored.svg\" alt=\"Back\" [style.transform]=\"isRtl ? 'rotate(180deg)' : 'rotate(0deg)'\" />\n </app-button>\n <div class=\"chat-header__menu\" data-menu-container>\n <app-button\n size=\"small\"\n variant=\"icon-bg\"\n className=\"chat-header__button button--light-bg\"\n (click)=\"$event.stopPropagation(); isMenuOpen = !isMenuOpen\"\n >\n <img src=\"/icons/menu.svg\" alt=\"Menu\" />\n </app-button>\n <div *ngIf=\"isMenuOpen\" class=\"chat-header__menu-dropdown\" [ngClass]=\"{ rtl: isRtl, ltr: !isRtl }\">\n <div class=\"chat-header__menu-dropdown-content\">\n <button (click)=\"onClose.emit(); isMenuOpen = false\" class=\"chat-header__menu-button\" [ngClass]=\"{ rtl: isRtl, ltr: !isRtl }\">\n {{ 'EndChat' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"chat-header__brand\">\n <img src=\"/logo-primary.svg\" [alt]=\"logoAlt\" />\n <p>{{ 'BabylAI' | translate }}</p>\n </div>\n </div>\n `\n})\nexport class ChatHeaderComponent {\n isMenuOpen = false\n @Input() showBackButton = false\n @Input() showLogo = true\n @Input() logoSrc = '/logo-white.svg'\n @Input() logoAlt = 'BabylAI Logo'\n @Input() language = 'en'\n @Output() onBack = new EventEmitter<void>()\n @Output() onClose = new EventEmitter<void>()\n\n get isRtl(): boolean {\n return this.language === 'ar'\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as HTMLElement\n const menuContainer = target.closest('[data-menu-container]')\n if (!menuContainer && this.isMenuOpen) {\n this.isMenuOpen = false\n }\n }\n}\n","import { Component } from '@angular/core'\n\n@Component({\n selector: 'app-loading',\n styleUrls: ['./loading.component.scss'],\n template: `\n <div class=\"loading\">\n <img src=\"/images/animatedLogo.gif\" alt=\"Animated Logo\" class=\"loading__logo\" />\n </div>\n `,\n standalone: true\n})\nexport class LoadingComponent {}\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnInit } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { MarkdownComponent } from 'ngx-markdown'\nimport { ButtonComponent } from '../shared/components/button'\nimport { CardComponent, CardContentComponent } from '../shared/components/card'\nimport { LoadingComponent } from '../shared/components/loading/loading.component'\nimport { TranslatePipe } from '../pipes/translate.pipe'\nimport 'prismjs'\nimport 'prismjs/components/prism-typescript'\nimport 'prismjs/components/prism-javascript'\nimport 'prismjs/components/prism-css'\nimport 'prismjs/components/prism-json'\nimport 'prismjs/components/prism-markdown'\nimport 'prismjs/themes/prism-okaidia.css'\n\ninterface Message {\n id: string | number\n sender: 'user' | 'assistant' | 'agent'\n senderType: number\n messageContent: string\n sentAt: Date\n isSeen: boolean\n}\n\n@Component({\n selector: 'app-chat',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MarkdownComponent,\n ButtonComponent,\n CardComponent,\n CardContentComponent,\n LoadingComponent,\n TranslatePipe\n ],\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.scss']\n})\nexport class ChatComponent implements OnInit {\n @Input() messages: Message[] = []\n @Input() needsAgent: boolean = false\n @Input() assistantStatus: string = 'idle'\n @Input() isSignalRConnected: boolean = false\n @Input() isChatClosed: boolean = false\n @Output() sendMessageEvent = new EventEmitter<string>()\n @ViewChild('chatMessagesContainer') chatMessagesContainer!: ElementRef\n @Input() currentLang: string = 'en'\n @Input() loading: boolean = false\n\n messageText: string = ''\n\n get firstAgentMessageIndex(): number {\n return this.messages.findIndex((message) => message.senderType === 2)\n }\n\n cleanMessageContent(content: string): string {\n // Remove excessive newlines (more than 2 consecutive newlines)\n return content.replace(/\\n{3,}/g, '\\n\\n').trim()\n }\n\n ngOnInit(): void {\n // Initialize component\n }\n\n ngAfterViewChecked(): void {\n this.scrollToBottom()\n }\n\n scrollToBottom(): void {\n try {\n this.chatMessagesContainer.nativeElement.scrollTop = this.chatMessagesContainer.nativeElement.scrollHeight\n } catch (err) {\n console.error('Error scrolling to bottom:', err)\n }\n }\n\n sendMessage(): void {\n if (!this.messageText.trim() || !this.isSignalRConnected || this.isChatClosed) return\n this.sendMessageEvent.emit(this.messageText)\n this.messageText = ''\n }\n\n hasAgentMessageBeenSent(messages: any[]): boolean {\n return messages.some((message) => message.senderType === 2 || message.senderType === 3)\n }\n}\n","<div class=\"chat\">\n <div class=\"chat__messages\" #chatMessagesContainer>\n <div *ngFor=\"let message of messages; let i = index\" class=\"chat__message-group\">\n <div class=\"chat__separator\" *ngIf=\"i === firstAgentMessageIndex && message.senderType === 2\">\n <img src=\"/images/seperator.svg\" alt=\"separator\" />\n </div>\n <div class=\"chat__message-container\" [class.chat__message-container--user]=\"message.senderType === 1\">\n <div class=\"chat__avatar\" [class.chat__avatar--hidden]=\"i > 0 && messages[i - 1].senderType === message.senderType\">\n @if (message.senderType === 3) {\n <span class=\"chat__avatar-wrapper chat__avatar-wrapper--assistant\">\n <img src=\"/logo-white.svg\" alt=\"robot\" class=\"chat__avatar-image\" />\n </span>\n } @else if (needsAgent || message.senderType === 2) {\n <span class=\"chat__avatar-wrapper chat__avatar-wrapper--agent\">\n <img src=\"/icons/person.svg\" alt=\"agent\" class=\"chat__avatar-image\" />\n </span>\n }\n </div>\n <app-card\n variant=\"rounded\"\n [class]=\"'chat__message ' + (message.senderType === 1 ? 'chat__message--user' : 'chat__message--assistant')\"\n >\n <app-card-content>\n <div class=\"chat__message-content\">\n <markdown\n [data]=\"cleanMessageContent(message.messageContent)\"\n ngPreserveWhitespaces\n [inline]=\"false\"\n class=\"prose\"\n [class.prose-invert]=\"message.senderType === 1\"\n >\n </markdown>\n </div>\n </app-card-content>\n </app-card>\n </div>\n </div>\n\n <div *ngIf=\"assistantStatus === 'typing' && firstAgentMessageIndex === -1\" class=\"chat__typing\">\n <div class=\"chat__avatar\">\n <span class=\"chat__avatar-wrapper chat__avatar-wrapper--agent\">\n <img src=\"/images/animatedLogo.gif\" alt=\"Loading\" class=\"chat__avatar-image\" />\n </span>\n </div>\n <app-card variant=\"rounded\" class=\"chat__message chat__message--assistant\">\n <app-card-content>\n <div id=\"wave\">\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </div>\n </app-card-content>\n </app-card>\n </div>\n <div *ngIf=\"loading\" class=\"chat__loading\">\n <app-loading />\n </div>\n </div>\n\n <form (ngSubmit)=\"sendMessage()\" class=\"chat__input-container\">\n <div class=\"chat__input-wrapper\">\n <input\n type=\"text\"\n [(ngModel)]=\"messageText\"\n name=\"messageText\"\n [placeholder]=\"'ChatPlaceholder' | translate\"\n [disabled]=\"isChatClosed\"\n class=\"chat__input\"\n />\n <button type=\"submit\" [disabled]=\"!messageText.trim() || !isSignalRConnected || isChatClosed\" class=\"chat__send-button\">\n <img\n src=\"/icons/send.svg\"\n alt=\"send-message\"\n class=\"chat__send-button-icon\"\n [class.chat__send-button-icon--rtl]=\"currentLang === 'ar'\"\n />\n </button>\n </div>\n </form>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ButtonComponent } from '../button'\n\n@Component({\n selector: 'app-confirmation-dialog',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n styleUrls: ['./confirmation-dialog.component.scss'],\n template: `\n <div class=\"dialog\">\n <div class=\"dialog__content\">\n <h3 class=\"dialog__title\">{{ title }}</h3>\n <p class=\"dialog__body\">{{ body }}</p>\n <div class=\"dialog__actions\">\n <app-button variant=\"outline\" [fullWidth]=\"true\" (click)=\"onCancel.emit()\">\n {{ cancelText }}\n </app-button>\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"onConfirm.emit()\">\n {{ confirmText }}\n </app-button>\n </div>\n </div>\n </div>\n `\n})\nexport class ConfirmationDialogComponent {\n @Input() title: string = ''\n @Input() body: string = ''\n @Input() confirmText: string = 'Confirm'\n @Input() cancelText: string = 'Cancel'\n @Output() onConfirm = new EventEmitter<void>()\n @Output() onCancel = new EventEmitter<void>()\n}\n","import { Injectable } from '@angular/core'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n private getTokenFunction: (() => Promise<string>) | null = null\n private baseUrl: string | null = null\n\n initializeAPI(url: string, getToken: () => Promise<string>) {\n this.getTokenFunction = getToken\n this.baseUrl = url\n }\n\n async getValidToken(forceRefresh = false): Promise<string> {\n if (!this.getTokenFunction) {\n throw new Error('API module not initialized. Call initializeAPI(getToken) first.')\n }\n\n let storedToken = localStorage.getItem('chatbot-token')\n let storedExpiry = localStorage.getItem('chatbot-token-expiry')\n\n const currentTime = Math.floor(Date.now() / 1000)\n\n if (!storedToken || !storedExpiry || currentTime >= Number(storedExpiry) || forceRefresh) {\n const tokenResponse = await this.getTokenFunction()\n\n if (!tokenResponse) {\n throw new Error('Invalid token response from getTokenFunction')\n }\n\n storedToken = tokenResponse\n storedExpiry = String(currentTime + 900)\n\n localStorage.setItem('chatbot-token', storedToken)\n localStorage.setItem('chatbot-token-expiry', storedExpiry)\n }\n\n return storedToken\n }\n\n private async fetchWithAuth(url: string, options: RequestInit, retry = true): Promise<Response> {\n if (!options.headers) {\n options.headers = {}\n }\n\n const headers = options.headers as Record<string, string>\n headers['Authorization'] = `Bearer ${await this.getValidToken()}`\n\n let response = await fetch(url, options)\n\n if ((response.status === 401 || response.status === 403) && retry) {\n console.warn('Token expired. Fetching new token...')\n\n const newToken = await this.getValidToken(true)\n headers['Authorization'] = `Bearer ${newToken}`\n\n response = await fetch(url, options)\n }\n\n return response\n }\n\n async apiRequest(endpoint: string, method = 'GET', body: any = null, customHeaders: Record<string, string> = {}): Promise<Response> {\n if (!this.baseUrl) {\n throw new Error('API not initialized. Call initializeAPI first.')\n }\n\n const url = `${this.baseUrl}/${endpoint}`\n\n const options: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders\n },\n body: body ? JSON.stringify(body) : null\n }\n\n const response = await this.fetchWithAuth(url, options)\n\n if (!response.ok) {\n const errorData = await response.json()\n throw new Error(errorData.message || 'API request failed')\n }\n\n return response\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SignalRService {\n private connection: signalR.HubConnection | null = null;\n private isConnected = false;\n private baseURL = 'http://localhost:5086'; // Replace with your API URL\n private hubUrl = 'https://babylai.net'; // Replace with your SignalR hub URL\n\n async startConnection(\n sessionId: string,\n apiKey: string,\n onMessageReceived: (\n message: string,\n senderType: string,\n needsAgent: boolean\n ) => void\n ): Promise<void> {\n console.log('sessionId:', sessionId);\n\n if (this.isConnected) return;\n\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(\n `${this.hubUrl}/clientHub?access_token=${encodeURIComponent(apiKey)}`,\n {\n withCredentials: true,\n transport:\n signalR.HttpTransportType.WebSockets |\n signalR.HttpTransportType.LongPolling,\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-SignalR-User-Agent':\n 'Microsoft SignalR/8.0 (8.0.7; Unknown OS; Browser; Unknown Runtime Version)',\n },\n skipNegotiation: false,\n accessTokenFactory: () => apiKey,\n }\n )\n .withAutomaticReconnect()\n .configureLogging(signalR.LogLevel.Information)\n .build();\n\n this.connection.on(\n 'ReceiveMessage',\n (message: string, senderType: string, needsAgent: boolean) => {\n console.log(\n 'Received message from SignalR:',\n message,\n senderType,\n needsAgent\n );\n onMessageReceived(message, senderType, needsAgent);\n }\n );\n\n try {\n await this.connection.start();\n console.log('SignalR connection started successfully.');\n\n this.isConnected = true;\n await this.joinGroup(sessionId);\n console.log('SignalR group joined.');\n } catch (error) {\n console.error('Error connecting to SignalR', error);\n this.isConnected = false;\n }\n }\n\n async joinGroup(sessionId: string): Promise<void> {\n if (this.connection) {\n try {\n console.log(`Attempting to join group with session ID: ${sessionId}`);\n await this.connection.invoke('JoinGroup', sessionId);\n console.log(`Joined group with session ID: ${sessionId}`);\n } catch (error) {\n console.error('Error joining SignalR group:', error);\n }\n }\n }\n\n async leaveGroup(sessionId: string): Promise<void> {\n if (this.connection && this.isConnected) {\n try {\n await this.connection.invoke('LeaveGroup', sessionId);\n console.log(`Left group with session ID: ${sessionId}`);\n } catch (error) {\n console.error('Error leaving SignalR group:', error);\n }\n }\n }\n\n async stopConnection(): Promise<void> {\n if (this.connection && this.isConnected) {\n await this.connection.stop();\n this.isConnected = false;\n console.log('SignalR disconnected.');\n }\n }\n}\n","import { Injectable } from '@angular/core'\n\nexport interface TokenResponse {\n token: string\n expiresIn: number\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenService {\n private baseUrl: string | null = null\n\n initializeService(baseUrl: string) {\n this.baseUrl = baseUrl\n }\n\n async getToken(): Promise<TokenResponse> {\n if (!this.baseUrl) {\n throw new Error('Token service not initialized. Call initializeService first.')\n }\n\n try {\n const response = await fetch(`${this.baseUrl}/Auth/client/get-token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n tenantId: '2176c188-8cb4-4fc3-8366-2d32e601f7e5',\n apiKey: 'I/22UK34I6xAhglfPXTwPAgUuVyJw8TdnG26ZLI5gYQ='\n })\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch token')\n }\n\n const data = await response.json()\n return {\n token: data.token,\n expiresIn: data.expiresIn || 3600 // Default to 1 hour if not provided\n }\n } catch (error) {\n throw new Error('Failed to get authentication token')\n }\n }\n}\n","import { Component, Input, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { ApiService } from '../services/api.service'\nimport { SignalRService } from '../services/signalrService.service'\nimport { TokenService } from '../services/token.service'\nimport { CardComponent, CardContentComponent } from '../shared/components/card/card.component'\nimport { ButtonComponent } from '../shared/components/button'\nimport { HelpScreenDataComponent } from '../help-screen-data/help-screen-data.component'\nimport { HeaderComponent, ChatHeaderComponent } from '../shared/components/header'\nimport { ChatComponent } from '../chat/chat.component'\nimport { LoadingComponent } from '../shared/components/loading/loading.component'\nimport { ConfirmationDialogComponent } from '../shared/components/confirmation-dialog/confirmation-dialog.component'\nimport { TranslatePipe } from '../pipes/translate.pipe'\nimport { TranslationService } from '../services/translation.service'\nimport { Subscription } from 'rxjs'\n\ninterface Option {\n id: string\n helpScreenId: string\n parentOptionId: string | null\n nestedOptions: Option[]\n title: string\n paragraphs: string[]\n chatWithUs: boolean\n assistantId?: string\n assistant?: {\n id: string\n tenantId: string\n tenant: {\n id: string\n name: string\n key: string\n }\n name: string\n openAIAssistantId: string\n greeting: string\n closing: string\n }\n hasNestedOptions: boolean\n order: number\n}\n\ninterface Message {\n id: string | number\n sender: 'user' | 'assistant' | 'agent'\n senderType: number\n messageContent: string\n sentAt: Date\n isSeen: boolean\n}\n\n@Component({\n selector: 'app-help-center-widget',\n templateUrl: './help-center-widget.component.html',\n styleUrls: ['./help-center-widget.component.scss', '../../styles.scss'],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n TranslatePipe,\n CardComponent,\n CardContentComponent,\n ButtonComponent,\n HelpScreenDataComponent,\n HeaderComponent,\n ChatHeaderComponent,\n ChatComponent,\n LoadingComponent,\n ConfirmationDialogComponent\n ]\n})\nexport class HelpCenterWidgetComponent implements OnInit, OnDestroy {\n @Input() getToken!: () => Promise<string>\n @Input() helpScreenId!: string\n @Input() showArrow: boolean = true\n @Input() messageLabel: string | null = null\n @Input() set currentLang(value: string) {\n this._currentLang = value\n this.isRTL = value === 'ar'\n }\n get currentLang(): string {\n return this._currentLang\n }\n @Input() isIntroScreenEnabled: boolean = false\n @ViewChild('chatMessagesContainer') chatMessagesContainer!: ElementRef\n\n private _currentLang: string = 'en'\n private langSubscription?: Subscription\n isRTL: boolean = false\n\n // State variables\n isPopupOpen = false\n helpScreenData: any = null\n status = 'idle'\n error: string | null = null\n showArrowAnimation = false\n showTooltip = false\n sessionId: string | null = null\n isSignalRConnected = false\n isChatClosed = false\n showChat = false\n messageText: string = ''\n isTyping = false\n messages: Message[] = []\n showHelpScreenData = false\n chatIsLoading = false\n\n isOpen = false\n\n needsAgent = false\n assistantStatus = 'idle'\n\n selectedOption: Option | null = null\n selectedNestedOption: Option | null = null\n\n private baseUrl = 'https://babylai.net/api'\n\n showEndChatConfirmation = false\n\n constructor(\n private apiService: ApiService,\n private signalRService: SignalRService,\n private tokenService: TokenService,\n private translationService: TranslationService\n ) {}\n\n ngOnInit() {\n this.showArrowAnimation = this.showArrow\n this.tokenService.initializeService(this.baseUrl)\n this.apiService.initializeAPI(this.baseUrl, this.getToken)\n console.log('🚀 ~ HelpCenterWidgetComponent ~ ngOnInit ~ isIntroScreenEnabled:', this.isIntroScreenEnabled)\n if (!this.isIntroScreenEnabled) {\n this.showHelpScreenData = true\n }\n\n // Subscribe to language changes\n this.langSubscription = this.translationService.currentLang.subscribe((lang) => {\n this.currentLang = lang\n })\n }\n\n ngOnDestroy() {\n // Clean up subscription\n if (this.langSubscription) {\n this.langSubscription.unsubscribe()\n }\n }\n\n async handleTogglePopup() {\n this.isPopupOpen = !this.isPopupOpen\n this.showArrowAnimation = this.isPopupOpen\n\n if (this.isPopupOpen) {\n await this.fetchHelpScreenData()\n }\n }\n\n private async fetchHelpScreenData() {\n this.status = 'loading'\n this.error = null\n\n try {\n const response = await this.apiService.apiRequest(`client/clientHelpScreen/${this.helpScreenId}`, 'GET')\n this.helpScreenData = await response.json()\n this.status = 'succeeded'\n } catch (error: any) {\n this.error = error.message\n this.status = 'failed'\n }\n }\n\n async createChatSession() {\n try {\n const chatSessionCreateDto = {\n optionId: this.selectedOption?.id,\n helpScreenId: this.helpScreenId\n }\n\n const response = await this.apiService.apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto)\n const data = await response.json()\n this.sessionId = data.id\n return data\n } catch (error) {\n console.error('Error creating chat session:', error)\n throw error\n }\n }\n\n async sendMessage(messageText?: string) {\n const textToSend = messageText || this.messageText\n if (!textToSend.trim() || !this.isSignalRConnected || this.isChatClosed) return\n\n try {\n this.assistantStatus = 'typing'\n\n // Add user message\n this.messages.push({\n id: Date.now(),\n sender: 'user',\n senderType: 1,\n messageContent: textToSend,\n sentAt: new Date(),\n isSeen: false\n })\n\n if (!this.sessionId) {\n await this.createChatSession()\n }\n\n const messageDto = { messageContent: textToSend }\n await this.apiService.apiRequest(`Client/ClientChatSession/${this.sessionId}/send-message`, 'POST', messageDto)\n\n // Clear message input\n this.messageText = ''\n\n // Update message as seen\n this.messages = this.messages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg))\n } catch (error) {\n console.error('Error sending message:', error)\n this.assistantStatus = 'idle'\n this.messages.push({\n id: Date.now(),\n sender: 'assistant',\n senderType: 3,\n messageContent: 'Failed to send the message. Please try again.\\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',\n sentAt: new Date(),\n isSeen: true\n })\n }\n }\n\n async sendMessageToChatSession(chatSessionId: string, messageDto: any) {\n try {\n const response = await this.apiService.apiRequest(`Client/ClientChatSession/${chatSessionId}/send-message`, 'POST', messageDto)\n return await response.json()\n } catch (error) {\n console.error('Error sending message:', error)\n throw error\n }\n }\n\n handleReceiveMessage(message: string, senderType: string, needsAgent: boolean) {\n if (needsAgent) {\n this.needsAgent = true\n }\n\n const sender = this.getSenderType(parseInt(senderType))\n\n this.messages.push({\n id: Date.now(),\n sender: sender,\n senderType: parseInt(senderType),\n messageContent: message,\n sentAt: new Date(),\n isSeen: true\n })\n\n console.log(this.messages)\n\n this.assistantStatus = 'idle'\n this.scrollToBottom()\n }\n\n private getSenderType(senderType: number): 'user' | 'assistant' | 'agent' {\n switch (senderType) {\n case 1:\n return 'user'\n case 2:\n return 'agent'\n default:\n return 'assistant'\n }\n }\n\n async handleStartNewChat(option: Option) {\n this.selectedOption = option\n this.chatIsLoading = true\n if (!this.isSignalRConnected) {\n try {\n await this.createChatSession()\n const tokenResponse = await this.apiService.getValidToken()\n this.showChat = true\n this.isChatClosed = false\n this.showHelpScreenData = false\n\n await this.signalRService.startConnection(this.sessionId!, tokenResponse, this.handleReceiveMessage.bind(this))\n this.isSignalRConnected = true\n // add greeting message\n this.messages.push({\n id: Date.now(),\n sender: 'assistant',\n senderType: 3,\n messageContent:\n option.assistant?.greeting ||\n (this.currentLang === 'en' ? 'Hello! How can I assist you today?' : 'مرحباً! كيف يمكنني مساعدتك اليوم؟'),\n sentAt: new Date(),\n isSeen: true\n })\n\n this.chatIsLoading = false\n } catch (error) {\n console.error('Error connecting to SignalR:', error)\n this.chatIsLoading = false\n }\n } else {\n this.showChat = true\n this.isChatClosed = false\n this.showHelpScreenData = false\n this.chatIsLoading = false\n }\n }\n\n private async startNewChatSession(option: any) {\n try {\n this.status = 'loading'\n this.error = ''\n this.messages = []\n\n const chatSessionCreateDto = {\n helpScreenId: this.helpScreenId,\n optionId: option.id\n }\n\n const response = await this.apiService.apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto)\n const createdSession = await response.json()\n this.sessionId = createdSession.id\n\n // Add greeting message\n this.messages.push({\n id: Date.now(),\n sender: 'assistant',\n senderType: 3,\n messageContent: option.assistant?.greeting || 'Hello! How can I assist you today?\\nمرحباً! كيف يمكنني مساعدتك اليوم؟',\n sentAt: new Date(),\n isSeen: true\n })\n\n this.isSignalRConnected = true\n this.isChatClosed = false\n this.status = 'succeeded'\n } catch (error: any) {\n console.error('Chat start error:', error)\n this.error = error.message || 'Failed to start chat session'\n this.status = 'failed'\n }\n }\n\n async handleStartChat(option: any) {\n this.showChat = true\n await this.startNewChatSession(option)\n }\n\n async handleEndChat() {\n this.showEndChatConfirmation = true\n }\n\n async confirmEndChat() {\n this.showEndChatConfirmation = false\n if (this.sessionId) {\n await this.closeChatSession(this.sessionId)\n this.sessionId = null\n }\n this.showChat = false\n this.showHelpScreenData = true\n this.messages = []\n this.needsAgent = false\n this.assistantStatus = 'idle'\n this.selectedOption = null\n this.selectedNestedOption = null\n }\n\n cancelEndChat() {\n this.showEndChatConfirmation = false\n }\n\n async closeChatSession(chatSessionId: string) {\n try {\n const response = await this.apiService.apiRequest(`Client/ClientChatSession/${chatSessionId}/close`, 'POST')\n return await response.json()\n } catch (error) {\n console.error('Error closing chat session:', error)\n throw error\n }\n }\n\n handleClosePopup() {\n this.showHelpScreenData = false\n this.showChat = false\n this.isPopupOpen = false\n this.selectedOption = null\n this.selectedNestedOption = null\n }\n\n handleCloseArrowAnimation() {\n this.showArrowAnimation = false\n }\n\n handleBack() {\n if (this.showChat) {\n this.showChat = false\n this.showHelpScreenData = true\n } else if (this.selectedNestedOption) {\n this.selectedNestedOption = null\n } else if (this.selectedOption) {\n this.selectedOption = null\n } else if (this.showHelpScreenData) {\n this.showHelpScreenData = false\n }\n }\n\n handleShowChat() {\n this.showChat = true\n this.showHelpScreenData = false\n }\n\n selectOption(option: Option) {\n this.selectedOption = option\n this.selectedNestedOption = null\n }\n\n selectNestedOption(nestedOption: Option) {\n this.selectedNestedOption = nestedOption\n }\n\n handleShowHelpScreenData() {\n this.showHelpScreenData = true\n }\n\n handleHideHelpScreenData() {\n this.showHelpScreenData = false\n }\n\n private scrollToBottom(): void {\n setTimeout(() => {\n if (this.chatMessagesContainer) {\n const element = this.chatMessagesContainer.nativeElement\n element.scrollTop = element.scrollHeight\n }\n })\n }\n\n getDirection() {\n return this.currentLang === 'ar' ? 'rtl' : 'ltr'\n }\n\n get helpScreenDataList() {\n if (!this.helpScreenData?.options) return []\n // Transform options to the format expected by HelpScreenDataComponent\n return this.helpScreenData.options.map((option: any) => ({\n icon: option.icon || '/icons/default.svg',\n title: option.title,\n description: option.paragraphs?.[0] || '',\n actionLabel: option.chatWithUs ? 'Chat Now' : '',\n action: option.chatWithUs ? () => this.handleStartChat(option) : null\n }))\n }\n\n navigateToUrl(url: string): void {\n window.open(url, '_blank')\n }\n}\n","<div class=\"help-center-container\" [dir]=\"getDirection()\">\n <!-- Arrow Animation -->\n <div *ngIf=\"showArrowAnimation && !isPopupOpen\" class=\"arrow-animation\">\n <div class=\"message-box\">\n <p>\n {{ messageLabel || 'Need assistance Or You want to try the Product? Click here' }}\n </p>\n <button class=\"close-button\" (click)=\"handleCloseArrowAnimation()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\">\n <path d=\"M1 1L11 11M1 11L11 1\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </button>\n <div class=\"arrow-tip\"></div>\n </div>\n </div>\n\n <!-- Help Button -->\n <button class=\"help-button\" (click)=\"handleTogglePopup()\">\n <span class=\"help-button-content\">\n <img src=\"/logo-white.svg\" alt=\"BabylAI Logo\" class=\"help-button-logo\" />\n </span>\n </button>\n\n <!-- Help Popup -->\n <div\n *ngIf=\"isPopupOpen\"\n class=\"help-popup\"\n [ngClass]=\"{\n 'is-open': isPopupOpen,\n 'is-closed': !isPopupOpen,\n 'has-gradient': isPopupOpen && !showHelpScreenData && !showChat\n }\"\n >\n <app-confirmation-dialog\n *ngIf=\"showEndChatConfirmation\"\n [title]=\"'LeavingDialogTitle' | translate\"\n [body]=\"'LeavingDialogBody' | translate\"\n [confirmText]=\"'Confirm' | translate\"\n [cancelText]=\"'Cancel' | translate\"\n (onConfirm)=\"confirmEndChat()\"\n (onCancel)=\"cancelEndChat()\"\n ></app-confirmation-dialog>\n\n <!-- Loading State -->\n <div *ngIf=\"status === 'loading'\" class=\"loading-state\">\n <ng-container *ngIf=\"!showHelpScreenData\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <ng-container *ngIf=\"showHelpScreenData\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n <app-loading></app-loading>\n </div>\n\n <!-- Error State -->\n <div *ngIf=\"status === 'failed'\" class=\"error-message\">\n <span>Error: {{ error }}</span>\n </div>\n\n <!-- Content -->\n <ng-container *ngIf=\"status === 'succeeded'\">\n <!-- Headers -->\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData && !showChat\">\n <app-header\n [showBackButton]=\"!!selectedOption || !!selectedNestedOption\"\n [showLogo]=\"true\"\n (onBack)=\"handleBack()\"\n (onClose)=\"handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData && !showChat\">\n <app-header\n [showCloseButton]=\"!isIntroScreenEnabled\"\n [showBackButton]=\"isIntroScreenEnabled && showHelpScreenData\"\n [showLogo]=\"false\"\n (onClose)=\"isIntroScreenEnabled ? handleHideHelpScreenData() : handleClosePopup()\"\n (onBack)=\"isIntroScreenEnabled ? handleBack() : handleClosePopup()\"\n [language]=\"currentLang\"\n ></app-header>\n\n <ng-container *ngIf=\"showHelpScreenData && sessionId\">\n <app-button variant=\"icon-bg\" (click)=\"handleShowChat()\" class=\"chat-button\">\n <img src=\"/icons/chat.svg\" alt=\"Close\" class=\"icon-full\" />\n </app-button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"showChat\">\n <app-chat-header\n [showBackButton]=\"showChat\"\n [showLogo]=\"false\"\n (onClose)=\"handleEndChat()\"\n (onBack)=\"handleBack()\"\n [language]=\"currentLang\"\n ></app-chat-header>\n\n <app-chat\n class=\"chat-container\"\n [messages]=\"messages\"\n [needsAgent]=\"needsAgent\"\n [assistantStatus]=\"assistantStatus\"\n [isSignalRConnected]=\"isSignalRConnected\"\n [isChatClosed]=\"isChatClosed\"\n (sendMessageEvent)=\"sendMessage($event)\"\n [currentLang]=\"currentLang\"\n [loading]=\"chatIsLoading\"\n ></app-chat>\n </ng-container>\n\n <!-- Main Content -->\n <div class=\"main-content\" *ngIf=\"!showChat\">\n @if (isIntroScreenEnabled) {\n <ng-container *ngIf=\"!showHelpScreenData\">\n <div class=\"intro-section\">\n <h1 class=\"intro-title\">{{ 'ChatIntroMessage' | translate }}</h1>\n </div>\n\n <div class=\"cards-section\">\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"card-content\">\n <div class=\"babylai-info\">\n <div class=\"logo-container\">\n <img src=\"/logo-white.svg\" alt=\"Chat\" class=\"logo\" />\n </div>\n <div class=\"info-text\">\n <h4 class=\"info-title\">{{ 'BabylaiTitle' | translate }}</h4>\n <p class=\"info-description\">{{ 'BabylaiDescription' | translate }}</p>\n </div>\n </div>\n <app-button variant=\"default\" [fullWidth]=\"true\" (click)=\"handleShowHelpScreenData()\">\n {{ 'ChatNow' | translate }}\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'TryBableAI' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net/signup')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n\n <app-card variant=\"rounded\">\n <app-card-content>\n <div class=\"action-card\">\n <p class=\"action-text\">{{ 'ContactUs' | translate }}</p>\n <app-button variant=\"icon-bg\" (click)=\"navigateToUrl('https://babylai.net')\">\n <img src=\"/icons/arrow-stripped.svg\" alt=\"Arrow Right\" [ngClass]=\"{ icon: true, 'icon-rtl': currentLang === 'ar' }\" />\n </app-button>\n </div>\n </app-card-content>\n </app-card>\n </div>\n </ng-container>\n }\n\n <ng-container *ngIf=\"showHelpScreenData\">\n <img src=\"/images/stars.svg\" alt=\"help-center-widget-icon\" class=\"stars\" />\n <app-help-screen-data [helpScreenData]=\"helpScreenData\" (handleStartNewChat)=\"handleStartNewChat($event)\"></app-help-screen-data>\n </ng-container>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <a href=\"https://babylai.net\" target=\"_blank\" class=\"footer-link\" [ngClass]=\"{ 'light-text': !showHelpScreenData && !showChat }\">\n {{ 'PoweredByBabylAI' | translate }}\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n","// src/app/language.service.ts\nimport { Injectable } from '@angular/core'\nimport { TranslationService } from './services/translation.service'\nimport { Language } from './types'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LanguageService {\n constructor(private translationService: TranslationService) {}\n\n switchLanguage(language: Language) {\n console.log('LanguageService: Switching language to', language)\n this.translationService.setLanguage(language)\n }\n\n getCurrentLang(): Language {\n const currentLang = this.translationService.getCurrentLang()\n console.log('LanguageService: Current language is', currentLang)\n return currentLang\n }\n}\n","// Components and Modules\nexport * from './src/app/help-center-widget/help-center-widget.component'\n\n// Services\nexport * from './src/app/services/api.service'\nexport * from './src/app/services/signalrService.service'\nexport * from './src/app/services/token.service'\nexport * from './src/app/services/translation.service'\nexport * from './src/app/language.service'\n\n// Types\nexport * from './src/app/types'\n\n// Pipes\nexport * from './src/app/pipes/translate.pipe'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.TranslationService","i1.ApiService","i2.SignalRService","i3.TokenService","i4.TranslationService","i5"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aslaluroba/help-center",
3
- "version": "1.1.13",
3
+ "version": "1.1.15",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "dependencies": {
@@ -47,6 +47,9 @@
47
47
  "url": "https://github.com/aslaluroba/help-center/issues"
48
48
  },
49
49
  "homepage": "https://github.com/aslaluroba/help-center#readme",
50
+ "publishConfig": {
51
+ "access": "public"
52
+ },
50
53
  "module": "fesm2022/aslaluroba-help-center.mjs",
51
54
  "typings": "index.d.ts",
52
55
  "exports": {
@@ -58,4 +61,4 @@
58
61
  "default": "./fesm2022/aslaluroba-help-center.mjs"
59
62
  }
60
63
  }
61
- }
64
+ }
package/public_api.d.ts CHANGED
@@ -3,5 +3,6 @@ export * from './src/app/services/api.service';
3
3
  export * from './src/app/services/signalrService.service';
4
4
  export * from './src/app/services/token.service';
5
5
  export * from './src/app/services/translation.service';
6
+ export * from './src/app/language.service';
6
7
  export * from './src/app/types';
7
8
  export * from './src/app/pipes/translate.pipe';
@@ -1,4 +1,4 @@
1
- import { OnInit, ElementRef } from '@angular/core';
1
+ import { OnInit, OnDestroy, ElementRef } from '@angular/core';
2
2
  import { ApiService } from '../services/api.service';
3
3
  import { SignalRService } from '../services/signalrService.service';
4
4
  import { TokenService } from '../services/token.service';
@@ -37,7 +37,7 @@ interface Message {
37
37
  sentAt: Date;
38
38
  isSeen: boolean;
39
39
  }
40
- export declare class HelpCenterWidgetComponent implements OnInit {
40
+ export declare class HelpCenterWidgetComponent implements OnInit, OnDestroy {
41
41
  private apiService;
42
42
  private signalRService;
43
43
  private tokenService;
@@ -46,15 +46,18 @@ export declare class HelpCenterWidgetComponent implements OnInit {
46
46
  helpScreenId: string;
47
47
  showArrow: boolean;
48
48
  messageLabel: string | null;
49
- currentLang: string;
49
+ set currentLang(value: string);
50
+ get currentLang(): string;
50
51
  isIntroScreenEnabled: boolean;
51
52
  chatMessagesContainer: ElementRef;
53
+ private _currentLang;
54
+ private langSubscription?;
55
+ isRTL: boolean;
52
56
  isPopupOpen: boolean;
53
57
  helpScreenData: any;
54
58
  status: string;
55
59
  error: string | null;
56
60
  showArrowAnimation: boolean;
57
- isRTL: boolean;
58
61
  showTooltip: boolean;
59
62
  sessionId: string | null;
60
63
  isSignalRConnected: boolean;
@@ -74,6 +77,7 @@ export declare class HelpCenterWidgetComponent implements OnInit {
74
77
  showEndChatConfirmation: boolean;
75
78
  constructor(apiService: ApiService, signalRService: SignalRService, tokenService: TokenService, translationService: TranslationService);
76
79
  ngOnInit(): void;
80
+ ngOnDestroy(): void;
77
81
  handleTogglePopup(): Promise<void>;
78
82
  private fetchHelpScreenData;
79
83
  createChatSession(): Promise<any>;
@@ -0,0 +1,11 @@
1
+ import { TranslationService } from './services/translation.service';
2
+ import { Language } from './types';
3
+ import * as i0 from "@angular/core";
4
+ export declare class LanguageService {
5
+ private translationService;
6
+ constructor(translationService: TranslationService);
7
+ switchLanguage(language: Language): void;
8
+ getCurrentLang(): Language;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<LanguageService, never>;
10
+ static ɵprov: i0.ɵɵInjectableDeclaration<LanguageService>;
11
+ }
@@ -1,3 +1,4 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { Language } from '../types';
2
3
  import * as i0 from "@angular/core";
3
4
  declare const defaultTranslations: {
@@ -21,7 +22,8 @@ declare const defaultTranslations: {
21
22
  export type TranslationKey = keyof typeof defaultTranslations;
22
23
  export declare class TranslationService {
23
24
  private translations;
24
- private currentLang;
25
+ private _currentLang;
26
+ readonly currentLang: Observable<Language>;
25
27
  constructor();
26
28
  translate(key: TranslationKey): string;
27
29
  setLanguage(lang: Language): void;