@propmix/profet-common-header 3.0.15-utility-unstable.7 → 3.0.16-cross-tab-session-expiry

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.
Files changed (36) hide show
  1. package/esm2020/lib/api-endpoints.def.mjs +2 -3
  2. package/esm2020/lib/api-gateway.service.mjs +13 -5
  3. package/esm2020/lib/common-header.interface.mjs +1 -1
  4. package/esm2020/lib/common-header.service.mjs +2 -34
  5. package/esm2020/lib/header/header.component.mjs +121 -60
  6. package/esm2020/lib/session-expiry-info/session-expiry-info.component.mjs +3 -3
  7. package/esm2020/public-api.mjs +1 -3
  8. package/fesm2015/propmix-profet-common-header.mjs +161 -140
  9. package/fesm2015/propmix-profet-common-header.mjs.map +1 -1
  10. package/fesm2020/propmix-profet-common-header.mjs +159 -132
  11. package/fesm2020/propmix-profet-common-header.mjs.map +1 -1
  12. package/lib/api-endpoints.def.d.ts +0 -1
  13. package/lib/api-gateway.service.d.ts +1 -2
  14. package/lib/common-header.interface.d.ts +0 -22
  15. package/lib/common-header.service.d.ts +0 -7
  16. package/lib/header/header.component.d.ts +19 -16
  17. package/package.json +1 -1
  18. package/public-api.d.ts +0 -2
  19. package/esm2020/lib/appraisal-assistant/appraisal-assistant-chat-widget.component.mjs +0 -179
  20. package/esm2020/lib/appraisal-assistant/appraisal-assistant.interface.mjs +0 -2
  21. package/esm2020/lib/base-controller.abstract.mjs +0 -11
  22. package/esm2020/lib/closable.mixin.mjs +0 -14
  23. package/esm2020/lib/utility-widget-config.token.mjs +0 -3
  24. package/esm2020/lib/utils/chat-time.pipe.mjs +0 -35
  25. package/esm2020/lib/utils/text-to-html.pipe.mjs +0 -42
  26. package/fesm2015/propmix-profet-common-header-appraisal-assistant-chat-widget.component-56a1672f.mjs +0 -281
  27. package/fesm2015/propmix-profet-common-header-appraisal-assistant-chat-widget.component-56a1672f.mjs.map +0 -1
  28. package/fesm2020/propmix-profet-common-header-appraisal-assistant-chat-widget.component-8816b836.mjs +0 -276
  29. package/fesm2020/propmix-profet-common-header-appraisal-assistant-chat-widget.component-8816b836.mjs.map +0 -1
  30. package/lib/appraisal-assistant/appraisal-assistant-chat-widget.component.d.ts +0 -37
  31. package/lib/appraisal-assistant/appraisal-assistant.interface.d.ts +0 -4
  32. package/lib/base-controller.abstract.d.ts +0 -6
  33. package/lib/closable.mixin.d.ts +0 -7
  34. package/lib/utility-widget-config.token.d.ts +0 -2
  35. package/lib/utils/chat-time.pipe.d.ts +0 -7
  36. package/lib/utils/text-to-html.pipe.d.ts +0 -21
@@ -9,6 +9,5 @@ export declare class EndPoints {
9
9
  getCompanyList: string;
10
10
  getAppMenu: string;
11
11
  updateLastAccessedApplication: string;
12
- appraisalChat: string;
13
12
  };
14
13
  }
@@ -1,9 +1,8 @@
1
1
  import { Observable } from 'rxjs';
2
- import { ApiConfig } from './common-header.interface';
3
2
  import * as i0 from "@angular/core";
4
3
  export declare class ApiGatewayService {
5
4
  private _http;
6
- doGet(url: string, config?: ApiConfig): Observable<any>;
5
+ doGet(url: string, config?: any): Observable<any>;
7
6
  doPost(url: string, req_body?: any): Observable<any>;
8
7
  static ɵfac: i0.ɵɵFactoryDeclaration<ApiGatewayService, never>;
9
8
  static ɵprov: i0.ɵɵInjectableDeclaration<ApiGatewayService>;
@@ -1,5 +1,3 @@
1
- import { HttpHeaders } from "@angular/common/http";
2
- import { EventEmitter, Type } from "@angular/core";
3
1
  import { PROFET_APPS } from "./utils/apps.enum";
4
2
  export interface AppMenu {
5
3
  appType: PROFET_APPS;
@@ -19,8 +17,6 @@ export interface HeaderConfig {
19
17
  portalFrontendUrl?: string;
20
18
  signOutUrl: string;
21
19
  appType: PROFET_APPS;
22
- disableUtilityDrawer?: boolean;
23
- disableAppraisalAssistantApp?: boolean;
24
20
  }
25
21
  export interface Company {
26
22
  id: number;
@@ -38,21 +34,3 @@ export interface Company {
38
34
  export interface SessionOutInfo {
39
35
  sessionOutTimeInMins?: number;
40
36
  }
41
- export interface UtilityConfig {
42
- id: string;
43
- label: string;
44
- loadComponent?: () => Promise<Type<any>>;
45
- layout?: 'push' | 'side' | 'over';
46
- icon: string;
47
- config?: any;
48
- }
49
- export interface UtilityComp {
50
- outEvent: EventEmitter<boolean>;
51
- }
52
- export interface ApiConfig {
53
- httpHeader?: HttpHeaders;
54
- isUnauthorized?: boolean;
55
- additionalParams?: {
56
- [key: string]: any;
57
- };
58
- }
@@ -1,5 +1,4 @@
1
1
  import { MatDialog } from '@angular/material/dialog';
2
- import { AppraisalChatRequest } from './appraisal-assistant/appraisal-assistant.interface';
3
2
  import { AppMenu, Company, HeaderConfig, SessionOutInfo } from './common-header.interface';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare class CommonHeaderService {
@@ -13,9 +12,6 @@ export declare class CommonHeaderService {
13
12
  activeMenuList$: import("rxjs").Observable<AppMenu[] | null>;
14
13
  private companyListSubject;
15
14
  companyList$: import("rxjs").Observable<Company[] | null>;
16
- private utilityContentDrawerSub;
17
- utilityContentToggle$: import("rxjs").Observable<void>;
18
- toggleUtilityContentDrawer(): void;
19
15
  constructor(config: HeaderConfig);
20
16
  setMenuState(data: AppMenu[]): void;
21
17
  setCompanyList(data: Company[]): void;
@@ -34,9 +30,6 @@ export declare class CommonHeaderService {
34
30
  getCompanyList(): import("rxjs").Observable<{}>;
35
31
  getMenuList(): import("rxjs").Observable<{}>;
36
32
  updateLastAccessedApplication(reqBody: any): import("rxjs").Observable<any>;
37
- objectToQueryParams(obj: Record<string, any>): string;
38
- getCookie(name: string): string | null;
39
- getQueryResponse(request?: AppraisalChatRequest): import("rxjs").Observable<any>;
40
33
  static ɵfac: i0.ɵɵFactoryDeclaration<CommonHeaderService, never>;
41
34
  static ɵprov: i0.ɵɵInjectableDeclaration<CommonHeaderService>;
42
35
  }
@@ -1,12 +1,12 @@
1
- import { EventEmitter, Injector, OnChanges, OnDestroy, OnInit, SimpleChanges, Type } from '@angular/core';
1
+ import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
- import { MatDrawer, MatSidenav } from '@angular/material/sidenav';
3
+ import { MatSidenav } from '@angular/material/sidenav';
4
4
  import { DomSanitizer } from '@angular/platform-browser';
5
5
  import { Router } from '@angular/router';
6
- import { AppMenu, Company, UtilityConfig } from '../common-header.interface';
6
+ import { AppMenu, Company } from '../common-header.interface';
7
7
  import { CommonHeaderService } from '../common-header.service';
8
8
  import * as i0 from "@angular/core";
9
- export declare class HeaderComponent implements OnInit, OnChanges, OnDestroy {
9
+ export declare class HeaderComponent implements OnInit, OnDestroy {
10
10
  companyProfile: any;
11
11
  portalUrl: string;
12
12
  userAuthData: any;
@@ -33,6 +33,7 @@ export declare class HeaderComponent implements OnInit, OnChanges, OnDestroy {
33
33
  _headerSer: CommonHeaderService;
34
34
  _domSanitizer: DomSanitizer;
35
35
  private inactivityTimeout;
36
+ private logoutCheckInterval;
36
37
  INACTIVITY_LIMIT: number;
37
38
  logoutEvent: EventEmitter<void>;
38
39
  companyControl: FormControl<any>;
@@ -44,22 +45,24 @@ export declare class HeaderComponent implements OnInit, OnChanges, OnDestroy {
44
45
  value: AppMenu[];
45
46
  }[];
46
47
  activeCompany: Company | undefined;
47
- utilitySpace: MatDrawer;
48
- config: UtilityConfig[];
49
- defaultApps: UtilityConfig[];
50
- selected?: UtilityConfig;
51
- componentToLoad: Type<any> | null;
52
- dynamicInjector: Injector;
53
- private injector;
54
- openItem(item: UtilityConfig): Promise<void>;
55
48
  constructor();
56
- ngOnChanges(changes: SimpleChanges): Promise<void>;
57
49
  ngOnInit(): Promise<void>;
58
- resetTimer(): void;
50
+ /**
51
+ * Helper to get the root domain (e.g. .mycom.ai) to share cookies across subdomains/ports.
52
+ * If on localhost or an IP, it falls back to the hostname.
53
+ */
54
+ private getRootDomain;
55
+ private setCookie;
56
+ private getCookie;
57
+ resetTimer(isUserActivity?: boolean): void;
58
+ /**
59
+ * Helper to identify the session expiry in in-active tabs.
60
+ */
61
+ private startLogoutCheck;
62
+ private handleLogout;
59
63
  selectCurrentCompany(): void;
60
64
  patchCurrentCompanyInfo(): void;
61
65
  sideMenuToggle(): void;
62
- closeUtilitySpace(): void;
63
66
  private groupByAppType;
64
67
  menuSelection(menu: AppMenu): void;
65
68
  getCompanyList(): void;
@@ -70,5 +73,5 @@ export declare class HeaderComponent implements OnInit, OnChanges, OnDestroy {
70
73
  switchCompany(info: any): void;
71
74
  ngOnDestroy(): void;
72
75
  static ɵfac: i0.ɵɵFactoryDeclaration<HeaderComponent, never>;
73
- static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "lib-header", never, { "INACTIVITY_LIMIT": "INACTIVITY_LIMIT"; "config": "config"; }, { "logoutEvent": "logoutEvent"; }, never, ["[headerInfo]", "[bodyContentInfo]"], false, never>;
76
+ static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "lib-header", never, { "INACTIVITY_LIMIT": "INACTIVITY_LIMIT"; }, { "logoutEvent": "logoutEvent"; }, never, ["*"], false, never>;
74
77
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@propmix/profet-common-header",
3
- "version": "3.0.15-utility-unstable.7",
3
+ "version": "3.0.16-cross-tab-session-expiry",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=15.2.0",
6
6
  "@angular/core": ">=15.2.0",
package/public-api.d.ts CHANGED
@@ -1,8 +1,6 @@
1
- export * from './lib/base-controller.abstract';
2
1
  export * from './lib/common-header.interface';
3
2
  export * from './lib/common-header.module';
4
3
  export * from './lib/common-header.service';
5
4
  export * from './lib/header/header.component';
6
- export * from './lib/utility-widget-config.token';
7
5
  export * from './lib/utils/app.constants';
8
6
  export * from './lib/utils/apps.enum';
@@ -1,179 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, inject, ViewChild, ViewChildren } from '@angular/core';
3
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
- import { MatButtonModule } from '@angular/material/button';
5
- import { MatFormFieldModule } from '@angular/material/form-field';
6
- import { MatIconModule } from '@angular/material/icon';
7
- import { MatInputModule } from '@angular/material/input';
8
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
9
- import { MatSidenavModule } from '@angular/material/sidenav';
10
- import { MatTooltipModule } from '@angular/material/tooltip';
11
- import { WithClosable } from '../closable.mixin';
12
- import { CommonHeaderService } from '../common-header.service';
13
- import { ChatTimePipe } from '../utils/chat-time.pipe';
14
- import { TextToHtmlPipe } from "../utils/text-to-html.pipe";
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/material/icon";
17
- import * as i2 from "@angular/material/button";
18
- import * as i3 from "@angular/forms";
19
- import * as i4 from "@angular/common";
20
- import * as i5 from "@angular/material/progress-spinner";
21
- import * as i6 from "@angular/material/tooltip";
22
- class EmptyBase {
23
- }
24
- export class AppraisalAssistantChatWidgetComponent extends WithClosable(class {
25
- }) {
26
- constructor() {
27
- super(...arguments);
28
- this.isOpen = false;
29
- this.message = '';
30
- this.messages = [];
31
- this.isLoading = false;
32
- this.conversationId = '';
33
- this.msgControl = new FormControl('');
34
- this._chatSer = inject(CommonHeaderService);
35
- this.shouldScroll = false;
36
- this.welcomeMessage = '';
37
- }
38
- ngOnInit() {
39
- if ((this.messages.length === 0)) {
40
- this.sendMessage();
41
- }
42
- }
43
- ngAfterViewChecked() {
44
- if (this.shouldScroll) {
45
- setTimeout(() => {
46
- this.scrollToLastMessage();
47
- this.shouldScroll = false;
48
- }, 100);
49
- }
50
- }
51
- toggleChat() {
52
- this.close();
53
- // this.isOpen = !this.isOpen;
54
- // if (this.isOpen && (this.messages.length === 0)) {
55
- // this.sendMessage();
56
- // }
57
- }
58
- sendMessage() {
59
- this.isLoading = true;
60
- this.msgControl.disable();
61
- let req = {
62
- query: this.msgControl.value?.trim() ? this.msgControl.value.trim() : null,
63
- };
64
- if (this.msgControl.value?.trim()?.length > 0) {
65
- this.messages.push({ response: this.msgControl.value?.trim(), isUser: true, timeStamp: new Date() });
66
- }
67
- this.shouldScroll = true;
68
- if (this.conversationId)
69
- req.conversationId = this.conversationId;
70
- this.msgControl.setValue('');
71
- this._chatSer.getQueryResponse(req)
72
- .subscribe({
73
- next: ((res) => {
74
- if (res) {
75
- if (res.message) {
76
- this.messages.push({ response: res.message, timeStamp: new Date() });
77
- this.welcomeMessage = res.message;
78
- }
79
- else if (res.result?.httpCode == 200) {
80
- if (res.result.data.response) {
81
- this.conversationId = res.result.data.conversationId;
82
- res.result.data.timeStamp = new Date();
83
- this.messages.push(res.result.data);
84
- }
85
- }
86
- else if (res.result?.httpCode == 204) {
87
- this.messages.push({ response: res.result.message, timeStamp: new Date() });
88
- }
89
- this.shouldScroll = true;
90
- }
91
- this.isLoading = false;
92
- this.msgControl.enable();
93
- this.focusInput();
94
- }),
95
- error: ((err) => {
96
- this.isLoading = false;
97
- this.msgControl.enable();
98
- this.focusInput();
99
- })
100
- });
101
- }
102
- // scrollToLastMessage() {
103
- // const container = this.chatContainer?.nativeElement;
104
- // if (container && container.scrollHeight > container.clientHeight) {
105
- // container.scrollTop = container.scrollHeight;
106
- // }
107
- // }
108
- scrollToLastMessage() {
109
- const container = this.chatContainer?.nativeElement;
110
- if (container && this.lastMessageRefs && this.lastMessageRefs.length > 0) {
111
- const lastMsg = this.lastMessageRefs.last.nativeElement;
112
- const lastMsgRect = lastMsg.getBoundingClientRect();
113
- const containerRect = container.getBoundingClientRect();
114
- // If last message is below the visible area of the container
115
- if (lastMsgRect.bottom > containerRect.bottom) {
116
- const scrollOffset = lastMsg.offsetTop - container.offsetTop;
117
- container.scrollTop = scrollOffset;
118
- }
119
- // If last message is above the visible area of the container
120
- else if (lastMsgRect.top < containerRect.top) {
121
- const scrollOffset = lastMsg.offsetTop - container.offsetTop;
122
- container.scrollTop = scrollOffset;
123
- }
124
- // Else, it's already visible; do nothing
125
- }
126
- }
127
- handleKeyDown(event) {
128
- if (event.key === 'Enter' && !event.shiftKey) {
129
- event.preventDefault();
130
- if (this.msgControl.value?.trim()?.length > 0) {
131
- this.sendMessage();
132
- }
133
- }
134
- // Shift+Enter will be allowed by default
135
- }
136
- focusInput() {
137
- if (this.msgInputRef) {
138
- this.msgInputRef.nativeElement.focus();
139
- }
140
- }
141
- resetChat() {
142
- let message = [{ response: this.welcomeMessage, timeStamp: new Date() }];
143
- this.messages = message;
144
- this.conversationId = '';
145
- this.msgControl.setValue('');
146
- this.shouldScroll = false;
147
- if (this.msgInputRef) {
148
- this.msgInputRef.nativeElement.focus();
149
- }
150
- }
151
- }
152
- AppraisalAssistantChatWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppraisalAssistantChatWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
153
- AppraisalAssistantChatWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AppraisalAssistantChatWidgetComponent, isStandalone: true, selector: "appraisal-assistant-agent", viewQueries: [{ propertyName: "chatContainer", first: true, predicate: ["chatContainer"], descendants: true }, { propertyName: "msgInputRef", first: true, predicate: ["msgInput"], descendants: true }, { propertyName: "lastMessageRefs", predicate: ["lastMessageRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"isOpen?'chat-container-wrap':''\">\n <div class=\"chatbot-container\">\n <div class=\"chatbot-sidenav\">\n <div class=\"chat-header\"><span>Appraisal Assistant (Beta)</span>\n <div class=\"chat-header-actions\">\n <button tabindex=\"-1\" mat-button class=\"reset-button small_btn\" [disabled]=\"isLoading\"\n (click)=\"resetChat()\">Reset\n </button>\n <!-- <span>Reset</span> -->\n <!-- <button mat-icon-button matTooltip=\"Collapse\" class=\"d-flex align-item-center\" (click)=\"toggleChat()\">\n <mat-icon>chevron_right</mat-icon>\n </button> -->\n <button matTooltip=\"Collapse\" class=\"d-flex align-item-center collapse_btn\" (click)=\"toggleChat()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"chat-messages\" #chatContainer>\n <div *ngFor=\"let message of messages; let isLast = last\" class=\"message-container\"\n [ngClass]=\"{'user-message': message.isUser, 'bot-message': !message.isUser}\"\n style=\"margin-bottom: 15px;\" #lastMessageRef>\n <div class=\"message-content\">\n <span [innerHTML]=\"message.response | textToHtml\"></span>\n <span class=\"message-time\">{{ message.timeStamp | chatTime }} </span>\n </div>\n </div>\n </div>\n <form class=\"chat-input-container\" (submit)=\"sendMessage()\">\n <textarea class=\"chat-textarea\" [formControl]=\"msgControl\" placeholder=\"Start typing here...\" rows=\"1\"\n (keydown)=\"handleKeyDown($event)\" #msgInput></textarea>\n <mat-spinner *ngIf=\"isLoading\" [diameter]=\"24\" strokeWidth=\"3\" color=\"primary\" class=\"position-absolute\"\n style=\"right:22px\"></mat-spinner>\n <button color=\"primary\" [disabled]=\"isLoading || (msgControl.value?.trim()?.length <= 0)\"\n mat-icon-button class=\"d-flex align-items-center\" (click)=\"sendMessage()\">\n <mat-icon *ngIf=\"!isLoading\">send</mat-icon>\n <!-- <mat-spinner *ngIf=\"isLoading\" [diameter]=\"24\" strokeWidth=\"3\"></mat-spinner> -->\n </button>\n </form>\n </div>\n </div>\n <!-- <mat-sidenav-container [hasBackdrop]=\"true\" class=\"chatbot-container\"><mat-sidenav #sidenav position=\"end\"\n mode=\"over\" [(opened)]=\"isOpen\" [disableClose]=\"true\" class=\"chatbot-sidenav\">\n </mat-sidenav></mat-sidenav-container> -->\n</div>\n<!-- <div *ngIf=\"!isOpen\" class=\"chat-launcher\" (click)=\"toggleChat()\">\n <div>\n <div class=\"list-icons-cell\">\n <mat-icon class=\"list-icons\">3p</mat-icon>\n </div>\n </div>\n</div> -->", styles: [":host .chatbot-container{top:0;right:0;height:100vh;background:transparent}:host .chatbot-container .mat-sidenav{z-index:5;pointer-events:auto;width:650px;display:flex;flex-direction:column}:host .chatbot-container .chat-header{display:flex;justify-content:space-between;align-items:center;padding:5px 16px;background:linear-gradient(to right,#3966b6,var(--themelightblue));color:#fff;position:sticky;top:0;z-index:100;box-shadow:0 2px 5px #0000004d;line-height:20px;letter-spacing:normal}:host .chatbot-container .chat-header span{font-size:13.12px;font-weight:550!important;line-height:20px;letter-spacing:normal}:host .chatbot-container .chat-header button:first-child{background-color:#4076d5!important}:host .chatbot-container .chat-messages{flex:1;padding:60px 16px 16px;background-color:#fff;overflow-y:auto;overscroll-behavior:contain;position:relative}:host .chatbot-container .message-container{display:flex;margin-bottom:12px;align-items:flex-start}:host .chat-launcher{background-color:#fff!important;border-radius:3px}:host .chat-launcher span{white-space:nowrap;border-right:1px solid #999999;font-size:13.12px!important;padding-right:5px;color:#fff!important}:host .chat-launcher .list-icons-cell{padding:8px;text-align:center;vertical-align:middle;height:40px;width:40px;cursor:pointer;border-radius:30px;margin-top:10px}:host .chat-launcher .list-icons-cell .list-icons{font-size:25px!important;color:#4b85ea!important}:host .list-icons-cell:hover{background-color:#ccc}:host .chat-header-actions{display:flex;align-items:center;gap:8px}:host .chat-header-actions .reset-button{color:#fff;line-height:20px!important;letter-spacing:.5px!important;font-size:13.12px!important}:host .user-message{justify-content:flex-end}:host .user-message .message-content{background-color:RGB(235,243,255);color:#212121;border:1px solid RGB(220,233,251);padding:10px 14px;border-radius:10px;max-width:70%;margin-left:auto;font-size:13px;line-height:21px!important}:host .user-message .message-time{display:block;font-size:9px;color:#555;margin-top:0;text-align:right}:host .bot-message{justify-content:flex-start}:host .bot-message .message-content{color:#212121;padding:10px 14px;border-radius:10px;width:98%;margin-right:auto;font-size:13px;line-height:21px!important}:host .bot-message .message-time{display:block;font-size:9px;color:#555;margin-top:0;text-align:left}:host .message-content{display:inline-block;word-break:break-word}:host .chat-input-container{display:flex;align-items:center;padding:12px;background-color:#fff;position:sticky;bottom:0;border-top:1px solid #e0e0e0;z-index:10}:host .chat-textarea{flex:1;resize:none;padding:12px 16px;border-radius:20px;font-size:14px;background-color:#f1f1f1;border:none;outline:none;line-height:1.4;max-height:150px;overflow-y:auto}:host .send-button{margin-left:8px;width:40px;height:40px;border-radius:50%;border:none;background-color:#3f51b5;color:#fff;display:flex;align-items:center;justify-content:center}:host .send-button:disabled{background-color:#ccc}:host .chat-container-wrap{position:fixed;inset:0;z-index:99999}:host ::ng-deep .mat-drawer-inner-container{display:flex;flex-direction:column}:host .collapse_btn{width:35px;height:35px;border-radius:50px;display:flex!important;align-items:center;justify-content:center;background-color:transparent!important;border:none}:host .collapse_btn mat-icon{font-size:24px!important;width:24px!important;height:24px!important;color:#fff!important}:host .collapse_btn:hover{background-color:#4076d5!important;transition:all .2s}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: ChatTimePipe, name: "chatTime" }, { kind: "pipe", type: TextToHtmlPipe, name: "textToHtml" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
154
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppraisalAssistantChatWidgetComponent, decorators: [{
155
- type: Component,
156
- args: [{ selector: 'appraisal-assistant-agent', standalone: true, imports: [
157
- MatSidenavModule,
158
- MatIconModule,
159
- MatButtonModule,
160
- MatFormFieldModule,
161
- ReactiveFormsModule,
162
- CommonModule,
163
- MatInputModule,
164
- MatProgressSpinnerModule,
165
- ChatTimePipe,
166
- TextToHtmlPipe,
167
- MatTooltipModule
168
- ], template: "<div [class]=\"isOpen?'chat-container-wrap':''\">\n <div class=\"chatbot-container\">\n <div class=\"chatbot-sidenav\">\n <div class=\"chat-header\"><span>Appraisal Assistant (Beta)</span>\n <div class=\"chat-header-actions\">\n <button tabindex=\"-1\" mat-button class=\"reset-button small_btn\" [disabled]=\"isLoading\"\n (click)=\"resetChat()\">Reset\n </button>\n <!-- <span>Reset</span> -->\n <!-- <button mat-icon-button matTooltip=\"Collapse\" class=\"d-flex align-item-center\" (click)=\"toggleChat()\">\n <mat-icon>chevron_right</mat-icon>\n </button> -->\n <button matTooltip=\"Collapse\" class=\"d-flex align-item-center collapse_btn\" (click)=\"toggleChat()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"chat-messages\" #chatContainer>\n <div *ngFor=\"let message of messages; let isLast = last\" class=\"message-container\"\n [ngClass]=\"{'user-message': message.isUser, 'bot-message': !message.isUser}\"\n style=\"margin-bottom: 15px;\" #lastMessageRef>\n <div class=\"message-content\">\n <span [innerHTML]=\"message.response | textToHtml\"></span>\n <span class=\"message-time\">{{ message.timeStamp | chatTime }} </span>\n </div>\n </div>\n </div>\n <form class=\"chat-input-container\" (submit)=\"sendMessage()\">\n <textarea class=\"chat-textarea\" [formControl]=\"msgControl\" placeholder=\"Start typing here...\" rows=\"1\"\n (keydown)=\"handleKeyDown($event)\" #msgInput></textarea>\n <mat-spinner *ngIf=\"isLoading\" [diameter]=\"24\" strokeWidth=\"3\" color=\"primary\" class=\"position-absolute\"\n style=\"right:22px\"></mat-spinner>\n <button color=\"primary\" [disabled]=\"isLoading || (msgControl.value?.trim()?.length <= 0)\"\n mat-icon-button class=\"d-flex align-items-center\" (click)=\"sendMessage()\">\n <mat-icon *ngIf=\"!isLoading\">send</mat-icon>\n <!-- <mat-spinner *ngIf=\"isLoading\" [diameter]=\"24\" strokeWidth=\"3\"></mat-spinner> -->\n </button>\n </form>\n </div>\n </div>\n <!-- <mat-sidenav-container [hasBackdrop]=\"true\" class=\"chatbot-container\"><mat-sidenav #sidenav position=\"end\"\n mode=\"over\" [(opened)]=\"isOpen\" [disableClose]=\"true\" class=\"chatbot-sidenav\">\n </mat-sidenav></mat-sidenav-container> -->\n</div>\n<!-- <div *ngIf=\"!isOpen\" class=\"chat-launcher\" (click)=\"toggleChat()\">\n <div>\n <div class=\"list-icons-cell\">\n <mat-icon class=\"list-icons\">3p</mat-icon>\n </div>\n </div>\n</div> -->", styles: [":host .chatbot-container{top:0;right:0;height:100vh;background:transparent}:host .chatbot-container .mat-sidenav{z-index:5;pointer-events:auto;width:650px;display:flex;flex-direction:column}:host .chatbot-container .chat-header{display:flex;justify-content:space-between;align-items:center;padding:5px 16px;background:linear-gradient(to right,#3966b6,var(--themelightblue));color:#fff;position:sticky;top:0;z-index:100;box-shadow:0 2px 5px #0000004d;line-height:20px;letter-spacing:normal}:host .chatbot-container .chat-header span{font-size:13.12px;font-weight:550!important;line-height:20px;letter-spacing:normal}:host .chatbot-container .chat-header button:first-child{background-color:#4076d5!important}:host .chatbot-container .chat-messages{flex:1;padding:60px 16px 16px;background-color:#fff;overflow-y:auto;overscroll-behavior:contain;position:relative}:host .chatbot-container .message-container{display:flex;margin-bottom:12px;align-items:flex-start}:host .chat-launcher{background-color:#fff!important;border-radius:3px}:host .chat-launcher span{white-space:nowrap;border-right:1px solid #999999;font-size:13.12px!important;padding-right:5px;color:#fff!important}:host .chat-launcher .list-icons-cell{padding:8px;text-align:center;vertical-align:middle;height:40px;width:40px;cursor:pointer;border-radius:30px;margin-top:10px}:host .chat-launcher .list-icons-cell .list-icons{font-size:25px!important;color:#4b85ea!important}:host .list-icons-cell:hover{background-color:#ccc}:host .chat-header-actions{display:flex;align-items:center;gap:8px}:host .chat-header-actions .reset-button{color:#fff;line-height:20px!important;letter-spacing:.5px!important;font-size:13.12px!important}:host .user-message{justify-content:flex-end}:host .user-message .message-content{background-color:RGB(235,243,255);color:#212121;border:1px solid RGB(220,233,251);padding:10px 14px;border-radius:10px;max-width:70%;margin-left:auto;font-size:13px;line-height:21px!important}:host .user-message .message-time{display:block;font-size:9px;color:#555;margin-top:0;text-align:right}:host .bot-message{justify-content:flex-start}:host .bot-message .message-content{color:#212121;padding:10px 14px;border-radius:10px;width:98%;margin-right:auto;font-size:13px;line-height:21px!important}:host .bot-message .message-time{display:block;font-size:9px;color:#555;margin-top:0;text-align:left}:host .message-content{display:inline-block;word-break:break-word}:host .chat-input-container{display:flex;align-items:center;padding:12px;background-color:#fff;position:sticky;bottom:0;border-top:1px solid #e0e0e0;z-index:10}:host .chat-textarea{flex:1;resize:none;padding:12px 16px;border-radius:20px;font-size:14px;background-color:#f1f1f1;border:none;outline:none;line-height:1.4;max-height:150px;overflow-y:auto}:host .send-button{margin-left:8px;width:40px;height:40px;border-radius:50%;border:none;background-color:#3f51b5;color:#fff;display:flex;align-items:center;justify-content:center}:host .send-button:disabled{background-color:#ccc}:host .chat-container-wrap{position:fixed;inset:0;z-index:99999}:host ::ng-deep .mat-drawer-inner-container{display:flex;flex-direction:column}:host .collapse_btn{width:35px;height:35px;border-radius:50px;display:flex!important;align-items:center;justify-content:center;background-color:transparent!important;border:none}:host .collapse_btn mat-icon{font-size:24px!important;width:24px!important;height:24px!important;color:#fff!important}:host .collapse_btn:hover{background-color:#4076d5!important;transition:all .2s}\n"] }]
169
- }], propDecorators: { chatContainer: [{
170
- type: ViewChild,
171
- args: ['chatContainer']
172
- }], lastMessageRefs: [{
173
- type: ViewChildren,
174
- args: ['lastMessageRef']
175
- }], msgInputRef: [{
176
- type: ViewChild,
177
- args: ['msgInput']
178
- }] } });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcmFpc2FsLWFzc2lzdGFudC1jaGF0LXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvYXBwcmFpc2FsLWFzc2lzdGFudC9hcHByYWlzYWwtYXNzaXN0YW50LWNoYXQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9hcHByYWlzYWwtYXNzaXN0YW50L2FwcHJhaXNhbC1hc3Npc3RhbnQtY2hhdC13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsU0FBUyxFQUFjLE1BQU0sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFN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QkFBd0I7d0JBQ3hCLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxnQkFBZ0I7cUJBQ2pCOzhCQVVtQyxhQUFhO3NCQUFoRCxTQUFTO3VCQUFDLGVBQWU7Z0JBQ00sZUFBZTtzQkFBOUMsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBQ1AsV0FBVztzQkFBakMsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IFdpdGhDbG9zYWJsZSB9IGZyb20gJy4uL2Nsb3NhYmxlLm1peGluJztcbmltcG9ydCB7IENvbW1vbkhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24taGVhZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdFRpbWVQaXBlIH0gZnJvbSAnLi4vdXRpbHMvY2hhdC10aW1lLnBpcGUnO1xuaW1wb3J0IHsgVGV4dFRvSHRtbFBpcGUgfSBmcm9tIFwiLi4vdXRpbHMvdGV4dC10by1odG1sLnBpcGVcIjtcbmltcG9ydCB7IEFwcHJhaXNhbENoYXRSZXF1ZXN0IH0gZnJvbSAnLi9hcHByYWlzYWwtYXNzaXN0YW50LmludGVyZmFjZSc7XG5cbmNsYXNzIEVtcHR5QmFzZSB7IH1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwcmFpc2FsLWFzc2lzdGFudC1hZ2VudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHByYWlzYWwtYXNzaXN0YW50LWNoYXQtd2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwcmFpc2FsLWFzc2lzdGFudC1jaGF0LXdpZGdldC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0U2lkZW5hdk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgIENoYXRUaW1lUGlwZSxcbiAgICBUZXh0VG9IdG1sUGlwZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXBwcmFpc2FsQXNzaXN0YW50Q2hhdFdpZGdldENvbXBvbmVudCBleHRlbmRzIFdpdGhDbG9zYWJsZShjbGFzcyB7fSkgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICBpc09wZW4gPSBmYWxzZTtcbiAgbWVzc2FnZSA9ICcnO1xuICBtZXNzYWdlczogYW55W10gPSBbXTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSAnJztcbiAgbXNnQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICBwdWJsaWMgX2NoYXRTZXIgPSBpbmplY3QoQ29tbW9uSGVhZGVyU2VydmljZSk7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRDb250YWluZXInKSBwcml2YXRlIGNoYXRDb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkcmVuKCdsYXN0TWVzc2FnZVJlZicpIGxhc3RNZXNzYWdlUmVmcyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnbXNnSW5wdXQnKSBtc2dJbnB1dFJlZiE6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBzaG91bGRTY3JvbGwgPSBmYWxzZTtcbiAgd2VsY29tZU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLm1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3VsZFNjcm9sbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9MYXN0TWVzc2FnZSgpO1xuICAgICAgICB0aGlzLnNob3VsZFNjcm9sbCA9IGZhbHNlO1xuICAgICAgfSwgMTAwKTtcblxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUNoYXQoKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIC8vIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgIC8vIGlmICh0aGlzLmlzT3BlbiAmJiAodGhpcy5tZXNzYWdlcy5sZW5ndGggPT09IDApKSB7XG4gICAgLy8gICB0aGlzLnNlbmRNZXNzYWdlKCk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2VuZE1lc3NhZ2UoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMubXNnQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgbGV0IHJlcTogQXBwcmFpc2FsQ2hhdFJlcXVlc3QgPSB7XG4gICAgICBxdWVyeTogdGhpcy5tc2dDb250cm9sLnZhbHVlPy50cmltKCkgPyB0aGlzLm1zZ0NvbnRyb2wudmFsdWUudHJpbSgpIDogbnVsbCxcbiAgICB9XG4gICAgaWYgKHRoaXMubXNnQ29udHJvbC52YWx1ZT8udHJpbSgpPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnB1c2goeyByZXNwb25zZTogdGhpcy5tc2dDb250cm9sLnZhbHVlPy50cmltKCksIGlzVXNlcjogdHJ1ZSwgdGltZVN0YW1wOiBuZXcgRGF0ZSgpIH0pO1xuICAgIH1cbiAgICB0aGlzLnNob3VsZFNjcm9sbCA9IHRydWU7XG4gICAgaWYgKHRoaXMuY29udmVyc2F0aW9uSWQpIHJlcS5jb252ZXJzYXRpb25JZCA9IHRoaXMuY29udmVyc2F0aW9uSWQ7XG4gICAgdGhpcy5tc2dDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLl9jaGF0U2VyLmdldFF1ZXJ5UmVzcG9uc2UocmVxKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKHsgcmVzcG9uc2U6IHJlcy5tZXNzYWdlLCB0aW1lU3RhbXA6IG5ldyBEYXRlKCkgfSk7XG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZU1lc3NhZ2UgPSByZXMubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcy5yZXN1bHQ/Lmh0dHBDb2RlID09IDIwMCkge1xuICAgICAgICAgICAgICBpZiAocmVzLnJlc3VsdC5kYXRhLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IHJlcy5yZXN1bHQuZGF0YS5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgICAgICAgICByZXMucmVzdWx0LmRhdGEudGltZVN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gocmVzLnJlc3VsdC5kYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzLnJlc3VsdD8uaHR0cENvZGUgPT0gMjA0KSB7XG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMucHVzaCh7IHJlc3BvbnNlOiByZXMucmVzdWx0Lm1lc3NhZ2UsIHRpbWVTdGFtcDogbmV3IERhdGUoKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2hvdWxkU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm1zZ0NvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5tc2dDb250cm9sLmVuYWJsZSgpO1xuICAgICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBzY3JvbGxUb0xhc3RNZXNzYWdlKCkge1xuICAvLyAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhdENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgLy8gICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgPiBjb250YWluZXIuY2xpZW50SGVpZ2h0KSB7XG4gIC8vICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbEhlaWdodDtcbiAgLy8gICB9XG4gIC8vIH1cbiAgc2Nyb2xsVG9MYXN0TWVzc2FnZSgpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNoYXRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGNvbnRhaW5lciAmJiB0aGlzLmxhc3RNZXNzYWdlUmVmcyAmJiB0aGlzLmxhc3RNZXNzYWdlUmVmcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsYXN0TXNnOiBIVE1MRWxlbWVudCA9IHRoaXMubGFzdE1lc3NhZ2VSZWZzLmxhc3QubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IGxhc3RNc2dSZWN0ID0gbGFzdE1zZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIC8vIElmIGxhc3QgbWVzc2FnZSBpcyBiZWxvdyB0aGUgdmlzaWJsZSBhcmVhIG9mIHRoZSBjb250YWluZXJcbiAgICAgIGlmIChsYXN0TXNnUmVjdC5ib3R0b20gPiBjb250YWluZXJSZWN0LmJvdHRvbSkge1xuICAgICAgICBjb25zdCBzY3JvbGxPZmZzZXQgPSBsYXN0TXNnLm9mZnNldFRvcCAtIGNvbnRhaW5lci5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICB9XG4gICAgICAvLyBJZiBsYXN0IG1lc3NhZ2UgaXMgYWJvdmUgdGhlIHZpc2libGUgYXJlYSBvZiB0aGUgY29udGFpbmVyXG4gICAgICBlbHNlIGlmIChsYXN0TXNnUmVjdC50b3AgPCBjb250YWluZXJSZWN0LnRvcCkge1xuICAgICAgICBjb25zdCBzY3JvbGxPZmZzZXQgPSBsYXN0TXNnLm9mZnNldFRvcCAtIGNvbnRhaW5lci5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICB9XG4gICAgICAvLyBFbHNlLCBpdCdzIGFscmVhZHkgdmlzaWJsZTsgZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG5cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHRoaXMubXNnQ29udHJvbC52YWx1ZT8udHJpbSgpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gU2hpZnQrRW50ZXIgd2lsbCBiZSBhbGxvd2VkIGJ5IGRlZmF1bHRcbiAgfVxuXG4gIGZvY3VzSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMubXNnSW5wdXRSZWYpIHtcbiAgICAgIHRoaXMubXNnSW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0Q2hhdCgpIHtcbiAgICBsZXQgbWVzc2FnZSA9IFt7IHJlc3BvbnNlOiB0aGlzLndlbGNvbWVNZXNzYWdlLCB0aW1lU3RhbXA6IG5ldyBEYXRlKCkgfV1cbiAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZTtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gJyc7XG4gICAgdGhpcy5tc2dDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLnNob3VsZFNjcm9sbCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm1zZ0lucHV0UmVmKSB7XG4gICAgICB0aGlzLm1zZ0lucHV0UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cImlzT3Blbj8nY2hhdC1jb250YWluZXItd3JhcCc6JydcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hhdGJvdC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXRib3Qtc2lkZW5hdlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXQtaGVhZGVyXCI+PHNwYW4+QXBwcmFpc2FsIEFzc2lzdGFudCAoQmV0YSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXQtaGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIi0xXCIgbWF0LWJ1dHRvbiBjbGFzcz1cInJlc2V0LWJ1dHRvbiBzbWFsbF9idG5cIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldENoYXQoKVwiPlJlc2V0XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuPlJlc2V0PC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ29sbGFwc2VcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtLWNlbnRlclwiIChjbGljayk9XCJ0b2dnbGVDaGF0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0VG9vbHRpcD1cIkNvbGxhcHNlXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbS1jZW50ZXIgY29sbGFwc2VfYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUNoYXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXQtbWVzc2FnZXNcIiAjY2hhdENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzOyBsZXQgaXNMYXN0ID0gbGFzdFwiIGNsYXNzPVwibWVzc2FnZS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3VzZXItbWVzc2FnZSc6IG1lc3NhZ2UuaXNVc2VyLCAnYm90LW1lc3NhZ2UnOiAhbWVzc2FnZS5pc1VzZXJ9XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxNXB4O1wiICNsYXN0TWVzc2FnZVJlZj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJtZXNzYWdlLnJlc3BvbnNlIHwgdGV4dFRvSHRtbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVzc2FnZS10aW1lXCI+e3sgbWVzc2FnZS50aW1lU3RhbXAgfCBjaGF0VGltZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImNoYXQtaW5wdXQtY29udGFpbmVyXCIgKHN1Ym1pdCk9XCJzZW5kTWVzc2FnZSgpXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY2hhdC10ZXh0YXJlYVwiIFtmb3JtQ29udHJvbF09XCJtc2dDb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTdGFydCB0eXBpbmcgaGVyZS4uLlwiIHJvd3M9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgI21zZ0lucHV0PjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2RpYW1ldGVyXT1cIjI0XCIgc3Ryb2tlV2lkdGg9XCIzXCIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicmlnaHQ6MjJweFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nIHx8IChtc2dDb250cm9sLnZhbHVlPy50cmltKCk/Lmxlbmd0aCA8PSAwKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAoY2xpY2spPVwic2VuZE1lc3NhZ2UoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhaXNMb2FkaW5nXCI+c2VuZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2RpYW1ldGVyXT1cIjI0XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9tYXQtc3Bpbm5lcj4gLS0+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBbaGFzQmFja2Ryb3BdPVwidHJ1ZVwiIGNsYXNzPVwiY2hhdGJvdC1jb250YWluZXJcIj48bWF0LXNpZGVuYXYgI3NpZGVuYXYgcG9zaXRpb249XCJlbmRcIlxuICAgICAgICAgICAgbW9kZT1cIm92ZXJcIiBbKG9wZW5lZCldPVwiaXNPcGVuXCIgW2Rpc2FibGVDbG9zZV09XCJ0cnVlXCIgY2xhc3M9XCJjaGF0Ym90LXNpZGVuYXZcIj5cbiAgICAgICAgPC9tYXQtc2lkZW5hdj48L21hdC1zaWRlbmF2LWNvbnRhaW5lcj4gLS0+XG48L2Rpdj5cbjwhLS0gPGRpdiAqbmdJZj1cIiFpc09wZW5cIiBjbGFzcz1cImNoYXQtbGF1bmNoZXJcIiAoY2xpY2spPVwidG9nZ2xlQ2hhdCgpXCI+XG4gICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaWNvbnMtY2VsbFwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGlzdC1pY29uc1wiPjNwPC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4gLS0+Il19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcmFpc2FsLWFzc2lzdGFudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvYXBwcmFpc2FsLWFzc2lzdGFudC9hcHByYWlzYWwtYXNzaXN0YW50LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBcHByYWlzYWxDaGF0UmVxdWVzdCB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25JZD86IHN0cmluZztcbn0iXX0=
@@ -1,11 +0,0 @@
1
- import { inject } from "@angular/core";
2
- import { CommonHeaderService } from "./common-header.service";
3
- export class BaseController {
4
- constructor() {
5
- this.commonService = inject(CommonHeaderService);
6
- }
7
- close() {
8
- this.commonService.toggleUtilityContentDrawer();
9
- }
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb250cm9sbGVyLmFic3RyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uLWhlYWRlci9zcmMvbGliL2Jhc2UtY29udHJvbGxlci5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE1BQU0sT0FBZ0IsY0FBYztJQUVoQztRQURVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVqQixLQUFLO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25IZWFkZXJTZXJ2aWNlIH0gZnJvbSBcIi4vY29tbW9uLWhlYWRlci5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29udHJvbGxlciB7XG4gICAgcHJvdGVjdGVkIGNvbW1vblNlcnZpY2UgPSBpbmplY3QoQ29tbW9uSGVhZGVyU2VydmljZSk7XG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2UudG9nZ2xlVXRpbGl0eUNvbnRlbnREcmF3ZXIoKTtcbiAgICB9XG59Il19
@@ -1,14 +0,0 @@
1
- import { inject } from "@angular/core";
2
- import { CommonHeaderService } from "./common-header.service";
3
- export function WithClosable(Base) {
4
- return class extends Base {
5
- constructor() {
6
- super(...arguments);
7
- this._ser = inject(CommonHeaderService);
8
- }
9
- close() {
10
- this._ser.toggleUtilityContentDrawer();
11
- }
12
- };
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvc2FibGUubWl4aW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvY2xvc2FibGUubWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxNQUFNLFVBQVUsWUFBWSxDQUF1QyxJQUFPO0lBQ3RFLE9BQU8sS0FBTSxTQUFRLElBQUk7UUFBbEI7O1lBQ0gsU0FBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBS3ZDLENBQUM7UUFIRyxLQUFLO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzNDLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25IZWFkZXJTZXJ2aWNlIH0gZnJvbSBcIi4vY29tbW9uLWhlYWRlci5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBXaXRoQ2xvc2FibGU8VCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IHt9PihCYXNlOiBUKSB7XG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQmFzZSB7XG4gICAgICAgIF9zZXIgPSBpbmplY3QoQ29tbW9uSGVhZGVyU2VydmljZSk7XG5cbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXIudG9nZ2xlVXRpbGl0eUNvbnRlbnREcmF3ZXIoKTtcbiAgICAgICAgfVxuICAgIH07XG59Il19
@@ -1,3 +0,0 @@
1
- import { InjectionToken } from "@angular/core";
2
- export const UTILITY_WIDGET_CONFIG = new InjectionToken('UTILITY_WIDGET_CONFIG');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS13aWRnZXQtY29uZmlnLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uLWhlYWRlci9zcmMvbGliL3V0aWxpdHktd2lkZ2V0LWNvbmZpZy50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFNLHVCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBjb25zdCBVVElMSVRZX1dJREdFVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignVVRJTElUWV9XSURHRVRfQ09ORklHJyk7Il19
@@ -1,35 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class ChatTimePipe {
4
- transform(value) {
5
- const date = new Date(value);
6
- const now = new Date();
7
- const isToday = date.getDate() === now.getDate() &&
8
- date.getMonth() === now.getMonth() &&
9
- date.getFullYear() === now.getFullYear();
10
- const timeString = date.toLocaleTimeString([], {
11
- hour: '2-digit',
12
- minute: '2-digit',
13
- hour12: true,
14
- });
15
- if (isToday) {
16
- return timeString;
17
- }
18
- const dateString = date.toLocaleDateString([], {
19
- year: 'numeric',
20
- month: 'short',
21
- day: 'numeric',
22
- });
23
- return `${dateString} ${timeString}`;
24
- }
25
- }
26
- ChatTimePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
27
- ChatTimePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ChatTimePipe, isStandalone: true, name: "chatTime" });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatTimePipe, decorators: [{
29
- type: Pipe,
30
- args: [{
31
- name: 'chatTime',
32
- standalone: true
33
- }]
34
- }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC10aW1lLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvdXRpbHMvY2hhdC10aW1lLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxZQUFZO0lBRXZCLFNBQVMsQ0FBQyxLQUE2QjtRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXZCLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsT0FBTztZQUNkLEdBQUcsRUFBRSxTQUFTO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLFVBQVUsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzswR0E1QlUsWUFBWTt3R0FBWixZQUFZOzRGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnY2hhdFRpbWUnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIENoYXRUaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc3QgaXNUb2RheSA9XG4gICAgICBkYXRlLmdldERhdGUoKSA9PT0gbm93LmdldERhdGUoKSAmJlxuICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBub3cuZ2V0TW9udGgoKSAmJlxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSBub3cuZ2V0RnVsbFllYXIoKTtcblxuICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBkYXRlLnRvTG9jYWxlVGltZVN0cmluZyhbXSwge1xuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBob3VyMTI6IHRydWUsXG4gICAgfSk7XG5cbiAgICBpZiAoaXNUb2RheSkge1xuICAgICAgcmV0dXJuIHRpbWVTdHJpbmc7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKFtdLCB7XG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICBtb250aDogJ3Nob3J0JywgLy8gbGlrZSBcIk1heVwiXG4gICAgICBkYXk6ICdudW1lcmljJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBgJHtkYXRlU3RyaW5nfSAke3RpbWVTdHJpbmd9YDtcbiAgfVxuXG59XG4iXX0=
@@ -1,42 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/platform-browser";
4
- /**
5
- * Pipe to convert text with special characters to HTML.
6
- * It replaces:
7
- * - \n with <br>
8
- * - \t with &emsp;
9
- * - \' with '
10
- * - \" with "
11
- * - \\ with \
12
- * - **text** with <strong>text</strong>
13
- * - _text_ with <em>text</em>
14
- */
15
- export class TextToHtmlPipe {
16
- constructor(sanitizer) {
17
- this.sanitizer = sanitizer;
18
- }
19
- transform(value) {
20
- if (!value)
21
- return '';
22
- let html = value
23
- .replace(/\\n|\n/g, '<br>')
24
- .replace(/\\t|\t/g, '&emsp;');
25
- // .replace(/\\'/g, `'`)
26
- // .replace(/\\"/g, '"')
27
- // .replace(/\\\\/g, `\\`)
28
- // .replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
29
- // .replace(/_(.+?)_/g, '<em>$1</em>');
30
- return this.sanitizer.bypassSecurityTrustHtml(html);
31
- }
32
- }
33
- TextToHtmlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TextToHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
34
- TextToHtmlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: TextToHtmlPipe, isStandalone: true, name: "textToHtml" });
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TextToHtmlPipe, decorators: [{
36
- type: Pipe,
37
- args: [{
38
- name: 'textToHtml',
39
- standalone: true
40
- }]
41
- }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10by1odG1sLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyL3NyYy9saWIvdXRpbHMvdGV4dC10by1odG1sLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQUdwRDs7Ozs7Ozs7OztHQVVHO0FBTUgsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUFJLENBQUM7SUFFaEQsU0FBUyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV0QixJQUFJLElBQUksR0FBRyxLQUFLO2FBQ2IsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7YUFDMUIsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMvQix3QkFBd0I7UUFDeEIsd0JBQXdCO1FBQ3hCLDBCQUEwQjtRQUMxQixvREFBb0Q7UUFDcEQsdUNBQXVDO1FBRXZDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDOzs0R0FqQlUsY0FBYzswR0FBZCxjQUFjOzRGQUFkLGNBQWM7a0JBSjFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuLyoqXG4gKiBQaXBlIHRvIGNvbnZlcnQgdGV4dCB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycyB0byBIVE1MLlxuICogSXQgcmVwbGFjZXM6XG4gKiAtIFxcbiB3aXRoIDxicj5cbiAqIC0gXFx0IHdpdGggJmVtc3A7XG4gKiAtIFxcJyB3aXRoICdcbiAqIC0gXFxcIiB3aXRoIFwiXG4gKiAtIFxcXFwgd2l0aCBcXFxuICogLSAqKnRleHQqKiB3aXRoIDxzdHJvbmc+dGV4dDwvc3Ryb25nPlxuICogLSBfdGV4dF8gd2l0aCA8ZW0+dGV4dDwvZW0+XG4gKi9cblxuQFBpcGUoe1xuICBuYW1lOiAndGV4dFRvSHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVGV4dFRvSHRtbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7IH1cblxuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG5cbiAgICBsZXQgaHRtbCA9IHZhbHVlXG4gICAgICAucmVwbGFjZSgvXFxcXG58XFxuL2csICc8YnI+JylcbiAgICAgIC5yZXBsYWNlKC9cXFxcdHxcXHQvZywgJyZlbXNwOycpXG4gICAgLy8gLnJlcGxhY2UoL1xcXFwnL2csIGAnYClcbiAgICAvLyAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgLy8gLnJlcGxhY2UoL1xcXFxcXFxcL2csIGBcXFxcYClcbiAgICAvLyAucmVwbGFjZSgvXFwqXFwqKC4rPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKVxuICAgIC8vIC5yZXBsYWNlKC9fKC4rPylfL2csICc8ZW0+JDE8L2VtPicpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICB9XG5cbn1cbiJdfQ==