@arthakosh/chat-widget 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/all-chats/all-chats.component.mjs +2 -3
- package/esm2022/lib/chat-launcher/chat-launcher.component.mjs +11 -9
- package/esm2022/lib/chat-window/chat-window.component.mjs +28 -25
- package/esm2022/lib/core/services/chat.service.mjs +3 -2
- package/fesm2022/arthakosh-chat-widget.mjs +40 -35
- package/fesm2022/arthakosh-chat-widget.mjs.map +1 -1
- package/lib/all-chats/all-chats.component.d.ts +1 -2
- package/lib/chat-launcher/chat-launcher.component.d.ts +5 -3
- package/lib/chat-window/chat-window.component.d.ts +2 -1
- package/lib/core/services/chat.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -18,7 +18,6 @@ export class AllChatsComponent {
|
|
|
18
18
|
constructor() {
|
|
19
19
|
this.user = input(null);
|
|
20
20
|
this.roomId = input(null);
|
|
21
|
-
this.userList = input([]);
|
|
22
21
|
this.chatUsers = signal([]);
|
|
23
22
|
this.newRoomLoaded = new EventEmitter();
|
|
24
23
|
this.rooms = [];
|
|
@@ -56,7 +55,7 @@ export class AllChatsComponent {
|
|
|
56
55
|
}, 1000);
|
|
57
56
|
}
|
|
58
57
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AllChatsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
59
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.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 }
|
|
58
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.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=\"all-chat-sidebar\">\r\n <div class=\"sidebar-header\">\r\n <h3>Chat Rooms</h3>\r\n </div>\r\n <ul class=\"room-list\">\r\n <li *ngFor=\"let room of rooms;\" class=\"room-item\" [class.active]=\"activeRoomId() === room.ChatRoomId\"\r\n (click)=\"selectRoom(room)\">\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 </div>\r\n </li>\r\n </ul>\r\n </aside>\r\n <!-- RIGHT PANEL : CHAT WINDOW -->\r\n <section class=\"chat-main\" *ngIf=\"showMessages\">\r\n <app-chat-window [chatRoomId]=\"activeRoomId()\" [header]=\"activeRoomHeader()\" [addUserAllowed]=\"false\">\r\n </app-chat-window>\r\n </section>\r\n</div>", styles: ["*{box-sizing:border-box;margin:0;padding:0;font-family:Segoe UI,sans-serif}.chat-page{display:flex;height:100vh;background:#f5f6fa}.chat-sidebar{width:280px;background:#fff;border-right:1px solid #ddd;display:flex;flex-direction:column}.sidebar-header{padding:16px;border-bottom:1px solid #ddd}.room-list{list-style:none;overflow-y:auto}.room-item{display:flex;gap:12px;padding:12px 16px;cursor:pointer;transition:background .2s}.room-item:hover{background:#f0f2f5}.room-item.active{background:#e8ebff}.room-avatar{width:42px;height:42px;border-radius:50%;background:#5b6dff;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700}.room-info{display:flex;flex-direction:column}.room-name{font-weight:600}.last-message{font-size:12px;color:#666}\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", "addUserAllowed", "refreshRoom"] }] }); }
|
|
60
59
|
}
|
|
61
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AllChatsComponent, decorators: [{
|
|
62
61
|
type: Component,
|
|
@@ -76,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
76
75
|
}], ctorParameters: () => [], propDecorators: { newRoomLoaded: [{
|
|
77
76
|
type: Output
|
|
78
77
|
}] } });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLWNoYXRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtd2lkZ2V0L3NyYy9saWIvYWxsLWNoYXRzL2FsbC1jaGF0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2FsbC1jaGF0cy9hbGwtY2hhdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFxQmhELE1BQU0sT0FBTyxpQkFBaUI7SUFlNUI7UUFi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O3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBpbnB1dCwgSW5wdXQsIE91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGF0V2luZG93Q29tcG9uZW50IH0gZnJvbSBcIi4uL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDaGF0TGF1bmNoZXJDb21wb25lbnQgfSBmcm9tICcuLi9jaGF0LWxhdW5jaGVyL2NoYXQtbGF1bmNoZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEF2YXRhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXZhdGFyJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDaGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGlwJztcclxuaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0YXJlYU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0YXJlYSc7XHJcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hbGwtY2hhdHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUb2FzdE1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIEF2YXRhck1vZHVsZSxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcbiAgICBJbnB1dFRleHRhcmVhTW9kdWxlLFxyXG4gICAgQ2hpcE1vZHVsZSxcclxuICAgIERyb3Bkb3duTW9kdWxlLFxyXG4gICAgT3ZlcmxheVBhbmVsTW9kdWxlLFxyXG4gICAgQ2hhdFdpbmRvd0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FsbC1jaGF0cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FsbC1jaGF0cy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFsbENoYXRzQ29tcG9uZW50IHtcclxuXHJcbiAgdXNlciA9IGlucHV0PGFueT4obnVsbCk7XHJcbiAgcm9vbUlkID0gaW5wdXQ8YW55PihudWxsKTtcclxuICBjaGF0VXNlcnMgPSBzaWduYWw8YW55W10+KFtdKTtcclxuXHJcbiAgQE91dHB1dCgpIG5ld1Jvb21Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHJvb21zOiBhbnlbXSA9IFtdO1xyXG4gIGFjdGl2ZVJvb21JZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICBhY3RpdmVSb29tSGVhZGVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG5cclxuICBjaGF0U2VydmljZSA9IGluamVjdChDaGF0U2VydmljZSk7XHJcbiAgc2hvd01lc3NhZ2VzOiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy51c2VyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3VzZXIgaXMgcmVxdWlyZWQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIuc2V0KHtcclxuICAgICAgcm9vbUlkOiB0aGlzLmFjdGl2ZVJvb21JZCxcclxuICAgICAgdXNlcklkOiB0aGlzLnVzZXIoKT8uaWQsXHJcbiAgICAgIG5hbWU6IHRoaXMudXNlcigpPy5uYW1lXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb21zKHRoaXMudXNlcigpPy5pZCwgdGhpcy5yb29tSWQoKSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMucm9vbXMgPSByZXM7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vbXMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0Um9vbSh0aGlzLnJvb21zWzBdKTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlUm9vbUlkLnNldCh0aGlzLnJvb21zWzBdLkNoYXRSb29tSWQpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVSb29tSGVhZGVyLnNldCh0aGlzLnJvb21zWzBdLkNoYXRSb29tTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFJvb20ocm9vbTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dNZXNzYWdlcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hY3RpdmVSb29tSWQuc2V0KHJvb20uQ2hhdFJvb21JZCk7XHJcbiAgICB0aGlzLmFjdGl2ZVJvb21IZWFkZXIuc2V0KHJvb20uQ2hhdFJvb21OYW1lKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlcyA9IHRydWU7XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNoYXQtcGFnZVwiPlxyXG4gICAgPCEtLSBMRUZUIFNJREVCQVIgOiBDSEFUIFJPT01TIC0tPlxyXG4gICAgPGFzaWRlIGNsYXNzPVwiYWxsLWNoYXQtc2lkZWJhclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8aDM+Q2hhdCBSb29tczwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwicm9vbS1saXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcm9vbSBvZiByb29tcztcIiBjbGFzcz1cInJvb20taXRlbVwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlUm9vbUlkKCkgPT09IHJvb20uQ2hhdFJvb21JZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Um9vbShyb29tKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvb20tYXZhdGFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAtYXZhdGFyIFtsYWJlbF09XCJyb29tLkNoYXRSb29tTmFtZVswXVwiPjwvcC1hdmF0YXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb29tLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvb20tbmFtZVwiPnt7IHJvb20uQ2hhdFJvb21OYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvYXNpZGU+XHJcbiAgICA8IS0tIFJJR0hUIFBBTkVMIDogQ0hBVCBXSU5ET1cgLS0+XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImNoYXQtbWFpblwiICpuZ0lmPVwic2hvd01lc3NhZ2VzXCI+XHJcbiAgICAgICAgPGFwcC1jaGF0LXdpbmRvdyBbY2hhdFJvb21JZF09XCJhY3RpdmVSb29tSWQoKVwiIFtoZWFkZXJdPVwiYWN0aXZlUm9vbUhlYWRlcigpXCIgW2FkZFVzZXJBbGxvd2VkXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPC9hcHAtY2hhdC13aW5kb3c+XHJcbiAgICA8L3NlY3Rpb24+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -17,6 +17,7 @@ export class ChatLauncherComponent {
|
|
|
17
17
|
constructor() {
|
|
18
18
|
this.roomId = input('');
|
|
19
19
|
this.roomHeader = input('');
|
|
20
|
+
this.metadata = input('');
|
|
20
21
|
this.user = input(null);
|
|
21
22
|
this.userList = input([]);
|
|
22
23
|
this.chatUsers = input([]);
|
|
@@ -28,6 +29,7 @@ export class ChatLauncherComponent {
|
|
|
28
29
|
effect(() => {
|
|
29
30
|
const roomId = this.roomId();
|
|
30
31
|
const header = this.roomHeader();
|
|
32
|
+
const metadata = this.metadata();
|
|
31
33
|
const user = this.user();
|
|
32
34
|
this.chatService.currentUser.set({
|
|
33
35
|
roomId: this.roomId(),
|
|
@@ -40,18 +42,18 @@ export class ChatLauncherComponent {
|
|
|
40
42
|
if (this.lastOpenedRoom() === roomId)
|
|
41
43
|
return;
|
|
42
44
|
this.lastOpenedRoom.set(roomId);
|
|
43
|
-
this.openNewRoom(roomId, header, user.userId, user.name, this.chatUsers());
|
|
45
|
+
this.openNewRoom(roomId, header, metadata, user.userId, user.name, this.chatUsers());
|
|
44
46
|
}, { allowSignalWrites: true });
|
|
45
47
|
}
|
|
46
48
|
ngOnInit() {
|
|
47
49
|
console.log('ChatLauncher initialized');
|
|
48
50
|
}
|
|
49
|
-
openNewRoom(roomId, roomHeader, userId, username, chatUsers) {
|
|
50
|
-
this.chatService.createRoom(roomId, roomHeader, userId, username, chatUsers).subscribe(room => {
|
|
51
|
-
this.addWindow(room.roomKey, room.name);
|
|
51
|
+
openNewRoom(roomId, roomHeader, metadata, userId, username, chatUsers) {
|
|
52
|
+
this.chatService.createRoom(roomId, roomHeader, metadata, userId, username, chatUsers).subscribe(room => {
|
|
53
|
+
this.addWindow(room.roomKey, room.name, room.metadata);
|
|
52
54
|
});
|
|
53
55
|
}
|
|
54
|
-
addWindow(roomId, header) {
|
|
56
|
+
addWindow(roomId, header, metadata) {
|
|
55
57
|
const windows = this.openWindows();
|
|
56
58
|
const existingIndex = windows.findIndex(w => w.roomId === roomId);
|
|
57
59
|
// already open → focus
|
|
@@ -60,7 +62,7 @@ export class ChatLauncherComponent {
|
|
|
60
62
|
return;
|
|
61
63
|
}
|
|
62
64
|
const newIndex = windows.length;
|
|
63
|
-
this.openWindows.update(ws => [...ws, { roomId, header }]);
|
|
65
|
+
this.openWindows.update(ws => [...ws, { roomId, header, metadata }]);
|
|
64
66
|
// ✅ force real change: -1 → 0
|
|
65
67
|
setTimeout(() => {
|
|
66
68
|
this.activeIndex.set(newIndex);
|
|
@@ -76,10 +78,10 @@ export class ChatLauncherComponent {
|
|
|
76
78
|
this.activeIndex.set(i);
|
|
77
79
|
}
|
|
78
80
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatLauncherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
79
|
-
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 }, 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 [chatRoomId]=\"w.roomId\" [header]=\"w.header\">\r\n </app-chat-window>\r\n </ng-template>\r\n
|
|
81
|
+
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 [chatRoomId]=\"w.roomId\" [header]=\"w.header\" [metadata]=\"w.metadata\">\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", "addUserAllowed", "refreshRoom"] }, { 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"] }] }); }
|
|
80
82
|
}
|
|
81
83
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatLauncherComponent, decorators: [{
|
|
82
84
|
type: Component,
|
|
83
|
-
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 [chatRoomId]=\"w.roomId\" [header]=\"w.header\">\r\n </app-chat-window>\r\n </ng-template>\r\n
|
|
85
|
+
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 [chatRoomId]=\"w.roomId\" [header]=\"w.header\" [metadata]=\"w.metadata\">\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"] }]
|
|
84
86
|
}], ctorParameters: () => [] });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1sYXVuY2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBWSxNQUFNLEVBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBZ0JoRCxNQUFNLE9BQU8scUJBQXFCO0lBY2hDO1FBWkEsV0FBTSxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUMzQixlQUFVLEdBQUcsS0FBSyxD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dGVkLCBpbmplY3QsIElucHV0LCBlZmZlY3QsIGlucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGF0V2luZG93Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hhdC13aW5kb3cvY2hhdC13aW5kb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3NlcnZpY2VzL2NoYXQuc2VydmljZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgVGFiVmlld01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFidmlldyc7XHJcblxyXG5pbnRlcmZhY2UgT3BlbkNoYXRXaW5kb3cge1xyXG4gIHJvb21JZDogc3RyaW5nO1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jaGF0LWxhdW5jaGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIENoYXRXaW5kb3dDb21wb25lbnQsIERyb3Bkb3duTW9kdWxlLCBCdXR0b25Nb2R1bGUsIFRvYXN0TW9kdWxlLCBGb3Jtc01vZHVsZSwgVGFiVmlld01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtbGF1bmNoZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NoYXQtbGF1bmNoZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0TGF1bmNoZXJDb21wb25lbnQge1xyXG5cclxuICByb29tSWQgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICByb29tSGVhZGVyID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgdXNlciA9IGlucHV0PGFueT4obnVsbCk7XHJcbiAgdXNlckxpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG4gIGNoYXRVc2VycyA9IGlucHV0PGFueVtdPihbXSk7XHJcblxyXG4gIGNoYXRTZXJ2aWNlID0gaW5qZWN0KENoYXRTZXJ2aWNlKTtcclxuICBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XHJcbiAgb3BlbldpbmRvd3MgPSBzaWduYWw8T3BlbkNoYXRXaW5kb3dbXT4oW10pO1xyXG4gIGxhc3RPcGVuZWRSb29tID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gIGFjdGl2ZUluZGV4ID0gc2lnbmFsKDApO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGVmZmVjdChcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvb21JZCA9IHRoaXMucm9vbUlkKCk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5yb29tSGVhZGVyKCk7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlcigpO1xyXG5cclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmN1cnJlbnRVc2VyLnNldCh7XHJcbiAgICAgICAgICByb29tSWQ6IHRoaXMucm9vbUlkKCksXHJcbiAgICAgICAgICB1c2VySWQ6IHVzZXI/LnVzZXJJZCxcclxuICAgICAgICAgIG5hbWU6IHVzZXI/Lm5hbWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS51c2VyTGlzdC5zZXQodGhpcy51c2VyTGlzdCgpKTtcclxuXHJcbiAgICAgICAgaWYgKCFyb29tSWQgfHwgIXVzZXI/LnVzZXJJZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmxhc3RPcGVuZWRSb29tKCkgPT09IHJvb21JZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmxhc3RPcGVuZWRSb29tLnNldChyb29tSWQpO1xyXG4gICAgICAgIHRoaXMub3Blbk5ld1Jvb20ocm9vbUlkLCBoZWFkZXIsIHVzZXIudXNlcklkLCB1c2VyLm5hbWUsIHRoaXMuY2hhdFVzZXJzKCkpO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdDaGF0TGF1bmNoZXIgaW5pdGlhbGl6ZWQnKTtcclxuICB9XHJcbiAgXHJcbiAgb3Blbk5ld1Jvb20ocm9vbUlkOiBzdHJpbmcsIHJvb21IZWFkZXI6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcsIGNoYXRVc2VyczogYW55KSB7XHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmNyZWF0ZVJvb20ocm9vbUlkLCByb29tSGVhZGVyLCB1c2VySWQsIHVzZXJuYW1lLCBjaGF0VXNlcnMpLnN1YnNjcmliZShyb29tID0+IHtcclxuICAgICAgdGhpcy5hZGRXaW5kb3cocm9vbS5yb29tS2V5LCByb29tLm5hbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRXaW5kb3cocm9vbUlkOiBzdHJpbmcsIGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB3aW5kb3dzID0gdGhpcy5vcGVuV2luZG93cygpO1xyXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHdpbmRvd3MuZmluZEluZGV4KHcgPT4gdy5yb29tSWQgPT09IHJvb21JZCk7XHJcbiAgXHJcbiAgICAvLyBhbHJlYWR5IG9wZW4g4oaSIGZvY3VzXHJcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5hY3RpdmVJbmRleC5zZXQoZXhpc3RpbmdJbmRleCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICBcclxuICAgIGNvbnN0IG5ld0luZGV4ID0gd2luZG93cy5sZW5ndGg7XHJcbiAgXHJcbiAgICB0aGlzLm9wZW5XaW5kb3dzLnVwZGF0ZSh3cyA9PiBbLi4ud3MsIHsgcm9vbUlkLCBoZWFkZXIgfV0pO1xyXG4gIFxyXG4gICAgLy8g4pyFIGZvcmNlIHJlYWwgY2hhbmdlOiAtMSDihpIgMFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZlSW5kZXguc2V0KG5ld0luZGV4KTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG4gIFxyXG5cclxuICBjbG9zZVdpbmRvdyhyb29tSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5vcGVuV2luZG93cy51cGRhdGUod3MgPT4gd3MuZmlsdGVyKHcgPT4gdy5yb29tSWQgIT09IHJvb21JZCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmFuZG9tVXVpZCgpIHtcclxuICAgIHJldHVybiB1dWlkdjQoKTtcclxuICB9XHJcblxyXG4gIHNldEFjdGl2ZShpOiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWN0aXZlSW5kZXguc2V0KGkpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2hhdC1mbG9hdC13cmFwcGVyXCI+XHJcbiAgPHAtdGFiVmlldyBbYWN0aXZlSW5kZXhdPVwiYWN0aXZlSW5kZXgoKVwiIChhY3RpdmVJbmRleENoYW5nZSk9XCJzZXRBY3RpdmUoJGV2ZW50KVwiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgY2xhc3M9XCJjaGF0LXRhYnZpZXdcIj5cclxuICAgIDxwLXRhYlBhbmVsICpuZ0Zvcj1cImxldCB3IG9mIG9wZW5XaW5kb3dzKCk7IGxldCBpID0gaW5kZXhcIiBbaGVhZGVyXT1cIncuaGVhZGVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgICAgPGFwcC1jaGF0LXdpbmRvdyBbY2hhdFJvb21JZF09XCJ3LnJvb21JZFwiIFtoZWFkZXJdPVwidy5oZWFkZXJcIj5cclxuICAgICAgICA8L2FwcC1jaGF0LXdpbmRvdz5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gIDwvcC10YWJWaWV3PlxyXG48L2Rpdj4iXX0=
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1sYXVuY2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtbGF1bmNoZXIvY2hhdC1sYXVuY2hlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBWSxNQUFNLEVBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBaUJoRCxNQUFNLE9BQU8scUJBQXFCO0lBZWhDO1FBYkEsV0FBTSxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUMzQixlQUFVLEdBQUcsS0FBSyxD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RUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLGFBR3hHLENBQUMsY0FBYyxDQUFDLGlCQUNaLGlCQUFpQixDQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgZWZmZWN0LCBpbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhdFdpbmRvd0NvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IFRhYlZpZXdNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnZpZXcnO1xyXG5cclxuaW50ZXJmYWNlIE9wZW5DaGF0V2luZG93IHtcclxuICByb29tSWQ6IHN0cmluZztcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBtZXRhZGF0YTogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jaGF0LWxhdW5jaGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIENoYXRXaW5kb3dDb21wb25lbnQsIERyb3Bkb3duTW9kdWxlLCBCdXR0b25Nb2R1bGUsIFRvYXN0TW9kdWxlLCBGb3Jtc01vZHVsZSwgVGFiVmlld01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtbGF1bmNoZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NoYXQtbGF1bmNoZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0TGF1bmNoZXJDb21wb25lbnQge1xyXG5cclxuICByb29tSWQgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICByb29tSGVhZGVyID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgbWV0YWRhdGEgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICB1c2VyID0gaW5wdXQ8YW55PihudWxsKTtcclxuICB1c2VyTGlzdCA9IGlucHV0PGFueVtdPihbXSk7XHJcbiAgY2hhdFVzZXJzID0gaW5wdXQ8YW55W10+KFtdKTtcclxuXHJcbiAgY2hhdFNlcnZpY2UgPSBpbmplY3QoQ2hhdFNlcnZpY2UpO1xyXG4gIG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuICBvcGVuV2luZG93cyA9IHNpZ25hbDxPcGVuQ2hhdFdpbmRvd1tdPihbXSk7XHJcbiAgbGFzdE9wZW5lZFJvb20gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgYWN0aXZlSW5kZXggPSBzaWduYWwoMCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm9vbUlkID0gdGhpcy5yb29tSWQoKTtcclxuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJvb21IZWFkZXIoKTtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMubWV0YWRhdGEoKTtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIuc2V0KHtcclxuICAgICAgICAgIHJvb21JZDogdGhpcy5yb29tSWQoKSxcclxuICAgICAgICAgIHVzZXJJZDogdXNlcj8udXNlcklkLFxyXG4gICAgICAgICAgbmFtZTogdXNlcj8ubmFtZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLnVzZXJMaXN0LnNldCh0aGlzLnVzZXJMaXN0KCkpO1xyXG5cclxuICAgICAgICBpZiAoIXJvb21JZCB8fCAhdXNlcj8udXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMubGFzdE9wZW5lZFJvb20oKSA9PT0gcm9vbUlkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMubGFzdE9wZW5lZFJvb20uc2V0KHJvb21JZCk7XHJcbiAgICAgICAgdGhpcy5vcGVuTmV3Um9vbShyb29tSWQsIGhlYWRlciwgbWV0YWRhdGEsIHVzZXIudXNlcklkLCB1c2VyLm5hbWUsIHRoaXMuY2hhdFVzZXJzKCkpO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdDaGF0TGF1bmNoZXIgaW5pdGlhbGl6ZWQnKTtcclxuICB9XHJcbiAgXHJcbiAgb3Blbk5ld1Jvb20ocm9vbUlkOiBzdHJpbmcsIHJvb21IZWFkZXI6IHN0cmluZywgbWV0YWRhdGE6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcsIGNoYXRVc2VyczogYW55KSB7XHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmNyZWF0ZVJvb20ocm9vbUlkLCByb29tSGVhZGVyLCBtZXRhZGF0YSwgdXNlcklkLCB1c2VybmFtZSwgY2hhdFVzZXJzKS5zdWJzY3JpYmUocm9vbSA9PiB7XHJcbiAgICAgIHRoaXMuYWRkV2luZG93KHJvb20ucm9vbUtleSwgcm9vbS5uYW1lLCByb29tLm1ldGFkYXRhKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkV2luZG93KHJvb21JZDogc3RyaW5nLCBoZWFkZXI6IHN0cmluZywgbWV0YWRhdGE6IHN0cmluZykge1xyXG4gICAgY29uc3Qgd2luZG93cyA9IHRoaXMub3BlbldpbmRvd3MoKTtcclxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB3aW5kb3dzLmZpbmRJbmRleCh3ID0+IHcucm9vbUlkID09PSByb29tSWQpO1xyXG4gIFxyXG4gICAgLy8gYWxyZWFkeSBvcGVuIOKGkiBmb2N1c1xyXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlSW5kZXguc2V0KGV4aXN0aW5nSW5kZXgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgXHJcbiAgICBjb25zdCBuZXdJbmRleCA9IHdpbmRvd3MubGVuZ3RoO1xyXG4gIFxyXG4gICAgdGhpcy5vcGVuV2luZG93cy51cGRhdGUod3MgPT4gWy4uLndzLCB7IHJvb21JZCwgaGVhZGVyLCBtZXRhZGF0YSB9XSk7XHJcbiAgXHJcbiAgICAvLyDinIUgZm9yY2UgcmVhbCBjaGFuZ2U6IC0xIOKGkiAwXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hY3RpdmVJbmRleC5zZXQobmV3SW5kZXgpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGNsb3NlV2luZG93KHJvb21JZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9wZW5XaW5kb3dzLnVwZGF0ZSh3cyA9PiB3cy5maWx0ZXIodyA9PiB3LnJvb21JZCAhPT0gcm9vbUlkKSk7XHJcbiAgfVxyXG5cclxuICBnZXRSYW5kb21VdWlkKCkge1xyXG4gICAgcmV0dXJuIHV1aWR2NCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWN0aXZlKGk6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVJbmRleC5zZXQoaSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjaGF0LWZsb2F0LXdyYXBwZXJcIj5cclxuICA8cC10YWJWaWV3IFthY3RpdmVJbmRleF09XCJhY3RpdmVJbmRleCgpXCIgKGFjdGl2ZUluZGV4Q2hhbmdlKT1cInNldEFjdGl2ZSgkZXZlbnQpXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICBjbGFzcz1cImNoYXQtdGFidmlld1wiPlxyXG4gICAgPHAtdGFiUGFuZWwgKm5nRm9yPVwibGV0IHcgb2Ygb3BlbldpbmRvd3MoKTsgbGV0IGkgPSBpbmRleFwiIFtoZWFkZXJdPVwidy5oZWFkZXJcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIj5cclxuICAgICAgICA8YXBwLWNoYXQtd2luZG93IFtjaGF0Um9vbUlkXT1cIncucm9vbUlkXCIgW2hlYWRlcl09XCJ3LmhlYWRlclwiIFttZXRhZGF0YV09XCJ3Lm1ldGFkYXRhXCI+XHJcbiAgICAgICAgPC9hcHAtY2hhdC13aW5kb3c+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbiAgPC9wLXRhYlZpZXc+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -23,6 +23,7 @@ import * as i7 from "primeng/dropdown";
|
|
|
23
23
|
export class ChatWindowComponent {
|
|
24
24
|
constructor() {
|
|
25
25
|
this.header = 'Chat';
|
|
26
|
+
this.metadata = '';
|
|
26
27
|
this.chatUsers = [];
|
|
27
28
|
this.addUserAllowed = true;
|
|
28
29
|
this.refreshRoom = input(false);
|
|
@@ -67,24 +68,24 @@ export class ChatWindowComponent {
|
|
|
67
68
|
if (msg.chatRoomId === this.chatRoomId) {
|
|
68
69
|
this.messages.update(list => [...list, msg]);
|
|
69
70
|
}
|
|
70
|
-
if (msg.senderId !== this.chatService.currentUser().userId) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
71
|
+
// if (msg.senderId !== this.chatService.currentUser().userId) {
|
|
72
|
+
// this.messageService.add({
|
|
73
|
+
// severity: 'info',
|
|
74
|
+
// summary: this.header,
|
|
75
|
+
// detail: msg.content ?? 'New message',
|
|
76
|
+
// life: 2500
|
|
77
|
+
// });
|
|
78
|
+
// }
|
|
78
79
|
});
|
|
79
80
|
this.socket.on('roomUserAdded').subscribe((msg) => {
|
|
80
81
|
if (msg.chatRoomId === this.chatRoomId) {
|
|
81
82
|
this.loadUsers();
|
|
82
|
-
this.messageService.add({
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
});
|
|
83
|
+
// this.messageService.add({
|
|
84
|
+
// severity: 'info',
|
|
85
|
+
// summary: 'User Added',
|
|
86
|
+
// detail: msg.user?.userName,
|
|
87
|
+
// life: 2500
|
|
88
|
+
// });
|
|
88
89
|
}
|
|
89
90
|
});
|
|
90
91
|
this.socket.on('addedToRoom').subscribe((msg) => {
|
|
@@ -94,14 +95,14 @@ export class ChatWindowComponent {
|
|
|
94
95
|
});
|
|
95
96
|
this.socket.on('userAlreadyInRoom').subscribe((msg) => {
|
|
96
97
|
console.log(msg);
|
|
97
|
-
if (msg.chatRoomId === this.chatRoomId) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
98
|
+
// if (msg.chatRoomId === this.chatRoomId) {
|
|
99
|
+
// this.messageService.add({
|
|
100
|
+
// severity: 'info',
|
|
101
|
+
// summary: 'User Already Added',
|
|
102
|
+
// detail: msg.user?.userName,
|
|
103
|
+
// life: 2500
|
|
104
|
+
// });
|
|
105
|
+
// }
|
|
105
106
|
});
|
|
106
107
|
}
|
|
107
108
|
send() {
|
|
@@ -160,7 +161,7 @@ export class ChatWindowComponent {
|
|
|
160
161
|
this.showUsers = !this.showUsers;
|
|
161
162
|
}
|
|
162
163
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
163
|
-
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 }, chatUsers: { classPropertyName: "chatUsers", publicName: "chatUsers", isSignal: false, isRequired: false, transformFunction: null }, addUserAllowed: { classPropertyName: "addUserAllowed", publicName: "addUserAllowed", isSignal: false, isRequired: false, transformFunction: null }, refreshRoom: { classPropertyName: "refreshRoom", publicName: "refreshRoom", isSignal: true, isRequired: false, transformFunction: null } }, 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=\"chat-window\" [class.minimized]=\"minimized\">\r\n <div class=\"chat-header\">\r\n <div class=\"title\">\r\n <span>{{ header }}</span>\r\n <small *ngIf=\"users().length\">({{ users().length }} participants)</small>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button pButton icon=\"pi pi-users\" (click)=\"toggleUsers()\" style=\"font-size: 0.5rem\"></button>\r\n <button pButton icon=\"pi pi-minus\" (click)=\"toggleMinimize()\" style=\"font-size: 0.5rem\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-body\" *ngIf=\"!minimized\">\r\n <div class=\"chat-layout\" [class.users-hidden]=\"!showUsers\">\r\n <div class=\"chat-main\">\r\n <div class=\"messages\" #messagesContainer [class.loading]=\"loading\">\r\n <div *ngFor=\"let msg of messages(); trackBy: trackById\" class=\"message-row\"\r\n [ngClass]=\"{ outgoing: msg.senderId === chatService.currentUser().userId, incoming: msg.senderId !== chatService.currentUser().userId }\">\r\n <div class=\"message-bubble\">\r\n <div class=\"message-meta\">\r\n <span class=\"sender\" *ngIf=\"msg.senderId !== chatService.currentUser().userId\">\r\n {{ msg.senderName }}\r\n </span>\r\n\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 class=\"reply-banner\" *ngIf=\"replyTo\">\r\n <span>Replying to: {{ replyTo.content | slice: 0:50 }}</span>\r\n <button pButton icon=\"pi pi-times\" class=\"p-button-text p-button-sm\" (click)=\"clearReply()\"></button>\r\n </div>\r\n\r\n <textarea pInputTextarea [(ngModel)]=\"newMessage\" rows=\"2\" autoResize=\"true\" placeholder=\"Type a message\"\r\n (keyup.enter)=\"send()\">\r\n </textarea>\r\n\r\n <div class=\"input-actions\">\r\n <button pButton icon=\"pi pi-send\" label=\"Send\" (click)=\"send()\"></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 class=\"user-row\" *ngFor=\"let u of users()\">\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(addUserAllowed) {\r\n <div class=\"user-list-add\">\r\n <p-dropdown [options]=\"chatService.userList()\" [(ngModel)]=\"selectedUser\" optionLabel=\"full_name\"\r\n placeholder=\"Select User\" />\r\n <div style=\"margin-top: 2em;\">\r\n <button pButton icon=\"pi pi-plus\" label=\"Add\" (click)=\"addUserToRoom()\"></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}\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: "pipe", type: i1.DatePipe, name: "date" }, { 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: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i6.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i7.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 }] }); }
|
|
164
|
+
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 }, addUserAllowed: { classPropertyName: "addUserAllowed", publicName: "addUserAllowed", isSignal: false, isRequired: false, transformFunction: null }, refreshRoom: { classPropertyName: "refreshRoom", publicName: "refreshRoom", isSignal: true, isRequired: false, transformFunction: null } }, 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=\"chat-window\" [class.minimized]=\"minimized\">\r\n <div class=\"chat-header\">\r\n <div class=\"title\">\r\n <span>{{ header }}</span>\r\n <small *ngIf=\"users().length\">({{ users().length }} participants)</small>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button pButton icon=\"pi pi-users\" (click)=\"toggleUsers()\" style=\"font-size: 0.5rem\"></button>\r\n <button pButton icon=\"pi pi-minus\" (click)=\"toggleMinimize()\" style=\"font-size: 0.5rem\"></button>\r\n </div>\r\n <div>\r\n <span>{{ metadata }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-body\" *ngIf=\"!minimized\">\r\n <div class=\"chat-layout\" [class.users-hidden]=\"!showUsers\">\r\n <div class=\"chat-main\">\r\n <div class=\"messages\" #messagesContainer [class.loading]=\"loading\">\r\n <div *ngFor=\"let msg of messages(); trackBy: trackById\" class=\"message-row\"\r\n [ngClass]=\"{ outgoing: msg.senderId === chatService.currentUser().userId, incoming: msg.senderId !== chatService.currentUser().userId }\">\r\n <div class=\"message-bubble\">\r\n <div class=\"message-meta\">\r\n <span class=\"sender\" *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 class=\"reply-banner\" *ngIf=\"replyTo\">\r\n <span>Replying to: {{ replyTo.content | slice: 0:50 }}</span>\r\n <button pButton icon=\"pi pi-times\" class=\"p-button-text p-button-sm\" (click)=\"clearReply()\"></button>\r\n </div>\r\n\r\n <textarea pInputTextarea [(ngModel)]=\"newMessage\" rows=\"2\" autoResize=\"true\" placeholder=\"Type a message\"\r\n (keyup.enter)=\"send()\">\r\n </textarea>\r\n\r\n <div class=\"input-actions\">\r\n <button pButton icon=\"pi pi-send\" label=\"Send\" (click)=\"send()\"></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 class=\"user-row\" *ngFor=\"let u of users()\">\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(addUserAllowed) {\r\n <div class=\"user-list-add\">\r\n <p-dropdown [options]=\"chatService.userList()\" [(ngModel)]=\"selectedUser\" optionLabel=\"full_name\"\r\n placeholder=\"Select User\" />\r\n <div style=\"margin-top: 2em;\">\r\n <button pButton icon=\"pi pi-plus\" label=\"Add\" (click)=\"addUserToRoom()\"></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}\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: "pipe", type: i1.DatePipe, name: "date" }, { 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: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i6.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i7.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 }] }); }
|
|
164
165
|
}
|
|
165
166
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatWindowComponent, decorators: [{
|
|
166
167
|
type: Component,
|
|
@@ -175,11 +176,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
175
176
|
ChipModule,
|
|
176
177
|
DropdownModule,
|
|
177
178
|
OverlayPanelModule
|
|
178
|
-
], providers: [MessageService], template: "<p-toast></p-toast>\r\n\r\n<div class=\"chat-window\" [class.minimized]=\"minimized\">\r\n <div class=\"chat-header\">\r\n <div class=\"title\">\r\n <span>{{ header }}</span>\r\n <small *ngIf=\"users().length\">({{ users().length }} participants)</small>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button pButton icon=\"pi pi-users\" (click)=\"toggleUsers()\" style=\"font-size: 0.5rem\"></button>\r\n <button pButton icon=\"pi pi-minus\" (click)=\"toggleMinimize()\" style=\"font-size: 0.5rem\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-body\" *ngIf=\"!minimized\">\r\n <div class=\"chat-layout\" [class.users-hidden]=\"!showUsers\">\r\n <div class=\"chat-main\">\r\n <div class=\"messages\" #messagesContainer [class.loading]=\"loading\">\r\n <div *ngFor=\"let msg of messages(); trackBy: trackById\" class=\"message-row\"\r\n [ngClass]=\"{ outgoing: msg.senderId === chatService.currentUser().userId, incoming: msg.senderId !== chatService.currentUser().userId }\">\r\n <div class=\"message-bubble\">\r\n <div class=\"message-meta\">\r\n <span class=\"sender\" *ngIf=\"msg.senderId !== chatService.currentUser().userId\">\r\n {{ msg.senderName }}\r\n </span>\r\n
|
|
179
|
+
], providers: [MessageService], template: "<p-toast></p-toast>\r\n\r\n<div class=\"chat-window\" [class.minimized]=\"minimized\">\r\n <div class=\"chat-header\">\r\n <div class=\"title\">\r\n <span>{{ header }}</span>\r\n <small *ngIf=\"users().length\">({{ users().length }} participants)</small>\r\n </div>\r\n <div class=\"header-actions\">\r\n <button pButton icon=\"pi pi-users\" (click)=\"toggleUsers()\" style=\"font-size: 0.5rem\"></button>\r\n <button pButton icon=\"pi pi-minus\" (click)=\"toggleMinimize()\" style=\"font-size: 0.5rem\"></button>\r\n </div>\r\n <div>\r\n <span>{{ metadata }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-body\" *ngIf=\"!minimized\">\r\n <div class=\"chat-layout\" [class.users-hidden]=\"!showUsers\">\r\n <div class=\"chat-main\">\r\n <div class=\"messages\" #messagesContainer [class.loading]=\"loading\">\r\n <div *ngFor=\"let msg of messages(); trackBy: trackById\" class=\"message-row\"\r\n [ngClass]=\"{ outgoing: msg.senderId === chatService.currentUser().userId, incoming: msg.senderId !== chatService.currentUser().userId }\">\r\n <div class=\"message-bubble\">\r\n <div class=\"message-meta\">\r\n <span class=\"sender\" *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 class=\"reply-banner\" *ngIf=\"replyTo\">\r\n <span>Replying to: {{ replyTo.content | slice: 0:50 }}</span>\r\n <button pButton icon=\"pi pi-times\" class=\"p-button-text p-button-sm\" (click)=\"clearReply()\"></button>\r\n </div>\r\n\r\n <textarea pInputTextarea [(ngModel)]=\"newMessage\" rows=\"2\" autoResize=\"true\" placeholder=\"Type a message\"\r\n (keyup.enter)=\"send()\">\r\n </textarea>\r\n\r\n <div class=\"input-actions\">\r\n <button pButton icon=\"pi pi-send\" label=\"Send\" (click)=\"send()\"></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 class=\"user-row\" *ngFor=\"let u of users()\">\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(addUserAllowed) {\r\n <div class=\"user-list-add\">\r\n <p-dropdown [options]=\"chatService.userList()\" [(ngModel)]=\"selectedUser\" optionLabel=\"full_name\"\r\n placeholder=\"Select User\" />\r\n <div style=\"margin-top: 2em;\">\r\n <button pButton icon=\"pi pi-plus\" label=\"Add\" (click)=\"addUserToRoom()\"></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}\n"] }]
|
|
179
180
|
}], ctorParameters: () => [], propDecorators: { chatRoomId: [{
|
|
180
181
|
type: Input
|
|
181
182
|
}], header: [{
|
|
182
183
|
type: Input
|
|
184
|
+
}], metadata: [{
|
|
185
|
+
type: Input
|
|
183
186
|
}], chatUsers: [{
|
|
184
187
|
type: Input
|
|
185
188
|
}], addUserAllowed: [{
|
|
@@ -191,4 +194,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
191
194
|
type: ViewChild,
|
|
192
195
|
args: ['reactionOverlay']
|
|
193
196
|
}] } });
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aW5kb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC13aWRnZXQvc3JjL2xpYi9jaGF0LXdpbmRvdy9jaGF0LXdpbmRvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUF5QixTQUFTLEVBQVUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFB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QUFZLDRPQUNaLFlBQVksa09BQ1osYUFBYSw4QkFDYixtQkFBbUIscUtBQ25CLFVBQVUsOEJBQ1YsY0FBYyx1dENBQ2Qsa0JBQWtCOzs0RkFNVCxtQkFBbUI7a0JBbkIvQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxrQkFBa0I7cUJBQ25CLGFBR1UsQ0FBQyxjQUFjLENBQUM7d0RBR2xCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFnQjBCLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0EsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9zb2NrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IEF2YXRhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXZhdGFyJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7IElucHV0VGV4dGFyZWFNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dGFyZWEnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBDaGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGlwJztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICcuLi9jb3JlL21vZGVscy9jaGF0Lm1vZGVscyc7XHJcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY2hhdC13aW5kb3cnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUb2FzdE1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIEF2YXRhck1vZHVsZSxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcbiAgICBJbnB1dFRleHRhcmVhTW9kdWxlLFxyXG4gICAgQ2hpcE1vZHVsZSxcclxuICAgIERyb3Bkb3duTW9kdWxlLFxyXG4gICAgT3ZlcmxheVBhbmVsTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hhdC13aW5kb3cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NoYXQtd2luZG93LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0V2luZG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBjaGF0Um9vbUlkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhlYWRlciA9ICdDaGF0JztcclxuICBASW5wdXQoKSBjaGF0VXNlcnMgPSBbXTtcclxuICBASW5wdXQoKSBhZGRVc2VyQWxsb3dlZCA9IHRydWU7XHJcbiAgcmVmcmVzaFJvb20gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgLy8gQElucHV0KCkgY3VycmVudFVzZXI6IGFueTtcclxuXHJcbiAgY2hhdFNlcnZpY2UgPSBpbmplY3QoQ2hhdFNlcnZpY2UpO1xyXG4gIHNvY2tldCA9IGluamVjdChTb2NrZXRTZXJ2aWNlKTtcclxuICBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XHJcblxyXG4gIHVzZXJzID0gc2lnbmFsPGFueVtdPihbXSk7XHJcbiAgbWVzc2FnZXMgPSBzaWduYWw8Q2hhdE1lc3NhZ2VbXT4oW10pO1xyXG4gIG5ld01lc3NhZ2UgPSAnJztcclxuICBtaW5pbWl6ZWQgPSBmYWxzZTtcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgcmVwbHlUbzogQ2hhdE1lc3NhZ2UgfCBudWxsID0gbnVsbDtcclxuICBzZWxlY3RlZFVzZXI6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWVzc2FnZXNDb250YWluZXInKSBtZXNzYWdlc0NvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3JlYWN0aW9uT3ZlcmxheScpIHJlYWN0aW9uT3ZlcmxheSE6IE92ZXJsYXlQYW5lbDtcclxuXHJcbiAgcHJpdmF0ZSBvYnNlcnZlciE6IE11dGF0aW9uT2JzZXJ2ZXI7XHJcblxyXG4gIHNob3dVc2VycyA9IHRydWU7XHJcbiAgc3VnZ2VzdGlvbiA9ICcnO1xyXG4gIHByaXZhdGUgc3VnZ2VzdFRpbWVyOiBhbnk7XHJcbiAgaG92ZXJlZFJlYWN0aW9uVXNlcnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNvY2tldC5qb2luUm9vbSh0aGlzLmNoYXRSb29tSWQpO1xyXG4gICAgdGhpcy5zb2NrZXQuam9pblVzZXJDaGFubmVsKHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQpO1xyXG4gICAgdGhpcy5sb2FkVXNlcnMoKTtcclxuICAgIHRoaXMubG9hZE1lc3NhZ2VzKCk7XHJcbiAgICB0aGlzLmxpc3RlblNvY2tldCgpO1xyXG4gIH1cclxuXHJcbiAgbG9hZFVzZXJzKCkge1xyXG4gICAgdGhpcy5jaGF0U2VydmljZS5nZXRSb29tVXNlcnModGhpcy5jaGF0Um9vbUlkKS5zdWJzY3JpYmUodXNlcnMgPT4ge1xyXG4gICAgICB0aGlzLnVzZXJzLnNldCh1c2Vycyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRNZXNzYWdlcygpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldE1lc3NhZ2VzKHRoaXMuY2hhdFJvb21JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogbXNncyA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5zZXQobXNncyk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxpc3RlblNvY2tldCgpIHtcclxuICAgIHRoaXMuc29ja2V0Lm9uPENoYXRNZXNzYWdlPignbmV3TWVzc2FnZScpLnN1YnNjcmliZShtc2cgPT4ge1xyXG4gICAgICBpZiAobXNnLmNoYXRSb29tSWQgPT09IHRoaXMuY2hhdFJvb21JZCkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMudXBkYXRlKGxpc3QgPT4gWy4uLmxpc3QsIG1zZ10pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobXNnLnNlbmRlcklkICE9PSB0aGlzLmNoYXRTZXJ2aWNlLmN1cnJlbnRVc2VyKCkudXNlcklkKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdpbmZvJyxcclxuICAgICAgICAgIHN1bW1hcnk6IHRoaXMuaGVhZGVyLFxyXG4gICAgICAgICAgZGV0YWlsOiBtc2cuY29udGVudCA/PyAnTmV3IG1lc3NhZ2UnLFxyXG4gICAgICAgICAgbGlmZTogMjUwMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNvY2tldC5vbigncm9vbVVzZXJBZGRlZCcpLnN1YnNjcmliZSgobXNnOiBhbnkpID0+IHtcclxuICAgICAgaWYgKG1zZy5jaGF0Um9vbUlkID09PSB0aGlzLmNoYXRSb29tSWQpIHtcclxuICAgICAgICB0aGlzLmxvYWRVc2VycygpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnaW5mbycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnVXNlciBBZGRlZCcsXHJcbiAgICAgICAgICBkZXRhaWw6IG1zZy51c2VyPy51c2VyTmFtZSxcclxuICAgICAgICAgIGxpZmU6IDI1MDBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zb2NrZXQub24oJ2FkZGVkVG9Sb29tJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICBpZiAobXNnLmNoYXRSb29tSWQgPT09IHRoaXMuY2hhdFJvb21JZCkge1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXJzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc29ja2V0Lm9uKCd1c2VyQWxyZWFkeUluUm9vbScpLnN1YnNjcmliZSgobXNnOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgaWYgKG1zZy5jaGF0Um9vbUlkID09PSB0aGlzLmNoYXRSb29tSWQpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2luZm8nLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ1VzZXIgQWxyZWFkeSBBZGRlZCcsXHJcbiAgICAgICAgICBkZXRhaWw6IG1zZy51c2VyPy51c2VyTmFtZSxcclxuICAgICAgICAgIGxpZmU6IDI1MDBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZW5kKCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMubmV3TWVzc2FnZS50cmltKCk7XHJcbiAgICBpZiAoIWNvbnRlbnQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlXHJcbiAgICAgIC5zZW5kTWVzc2FnZSh0aGlzLmNoYXRSb29tSWQsIHtcclxuICAgICAgICBzZW5kZXJJZDogdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCxcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IHRoaXMucmVwbHlUbz8ucmVwbHlUb01lc3NhZ2VJZCA/PyBudWxsLFxyXG4gICAgICAgIGNyZWF0ZWRCeTogdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZFxyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm5ld01lc3NhZ2UgPSAnJztcclxuICAgICAgICB0aGlzLnJlcGx5VG8gPSBudWxsO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFVzZXJUb1Jvb20oKSB7XHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlXHJcbiAgICAgIC5hZGRVc2VyVG9Sb29tKFxyXG4gICAgICAgIHRoaXMuY2hhdFJvb21JZCxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcj8udXNlcl9pZCxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcj8uZnVsbF9uYW1lLFxyXG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTWluaW1pemUoKSB7XHJcbiAgICB0aGlzLm1pbmltaXplZCA9ICF0aGlzLm1pbmltaXplZDtcclxuICB9XHJcblxyXG4gIHNldFJlcGx5KG1zZzogQ2hhdE1lc3NhZ2UpIHtcclxuICAgIHRoaXMucmVwbHlUbyA9IG1zZztcclxuICB9XHJcblxyXG4gIGNsZWFyUmVwbHkoKSB7XHJcbiAgICB0aGlzLnJlcGx5VG8gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIG1zZzogQ2hhdE1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBtc2cuaWQ7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc29ja2V0Lm9mZk5ld01lc3NhZ2UoKTtcclxuICAgIHRoaXMuc29ja2V0Lm9mZk1lc3NhZ2VTZWVuKCk7XHJcbiAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMubWVzc2FnZXNDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAvLyDwn5SlIFNjcm9sbCBBRlRFUiBET00gYWN0dWFsbHkgY2hhbmdlc1xyXG4gICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZWwsIHtcclxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICBzdWJ0cmVlOiB0cnVlLFxyXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVVzZXJzKCkge1xyXG4gICAgdGhpcy5zaG93VXNlcnMgPSAhdGhpcy5zaG93VXNlcnM7XHJcbiAgfVxyXG59XHJcbiIsIjxwLXRvYXN0PjwvcC10b2FzdD5cclxuXHJcbjxkaXYgY2xhc3M9XCJjaGF0LXdpbmRvd1wiIFtjbGFzcy5taW5pbWl6ZWRdPVwibWluaW1pemVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNoYXQtaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgPHNwYW4+e3sgaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICA8c21hbGwgKm5nSWY9XCJ1c2VycygpLmxlbmd0aFwiPih7eyB1c2VycygpLmxlbmd0aCB9fSBwYXJ0aWNpcGFudHMpPC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1hY3Rpb25zXCI+XHJcbiAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktdXNlcnNcIiAoY2xpY2spPVwidG9nZ2xlVXNlcnMoKVwiIHN0eWxlPVwiZm9udC1zaXplOiAwLjVyZW1cIj48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS1taW51c1wiIChjbGljayk9XCJ0b2dnbGVNaW5pbWl6ZSgpXCIgc3R5bGU9XCJmb250LXNpemU6IDAuNXJlbVwiPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjaGF0LWJvZHlcIiAqbmdJZj1cIiFtaW5pbWl6ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGF0LWxheW91dFwiIFtjbGFzcy51c2Vycy1oaWRkZW5dPVwiIXNob3dVc2Vyc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2hhdC1tYWluXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VzXCIgI21lc3NhZ2VzQ29udGFpbmVyIFtjbGFzcy5sb2FkaW5nXT1cImxvYWRpbmdcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1zZyBvZiBtZXNzYWdlcygpOyB0cmFja0J5OiB0cmFja0J5SWRcIiBjbGFzcz1cIm1lc3NhZ2Utcm93XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvdXRnb2luZzogbXNnLnNlbmRlcklkID09PSBjaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCwgaW5jb21pbmc6IG1zZy5zZW5kZXJJZCAhPT0gY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1idWJibGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1tZXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbmRlclwiICpuZ0lmPVwibXNnLnNlbmRlcklkICE9PSBjaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBtc2cuc2VuZGVyTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBtc2cuY3JlYXRlZEF0IHwgZGF0ZTogJ3Nob3J0VGltZScgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBNRVNTQUdFIFRFWFQgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAge3sgbXNnLmNvbnRlbnQgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYXJlYVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlcGx5LWJhbm5lclwiICpuZ0lmPVwicmVwbHlUb1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj5SZXBseWluZyB0bzoge3sgcmVwbHlUby5jb250ZW50IHwgc2xpY2U6IDA6NTAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktdGltZXNcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc21cIiAoY2xpY2spPVwiY2xlYXJSZXBseSgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8dGV4dGFyZWEgcElucHV0VGV4dGFyZWEgWyhuZ01vZGVsKV09XCJuZXdNZXNzYWdlXCIgcm93cz1cIjJcIiBhdXRvUmVzaXplPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwiVHlwZSBhIG1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VuZCgpXCI+XHJcbiAgICAgICAgICA8L3RleHRhcmVhPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktc2VuZFwiIGxhYmVsPVwiU2VuZFwiIChjbGljayk9XCJzZW5kKClcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNoYXQtc2lkZWJhclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+VXNlcnM8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1yb3dcIiAqbmdGb3I9XCJsZXQgdSBvZiB1c2VycygpXCI+XHJcbiAgICAgICAgICAgIDxwLWF2YXRhciBbbGFiZWxdPVwidS51c2VybmFtZVswXVwiPjwvcC1hdmF0YXI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHUudXNlcm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBAaWYoYWRkVXNlckFsbG93ZWQpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LWFkZFwiPlxyXG4gICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwiY2hhdFNlcnZpY2UudXNlckxpc3QoKVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRVc2VyXCIgb3B0aW9uTGFiZWw9XCJmdWxsX25hbWVcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBVc2VyXCIgLz5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAyZW07XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktcGx1c1wiIGxhYmVsPVwiQWRkXCIgKGNsaWNrKT1cImFkZFVzZXJUb1Jvb20oKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aW5kb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC13aWRnZXQvc3JjL2xpYi9jaGF0LXdpbmRvdy9jaGF0LXdpbmRvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXdpZGdldC9zcmMvbGliL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUF5QixTQUFTLEVBQVUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFB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QVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFnQjBCLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0EsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9zb2NrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IEF2YXRhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXZhdGFyJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7IElucHV0VGV4dGFyZWFNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dGFyZWEnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBDaGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGlwJztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICcuLi9jb3JlL21vZGVscy9jaGF0Lm1vZGVscyc7XHJcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY2hhdC13aW5kb3cnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUb2FzdE1vZHVsZSxcclxuICAgIEJ1dHRvbk1vZHVsZSxcclxuICAgIEF2YXRhck1vZHVsZSxcclxuICAgIFRvb2x0aXBNb2R1bGUsXHJcbiAgICBJbnB1dFRleHRhcmVhTW9kdWxlLFxyXG4gICAgQ2hpcE1vZHVsZSxcclxuICAgIERyb3Bkb3duTW9kdWxlLFxyXG4gICAgT3ZlcmxheVBhbmVsTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hhdC13aW5kb3cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NoYXQtd2luZG93LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0V2luZG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBjaGF0Um9vbUlkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhlYWRlciA9ICdDaGF0JztcclxuICBASW5wdXQoKSBtZXRhZGF0YSA9ICcnO1xyXG4gIEBJbnB1dCgpIGNoYXRVc2VycyA9IFtdO1xyXG4gIEBJbnB1dCgpIGFkZFVzZXJBbGxvd2VkID0gdHJ1ZTtcclxuICByZWZyZXNoUm9vbSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAvLyBASW5wdXQoKSBjdXJyZW50VXNlcjogYW55O1xyXG5cclxuICBjaGF0U2VydmljZSA9IGluamVjdChDaGF0U2VydmljZSk7XHJcbiAgc29ja2V0ID0gaW5qZWN0KFNvY2tldFNlcnZpY2UpO1xyXG4gIG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuXHJcbiAgdXNlcnMgPSBzaWduYWw8YW55W10+KFtdKTtcclxuICBtZXNzYWdlcyA9IHNpZ25hbDxDaGF0TWVzc2FnZVtdPihbXSk7XHJcbiAgbmV3TWVzc2FnZSA9ICcnO1xyXG4gIG1pbmltaXplZCA9IGZhbHNlO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICByZXBseVRvOiBDaGF0TWVzc2FnZSB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkVXNlcjogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZXNzYWdlc0NvbnRhaW5lcicpIG1lc3NhZ2VzQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgncmVhY3Rpb25PdmVybGF5JykgcmVhY3Rpb25PdmVybGF5ITogT3ZlcmxheVBhbmVsO1xyXG5cclxuICBwcml2YXRlIG9ic2VydmVyITogTXV0YXRpb25PYnNlcnZlcjtcclxuXHJcbiAgc2hvd1VzZXJzID0gdHJ1ZTtcclxuICBzdWdnZXN0aW9uID0gJyc7XHJcbiAgcHJpdmF0ZSBzdWdnZXN0VGltZXI6IGFueTtcclxuICBob3ZlcmVkUmVhY3Rpb25Vc2Vyczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc29ja2V0LmpvaW5Sb29tKHRoaXMuY2hhdFJvb21JZCk7XHJcbiAgICB0aGlzLnNvY2tldC5qb2luVXNlckNoYW5uZWwodGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCk7XHJcbiAgICB0aGlzLmxvYWRVc2VycygpO1xyXG4gICAgdGhpcy5sb2FkTWVzc2FnZXMoKTtcclxuICAgIHRoaXMubGlzdGVuU29ja2V0KCk7XHJcbiAgfVxyXG5cclxuICBsb2FkVXNlcnMoKSB7XHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb21Vc2Vycyh0aGlzLmNoYXRSb29tSWQpLnN1YnNjcmliZSh1c2VycyA9PiB7XHJcbiAgICAgIHRoaXMudXNlcnMuc2V0KHVzZXJzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZE1lc3NhZ2VzKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZXModGhpcy5jaGF0Um9vbUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBtc2dzID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzLnNldChtc2dzKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuU29ja2V0KCkge1xyXG4gICAgdGhpcy5zb2NrZXQub248Q2hhdE1lc3NhZ2U+KCduZXdNZXNzYWdlJykuc3Vic2NyaWJlKG1zZyA9PiB7XHJcbiAgICAgIGlmIChtc2cuY2hhdFJvb21JZCA9PT0gdGhpcy5jaGF0Um9vbUlkKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcy51cGRhdGUobGlzdCA9PiBbLi4ubGlzdCwgbXNnXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGlmIChtc2cuc2VuZGVySWQgIT09IHRoaXMuY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQpIHtcclxuICAgICAgLy8gICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgIC8vICAgICBzZXZlcml0eTogJ2luZm8nLFxyXG4gICAgICAvLyAgICAgc3VtbWFyeTogdGhpcy5oZWFkZXIsXHJcbiAgICAgIC8vICAgICBkZXRhaWw6IG1zZy5jb250ZW50ID8/ICdOZXcgbWVzc2FnZScsXHJcbiAgICAgIC8vICAgICBsaWZlOiAyNTAwXHJcbiAgICAgIC8vICAgfSk7XHJcbiAgICAgIC8vIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc29ja2V0Lm9uKCdyb29tVXNlckFkZGVkJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICBpZiAobXNnLmNoYXRSb29tSWQgPT09IHRoaXMuY2hhdFJvb21JZCkge1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXJzKCk7XHJcbiAgICAgICAgLy8gdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIC8vICAgc2V2ZXJpdHk6ICdpbmZvJyxcclxuICAgICAgICAvLyAgIHN1bW1hcnk6ICdVc2VyIEFkZGVkJyxcclxuICAgICAgICAvLyAgIGRldGFpbDogbXNnLnVzZXI/LnVzZXJOYW1lLFxyXG4gICAgICAgIC8vICAgbGlmZTogMjUwMFxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNvY2tldC5vbignYWRkZWRUb1Jvb20nKS5zdWJzY3JpYmUoKG1zZzogYW55KSA9PiB7XHJcbiAgICAgIGlmIChtc2cuY2hhdFJvb21JZCA9PT0gdGhpcy5jaGF0Um9vbUlkKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlcnMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zb2NrZXQub24oJ3VzZXJBbHJlYWR5SW5Sb29tJykuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAvLyBpZiAobXNnLmNoYXRSb29tSWQgPT09IHRoaXMuY2hhdFJvb21JZCkge1xyXG4gICAgICAvLyAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgLy8gICAgIHNldmVyaXR5OiAnaW5mbycsXHJcbiAgICAgIC8vICAgICBzdW1tYXJ5OiAnVXNlciBBbHJlYWR5IEFkZGVkJyxcclxuICAgICAgLy8gICAgIGRldGFpbDogbXNnLnVzZXI/LnVzZXJOYW1lLFxyXG4gICAgICAvLyAgICAgbGlmZTogMjUwMFxyXG4gICAgICAvLyAgIH0pO1xyXG4gICAgICAvLyB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbmQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5uZXdNZXNzYWdlLnRyaW0oKTtcclxuICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuY2hhdFNlcnZpY2VcclxuICAgICAgLnNlbmRNZXNzYWdlKHRoaXMuY2hhdFJvb21JZCwge1xyXG4gICAgICAgIHNlbmRlcklkOiB0aGlzLmNoYXRTZXJ2aWNlLmN1cnJlbnRVc2VyKCkudXNlcklkLFxyXG4gICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgcmVwbHlUb01lc3NhZ2VJZDogdGhpcy5yZXBseVRvPy5yZXBseVRvTWVzc2FnZUlkID8/IG51bGwsXHJcbiAgICAgICAgY3JlYXRlZEJ5OiB0aGlzLmNoYXRTZXJ2aWNlLmN1cnJlbnRVc2VyKCkudXNlcklkXHJcbiAgICAgIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubmV3TWVzc2FnZSA9ICcnO1xyXG4gICAgICAgIHRoaXMucmVwbHlUbyA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkVXNlclRvUm9vbSgpIHtcclxuICAgIHRoaXMuY2hhdFNlcnZpY2VcclxuICAgICAgLmFkZFVzZXJUb1Jvb20oXHJcbiAgICAgICAgdGhpcy5jaGF0Um9vbUlkLFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyPy51c2VyX2lkLFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyPy5mdWxsX25hbWUsXHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZClcclxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNaW5pbWl6ZSgpIHtcclxuICAgIHRoaXMubWluaW1pemVkID0gIXRoaXMubWluaW1pemVkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVwbHkobXNnOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgdGhpcy5yZXBseVRvID0gbXNnO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJSZXBseSgpIHtcclxuICAgIHRoaXMucmVwbHlUbyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgbXNnOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIG1zZy5pZDtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zb2NrZXQub2ZmTmV3TWVzc2FnZSgpO1xyXG4gICAgdGhpcy5zb2NrZXQub2ZmTWVzc2FnZVNlZW4oKTtcclxuICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5tZXNzYWdlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XHJcbiAgICAgIC8vIPCflKUgU2Nyb2xsIEFGVEVSIERPTSBhY3R1YWxseSBjaGFuZ2VzXHJcbiAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShlbCwge1xyXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgIHN1YnRyZWU6IHRydWUsXHJcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVXNlcnMoKSB7XHJcbiAgICB0aGlzLnNob3dVc2VycyA9ICF0aGlzLnNob3dVc2VycztcclxuICB9XHJcbn1cclxuIiwiPHAtdG9hc3Q+PC9wLXRvYXN0PlxyXG5cclxuPGRpdiBjbGFzcz1cImNoYXQtd2luZG93XCIgW2NsYXNzLm1pbmltaXplZF09XCJtaW5pbWl6ZWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2hhdC1oZWFkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICA8c3Bhbj57eyBoZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgIDxzbWFsbCAqbmdJZj1cInVzZXJzKCkubGVuZ3RoXCI+KHt7IHVzZXJzKCkubGVuZ3RoIH19IHBhcnRpY2lwYW50cyk8L3NtYWxsPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cclxuICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS11c2Vyc1wiIChjbGljayk9XCJ0b2dnbGVVc2VycygpXCIgc3R5bGU9XCJmb250LXNpemU6IDAuNXJlbVwiPjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHBCdXR0b24gaWNvbj1cInBpIHBpLW1pbnVzXCIgKGNsaWNrKT1cInRvZ2dsZU1pbmltaXplKClcIiBzdHlsZT1cImZvbnQtc2l6ZTogMC41cmVtXCI+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxzcGFuPnt7IG1ldGFkYXRhIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjaGF0LWJvZHlcIiAqbmdJZj1cIiFtaW5pbWl6ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGF0LWxheW91dFwiIFtjbGFzcy51c2Vycy1oaWRkZW5dPVwiIXNob3dVc2Vyc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2hhdC1tYWluXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VzXCIgI21lc3NhZ2VzQ29udGFpbmVyIFtjbGFzcy5sb2FkaW5nXT1cImxvYWRpbmdcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1zZyBvZiBtZXNzYWdlcygpOyB0cmFja0J5OiB0cmFja0J5SWRcIiBjbGFzcz1cIm1lc3NhZ2Utcm93XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvdXRnb2luZzogbXNnLnNlbmRlcklkID09PSBjaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZCwgaW5jb21pbmc6IG1zZy5zZW5kZXJJZCAhPT0gY2hhdFNlcnZpY2UuY3VycmVudFVzZXIoKS51c2VySWQgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1idWJibGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1tZXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbmRlclwiICpuZ0lmPVwibXNnLnNlbmRlcklkICE9PSBjaGF0U2VydmljZS5jdXJyZW50VXNlcigpLnVzZXJJZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBtc2cuc2VuZGVyTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IG1zZy5jcmVhdGVkQXQgfCBkYXRlOiAnc2hvcnRUaW1lJyB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIE1FU1NBR0UgVEVYVCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBtc2cuY29udGVudCB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1hcmVhXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwbHktYmFubmVyXCIgKm5nSWY9XCJyZXBseVRvXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPlJlcGx5aW5nIHRvOiB7eyByZXBseVRvLmNvbnRlbnQgfCBzbGljZTogMDo1MCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS10aW1lc1wiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zbVwiIChjbGljayk9XCJjbGVhclJlcGx5KClcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDx0ZXh0YXJlYSBwSW5wdXRUZXh0YXJlYSBbKG5nTW9kZWwpXT1cIm5ld01lc3NhZ2VcIiByb3dzPVwiMlwiIGF1dG9SZXNpemU9XCJ0cnVlXCIgcGxhY2Vob2xkZXI9XCJUeXBlIGEgbWVzc2FnZVwiXHJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZW5kKClcIj5cclxuICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS1zZW5kXCIgbGFiZWw9XCJTZW5kXCIgKGNsaWNrKT1cInNlbmQoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2hhdC1zaWRlYmFyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Vc2VyczwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3RcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLXJvd1wiICpuZ0Zvcj1cImxldCB1IG9mIHVzZXJzKClcIj5cclxuICAgICAgICAgICAgPHAtYXZhdGFyIFtsYWJlbF09XCJ1LnVzZXJuYW1lWzBdXCI+PC9wLWF2YXRhcj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgdS51c2VybmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZihhZGRVc2VyQWxsb3dlZCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtYWRkXCI+XHJcbiAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJjaGF0U2VydmljZS51c2VyTGlzdCgpXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFVzZXJcIiBvcHRpb25MYWJlbD1cImZ1bGxfbmFtZVwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFVzZXJcIiAvPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJlbTtcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS1wbHVzXCIgbGFiZWw9XCJBZGRcIiAoY2xpY2spPVwiYWRkVXNlclRvUm9vbSgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -10,9 +10,10 @@ export class ChatService {
|
|
|
10
10
|
this.userList = signal([]);
|
|
11
11
|
}
|
|
12
12
|
/* ---------------- CHAT ROOMS ---------------- */
|
|
13
|
-
createRoom(roomId, name, createdBy, username, chatUsers) {
|
|
13
|
+
createRoom(roomId, name, metadata, createdBy, username, chatUsers) {
|
|
14
14
|
return this.http.post(`${this.baseUrl}/chatrooms/${roomId}`, {
|
|
15
15
|
name,
|
|
16
|
+
metadata,
|
|
16
17
|
createdBy,
|
|
17
18
|
username,
|
|
18
19
|
chatUsers
|
|
@@ -69,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
69
70
|
type: Injectable,
|
|
70
71
|
args: [{ providedIn: 'root' }]
|
|
71
72
|
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC13aWRnZXQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2NoYXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUtyQyxNQUFNLE9BQU8sV0FBVztJQU10QixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBTDVCLFlBQU8sR0FBRywyQkFBMkIsQ0FBQztRQUU5QyxnQkFBVyxHQUFHLE1BQU0sQ0FBYSxJQUFJLENBQUMsQ0FBQztRQUN2QyxhQUFRLEdBQUcsTUFBTSxDQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRVcsQ0FBQztJQUV6QyxrREFBa0Q7SUFDbEQsVUFBVSxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLFFBQWdCLEVBQUUsU0FBYztRQUM1RyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sY0FBYyxNQUFNLEVBQUUsRUFBRTtZQUMzRCxJQUFJO1lBQ0osUUFBUTtZQUNSLFNBQVM7WUFDVCxRQUFRO1lBQ1IsU0FBUztTQUNWLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sY0FBYyxNQUFNLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDM0UsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDYixFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU07WUFDWixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7U0FDckIsQ0FBQyxDQUFDLENBQ0osQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLFFBQWdCLEVBQUUsU0FBaUI7UUFDL0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGNBQWMsTUFBTSxRQUFRLEVBQUU7WUFDakUsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxXQUFXLENBQUMsTUFBYyxFQUFFLEtBQWM7UUFDeEMsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSztZQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWhDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxtQkFBbUIsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDYixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDUixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7WUFDeEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ3BCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtZQUN4QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87WUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtZQUNwQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7WUFDdEIsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSztTQUN4QyxDQUFDLENBQUMsQ0FDSixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUNULE1BQWMsRUFDZCxPQUFtRztRQUVuRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sbUJBQW1CLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbEYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNSLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNSLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtZQUN4QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7WUFDcEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztZQUNsQixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsZ0JBQWdCO1lBQ3BDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztZQUN0QixhQUFhLEVBQUUsQ0FBQyxDQUFDLGFBQWEsSUFBSSxLQUFLO1NBQ3hDLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLGNBQXNCLEVBQUUsVUFBa0I7UUFDakQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUSxHQUFHLElBQUksQ0FBQyxPQUFPLGNBQWMsY0FBYyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQzsrR0EvRVUsV0FBVzttSEFBWCxXQUFXLGNBREUsTUFBTTs7NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgUmVhY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvY2hhdC5tb2RlbHMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIENoYXRTZXJ2aWNlIHtcclxuICBwcml2YXRlIGJhc2VVcmwgPSBgaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaWA7XHJcblxyXG4gIGN1cnJlbnRVc2VyID0gc2lnbmFsPGFueSB8IG51bGw+KG51bGwpO1xyXG4gIHVzZXJMaXN0ID0gc2lnbmFsPGFueVtdPihbXSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkgeyB9XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0gQ0hBVCBST09NUyAtLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgY3JlYXRlUm9vbShyb29tSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBtZXRhZGF0YTogc3RyaW5nLCBjcmVhdGVkQnk6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgY2hhdFVzZXJzOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmFzZVVybH0vY2hhdHJvb21zLyR7cm9vbUlkfWAsIHtcclxuICAgICAgbmFtZSxcclxuICAgICAgbWV0YWRhdGEsXHJcbiAgICAgIGNyZWF0ZWRCeSxcclxuICAgICAgdXNlcm5hbWUsXHJcbiAgICAgIGNoYXRVc2Vyc1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSb29tVXNlcnMocm9vbUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oYCR7dGhpcy5iYXNlVXJsfS9jaGF0cm9vbXMvJHtyb29tSWR9L3VzZXJzYCkucGlwZShcclxuICAgICAgbWFwKGxpc3QgPT5cclxuICAgICAgICBsaXN0Lm1hcCh1ID0+ICh7XHJcbiAgICAgICAgICBpZDogdS5Vc2VySWQsXHJcbiAgICAgICAgICB1c2VybmFtZTogdS5Vc2VyTmFtZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYWRkVXNlclRvUm9vbShyb29tSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIHVzZXJOYW1lOiBzdHJpbmcsIGNyZWF0ZWRCeTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iYXNlVXJsfS9jaGF0cm9vbXMvJHtyb29tSWR9L3VzZXJzYCwge1xyXG4gICAgICB1c2VySWQsXHJcbiAgICAgIHVzZXJOYW1lLFxyXG4gICAgICBjcmVhdGVkQnlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLSBNRVNTQUdFUyAtLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgZ2V0TWVzc2FnZXMocm9vbUlkOiBzdHJpbmcsIHNpbmNlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZVtdPiB7XHJcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHt9O1xyXG4gICAgaWYgKHNpbmNlKSBwYXJhbXMuc2luY2UgPSBzaW5jZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oYCR7dGhpcy5iYXNlVXJsfS9tZXNzYWdlcy9yb29tcy8ke3Jvb21JZH1gLCB7IHBhcmFtcyB9KS5waXBlKFxyXG4gICAgICBtYXAobGlzdCA9PlxyXG4gICAgICAgIGxpc3QubWFwKG0gPT4gKHtcclxuICAgICAgICAgIGlkOiBtLmlkLFxyXG4gICAgICAgICAgY2hhdFJvb21JZDogbS5jaGF0Um9vbUlkLFxyXG4gICAgICAgICAgc2VuZGVySWQ6IG0uc2VuZGVySWQsXHJcbiAgICAgICAgICBzZW5kZXJOYW1lOiBtLnNlbmRlck5hbWUsXHJcbiAgICAgICAgICBjb250ZW50OiBtLmNvbnRlbnQsXHJcbiAgICAgICAgICByZXBseVRvTWVzc2FnZUlkOiBtLnJlcGx5VG9NZXNzYWdlSWQsXHJcbiAgICAgICAgICBjcmVhdGVkQXQ6IG0uY3JlYXRlZEF0LFxyXG4gICAgICAgICAgaGFzQXR0YWNobWVudDogbS5oYXNBdHRhY2htZW50ID8/IGZhbHNlLFxyXG4gICAgICAgIH0pKVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VuZE1lc3NhZ2UoXHJcbiAgICByb29tSWQ6IHN0cmluZyxcclxuICAgIHBheWxvYWQ6IHsgc2VuZGVySWQ6IHN0cmluZzsgY29udGVudDogc3RyaW5nOyByZXBseVRvTWVzc2FnZUlkPzogc3RyaW5nIHwgbnVsbCwgY3JlYXRlZEJ5OiBzdHJpbmcgfVxyXG4gICk6IE9ic2VydmFibGU8Q2hhdE1lc3NhZ2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuYmFzZVVybH0vbWVzc2FnZXMvcm9vbXMvJHtyb29tSWR9YCwgcGF5bG9hZCkucGlwZShcclxuICAgICAgbWFwKG0gPT4gKHtcclxuICAgICAgICBpZDogbS5pZCxcclxuICAgICAgICBjaGF0Um9vbUlkOiBtLmNoYXRSb29tSWQsXHJcbiAgICAgICAgc2VuZGVySWQ6IG0uc2VuZGVySWQsXHJcbiAgICAgICAgc2VuZGVyTmFtZTogbS5zZW5kZXJOYW1lLFxyXG4gICAgICAgIGNvbnRlbnQ6IG0uY29udGVudCxcclxuICAgICAgICByZXBseVRvTWVzc2FnZUlkOiBtLnJlcGx5VG9NZXNzYWdlSWQsXHJcbiAgICAgICAgY3JlYXRlZEF0OiBtLmNyZWF0ZWRBdCxcclxuICAgICAgICBoYXNBdHRhY2htZW50OiBtLmhhc0F0dGFjaG1lbnQgPz8gZmFsc2UsXHJcbiAgICAgIH0pKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFJvb21zKGxvZ2dlZEluVXNlcklkOiBzdHJpbmcsIGNoYXRSb29tSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KGAke3RoaXMuYmFzZVVybH0vY2hhdHJvb21zLyR7bG9nZ2VkSW5Vc2VySWR9LyR7Y2hhdFJvb21JZH1gKTtcclxuICB9XHJcbn1cclxuIl19
|