@arthakosh/chat-widget 0.2.42 → 0.2.43
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.
|
@@ -51,11 +51,6 @@ export class ChatLauncherComponent {
|
|
|
51
51
|
}, { allowSignalWrites: true });
|
|
52
52
|
}
|
|
53
53
|
ngOnInit() {
|
|
54
|
-
const userId = this.chatService.currentUser().userId;
|
|
55
|
-
if (userId) {
|
|
56
|
-
this.socketService.joinUserChannel(userId);
|
|
57
|
-
}
|
|
58
|
-
console.log('ChatLauncher initialized');
|
|
59
54
|
}
|
|
60
55
|
openNewRoom(roomId, roomHeader, metadata, userId, username, chatUsers) {
|
|
61
56
|
this.isVisible.set(true);
|
|
@@ -97,4 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
97
92
|
type: Component,
|
|
98
93
|
args: [{ selector: 'app-chat-launcher', standalone: true, imports: [CommonModule, ChatWindowComponent, DropdownModule, ButtonModule, ToastModule, FormsModule, TabViewModule, TooltipModule], providers: [MessageService], encapsulation: ViewEncapsulation.Emulated, template: "@if (isVisible()) {\r\n <div class=\"chat-float-wrapper\">\r\n <button (click)=\"closeAll()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\r\n style=\"font-size: 0.5rem\" class=\"closeButton\"></button>\r\n <p-tabView (activeIndexChange)=\"setActive($event)\" [activeIndex]=\"activeIndex()\" [scrollable]=\"true\"\r\n class=\"chat-tabview\">\r\n <p-tabPanel *ngFor=\"let w of openWindows(); let i = index\" [header]=\"w.header\">\r\n <ng-template pTemplate=\"content\">\r\n <app-chat-window (onArchive)=\"closeWindow($event)\"\r\n [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" mode=\"floating\" theme=\"light\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n}\r\n", styles: ["@charset \"UTF-8\";.chat-float-wrapper{position:fixed!important;bottom:16px!important;right:16px!important;z-index:99999;pointer-events:auto}:host{position:fixed;right:16px;bottom:16px;z-index:2147483647;font-family:Arial,sans-serif}:host,:host *{box-sizing:border-box}:host{isolation:isolate}.chat-tabview{width:100%;height:100%}:host ::ng-deep .p-tabview{height:100%;display:flex;flex-direction:column}:host ::ng-deep .p-tabview-nav{flex-shrink:0}:host ::ng-deep .p-tabview-panels{flex:1;overflow:hidden}:host ::ng-deep .p-tabview-panel{height:100%}:host ::ng-deep app-chat-window{display:block;height:100%}.chat-tabview ::ng-deep .p-tabview-nav{background:transparent;border:none;display:flex;gap:8px;padding:6px 4px}.chat-tabview ::ng-deep .p-tabview-nav li{border:none}.chat-tabview ::ng-deep .p-tabview-nav li .p-tabview-nav-link{border:none;border-radius:18px;padding:6px 14px;font-size:13px;font-weight:500;color:#555;box-shadow:0 1px 4px #00000014;transition:all .2s ease;background:#d3d3d3}.chat-tabview ::ng-deep .p-tabview-nav li .p-tabview-nav-link:hover{color:#1a73e8}.chat-tabview ::ng-deep .p-tabview-nav li.p-highlight .p-tabview-nav-link{background:#1a73e8;color:#fff;box-shadow:0 4px 10px #1a73e859;border-bottom:outset;border-color:#1a73e8}.chat-tabview ::ng-deep .p-tabview-ink-bar{display:none}.chat-tabview ::ng-deep .p-tabview-panels{padding:0;border:none;background:transparent}.closeButton{position:absolute;right:0;top:25px;border-radius:50%;border:solid 2px}\n"] }]
|
|
99
94
|
}], ctorParameters: () => [] });
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1sYXVuY2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzFELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7OztBQWlCOUMsTUFBTSxPQUFPLHFCQUFxQjtJQWlCOUI7UUFmQSxXQUFNLEdBQUcsS0FBSyxDQUFT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TUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsU0FBUyxDQUFDLENBQVM7UUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBNUZRLHFCQUFxQjttR0FBckIscUJBQXFCLHkwQkFIbkIsQ0FBQyxjQUFjLENBQUMsMEJDekIvQix1OEJBaUJBLHlnRERLYyxZQUFZLDRKQUFFLG1CQUFtQiw2TEFBRSxjQUFjLHFJQUFFLFlBQVksNE9BQUUsV0FBVyw4QkFBRSxXQUFXLDhCQUFFLGFBQWEsMmtCQUFFLGFBQWE7OzRGQU14SCxxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0ksbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxhQUd2SCxDQUFDLGNBQWMsQ0FBQyxpQkFDWixpQkFBaUIsQ0FBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0NoYXRXaW5kb3dDb21wb25lbnR9IGZyb20gJy4uL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q2hhdFNlcnZpY2V9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvY2hhdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtEcm9wZG93bk1vZHVsZX0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7VG9hc3RNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQge01lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtUYWJWaWV3TW9kdWxlfSBmcm9tICdwcmltZW5nL3RhYnZpZXcnO1xyXG5pbXBvcnQge1NvY2tldFNlcnZpY2V9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gXCJwcmltZW5nL3Rvb2x0aXBcIjtcclxuXHJcbmludGVyZmFjZSBPcGVuQ2hhdFdpbmRvdyB7XHJcbiAgICByb29tSWQ6IHN0cmluZztcclxuICAgIGhlYWRlcjogc3RyaW5nO1xyXG4gICAgbWV0YWRhdGE6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1jaGF0LWxhdW5jaGVyJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaGF0V2luZG93Q29tcG9uZW50LCBEcm9wZG93bk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBUb2FzdE1vZHVsZSwgRm9ybXNNb2R1bGUsIFRhYlZpZXdNb2R1bGUsIFRvb2x0aXBNb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtbGF1bmNoZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2hhdC1sYXVuY2hlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0TGF1bmNoZXJDb21wb25lbnQge1xyXG5cclxuICAgIHJvb21JZCA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgcm9vbUhlYWRlciA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgbWV0YWRhdGEgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICAgIHVzZXIgPSBpbnB1dDxhbnk+KG51bGwpO1xyXG4gICAgdXNlckxpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG4gICAgY2hhdFVzZXJzID0gaW5wdXQ8YW55W10+KFtdKTtcclxuXHJcbiAgICBjaGF0U2VydmljZSA9IGluamVjdChDaGF0U2VydmljZSk7XHJcbiAgICBzb2NrZXRTZXJ2aWNlID0gaW5qZWN0KFNvY2tldFNlcnZpY2UpO1xyXG4gICAgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoTWVzc2FnZVNlcnZpY2UpO1xyXG4gICAgb3BlbldpbmRvd3MgPSBzaWduYWw8T3BlbkNoYXRXaW5kb3dbXT4oW10pO1xyXG4gICAgbGFzdE9wZW5lZFJvb20gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgICBhY3RpdmVJbmRleCA9IHNpZ25hbCgwKTtcclxuICAgIGlzVmlzaWJsZSA9IHNpZ25hbCh0cnVlKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBlZmZlY3QoXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvb21JZCA9IHRoaXMucm9vbUlkKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJvb21IZWFkZXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlcigpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICByb29tSWQ6IHRoaXMucm9vbUlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcklkOiB1c2VyPy51c2VySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlcj8ubmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0U2VydmljZS51c2VyTGlzdC5zZXQodGhpcy51c2VyTGlzdCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXJvb21JZCB8fCAhdXNlcj8udXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXN0T3BlbmVkUm9vbSgpID09PSByb29tSWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RPcGVuZWRSb29tLnNldChyb29tSWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuTmV3Um9vbShyb29tSWQsIGhlYWRlciwgbWV0YWRhdGEsIHVzZXIudXNlcklkLCB1c2VyLm5hbWUsIHRoaXMuY2hhdFVzZXJzKCkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7YWxsb3dTaWduYWxXcml0ZXM6IHRydWV9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBjb25zdCB1c2VySWQgPSB0aGlzLmNoYXRTZXJ2aWNlLmN1cnJlbnRVc2VyKCkudXNlcklkO1xyXG4gICAgICAgIGlmICh1c2VySWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmpvaW5Vc2VyQ2hhbm5lbCh1c2VySWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnQ2hhdExhdW5jaGVyIGluaXRpYWxpemVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Blbk5ld1Jvb20ocm9vbUlkOiBzdHJpbmcsIHJvb21IZWFkZXI6IHN0cmluZywgbWV0YWRhdGE6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcsIGNoYXRVc2VyczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pc1Zpc2libGUuc2V0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuY3JlYXRlUm9vbShyb29tSWQsIHJvb21IZWFkZXIsIG1ldGFkYXRhLCB1c2VySWQsIHVzZXJuYW1lLCBjaGF0VXNlcnMpLnN1YnNjcmliZShyb29tID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRXaW5kb3cocm9vbS5yb29tS2V5LCByb29tLm5hbWUsIHJvb20ubWV0YWRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFdpbmRvdyhyb29tSWQ6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcsIG1ldGFkYXRhOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB3aW5kb3dzID0gdGhpcy5vcGVuV2luZG93cygpO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB3aW5kb3dzLmZpbmRJbmRleCh3ID0+IHcucm9vbUlkID09PSByb29tSWQpO1xyXG5cclxuICAgICAgICAvLyBhbHJlYWR5IG9wZW4g4oaSIGZvY3VzXHJcbiAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXguc2V0KGV4aXN0aW5nSW5kZXgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHdpbmRvd3MubGVuZ3RoO1xyXG5cclxuICAgICAgICB0aGlzLm9wZW5XaW5kb3dzLnVwZGF0ZSh3cyA9PiBbLi4ud3MsIHtyb29tSWQsIGhlYWRlciwgbWV0YWRhdGF9XSk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChuZXdJbmRleCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY2xvc2VXaW5kb3cocm9vbUlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm9wZW5XaW5kb3dzLnVwZGF0ZSh3cyA9PiB3cy5maWx0ZXIodyA9PiB3LnJvb21JZCAhPT0gcm9vbUlkKSk7XHJcbiAgICAgICAgY29uc3Qgd2luZG93cyA9IHRoaXMub3BlbldpbmRvd3MoKTtcclxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHdpbmRvd3MubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXguc2V0KG5ld0luZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRBY3RpdmUoaTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleC5zZXQoaSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VBbGwoKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuV2luZG93cy5zZXQoW10pO1xyXG4gICAgICAgIHRoaXMuaXNWaXNpYmxlLnNldChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIkBpZiAoaXNWaXNpYmxlKCkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJjaGF0LWZsb2F0LXdyYXBwZXJcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZUFsbCgpXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgcEJ1dHRvbiBwVG9vbHRpcD1cIkNsb3NlXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAwLjVyZW1cIiBjbGFzcz1cImNsb3NlQnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgPHAtdGFiVmlldyAoYWN0aXZlSW5kZXhDaGFuZ2UpPVwic2V0QWN0aXZlKCRldmVudClcIiBbYWN0aXZlSW5kZXhdPVwiYWN0aXZlSW5kZXgoKVwiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGF0LXRhYnZpZXdcIj5cclxuICAgICAgICAgICAgPHAtdGFiUGFuZWwgKm5nRm9yPVwibGV0IHcgb2Ygb3BlbldpbmRvd3MoKTsgbGV0IGkgPSBpbmRleFwiIFtoZWFkZXJdPVwidy5oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jaGF0LXdpbmRvdyAob25BcmNoaXZlKT1cImNsb3NlV2luZG93KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoYXRSb29tSWRdPVwidy5yb29tSWRcIiBbaGVhZGVyXT1cIncuaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttZXRhZGF0YV09XCJ3Lm1ldGFkYXRhXCIgbW9kZT1cImZsb2F0aW5nXCIgdGhlbWU9XCJsaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWNoYXQtd2luZG93PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgICAgIDwvcC10YWJWaWV3PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuIl19
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1sYXVuY2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzFELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7OztBQWlCOUMsTUFBTSxPQUFPLHFCQUFxQjtJQWlCOUI7UUFmQSxXQUFNLEdBQUcsS0FBSyxDQUFT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QUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBdkZRLHFCQUFxQjttR0FBckIscUJBQXFCLHkwQkFIbkIsQ0FBQyxjQUFjLENBQUMsMEJDekIvQix1OEJBaUJBLHlnRERLYyxZQUFZLDRKQUFFLG1CQUFtQiw2TEFBRSxjQUFjLHFJQUFFLFlBQVksNE9BQUUsV0FBVyw4QkFBRSxXQUFXLDhCQUFFLGFBQWEsMmtCQUFFLGFBQWE7OzRGQU14SCxxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0ksbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxhQUd2SCxDQUFDLGNBQWMsQ0FBQyxpQkFDWixpQkFBaUIsQ0FBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0NoYXRXaW5kb3dDb21wb25lbnR9IGZyb20gJy4uL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q2hhdFNlcnZpY2V9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvY2hhdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtEcm9wZG93bk1vZHVsZX0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7VG9hc3RNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQge01lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtUYWJWaWV3TW9kdWxlfSBmcm9tICdwcmltZW5nL3RhYnZpZXcnO1xyXG5pbXBvcnQge1NvY2tldFNlcnZpY2V9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gXCJwcmltZW5nL3Rvb2x0aXBcIjtcclxuXHJcbmludGVyZmFjZSBPcGVuQ2hhdFdpbmRvdyB7XHJcbiAgICByb29tSWQ6IHN0cmluZztcclxuICAgIGhlYWRlcjogc3RyaW5nO1xyXG4gICAgbWV0YWRhdGE6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1jaGF0LWxhdW5jaGVyJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaGF0V2luZG93Q29tcG9uZW50LCBEcm9wZG93bk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBUb2FzdE1vZHVsZSwgRm9ybXNNb2R1bGUsIFRhYlZpZXdNb2R1bGUsIFRvb2x0aXBNb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtbGF1bmNoZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2hhdC1sYXVuY2hlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0TGF1bmNoZXJDb21wb25lbnQge1xyXG5cclxuICAgIHJvb21JZCA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgcm9vbUhlYWRlciA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgbWV0YWRhdGEgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICAgIHVzZXIgPSBpbnB1dDxhbnk+KG51bGwpO1xyXG4gICAgdXNlckxpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG4gICAgY2hhdFVzZXJzID0gaW5wdXQ8YW55W10+KFtdKTtcclxuXHJcbiAgICBjaGF0U2VydmljZSA9IGluamVjdChDaGF0U2VydmljZSk7XHJcbiAgICBzb2NrZXRTZXJ2aWNlID0gaW5qZWN0KFNvY2tldFNlcnZpY2UpO1xyXG4gICAgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoTWVzc2FnZVNlcnZpY2UpO1xyXG4gICAgb3BlbldpbmRvd3MgPSBzaWduYWw8T3BlbkNoYXRXaW5kb3dbXT4oW10pO1xyXG4gICAgbGFzdE9wZW5lZFJvb20gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgICBhY3RpdmVJbmRleCA9IHNpZ25hbCgwKTtcclxuICAgIGlzVmlzaWJsZSA9IHNpZ25hbCh0cnVlKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBlZmZlY3QoXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvb21JZCA9IHRoaXMucm9vbUlkKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJvb21IZWFkZXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlcigpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICByb29tSWQ6IHRoaXMucm9vbUlkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcklkOiB1c2VyPy51c2VySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlcj8ubmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0U2VydmljZS51c2VyTGlzdC5zZXQodGhpcy51c2VyTGlzdCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXJvb21JZCB8fCAhdXNlcj8udXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXN0T3BlbmVkUm9vbSgpID09PSByb29tSWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RPcGVuZWRSb29tLnNldChyb29tSWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuTmV3Um9vbShyb29tSWQsIGhlYWRlciwgbWV0YWRhdGEsIHVzZXIudXNlcklkLCB1c2VyLm5hbWUsIHRoaXMuY2hhdFVzZXJzKCkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7YWxsb3dTaWduYWxXcml0ZXM6IHRydWV9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuTmV3Um9vbShyb29tSWQ6IHN0cmluZywgcm9vbUhlYWRlcjogc3RyaW5nLCBtZXRhZGF0YTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgY2hhdFVzZXJzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzVmlzaWJsZS5zZXQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVSb29tKHJvb21JZCwgcm9vbUhlYWRlciwgbWV0YWRhdGEsIHVzZXJJZCwgdXNlcm5hbWUsIGNoYXRVc2Vycykuc3Vic2NyaWJlKHJvb20gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFdpbmRvdyhyb29tLnJvb21LZXksIHJvb20ubmFtZSwgcm9vbS5tZXRhZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkV2luZG93KHJvb21JZDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZywgbWV0YWRhdGE6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd3MgPSB0aGlzLm9wZW5XaW5kb3dzKCk7XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHdpbmRvd3MuZmluZEluZGV4KHcgPT4gdy5yb29tSWQgPT09IHJvb21JZCk7XHJcblxyXG4gICAgICAgIC8vIGFscmVhZHkgb3BlbiDihpIgZm9jdXNcclxuICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleC5zZXQoZXhpc3RpbmdJbmRleCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gd2luZG93cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMub3BlbldpbmRvd3MudXBkYXRlKHdzID0+IFsuLi53cywge3Jvb21JZCwgaGVhZGVyLCBtZXRhZGF0YX1dKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXguc2V0KG5ld0luZGV4KTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjbG9zZVdpbmRvdyhyb29tSWQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMub3BlbldpbmRvd3MudXBkYXRlKHdzID0+IHdzLmZpbHRlcih3ID0+IHcucm9vbUlkICE9PSByb29tSWQpKTtcclxuICAgICAgICBjb25zdCB3aW5kb3dzID0gdGhpcy5vcGVuV2luZG93cygpO1xyXG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gd2luZG93cy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleC5zZXQobmV3SW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShpOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUFsbCgpIHtcclxuICAgICAgICB0aGlzLm9wZW5XaW5kb3dzLnNldChbXSk7XHJcbiAgICAgICAgdGhpcy5pc1Zpc2libGUuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiQGlmIChpc1Zpc2libGUoKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImNoYXQtZmxvYXQtd3JhcHBlclwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlQWxsKClcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uIHBUb29sdGlwPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDAuNXJlbVwiIGNsYXNzPVwiY2xvc2VCdXR0b25cIj48L2J1dHRvbj5cclxuICAgICAgICA8cC10YWJWaWV3IChhY3RpdmVJbmRleENoYW5nZSk9XCJzZXRBY3RpdmUoJGV2ZW50KVwiIFthY3RpdmVJbmRleF09XCJhY3RpdmVJbmRleCgpXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoYXQtdGFidmlld1wiPlxyXG4gICAgICAgICAgICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgdyBvZiBvcGVuV2luZG93cygpOyBsZXQgaSA9IGluZGV4XCIgW2hlYWRlcl09XCJ3LmhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YXBwLWNoYXQtd2luZG93IChvbkFyY2hpdmUpPVwiY2xvc2VXaW5kb3coJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hhdFJvb21JZF09XCJ3LnJvb21JZFwiIFtoZWFkZXJdPVwidy5oZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21ldGFkYXRhXT1cIncubWV0YWRhdGFcIiBtb2RlPVwiZmxvYXRpbmdcIiB0aGVtZT1cImxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY2hhdC13aW5kb3c+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3AtdGFiUGFuZWw+XHJcbiAgICAgICAgPC9wLXRhYlZpZXc+XHJcbiAgICA8L2Rpdj5cclxufVxyXG4iXX0=
|
|
@@ -461,11 +461,6 @@ class ChatLauncherComponent {
|
|
|
461
461
|
}, { allowSignalWrites: true });
|
|
462
462
|
}
|
|
463
463
|
ngOnInit() {
|
|
464
|
-
const userId = this.chatService.currentUser().userId;
|
|
465
|
-
if (userId) {
|
|
466
|
-
this.socketService.joinUserChannel(userId);
|
|
467
|
-
}
|
|
468
|
-
console.log('ChatLauncher initialized');
|
|
469
464
|
}
|
|
470
465
|
openNewRoom(roomId, roomHeader, metadata, userId, username, chatUsers) {
|
|
471
466
|
this.isVisible.set(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arthakosh-chat-widget.mjs","sources":["../../../projects/chat-widget/src/lib/core/config/chat.tokens.ts","../../../projects/chat-widget/src/lib/core/services/socket.service.ts","../../../projects/chat-widget/src/lib/core/services/chat.service.ts","../../../projects/chat-widget/src/lib/chat-window/chat-window.component.ts","../../../projects/chat-widget/src/lib/chat-window/chat-window.component.html","../../../projects/chat-widget/src/lib/chat-launcher/chat-launcher.component.ts","../../../projects/chat-widget/src/lib/chat-launcher/chat-launcher.component.html","../../../projects/chat-widget/src/lib/all-chats/all-chats.component.ts","../../../projects/chat-widget/src/lib/all-chats/all-chats.component.html","../../../projects/chat-widget/src/lib/chat-widget-notification/chat-widget-notification.component.ts","../../../projects/chat-widget/src/lib/chat-widget-notification/chat-widget-notification.component.html","../../../projects/chat-widget/src/lib/chat-widget.module.ts","../../../projects/chat-widget/src/public-api.ts","../../../projects/chat-widget/src/arthakosh-chat-widget.ts"],"sourcesContent":["// chat.tokens.ts\r\nimport { InjectionToken } from '@angular/core';\r\nimport { ChatConfig } from './chat-config';\r\n\r\nexport const CHAT_CONFIG = new InjectionToken<ChatConfig>('CHAT_CONFIG');\r\n","import {Inject, Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {CHAT_CONFIG} from \"../config/chat.tokens\";\r\nimport {ChatConfig} from \"../config/chat-config\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class SocketService {\r\n\r\n private socket!: WebSocket;\r\n private listeners = new Map<string, ((data: any) => void)[]>();\r\n private isConnected = false;\r\n\r\n constructor(@Inject(CHAT_CONFIG) private config: ChatConfig) {\r\n this.connect();\r\n }\r\n\r\n private connect() {\r\n if (this.isConnected) return;\r\n this.socket = new WebSocket(`${this.config.wsBaseUrl}/ws/`);\r\n\r\n this.socket.onopen = () => {\r\n this.isConnected = true;\r\n console.log('[WS] Connected');\r\n };\r\n\r\n this.socket.onmessage = (event) => {\r\n const message = JSON.parse(event.data);\r\n\r\n const eventType = message.type || message.event;\r\n const payload = message.payload ?? message.data;\r\n\r\n const handlers = this.listeners.get(eventType);\r\n\r\n if (handlers && handlers.length) {\r\n handlers.forEach(h => h(payload));\r\n }\r\n };\r\n\r\n\r\n this.socket.onerror = (err) => {\r\n console.error('[WS] Error', err);\r\n };\r\n\r\n this.socket.onclose = () => {\r\n this.isConnected = false;\r\n console.warn('[WS] Disconnected – reconnecting...');\r\n setTimeout(() => this.connect(), 2000);\r\n };\r\n }\r\n\r\n emit(event: string, data?: any) {\r\n if (!this.isConnected || this.socket.readyState !== WebSocket.OPEN) {\r\n console.warn('[WS] Not connected. Dropping event:', event);\r\n return;\r\n }\r\n\r\n this.socket.send(JSON.stringify({ event, data }));\r\n }\r\n\r\n\r\n joinRoom(roomId: string) {\r\n this.emit('joinRoom', roomId);\r\n }\r\n\r\n joinUserChannel(userId: string) {\r\n this.emit('joinUserChannel', userId);\r\n }\r\n\r\n sendMessage(data: any) {\r\n this.emit('sendMessage', data);\r\n }\r\n\r\n messageSeen(data: { chatRoomId: string; userId: string }) {\r\n this.emit('messageSeen', data);\r\n }\r\n\r\n on<T>(event: string): Observable<T> {\r\n return new Observable(sub => {\r\n const handler = (data: T) => sub.next(data);\r\n\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n this.listeners.get(event)!.push(handler);\r\n\r\n return () => {\r\n const arr = this.listeners.get(event) || [];\r\n this.listeners.set(event, arr.filter(h => h !== handler));\r\n };\r\n });\r\n }\r\n\r\n // onNewMessage(cb: (msg: any) => void) {\r\n // this.addListener('newMessage', cb);\r\n // }\r\n //\r\n // offNewMessage(cb?: (msg: any) => void) {\r\n // this.removeListener('newMessage', cb);\r\n // }\r\n //\r\n // onMessageSeen(cb: (data: { chatRoomId: string; userId: string }) => void) {\r\n // this.addListener('messageSeen', cb);\r\n // }\r\n //\r\n // offMessageSeen(cb?: (data: any) => void) {\r\n // this.removeListener('messageSeen', cb);\r\n // }\r\n //\r\n // private addListener(event: string, cb: (data: any) => void) {\r\n // if (!this.listeners.has(event)) {\r\n // this.listeners.set(event, []);\r\n // }\r\n // this.listeners.get(event)!.push(cb);\r\n // }\r\n //\r\n // private removeListener(event: string, cb?: (data: any) => void) {\r\n // if (!cb) {\r\n // this.listeners.delete(event);\r\n // return;\r\n // }\r\n // const arr = this.listeners.get(event) || [];\r\n // this.listeners.set(event, arr.filter(h => h !== cb));\r\n // }\r\n}\r\n","import {Inject, Injectable, signal} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {map} from 'rxjs/operators';\r\nimport {Observable} from 'rxjs';\r\nimport {ChatMessage} from '../models/chat.models';\r\nimport {CHAT_CONFIG} from \"../config/chat.tokens\";\r\nimport {ChatConfig} from \"../config/chat-config\";\r\nimport {ChatNotification} from \"../models/notification.model\";\r\nimport {SocketService} from \"./socket.service\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ChatService {\r\n // private baseUrl = `https://coreuatarthkosh.sarjak.com`;\r\n\r\n currentUser = signal<any | null>(null);\r\n userList = signal<any[]>([]);\r\n archiveRoomId = signal<string>('');\r\n notifications = signal<ChatNotification[]>([]);\r\n hasNewNotification = signal(false);\r\n\r\n constructor(private http: HttpClient,\r\n @Inject(CHAT_CONFIG) private config: ChatConfig,\r\n private socket: SocketService) {\r\n this.listenForNotifications();\r\n }\r\n\r\n get baseUrl() {\r\n return this.config.apiBaseUrl;\r\n }\r\n\r\n /* ---------------- CHAT ROOMS ---------------- */\r\n createRoom(roomId: string, name: string, metadata: string, createdBy: string, username: string, chatUsers: any): Observable<any> {\r\n return this.http.post(`${this.baseUrl}/api/chat/chatrooms/create/${roomId}/`, {\r\n name,\r\n metadata,\r\n createdBy,\r\n username,\r\n chatUsers\r\n });\r\n }\r\n\r\n getRoomUsers(roomId: string): Observable<any[]> {\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/chatrooms/get_user/${roomId}/users/`).pipe(\r\n map(list =>\r\n list.map(u => ({\r\n id: u.UserId,\r\n username: u.UserName\r\n }))\r\n )\r\n );\r\n }\r\n\r\n addUserToRoom(roomId: string, userId: string, userName: string, createdBy: string) {\r\n return this.http.post(`${this.baseUrl}/api/chat/chatrooms/add_user/${roomId}/users/add/`, {\r\n userId,\r\n userName,\r\n createdBy\r\n });\r\n }\r\n\r\n /* ---------------- MESSAGES ---------------- */\r\n getMessages(roomId: string, since?: string): Observable<ChatMessage[]> {\r\n const params: any = {};\r\n if (since) params.since = since;\r\n\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/messages/rooms/all_messages/${roomId}/`, {params}).pipe(\r\n map(list =>\r\n list.map(m => ({\r\n id: m.id,\r\n chatRoomId: m.chatRoomId,\r\n senderId: m.senderId,\r\n senderName: m.senderName,\r\n content: m.content,\r\n replyToMessageId: m.replyToMessageId,\r\n createdAt: m.createdAt,\r\n hasAttachment: m.hasAttachment ?? false,\r\n }))\r\n )\r\n );\r\n }\r\n\r\n sendMessage(\r\n roomId: string,\r\n payload: {\r\n senderId: string;\r\n senderName: string,\r\n content: string;\r\n replyToMessageId?: string | null,\r\n createdBy: string\r\n }\r\n ): Observable<ChatMessage> {\r\n return this.http.post<any>(`${this.baseUrl}/api/chat/messages/rooms/send/${roomId}/`, payload).pipe(\r\n map(m => ({\r\n id: m.id,\r\n chatRoomId: m.chatRoomId,\r\n senderId: m.senderId,\r\n senderName: m.senderName,\r\n content: m.content,\r\n replyToMessageId: m.replyToMessageId,\r\n createdAt: m.createdAt,\r\n hasAttachment: m.hasAttachment ?? false,\r\n }))\r\n );\r\n }\r\n\r\n getRooms(loggedInUserId: string, chatRoomId?: string) {\r\n let url = `${this.baseUrl}/api/chat/chatrooms/${loggedInUserId}`;\r\n if (chatRoomId) {\r\n url += `/${chatRoomId}`;\r\n }\r\n return this.http.get<any[]>(`${url}/`);\r\n }\r\n\r\n\r\n archiveRoom(roomId: string) {\r\n return this.http.delete<any[]>(`${this.baseUrl}/api/chat/chatrooms/archive/${roomId}/`);\r\n }\r\n\r\n private listenForNotifications() {\r\n console.log('Listening for notifications');\r\n // 🔔 ADDED TO ROOM — only added user\r\n this.socket.on('addedToRoom').subscribe((msg: any) => {\r\n console.log('addedToRoom', msg);\r\n if (msg.addedUserId !== this.currentUser().userId) return;\r\n\r\n this.upsertNotification({\r\n roomId: msg.chatRoomId,\r\n roomName: msg.roomName,\r\n type: 'added'\r\n });\r\n });\r\n\r\n // 🔔 NEW MESSAGE — everyone EXCEPT sender\r\n this.socket.on('newMessage').subscribe((msg: any) => {\r\n console.log('newMessage', msg);\r\n if (msg.senderId === this.currentUser().userId) return;\r\n\r\n this.upsertNotification({\r\n roomId: msg.chatRoomId,\r\n type: 'message',\r\n lastMessage: msg.content\r\n });\r\n });\r\n }\r\n\r\n private upsertNotification(data: Partial<ChatNotification>) {\r\n this.notifications.update(list => {\r\n const index = list.findIndex(n => n.roomId === data.roomId);\r\n\r\n if (index !== -1) {\r\n const n = list[index];\r\n list[index] = {\r\n ...n,\r\n unreadCount: n.unreadCount + 1,\r\n lastMessage: data.lastMessage ?? n.lastMessage,\r\n timestamp: Date.now()\r\n };\r\n return [...list];\r\n }\r\n\r\n return [\r\n ...list,\r\n {\r\n roomId: data.roomId!,\r\n roomName: data.roomName,\r\n type: data.type!,\r\n unreadCount: 1,\r\n lastMessage: data.lastMessage,\r\n timestamp: Date.now()\r\n }\r\n ];\r\n });\r\n\r\n this.notifyArrival();\r\n }\r\n\r\n clearRoom(roomId: string) {\r\n this.notifications.update(list =>\r\n list.filter(n => n.roomId !== roomId)\r\n );\r\n }\r\n\r\n clearAll() {\r\n this.notifications.set([]);\r\n }\r\n\r\n notifyArrival() {\r\n this.hasNewNotification.set(true);\r\n // auto-reset after animation\r\n setTimeout(() => {\r\n this.hasNewNotification.set(false);\r\n }, 1200);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n input,\r\n OnInit,\r\n Output,\r\n signal,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {ChatService} from '../core/services/chat.service';\r\nimport {SocketService} from '../core/services/socket.service';\r\nimport {ToastModule} from 'primeng/toast';\r\nimport {MessageService} from 'primeng/api';\r\nimport {ButtonModule} from 'primeng/button';\r\nimport {AvatarModule} from 'primeng/avatar';\r\nimport {TooltipModule} from 'primeng/tooltip';\r\nimport {InputTextareaModule} from 'primeng/inputtextarea';\r\nimport {DropdownModule} from 'primeng/dropdown';\r\nimport {ChipModule} from 'primeng/chip';\r\nimport {ChatMessage} from '../core/models/chat.models';\r\nimport {OverlayPanel, OverlayPanelModule} from 'primeng/overlaypanel';\r\nimport {ChatNotification} from \"../core/models/notification.model\";\r\n\r\n@Component({\r\n selector: 'app-chat-window',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ToastModule,\r\n ButtonModule,\r\n AvatarModule,\r\n TooltipModule,\r\n InputTextareaModule,\r\n ChipModule,\r\n DropdownModule,\r\n OverlayPanelModule\r\n ],\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss'],\r\n providers: [MessageService]\r\n})\r\nexport class ChatWindowComponent implements OnInit {\r\n @Input() chatRoomId!: string;\r\n @Input() header = 'Chat';\r\n @Input() metadata = '';\r\n @Input() chatUsers = [];\r\n @Input() showActions = true;\r\n @Input() mode: 'floating' | 'fullscreen' = 'floating';\r\n @Input() theme: 'light' | 'dark' = 'light';\r\n @Output() onArchive = new EventEmitter();\r\n\r\n refreshRoom = input<boolean>(false);\r\n // @Input() currentUser: any;\r\n\r\n chatService = inject(ChatService);\r\n socket = inject(SocketService);\r\n messageService = inject(MessageService);\r\n\r\n users = signal<any[]>([]);\r\n messages = signal<ChatMessage[]>([]);\r\n newMessage = '';\r\n minimized = false;\r\n loading = false;\r\n replyTo: ChatMessage | null = null;\r\n selectedUser: any;\r\n\r\n @ViewChild('messagesContainer') messagesContainer!: ElementRef<HTMLDivElement>;\r\n @ViewChild('reactionOverlay') reactionOverlay!: OverlayPanel;\r\n\r\n private observer!: MutationObserver;\r\n\r\n showUsers = false;\r\n suggestion = '';\r\n hoveredReactionUsers: string[] = [];\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n if (this.chatRoomId) {\r\n this.socket.joinRoom(this.chatRoomId);\r\n }\r\n this.loadUsers();\r\n this.loadMessages();\r\n this.listenSocket();\r\n }\r\n\r\n loadUsers() {\r\n this.chatService.getRoomUsers(this.chatRoomId).subscribe(users => {\r\n this.users.set(users);\r\n });\r\n }\r\n\r\n loadMessages() {\r\n this.loading = true;\r\n this.chatService.getMessages(this.chatRoomId).subscribe({\r\n next: msgs => {\r\n this.messages.set(msgs);\r\n this.loading = false;\r\n },\r\n error: () => (this.loading = false)\r\n });\r\n }\r\n\r\n listenSocket() {\r\n this.socket.on<ChatMessage>('newMessage').subscribe(msg => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.messages.update(list => [...list, msg]);\r\n }\r\n });\r\n\r\n this.socket.on('roomUserAdded').subscribe((msg: any) => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.loadUsers();\r\n }\r\n });\r\n\r\n this.socket.on('addedToRoom').subscribe((msg: any) => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.loadUsers();\r\n console.log('addedToRoom', msg);\r\n }\r\n });\r\n\r\n this.socket.on('userAlreadyInRoom').subscribe((msg: any) => {\r\n });\r\n }\r\n\r\n send() {\r\n const content = this.newMessage.trim();\r\n if (!content) return;\r\n\r\n this.chatService.sendMessage(this.chatRoomId, {\r\n senderId: this.chatService.currentUser().userId,\r\n senderName: this.chatService.currentUser().name,\r\n content,\r\n replyToMessageId: this.replyTo?.replyToMessageId ?? null,\r\n createdBy: this.chatService.currentUser().userId\r\n }).subscribe(() => {\r\n this.newMessage = '';\r\n this.replyTo = null;\r\n });\r\n }\r\n\r\n addUserToRoom() {\r\n this.chatService.addUserToRoom(\r\n this.chatRoomId,\r\n this.selectedUser?.user_id,\r\n this.selectedUser?.full_name,\r\n this.chatService.currentUser().userId).subscribe((res) => {\r\n });\r\n }\r\n\r\n toggleMinimize() {\r\n this.minimized = !this.minimized;\r\n }\r\n\r\n archiveChat() {\r\n this.chatService.archiveRoom(this.chatRoomId).subscribe({\r\n next: () => {\r\n this.onArchive.emit(this.chatRoomId);\r\n },\r\n error: err => console.error(err)\r\n });\r\n }\r\n\r\n setReply(msg: ChatMessage) {\r\n this.replyTo = msg;\r\n }\r\n\r\n clearReply() {\r\n this.replyTo = null;\r\n }\r\n\r\n trackById(index: number, msg: ChatMessage) {\r\n return msg.id;\r\n }\r\n\r\n ngOnDestroy() {\r\n // this.socket.offNewMessage();\r\n // this.socket.offMessageSeen();\r\n this.observer?.disconnect();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const el = this.messagesContainer.nativeElement;\r\n\r\n this.observer = new MutationObserver(() => {\r\n // 🔥 Scroll AFTER DOM actually changes\r\n el.scrollTop = el.scrollHeight;\r\n });\r\n\r\n this.observer.observe(el, {\r\n childList: true,\r\n subtree: true,\r\n characterData: true\r\n });\r\n }\r\n\r\n toggleUsers() {\r\n this.showUsers = !this.showUsers;\r\n }\r\n}\r\n","<p-toast></p-toast>\r\n\r\n<div [class.dark]=\"theme === 'dark'\" [class.floating]=\"mode === 'floating'\" [class.fullscreen]=\"mode === 'fullscreen'\"\r\n [class.minimized]=\"minimized\" class=\"chat-window\">\r\n <div class=\"chat-header\">\r\n <div style=\"display: flex; flex-direction: column;\">\r\n <div class=\"title\">\r\n <span>{{ header }}</span>\r\n <span *ngIf=\"users().length\">({{ users().length }} {{\r\n users().length == 1 ? 'participant' :\r\n 'participants'\r\n }})</span>\r\n </div>\r\n <div>\r\n <span>{{ metadata }}</span>\r\n </div>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button (click)=\"toggleUsers()\" icon=\"pi pi-users\" pButton pTooltip=\"Toogle Users\"\r\n style=\"font-size: 0.5rem\"></button>\r\n @if (showActions) {\r\n <button (click)=\"toggleMinimize()\" [icon]=\"minimized ? 'pi pi-plus' : 'pi pi-minus'\" pButton\r\n pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!minimized\" class=\"chat-body\">\r\n <div [class.users-hidden]=\"!showUsers\" class=\"chat-layout\">\r\n <div [class.floating]=\"mode === 'floating'\" [class.fullscreen]=\"mode === 'fullscreen'\" class=\"chat-main\">\r\n <div #messagesContainer [class.loading]=\"loading\" class=\"messages\">\r\n <div *ngFor=\"let msg of messages(); trackBy: trackById\" [ngClass]=\"{ outgoing: msg.senderId === chatService.currentUser().userId, incoming: msg.senderId !== chatService.currentUser().userId }\"\r\n class=\"message-row\">\r\n <div class=\"message-bubble\">\r\n <div class=\"message-meta\">\r\n <span class=\"sender\">\r\n <!-- *ngIf=\"msg.senderId !== chatService.currentUser().userId\" -->\r\n {{ msg.senderName }}\r\n </span>\r\n <!-- <span class=\"time\">\r\n {{ msg.createdAt | date: 'shortTime' }}\r\n </span> -->\r\n </div>\r\n\r\n <!-- MESSAGE TEXT -->\r\n <div class=\"message-content\">\r\n {{ msg.content }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"input-area\">\r\n <div *ngIf=\"replyTo\" class=\"reply-banner\">\r\n <span>Replying to: {{ replyTo.content | slice: 0:50 }}</span>\r\n <button (click)=\"clearReply()\" class=\"p-button-text p-button-sm\" icon=\"pi pi-times\"\r\n pButton></button>\r\n </div>\r\n\r\n <textarea (keyup.enter)=\"send()\" [(ngModel)]=\"newMessage\" autoResize=\"true\" pInputTextarea\r\n placeholder=\"Type a message\"\r\n rows=\"2\">\r\n </textarea>\r\n\r\n <div class=\"input-actions\">\r\n <button (click)=\"send()\" icon=\"pi pi-send\" label=\"Send\" pButton></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chat-sidebar\">\r\n <div class=\"section-title\">Users</div>\r\n <div class=\"user-list\">\r\n <div *ngFor=\"let u of users()\" class=\"user-row\">\r\n <p-avatar [label]=\"u.username[0]\"></p-avatar>\r\n <span>{{ u.username }}</span>\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"user-list-add\">\r\n <p-dropdown [(ngModel)]=\"selectedUser\" [options]=\"chatService.userList()\"\r\n optionLabel=\"full_name\"\r\n placeholder=\"Select User\"/>\r\n <div style=\"margin-top: 2em;\">\r\n <button (click)=\"addUserToRoom()\" icon=\"pi pi-plus\" label=\"Add\" pButton></button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import {Component, effect, inject, input, signal, ViewEncapsulation} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ChatWindowComponent} from '../chat-window/chat-window.component';\r\nimport {ChatService} from '../core/services/chat.service';\r\nimport {DropdownModule} from 'primeng/dropdown';\r\nimport {ButtonModule} from 'primeng/button';\r\nimport {ToastModule} from 'primeng/toast';\r\nimport {MessageService} from 'primeng/api';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {TabViewModule} from 'primeng/tabview';\r\nimport {SocketService} from '../core/services/socket.service';\r\nimport {TooltipModule} from \"primeng/tooltip\";\r\n\r\ninterface OpenChatWindow {\r\n roomId: string;\r\n header: string;\r\n metadata: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chat-launcher',\r\n standalone: true,\r\n imports: [CommonModule, ChatWindowComponent, DropdownModule, ButtonModule, ToastModule, FormsModule, TabViewModule, TooltipModule],\r\n templateUrl: './chat-launcher.component.html',\r\n styleUrls: ['./chat-launcher.component.scss'],\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class ChatLauncherComponent {\r\n\r\n roomId = input<string>('');\r\n roomHeader = input<string>('');\r\n metadata = input<string>('');\r\n user = input<any>(null);\r\n userList = input<any[]>([]);\r\n chatUsers = input<any[]>([]);\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n messageService = inject(MessageService);\r\n openWindows = signal<OpenChatWindow[]>([]);\r\n lastOpenedRoom = signal<string | null>(null);\r\n activeIndex = signal(0);\r\n isVisible = signal(true);\r\n\r\n constructor() {\r\n effect(\r\n () => {\r\n const roomId = this.roomId();\r\n const header = this.roomHeader();\r\n const metadata = this.metadata();\r\n const user = this.user();\r\n\r\n this.chatService.currentUser.set({\r\n roomId: this.roomId(),\r\n userId: user?.userId,\r\n name: user?.name\r\n });\r\n\r\n this.chatService.userList.set(this.userList());\r\n\r\n if (!roomId || !user?.userId) return;\r\n if (this.lastOpenedRoom() === roomId) return;\r\n\r\n this.lastOpenedRoom.set(roomId);\r\n this.openNewRoom(roomId, header, metadata, user.userId, user.name, this.chatUsers());\r\n },\r\n {allowSignalWrites: true}\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n const userId = this.chatService.currentUser().userId;\r\n if (userId) {\r\n this.socketService.joinUserChannel(userId);\r\n }\r\n console.log('ChatLauncher initialized');\r\n }\r\n\r\n openNewRoom(roomId: string, roomHeader: string, metadata: string, userId: string, username: string, chatUsers: any) {\r\n this.isVisible.set(true);\r\n this.chatService.createRoom(roomId, roomHeader, metadata, userId, username, chatUsers).subscribe(room => {\r\n this.addWindow(room.roomKey, room.name, room.metadata);\r\n });\r\n }\r\n\r\n addWindow(roomId: string, header: string, metadata: string) {\r\n const windows = this.openWindows();\r\n const existingIndex = windows.findIndex(w => w.roomId === roomId);\r\n\r\n // already open → focus\r\n if (existingIndex !== -1) {\r\n this.activeIndex.set(existingIndex);\r\n return;\r\n }\r\n\r\n const newIndex = windows.length;\r\n\r\n this.openWindows.update(ws => [...ws, {roomId, header, metadata}]);\r\n\r\n setTimeout(() => {\r\n this.activeIndex.set(newIndex);\r\n }, 500);\r\n }\r\n\r\n\r\n closeWindow(roomId: any) {\r\n this.openWindows.update(ws => ws.filter(w => w.roomId !== roomId));\r\n const windows = this.openWindows();\r\n const newIndex = windows.length;\r\n this.activeIndex.set(newIndex);\r\n }\r\n\r\n setActive(i: number) {\r\n this.activeIndex.set(i);\r\n }\r\n\r\n closeAll() {\r\n this.openWindows.set([]);\r\n this.isVisible.set(false);\r\n }\r\n\r\n}\r\n","@if (isVisible()) {\r\n <div class=\"chat-float-wrapper\">\r\n <button (click)=\"closeAll()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\r\n style=\"font-size: 0.5rem\" class=\"closeButton\"></button>\r\n <p-tabView (activeIndexChange)=\"setActive($event)\" [activeIndex]=\"activeIndex()\" [scrollable]=\"true\"\r\n class=\"chat-tabview\">\r\n <p-tabPanel *ngFor=\"let w of openWindows(); let i = index\" [header]=\"w.header\">\r\n <ng-template pTemplate=\"content\">\r\n <app-chat-window (onArchive)=\"closeWindow($event)\"\r\n [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" mode=\"floating\" theme=\"light\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n}\r\n","import { Component, effect, EventEmitter, inject, input, Input, Output, signal } from '@angular/core';\r\nimport { ChatService } from '../core/services/chat.service';\r\nimport { ChatWindowComponent } from \"../chat-window/chat-window.component\";\r\nimport { ChatLauncherComponent } from '../chat-launcher/chat-launcher.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ChipModule } from 'primeng/chip';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { trigger, transition, style, animate } from '@angular/animations';\r\nimport { SocketService } from '../core/services/socket.service';\r\n\r\n@Component({\r\n selector: 'app-all-chats',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ToastModule,\r\n ButtonModule,\r\n AvatarModule,\r\n TooltipModule,\r\n InputTextareaModule,\r\n ChipModule,\r\n DropdownModule,\r\n OverlayPanelModule,\r\n ChatWindowComponent\r\n ],\r\n templateUrl: './all-chats.component.html',\r\n styleUrl: './all-chats.component.scss',\r\n animations: [\r\n trigger('roomSwitch', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'translateX(24px)' }),\r\n animate(\r\n '300ms cubic-bezier(.4,0,.2,1)',\r\n style({ opacity: 1, transform: 'translateX(0)' })\r\n )\r\n ]),\r\n transition(':leave', [\r\n animate(\r\n '200ms ease-in',\r\n style({ opacity: 0, transform: 'translateX(-24px)' })\r\n )\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class AllChatsComponent {\r\n\r\n user = input<any>(null);\r\n roomId = input<any>(null);\r\n chatUsers = signal<any[]>([]);\r\n\r\n @Output() newRoomLoaded = new EventEmitter();\r\n\r\n rooms: any[] = [];\r\n activeRoomId = signal<string>('');\r\n activeRoomHeader = signal<string>('');\r\n activeRoomMetadata = signal<string>('');\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n showMessages: boolean = false\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.user) {\r\n console.error('user is required');\r\n return;\r\n }\r\n\r\n this.chatService.currentUser.set({\r\n roomId: this.activeRoomId,\r\n userId: this.user()?.id,\r\n name: this.user()?.name\r\n });\r\n\r\n this.chatService.getRooms(this.user()?.id, this.roomId())\r\n .subscribe(res => {\r\n this.rooms = res;\r\n if (this.rooms.length != 0) {\r\n this.selectRoom(this.rooms[0]);\r\n this.activeRoomId.set(this.rooms[0].ChatRoomId);\r\n this.activeRoomHeader.set(this.rooms[0].ChatRoomName);\r\n this.activeRoomMetadata.set(this.rooms[0].Metadata);\r\n } else {\r\n this.chatService\r\n .addUserToRoom(\r\n this.roomId(),\r\n this.user()?.id,\r\n this.user()?.name,\r\n this.chatService.currentUser().userId)\r\n .subscribe((res) => {\r\n this.rooms = [];\r\n this.getRooms();\r\n });\r\n }\r\n });\r\n }\r\n\r\n getRooms() {\r\n this.chatService.getRooms(this.user()?.id, this.roomId())\r\n .subscribe(res => {\r\n this.rooms = res;\r\n if (this.rooms.length != 0) {\r\n this.selectRoom(this.rooms[0]);\r\n this.activeRoomId.set(this.rooms[0].ChatRoomId);\r\n this.activeRoomHeader.set(this.rooms[0].ChatRoomName);\r\n this.activeRoomMetadata.set(this.rooms[0].Metadata);\r\n }\r\n });\r\n }\r\n\r\n selectRoom(room: any) {\r\n this.showMessages = false;\r\n this.activeRoomId.set(room.ChatRoomId);\r\n this.activeRoomHeader.set(room.ChatRoomName);\r\n this.activeRoomMetadata.set(room.Metadata);\r\n setTimeout(() => {\r\n this.showMessages = true;\r\n }, 800);\r\n }\r\n}\r\n","<div class=\"chat-page\">\r\n <!-- LEFT SIDEBAR : CHAT ROOMS -->\r\n <aside class=\"chat-sidebar glass\">\r\n <div class=\"sidebar-header\">\r\n <h3>Chat Rooms</h3>\r\n </div>\r\n <ul class=\"room-list\">\r\n <li (click)=\"selectRoom(room)\" *ngFor=\"let room of rooms;\" [class.active]=\"activeRoomId() === room.ChatRoomId\"\r\n class=\"room-item\">\r\n <div class=\"room-avatar\">\r\n <p-avatar [label]=\"room.ChatRoomName[0]\"></p-avatar>\r\n </div>\r\n <div class=\"room-info\">\r\n <span class=\"room-name\">{{ room.ChatRoomName }}</span>\r\n <span class=\"room-name\">{{ room.Metadata }}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </aside>\r\n <!-- RIGHT PANEL : CHAT WINDOW -->\r\n @if (showMessages) {\r\n <section *ngIf=\"showMessages\" @roomSwitch class=\"chat-main glass\">\r\n <app-chat-window [chatRoomId]=\"activeRoomId()\" [header]=\"activeRoomHeader()\" [metadata]=\"activeRoomMetadata()\" [showActions]=\"false\"\r\n mode=\"fullscreen\" theme=\"light\">\r\n </app-chat-window>\r\n </section>\r\n } @else {\r\n <section class=\"chat-main glass loading-container\">\r\n <div class=\"spinner\"></div>\r\n <p>Loading messages…</p>\r\n </section>\r\n }\r\n\r\n</div>","import {Component, computed, inject} from '@angular/core';\r\nimport {ChatService} from \"../core/services/chat.service\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {ChatNotification} from \"../core/models/notification.model\";\r\n\r\n@Component({\r\n selector: 'chat-widget-notification',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule\r\n ],\r\n templateUrl: './chat-widget-notification.component.html',\r\n styleUrl: './chat-widget-notification.component.css'\r\n})\r\nexport class ChatWidgetNotificationComponent {\r\n open = false;\r\n\r\n chatService = inject(ChatService);\r\n notifications = this.chatService.notifications;\r\n hasNew = this.chatService.hasNewNotification;\r\n\r\n totalCount = computed(() =>\r\n this.notifications().reduce((a: any, b: { unreadCount: any; }) => a + b.unreadCount, 0)\r\n );\r\n\r\n constructor(\r\n\r\n ) {}\r\n\r\n toggle() {\r\n this.open = !this.open;\r\n }\r\n\r\n openRoom(n: ChatNotification) {\r\n // this.chatLauncher.openRoom(n.roomId);\r\n this.chatService.clearRoom(n.roomId);\r\n this.open = false;\r\n }\r\n}\r\n","<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"hasNew()\"></i>\r\n\r\n @if (totalCount() > 0) {\r\n <span class=\"dot\"></span>\r\n <span class=\"badge\">{{ totalCount() }}</span>\r\n }\r\n</div>\r\n\r\n@if (open) {\r\n <div class=\"notif-panel\">\r\n<!-- <div class=\"notif-header\">Notifications</div>-->\r\n\r\n <div class=\"notif-list\">\r\n @for (n of notifications(); track n.roomId) {\r\n <div class=\"notif-item\" (click)=\"openRoom(n)\">\r\n <div class=\"notif-left\">\r\n <i class=\"pi pi-comments\"></i>\r\n </div>\r\n\r\n <div class=\"notif-body\">\r\n <div class=\"notif-title\">{{ n.roomName }}</div>\r\n <div class=\"notif-text\">\r\n {{ n.lastMessage || 'You were added to this room' }}\r\n </div>\r\n </div>\r\n\r\n <span class=\"count\">{{ n.unreadCount }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ChatLauncherComponent} from './chat-launcher/chat-launcher.component';\r\nimport {ChatWindowComponent} from './chat-window/chat-window.component';\r\nimport {AllChatsComponent} from './all-chats/all-chats.component';\r\nimport {CHAT_CONFIG} from './core/config/chat.tokens';\r\nimport type {ChatConfig} from './core/config/chat-config';\r\nimport {ChatWidgetNotificationComponent} from \"./chat-widget-notification/chat-widget-notification.component\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ChatLauncherComponent,\r\n ChatWindowComponent,\r\n AllChatsComponent,\r\n ChatWidgetNotificationComponent\r\n ],\r\n exports: [ChatLauncherComponent]\r\n})\r\nexport class ChatWidgetModule {\r\n static forRoot(config: ChatConfig): ModuleWithProviders<ChatWidgetModule> {\r\n return {\r\n ngModule: ChatWidgetModule,\r\n providers: [\r\n {\r\n provide: CHAT_CONFIG,\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of chat-widget\r\n */\r\n\r\nexport * from './lib/chat-widget.module';\r\nexport * from './lib/chat-launcher/chat-launcher.component';\r\nexport * from './lib/all-chats/all-chats.component';\r\nexport * from './lib/core/models/chat.models';\r\nexport * from './lib/chat-widget-notification/chat-widget-notification.component'\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SocketService","i1","i2","i3","i4","i5"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAIO,MAAM,WAAW,GAAG,IAAI,cAAc,CAAa,aAAa,CAAC;;MCE3D,aAAa,CAAA;AAMtB,IAAA,WAAA,CAAyC,MAAkB,EAAA;QAAlB,IAAA,CAAA,MAAM,GAAN,MAAM;AAHvC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAmC;QACtD,IAAA,CAAA,WAAW,GAAG,KAAK;QAGvB,IAAI,CAAC,OAAO,EAAE;IAClB;IAEQ,OAAO,GAAA;QACX,IAAI,IAAI,CAAC,WAAW;YAAE;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAA,IAAA,CAAM,CAAC;AAE3D,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAK;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACjC,QAAA,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,KAAK,KAAI;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YAEtC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK;YAC/C,MAAM,OAAO,GAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI;YAEjD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAE9C,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC7B,gBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;YACrC;AACJ,QAAA,CAAC;QAGD,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,KAAI;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC;AACpC,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAK;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC;YACnD,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC;AAC1C,QAAA,CAAC;IACL;IAEA,IAAI,CAAC,KAAa,EAAE,IAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AAChE,YAAA,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC;YAC1D;QACJ;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD;AAGA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;IACjC;AAEA,IAAA,eAAe,CAAC,MAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACxC;AAEA,IAAA,WAAW,CAAC,IAAS,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;IAClC;AAEA,IAAA,WAAW,CAAC,IAA4C,EAAA;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;IAClC;AAEA,IAAA,EAAE,CAAI,KAAa,EAAA;AACf,QAAA,OAAO,IAAI,UAAU,CAAC,GAAG,IAAG;AACxB,YAAA,MAAM,OAAO,GAAG,CAAC,IAAO,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAE3C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YACjC;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AAExC,YAAA,OAAO,MAAK;AACR,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;gBAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC;AAC7D,YAAA,CAAC;AACL,QAAA,CAAC,CAAC;IACN;AApFS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,kBAMF,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADD,MAAM,EAAA,CAAA,CAAA;;4FAClB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAOf,MAAM;2BAAC,WAAW;;;MCDtB,WAAW,CAAA;AASpB,IAAA,WAAA,CAAoB,IAAgB,EACH,MAAkB,EACvC,MAAqB,EAAA;QAFb,IAAA,CAAA,IAAI,GAAJ,IAAI;QACS,IAAA,CAAA,MAAM,GAAN,MAAM;QAC3B,IAAA,CAAA,MAAM,GAAN,MAAM;;AARlB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAa,IAAI,CAAC;AACtC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAQ,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAS,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAqB,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;QAK9B,IAAI,CAAC,sBAAsB,EAAE;IACjC;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU;IACjC;;IAGA,UAAU,CAAC,MAAc,EAAE,IAAY,EAAE,QAAgB,EAAE,SAAiB,EAAE,QAAgB,EAAE,SAAc,EAAA;AAC1G,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,2BAAA,EAA8B,MAAM,GAAG,EAAE;YAC1E,IAAI;YACJ,QAAQ;YACR,SAAS;YACT,QAAQ;YACR;AACH,SAAA,CAAC;IACN;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,6BAAA,EAAgC,MAAM,SAAS,CAAC,CAAC,IAAI,CAC5F,GAAG,CAAC,IAAI,IACJ,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK;YACX,EAAE,EAAE,CAAC,CAAC,MAAM;YACZ,QAAQ,EAAE,CAAC,CAAC;SACf,CAAC,CAAC,CACN,CACJ;IACL;AAEA,IAAA,aAAa,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,SAAiB,EAAA;AAC7E,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,6BAAA,EAAgC,MAAM,aAAa,EAAE;YACtF,MAAM;YACN,QAAQ;YACR;AACH,SAAA,CAAC;IACN;;IAGA,WAAW,CAAC,MAAc,EAAE,KAAc,EAAA;QACtC,MAAM,MAAM,GAAQ,EAAE;AACtB,QAAA,IAAI,KAAK;AAAE,YAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AAE/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,sCAAA,EAAyC,MAAM,CAAA,CAAA,CAAG,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CACzG,GAAG,CAAC,IAAI,IACJ,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK;YACX,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,SAAS,EAAE,CAAC,CAAC,SAAS;AACtB,YAAA,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,KAAK;SAC1C,CAAC,CAAC,CACN,CACJ;IACL;IAEA,WAAW,CACP,MAAc,EACd,OAMC,EAAA;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,8BAAA,EAAiC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAC/F,GAAG,CAAC,CAAC,KAAK;YACN,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,SAAS,EAAE,CAAC,CAAC,SAAS;AACtB,YAAA,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,KAAK;SAC1C,CAAC,CAAC,CACN;IACL;IAEA,QAAQ,CAAC,cAAsB,EAAE,UAAmB,EAAA;QAChD,IAAI,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,oBAAA,EAAuB,cAAc,CAAA,CAAE;QAChE,IAAI,UAAU,EAAE;AACZ,YAAA,GAAG,IAAI,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;QAC3B;QACA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAC;IAC1C;AAGA,IAAA,WAAW,CAAC,MAAc,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAQ,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,4BAAA,EAA+B,MAAM,CAAA,CAAA,CAAG,CAAC;IAC3F;IAEQ,sBAAsB,GAAA;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;;AAE1C,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;AACjD,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;YAC/B,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;gBAAE;YAEnD,IAAI,CAAC,kBAAkB,CAAC;gBACpB,MAAM,EAAE,GAAG,CAAC,UAAU;gBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;AACtB,gBAAA,IAAI,EAAE;AACT,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;AAChD,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;YAC9B,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;gBAAE;YAEhD,IAAI,CAAC,kBAAkB,CAAC;gBACpB,MAAM,EAAE,GAAG,CAAC,UAAU;AACtB,gBAAA,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,GAAG,CAAC;AACpB,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,kBAAkB,CAAC,IAA+B,EAAA;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAG;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;AAE3D,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACd,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,GAAG;AACV,oBAAA,GAAG,CAAC;AACJ,oBAAA,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC;AAC9B,oBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW;AAC9C,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG;iBACtB;AACD,gBAAA,OAAO,CAAC,GAAG,IAAI,CAAC;YACpB;YAEA,OAAO;AACH,gBAAA,GAAG,IAAI;AACP,gBAAA;oBACI,MAAM,EAAE,IAAI,CAAC,MAAO;oBACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAK;AAChB,oBAAA,WAAW,EAAE,CAAC;oBACd,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG;AACtB;aACJ;AACL,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,SAAS,CAAC,MAAc,EAAA;QACpB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CACxC;IACL;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;QAEjC,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QACtC,CAAC,EAAE,IAAI,CAAC;IACZ;AArLS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,4CAUR,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAVd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADC,MAAM,EAAA,CAAA,CAAA;;4FAClB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAWvB,MAAM;2BAAC,WAAW;;;MC0Bd,mBAAmB,CAAA;AAkC5B,IAAA,WAAA,GAAA;QAhCS,IAAA,CAAA,MAAM,GAAG,MAAM;QACf,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,WAAW,GAAG,IAAI;QAClB,IAAA,CAAA,IAAI,GAA8B,UAAU;QAC5C,IAAA,CAAA,KAAK,GAAqB,OAAO;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAE;AAExC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK,CAAC;;AAGnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAEvC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAQ,EAAE,CAAC;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAgB,EAAE,CAAC;QACpC,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAuB,IAAI;QAQlC,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,oBAAoB,GAAa,EAAE;IAGnC;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QACzC;QACA,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,YAAY,EAAE;IACvB;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AAC7D,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,CAAC,CAAC;IACN;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;YACpD,IAAI,EAAE,IAAI,IAAG;AACT,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACxB,CAAC;YACD,KAAK,EAAE,OAAO,IAAI,CAAC,OAAO,GAAG,KAAK;AACrC,SAAA,CAAC;IACN;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAc,YAAY,CAAC,CAAC,SAAS,CAAC,GAAG,IAAG;YACtD,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;AACpC,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YAChD;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;YACnD,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;gBACpC,IAAI,CAAC,SAAS,EAAE;YACpB;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;YACjD,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;gBACpC,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;YACnC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;AAC3D,QAAA,CAAC,CAAC;IACN;IAEA,IAAI,GAAA;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtC,QAAA,IAAI,CAAC,OAAO;YAAE;QAEd,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE;YAC1C,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM;YAC/C,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI;YAC/C,OAAO;AACP,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,IAAI,IAAI;YACxD,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC7C,SAAA,CAAC,CAAC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,QAAA,CAAC,CAAC;IACN;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAC1B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,YAAY,EAAE,OAAO,EAC1B,IAAI,CAAC,YAAY,EAAE,SAAS,EAC5B,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC7D,QAAA,CAAC,CAAC;IACN;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;IACpC;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;YACpD,IAAI,EAAE,MAAK;gBACP,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC,CAAC;YACD,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG;AAClC,SAAA,CAAC;IACN;AAEA,IAAA,QAAQ,CAAC,GAAgB,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;IACtB;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACvB;IAEA,SAAS,CAAC,KAAa,EAAE,GAAgB,EAAA;QACrC,OAAO,GAAG,CAAC,EAAE;IACjB;IAEA,WAAW,GAAA;;;AAGP,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC/B;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa;AAE/C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAK;;AAEtC,YAAA,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY;AAClC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,aAAa,EAAE;AAClB,SAAA,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;IACpC;+GAhKS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,cAAc,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7C/B,0vJA2FM,EAAA,MAAA,EAAA,CAAA,wjKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3DE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,WAAW,uWACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,0CAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAMb,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;+BACI,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP;wBACL,YAAY;wBACZ,WAAW;wBACX,WAAW;wBACX,YAAY;wBACZ,YAAY;wBACZ,aAAa;wBACb,mBAAmB;wBACnB,UAAU;wBACV,cAAc;wBACd;qBACH,EAAA,SAAA,EAGU,CAAC,cAAc,CAAC,EAAA,QAAA,EAAA,0vJAAA,EAAA,MAAA,EAAA,CAAA,wjKAAA,CAAA,EAAA;wDAGlB,UAAU,EAAA,CAAA;sBAAlB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBAiB+B,iBAAiB,EAAA,CAAA;sBAAhD,SAAS;uBAAC,mBAAmB;gBACA,eAAe,EAAA,CAAA;sBAA5C,SAAS;uBAAC,iBAAiB;;;ME7CnB,qBAAqB,CAAA;AAiB9B,IAAA,WAAA,GAAA;AAfA,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAS,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAM,IAAI,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAQ,EAAE,CAAC;AAC3B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAQ,EAAE,CAAC;AAE5B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAmB,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;QAGpB,MAAM,CACF,MAAK;AACD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAExB,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC;AAC7B,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;gBACrB,MAAM,EAAE,IAAI,EAAE,MAAM;gBACpB,IAAI,EAAE,IAAI,EAAE;AACf,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAE9C,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM;gBAAE;AAC9B,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,MAAM;gBAAE;AAEtC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AACxF,QAAA,CAAC,EACD,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAC5B;IACL;IAEA,QAAQ,GAAA;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM;QACpD,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC;QAC9C;AACA,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAC3C;IAEA,WAAW,CAAC,MAAc,EAAE,UAAkB,EAAE,QAAgB,EAAE,MAAc,EAAE,QAAgB,EAAE,SAAc,EAAA;AAC9G,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AACpG,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC1D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAA;AACtD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;;AAGjE,QAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;YACnC;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM;QAE/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;QAElE,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,CAAC,EAAE,GAAG,CAAC;IACX;AAGA,IAAA,WAAW,CAAC,MAAW,EAAA;QACnB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAClE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;AACf,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;+GA5FS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAHnB,CAAC,cAAc,CAAC,0BCzB/B,u8BAiBA,EAAA,MAAA,EAAA,CAAA,k9CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,6LAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAMxH,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;+BACI,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,SAAA,EAGvH,CAAC,cAAc,CAAC,EAAA,aAAA,EACZ,iBAAiB,CAAC,QAAQ,EAAA,QAAA,EAAA,u8BAAA,EAAA,MAAA,EAAA,CAAA,k9CAAA,CAAA,EAAA;;;ME2BhC,iBAAiB,CAAA;AAiB5B,IAAA,WAAA,GAAA;AAfA,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAM,IAAI,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAM,IAAI,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAQ,EAAE,CAAC;AAEnB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAE;QAE5C,IAAA,CAAA,KAAK,GAAU,EAAE;AACjB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAS,EAAE,CAAC;AACjC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAS,EAAE,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAS,EAAE,CAAC;AAEvC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QACrC,IAAA,CAAA,YAAY,GAAY,KAAK;IAG7B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACjC;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,YAAA,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;aACrD,SAAS,CAAC,GAAG,IAAG;AACf,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;YAChB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACrD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrD;iBAAO;AACL,gBAAA,IAAI,CAAC;AACF,qBAAA,aAAa,CACZ,IAAI,CAAC,MAAM,EAAE,EACb,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EACf,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EACjB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM;AACtC,qBAAA,SAAS,CAAC,CAAC,GAAG,KAAI;AACjB,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;oBACf,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,CAAC,CAAC;YACN;AACF,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;aACrD,SAAS,CAAC,GAAG,IAAG;AACf,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;YAChB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACrD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrD;AACF,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,IAAS,EAAA;AAClB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1C,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;+GA5EW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrD9B,09CAiCM,EAAA,MAAA,EAAA,CAAA,whEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,kOACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAIT;YACV,OAAO,CAAC,YAAY,EAAE;gBACpB,UAAU,CAAC,QAAQ,EAAE;oBACnB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AACpD,oBAAA,OAAO,CACL,+BAA+B,EAC/B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;iBAEpD,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,OAAO,CACL,eAAe,EACf,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;iBAExD;aACF;AACF,SAAA,EAAA,CAAA,CAAA;;4FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApC7B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,WAAW;wBACX,YAAY;wBACZ,YAAY;wBACZ,aAAa;wBACb,mBAAmB;wBACnB,UAAU;wBACV,cAAc;wBACd,kBAAkB;wBAClB;qBACD,EAAA,UAAA,EAGW;wBACV,OAAO,CAAC,YAAY,EAAE;4BACpB,UAAU,CAAC,QAAQ,EAAE;gCACnB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AACpD,gCAAA,OAAO,CACL,+BAA+B,EAC/B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;6BAEpD,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,OAAO,CACL,eAAe,EACf,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;6BAExD;yBACF;AACF,qBAAA,EAAA,QAAA,EAAA,09CAAA,EAAA,MAAA,EAAA,CAAA,whEAAA,CAAA,EAAA;wDAQS,aAAa,EAAA,CAAA;sBAAtB;;;ME3CU,+BAA+B,CAAA;AAWxC,IAAA,WAAA,GAAA;QAVA,IAAA,CAAA,IAAI,GAAG,KAAK;AAEZ,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AAC9C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB;AAE5C,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAClB,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAwB,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAC1F;IAIE;IAEH,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;IAC1B;AAEA,IAAA,QAAQ,CAAC,CAAmB,EAAA;;QAExB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;IACrB;+GAvBS,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB5C,wqCAiCA,EAAA,MAAA,EAAA,CAAA,quDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvBM,YAAY,8BACZ,WAAW,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKJ,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAV3C,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP;wBACL,YAAY;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,wqCAAA,EAAA,MAAA,EAAA,CAAA,quDAAA,CAAA,EAAA;;;MEQU,gBAAgB,CAAA;IACzB,OAAO,OAAO,CAAC,MAAkB,EAAA;QAC7B,OAAO;AACH,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,SAAS,EAAE;AACP,gBAAA;AACI,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,QAAQ,EAAE;AACb;AACJ;SACJ;IACL;+GAXS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YARrB,YAAY;YACZ,qBAAqB;YACrB,mBAAmB;YACnB,iBAAiB;AACjB,YAAA,+BAA+B,aAEzB,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAEtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YARrB,YAAY;YACZ,qBAAqB;YACrB,mBAAmB;YACnB,iBAAiB;YACjB,+BAA+B,CAAA,EAAA,CAAA,CAAA;;4FAI1B,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAX5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,qBAAqB;wBACrB,mBAAmB;wBACnB,iBAAiB;wBACjB;AACH,qBAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB;AAClC,iBAAA;;;ACnBD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"arthakosh-chat-widget.mjs","sources":["../../../projects/chat-widget/src/lib/core/config/chat.tokens.ts","../../../projects/chat-widget/src/lib/core/services/socket.service.ts","../../../projects/chat-widget/src/lib/core/services/chat.service.ts","../../../projects/chat-widget/src/lib/chat-window/chat-window.component.ts","../../../projects/chat-widget/src/lib/chat-window/chat-window.component.html","../../../projects/chat-widget/src/lib/chat-launcher/chat-launcher.component.ts","../../../projects/chat-widget/src/lib/chat-launcher/chat-launcher.component.html","../../../projects/chat-widget/src/lib/all-chats/all-chats.component.ts","../../../projects/chat-widget/src/lib/all-chats/all-chats.component.html","../../../projects/chat-widget/src/lib/chat-widget-notification/chat-widget-notification.component.ts","../../../projects/chat-widget/src/lib/chat-widget-notification/chat-widget-notification.component.html","../../../projects/chat-widget/src/lib/chat-widget.module.ts","../../../projects/chat-widget/src/public-api.ts","../../../projects/chat-widget/src/arthakosh-chat-widget.ts"],"sourcesContent":["// chat.tokens.ts\r\nimport { InjectionToken } from '@angular/core';\r\nimport { ChatConfig } from './chat-config';\r\n\r\nexport const CHAT_CONFIG = new InjectionToken<ChatConfig>('CHAT_CONFIG');\r\n","import {Inject, Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {CHAT_CONFIG} from \"../config/chat.tokens\";\r\nimport {ChatConfig} from \"../config/chat-config\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class SocketService {\r\n\r\n private socket!: WebSocket;\r\n private listeners = new Map<string, ((data: any) => void)[]>();\r\n private isConnected = false;\r\n\r\n constructor(@Inject(CHAT_CONFIG) private config: ChatConfig) {\r\n this.connect();\r\n }\r\n\r\n private connect() {\r\n if (this.isConnected) return;\r\n this.socket = new WebSocket(`${this.config.wsBaseUrl}/ws/`);\r\n\r\n this.socket.onopen = () => {\r\n this.isConnected = true;\r\n console.log('[WS] Connected');\r\n };\r\n\r\n this.socket.onmessage = (event) => {\r\n const message = JSON.parse(event.data);\r\n\r\n const eventType = message.type || message.event;\r\n const payload = message.payload ?? message.data;\r\n\r\n const handlers = this.listeners.get(eventType);\r\n\r\n if (handlers && handlers.length) {\r\n handlers.forEach(h => h(payload));\r\n }\r\n };\r\n\r\n\r\n this.socket.onerror = (err) => {\r\n console.error('[WS] Error', err);\r\n };\r\n\r\n this.socket.onclose = () => {\r\n this.isConnected = false;\r\n console.warn('[WS] Disconnected – reconnecting...');\r\n setTimeout(() => this.connect(), 2000);\r\n };\r\n }\r\n\r\n emit(event: string, data?: any) {\r\n if (!this.isConnected || this.socket.readyState !== WebSocket.OPEN) {\r\n console.warn('[WS] Not connected. Dropping event:', event);\r\n return;\r\n }\r\n\r\n this.socket.send(JSON.stringify({ event, data }));\r\n }\r\n\r\n\r\n joinRoom(roomId: string) {\r\n this.emit('joinRoom', roomId);\r\n }\r\n\r\n joinUserChannel(userId: string) {\r\n this.emit('joinUserChannel', userId);\r\n }\r\n\r\n sendMessage(data: any) {\r\n this.emit('sendMessage', data);\r\n }\r\n\r\n messageSeen(data: { chatRoomId: string; userId: string }) {\r\n this.emit('messageSeen', data);\r\n }\r\n\r\n on<T>(event: string): Observable<T> {\r\n return new Observable(sub => {\r\n const handler = (data: T) => sub.next(data);\r\n\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n this.listeners.get(event)!.push(handler);\r\n\r\n return () => {\r\n const arr = this.listeners.get(event) || [];\r\n this.listeners.set(event, arr.filter(h => h !== handler));\r\n };\r\n });\r\n }\r\n\r\n // onNewMessage(cb: (msg: any) => void) {\r\n // this.addListener('newMessage', cb);\r\n // }\r\n //\r\n // offNewMessage(cb?: (msg: any) => void) {\r\n // this.removeListener('newMessage', cb);\r\n // }\r\n //\r\n // onMessageSeen(cb: (data: { chatRoomId: string; userId: string }) => void) {\r\n // this.addListener('messageSeen', cb);\r\n // }\r\n //\r\n // offMessageSeen(cb?: (data: any) => void) {\r\n // this.removeListener('messageSeen', cb);\r\n // }\r\n //\r\n // private addListener(event: string, cb: (data: any) => void) {\r\n // if (!this.listeners.has(event)) {\r\n // this.listeners.set(event, []);\r\n // }\r\n // this.listeners.get(event)!.push(cb);\r\n // }\r\n //\r\n // private removeListener(event: string, cb?: (data: any) => void) {\r\n // if (!cb) {\r\n // this.listeners.delete(event);\r\n // return;\r\n // }\r\n // const arr = this.listeners.get(event) || [];\r\n // this.listeners.set(event, arr.filter(h => h !== cb));\r\n // }\r\n}\r\n","import {Inject, Injectable, signal} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {map} from 'rxjs/operators';\r\nimport {Observable} from 'rxjs';\r\nimport {ChatMessage} from '../models/chat.models';\r\nimport {CHAT_CONFIG} from \"../config/chat.tokens\";\r\nimport {ChatConfig} from \"../config/chat-config\";\r\nimport {ChatNotification} from \"../models/notification.model\";\r\nimport {SocketService} from \"./socket.service\";\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ChatService {\r\n // private baseUrl = `https://coreuatarthkosh.sarjak.com`;\r\n\r\n currentUser = signal<any | null>(null);\r\n userList = signal<any[]>([]);\r\n archiveRoomId = signal<string>('');\r\n notifications = signal<ChatNotification[]>([]);\r\n hasNewNotification = signal(false);\r\n\r\n constructor(private http: HttpClient,\r\n @Inject(CHAT_CONFIG) private config: ChatConfig,\r\n private socket: SocketService) {\r\n this.listenForNotifications();\r\n }\r\n\r\n get baseUrl() {\r\n return this.config.apiBaseUrl;\r\n }\r\n\r\n /* ---------------- CHAT ROOMS ---------------- */\r\n createRoom(roomId: string, name: string, metadata: string, createdBy: string, username: string, chatUsers: any): Observable<any> {\r\n return this.http.post(`${this.baseUrl}/api/chat/chatrooms/create/${roomId}/`, {\r\n name,\r\n metadata,\r\n createdBy,\r\n username,\r\n chatUsers\r\n });\r\n }\r\n\r\n getRoomUsers(roomId: string): Observable<any[]> {\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/chatrooms/get_user/${roomId}/users/`).pipe(\r\n map(list =>\r\n list.map(u => ({\r\n id: u.UserId,\r\n username: u.UserName\r\n }))\r\n )\r\n );\r\n }\r\n\r\n addUserToRoom(roomId: string, userId: string, userName: string, createdBy: string) {\r\n return this.http.post(`${this.baseUrl}/api/chat/chatrooms/add_user/${roomId}/users/add/`, {\r\n userId,\r\n userName,\r\n createdBy\r\n });\r\n }\r\n\r\n /* ---------------- MESSAGES ---------------- */\r\n getMessages(roomId: string, since?: string): Observable<ChatMessage[]> {\r\n const params: any = {};\r\n if (since) params.since = since;\r\n\r\n return this.http.get<any[]>(`${this.baseUrl}/api/chat/messages/rooms/all_messages/${roomId}/`, {params}).pipe(\r\n map(list =>\r\n list.map(m => ({\r\n id: m.id,\r\n chatRoomId: m.chatRoomId,\r\n senderId: m.senderId,\r\n senderName: m.senderName,\r\n content: m.content,\r\n replyToMessageId: m.replyToMessageId,\r\n createdAt: m.createdAt,\r\n hasAttachment: m.hasAttachment ?? false,\r\n }))\r\n )\r\n );\r\n }\r\n\r\n sendMessage(\r\n roomId: string,\r\n payload: {\r\n senderId: string;\r\n senderName: string,\r\n content: string;\r\n replyToMessageId?: string | null,\r\n createdBy: string\r\n }\r\n ): Observable<ChatMessage> {\r\n return this.http.post<any>(`${this.baseUrl}/api/chat/messages/rooms/send/${roomId}/`, payload).pipe(\r\n map(m => ({\r\n id: m.id,\r\n chatRoomId: m.chatRoomId,\r\n senderId: m.senderId,\r\n senderName: m.senderName,\r\n content: m.content,\r\n replyToMessageId: m.replyToMessageId,\r\n createdAt: m.createdAt,\r\n hasAttachment: m.hasAttachment ?? false,\r\n }))\r\n );\r\n }\r\n\r\n getRooms(loggedInUserId: string, chatRoomId?: string) {\r\n let url = `${this.baseUrl}/api/chat/chatrooms/${loggedInUserId}`;\r\n if (chatRoomId) {\r\n url += `/${chatRoomId}`;\r\n }\r\n return this.http.get<any[]>(`${url}/`);\r\n }\r\n\r\n\r\n archiveRoom(roomId: string) {\r\n return this.http.delete<any[]>(`${this.baseUrl}/api/chat/chatrooms/archive/${roomId}/`);\r\n }\r\n\r\n private listenForNotifications() {\r\n console.log('Listening for notifications');\r\n // 🔔 ADDED TO ROOM — only added user\r\n this.socket.on('addedToRoom').subscribe((msg: any) => {\r\n console.log('addedToRoom', msg);\r\n if (msg.addedUserId !== this.currentUser().userId) return;\r\n\r\n this.upsertNotification({\r\n roomId: msg.chatRoomId,\r\n roomName: msg.roomName,\r\n type: 'added'\r\n });\r\n });\r\n\r\n // 🔔 NEW MESSAGE — everyone EXCEPT sender\r\n this.socket.on('newMessage').subscribe((msg: any) => {\r\n console.log('newMessage', msg);\r\n if (msg.senderId === this.currentUser().userId) return;\r\n\r\n this.upsertNotification({\r\n roomId: msg.chatRoomId,\r\n type: 'message',\r\n lastMessage: msg.content\r\n });\r\n });\r\n }\r\n\r\n private upsertNotification(data: Partial<ChatNotification>) {\r\n this.notifications.update(list => {\r\n const index = list.findIndex(n => n.roomId === data.roomId);\r\n\r\n if (index !== -1) {\r\n const n = list[index];\r\n list[index] = {\r\n ...n,\r\n unreadCount: n.unreadCount + 1,\r\n lastMessage: data.lastMessage ?? n.lastMessage,\r\n timestamp: Date.now()\r\n };\r\n return [...list];\r\n }\r\n\r\n return [\r\n ...list,\r\n {\r\n roomId: data.roomId!,\r\n roomName: data.roomName,\r\n type: data.type!,\r\n unreadCount: 1,\r\n lastMessage: data.lastMessage,\r\n timestamp: Date.now()\r\n }\r\n ];\r\n });\r\n\r\n this.notifyArrival();\r\n }\r\n\r\n clearRoom(roomId: string) {\r\n this.notifications.update(list =>\r\n list.filter(n => n.roomId !== roomId)\r\n );\r\n }\r\n\r\n clearAll() {\r\n this.notifications.set([]);\r\n }\r\n\r\n notifyArrival() {\r\n this.hasNewNotification.set(true);\r\n // auto-reset after animation\r\n setTimeout(() => {\r\n this.hasNewNotification.set(false);\r\n }, 1200);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n input,\r\n OnInit,\r\n Output,\r\n signal,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {ChatService} from '../core/services/chat.service';\r\nimport {SocketService} from '../core/services/socket.service';\r\nimport {ToastModule} from 'primeng/toast';\r\nimport {MessageService} from 'primeng/api';\r\nimport {ButtonModule} from 'primeng/button';\r\nimport {AvatarModule} from 'primeng/avatar';\r\nimport {TooltipModule} from 'primeng/tooltip';\r\nimport {InputTextareaModule} from 'primeng/inputtextarea';\r\nimport {DropdownModule} from 'primeng/dropdown';\r\nimport {ChipModule} from 'primeng/chip';\r\nimport {ChatMessage} from '../core/models/chat.models';\r\nimport {OverlayPanel, OverlayPanelModule} from 'primeng/overlaypanel';\r\nimport {ChatNotification} from \"../core/models/notification.model\";\r\n\r\n@Component({\r\n selector: 'app-chat-window',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ToastModule,\r\n ButtonModule,\r\n AvatarModule,\r\n TooltipModule,\r\n InputTextareaModule,\r\n ChipModule,\r\n DropdownModule,\r\n OverlayPanelModule\r\n ],\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss'],\r\n providers: [MessageService]\r\n})\r\nexport class ChatWindowComponent implements OnInit {\r\n @Input() chatRoomId!: string;\r\n @Input() header = 'Chat';\r\n @Input() metadata = '';\r\n @Input() chatUsers = [];\r\n @Input() showActions = true;\r\n @Input() mode: 'floating' | 'fullscreen' = 'floating';\r\n @Input() theme: 'light' | 'dark' = 'light';\r\n @Output() onArchive = new EventEmitter();\r\n\r\n refreshRoom = input<boolean>(false);\r\n // @Input() currentUser: any;\r\n\r\n chatService = inject(ChatService);\r\n socket = inject(SocketService);\r\n messageService = inject(MessageService);\r\n\r\n users = signal<any[]>([]);\r\n messages = signal<ChatMessage[]>([]);\r\n newMessage = '';\r\n minimized = false;\r\n loading = false;\r\n replyTo: ChatMessage | null = null;\r\n selectedUser: any;\r\n\r\n @ViewChild('messagesContainer') messagesContainer!: ElementRef<HTMLDivElement>;\r\n @ViewChild('reactionOverlay') reactionOverlay!: OverlayPanel;\r\n\r\n private observer!: MutationObserver;\r\n\r\n showUsers = false;\r\n suggestion = '';\r\n hoveredReactionUsers: string[] = [];\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n if (this.chatRoomId) {\r\n this.socket.joinRoom(this.chatRoomId);\r\n }\r\n this.loadUsers();\r\n this.loadMessages();\r\n this.listenSocket();\r\n }\r\n\r\n loadUsers() {\r\n this.chatService.getRoomUsers(this.chatRoomId).subscribe(users => {\r\n this.users.set(users);\r\n });\r\n }\r\n\r\n loadMessages() {\r\n this.loading = true;\r\n this.chatService.getMessages(this.chatRoomId).subscribe({\r\n next: msgs => {\r\n this.messages.set(msgs);\r\n this.loading = false;\r\n },\r\n error: () => (this.loading = false)\r\n });\r\n }\r\n\r\n listenSocket() {\r\n this.socket.on<ChatMessage>('newMessage').subscribe(msg => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.messages.update(list => [...list, msg]);\r\n }\r\n });\r\n\r\n this.socket.on('roomUserAdded').subscribe((msg: any) => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.loadUsers();\r\n }\r\n });\r\n\r\n this.socket.on('addedToRoom').subscribe((msg: any) => {\r\n if (msg.chatRoomId === this.chatRoomId) {\r\n this.loadUsers();\r\n console.log('addedToRoom', msg);\r\n }\r\n });\r\n\r\n this.socket.on('userAlreadyInRoom').subscribe((msg: any) => {\r\n });\r\n }\r\n\r\n send() {\r\n const content = this.newMessage.trim();\r\n if (!content) return;\r\n\r\n this.chatService.sendMessage(this.chatRoomId, {\r\n senderId: this.chatService.currentUser().userId,\r\n senderName: this.chatService.currentUser().name,\r\n content,\r\n replyToMessageId: this.replyTo?.replyToMessageId ?? null,\r\n createdBy: this.chatService.currentUser().userId\r\n }).subscribe(() => {\r\n this.newMessage = '';\r\n this.replyTo = null;\r\n });\r\n }\r\n\r\n addUserToRoom() {\r\n this.chatService.addUserToRoom(\r\n this.chatRoomId,\r\n this.selectedUser?.user_id,\r\n this.selectedUser?.full_name,\r\n this.chatService.currentUser().userId).subscribe((res) => {\r\n });\r\n }\r\n\r\n toggleMinimize() {\r\n this.minimized = !this.minimized;\r\n }\r\n\r\n archiveChat() {\r\n this.chatService.archiveRoom(this.chatRoomId).subscribe({\r\n next: () => {\r\n this.onArchive.emit(this.chatRoomId);\r\n },\r\n error: err => console.error(err)\r\n });\r\n }\r\n\r\n setReply(msg: ChatMessage) {\r\n this.replyTo = msg;\r\n }\r\n\r\n clearReply() {\r\n this.replyTo = null;\r\n }\r\n\r\n trackById(index: number, msg: ChatMessage) {\r\n return msg.id;\r\n }\r\n\r\n ngOnDestroy() {\r\n // this.socket.offNewMessage();\r\n // this.socket.offMessageSeen();\r\n this.observer?.disconnect();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const el = this.messagesContainer.nativeElement;\r\n\r\n this.observer = new MutationObserver(() => {\r\n // 🔥 Scroll AFTER DOM actually changes\r\n el.scrollTop = el.scrollHeight;\r\n });\r\n\r\n this.observer.observe(el, {\r\n childList: true,\r\n subtree: true,\r\n characterData: true\r\n });\r\n }\r\n\r\n toggleUsers() {\r\n this.showUsers = !this.showUsers;\r\n }\r\n}\r\n","<p-toast></p-toast>\r\n\r\n<div [class.dark]=\"theme === 'dark'\" [class.floating]=\"mode === 'floating'\" [class.fullscreen]=\"mode === 'fullscreen'\"\r\n [class.minimized]=\"minimized\" class=\"chat-window\">\r\n <div class=\"chat-header\">\r\n <div style=\"display: flex; flex-direction: column;\">\r\n <div class=\"title\">\r\n <span>{{ header }}</span>\r\n <span *ngIf=\"users().length\">({{ users().length }} {{\r\n users().length == 1 ? 'participant' :\r\n 'participants'\r\n }})</span>\r\n </div>\r\n <div>\r\n <span>{{ metadata }}</span>\r\n </div>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button (click)=\"toggleUsers()\" icon=\"pi pi-users\" pButton pTooltip=\"Toogle Users\"\r\n style=\"font-size: 0.5rem\"></button>\r\n @if (showActions) {\r\n <button (click)=\"toggleMinimize()\" [icon]=\"minimized ? 'pi pi-plus' : 'pi pi-minus'\" pButton\r\n pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!minimized\" class=\"chat-body\">\r\n <div [class.users-hidden]=\"!showUsers\" class=\"chat-layout\">\r\n <div [class.floating]=\"mode === 'floating'\" [class.fullscreen]=\"mode === 'fullscreen'\" class=\"chat-main\">\r\n <div #messagesContainer [class.loading]=\"loading\" class=\"messages\">\r\n <div *ngFor=\"let msg of messages(); trackBy: trackById\" [ngClass]=\"{ outgoing: msg.senderId === chatService.currentUser().userId, incoming: msg.senderId !== chatService.currentUser().userId }\"\r\n class=\"message-row\">\r\n <div class=\"message-bubble\">\r\n <div class=\"message-meta\">\r\n <span class=\"sender\">\r\n <!-- *ngIf=\"msg.senderId !== chatService.currentUser().userId\" -->\r\n {{ msg.senderName }}\r\n </span>\r\n <!-- <span class=\"time\">\r\n {{ msg.createdAt | date: 'shortTime' }}\r\n </span> -->\r\n </div>\r\n\r\n <!-- MESSAGE TEXT -->\r\n <div class=\"message-content\">\r\n {{ msg.content }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"input-area\">\r\n <div *ngIf=\"replyTo\" class=\"reply-banner\">\r\n <span>Replying to: {{ replyTo.content | slice: 0:50 }}</span>\r\n <button (click)=\"clearReply()\" class=\"p-button-text p-button-sm\" icon=\"pi pi-times\"\r\n pButton></button>\r\n </div>\r\n\r\n <textarea (keyup.enter)=\"send()\" [(ngModel)]=\"newMessage\" autoResize=\"true\" pInputTextarea\r\n placeholder=\"Type a message\"\r\n rows=\"2\">\r\n </textarea>\r\n\r\n <div class=\"input-actions\">\r\n <button (click)=\"send()\" icon=\"pi pi-send\" label=\"Send\" pButton></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chat-sidebar\">\r\n <div class=\"section-title\">Users</div>\r\n <div class=\"user-list\">\r\n <div *ngFor=\"let u of users()\" class=\"user-row\">\r\n <p-avatar [label]=\"u.username[0]\"></p-avatar>\r\n <span>{{ u.username }}</span>\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"user-list-add\">\r\n <p-dropdown [(ngModel)]=\"selectedUser\" [options]=\"chatService.userList()\"\r\n optionLabel=\"full_name\"\r\n placeholder=\"Select User\"/>\r\n <div style=\"margin-top: 2em;\">\r\n <button (click)=\"addUserToRoom()\" icon=\"pi pi-plus\" label=\"Add\" pButton></button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import {Component, effect, inject, input, signal, ViewEncapsulation} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ChatWindowComponent} from '../chat-window/chat-window.component';\r\nimport {ChatService} from '../core/services/chat.service';\r\nimport {DropdownModule} from 'primeng/dropdown';\r\nimport {ButtonModule} from 'primeng/button';\r\nimport {ToastModule} from 'primeng/toast';\r\nimport {MessageService} from 'primeng/api';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {TabViewModule} from 'primeng/tabview';\r\nimport {SocketService} from '../core/services/socket.service';\r\nimport {TooltipModule} from \"primeng/tooltip\";\r\n\r\ninterface OpenChatWindow {\r\n roomId: string;\r\n header: string;\r\n metadata: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chat-launcher',\r\n standalone: true,\r\n imports: [CommonModule, ChatWindowComponent, DropdownModule, ButtonModule, ToastModule, FormsModule, TabViewModule, TooltipModule],\r\n templateUrl: './chat-launcher.component.html',\r\n styleUrls: ['./chat-launcher.component.scss'],\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class ChatLauncherComponent {\r\n\r\n roomId = input<string>('');\r\n roomHeader = input<string>('');\r\n metadata = input<string>('');\r\n user = input<any>(null);\r\n userList = input<any[]>([]);\r\n chatUsers = input<any[]>([]);\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n messageService = inject(MessageService);\r\n openWindows = signal<OpenChatWindow[]>([]);\r\n lastOpenedRoom = signal<string | null>(null);\r\n activeIndex = signal(0);\r\n isVisible = signal(true);\r\n\r\n constructor() {\r\n effect(\r\n () => {\r\n const roomId = this.roomId();\r\n const header = this.roomHeader();\r\n const metadata = this.metadata();\r\n const user = this.user();\r\n\r\n this.chatService.currentUser.set({\r\n roomId: this.roomId(),\r\n userId: user?.userId,\r\n name: user?.name\r\n });\r\n\r\n this.chatService.userList.set(this.userList());\r\n\r\n if (!roomId || !user?.userId) return;\r\n if (this.lastOpenedRoom() === roomId) return;\r\n\r\n this.lastOpenedRoom.set(roomId);\r\n this.openNewRoom(roomId, header, metadata, user.userId, user.name, this.chatUsers());\r\n },\r\n {allowSignalWrites: true}\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n openNewRoom(roomId: string, roomHeader: string, metadata: string, userId: string, username: string, chatUsers: any) {\r\n this.isVisible.set(true);\r\n this.chatService.createRoom(roomId, roomHeader, metadata, userId, username, chatUsers).subscribe(room => {\r\n this.addWindow(room.roomKey, room.name, room.metadata);\r\n });\r\n }\r\n\r\n addWindow(roomId: string, header: string, metadata: string) {\r\n const windows = this.openWindows();\r\n const existingIndex = windows.findIndex(w => w.roomId === roomId);\r\n\r\n // already open → focus\r\n if (existingIndex !== -1) {\r\n this.activeIndex.set(existingIndex);\r\n return;\r\n }\r\n\r\n const newIndex = windows.length;\r\n\r\n this.openWindows.update(ws => [...ws, {roomId, header, metadata}]);\r\n\r\n setTimeout(() => {\r\n this.activeIndex.set(newIndex);\r\n }, 500);\r\n }\r\n\r\n\r\n closeWindow(roomId: any) {\r\n this.openWindows.update(ws => ws.filter(w => w.roomId !== roomId));\r\n const windows = this.openWindows();\r\n const newIndex = windows.length;\r\n this.activeIndex.set(newIndex);\r\n }\r\n\r\n setActive(i: number) {\r\n this.activeIndex.set(i);\r\n }\r\n\r\n closeAll() {\r\n this.openWindows.set([]);\r\n this.isVisible.set(false);\r\n }\r\n\r\n}\r\n","@if (isVisible()) {\r\n <div class=\"chat-float-wrapper\">\r\n <button (click)=\"closeAll()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\r\n style=\"font-size: 0.5rem\" class=\"closeButton\"></button>\r\n <p-tabView (activeIndexChange)=\"setActive($event)\" [activeIndex]=\"activeIndex()\" [scrollable]=\"true\"\r\n class=\"chat-tabview\">\r\n <p-tabPanel *ngFor=\"let w of openWindows(); let i = index\" [header]=\"w.header\">\r\n <ng-template pTemplate=\"content\">\r\n <app-chat-window (onArchive)=\"closeWindow($event)\"\r\n [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" mode=\"floating\" theme=\"light\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n}\r\n","import { Component, effect, EventEmitter, inject, input, Input, Output, signal } from '@angular/core';\r\nimport { ChatService } from '../core/services/chat.service';\r\nimport { ChatWindowComponent } from \"../chat-window/chat-window.component\";\r\nimport { ChatLauncherComponent } from '../chat-launcher/chat-launcher.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ChipModule } from 'primeng/chip';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { InputTextareaModule } from 'primeng/inputtextarea';\r\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { trigger, transition, style, animate } from '@angular/animations';\r\nimport { SocketService } from '../core/services/socket.service';\r\n\r\n@Component({\r\n selector: 'app-all-chats',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ToastModule,\r\n ButtonModule,\r\n AvatarModule,\r\n TooltipModule,\r\n InputTextareaModule,\r\n ChipModule,\r\n DropdownModule,\r\n OverlayPanelModule,\r\n ChatWindowComponent\r\n ],\r\n templateUrl: './all-chats.component.html',\r\n styleUrl: './all-chats.component.scss',\r\n animations: [\r\n trigger('roomSwitch', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'translateX(24px)' }),\r\n animate(\r\n '300ms cubic-bezier(.4,0,.2,1)',\r\n style({ opacity: 1, transform: 'translateX(0)' })\r\n )\r\n ]),\r\n transition(':leave', [\r\n animate(\r\n '200ms ease-in',\r\n style({ opacity: 0, transform: 'translateX(-24px)' })\r\n )\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class AllChatsComponent {\r\n\r\n user = input<any>(null);\r\n roomId = input<any>(null);\r\n chatUsers = signal<any[]>([]);\r\n\r\n @Output() newRoomLoaded = new EventEmitter();\r\n\r\n rooms: any[] = [];\r\n activeRoomId = signal<string>('');\r\n activeRoomHeader = signal<string>('');\r\n activeRoomMetadata = signal<string>('');\r\n\r\n chatService = inject(ChatService);\r\n socketService = inject(SocketService);\r\n showMessages: boolean = false\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.user) {\r\n console.error('user is required');\r\n return;\r\n }\r\n\r\n this.chatService.currentUser.set({\r\n roomId: this.activeRoomId,\r\n userId: this.user()?.id,\r\n name: this.user()?.name\r\n });\r\n\r\n this.chatService.getRooms(this.user()?.id, this.roomId())\r\n .subscribe(res => {\r\n this.rooms = res;\r\n if (this.rooms.length != 0) {\r\n this.selectRoom(this.rooms[0]);\r\n this.activeRoomId.set(this.rooms[0].ChatRoomId);\r\n this.activeRoomHeader.set(this.rooms[0].ChatRoomName);\r\n this.activeRoomMetadata.set(this.rooms[0].Metadata);\r\n } else {\r\n this.chatService\r\n .addUserToRoom(\r\n this.roomId(),\r\n this.user()?.id,\r\n this.user()?.name,\r\n this.chatService.currentUser().userId)\r\n .subscribe((res) => {\r\n this.rooms = [];\r\n this.getRooms();\r\n });\r\n }\r\n });\r\n }\r\n\r\n getRooms() {\r\n this.chatService.getRooms(this.user()?.id, this.roomId())\r\n .subscribe(res => {\r\n this.rooms = res;\r\n if (this.rooms.length != 0) {\r\n this.selectRoom(this.rooms[0]);\r\n this.activeRoomId.set(this.rooms[0].ChatRoomId);\r\n this.activeRoomHeader.set(this.rooms[0].ChatRoomName);\r\n this.activeRoomMetadata.set(this.rooms[0].Metadata);\r\n }\r\n });\r\n }\r\n\r\n selectRoom(room: any) {\r\n this.showMessages = false;\r\n this.activeRoomId.set(room.ChatRoomId);\r\n this.activeRoomHeader.set(room.ChatRoomName);\r\n this.activeRoomMetadata.set(room.Metadata);\r\n setTimeout(() => {\r\n this.showMessages = true;\r\n }, 800);\r\n }\r\n}\r\n","<div class=\"chat-page\">\r\n <!-- LEFT SIDEBAR : CHAT ROOMS -->\r\n <aside class=\"chat-sidebar glass\">\r\n <div class=\"sidebar-header\">\r\n <h3>Chat Rooms</h3>\r\n </div>\r\n <ul class=\"room-list\">\r\n <li (click)=\"selectRoom(room)\" *ngFor=\"let room of rooms;\" [class.active]=\"activeRoomId() === room.ChatRoomId\"\r\n class=\"room-item\">\r\n <div class=\"room-avatar\">\r\n <p-avatar [label]=\"room.ChatRoomName[0]\"></p-avatar>\r\n </div>\r\n <div class=\"room-info\">\r\n <span class=\"room-name\">{{ room.ChatRoomName }}</span>\r\n <span class=\"room-name\">{{ room.Metadata }}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </aside>\r\n <!-- RIGHT PANEL : CHAT WINDOW -->\r\n @if (showMessages) {\r\n <section *ngIf=\"showMessages\" @roomSwitch class=\"chat-main glass\">\r\n <app-chat-window [chatRoomId]=\"activeRoomId()\" [header]=\"activeRoomHeader()\" [metadata]=\"activeRoomMetadata()\" [showActions]=\"false\"\r\n mode=\"fullscreen\" theme=\"light\">\r\n </app-chat-window>\r\n </section>\r\n } @else {\r\n <section class=\"chat-main glass loading-container\">\r\n <div class=\"spinner\"></div>\r\n <p>Loading messages…</p>\r\n </section>\r\n }\r\n\r\n</div>","import {Component, computed, inject} from '@angular/core';\r\nimport {ChatService} from \"../core/services/chat.service\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {ChatNotification} from \"../core/models/notification.model\";\r\n\r\n@Component({\r\n selector: 'chat-widget-notification',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule\r\n ],\r\n templateUrl: './chat-widget-notification.component.html',\r\n styleUrl: './chat-widget-notification.component.css'\r\n})\r\nexport class ChatWidgetNotificationComponent {\r\n open = false;\r\n\r\n chatService = inject(ChatService);\r\n notifications = this.chatService.notifications;\r\n hasNew = this.chatService.hasNewNotification;\r\n\r\n totalCount = computed(() =>\r\n this.notifications().reduce((a: any, b: { unreadCount: any; }) => a + b.unreadCount, 0)\r\n );\r\n\r\n constructor(\r\n\r\n ) {}\r\n\r\n toggle() {\r\n this.open = !this.open;\r\n }\r\n\r\n openRoom(n: ChatNotification) {\r\n // this.chatLauncher.openRoom(n.roomId);\r\n this.chatService.clearRoom(n.roomId);\r\n this.open = false;\r\n }\r\n}\r\n","<div (click)=\"toggle()\" class=\"notif-icon\">\r\n <i class=\"pi pi-bell\" [class.pulse]=\"hasNew()\"></i>\r\n\r\n @if (totalCount() > 0) {\r\n <span class=\"dot\"></span>\r\n <span class=\"badge\">{{ totalCount() }}</span>\r\n }\r\n</div>\r\n\r\n@if (open) {\r\n <div class=\"notif-panel\">\r\n<!-- <div class=\"notif-header\">Notifications</div>-->\r\n\r\n <div class=\"notif-list\">\r\n @for (n of notifications(); track n.roomId) {\r\n <div class=\"notif-item\" (click)=\"openRoom(n)\">\r\n <div class=\"notif-left\">\r\n <i class=\"pi pi-comments\"></i>\r\n </div>\r\n\r\n <div class=\"notif-body\">\r\n <div class=\"notif-title\">{{ n.roomName }}</div>\r\n <div class=\"notif-text\">\r\n {{ n.lastMessage || 'You were added to this room' }}\r\n </div>\r\n </div>\r\n\r\n <span class=\"count\">{{ n.unreadCount }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ChatLauncherComponent} from './chat-launcher/chat-launcher.component';\r\nimport {ChatWindowComponent} from './chat-window/chat-window.component';\r\nimport {AllChatsComponent} from './all-chats/all-chats.component';\r\nimport {CHAT_CONFIG} from './core/config/chat.tokens';\r\nimport type {ChatConfig} from './core/config/chat-config';\r\nimport {ChatWidgetNotificationComponent} from \"./chat-widget-notification/chat-widget-notification.component\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ChatLauncherComponent,\r\n ChatWindowComponent,\r\n AllChatsComponent,\r\n ChatWidgetNotificationComponent\r\n ],\r\n exports: [ChatLauncherComponent]\r\n})\r\nexport class ChatWidgetModule {\r\n static forRoot(config: ChatConfig): ModuleWithProviders<ChatWidgetModule> {\r\n return {\r\n ngModule: ChatWidgetModule,\r\n providers: [\r\n {\r\n provide: CHAT_CONFIG,\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of chat-widget\r\n */\r\n\r\nexport * from './lib/chat-widget.module';\r\nexport * from './lib/chat-launcher/chat-launcher.component';\r\nexport * from './lib/all-chats/all-chats.component';\r\nexport * from './lib/core/models/chat.models';\r\nexport * from './lib/chat-widget-notification/chat-widget-notification.component'\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SocketService","i1","i2","i3","i4","i5"],"mappings":"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"}
|