@rtsee/ngx 0.0.25 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/ngx/bundles/rtsee-ngx.umd.js +469 -112
  2. package/dist/ngx/bundles/rtsee-ngx.umd.js.map +1 -1
  3. package/dist/ngx/esm2015/lib/common/components/preloader/preloader.component.js +34 -0
  4. package/dist/ngx/esm2015/lib/components/rtsee-container/rtsee-container.component.js +14 -0
  5. package/dist/ngx/esm2015/lib/components/rtsee-events-dashboard/components/event-thumbnail/event-thumbnail.component.js +73 -0
  6. package/dist/ngx/esm2015/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.js +2 -3
  7. package/dist/ngx/esm2015/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.js +9 -7
  8. package/dist/ngx/esm2015/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-session/rtsee-events-dashboard-session.component.js +22 -0
  9. package/dist/ngx/esm2015/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.js +2 -3
  10. package/dist/ngx/esm2015/lib/components/rtsee-messenger/chat/chat.component.js +5 -43
  11. package/dist/ngx/esm2015/lib/components/rtsee-messenger/chat-input/chat-input.component.js +3 -4
  12. package/dist/ngx/esm2015/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.js +8 -5
  13. package/dist/ngx/esm2015/lib/components/rtsee-messenger/chats-list/chats-list.component.js +3 -4
  14. package/dist/ngx/esm2015/lib/components/rtsee-messenger/main-menu/components/contacts-multiselect/contacts-multiselect.component.js +20 -0
  15. package/dist/ngx/esm2015/lib/components/rtsee-messenger/main-menu/components/manage-chat/manage-chat.component.js +23 -0
  16. package/dist/ngx/esm2015/lib/components/rtsee-messenger/main-menu/components/models/MainMenuState.js +8 -0
  17. package/dist/ngx/esm2015/lib/components/rtsee-messenger/main-menu/components/search/search.component.js +34 -0
  18. package/dist/ngx/esm2015/lib/components/rtsee-messenger/main-menu/main-menu.component.js +35 -0
  19. package/dist/ngx/esm2015/lib/components/rtsee-messenger/message/components/message-time-and-status/message-time-and-status.component.js +24 -0
  20. package/dist/ngx/esm2015/lib/components/rtsee-messenger/message/message.component.js +9 -9
  21. package/dist/ngx/esm2015/lib/components/rtsee-messenger/messages-list/messages-list.component.js +44 -13
  22. package/dist/ngx/esm2015/lib/components/rtsee-messenger/messenger/messenger.component.js +14 -7
  23. package/dist/ngx/esm2015/lib/components/rtsee-messenger/messenger-header/messenger-header.component.js +17 -12
  24. package/dist/ngx/esm2015/lib/components/rtsee-messenger/profile/profile.component.js +28 -0
  25. package/dist/ngx/esm2015/lib/directives/shave.directive.js +22 -0
  26. package/dist/ngx/esm2015/lib/ngx.module.js +35 -2
  27. package/dist/ngx/esm2015/lib/services/events-widgets.service.js +25 -0
  28. package/dist/ngx/esm2015/lib/services/message-widgets.service.js +28 -0
  29. package/dist/ngx/fesm2015/rtsee-ngx.js +431 -96
  30. package/dist/ngx/fesm2015/rtsee-ngx.js.map +1 -1
  31. package/dist/ngx/lib/common/components/preloader/preloader.component.d.ts +13 -0
  32. package/dist/ngx/lib/components/rtsee-container/rtsee-container.component.d.ts +5 -0
  33. package/dist/ngx/lib/components/rtsee-events-dashboard/components/event-thumbnail/event-thumbnail.component.d.ts +20 -0
  34. package/dist/ngx/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.d.ts +3 -1
  35. package/dist/ngx/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-session/rtsee-events-dashboard-session.component.d.ts +10 -0
  36. package/dist/ngx/lib/components/rtsee-messenger/chat/chat.component.d.ts +2 -12
  37. package/dist/ngx/lib/components/rtsee-messenger/chat-input/chat-input.component.d.ts +1 -1
  38. package/dist/ngx/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.d.ts +4 -3
  39. package/dist/ngx/lib/components/rtsee-messenger/chats-list/chats-list.component.d.ts +1 -1
  40. package/dist/ngx/lib/components/rtsee-messenger/main-menu/components/contacts-multiselect/contacts-multiselect.component.d.ts +9 -0
  41. package/dist/ngx/lib/components/rtsee-messenger/main-menu/components/manage-chat/manage-chat.component.d.ts +10 -0
  42. package/dist/ngx/lib/components/rtsee-messenger/main-menu/components/models/MainMenuState.d.ts +9 -0
  43. package/dist/ngx/lib/components/rtsee-messenger/main-menu/components/search/search.component.d.ts +14 -0
  44. package/dist/ngx/lib/components/rtsee-messenger/main-menu/main-menu.component.d.ts +13 -0
  45. package/dist/ngx/lib/components/rtsee-messenger/message/components/message-time-and-status/message-time-and-status.component.d.ts +11 -0
  46. package/dist/ngx/lib/components/rtsee-messenger/message/message.component.d.ts +3 -3
  47. package/dist/ngx/lib/components/rtsee-messenger/messages-list/messages-list.component.d.ts +12 -3
  48. package/dist/ngx/lib/components/rtsee-messenger/messenger/messenger.component.d.ts +4 -1
  49. package/dist/ngx/lib/components/rtsee-messenger/messenger-header/messenger-header.component.d.ts +5 -2
  50. package/dist/ngx/lib/components/rtsee-messenger/profile/profile.component.d.ts +9 -0
  51. package/dist/ngx/lib/directives/shave.directive.d.ts +9 -0
  52. package/dist/ngx/lib/ngx.module.d.ts +21 -10
  53. package/dist/ngx/lib/services/events-widgets.service.d.ts +8 -0
  54. package/dist/ngx/lib/services/{widgets.service.d.ts → message-widgets.service.d.ts} +3 -3
  55. package/dist/ngx/src/lib/common/compiled-scss/styles.scss +980 -37
  56. package/package.json +3 -2
  57. package/dist/ngx/esm2015/lib/services/widgets.service.js +0 -28
@@ -1,8 +1,10 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/material/button'), require('@angular/common'), require('@angular/material/form-field'), require('@angular/forms'), require('rxjs'), require('dayjs'), require('dayjs/plugin/relativeTime'), require('@rtsee/messenger'), require('ngx-autosize'), require('ngx-infinite-scroll'), require('@angular/material/icon'), require('@angular/material/select'), require('@angular/platform-browser/animations')) :
3
- typeof define === 'function' && define.amd ? define('@rtsee/ngx', ['exports', '@angular/core', '@angular/material/button', '@angular/common', '@angular/material/form-field', '@angular/forms', 'rxjs', 'dayjs', 'dayjs/plugin/relativeTime', '@rtsee/messenger', 'ngx-autosize', 'ngx-infinite-scroll', '@angular/material/icon', '@angular/material/select', '@angular/platform-browser/animations'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.rtsee = global.rtsee || {}, global.rtsee.ngx = {}), global.ng.core, global.ng.material.button, global.ng.common, global.ng.material.formField, global.ng.forms, global.rxjs, global.dayjs, global.relativeTime, global.messenger, global.i2$1, global.i3$1, global.ng.material.icon, global.ng.material.select, global.ng.platformBrowser.animations));
5
- }(this, (function (exports, i0, i1, i2, i3, i1$1, rxjs, dayjs, relativeTime, messenger, i2$1, i3$1, icon, select, animations) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/material/button'), require('@angular/common'), require('@angular/material/form-field'), require('@angular/forms'), require('rxjs'), require('@rtsee/messenger'), require('dayjs'), require('dayjs/plugin/relativeTime'), require('shave'), require('ngx-infinite-scroll'), require('ngx-autosize'), require('rxjs/operators'), require('@angular/material/icon'), require('@angular/material/select'), require('@angular/platform-browser/animations')) :
3
+ typeof define === 'function' && define.amd ? define('@rtsee/ngx', ['exports', '@angular/core', '@angular/material/button', '@angular/common', '@angular/material/form-field', '@angular/forms', 'rxjs', '@rtsee/messenger', 'dayjs', 'dayjs/plugin/relativeTime', 'shave', 'ngx-infinite-scroll', 'ngx-autosize', 'rxjs/operators', '@angular/material/icon', '@angular/material/select', '@angular/platform-browser/animations'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.rtsee = global.rtsee || {}, global.rtsee.ngx = {}), global.ng.core, global.ng.material.button, global.ng.common, global.ng.material.formField, global.ng.forms, global.rxjs, global.messenger, global.dayjs, global.relativeTime, global.shave, global.i3$2, global.i2, global.rxjs.operators, global.ng.material.icon, global.ng.material.select, global.ng.platformBrowser.animations));
5
+ }(this, (function (exports, i0, i1, i3, i3$1, i1$1, rxjs, messenger, dayjs, relativeTime, shave, i3$2, i2, operators, icon, select, animations) { 'use strict';
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
6
8
 
7
9
  function _interopNamespace(e) {
8
10
  if (e && e.__esModule) return e;
@@ -26,13 +28,14 @@
26
28
 
27
29
  var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
28
30
  var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
29
- var i2__namespace = /*#__PURE__*/_interopNamespace(i2);
30
31
  var i3__namespace = /*#__PURE__*/_interopNamespace(i3);
32
+ var i3__namespace$1 = /*#__PURE__*/_interopNamespace(i3$1);
31
33
  var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1$1);
32
34
  var dayjs__namespace = /*#__PURE__*/_interopNamespace(dayjs);
33
35
  var relativeTime__namespace = /*#__PURE__*/_interopNamespace(relativeTime);
34
- var i2__namespace$1 = /*#__PURE__*/_interopNamespace(i2$1);
35
- var i3__namespace$1 = /*#__PURE__*/_interopNamespace(i3$1);
36
+ var shave__default = /*#__PURE__*/_interopDefaultLegacy(shave);
37
+ var i3__namespace$2 = /*#__PURE__*/_interopNamespace(i3$2);
38
+ var i2__namespace = /*#__PURE__*/_interopNamespace(i2);
36
39
 
37
40
  var NgxService = /** @class */ (function () {
38
41
  function NgxService() {
@@ -60,7 +63,7 @@
60
63
  return RTSeeControlsComponent;
61
64
  }());
62
65
  RTSeeControlsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RTSeeControlsComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
63
- RTSeeControlsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RTSeeControlsComponent, selector: "ngx-rtsee-controls", inputs: { rtsee: "rtsee", fullScreenMode: "fullScreenMode" }, ngImport: i0__namespace, template: "<div class=\"rtsee-controls\" [ngClass]=\"{'rtsee-full-screen-controls' : fullScreenMode }\">\n <div class=\"rtsee-bottom-panel\">\n <div class=\"mic rtsee-buttons-container\">\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n *ngIf=\"rtsee.microphone\"\n type=\"button\"\n (click)=\"this.rtsee.disableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_none</span>\n </button>\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n *ngIf=\"!rtsee.microphone\"\n type=\"button\" (click)=\"this.rtsee.enableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_off</span>\n </button>\n </div>\n\n <div class=\"video-camera rtsee-buttons-container\">\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n *ngIf=\"rtsee.camera\"\n type=\"button\"\n (click)=\"rtsee.disableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam</span>\n </button>\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n *ngIf=\"!rtsee.camera\"\n type=\"button\"\n (click)=\"rtsee.enableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam_off</span>\n </button>\n </div>\n <div class=\"present rtsee-buttons-container\" [ngClass]=\"{'rtsee-present-button-container': rtsee.isPresenter}\">\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"onPresentClicked()\"\n >\n <span class=\"material-icons-outlined\">present_to_all</span>\n </button>\n </div>\n <div class=\"call-end rtsee-buttons-container\">\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.end()\"\n >\n <span class=\"material-icons-outlined\">call_end</span>\n </button>\n </div>\n </div>\n</div>\n", styles: [".rtsee-controls{display:inline-block;height:100%}.rtsee-controls .rtsee-buttons-container{height:35px;width:35px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 6px;cursor:pointer}.rtsee-controls .rtsee-buttons-container:last-child{margin-right:0}.rtsee-controls .rtsee-buttons-container:first-child{margin-left:0}.rtsee-controls .rtsee-buttons-container .mat-icon-button{background-color:#333;color:#fff}.rtsee-controls .rtsee-buttons-container.call-end .mat-icon-button{background-color:red}.rtsee-controls .rtsee-buttons-container.rtsee-present-button-container .mat-icon-button{background-color:#090}.rtsee-controls .full-screen{align-self:flex-end;padding:12px;cursor:pointer}.rtsee-controls .rtsee-bottom-panel{padding:12px;display:flex;justify-content:center;align-items:center;border-radius:45px;background-color:rgba(0,0,0,.7)}.rtsee-controls.rtsee-full-screen-controls .rtsee-buttons-container{height:60px;width:60px}"], components: [{ type: i1__namespace.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i2__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.MatSuffix, selector: "[matSuffix]" }] });
66
+ RTSeeControlsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RTSeeControlsComponent, selector: "ngx-rtsee-controls", inputs: { rtsee: "rtsee", fullScreenMode: "fullScreenMode" }, ngImport: i0__namespace, template: "<div class=\"rtsee-controls\" [ngClass]=\"{'rtsee-full-screen-controls' : fullScreenMode }\">\n <div class=\"rtsee-bottom-panel\">\n <div class=\"mic rtsee-buttons-container\">\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n *ngIf=\"rtsee.microphone\"\n type=\"button\"\n (click)=\"this.rtsee.disableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_none</span>\n </button>\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n *ngIf=\"!rtsee.microphone\"\n type=\"button\" (click)=\"this.rtsee.enableMicrophone()\"\n >\n <span class=\"material-icons-outlined\">mic_off</span>\n </button>\n </div>\n\n <div class=\"video-camera rtsee-buttons-container\">\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n *ngIf=\"rtsee.camera\"\n type=\"button\"\n (click)=\"rtsee.disableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam</span>\n </button>\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n *ngIf=\"!rtsee.camera\"\n type=\"button\"\n (click)=\"rtsee.enableCamera()\"\n >\n <span class=\"material-icons-outlined\">videocam_off</span>\n </button>\n </div>\n <div class=\"present rtsee-buttons-container\" [ngClass]=\"{'rtsee-present-button-container': rtsee.isPresenter}\">\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"onPresentClicked()\"\n >\n <span class=\"material-icons-outlined\">present_to_all</span>\n </button>\n </div>\n <div class=\"call-end rtsee-buttons-container\">\n <button mat-icon-button matSuffix\n class=\"rtsee-ripple-button\"\n type=\"button\"\n (click)=\"rtsee.end()\"\n >\n <span class=\"material-icons-outlined\">call_end</span>\n </button>\n </div>\n </div>\n</div>\n", styles: [".rtsee-controls{display:inline-block;height:100%}.rtsee-controls .rtsee-buttons-container{height:35px;width:35px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 6px;cursor:pointer}.rtsee-controls .rtsee-buttons-container:last-child{margin-right:0}.rtsee-controls .rtsee-buttons-container:first-child{margin-left:0}.rtsee-controls .rtsee-buttons-container .mat-icon-button{background-color:#333;color:#fff}.rtsee-controls .rtsee-buttons-container.call-end .mat-icon-button{background-color:red}.rtsee-controls .rtsee-buttons-container.rtsee-present-button-container .mat-icon-button{background-color:#090}.rtsee-controls .full-screen{align-self:flex-end;padding:12px;cursor:pointer}.rtsee-controls .rtsee-bottom-panel{padding:12px;display:flex;justify-content:center;align-items:center;border-radius:45px;background-color:rgba(0,0,0,.7)}.rtsee-controls.rtsee-full-screen-controls .rtsee-buttons-container{height:60px;width:60px}"], components: [{ type: i1__namespace.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$1.MatSuffix, selector: "[matSuffix]" }] });
64
67
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RTSeeControlsComponent, decorators: [{
65
68
  type: i0.Component,
66
69
  args: [{
@@ -99,7 +102,7 @@
99
102
  return RtseeSettingsComponent;
100
103
  }());
101
104
  RtseeSettingsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeSettingsComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
102
- RtseeSettingsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeSettingsComponent, selector: "ngx-rtsee-settings", inputs: { rtSee: "rtSee", fullScreenMode: "fullScreenMode" }, ngImport: i0__namespace, template: "<div class=\"rtsee-settings\" [ngClass]=\"{'rtsee-full-screen-settings' : fullScreenMode}\">\n <div class=\"rtsee-devices\">\n <div class=\"rtsee-device-select-wrapper\">\n <label class=\"rtsee-select-label\" for=\"audio-input\">Audio Input:</label>\n <select class=\"rtsee-select\" id=\"audio-input\" (click)=\"refreshSelectOptions()\">\n <option *ngFor=\"let device of rtSee.audioInputDevices\" [value]=\"device.deviceId\" (click)=\"setAudioInput(device.deviceId)\">\n {{device.label}}\n </option>\n </select>\n </div>\n <div class=\"rtsee-device-select-wrapper\">\n <label class=\"rtsee-select-label\" for=\"audio-output\">Audio Output:</label>\n <select class=\"rtsee-select\" id=\"audio-output\" (click)=\"refreshSelectOptions()\">\n <option *ngFor=\"let device of rtSee.audioOutputDevices\" [value]=\"device.deviceId\" (click)=\"setAudioOutput(device.deviceId)\">\n {{device.label}}\n </option>\n </select>\n </div>\n <div class=\"rtsee-device-select-wrapper\">\n <label class=\"rtsee-select-label\" for=\"video-input\">Video Input:</label>\n <select class=\"rtsee-select\" id=\"video-input\" (click)=\"refreshSelectOptions()\">\n <option *ngFor=\"let device of rtSee.videoInputDevices\" [value]=\"device.deviceId\" (click)=\"setVideoInput(device.deviceId)\">\n {{device.label}}\n </option>\n </select>\n </div>\n </div>\n</div>\n", styles: [".rtsee-settings{box-sizing:border-box;background-color:#404040;border-bottom:1px solid;max-height:180px;padding:16px 0;overflow:auto;color:#fff}.rtsee-settings .rtsee-device-select-wrapper{padding:0 10px}.rtsee-settings .rtsee-device-select-wrapper .rtsee-select-label{font-family:monospace;display:inline-block;margin:8px}.rtsee-settings.rtsee-full-screen-settings{max-height:unset;overflow:unset}"], directives: [{ type: i2__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1__namespace$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
105
+ RtseeSettingsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeSettingsComponent, selector: "ngx-rtsee-settings", inputs: { rtSee: "rtSee", fullScreenMode: "fullScreenMode" }, ngImport: i0__namespace, template: "<div class=\"rtsee-settings\" [ngClass]=\"{'rtsee-full-screen-settings' : fullScreenMode}\">\n <div class=\"rtsee-devices\">\n <div class=\"rtsee-device-select-wrapper\">\n <label class=\"rtsee-select-label\" for=\"audio-input\">Audio Input:</label>\n <select class=\"rtsee-select\" id=\"audio-input\" (click)=\"refreshSelectOptions()\">\n <option *ngFor=\"let device of rtSee.audioInputDevices\" [value]=\"device.deviceId\" (click)=\"setAudioInput(device.deviceId)\">\n {{device.label}}\n </option>\n </select>\n </div>\n <div class=\"rtsee-device-select-wrapper\">\n <label class=\"rtsee-select-label\" for=\"audio-output\">Audio Output:</label>\n <select class=\"rtsee-select\" id=\"audio-output\" (click)=\"refreshSelectOptions()\">\n <option *ngFor=\"let device of rtSee.audioOutputDevices\" [value]=\"device.deviceId\" (click)=\"setAudioOutput(device.deviceId)\">\n {{device.label}}\n </option>\n </select>\n </div>\n <div class=\"rtsee-device-select-wrapper\">\n <label class=\"rtsee-select-label\" for=\"video-input\">Video Input:</label>\n <select class=\"rtsee-select\" id=\"video-input\" (click)=\"refreshSelectOptions()\">\n <option *ngFor=\"let device of rtSee.videoInputDevices\" [value]=\"device.deviceId\" (click)=\"setVideoInput(device.deviceId)\">\n {{device.label}}\n </option>\n </select>\n </div>\n </div>\n</div>\n", styles: [".rtsee-settings{box-sizing:border-box;background-color:#404040;border-bottom:1px solid;max-height:180px;padding:16px 0;overflow:auto;color:#fff}.rtsee-settings .rtsee-device-select-wrapper{padding:0 10px}.rtsee-settings .rtsee-device-select-wrapper .rtsee-select-label{font-family:monospace;display:inline-block;margin:8px}.rtsee-settings.rtsee-full-screen-settings{max-height:unset;overflow:unset}"], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1__namespace$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
103
106
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeSettingsComponent, decorators: [{
104
107
  type: i0.Component,
105
108
  args: [{
@@ -184,7 +187,7 @@
184
187
  return RtseePeerComponent;
185
188
  }());
186
189
  RtseePeerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseePeerComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
187
- RtseePeerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseePeerComponent, selector: "ngx-rtsee-peer", inputs: { peer: "peer" }, viewQueries: [{ propertyName: "audioOutput", first: true, predicate: ["audioOutput"], descendants: true }, { propertyName: "videoOutput", first: true, predicate: ["videoOutput"], descendants: true }], ngImport: i0__namespace, template: "<div class=\"rtsee-peer\" [ngClass]=\"{\n'rtsee-peer-video-disabled': !peer.remoteVideoStream || !peer.camera\n}\">\n <div class=\"rtsee-peer-content\">\n <div class=\"rtsee-peer-photo\" *ngIf=\"!peer.camera\">\n <div class=\"rtsee-peer-photo-wrapper\">\n <div *ngIf=\"peer.imageUrl\"\n [style.background-image]=\"'url(' + peer.imageUrl + ')'\"\n class=\"rtsee-peer-photo-image\"\n ></div>\n <img *ngIf=\"!peer.imageUrl\" [src]=\"\" alt=\"peer_photo\" class=\"rtsee-peer-photo-image\">\n </div>\n <div class=\"rtsee-peer-info\">\n <p class=\"rtsee-peer-name\" *ngIf=\"peer.name\">{{peer.name}}</p>\n </div>\n </div>\n <video #videoOutput\n class=\"rtsee-peer-video\"\n [autoplay]=\"true\"\n [srcObject]=\"peer.remoteVideoStream\"\n playsinline=\"true\"\n >\n </video>\n <div class=\"rtsee-peer-soundbar\">\n <ngx-rtsee-soundbar [peer]=\"peer\"></ngx-rtsee-soundbar>\n </div>\n </div>\n</div>\n", styles: [".rtsee-peer{height:100%;width:100%;overflow:hidden}.rtsee-peer .rtsee-peer-content{height:100%;text-align:center;background-color:#404040;border-radius:4px}.rtsee-peer .rtsee-peer-content .rtsee-peer-photo .rtsee-peer-photo-wrapper{display:inline-block;height:120px;width:120px;border-radius:50%;position:relative;border:0 solid #fff}.rtsee-peer .rtsee-peer-content .rtsee-peer-photo .rtsee-peer-photo-wrapper .rtsee-peer-photo-image{border:0 solid #fff;height:100%;left:0;background-size:cover;border-radius:50%}.rtsee-peer .rtsee-peer-content .rtsee-peer-info{color:#fff}.rtsee-peer .rtsee-peer-content .rtsee-peer-info .rtsee-peer-name{font-family:monospace;padding:8px 0 0;margin-top:-8px}.rtsee-peer .rtsee-peer-content .rtsee-peer-soundbar{position:absolute;right:16px;bottom:16px;background:#404040;padding:7px 6px 8px;border-radius:50%;border:1px solid}.rtsee-peer .rtsee-peer-video{height:100%;max-width:100%}.rtsee-peer.rtsee-peer-video-disabled .rtsee-peer-video{position:absolute;left:-3000px}"], components: [{ type: RtseeSoundbarComponent, selector: "ngx-rtsee-soundbar", inputs: ["peer"] }], directives: [{ type: i2__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
190
+ RtseePeerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseePeerComponent, selector: "ngx-rtsee-peer", inputs: { peer: "peer" }, viewQueries: [{ propertyName: "audioOutput", first: true, predicate: ["audioOutput"], descendants: true }, { propertyName: "videoOutput", first: true, predicate: ["videoOutput"], descendants: true }], ngImport: i0__namespace, template: "<div class=\"rtsee-peer\" [ngClass]=\"{\n'rtsee-peer-video-disabled': !peer.remoteVideoStream || !peer.camera\n}\">\n <div class=\"rtsee-peer-content\">\n <div class=\"rtsee-peer-photo\" *ngIf=\"!peer.camera\">\n <div class=\"rtsee-peer-photo-wrapper\">\n <div *ngIf=\"peer.imageUrl\"\n [style.background-image]=\"'url(' + peer.imageUrl + ')'\"\n class=\"rtsee-peer-photo-image\"\n ></div>\n <img *ngIf=\"!peer.imageUrl\" [src]=\"\" alt=\"peer_photo\" class=\"rtsee-peer-photo-image\">\n </div>\n <div class=\"rtsee-peer-info\">\n <p class=\"rtsee-peer-name\" *ngIf=\"peer.name\">{{peer.name}}</p>\n </div>\n </div>\n <video #videoOutput\n class=\"rtsee-peer-video\"\n [autoplay]=\"true\"\n [srcObject]=\"peer.remoteVideoStream\"\n playsinline=\"true\"\n >\n </video>\n <div class=\"rtsee-peer-soundbar\">\n <ngx-rtsee-soundbar [peer]=\"peer\"></ngx-rtsee-soundbar>\n </div>\n </div>\n</div>\n", styles: [".rtsee-peer{height:100%;width:100%;overflow:hidden}.rtsee-peer .rtsee-peer-content{height:100%;text-align:center;background-color:#404040;border-radius:4px}.rtsee-peer .rtsee-peer-content .rtsee-peer-photo .rtsee-peer-photo-wrapper{display:inline-block;height:120px;width:120px;border-radius:50%;position:relative;border:0 solid #fff}.rtsee-peer .rtsee-peer-content .rtsee-peer-photo .rtsee-peer-photo-wrapper .rtsee-peer-photo-image{border:0 solid #fff;height:100%;left:0;background-size:cover;border-radius:50%}.rtsee-peer .rtsee-peer-content .rtsee-peer-info{color:#fff}.rtsee-peer .rtsee-peer-content .rtsee-peer-info .rtsee-peer-name{font-family:monospace;padding:8px 0 0;margin-top:-8px}.rtsee-peer .rtsee-peer-content .rtsee-peer-soundbar{position:absolute;right:16px;bottom:16px;background:#404040;padding:7px 6px 8px;border-radius:50%;border:1px solid}.rtsee-peer .rtsee-peer-video{height:100%;max-width:100%}.rtsee-peer.rtsee-peer-video-disabled .rtsee-peer-video{position:absolute;left:-3000px}"], components: [{ type: RtseeSoundbarComponent, selector: "ngx-rtsee-soundbar", inputs: ["peer"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
188
191
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseePeerComponent, decorators: [{
189
192
  type: i0.Component,
190
193
  args: [{
@@ -216,7 +219,7 @@
216
219
  return RTSeeComponent;
217
220
  }());
218
221
  RTSeeComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RTSeeComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
219
- RTSeeComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RTSeeComponent, selector: "ngx-rtsee", inputs: { rtSee: "rtSee" }, ngImport: i0__namespace, template: "<div class=\"rtsee-shell\" [ngClass]=\"{\n'rtsee-shell-expanded': rtSee.uiControls.isExpanded || fullScreenModeEnabled,\n'rtsee-shell-no-companions': !rtSee.rtcPeerConnections.connections?.length\n}\">\n <div class=\"rtsee-local-peer\" *ngIf=\"rtSee.localStream && rtSee.camera\">\n <video class=\"rtsee-local-video\"\n [autoplay]=\"true\"\n [muted]=\"true\"\n [srcObject]=\"rtSee.localStream\"\n playsinline=\"true\"\n ></video>\n </div>\n <div class=\"rtsee-window-controls\">\n <button mat-icon-button matSuffix\n type=\"button\"\n (click)=\"this.toggleSettings()\"\n class=\"rtsee-window-controls-button rtsee-ripple-button\"\n >\n <span class=\"material-icons-outlined\">settings</span>\n </button>\n <button mat-icon-button matSuffix\n type=\"button\"\n (click)=\"this.toggleFullScreenMode()\"\n class=\"rtsee-window-controls-button rtsee-ripple-button\"\n >\n <span class=\"material-icons-outlined\">open_in_full</span>\n </button>\n </div>\n <div class=\"rtsee-settings-container\" *ngIf=\"settingsViewEnabled\">\n <button mat-icon-button matSuffix\n type=\"button\"\n (click)=\"this.toggleSettings()\"\n class=\"rtsee-close-settings-button\"\n >\n <span class=\"material-icons-outlined\">close</span>\n </button>\n <ngx-rtsee-settings [rtSee]=\"rtSee\" [fullScreenMode]=\"fullScreenModeEnabled\"></ngx-rtsee-settings>\n </div>\n <div class=\"rtsee-screen-share\" *ngIf=\"rtSee.screenSharePeer\" >\n <video [autoplay]=\"true\"\n [muted]=\"true\"\n [srcObject]=\"rtSee.screenSharePeer.remoteVideoStream\"\n playsinline=\"true\"\n class=\"rtsee-screen-share-video\"\n ></video>\n </div>\n <div class=\"rtsee-peers\" [ngClass]=\"{\n 'rtsee-peers-alone': !rtSee.rtcPeerConnections.connections?.length,\n 'rtsee-peers-one': rtSee.rtcPeerConnections.connections?.length === 1,\n 'rtsee-peers-three-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 1\n && rtSee.rtcPeerConnections.connections.length < 4,\n 'rtsee-peers-six-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 3\n && rtSee.rtcPeerConnections.connections.length < 7,\n 'rtsee-peers-nine-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length >= 7\n }\">\n <div class=\"rtsee-peer-wrapper\"\n *ngFor=\"let peer of rtSee.rtcPeerConnections.connections\"\n >\n <ngx-rtsee-peer [peer]=\"peer\"></ngx-rtsee-peer>\n </div>\n </div>\n <div class=\"rtsee-peers-list\"></div>\n <div class=\"rtsee-controls-wrapper\">\n <ngx-rtsee-controls [rtsee]=\"rtSee\" [fullScreenMode]=\"fullScreenModeEnabled\"></ngx-rtsee-controls>\n </div>\n</div>\n\n", styles: [".rtsee-shell{position:fixed;z-index:10;right:16px;bottom:16px;background-color:#333;width:100%;max-width:320px;height:240px;overflow:hidden;border-radius:8px}.rtsee-shell:hover .rtsee-controls-wrapper{bottom:8px}.rtsee-shell:hover .rtsee-window-controls{top:8px}.rtsee-shell .rtsee-local-peer{position:absolute;top:8px;left:8px;width:80px;height:60px;text-align:center}.rtsee-shell .rtsee-local-peer .rtsee-local-video{height:100%;max-width:100%;border-radius:8px}.rtsee-shell .rtsee-screen-share{height:100%}.rtsee-shell .rtsee-screen-share .rtsee-screen-share-video{width:100%;height:calc(100% - 50px)}.rtsee-shell .rtsee-peers{height:100%}.rtsee-shell .rtsee-peers .rtsee-peer-wrapper{padding:8px;box-sizing:border-box;height:100%}.rtsee-shell .rtsee-peers .rtsee-peer-wrapper .rtsee-peer{position:relative}.rtsee-shell .rtsee-peers .rtsee-peer-wrapper .rtsee-peer ::ng-deep .rtsee-peer-video{border-radius:8px}.rtsee-shell .rtsee-controls-wrapper{height:60px;width:100%;position:absolute;left:0;bottom:-60px;transition:bottom .1s;text-align:center}.rtsee-shell .rtsee-window-controls{position:absolute;top:-60px;right:8px;transition:top .1s;z-index:4}.rtsee-shell .rtsee-window-controls .rtsee-window-controls-button{margin-left:8px;background-color:rgba(0,0,0,.7);color:#fff}.rtsee-shell .rtsee-settings-container{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;z-index:4}.rtsee-shell.rtsee-shell-no-companions .rtsee-local-peer{box-sizing:border-box;padding:8px;height:100%;width:100%;top:0;bottom:0;left:0}.rtsee-shell .rtsee-close-settings-button{position:absolute;right:25px;top:5px;width:30px;height:30px;line-height:30px}.rtsee-shell.rtsee-shell-expanded{position:absolute;border-radius:0;max-width:unset;height:unset;width:unset;bottom:0;right:0;left:0;top:0}.rtsee-shell.rtsee-shell-expanded:hover .rtsee-controls-wrapper{bottom:16px}.rtsee-shell.rtsee-shell-expanded:hover .rtsee-window-controls{top:16px;right:16px}.rtsee-shell.rtsee-shell-expanded .rtsee-local-peer{top:unset;left:unset;width:211.2px;height:158.4px;bottom:16px;right:16px;padding:0;z-index:5}.rtsee-shell.rtsee-shell-expanded .rtsee-peers{width:100%;height:100%;display:table;table-layout:fixed}.rtsee-shell.rtsee-shell-expanded .rtsee-peers .rtsee-peer-wrapper{display:table-cell;vertical-align:middle}.rtsee-shell.rtsee-shell-expanded .rtsee-peers .rtsee-peer-wrapper ::ng-deep .rtsee-peer-video{border-radius:0}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-one .rtsee-peer-wrapper{width:100%;height:100%}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-one .rtsee-peer-wrapper ::ng-deep .rtsee-peer{height:70%;position:relative}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-three-grid .rtsee-peer-wrapper{width:50%;height:100%}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-three-grid .rtsee-peer-wrapper ::ng-deep .rtsee-peer{height:70%;position:relative}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-six-grid .rtsee-peer-wrapper{width:33.3%;height:50%;float:left}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-shell-no-companions .rtsee-local-peer{height:100%;max-width:100%}.rtsee-shell.rtsee-shell-expanded .rtsee-controls-wrapper{height:84px;bottom:-84px}::ng-deep .rtsee-ripple-button{background-position:50%;transition:background .2s;outline:none}::ng-deep .rtsee-ripple-button:hover{background:hsla(0,0%,96%,.1) radial-gradient(circle,transparent 1%,hsla(0,0%,96%,.1) 0) 50%/15000%}::ng-deep .rtsee-ripple-button:active{background-size:100%;transition:background 0s}::ng-deep .rtsee-select{padding:8px;border-radius:4px;width:100%;outline:none}::ng-deep .material-icons-outlined{font-size:18px}::ng-deep .rtsee-shell.rtsee-shell-expanded .material-icons-outlined{font-size:24px}::ng-deep .rtsee-shell.rtsee-shell-expanded .rtsee-ripple-button{height:60px;width:60px;line-height:60px}"], components: [{ type: i1__namespace.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: RtseeSettingsComponent, selector: "ngx-rtsee-settings", inputs: ["rtSee", "fullScreenMode"] }, { type: RtseePeerComponent, selector: "ngx-rtsee-peer", inputs: ["peer"] }, { type: RTSeeControlsComponent, selector: "ngx-rtsee-controls", inputs: ["rtsee", "fullScreenMode"] }], directives: [{ type: i2__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.MatSuffix, selector: "[matSuffix]" }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
222
+ RTSeeComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RTSeeComponent, selector: "ngx-rtsee", inputs: { rtSee: "rtSee" }, ngImport: i0__namespace, template: "<div class=\"rtsee-shell\" [ngClass]=\"{\n'rtsee-shell-expanded': rtSee.uiControls.isExpanded || fullScreenModeEnabled,\n'rtsee-shell-no-companions': !rtSee.rtcPeerConnections.connections?.length\n}\">\n <div class=\"rtsee-local-peer\" *ngIf=\"rtSee.localStream && rtSee.camera\">\n <video class=\"rtsee-local-video\"\n [autoplay]=\"true\"\n [muted]=\"true\"\n [srcObject]=\"rtSee.localStream\"\n playsinline=\"true\"\n ></video>\n </div>\n <div class=\"rtsee-window-controls\">\n <button mat-icon-button matSuffix\n type=\"button\"\n (click)=\"this.toggleSettings()\"\n class=\"rtsee-window-controls-button rtsee-ripple-button\"\n >\n <span class=\"material-icons-outlined\">settings</span>\n </button>\n <button mat-icon-button matSuffix\n type=\"button\"\n (click)=\"this.toggleFullScreenMode()\"\n class=\"rtsee-window-controls-button rtsee-ripple-button\"\n >\n <span class=\"material-icons-outlined\">open_in_full</span>\n </button>\n </div>\n <div class=\"rtsee-settings-container\" *ngIf=\"settingsViewEnabled\">\n <button mat-icon-button matSuffix\n type=\"button\"\n (click)=\"this.toggleSettings()\"\n class=\"rtsee-close-settings-button\"\n >\n <span class=\"material-icons-outlined\">close</span>\n </button>\n <ngx-rtsee-settings [rtSee]=\"rtSee\" [fullScreenMode]=\"fullScreenModeEnabled\"></ngx-rtsee-settings>\n </div>\n <div class=\"rtsee-screen-share\" *ngIf=\"rtSee.screenSharePeer\" >\n <video [autoplay]=\"true\"\n [muted]=\"true\"\n [srcObject]=\"rtSee.screenSharePeer.remoteVideoStream\"\n playsinline=\"true\"\n class=\"rtsee-screen-share-video\"\n ></video>\n </div>\n <div class=\"rtsee-peers\" [ngClass]=\"{\n 'rtsee-peers-alone': !rtSee.rtcPeerConnections.connections?.length,\n 'rtsee-peers-one': rtSee.rtcPeerConnections.connections?.length === 1,\n 'rtsee-peers-three-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 1\n && rtSee.rtcPeerConnections.connections.length < 4,\n 'rtsee-peers-six-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length > 3\n && rtSee.rtcPeerConnections.connections.length < 7,\n 'rtsee-peers-nine-grid': rtSee.rtcPeerConnections.connections?.length\n && rtSee.rtcPeerConnections.connections.length >= 7\n }\">\n <div class=\"rtsee-peer-wrapper\"\n *ngFor=\"let peer of rtSee.rtcPeerConnections.connections\"\n >\n <ngx-rtsee-peer [peer]=\"peer\"></ngx-rtsee-peer>\n </div>\n </div>\n <div class=\"rtsee-peers-list\"></div>\n <div class=\"rtsee-controls-wrapper\">\n <ngx-rtsee-controls [rtsee]=\"rtSee\" [fullScreenMode]=\"fullScreenModeEnabled\"></ngx-rtsee-controls>\n </div>\n</div>\n\n", styles: [".rtsee-shell{position:fixed;z-index:10;right:16px;bottom:16px;background-color:#333;width:100%;max-width:320px;height:240px;overflow:hidden;border-radius:8px}.rtsee-shell:hover .rtsee-controls-wrapper{bottom:8px}.rtsee-shell:hover .rtsee-window-controls{top:8px}.rtsee-shell .rtsee-local-peer{position:absolute;top:8px;left:8px;width:80px;height:60px;text-align:center}.rtsee-shell .rtsee-local-peer .rtsee-local-video{height:100%;max-width:100%;border-radius:8px}.rtsee-shell .rtsee-screen-share{height:100%}.rtsee-shell .rtsee-screen-share .rtsee-screen-share-video{width:100%;height:calc(100% - 50px)}.rtsee-shell .rtsee-peers{height:100%}.rtsee-shell .rtsee-peers .rtsee-peer-wrapper{padding:8px;box-sizing:border-box;height:100%}.rtsee-shell .rtsee-peers .rtsee-peer-wrapper .rtsee-peer{position:relative}.rtsee-shell .rtsee-peers .rtsee-peer-wrapper .rtsee-peer ::ng-deep .rtsee-peer-video{border-radius:8px}.rtsee-shell .rtsee-controls-wrapper{height:60px;width:100%;position:absolute;left:0;bottom:-60px;transition:bottom .1s;text-align:center}.rtsee-shell .rtsee-window-controls{position:absolute;top:-60px;right:8px;transition:top .1s;z-index:4}.rtsee-shell .rtsee-window-controls .rtsee-window-controls-button{margin-left:8px;background-color:rgba(0,0,0,.7);color:#fff}.rtsee-shell .rtsee-settings-container{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;z-index:4}.rtsee-shell.rtsee-shell-no-companions .rtsee-local-peer{box-sizing:border-box;padding:8px;height:100%;width:100%;top:0;bottom:0;left:0}.rtsee-shell .rtsee-close-settings-button{position:absolute;right:25px;top:5px;width:30px;height:30px;line-height:30px}.rtsee-shell.rtsee-shell-expanded{position:absolute;border-radius:0;max-width:unset;height:unset;width:unset;bottom:0;right:0;left:0;top:0}.rtsee-shell.rtsee-shell-expanded:hover .rtsee-controls-wrapper{bottom:16px}.rtsee-shell.rtsee-shell-expanded:hover .rtsee-window-controls{top:16px;right:16px}.rtsee-shell.rtsee-shell-expanded .rtsee-local-peer{top:unset;left:unset;width:211.2px;height:158.4px;bottom:16px;right:16px;padding:0;z-index:5}.rtsee-shell.rtsee-shell-expanded .rtsee-peers{width:100%;height:100%;display:table;table-layout:fixed}.rtsee-shell.rtsee-shell-expanded .rtsee-peers .rtsee-peer-wrapper{display:table-cell;vertical-align:middle}.rtsee-shell.rtsee-shell-expanded .rtsee-peers .rtsee-peer-wrapper ::ng-deep .rtsee-peer-video{border-radius:0}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-one .rtsee-peer-wrapper{width:100%;height:100%}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-one .rtsee-peer-wrapper ::ng-deep .rtsee-peer{height:70%;position:relative}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-three-grid .rtsee-peer-wrapper{width:50%;height:100%}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-three-grid .rtsee-peer-wrapper ::ng-deep .rtsee-peer{height:70%;position:relative}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-peers-six-grid .rtsee-peer-wrapper{width:33.3%;height:50%;float:left}.rtsee-shell.rtsee-shell-expanded .rtsee-peers.rtsee-shell-no-companions .rtsee-local-peer{height:100%;max-width:100%}.rtsee-shell.rtsee-shell-expanded .rtsee-controls-wrapper{height:84px;bottom:-84px}::ng-deep .rtsee-ripple-button{background-position:50%;transition:background .2s;outline:none}::ng-deep .rtsee-ripple-button:hover{background:hsla(0,0%,96%,.1) radial-gradient(circle,transparent 1%,hsla(0,0%,96%,.1) 0) 50%/15000%}::ng-deep .rtsee-ripple-button:active{background-size:100%;transition:background 0s}::ng-deep .rtsee-select{padding:8px;border-radius:4px;width:100%;outline:none}::ng-deep .material-icons-outlined{font-size:18px}::ng-deep .rtsee-shell.rtsee-shell-expanded .material-icons-outlined{font-size:24px}::ng-deep .rtsee-shell.rtsee-shell-expanded .rtsee-ripple-button{height:60px;width:60px;line-height:60px}"], components: [{ type: i1__namespace.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: RtseeSettingsComponent, selector: "ngx-rtsee-settings", inputs: ["rtSee", "fullScreenMode"] }, { type: RtseePeerComponent, selector: "ngx-rtsee-peer", inputs: ["peer"] }, { type: RTSeeControlsComponent, selector: "ngx-rtsee-controls", inputs: ["rtsee", "fullScreenMode"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$1.MatSuffix, selector: "[matSuffix]" }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
220
223
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RTSeeComponent, decorators: [{
221
224
  type: i0.Component,
222
225
  args: [{
@@ -243,28 +246,61 @@
243
246
  }]
244
247
  }] });
245
248
 
246
- var MessengerHeaderComponent = /** @class */ (function () {
247
- function MessengerHeaderComponent(defaultImagesService) {
248
- this.defaultImagesService = defaultImagesService;
249
+ var ProfileComponent = /** @class */ (function () {
250
+ function ProfileComponent() {
249
251
  }
250
- MessengerHeaderComponent.prototype.call = function () {
252
+ ProfileComponent.prototype.call = function () {
251
253
  if (!this.messenger.openedChat) {
252
254
  return;
253
255
  }
254
256
  void this.messenger.initializeVideoCall(this.messenger.openedChat);
255
257
  };
258
+ ProfileComponent.prototype.videoCall = function () {
259
+ if (!this.messenger.openedChat) {
260
+ return;
261
+ }
262
+ void this.messenger.initializeVideoCall(this.messenger.openedChat);
263
+ };
264
+ return ProfileComponent;
265
+ }());
266
+ ProfileComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ProfileComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
267
+ ProfileComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ProfileComponent, selector: "rtsee-profile", inputs: { messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-profile\">\n <ul class=\"rtsee-messenger-profile-controls\">\n <li class=\"rtsee-messenger-profile-control\">\n <button (click)=\"call()\" class=\"rtsee-messenger-profile-control-button\">\n <span class=\"rtsee-messenger-profile-control-button-icon material-icons-outlined\">call</span>\n <span class=\"rtsee-messenger-profile-control-button-label\">call</span>\n </button>\n </li>\n <li class=\"rtsee-messenger-profile-control\">\n <button (click)=\"videoCall()\" class=\"rtsee-messenger-profile-control-button\">\n <span class=\"rtsee-messenger-profile-control-button-icon material-icons-outlined\">videocam</span>\n <span class=\"rtsee-messenger-profile-control-button-label\">video</span>\n </button>\n </li>\n <li class=\"rtsee-messenger-profile-control\">\n <button (click)=\"videoCall()\" class=\"rtsee-messenger-profile-control-button\">\n <span class=\"rtsee-messenger-profile-control-button-icon material-icons-outlined\">videocam</span>\n <span class=\"rtsee-messenger-profile-control-button-label\">person</span>\n </button>\n </li>\n </ul>\n</div>\n" });
268
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ProfileComponent, decorators: [{
269
+ type: i0.Component,
270
+ args: [{
271
+ selector: 'rtsee-profile',
272
+ templateUrl: './profile.component.html',
273
+ }]
274
+ }], propDecorators: { messenger: [{
275
+ type: i0.Input
276
+ }] } });
277
+
278
+ var MessengerHeaderComponent = /** @class */ (function () {
279
+ function MessengerHeaderComponent(defaultImagesService) {
280
+ this.defaultImagesService = defaultImagesService;
281
+ this.expandToggled = new i0.EventEmitter();
282
+ this.isExpanded = false;
283
+ this.expandToggled.emit(this.isExpanded);
284
+ }
285
+ MessengerHeaderComponent.prototype.toggleExpand = function () {
286
+ this.isExpanded = !this.isExpanded;
287
+ this.expandToggled.emit(this.isExpanded);
288
+ };
256
289
  return MessengerHeaderComponent;
257
290
  }());
258
291
  MessengerHeaderComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessengerHeaderComponent, deps: [{ token: DefaultImagesService }], target: i0__namespace.ɵɵFactoryTarget.Component });
259
- MessengerHeaderComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessengerHeaderComponent, selector: "ngx-messenger-header", inputs: { messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-header\"\n [ngClass]=\"{ 'rtsee-messenger-header-chat-opened': messenger.openedChat }\"\n>\n <div *ngIf=\"!messenger.openedChat\" class=\"rtsee-messenger-profile-image\">\n <img *ngIf=\"messenger.myPeer?.imageUrl\" [src]=\"messenger.myPeer.imageUrl\">\n <img *ngIf=\"!messenger.myPeer?.imageUrl\" [src]=\"defaultImagesService.PROFILE\">\n </div>\n\n <button class=\"rtsee-messenger-close-chat\"\n *ngIf=\"messenger.openedChat\"\n (click)=\"messenger.closeChat()\"\n >\n <span>&#8592;</span>\n <span *ngIf=\"messenger.unreadMessagesCount\">{{messenger.unreadMessagesCount}}</span>\n </button>\n\n <div *ngIf=\"messenger.openedChat\" class=\"rtsee-messenger-header-opened-chat-info\">\n <div class=\"rtsee-messenger-profile-image\">\n <img *ngIf=\"messenger.openedChat.imageUrl\" [src]=\"messenger.openedChat.imageUrl\">\n <img *ngIf=\"!messenger.openedChat.imageUrl\" [src]=\"defaultImagesService.PROFILE\">\n </div>\n <p *ngIf=\"messenger.openedChat\"\n class=\"rtsee-messenger-header-chat-title\"\n >{{ messenger.openedChat.name }}</p>\n </div>\n\n <p *ngIf=\"!messenger.openedChat\"\n class=\"rtsee-messenger-header-title\"\n >Chats</p>\n\n <button\n *ngIf=\"messenger.openedChat\"\n (click)=\"call()\"\n class=\"rtsee-messenger-call-button\"\n >Call</button>\n</div>\n", styles: [""], directives: [{ type: i2__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
292
+ MessengerHeaderComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessengerHeaderComponent, selector: "rtsee-messenger-header", inputs: { isExpanded: "isExpanded", messenger: "messenger" }, outputs: { expandToggled: "expandToggled" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-header\"\n [ngClass]=\"{\n 'rtsee-messenger-header-chat-opened': messenger.openedChat,\n 'rtsee-messenger-header-expanded': isExpanded\n }\"\n>\n <div class=\"rtsee-messenger-profile-image-container \">\n <div *ngIf=\"!messenger.openedChat\"\n [style.background-image]=\"'url(' + messenger.myPeer?.imageUrl || defaultImagesService.PROFILE + ')'\"\n class=\"rtsee-messenger-profile-image\">\n </div>\n </div>\n\n <button class=\"rtsee-messenger-close-chat\"\n *ngIf=\"messenger.openedChat\"\n (click)=\"messenger.closeChat()\"\n >\n <span class=\"material-icons-outlined\">chevron_left</span>\n <span *ngIf=\"messenger.unreadMessagesCount\">{{messenger.unreadMessagesCount}}</span>\n </button>\n\n <button class=\"rtsee-messenger-menu-toggle\"\n *ngIf=\"!messenger.openedChat\"\n (click)=\"messenger.openMainMenu(true)\"\n >\n <span class=\"material-icons-outlined rtsee-messenger-menu-toggle-icon\">chat_bubble</span>\n </button>\n <div *ngIf=\"messenger.openedChat\"\n [ngClass]=\"{'rtsee-messenger-header-opened-chat-info-expanded': isExpanded}\"\n class=\"rtsee-messenger-header-opened-chat-info\">\n <div class=\"rtsee-messenger-profile-header-placeholder\">\n <p *ngIf=\"messenger.openedChat\"\n class=\"rtsee-messenger-header-chat-title\"\n >{{ messenger.openedChat.name }}</p>\n <div class=\"rtsee-messenger-profile-image-container\" (click)=\"toggleExpand()\">\n <div class=\"rtsee-messenger-profile-image\"\n [style.background-image]=\"'url(' + messenger.openedChat.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n </div>\n </div>\n <div class=\"rtsee-messenger-profile-data-container\">\n <rtsee-profile *ngIf=\"isExpanded\" [messenger]=\"messenger\"></rtsee-profile>\n </div>\n </div>\n\n <p *ngIf=\"!messenger.openedChat\"\n class=\"rtsee-messenger-header-title\"\n >Chats</p>\n</div>\n", components: [{ type: ProfileComponent, selector: "rtsee-profile", inputs: ["messenger"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
260
293
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessengerHeaderComponent, decorators: [{
261
294
  type: i0.Component,
262
295
  args: [{
263
- selector: 'ngx-messenger-header',
296
+ selector: 'rtsee-messenger-header',
264
297
  templateUrl: './messenger-header.component.html',
265
- styleUrls: ['./messenger-header.component.css'],
266
298
  }]
267
- }], ctorParameters: function () { return [{ type: DefaultImagesService }]; }, propDecorators: { messenger: [{
299
+ }], ctorParameters: function () { return [{ type: DefaultImagesService }]; }, propDecorators: { expandToggled: [{
300
+ type: i0.Output
301
+ }], isExpanded: [{
302
+ type: i0.Input
303
+ }], messenger: [{
268
304
  type: i0.Input
269
305
  }] } });
270
306
 
@@ -359,20 +395,93 @@
359
395
  }]
360
396
  }] });
361
397
 
398
+ var PreloaderComponent = /** @class */ (function () {
399
+ function PreloaderComponent() {
400
+ this.viewBox = '0 0 100 100';
401
+ this.d = 'M 50 96 a 46 46 0 0 1 0 -92 46 46 0 0 1 0 92';
402
+ this.color = '#000000';
403
+ if (this.diameter) {
404
+ this.viewBox = "0 0 " + this.diameter + " " + this.diameter;
405
+ this.d = "M " + this.diameter / 2 + " " + this.diameter * 0.96 + " a " + this.diameter * 0.46 + " " + this.diameter * 0.46 + " 0 0 1 0 -" + this.diameter * 0.92 + " " + this.diameter * 0.46 + " " + this.diameter * 0.46 + " 0 0 1 0 " + this.diameter * 0.92;
406
+ }
407
+ }
408
+ PreloaderComponent.prototype.ngOnInit = function () {
409
+ //viewBox="0 0 100 100"
410
+ //d="M 50 96 a 46 46 0 0 1 0 -92 46 46 0 0 1 0 92"
411
+ };
412
+ return PreloaderComponent;
413
+ }());
414
+ PreloaderComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: PreloaderComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
415
+ PreloaderComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: PreloaderComponent, selector: "rtsee-preloader", inputs: { diameter: "diameter", color: "color" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], ngImport: i0__namespace, template: "<div class=\"rtsee-preloader\">\n <svg [style.max-width.px]=\"diameter\" #canvas [attr.viewBox]=\"viewBox\">\n <path [attr.d]=\"d\" [attr.stroke]=\"color\"/>\n </svg>\n</div>\n" });
416
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: PreloaderComponent, decorators: [{
417
+ type: i0.Component,
418
+ args: [{
419
+ selector: 'rtsee-preloader',
420
+ templateUrl: './preloader.component.html',
421
+ }]
422
+ }], ctorParameters: function () { return []; }, propDecorators: { canvas: [{
423
+ type: i0.ViewChild,
424
+ args: ['canvas']
425
+ }], diameter: [{
426
+ type: i0.Input
427
+ }], color: [{
428
+ type: i0.Input
429
+ }] } });
430
+
431
+ var MessageTimeAndStatusComponent = /** @class */ (function () {
432
+ function MessageTimeAndStatusComponent(timeFormatService) {
433
+ this.timeFormatService = timeFormatService;
434
+ }
435
+ return MessageTimeAndStatusComponent;
436
+ }());
437
+ MessageTimeAndStatusComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessageTimeAndStatusComponent, deps: [{ token: TimeFormatHelperService }], target: i0__namespace.ɵɵFactoryTarget.Component });
438
+ MessageTimeAndStatusComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessageTimeAndStatusComponent, selector: "rtsee-message-time-and-status", inputs: { message: "message", hideStatus: "hideStatus" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-message-time-and-status\">\n <span class=\"rtsee-messenger-message-time\">{{timeFormatService.formatTimeOrDate(message.createdAt)}}</span>\n <span class=\"rtsee-messenger-message-status\" *ngIf=\"!hideStatus\">\n <span *ngIf=\"message.status === 'pending'\"><rtsee-preloader [diameter]=\"5\"></rtsee-preloader></span>\n <span *ngIf=\"message.status === 'sent'\" class=\"material-icons-outlined rtsee-message-sent-status\">check</span>\n <span *ngIf=\"message.status === 'delivered'\" class=\"material-icons-outlined rtsee-message-delivered-status\">check</span>\n <span *ngIf=\"message.status === 'seen'\" class=\"material-icons-outlined rtsee-message-seen-status\">check</span>\n </span>\n</div>\n", components: [{ type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
439
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessageTimeAndStatusComponent, decorators: [{
440
+ type: i0.Component,
441
+ args: [{
442
+ selector: 'rtsee-message-time-and-status',
443
+ templateUrl: './message-time-and-status.component.html',
444
+ }]
445
+ }], ctorParameters: function () { return [{ type: TimeFormatHelperService }]; }, propDecorators: { message: [{
446
+ type: i0.Input
447
+ }], hideStatus: [{
448
+ type: i0.Input
449
+ }] } });
450
+
451
+ var ShaveDirective = /** @class */ (function () {
452
+ function ShaveDirective(elem) {
453
+ this.elem = elem;
454
+ }
455
+ ShaveDirective.prototype.ngAfterViewInit = function () {
456
+ var _a;
457
+ var height = (_a = this.elem.nativeElement) === null || _a === void 0 ? void 0 : _a.offsetHeight;
458
+ shave__default['default'](this.elem.nativeElement, height);
459
+ };
460
+ return ShaveDirective;
461
+ }());
462
+ ShaveDirective.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ShaveDirective, deps: [{ token: i0__namespace.ElementRef }], target: i0__namespace.ɵɵFactoryTarget.Directive });
463
+ ShaveDirective.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.2", type: ShaveDirective, selector: "[rtseeShave]", ngImport: i0__namespace });
464
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ShaveDirective, decorators: [{
465
+ type: i0.Directive,
466
+ args: [{
467
+ selector: '[rtseeShave]',
468
+ }]
469
+ }], ctorParameters: function () { return [{ type: i0__namespace.ElementRef }]; } });
470
+
362
471
  var ChatThumbnailComponent = /** @class */ (function () {
363
472
  function ChatThumbnailComponent(timeFormatService) {
364
473
  this.timeFormatService = timeFormatService;
474
+ this.RTSeeChatTypes = messenger.RTSeeChatTypes;
365
475
  }
366
476
  return ChatThumbnailComponent;
367
477
  }());
368
478
  ChatThumbnailComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatThumbnailComponent, deps: [{ token: TimeFormatHelperService }], target: i0__namespace.ɵɵFactoryTarget.Component });
369
- ChatThumbnailComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ChatThumbnailComponent, selector: "ngx-chat-thumbnail", inputs: { chat: "chat", messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-chat-thumbnail\" (click)=\"messenger.openChat(chat)\">\n <div class=\"rtsee-chat-thumbnail-image\">\n <img [src]=\"chat.imageUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rtsee-chat-thumbnail-info\">\n <p class=\"rtsee-chat-thumbnail-name\">{{ chat.name }} <span>{{ chat.unreadMessagesCount }}</span></p>\n <p class=\"rtsee-chat-thumbnail-last-sender\">{{chat.getLastSenderName()}}</p>\n <p class=\"rtsee-chat-thumbnail-last-message\" *ngIf=\"chat.messages.length\">\n <span>{{chat.getLastSentMessageText()}}</span>\n <span>{{chat.unreadMessagesCount}}</span>\n <span>{{chat.getLastSentMessageStatus()}}</span>\n <span>{{timeFormatService.formatTimeOrDate(chat.getLastSentMessageTime())}}</span>\n </p>\n </div>\n</div>\n", styles: [""], directives: [{ type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
479
+ ChatThumbnailComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ChatThumbnailComponent, selector: "rtsee-chat-thumbnail", inputs: { chat: "chat", messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rtsee-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rtsee-chat-thumbnail-left\">\n <div class=\"rtsee-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rtsee-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"></rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rtsee-chat-thumbnail-last-message\"\n [ngClass]=\"{'rtsee-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n <span class=\"rtsee-chat-thumbnail-last-message-sender\"\n *ngIf=\"chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName\"\n >{{chat.senderName}}</span>\n <span class=\"rtsee-chat-thumbnail-last-message-text\"\n *ngIf=\"chat.text\"\n >{{chat.text}}</span>\n <div class=\"rtsee-messenger-thumbnail-unread\" *ngIf=\"chat.unreadMessagesCount\">\n <span class=\"rtsee-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: MessageTimeAndStatusComponent, selector: "rtsee-message-time-and-status", inputs: ["message", "hideStatus"] }], directives: [{ type: ShaveDirective, selector: "[rtseeShave]" }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
370
480
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatThumbnailComponent, decorators: [{
371
481
  type: i0.Component,
372
482
  args: [{
373
- selector: 'ngx-chat-thumbnail',
483
+ selector: 'rtsee-chat-thumbnail',
374
484
  templateUrl: './chat-thumbnail.component.html',
375
- styleUrls: ['./chat-thumbnail.component.css'],
376
485
  }]
377
486
  }], ctorParameters: function () { return [{ type: TimeFormatHelperService }]; }, propDecorators: { chat: [{
378
487
  type: i0.Input
@@ -389,13 +498,12 @@
389
498
  return ChatsListComponent;
390
499
  }());
391
500
  ChatsListComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatsListComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
392
- ChatsListComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ChatsListComponent, selector: "ngx-chats-list", inputs: { messenger: "messenger", chats: "chats" }, ngImport: i0__namespace, template: "<div class=\"rtsee-chats-list\">\n <div class=\"rtsee-chat-thumbnail-container\" *ngFor=\"let chat of chats; let last = last;\">\n <ngx-chat-thumbnail [chat]=\"chat\" [messenger]=\"messenger\"></ngx-chat-thumbnail>\n <div class=\"rtsee-chat-separator\"></div>\n </div>\n</div>\n", styles: [""], components: [{ type: ChatThumbnailComponent, selector: "ngx-chat-thumbnail", inputs: ["chat", "messenger"] }], directives: [{ type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
501
+ ChatsListComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ChatsListComponent, selector: "rtsee-chats-list", inputs: { messenger: "messenger", chats: "chats" }, ngImport: i0__namespace, template: "<div class=\"rtsee-chats-list\">\n <div class=\"rtsee-chat-thumbnail-container\" *ngFor=\"let chat of chats; let last = last;\">\n <rtsee-chat-thumbnail [chat]=\"chat.thumbnail\" [messenger]=\"messenger\"></rtsee-chat-thumbnail>\n <div class=\"rtsee-chat-thumbnail-separator\" *ngIf=\"!last\"></div>\n </div>\n</div>\n", components: [{ type: ChatThumbnailComponent, selector: "rtsee-chat-thumbnail", inputs: ["chat", "messenger"] }], directives: [{ type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
393
502
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatsListComponent, decorators: [{
394
503
  type: i0.Component,
395
504
  args: [{
396
- selector: 'ngx-chats-list',
505
+ selector: 'rtsee-chats-list',
397
506
  templateUrl: './chats-list.component.html',
398
- styleUrls: ['./chats-list.component.css'],
399
507
  }]
400
508
  }], propDecorators: { messenger: [{
401
509
  type: i0.Input
@@ -441,7 +549,7 @@
441
549
  return CallWidgetComponent;
442
550
  }());
443
551
  CallWidgetComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: CallWidgetComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
444
- CallWidgetComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: CallWidgetComponent, selector: "ngx-call-widget", inputs: { message: "message", messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-call-widget\">\n <p *ngIf=\"callerName\"> {{ callerName }} has started a call</p>\n <p *ngIf=\"callerName === 'You'\"> You have started a call</p>\n <p *ngIf=\"!callerName\"> The call has started</p>\n <button (click)=\"joinCall()\">Join Call</button>\n</div>\n", styles: [""], directives: [{ type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
552
+ CallWidgetComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: CallWidgetComponent, selector: "ngx-call-widget", inputs: { message: "message", messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-call-widget\">\n <p *ngIf=\"callerName\"> {{ callerName }} has started a call</p>\n <p *ngIf=\"callerName === 'You'\"> You have started a call</p>\n <p *ngIf=\"!callerName\"> The call has started</p>\n <button (click)=\"joinCall()\">Join Call</button>\n</div>\n", styles: [""], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
445
553
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: CallWidgetComponent, decorators: [{
446
554
  type: i0.Component,
447
555
  args: [{
@@ -455,13 +563,13 @@
455
563
  type: i0.Input
456
564
  }] } });
457
565
 
458
- var WidgetsService = /** @class */ (function () {
459
- function WidgetsService() {
566
+ var MessageWidgetsService = /** @class */ (function () {
567
+ function MessageWidgetsService() {
460
568
  this.widgetsMap = [
461
569
  { name: 'rtsee-call', component: CallWidgetComponent },
462
570
  ];
463
571
  }
464
- WidgetsService.prototype.getWidgetComponentByName = function (name) {
572
+ MessageWidgetsService.prototype.getWidgetComponentByName = function (name) {
465
573
  /* eslint-disable */
466
574
  var mapping = this.widgetsMap.find(function (e) { return e.name === name; });
467
575
  if (!mapping) {
@@ -470,11 +578,11 @@
470
578
  return mapping.component;
471
579
  /* eslint-enable */
472
580
  };
473
- return WidgetsService;
581
+ return MessageWidgetsService;
474
582
  }());
475
- WidgetsService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: WidgetsService, deps: [], target: i0__namespace.ɵɵFactoryTarget.Injectable });
476
- WidgetsService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: WidgetsService, providedIn: 'root' });
477
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: WidgetsService, decorators: [{
583
+ MessageWidgetsService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessageWidgetsService, deps: [], target: i0__namespace.ɵɵFactoryTarget.Injectable });
584
+ MessageWidgetsService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessageWidgetsService, providedIn: 'root' });
585
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessageWidgetsService, decorators: [{
478
586
  type: i0.Injectable,
479
587
  args: [{
480
588
  providedIn: 'root',
@@ -506,16 +614,15 @@
506
614
  };
507
615
  return MessageComponent;
508
616
  }());
509
- MessageComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessageComponent, deps: [{ token: WidgetsService }, { token: i0__namespace.ComponentFactoryResolver }, { token: TimeFormatHelperService }], target: i0__namespace.ɵɵFactoryTarget.Component });
510
- MessageComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessageComponent, selector: "ngx-message", inputs: { chat: "chat", message: "message", member: "member", messenger: "messenger" }, viewQueries: [{ propertyName: "widgetHost", first: true, predicate: WidgetDirective, descendants: true }], ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-message-container\"\n [ngClass]=\"{'rtsee-message-from-me': message.from === messenger.clientId}\"\n>\n <div class=\"rtsee-messenger-message\">\n <ng-template widgetHost></ng-template>\n <p *ngIf=\"!message.widget\"\n class=\"rtsee-messenger-message-text\"\n >{{ message.text }}</p>\n <div class=\"rtsee-messenger-message-info\">\n <div class=\"rtsee-messenger-message-time\">\n <p>{{ timeFormatService.toTime(message.createdAt) }}</p>\n </div>\n <div class=\"rtsee-messenger-message-status\" *ngIf=\"message.from === messenger.clientId\">\n <span *ngIf=\"message.status === 'pending'\">pending</span>\n <span *ngIf=\"message.status === 'sent'\">sent</span>\n <span *ngIf=\"message.status === 'delivered'\">delivered</span>\n <span *ngIf=\"message.status === 'seen'\">seen</span>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], directives: [{ type: i2__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: WidgetDirective, selector: "[widgetHost]" }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
617
+ MessageComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessageComponent, deps: [{ token: MessageWidgetsService }, { token: i0__namespace.ComponentFactoryResolver }, { token: TimeFormatHelperService }], target: i0__namespace.ɵɵFactoryTarget.Component });
618
+ MessageComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessageComponent, selector: "rtsee-message", inputs: { chat: "chat", message: "message", member: "member", messenger: "messenger" }, viewQueries: [{ propertyName: "widgetHost", first: true, predicate: WidgetDirective, descendants: true }], ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-message-container\" #rtsMessageContainer\n [ngClass]=\"{'rtsee-message-from-me': message.from === messenger.clientId}\"\n>\n <div class=\"rtsee-messenger-message\">\n <ng-template *ngIf=\"message.widget\" widgetHost></ng-template>\n <p *ngIf=\"!message.widget\"\n class=\"rtsee-messenger-message-text\"\n >{{ message.text }}</p>\n <div class=\"rtsee-messenger-message-info\" #rtsMessageInfo>\n <rtsee-message-time-and-status [message]=\"message\"\n [hideStatus]=\"message.from !== messenger.clientId\"\n ></rtsee-message-time-and-status>\n </div>\n </div>\n</div>\n", components: [{ type: MessageTimeAndStatusComponent, selector: "rtsee-message-time-and-status", inputs: ["message", "hideStatus"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: WidgetDirective, selector: "[widgetHost]" }] });
511
619
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessageComponent, decorators: [{
512
620
  type: i0.Component,
513
621
  args: [{
514
- selector: 'ngx-message',
622
+ selector: 'rtsee-message',
515
623
  templateUrl: './message.component.html',
516
- styleUrls: ['./message.component.css'],
517
624
  }]
518
- }], ctorParameters: function () { return [{ type: WidgetsService }, { type: i0__namespace.ComponentFactoryResolver }, { type: TimeFormatHelperService }]; }, propDecorators: { chat: [{
625
+ }], ctorParameters: function () { return [{ type: MessageWidgetsService }, { type: i0__namespace.ComponentFactoryResolver }, { type: TimeFormatHelperService }]; }, propDecorators: { chat: [{
519
626
  type: i0.Input
520
627
  }], message: [{
521
628
  type: i0.Input
@@ -531,16 +638,43 @@
531
638
  var MessagesListComponent = /** @class */ (function () {
532
639
  function MessagesListComponent(timeFormatService) {
533
640
  this.timeFormatService = timeFormatService;
641
+ this.bindScrollFunction = this.scrollToBottom.bind(this);
534
642
  }
535
- MessagesListComponent.prototype.hasDateChanged = function (currentMessage, index) {
536
- var previousMessage = this.chat.messages[index - 1];
537
- if (!previousMessage) {
538
- return true;
643
+ MessagesListComponent.prototype.ngOnInit = function () {
644
+ this.chat.on(messenger.RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);
645
+ };
646
+ MessagesListComponent.prototype.ngAfterViewInit = function () {
647
+ this.scrollToBottom();
648
+ };
649
+ MessagesListComponent.prototype.onMessageSent = function () {
650
+ this.scrollToBottom();
651
+ };
652
+ MessagesListComponent.prototype.ngOnDestroy = function () {
653
+ this.chat.off(messenger.RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);
654
+ };
655
+ MessagesListComponent.prototype.onScrolledToTop = function () {
656
+ if (this.chat.messagesLoadInProgress) {
657
+ return;
658
+ }
659
+ this.chat.loadRemoteMessages();
660
+ };
661
+ MessagesListComponent.prototype.onScroll = function () {
662
+ if (this.scrollContainer.nativeElement.scrollTop < 1) {
663
+ this.scrollContainer.nativeElement.scrollTop = 1;
539
664
  }
540
- if (!previousMessage.createdAt || !currentMessage.createdAt) {
541
- return false;
665
+ };
666
+ MessagesListComponent.prototype.scrollToBottom = function () {
667
+ var _a, _b;
668
+ if (!((_b = (_a = this.scrollContainer) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.scrollHeight)) {
669
+ return;
670
+ }
671
+ try {
672
+ this.scrollContainer.nativeElement.scrollTop =
673
+ this.scrollContainer.nativeElement.scrollHeight;
674
+ }
675
+ catch (err) {
676
+ console.log('Failed to Scroll');
542
677
  }
543
- return (previousMessage.createdAt.getDay() !== currentMessage.createdAt.getDay());
544
678
  };
545
679
  MessagesListComponent.prototype.formatDate = function (message) {
546
680
  return this.timeFormatService.formatDate(message.createdAt);
@@ -548,18 +682,20 @@
548
682
  return MessagesListComponent;
549
683
  }());
550
684
  MessagesListComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessagesListComponent, deps: [{ token: TimeFormatHelperService }], target: i0__namespace.ɵɵFactoryTarget.Component });
551
- MessagesListComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessagesListComponent, selector: "ngx-messages-list", inputs: { chat: "chat", messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-messages-list\">\n <div class=\"rtsee-messenger-message-wrapper\" *ngFor=\"let message of chat.messages; let i = index;\">\n <span *ngIf=\"hasDateChanged(message, i)\"\n >{{formatDate(message)}}</span>\n <ngx-message [message]=\"message\" [messenger]=\"messenger\" [chat]=\"chat\"></ngx-message>\n </div>\n</div>\n", styles: [""], components: [{ type: MessageComponent, selector: "ngx-message", inputs: ["chat", "message", "member", "messenger"] }], directives: [{ type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
685
+ MessagesListComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessagesListComponent, selector: "rtsee-messages-list", inputs: { chat: "chat", messenger: "messenger" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollBlock"], descendants: true }], ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolledUp)=\"onScrolledToTop()\"\n (scroll)=\"onScroll()\"\n>\n <div *ngFor=\"let message of chat.messages; let i = index;\"\n [ngClass]=\"{'rtsee-messenger-message-wrapper-consecutive': message.from === chat.messages[i+1]?.from}\"\n class=\"rtsee-messenger-message-wrapper\"\n >\n <div *ngIf=\"message.hasDateChanged\" class=\"rtsee-messenger-message-date\">\n <span>{{formatDate(message)}}</span>\n </div>\n <rtsee-message [message]=\"message\" [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-message>\n </div>\n</div>\n", components: [{ type: MessageComponent, selector: "rtsee-message", inputs: ["chat", "message", "member", "messenger"] }], directives: [{ type: i3__namespace$2.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
552
686
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessagesListComponent, decorators: [{
553
687
  type: i0.Component,
554
688
  args: [{
555
- selector: 'ngx-messages-list',
689
+ selector: 'rtsee-messages-list',
556
690
  templateUrl: './messages-list.component.html',
557
- styleUrls: ['./messages-list.component.css'],
558
691
  }]
559
692
  }], ctorParameters: function () { return [{ type: TimeFormatHelperService }]; }, propDecorators: { chat: [{
560
693
  type: i0.Input
561
694
  }], messenger: [{
562
695
  type: i0.Input
696
+ }], scrollContainer: [{
697
+ type: i0.ViewChild,
698
+ args: ['scrollBlock']
563
699
  }] } });
564
700
 
565
701
  var ChatInputComponent = /** @class */ (function () {
@@ -582,13 +718,12 @@
582
718
  return ChatInputComponent;
583
719
  }());
584
720
  ChatInputComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatInputComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
585
- ChatInputComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ChatInputComponent, selector: "ngx-chat-input", inputs: { messenger: "messenger", chat: "chat" }, ngImport: i0__namespace, template: "<div class=\"rtsee-chat-input\" xmlns=\"http://www.w3.org/1999/html\">\n <div class=\"rtsee-send-message\">\n <form [formGroup]=\"sendMessageForm\">\n <textarea\n placeholder=\"Type message...\"\n type=\"text\"\n formControlName=\"message\"\n class=\"rtsee-chat-input-field\"\n autosize\n required\n ></textarea>\n </form>\n </div>\n <button (click)=\"sendMessage()\"\n class=\"rtsee-send-message-button\"\n type=\"submit\">\n <span>Send</span>\n </button>\n</div>\n", styles: [""], directives: [{ type: i1__namespace$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1__namespace$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1__namespace$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1__namespace$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1__namespace$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1__namespace$1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i2__namespace$1.AutosizeDirective, selector: "[autosize]", inputs: ["onlyGrow", "useImportant", "minRows", "autosize", "maxRows"], outputs: ["resized"] }, { type: i1__namespace$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }] });
721
+ ChatInputComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ChatInputComponent, selector: "rtsee-chat-input", inputs: { messenger: "messenger", chat: "chat" }, ngImport: i0__namespace, template: "<div class=\"rtsee-chat-input\" xmlns=\"http://www.w3.org/1999/html\">\n <div class=\"rtsee-send-message\">\n <form [formGroup]=\"sendMessageForm\">\n <textarea\n placeholder=\"Type message...\"\n type=\"text\"\n formControlName=\"message\"\n class=\"rtsee-chat-input-field\"\n autosize\n required\n ></textarea>\n </form>\n </div>\n <button (click)=\"sendMessage()\"\n class=\"rtsee-send-message-button\"\n type=\"submit\">\n <span class=\"material-icons-outlined\">send</span>\n </button>\n</div>\n", directives: [{ type: i1__namespace$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1__namespace$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1__namespace$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1__namespace$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1__namespace$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1__namespace$1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i2__namespace.AutosizeDirective, selector: "[autosize]", inputs: ["onlyGrow", "useImportant", "minRows", "autosize", "maxRows"], outputs: ["resized"] }, { type: i1__namespace$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }] });
586
722
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatInputComponent, decorators: [{
587
723
  type: i0.Component,
588
724
  args: [{
589
- selector: 'ngx-chat-input',
725
+ selector: 'rtsee-chat-input',
590
726
  templateUrl: './chat-input.component.html',
591
- styleUrls: ['./chat-input.component.css'],
592
727
  }]
593
728
  }], propDecorators: { messenger: [{
594
729
  type: i0.Input
@@ -598,52 +733,127 @@
598
733
 
599
734
  var ChatComponent = /** @class */ (function () {
600
735
  function ChatComponent() {
601
- this.bindScrollFunction = this.scrollToBottom.bind(this);
602
736
  }
603
- ChatComponent.prototype.ngAfterViewInit = function () {
604
- this.scrollToBottom();
605
- };
606
- ChatComponent.prototype.onMessageSent = function () {
607
- this.scrollToBottom();
737
+ return ChatComponent;
738
+ }());
739
+ ChatComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
740
+ ChatComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ChatComponent, selector: "rtsee-chat", inputs: { chat: "chat", messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-chat\">\n <div class=\"rtsee-chat-body-container\">\n <rtsee-messages-list [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-messages-list>\n </div>\n <div class=\"rtsee-chat-footer-container\">\n <rtsee-chat-input [messenger]=\"messenger\" [chat]=\"chat\"></rtsee-chat-input>\n </div>\n</div>\n", components: [{ type: MessagesListComponent, selector: "rtsee-messages-list", inputs: ["chat", "messenger"] }, { type: ChatInputComponent, selector: "rtsee-chat-input", inputs: ["messenger", "chat"] }] });
741
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatComponent, decorators: [{
742
+ type: i0.Component,
743
+ args: [{
744
+ selector: 'rtsee-chat',
745
+ templateUrl: './chat.component.html',
746
+ }]
747
+ }], propDecorators: { chat: [{
748
+ type: i0.Input
749
+ }], messenger: [{
750
+ type: i0.Input
751
+ }] } });
752
+
753
+ var MainMenuPanels;
754
+ (function (MainMenuPanels) {
755
+ MainMenuPanels["HOME"] = "home";
756
+ MainMenuPanels["CONTACTS_SELECT"] = "contacts-select";
757
+ MainMenuPanels["MANAGE_CHAT"] = "manage-chat";
758
+ })(MainMenuPanels || (MainMenuPanels = {}));
759
+ var DEFAULT_MAIN_MENU_STATE = MainMenuPanels.HOME;
760
+
761
+ var SearchComponent = /** @class */ (function () {
762
+ function SearchComponent() {
763
+ this.queryControl = new i1$1.FormControl();
764
+ }
765
+ SearchComponent.prototype.ngOnInit = function () {
766
+ var _this = this;
767
+ this.queryCtrlSub = this.queryControl.valueChanges
768
+ .pipe(operators.debounceTime(200))
769
+ .subscribe(function (value) { return _this.search.onQueryChange(value); });
608
770
  };
609
- ChatComponent.prototype.ngOnDestroy = function () {
610
- this.chat.off(messenger.RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);
771
+ SearchComponent.prototype.ngOnDestroy = function () {
772
+ if (this.queryCtrlSub) {
773
+ this.queryCtrlSub.unsubscribe();
774
+ }
611
775
  };
612
- ChatComponent.prototype.ngOnInit = function () {
613
- this.chat.on(messenger.RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);
776
+ return SearchComponent;
777
+ }());
778
+ SearchComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: SearchComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
779
+ SearchComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: SearchComponent, selector: "rtsee-search", inputs: { search: "search" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search...\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\" *ngIf=\"search.searchInProgress\"></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\" class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n", components: [{ type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }], directives: [{ type: i1__namespace$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1__namespace$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1__namespace$1.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
780
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: SearchComponent, decorators: [{
781
+ type: i0.Component,
782
+ args: [{
783
+ selector: 'rtsee-search',
784
+ templateUrl: './search.component.html',
785
+ }]
786
+ }], propDecorators: { search: [{
787
+ type: i0.Input
788
+ }] } });
789
+
790
+ var ManageChatComponent = /** @class */ (function () {
791
+ function ManageChatComponent() {
792
+ }
793
+ ManageChatComponent.prototype.onInviteContactsClicked = function () {
794
+ this.menuState.activePanel = MainMenuPanels.CONTACTS_SELECT;
614
795
  };
615
- ChatComponent.prototype.onScroll = function () {
616
- this.chat.loadRemoteMessages();
617
- console.log('Melia Loh');
796
+ return ManageChatComponent;
797
+ }());
798
+ ManageChatComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ManageChatComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
799
+ ManageChatComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ManageChatComponent, selector: "rtsee-manage-chat", inputs: { messenger: "messenger", menuState: "menuState" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-manage-chat\">\n <p>We are going to manage chat here</p>\n <button (click)=\"onInviteContactsClicked()\">Invite Contacts</button>\n</div>\n", styles: [""] });
800
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ManageChatComponent, decorators: [{
801
+ type: i0.Component,
802
+ args: [{
803
+ selector: 'rtsee-manage-chat',
804
+ templateUrl: './manage-chat.component.html',
805
+ styleUrls: ['./manage-chat.component.scss'],
806
+ }]
807
+ }], propDecorators: { messenger: [{
808
+ type: i0.Input
809
+ }], menuState: [{
810
+ type: i0.Input
811
+ }] } });
812
+
813
+ var ContactsMultiselectComponent = /** @class */ (function () {
814
+ function ContactsMultiselectComponent() {
815
+ }
816
+ return ContactsMultiselectComponent;
817
+ }());
818
+ ContactsMultiselectComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ContactsMultiselectComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
819
+ ContactsMultiselectComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ContactsMultiselectComponent, selector: "rtsee-contacts-multiselect", inputs: { menuState: "menuState", search: "search" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n", styles: [""], components: [{ type: SearchComponent, selector: "rtsee-search", inputs: ["search"] }] });
820
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ContactsMultiselectComponent, decorators: [{
821
+ type: i0.Component,
822
+ args: [{
823
+ selector: 'rtsee-contacts-multiselect',
824
+ templateUrl: './contacts-multiselect.component.html',
825
+ styleUrls: ['./contacts-multiselect.component.scss'],
826
+ }]
827
+ }], propDecorators: { menuState: [{
828
+ type: i0.Input
829
+ }], search: [{
830
+ type: i0.Input
831
+ }] } });
832
+
833
+ var MainMenuComponent = /** @class */ (function () {
834
+ function MainMenuComponent() {
835
+ this.MainMenuPanels = MainMenuPanels;
836
+ this.state = {
837
+ activePanel: DEFAULT_MAIN_MENU_STATE,
838
+ };
839
+ }
840
+ MainMenuComponent.prototype.onNewGroupClicked = function () {
841
+ this.state.activePanel = MainMenuPanels.CONTACTS_SELECT;
618
842
  };
619
- ChatComponent.prototype.scrollToBottom = function () {
620
- var _a, _b;
621
- if (!((_b = (_a = this.scrollContainer) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.scrollHeight)) {
622
- return;
623
- }
624
- try {
625
- this.scrollContainer.nativeElement.scrollTop =
626
- this.scrollContainer.nativeElement.scrollHeight;
627
- }
628
- catch (err) {
629
- console.log('Failed to Scroll');
630
- }
843
+ MainMenuComponent.prototype.onNewChannelClicked = function () {
844
+ this.state.activePanel = MainMenuPanels.MANAGE_CHAT;
631
845
  };
632
- return ChatComponent;
846
+ return MainMenuComponent;
633
847
  }());
634
- ChatComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
635
- ChatComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: ChatComponent, selector: "ngx-chat", inputs: { chat: "chat", messenger: "messenger" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollBlock"], descendants: true }], ngImport: i0__namespace, template: "<div class=\"rtsee-chat\">\n <div #scrollBlock\n class=\"rtsee-chat-body-container\"\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolledUp)=\"onScroll()\"\n >\n <ngx-messages-list [messenger]=\"messenger\" [chat]=\"chat\"></ngx-messages-list>\n </div>\n <div class=\"rtsee-chat-footer-container\">\n <ngx-chat-input [messenger]=\"messenger\" [chat]=\"chat\"></ngx-chat-input>\n </div>\n</div>\n", styles: [""], components: [{ type: MessagesListComponent, selector: "ngx-messages-list", inputs: ["chat", "messenger"] }, { type: ChatInputComponent, selector: "ngx-chat-input", inputs: ["messenger", "chat"] }], directives: [{ type: i3__namespace$1.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }] });
636
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: ChatComponent, decorators: [{
848
+ MainMenuComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MainMenuComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
849
+ MainMenuComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MainMenuComponent, selector: "rtsee-main-menu", inputs: { search: "search", messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger-main-menu\">\n <div class=\"rtsee-messenger-main-menu-home\" *ngIf=\"state.activePanel === MainMenuPanels.HOME\">\n <ul class=\"rtsee-messenger-controls\">\n <li>\n <button (click)=\"onNewGroupClicked()\">\n <span class=\"material-icons-outlined\">people</span>\n <span>New Group</span>\n </button>\n </li>\n <li>\n <button (click)=\"onNewChannelClicked()\">\n <span class=\"material-icons-outlined\">campaign</span>\n <span>New Channel</span>\n </button>\n </li>\n </ul>\n <rtsee-search [search]=\"search\" ></rtsee-search>\n </div>\n\n <rtsee-manage-chat *ngIf=\"state.activePanel === MainMenuPanels.MANAGE_CHAT\"\n [messenger]=\"messenger\"\n [menuState]=\"state\"\n ></rtsee-manage-chat>\n <rtsee-contacts-multiselect [search]=\"search\"\n [menuState]=\"state\"\n *ngIf=\"state.activePanel === MainMenuPanels.CONTACTS_SELECT\"\n ></rtsee-contacts-multiselect>\n</div>\n", components: [{ type: SearchComponent, selector: "rtsee-search", inputs: ["search"] }, { type: ManageChatComponent, selector: "rtsee-manage-chat", inputs: ["messenger", "menuState"] }, { type: ContactsMultiselectComponent, selector: "rtsee-contacts-multiselect", inputs: ["menuState", "search"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
850
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MainMenuComponent, decorators: [{
637
851
  type: i0.Component,
638
852
  args: [{
639
- selector: 'ngx-chat',
640
- templateUrl: './chat.component.html',
641
- styleUrls: ['./chat.component.css'],
853
+ selector: 'rtsee-main-menu',
854
+ templateUrl: './main-menu.component.html',
642
855
  }]
643
- }], ctorParameters: function () { return []; }, propDecorators: { scrollContainer: [{
644
- type: i0.ViewChild,
645
- args: ['scrollBlock']
646
- }], chat: [{
856
+ }], propDecorators: { search: [{
647
857
  type: i0.Input
648
858
  }], messenger: [{
649
859
  type: i0.Input
@@ -651,28 +861,141 @@
651
861
 
652
862
  var MessengerComponent = /** @class */ (function () {
653
863
  function MessengerComponent() {
864
+ this.isHeaderExpanded = false;
654
865
  }
655
866
  MessengerComponent.prototype.onScroll = function () {
656
867
  this.messenger.loadChats();
657
868
  };
869
+ MessengerComponent.prototype.onHeaderExpandToggled = function (value) {
870
+ this.isHeaderExpanded = value;
871
+ };
658
872
  return MessengerComponent;
659
873
  }());
660
874
  MessengerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessengerComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
661
- MessengerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessengerComponent, selector: "ngx-messenger", inputs: { messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger\">\n <div class=\"rtsee-messenger-header-container\">\n <ngx-messenger-header [messenger]=\"messenger\"></ngx-messenger-header>\n </div>\n <div class=\"rtsee-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n <ngx-chats-list *ngIf=\"!messenger.openedChat\" [chats]=\"messenger.chats\" [messenger]=\"messenger\"></ngx-chats-list>\n <ngx-chat *ngIf=\"messenger.openedChat\" [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></ngx-chat>\n <p *ngIf=\"messenger.loadingChatsInProgress\">PRELOADER</p>\n </div>\n</div>\n\n\n", styles: [""], components: [{ type: MessengerHeaderComponent, selector: "ngx-messenger-header", inputs: ["messenger"] }, { type: ChatsListComponent, selector: "ngx-chats-list", inputs: ["messenger", "chats"] }, { type: ChatComponent, selector: "ngx-chat", inputs: ["chat", "messenger"] }], directives: [{ type: i3__namespace$1.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
875
+ MessengerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: MessengerComponent, selector: "rtsee-messenger", inputs: { messenger: "messenger" }, ngImport: i0__namespace, template: "<div class=\"rtsee-messenger\" [ngClass]=\"{\n 'rtsee-messenger-main-menu-opened': messenger.mainMenuOpened,\n 'rtsee-messenger-header-expanded': isHeaderExpanded\n}\">\n <div class=\"rtsee-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\" (expandToggled)=\"onHeaderExpandToggled($event)\"></rtsee-messenger-header>\n </div>\n <div class=\"rtsee-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n <rtsee-chats-list *ngIf=\"!messenger.openedChat\" [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n <rtsee-chat *ngIf=\"messenger.openedChat\" [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n <rtsee-preloader [diameter]=\"50\" *ngIf=\"messenger.loadingChatsInProgress\" ></rtsee-preloader>\n </div>\n <div class=\"rtsee-messenger-main-menu-container\">\n <rtsee-main-menu\n *ngIf=\"messenger.mainMenuOpened\"\n [search]=\"messenger.search\"\n [messenger]=\"messenger\"></rtsee-main-menu>\n </div>\n <div class=\"rtsee-messenger-overlay\" (click)=\"messenger.openMainMenu(false)\"></div>\n</div>\n\n\n", components: [{ type: MessengerHeaderComponent, selector: "rtsee-messenger-header", inputs: ["isExpanded", "messenger"], outputs: ["expandToggled"] }, { type: ChatsListComponent, selector: "rtsee-chats-list", inputs: ["messenger", "chats"] }, { type: ChatComponent, selector: "rtsee-chat", inputs: ["chat", "messenger"] }, { type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }, { type: MainMenuComponent, selector: "rtsee-main-menu", inputs: ["search", "messenger"] }], directives: [{ type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3__namespace$2.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
662
876
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: MessengerComponent, decorators: [{
663
877
  type: i0.Component,
664
878
  args: [{
665
- selector: 'ngx-messenger',
879
+ selector: 'rtsee-messenger',
666
880
  templateUrl: './messenger.component.html',
667
- styleUrls: ['./messenger.component.scss'],
668
881
  }]
669
- }], propDecorators: { messenger: [{
882
+ }], ctorParameters: function () { return []; }, propDecorators: { messenger: [{
883
+ type: i0.Input
884
+ }] } });
885
+
886
+ var EventsWidgetsService = /** @class */ (function () {
887
+ function EventsWidgetsService() {
888
+ this.widgetsMap = [];
889
+ }
890
+ EventsWidgetsService.prototype.getWidgetComponentByName = function (name) {
891
+ /* eslint-disable */
892
+ var mapping = this.widgetsMap.find(function (e) { return e.name === name; });
893
+ if (!mapping) {
894
+ return null;
895
+ }
896
+ return mapping.component;
897
+ /* eslint-enable */
898
+ };
899
+ return EventsWidgetsService;
900
+ }());
901
+ EventsWidgetsService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: EventsWidgetsService, deps: [], target: i0__namespace.ɵɵFactoryTarget.Injectable });
902
+ EventsWidgetsService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: EventsWidgetsService, providedIn: 'root' });
903
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: EventsWidgetsService, decorators: [{
904
+ type: i0.Injectable,
905
+ args: [{
906
+ providedIn: 'root',
907
+ }]
908
+ }] });
909
+
910
+ var EventThumbnailComponent = /** @class */ (function () {
911
+ function EventThumbnailComponent(widgetsService, componentFactoryResolver, timeFormatService) {
912
+ this.widgetsService = widgetsService;
913
+ this.componentFactoryResolver = componentFactoryResolver;
914
+ this.timeFormatService = timeFormatService;
915
+ }
916
+ EventThumbnailComponent.prototype.ngOnInit = function () {
917
+ if (this.event.data) {
918
+ this.generateTooltip();
919
+ }
920
+ };
921
+ EventThumbnailComponent.prototype.generateTooltip = function () {
922
+ /* eslint-disable */
923
+ var tooltip = '';
924
+ if (typeof this.event.data !== 'object') {
925
+ return;
926
+ }
927
+ try {
928
+ for (var key in this.event.data) {
929
+ if (this.event.data.hasOwnProperty(key)) {
930
+ if (tooltip) {
931
+ tooltip += '&#013;';
932
+ }
933
+ tooltip += key + ' -> ' + this.event.data[key];
934
+ }
935
+ }
936
+ this.tooltip = tooltip;
937
+ }
938
+ catch (e) {
939
+ console.log('Failed to generate a tooltip');
940
+ }
941
+ /* eslint-enable */
942
+ };
943
+ EventThumbnailComponent.prototype.ngAfterViewInit = function () {
944
+ /* eslint-disable */
945
+ if (this.event.widget) {
946
+ var widget = this.widgetsService.getWidgetComponentByName(this.event.widget);
947
+ if (!widget) {
948
+ return;
949
+ }
950
+ var viewContainerRef = this.widgetHost.viewContainerRef;
951
+ viewContainerRef.clear();
952
+ var componentToShow = this.componentFactoryResolver.resolveComponentFactory(widget);
953
+ var componentRef = viewContainerRef.createComponent(componentToShow);
954
+ componentRef.instance.event = this.event;
955
+ componentRef.instance.event = this.event;
956
+ componentRef.changeDetectorRef.detectChanges();
957
+ }
958
+ /* eslint-enable */
959
+ };
960
+ return EventThumbnailComponent;
961
+ }());
962
+ EventThumbnailComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: EventThumbnailComponent, deps: [{ token: EventsWidgetsService }, { token: i0__namespace.ComponentFactoryResolver }, { token: TimeFormatHelperService }], target: i0__namespace.ɵɵFactoryTarget.Component });
963
+ EventThumbnailComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: EventThumbnailComponent, selector: "rtsee-event-thumbnail", inputs: { event: "event" }, viewQueries: [{ propertyName: "widgetHost", first: true, predicate: WidgetDirective, descendants: true }], ngImport: i0__namespace, template: "<div class=\"rtsee-events-dashboard-event-thumbnail\">\n <ng-template *ngIf=\"event.widget\" widgetHost></ng-template>\n <div *ngIf=\"!event.widget\" class=\"rtsee-events-dashboard-default-event-thumbnail\"\n [ngClass]=\"{'rtsee-events-dashboard-default-event-thumbnail-with-data': event.data}\"\n >\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-name\">{{event.name}}</div>\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-info\">\n <div *ngIf=\"event.data\" class=\"rtsee-events-dashboard-default-event-thumbnail-details\"\n [title]=\"tooltip\"\n >\n <span class=\"rtsee-events-dashboard-default-event-thumbnail-details-icon material-icons-outlined\"\n >info</span>\n </div>\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-time\">\n <span>{{ timeFormatService.toAgo(event.createdAt) }}</span>\n </div>\n </div>\n\n </div>\n</div>\n", directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: WidgetDirective, selector: "[widgetHost]" }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
964
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: EventThumbnailComponent, decorators: [{
965
+ type: i0.Component,
966
+ args: [{
967
+ selector: 'rtsee-event-thumbnail',
968
+ templateUrl: './event-thumbnail.component.html',
969
+ }]
970
+ }], ctorParameters: function () { return [{ type: EventsWidgetsService }, { type: i0__namespace.ComponentFactoryResolver }, { type: TimeFormatHelperService }]; }, propDecorators: { event: [{
971
+ type: i0.Input
972
+ }], widgetHost: [{
973
+ type: i0.ViewChild,
974
+ args: [WidgetDirective, { static: false }]
975
+ }] } });
976
+
977
+ var RtseeEventsDashboardSessionComponent = /** @class */ (function () {
978
+ function RtseeEventsDashboardSessionComponent(timeFormatService) {
979
+ this.timeFormatService = timeFormatService;
980
+ }
981
+ return RtseeEventsDashboardSessionComponent;
982
+ }());
983
+ RtseeEventsDashboardSessionComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardSessionComponent, deps: [{ token: TimeFormatHelperService }], target: i0__namespace.ɵɵFactoryTarget.Component });
984
+ RtseeEventsDashboardSessionComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeEventsDashboardSessionComponent, selector: "rtsee-rtsee-events-dashboard-session", inputs: { session: "session" }, ngImport: i0__namespace, template: "<div class=\"rtsee-events-dashboard-session\">\n <div class=\"rtsee-events-dashboard-session-header\" *ngIf=\"session.info\">\n <p class=\"rtsee-events-dashboard-session-client-info\">{{session.info.clientThumbnail}}</p>\n <p class=\"rtsee-events-dashboard-session-os-info\">{{session.info.osThumbnail}}</p>\n <div class=\"rtsee-events-dashboard-session-device-info\" [title]=\"session.info.deviceThumbnail\">\n <span *ngIf=\"session.info.deviceType === 'smartphone' && !session.info.botName\"\n class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n >phone_iphone</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.deviceType === 'tablet' && !session.info.botName\"\n >tablet_mac</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.deviceType === 'desktop' && !session.info.botName\"\n >computer</span>\n <span class=\"material-icons-outlined rtsee-events-dashboard-session-device-info-icon\"\n *ngIf=\"session.info.botName\"\n >smart_toy</span>\n </div>\n </div>\n <ul *ngIf=\"session.events && session.events.length\"\n class=\"rtsee-events-dashboard-session-events-list\"\n >\n <li *ngFor=\"let event of session.events | slice:0:5;\" class=\"rtsee-events-dashboard-session-event\">\n <rtsee-event-thumbnail [event]=\"event\"></rtsee-event-thumbnail>\n </li>\n </ul>\n <div class=\"rtsee-events-dashboard-session-footer\">\n <button *ngIf=\"session.events.length > 5\">{{session.events.length - 5}} more</button>\n </div>\n</div>\n", components: [{ type: EventThumbnailComponent, selector: "rtsee-event-thumbnail", inputs: ["event"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "slice": i3__namespace.SlicePipe } });
985
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardSessionComponent, decorators: [{
986
+ type: i0.Component,
987
+ args: [{
988
+ selector: 'rtsee-rtsee-events-dashboard-session',
989
+ templateUrl: './rtsee-events-dashboard-session.component.html',
990
+ }]
991
+ }], ctorParameters: function () { return [{ type: TimeFormatHelperService }]; }, propDecorators: { session: [{
670
992
  type: i0.Input
671
993
  }] } });
672
994
 
673
995
  var RtseeEventsDashboardClientThumbnailComponent = /** @class */ (function () {
674
- function RtseeEventsDashboardClientThumbnailComponent(timeFormatService) {
996
+ function RtseeEventsDashboardClientThumbnailComponent(timeFormatService, defaultImagesService) {
675
997
  this.timeFormatService = timeFormatService;
998
+ this.defaultImagesService = defaultImagesService;
676
999
  }
677
1000
  RtseeEventsDashboardClientThumbnailComponent.prototype.ngOnInit = function () {
678
1001
  console.log('client id', this.client.id);
@@ -682,16 +1005,15 @@
682
1005
  };
683
1006
  return RtseeEventsDashboardClientThumbnailComponent;
684
1007
  }());
685
- RtseeEventsDashboardClientThumbnailComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardClientThumbnailComponent, deps: [{ token: TimeFormatHelperService }], target: i0__namespace.ɵɵFactoryTarget.Component });
686
- RtseeEventsDashboardClientThumbnailComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeEventsDashboardClientThumbnailComponent, selector: "ngx-rtsee-events-dashboard-client-thumbnail", inputs: { dashboard: "dashboard", client: "client" }, ngImport: i0__namespace, template: "<div class=\"rtsee-dashboard-client-thumbnail\">\n <span class=\"rtsee-dashboard-client-id\" *ngIf=\"client.name\">{{ client.id }}</span>\n <span class=\"rtsee-dashboard-client-name\">{{ client.name || client.id }}</span>\n <div class=\"rtsee-dashboard-client-live\" *ngIf=\"client.isConnected\"></div>\n <div class=\"rtsee-dashboard-client-thumbnail-events\">\n <details *ngIf=\"client.events && client.events.length\">\n <summary>Last event: {{client.events[0].name}} ({{ timeFormatService.toAgo(client.events[0].createdAt) }})</summary>\n <ul>\n <li *ngFor=\"let event of client.events.slice(1, client.events.length)\" class=\"rtsee-dashboard-client-thumbnail-event\">\n <span>{{event.name}}</span>\n <span>&nbsp;</span>\n <span>{{ timeFormatService.toAgo(event.createdAt) }}</span>\n </li>\n </ul>\n </details>\n <div class=\"rtsee-dashboard-client-thumbnail-actions\">\n <button (click)=\"openChat()\">Chat</button>\n </div>\n </div>\n</div>\n", styles: [".rtsee-dashboard-client-thumbnail{position:relative}.rtsee-dashboard-client-thumbnail .rtsee-dashboard-client-thumbnail-events{padding:16px 0}.rtsee-dashboard-client-thumbnail .rtsee-dashboard-client-live{top:16px;right:16px;position:absolute;border-radius:50%;width:10px;height:10px;background:#32cd32}"], directives: [{ type: i2__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
1008
+ RtseeEventsDashboardClientThumbnailComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardClientThumbnailComponent, deps: [{ token: TimeFormatHelperService }, { token: DefaultImagesService }], target: i0__namespace.ɵɵFactoryTarget.Component });
1009
+ RtseeEventsDashboardClientThumbnailComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeEventsDashboardClientThumbnailComponent, selector: "ngx-rtsee-events-dashboard-client-thumbnail", inputs: { dashboard: "dashboard", client: "client" }, ngImport: i0__namespace, template: "<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n <div class=\"rtsee-dashboard-client-live-indicator\" *ngIf=\"client.isConnected\"></div>\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n <div *ngFor=\"let session of client.sessions\"\n class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n </div>\n</div>\n", components: [{ type: RtseeEventsDashboardSessionComponent, selector: "rtsee-rtsee-events-dashboard-session", inputs: ["session"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
687
1010
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardClientThumbnailComponent, decorators: [{
688
1011
  type: i0.Component,
689
1012
  args: [{
690
1013
  selector: 'ngx-rtsee-events-dashboard-client-thumbnail',
691
1014
  templateUrl: './rtsee-events-dashboard-client-thumbnail.component.html',
692
- styleUrls: ['./rtsee-events-dashboard-client-thumbnail.component.scss'],
693
1015
  }]
694
- }], ctorParameters: function () { return [{ type: TimeFormatHelperService }]; }, propDecorators: { dashboard: [{
1016
+ }], ctorParameters: function () { return [{ type: TimeFormatHelperService }, { type: DefaultImagesService }]; }, propDecorators: { dashboard: [{
695
1017
  type: i0.Input
696
1018
  }], client: [{
697
1019
  type: i0.Input
@@ -703,13 +1025,12 @@
703
1025
  return RtseeEventsDashboardComponent;
704
1026
  }());
705
1027
  RtseeEventsDashboardComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
706
- RtseeEventsDashboardComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeEventsDashboardComponent, selector: "ngx-rtsee-events-dashboard", inputs: { eventsDashboard: "eventsDashboard" }, ngImport: i0__namespace, template: "<div class=\"rtsee-events-dashboard\">\n <p>Client id: {{ eventsDashboard.signalingClient.getMyPeerId() }}</p>\n <div class=\"rtsee-events-dashboard-client-thumbnails\">\n <div class=\"rtsee-events-dashboard-client-thumbnail-wrapper\"\n *ngFor=\"let client of eventsDashboard.clients\">\n <ngx-rtsee-events-dashboard-client-thumbnail\n [client]=\"client\"\n [dashboard]=\"eventsDashboard\"\n ></ngx-rtsee-events-dashboard-client-thumbnail>\n </div>\n </div>\n</div>\n", styles: [".rtsee-events-dashboard{background-color:#333;padding:16px}.rtsee-events-dashboard .rtsee-dashboard-client-id{display:inline-block;font-weight:600}.rtsee-events-dashboard .rtsee-events-dashboard-client-thumbnails .rtsee-events-dashboard-client-thumbnail-wrapper{margin-bottom:16px}.rtsee-events-dashboard .rtsee-events-dashboard-client-thumbnails .rtsee-events-dashboard-client-thumbnail-wrapper:last-of-type{margin-bottom:0}"], components: [{ type: RtseeEventsDashboardClientThumbnailComponent, selector: "ngx-rtsee-events-dashboard-client-thumbnail", inputs: ["dashboard", "client"] }], directives: [{ type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
1028
+ RtseeEventsDashboardComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeEventsDashboardComponent, selector: "ngx-rtsee-events-dashboard", inputs: { eventsDashboard: "eventsDashboard" }, ngImport: i0__namespace, template: "<div class=\"rtsee-events-dashboard\">\n <div class=\"rtsee-events-dashboard-client-thumbnails\">\n <div class=\"rtsee-events-dashboard-client-thumbnail-wrapper\"\n *ngFor=\"let client of eventsDashboard.clients\">\n <ngx-rtsee-events-dashboard-client-thumbnail\n [client]=\"client\"\n [dashboard]=\"eventsDashboard\"\n ></ngx-rtsee-events-dashboard-client-thumbnail>\n </div>\n </div>\n</div>\n", components: [{ type: RtseeEventsDashboardClientThumbnailComponent, selector: "ngx-rtsee-events-dashboard-client-thumbnail", inputs: ["dashboard", "client"] }], directives: [{ type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
707
1029
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardComponent, decorators: [{
708
1030
  type: i0.Component,
709
1031
  args: [{
710
1032
  selector: 'ngx-rtsee-events-dashboard',
711
1033
  templateUrl: './rtsee-events-dashboard.component.html',
712
- styleUrls: ['./rtsee-events-dashboard.component.scss'],
713
1034
  }]
714
1035
  }], propDecorators: { eventsDashboard: [{
715
1036
  type: i0.Input
@@ -737,13 +1058,27 @@
737
1058
  return RtseeEventsDashboardClientComponent;
738
1059
  }());
739
1060
  RtseeEventsDashboardClientComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardClientComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
740
- RtseeEventsDashboardClientComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeEventsDashboardClientComponent, selector: "ngx-rtsee-events-dashboard-client", ngImport: i0__namespace, template: "<p>rtsee-events-dashboard-client works!</p>\n", styles: [""] });
1061
+ RtseeEventsDashboardClientComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeEventsDashboardClientComponent, selector: "ngx-rtsee-events-dashboard-client", ngImport: i0__namespace, template: "<p>rtsee-events-dashboard-client works!</p>\n" });
741
1062
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeEventsDashboardClientComponent, decorators: [{
742
1063
  type: i0.Component,
743
1064
  args: [{
744
1065
  selector: 'ngx-rtsee-events-dashboard-client',
745
1066
  templateUrl: './rtsee-events-dashboard-client.component.html',
746
- styleUrls: ['./rtsee-events-dashboard-client.component.css'],
1067
+ }]
1068
+ }] });
1069
+
1070
+ var RtseeContainerComponent = /** @class */ (function () {
1071
+ function RtseeContainerComponent() {
1072
+ }
1073
+ return RtseeContainerComponent;
1074
+ }());
1075
+ RtseeContainerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeContainerComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
1076
+ RtseeContainerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: RtseeContainerComponent, selector: "rtsee-rtsee-container", ngImport: i0__namespace, template: "<p>rtsee-container works!</p>\n" });
1077
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RtseeContainerComponent, decorators: [{
1078
+ type: i0.Component,
1079
+ args: [{
1080
+ selector: 'rtsee-rtsee-container',
1081
+ templateUrl: './rtsee-container.component.html',
747
1082
  }]
748
1083
  }] });
749
1084
 
@@ -771,25 +1106,36 @@
771
1106
  RtseeEventsDashboardClientComponent,
772
1107
  RtseeEventsDashboardClientThumbnailComponent,
773
1108
  WidgetDirective,
774
- CallWidgetComponent], imports: [i2.CommonModule,
1109
+ CallWidgetComponent,
1110
+ MainMenuComponent,
1111
+ MessageTimeAndStatusComponent,
1112
+ PreloaderComponent,
1113
+ SearchComponent,
1114
+ ManageChatComponent,
1115
+ ContactsMultiselectComponent,
1116
+ ShaveDirective,
1117
+ ProfileComponent,
1118
+ EventThumbnailComponent,
1119
+ RtseeEventsDashboardSessionComponent,
1120
+ RtseeContainerComponent], imports: [i3.CommonModule,
775
1121
  icon.MatIconModule,
776
1122
  i1.MatButtonModule,
777
1123
  select.MatSelectModule,
778
1124
  animations.BrowserAnimationsModule,
779
- i3.MatFormFieldModule,
1125
+ i3$1.MatFormFieldModule,
780
1126
  i1$1.ReactiveFormsModule,
781
- i2$1.AutosizeModule,
782
- i3$1.InfiniteScrollModule], exports: [RTSeeComponent, MessengerComponent, RtseeEventsDashboardComponent] });
1127
+ i2.AutosizeModule,
1128
+ i3$2.InfiniteScrollModule], exports: [RTSeeComponent, MessengerComponent, RtseeEventsDashboardComponent] });
783
1129
  RTSeeModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RTSeeModule, imports: [[
784
- i2.CommonModule,
1130
+ i3.CommonModule,
785
1131
  icon.MatIconModule,
786
1132
  i1.MatButtonModule,
787
1133
  select.MatSelectModule,
788
1134
  animations.BrowserAnimationsModule,
789
- i3.MatFormFieldModule,
1135
+ i3$1.MatFormFieldModule,
790
1136
  i1$1.ReactiveFormsModule,
791
- i2$1.AutosizeModule,
792
- i3$1.InfiniteScrollModule,
1137
+ i2.AutosizeModule,
1138
+ i3$2.InfiniteScrollModule,
793
1139
  ]] });
794
1140
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0__namespace, type: RTSeeModule, decorators: [{
795
1141
  type: i0.NgModule,
@@ -814,17 +1160,28 @@
814
1160
  RtseeEventsDashboardClientThumbnailComponent,
815
1161
  WidgetDirective,
816
1162
  CallWidgetComponent,
1163
+ MainMenuComponent,
1164
+ MessageTimeAndStatusComponent,
1165
+ PreloaderComponent,
1166
+ SearchComponent,
1167
+ ManageChatComponent,
1168
+ ContactsMultiselectComponent,
1169
+ ShaveDirective,
1170
+ ProfileComponent,
1171
+ EventThumbnailComponent,
1172
+ RtseeEventsDashboardSessionComponent,
1173
+ RtseeContainerComponent,
817
1174
  ],
818
1175
  imports: [
819
- i2.CommonModule,
1176
+ i3.CommonModule,
820
1177
  icon.MatIconModule,
821
1178
  i1.MatButtonModule,
822
1179
  select.MatSelectModule,
823
1180
  animations.BrowserAnimationsModule,
824
- i3.MatFormFieldModule,
1181
+ i3$1.MatFormFieldModule,
825
1182
  i1$1.ReactiveFormsModule,
826
- i2$1.AutosizeModule,
827
- i3$1.InfiniteScrollModule,
1183
+ i2.AutosizeModule,
1184
+ i3$2.InfiniteScrollModule,
828
1185
  ],
829
1186
  exports: [RTSeeComponent, MessengerComponent, RtseeEventsDashboardComponent],
830
1187
  }]