@rtsee/ngx 0.0.71 → 0.0.74
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/fesm2022/rtsee-ngx.mjs +370 -242
- package/dist/ngx/fesm2022/rtsee-ngx.mjs.map +1 -1
- package/dist/ngx/index.d.ts +74 -51
- package/dist/ngx/src/lib/theme/common-variables.scss +1 -1
- package/dist/ngx/src/lib/theme/containers/nav.scss +4 -0
- package/dist/ngx/src/lib/theme/containers/shell.scss +42 -17
- package/dist/ngx/src/lib/theme/messenger/chat-input.scss +18 -20
- package/dist/ngx/src/lib/theme/messenger/chat-thumbnail.scss +1 -3
- package/dist/ngx/src/lib/theme/messenger/chat.scss +1 -3
- package/dist/ngx/src/lib/theme/messenger/index.scss +1 -0
- package/dist/ngx/src/lib/theme/messenger/messages-list.scss +11 -0
- package/dist/ngx/src/lib/theme/messenger/messenger-header.scss +148 -102
- package/dist/ngx/src/lib/theme/messenger/messenger.scss +9 -60
- package/dist/ngx/src/lib/theme/messenger/profile.scss +40 -0
- package/dist/ngx/src/lib/theme/presentation/index.scss +1 -0
- package/dist/ngx/src/lib/theme/presentation/presentation.scss +6 -2
- package/dist/ngx/src/lib/theme/presentation/settings.scss +70 -0
- package/dist/ngx/src/lib/theme/presentation/story-player.scss +55 -43
- package/package.json +8 -7
|
@@ -1,47 +1,55 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, Input, Component, ViewChild, EventEmitter, Output,
|
|
2
|
+
import { Injectable, Input, Component, ViewChild, Directive, EventEmitter, Output, CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
|
3
|
+
import * as i2$1 from '@angular/common';
|
|
3
4
|
import { NgClass, NgForOf, NgIf, SlicePipe, NgStyle, NgOptimizedImage, CommonModule } from '@angular/common';
|
|
4
5
|
import * as i1 from '@angular/forms';
|
|
5
6
|
import { FormsModule, FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';
|
|
6
7
|
import { interval, tap } from 'rxjs';
|
|
8
|
+
import * as i4 from 'primeng/button';
|
|
9
|
+
import { Button, ButtonModule } from 'primeng/button';
|
|
10
|
+
import * as i2$2 from 'primeng/message';
|
|
11
|
+
import { Message, MessageModule } from 'primeng/message';
|
|
12
|
+
import { AuthEndpointsKeys, DEFAULT_ROUTE_NAMES } from '@rtsee/auth';
|
|
13
|
+
import * as i2 from '@angular/router';
|
|
14
|
+
import { RouterLink, RouterLinkActive } from '@angular/router';
|
|
15
|
+
import * as i1$1 from '@angular/common/http';
|
|
7
16
|
import { InfiniteScrollDirective, InfiniteScrollModule } from 'ngx-infinite-scroll';
|
|
8
17
|
import { RTSeeChatTypes } from '@rtsee/common';
|
|
9
18
|
import dayjs from 'dayjs';
|
|
10
19
|
import relativeTime from 'dayjs/plugin/relativeTime';
|
|
11
20
|
import { RTSeeChatEvents } from '@rtsee/messenger';
|
|
12
|
-
import {
|
|
13
|
-
import * as i4 from 'primeng/button';
|
|
14
|
-
import { Button, ButtonModule } from 'primeng/button';
|
|
21
|
+
import { Textarea } from 'primeng/textarea';
|
|
15
22
|
import { Chip } from 'primeng/chip';
|
|
16
23
|
import Swiper from 'swiper';
|
|
17
24
|
import { EffectCards, Manipulation } from 'swiper/modules';
|
|
18
25
|
import { FloatLabel } from 'primeng/floatlabel';
|
|
19
26
|
import { InputGroup } from 'primeng/inputgroup';
|
|
20
27
|
import { InputText } from 'primeng/inputtext';
|
|
21
|
-
import * as i2$1 from 'primeng/message';
|
|
22
|
-
import { Message, MessageModule } from 'primeng/message';
|
|
23
|
-
import { Textarea } from 'primeng/textarea';
|
|
24
28
|
import { InputNumber } from 'primeng/inputnumber';
|
|
25
29
|
import { ImageCropperComponent } from 'ngx-image-cropper';
|
|
26
30
|
import { RadioButton } from 'primeng/radiobutton';
|
|
27
|
-
import * as i1$
|
|
31
|
+
import * as i1$2 from 'primeng/autocomplete';
|
|
28
32
|
import { AutoCompleteModule } from 'primeng/autocomplete';
|
|
29
33
|
import { OrderList } from 'primeng/orderlist';
|
|
30
34
|
import { Divider } from 'primeng/divider';
|
|
31
35
|
import { Tabs, TabList, Tab, TabPanels, TabPanel } from 'primeng/tabs';
|
|
32
36
|
import { ColorPicker } from 'primeng/colorpicker';
|
|
33
|
-
import
|
|
34
|
-
import {
|
|
37
|
+
import { Slider } from 'primeng/slider';
|
|
38
|
+
import { Fieldset } from 'primeng/fieldset';
|
|
39
|
+
import { Tag } from 'primeng/tag';
|
|
40
|
+
import { Listbox } from 'primeng/listbox';
|
|
41
|
+
import { CdkCopyToClipboard } from '@angular/cdk/clipboard';
|
|
42
|
+
import { RTSeeRoutesList } from '@rtsee/factory';
|
|
35
43
|
import { Avatar } from 'primeng/avatar';
|
|
36
44
|
import { Image } from 'primeng/image';
|
|
37
45
|
import { Tooltip } from 'primeng/tooltip';
|
|
38
|
-
import {
|
|
46
|
+
import { hasPermission, RTSeePeerPermissions } from '@rtsee/core';
|
|
39
47
|
import { Password } from 'primeng/password';
|
|
40
48
|
import { Checkbox } from 'primeng/checkbox';
|
|
41
49
|
import { ProgressSpinner } from 'primeng/progressspinner';
|
|
42
|
-
import * as i1$2 from '@angular/common/http';
|
|
43
50
|
import * as i1$3 from 'primeng/api';
|
|
44
51
|
import { AutosizeModule } from 'ngx-autosize';
|
|
52
|
+
import { debounceTime } from 'rxjs/operators';
|
|
45
53
|
import shave from 'shave';
|
|
46
54
|
import { NgxCaptchaModule } from 'ngx-captcha';
|
|
47
55
|
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
|
|
@@ -235,7 +243,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
235
243
|
type: Input
|
|
236
244
|
}] } });
|
|
237
245
|
|
|
246
|
+
class RTSeeAuthService {
|
|
247
|
+
constructor(http) {
|
|
248
|
+
this.http = http;
|
|
249
|
+
}
|
|
250
|
+
init(auth) {
|
|
251
|
+
if (this.rtseeAuth && this.authConfiguration) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
this.rtseeAuth = auth;
|
|
255
|
+
this.authConfiguration = this.rtseeAuth.authConfiguration;
|
|
256
|
+
}
|
|
257
|
+
signIn(credentials) {
|
|
258
|
+
return this.http
|
|
259
|
+
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.SIGN_IN), credentials)
|
|
260
|
+
.pipe(tap((res) => this.rtseeAuth.authenticate(res)));
|
|
261
|
+
}
|
|
262
|
+
signUp(credentials) {
|
|
263
|
+
return this.http
|
|
264
|
+
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.SIGN_UP), credentials);
|
|
265
|
+
}
|
|
266
|
+
forgotPassword(credentials) {
|
|
267
|
+
return this.http
|
|
268
|
+
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.FORGOT_PASSWORD), credentials);
|
|
269
|
+
}
|
|
270
|
+
resetPassword(credentials) {
|
|
271
|
+
return this.http
|
|
272
|
+
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.RESET_PASSWORD), credentials);
|
|
273
|
+
}
|
|
274
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
275
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, providedIn: 'root' }); }
|
|
276
|
+
}
|
|
277
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, decorators: [{
|
|
278
|
+
type: Injectable,
|
|
279
|
+
args: [{
|
|
280
|
+
providedIn: 'root'
|
|
281
|
+
}]
|
|
282
|
+
}], ctorParameters: () => [{ type: i1$1.HttpClient }] });
|
|
283
|
+
|
|
238
284
|
class ProfileComponent {
|
|
285
|
+
constructor(authService, router) {
|
|
286
|
+
this.authService = authService;
|
|
287
|
+
this.router = router;
|
|
288
|
+
this.AuthEndpointsKeys = AuthEndpointsKeys;
|
|
289
|
+
this.authConfiguration = this.authService.rtseeAuth.authConfiguration;
|
|
290
|
+
}
|
|
239
291
|
call() {
|
|
240
292
|
if (!this.messenger.openedChat) {
|
|
241
293
|
return;
|
|
@@ -248,13 +300,26 @@ class ProfileComponent {
|
|
|
248
300
|
}
|
|
249
301
|
void this.messenger.initializeVideoCall(this.messenger.openedChat);
|
|
250
302
|
}
|
|
251
|
-
|
|
252
|
-
|
|
303
|
+
logOut() {
|
|
304
|
+
this.authService.rtseeAuth.logOut();
|
|
305
|
+
void this.router.navigate(this.authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN));
|
|
306
|
+
setTimeout(() => {
|
|
307
|
+
window.location.reload();
|
|
308
|
+
}, 200);
|
|
309
|
+
}
|
|
310
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ProfileComponent, deps: [{ token: RTSeeAuthService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
311
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: ProfileComponent, isStandalone: true, selector: "rtsee-profile", inputs: { messenger: "messenger", peer: "peer" }, ngImport: i0, template: "<div class=\"rtsee-messenger-profile\">\n @if (!messenger.ownProfileOpened) {\n <ul class=\"rtsee-messenger-profile-actions\">\n <li class=\"rtsee-messenger-profile-actions-item\">\n <p-button\n (click)=\"call()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-phone\"\n />\n </li>\n <li class=\"rtsee-messenger-profile-actions-item\">\n <p-button\n (click)=\"videoCall()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-video\"\n />\n </li>\n </ul>\n } @else if (messenger.myPeer.isAnonymous) {\n <div class=\"rtsee-messenger-profile-auth\">\n <div class=\"rtsee-messenger-profile-anon-message\">\n <p-message severity=\"warn\">\n <span>This is an anonymous identity we've generated for you.</span>\n <span> </span>\n <span>You can use it to play around.</span>\n <span> </span>\n <span>But we are guilty of erasing these time after time.</span>\n <span> </span>\n <span>So please Sign Up if you're looking for something more stable :)</span>\n </p-message>\n </div>\n\n <div class=\"rtsee-messenger-profile-auth-buttons\">\n <p-button label=\"Sign Up\"\n severity=\"primary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n <p-button label=\"Sign In\"\n severity=\"secondary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n </div>\n </div>\n } @else if (!messenger.myPeer.isAnonymous) {\n <p-button label=\"Log Out\"\n severity=\"danger\"\n (click)=\"logOut()\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n }\n</div>\n", dependencies: [{ kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
253
312
|
}
|
|
254
313
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ProfileComponent, decorators: [{
|
|
255
314
|
type: Component,
|
|
256
|
-
args: [{ selector: 'rtsee-profile',
|
|
257
|
-
|
|
315
|
+
args: [{ selector: 'rtsee-profile', imports: [
|
|
316
|
+
Button,
|
|
317
|
+
Message,
|
|
318
|
+
RouterLink
|
|
319
|
+
], standalone: true, template: "<div class=\"rtsee-messenger-profile\">\n @if (!messenger.ownProfileOpened) {\n <ul class=\"rtsee-messenger-profile-actions\">\n <li class=\"rtsee-messenger-profile-actions-item\">\n <p-button\n (click)=\"call()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-phone\"\n />\n </li>\n <li class=\"rtsee-messenger-profile-actions-item\">\n <p-button\n (click)=\"videoCall()\"\n size=\"large\"\n severity=\"secondary\"\n icon=\"pi pi-video\"\n />\n </li>\n </ul>\n } @else if (messenger.myPeer.isAnonymous) {\n <div class=\"rtsee-messenger-profile-auth\">\n <div class=\"rtsee-messenger-profile-anon-message\">\n <p-message severity=\"warn\">\n <span>This is an anonymous identity we've generated for you.</span>\n <span> </span>\n <span>You can use it to play around.</span>\n <span> </span>\n <span>But we are guilty of erasing these time after time.</span>\n <span> </span>\n <span>So please Sign Up if you're looking for something more stable :)</span>\n </p-message>\n </div>\n\n <div class=\"rtsee-messenger-profile-auth-buttons\">\n <p-button label=\"Sign Up\"\n severity=\"primary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_UP)\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n <p-button label=\"Sign In\"\n severity=\"secondary\"\n [routerLink]=\"authConfiguration.getRoutePathSplit(AuthEndpointsKeys.SIGN_IN)\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n </div>\n </div>\n } @else if (!messenger.myPeer.isAnonymous) {\n <p-button label=\"Log Out\"\n severity=\"danger\"\n (click)=\"logOut()\"\n class=\"rtsee-messenger-profile-auth-button\"\n ></p-button>\n }\n</div>\n" }]
|
|
320
|
+
}], ctorParameters: () => [{ type: RTSeeAuthService }, { type: i2.Router }], propDecorators: { messenger: [{
|
|
321
|
+
type: Input
|
|
322
|
+
}], peer: [{
|
|
258
323
|
type: Input
|
|
259
324
|
}] } });
|
|
260
325
|
|
|
@@ -275,29 +340,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
275
340
|
class MessengerHeaderComponent {
|
|
276
341
|
constructor(defaultImagesService) {
|
|
277
342
|
this.defaultImagesService = defaultImagesService;
|
|
278
|
-
this.expandToggled = new EventEmitter();
|
|
279
|
-
this.isExpanded = false;
|
|
280
|
-
this.expandToggled.emit(this.isExpanded);
|
|
281
343
|
}
|
|
282
|
-
|
|
283
|
-
this.
|
|
284
|
-
|
|
344
|
+
openProfile(id) {
|
|
345
|
+
if (this.messenger.ownProfileOpened) {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
void this.messenger.openProfile(id);
|
|
285
349
|
}
|
|
286
350
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerHeaderComponent, deps: [{ token: DefaultImagesService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
287
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
351
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: MessengerHeaderComponent, isStandalone: true, selector: "rtsee-messenger-header", inputs: { messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-messenger-header\"\n [ngClass]=\"{\n 'rtsee-messenger-header-chat-opened': messenger.openedChat,\n 'rtsee-chat-header-unread': messenger.openedChat && !messenger.unreadMessagesCount,\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-header-my-profile-mode': messenger.ownProfileOpened,\n 'rtsee-messenger-header-chat-info-mode': (messenger.openedProfile || messenger.openedChatDetails) && !messenger.ownProfileOpened\n }\"\n>\n <span class=\"rtsee-messenger-header-collapse-button\"\n (click)=\"messenger.collapseInfo()\"\n >\n <span class=\"pi pi-arrow-left\"></span>\n </span>\n <div class=\"rtsee-messenger-header-left\">\n @if (!messenger.openedChat && messenger.myPeer) {\n <div class=\"rtsee-messenger-header-avatar\"\n (click)=\"openProfile(messenger.myPeer.clientId)\"\n >\n <div [style.background-image]=\"'url(' + messenger.myPeer.imageUrl || defaultImagesService.PROFILE + ')'\"\n class=\"rtsee-messenger-header-avatar-image\">\n </div>\n </div>\n } @else if (messenger.openedChat) {\n <button class=\"rtsee-messenger-close-chat\"\n (click)=\"messenger.closeChat()\"\n >\n <span class=\"material-icons-outlined\">arrow_back</span>\n @if (messenger.unreadMessagesCount) {\n <span class=\"unread-count\">{{messenger.unreadMessagesCount}}</span>\n }\n </button>\n }\n </div>\n <div class=\"rtsee-messenger-header-right\">\n @if (messenger.openedChat) {\n <div class=\"rtsee-messenger-chat-image-container rtsee-messenger-header-avatar\"\n (click)=\"messenger.openChatInfo()\"\n >\n <div class=\"rtsee-messenger-chat-image rtsee-messenger-header-avatar-image\"\n [style.background-image]=\"'url(' + messenger.openedChat.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n </div>\n }\n </div>\n <div class=\"rtsee-messenger-header-center\">\n @if (messenger.openedChat) {\n <div [ngClass]=\"{'rtsee-messenger-header-opened-chat-info-expanded': messenger.openedProfile || messenger.openedChatDetails}\"\n class=\"rtsee-messenger-header-opened-chat-info\">\n <div class=\"rtsee-messenger-profile-header-placeholder\">\n <p class=\"rtsee-messenger-header-chat-title\"\n >{{ messenger.openedChat.name }}</p>\n </div>\n\n <div class=\"rtsee-messenger-profile-data-container\">\n @if (messenger.openedChatDetails) {\n <rtsee-profile [messenger]=\"messenger\"\n ></rtsee-profile>\n }\n </div>\n </div>\n } @else if (!messenger.openedChat) {\n <p class=\"rtsee-messenger-header-title\"\n >Messaging</p>\n <rtsee-profile [messenger]=\"messenger\"\n [peer]=\"messenger.myPeer\"\n ></rtsee-profile>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ProfileComponent, selector: "rtsee-profile", inputs: ["messenger", "peer"] }] }); }
|
|
288
352
|
}
|
|
289
353
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerHeaderComponent, decorators: [{
|
|
290
354
|
type: Component,
|
|
291
355
|
args: [{ selector: 'rtsee-messenger-header', imports: [
|
|
292
356
|
NgClass,
|
|
293
|
-
NgIf,
|
|
294
357
|
ProfileComponent
|
|
295
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-header\"\n [ngClass]=\"{\n
|
|
296
|
-
}], ctorParameters: () => [{ type: DefaultImagesService }], propDecorators: {
|
|
297
|
-
type: Output
|
|
298
|
-
}], isExpanded: [{
|
|
299
|
-
type: Input
|
|
300
|
-
}], messenger: [{
|
|
358
|
+
], standalone: true, template: "<div class=\"rtsee-messenger-header\"\n [ngClass]=\"{\n 'rtsee-messenger-header-chat-opened': messenger.openedChat,\n 'rtsee-chat-header-unread': messenger.openedChat && !messenger.unreadMessagesCount,\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-header-my-profile-mode': messenger.ownProfileOpened,\n 'rtsee-messenger-header-chat-info-mode': (messenger.openedProfile || messenger.openedChatDetails) && !messenger.ownProfileOpened\n }\"\n>\n <span class=\"rtsee-messenger-header-collapse-button\"\n (click)=\"messenger.collapseInfo()\"\n >\n <span class=\"pi pi-arrow-left\"></span>\n </span>\n <div class=\"rtsee-messenger-header-left\">\n @if (!messenger.openedChat && messenger.myPeer) {\n <div class=\"rtsee-messenger-header-avatar\"\n (click)=\"openProfile(messenger.myPeer.clientId)\"\n >\n <div [style.background-image]=\"'url(' + messenger.myPeer.imageUrl || defaultImagesService.PROFILE + ')'\"\n class=\"rtsee-messenger-header-avatar-image\">\n </div>\n </div>\n } @else if (messenger.openedChat) {\n <button class=\"rtsee-messenger-close-chat\"\n (click)=\"messenger.closeChat()\"\n >\n <span class=\"material-icons-outlined\">arrow_back</span>\n @if (messenger.unreadMessagesCount) {\n <span class=\"unread-count\">{{messenger.unreadMessagesCount}}</span>\n }\n </button>\n }\n </div>\n <div class=\"rtsee-messenger-header-right\">\n @if (messenger.openedChat) {\n <div class=\"rtsee-messenger-chat-image-container rtsee-messenger-header-avatar\"\n (click)=\"messenger.openChatInfo()\"\n >\n <div class=\"rtsee-messenger-chat-image rtsee-messenger-header-avatar-image\"\n [style.background-image]=\"'url(' + messenger.openedChat.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n </div>\n }\n </div>\n <div class=\"rtsee-messenger-header-center\">\n @if (messenger.openedChat) {\n <div [ngClass]=\"{'rtsee-messenger-header-opened-chat-info-expanded': messenger.openedProfile || messenger.openedChatDetails}\"\n class=\"rtsee-messenger-header-opened-chat-info\">\n <div class=\"rtsee-messenger-profile-header-placeholder\">\n <p class=\"rtsee-messenger-header-chat-title\"\n >{{ messenger.openedChat.name }}</p>\n </div>\n\n <div class=\"rtsee-messenger-profile-data-container\">\n @if (messenger.openedChatDetails) {\n <rtsee-profile [messenger]=\"messenger\"\n ></rtsee-profile>\n }\n </div>\n </div>\n } @else if (!messenger.openedChat) {\n <p class=\"rtsee-messenger-header-title\"\n >Messaging</p>\n <rtsee-profile [messenger]=\"messenger\"\n [peer]=\"messenger.myPeer\"\n ></rtsee-profile>\n }\n </div>\n</div>\n" }]
|
|
359
|
+
}], ctorParameters: () => [{ type: DefaultImagesService }], propDecorators: { messenger: [{
|
|
301
360
|
type: Input
|
|
302
361
|
}] } });
|
|
303
362
|
|
|
@@ -440,13 +499,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
440
499
|
type: Input
|
|
441
500
|
}] } });
|
|
442
501
|
|
|
502
|
+
const COMMON_CONSTANTS = {
|
|
503
|
+
minPasswordLength: 8,
|
|
504
|
+
requestItemLimit: 20,
|
|
505
|
+
customTimeFormat: 'HH:mm',
|
|
506
|
+
customDateFormat: 'dd/MM/YYYY',
|
|
507
|
+
customDateFormatDaysJs: 'DD/MM/YYYY',
|
|
508
|
+
customDateTimeFormat: 'dd/MM/YYYY HH:mm',
|
|
509
|
+
defaultProfileImgUrl: 'https://werf.co/assets/images/default-profile.png'
|
|
510
|
+
};
|
|
511
|
+
|
|
443
512
|
class ChatThumbnailComponent {
|
|
444
513
|
constructor(timeFormatService) {
|
|
445
514
|
this.timeFormatService = timeFormatService;
|
|
446
515
|
this.RTSeeChatTypes = RTSeeChatTypes;
|
|
516
|
+
this.COMMON_CONSTANTS = COMMON_CONSTANTS;
|
|
447
517
|
}
|
|
448
518
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatThumbnailComponent, deps: [{ token: TimeFormatHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
449
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ChatThumbnailComponent, isStandalone: true, selector: "rtsee-chat-thumbnail", inputs: { chat: "chat", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rtsee-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rtsee-chat-thumbnail-left\">\n <div class=\"rtsee-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rtsee-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"\n [hideStatus]=\"chat && !!(chat.unreadMessagesCount)\">\n </rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rtsee-chat-thumbnail-last-message\"\n [ngClass]=\"{'rtsee-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n <span class=\"rtsee-chat-thumbnail-last-message-sender\"\n *ngIf=\"chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName\"\n >{{chat.senderName}}</span>\n <span class=\"rtsee-chat-thumbnail-last-message-text\"\n *ngIf=\"chat.text\"\n >{{chat.text}}</span>\n <div class=\"rtsee-messenger-thumbnail-unread\" *ngIf=\"chat.unreadMessagesCount\">\n <span class=\"rtsee-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: MessageTimeAndStatusComponent, selector: "rtsee-message-time-and-status", inputs: ["message", "hideStatus", "inChat"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
519
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ChatThumbnailComponent, isStandalone: true, selector: "rtsee-chat-thumbnail", inputs: { chat: "chat", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rtsee-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rtsee-chat-thumbnail-left\">\n <div class=\"rtsee-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rtsee-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"\n [hideStatus]=\"chat && !!(chat.unreadMessagesCount)\">\n </rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rtsee-chat-thumbnail-last-message\"\n [ngClass]=\"{'rtsee-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n <span class=\"rtsee-chat-thumbnail-last-message-sender\"\n *ngIf=\"chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName\"\n >{{chat.senderName}}</span>\n <span class=\"rtsee-chat-thumbnail-last-message-text\"\n *ngIf=\"chat.text\"\n >{{chat.text}}</span>\n <div class=\"rtsee-messenger-thumbnail-unread\" *ngIf=\"chat.unreadMessagesCount\">\n <span class=\"rtsee-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: MessageTimeAndStatusComponent, selector: "rtsee-message-time-and-status", inputs: ["message", "hideStatus", "inChat"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
450
520
|
}
|
|
451
521
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatThumbnailComponent, decorators: [{
|
|
452
522
|
type: Component,
|
|
@@ -454,7 +524,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
454
524
|
MessageTimeAndStatusComponent,
|
|
455
525
|
NgClass,
|
|
456
526
|
NgIf
|
|
457
|
-
], standalone: true, template: "<div class=\"rtsee-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rtsee-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rtsee-chat-thumbnail-left\">\n <div class=\"rtsee-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rtsee-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"\n [hideStatus]=\"chat && !!(chat.unreadMessagesCount)\">\n </rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rtsee-chat-thumbnail-last-message\"\n [ngClass]=\"{'rtsee-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n <span class=\"rtsee-chat-thumbnail-last-message-sender\"\n *ngIf=\"chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName\"\n >{{chat.senderName}}</span>\n <span class=\"rtsee-chat-thumbnail-last-message-text\"\n *ngIf=\"chat.text\"\n >{{chat.text}}</span>\n <div class=\"rtsee-messenger-thumbnail-unread\" *ngIf=\"chat.unreadMessagesCount\">\n <span class=\"rtsee-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
527
|
+
], standalone: true, template: "<div class=\"rtsee-chat-thumbnail\" (click)=\"messenger.openChatById(chat.chatId)\">\n <div class=\"rtsee-chat-thumbnail-image\">\n <img [src]=\"chat.chatImageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\" alt=\"chat-img\">\n </div>\n <div class=\"rtsee-chat-thumbnail-left\">\n <div class=\"rtsee-chat-thumbnail-name\">\n <span>{{ chat.chatName }}</span>\n <div class=\"rtsee-chat-thumbnail-status\">\n <rtsee-message-time-and-status [message]=\"chat\"\n [hideStatus]=\"chat && !!(chat.unreadMessagesCount)\">\n </rtsee-message-time-and-status>\n </div>\n </div>\n <div class=\"rtsee-chat-thumbnail-last-message\"\n [ngClass]=\"{'rtsee-has-unread': chat.unreadMessagesCount}\"\n rtseeShave>\n <span class=\"rtsee-chat-thumbnail-last-message-sender\"\n *ngIf=\"chat.chatType !== RTSeeChatTypes.INDIVIDUAL && chat.senderName\"\n >{{chat.senderName}}</span>\n <span class=\"rtsee-chat-thumbnail-last-message-text\"\n *ngIf=\"chat.text\"\n >{{chat.text}}</span>\n <div class=\"rtsee-messenger-thumbnail-unread\" *ngIf=\"chat.unreadMessagesCount\">\n <span class=\"rtsee-messenger-thumbnail-unread-count\">{{chat.unreadMessagesCount}}</span>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
458
528
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }], propDecorators: { chat: [{
|
|
459
529
|
type: Input
|
|
460
530
|
}], messenger: [{
|
|
@@ -599,14 +669,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
599
669
|
}] } });
|
|
600
670
|
|
|
601
671
|
class MessagesListComponent {
|
|
602
|
-
constructor(timeFormatService) {
|
|
672
|
+
constructor(timeFormatService, scroller) {
|
|
603
673
|
this.timeFormatService = timeFormatService;
|
|
674
|
+
this.scroller = scroller;
|
|
604
675
|
this.bindScrollFunction = this.scrollToBottom.bind(this);
|
|
605
676
|
}
|
|
606
677
|
ngOnInit() {
|
|
607
678
|
this.chat.on(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);
|
|
608
679
|
}
|
|
609
680
|
ngAfterViewInit() {
|
|
681
|
+
console.log(this.chat.messages.length);
|
|
610
682
|
this.scrollToBottom();
|
|
611
683
|
}
|
|
612
684
|
onMessageSent() {
|
|
@@ -616,6 +688,7 @@ class MessagesListComponent {
|
|
|
616
688
|
this.chat.off(RTSeeChatEvents.MESSAGE_ADDED, this.bindScrollFunction);
|
|
617
689
|
}
|
|
618
690
|
onScrolledToTop() {
|
|
691
|
+
console.log('scrolledToTop');
|
|
619
692
|
if (this.chat.messagesLoadInProgress) {
|
|
620
693
|
return;
|
|
621
694
|
}
|
|
@@ -625,38 +698,42 @@ class MessagesListComponent {
|
|
|
625
698
|
// if (this.scrollContainer.nativeElement.scrollTop < 1) {
|
|
626
699
|
// this.scrollContainer.nativeElement.scrollTop = 1;
|
|
627
700
|
// }
|
|
701
|
+
console.log('scroll down');
|
|
628
702
|
if (this.chat.messagesLoadInProgress) {
|
|
629
703
|
return;
|
|
630
704
|
}
|
|
631
705
|
this.chat.loadRemoteMessages('front');
|
|
632
706
|
}
|
|
633
707
|
scrollToBottom() {
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
708
|
+
setTimeout(() => {
|
|
709
|
+
this.scroller.scrollToPosition([0, document.body.scrollHeight]);
|
|
710
|
+
if (!this.scrollContainer?.nativeElement?.scrollHeight) {
|
|
711
|
+
console.log('scrollToBottom early return');
|
|
712
|
+
return;
|
|
713
|
+
}
|
|
714
|
+
try {
|
|
715
|
+
this.scrollContainer.nativeElement.scrollTop =
|
|
716
|
+
this.scrollContainer.nativeElement.scrollHeight;
|
|
717
|
+
}
|
|
718
|
+
catch (err) {
|
|
719
|
+
console.log('Failed to Scroll');
|
|
720
|
+
}
|
|
721
|
+
}, 0);
|
|
644
722
|
}
|
|
645
723
|
formatDate(message) {
|
|
646
724
|
return this.timeFormatService.formatDate(message.createdAt);
|
|
647
725
|
}
|
|
648
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessagesListComponent, deps: [{ token: TimeFormatHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
649
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: MessagesListComponent, isStandalone: true, selector: "rtsee-messages-list", inputs: { chat: "chat", messenger: "messenger" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollBlock"], descendants: true }], ngImport: i0, template: "<div class=\"rtsee-messenger-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"
|
|
726
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessagesListComponent, deps: [{ token: TimeFormatHelperService }, { token: i2$1.ViewportScroller }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
727
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: MessagesListComponent, isStandalone: true, selector: "rtsee-messages-list", inputs: { chat: "chat", messenger: "messenger" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollBlock"], descendants: true }], ngImport: i0, template: "<div class=\"rtsee-messenger-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"true\"\n (scrolledUp)=\"onScrolledToTop()\"\n (scroll)=\"onScroll()\"\n [style.padding-bottom]=\"messenger.chatInputHeight + 'px'\"\n>\n @for (message of chat.messages; track message.id; let i = $index) {\n <div [ngClass]=\"{'rtsee-messenger-message-wrapper-consecutive': message.from === chat.messages[i+1]?.from}\"\n class=\"rtsee-messenger-message-wrapper\"\n >\n <rtsee-message [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n ></rtsee-message>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MessageComponent, selector: "rtsee-message", inputs: ["chat", "message", "member", "messenger"] }] }); }
|
|
650
728
|
}
|
|
651
729
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessagesListComponent, decorators: [{
|
|
652
730
|
type: Component,
|
|
653
731
|
args: [{ selector: 'rtsee-messages-list', imports: [
|
|
654
732
|
InfiniteScrollDirective,
|
|
655
733
|
NgClass,
|
|
656
|
-
NgForOf,
|
|
657
734
|
MessageComponent
|
|
658
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"
|
|
659
|
-
}], ctorParameters: () => [{ type: TimeFormatHelperService }], propDecorators: { chat: [{
|
|
735
|
+
], standalone: true, template: "<div class=\"rtsee-messenger-messages-list\"\n #scrollBlock\n infiniteScroll\n [infiniteScrollUpDistance]=\"2\"\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"true\"\n (scrolledUp)=\"onScrolledToTop()\"\n (scroll)=\"onScroll()\"\n [style.padding-bottom]=\"messenger.chatInputHeight + 'px'\"\n>\n @for (message of chat.messages; track message.id; let i = $index) {\n <div [ngClass]=\"{'rtsee-messenger-message-wrapper-consecutive': message.from === chat.messages[i+1]?.from}\"\n class=\"rtsee-messenger-message-wrapper\"\n >\n <rtsee-message [message]=\"message\"\n [messenger]=\"messenger\"\n [chat]=\"chat\"\n ></rtsee-message>\n </div>\n }\n</div>\n" }]
|
|
736
|
+
}], ctorParameters: () => [{ type: TimeFormatHelperService }, { type: i2$1.ViewportScroller }], propDecorators: { chat: [{
|
|
660
737
|
type: Input
|
|
661
738
|
}], messenger: [{
|
|
662
739
|
type: Input
|
|
@@ -674,25 +751,42 @@ class ChatInputComponent {
|
|
|
674
751
|
});
|
|
675
752
|
}
|
|
676
753
|
sendMessage() {
|
|
677
|
-
const text = this.sendMessageForm.get('message')?.value;
|
|
678
|
-
|
|
679
|
-
|
|
754
|
+
const text = this.sendMessageForm.get('message')?.value || '';
|
|
755
|
+
const trimmedText = text.trim();
|
|
756
|
+
if (trimmedText) {
|
|
757
|
+
this.chat.sendMessage(text);
|
|
680
758
|
}
|
|
681
|
-
this.chat.sendMessage(text);
|
|
682
759
|
this.sendMessageForm.get('message')?.setValue('');
|
|
760
|
+
this.handleResize();
|
|
761
|
+
}
|
|
762
|
+
onKeyUp(event) {
|
|
763
|
+
this.handleResize();
|
|
764
|
+
if (event.key === 'Enter' && !event.shiftKey) {
|
|
765
|
+
this.sendMessage();
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
handleResize() {
|
|
769
|
+
const newHeight = this.chatInput.nativeElement.offsetHeight + 16;
|
|
770
|
+
if (newHeight !== this.messenger.chatInputHeight) {
|
|
771
|
+
this.messenger.setChatInputHeight(newHeight);
|
|
772
|
+
}
|
|
683
773
|
}
|
|
684
774
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
685
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ChatInputComponent, isStandalone: true, selector: "rtsee-chat-input", inputs: { messenger: "messenger", chat: "chat" }, ngImport: i0, template: "<div class=\"rtsee-chat-input\"
|
|
775
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ChatInputComponent, isStandalone: true, selector: "rtsee-chat-input", inputs: { messenger: "messenger", chat: "chat" }, viewQueries: [{ propertyName: "chatInput", first: true, predicate: ["chatInput"], descendants: true }], ngImport: i0, template: "<div #chatInput\n class=\"rtsee-chat-input\"\n xmlns=\"http://www.w3.org/1999/html\"\n>\n <div class=\"rtsee-send-message\">\n <form [formGroup]=\"sendMessageForm\" class=\"rtsee-chat-input-form\">\n <textarea [invalid]=\"false\"\n [autoResize]=\"true\"\n (keyup)=\"onKeyUp($event)\"\n formControlName=\"message\"\n pTextarea\n placeholder=\"Type a message...\"\n class=\"rtsee-chat-input-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n <button (click)=\"sendMessage()\"\n class=\"rtsee-send-message-button\"\n type=\"submit\"\n >\n <span class=\"pi pi-send\"></span>\n </button>\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }] }); }
|
|
686
776
|
}
|
|
687
777
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChatInputComponent, decorators: [{
|
|
688
778
|
type: Component,
|
|
689
779
|
args: [{ selector: 'rtsee-chat-input', imports: [
|
|
690
|
-
ReactiveFormsModule
|
|
691
|
-
|
|
780
|
+
ReactiveFormsModule,
|
|
781
|
+
Textarea
|
|
782
|
+
], standalone: true, template: "<div #chatInput\n class=\"rtsee-chat-input\"\n xmlns=\"http://www.w3.org/1999/html\"\n>\n <div class=\"rtsee-send-message\">\n <form [formGroup]=\"sendMessageForm\" class=\"rtsee-chat-input-form\">\n <textarea [invalid]=\"false\"\n [autoResize]=\"true\"\n (keyup)=\"onKeyUp($event)\"\n formControlName=\"message\"\n pTextarea\n placeholder=\"Type a message...\"\n class=\"rtsee-chat-input-field\"\n rows=\"1\"\n cols=\"30\"\n ></textarea>\n </form>\n </div>\n <button (click)=\"sendMessage()\"\n class=\"rtsee-send-message-button\"\n type=\"submit\"\n >\n <span class=\"pi pi-send\"></span>\n </button>\n</div>\n" }]
|
|
692
783
|
}], propDecorators: { messenger: [{
|
|
693
784
|
type: Input
|
|
694
785
|
}], chat: [{
|
|
695
786
|
type: Input
|
|
787
|
+
}], chatInput: [{
|
|
788
|
+
type: ViewChild,
|
|
789
|
+
args: ['chatInput']
|
|
696
790
|
}] } });
|
|
697
791
|
|
|
698
792
|
class ChatComponent {
|
|
@@ -711,118 +805,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
711
805
|
type: Input
|
|
712
806
|
}] } });
|
|
713
807
|
|
|
714
|
-
var MainMenuPanels;
|
|
715
|
-
(function (MainMenuPanels) {
|
|
716
|
-
MainMenuPanels["HOME"] = "home";
|
|
717
|
-
MainMenuPanels["CONTACTS_SELECT"] = "contacts-select";
|
|
718
|
-
MainMenuPanels["MANAGE_CHAT"] = "manage-chat";
|
|
719
|
-
})(MainMenuPanels || (MainMenuPanels = {}));
|
|
720
|
-
const DEFAULT_MAIN_MENU_STATE = MainMenuPanels.HOME;
|
|
721
|
-
|
|
722
|
-
class SearchComponent {
|
|
723
|
-
constructor() {
|
|
724
|
-
this.queryControl = new FormControl();
|
|
725
|
-
}
|
|
726
|
-
ngOnInit() {
|
|
727
|
-
this.queryCtrlSub = this.queryControl.valueChanges
|
|
728
|
-
.pipe(debounceTime(200))
|
|
729
|
-
.subscribe((value) => this.search.onQueryChange(value));
|
|
730
|
-
}
|
|
731
|
-
ngOnDestroy() {
|
|
732
|
-
if (this.queryCtrlSub) {
|
|
733
|
-
this.queryCtrlSub.unsubscribe();
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
737
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: SearchComponent, isStandalone: true, selector: "rtsee-search", inputs: { search: "search" }, ngImport: i0, template: "<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\"\n *ngIf=\"search.searchInProgress\"\n ></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\"\n class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
|
|
738
|
-
}
|
|
739
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchComponent, decorators: [{
|
|
740
|
-
type: Component,
|
|
741
|
-
args: [{ selector: 'rtsee-search', imports: [
|
|
742
|
-
ReactiveFormsModule,
|
|
743
|
-
PreloaderComponent,
|
|
744
|
-
NgForOf
|
|
745
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\"\n *ngIf=\"search.searchInProgress\"\n ></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\"\n class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n" }]
|
|
746
|
-
}], propDecorators: { search: [{
|
|
747
|
-
type: Input
|
|
748
|
-
}] } });
|
|
749
|
-
|
|
750
|
-
class ManageChatComponent {
|
|
751
|
-
onInviteContactsClicked() {
|
|
752
|
-
this.menuState.activePanel = MainMenuPanels.CONTACTS_SELECT;
|
|
753
|
-
}
|
|
754
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
755
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ManageChatComponent, isStandalone: true, selector: "rtsee-manage-chat", inputs: { messenger: "messenger", menuState: "menuState" }, ngImport: i0, template: "<div class=\"rtsee-messenger-manage-chat\">\n <p>We are going to manage chat here</p>\n <button (click)=\"onInviteContactsClicked()\">Invite Contacts</button>\n</div>\n", styles: [""] }); }
|
|
756
|
-
}
|
|
757
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageChatComponent, decorators: [{
|
|
758
|
-
type: Component,
|
|
759
|
-
args: [{ selector: 'rtsee-manage-chat', standalone: true, template: "<div class=\"rtsee-messenger-manage-chat\">\n <p>We are going to manage chat here</p>\n <button (click)=\"onInviteContactsClicked()\">Invite Contacts</button>\n</div>\n" }]
|
|
760
|
-
}], propDecorators: { messenger: [{
|
|
761
|
-
type: Input
|
|
762
|
-
}], menuState: [{
|
|
763
|
-
type: Input
|
|
764
|
-
}] } });
|
|
765
|
-
|
|
766
|
-
class ContactsMultiselectComponent {
|
|
767
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ContactsMultiselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
768
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ContactsMultiselectComponent, isStandalone: true, selector: "rtsee-contacts-multiselect", inputs: { menuState: "menuState", search: "search" }, ngImport: i0, template: "<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: SearchComponent, selector: "rtsee-search", inputs: ["search"] }] }); }
|
|
769
|
-
}
|
|
770
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ContactsMultiselectComponent, decorators: [{
|
|
771
|
-
type: Component,
|
|
772
|
-
args: [{ selector: 'rtsee-contacts-multiselect', imports: [
|
|
773
|
-
SearchComponent
|
|
774
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n" }]
|
|
775
|
-
}], propDecorators: { menuState: [{
|
|
776
|
-
type: Input
|
|
777
|
-
}], search: [{
|
|
778
|
-
type: Input
|
|
779
|
-
}] } });
|
|
780
|
-
|
|
781
|
-
class MainMenuComponent {
|
|
782
|
-
constructor() {
|
|
783
|
-
this.MainMenuPanels = MainMenuPanels;
|
|
784
|
-
this.state = {
|
|
785
|
-
activePanel: DEFAULT_MAIN_MENU_STATE,
|
|
786
|
-
};
|
|
787
|
-
}
|
|
788
|
-
onNewGroupClicked() {
|
|
789
|
-
this.state.activePanel = MainMenuPanels.CONTACTS_SELECT;
|
|
790
|
-
}
|
|
791
|
-
onNewChannelClicked() {
|
|
792
|
-
this.state.activePanel = MainMenuPanels.MANAGE_CHAT;
|
|
793
|
-
}
|
|
794
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MainMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
795
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: MainMenuComponent, isStandalone: true, selector: "rtsee-main-menu", inputs: { search: "search", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-messenger-main-menu\">\n <div class=\"rtsee-messenger-main-menu-home\" *ngIf=\"state.activePanel === MainMenuPanels.HOME\">\n <ul class=\"rtsee-messenger-controls\">\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewGroupClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">people</span>\n </div>\n <span>New Group</span>\n </div>\n </li>\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewChannelClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">campaign</span>\n </div>\n <span>New Channel</span>\n </div>\n </li>\n </ul>\n <rtsee-search [search]=\"search\" ></rtsee-search>\n </div>\n\n <rtsee-manage-chat *ngIf=\"state.activePanel === MainMenuPanels.MANAGE_CHAT\"\n [messenger]=\"messenger\"\n [menuState]=\"state\"\n ></rtsee-manage-chat>\n <rtsee-contacts-multiselect [search]=\"search\"\n [menuState]=\"state\"\n *ngIf=\"state.activePanel === MainMenuPanels.CONTACTS_SELECT\"\n ></rtsee-contacts-multiselect>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SearchComponent, selector: "rtsee-search", inputs: ["search"] }, { kind: "component", type: ManageChatComponent, selector: "rtsee-manage-chat", inputs: ["messenger", "menuState"] }, { kind: "component", type: ContactsMultiselectComponent, selector: "rtsee-contacts-multiselect", inputs: ["menuState", "search"] }] }); }
|
|
796
|
-
}
|
|
797
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MainMenuComponent, decorators: [{
|
|
798
|
-
type: Component,
|
|
799
|
-
args: [{ selector: 'rtsee-main-menu', imports: [
|
|
800
|
-
NgIf,
|
|
801
|
-
SearchComponent,
|
|
802
|
-
ManageChatComponent,
|
|
803
|
-
ContactsMultiselectComponent
|
|
804
|
-
], standalone: true, template: "<div class=\"rtsee-messenger-main-menu\">\n <div class=\"rtsee-messenger-main-menu-home\" *ngIf=\"state.activePanel === MainMenuPanels.HOME\">\n <ul class=\"rtsee-messenger-controls\">\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewGroupClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">people</span>\n </div>\n <span>New Group</span>\n </div>\n </li>\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewChannelClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">campaign</span>\n </div>\n <span>New Channel</span>\n </div>\n </li>\n </ul>\n <rtsee-search [search]=\"search\" ></rtsee-search>\n </div>\n\n <rtsee-manage-chat *ngIf=\"state.activePanel === MainMenuPanels.MANAGE_CHAT\"\n [messenger]=\"messenger\"\n [menuState]=\"state\"\n ></rtsee-manage-chat>\n <rtsee-contacts-multiselect [search]=\"search\"\n [menuState]=\"state\"\n *ngIf=\"state.activePanel === MainMenuPanels.CONTACTS_SELECT\"\n ></rtsee-contacts-multiselect>\n</div>\n" }]
|
|
805
|
-
}], propDecorators: { search: [{
|
|
806
|
-
type: Input
|
|
807
|
-
}], messenger: [{
|
|
808
|
-
type: Input
|
|
809
|
-
}] } });
|
|
810
|
-
|
|
811
808
|
class MessengerComponent {
|
|
812
|
-
constructor() {
|
|
813
|
-
this.isHeaderExpanded = false;
|
|
814
|
-
}
|
|
809
|
+
constructor() { }
|
|
815
810
|
onScroll() {
|
|
816
811
|
this.messenger.loadChats();
|
|
817
812
|
}
|
|
818
|
-
// onGeneralScroll($event) {
|
|
819
|
-
// // $event.stopPropagation();
|
|
820
|
-
// }
|
|
821
|
-
onHeaderExpandToggled(value) {
|
|
822
|
-
this.isHeaderExpanded = value;
|
|
823
|
-
}
|
|
824
813
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
825
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
814
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: MessengerComponent, isStandalone: true, selector: "rtsee-messenger", inputs: { messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-messenger\" [ngClass]=\"{\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-folded': messenger.folded\n}\">\n <div class=\"rtsee-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\"\n ></rtsee-messenger-header>\n </div>\n <div class=\"rtsee-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n @if (messenger.openedChat) {\n <rtsee-chat [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n } @else if (!messenger.openedChat) {\n <rtsee-chats-list [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n } @else if (messenger.openedProfile) {\n <rtsee-profile></rtsee-profile>\n }\n @if (messenger.loadingChatsInProgress) {\n <rtsee-preloader [diameter]=\"50\" ></rtsee-preloader>\n }\n </div>\n</div>\n\n\n", dependencies: [{ kind: "component", type: MessengerHeaderComponent, selector: "rtsee-messenger-header", inputs: ["messenger"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChatsListComponent, selector: "rtsee-chats-list", inputs: ["messenger", "chats"] }, { kind: "component", type: ChatComponent, selector: "rtsee-chat", inputs: ["chat", "messenger"] }, { kind: "component", type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }, { kind: "component", type: ProfileComponent, selector: "rtsee-profile", inputs: ["messenger", "peer"] }] }); }
|
|
826
815
|
}
|
|
827
816
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MessengerComponent, decorators: [{
|
|
828
817
|
type: Component,
|
|
@@ -833,9 +822,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
833
822
|
ChatsListComponent,
|
|
834
823
|
ChatComponent,
|
|
835
824
|
PreloaderComponent,
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
], standalone: true, template: "<div class=\"rtsee-messenger\" [ngClass]=\"{\n 'rtsee-messenger-main-menu-opened': messenger.mainMenuOpened,\n 'rtsee-messenger-header-expanded': isHeaderExpanded,\n 'rtsee-messenger-folded': messenger.folded\n}\">\n <div class=\"rtsee-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\"\n (expandToggled)=\"onHeaderExpandToggled($event)\"\n ></rtsee-messenger-header>\n </div>\n <div class=\"rtsee-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n <rtsee-chats-list *ngIf=\"!messenger.openedChat\" [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n <rtsee-chat *ngIf=\"messenger.openedChat\" [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n <rtsee-preloader [diameter]=\"50\" *ngIf=\"messenger.loadingChatsInProgress\" ></rtsee-preloader>\n </div>\n <div class=\"rtsee-messenger-main-menu-container\">\n <rtsee-main-menu\n *ngIf=\"messenger.mainMenuOpened\"\n [search]=\"messenger.search\"\n [messenger]=\"messenger\"></rtsee-main-menu>\n </div>\n <div class=\"rtsee-messenger-overlay\" (click)=\"messenger.openMainMenu(false)\"></div>\n</div>\n\n\n" }]
|
|
825
|
+
ProfileComponent
|
|
826
|
+
], standalone: true, template: "<div class=\"rtsee-messenger\" [ngClass]=\"{\n 'rtsee-messenger-header-expanded': messenger.openedProfile || messenger.openedChatDetails,\n 'rtsee-messenger-folded': messenger.folded\n}\">\n <div class=\"rtsee-messenger-header-container\">\n <rtsee-messenger-header [messenger]=\"messenger\"\n ></rtsee-messenger-header>\n </div>\n <div class=\"rtsee-messenger-body-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [scrollWindow]=\"false\"\n (scrolled)=\"onScroll()\"\n >\n @if (messenger.openedChat) {\n <rtsee-chat [messenger]=\"messenger\" [chat]=\"messenger.openedChat\"></rtsee-chat>\n } @else if (!messenger.openedChat) {\n <rtsee-chats-list [chats]=\"messenger.chats\" [messenger]=\"messenger\"></rtsee-chats-list>\n } @else if (messenger.openedProfile) {\n <rtsee-profile></rtsee-profile>\n }\n @if (messenger.loadingChatsInProgress) {\n <rtsee-preloader [diameter]=\"50\" ></rtsee-preloader>\n }\n </div>\n</div>\n\n\n" }]
|
|
839
827
|
}], ctorParameters: () => [], propDecorators: { messenger: [{
|
|
840
828
|
type: Input
|
|
841
829
|
}] } });
|
|
@@ -869,11 +857,16 @@ class EventThumbnailComponent {
|
|
|
869
857
|
this.componentFactoryResolver = componentFactoryResolver;
|
|
870
858
|
this.timeFormatService = timeFormatService;
|
|
871
859
|
this.cd = cd;
|
|
860
|
+
this.timeInAgoFormat = '';
|
|
872
861
|
}
|
|
873
862
|
ngOnInit() {
|
|
874
863
|
if (this.event.data) {
|
|
875
864
|
this.generateTooltip();
|
|
876
865
|
}
|
|
866
|
+
this.timeInAgoFormat = this.timeFormatService.toAgo(this.event.createdAt);
|
|
867
|
+
setInterval(() => {
|
|
868
|
+
this.timeInAgoFormat = this.timeFormatService.toAgo(this.event.createdAt);
|
|
869
|
+
}, 20000);
|
|
877
870
|
}
|
|
878
871
|
generateTooltip() {
|
|
879
872
|
/* eslint-disable */
|
|
@@ -916,15 +909,14 @@ class EventThumbnailComponent {
|
|
|
916
909
|
/* eslint-enable */
|
|
917
910
|
}
|
|
918
911
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: EventThumbnailComponent, deps: [{ token: EventsWidgetsService }, { token: i0.ComponentFactoryResolver }, { token: TimeFormatHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
919
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
912
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: EventThumbnailComponent, isStandalone: true, selector: "rtsee-event-thumbnail", inputs: { event: "event" }, viewQueries: [{ propertyName: "widgetHost", first: true, predicate: WidgetDirective, descendants: true }], ngImport: i0, template: "<div class=\"rtsee-events-dashboard-event-thumbnail\">\n @if (event.widget) {\n <ng-template widgetHost></ng-template>\n } @else if (!event.widget) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail\"\n [ngClass]=\"{'rtsee-events-dashboard-default-event-thumbnail-with-data': event.data}\"\n >\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-name\">{{event.name}}</div>\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-info\">\n @if (event.data) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-details\"\n [title]=\"tooltip\"\n >\n <span class=\"rtsee-events-dashboard-default-event-thumbnail-details-icon material-icons-outlined\"\n >info</span>\n </div>\n }\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-time\">\n <span>{{ timeInAgoFormat }}</span>\n </div>\n </div>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: WidgetDirective, selector: "[widgetHost]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
920
913
|
}
|
|
921
914
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: EventThumbnailComponent, decorators: [{
|
|
922
915
|
type: Component,
|
|
923
916
|
args: [{ selector: 'rtsee-event-thumbnail', imports: [
|
|
924
917
|
WidgetDirective,
|
|
925
|
-
NgIf,
|
|
926
918
|
NgClass
|
|
927
|
-
], standalone: true, template: "<div class=\"rtsee-events-dashboard-event-thumbnail\">\n
|
|
919
|
+
], standalone: true, template: "<div class=\"rtsee-events-dashboard-event-thumbnail\">\n @if (event.widget) {\n <ng-template widgetHost></ng-template>\n } @else if (!event.widget) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail\"\n [ngClass]=\"{'rtsee-events-dashboard-default-event-thumbnail-with-data': event.data}\"\n >\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-name\">{{event.name}}</div>\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-info\">\n @if (event.data) {\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-details\"\n [title]=\"tooltip\"\n >\n <span class=\"rtsee-events-dashboard-default-event-thumbnail-details-icon material-icons-outlined\"\n >info</span>\n </div>\n }\n <div class=\"rtsee-events-dashboard-default-event-thumbnail-time\">\n <span>{{ timeInAgoFormat }}</span>\n </div>\n </div>\n </div>\n }\n</div>\n" }]
|
|
928
920
|
}], ctorParameters: () => [{ type: EventsWidgetsService }, { type: i0.ComponentFactoryResolver }, { type: TimeFormatHelperService }, { type: i0.ChangeDetectorRef }], propDecorators: { event: [{
|
|
929
921
|
type: Input
|
|
930
922
|
}], widgetHost: [{
|
|
@@ -963,15 +955,13 @@ class RtseeEventsDashboardClientThumbnailComponent {
|
|
|
963
955
|
this.dashboard.openChat(this.client);
|
|
964
956
|
}
|
|
965
957
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEventsDashboardClientThumbnailComponent, deps: [{ token: TimeFormatHelperService }, { token: DefaultImagesService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
966
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeEventsDashboardClientThumbnailComponent, isStandalone: true, selector: "ngx-rtsee-events-dashboard-client-thumbnail", inputs: { dashboard: "dashboard", client: "client" }, ngImport: i0, template: "<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n @if(client.isConnected) {\n <div class=\"rtsee-dashboard-client-live-indicator\"></div>\n }\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n @for(session of client.sessions; track session.id) {\n <div class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "component", type: RtseeEventsDashboardSessionComponent, selector: "rtsee-rtsee-events-dashboard-session", inputs: ["session"] }] }); }
|
|
958
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeEventsDashboardClientThumbnailComponent, isStandalone: true, selector: "ngx-rtsee-events-dashboard-client-thumbnail", inputs: { dashboard: "dashboard", client: "client" }, ngImport: i0, template: "<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n @if (client.isConnected) {\n <div class=\"rtsee-dashboard-client-live-indicator\"></div>\n }\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n @for(session of client.sessions; track session.id) {\n <div class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "component", type: RtseeEventsDashboardSessionComponent, selector: "rtsee-rtsee-events-dashboard-session", inputs: ["session"] }] }); }
|
|
967
959
|
}
|
|
968
960
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeEventsDashboardClientThumbnailComponent, decorators: [{
|
|
969
961
|
type: Component,
|
|
970
962
|
args: [{ selector: 'ngx-rtsee-events-dashboard-client-thumbnail', imports: [
|
|
971
|
-
RtseeEventsDashboardSessionComponent
|
|
972
|
-
|
|
973
|
-
NgForOf
|
|
974
|
-
], standalone: true, template: "<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n @if(client.isConnected) {\n <div class=\"rtsee-dashboard-client-live-indicator\"></div>\n }\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n @for(session of client.sessions; track session.id) {\n <div class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n }\n </div>\n</div>\n" }]
|
|
963
|
+
RtseeEventsDashboardSessionComponent
|
|
964
|
+
], standalone: true, template: "<div class=\"rtsee-dashboard-client-thumbnail\">\n <div class=\"rtsee-dashboard-client-header\">\n <div class=\"rtsee-dashboard-client-header-photo\">\n <div class=\"rtsee-dashboard-client-header-image\"\n [style.background-image]=\"'url(' + client.imageUrl || defaultImagesService.PROFILE + ')'\"\n ></div>\n @if (client.isConnected) {\n <div class=\"rtsee-dashboard-client-live-indicator\"></div>\n }\n </div>\n <p class=\"rtsee-dashboard-client-name\">\n <span class=\"rtsee-dashboard-client-name-text\">{{ client.name || client.id }}</span>\n <button (click)=\"openChat()\" class=\"rtsee-dashboard-client-engage\">\n <span class=\"rtsee-dashboard-client-engage-icon material-icons-outlined\">chat_bubble</span>\n </button>\n </p>\n </div>\n <div class=\"rtsee-dashboard-sessions\">\n @for(session of client.sessions; track session.id) {\n <div class=\"rtsee-dashboard-sessions-container\">\n <rtsee-rtsee-events-dashboard-session [session]=\"session\"></rtsee-rtsee-events-dashboard-session>\n </div>\n }\n </div>\n</div>\n" }]
|
|
975
965
|
}], ctorParameters: () => [{ type: TimeFormatHelperService }, { type: DefaultImagesService }], propDecorators: { dashboard: [{
|
|
976
966
|
type: Input
|
|
977
967
|
}], client: [{
|
|
@@ -993,7 +983,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
993
983
|
|
|
994
984
|
class PresentationHeaderComponent {
|
|
995
985
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PresentationHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
996
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: PresentationHeaderComponent, isStandalone: true, selector: "rtsee-presentation-header", inputs: { presentation: "presentation" }, ngImport: i0, template: "<div class=\"rtsee-presentation-header\"\n [ngClass]=\"{\n 'rtsee-presentation-header-convertable': presentation.activeStory,\n 'rtsee-presentation-header-visible': presentation.activeStory?.headerVisible\n }\"\n>\n <div class=\"rtsee-presentation-room-block\">\n @if (presentation.activeRoom) {\n <div class=\"rtsee-presentation-active-room\">\n <p
|
|
986
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: PresentationHeaderComponent, isStandalone: true, selector: "rtsee-presentation-header", inputs: { presentation: "presentation" }, ngImport: i0, template: "<div class=\"rtsee-presentation-header\"\n [ngClass]=\"{\n 'rtsee-presentation-header-convertable': presentation.activeStory,\n 'rtsee-presentation-header-visible': presentation.activeStory?.headerVisible\n }\"\n>\n <div class=\"rtsee-presentation-room-block\">\n @if (presentation.activeRoom && !presentation.activeStory) {\n <div class=\"rtsee-presentation-active-room\">\n <p-button (click)=\"presentation.emitJoinRoomCallEvent()\"\n label=\"Join Video Call\"\n ></p-button>\n </div>\n }\n </div>\n @if (presentation.activeStory) {\n <div class=\"rtsee-presentation-header-active-story-info\">\n <div class=\"rtsee-presentation-header-active-story-info-close\"\n (click)=\"presentation.disableActiveStory()\"\n >\n <i class=\"pi pi-arrow-left rtsee-presentation-header-active-story-info-close-icon\"></i>\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-details\">\n <p-chip [label]=\"presentation.activeStory.name\"\n [image]=\"presentation.activeStory.imageUrl\"\n class=\"rtsee-presentation-header-active-story-name\"\n alt=\"Story image\" />\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-settings\"\n (click)=\"presentation.settings.expand()\"\n >\n <i class=\"pi pi-ellipsis-h rtsee-presentation-header-active-story-info-settings-icon\"></i>\n </div>\n </div>\n }\n @if (presentation.dashboard && !presentation.activeStory && !presentation.isDashboardOpen) {\n <p-button [label]=\"'Dashboard'\"\n (click)=\"presentation.toggleDashboardState()\"\n ></p-button>\n }\n</div>\n", dependencies: [{ kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "styleClass", "disabled", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }] }); }
|
|
997
987
|
}
|
|
998
988
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PresentationHeaderComponent, decorators: [{
|
|
999
989
|
type: Component,
|
|
@@ -1001,7 +991,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1001
991
|
Button,
|
|
1002
992
|
NgClass,
|
|
1003
993
|
Chip
|
|
1004
|
-
], standalone: true, template: "<div class=\"rtsee-presentation-header\"\n [ngClass]=\"{\n 'rtsee-presentation-header-convertable': presentation.activeStory,\n 'rtsee-presentation-header-visible': presentation.activeStory?.headerVisible\n }\"\n>\n <div class=\"rtsee-presentation-room-block\">\n @if (presentation.activeRoom) {\n <div class=\"rtsee-presentation-active-room\">\n <p
|
|
994
|
+
], standalone: true, template: "<div class=\"rtsee-presentation-header\"\n [ngClass]=\"{\n 'rtsee-presentation-header-convertable': presentation.activeStory,\n 'rtsee-presentation-header-visible': presentation.activeStory?.headerVisible\n }\"\n>\n <div class=\"rtsee-presentation-room-block\">\n @if (presentation.activeRoom && !presentation.activeStory) {\n <div class=\"rtsee-presentation-active-room\">\n <p-button (click)=\"presentation.emitJoinRoomCallEvent()\"\n label=\"Join Video Call\"\n ></p-button>\n </div>\n }\n </div>\n @if (presentation.activeStory) {\n <div class=\"rtsee-presentation-header-active-story-info\">\n <div class=\"rtsee-presentation-header-active-story-info-close\"\n (click)=\"presentation.disableActiveStory()\"\n >\n <i class=\"pi pi-arrow-left rtsee-presentation-header-active-story-info-close-icon\"></i>\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-details\">\n <p-chip [label]=\"presentation.activeStory.name\"\n [image]=\"presentation.activeStory.imageUrl\"\n class=\"rtsee-presentation-header-active-story-name\"\n alt=\"Story image\" />\n </div>\n <div class=\"rtsee-presentation-header-active-story-info-settings\"\n (click)=\"presentation.settings.expand()\"\n >\n <i class=\"pi pi-ellipsis-h rtsee-presentation-header-active-story-info-settings-icon\"></i>\n </div>\n </div>\n }\n @if (presentation.dashboard && !presentation.activeStory && !presentation.isDashboardOpen) {\n <p-button [label]=\"'Dashboard'\"\n (click)=\"presentation.toggleDashboardState()\"\n ></p-button>\n }\n</div>\n" }]
|
|
1005
995
|
}], propDecorators: { presentation: [{
|
|
1006
996
|
type: Input
|
|
1007
997
|
}] } });
|
|
@@ -1079,7 +1069,7 @@ class SlideComponent {
|
|
|
1079
1069
|
}
|
|
1080
1070
|
}
|
|
1081
1071
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SlideComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1082
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: SlideComponent, isStandalone: true, selector: "rtsee-slide", inputs: { story: "story", slide: "slide" }, ngImport: i0, template: "<div class=\"rtsee-presentation-slide\" (scroll)=\"onScroll($event.target)\">\n @if (slide.widget) {\n <ng-template widgetHost></ng-template>\n }\n <div class=\"rtsee-presentation-slide-default\">\n @if (slide.imageUrl) {\n <div class=\"rtsee-presentation-slide-image-container\"\n [ngStyle]=\"{'background-image': 'url(' + slide.imageUrl + ')'}\"\n >\n </div>\n }\n <div class=\"rtsee-presentation-slide-text\">\n <p>{{slide.text}}</p>\n </div>\n <div class=\"rtsee-presentation-slide-controls\"\n [ngClass]=\"{'rtsee-presentation-slide-controls-hidden': hideRewindControls}\"\n >\n @if (story.activeSlideNumber !== 1) {\n <p-button class=\"slide-navigation-btn navigation-prev\"\n label=\"Previous Page\"\n icon=\"pi pi-arrow-left\"\n [severity]=\"'secondary'\"\n [iconPos]=\"'left'\"\n (click)=\"slideRewindClicked(false)\"\n >\n </p-button>\n }\n @if (story.activeSlideNumber !== this.story.totalSlides) {\n <p-button class=\"slide-navigation-btn navigation-next\"\n label=\"Next Page\"\n icon=\"pi pi-arrow-right\"\n [iconPos]=\"'right'\"\n (click)=\"slideRewindClicked(true)\"\n >\n </p-button>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: WidgetDirective, selector: "[widgetHost]" }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
1072
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: SlideComponent, isStandalone: true, selector: "rtsee-slide", inputs: { story: "story", slide: "slide", settings: "settings" }, ngImport: i0, template: "<div class=\"rtsee-presentation-slide\" (scroll)=\"onScroll($event.target)\">\n @if (slide.widget) {\n <ng-template widgetHost></ng-template>\n }\n <div class=\"rtsee-presentation-slide-default\">\n @if (slide.imageUrl) {\n <div class=\"rtsee-presentation-slide-image-container\"\n [ngStyle]=\"{'background-image': 'url(' + slide.imageUrl + ')'}\"\n >\n </div>\n }\n <div class=\"rtsee-presentation-slide-text\">\n <p [style.font-size]=\"settings.fontSize + 'rem'\">{{slide.text}}</p>\n </div>\n <div class=\"rtsee-presentation-slide-controls\"\n [ngClass]=\"{'rtsee-presentation-slide-controls-hidden': hideRewindControls}\"\n >\n @if (story.activeSlideNumber !== 1) {\n <p-button class=\"slide-navigation-btn navigation-prev\"\n label=\"Previous Page\"\n icon=\"pi pi-arrow-left\"\n [severity]=\"'secondary'\"\n [iconPos]=\"'left'\"\n (click)=\"slideRewindClicked(false)\"\n >\n </p-button>\n }\n @if (story.activeSlideNumber !== this.story.totalSlides) {\n <p-button class=\"slide-navigation-btn navigation-next\"\n label=\"Next Page\"\n icon=\"pi pi-arrow-right\"\n [iconPos]=\"'right'\"\n (click)=\"slideRewindClicked(true)\"\n >\n </p-button>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: WidgetDirective, selector: "[widgetHost]" }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
1083
1073
|
}
|
|
1084
1074
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SlideComponent, decorators: [{
|
|
1085
1075
|
type: Component,
|
|
@@ -1088,11 +1078,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1088
1078
|
WidgetDirective,
|
|
1089
1079
|
Button,
|
|
1090
1080
|
NgClass
|
|
1091
|
-
], standalone: true, template: "<div class=\"rtsee-presentation-slide\" (scroll)=\"onScroll($event.target)\">\n @if (slide.widget) {\n <ng-template widgetHost></ng-template>\n }\n <div class=\"rtsee-presentation-slide-default\">\n @if (slide.imageUrl) {\n <div class=\"rtsee-presentation-slide-image-container\"\n [ngStyle]=\"{'background-image': 'url(' + slide.imageUrl + ')'}\"\n >\n </div>\n }\n <div class=\"rtsee-presentation-slide-text\">\n <p>{{slide.text}}</p>\n </div>\n <div class=\"rtsee-presentation-slide-controls\"\n [ngClass]=\"{'rtsee-presentation-slide-controls-hidden': hideRewindControls}\"\n >\n @if (story.activeSlideNumber !== 1) {\n <p-button class=\"slide-navigation-btn navigation-prev\"\n label=\"Previous Page\"\n icon=\"pi pi-arrow-left\"\n [severity]=\"'secondary'\"\n [iconPos]=\"'left'\"\n (click)=\"slideRewindClicked(false)\"\n >\n </p-button>\n }\n @if (story.activeSlideNumber !== this.story.totalSlides) {\n <p-button class=\"slide-navigation-btn navigation-next\"\n label=\"Next Page\"\n icon=\"pi pi-arrow-right\"\n [iconPos]=\"'right'\"\n (click)=\"slideRewindClicked(true)\"\n >\n </p-button>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1081
|
+
], standalone: true, template: "<div class=\"rtsee-presentation-slide\" (scroll)=\"onScroll($event.target)\">\n @if (slide.widget) {\n <ng-template widgetHost></ng-template>\n }\n <div class=\"rtsee-presentation-slide-default\">\n @if (slide.imageUrl) {\n <div class=\"rtsee-presentation-slide-image-container\"\n [ngStyle]=\"{'background-image': 'url(' + slide.imageUrl + ')'}\"\n >\n </div>\n }\n <div class=\"rtsee-presentation-slide-text\">\n <p [style.font-size]=\"settings.fontSize + 'rem'\">{{slide.text}}</p>\n </div>\n <div class=\"rtsee-presentation-slide-controls\"\n [ngClass]=\"{'rtsee-presentation-slide-controls-hidden': hideRewindControls}\"\n >\n @if (story.activeSlideNumber !== 1) {\n <p-button class=\"slide-navigation-btn navigation-prev\"\n label=\"Previous Page\"\n icon=\"pi pi-arrow-left\"\n [severity]=\"'secondary'\"\n [iconPos]=\"'left'\"\n (click)=\"slideRewindClicked(false)\"\n >\n </p-button>\n }\n @if (story.activeSlideNumber !== this.story.totalSlides) {\n <p-button class=\"slide-navigation-btn navigation-next\"\n label=\"Next Page\"\n icon=\"pi pi-arrow-right\"\n [iconPos]=\"'right'\"\n (click)=\"slideRewindClicked(true)\"\n >\n </p-button>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1092
1082
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { story: [{
|
|
1093
1083
|
type: Input
|
|
1094
1084
|
}], slide: [{
|
|
1095
1085
|
type: Input
|
|
1086
|
+
}], settings: [{
|
|
1087
|
+
type: Input
|
|
1096
1088
|
}] } });
|
|
1097
1089
|
|
|
1098
1090
|
class StoryPlayerComponent {
|
|
@@ -1110,16 +1102,18 @@ class StoryPlayerComponent {
|
|
|
1110
1102
|
this.story.initSwiper(swiper);
|
|
1111
1103
|
}
|
|
1112
1104
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1113
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: StoryPlayerComponent, isStandalone: true, selector: "rtsee-story-player", inputs: { story: "story" }, viewQueries: [{ propertyName: "swiperEl", first: true, predicate: ["swiperContainer"], descendants: true }], ngImport: i0, template: "<div class=\"rtsee-story-player\">\n <div class=\"rtsee-story-player-slider swiper\" #swiperContainer>\n <div class=\"rtsee-story-player-slider-inner swiper-wrapper\">\n @for (slide of story.slides; track slide.id) {\n <div class=\"story-player-slide-container swiper-slide\"\n [ngClass]=\"{'story-player-slide-active': slide.isActive}\"\n >\n <rtsee-slide [slide]=\"slide\"
|
|
1105
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: StoryPlayerComponent, isStandalone: true, selector: "rtsee-story-player", inputs: { story: "story", settings: "settings" }, viewQueries: [{ propertyName: "swiperEl", first: true, predicate: ["swiperContainer"], descendants: true }], ngImport: i0, template: "<div class=\"rtsee-story-player\">\n <div class=\"rtsee-story-player-slider swiper\" #swiperContainer>\n <div class=\"rtsee-story-player-slider-inner swiper-wrapper\">\n @for (slide of story.slides; track slide.id) {\n <div class=\"story-player-slide-container swiper-slide\"\n [ngClass]=\"{'story-player-slide-active': slide.isActive}\"\n >\n <rtsee-slide [slide]=\"slide\"\n [story]=\"story\"\n [settings]=\"settings\"\n ></rtsee-slide>\n </div>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SlideComponent, selector: "rtsee-slide", inputs: ["story", "slide", "settings"] }] }); }
|
|
1114
1106
|
}
|
|
1115
1107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: StoryPlayerComponent, decorators: [{
|
|
1116
1108
|
type: Component,
|
|
1117
1109
|
args: [{ selector: 'rtsee-story-player', imports: [
|
|
1118
1110
|
NgClass,
|
|
1119
1111
|
SlideComponent
|
|
1120
|
-
], standalone: true, template: "<div class=\"rtsee-story-player\">\n <div class=\"rtsee-story-player-slider swiper\" #swiperContainer>\n <div class=\"rtsee-story-player-slider-inner swiper-wrapper\">\n @for (slide of story.slides; track slide.id) {\n <div class=\"story-player-slide-container swiper-slide\"\n [ngClass]=\"{'story-player-slide-active': slide.isActive}\"\n >\n <rtsee-slide [slide]=\"slide\"
|
|
1112
|
+
], standalone: true, template: "<div class=\"rtsee-story-player\">\n <div class=\"rtsee-story-player-slider swiper\" #swiperContainer>\n <div class=\"rtsee-story-player-slider-inner swiper-wrapper\">\n @for (slide of story.slides; track slide.id) {\n <div class=\"story-player-slide-container swiper-slide\"\n [ngClass]=\"{'story-player-slide-active': slide.isActive}\"\n >\n <rtsee-slide [slide]=\"slide\"\n [story]=\"story\"\n [settings]=\"settings\"\n ></rtsee-slide>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
|
|
1121
1113
|
}], ctorParameters: () => [], propDecorators: { story: [{
|
|
1122
1114
|
type: Input
|
|
1115
|
+
}], settings: [{
|
|
1116
|
+
type: Input
|
|
1123
1117
|
}], swiperEl: [{
|
|
1124
1118
|
type: ViewChild,
|
|
1125
1119
|
args: ['swiperContainer']
|
|
@@ -1208,7 +1202,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1208
1202
|
|
|
1209
1203
|
class AutocompleteComponent {
|
|
1210
1204
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1211
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: AutocompleteComponent, isStandalone: true, selector: "rtsee-autocomplete", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"rtsee-autocomplete rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-autoComplete [(ngModel)]=\"config.selectedSuggestions\"\n [inputId]=\"config.inputId\"\n [multiple]=\"config.allowMultipleSelections\"\n [fluid]=\"config.fluid\"\n [suggestions]=\"config.visibleSuggestions\"\n [optionLabel]=\"config.suggestionLabel\"\n (completeMethod)=\"config.onQueryChanged($event)\"\n ></p-autoComplete>\n <label [for]=\"config.inputId\">{{config.inputName}}</label>\n </p-floatlabel>\n </p-inputgroup>\n</div>\n", dependencies: [{ kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i1$
|
|
1205
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: AutocompleteComponent, isStandalone: true, selector: "rtsee-autocomplete", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"rtsee-autocomplete rtsee-form-field-container\">\n <p-inputgroup>\n <p-floatlabel variant=\"on\">\n <p-autoComplete [(ngModel)]=\"config.selectedSuggestions\"\n [inputId]=\"config.inputId\"\n [multiple]=\"config.allowMultipleSelections\"\n [fluid]=\"config.fluid\"\n [suggestions]=\"config.visibleSuggestions\"\n [optionLabel]=\"config.suggestionLabel\"\n (completeMethod)=\"config.onQueryChanged($event)\"\n ></p-autoComplete>\n <label [for]=\"config.inputId\">{{config.inputName}}</label>\n </p-floatlabel>\n </p-inputgroup>\n</div>\n", dependencies: [{ kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i1$2.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
1212
1206
|
}
|
|
1213
1207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
1214
1208
|
type: Component,
|
|
@@ -1576,10 +1570,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1576
1570
|
type: Input
|
|
1577
1571
|
}] } });
|
|
1578
1572
|
|
|
1573
|
+
class PresentationSettingsComponent {
|
|
1574
|
+
constructor() {
|
|
1575
|
+
this.COMMON_CONSTANTS = COMMON_CONSTANTS;
|
|
1576
|
+
this.window = window;
|
|
1577
|
+
}
|
|
1578
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PresentationSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1579
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: PresentationSettingsComponent, isStandalone: true, selector: "rtsee-presentation-settings", inputs: { settings: "settings", presentation: "presentation" }, ngImport: i0, template: "<div class=\"rtsee-presentation-settings\">\n <div class=\"rtsee-presentation-settings-header\">\n <p-chip label=\"Settings\" />\n <p-button label=\"Close\"\n (click)=\"settings.collapse()\"\n class=\"rtsee-presentations-dashboard-close-btn\"\n ></p-button>\n </div>\n\n <div class=\"rtsee-presentation-rooms\">\n <p-fieldset legend=\"Rooms\">\n <p-listbox [options]=\"presentation.rooms\"\n [(ngModel)]=\"presentation.selectedRoom\"\n (onChange)=\"presentation.setActiveRoom()\"\n class=\"rtsee-presentation-settings-rooms-list\"\n >\n <ng-template #item let-room>\n <div class=\"rtsee-presentation-settings-rooms-list-item\">\n\n <img [src]=\"room.imageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\"\n class=\"rtsee-presentation-settings-rooms-list-item-image\" />\n <div>{{ room.name }}</div>\n </div>\n </ng-template>\n </p-listbox>\n @if (presentation.selectedRoom) {\n <div class=\"rtsee-presentation-room-invite\">\n <p-button label=\"Start A Call\"\n (click)=\"presentation.emitJoinRoomCallEvent()\"\n ></p-button>\n <div class=\"rtsee-presentation-room-invite-link\">\n <p-button icon=\"pi pi-copy\"\n severity=\"secondary\"\n class=\"copy-btn\"\n [cdkCopyToClipboard]=\"window.location.origin + '?room_id=' + presentation.selectedRoom.id\"\n ></p-button>\n <span>{{ window.location.origin + '?room_id=' + presentation.selectedRoom.id }}</span>\n </div>\n\n </div>\n }\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-sound-settings\">\n <p-fieldset legend=\"Volume\" class=\"rtsee-presentation-sound-settings-fieldset\">\n <div class=\"rtsee-presentation-sound-settings-inner\">\n <div class=\"rtsee-presentation-sound-settings-inner-left\">\n <p-slider [(ngModel)]=\"settings.volume\"\n (onChange)=\"settings.setVolume(settings.volume)\"\n />\n </div>\n <div class=\"rtsee-presentation-sound-settings-inner-right\">\n <p-tag severity=\"info\"\n class=\"rtsee-presentation-sound-value-label\"\n [icon]=\"settings.volume ? 'pi pi-volume-up' : 'pi pi-volume-off'\"\n [value]=\"settings.volume.toString()\"\n [rounded]=\"true\" />\n </div>\n </div>\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-font-size-settings\">\n <p-fieldset legend=\"Font Size\">\n <div class=\"rtsee-presentation-font-size-range\">\n <p-slider [(ngModel)]=\"settings.fontSizeOption\"\n (onChange)=\"settings.setFontSize(settings.fontSizeOption)\"\n [min]=\"1\"\n [max]=\"10\"\n />\n </div>\n <p-message severity=\"secondary\" class=\"rtsee-presentation-font-size-example\">\n <span [style.font-size]=\"settings.fontSize + 'rem'\">A long time ago in a galaxy far, far away...</span>\n </p-message>\n </p-fieldset>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: Slider, selector: "p-slider", inputs: ["animate", "min", "max", "orientation", "step", "range", "styleClass", "ariaLabel", "ariaLabelledBy", "tabindex", "autofocus"], outputs: ["onChange", "onSlideEnd"] }, { kind: "component", type: Fieldset, selector: "p-fieldset", inputs: ["legend", "toggleable", "collapsed", "style", "styleClass", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "styleClass", "disabled", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }, { kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "component", type: Listbox, selector: "p-listbox, p-listBox, p-list-box", inputs: ["id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "ariaLabel", "selectOnFocus", "searchLocale", "focusOnHover", "filterMessage", "filterFields", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "scrollHeight", "tabindex", "multiple", "styleClass", "listStyle", "listStyleClass", "readonly", "checkbox", "filter", "filterBy", "filterMatchMode", "filterLocale", "metaKeySelection", "dataKey", "showToggleAll", "optionLabel", "optionValue", "optionGroupChildren", "optionGroupLabel", "optionDisabled", "ariaFilterLabel", "filterPlaceHolder", "emptyFilterMessage", "emptyMessage", "group", "options", "filterValue", "selectAll", "striped", "highlightOnSelect", "checkmark", "dragdrop", "dropListData", "fluid"], outputs: ["onChange", "onClick", "onDblClick", "onFilter", "onFocus", "onBlur", "onSelectAllChange", "onLazyLoad", "onDrop"] }, { kind: "directive", type: CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }] }); }
|
|
1580
|
+
}
|
|
1581
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PresentationSettingsComponent, decorators: [{
|
|
1582
|
+
type: Component,
|
|
1583
|
+
args: [{ selector: 'rtsee-presentation-settings', imports: [
|
|
1584
|
+
Slider,
|
|
1585
|
+
Fieldset,
|
|
1586
|
+
FormsModule,
|
|
1587
|
+
Button,
|
|
1588
|
+
Chip,
|
|
1589
|
+
Message,
|
|
1590
|
+
Tag,
|
|
1591
|
+
Listbox,
|
|
1592
|
+
CdkCopyToClipboard
|
|
1593
|
+
], template: "<div class=\"rtsee-presentation-settings\">\n <div class=\"rtsee-presentation-settings-header\">\n <p-chip label=\"Settings\" />\n <p-button label=\"Close\"\n (click)=\"settings.collapse()\"\n class=\"rtsee-presentations-dashboard-close-btn\"\n ></p-button>\n </div>\n\n <div class=\"rtsee-presentation-rooms\">\n <p-fieldset legend=\"Rooms\">\n <p-listbox [options]=\"presentation.rooms\"\n [(ngModel)]=\"presentation.selectedRoom\"\n (onChange)=\"presentation.setActiveRoom()\"\n class=\"rtsee-presentation-settings-rooms-list\"\n >\n <ng-template #item let-room>\n <div class=\"rtsee-presentation-settings-rooms-list-item\">\n\n <img [src]=\"room.imageUrl || COMMON_CONSTANTS.defaultProfileImgUrl\"\n class=\"rtsee-presentation-settings-rooms-list-item-image\" />\n <div>{{ room.name }}</div>\n </div>\n </ng-template>\n </p-listbox>\n @if (presentation.selectedRoom) {\n <div class=\"rtsee-presentation-room-invite\">\n <p-button label=\"Start A Call\"\n (click)=\"presentation.emitJoinRoomCallEvent()\"\n ></p-button>\n <div class=\"rtsee-presentation-room-invite-link\">\n <p-button icon=\"pi pi-copy\"\n severity=\"secondary\"\n class=\"copy-btn\"\n [cdkCopyToClipboard]=\"window.location.origin + '?room_id=' + presentation.selectedRoom.id\"\n ></p-button>\n <span>{{ window.location.origin + '?room_id=' + presentation.selectedRoom.id }}</span>\n </div>\n\n </div>\n }\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-sound-settings\">\n <p-fieldset legend=\"Volume\" class=\"rtsee-presentation-sound-settings-fieldset\">\n <div class=\"rtsee-presentation-sound-settings-inner\">\n <div class=\"rtsee-presentation-sound-settings-inner-left\">\n <p-slider [(ngModel)]=\"settings.volume\"\n (onChange)=\"settings.setVolume(settings.volume)\"\n />\n </div>\n <div class=\"rtsee-presentation-sound-settings-inner-right\">\n <p-tag severity=\"info\"\n class=\"rtsee-presentation-sound-value-label\"\n [icon]=\"settings.volume ? 'pi pi-volume-up' : 'pi pi-volume-off'\"\n [value]=\"settings.volume.toString()\"\n [rounded]=\"true\" />\n </div>\n </div>\n </p-fieldset>\n </div>\n <div class=\"rtsee-presentation-font-size-settings\">\n <p-fieldset legend=\"Font Size\">\n <div class=\"rtsee-presentation-font-size-range\">\n <p-slider [(ngModel)]=\"settings.fontSizeOption\"\n (onChange)=\"settings.setFontSize(settings.fontSizeOption)\"\n [min]=\"1\"\n [max]=\"10\"\n />\n </div>\n <p-message severity=\"secondary\" class=\"rtsee-presentation-font-size-example\">\n <span [style.font-size]=\"settings.fontSize + 'rem'\">A long time ago in a galaxy far, far away...</span>\n </p-message>\n </p-fieldset>\n </div>\n</div>\n" }]
|
|
1594
|
+
}], propDecorators: { settings: [{
|
|
1595
|
+
type: Input
|
|
1596
|
+
}], presentation: [{
|
|
1597
|
+
type: Input
|
|
1598
|
+
}] } });
|
|
1599
|
+
|
|
1579
1600
|
class PresentationComponent {
|
|
1580
1601
|
constructor() { }
|
|
1581
1602
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PresentationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1582
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: PresentationComponent, isStandalone: true, selector: "rtsee-presentation", inputs: { presentation: "presentation" }, ngImport: i0, template: "<div class=\"rtsee-presentation\">\n <div class=\"rtsee-presentation-header-block\">\n <rtsee-presentation-header [presentation]=\"presentation\"\n ></rtsee-presentation-header>\n </div>\n\n @if (presentation.storyLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n
|
|
1603
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: PresentationComponent, isStandalone: true, selector: "rtsee-presentation", inputs: { presentation: "presentation" }, ngImport: i0, template: "<div class=\"rtsee-presentation\">\n <div class=\"rtsee-presentation-header-block\">\n <rtsee-presentation-header [presentation]=\"presentation\"\n ></rtsee-presentation-header>\n </div>\n\n @if (presentation.storyLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n @if(presentation.isDashboardOpen && presentation.dashboard) {\n <rtsee-presentations-dashboard [dashboard]=\"presentation.dashboard\"\n ></rtsee-presentations-dashboard>\n }\n\n @if (presentation.settings.isExpanded) {\n <rtsee-presentation-settings [settings]=\"presentation.settings\"\n [presentation]=\"presentation\"\n ></rtsee-presentation-settings>\n }\n\n @if (!presentation.isDashboardOpen && !presentation.activeStory && !presentation.storyLoadInProgress) {\n <div class=\"rtsee-presentation-categories-list\">\n @if (presentation.categoriesLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n @for (category of presentation.categories; track category.id) {\n <p>{{category.name}}</p>\n <div class=\"rtsee-presentation-stories-list\">\n @for (story of category.stories; track story.id) {\n <div class=\"rtsee-presentation-story-thumbnail-container\"\n (click)=\"presentation.setActiveStoryById(story.id)\"\n >\n <rtsee-story-thumbnail\n [story]=\"story\"\n ></rtsee-story-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (presentation.activeStory) {\n <div class=\"rtsee-presentation-story-viewer-container\">\n <rtsee-story-player [story]=\"presentation.activeStory\"\n [settings]=\"presentation.settings\"\n ></rtsee-story-player>\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: PresentationHeaderComponent, selector: "rtsee-presentation-header", inputs: ["presentation"] }, { kind: "component", type: StoryThumbnailComponent, selector: "rtsee-story-thumbnail", inputs: ["story"] }, { kind: "component", type: StoryPlayerComponent, selector: "rtsee-story-player", inputs: ["story", "settings"] }, { kind: "component", type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }, { kind: "component", type: PresentationsDashboardComponent, selector: "rtsee-presentations-dashboard", inputs: ["dashboard"] }, { kind: "component", type: PresentationSettingsComponent, selector: "rtsee-presentation-settings", inputs: ["settings", "presentation"] }] }); }
|
|
1583
1604
|
}
|
|
1584
1605
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PresentationComponent, decorators: [{
|
|
1585
1606
|
type: Component,
|
|
@@ -1589,15 +1610,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1589
1610
|
StoryPlayerComponent,
|
|
1590
1611
|
PreloaderComponent,
|
|
1591
1612
|
PreloaderComponent,
|
|
1592
|
-
PresentationsDashboardComponent
|
|
1593
|
-
|
|
1613
|
+
PresentationsDashboardComponent,
|
|
1614
|
+
PresentationSettingsComponent
|
|
1615
|
+
], standalone: true, template: "<div class=\"rtsee-presentation\">\n <div class=\"rtsee-presentation-header-block\">\n <rtsee-presentation-header [presentation]=\"presentation\"\n ></rtsee-presentation-header>\n </div>\n\n @if (presentation.storyLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n\n @if(presentation.isDashboardOpen && presentation.dashboard) {\n <rtsee-presentations-dashboard [dashboard]=\"presentation.dashboard\"\n ></rtsee-presentations-dashboard>\n }\n\n @if (presentation.settings.isExpanded) {\n <rtsee-presentation-settings [settings]=\"presentation.settings\"\n [presentation]=\"presentation\"\n ></rtsee-presentation-settings>\n }\n\n @if (!presentation.isDashboardOpen && !presentation.activeStory && !presentation.storyLoadInProgress) {\n <div class=\"rtsee-presentation-categories-list\">\n @if (presentation.categoriesLoadInProgress) {\n <rtsee-preloader [diameter]=\"15\"></rtsee-preloader>\n }\n @for (category of presentation.categories; track category.id) {\n <p>{{category.name}}</p>\n <div class=\"rtsee-presentation-stories-list\">\n @for (story of category.stories; track story.id) {\n <div class=\"rtsee-presentation-story-thumbnail-container\"\n (click)=\"presentation.setActiveStoryById(story.id)\"\n >\n <rtsee-story-thumbnail\n [story]=\"story\"\n ></rtsee-story-thumbnail>\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (presentation.activeStory) {\n <div class=\"rtsee-presentation-story-viewer-container\">\n <rtsee-story-player [story]=\"presentation.activeStory\"\n [settings]=\"presentation.settings\"\n ></rtsee-story-player>\n </div>\n }\n</div>\n" }]
|
|
1594
1616
|
}], ctorParameters: () => [], propDecorators: { presentation: [{
|
|
1595
1617
|
type: Input
|
|
1596
1618
|
}] } });
|
|
1597
1619
|
|
|
1598
1620
|
class RtseeNavComponent {
|
|
1599
|
-
|
|
1600
|
-
|
|
1621
|
+
constructor(authService) {
|
|
1622
|
+
this.authService = authService;
|
|
1623
|
+
this.profileLink = '';
|
|
1624
|
+
this.queryParams = {};
|
|
1625
|
+
}
|
|
1626
|
+
ngOnInit() {
|
|
1627
|
+
this.populateProfileLinkTillSuccess();
|
|
1628
|
+
}
|
|
1629
|
+
populateProfileLinkTillSuccess() {
|
|
1630
|
+
const success = this.populateProfileLink();
|
|
1631
|
+
if (!success) {
|
|
1632
|
+
setTimeout(() => {
|
|
1633
|
+
this.populateProfileLinkTillSuccess();
|
|
1634
|
+
}, 1000);
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
populateProfileLink() {
|
|
1638
|
+
const peer = this.rtsee.socketConnection?.myPeer || null;
|
|
1639
|
+
if (!peer) {
|
|
1640
|
+
console.log('RTSeeContainer: user peer not found');
|
|
1641
|
+
return false;
|
|
1642
|
+
}
|
|
1643
|
+
console.log('peer', peer);
|
|
1644
|
+
console.log('peer', peer.permissions?.length);
|
|
1645
|
+
const profileRoute = this.config.routes
|
|
1646
|
+
.find((r) => r.rtseeRoute === RTSeeRoutesList.PROFILE) || null;
|
|
1647
|
+
const dashboardRoute = this.config.routes
|
|
1648
|
+
.find((r) => r.rtseeRoute === RTSeeRoutesList.EVENTS_DASHBOARD) || null;
|
|
1649
|
+
const messengerRoute = this.config.routes
|
|
1650
|
+
.find((r) => r.rtseeRoute === RTSeeRoutesList.MESSENGER) || null;
|
|
1651
|
+
if (dashboardRoute) {
|
|
1652
|
+
dashboardRoute.isEnabled = hasPermission(peer, RTSeePeerPermissions.ACCESS_EVENTS_DASHBOARD);
|
|
1653
|
+
}
|
|
1654
|
+
if (profileRoute && profileRoute.link) {
|
|
1655
|
+
this.profileLink = `${profileRoute.link}/${peer.clientId}`;
|
|
1656
|
+
return true;
|
|
1657
|
+
}
|
|
1658
|
+
if (messengerRoute && messengerRoute.link) {
|
|
1659
|
+
this.profileLink = messengerRoute.link;
|
|
1660
|
+
this.queryParams = { userId: peer.clientId };
|
|
1661
|
+
return true;
|
|
1662
|
+
}
|
|
1663
|
+
return false;
|
|
1664
|
+
}
|
|
1665
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeNavComponent, deps: [{ token: RTSeeAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1666
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RtseeNavComponent, isStandalone: true, selector: "rtsee-nav", inputs: { config: "config", rtsee: "rtsee" }, ngImport: i0, template: "<div class=\"rtsee-nav\">\n @if (config.siteLogo) {\n <div class=\"rtsee-site-logo\">\n <p-image [src]=\"config.siteLogo.src\" class=\"rtsee-site-logo-image\"></p-image>\n <p-divider class=\"rtsee-site-logo-divider\" />\n </div>\n }\n <div class=\"rtsee-nav-bar\">\n @for (route of config.routes; track route.name) {\n <a [routerLink]=\"route.link\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [ngClass]=\"{'rtsee-nav-item-hidden': !route.isEnabled || !route.iconClassName}\"\n [routerLinkActiveOptions]=\"{ exact: route.exactActiveLinkMatcher || false }\"\n class=\"rtsee-nav-item\"\n [pTooltip]=\"route.name\"\n >\n <span [ngClass]=\"route.iconClassName\"\n class=\"rtsee-nav-item-icon\" >\n </span>\n </a>\n }\n <p-avatar [image]=\"rtsee.socketConnection?.myPeer?.imageUrl\"\n class=\"rtsee-nav-item rtsee-nav-image rtsee-nav-profile\"\n [routerLink]=\"profileLink\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n [queryParams]=\"queryParams\"\n ></p-avatar>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: Image, selector: "p-image", inputs: ["imageClass", "imageStyle", "styleClass", "src", "srcSet", "sizes", "previewImageSrc", "previewImageSrcSet", "previewImageSizes", "alt", "width", "height", "loading", "preview", "showTransitionOptions", "hideTransitionOptions", "appendTo"], outputs: ["onShow", "onHide", "onImageError"] }, { kind: "component", type: Divider, selector: "p-divider", inputs: ["styleClass", "layout", "type", "align"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }] }); }
|
|
1601
1667
|
}
|
|
1602
1668
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RtseeNavComponent, decorators: [{
|
|
1603
1669
|
type: Component,
|
|
@@ -1609,23 +1675,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1609
1675
|
Image,
|
|
1610
1676
|
Divider,
|
|
1611
1677
|
Tooltip
|
|
1612
|
-
], standalone: true, template: "<div class=\"rtsee-nav\">\n @if (config.siteLogo) {\n <div class=\"rtsee-site-logo\">\n <p-image [src]=\"config.siteLogo.src\" class=\"rtsee-site-logo-image\"></p-image>\n <p-divider class=\"rtsee-site-logo-divider\" />\n </div>\n }\n <div class=\"rtsee-nav-bar\">\n @for (route of config.routes; track route.name) {\n <a [routerLink]=\"route.link\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [ngClass]=\"{'rtsee-nav-item-hidden': !route.isEnabled || !route.iconClassName}\"\n [routerLinkActiveOptions]=\"{ exact: route.exactActiveLinkMatcher || false }\"\n class=\"rtsee-nav-item\"\n [pTooltip]=\"route.name\"\n >\n <span [ngClass]=\"route.iconClassName\"\n class=\"rtsee-nav-item-icon\" >\n </span>\n </a>\n }\n <p-avatar [image]=\"rtsee.socketConnection?.myPeer?.imageUrl\"\n class=\"rtsee-nav-item rtsee-nav-image rtsee-nav-profile\"\n ></p-avatar>\n </div>\n</div>\n" }]
|
|
1613
|
-
}], propDecorators: { config: [{
|
|
1678
|
+
], standalone: true, template: "<div class=\"rtsee-nav\">\n @if (config.siteLogo) {\n <div class=\"rtsee-site-logo\">\n <p-image [src]=\"config.siteLogo.src\" class=\"rtsee-site-logo-image\"></p-image>\n <p-divider class=\"rtsee-site-logo-divider\" />\n </div>\n }\n <div class=\"rtsee-nav-bar\">\n @for (route of config.routes; track route.name) {\n <a [routerLink]=\"route.link\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [ngClass]=\"{'rtsee-nav-item-hidden': !route.isEnabled || !route.iconClassName}\"\n [routerLinkActiveOptions]=\"{ exact: route.exactActiveLinkMatcher || false }\"\n class=\"rtsee-nav-item\"\n [pTooltip]=\"route.name\"\n >\n <span [ngClass]=\"route.iconClassName\"\n class=\"rtsee-nav-item-icon\" >\n </span>\n </a>\n }\n <p-avatar [image]=\"rtsee.socketConnection?.myPeer?.imageUrl\"\n class=\"rtsee-nav-item rtsee-nav-image rtsee-nav-profile\"\n [routerLink]=\"profileLink\"\n routerLinkActive=\"rtsee-nav-item-active\"\n [routerLinkActiveOptions]=\"{exact: true}\"\n [queryParams]=\"queryParams\"\n ></p-avatar>\n </div>\n</div>\n" }]
|
|
1679
|
+
}], ctorParameters: () => [{ type: RTSeeAuthService }], propDecorators: { config: [{
|
|
1614
1680
|
type: Input
|
|
1615
1681
|
}], rtsee: [{
|
|
1616
1682
|
type: Input
|
|
1617
1683
|
}] } });
|
|
1618
1684
|
|
|
1619
1685
|
class RTSeeContainerComponent {
|
|
1620
|
-
constructor() {
|
|
1686
|
+
constructor(authService) {
|
|
1687
|
+
this.authService = authService;
|
|
1621
1688
|
this.isSidenavExpanded = true;
|
|
1622
|
-
this.isSidenavExpandededed = true;
|
|
1623
1689
|
}
|
|
1624
1690
|
onSidenavToggleClicked() {
|
|
1625
1691
|
this.isSidenavExpanded = !this.isSidenavExpanded;
|
|
1626
1692
|
}
|
|
1627
|
-
|
|
1628
|
-
|
|
1693
|
+
ngOnInit() {
|
|
1694
|
+
this.authService.init(this.auth);
|
|
1695
|
+
}
|
|
1696
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeContainerComponent, deps: [{ token: RTSeeAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1697
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RTSeeContainerComponent, isStandalone: true, selector: "rtsee-container", inputs: { rtsee: "rtsee", navigationConfig: "navigationConfig", auth: "auth" }, ngImport: i0, template: "<div class=\"rtsee-shell\"\n [ngClass]=\"{\n 'rtsee-shell-conference-mode': rtsee.conference && rtsee.conference.isInActiveCall,\n 'rtsee-shell-messenger-active': rtsee.messenger && rtsee.activeTab === 'messenger',\n 'rtsee-shell-dashboard-active': rtsee.eventsDashboard && rtsee.activeTab === 'events-dashboard',\n 'rtsee-shell-presentation-active': rtsee.presentation && rtsee.activeTab === 'presentation',\n 'rtsee-shell-side-nav-expanded': isSidenavExpanded\n }\"\n>\n <div class=\"rtsee-nav-block\">\n <rtsee-nav [config]=\"navigationConfig\" [rtsee]=\"rtsee\"></rtsee-nav>\n </div>\n\n <div class=\"rtsee-shell-panel\">\n <div class=\"rtsee-shell-panel-inner\">\n @if (rtsee.conference && rtsee.conference.isInActiveCall) {\n <div class=\"rtsee-conference-container\">\n <rtsee-conference [rtSee]=\"rtsee.conference\"\n ></rtsee-conference>\n </div>\n }\n\n @if (rtsee.messenger) {\n <div class=\"rtsee-messenger-container\">\n <rtsee-messenger [messenger]=\"rtsee.messenger\"\n ></rtsee-messenger>\n </div>\n }\n\n @if (rtsee.eventsDashboard && rtsee.eventsDashboard.isReady) {\n <div class=\"rtsee-events-dashboard-container\">\n <rtsee-events-dashboard [eventsDashboard]=\"rtsee.eventsDashboard\"\n ></rtsee-events-dashboard>\n </div>\n }\n\n @if (rtsee.presentation && rtsee.presentation.isActive) {\n <div class=\"rtsee-presentation-container\">\n <rtsee-presentation [presentation]=\"rtsee.presentation\"></rtsee-presentation>\n </div>\n }\n </div>\n </div>\n\n <div class=\"rtsee-content\">\n <ng-content></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: RTSeeConferenceComponent, selector: "rtsee-conference", inputs: ["rtSee"] }, { kind: "component", type: MessengerComponent, selector: "rtsee-messenger", inputs: ["messenger"] }, { kind: "component", type: RtseeEventsDashboardComponent, selector: "rtsee-events-dashboard", inputs: ["eventsDashboard"] }, { kind: "component", type: PresentationComponent, selector: "rtsee-presentation", inputs: ["presentation"] }, { kind: "component", type: RtseeNavComponent, selector: "rtsee-nav", inputs: ["config", "rtsee"] }] }); }
|
|
1629
1698
|
}
|
|
1630
1699
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeContainerComponent, decorators: [{
|
|
1631
1700
|
type: Component,
|
|
@@ -1636,48 +1705,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
1636
1705
|
RtseeEventsDashboardComponent,
|
|
1637
1706
|
PresentationComponent,
|
|
1638
1707
|
RtseeNavComponent
|
|
1639
|
-
], standalone: true, template: "<div class=\"rtsee-shell\"\n [ngClass]=\"{\n 'rtsee-shell-conference-mode': rtsee.conference && rtsee.conference.isInActiveCall,\n 'rtsee-shell-messenger-active': rtsee.messenger && rtsee.activeTab === 'messenger',\n 'rtsee-shell-dashboard-active': rtsee.eventsDashboard && rtsee.activeTab === 'events-dashboard',\n 'rtsee-shell-presentation-active': rtsee.presentation && rtsee.activeTab === 'presentation',\n 'rtsee-shell-side-nav-expanded': isSidenavExpanded\n }\"\n>\n <div class=\"rtsee-nav-block\">\n <rtsee-nav [config]=\"navigationConfig\" [rtsee]=\"rtsee\"></rtsee-nav>\n </div>\n\n <div class=\"rtsee-shell-panel\">\n @if (rtsee.conference && rtsee.conference.isInActiveCall) {\n
|
|
1640
|
-
}], propDecorators: { rtsee: [{
|
|
1708
|
+
], standalone: true, template: "<div class=\"rtsee-shell\"\n [ngClass]=\"{\n 'rtsee-shell-conference-mode': rtsee.conference && rtsee.conference.isInActiveCall,\n 'rtsee-shell-messenger-active': rtsee.messenger && rtsee.activeTab === 'messenger',\n 'rtsee-shell-dashboard-active': rtsee.eventsDashboard && rtsee.activeTab === 'events-dashboard',\n 'rtsee-shell-presentation-active': rtsee.presentation && rtsee.activeTab === 'presentation',\n 'rtsee-shell-side-nav-expanded': isSidenavExpanded\n }\"\n>\n <div class=\"rtsee-nav-block\">\n <rtsee-nav [config]=\"navigationConfig\" [rtsee]=\"rtsee\"></rtsee-nav>\n </div>\n\n <div class=\"rtsee-shell-panel\">\n <div class=\"rtsee-shell-panel-inner\">\n @if (rtsee.conference && rtsee.conference.isInActiveCall) {\n <div class=\"rtsee-conference-container\">\n <rtsee-conference [rtSee]=\"rtsee.conference\"\n ></rtsee-conference>\n </div>\n }\n\n @if (rtsee.messenger) {\n <div class=\"rtsee-messenger-container\">\n <rtsee-messenger [messenger]=\"rtsee.messenger\"\n ></rtsee-messenger>\n </div>\n }\n\n @if (rtsee.eventsDashboard && rtsee.eventsDashboard.isReady) {\n <div class=\"rtsee-events-dashboard-container\">\n <rtsee-events-dashboard [eventsDashboard]=\"rtsee.eventsDashboard\"\n ></rtsee-events-dashboard>\n </div>\n }\n\n @if (rtsee.presentation && rtsee.presentation.isActive) {\n <div class=\"rtsee-presentation-container\">\n <rtsee-presentation [presentation]=\"rtsee.presentation\"></rtsee-presentation>\n </div>\n }\n </div>\n </div>\n\n <div class=\"rtsee-content\">\n <ng-content></ng-content>\n </div>\n</div>\n" }]
|
|
1709
|
+
}], ctorParameters: () => [{ type: RTSeeAuthService }], propDecorators: { rtsee: [{
|
|
1641
1710
|
type: Input
|
|
1642
1711
|
}], navigationConfig: [{
|
|
1643
1712
|
type: Input
|
|
1713
|
+
}], auth: [{
|
|
1714
|
+
type: Input
|
|
1644
1715
|
}] } });
|
|
1645
1716
|
|
|
1646
|
-
class RTSeeAuthService {
|
|
1647
|
-
constructor(http) {
|
|
1648
|
-
this.http = http;
|
|
1649
|
-
}
|
|
1650
|
-
init(auth) {
|
|
1651
|
-
this.rtseeAuth = auth;
|
|
1652
|
-
this.authConfiguration = this.rtseeAuth.authConfiguration;
|
|
1653
|
-
}
|
|
1654
|
-
signIn(credentials) {
|
|
1655
|
-
return this.http
|
|
1656
|
-
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.SIGN_IN), credentials)
|
|
1657
|
-
.pipe(tap((res) => this.rtseeAuth.authenticate(res)));
|
|
1658
|
-
}
|
|
1659
|
-
signUp(credentials) {
|
|
1660
|
-
return this.http
|
|
1661
|
-
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.SIGN_UP), credentials);
|
|
1662
|
-
}
|
|
1663
|
-
forgotPassword(credentials) {
|
|
1664
|
-
return this.http
|
|
1665
|
-
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.FORGOT_PASSWORD), credentials);
|
|
1666
|
-
}
|
|
1667
|
-
resetPassword(credentials) {
|
|
1668
|
-
return this.http
|
|
1669
|
-
.post(this.authConfiguration.getEndpointPathByEndpointName(AuthEndpointsKeys.RESET_PASSWORD), credentials);
|
|
1670
|
-
}
|
|
1671
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, deps: [{ token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1672
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, providedIn: 'root' }); }
|
|
1673
|
-
}
|
|
1674
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthService, decorators: [{
|
|
1675
|
-
type: Injectable,
|
|
1676
|
-
args: [{
|
|
1677
|
-
providedIn: 'root'
|
|
1678
|
-
}]
|
|
1679
|
-
}], ctorParameters: () => [{ type: i1$2.HttpClient }] });
|
|
1680
|
-
|
|
1681
1717
|
class SignInComponent {
|
|
1682
1718
|
constructor(formBuilder, router, authService) {
|
|
1683
1719
|
this.formBuilder = formBuilder;
|
|
@@ -1718,6 +1754,9 @@ class SignInComponent {
|
|
|
1718
1754
|
next: (() => {
|
|
1719
1755
|
void this.router.navigate(this.authService.rtseeAuth.authConfiguration.defaultPostLoginRoute);
|
|
1720
1756
|
this.enableFormFields();
|
|
1757
|
+
setTimeout(() => {
|
|
1758
|
+
window.location.reload();
|
|
1759
|
+
}, 100);
|
|
1721
1760
|
}),
|
|
1722
1761
|
error: ((error) => {
|
|
1723
1762
|
console.log(error);
|
|
@@ -1966,15 +2005,6 @@ var FormErrorKey;
|
|
|
1966
2005
|
FormErrorKey["passwordsMismatch"] = "passwordsMismatch";
|
|
1967
2006
|
})(FormErrorKey || (FormErrorKey = {}));
|
|
1968
2007
|
|
|
1969
|
-
const COMMON_CONSTANTS = {
|
|
1970
|
-
minPasswordLength: 8,
|
|
1971
|
-
requestItemLimit: 20,
|
|
1972
|
-
customTimeFormat: 'HH:mm',
|
|
1973
|
-
customDateFormat: 'dd/MM/YYYY',
|
|
1974
|
-
customDateFormatDaysJs: 'DD/MM/YYYY',
|
|
1975
|
-
customDateTimeFormat: 'dd/MM/YYYY HH:mm',
|
|
1976
|
-
};
|
|
1977
|
-
|
|
1978
2008
|
class ResetPasswordComponent {
|
|
1979
2009
|
constructor(formBuilder, route, router, authService) {
|
|
1980
2010
|
this.formBuilder = formBuilder;
|
|
@@ -2074,7 +2104,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2074
2104
|
|
|
2075
2105
|
class PrivacyPolicyComponent {
|
|
2076
2106
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PrivacyPolicyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2077
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: PrivacyPolicyComponent, isStandalone: true, selector: "rtsee-privacy-policy", ngImport: i0, template: "<div class=\"privacy-policy-container\">\n <div class=\"policy-card\">\n <div class=\"header-section\">\n <div class=\"header-content\">\n <div class=\"flex justify-content-center align-items-center\">\n <h1>Terms of Use & Privacy Policy</h1>\n </div>\n </div>\n </div>\n\n <div class=\"content-section\">\n <p-message severity=\"info\" [closable]=\"false\" class=\"info-banner\">\n <ng-template pTemplate>\n <div class=\"p-message-content\">\n <p class=\"last-updated\"><strong>Last Updated:</strong> December 2024</p>\n <p>By using our services, you agree to the terms and conditions outlined in this document. Please read this Privacy Policy and Terms of Use carefully before using our platform.</p>\n </div>\n </ng-template>\n </p-message>\n\n <h2>1. Acceptance of Terms</h2>\n <p>By accessing and using this service, you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to abide by the above, please do not use this service.</p>\n\n <h2>2. Privacy Policy</h2>\n\n <h3>2.1 Information We Collect</h3>\n <p>We collect information you provide directly to us, such as when you create an account, use our services, or contact us for support. This may include:</p>\n <ul>\n <li><strong>Personal Information:</strong> Name, email address, phone number, and other contact details</li>\n <li><strong>Account Information:</strong> Username, password, and profile information</li>\n <li><strong>Usage Data:</strong> Information about how you use our services, including pages visited, time spent, and features used</li>\n <li><strong>Device Information:</strong> IP address, browser type, operating system, and device identifiers</li>\n <li><strong>Cookies and Tracking:</strong> We use cookies and similar technologies to enhance your experience</li>\n </ul>\n\n <h3>2.2 How We Use Your Information</h3>\n <p>We use the information we collect to:</p>\n <ul>\n <li>Provide, maintain, and improve our services</li>\n <li>Process transactions and send related information</li>\n <li>Send technical notices, updates, security alerts, and support messages</li>\n <li>Respond to your comments, questions, and requests</li>\n <li>Monitor and analyze trends, usage, and activities</li>\n <li>Personalize and improve your experience</li>\n <li>Detect, investigate, and prevent fraudulent transactions and other illegal activities</li>\n </ul>\n\n <h3>2.3 Information Sharing and Disclosure</h3>\n <p>We do not sell, trade, or otherwise transfer your personal information to third parties without your consent, except in the following circumstances:</p>\n <ul>\n <li><strong>Service Providers:</strong> We may share information with trusted third-party service providers who assist us in operating our platform</li>\n <li><strong>Legal Requirements:</strong> We may disclose information when required by law or to protect our rights and safety</li>\n <li><strong>Business Transfers:</strong> In connection with any merger, sale of assets, or acquisition of all or a portion of our business</li>\n <li><strong>Consent:</strong> We may share information with your explicit consent</li>\n </ul>\n\n <h3>2.4 Data Security</h3>\n <p>We implement appropriate technical and organizational security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is 100% secure.</p>\n\n <h3>2.5 Data Retention</h3>\n <p>We retain your personal information for as long as necessary to provide our services and fulfill the purposes outlined in this privacy policy, unless a longer retention period is required or permitted by law.</p>\n\n <h3>2.6 Your Rights</h3>\n <p>Depending on your location, you may have certain rights regarding your personal information, including:</p>\n <ul>\n <li>The right to access and receive a copy of your personal information</li>\n <li>The right to rectify or update your personal information</li>\n <li>The right to erase your personal information</li>\n <li>The right to restrict or object to the processing of your personal information</li>\n <li>The right to data portability</li>\n <li>The right to withdraw consent at any time</li>\n </ul>\n\n <h2>3. Terms of Service</h2>\n\n <h3>3.1 User Accounts</h3>\n <p>To access certain features of our service, you may be required to create an account. You are responsible for:</p>\n <ul>\n <li>Maintaining the confidentiality of your account credentials</li>\n <li>All activities that occur under your account</li>\n <li>Notifying us immediately of any unauthorized use of your account</li>\n <li>Providing accurate and up-to-date information</li>\n </ul>\n\n <h3>3.2 Acceptable Use</h3>\n <p>You agree not to use our service for any unlawful purpose or any purpose prohibited under this clause. You may not use our service in any manner that could damage, disable, overburden, or impair our servers or networks.</p>\n\n <h3>3.3 Prohibited Activities</h3>\n <p>The following activities are prohibited:</p>\n <ul>\n <li>Violating any applicable laws or regulations</li>\n <li>Transmitting or procuring the sending of any unsolicited or unauthorized advertising</li>\n <li>Attempting to gain unauthorized access to any portion of our service</li>\n <li>Interfering with or disrupting the service or servers connected to the service</li>\n <li>Using any automated system to access the service for any purpose</li>\n <li>Impersonating any person or entity or misrepresenting your affiliation with a person or entity</li>\n </ul>\n\n <h3>3.4 Intellectual Property</h3>\n <p>The service and its original content, features, and functionality are and will remain the exclusive property of our company and its licensors. The service is protected by copyright, trademark, and other laws.</p>\n\n <h3>3.5 Termination</h3>\n <p>We may terminate or suspend your account and bar access to the service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever, including without limitation if you breach the Terms.</p>\n\n <h3>3.6 Disclaimer</h3>\n <p>The information on this service is provided on an \"as is\" basis. To the fullest extent permitted by law, this company excludes all representations, warranties, conditions and terms relating to our service and the use of this service.</p>\n\n <h3>3.7 Limitation of Liability</h3>\n <p>In no event shall our company, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from your use of the service.</p>\n\n <h2>4. Cookies and Tracking Technologies</h2>\n <p>We use cookies and similar tracking technologies to track activity on our service and hold certain information. Cookies are files with a small amount of data which may include an anonymous unique identifier. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent.</p>\n\n <h2>5. Third-Party Services</h2>\n <p>Our service may contain links to third-party websites or services that are not owned or controlled by us. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party websites or services.</p>\n\n <h2>6. Children's Privacy</h2>\n <p>Our service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from children under 13. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact us.</p>\n\n <h2>7. International Data Transfers</h2>\n <p>Your information may be transferred to and processed in countries other than your own. We ensure that such transfers comply with applicable data protection laws and implement appropriate safeguards to protect your personal information.</p>\n\n <h2>8. Changes to This Policy</h2>\n <p>We reserve the right to update or change our Privacy Policy and Terms of Use at any time. We will notify you of any changes by posting the new Privacy Policy and Terms of Use on this page and updating the \"Last Updated\" date.</p>\n\n <div class=\"contact-section\">\n <h2>9. Contact Information</h2>\n <p>If you have any questions about this Privacy Policy and Terms of Use, please contact us:</p>\n <ul>\n <li><strong>Email:</strong> [Your Email Address]</li>\n <li><strong>Address:</strong> [Your Company Address]</li>\n <li><strong>Phone:</strong> [Your Contact Number]</li>\n </ul>\n </div>\n\n <div class=\"footer-section\">\n <p>This document was last updated on December 2024</p>\n </div>\n </div>\n </div>\n</div>\n\n", styles: ["@charset \"UTF-8\";.privacy-policy-container{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);padding:2rem 1rem}.privacy-policy-container .policy-card{max-width:1000px;margin:0 auto;background:#fffffff2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:20px;box-shadow:0 20px 40px #0000001a;border:1px solid rgba(255,255,255,.2);overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.privacy-policy-container .policy-card:hover{transform:translateY(-5px);box-shadow:0 25px 50px #00000026}.privacy-policy-container .header-section{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:2rem;position:relative;overflow:hidden}.privacy-policy-container .header-section:before{content:\"\";position:absolute;inset:0;background:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><defs><pattern id=\"grain\" width=\"100\" height=\"100\" patternUnits=\"userSpaceOnUse\"><circle cx=\"25\" cy=\"25\" r=\"1\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"75\" cy=\"75\" r=\"1\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"50\" cy=\"10\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"10\" cy=\"60\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"90\" cy=\"40\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/></pattern></defs><rect width=\"100\" height=\"100\" fill=\"url(%23grain)\"/></svg>');opacity:.3}.privacy-policy-container .header-section .header-content{position:relative;z-index:1}.privacy-policy-container .header-section h1{font-size:2.5rem;font-weight:700;margin:0;text-shadow:0 2px 4px rgba(0,0,0,.3);background:linear-gradient(45deg,#fff,#f0f0f0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.privacy-policy-container .content-section{padding:3rem}.privacy-policy-container .content-section .info-banner{background:linear-gradient(135deg,#e3f2fd,#bbdefb);border:none;border-radius:15px;box-shadow:0 5px 15px #2196f31a;margin-bottom:2rem}.privacy-policy-container .content-section .info-banner .p-message-content{padding:1.5rem}.privacy-policy-container .content-section .info-banner .p-message-content .last-updated{font-size:1.1rem;font-weight:600;color:#1976d2;margin-bottom:1rem}.privacy-policy-container .content-section .info-banner .p-message-content p{color:#424242;line-height:1.6;margin:0}.privacy-policy-container .content-section h2{color:#2c3e50;font-size:1.8rem;font-weight:600;margin:2.5rem 0 1rem;padding-bottom:.5rem;border-bottom:3px solid #667eea;position:relative}.privacy-policy-container .content-section h2:before{content:\"\";position:absolute;bottom:-3px;left:0;width:50px;height:3px;background:linear-gradient(90deg,#667eea,#764ba2);border-radius:2px}.privacy-policy-container .content-section h3{color:#34495e;font-size:1.3rem;font-weight:600;margin:2rem 0 1rem;padding-left:1rem;border-left:4px solid #667eea;background:linear-gradient(90deg,rgba(102,126,234,.1),transparent);padding:.75rem 1rem;border-radius:0 8px 8px 0}.privacy-policy-container .content-section p{color:#555;line-height:1.7;margin-bottom:1.5rem;font-size:1rem}.privacy-policy-container .content-section ul{margin:1rem 0 2rem;padding-left:0}.privacy-policy-container .content-section ul li{color:#555;line-height:1.6;margin-bottom:.75rem;padding-left:2rem;position:relative;font-size:1rem}.privacy-policy-container .content-section ul li:before{content:\"\\25b6\";position:absolute;left:0;color:#667eea;font-size:.8rem;top:.2rem}.privacy-policy-container .content-section ul li strong{color:#2c3e50;font-weight:600}.privacy-policy-container .content-section .contact-section{background:linear-gradient(135deg,#f8f9fa,#e9ecef);border-radius:15px;padding:2rem;margin-top:3rem;border:1px solid #dee2e6;box-shadow:0 5px 15px #0000000d}.privacy-policy-container .content-section .contact-section h2{color:#2c3e50;margin-top:0;border-bottom:3px solid #28a745}.privacy-policy-container .content-section .contact-section h2:before{background:linear-gradient(90deg,#28a745,#20c997)}.privacy-policy-container .content-section .contact-section ul li:before{color:#28a745}.privacy-policy-container .content-section .footer-section{text-align:center;margin-top:3rem;padding-top:2rem;border-top:2px solid #e9ecef}.privacy-policy-container .content-section .footer-section p{color:#6c757d;font-style:italic;font-size:.9rem;margin:0}@media (max-width: 768px){.privacy-policy-container{padding:1rem .5rem}.privacy-policy-container .policy-card{border-radius:15px}.privacy-policy-container .header-section{padding:1.5rem}.privacy-policy-container .header-section h1{font-size:2rem}.privacy-policy-container .content-section{padding:2rem 1.5rem}.privacy-policy-container .content-section h2{font-size:1.5rem}.privacy-policy-container .content-section h3{font-size:1.2rem}}@media (max-width: 480px){.privacy-policy-container .header-section h1{font-size:1.8rem}.privacy-policy-container .content-section{padding:1.5rem 1rem}.privacy-policy-container .content-section h2{font-size:1.3rem}.privacy-policy-container .content-section h3{font-size:1.1rem}}html{scroll-behavior:smooth}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#5a6fd8,#6a4190)}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i2$1.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }] }); }
|
|
2107
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: PrivacyPolicyComponent, isStandalone: true, selector: "rtsee-privacy-policy", ngImport: i0, template: "<div class=\"privacy-policy-container\">\n <div class=\"policy-card\">\n <div class=\"header-section\">\n <div class=\"header-content\">\n <div class=\"flex justify-content-center align-items-center\">\n <h1>Terms of Use & Privacy Policy</h1>\n </div>\n </div>\n </div>\n\n <div class=\"content-section\">\n <p-message severity=\"info\" [closable]=\"false\" class=\"info-banner\">\n <ng-template pTemplate>\n <div class=\"p-message-content\">\n <p class=\"last-updated\"><strong>Last Updated:</strong> December 2024</p>\n <p>By using our services, you agree to the terms and conditions outlined in this document. Please read this Privacy Policy and Terms of Use carefully before using our platform.</p>\n </div>\n </ng-template>\n </p-message>\n\n <h2>1. Acceptance of Terms</h2>\n <p>By accessing and using this service, you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to abide by the above, please do not use this service.</p>\n\n <h2>2. Privacy Policy</h2>\n\n <h3>2.1 Information We Collect</h3>\n <p>We collect information you provide directly to us, such as when you create an account, use our services, or contact us for support. This may include:</p>\n <ul>\n <li><strong>Personal Information:</strong> Name, email address, phone number, and other contact details</li>\n <li><strong>Account Information:</strong> Username, password, and profile information</li>\n <li><strong>Usage Data:</strong> Information about how you use our services, including pages visited, time spent, and features used</li>\n <li><strong>Device Information:</strong> IP address, browser type, operating system, and device identifiers</li>\n <li><strong>Cookies and Tracking:</strong> We use cookies and similar technologies to enhance your experience</li>\n </ul>\n\n <h3>2.2 How We Use Your Information</h3>\n <p>We use the information we collect to:</p>\n <ul>\n <li>Provide, maintain, and improve our services</li>\n <li>Process transactions and send related information</li>\n <li>Send technical notices, updates, security alerts, and support messages</li>\n <li>Respond to your comments, questions, and requests</li>\n <li>Monitor and analyze trends, usage, and activities</li>\n <li>Personalize and improve your experience</li>\n <li>Detect, investigate, and prevent fraudulent transactions and other illegal activities</li>\n </ul>\n\n <h3>2.3 Information Sharing and Disclosure</h3>\n <p>We do not sell, trade, or otherwise transfer your personal information to third parties without your consent, except in the following circumstances:</p>\n <ul>\n <li><strong>Service Providers:</strong> We may share information with trusted third-party service providers who assist us in operating our platform</li>\n <li><strong>Legal Requirements:</strong> We may disclose information when required by law or to protect our rights and safety</li>\n <li><strong>Business Transfers:</strong> In connection with any merger, sale of assets, or acquisition of all or a portion of our business</li>\n <li><strong>Consent:</strong> We may share information with your explicit consent</li>\n </ul>\n\n <h3>2.4 Data Security</h3>\n <p>We implement appropriate technical and organizational security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is 100% secure.</p>\n\n <h3>2.5 Data Retention</h3>\n <p>We retain your personal information for as long as necessary to provide our services and fulfill the purposes outlined in this privacy policy, unless a longer retention period is required or permitted by law.</p>\n\n <h3>2.6 Your Rights</h3>\n <p>Depending on your location, you may have certain rights regarding your personal information, including:</p>\n <ul>\n <li>The right to access and receive a copy of your personal information</li>\n <li>The right to rectify or update your personal information</li>\n <li>The right to erase your personal information</li>\n <li>The right to restrict or object to the processing of your personal information</li>\n <li>The right to data portability</li>\n <li>The right to withdraw consent at any time</li>\n </ul>\n\n <h2>3. Terms of Service</h2>\n\n <h3>3.1 User Accounts</h3>\n <p>To access certain features of our service, you may be required to create an account. You are responsible for:</p>\n <ul>\n <li>Maintaining the confidentiality of your account credentials</li>\n <li>All activities that occur under your account</li>\n <li>Notifying us immediately of any unauthorized use of your account</li>\n <li>Providing accurate and up-to-date information</li>\n </ul>\n\n <h3>3.2 Acceptable Use</h3>\n <p>You agree not to use our service for any unlawful purpose or any purpose prohibited under this clause. You may not use our service in any manner that could damage, disable, overburden, or impair our servers or networks.</p>\n\n <h3>3.3 Prohibited Activities</h3>\n <p>The following activities are prohibited:</p>\n <ul>\n <li>Violating any applicable laws or regulations</li>\n <li>Transmitting or procuring the sending of any unsolicited or unauthorized advertising</li>\n <li>Attempting to gain unauthorized access to any portion of our service</li>\n <li>Interfering with or disrupting the service or servers connected to the service</li>\n <li>Using any automated system to access the service for any purpose</li>\n <li>Impersonating any person or entity or misrepresenting your affiliation with a person or entity</li>\n </ul>\n\n <h3>3.4 Intellectual Property</h3>\n <p>The service and its original content, features, and functionality are and will remain the exclusive property of our company and its licensors. The service is protected by copyright, trademark, and other laws.</p>\n\n <h3>3.5 Termination</h3>\n <p>We may terminate or suspend your account and bar access to the service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever, including without limitation if you breach the Terms.</p>\n\n <h3>3.6 Disclaimer</h3>\n <p>The information on this service is provided on an \"as is\" basis. To the fullest extent permitted by law, this company excludes all representations, warranties, conditions and terms relating to our service and the use of this service.</p>\n\n <h3>3.7 Limitation of Liability</h3>\n <p>In no event shall our company, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from your use of the service.</p>\n\n <h2>4. Cookies and Tracking Technologies</h2>\n <p>We use cookies and similar tracking technologies to track activity on our service and hold certain information. Cookies are files with a small amount of data which may include an anonymous unique identifier. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent.</p>\n\n <h2>5. Third-Party Services</h2>\n <p>Our service may contain links to third-party websites or services that are not owned or controlled by us. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party websites or services.</p>\n\n <h2>6. Children's Privacy</h2>\n <p>Our service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from children under 13. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact us.</p>\n\n <h2>7. International Data Transfers</h2>\n <p>Your information may be transferred to and processed in countries other than your own. We ensure that such transfers comply with applicable data protection laws and implement appropriate safeguards to protect your personal information.</p>\n\n <h2>8. Changes to This Policy</h2>\n <p>We reserve the right to update or change our Privacy Policy and Terms of Use at any time. We will notify you of any changes by posting the new Privacy Policy and Terms of Use on this page and updating the \"Last Updated\" date.</p>\n\n <div class=\"contact-section\">\n <h2>9. Contact Information</h2>\n <p>If you have any questions about this Privacy Policy and Terms of Use, please contact us:</p>\n <ul>\n <li><strong>Email:</strong> [Your Email Address]</li>\n <li><strong>Address:</strong> [Your Company Address]</li>\n <li><strong>Phone:</strong> [Your Contact Number]</li>\n </ul>\n </div>\n\n <div class=\"footer-section\">\n <p>This document was last updated on December 2024</p>\n </div>\n </div>\n </div>\n</div>\n\n", styles: ["@charset \"UTF-8\";.privacy-policy-container{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);padding:2rem 1rem}.privacy-policy-container .policy-card{max-width:1000px;margin:0 auto;background:#fffffff2;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:20px;box-shadow:0 20px 40px #0000001a;border:1px solid rgba(255,255,255,.2);overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.privacy-policy-container .policy-card:hover{transform:translateY(-5px);box-shadow:0 25px 50px #00000026}.privacy-policy-container .header-section{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:2rem;position:relative;overflow:hidden}.privacy-policy-container .header-section:before{content:\"\";position:absolute;inset:0;background:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"><defs><pattern id=\"grain\" width=\"100\" height=\"100\" patternUnits=\"userSpaceOnUse\"><circle cx=\"25\" cy=\"25\" r=\"1\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"75\" cy=\"75\" r=\"1\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"50\" cy=\"10\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"10\" cy=\"60\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/><circle cx=\"90\" cy=\"40\" r=\"0.5\" fill=\"white\" opacity=\"0.1\"/></pattern></defs><rect width=\"100\" height=\"100\" fill=\"url(%23grain)\"/></svg>');opacity:.3}.privacy-policy-container .header-section .header-content{position:relative;z-index:1}.privacy-policy-container .header-section h1{font-size:2.5rem;font-weight:700;margin:0;text-shadow:0 2px 4px rgba(0,0,0,.3);background:linear-gradient(45deg,#fff,#f0f0f0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.privacy-policy-container .content-section{padding:3rem}.privacy-policy-container .content-section .info-banner{background:linear-gradient(135deg,#e3f2fd,#bbdefb);border:none;border-radius:15px;box-shadow:0 5px 15px #2196f31a;margin-bottom:2rem}.privacy-policy-container .content-section .info-banner .p-message-content{padding:1.5rem}.privacy-policy-container .content-section .info-banner .p-message-content .last-updated{font-size:1.1rem;font-weight:600;color:#1976d2;margin-bottom:1rem}.privacy-policy-container .content-section .info-banner .p-message-content p{color:#424242;line-height:1.6;margin:0}.privacy-policy-container .content-section h2{color:#2c3e50;font-size:1.8rem;font-weight:600;margin:2.5rem 0 1rem;padding-bottom:.5rem;border-bottom:3px solid #667eea;position:relative}.privacy-policy-container .content-section h2:before{content:\"\";position:absolute;bottom:-3px;left:0;width:50px;height:3px;background:linear-gradient(90deg,#667eea,#764ba2);border-radius:2px}.privacy-policy-container .content-section h3{color:#34495e;font-size:1.3rem;font-weight:600;margin:2rem 0 1rem;padding-left:1rem;border-left:4px solid #667eea;background:linear-gradient(90deg,rgba(102,126,234,.1),transparent);padding:.75rem 1rem;border-radius:0 8px 8px 0}.privacy-policy-container .content-section p{color:#555;line-height:1.7;margin-bottom:1.5rem;font-size:1rem}.privacy-policy-container .content-section ul{margin:1rem 0 2rem;padding-left:0}.privacy-policy-container .content-section ul li{color:#555;line-height:1.6;margin-bottom:.75rem;padding-left:2rem;position:relative;font-size:1rem}.privacy-policy-container .content-section ul li:before{content:\"\\25b6\";position:absolute;left:0;color:#667eea;font-size:.8rem;top:.2rem}.privacy-policy-container .content-section ul li strong{color:#2c3e50;font-weight:600}.privacy-policy-container .content-section .contact-section{background:linear-gradient(135deg,#f8f9fa,#e9ecef);border-radius:15px;padding:2rem;margin-top:3rem;border:1px solid #dee2e6;box-shadow:0 5px 15px #0000000d}.privacy-policy-container .content-section .contact-section h2{color:#2c3e50;margin-top:0;border-bottom:3px solid #28a745}.privacy-policy-container .content-section .contact-section h2:before{background:linear-gradient(90deg,#28a745,#20c997)}.privacy-policy-container .content-section .contact-section ul li:before{color:#28a745}.privacy-policy-container .content-section .footer-section{text-align:center;margin-top:3rem;padding-top:2rem;border-top:2px solid #e9ecef}.privacy-policy-container .content-section .footer-section p{color:#6c757d;font-style:italic;font-size:.9rem;margin:0}@media (max-width: 768px){.privacy-policy-container{padding:1rem .5rem}.privacy-policy-container .policy-card{border-radius:15px}.privacy-policy-container .header-section{padding:1.5rem}.privacy-policy-container .header-section h1{font-size:2rem}.privacy-policy-container .content-section{padding:2rem 1.5rem}.privacy-policy-container .content-section h2{font-size:1.5rem}.privacy-policy-container .content-section h3{font-size:1.2rem}}@media (max-width: 480px){.privacy-policy-container .header-section h1{font-size:1.8rem}.privacy-policy-container .content-section{padding:1.5rem 1rem}.privacy-policy-container .content-section h2{font-size:1.3rem}.privacy-policy-container .content-section h3{font-size:1.1rem}}html{scroll-behavior:smooth}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#5a6fd8,#6a4190)}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i2$2.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }] }); }
|
|
2078
2108
|
}
|
|
2079
2109
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: PrivacyPolicyComponent, decorators: [{
|
|
2080
2110
|
type: Component,
|
|
@@ -2110,7 +2140,7 @@ class RTSeeAuthComponent {
|
|
|
2110
2140
|
this.authService.init(this.auth);
|
|
2111
2141
|
}
|
|
2112
2142
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthComponent, deps: [{ token: RTSeeAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2113
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RTSeeAuthComponent, isStandalone: true, selector: "rtsee-auth", inputs: { auth: "auth" }, ngImport: i0, template: "<div class=\"rtsee-auth\">\n @if (authService.rtseeAuth) {\n @if (activeComponent === 'sign-in') {\n <rtsee-sign-in></rtsee-sign-in>\n }\n @if (activeComponent === 'sign-up') {\n <rtsee-sign-up></rtsee-sign-up>\n }\n @if (activeComponent === 'forgot-password') {\n <rtsee-forgot-password></rtsee-forgot-password>\n }\n @if (activeComponent === 'reset-password') {\n <rtsee-reset-password
|
|
2143
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: RTSeeAuthComponent, isStandalone: true, selector: "rtsee-auth", inputs: { auth: "auth" }, ngImport: i0, template: "<div class=\"rtsee-auth\">\n @if (authService.rtseeAuth) {\n @if (activeComponent === 'sign-in') {\n <rtsee-sign-in></rtsee-sign-in>\n }\n @if (activeComponent === 'sign-up') {\n <rtsee-sign-up></rtsee-sign-up>\n }\n @if (activeComponent === 'forgot-password') {\n <rtsee-forgot-password></rtsee-forgot-password>\n }\n @if (activeComponent === 'reset-password') {\n <rtsee-reset-password></rtsee-reset-password>\n }\n @if (activeComponent === 'privacy-policy') {\n <rtsee-privacy-policy></rtsee-privacy-policy>\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: SignInComponent, selector: "rtsee-sign-in" }, { kind: "component", type: SignUpComponent, selector: "rtsee-sign-up" }, { kind: "component", type: ForgotPasswordComponent, selector: "rtsee-forgot-password" }, { kind: "component", type: ResetPasswordComponent, selector: "rtsee-reset-password" }, { kind: "component", type: PrivacyPolicyComponent, selector: "rtsee-privacy-policy" }] }); }
|
|
2114
2144
|
}
|
|
2115
2145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RTSeeAuthComponent, decorators: [{
|
|
2116
2146
|
type: Component,
|
|
@@ -2119,9 +2149,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2119
2149
|
SignUpComponent,
|
|
2120
2150
|
ForgotPasswordComponent,
|
|
2121
2151
|
ResetPasswordComponent,
|
|
2122
|
-
PrivacyPolicyComponent
|
|
2123
|
-
|
|
2124
|
-
], standalone: true, template: "<div class=\"rtsee-auth\">\n @if (authService.rtseeAuth) {\n @if (activeComponent === 'sign-in') {\n <rtsee-sign-in></rtsee-sign-in>\n }\n @if (activeComponent === 'sign-up') {\n <rtsee-sign-up></rtsee-sign-up>\n }\n @if (activeComponent === 'forgot-password') {\n <rtsee-forgot-password></rtsee-forgot-password>\n }\n @if (activeComponent === 'reset-password') {\n <rtsee-reset-password *ngIf=\"activeComponent === 'reset-password'\"></rtsee-reset-password>\n }\n @if (activeComponent === 'privacy-policy') {\n <rtsee-privacy-policy></rtsee-privacy-policy>\n }\n }\n</div>\n" }]
|
|
2152
|
+
PrivacyPolicyComponent
|
|
2153
|
+
], standalone: true, template: "<div class=\"rtsee-auth\">\n @if (authService.rtseeAuth) {\n @if (activeComponent === 'sign-in') {\n <rtsee-sign-in></rtsee-sign-in>\n }\n @if (activeComponent === 'sign-up') {\n <rtsee-sign-up></rtsee-sign-up>\n }\n @if (activeComponent === 'forgot-password') {\n <rtsee-forgot-password></rtsee-forgot-password>\n }\n @if (activeComponent === 'reset-password') {\n <rtsee-reset-password></rtsee-reset-password>\n }\n @if (activeComponent === 'privacy-policy') {\n <rtsee-privacy-policy></rtsee-privacy-policy>\n }\n }\n</div>\n" }]
|
|
2125
2154
|
}], ctorParameters: () => [{ type: RTSeeAuthService }], propDecorators: { auth: [{
|
|
2126
2155
|
type: Input
|
|
2127
2156
|
}] } });
|
|
@@ -2144,6 +2173,103 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
|
|
|
2144
2173
|
args: [{ selector: 'ngx-rtsee-events-dashboard-client', standalone: true, template: "<p>rtsee-events-dashboard-client works!</p>\n" }]
|
|
2145
2174
|
}] });
|
|
2146
2175
|
|
|
2176
|
+
var MainMenuPanels;
|
|
2177
|
+
(function (MainMenuPanels) {
|
|
2178
|
+
MainMenuPanels["HOME"] = "home";
|
|
2179
|
+
MainMenuPanels["CONTACTS_SELECT"] = "contacts-select";
|
|
2180
|
+
MainMenuPanels["MANAGE_CHAT"] = "manage-chat";
|
|
2181
|
+
})(MainMenuPanels || (MainMenuPanels = {}));
|
|
2182
|
+
const DEFAULT_MAIN_MENU_STATE = MainMenuPanels.HOME;
|
|
2183
|
+
|
|
2184
|
+
class SearchComponent {
|
|
2185
|
+
constructor() {
|
|
2186
|
+
this.queryControl = new FormControl();
|
|
2187
|
+
}
|
|
2188
|
+
ngOnInit() {
|
|
2189
|
+
this.queryCtrlSub = this.queryControl.valueChanges
|
|
2190
|
+
.pipe(debounceTime(200))
|
|
2191
|
+
.subscribe((value) => this.search.onQueryChange(value));
|
|
2192
|
+
}
|
|
2193
|
+
ngOnDestroy() {
|
|
2194
|
+
if (this.queryCtrlSub) {
|
|
2195
|
+
this.queryCtrlSub.unsubscribe();
|
|
2196
|
+
}
|
|
2197
|
+
}
|
|
2198
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: SearchComponent, isStandalone: true, selector: "rtsee-search", inputs: { search: "search" }, ngImport: i0, template: "<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\"\n *ngIf=\"search.searchInProgress\"\n ></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\"\n class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: PreloaderComponent, selector: "rtsee-preloader", inputs: ["diameter", "color"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
|
|
2200
|
+
}
|
|
2201
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SearchComponent, decorators: [{
|
|
2202
|
+
type: Component,
|
|
2203
|
+
args: [{ selector: 'rtsee-search', imports: [
|
|
2204
|
+
ReactiveFormsModule,
|
|
2205
|
+
PreloaderComponent,
|
|
2206
|
+
NgForOf
|
|
2207
|
+
], standalone: true, template: "<div class=\"rtsee-messenger-search\">\n <input type=\"text\"\n [formControl]=\"queryControl\"\n class=\"rtsee-messenger-search-input\"\n placeholder=\"Search\"/>\n</div>\n\n<div class=\"rtsee-messenger-search-results\">\n <rtsee-preloader [diameter]=\"50\"\n *ngIf=\"search.searchInProgress\"\n ></rtsee-preloader>\n <p>Chats</p>\n <div class=\"rtsee-messenger-search-results-chats\">\n <div *ngFor=\"let chat of search.results.chats\"\n class=\"rtsee-messenger-search-results-chat-wrapper\">\n <p>{{chat.name}}</p>\n </div>\n </div>\n <p>Messages</p>\n <div class=\"rtsee-messenger-search-results-messages\">\n <div *ngFor=\"let message of search.results.messages\" class=\"rtsee-messenger-search-results-message-wrapper\">\n <p>{{message.chatName || message.senderName }}</p>\n </div>\n </div>\n</div>\n" }]
|
|
2208
|
+
}], propDecorators: { search: [{
|
|
2209
|
+
type: Input
|
|
2210
|
+
}] } });
|
|
2211
|
+
|
|
2212
|
+
class ManageChatComponent {
|
|
2213
|
+
onInviteContactsClicked() {
|
|
2214
|
+
this.menuState.activePanel = MainMenuPanels.CONTACTS_SELECT;
|
|
2215
|
+
}
|
|
2216
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2217
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ManageChatComponent, isStandalone: true, selector: "rtsee-manage-chat", inputs: { messenger: "messenger", menuState: "menuState" }, ngImport: i0, template: "<div class=\"rtsee-messenger-manage-chat\">\n <p>We are going to manage chat here</p>\n <button (click)=\"onInviteContactsClicked()\">Invite Contacts</button>\n</div>\n", styles: [""] }); }
|
|
2218
|
+
}
|
|
2219
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ManageChatComponent, decorators: [{
|
|
2220
|
+
type: Component,
|
|
2221
|
+
args: [{ selector: 'rtsee-manage-chat', standalone: true, template: "<div class=\"rtsee-messenger-manage-chat\">\n <p>We are going to manage chat here</p>\n <button (click)=\"onInviteContactsClicked()\">Invite Contacts</button>\n</div>\n" }]
|
|
2222
|
+
}], propDecorators: { messenger: [{
|
|
2223
|
+
type: Input
|
|
2224
|
+
}], menuState: [{
|
|
2225
|
+
type: Input
|
|
2226
|
+
}] } });
|
|
2227
|
+
|
|
2228
|
+
class ContactsMultiselectComponent {
|
|
2229
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ContactsMultiselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2230
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ContactsMultiselectComponent, isStandalone: true, selector: "rtsee-contacts-multiselect", inputs: { menuState: "menuState", search: "search" }, ngImport: i0, template: "<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: SearchComponent, selector: "rtsee-search", inputs: ["search"] }] }); }
|
|
2231
|
+
}
|
|
2232
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ContactsMultiselectComponent, decorators: [{
|
|
2233
|
+
type: Component,
|
|
2234
|
+
args: [{ selector: 'rtsee-contacts-multiselect', imports: [
|
|
2235
|
+
SearchComponent
|
|
2236
|
+
], standalone: true, template: "<div class=\"rtsee-messenger-contacts-multiselect\">\n <rtsee-search [search]=\"search\"></rtsee-search>\n</div>\n" }]
|
|
2237
|
+
}], propDecorators: { menuState: [{
|
|
2238
|
+
type: Input
|
|
2239
|
+
}], search: [{
|
|
2240
|
+
type: Input
|
|
2241
|
+
}] } });
|
|
2242
|
+
|
|
2243
|
+
class MainMenuComponent {
|
|
2244
|
+
constructor() {
|
|
2245
|
+
this.MainMenuPanels = MainMenuPanels;
|
|
2246
|
+
this.state = {
|
|
2247
|
+
activePanel: DEFAULT_MAIN_MENU_STATE,
|
|
2248
|
+
};
|
|
2249
|
+
}
|
|
2250
|
+
onNewGroupClicked() {
|
|
2251
|
+
this.state.activePanel = MainMenuPanels.CONTACTS_SELECT;
|
|
2252
|
+
}
|
|
2253
|
+
onNewChannelClicked() {
|
|
2254
|
+
this.state.activePanel = MainMenuPanels.MANAGE_CHAT;
|
|
2255
|
+
}
|
|
2256
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MainMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2257
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: MainMenuComponent, isStandalone: true, selector: "rtsee-main-menu", inputs: { search: "search", messenger: "messenger" }, ngImport: i0, template: "<div class=\"rtsee-messenger-main-menu\">\n <div class=\"rtsee-messenger-main-menu-home\" *ngIf=\"state.activePanel === MainMenuPanels.HOME\">\n <ul class=\"rtsee-messenger-controls\">\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewGroupClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">people</span>\n </div>\n <span>New Group</span>\n </div>\n </li>\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewChannelClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">campaign</span>\n </div>\n <span>New Channel</span>\n </div>\n </li>\n </ul>\n <rtsee-search [search]=\"search\" ></rtsee-search>\n </div>\n\n <rtsee-manage-chat *ngIf=\"state.activePanel === MainMenuPanels.MANAGE_CHAT\"\n [messenger]=\"messenger\"\n [menuState]=\"state\"\n ></rtsee-manage-chat>\n <rtsee-contacts-multiselect [search]=\"search\"\n [menuState]=\"state\"\n *ngIf=\"state.activePanel === MainMenuPanels.CONTACTS_SELECT\"\n ></rtsee-contacts-multiselect>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SearchComponent, selector: "rtsee-search", inputs: ["search"] }, { kind: "component", type: ManageChatComponent, selector: "rtsee-manage-chat", inputs: ["messenger", "menuState"] }, { kind: "component", type: ContactsMultiselectComponent, selector: "rtsee-contacts-multiselect", inputs: ["menuState", "search"] }] }); }
|
|
2258
|
+
}
|
|
2259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MainMenuComponent, decorators: [{
|
|
2260
|
+
type: Component,
|
|
2261
|
+
args: [{ selector: 'rtsee-main-menu', imports: [
|
|
2262
|
+
NgIf,
|
|
2263
|
+
SearchComponent,
|
|
2264
|
+
ManageChatComponent,
|
|
2265
|
+
ContactsMultiselectComponent
|
|
2266
|
+
], standalone: true, template: "<div class=\"rtsee-messenger-main-menu\">\n <div class=\"rtsee-messenger-main-menu-home\" *ngIf=\"state.activePanel === MainMenuPanels.HOME\">\n <ul class=\"rtsee-messenger-controls\">\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewGroupClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">people</span>\n </div>\n <span>New Group</span>\n </div>\n </li>\n <li>\n <div class=\"rtsee-messenger-control-item\" (click)=\"onNewChannelClicked()\">\n <div class=\"rtsee-messenger-control-icon\">\n <span class=\"material-icons-outlined\">campaign</span>\n </div>\n <span>New Channel</span>\n </div>\n </li>\n </ul>\n <rtsee-search [search]=\"search\" ></rtsee-search>\n </div>\n\n <rtsee-manage-chat *ngIf=\"state.activePanel === MainMenuPanels.MANAGE_CHAT\"\n [messenger]=\"messenger\"\n [menuState]=\"state\"\n ></rtsee-manage-chat>\n <rtsee-contacts-multiselect [search]=\"search\"\n [menuState]=\"state\"\n *ngIf=\"state.activePanel === MainMenuPanels.CONTACTS_SELECT\"\n ></rtsee-contacts-multiselect>\n</div>\n" }]
|
|
2267
|
+
}], propDecorators: { search: [{
|
|
2268
|
+
type: Input
|
|
2269
|
+
}], messenger: [{
|
|
2270
|
+
type: Input
|
|
2271
|
+
}] } });
|
|
2272
|
+
|
|
2147
2273
|
class ShaveDirective {
|
|
2148
2274
|
constructor(elem) {
|
|
2149
2275
|
this.elem = elem;
|
|
@@ -2248,6 +2374,8 @@ class RTSeeModule {
|
|
|
2248
2374
|
RTSeeContainerComponent,
|
|
2249
2375
|
RTSeeConferenceComponent,
|
|
2250
2376
|
RtseeSettingsComponent,
|
|
2377
|
+
MessengerHeaderComponent,
|
|
2378
|
+
ProfileComponent,
|
|
2251
2379
|
MainMenuComponent,
|
|
2252
2380
|
SearchComponent,
|
|
2253
2381
|
PresentationComponent,
|