@rtsee/ngx 0.0.21 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ngx/bundles/rtsee-ngx.umd.js +128 -43
- package/dist/ngx/bundles/rtsee-ngx.umd.js.map +1 -1
- package/dist/ngx/esm2015/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.js +9 -4
- package/dist/ngx/esm2015/lib/components/rtsee-messenger/message/message.component.js +9 -7
- package/dist/ngx/esm2015/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.js +1 -1
- package/dist/ngx/esm2015/lib/components/rtsee-messenger/messages-list/messages-list.component.js +23 -6
- package/dist/ngx/esm2015/lib/components/rtsee-messenger/messenger-header/messenger-header.component.js +4 -6
- package/dist/ngx/esm2015/lib/services/time-format-helper.service.js +72 -1
- package/dist/ngx/fesm2015/rtsee-ngx.js +123 -34
- package/dist/ngx/fesm2015/rtsee-ngx.js.map +1 -1
- package/dist/ngx/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.d.ts +3 -0
- package/dist/ngx/lib/components/rtsee-messenger/message/message.component.d.ts +3 -2
- package/dist/ngx/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.d.ts +2 -2
- package/dist/ngx/lib/components/rtsee-messenger/messages-list/messages-list.component.d.ts +6 -1
- package/dist/ngx/lib/services/time-format-helper.service.d.ts +8 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtsee-ngx.js","sources":["../../../projects/ngx/src/lib/ngx.service.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-controls/rtsee-controls.component.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-controls/rtsee-controls.component.html","../../../projects/ngx/src/lib/components/rtsee-settings/rtsee-settings.component.ts","../../../projects/ngx/src/lib/components/rtsee-settings/rtsee-settings.component.html","../../../projects/ngx/src/lib/components/rtsee-soundbar/rtsee-soundbar.component.ts","../../../projects/ngx/src/lib/components/rtsee-soundbar/rtsee-soundbar.component.html","../../../projects/ngx/src/lib/components/rtsee-peer/rtsee-peer.component.ts","../../../projects/ngx/src/lib/components/rtsee-peer/rtsee-peer.component.html","../../../projects/ngx/src/lib/components/rtsee/rtsee.component.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee.component.html","../../../projects/ngx/src/lib/services/default-images.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger-header/messenger-header.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger-header/messenger-header.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chats-list/chats-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chats-list/chats-list.component.html","../../../projects/ngx/src/lib/directives/widget.directive.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.html","../../../projects/ngx/src/lib/services/widgets.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/message.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/message.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/messages-list/messages-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messages-list/messages-list.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-input/chat-input.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-input/chat-input.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat/chat.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat/chat.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger/messenger.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger/messenger.component.html","../../../projects/ngx/src/lib/services/time-format-helper.service.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.html","../../../projects/ngx/src/lib/components/rtsee-peers-list/rtsee-peers-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-peers-list/rtsee-peers-list.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.html","../../../projects/ngx/src/lib/ngx.module.ts","../../../projects/ngx/src/public-api.ts","../../../projects/ngx/src/rtsee-ngx.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxService {\n lol: string;\n constructor() {\n this.lol = 'lol';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeVideoChat } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-rtsee-controls',\n templateUrl: './rtsee-controls.component.html',\n styleUrls: ['./rtsee-controls.component.scss'],\n})\nexport class RTSeeControlsComponent {\n @Input() rtsee!: RTSeeVideoChat;\n @Input() fullScreenMode?: boolean;\n\n onPresentClicked() {\n return this.rtsee.isPresenter\n ? this.rtsee.stopScreenShare()\n : this.rtsee.startScreenShare();\n }\n}\n","<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","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeVideoChat } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-rtsee-settings',\n templateUrl: './rtsee-settings.component.html',\n styleUrls: ['./rtsee-settings.component.scss'],\n})\nexport class RtseeSettingsComponent implements OnInit {\n availableAudioInputDevices: MediaDeviceInfo[];\n availableVideoInputDevices: MediaDeviceInfo[];\n availableAudioOutputDevices: MediaDeviceInfo[];\n\n @Input() rtSee!: RTSeeVideoChat;\n @Input() fullScreenMode!: boolean;\n constructor() {\n this.availableAudioInputDevices = [];\n this.availableVideoInputDevices = [];\n this.availableAudioOutputDevices = [];\n }\n\n ngOnInit(): void {\n this.refreshSelectOptions();\n }\n\n refreshSelectOptions() {\n void this.rtSee.refreshMediaDevicesList();\n }\n\n setAudioInput(deviceId: string) {\n this.rtSee.setAudioInputDevice(deviceId);\n console.log(deviceId);\n }\n\n setAudioOutput(deviceId: string) {\n this.rtSee.setAudioOutputDevice(deviceId);\n }\n\n setVideoInput(deviceId: string) {\n this.rtSee.setVideoInputDevice(deviceId);\n }\n}\n","<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","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeePeerConnection } from '@rtsee/core';\nimport { interval } from 'rxjs';\n\n@Component({\n selector: 'ngx-rtsee-soundbar',\n templateUrl: './rtsee-soundbar.component.html',\n styleUrls: ['./rtsee-soundbar.component.scss'],\n})\nexport class RtseeSoundbarComponent implements OnInit {\n intervalLength: number;\n noiceLevel: number;\n scaleOneLevel: number;\n scaleTwoLevel: number;\n scaleThreeLevel: number;\n\n @Input() peer!: RTSeePeerConnection;\n constructor() {\n this.intervalLength = 1000;\n this.noiceLevel = 0;\n this.scaleOneLevel = 0;\n this.scaleTwoLevel = 0;\n this.scaleThreeLevel = 0;\n }\n\n ngOnInit(): void {\n this.startSoundMeterListening();\n }\n\n startSoundMeterListening() {\n const step = interval(1000 / 10);\n step.subscribe(() => {\n if (!this.peer.soundMeter || !this.peer.soundMeter.level) {\n this.noiceLevel = 0;\n } else {\n this.noiceLevel = this.peer.soundMeter?.level * 100 || 0;\n }\n\n this.setSoundMeterHeights();\n });\n }\n\n setSoundMeterHeights() {\n const ZERO_LEVEL = 25;\n const SCALE_STEP = 25;\n const SCALE_ONE_TOP = ZERO_LEVEL + SCALE_STEP;\n const SCALE_TWO_TOP = SCALE_ONE_TOP + SCALE_STEP;\n\n if (!this.peer || !this.peer.soundMeter || this.noiceLevel < ZERO_LEVEL) {\n this.scaleOneLevel = 0;\n this.scaleTwoLevel = 0;\n this.scaleThreeLevel = 0;\n }\n\n const scaleOneValue = ((this.noiceLevel - ZERO_LEVEL) / SCALE_STEP) * 100;\n const scaleTwoValue =\n ((this.noiceLevel - SCALE_ONE_TOP) / SCALE_STEP) * 100;\n const scaleThreeValue =\n ((this.noiceLevel - SCALE_TWO_TOP) / SCALE_STEP) * 100;\n\n this.scaleOneLevel = scaleOneValue > 0 ? scaleOneValue : 0;\n this.scaleTwoLevel = scaleTwoValue > 0 ? scaleTwoValue : 0;\n this.scaleThreeLevel = scaleThreeValue > 0 ? scaleTwoValue : 0;\n }\n}\n","<div class=\"rtsee-soundbar\">\n <div class=\"rtsee-soundbar-scale\">\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-one\"\n [style.height.%]=\"scaleOneLevel\"\n ></div>\n </div>\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-two\"\n [style.height.%]=\"scaleTwoLevel\"\n ></div>\n </div>\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-three\"\n [style.height.%]=\"scaleThreeLevel\"\n ></div>\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { RTSeePeerConnection } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-rtsee-peer',\n templateUrl: './rtsee-peer.component.html',\n styleUrls: ['./rtsee-peer.component.scss'],\n})\nexport class RtseePeerComponent implements AfterViewInit {\n intervalLength: number;\n noiceLevel: number;\n\n @ViewChild('audioOutput') audioOutput?: ElementRef;\n @ViewChild('videoOutput') videoOutput?: ElementRef;\n @Input() peer!: RTSeePeerConnection;\n\n constructor() {\n this.intervalLength = 1000;\n this.noiceLevel = 0;\n }\n\n ngAfterViewInit(): void {\n if (!this.audioOutput) {\n return;\n }\n this.peer.setAudioOutputElement(\n this.audioOutput.nativeElement as HTMLAudioElement\n );\n }\n}\n","<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","import { Component, Input } from '@angular/core';\nimport { RTSeeVideoChat } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-rtsee',\n templateUrl: './rtsee.component.html',\n styleUrls: ['./rtsee.component.scss'],\n})\nexport class RTSeeComponent {\n settingsViewEnabled: boolean;\n fullScreenModeEnabled: boolean;\n\n @Input() rtSee!: RTSeeVideoChat;\n constructor() {\n this.settingsViewEnabled = false;\n this.fullScreenModeEnabled = false;\n }\n\n toggleSettings() {\n this.settingsViewEnabled = !this.settingsViewEnabled;\n }\n\n toggleFullScreenMode() {\n this.fullScreenModeEnabled = !this.fullScreenModeEnabled;\n }\n}\n","<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","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DefaultImagesService {\n PROFILE = 'https://werf-assets.s3.amazonaws.com/default-profile-logo.png';\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { DefaultImagesService } from '../../../services/default-images.service';\n\n@Component({\n selector: 'ngx-messenger-header',\n templateUrl: './messenger-header.component.html',\n styleUrls: ['./messenger-header.component.css'],\n})\nexport class MessengerHeaderComponent {\n @Input() messenger!: RTSeeMessenger;\n constructor(public defaultImagesService: DefaultImagesService) {}\n\n call() {\n if (!this.messenger.openedChat?.id) {\n console.log('Unable to call, no opened chat!');\n return;\n }\n void this.messenger.initializeVideoCall(this.messenger.openedChat.id);\n }\n}\n","<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 ><span>←</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","import { Component, Input } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-chat-thumbnail',\n templateUrl: './chat-thumbnail.component.html',\n styleUrls: ['./chat-thumbnail.component.css'],\n})\nexport class ChatThumbnailComponent {\n @Input() chat!: RTSeeChat;\n @Input() messenger!: RTSeeMessenger;\n}\n","<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 }}</p>\n <p class=\"rtsee-chat-thumbnail-last-message\">{{chat.getLastSenderName()}} {{chat.getLastSentMessageText()}}</p>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-chats-list',\n templateUrl: './chats-list.component.html',\n styleUrls: ['./chats-list.component.css'],\n})\nexport class ChatsListComponent implements OnInit {\n @Input() messenger!: RTSeeMessenger;\n @Input() chats!: RTSeeChat[];\n\n ngOnInit(): void {\n // console.log(this.chats);\n }\n}\n","<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","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[widgetHost]',\n})\nexport class WidgetDirective {\n constructor(public viewContainerRef: ViewContainerRef) {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';\nimport { ICall } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-call-widget',\n templateUrl: './call-widget.component.html',\n styleUrls: ['./call-widget.component.css'],\n})\nexport class CallWidgetComponent implements OnInit {\n @Input() message!: RTSeeMessage<ICall>;\n @Input() messenger!: RTSeeMessenger;\n callerName?: string;\n\n ngOnInit(): void {\n if (this.messenger.clientId === this.message.data?.callerId) {\n this.callerName = 'You';\n } else {\n this.callerName = this.message.data?.caller?.name;\n }\n }\n\n joinCall() {\n if (!this.messenger || !this.message.data?.roomId) {\n console.log('No Room Id specified or no messenger!');\n return;\n }\n void this.messenger.joinCall(this.message.data.roomId);\n }\n}\n","<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","import { Injectable } from '@angular/core';\nimport { CallWidgetComponent } from '../components/rtsee-messenger/message-widgets/call-widget/call-widget.component';\n\nexport interface IMessageWidget {\n name: string;\n component: any;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WidgetsService {\n widgetsMap: IMessageWidget[] = [\n { name: 'rtsee-call', component: CallWidgetComponent },\n ];\n\n getWidgetComponentByName(name: string) {\n /* eslint-disable */\n const mapping = this.widgetsMap.find((e) => e.name === name);\n if (!mapping) {\n return null;\n }\n return mapping.component;\n /* eslint-enable */\n }\n}\n","import {\n AfterViewInit,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport {\n RTSeeChat,\n RTSeeChatMember,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { WidgetsService } from '../../../services/widgets.service';\nimport { WidgetDirective } from '../../../directives/widget.directive';\n\n@Component({\n selector: 'ngx-message',\n templateUrl: './message.component.html',\n styleUrls: ['./message.component.css'],\n})\nexport class MessageComponent implements AfterViewInit {\n @Input() chat!: RTSeeChat;\n @Input() message!: RTSeeMessage;\n @Input() member!: RTSeeChatMember<any>;\n @Input() messenger!: RTSeeMessenger;\n @ViewChild(WidgetDirective, { static: false }) widgetHost!: WidgetDirective;\n detach?: () => void;\n\n constructor(\n private widgetsService: WidgetsService,\n private componentFactoryResolver: ComponentFactoryResolver\n ) {}\n\n ngAfterViewInit() {\n /* eslint-disable */\n if (this.message.widget) {\n const widget = this.widgetsService.getWidgetComponentByName(\n this.message.widget\n );\n if (!widget) {\n return;\n }\n const viewContainerRef = this.widgetHost.viewContainerRef;\n viewContainerRef.clear();\n const componentToShow =\n this.componentFactoryResolver.resolveComponentFactory(widget);\n const componentRef: ComponentRef<typeof widget> =\n viewContainerRef.createComponent(componentToShow);\n componentRef.instance.message = this.message;\n componentRef.instance.messenger = this.messenger;\n componentRef.changeDetectorRef.detectChanges();\n }\n /* eslint-enable */\n }\n}\n","<div class=\"rtsee-messenger-message-container\" [ngClass]=\"{'rtsee-message-from-me': message.from !== chat.receiverId}\">\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>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-messages-list',\n templateUrl: './messages-list.component.html',\n styleUrls: ['./messages-list.component.css'],\n})\nexport class MessagesListComponent {\n @Input() chat!: RTSeeChat;\n @Input() messenger!: RTSeeMessenger;\n}\n","<div class=\"rtsee-messenger-messages-list\">\n <div class=\"rtsee-messenger-message-wrapper\" *ngFor=\"let message of chat.messages\">\n <ngx-message [message]=\"message\" [messenger]=\"messenger\" [chat]=\"chat\"></ngx-message>\n </div>\n</div>\n","import { Component, Input, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-chat-input',\n templateUrl: './chat-input.component.html',\n styleUrls: ['./chat-input.component.css'],\n})\nexport class ChatInputComponent {\n sendMessageForm: FormGroup = new FormGroup({\n /* eslint-disable */\n message: new FormControl('', Validators.required),\n /* eslint-enable */\n });\n\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n\n sendMessage() {\n const text = this.sendMessageForm.get('message')?.value as string;\n if (!text) {\n return;\n }\n this.chat.sendMessage(text);\n this.sendMessageForm.get('message')?.setValue('');\n }\n}\n","<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","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger, RTSeeChatEvents } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-chat',\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.css'],\n})\nexport class ChatComponent implements AfterViewInit, OnDestroy, OnInit {\n bindScrollFunction: () => void;\n @ViewChild('scrollBlock') scrollContainer!: ElementRef<HTMLDivElement>;\n @Input() chat!: RTSeeChat;\n @Input() messenger!: RTSeeMessenger;\n constructor() {\n this.bindScrollFunction = this.scrollToBottom.bind(this) as () => void;\n }\n\n ngAfterViewInit() {\n this.scrollToBottom();\n }\n\n onMessageSent() {\n this.scrollToBottom();\n }\n\n ngOnDestroy() {\n this.chat.off(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);\n }\n\n ngOnInit() {\n this.chat.on(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);\n }\n\n onScroll() {\n this.chat.loadRemoteMessages();\n console.log('Melia Loh');\n }\n\n scrollToBottom() {\n if (!this.scrollContainer?.nativeElement?.scrollHeight) {\n return;\n }\n\n try {\n this.scrollContainer.nativeElement.scrollTop =\n this.scrollContainer.nativeElement.scrollHeight;\n } catch (err) {\n console.log('Failed to Scroll');\n }\n }\n}\n","<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","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-messenger',\n templateUrl: './messenger.component.html',\n styleUrls: ['./messenger.component.scss'],\n})\nexport class MessengerComponent {\n @Input() messenger!: RTSeeMessenger;\n\n onScroll() {\n this.messenger.loadChats();\n }\n}\n","<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","import { Injectable } from '@angular/core';\n\nimport * as dayjs from 'dayjs';\nimport * as relativeTime from 'dayjs/plugin/relativeTime';\ndayjs.extend(relativeTime);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimeFormatHelperService {\n toAgo(time: Date): string {\n /* eslint-disable */\n return dayjs(time).fromNow() as string;\n /* eslint-enable */\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n RTSeeDashboardClient,\n RTSeeEventsDashboard,\n} from '@rtsee/events-manager';\nimport { TimeFormatHelperService } from '../../../../services/time-format-helper.service';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard-client-thumbnail',\n templateUrl: './rtsee-events-dashboard-client-thumbnail.component.html',\n styleUrls: ['./rtsee-events-dashboard-client-thumbnail.component.scss'],\n})\nexport class RtseeEventsDashboardClientThumbnailComponent implements OnInit {\n @Input() dashboard!: RTSeeEventsDashboard;\n @Input() client!: RTSeeDashboardClient;\n\n constructor(public timeFormatService: TimeFormatHelperService) {}\n\n ngOnInit(): void {\n console.log('client id', this.client.id);\n }\n\n openChat() {\n this.dashboard.openChat(this.client);\n }\n}\n","<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> </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","import { Component, Input } from '@angular/core';\nimport { RTSeeEventsDashboard } from '@rtsee/events-manager';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard',\n templateUrl: './rtsee-events-dashboard.component.html',\n styleUrls: ['./rtsee-events-dashboard.component.scss'],\n})\nexport class RtseeEventsDashboardComponent {\n @Input() eventsDashboard!: RTSeeEventsDashboard;\n}\n","<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","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-rtsee-peers-list',\n templateUrl: './rtsee-peers-list.component.html',\n styleUrls: ['./rtsee-peers-list.component.scss'],\n})\nexport class RtseePeersListComponent {}\n","<p>rtsee-peers-list works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard-client',\n templateUrl: './rtsee-events-dashboard-client.component.html',\n styleUrls: ['./rtsee-events-dashboard-client.component.css'],\n})\nexport class RtseeEventsDashboardClientComponent {}\n","<p>rtsee-events-dashboard-client works!</p>\n","import { NgModule } from '@angular/core';\nimport { RTSeeComponent } from './components/rtsee/rtsee.component';\nimport { RTSeeControlsComponent } from './components/rtsee/rtsee-controls/rtsee-controls.component';\nimport { CommonModule } from '@angular/common';\nimport { RtseePeerComponent } from './components/rtsee-peer/rtsee-peer.component';\nimport { RtseeSoundbarComponent } from './components/rtsee-soundbar/rtsee-soundbar.component';\nimport { RtseePeersListComponent } from './components/rtsee-peers-list/rtsee-peers-list.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RtseeSettingsComponent } from './components/rtsee-settings/rtsee-settings.component';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MessengerComponent } from './components/rtsee-messenger/messenger/messenger.component';\nimport { ChatComponent } from './components/rtsee-messenger/chat/chat.component';\nimport { MessageComponent } from './components/rtsee-messenger/message/message.component';\nimport { ChatsListComponent } from './components/rtsee-messenger/chats-list/chats-list.component';\nimport { MessagesListComponent } from './components/rtsee-messenger/messages-list/messages-list.component';\nimport { ChatThumbnailComponent } from './components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component';\nimport { ChatInputComponent } from './components/rtsee-messenger/chat-input/chat-input.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MessengerHeaderComponent } from './components/rtsee-messenger/messenger-header/messenger-header.component';\nimport { RtseeEventsDashboardComponent } from './components/rtsee-events-dashboard/rtsee-events-dashboard.component';\nimport { RtseeEventsDashboardClientComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component';\nimport { RtseeEventsDashboardClientThumbnailComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component';\nimport { WidgetDirective } from './directives/widget.directive';\nimport { CallWidgetComponent } from './components/rtsee-messenger/message-widgets/call-widget/call-widget.component';\nimport { AutosizeModule } from 'ngx-autosize';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\n\n@NgModule({\n declarations: [\n RTSeeComponent,\n RTSeeControlsComponent,\n RtseePeerComponent,\n RtseeSoundbarComponent,\n RtseePeersListComponent,\n RtseeSettingsComponent,\n MessengerComponent,\n ChatComponent,\n MessageComponent,\n ChatsListComponent,\n MessagesListComponent,\n ChatThumbnailComponent,\n ChatInputComponent,\n MessengerHeaderComponent,\n RtseeEventsDashboardComponent,\n RtseeEventsDashboardClientComponent,\n RtseeEventsDashboardClientThumbnailComponent,\n WidgetDirective,\n CallWidgetComponent,\n ],\n imports: [\n CommonModule,\n MatIconModule,\n MatButtonModule,\n MatSelectModule,\n BrowserAnimationsModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n AutosizeModule,\n InfiniteScrollModule,\n ],\n exports: [RTSeeComponent, MessengerComponent, RtseeEventsDashboardComponent],\n})\nexport class RTSeeModule {}\n","/*\n * Public API Surface of ngx\n */\n\nexport * from './lib/ngx.service';\nexport * from './lib/components/rtsee/rtsee-controls/rtsee-controls.component';\nexport * from './lib/components/rtsee/rtsee.component';\nexport * from './lib/components/rtsee-messenger/messenger/messenger.component';\nexport * from './lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component';\nexport * from './lib/ngx.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rtsee-ngx.js","sources":["../../../projects/ngx/src/lib/ngx.service.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-controls/rtsee-controls.component.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee-controls/rtsee-controls.component.html","../../../projects/ngx/src/lib/components/rtsee-settings/rtsee-settings.component.ts","../../../projects/ngx/src/lib/components/rtsee-settings/rtsee-settings.component.html","../../../projects/ngx/src/lib/components/rtsee-soundbar/rtsee-soundbar.component.ts","../../../projects/ngx/src/lib/components/rtsee-soundbar/rtsee-soundbar.component.html","../../../projects/ngx/src/lib/components/rtsee-peer/rtsee-peer.component.ts","../../../projects/ngx/src/lib/components/rtsee-peer/rtsee-peer.component.html","../../../projects/ngx/src/lib/components/rtsee/rtsee.component.ts","../../../projects/ngx/src/lib/components/rtsee/rtsee.component.html","../../../projects/ngx/src/lib/services/default-images.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger-header/messenger-header.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger-header/messenger-header.component.html","../../../projects/ngx/src/lib/services/time-format-helper.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chats-list/chats-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chats-list/chats-list.component.html","../../../projects/ngx/src/lib/directives/widget.directive.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message-widgets/call-widget/call-widget.component.html","../../../projects/ngx/src/lib/services/widgets.service.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/message.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/message/message.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/messages-list/messages-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messages-list/messages-list.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-input/chat-input.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat-input/chat-input.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/chat/chat.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/chat/chat.component.html","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger/messenger.component.ts","../../../projects/ngx/src/lib/components/rtsee-messenger/messenger/messenger.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component.html","../../../projects/ngx/src/lib/components/rtsee-peers-list/rtsee-peers-list.component.ts","../../../projects/ngx/src/lib/components/rtsee-peers-list/rtsee-peers-list.component.html","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.ts","../../../projects/ngx/src/lib/components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component.html","../../../projects/ngx/src/lib/ngx.module.ts","../../../projects/ngx/src/public-api.ts","../../../projects/ngx/src/rtsee-ngx.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxService {\n lol: string;\n constructor() {\n this.lol = 'lol';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeVideoChat } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-rtsee-controls',\n templateUrl: './rtsee-controls.component.html',\n styleUrls: ['./rtsee-controls.component.scss'],\n})\nexport class RTSeeControlsComponent {\n @Input() rtsee!: RTSeeVideoChat;\n @Input() fullScreenMode?: boolean;\n\n onPresentClicked() {\n return this.rtsee.isPresenter\n ? this.rtsee.stopScreenShare()\n : this.rtsee.startScreenShare();\n }\n}\n","<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","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeVideoChat } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-rtsee-settings',\n templateUrl: './rtsee-settings.component.html',\n styleUrls: ['./rtsee-settings.component.scss'],\n})\nexport class RtseeSettingsComponent implements OnInit {\n availableAudioInputDevices: MediaDeviceInfo[];\n availableVideoInputDevices: MediaDeviceInfo[];\n availableAudioOutputDevices: MediaDeviceInfo[];\n\n @Input() rtSee!: RTSeeVideoChat;\n @Input() fullScreenMode!: boolean;\n constructor() {\n this.availableAudioInputDevices = [];\n this.availableVideoInputDevices = [];\n this.availableAudioOutputDevices = [];\n }\n\n ngOnInit(): void {\n this.refreshSelectOptions();\n }\n\n refreshSelectOptions() {\n void this.rtSee.refreshMediaDevicesList();\n }\n\n setAudioInput(deviceId: string) {\n this.rtSee.setAudioInputDevice(deviceId);\n console.log(deviceId);\n }\n\n setAudioOutput(deviceId: string) {\n this.rtSee.setAudioOutputDevice(deviceId);\n }\n\n setVideoInput(deviceId: string) {\n this.rtSee.setVideoInputDevice(deviceId);\n }\n}\n","<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","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeePeerConnection } from '@rtsee/core';\nimport { interval } from 'rxjs';\n\n@Component({\n selector: 'ngx-rtsee-soundbar',\n templateUrl: './rtsee-soundbar.component.html',\n styleUrls: ['./rtsee-soundbar.component.scss'],\n})\nexport class RtseeSoundbarComponent implements OnInit {\n intervalLength: number;\n noiceLevel: number;\n scaleOneLevel: number;\n scaleTwoLevel: number;\n scaleThreeLevel: number;\n\n @Input() peer!: RTSeePeerConnection;\n constructor() {\n this.intervalLength = 1000;\n this.noiceLevel = 0;\n this.scaleOneLevel = 0;\n this.scaleTwoLevel = 0;\n this.scaleThreeLevel = 0;\n }\n\n ngOnInit(): void {\n this.startSoundMeterListening();\n }\n\n startSoundMeterListening() {\n const step = interval(1000 / 10);\n step.subscribe(() => {\n if (!this.peer.soundMeter || !this.peer.soundMeter.level) {\n this.noiceLevel = 0;\n } else {\n this.noiceLevel = this.peer.soundMeter?.level * 100 || 0;\n }\n\n this.setSoundMeterHeights();\n });\n }\n\n setSoundMeterHeights() {\n const ZERO_LEVEL = 25;\n const SCALE_STEP = 25;\n const SCALE_ONE_TOP = ZERO_LEVEL + SCALE_STEP;\n const SCALE_TWO_TOP = SCALE_ONE_TOP + SCALE_STEP;\n\n if (!this.peer || !this.peer.soundMeter || this.noiceLevel < ZERO_LEVEL) {\n this.scaleOneLevel = 0;\n this.scaleTwoLevel = 0;\n this.scaleThreeLevel = 0;\n }\n\n const scaleOneValue = ((this.noiceLevel - ZERO_LEVEL) / SCALE_STEP) * 100;\n const scaleTwoValue =\n ((this.noiceLevel - SCALE_ONE_TOP) / SCALE_STEP) * 100;\n const scaleThreeValue =\n ((this.noiceLevel - SCALE_TWO_TOP) / SCALE_STEP) * 100;\n\n this.scaleOneLevel = scaleOneValue > 0 ? scaleOneValue : 0;\n this.scaleTwoLevel = scaleTwoValue > 0 ? scaleTwoValue : 0;\n this.scaleThreeLevel = scaleThreeValue > 0 ? scaleTwoValue : 0;\n }\n}\n","<div class=\"rtsee-soundbar\">\n <div class=\"rtsee-soundbar-scale\">\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-one\"\n [style.height.%]=\"scaleOneLevel\"\n ></div>\n </div>\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-two\"\n [style.height.%]=\"scaleTwoLevel\"\n ></div>\n </div>\n <div class=\"rtsee-soundbar-scale-item\">\n <div class=\"rtsee-soundbar-scale-item-level rtsee-soundbar-scale-item-level-three\"\n [style.height.%]=\"scaleThreeLevel\"\n ></div>\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { RTSeePeerConnection } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-rtsee-peer',\n templateUrl: './rtsee-peer.component.html',\n styleUrls: ['./rtsee-peer.component.scss'],\n})\nexport class RtseePeerComponent implements AfterViewInit {\n intervalLength: number;\n noiceLevel: number;\n\n @ViewChild('audioOutput') audioOutput?: ElementRef;\n @ViewChild('videoOutput') videoOutput?: ElementRef;\n @Input() peer!: RTSeePeerConnection;\n\n constructor() {\n this.intervalLength = 1000;\n this.noiceLevel = 0;\n }\n\n ngAfterViewInit(): void {\n if (!this.audioOutput) {\n return;\n }\n this.peer.setAudioOutputElement(\n this.audioOutput.nativeElement as HTMLAudioElement\n );\n }\n}\n","<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","import { Component, Input } from '@angular/core';\nimport { RTSeeVideoChat } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-rtsee',\n templateUrl: './rtsee.component.html',\n styleUrls: ['./rtsee.component.scss'],\n})\nexport class RTSeeComponent {\n settingsViewEnabled: boolean;\n fullScreenModeEnabled: boolean;\n\n @Input() rtSee!: RTSeeVideoChat;\n constructor() {\n this.settingsViewEnabled = false;\n this.fullScreenModeEnabled = false;\n }\n\n toggleSettings() {\n this.settingsViewEnabled = !this.settingsViewEnabled;\n }\n\n toggleFullScreenMode() {\n this.fullScreenModeEnabled = !this.fullScreenModeEnabled;\n }\n}\n","<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","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DefaultImagesService {\n PROFILE = 'https://werf-assets.s3.amazonaws.com/default-profile-logo.png';\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\nimport { DefaultImagesService } from '../../../services/default-images.service';\n\n@Component({\n selector: 'ngx-messenger-header',\n templateUrl: './messenger-header.component.html',\n styleUrls: ['./messenger-header.component.css'],\n})\nexport class MessengerHeaderComponent {\n @Input() messenger!: RTSeeMessenger;\n constructor(public defaultImagesService: DefaultImagesService) {}\n\n call() {\n if (!this.messenger.openedChat) {\n return;\n }\n void this.messenger.initializeVideoCall(this.messenger.openedChat);\n }\n}\n","<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>←</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","import { Injectable } from '@angular/core';\n\nimport * as dayjs from 'dayjs';\nimport * as relativeTime from 'dayjs/plugin/relativeTime';\ndayjs.extend(relativeTime);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimeFormatHelperService {\n toAgo(time: Date): string {\n /* eslint-disable */\n return dayjs(time).fromNow() as string;\n /* eslint-enable */\n }\n toDayOfWeek(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('ddd');\n /* eslint-enable */\n }\n toTime(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('HH:mm') as string;\n /* eslint-enable */\n }\n toDate(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('D MMMM') as string;\n /* eslint-enable */\n }\n toDateNumeral(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('DD.MM');\n /* eslint-enable */\n }\n\n toDateNumeralWithYear(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('DD.MM.YY');\n /* eslint-enable */\n }\n\n toDateWithYear(time: Date): string {\n /* eslint-disable */\n return dayjs(time).format('MMMM D, YYYY ') as string;\n /* eslint-enable */\n }\n\n formatDate(time: Date) {\n const today = new Date();\n const dayMs = 1000 * 60 * 60 * 24;\n const twoDays = dayMs * 2;\n\n if (!time) {\n return '';\n }\n\n if (\n today.getTime() - time.getTime() < dayMs &&\n today.getDay() === time.getDay()\n ) {\n return 'Today';\n }\n\n if (\n today.getTime() - time.getTime() < twoDays &&\n today.getTime() - time.getTime() > dayMs &&\n today.getDay() !== time.getDay()\n ) {\n return 'Yesterday';\n }\n\n if (today.getFullYear() === time.getFullYear()) {\n return this.toDate(time);\n }\n\n return this.toDateWithYear(time);\n }\n\n formatTimeOrDate(time: Date) {\n if (!time) {\n return '';\n }\n\n const today = new Date();\n const dayMs = 1000 * 60 * 60 * 24;\n\n if (\n today.getTime() - time.getTime() < dayMs &&\n today.getDay() === time.getDay()\n ) {\n return this.toTime(time);\n }\n\n if (\n today.getTime() - time.getTime() > dayMs &&\n today.getTime() - time.getTime() < dayMs * 7\n ) {\n return this.toDayOfWeek(time);\n }\n\n if (\n today.getTime() - time.getTime() > dayMs * 7 &&\n today.getFullYear() === time.getFullYear()\n ) {\n return this.toDateNumeral(time);\n }\n\n return this.toDateNumeralWithYear(time);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\n\n@Component({\n selector: 'ngx-chat-thumbnail',\n templateUrl: './chat-thumbnail.component.html',\n styleUrls: ['./chat-thumbnail.component.css'],\n})\nexport class ChatThumbnailComponent {\n @Input() chat!: RTSeeChat;\n @Input() messenger!: RTSeeMessenger;\n\n constructor(public timeFormatService: TimeFormatHelperService) {}\n}\n","<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","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-chats-list',\n templateUrl: './chats-list.component.html',\n styleUrls: ['./chats-list.component.css'],\n})\nexport class ChatsListComponent implements OnInit {\n @Input() messenger!: RTSeeMessenger;\n @Input() chats!: RTSeeChat[];\n\n ngOnInit(): void {\n // console.log(this.chats);\n }\n}\n","<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","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[widgetHost]',\n})\nexport class WidgetDirective {\n constructor(public viewContainerRef: ViewContainerRef) {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';\nimport { IRTSeeCall } from '@rtsee/core';\n\n@Component({\n selector: 'ngx-call-widget',\n templateUrl: './call-widget.component.html',\n styleUrls: ['./call-widget.component.css'],\n})\nexport class CallWidgetComponent implements OnInit {\n @Input() message!: RTSeeMessage<IRTSeeCall>;\n @Input() messenger!: RTSeeMessenger;\n callerName?: string;\n\n ngOnInit(): void {\n if (this.messenger.clientId === this.message.data?.callerId) {\n this.callerName = 'You';\n } else {\n this.callerName = this.message.data?.caller?.name;\n }\n }\n\n joinCall() {\n if (!this.messenger || !this.message.data?.roomId) {\n console.log('No Room Id specified or no messenger!');\n return;\n }\n void this.messenger.joinCall(this.message.data.roomId);\n }\n}\n","<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","import { Injectable } from '@angular/core';\nimport { CallWidgetComponent } from '../components/rtsee-messenger/message-widgets/call-widget/call-widget.component';\n\nexport interface IMessageWidget {\n name: string;\n component: any;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WidgetsService {\n widgetsMap: IMessageWidget[] = [\n { name: 'rtsee-call', component: CallWidgetComponent },\n ];\n\n getWidgetComponentByName(name: string) {\n /* eslint-disable */\n const mapping = this.widgetsMap.find((e) => e.name === name);\n if (!mapping) {\n return null;\n }\n return mapping.component;\n /* eslint-enable */\n }\n}\n","import {\n AfterViewInit,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport {\n RTSeeChat,\n RTSeeChatMember,\n RTSeeMessage,\n RTSeeMessenger,\n} from '@rtsee/messenger';\nimport { WidgetsService } from '../../../services/widgets.service';\nimport { WidgetDirective } from '../../../directives/widget.directive';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\n\n@Component({\n selector: 'ngx-message',\n templateUrl: './message.component.html',\n styleUrls: ['./message.component.css'],\n})\nexport class MessageComponent implements AfterViewInit {\n @Input() chat!: RTSeeChat;\n @Input() message!: RTSeeMessage;\n @Input() member!: RTSeeChatMember<any>;\n @Input() messenger!: RTSeeMessenger;\n @ViewChild(WidgetDirective, { static: false }) widgetHost!: WidgetDirective;\n constructor(\n private widgetsService: WidgetsService,\n private componentFactoryResolver: ComponentFactoryResolver,\n public timeFormatService: TimeFormatHelperService\n ) {}\n\n ngAfterViewInit() {\n /* eslint-disable */\n if (this.message.widget) {\n const widget = this.widgetsService.getWidgetComponentByName(\n this.message.widget\n );\n if (!widget) {\n return;\n }\n const viewContainerRef = this.widgetHost.viewContainerRef;\n viewContainerRef.clear();\n const componentToShow =\n this.componentFactoryResolver.resolveComponentFactory(widget);\n const componentRef: ComponentRef<typeof widget> =\n viewContainerRef.createComponent(componentToShow);\n componentRef.instance.message = this.message;\n componentRef.instance.messenger = this.messenger;\n componentRef.changeDetectorRef.detectChanges();\n }\n /* eslint-enable */\n }\n}\n","<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","import { Component, Input } from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger, RTSeeMessage } from '@rtsee/messenger';\nimport { TimeFormatHelperService } from '../../../services/time-format-helper.service';\n\n@Component({\n selector: 'ngx-messages-list',\n templateUrl: './messages-list.component.html',\n styleUrls: ['./messages-list.component.css'],\n})\nexport class MessagesListComponent {\n @Input() chat!: RTSeeChat;\n @Input() messenger!: RTSeeMessenger;\n\n constructor(private timeFormatService: TimeFormatHelperService) {}\n\n hasDateChanged(currentMessage: RTSeeMessage, index: number): boolean {\n const previousMessage = this.chat.messages[index - 1];\n if (!previousMessage) {\n return true;\n }\n if (!previousMessage.createdAt || !currentMessage.createdAt) {\n return false;\n }\n return (\n previousMessage.createdAt.getDay() !== currentMessage.createdAt.getDay()\n );\n }\n\n formatDate(message: RTSeeMessage) {\n return this.timeFormatService.formatDate(message.createdAt);\n }\n}\n","<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","import { Component, Input, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-chat-input',\n templateUrl: './chat-input.component.html',\n styleUrls: ['./chat-input.component.css'],\n})\nexport class ChatInputComponent {\n sendMessageForm: FormGroup = new FormGroup({\n /* eslint-disable */\n message: new FormControl('', Validators.required),\n /* eslint-enable */\n });\n\n @Input() messenger!: RTSeeMessenger;\n @Input() chat!: RTSeeChat;\n\n sendMessage() {\n const text = this.sendMessageForm.get('message')?.value as string;\n if (!text) {\n return;\n }\n this.chat.sendMessage(text);\n this.sendMessageForm.get('message')?.setValue('');\n }\n}\n","<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","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { RTSeeChat, RTSeeMessenger, RTSeeChatEvents } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-chat',\n templateUrl: './chat.component.html',\n styleUrls: ['./chat.component.css'],\n})\nexport class ChatComponent implements AfterViewInit, OnDestroy, OnInit {\n bindScrollFunction: () => void;\n @ViewChild('scrollBlock') scrollContainer!: ElementRef<HTMLDivElement>;\n @Input() chat!: RTSeeChat;\n @Input() messenger!: RTSeeMessenger;\n constructor() {\n this.bindScrollFunction = this.scrollToBottom.bind(this) as () => void;\n }\n\n ngAfterViewInit() {\n this.scrollToBottom();\n }\n\n onMessageSent() {\n this.scrollToBottom();\n }\n\n ngOnDestroy() {\n this.chat.off(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);\n }\n\n ngOnInit() {\n this.chat.on(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);\n }\n\n onScroll() {\n this.chat.loadRemoteMessages();\n console.log('Melia Loh');\n }\n\n scrollToBottom() {\n if (!this.scrollContainer?.nativeElement?.scrollHeight) {\n return;\n }\n\n try {\n this.scrollContainer.nativeElement.scrollTop =\n this.scrollContainer.nativeElement.scrollHeight;\n } catch (err) {\n console.log('Failed to Scroll');\n }\n }\n}\n","<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","import { Component, Input } from '@angular/core';\nimport { RTSeeMessenger } from '@rtsee/messenger';\n\n@Component({\n selector: 'ngx-messenger',\n templateUrl: './messenger.component.html',\n styleUrls: ['./messenger.component.scss'],\n})\nexport class MessengerComponent {\n @Input() messenger!: RTSeeMessenger;\n\n onScroll() {\n this.messenger.loadChats();\n }\n}\n","<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","import { Component, Input, OnInit } from '@angular/core';\nimport {\n RTSeeDashboardClient,\n RTSeeEventsDashboard,\n} from '@rtsee/events-manager';\nimport { TimeFormatHelperService } from '../../../../services/time-format-helper.service';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard-client-thumbnail',\n templateUrl: './rtsee-events-dashboard-client-thumbnail.component.html',\n styleUrls: ['./rtsee-events-dashboard-client-thumbnail.component.scss'],\n})\nexport class RtseeEventsDashboardClientThumbnailComponent implements OnInit {\n @Input() dashboard!: RTSeeEventsDashboard;\n @Input() client!: RTSeeDashboardClient;\n\n constructor(public timeFormatService: TimeFormatHelperService) {}\n\n ngOnInit(): void {\n console.log('client id', this.client.id);\n }\n\n openChat() {\n this.dashboard.openChat(this.client);\n }\n}\n","<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> </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","import { Component, Input } from '@angular/core';\nimport { RTSeeEventsDashboard } from '@rtsee/events-manager';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard',\n templateUrl: './rtsee-events-dashboard.component.html',\n styleUrls: ['./rtsee-events-dashboard.component.scss'],\n})\nexport class RtseeEventsDashboardComponent {\n @Input() eventsDashboard!: RTSeeEventsDashboard;\n}\n","<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","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-rtsee-peers-list',\n templateUrl: './rtsee-peers-list.component.html',\n styleUrls: ['./rtsee-peers-list.component.scss'],\n})\nexport class RtseePeersListComponent {}\n","<p>rtsee-peers-list works!</p>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-rtsee-events-dashboard-client',\n templateUrl: './rtsee-events-dashboard-client.component.html',\n styleUrls: ['./rtsee-events-dashboard-client.component.css'],\n})\nexport class RtseeEventsDashboardClientComponent {}\n","<p>rtsee-events-dashboard-client works!</p>\n","import { NgModule } from '@angular/core';\nimport { RTSeeComponent } from './components/rtsee/rtsee.component';\nimport { RTSeeControlsComponent } from './components/rtsee/rtsee-controls/rtsee-controls.component';\nimport { CommonModule } from '@angular/common';\nimport { RtseePeerComponent } from './components/rtsee-peer/rtsee-peer.component';\nimport { RtseeSoundbarComponent } from './components/rtsee-soundbar/rtsee-soundbar.component';\nimport { RtseePeersListComponent } from './components/rtsee-peers-list/rtsee-peers-list.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RtseeSettingsComponent } from './components/rtsee-settings/rtsee-settings.component';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MessengerComponent } from './components/rtsee-messenger/messenger/messenger.component';\nimport { ChatComponent } from './components/rtsee-messenger/chat/chat.component';\nimport { MessageComponent } from './components/rtsee-messenger/message/message.component';\nimport { ChatsListComponent } from './components/rtsee-messenger/chats-list/chats-list.component';\nimport { MessagesListComponent } from './components/rtsee-messenger/messages-list/messages-list.component';\nimport { ChatThumbnailComponent } from './components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component';\nimport { ChatInputComponent } from './components/rtsee-messenger/chat-input/chat-input.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MessengerHeaderComponent } from './components/rtsee-messenger/messenger-header/messenger-header.component';\nimport { RtseeEventsDashboardComponent } from './components/rtsee-events-dashboard/rtsee-events-dashboard.component';\nimport { RtseeEventsDashboardClientComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-client/rtsee-events-dashboard-client.component';\nimport { RtseeEventsDashboardClientThumbnailComponent } from './components/rtsee-events-dashboard/components/rtsee-events-dashboard-client-thumbnail/rtsee-events-dashboard-client-thumbnail.component';\nimport { WidgetDirective } from './directives/widget.directive';\nimport { CallWidgetComponent } from './components/rtsee-messenger/message-widgets/call-widget/call-widget.component';\nimport { AutosizeModule } from 'ngx-autosize';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\n\n@NgModule({\n declarations: [\n RTSeeComponent,\n RTSeeControlsComponent,\n RtseePeerComponent,\n RtseeSoundbarComponent,\n RtseePeersListComponent,\n RtseeSettingsComponent,\n MessengerComponent,\n ChatComponent,\n MessageComponent,\n ChatsListComponent,\n MessagesListComponent,\n ChatThumbnailComponent,\n ChatInputComponent,\n MessengerHeaderComponent,\n RtseeEventsDashboardComponent,\n RtseeEventsDashboardClientComponent,\n RtseeEventsDashboardClientThumbnailComponent,\n WidgetDirective,\n CallWidgetComponent,\n ],\n imports: [\n CommonModule,\n MatIconModule,\n MatButtonModule,\n MatSelectModule,\n BrowserAnimationsModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n AutosizeModule,\n InfiniteScrollModule,\n ],\n exports: [RTSeeComponent, MessengerComponent, RtseeEventsDashboardComponent],\n})\nexport class RTSeeModule {}\n","/*\n * Public API Surface of ngx\n */\n\nexport * from './lib/ngx.service';\nexport * from './lib/components/rtsee/rtsee-controls/rtsee-controls.component';\nexport * from './lib/components/rtsee/rtsee.component';\nexport * from './lib/components/rtsee-messenger/messenger/messenger.component';\nexport * from './lib/components/rtsee-events-dashboard/rtsee-events-dashboard.component';\nexport * from './lib/ngx.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;MAKa,UAAU;IAErB;QACE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;KAClB;;uGAJU,UAAU;2GAAV,UAAU,cAFT,MAAM;2FAEP,UAAU;kBAHtB,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;MCIY,sBAAsB;IAIjC,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;cACzB,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;cAC5B,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;KACnC;;mHARU,sBAAsB;uGAAtB,sBAAsB,wHCRnC,0oEA0DA;2FDlDa,sBAAsB;kBALlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,WAAW,EAAE,iCAAiC;oBAC9C,SAAS,EAAE,CAAC,iCAAiC,CAAC;iBAC/C;8BAEU,KAAK;sBAAb,KAAK;gBACG,cAAc;sBAAtB,KAAK;;;MEFK,sBAAsB;IAOjC;QACE,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC;KACvC;IAED,QAAQ;QACN,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAED,oBAAoB;QAClB,KAAK,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;KAC3C;IAED,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KACvB;IAED,cAAc,CAAC,QAAgB;QAC7B,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAC3C;IAED,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;KAC1C;;mHAhCU,sBAAsB;uGAAtB,sBAAsB,wHCRnC,g8CA4BA;2FDpBa,sBAAsB;kBALlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,WAAW,EAAE,iCAAiC;oBAC9C,SAAS,EAAE,CAAC,iCAAiC,CAAC;iBAC/C;0EAMU,KAAK;sBAAb,KAAK;gBACG,cAAc;sBAAtB,KAAK;;;MELK,sBAAsB;IAQjC;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;KAC1B;IAED,QAAQ;QACN,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;IAED,wBAAwB;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC;;YACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBACxD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;aACrB;iBAAM;gBACL,IAAI,CAAC,UAAU,GAAG,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,UAAU,0CAAE,KAAK,IAAG,GAAG,IAAI,CAAC,CAAC;aAC1D;YAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B,CAAC,CAAC;KACJ;IAED,oBAAoB;QAClB,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;QAC9C,MAAM,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;QAEjD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE;YACvE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;SAC1B;QAED,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,UAAU,IAAI,GAAG,CAAC;QAC1E,MAAM,aAAa,GACjB,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,aAAa,IAAI,UAAU,IAAI,GAAG,CAAC;QACzD,MAAM,eAAe,GACnB,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,aAAa,IAAI,UAAU,IAAI,GAAG,CAAC;QAEzD,IAAI,CAAC,aAAa,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,eAAe,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;KAChE;;mHAtDU,sBAAsB;uGAAtB,sBAAsB,oFCTnC,ytBAmBA;2FDVa,sBAAsB;kBALlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,WAAW,EAAE,iCAAiC;oBAC9C,SAAS,EAAE,CAAC,iCAAiC,CAAC;iBAC/C;0EAQU,IAAI;sBAAZ,KAAK;;;MEFK,kBAAkB;IAQ7B;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;KACrB;IAED,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAC7B,IAAI,CAAC,WAAW,CAAC,aAAiC,CACnD,CAAC;KACH;;+GApBU,kBAAkB;mGAAlB,kBAAkB,yRCd/B,4hCA4BA;2FDda,kBAAkB;kBAL9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,WAAW,EAAE,6BAA6B;oBAC1C,SAAS,EAAE,CAAC,6BAA6B,CAAC;iBAC3C;0EAK2B,WAAW;sBAApC,SAAS;uBAAC,aAAa;gBACE,WAAW;sBAApC,SAAS;uBAAC,aAAa;gBACf,IAAI;sBAAZ,KAAK;;;MEZK,cAAc;IAKzB;QACE,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;KACpC;IAED,cAAc;QACZ,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;KACtD;IAED,oBAAoB;QAClB,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC;KAC1D;;2GAhBU,cAAc;+FAAd,cAAc,6ECR3B,s5FAsEA;2FD9Da,cAAc;kBAL1B,SAAS;mBAAC;oBACT,QAAQ,EAAE,WAAW;oBACrB,WAAW,EAAE,wBAAwB;oBACrC,SAAS,EAAE,CAAC,wBAAwB,CAAC;iBACtC;0EAKU,KAAK;sBAAb,KAAK;;;MEPK,oBAAoB;IAHjC;QAIE,YAAO,GAAG,+DAA+D,CAAC;KAC3E;;iHAFY,oBAAoB;qHAApB,oBAAoB,cAFnB,MAAM;2FAEP,oBAAoB;kBAHhC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;MCKY,wBAAwB;IAEnC,YAAmB,oBAA0C;QAA1C,yBAAoB,GAApB,oBAAoB,CAAsB;KAAI;IAEjE,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YAC9B,OAAO;SACR;QACD,KAAK,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KACpE;;qHATU,wBAAwB;yGAAxB,wBAAwB,gGCTrC,42CAoCA;2FD3Ba,wBAAwB;kBALpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,sBAAsB;oBAChC,WAAW,EAAE,mCAAmC;oBAChD,SAAS,EAAE,CAAC,kCAAkC,CAAC;iBAChD;wGAEU,SAAS;sBAAjB,KAAK;;;AENR,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;MAKd,uBAAuB;IAClC,KAAK,CAAC,IAAU;;QAEd,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAY,CAAC;;KAExC;IACD,WAAW,CAAC,IAAU;;QAEpB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;KAElC;IACD,MAAM,CAAC,IAAU;;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAW,CAAC;;KAE9C;IACD,MAAM,CAAC,IAAU;;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAW,CAAC;;KAE/C;IACD,aAAa,CAAC,IAAU;;QAEtB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;KAEpC;IAED,qBAAqB,CAAC,IAAU;;QAE9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;;KAEvC;IAED,cAAc,CAAC,IAAU;;QAEvB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,eAAe,CAAW,CAAC;;KAEtD;IAED,UAAU,CAAC,IAAU;QACnB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;QAE1B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,EAAE,CAAC;SACX;QAED,IACE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK;YACxC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,EAChC;YACA,OAAO,OAAO,CAAC;SAChB;QAED,IACE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO;YAC1C,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK;YACxC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,EAChC;YACA,OAAO,WAAW,CAAC;SACpB;QAED,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;YAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAClC;IAED,gBAAgB,CAAC,IAAU;QACzB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,EAAE,CAAC;SACX;QAED,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAElC,IACE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK;YACxC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,EAChC;YACA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,IACE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK;YACxC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC,EAC5C;YACA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAC/B;QAED,IACE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC;YAC5C,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,EAC1C;YACA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACjC;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KACzC;;oHApGU,uBAAuB;wHAAvB,uBAAuB,cAFtB,MAAM;2FAEP,uBAAuB;kBAHnC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;MCCY,sBAAsB;IAIjC,YAAmB,iBAA0C;QAA1C,sBAAiB,GAAjB,iBAAiB,CAAyB;KAAI;;mHAJtD,sBAAsB;uGAAtB,sBAAsB,4GCTnC,+wBAeA;2FDNa,sBAAsB;kBALlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,WAAW,EAAE,iCAAiC;oBAC9C,SAAS,EAAE,CAAC,gCAAgC,CAAC;iBAC9C;2GAEU,IAAI;sBAAZ,KAAK;gBACG,SAAS;sBAAjB,KAAK;;;MEHK,kBAAkB;IAI7B,QAAQ;;KAEP;;+GANU,kBAAkB;mGAAlB,kBAAkB,0GCR/B,gSAMA;2FDEa,kBAAkB;kBAL9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,WAAW,EAAE,6BAA6B;oBAC1C,SAAS,EAAE,CAAC,4BAA4B,CAAC;iBAC1C;8BAEU,SAAS;sBAAjB,KAAK;gBACG,KAAK;sBAAb,KAAK;;;MELK,eAAe;IAC1B,YAAmB,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;KAAI;;4GAD9C,eAAe;gGAAf,eAAe;2FAAf,eAAe;kBAH3B,SAAS;mBAAC;oBACT,QAAQ,EAAE,cAAc;iBACzB;;;MCKY,mBAAmB;IAK9B,QAAQ;;QACN,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,MAAK,MAAA,IAAI,CAAC,OAAO,CAAC,IAAI,0CAAE,QAAQ,CAAA,EAAE;YAC3D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;SACzB;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,MAAA,MAAA,IAAI,CAAC,OAAO,CAAC,IAAI,0CAAE,MAAM,0CAAE,IAAI,CAAC;SACnD;KACF;IAED,QAAQ;;QACN,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAC,MAAA,IAAI,CAAC,OAAO,CAAC,IAAI,0CAAE,MAAM,CAAA,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO;SACR;QACD,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACxD;;gHAnBU,mBAAmB;oGAAnB,mBAAmB,+GCThC,8RAMA;2FDGa,mBAAmB;kBAL/B,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,WAAW,EAAE,8BAA8B;oBAC3C,SAAS,EAAE,CAAC,6BAA6B,CAAC;iBAC3C;8BAEU,OAAO;sBAAf,KAAK;gBACG,SAAS;sBAAjB,KAAK;;;MEAK,cAAc;IAH3B;QAIE,eAAU,GAAqB;YAC7B,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE;SACvD,CAAC;KAWH;IATC,wBAAwB,CAAC,IAAY;;QAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,IAAI,CAAC;SACb;QACD,OAAO,OAAO,CAAC,SAAS,CAAC;;KAE1B;;2GAbU,cAAc;+GAAd,cAAc,cAFb,MAAM;2FAEP,cAAc;kBAH1B,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;MCaY,gBAAgB;IAM3B,YACU,cAA8B,EAC9B,wBAAkD,EACnD,iBAA0C;QAFzC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,6BAAwB,GAAxB,wBAAwB,CAA0B;QACnD,sBAAiB,GAAjB,iBAAiB,CAAyB;KAC/C;IAEJ,eAAe;;QAEb,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,wBAAwB,CACzD,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;YACF,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;aACR;YACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAC1D,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,eAAe,GACnB,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,YAAY,GAChB,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YACpD,YAAY,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7C,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjD,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SAChD;;KAEF;;6GAhCU,gBAAgB;iGAAhB,gBAAgB,uLAKhB,eAAe,gDC5B5B,i6BAqBA;2FDEa,gBAAgB;kBAL5B,SAAS;mBAAC;oBACT,QAAQ,EAAE,aAAa;oBACvB,WAAW,EAAE,0BAA0B;oBACvC,SAAS,EAAE,CAAC,yBAAyB,CAAC;iBACvC;4KAEU,IAAI;sBAAZ,KAAK;gBACG,OAAO;sBAAf,KAAK;gBACG,MAAM;sBAAd,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACyC,UAAU;sBAAxD,SAAS;uBAAC,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MEnBlC,qBAAqB;IAIhC,YAAoB,iBAA0C;QAA1C,sBAAiB,GAAjB,iBAAiB,CAAyB;KAAI;IAElE,cAAc,CAAC,cAA4B,EAAE,KAAa;QACxD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,eAAe,CAAC,SAAS,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;YAC3D,OAAO,KAAK,CAAC;SACd;QACD,QACE,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,EACxE;KACH;IAED,UAAU,CAAC,OAAqB;QAC9B,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KAC7D;;kHArBU,qBAAqB;sGAArB,qBAAqB,2GCTlC,oWAOA;2FDEa,qBAAqB;kBALjC,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,WAAW,EAAE,gCAAgC;oBAC7C,SAAS,EAAE,CAAC,+BAA+B,CAAC;iBAC7C;2GAEU,IAAI;sBAAZ,KAAK;gBACG,SAAS;sBAAjB,KAAK;;;MEFK,kBAAkB;IAL/B;QAME,oBAAe,GAAc,IAAI,SAAS,CAAC;;YAEzC,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;;SAElD,CAAC,CAAC;KAaJ;IARC,WAAW;;QACT,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,KAAe,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;KACnD;;+GAjBU,kBAAkB;mGAAlB,kBAAkB,wGCT/B,uiBAmBA;2FDVa,kBAAkB;kBAL9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,WAAW,EAAE,6BAA6B;oBAC1C,SAAS,EAAE,CAAC,4BAA4B,CAAC;iBAC1C;8BAQU,SAAS;sBAAjB,KAAK;gBACG,IAAI;sBAAZ,KAAK;;;MEDK,aAAa;IAKxB;QACE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAe,CAAC;KACxE;IAED,eAAe;QACb,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,aAAa;QACX,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACvE;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACtE;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KAC1B;IAED,cAAc;;QACZ,IAAI,EAAC,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,aAAa,0CAAE,YAAY,CAAA,EAAE;YACtD,OAAO;SACR;QAED,IAAI;YACF,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS;gBAC1C,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,CAAC;SACnD;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;SACjC;KACF;;0GAzCU,aAAa;8FAAb,aAAa,kNChB1B,ogBAeA;2FDCa,aAAa;kBALzB,SAAS;mBAAC;oBACT,QAAQ,EAAE,UAAU;oBACpB,WAAW,EAAE,uBAAuB;oBACpC,SAAS,EAAE,CAAC,sBAAsB,CAAC;iBACpC;0EAG2B,eAAe;sBAAxC,SAAS;uBAAC,aAAa;gBACf,IAAI;sBAAZ,KAAK;gBACG,SAAS;sBAAjB,KAAK;;;MEZK,kBAAkB;IAG7B,QAAQ;QACN,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;KAC5B;;+GALU,kBAAkB;mGAAlB,kBAAkB,yFCR/B,qtBAkBA;2FDVa,kBAAkB;kBAL9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,eAAe;oBACzB,WAAW,EAAE,4BAA4B;oBACzC,SAAS,EAAE,CAAC,4BAA4B,CAAC;iBAC1C;8BAEU,SAAS;sBAAjB,KAAK;;;MEGK,4CAA4C;IAIvD,YAAmB,iBAA0C;QAA1C,sBAAiB,GAAjB,iBAAiB,CAAyB;KAAI;IAEjE,QAAQ;QACN,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC1C;IAED,QAAQ;QACN,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACtC;;yIAZU,4CAA4C;6HAA5C,4CAA4C,yICZzD,ogCAoBA;2FDRa,4CAA4C;kBALxD,SAAS;mBAAC;oBACT,QAAQ,EAAE,6CAA6C;oBACvD,WAAW,EAAE,0DAA0D;oBACvE,SAAS,EAAE,CAAC,0DAA0D,CAAC;iBACxE;2GAEU,SAAS;sBAAjB,KAAK;gBACG,MAAM;sBAAd,KAAK;;;MENK,6BAA6B;;0HAA7B,6BAA6B;8GAA7B,6BAA6B,kHCR1C,8fAYA;2FDJa,6BAA6B;kBALzC,SAAS;mBAAC;oBACT,QAAQ,EAAE,4BAA4B;oBACtC,WAAW,EAAE,yCAAyC;oBACtD,SAAS,EAAE,CAAC,yCAAyC,CAAC;iBACvD;8BAEU,eAAe;sBAAvB,KAAK;;;MEFK,uBAAuB;;oHAAvB,uBAAuB;wGAAvB,uBAAuB,4DCPpC,kCACA;2FDMa,uBAAuB;kBALnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,sBAAsB;oBAChC,WAAW,EAAE,mCAAmC;oBAChD,SAAS,EAAE,CAAC,mCAAmC,CAAC;iBACjD;;;MECY,mCAAmC;;gIAAnC,mCAAmC;oHAAnC,mCAAmC,yECPhD,+CACA;2FDMa,mCAAmC;kBAL/C,SAAS;mBAAC;oBACT,QAAQ,EAAE,mCAAmC;oBAC7C,WAAW,EAAE,gDAAgD;oBAC7D,SAAS,EAAE,CAAC,+CAA+C,CAAC;iBAC7D;;;ME2DY,WAAW;;wGAAX,WAAW;yGAAX,WAAW,iBAjCpB,cAAc;QACd,sBAAsB;QACtB,kBAAkB;QAClB,sBAAsB;QACtB,uBAAuB;QACvB,sBAAsB;QACtB,kBAAkB;QAClB,aAAa;QACb,gBAAgB;QAChB,kBAAkB;QAClB,qBAAqB;QACrB,sBAAsB;QACtB,kBAAkB;QAClB,wBAAwB;QACxB,6BAA6B;QAC7B,mCAAmC;QACnC,4CAA4C;QAC5C,eAAe;QACf,mBAAmB,aAGnB,YAAY;QACZ,aAAa;QACb,eAAe;QACf,eAAe;QACf,uBAAuB;QACvB,kBAAkB;QAClB,mBAAmB;QACnB,cAAc;QACd,oBAAoB,aAEZ,cAAc,EAAE,kBAAkB,EAAE,6BAA6B;yGAEhE,WAAW,YAbb;YACP,YAAY;YACZ,aAAa;YACb,eAAe;YACf,eAAe;YACf,uBAAuB;YACvB,kBAAkB;YAClB,mBAAmB;YACnB,cAAc;YACd,oBAAoB;SACrB;2FAGU,WAAW;kBAnCvB,QAAQ;mBAAC;oBACR,YAAY,EAAE;wBACZ,cAAc;wBACd,sBAAsB;wBACtB,kBAAkB;wBAClB,sBAAsB;wBACtB,uBAAuB;wBACvB,sBAAsB;wBACtB,kBAAkB;wBAClB,aAAa;wBACb,gBAAgB;wBAChB,kBAAkB;wBAClB,qBAAqB;wBACrB,sBAAsB;wBACtB,kBAAkB;wBAClB,wBAAwB;wBACxB,6BAA6B;wBAC7B,mCAAmC;wBACnC,4CAA4C;wBAC5C,eAAe;wBACf,mBAAmB;qBACpB;oBACD,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,eAAe;wBACf,uBAAuB;wBACvB,kBAAkB;wBAClB,mBAAmB;wBACnB,cAAc;wBACd,oBAAoB;qBACrB;oBACD,OAAO,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,6BAA6B,CAAC;iBAC7E;;;AChED;;;;ACAA;;;;;;"}
|
package/dist/ngx/lib/components/rtsee-messenger/chat-thumbnail/chat-thumbnail.component.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';
|
|
2
|
+
import { TimeFormatHelperService } from '../../../services/time-format-helper.service';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export declare class ChatThumbnailComponent {
|
|
5
|
+
timeFormatService: TimeFormatHelperService;
|
|
4
6
|
chat: RTSeeChat;
|
|
5
7
|
messenger: RTSeeMessenger;
|
|
8
|
+
constructor(timeFormatService: TimeFormatHelperService);
|
|
6
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChatThumbnailComponent, never>;
|
|
7
10
|
static ɵcmp: i0.ɵɵComponentDeclaration<ChatThumbnailComponent, "ngx-chat-thumbnail", never, { "chat": "chat"; "messenger": "messenger"; }, {}, never, never>;
|
|
8
11
|
}
|
|
@@ -2,17 +2,18 @@ import { AfterViewInit, ComponentFactoryResolver } from '@angular/core';
|
|
|
2
2
|
import { RTSeeChat, RTSeeChatMember, RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';
|
|
3
3
|
import { WidgetsService } from '../../../services/widgets.service';
|
|
4
4
|
import { WidgetDirective } from '../../../directives/widget.directive';
|
|
5
|
+
import { TimeFormatHelperService } from '../../../services/time-format-helper.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export declare class MessageComponent implements AfterViewInit {
|
|
7
8
|
private widgetsService;
|
|
8
9
|
private componentFactoryResolver;
|
|
10
|
+
timeFormatService: TimeFormatHelperService;
|
|
9
11
|
chat: RTSeeChat;
|
|
10
12
|
message: RTSeeMessage;
|
|
11
13
|
member: RTSeeChatMember<any>;
|
|
12
14
|
messenger: RTSeeMessenger;
|
|
13
15
|
widgetHost: WidgetDirective;
|
|
14
|
-
|
|
15
|
-
constructor(widgetsService: WidgetsService, componentFactoryResolver: ComponentFactoryResolver);
|
|
16
|
+
constructor(widgetsService: WidgetsService, componentFactoryResolver: ComponentFactoryResolver, timeFormatService: TimeFormatHelperService);
|
|
16
17
|
ngAfterViewInit(): void;
|
|
17
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<MessageComponent, never>;
|
|
18
19
|
static ɵcmp: i0.ɵɵComponentDeclaration<MessageComponent, "ngx-message", never, { "chat": "chat"; "message": "message"; "member": "member"; "messenger": "messenger"; }, {}, never, never>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
2
|
import { RTSeeMessage, RTSeeMessenger } from '@rtsee/messenger';
|
|
3
|
-
import {
|
|
3
|
+
import { IRTSeeCall } from '@rtsee/core';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class CallWidgetComponent implements OnInit {
|
|
6
|
-
message: RTSeeMessage<
|
|
6
|
+
message: RTSeeMessage<IRTSeeCall>;
|
|
7
7
|
messenger: RTSeeMessenger;
|
|
8
8
|
callerName?: string;
|
|
9
9
|
ngOnInit(): void;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { RTSeeChat, RTSeeMessenger } from '@rtsee/messenger';
|
|
1
|
+
import { RTSeeChat, RTSeeMessenger, RTSeeMessage } from '@rtsee/messenger';
|
|
2
|
+
import { TimeFormatHelperService } from '../../../services/time-format-helper.service';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export declare class MessagesListComponent {
|
|
5
|
+
private timeFormatService;
|
|
4
6
|
chat: RTSeeChat;
|
|
5
7
|
messenger: RTSeeMessenger;
|
|
8
|
+
constructor(timeFormatService: TimeFormatHelperService);
|
|
9
|
+
hasDateChanged(currentMessage: RTSeeMessage, index: number): boolean;
|
|
10
|
+
formatDate(message: RTSeeMessage): string;
|
|
6
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<MessagesListComponent, never>;
|
|
7
12
|
static ɵcmp: i0.ɵɵComponentDeclaration<MessagesListComponent, "ngx-messages-list", never, { "chat": "chat"; "messenger": "messenger"; }, {}, never, never>;
|
|
8
13
|
}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
export declare class TimeFormatHelperService {
|
|
3
3
|
toAgo(time: Date): string;
|
|
4
|
+
toDayOfWeek(time: Date): string;
|
|
5
|
+
toTime(time: Date): string;
|
|
6
|
+
toDate(time: Date): string;
|
|
7
|
+
toDateNumeral(time: Date): string;
|
|
8
|
+
toDateNumeralWithYear(time: Date): string;
|
|
9
|
+
toDateWithYear(time: Date): string;
|
|
10
|
+
formatDate(time: Date): string;
|
|
11
|
+
formatTimeOrDate(time: Date): string;
|
|
4
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<TimeFormatHelperService, never>;
|
|
5
13
|
static ɵprov: i0.ɵɵInjectableDeclaration<TimeFormatHelperService>;
|
|
6
14
|
}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.0.
|
|
2
|
+
"version": "0.0.24",
|
|
3
3
|
"name": "@rtsee/ngx",
|
|
4
4
|
"module": "./dist/ngx/esm2015/public-api.js",
|
|
5
5
|
"types": "./dist/ngx/rtsee-ngx.d.ts",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "d49ac73053f64bedf54284483f75a5bf0d418c79"
|
|
67
67
|
}
|