@arthakosh/chat-widget 0.2.25 → 0.2.26

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.
@@ -78,7 +78,7 @@ export class AllChatsComponent {
78
78
  this.activeRoomMetadata.set(room.Metadata);
79
79
  setTimeout(() => {
80
80
  this.showMessages = true;
81
- }, 500);
81
+ }, 800);
82
82
  }
83
83
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AllChatsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
84
84
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AllChatsComponent, isStandalone: true, selector: "app-all-chats", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, roomId: { classPropertyName: "roomId", publicName: "roomId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { newRoomLoaded: "newRoomLoaded" }, ngImport: i0, template: "<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\u2026</p>\r\n </section>\r\n }\r\n\r\n</div>", styles: [":root{--glass-bg: rgba(255, 255, 255, .75);--glass-border: rgba(255, 255, 255, .25);--primary: #5b6dff;--text-dark: #1c1e21;--text-muted: #65676b}*{box-sizing:border-box;font-family:Segoe UI,system-ui,-apple-system,BlinkMacSystemFont}.chat-page{display:flex;height:100vh;padding:16px;gap:16px;background:linear-gradient(135deg,#e9efff,#f6f7fb)}.glass{background:var(--glass-bg);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-radius:18px;border:1px solid var(--glass-border);box-shadow:0 20px 40px #00000014,inset 0 1px #fff6}.chat-sidebar{width:300px;display:flex;flex-direction:column;overflow:hidden}.sidebar-header{padding:18px 20px;font-size:18px;font-weight:700;color:var(--text-dark);border-bottom:1px solid rgba(0,0,0,.06)}.room-list{list-style:none;overflow-y:auto;padding:6px}.room-item{display:flex;align-items:center;gap:14px;padding:12px 14px;border-radius:14px;cursor:pointer;transition:all .25s ease;margin-bottom:6px}.room-item:hover{background:#5b6dff14}.room-item.active{background:#5b6dff26;box-shadow:inset 0 0 0 1px #5b6dff40}.room-avatar p-avatar{width:44px;height:44px;border-radius:50%;background:linear-gradient(135deg,#5b6dff,#7a89ff);color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center}.room-info{display:flex;flex-direction:column;overflow:hidden}.room-name{font-size:14px;font-weight:600;color:var(--text-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-info span:last-child{font-size:12px;color:var(--text-muted)}.chat-main{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative}.chat-main:after{content:\"\";position:absolute;inset:0;border-radius:18px;pointer-events:none;box-shadow:inset 0 0 0 1px #fff3}.room-item:hover{transform:translateY(-1px)}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.spinner{width:40px;height:40px;border:4px solid rgba(0,0,0,.1);border-top-color:#4f46e5;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ToastModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: OverlayPanelModule }, { kind: "component", type: ChatWindowComponent, selector: "app-chat-window", inputs: ["chatRoomId", "header", "metadata", "chatUsers", "showActions", "mode", "theme", "refreshRoom"], outputs: ["onArchive", "onClose"] }], animations: [
@@ -121,4 +121,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
121
121
  }], ctorParameters: () => [], propDecorators: { newRoomLoaded: [{
122
122
  type: Output
123
123
  }] } });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLWNoYXRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtd2lkZ2V0L3NyYy9saWIvYWxsLWNoYXRzL2FsbC1jaGF0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2FsbC1jaGF0cy9hbGwtY2hhdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUs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K0IsRUFDL0IsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FDbEQ7NkJBQ0YsQ0FBQzs0QkFDRixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixPQUFPLENBQ0wsZUFBZSxFQUNmLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FDdEQ7NkJBQ0YsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIO3dEQVFTLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIGlucHV0LCBJbnB1dCwgT3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3NlcnZpY2VzL2NoYXQuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXRXaW5kb3dDb21wb25lbnQgfSBmcm9tIFwiLi4vY2hhdC13aW5kb3cvY2hhdC13aW5kb3cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENoYXRMYXVuY2hlckNvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXZhdGFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hdmF0YXInO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IENoaXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoaXAnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRhcmVhTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU29ja2V0U2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYWxsLWNoYXRzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVG9hc3RNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBBdmF0YXJNb2R1bGUsXHJcbiAgICBUb29sdGlwTW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0YXJlYU1vZHVsZSxcclxuICAgIENoaXBNb2R1bGUsXHJcbiAgICBEcm9wZG93bk1vZHVsZSxcclxuICAgIE92ZXJsYXlQYW5lbE1vZHVsZSxcclxuICAgIENoYXRXaW5kb3dDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGwtY2hhdHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hbGwtY2hhdHMuY29tcG9uZW50LnNjc3MnLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3Jvb21Td2l0Y2gnLCBbXHJcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMjRweCknIH0pLFxyXG4gICAgICAgIGFuaW1hdGUoXHJcbiAgICAgICAgICAnMzAwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSknLFxyXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyB9KVxyXG4gICAgICAgIClcclxuICAgICAgXSksXHJcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcclxuICAgICAgICBhbmltYXRlKFxyXG4gICAgICAgICAgJzIwMG1zIGVhc2UtaW4nLFxyXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC0yNHB4KScgfSlcclxuICAgICAgICApXHJcbiAgICAgIF0pXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFsbENoYXRzQ29tcG9uZW50IHtcclxuXHJcbiAgdXNlciA9IGlucHV0PGFueT4obnVsbCk7XHJcbiAgcm9vbUlkID0gaW5wdXQ8YW55PihudWxsKTtcclxuICBjaGF0VXNlcnMgPSBzaWduYWw8YW55W10+KFtdKTtcclxuXHJcbiAgQE91dHB1dCgpIG5ld1Jvb21Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHJvb21zOiBhbnlbXSA9IFtdO1xyXG4gIGFjdGl2ZVJvb21JZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICBhY3RpdmVSb29tSGVhZGVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIGFjdGl2ZVJvb21NZXRhZGF0YSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgY2hhdFNlcnZpY2UgPSBpbmplY3QoQ2hhdFNlcnZpY2UpO1xyXG4gIHNvY2tldFNlcnZpY2UgPSBpbmplY3QoU29ja2V0U2VydmljZSk7XHJcbiAgc2hvd01lc3NhZ2VzOiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy51c2VyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VzZXIgaXMgcmVxdWlyZWQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIuc2V0KHtcclxuICAgICAgcm9vbUlkOiB0aGlzLmFjdGl2ZVJvb21JZCxcclxuICAgICAgdXNlcklkOiB0aGlzLnVzZXIoKT8uaWQsXHJcbiAgICAgIG5hbWU6IHRoaXMudXNlcigpPy5uYW1lXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb21zKHRoaXMudXNlcigpPy5pZCwgdGhpcy5yb29tSWQoKSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMucm9vbXMgPSByZXM7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vbXMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0Um9vbSh0aGlzLnJvb21zWzBdKTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlUm9vbUlkLnNldCh0aGlzLnJvb21zWzBdLkNoYXRSb29tSWQpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVSb29tSGVhZGVyLnNldCh0aGlzLnJvb21zWzBdLkNoYXRSb29tTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVJvb21NZXRhZGF0YS5zZXQodGhpcy5yb29tc1swXS5NZXRhZGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2VcclxuICAgICAgICAgICAgLmFkZFVzZXJUb1Jvb20oXHJcbiAgICAgICAgICAgICAgdGhpcy5yb29tSWQoKSxcclxuICAgICAgICAgICAgICB0aGlzLnVzZXIoKT8uaWQsXHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyKCk/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0Um9vbXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFJvb21zKCkge1xyXG4gICAgdGhpcy5jaGF0U2VydmljZS5nZXRSb29tcyh0aGlzLnVzZXIoKT8uaWQsIHRoaXMucm9vbUlkKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLnJvb21zID0gcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb21zLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdFJvb20odGhpcy5yb29tc1swXSk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVJvb21JZC5zZXQodGhpcy5yb29tc1swXS5DaGF0Um9vbUlkKTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlUm9vbUhlYWRlci5zZXQodGhpcy5yb29tc1swXS5DaGF0Um9vbU5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVSb29tTWV0YWRhdGEuc2V0KHRoaXMucm9vbXNbMF0uTWV0YWRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RSb29tKHJvb206IGFueSkge1xyXG4gICAgdGhpcy5zaG93TWVzc2FnZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuYWN0aXZlUm9vbUlkLnNldChyb29tLkNoYXRSb29tSWQpO1xyXG4gICAgdGhpcy5hY3RpdmVSb29tSGVhZGVyLnNldChyb29tLkNoYXRSb29tTmFtZSk7XHJcbiAgICB0aGlzLmFjdGl2ZVJvb21NZXRhZGF0YS5zZXQocm9vbS5NZXRhZGF0YSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZXMgPSB0cnVlO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNoYXQtcGFnZVwiPlxyXG4gICAgPCEtLSBMRUZUIFNJREVCQVIgOiBDSEFUIFJPT01TIC0tPlxyXG4gICAgPGFzaWRlIGNsYXNzPVwiY2hhdC1zaWRlYmFyIGdsYXNzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXItaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxoMz5DaGF0IFJvb21zPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJyb29tLWxpc3RcIj5cclxuICAgICAgICAgICAgPGxpIChjbGljayk9XCJzZWxlY3RSb29tKHJvb20pXCIgKm5nRm9yPVwibGV0IHJvb20gb2Ygcm9vbXM7XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVSb29tSWQoKSA9PT0gcm9vbS5DaGF0Um9vbUlkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicm9vbS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9vbS1hdmF0YXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1hdmF0YXIgW2xhYmVsXT1cInJvb20uQ2hhdFJvb21OYW1lWzBdXCI+PC9wLWF2YXRhcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvb20taW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm9vbS1uYW1lXCI+e3sgcm9vbS5DaGF0Um9vbU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb29tLW5hbWVcIj57eyByb29tLk1ldGFkYXRhIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvYXNpZGU+XHJcbiAgICA8IS0tIFJJR0hUIFBBTkVMIDogQ0hBVCBXSU5ET1cgLS0+XHJcbiAgICBAaWYgKHNob3dNZXNzYWdlcykge1xyXG4gICAgICAgIDxzZWN0aW9uICpuZ0lmPVwic2hvd01lc3NhZ2VzXCIgQHJvb21Td2l0Y2ggY2xhc3M9XCJjaGF0LW1haW4gZ2xhc3NcIj5cclxuICAgICAgICAgICAgPGFwcC1jaGF0LXdpbmRvdyBbY2hhdFJvb21JZF09XCJhY3RpdmVSb29tSWQoKVwiIFtoZWFkZXJdPVwiYWN0aXZlUm9vbUhlYWRlcigpXCIgW21ldGFkYXRhXT1cImFjdGl2ZVJvb21NZXRhZGF0YSgpXCIgW3Nob3dBY3Rpb25zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPVwiZnVsbHNjcmVlblwiIHRoZW1lPVwibGlnaHRcIj5cclxuICAgICAgICAgICAgPC9hcHAtY2hhdC13aW5kb3c+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaGF0LW1haW4gZ2xhc3MgbG9hZGluZy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPHA+TG9hZGluZyBtZXNzYWdlc+KApjwvcD5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICB9XHJcblxyXG48L2Rpdj4iXX0=
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLWNoYXRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtd2lkZ2V0L3NyYy9saWIvYWxsLWNoYXRzL2FsbC1jaGF0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2FsbC1jaGF0cy9hbGwtY2hhdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUs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K0IsRUFDL0IsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FDbEQ7NkJBQ0YsQ0FBQzs0QkFDRixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixPQUFPLENBQ0wsZUFBZSxFQUNmLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FDdEQ7NkJBQ0YsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIO3dEQVFTLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIGlucHV0LCBJbnB1dCwgT3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3NlcnZpY2VzL2NoYXQuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXRXaW5kb3dDb21wb25lbnQgfSBmcm9tIFwiLi4vY2hhdC13aW5kb3cvY2hhdC13aW5kb3cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENoYXRMYXVuY2hlckNvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXZhdGFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hdmF0YXInO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IENoaXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoaXAnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRhcmVhTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU29ja2V0U2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYWxsLWNoYXRzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVG9hc3RNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBBdmF0YXJNb2R1bGUsXHJcbiAgICBUb29sdGlwTW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0YXJlYU1vZHVsZSxcclxuICAgIENoaXBNb2R1bGUsXHJcbiAgICBEcm9wZG93bk1vZHVsZSxcclxuICAgIE92ZXJsYXlQYW5lbE1vZHVsZSxcclxuICAgIENoYXRXaW5kb3dDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGwtY2hhdHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hbGwtY2hhdHMuY29tcG9uZW50LnNjc3MnLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3Jvb21Td2l0Y2gnLCBbXHJcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMjRweCknIH0pLFxyXG4gICAgICAgIGFuaW1hdGUoXHJcbiAgICAgICAgICAnMzAwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSknLFxyXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyB9KVxyXG4gICAgICAgIClcclxuICAgICAgXSksXHJcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcclxuICAgICAgICBhbmltYXRlKFxyXG4gICAgICAgICAgJzIwMG1zIGVhc2UtaW4nLFxyXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC0yNHB4KScgfSlcclxuICAgICAgICApXHJcbiAgICAgIF0pXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFsbENoYXRzQ29tcG9uZW50IHtcclxuXHJcbiAgdXNlciA9IGlucHV0PGFueT4obnVsbCk7XHJcbiAgcm9vbUlkID0gaW5wdXQ8YW55PihudWxsKTtcclxuICBjaGF0VXNlcnMgPSBzaWduYWw8YW55W10+KFtdKTtcclxuXHJcbiAgQE91dHB1dCgpIG5ld1Jvb21Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHJvb21zOiBhbnlbXSA9IFtdO1xyXG4gIGFjdGl2ZVJvb21JZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICBhY3RpdmVSb29tSGVhZGVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIGFjdGl2ZVJvb21NZXRhZGF0YSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgY2hhdFNlcnZpY2UgPSBpbmplY3QoQ2hhdFNlcnZpY2UpO1xyXG4gIHNvY2tldFNlcnZpY2UgPSBpbmplY3QoU29ja2V0U2VydmljZSk7XHJcbiAgc2hvd01lc3NhZ2VzOiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy51c2VyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VzZXIgaXMgcmVxdWlyZWQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIuc2V0KHtcclxuICAgICAgcm9vbUlkOiB0aGlzLmFjdGl2ZVJvb21JZCxcclxuICAgICAgdXNlcklkOiB0aGlzLnVzZXIoKT8uaWQsXHJcbiAgICAgIG5hbWU6IHRoaXMudXNlcigpPy5uYW1lXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb21zKHRoaXMudXNlcigpPy5pZCwgdGhpcy5yb29tSWQoKSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMucm9vbXMgPSByZXM7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vbXMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0Um9vbSh0aGlzLnJvb21zWzBdKTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlUm9vbUlkLnNldCh0aGlzLnJvb21zWzBdLkNoYXRSb29tSWQpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVSb29tSGVhZGVyLnNldCh0aGlzLnJvb21zWzBdLkNoYXRSb29tTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVJvb21NZXRhZGF0YS5zZXQodGhpcy5yb29tc1swXS5NZXRhZGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2VcclxuICAgICAgICAgICAgLmFkZFVzZXJUb1Jvb20oXHJcbiAgICAgICAgICAgICAgdGhpcy5yb29tSWQoKSxcclxuICAgICAgICAgICAgICB0aGlzLnVzZXIoKT8uaWQsXHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyKCk/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0Um9vbXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFJvb21zKCkge1xyXG4gICAgdGhpcy5jaGF0U2VydmljZS5nZXRSb29tcyh0aGlzLnVzZXIoKT8uaWQsIHRoaXMucm9vbUlkKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLnJvb21zID0gcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb21zLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdFJvb20odGhpcy5yb29tc1swXSk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVJvb21JZC5zZXQodGhpcy5yb29tc1swXS5DaGF0Um9vbUlkKTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlUm9vbUhlYWRlci5zZXQodGhpcy5yb29tc1swXS5DaGF0Um9vbU5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVSb29tTWV0YWRhdGEuc2V0KHRoaXMucm9vbXNbMF0uTWV0YWRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RSb29tKHJvb206IGFueSkge1xyXG4gICAgdGhpcy5zaG93TWVzc2FnZXMgPSBmYWxzZTtcclxuICAgIHRoaXMuYWN0aXZlUm9vbUlkLnNldChyb29tLkNoYXRSb29tSWQpO1xyXG4gICAgdGhpcy5hY3RpdmVSb29tSGVhZGVyLnNldChyb29tLkNoYXRSb29tTmFtZSk7XHJcbiAgICB0aGlzLmFjdGl2ZVJvb21NZXRhZGF0YS5zZXQocm9vbS5NZXRhZGF0YSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZXMgPSB0cnVlO1xyXG4gICAgfSwgODAwKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNoYXQtcGFnZVwiPlxyXG4gICAgPCEtLSBMRUZUIFNJREVCQVIgOiBDSEFUIFJPT01TIC0tPlxyXG4gICAgPGFzaWRlIGNsYXNzPVwiY2hhdC1zaWRlYmFyIGdsYXNzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXItaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxoMz5DaGF0IFJvb21zPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJyb29tLWxpc3RcIj5cclxuICAgICAgICAgICAgPGxpIChjbGljayk9XCJzZWxlY3RSb29tKHJvb20pXCIgKm5nRm9yPVwibGV0IHJvb20gb2Ygcm9vbXM7XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVSb29tSWQoKSA9PT0gcm9vbS5DaGF0Um9vbUlkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicm9vbS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9vbS1hdmF0YXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1hdmF0YXIgW2xhYmVsXT1cInJvb20uQ2hhdFJvb21OYW1lWzBdXCI+PC9wLWF2YXRhcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvb20taW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm9vbS1uYW1lXCI+e3sgcm9vbS5DaGF0Um9vbU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb29tLW5hbWVcIj57eyByb29tLk1ldGFkYXRhIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvYXNpZGU+XHJcbiAgICA8IS0tIFJJR0hUIFBBTkVMIDogQ0hBVCBXSU5ET1cgLS0+XHJcbiAgICBAaWYgKHNob3dNZXNzYWdlcykge1xyXG4gICAgICAgIDxzZWN0aW9uICpuZ0lmPVwic2hvd01lc3NhZ2VzXCIgQHJvb21Td2l0Y2ggY2xhc3M9XCJjaGF0LW1haW4gZ2xhc3NcIj5cclxuICAgICAgICAgICAgPGFwcC1jaGF0LXdpbmRvdyBbY2hhdFJvb21JZF09XCJhY3RpdmVSb29tSWQoKVwiIFtoZWFkZXJdPVwiYWN0aXZlUm9vbUhlYWRlcigpXCIgW21ldGFkYXRhXT1cImFjdGl2ZVJvb21NZXRhZGF0YSgpXCIgW3Nob3dBY3Rpb25zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPVwiZnVsbHNjcmVlblwiIHRoZW1lPVwibGlnaHRcIj5cclxuICAgICAgICAgICAgPC9hcHAtY2hhdC13aW5kb3c+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaGF0LW1haW4gZ2xhc3MgbG9hZGluZy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPHA+TG9hZGluZyBtZXNzYWdlc+KApjwvcD5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICB9XHJcblxyXG48L2Rpdj4iXX0=
@@ -76,7 +76,9 @@ export class ChatLauncherComponent {
76
76
  this.activeIndex.set(i);
77
77
  }
78
78
  closeAll() {
79
- this.openWindows.set([]);
79
+ this.openWindows.update(() => []);
80
+ this.lastOpenedRoom.set(null);
81
+ this.activeIndex.set(0);
80
82
  }
81
83
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatLauncherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
82
84
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: ChatLauncherComponent, isStandalone: true, selector: "app-chat-launcher", inputs: { roomId: { classPropertyName: "roomId", publicName: "roomId", isSignal: true, isRequired: false, transformFunction: null }, roomHeader: { classPropertyName: "roomHeader", publicName: "roomHeader", isSignal: true, isRequired: false, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, userList: { classPropertyName: "userList", publicName: "userList", isSignal: true, isRequired: false, transformFunction: null }, chatUsers: { classPropertyName: "chatUsers", publicName: "chatUsers", isSignal: true, isRequired: false, transformFunction: null } }, providers: [MessageService], ngImport: i0, template: "<div class=\"chat-float-wrapper\">\r\n <p-tabView [activeIndex]=\"activeIndex()\" (activeIndexChange)=\"setActive($event)\" [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 mode=\"floating\" theme=\"light\" [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" (onArchive)=\"closeWindow($event)\" (close)=\"closeAll()\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n</div>", 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}.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}.chat-tabview ::ng-deep .p-tabview-ink-bar{display:none}.chat-tabview ::ng-deep .p-tabview-panels{padding:0;border:none;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ChatWindowComponent, selector: "app-chat-window", inputs: ["chatRoomId", "header", "metadata", "chatUsers", "showActions", "mode", "theme", "refreshRoom"], outputs: ["onArchive", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ToastModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i3.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i3.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }] }); }
@@ -85,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
85
87
  type: Component,
86
88
  args: [{ selector: 'app-chat-launcher', standalone: true, imports: [CommonModule, ChatWindowComponent, DropdownModule, ButtonModule, ToastModule, FormsModule, TabViewModule], providers: [MessageService], encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"chat-float-wrapper\">\r\n <p-tabView [activeIndex]=\"activeIndex()\" (activeIndexChange)=\"setActive($event)\" [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 mode=\"floating\" theme=\"light\" [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" (onArchive)=\"closeWindow($event)\" (close)=\"closeAll()\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n</div>", 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}.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}.chat-tabview ::ng-deep .p-tabview-ink-bar{display:none}.chat-tabview ::ng-deep .p-tabview-panels{padding:0;border:none;background:transparent}\n"] }]
87
89
  }], ctorParameters: () => [] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1sYXVuY2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBWSxNQUFNLEVBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQWlCaEUsTUFBTSxPQUFPLHFCQUFxQjtJQWdCaEM7UUFkQSxXQUFNLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLGVBQVUsR0FBRyxLQUFLLENBQVMsRUFB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VGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLGFBR3hHLENBQUMsY0FBYyxDQUFDLGlCQUNaLGlCQUFpQixDQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgZWZmZWN0LCBpbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhdFdpbmRvd0NvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVGFiVmlld01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFidmlldyc7XHJcbmltcG9ydCB7IFNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3NlcnZpY2VzL3NvY2tldC5zZXJ2aWNlJztcclxuXHJcbmludGVyZmFjZSBPcGVuQ2hhdFdpbmRvdyB7XHJcbiAgcm9vbUlkOiBzdHJpbmc7XHJcbiAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgbWV0YWRhdGE6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY2hhdC1sYXVuY2hlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaGF0V2luZG93Q29tcG9uZW50LCBEcm9wZG93bk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBUb2FzdE1vZHVsZSwgRm9ybXNNb2R1bGUsIFRhYlZpZXdNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LWxhdW5jaGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGF0LWxhdW5jaGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdExhdW5jaGVyQ29tcG9uZW50IHtcclxuXHJcbiAgcm9vbUlkID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgcm9vbUhlYWRlciA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gIG1ldGFkYXRhID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgdXNlciA9IGlucHV0PGFueT4obnVsbCk7XHJcbiAgdXNlckxpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG4gIGNoYXRVc2VycyA9IGlucHV0PGFueVtdPihbXSk7XHJcblxyXG4gIGNoYXRTZXJ2aWNlID0gaW5qZWN0KENoYXRTZXJ2aWNlKTtcclxuICBzb2NrZXRTZXJ2aWNlID0gaW5qZWN0KFNvY2tldFNlcnZpY2UpO1xyXG4gIG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuICBvcGVuV2luZG93cyA9IHNpZ25hbDxPcGVuQ2hhdFdpbmRvd1tdPihbXSk7XHJcbiAgbGFzdE9wZW5lZFJvb20gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgYWN0aXZlSW5kZXggPSBzaWduYWwoMCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm9vbUlkID0gdGhpcy5yb29tSWQoKTtcclxuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJvb21IZWFkZXIoKTtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMubWV0YWRhdGEoKTtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIuc2V0KHtcclxuICAgICAgICAgIHJvb21JZDogdGhpcy5yb29tSWQoKSxcclxuICAgICAgICAgIHVzZXJJZDogdXNlcj8udXNlcklkLFxyXG4gICAgICAgICAgbmFtZTogdXNlcj8ubmFtZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLnVzZXJMaXN0LnNldCh0aGlzLnVzZXJMaXN0KCkpO1xyXG5cclxuICAgICAgICBpZiAoIXJvb21JZCB8fCAhdXNlcj8udXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMubGFzdE9wZW5lZFJvb20oKSA9PT0gcm9vbUlkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMubGFzdE9wZW5lZFJvb20uc2V0KHJvb21JZCk7XHJcbiAgICAgICAgdGhpcy5vcGVuTmV3Um9vbShyb29tSWQsIGhlYWRlciwgbWV0YWRhdGEsIHVzZXIudXNlcklkLCB1c2VyLm5hbWUsIHRoaXMuY2hhdFVzZXJzKCkpO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdDaGF0TGF1bmNoZXIgaW5pdGlhbGl6ZWQnKTtcclxuICB9XHJcblxyXG4gIG9wZW5OZXdSb29tKHJvb21JZDogc3RyaW5nLCByb29tSGVhZGVyOiBzdHJpbmcsIG1ldGFkYXRhOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBjaGF0VXNlcnM6IGFueSkge1xyXG4gICAgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVSb29tKHJvb21JZCwgcm9vbUhlYWRlciwgbWV0YWRhdGEsIHVzZXJJZCwgdXNlcm5hbWUsIGNoYXRVc2Vycykuc3Vic2NyaWJlKHJvb20gPT4ge1xyXG4gICAgICB0aGlzLmFkZFdpbmRvdyhyb29tLnJvb21LZXksIHJvb20ubmFtZSwgcm9vbS5tZXRhZGF0YSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFdpbmRvdyhyb29tSWQ6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcsIG1ldGFkYXRhOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHdpbmRvd3MgPSB0aGlzLm9wZW5XaW5kb3dzKCk7XHJcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gd2luZG93cy5maW5kSW5kZXgodyA9PiB3LnJvb21JZCA9PT0gcm9vbUlkKTtcclxuXHJcbiAgICAvLyBhbHJlYWR5IG9wZW4g4oaSIGZvY3VzXHJcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5hY3RpdmVJbmRleC5zZXQoZXhpc3RpbmdJbmRleCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdJbmRleCA9IHdpbmRvd3MubGVuZ3RoO1xyXG5cclxuICAgIHRoaXMub3BlbldpbmRvd3MudXBkYXRlKHdzID0+IFsuLi53cywgeyByb29tSWQsIGhlYWRlciwgbWV0YWRhdGEgfV0pO1xyXG5cclxuICAgIC8vIOKchSBmb3JjZSByZWFsIGNoYW5nZTogLTEg4oaSIDBcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChuZXdJbmRleCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcblxyXG4gIGNsb3NlV2luZG93KHJvb21JZDogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5XaW5kb3dzLnVwZGF0ZSh3cyA9PiB3cy5maWx0ZXIodyA9PiB3LnJvb21JZCAhPT0gcm9vbUlkKSk7XHJcbiAgfVxyXG5cclxuICBzZXRBY3RpdmUoaTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChpKTtcclxuICB9XHJcblxyXG4gIGNsb3NlQWxsKCkge1xyXG4gICAgICB0aGlzLm9wZW5XaW5kb3dzLnNldChbXSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjaGF0LWZsb2F0LXdyYXBwZXJcIj5cclxuICA8cC10YWJWaWV3IFthY3RpdmVJbmRleF09XCJhY3RpdmVJbmRleCgpXCIgKGFjdGl2ZUluZGV4Q2hhbmdlKT1cInNldEFjdGl2ZSgkZXZlbnQpXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICBjbGFzcz1cImNoYXQtdGFidmlld1wiPlxyXG4gICAgPHAtdGFiUGFuZWwgKm5nRm9yPVwibGV0IHcgb2Ygb3BlbldpbmRvd3MoKTsgbGV0IGkgPSBpbmRleFwiIFtoZWFkZXJdPVwidy5oZWFkZXJcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIj5cclxuICAgICAgICA8YXBwLWNoYXQtd2luZG93IG1vZGU9XCJmbG9hdGluZ1wiIHRoZW1lPVwibGlnaHRcIiBbY2hhdFJvb21JZF09XCJ3LnJvb21JZFwiIFtoZWFkZXJdPVwidy5oZWFkZXJcIlxyXG4gICAgICAgICAgW21ldGFkYXRhXT1cIncubWV0YWRhdGFcIiAob25BcmNoaXZlKT1cImNsb3NlV2luZG93KCRldmVudClcIiAoY2xvc2UpPVwiY2xvc2VBbGwoKVwiPlxyXG4gICAgICAgIDwvYXBwLWNoYXQtd2luZG93PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gIDwvcC10YWJWaWV3PlxyXG48L2Rpdj4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1sYXVuY2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBWSxNQUFNLEVBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQWlCaEUsTUFBTSxPQUFPLHFCQUFxQjtJQWdCaEM7UUFkQSxXQUFNLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLGVBQVUsR0FBRyxLQUFLLENBQVMsRUFB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QUFDLDBCQ3hCN0IsbW5CQVdNLHkzQ0RVTSxZQUFZLDRKQUFFLG1CQUFtQix3TUFBRSxjQUFjLHFJQUFFLFlBQVksOEJBQUUsV0FBVyw4QkFBRSxXQUFXLDhCQUFFLGFBQWE7OzRGQU12RyxxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLGFBR3hHLENBQUMsY0FBYyxDQUFDLGlCQUNaLGlCQUFpQixDQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgZWZmZWN0LCBpbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhdFdpbmRvd0NvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVGFiVmlld01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFidmlldyc7XHJcbmltcG9ydCB7IFNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3NlcnZpY2VzL3NvY2tldC5zZXJ2aWNlJztcclxuXHJcbmludGVyZmFjZSBPcGVuQ2hhdFdpbmRvdyB7XHJcbiAgcm9vbUlkOiBzdHJpbmc7XHJcbiAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgbWV0YWRhdGE6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY2hhdC1sYXVuY2hlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaGF0V2luZG93Q29tcG9uZW50LCBEcm9wZG93bk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBUb2FzdE1vZHVsZSwgRm9ybXNNb2R1bGUsIFRhYlZpZXdNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LWxhdW5jaGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGF0LWxhdW5jaGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdExhdW5jaGVyQ29tcG9uZW50IHtcclxuXHJcbiAgcm9vbUlkID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgcm9vbUhlYWRlciA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gIG1ldGFkYXRhID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgdXNlciA9IGlucHV0PGFueT4obnVsbCk7XHJcbiAgdXNlckxpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG4gIGNoYXRVc2VycyA9IGlucHV0PGFueVtdPihbXSk7XHJcblxyXG4gIGNoYXRTZXJ2aWNlID0gaW5qZWN0KENoYXRTZXJ2aWNlKTtcclxuICBzb2NrZXRTZXJ2aWNlID0gaW5qZWN0KFNvY2tldFNlcnZpY2UpO1xyXG4gIG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuICBvcGVuV2luZG93cyA9IHNpZ25hbDxPcGVuQ2hhdFdpbmRvd1tdPihbXSk7XHJcbiAgbGFzdE9wZW5lZFJvb20gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgYWN0aXZlSW5kZXggPSBzaWduYWwoMCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm9vbUlkID0gdGhpcy5yb29tSWQoKTtcclxuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJvb21IZWFkZXIoKTtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMubWV0YWRhdGEoKTtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIuc2V0KHtcclxuICAgICAgICAgIHJvb21JZDogdGhpcy5yb29tSWQoKSxcclxuICAgICAgICAgIHVzZXJJZDogdXNlcj8udXNlcklkLFxyXG4gICAgICAgICAgbmFtZTogdXNlcj8ubmFtZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLnVzZXJMaXN0LnNldCh0aGlzLnVzZXJMaXN0KCkpO1xyXG5cclxuICAgICAgICBpZiAoIXJvb21JZCB8fCAhdXNlcj8udXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMubGFzdE9wZW5lZFJvb20oKSA9PT0gcm9vbUlkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMubGFzdE9wZW5lZFJvb20uc2V0KHJvb21JZCk7XHJcbiAgICAgICAgdGhpcy5vcGVuTmV3Um9vbShyb29tSWQsIGhlYWRlciwgbWV0YWRhdGEsIHVzZXIudXNlcklkLCB1c2VyLm5hbWUsIHRoaXMuY2hhdFVzZXJzKCkpO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdDaGF0TGF1bmNoZXIgaW5pdGlhbGl6ZWQnKTtcclxuICB9XHJcblxyXG4gIG9wZW5OZXdSb29tKHJvb21JZDogc3RyaW5nLCByb29tSGVhZGVyOiBzdHJpbmcsIG1ldGFkYXRhOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBjaGF0VXNlcnM6IGFueSkge1xyXG4gICAgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVSb29tKHJvb21JZCwgcm9vbUhlYWRlciwgbWV0YWRhdGEsIHVzZXJJZCwgdXNlcm5hbWUsIGNoYXRVc2Vycykuc3Vic2NyaWJlKHJvb20gPT4ge1xyXG4gICAgICB0aGlzLmFkZFdpbmRvdyhyb29tLnJvb21LZXksIHJvb20ubmFtZSwgcm9vbS5tZXRhZGF0YSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFdpbmRvdyhyb29tSWQ6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcsIG1ldGFkYXRhOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHdpbmRvd3MgPSB0aGlzLm9wZW5XaW5kb3dzKCk7XHJcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gd2luZG93cy5maW5kSW5kZXgodyA9PiB3LnJvb21JZCA9PT0gcm9vbUlkKTtcclxuXHJcbiAgICAvLyBhbHJlYWR5IG9wZW4g4oaSIGZvY3VzXHJcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5hY3RpdmVJbmRleC5zZXQoZXhpc3RpbmdJbmRleCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdJbmRleCA9IHdpbmRvd3MubGVuZ3RoO1xyXG5cclxuICAgIHRoaXMub3BlbldpbmRvd3MudXBkYXRlKHdzID0+IFsuLi53cywgeyByb29tSWQsIGhlYWRlciwgbWV0YWRhdGEgfV0pO1xyXG5cclxuICAgIC8vIOKchSBmb3JjZSByZWFsIGNoYW5nZTogLTEg4oaSIDBcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChuZXdJbmRleCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcblxyXG4gIGNsb3NlV2luZG93KHJvb21JZDogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5XaW5kb3dzLnVwZGF0ZSh3cyA9PiB3cy5maWx0ZXIodyA9PiB3LnJvb21JZCAhPT0gcm9vbUlkKSk7XHJcbiAgfVxyXG5cclxuICBzZXRBY3RpdmUoaTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChpKTtcclxuICB9XHJcblxyXG4gIGNsb3NlQWxsKCkge1xyXG4gICAgICB0aGlzLm9wZW5XaW5kb3dzLnVwZGF0ZSgoKSA9PiBbXSk7XHJcbiAgICAgIHRoaXMubGFzdE9wZW5lZFJvb20uc2V0KG51bGwpO1xyXG4gICAgICB0aGlzLmFjdGl2ZUluZGV4LnNldCgwKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNoYXQtZmxvYXQtd3JhcHBlclwiPlxyXG4gIDxwLXRhYlZpZXcgW2FjdGl2ZUluZGV4XT1cImFjdGl2ZUluZGV4KClcIiAoYWN0aXZlSW5kZXhDaGFuZ2UpPVwic2V0QWN0aXZlKCRldmVudClcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgIGNsYXNzPVwiY2hhdC10YWJ2aWV3XCI+XHJcbiAgICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgdyBvZiBvcGVuV2luZG93cygpOyBsZXQgaSA9IGluZGV4XCIgW2hlYWRlcl09XCJ3LmhlYWRlclwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgIDxhcHAtY2hhdC13aW5kb3cgbW9kZT1cImZsb2F0aW5nXCIgdGhlbWU9XCJsaWdodFwiIFtjaGF0Um9vbUlkXT1cIncucm9vbUlkXCIgW2hlYWRlcl09XCJ3LmhlYWRlclwiXHJcbiAgICAgICAgICBbbWV0YWRhdGFdPVwidy5tZXRhZGF0YVwiIChvbkFyY2hpdmUpPVwiY2xvc2VXaW5kb3coJGV2ZW50KVwiIChjbG9zZSk9XCJjbG9zZUFsbCgpXCI+XHJcbiAgICAgICAgPC9hcHAtY2hhdC13aW5kb3c+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbiAgPC9wLXRhYlZpZXc+XHJcbjwvZGl2PiJdfQ==
@@ -172,7 +172,7 @@ export class ChatWindowComponent {
172
172
  this.onClose.emit();
173
173
  }
174
174
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
175
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChatWindowComponent, isStandalone: true, selector: "app-chat-window", inputs: { chatRoomId: { classPropertyName: "chatRoomId", publicName: "chatRoomId", isSignal: false, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: false, isRequired: false, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: false, isRequired: false, transformFunction: null }, chatUsers: { classPropertyName: "chatUsers", publicName: "chatUsers", isSignal: false, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: false, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: false, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: false, isRequired: false, transformFunction: null }, refreshRoom: { classPropertyName: "refreshRoom", publicName: "refreshRoom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onArchive: "onArchive", onClose: "onClose" }, providers: [MessageService], viewQueries: [{ propertyName: "messagesContainer", first: true, predicate: ["messagesContainer"], descendants: true }, { propertyName: "reactionOverlay", first: true, predicate: ["reactionOverlay"], descendants: true }], ngImport: i0, template: "<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()\" appendTo=\"body\" 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'\" appendTo=\"body\"\r\n pButton pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" appendTo=\"body\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"closeChat()\" appendTo=\"body\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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\"\r\n [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>", styles: [".chat-window{width:35vw;max-width:95vw;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 8px 30px #0000001f;overflow:visible;font-size:14px;font-family:Inter,system-ui,sans-serif}.chat-window.minimized{height:auto}.chat-header{display:flex;align-items:center;justify-content:space-between;background:#4f6ef7;color:#fff;padding:10px 14px}.chat-header .title{display:flex;flex-direction:row;gap:6px}.chat-header .title span{font-weight:600;font-size:14px}.chat-header .title small{font-size:11px;opacity:.85}.chat-body{display:flex;flex:1;background:#f5f7fb}.chat-layout{display:flex;flex:1;width:100%;overflow:hidden}.chat-layout.users-hidden .chat-sidebar{transform:translate(100%);opacity:0;pointer-events:none;width:0!important}.chat-layout.users-hidden .chat-main{flex:1 1 100%}.chat-main{flex:1;display:flex;flex-direction:column;background:#f5f7fb;height:70vh}.messages{flex:1;padding:16px 14px;overflow-y:auto;scroll-behavior:smooth}.message-row{display:flex;margin-bottom:14px;animation:messageIn .25s ease-out;position:relative;overflow:visible;padding-top:28px}@keyframes messageIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.message-row.incoming{justify-content:flex-start}.message-row.incoming .reaction-bar{left:12px}.message-row.outgoing{justify-content:flex-end}.message-row.outgoing .reaction-bar{right:12px;left:auto}.message-bubble{position:relative;max-width:72%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;word-break:break-word;overflow:visible}.message-row.incoming .message-bubble{background:#fff;color:#111;border-top-left-radius:6px;box-shadow:0 3px 10px #0000000f;overflow:visible}.message-bubble:after{content:\"\";position:absolute;bottom:-6px;right:8px}.message-row.incoming .message-bubble:after{content:\"\";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #ffffff}.message-row.outgoing .message-bubble{background:#4f6ef7;color:#fff;border-top-right-radius:6px;overflow:visible}.message-row.outgoing .message-bubble:after{content:\"\";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #4f6ef7}.message-meta{display:flex;justify-content:flex-end;font-size:10px;opacity:.6;margin-bottom:4px}.typing-indicator{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-radius:14px;box-shadow:0 2px 6px #00000014}.typing-indicator span{width:6px;height:6px;background:#999;border-radius:50%;animation:typingDots 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typingDots{0%{transform:translateY(0);opacity:.4}50%{transform:translateY(-4px);opacity:1}to{transform:translateY(0);opacity:.4}}.input-area{background:#fff;padding:10px;border:1px solid #e5e7eb;display:flex;flex-direction:row;justify-content:space-between;gap:5px}.input-area textarea{max-height:60px;overflow:hidden;width:-webkit-fill-available}.reply-banner{background:#eef2ff;border-left:3px solid #4f6ef7;padding:6px 8px;font-size:12px;border-radius:8px;margin-bottom:6px;display:flex;justify-content:space-between}.input-actions{display:flex;justify-content:flex-end;margin-top:6px}.input-actions button{background:#4f6ef7;color:#fff;border-radius:999px;padding:0 16px}.chat-sidebar{background:#fff;border-left:1px solid #e5e7eb;box-shadow:-4px 0 10px #0000000d;display:flex;flex-direction:column}.section-title{font-weight:600;font-size:13px;padding:10px;border-bottom:1px solid #e5e7eb}.user-list{flex:1;overflow-y:auto;padding:8px;max-height:20em}.user-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px}.user-row:hover{background:#f1f5f9}.user-list-add{padding:10px;border-top:1px solid #e5e7eb}.header-actions{display:flex;align-items:center;gap:6px}.header-actions .p-button{width:32px;height:32px;padding:0;border-radius:50%;background:#ffffff26}.header-actions .p-button:hover{background:#ffffff40}.chat-header{min-height:48px}.header-actions{flex-shrink:0}.header-actions .p-button{transition:background .2s ease,transform .1s ease}.header-actions .p-button:active{transform:scale(.92)}.reaction-bar{position:absolute;top:0;left:12px;transform:translateY(-100%);background:#fff;border-radius:20px;padding:4px 8px;display:none;box-shadow:0 2px 8px #0003;z-index:9999}.message-bubble:hover .reaction-bar{display:flex}.reaction-bar span{cursor:pointer;font-size:16px}.reaction-summary{margin-top:4px;display:flex;gap:6px}.reaction-chip{background:#f1f1f1;padding:2px 6px;border-radius:12px;font-size:12px;position:relative}.reaction-users-tooltip{position:absolute;bottom:130%;left:50%;transform:translate(-50%);white-space:nowrap;background:#222;color:#fff;padding:4px 8px;border-radius:6px;z-index:10000;bottom:calc(100% + 6px)}.message-row,.message-bubble,.reaction-summary{overflow:visible!important}.p-tooltip{z-index:9999!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i3.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i7.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: OverlayPanelModule }] }); }
175
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChatWindowComponent, isStandalone: true, selector: "app-chat-window", inputs: { chatRoomId: { classPropertyName: "chatRoomId", publicName: "chatRoomId", isSignal: false, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: false, isRequired: false, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: false, isRequired: false, transformFunction: null }, chatUsers: { classPropertyName: "chatUsers", publicName: "chatUsers", isSignal: false, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: false, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: false, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: false, isRequired: false, transformFunction: null }, refreshRoom: { classPropertyName: "refreshRoom", publicName: "refreshRoom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onArchive: "onArchive", onClose: "onClose" }, providers: [MessageService], viewQueries: [{ propertyName: "messagesContainer", first: true, predicate: ["messagesContainer"], descendants: true }, { propertyName: "reactionOverlay", first: true, predicate: ["reactionOverlay"], descendants: true }], ngImport: i0, template: "<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 <button (click)=\"closeChat()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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>", styles: [".chat-window{width:35vw;max-width:95vw;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 8px 30px #0000001f;overflow:visible;font-size:14px;font-family:Inter,system-ui,sans-serif}.chat-window.minimized{height:auto}.chat-header{display:flex;align-items:center;justify-content:space-between;background:#4f6ef7;color:#fff;padding:10px 14px}.chat-header .title{display:flex;flex-direction:row;gap:6px}.chat-header .title span{font-weight:600;font-size:14px}.chat-header .title small{font-size:11px;opacity:.85}.chat-body{display:flex;flex:1;background:#f5f7fb}.chat-layout{display:flex;flex:1;width:100%;overflow:hidden}.chat-layout.users-hidden .chat-sidebar{transform:translate(100%);opacity:0;pointer-events:none;width:0!important}.chat-layout.users-hidden .chat-main{flex:1 1 100%}.chat-main{flex:1;display:flex;flex-direction:column;background:#f5f7fb;height:70vh}.messages{flex:1;padding:16px 14px;overflow-y:auto;scroll-behavior:smooth}.message-row{display:flex;margin-bottom:14px;animation:messageIn .25s ease-out;position:relative;overflow:visible;padding-top:28px}@keyframes messageIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.message-row.incoming{justify-content:flex-start}.message-row.incoming .reaction-bar{left:12px}.message-row.outgoing{justify-content:flex-end}.message-row.outgoing .reaction-bar{right:12px;left:auto}.message-bubble{position:relative;max-width:72%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;word-break:break-word;overflow:visible}.message-row.incoming .message-bubble{background:#fff;color:#111;border-top-left-radius:6px;box-shadow:0 3px 10px #0000000f;overflow:visible}.message-bubble:after{content:\"\";position:absolute;bottom:-6px;right:8px}.message-row.incoming .message-bubble:after{content:\"\";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #ffffff}.message-row.outgoing .message-bubble{background:#4f6ef7;color:#fff;border-top-right-radius:6px;overflow:visible}.message-row.outgoing .message-bubble:after{content:\"\";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #4f6ef7}.message-meta{display:flex;justify-content:flex-end;font-size:10px;opacity:.6;margin-bottom:4px}.typing-indicator{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-radius:14px;box-shadow:0 2px 6px #00000014}.typing-indicator span{width:6px;height:6px;background:#999;border-radius:50%;animation:typingDots 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typingDots{0%{transform:translateY(0);opacity:.4}50%{transform:translateY(-4px);opacity:1}to{transform:translateY(0);opacity:.4}}.input-area{background:#fff;padding:10px;border:1px solid #e5e7eb;display:flex;flex-direction:row;justify-content:space-between;gap:5px}.input-area textarea{max-height:60px;overflow:hidden;width:-webkit-fill-available}.reply-banner{background:#eef2ff;border-left:3px solid #4f6ef7;padding:6px 8px;font-size:12px;border-radius:8px;margin-bottom:6px;display:flex;justify-content:space-between}.input-actions{display:flex;justify-content:flex-end;margin-top:6px}.input-actions button{background:#4f6ef7;color:#fff;border-radius:999px;padding:0 16px}.chat-sidebar{background:#fff;border-left:1px solid #e5e7eb;box-shadow:-4px 0 10px #0000000d;display:flex;flex-direction:column}.section-title{font-weight:600;font-size:13px;padding:10px;border-bottom:1px solid #e5e7eb}.user-list{flex:1;overflow-y:auto;padding:8px;max-height:20em}.user-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px}.user-row:hover{background:#f1f5f9}.user-list-add{padding:10px;border-top:1px solid #e5e7eb}.header-actions{display:flex;align-items:center;gap:6px}.header-actions .p-button{width:32px;height:32px;padding:0;border-radius:50%;background:#ffffff26}.header-actions .p-button:hover{background:#ffffff40}.chat-header{min-height:48px}.header-actions{flex-shrink:0}.header-actions .p-button{transition:background .2s ease,transform .1s ease}.header-actions .p-button:active{transform:scale(.92)}.reaction-bar{position:absolute;top:0;left:12px;transform:translateY(-100%);background:#fff;border-radius:20px;padding:4px 8px;display:none;box-shadow:0 2px 8px #0003;z-index:9999}.message-bubble:hover .reaction-bar{display:flex}.reaction-bar span{cursor:pointer;font-size:16px}.reaction-summary{margin-top:4px;display:flex;gap:6px}.reaction-chip{background:#f1f1f1;padding:2px 6px;border-radius:12px;font-size:12px;position:relative}.reaction-users-tooltip{position:absolute;bottom:130%;left:50%;transform:translate(-50%);white-space:nowrap;background:#222;color:#fff;padding:4px 8px;border-radius:6px;z-index:10000;bottom:calc(100% + 6px)}.message-row,.message-bubble,.reaction-summary{overflow:visible!important}.p-tooltip{z-index:9999!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i3.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i7.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: OverlayPanelModule }] }); }
176
176
  }
177
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWindowComponent, decorators: [{
178
178
  type: Component,
@@ -187,7 +187,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
187
187
  ChipModule,
188
188
  DropdownModule,
189
189
  OverlayPanelModule
190
- ], providers: [MessageService], template: "<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()\" appendTo=\"body\" 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'\" appendTo=\"body\"\r\n pButton pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" appendTo=\"body\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"closeChat()\" appendTo=\"body\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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\"\r\n [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>", styles: [".chat-window{width:35vw;max-width:95vw;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 8px 30px #0000001f;overflow:visible;font-size:14px;font-family:Inter,system-ui,sans-serif}.chat-window.minimized{height:auto}.chat-header{display:flex;align-items:center;justify-content:space-between;background:#4f6ef7;color:#fff;padding:10px 14px}.chat-header .title{display:flex;flex-direction:row;gap:6px}.chat-header .title span{font-weight:600;font-size:14px}.chat-header .title small{font-size:11px;opacity:.85}.chat-body{display:flex;flex:1;background:#f5f7fb}.chat-layout{display:flex;flex:1;width:100%;overflow:hidden}.chat-layout.users-hidden .chat-sidebar{transform:translate(100%);opacity:0;pointer-events:none;width:0!important}.chat-layout.users-hidden .chat-main{flex:1 1 100%}.chat-main{flex:1;display:flex;flex-direction:column;background:#f5f7fb;height:70vh}.messages{flex:1;padding:16px 14px;overflow-y:auto;scroll-behavior:smooth}.message-row{display:flex;margin-bottom:14px;animation:messageIn .25s ease-out;position:relative;overflow:visible;padding-top:28px}@keyframes messageIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.message-row.incoming{justify-content:flex-start}.message-row.incoming .reaction-bar{left:12px}.message-row.outgoing{justify-content:flex-end}.message-row.outgoing .reaction-bar{right:12px;left:auto}.message-bubble{position:relative;max-width:72%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;word-break:break-word;overflow:visible}.message-row.incoming .message-bubble{background:#fff;color:#111;border-top-left-radius:6px;box-shadow:0 3px 10px #0000000f;overflow:visible}.message-bubble:after{content:\"\";position:absolute;bottom:-6px;right:8px}.message-row.incoming .message-bubble:after{content:\"\";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #ffffff}.message-row.outgoing .message-bubble{background:#4f6ef7;color:#fff;border-top-right-radius:6px;overflow:visible}.message-row.outgoing .message-bubble:after{content:\"\";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #4f6ef7}.message-meta{display:flex;justify-content:flex-end;font-size:10px;opacity:.6;margin-bottom:4px}.typing-indicator{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-radius:14px;box-shadow:0 2px 6px #00000014}.typing-indicator span{width:6px;height:6px;background:#999;border-radius:50%;animation:typingDots 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typingDots{0%{transform:translateY(0);opacity:.4}50%{transform:translateY(-4px);opacity:1}to{transform:translateY(0);opacity:.4}}.input-area{background:#fff;padding:10px;border:1px solid #e5e7eb;display:flex;flex-direction:row;justify-content:space-between;gap:5px}.input-area textarea{max-height:60px;overflow:hidden;width:-webkit-fill-available}.reply-banner{background:#eef2ff;border-left:3px solid #4f6ef7;padding:6px 8px;font-size:12px;border-radius:8px;margin-bottom:6px;display:flex;justify-content:space-between}.input-actions{display:flex;justify-content:flex-end;margin-top:6px}.input-actions button{background:#4f6ef7;color:#fff;border-radius:999px;padding:0 16px}.chat-sidebar{background:#fff;border-left:1px solid #e5e7eb;box-shadow:-4px 0 10px #0000000d;display:flex;flex-direction:column}.section-title{font-weight:600;font-size:13px;padding:10px;border-bottom:1px solid #e5e7eb}.user-list{flex:1;overflow-y:auto;padding:8px;max-height:20em}.user-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px}.user-row:hover{background:#f1f5f9}.user-list-add{padding:10px;border-top:1px solid #e5e7eb}.header-actions{display:flex;align-items:center;gap:6px}.header-actions .p-button{width:32px;height:32px;padding:0;border-radius:50%;background:#ffffff26}.header-actions .p-button:hover{background:#ffffff40}.chat-header{min-height:48px}.header-actions{flex-shrink:0}.header-actions .p-button{transition:background .2s ease,transform .1s ease}.header-actions .p-button:active{transform:scale(.92)}.reaction-bar{position:absolute;top:0;left:12px;transform:translateY(-100%);background:#fff;border-radius:20px;padding:4px 8px;display:none;box-shadow:0 2px 8px #0003;z-index:9999}.message-bubble:hover .reaction-bar{display:flex}.reaction-bar span{cursor:pointer;font-size:16px}.reaction-summary{margin-top:4px;display:flex;gap:6px}.reaction-chip{background:#f1f1f1;padding:2px 6px;border-radius:12px;font-size:12px;position:relative}.reaction-users-tooltip{position:absolute;bottom:130%;left:50%;transform:translate(-50%);white-space:nowrap;background:#222;color:#fff;padding:4px 8px;border-radius:6px;z-index:10000;bottom:calc(100% + 6px)}.message-row,.message-bubble,.reaction-summary{overflow:visible!important}.p-tooltip{z-index:9999!important}\n"] }]
190
+ ], providers: [MessageService], template: "<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 <button (click)=\"closeChat()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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>", styles: [".chat-window{width:35vw;max-width:95vw;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 8px 30px #0000001f;overflow:visible;font-size:14px;font-family:Inter,system-ui,sans-serif}.chat-window.minimized{height:auto}.chat-header{display:flex;align-items:center;justify-content:space-between;background:#4f6ef7;color:#fff;padding:10px 14px}.chat-header .title{display:flex;flex-direction:row;gap:6px}.chat-header .title span{font-weight:600;font-size:14px}.chat-header .title small{font-size:11px;opacity:.85}.chat-body{display:flex;flex:1;background:#f5f7fb}.chat-layout{display:flex;flex:1;width:100%;overflow:hidden}.chat-layout.users-hidden .chat-sidebar{transform:translate(100%);opacity:0;pointer-events:none;width:0!important}.chat-layout.users-hidden .chat-main{flex:1 1 100%}.chat-main{flex:1;display:flex;flex-direction:column;background:#f5f7fb;height:70vh}.messages{flex:1;padding:16px 14px;overflow-y:auto;scroll-behavior:smooth}.message-row{display:flex;margin-bottom:14px;animation:messageIn .25s ease-out;position:relative;overflow:visible;padding-top:28px}@keyframes messageIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.message-row.incoming{justify-content:flex-start}.message-row.incoming .reaction-bar{left:12px}.message-row.outgoing{justify-content:flex-end}.message-row.outgoing .reaction-bar{right:12px;left:auto}.message-bubble{position:relative;max-width:72%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;word-break:break-word;overflow:visible}.message-row.incoming .message-bubble{background:#fff;color:#111;border-top-left-radius:6px;box-shadow:0 3px 10px #0000000f;overflow:visible}.message-bubble:after{content:\"\";position:absolute;bottom:-6px;right:8px}.message-row.incoming .message-bubble:after{content:\"\";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #ffffff}.message-row.outgoing .message-bubble{background:#4f6ef7;color:#fff;border-top-right-radius:6px;overflow:visible}.message-row.outgoing .message-bubble:after{content:\"\";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #4f6ef7}.message-meta{display:flex;justify-content:flex-end;font-size:10px;opacity:.6;margin-bottom:4px}.typing-indicator{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-radius:14px;box-shadow:0 2px 6px #00000014}.typing-indicator span{width:6px;height:6px;background:#999;border-radius:50%;animation:typingDots 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typingDots{0%{transform:translateY(0);opacity:.4}50%{transform:translateY(-4px);opacity:1}to{transform:translateY(0);opacity:.4}}.input-area{background:#fff;padding:10px;border:1px solid #e5e7eb;display:flex;flex-direction:row;justify-content:space-between;gap:5px}.input-area textarea{max-height:60px;overflow:hidden;width:-webkit-fill-available}.reply-banner{background:#eef2ff;border-left:3px solid #4f6ef7;padding:6px 8px;font-size:12px;border-radius:8px;margin-bottom:6px;display:flex;justify-content:space-between}.input-actions{display:flex;justify-content:flex-end;margin-top:6px}.input-actions button{background:#4f6ef7;color:#fff;border-radius:999px;padding:0 16px}.chat-sidebar{background:#fff;border-left:1px solid #e5e7eb;box-shadow:-4px 0 10px #0000000d;display:flex;flex-direction:column}.section-title{font-weight:600;font-size:13px;padding:10px;border-bottom:1px solid #e5e7eb}.user-list{flex:1;overflow-y:auto;padding:8px;max-height:20em}.user-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px}.user-row:hover{background:#f1f5f9}.user-list-add{padding:10px;border-top:1px solid #e5e7eb}.header-actions{display:flex;align-items:center;gap:6px}.header-actions .p-button{width:32px;height:32px;padding:0;border-radius:50%;background:#ffffff26}.header-actions .p-button:hover{background:#ffffff40}.chat-header{min-height:48px}.header-actions{flex-shrink:0}.header-actions .p-button{transition:background .2s ease,transform .1s ease}.header-actions .p-button:active{transform:scale(.92)}.reaction-bar{position:absolute;top:0;left:12px;transform:translateY(-100%);background:#fff;border-radius:20px;padding:4px 8px;display:none;box-shadow:0 2px 8px #0003;z-index:9999}.message-bubble:hover .reaction-bar{display:flex}.reaction-bar span{cursor:pointer;font-size:16px}.reaction-summary{margin-top:4px;display:flex;gap:6px}.reaction-chip{background:#f1f1f1;padding:2px 6px;border-radius:12px;font-size:12px;position:relative}.reaction-users-tooltip{position:absolute;bottom:130%;left:50%;transform:translate(-50%);white-space:nowrap;background:#222;color:#fff;padding:4px 8px;border-radius:6px;z-index:10000;bottom:calc(100% + 6px)}.message-row,.message-bubble,.reaction-summary{overflow:visible!important}.p-tooltip{z-index:9999!important}\n"] }]
191
191
  }], ctorParameters: () => [], propDecorators: { chatRoomId: [{
192
192
  type: Input
193
193
  }], header: [{
@@ -213,4 +213,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
213
213
  type: ViewChild,
214
214
  args: ['reactionOverlay']
215
215
  }] } });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aW5kb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC13aWRnZXQvc3JjL2xpYi9jaGF0LXdpbmRvdy9jaGF0LXdpbmRvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxF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QW1CO21HQUFuQixtQkFBbUIsa3BDQUZqQixDQUFDLGNBQWMsQ0FBQyx1UEM1Qy9CLGtnS0E4Rk0sMmtLRC9ERSxZQUFZLGtaQUNaLFdBQVcsOG1CQUNYLFdBQVcsdVdBQ1gsWUFBWSw0T0FDWixZQUFZLGtPQUNaLGFBQWEscVhBQ2IsbUJBQW1CLHFLQUNuQixVQUFVLDhCQUNWLGNBQWMsdXRDQUNkLGtCQUFrQjs7NEZBTWIsbUJBQW1CO2tCQW5CL0IsU0FBUzsrQkFDSSxpQkFBaUIsY0FDZixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLGNBQWM7d0JBQ2Qsa0JBQWtCO3FCQUNyQixhQUdVLENBQUMsY0FBYyxDQUFDO3dEQUdsQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFpQnlCLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0EsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGluamVjdCxcclxuICAgIElucHV0LFxyXG4gICAgaW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBzaWduYWwsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDaGF0U2VydmljZX0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1NvY2tldFNlcnZpY2V9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1RvYXN0TW9kdWxlfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHtNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQge0F2YXRhck1vZHVsZX0gZnJvbSAncHJpbWVuZy9hdmF0YXInO1xyXG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7SW5wdXRUZXh0YXJlYU1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuaW1wb3J0IHtEcm9wZG93bk1vZHVsZX0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7Q2hpcE1vZHVsZX0gZnJvbSAncHJpbWVuZy9jaGlwJztcclxuaW1wb3J0IHtDaGF0TWVzc2FnZX0gZnJvbSAnLi4vY29yZS9tb2RlbHMvY2hhdC5tb2RlbHMnO1xyXG5pbXBvcnQge092ZXJsYXlQYW5lbCwgT3ZlcmxheVBhbmVsTW9kdWxlfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLWNoYXQtd2luZG93JyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIFRvYXN0TW9kdWxlLFxyXG4gICAgICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgICAgICBBdmF0YXJNb2R1bGUsXHJcbiAgICAgICAgVG9vbHRpcE1vZHVsZSxcclxuICAgICAgICBJbnB1dFRleHRhcmVhTW9kdWxlLFxyXG4gICAgICAgIENoaXBNb2R1bGUsXHJcbiAgICAgICAgRHJvcGRvd25Nb2R1bGUsXHJcbiAgICAgICAgT3ZlcmxheVBhbmVsTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtd2luZG93LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NoYXQtd2luZG93LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXRXaW5kb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQElucHV0KCkgY2hhdFJvb21JZCE6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGhlYWRlciA9ICdDaGF0JztcclxuICAgIEBJbnB1dCgpIG1ldGFkYXRhID0gJyc7XHJcbiAgICBASW5wdXQoKSBjaGF0VXNlcnMgPSBbXTtcclxuICAgIEBJbnB1dCgpIHNob3dBY3Rpb25zID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIG1vZGU6ICdmbG9hdGluZycgfCAnZnVsbHNjcmVlbicgPSAnZmxvYXRpbmcnO1xyXG4gICAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnO1xyXG4gICAgQE91dHB1dCgpIG9uQXJjaGl2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIHJlZnJlc2hSb29tID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgLy8gQElucHV0KCkgY3VycmVudFVzZXI6IGFueTtcclxuXHJcbiAgICBjaGF0U2VydmljZSA9IGluamVjdChDaGF0U2VydmljZSk7XHJcbiAgICBzb2NrZXQgPSBpbmplY3QoU29ja2V0U2VydmljZSk7XHJcbiAgICBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XHJcblxyXG4gICAgdXNlcnMgPSBzaWduYWw8YW55W10+KFtdKTtcclxuICAgIG1lc3NhZ2VzID0gc2lnbmFsPENoYXRNZXNzYWdlW10+KFtdKTtcclxuICAgIG5ld01lc3NhZ2UgPSAnJztcclxuICAgIG1pbmltaXplZCA9IGZhbHNlO1xyXG4gICAgbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcmVwbHlUbzogQ2hhdE1lc3NhZ2UgfCBudWxsID0gbnVsbDtcclxuICAgIHNlbGVjdGVkVXNlcjogYW55O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ21lc3NhZ2VzQ29udGFpbmVyJykgbWVzc2FnZXNDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3JlYWN0aW9uT3ZlcmxheScpIHJlYWN0aW9uT3ZlcmxheSE6IE92ZXJsYXlQYW5lbDtcclxuXHJcbiAgICBwcml2YXRlIG9ic2VydmVyITogTXV0YXRpb25PYnNlcnZlcjtcclxuXHJcbiAgICBzaG93VXNlcnMgPSBmYWxzZTtcclxuICAgIHN1Z2dlc3Rpb24gPSAnJztcclxuICAgIGhvdmVyZWRSZWFjdGlvblVzZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuc29ja2V0LmpvaW5Sb29tKHRoaXMuY2hhdFJvb21JZCk7XHJcbiAgICAgICAgdGhpcy5zb2NrZXQuam9pblVzZXJDaGFubmVsKHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQpO1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXJzKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkTWVzc2FnZXMoKTtcclxuICAgICAgICB0aGlzLmxpc3RlblNvY2tldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRVc2VycygpIHtcclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb21Vc2Vycyh0aGlzLmNoYXRSb29tSWQpLnN1YnNjcmliZSh1c2VycyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcnMuc2V0KHVzZXJzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTWVzc2FnZXMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldE1lc3NhZ2VzKHRoaXMuY2hhdFJvb21JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogbXNncyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnNldChtc2dzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxpc3RlblNvY2tldCgpIHtcclxuICAgICAgICB0aGlzLnNvY2tldC5vbjxDaGF0TWVzc2FnZT4oJ25ld01lc3NhZ2UnKS5zdWJzY3JpYmUobXNnID0+IHtcclxuICAgICAgICAgICAgaWYgKG1zZy5jaGF0Um9vbUlkID09PSB0aGlzLmNoYXRSb29tSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMudXBkYXRlKGxpc3QgPT4gWy4uLmxpc3QsIG1zZ10pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAobXNnLnNlbmRlcklkICE9PSB0aGlzLmNoYXRTZXJ2aWNlLmN1cnJlbnRVc2VyKCkudXNlcklkKSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgICAvLyAgICAgc2V2ZXJpdHk6ICdpbmZvJyxcclxuICAgICAgICAgICAgLy8gICAgIHN1bW1hcnk6IHRoaXMuaGVhZGVyLFxyXG4gICAgICAgICAgICAvLyAgICAgZGV0YWlsOiBtc2cuY29udGVudCA/PyAnTmV3IG1lc3NhZ2UnLFxyXG4gICAgICAgICAgICAvLyAgICAgbGlmZTogMjUwMFxyXG4gICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0Lm9uKCdyb29tVXNlckFkZGVkJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobXNnLmNoYXRSb29tSWQgPT09IHRoaXMuY2hhdFJvb21JZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlcnMoKTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgICAgIC8vICAgc2V2ZXJpdHk6ICdpbmZvJyxcclxuICAgICAgICAgICAgICAgIC8vICAgc3VtbWFyeTogJ1VzZXIgQWRkZWQnLFxyXG4gICAgICAgICAgICAgICAgLy8gICBkZXRhaWw6IG1zZy51c2VyPy51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgIC8vICAgbGlmZTogMjUwMFxyXG4gICAgICAgICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub24oJ2FkZGVkVG9Sb29tJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobXNnLmNoYXRSb29tSWQgPT09IHRoaXMuY2hhdFJvb21JZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlcnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNvY2tldC5vbigndXNlckFscmVhZHlJblJvb20nKS5zdWJzY3JpYmUoKG1zZzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGlmIChtc2cuY2hhdFJvb21JZCA9PT0gdGhpcy5jaGF0Um9vbUlkKSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgICAvLyAgICAgc2V2ZXJpdHk6ICdpbmZvJyxcclxuICAgICAgICAgICAgLy8gICAgIHN1bW1hcnk6ICdVc2VyIEFscmVhZHkgQWRkZWQnLFxyXG4gICAgICAgICAgICAvLyAgICAgZGV0YWlsOiBtc2cudXNlcj8udXNlck5hbWUsXHJcbiAgICAgICAgICAgIC8vICAgICBsaWZlOiAyNTAwXHJcbiAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLm5ld01lc3NhZ2UudHJpbSgpO1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLnNlbmRNZXNzYWdlKHRoaXMuY2hhdFJvb21JZCwge1xyXG4gICAgICAgICAgICBzZW5kZXJJZDogdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCxcclxuICAgICAgICAgICAgc2VuZGVyTmFtZTogdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLm5hbWUsXHJcbiAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IHRoaXMucmVwbHlUbz8ucmVwbHlUb01lc3NhZ2VJZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBjcmVhdGVkQnk6IHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWRcclxuICAgICAgICB9KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5ld01lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5yZXBseVRvID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVG9Sb29tKCkge1xyXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuYWRkVXNlclRvUm9vbShcclxuICAgICAgICAgICAgdGhpcy5jaGF0Um9vbUlkLFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcj8udXNlcl9pZCxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXI/LmZ1bGxfbmFtZSxcclxuICAgICAgICAgICAgdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVNaW5pbWl6ZSgpIHtcclxuICAgICAgICB0aGlzLm1pbmltaXplZCA9ICF0aGlzLm1pbmltaXplZDtcclxuICAgIH1cclxuXHJcbiAgICBhcmNoaXZlQ2hhdCgpIHtcclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmFyY2hpdmVSb29tKHRoaXMuY2hhdFJvb21JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkFyY2hpdmUuZW1pdCh0aGlzLmNoYXRSb29tSWQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyID0+IGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJlcGx5KG1zZzogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLnJlcGx5VG8gPSBtc2c7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJSZXBseSgpIHtcclxuICAgICAgICB0aGlzLnJlcGx5VG8gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBtc2c6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZy5pZDtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLnNvY2tldC5vZmZOZXdNZXNzYWdlKCk7XHJcbiAgICAgICAgdGhpcy5zb2NrZXQub2ZmTWVzc2FnZVNlZW4oKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5tZXNzYWdlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyDwn5SlIFNjcm9sbCBBRlRFUiBET00gYWN0dWFsbHkgY2hhbmdlc1xyXG4gICAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShlbCwge1xyXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsXHJcbiAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVVc2VycygpIHtcclxuICAgICAgICB0aGlzLnNob3dVc2VycyA9ICF0aGlzLnNob3dVc2VycztcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUNoYXQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcclxuICAgIH1cclxufVxyXG4iLCI8cC10b2FzdD48L3AtdG9hc3Q+XHJcblxyXG48ZGl2IFtjbGFzcy5kYXJrXT1cInRoZW1lID09PSAnZGFyaydcIiBbY2xhc3MuZmxvYXRpbmddPVwibW9kZSA9PT0gJ2Zsb2F0aW5nJ1wiIFtjbGFzcy5mdWxsc2NyZWVuXT1cIm1vZGUgPT09ICdmdWxsc2NyZWVuJ1wiXHJcbiAgICAgW2NsYXNzLm1pbmltaXplZF09XCJtaW5pbWl6ZWRcIiBjbGFzcz1cImNoYXQtd2luZG93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hhdC1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBoZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXJzKCkubGVuZ3RoXCI+KHt7IHVzZXJzKCkubGVuZ3RoIH19IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzKCkubGVuZ3RoID09IDEgPyAncGFydGljaXBhbnQnIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJ0aWNpcGFudHMnXHJcbiAgICAgICAgICAgICAgICAgICAgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IG1ldGFkYXRhIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlVXNlcnMoKVwiIGFwcGVuZFRvPVwiYm9keVwiIGljb249XCJwaSBwaS11c2Vyc1wiIHBCdXR0b24gcFRvb2x0aXA9XCJUb29nbGUgVXNlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAwLjVyZW1cIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgQGlmIChzaG93QWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlTWluaW1pemUoKVwiIFtpY29uXT1cIm1pbmltaXplZCA/ICdwaSBwaS1wbHVzJyA6ICdwaSBwaS1taW51cydcIiBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBUb29sdGlwPVwiSGlkZS9TaG93XCIgc3R5bGU9XCJmb250LXNpemU6IDAuNXJlbVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYXJjaGl2ZUNoYXQoKVwiIGFwcGVuZFRvPVwiYm9keVwiIGljb249XCJwaSBwaS10cmFzaFwiIHBCdXR0b24gcFRvb2x0aXA9XCJBcmNoaXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDAuNXJlbVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VDaGF0KClcIiBhcHBlbmRUbz1cImJvZHlcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uIHBUb29sdGlwPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMC41cmVtXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhbWluaW1pemVkXCIgY2xhc3M9XCJjaGF0LWJvZHlcIj5cclxuICAgICAgICA8ZGl2IFtjbGFzcy51c2Vycy1oaWRkZW5dPVwiIXNob3dVc2Vyc1wiIGNsYXNzPVwiY2hhdC1sYXlvdXRcIj5cclxuICAgICAgICAgICAgPGRpdiBbY2xhc3MuZmxvYXRpbmddPVwibW9kZSA9PT0gJ2Zsb2F0aW5nJ1wiIFtjbGFzcy5mdWxsc2NyZWVuXT1cIm1vZGUgPT09ICdmdWxsc2NyZWVuJ1wiIGNsYXNzPVwiY2hhdC1tYWluXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNtZXNzYWdlc0NvbnRhaW5lciBbY2xhc3MubG9hZGluZ109XCJsb2FkaW5nXCIgY2xhc3M9XCJtZXNzYWdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1zZyBvZiBtZXNzYWdlcygpOyB0cmFja0J5OiB0cmFja0J5SWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvdXRnb2luZzogbXNnLnNlbmRlcklkID09PSBjaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCwgaW5jb21pbmc6IG1zZy5zZW5kZXJJZCAhPT0gY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2Utcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLWJ1YmJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbWV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZW5kZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAqbmdJZj1cIm1zZy5zZW5kZXJJZCAhPT0gY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWRcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICB7eyBtc2cuc2VuZGVyTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtc2cuY3JlYXRlZEF0IHwgZGF0ZTogJ3Nob3J0VGltZScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNRVNTQUdFIFRFWFQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXNnLmNvbnRlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWFyZWFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicmVwbHlUb1wiIGNsYXNzPVwicmVwbHktYmFubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlJlcGx5aW5nIHRvOiB7eyByZXBseVRvLmNvbnRlbnQgfCBzbGljZTogMDo1MCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJSZXBseSgpXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtXCIgaWNvbj1cInBpIHBpLXRpbWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgKGtleXVwLmVudGVyKT1cInNlbmQoKVwiIFsobmdNb2RlbCldPVwibmV3TWVzc2FnZVwiIGF1dG9SZXNpemU9XCJ0cnVlXCIgcElucHV0VGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIGEgbWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9XCIyXCI+XHJcbiAgICAgICAgICA8L3RleHRhcmVhPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZW5kKClcIiBpY29uPVwicGkgcGktc2VuZFwiIGxhYmVsPVwiU2VuZFwiIHBCdXR0b24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGF0LXNpZGViYXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+VXNlcnM8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB1IG9mIHVzZXJzKClcIiBjbGFzcz1cInVzZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWF2YXRhciBbbGFiZWxdPVwidS51c2VybmFtZVswXVwiPjwvcC1hdmF0YXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHUudXNlcm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd0FjdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LWFkZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVXNlclwiIFtvcHRpb25zXT1cImNoYXRTZXJ2aWNlLnVzZXJMaXN0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImZ1bGxfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFVzZXJcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRVc2VyVG9Sb29tKClcIiBpY29uPVwicGkgcGktcGx1c1wiIGxhYmVsPVwiQWRkXCIgcEJ1dHRvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aW5kb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC13aWRnZXQvc3JjL2xpYi9jaGF0LXdpbmRvdy9jaGF0LXdpbmRvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxF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QW1CO21HQUFuQixtQkFBbUIsa3BDQUZqQixDQUFDLGNBQWMsQ0FBQyx1UEM1Qy9CLDg1SkE2Rk0sMmtLRDlERSxZQUFZLGtaQUNaLFdBQVcsOG1CQUNYLFdBQVcsdVdBQ1gsWUFBWSw0T0FDWixZQUFZLGtPQUNaLGFBQWEscVhBQ2IsbUJBQW1CLHFLQUNuQixVQUFVLDhCQUNWLGNBQWMsdXRDQUNkLGtCQUFrQjs7NEZBTWIsbUJBQW1CO2tCQW5CL0IsU0FBUzsrQkFDSSxpQkFBaUIsY0FDZixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLGNBQWM7d0JBQ2Qsa0JBQWtCO3FCQUNyQixhQUdVLENBQUMsY0FBYyxDQUFDO3dEQUdsQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFpQnlCLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0EsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGluamVjdCxcclxuICAgIElucHV0LFxyXG4gICAgaW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBzaWduYWwsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDaGF0U2VydmljZX0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1NvY2tldFNlcnZpY2V9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvc29ja2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1RvYXN0TW9kdWxlfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHtNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQge0F2YXRhck1vZHVsZX0gZnJvbSAncHJpbWVuZy9hdmF0YXInO1xyXG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7SW5wdXRUZXh0YXJlYU1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuaW1wb3J0IHtEcm9wZG93bk1vZHVsZX0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7Q2hpcE1vZHVsZX0gZnJvbSAncHJpbWVuZy9jaGlwJztcclxuaW1wb3J0IHtDaGF0TWVzc2FnZX0gZnJvbSAnLi4vY29yZS9tb2RlbHMvY2hhdC5tb2RlbHMnO1xyXG5pbXBvcnQge092ZXJsYXlQYW5lbCwgT3ZlcmxheVBhbmVsTW9kdWxlfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLWNoYXQtd2luZG93JyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIFRvYXN0TW9kdWxlLFxyXG4gICAgICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgICAgICBBdmF0YXJNb2R1bGUsXHJcbiAgICAgICAgVG9vbHRpcE1vZHVsZSxcclxuICAgICAgICBJbnB1dFRleHRhcmVhTW9kdWxlLFxyXG4gICAgICAgIENoaXBNb2R1bGUsXHJcbiAgICAgICAgRHJvcGRvd25Nb2R1bGUsXHJcbiAgICAgICAgT3ZlcmxheVBhbmVsTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtd2luZG93LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NoYXQtd2luZG93LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXRXaW5kb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQElucHV0KCkgY2hhdFJvb21JZCE6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGhlYWRlciA9ICdDaGF0JztcclxuICAgIEBJbnB1dCgpIG1ldGFkYXRhID0gJyc7XHJcbiAgICBASW5wdXQoKSBjaGF0VXNlcnMgPSBbXTtcclxuICAgIEBJbnB1dCgpIHNob3dBY3Rpb25zID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIG1vZGU6ICdmbG9hdGluZycgfCAnZnVsbHNjcmVlbicgPSAnZmxvYXRpbmcnO1xyXG4gICAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnO1xyXG4gICAgQE91dHB1dCgpIG9uQXJjaGl2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIHJlZnJlc2hSb29tID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgLy8gQElucHV0KCkgY3VycmVudFVzZXI6IGFueTtcclxuXHJcbiAgICBjaGF0U2VydmljZSA9IGluamVjdChDaGF0U2VydmljZSk7XHJcbiAgICBzb2NrZXQgPSBpbmplY3QoU29ja2V0U2VydmljZSk7XHJcbiAgICBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XHJcblxyXG4gICAgdXNlcnMgPSBzaWduYWw8YW55W10+KFtdKTtcclxuICAgIG1lc3NhZ2VzID0gc2lnbmFsPENoYXRNZXNzYWdlW10+KFtdKTtcclxuICAgIG5ld01lc3NhZ2UgPSAnJztcclxuICAgIG1pbmltaXplZCA9IGZhbHNlO1xyXG4gICAgbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcmVwbHlUbzogQ2hhdE1lc3NhZ2UgfCBudWxsID0gbnVsbDtcclxuICAgIHNlbGVjdGVkVXNlcjogYW55O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ21lc3NhZ2VzQ29udGFpbmVyJykgbWVzc2FnZXNDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3JlYWN0aW9uT3ZlcmxheScpIHJlYWN0aW9uT3ZlcmxheSE6IE92ZXJsYXlQYW5lbDtcclxuXHJcbiAgICBwcml2YXRlIG9ic2VydmVyITogTXV0YXRpb25PYnNlcnZlcjtcclxuXHJcbiAgICBzaG93VXNlcnMgPSBmYWxzZTtcclxuICAgIHN1Z2dlc3Rpb24gPSAnJztcclxuICAgIGhvdmVyZWRSZWFjdGlvblVzZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuc29ja2V0LmpvaW5Sb29tKHRoaXMuY2hhdFJvb21JZCk7XHJcbiAgICAgICAgdGhpcy5zb2NrZXQuam9pblVzZXJDaGFubmVsKHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQpO1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXJzKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkTWVzc2FnZXMoKTtcclxuICAgICAgICB0aGlzLmxpc3RlblNvY2tldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRVc2VycygpIHtcclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb21Vc2Vycyh0aGlzLmNoYXRSb29tSWQpLnN1YnNjcmliZSh1c2VycyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcnMuc2V0KHVzZXJzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTWVzc2FnZXMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldE1lc3NhZ2VzKHRoaXMuY2hhdFJvb21JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogbXNncyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnNldChtc2dzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxpc3RlblNvY2tldCgpIHtcclxuICAgICAgICB0aGlzLnNvY2tldC5vbjxDaGF0TWVzc2FnZT4oJ25ld01lc3NhZ2UnKS5zdWJzY3JpYmUobXNnID0+IHtcclxuICAgICAgICAgICAgaWYgKG1zZy5jaGF0Um9vbUlkID09PSB0aGlzLmNoYXRSb29tSWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMudXBkYXRlKGxpc3QgPT4gWy4uLmxpc3QsIG1zZ10pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAobXNnLnNlbmRlcklkICE9PSB0aGlzLmNoYXRTZXJ2aWNlLmN1cnJlbnRVc2VyKCkudXNlcklkKSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgICAvLyAgICAgc2V2ZXJpdHk6ICdpbmZvJyxcclxuICAgICAgICAgICAgLy8gICAgIHN1bW1hcnk6IHRoaXMuaGVhZGVyLFxyXG4gICAgICAgICAgICAvLyAgICAgZGV0YWlsOiBtc2cuY29udGVudCA/PyAnTmV3IG1lc3NhZ2UnLFxyXG4gICAgICAgICAgICAvLyAgICAgbGlmZTogMjUwMFxyXG4gICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc29ja2V0Lm9uKCdyb29tVXNlckFkZGVkJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobXNnLmNoYXRSb29tSWQgPT09IHRoaXMuY2hhdFJvb21JZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlcnMoKTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgICAgIC8vICAgc2V2ZXJpdHk6ICdpbmZvJyxcclxuICAgICAgICAgICAgICAgIC8vICAgc3VtbWFyeTogJ1VzZXIgQWRkZWQnLFxyXG4gICAgICAgICAgICAgICAgLy8gICBkZXRhaWw6IG1zZy51c2VyPy51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgIC8vICAgbGlmZTogMjUwMFxyXG4gICAgICAgICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zb2NrZXQub24oJ2FkZGVkVG9Sb29tJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobXNnLmNoYXRSb29tSWQgPT09IHRoaXMuY2hhdFJvb21JZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVXNlcnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNvY2tldC5vbigndXNlckFscmVhZHlJblJvb20nKS5zdWJzY3JpYmUoKG1zZzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGlmIChtc2cuY2hhdFJvb21JZCA9PT0gdGhpcy5jaGF0Um9vbUlkKSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgICAvLyAgICAgc2V2ZXJpdHk6ICdpbmZvJyxcclxuICAgICAgICAgICAgLy8gICAgIHN1bW1hcnk6ICdVc2VyIEFscmVhZHkgQWRkZWQnLFxyXG4gICAgICAgICAgICAvLyAgICAgZGV0YWlsOiBtc2cudXNlcj8udXNlck5hbWUsXHJcbiAgICAgICAgICAgIC8vICAgICBsaWZlOiAyNTAwXHJcbiAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLm5ld01lc3NhZ2UudHJpbSgpO1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLnNlbmRNZXNzYWdlKHRoaXMuY2hhdFJvb21JZCwge1xyXG4gICAgICAgICAgICBzZW5kZXJJZDogdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCxcclxuICAgICAgICAgICAgc2VuZGVyTmFtZTogdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLm5hbWUsXHJcbiAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IHRoaXMucmVwbHlUbz8ucmVwbHlUb01lc3NhZ2VJZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBjcmVhdGVkQnk6IHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWRcclxuICAgICAgICB9KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5ld01lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5yZXBseVRvID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVG9Sb29tKCkge1xyXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuYWRkVXNlclRvUm9vbShcclxuICAgICAgICAgICAgdGhpcy5jaGF0Um9vbUlkLFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcj8udXNlcl9pZCxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXI/LmZ1bGxfbmFtZSxcclxuICAgICAgICAgICAgdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVNaW5pbWl6ZSgpIHtcclxuICAgICAgICB0aGlzLm1pbmltaXplZCA9ICF0aGlzLm1pbmltaXplZDtcclxuICAgIH1cclxuXHJcbiAgICBhcmNoaXZlQ2hhdCgpIHtcclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmFyY2hpdmVSb29tKHRoaXMuY2hhdFJvb21JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkFyY2hpdmUuZW1pdCh0aGlzLmNoYXRSb29tSWQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyID0+IGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJlcGx5KG1zZzogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLnJlcGx5VG8gPSBtc2c7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJSZXBseSgpIHtcclxuICAgICAgICB0aGlzLnJlcGx5VG8gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBtc2c6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZy5pZDtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLnNvY2tldC5vZmZOZXdNZXNzYWdlKCk7XHJcbiAgICAgICAgdGhpcy5zb2NrZXQub2ZmTWVzc2FnZVNlZW4oKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5tZXNzYWdlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyDwn5SlIFNjcm9sbCBBRlRFUiBET00gYWN0dWFsbHkgY2hhbmdlc1xyXG4gICAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShlbCwge1xyXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsXHJcbiAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVVc2VycygpIHtcclxuICAgICAgICB0aGlzLnNob3dVc2VycyA9ICF0aGlzLnNob3dVc2VycztcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUNoYXQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcclxuICAgIH1cclxufVxyXG4iLCI8cC10b2FzdD48L3AtdG9hc3Q+XHJcblxyXG48ZGl2IFtjbGFzcy5kYXJrXT1cInRoZW1lID09PSAnZGFyaydcIiBbY2xhc3MuZmxvYXRpbmddPVwibW9kZSA9PT0gJ2Zsb2F0aW5nJ1wiIFtjbGFzcy5mdWxsc2NyZWVuXT1cIm1vZGUgPT09ICdmdWxsc2NyZWVuJ1wiXHJcbiAgICAgW2NsYXNzLm1pbmltaXplZF09XCJtaW5pbWl6ZWRcIiBjbGFzcz1cImNoYXQtd2luZG93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hhdC1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBoZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXJzKCkubGVuZ3RoXCI+KHt7IHVzZXJzKCkubGVuZ3RoIH19IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzKCkubGVuZ3RoID09IDEgPyAncGFydGljaXBhbnQnIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJ0aWNpcGFudHMnXHJcbiAgICAgICAgICAgICAgICAgICAgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IG1ldGFkYXRhIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlVXNlcnMoKVwiIGljb249XCJwaSBwaS11c2Vyc1wiIHBCdXR0b24gcFRvb2x0aXA9XCJUb29nbGUgVXNlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAwLjVyZW1cIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgQGlmIChzaG93QWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlTWluaW1pemUoKVwiIFtpY29uXT1cIm1pbmltaXplZCA/ICdwaSBwaS1wbHVzJyA6ICdwaSBwaS1taW51cydcIiBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiSGlkZS9TaG93XCIgc3R5bGU9XCJmb250LXNpemU6IDAuNXJlbVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYXJjaGl2ZUNoYXQoKVwiIGljb249XCJwaSBwaS10cmFzaFwiIHBCdXR0b24gcFRvb2x0aXA9XCJBcmNoaXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDAuNXJlbVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VDaGF0KClcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uIHBUb29sdGlwPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMC41cmVtXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhbWluaW1pemVkXCIgY2xhc3M9XCJjaGF0LWJvZHlcIj5cclxuICAgICAgICA8ZGl2IFtjbGFzcy51c2Vycy1oaWRkZW5dPVwiIXNob3dVc2Vyc1wiIGNsYXNzPVwiY2hhdC1sYXlvdXRcIj5cclxuICAgICAgICAgICAgPGRpdiBbY2xhc3MuZmxvYXRpbmddPVwibW9kZSA9PT0gJ2Zsb2F0aW5nJ1wiIFtjbGFzcy5mdWxsc2NyZWVuXT1cIm1vZGUgPT09ICdmdWxsc2NyZWVuJ1wiIGNsYXNzPVwiY2hhdC1tYWluXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNtZXNzYWdlc0NvbnRhaW5lciBbY2xhc3MubG9hZGluZ109XCJsb2FkaW5nXCIgY2xhc3M9XCJtZXNzYWdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1zZyBvZiBtZXNzYWdlcygpOyB0cmFja0J5OiB0cmFja0J5SWRcIiBbbmdDbGFzc109XCJ7IG91dGdvaW5nOiBtc2cuc2VuZGVySWQgPT09IGNoYXRTZXJ2aWNlLmN1cnJlbnRVc2VyKCkudXNlcklkLCBpbmNvbWluZzogbXNnLnNlbmRlcklkICE9PSBjaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVzc2FnZS1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtYnViYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1tZXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICpuZ0lmPVwibXNnLnNlbmRlcklkICE9PSBjaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZFwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG1zZy5zZW5kZXJOYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1zZy5jcmVhdGVkQXQgfCBkYXRlOiAnc2hvcnRUaW1lJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1FU1NBR0UgVEVYVCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtc2cuY29udGVudCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZXBseVRvXCIgY2xhc3M9XCJyZXBseS1iYW5uZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UmVwbHlpbmcgdG86IHt7IHJlcGx5VG8uY29udGVudCB8IHNsaWNlOiAwOjUwIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhclJlcGx5KClcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc21cIiBpY29uPVwicGkgcGktdGltZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAoa2V5dXAuZW50ZXIpPVwic2VuZCgpXCIgWyhuZ01vZGVsKV09XCJuZXdNZXNzYWdlXCIgYXV0b1Jlc2l6ZT1cInRydWVcIiBwSW5wdXRUZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYSBtZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cz1cIjJcIj5cclxuICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNlbmQoKVwiIGljb249XCJwaSBwaS1zZW5kXCIgbGFiZWw9XCJTZW5kXCIgcEJ1dHRvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXQtc2lkZWJhclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Vc2VyczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHUgb2YgdXNlcnMoKVwiIGNsYXNzPVwidXNlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtYXZhdGFyIFtsYWJlbF09XCJ1LnVzZXJuYW1lWzBdXCI+PC9wLWF2YXRhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdS51c2VybmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgQGlmIChzaG93QWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtYWRkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFsobmdNb2RlbCldPVwic2VsZWN0ZWRVc2VyXCIgW29wdGlvbnNdPVwiY2hhdFNlcnZpY2UudXNlckxpc3QoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiZnVsbF9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVXNlclwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZFVzZXJUb1Jvb20oKVwiIGljb249XCJwaSBwaS1wbHVzXCIgbGFiZWw9XCJBZGRcIiBwQnV0dG9uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -356,7 +356,7 @@ class ChatWindowComponent {
356
356
  this.onClose.emit();
357
357
  }
358
358
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
359
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChatWindowComponent, isStandalone: true, selector: "app-chat-window", inputs: { chatRoomId: { classPropertyName: "chatRoomId", publicName: "chatRoomId", isSignal: false, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: false, isRequired: false, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: false, isRequired: false, transformFunction: null }, chatUsers: { classPropertyName: "chatUsers", publicName: "chatUsers", isSignal: false, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: false, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: false, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: false, isRequired: false, transformFunction: null }, refreshRoom: { classPropertyName: "refreshRoom", publicName: "refreshRoom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onArchive: "onArchive", onClose: "onClose" }, providers: [MessageService], viewQueries: [{ propertyName: "messagesContainer", first: true, predicate: ["messagesContainer"], descendants: true }, { propertyName: "reactionOverlay", first: true, predicate: ["reactionOverlay"], descendants: true }], ngImport: i0, template: "<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()\" appendTo=\"body\" 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'\" appendTo=\"body\"\r\n pButton pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" appendTo=\"body\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"closeChat()\" appendTo=\"body\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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\"\r\n [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>", styles: [".chat-window{width:35vw;max-width:95vw;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 8px 30px #0000001f;overflow:visible;font-size:14px;font-family:Inter,system-ui,sans-serif}.chat-window.minimized{height:auto}.chat-header{display:flex;align-items:center;justify-content:space-between;background:#4f6ef7;color:#fff;padding:10px 14px}.chat-header .title{display:flex;flex-direction:row;gap:6px}.chat-header .title span{font-weight:600;font-size:14px}.chat-header .title small{font-size:11px;opacity:.85}.chat-body{display:flex;flex:1;background:#f5f7fb}.chat-layout{display:flex;flex:1;width:100%;overflow:hidden}.chat-layout.users-hidden .chat-sidebar{transform:translate(100%);opacity:0;pointer-events:none;width:0!important}.chat-layout.users-hidden .chat-main{flex:1 1 100%}.chat-main{flex:1;display:flex;flex-direction:column;background:#f5f7fb;height:70vh}.messages{flex:1;padding:16px 14px;overflow-y:auto;scroll-behavior:smooth}.message-row{display:flex;margin-bottom:14px;animation:messageIn .25s ease-out;position:relative;overflow:visible;padding-top:28px}@keyframes messageIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.message-row.incoming{justify-content:flex-start}.message-row.incoming .reaction-bar{left:12px}.message-row.outgoing{justify-content:flex-end}.message-row.outgoing .reaction-bar{right:12px;left:auto}.message-bubble{position:relative;max-width:72%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;word-break:break-word;overflow:visible}.message-row.incoming .message-bubble{background:#fff;color:#111;border-top-left-radius:6px;box-shadow:0 3px 10px #0000000f;overflow:visible}.message-bubble:after{content:\"\";position:absolute;bottom:-6px;right:8px}.message-row.incoming .message-bubble:after{content:\"\";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #ffffff}.message-row.outgoing .message-bubble{background:#4f6ef7;color:#fff;border-top-right-radius:6px;overflow:visible}.message-row.outgoing .message-bubble:after{content:\"\";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #4f6ef7}.message-meta{display:flex;justify-content:flex-end;font-size:10px;opacity:.6;margin-bottom:4px}.typing-indicator{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-radius:14px;box-shadow:0 2px 6px #00000014}.typing-indicator span{width:6px;height:6px;background:#999;border-radius:50%;animation:typingDots 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typingDots{0%{transform:translateY(0);opacity:.4}50%{transform:translateY(-4px);opacity:1}to{transform:translateY(0);opacity:.4}}.input-area{background:#fff;padding:10px;border:1px solid #e5e7eb;display:flex;flex-direction:row;justify-content:space-between;gap:5px}.input-area textarea{max-height:60px;overflow:hidden;width:-webkit-fill-available}.reply-banner{background:#eef2ff;border-left:3px solid #4f6ef7;padding:6px 8px;font-size:12px;border-radius:8px;margin-bottom:6px;display:flex;justify-content:space-between}.input-actions{display:flex;justify-content:flex-end;margin-top:6px}.input-actions button{background:#4f6ef7;color:#fff;border-radius:999px;padding:0 16px}.chat-sidebar{background:#fff;border-left:1px solid #e5e7eb;box-shadow:-4px 0 10px #0000000d;display:flex;flex-direction:column}.section-title{font-weight:600;font-size:13px;padding:10px;border-bottom:1px solid #e5e7eb}.user-list{flex:1;overflow-y:auto;padding:8px;max-height:20em}.user-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px}.user-row:hover{background:#f1f5f9}.user-list-add{padding:10px;border-top:1px solid #e5e7eb}.header-actions{display:flex;align-items:center;gap:6px}.header-actions .p-button{width:32px;height:32px;padding:0;border-radius:50%;background:#ffffff26}.header-actions .p-button:hover{background:#ffffff40}.chat-header{min-height:48px}.header-actions{flex-shrink:0}.header-actions .p-button{transition:background .2s ease,transform .1s ease}.header-actions .p-button:active{transform:scale(.92)}.reaction-bar{position:absolute;top:0;left:12px;transform:translateY(-100%);background:#fff;border-radius:20px;padding:4px 8px;display:none;box-shadow:0 2px 8px #0003;z-index:9999}.message-bubble:hover .reaction-bar{display:flex}.reaction-bar span{cursor:pointer;font-size:16px}.reaction-summary{margin-top:4px;display:flex;gap:6px}.reaction-chip{background:#f1f1f1;padding:2px 6px;border-radius:12px;font-size:12px;position:relative}.reaction-users-tooltip{position:absolute;bottom:130%;left:50%;transform:translate(-50%);white-space:nowrap;background:#222;color:#fff;padding:4px 8px;border-radius:6px;z-index:10000;bottom:calc(100% + 6px)}.message-row,.message-bubble,.reaction-summary{overflow:visible!important}.p-tooltip{z-index:9999!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.SlicePipe, name: "slice" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i3.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i7.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: OverlayPanelModule }] }); }
359
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ChatWindowComponent, isStandalone: true, selector: "app-chat-window", inputs: { chatRoomId: { classPropertyName: "chatRoomId", publicName: "chatRoomId", isSignal: false, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: false, isRequired: false, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: false, isRequired: false, transformFunction: null }, chatUsers: { classPropertyName: "chatUsers", publicName: "chatUsers", isSignal: false, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: false, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: false, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: false, isRequired: false, transformFunction: null }, refreshRoom: { classPropertyName: "refreshRoom", publicName: "refreshRoom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onArchive: "onArchive", onClose: "onClose" }, providers: [MessageService], viewQueries: [{ propertyName: "messagesContainer", first: true, predicate: ["messagesContainer"], descendants: true }, { propertyName: "reactionOverlay", first: true, predicate: ["reactionOverlay"], descendants: true }], ngImport: i0, template: "<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 <button (click)=\"closeChat()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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>", styles: [".chat-window{width:35vw;max-width:95vw;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 8px 30px #0000001f;overflow:visible;font-size:14px;font-family:Inter,system-ui,sans-serif}.chat-window.minimized{height:auto}.chat-header{display:flex;align-items:center;justify-content:space-between;background:#4f6ef7;color:#fff;padding:10px 14px}.chat-header .title{display:flex;flex-direction:row;gap:6px}.chat-header .title span{font-weight:600;font-size:14px}.chat-header .title small{font-size:11px;opacity:.85}.chat-body{display:flex;flex:1;background:#f5f7fb}.chat-layout{display:flex;flex:1;width:100%;overflow:hidden}.chat-layout.users-hidden .chat-sidebar{transform:translate(100%);opacity:0;pointer-events:none;width:0!important}.chat-layout.users-hidden .chat-main{flex:1 1 100%}.chat-main{flex:1;display:flex;flex-direction:column;background:#f5f7fb;height:70vh}.messages{flex:1;padding:16px 14px;overflow-y:auto;scroll-behavior:smooth}.message-row{display:flex;margin-bottom:14px;animation:messageIn .25s ease-out;position:relative;overflow:visible;padding-top:28px}@keyframes messageIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.message-row.incoming{justify-content:flex-start}.message-row.incoming .reaction-bar{left:12px}.message-row.outgoing{justify-content:flex-end}.message-row.outgoing .reaction-bar{right:12px;left:auto}.message-bubble{position:relative;max-width:72%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;word-break:break-word;overflow:visible}.message-row.incoming .message-bubble{background:#fff;color:#111;border-top-left-radius:6px;box-shadow:0 3px 10px #0000000f;overflow:visible}.message-bubble:after{content:\"\";position:absolute;bottom:-6px;right:8px}.message-row.incoming .message-bubble:after{content:\"\";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #ffffff}.message-row.outgoing .message-bubble{background:#4f6ef7;color:#fff;border-top-right-radius:6px;overflow:visible}.message-row.outgoing .message-bubble:after{content:\"\";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #4f6ef7}.message-meta{display:flex;justify-content:flex-end;font-size:10px;opacity:.6;margin-bottom:4px}.typing-indicator{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-radius:14px;box-shadow:0 2px 6px #00000014}.typing-indicator span{width:6px;height:6px;background:#999;border-radius:50%;animation:typingDots 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typingDots{0%{transform:translateY(0);opacity:.4}50%{transform:translateY(-4px);opacity:1}to{transform:translateY(0);opacity:.4}}.input-area{background:#fff;padding:10px;border:1px solid #e5e7eb;display:flex;flex-direction:row;justify-content:space-between;gap:5px}.input-area textarea{max-height:60px;overflow:hidden;width:-webkit-fill-available}.reply-banner{background:#eef2ff;border-left:3px solid #4f6ef7;padding:6px 8px;font-size:12px;border-radius:8px;margin-bottom:6px;display:flex;justify-content:space-between}.input-actions{display:flex;justify-content:flex-end;margin-top:6px}.input-actions button{background:#4f6ef7;color:#fff;border-radius:999px;padding:0 16px}.chat-sidebar{background:#fff;border-left:1px solid #e5e7eb;box-shadow:-4px 0 10px #0000000d;display:flex;flex-direction:column}.section-title{font-weight:600;font-size:13px;padding:10px;border-bottom:1px solid #e5e7eb}.user-list{flex:1;overflow-y:auto;padding:8px;max-height:20em}.user-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px}.user-row:hover{background:#f1f5f9}.user-list-add{padding:10px;border-top:1px solid #e5e7eb}.header-actions{display:flex;align-items:center;gap:6px}.header-actions .p-button{width:32px;height:32px;padding:0;border-radius:50%;background:#ffffff26}.header-actions .p-button:hover{background:#ffffff40}.chat-header{min-height:48px}.header-actions{flex-shrink:0}.header-actions .p-button{transition:background .2s ease,transform .1s ease}.header-actions .p-button:active{transform:scale(.92)}.reaction-bar{position:absolute;top:0;left:12px;transform:translateY(-100%);background:#fff;border-radius:20px;padding:4px 8px;display:none;box-shadow:0 2px 8px #0003;z-index:9999}.message-bubble:hover .reaction-bar{display:flex}.reaction-bar span{cursor:pointer;font-size:16px}.reaction-summary{margin-top:4px;display:flex;gap:6px}.reaction-chip{background:#f1f1f1;padding:2px 6px;border-radius:12px;font-size:12px;position:relative}.reaction-users-tooltip{position:absolute;bottom:130%;left:50%;transform:translate(-50%);white-space:nowrap;background:#222;color:#fff;padding:4px 8px;border-radius:6px;z-index:10000;bottom:calc(100% + 6px)}.message-row,.message-bubble,.reaction-summary{overflow:visible!important}.p-tooltip{z-index:9999!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.SlicePipe, name: "slice" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i3.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i7.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: OverlayPanelModule }] }); }
360
360
  }
361
361
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWindowComponent, decorators: [{
362
362
  type: Component,
@@ -371,7 +371,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
371
371
  ChipModule,
372
372
  DropdownModule,
373
373
  OverlayPanelModule
374
- ], providers: [MessageService], template: "<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()\" appendTo=\"body\" 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'\" appendTo=\"body\"\r\n pButton pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" appendTo=\"body\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"closeChat()\" appendTo=\"body\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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\"\r\n [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>", styles: [".chat-window{width:35vw;max-width:95vw;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 8px 30px #0000001f;overflow:visible;font-size:14px;font-family:Inter,system-ui,sans-serif}.chat-window.minimized{height:auto}.chat-header{display:flex;align-items:center;justify-content:space-between;background:#4f6ef7;color:#fff;padding:10px 14px}.chat-header .title{display:flex;flex-direction:row;gap:6px}.chat-header .title span{font-weight:600;font-size:14px}.chat-header .title small{font-size:11px;opacity:.85}.chat-body{display:flex;flex:1;background:#f5f7fb}.chat-layout{display:flex;flex:1;width:100%;overflow:hidden}.chat-layout.users-hidden .chat-sidebar{transform:translate(100%);opacity:0;pointer-events:none;width:0!important}.chat-layout.users-hidden .chat-main{flex:1 1 100%}.chat-main{flex:1;display:flex;flex-direction:column;background:#f5f7fb;height:70vh}.messages{flex:1;padding:16px 14px;overflow-y:auto;scroll-behavior:smooth}.message-row{display:flex;margin-bottom:14px;animation:messageIn .25s ease-out;position:relative;overflow:visible;padding-top:28px}@keyframes messageIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.message-row.incoming{justify-content:flex-start}.message-row.incoming .reaction-bar{left:12px}.message-row.outgoing{justify-content:flex-end}.message-row.outgoing .reaction-bar{right:12px;left:auto}.message-bubble{position:relative;max-width:72%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;word-break:break-word;overflow:visible}.message-row.incoming .message-bubble{background:#fff;color:#111;border-top-left-radius:6px;box-shadow:0 3px 10px #0000000f;overflow:visible}.message-bubble:after{content:\"\";position:absolute;bottom:-6px;right:8px}.message-row.incoming .message-bubble:after{content:\"\";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #ffffff}.message-row.outgoing .message-bubble{background:#4f6ef7;color:#fff;border-top-right-radius:6px;overflow:visible}.message-row.outgoing .message-bubble:after{content:\"\";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #4f6ef7}.message-meta{display:flex;justify-content:flex-end;font-size:10px;opacity:.6;margin-bottom:4px}.typing-indicator{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-radius:14px;box-shadow:0 2px 6px #00000014}.typing-indicator span{width:6px;height:6px;background:#999;border-radius:50%;animation:typingDots 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typingDots{0%{transform:translateY(0);opacity:.4}50%{transform:translateY(-4px);opacity:1}to{transform:translateY(0);opacity:.4}}.input-area{background:#fff;padding:10px;border:1px solid #e5e7eb;display:flex;flex-direction:row;justify-content:space-between;gap:5px}.input-area textarea{max-height:60px;overflow:hidden;width:-webkit-fill-available}.reply-banner{background:#eef2ff;border-left:3px solid #4f6ef7;padding:6px 8px;font-size:12px;border-radius:8px;margin-bottom:6px;display:flex;justify-content:space-between}.input-actions{display:flex;justify-content:flex-end;margin-top:6px}.input-actions button{background:#4f6ef7;color:#fff;border-radius:999px;padding:0 16px}.chat-sidebar{background:#fff;border-left:1px solid #e5e7eb;box-shadow:-4px 0 10px #0000000d;display:flex;flex-direction:column}.section-title{font-weight:600;font-size:13px;padding:10px;border-bottom:1px solid #e5e7eb}.user-list{flex:1;overflow-y:auto;padding:8px;max-height:20em}.user-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px}.user-row:hover{background:#f1f5f9}.user-list-add{padding:10px;border-top:1px solid #e5e7eb}.header-actions{display:flex;align-items:center;gap:6px}.header-actions .p-button{width:32px;height:32px;padding:0;border-radius:50%;background:#ffffff26}.header-actions .p-button:hover{background:#ffffff40}.chat-header{min-height:48px}.header-actions{flex-shrink:0}.header-actions .p-button{transition:background .2s ease,transform .1s ease}.header-actions .p-button:active{transform:scale(.92)}.reaction-bar{position:absolute;top:0;left:12px;transform:translateY(-100%);background:#fff;border-radius:20px;padding:4px 8px;display:none;box-shadow:0 2px 8px #0003;z-index:9999}.message-bubble:hover .reaction-bar{display:flex}.reaction-bar span{cursor:pointer;font-size:16px}.reaction-summary{margin-top:4px;display:flex;gap:6px}.reaction-chip{background:#f1f1f1;padding:2px 6px;border-radius:12px;font-size:12px;position:relative}.reaction-users-tooltip{position:absolute;bottom:130%;left:50%;transform:translate(-50%);white-space:nowrap;background:#222;color:#fff;padding:4px 8px;border-radius:6px;z-index:10000;bottom:calc(100% + 6px)}.message-row,.message-bubble,.reaction-summary{overflow:visible!important}.p-tooltip{z-index:9999!important}\n"] }]
374
+ ], providers: [MessageService], template: "<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 <button (click)=\"closeChat()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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>", styles: [".chat-window{width:35vw;max-width:95vw;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 8px 30px #0000001f;overflow:visible;font-size:14px;font-family:Inter,system-ui,sans-serif}.chat-window.minimized{height:auto}.chat-header{display:flex;align-items:center;justify-content:space-between;background:#4f6ef7;color:#fff;padding:10px 14px}.chat-header .title{display:flex;flex-direction:row;gap:6px}.chat-header .title span{font-weight:600;font-size:14px}.chat-header .title small{font-size:11px;opacity:.85}.chat-body{display:flex;flex:1;background:#f5f7fb}.chat-layout{display:flex;flex:1;width:100%;overflow:hidden}.chat-layout.users-hidden .chat-sidebar{transform:translate(100%);opacity:0;pointer-events:none;width:0!important}.chat-layout.users-hidden .chat-main{flex:1 1 100%}.chat-main{flex:1;display:flex;flex-direction:column;background:#f5f7fb;height:70vh}.messages{flex:1;padding:16px 14px;overflow-y:auto;scroll-behavior:smooth}.message-row{display:flex;margin-bottom:14px;animation:messageIn .25s ease-out;position:relative;overflow:visible;padding-top:28px}@keyframes messageIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.message-row.incoming{justify-content:flex-start}.message-row.incoming .reaction-bar{left:12px}.message-row.outgoing{justify-content:flex-end}.message-row.outgoing .reaction-bar{right:12px;left:auto}.message-bubble{position:relative;max-width:72%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;word-break:break-word;overflow:visible}.message-row.incoming .message-bubble{background:#fff;color:#111;border-top-left-radius:6px;box-shadow:0 3px 10px #0000000f;overflow:visible}.message-bubble:after{content:\"\";position:absolute;bottom:-6px;right:8px}.message-row.incoming .message-bubble:after{content:\"\";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid #ffffff}.message-row.outgoing .message-bubble{background:#4f6ef7;color:#fff;border-top-right-radius:6px;overflow:visible}.message-row.outgoing .message-bubble:after{content:\"\";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #4f6ef7}.message-meta{display:flex;justify-content:flex-end;font-size:10px;opacity:.6;margin-bottom:4px}.typing-indicator{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;background:#fff;border-radius:14px;box-shadow:0 2px 6px #00000014}.typing-indicator span{width:6px;height:6px;background:#999;border-radius:50%;animation:typingDots 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typingDots{0%{transform:translateY(0);opacity:.4}50%{transform:translateY(-4px);opacity:1}to{transform:translateY(0);opacity:.4}}.input-area{background:#fff;padding:10px;border:1px solid #e5e7eb;display:flex;flex-direction:row;justify-content:space-between;gap:5px}.input-area textarea{max-height:60px;overflow:hidden;width:-webkit-fill-available}.reply-banner{background:#eef2ff;border-left:3px solid #4f6ef7;padding:6px 8px;font-size:12px;border-radius:8px;margin-bottom:6px;display:flex;justify-content:space-between}.input-actions{display:flex;justify-content:flex-end;margin-top:6px}.input-actions button{background:#4f6ef7;color:#fff;border-radius:999px;padding:0 16px}.chat-sidebar{background:#fff;border-left:1px solid #e5e7eb;box-shadow:-4px 0 10px #0000000d;display:flex;flex-direction:column}.section-title{font-weight:600;font-size:13px;padding:10px;border-bottom:1px solid #e5e7eb}.user-list{flex:1;overflow-y:auto;padding:8px;max-height:20em}.user-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px}.user-row:hover{background:#f1f5f9}.user-list-add{padding:10px;border-top:1px solid #e5e7eb}.header-actions{display:flex;align-items:center;gap:6px}.header-actions .p-button{width:32px;height:32px;padding:0;border-radius:50%;background:#ffffff26}.header-actions .p-button:hover{background:#ffffff40}.chat-header{min-height:48px}.header-actions{flex-shrink:0}.header-actions .p-button{transition:background .2s ease,transform .1s ease}.header-actions .p-button:active{transform:scale(.92)}.reaction-bar{position:absolute;top:0;left:12px;transform:translateY(-100%);background:#fff;border-radius:20px;padding:4px 8px;display:none;box-shadow:0 2px 8px #0003;z-index:9999}.message-bubble:hover .reaction-bar{display:flex}.reaction-bar span{cursor:pointer;font-size:16px}.reaction-summary{margin-top:4px;display:flex;gap:6px}.reaction-chip{background:#f1f1f1;padding:2px 6px;border-radius:12px;font-size:12px;position:relative}.reaction-users-tooltip{position:absolute;bottom:130%;left:50%;transform:translate(-50%);white-space:nowrap;background:#222;color:#fff;padding:4px 8px;border-radius:6px;z-index:10000;bottom:calc(100% + 6px)}.message-row,.message-bubble,.reaction-summary{overflow:visible!important}.p-tooltip{z-index:9999!important}\n"] }]
375
375
  }], ctorParameters: () => [], propDecorators: { chatRoomId: [{
376
376
  type: Input
377
377
  }], header: [{
@@ -461,7 +461,9 @@ class ChatLauncherComponent {
461
461
  this.activeIndex.set(i);
462
462
  }
463
463
  closeAll() {
464
- this.openWindows.set([]);
464
+ this.openWindows.update(() => []);
465
+ this.lastOpenedRoom.set(null);
466
+ this.activeIndex.set(0);
465
467
  }
466
468
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatLauncherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
467
469
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: ChatLauncherComponent, isStandalone: true, selector: "app-chat-launcher", inputs: { roomId: { classPropertyName: "roomId", publicName: "roomId", isSignal: true, isRequired: false, transformFunction: null }, roomHeader: { classPropertyName: "roomHeader", publicName: "roomHeader", isSignal: true, isRequired: false, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, userList: { classPropertyName: "userList", publicName: "userList", isSignal: true, isRequired: false, transformFunction: null }, chatUsers: { classPropertyName: "chatUsers", publicName: "chatUsers", isSignal: true, isRequired: false, transformFunction: null } }, providers: [MessageService], ngImport: i0, template: "<div class=\"chat-float-wrapper\">\r\n <p-tabView [activeIndex]=\"activeIndex()\" (activeIndexChange)=\"setActive($event)\" [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 mode=\"floating\" theme=\"light\" [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" (onArchive)=\"closeWindow($event)\" (close)=\"closeAll()\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n</div>", 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}.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}.chat-tabview ::ng-deep .p-tabview-ink-bar{display:none}.chat-tabview ::ng-deep .p-tabview-panels{padding:0;border:none;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ChatWindowComponent, selector: "app-chat-window", inputs: ["chatRoomId", "header", "metadata", "chatUsers", "showActions", "mode", "theme", "refreshRoom"], outputs: ["onArchive", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ToastModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i3$1.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i3$1.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }] }); }
@@ -533,7 +535,7 @@ class AllChatsComponent {
533
535
  this.activeRoomMetadata.set(room.Metadata);
534
536
  setTimeout(() => {
535
537
  this.showMessages = true;
536
- }, 500);
538
+ }, 800);
537
539
  }
538
540
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AllChatsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
539
541
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AllChatsComponent, isStandalone: true, selector: "app-all-chats", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null }, roomId: { classPropertyName: "roomId", publicName: "roomId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { newRoomLoaded: "newRoomLoaded" }, ngImport: i0, template: "<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\u2026</p>\r\n </section>\r\n }\r\n\r\n</div>", styles: [":root{--glass-bg: rgba(255, 255, 255, .75);--glass-border: rgba(255, 255, 255, .25);--primary: #5b6dff;--text-dark: #1c1e21;--text-muted: #65676b}*{box-sizing:border-box;font-family:Segoe UI,system-ui,-apple-system,BlinkMacSystemFont}.chat-page{display:flex;height:100vh;padding:16px;gap:16px;background:linear-gradient(135deg,#e9efff,#f6f7fb)}.glass{background:var(--glass-bg);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-radius:18px;border:1px solid var(--glass-border);box-shadow:0 20px 40px #00000014,inset 0 1px #fff6}.chat-sidebar{width:300px;display:flex;flex-direction:column;overflow:hidden}.sidebar-header{padding:18px 20px;font-size:18px;font-weight:700;color:var(--text-dark);border-bottom:1px solid rgba(0,0,0,.06)}.room-list{list-style:none;overflow-y:auto;padding:6px}.room-item{display:flex;align-items:center;gap:14px;padding:12px 14px;border-radius:14px;cursor:pointer;transition:all .25s ease;margin-bottom:6px}.room-item:hover{background:#5b6dff14}.room-item.active{background:#5b6dff26;box-shadow:inset 0 0 0 1px #5b6dff40}.room-avatar p-avatar{width:44px;height:44px;border-radius:50%;background:linear-gradient(135deg,#5b6dff,#7a89ff);color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center}.room-info{display:flex;flex-direction:column;overflow:hidden}.room-name{font-size:14px;font-weight:600;color:var(--text-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-info span:last-child{font-size:12px;color:var(--text-muted)}.chat-main{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative}.chat-main:after{content:\"\";position:absolute;inset:0;border-radius:18px;pointer-events:none;box-shadow:inset 0 0 0 1px #fff3}.room-item:hover{transform:translateY(-1px)}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.spinner{width:40px;height:40px;border:4px solid rgba(0,0,0,.1);border-top-color:#4f46e5;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ToastModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: OverlayPanelModule }, { kind: "component", type: ChatWindowComponent, selector: "app-chat-window", inputs: ["chatRoomId", "header", "metadata", "chatUsers", "showActions", "mode", "theme", "refreshRoom"], outputs: ["onArchive", "onClose"] }], animations: [
@@ -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/chat.service.ts","../../../projects/chat-widget/src/lib/core/services/socket.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.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, 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\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\r\n constructor(private http: HttpClient, @Inject(CHAT_CONFIG) private config: ChatConfig) {\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","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\r\n constructor(@Inject(CHAT_CONFIG) private config: ChatConfig) {\r\n this.connect();\r\n }\r\n\r\n private connect() {\r\n // this.socket = new WebSocket('wss://coreuatarthkosh.sarjak.com/ws/');\r\n\r\n this.socket = new WebSocket(`${this.config.wsBaseUrl}/ws/`);\r\n\r\n this.socket.onopen = () => {\r\n console.log('[WS] Connected');\r\n };\r\n\r\n this.socket.onmessage = (event) => {\r\n const msg: any = JSON.parse(event.data);\r\n const handlers = this.listeners.get(msg.event) || [];\r\n handlers.forEach(h => h(msg.data));\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 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 const payload: any = {event, data};\r\n this.socket.send(JSON.stringify(payload));\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 {\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\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 @Output() onClose = 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 this.socket.joinRoom(this.chatRoomId);\r\n this.socket.joinUserChannel(this.chatService.currentUser().userId);\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 // if (msg.senderId !== this.chatService.currentUser().userId) {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: this.header,\r\n // detail: msg.content ?? 'New message',\r\n // life: 2500\r\n // });\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 // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'User Added',\r\n // detail: msg.user?.userName,\r\n // life: 2500\r\n // });\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 }\r\n });\r\n\r\n this.socket.on('userAlreadyInRoom').subscribe((msg: any) => {\r\n // if (msg.chatRoomId === this.chatRoomId) {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'User Already Added',\r\n // detail: msg.user?.userName,\r\n // life: 2500\r\n // });\r\n // }\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 closeChat() {\r\n this.onClose.emit();\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()\" appendTo=\"body\" 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'\" appendTo=\"body\"\r\n pButton pTooltip=\"Hide/Show\" style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"archiveChat()\" appendTo=\"body\" icon=\"pi pi-trash\" pButton pTooltip=\"Archive\"\r\n style=\"font-size: 0.5rem\"></button>\r\n <button (click)=\"closeChat()\" appendTo=\"body\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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\"\r\n [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, OnInit, signal, computed, inject, Input, effect, input, 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\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],\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\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 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.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 // ✅ force real change: -1 → 0\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 }\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 }\r\n}\r\n","<div class=\"chat-float-wrapper\">\r\n <p-tabView [activeIndex]=\"activeIndex()\" (activeIndexChange)=\"setActive($event)\" [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 mode=\"floating\" theme=\"light\" [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" (onArchive)=\"closeWindow($event)\" (close)=\"closeAll()\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n</div>","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 }, 500);\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 { 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\n\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n ChatLauncherComponent,\r\n ChatWindowComponent,\r\n AllChatsComponent\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\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAIO,MAAM,WAAW,GAAG,IAAI,cAAc,CAAa,aAAa,CAAC;;MCK3D,WAAW,CAAA;IAOpB,WAAA,CAAoB,IAAgB,EAA+B,MAAkB,EAAA;QAAjE,IAAA,CAAA,IAAI,GAAJ,IAAI;QAA2C,IAAA,CAAA,MAAM,GAAN,MAAM;;AAJzE,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;IAGlC;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;AApGS,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,4CAO0B,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAPhD,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;;0BAQW,MAAM;2BAAC,WAAW;;;MCVhD,aAAa,CAAA;AAKtB,IAAA,WAAA,CAAyC,MAAkB,EAAA;QAAlB,IAAA,CAAA,MAAM,GAAN,MAAM;AAFvC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAmC;QAG1D,IAAI,CAAC,OAAO,EAAE;IAClB;IAEQ,OAAO,GAAA;;AAGX,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,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACjC,QAAA,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,KAAK,KAAI;YAC9B,MAAM,GAAG,GAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AACvC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;AACpD,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,QAAA,CAAC;QAED,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,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,MAAM,OAAO,GAAQ,EAAC,KAAK,EAAE,IAAI,EAAC;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7C;AAEA,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;AAEA,IAAA,YAAY,CAAC,EAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC;IACtC;AAEA,IAAA,aAAa,CAAC,EAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC;IACzC;AAEA,IAAA,aAAa,CAAC,EAA0D,EAAA;AACpE,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC;IACvC;AAEA,IAAA,cAAc,CAAC,EAAwB,EAAA;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC;IAC1C;IAEQ,WAAW,CAAC,KAAa,EAAE,EAAuB,EAAA;QACtD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;QACjC;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IACvC;IAEQ,cAAc,CAAC,KAAa,EAAE,EAAwB,EAAA;QAC1D,IAAI,CAAC,EAAE,EAAE;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;YAC5B;QACJ;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;QAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD;AArGS,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,kBAKF,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALtB,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;;0BAMf,MAAM;2BAAC,WAAW;;;MCmCtB,mBAAmB,CAAA;AAmC5B,IAAA,WAAA,GAAA;QAjCS,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;AAC9B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAE;AAEtC,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;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;QAClE,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;;;;;;;;;AAUJ,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;;;;;;;YAOpB;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;YACpB;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;;;;;;;;;AAS3D,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;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC5B,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;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACvB;+GA1LS,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,OAAA,EAAA,SAAA,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,EC5C/B,kgKA8FM,EAAA,MAAA,EAAA,CAAA,ohKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/DE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,kgKAAA,EAAA,MAAA,EAAA,CAAA,ohKAAA,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;gBACS,OAAO,EAAA,CAAA;sBAAhB;gBAiB+B,iBAAiB,EAAA,CAAA;sBAAhD,SAAS;uBAAC,mBAAmB;gBACA,eAAe,EAAA,CAAA;sBAA5C,SAAS;uBAAC,iBAAiB;;;ME9CnB,qBAAqB,CAAA;AAgBhC,IAAA,WAAA,GAAA;AAdA,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;QAGrB,MAAM,CACJ,MAAK;AACH,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;AAC/B,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;gBACrB,MAAM,EAAE,IAAI,EAAE,MAAM;gBACpB,IAAI,EAAE,IAAI,EAAE;AACb,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;AACtF,QAAA,CAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC5B;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACzC;IAEA,WAAW,CAAC,MAAc,EAAE,UAAkB,EAAE,QAAgB,EAAE,MAAc,EAAE,QAAgB,EAAE,SAAc,EAAA;QAChH,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AACtG,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;AACxD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAA;AACxD,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;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;YACnC;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM;QAE/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;;QAGpE,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAChC,CAAC,EAAE,GAAG,CAAC;IACT;AAGA,IAAA,WAAW,CAAC,MAAW,EAAA;QACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACpE;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B;+GAnFW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,y0BAHrB,CAAC,cAAc,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxB7B,mnBAWM,y3CDUM,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,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,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,uIAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8BAAE,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,CAAA,EAAA,CAAA,CAAA;;4FAMvG,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAA,SAAA,EAGxG,CAAC,cAAc,CAAC,EAAA,aAAA,EACZ,iBAAiB,CAAC,QAAQ,EAAA,QAAA,EAAA,mnBAAA,EAAA,MAAA,EAAA,CAAA,k0CAAA,CAAA,EAAA;;;ME4B9B,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,EAAAD,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,EAAA,SAAA,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;;;MExCU,gBAAgB,CAAA;IAC3B,OAAO,OAAO,CAAC,MAAkB,EAAA;QAC/B,OAAO;AACL,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,WAAW;AACpB,oBAAA,QAAQ,EAAE;AACX;AACF;SACF;IACH;+GAXW,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,YAPzB,YAAY;YACZ,qBAAqB;YACrB,mBAAmB;AACnB,YAAA,iBAAiB,aAET,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAEpB,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,YAPzB,YAAY;YACZ,qBAAqB;YACrB,mBAAmB;YACnB,iBAAiB,CAAA,EAAA,CAAA,CAAA;;4FAIR,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAX5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EACb;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,qBAAqB;wBACrB,mBAAmB;wBACnB;AACD,qBAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB;AAChC,iBAAA;;;AClBD;;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/chat.service.ts","../../../projects/chat-widget/src/lib/core/services/socket.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.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, 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\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\r\n constructor(private http: HttpClient, @Inject(CHAT_CONFIG) private config: ChatConfig) {\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","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\r\n constructor(@Inject(CHAT_CONFIG) private config: ChatConfig) {\r\n this.connect();\r\n }\r\n\r\n private connect() {\r\n // this.socket = new WebSocket('wss://coreuatarthkosh.sarjak.com/ws/');\r\n\r\n this.socket = new WebSocket(`${this.config.wsBaseUrl}/ws/`);\r\n\r\n this.socket.onopen = () => {\r\n console.log('[WS] Connected');\r\n };\r\n\r\n this.socket.onmessage = (event) => {\r\n const msg: any = JSON.parse(event.data);\r\n const handlers = this.listeners.get(msg.event) || [];\r\n handlers.forEach(h => h(msg.data));\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 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 const payload: any = {event, data};\r\n this.socket.send(JSON.stringify(payload));\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 {\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\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 @Output() onClose = 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 this.socket.joinRoom(this.chatRoomId);\r\n this.socket.joinUserChannel(this.chatService.currentUser().userId);\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 // if (msg.senderId !== this.chatService.currentUser().userId) {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: this.header,\r\n // detail: msg.content ?? 'New message',\r\n // life: 2500\r\n // });\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 // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'User Added',\r\n // detail: msg.user?.userName,\r\n // life: 2500\r\n // });\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 }\r\n });\r\n\r\n this.socket.on('userAlreadyInRoom').subscribe((msg: any) => {\r\n // if (msg.chatRoomId === this.chatRoomId) {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'User Already Added',\r\n // detail: msg.user?.userName,\r\n // life: 2500\r\n // });\r\n // }\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 closeChat() {\r\n this.onClose.emit();\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 <button (click)=\"closeChat()\" icon=\"pi pi-times\" pButton pTooltip=\"Close\"\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, OnInit, signal, computed, inject, Input, effect, input, 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\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],\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\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 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.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 // ✅ force real change: -1 → 0\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 }\r\n\r\n setActive(i: number) {\r\n this.activeIndex.set(i);\r\n }\r\n\r\n closeAll() {\r\n this.openWindows.update(() => []);\r\n this.lastOpenedRoom.set(null);\r\n this.activeIndex.set(0);\r\n }\r\n}\r\n","<div class=\"chat-float-wrapper\">\r\n <p-tabView [activeIndex]=\"activeIndex()\" (activeIndexChange)=\"setActive($event)\" [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 mode=\"floating\" theme=\"light\" [chatRoomId]=\"w.roomId\" [header]=\"w.header\"\r\n [metadata]=\"w.metadata\" (onArchive)=\"closeWindow($event)\" (close)=\"closeAll()\">\r\n </app-chat-window>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n</div>","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 { 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\n\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n ChatLauncherComponent,\r\n ChatWindowComponent,\r\n AllChatsComponent\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\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arthakosh/chat-widget",
3
- "version": "0.2.25",
3
+ "version": "0.2.26",
4
4
  "description": "Reusable floating chat widget for Arthakosh",
5
5
  "author": "ranjeethravindran",
6
6
  "license": "MIT",