tas-uell-sdk 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/INSTALL_AND_TEST.md +427 -0
  2. package/README.md +122 -229
  3. package/esm2020/lib/components/tas-btn/tas-btn.component.mjs +79 -95
  4. package/esm2020/lib/components/tas-floating-call/tas-floating-call.component.mjs +74 -24
  5. package/esm2020/lib/components/tas-videocall/tas-videocall.component.mjs +50 -45
  6. package/esm2020/lib/components/tas-waiting-room/tas-waiting-room.component.mjs +179 -0
  7. package/esm2020/lib/config/tas.config.mjs +10 -0
  8. package/esm2020/lib/interfaces/tas.interfaces.mjs +32 -2
  9. package/esm2020/lib/services/tas.service.mjs +27 -48
  10. package/esm2020/lib/tas-uell-sdk.module.mjs +82 -0
  11. package/esm2020/public-api.mjs +13 -12
  12. package/esm2020/tas-uell-sdk.mjs +1 -1
  13. package/fesm2015/tas-uell-sdk.mjs +440 -218
  14. package/fesm2015/tas-uell-sdk.mjs.map +1 -1
  15. package/fesm2020/tas-uell-sdk.mjs +437 -216
  16. package/fesm2020/tas-uell-sdk.mjs.map +1 -1
  17. package/lib/components/tas-btn/tas-btn.component.d.ts +15 -11
  18. package/lib/components/tas-floating-call/tas-floating-call.component.d.ts +3 -2
  19. package/lib/components/tas-videocall/tas-videocall.component.d.ts +4 -3
  20. package/lib/components/tas-waiting-room/tas-waiting-room.component.d.ts +56 -0
  21. package/lib/config/tas.config.d.ts +28 -0
  22. package/lib/interfaces/tas.interfaces.d.ts +41 -6
  23. package/lib/services/tas.service.d.ts +6 -16
  24. package/lib/tas-uell-sdk.module.d.ts +46 -0
  25. package/package.json +36 -23
  26. package/public-api.d.ts +8 -7
  27. package/src/lib/styles/tas-global.scss +37 -0
  28. package/esm2020/lib/tas.config.mjs +0 -14
  29. package/esm2020/lib/tas.module.mjs +0 -73
  30. package/lib/tas.config.d.ts +0 -51
  31. package/lib/tas.module.d.ts +0 -34
@@ -1,123 +1,107 @@
1
- import { Component, Inject, Optional } from "@angular/core";
2
- import { ViewMode } from "../../services/tas.service";
3
- import { TAS_USER_DATA_PROVIDER, } from "../../tas.config";
4
- import { TasVideocallComponent } from "../tas-videocall/tas-videocall.component";
1
+ import { Component, Input } from "@angular/core";
5
2
  import { Subscription } from "rxjs";
6
- import { switchMap } from "rxjs/operators";
3
+ import { ViewMode } from "../../interfaces/tas.interfaces";
4
+ import { TasWaitingRoomComponent } from "../tas-waiting-room/tas-waiting-room.component";
5
+ import { TasVideocallComponent } from "../tas-videocall/tas-videocall.component";
7
6
  import * as i0 from "@angular/core";
8
- import * as i1 from "../../services/tas.service";
9
- import * as i2 from "@ng-bootstrap/ng-bootstrap";
7
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
8
+ import * as i2 from "../../services/tas.service";
10
9
  import * as i3 from "@angular/common";
11
10
  export class TasButtonComponent {
12
- constructor(tasService, modalService, userDataProvider) {
13
- this.tasService = tasService;
11
+ constructor(modalService, tasService) {
14
12
  this.modalService = modalService;
15
- this.userDataProvider = userDataProvider;
13
+ this.tasService = tasService;
14
+ this.appointmentId = 1;
15
+ this.product = "uell";
16
+ this.tenantId = "";
17
+ this.regularUserIds = [];
18
+ this.moderatorUserIds = [];
16
19
  this.isLoading = false;
17
- this.userData = null;
18
- this.tenantId = null;
19
20
  this.subscriptions = new Subscription();
20
21
  this.currentModalRef = null;
22
+ this.videoCallModalRef = null;
21
23
  }
22
24
  ngOnInit() {
23
- this.loadUserData();
24
- this.setupViewModeSubscription();
25
- }
26
- ngOnDestroy() {
27
- this.subscriptions.unsubscribe();
28
- }
29
- onClick() {
30
- if (!this.userData || !this.tenantId) {
31
- console.error("User data or tenant ID not available");
32
- return;
33
- }
34
- this.isLoading = true;
35
- this.subscriptions.add(this.tasService
36
- .createRoom({
37
- tenant: this.tenantId,
38
- userId: this.userData.id.toString(),
39
- product: "Uell",
40
- record: true,
41
- roomType: "TAS",
42
- type: "SPONTANEOUS",
43
- })
44
- .pipe(switchMap((response) => {
45
- const sessionId = response.content.sessionId;
46
- return this.tasService
47
- .generateToken({
48
- sessionId: sessionId,
49
- name: this.userData.name,
50
- lastname: this.userData.surname,
51
- })
52
- .pipe(switchMap((tokenResponse) => {
53
- return [
54
- {
55
- sessionId,
56
- token: tokenResponse.content.token,
57
- },
58
- ];
59
- }));
60
- }))
61
- .subscribe({
62
- next: ({ sessionId, token }) => {
63
- this.isLoading = false;
64
- this.openVideoCallModal(sessionId, token);
65
- },
66
- error: (err) => {
67
- console.error("Error starting video call:", err);
68
- this.isLoading = false;
69
- },
70
- }));
71
- }
72
- // Private Methods
73
- loadUserData() {
74
- if (!this.userDataProvider) {
75
- console.warn("TasButtonComponent: UserDataProvider not configured");
76
- return;
25
+ if (!this.ownerUserIds || this.ownerUserIds.length !== 1) {
26
+ throw new Error('tas-btn: ownerUserIds input is required and must contain exactly one user');
77
27
  }
78
- this.userData = this.userDataProvider.getUserData();
79
- this.tenantId = this.userDataProvider.getTenantId();
80
- }
81
- setupViewModeSubscription() {
82
- this.subscriptions.add(this.tasService.viewMode$.subscribe((mode) => {
28
+ // Subscribe to viewMode to handle PiP return
29
+ this.subscriptions.add(this.tasService.viewMode$.subscribe(mode => {
30
+ // Reopen video call modal when returning from PiP
83
31
  if (mode === ViewMode.FULLSCREEN &&
84
32
  this.tasService.isCallActive() &&
85
- !this.currentModalRef) {
33
+ !this.videoCallModalRef) {
86
34
  const sessionId = this.tasService.sessionId;
87
35
  const token = this.tasService.token;
88
36
  if (sessionId && token) {
89
- this.openVideoCallModal(sessionId, token, true);
37
+ this.openVideoCallModal(true);
90
38
  }
91
39
  }
40
+ // When entering PiP, clear the videoCallModalRef since modal will close
41
+ if (mode === ViewMode.PIP) {
42
+ this.videoCallModalRef = null;
43
+ }
92
44
  }));
93
45
  }
94
- openVideoCallModal(sessionId, token, isReturningFromPip = false) {
95
- this.currentModalRef = this.modalService.open(TasVideocallComponent, {
96
- size: "xl",
97
- windowClass: "tas-video-modal",
46
+ ngOnDestroy() {
47
+ this.subscriptions.unsubscribe();
48
+ }
49
+ onClick() {
50
+ if (!this.tenantId || !this.currentUser?.name) {
51
+ console.error("Tenant ID or current user not available");
52
+ return;
53
+ }
54
+ this.openWaitingRoomModal();
55
+ }
56
+ openWaitingRoomModal() {
57
+ this.currentModalRef = this.modalService.open(TasWaitingRoomComponent, {
58
+ size: "lg",
59
+ windowClass: "tas-waiting-room-modal",
98
60
  backdrop: "static",
99
61
  keyboard: false,
62
+ centered: true
100
63
  });
101
- this.currentModalRef.componentInstance.sessionId = sessionId;
102
- this.currentModalRef.componentInstance.token = token;
103
- this.currentModalRef.componentInstance.isReturningFromPip =
104
- isReturningFromPip;
105
- this.currentModalRef.result.then(() => {
106
- this.currentModalRef = null;
107
- }, () => {
108
- this.currentModalRef = null;
64
+ // Pass all necessary inputs to the waiting room component
65
+ this.currentModalRef.componentInstance.appointmentId = this.appointmentId;
66
+ this.currentModalRef.componentInstance.product = this.product;
67
+ this.currentModalRef.componentInstance.tenantId = this.tenantId;
68
+ this.currentModalRef.componentInstance.currentUser = this.currentUser;
69
+ this.currentModalRef.componentInstance.ownerUserIds = this.ownerUserIds;
70
+ this.currentModalRef.componentInstance.regularUserIds = this.regularUserIds;
71
+ this.currentModalRef.componentInstance.moderatorUserIds = this.moderatorUserIds;
72
+ this.currentModalRef.result.then(() => { this.currentModalRef = null; }, () => { this.currentModalRef = null; });
73
+ }
74
+ openVideoCallModal(isReturningFromPip = false) {
75
+ this.videoCallModalRef = this.modalService.open(TasVideocallComponent, {
76
+ size: 'xl',
77
+ windowClass: 'tas-video-modal',
78
+ backdrop: 'static',
79
+ keyboard: false
109
80
  });
81
+ this.videoCallModalRef.componentInstance.sessionId = this.tasService.sessionId;
82
+ this.videoCallModalRef.componentInstance.token = this.tasService.token;
83
+ this.videoCallModalRef.componentInstance.isReturningFromPip = isReturningFromPip;
84
+ this.videoCallModalRef.result.then(() => { this.videoCallModalRef = null; }, () => { this.videoCallModalRef = null; });
110
85
  }
111
86
  }
112
- TasButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasButtonComponent, deps: [{ token: i1.TasService }, { token: i2.NgbModal }, { token: TAS_USER_DATA_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
113
- TasButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasButtonComponent, selector: "tas-btn", ngImport: i0, template: "<button\n type=\"button\"\n class=\"btn btn-primary boton\"\n (click)=\"onClick()\"\n [disabled]=\"isLoading\"\n>\n <i class=\"fa fa-video-camera\" aria-hidden=\"true\" *ngIf=\"!isLoading\"></i>\n <span *ngIf=\"!isLoading\"> Iniciar TAS</span>\n <span *ngIf=\"isLoading\"> Processing...</span>\n</button>\n", styles: [":host{display:inline-block}.boton{background-color:#ee316b!important;color:#fff!important;margin-right:24px}.boton:disabled{background-color:#ccc!important;border-color:#ccc!important;cursor:not-allowed}.boton i{margin-right:5px}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
87
+ TasButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasButtonComponent, deps: [{ token: i1.NgbModal }, { token: i2.TasService }], target: i0.ɵɵFactoryTarget.Component });
88
+ TasButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasButtonComponent, selector: "tas-btn", inputs: { appointmentId: "appointmentId", product: "product", tenantId: "tenantId", currentUser: "currentUser", ownerUserIds: "ownerUserIds", regularUserIds: "regularUserIds", moderatorUserIds: "moderatorUserIds" }, ngImport: i0, template: "<button\n\ttype=\"button\"\n\tclass=\"btn btn-primary tas-btn\"\n\t(click)=\"onClick()\"\n\t[disabled]=\"isLoading\"\n>\n\t<i class=\"fa fa-video-camera\" aria-hidden=\"true\" *ngIf=\"!isLoading\"></i>\n\t<span *ngIf=\"!isLoading\"> Iniciar TAS</span>\n\t<span *ngIf=\"isLoading\"> Processing...</span>\n</button>\n\n", styles: [":host{display:inline-block}.tas-btn{background-color:#ee316b!important;color:#fff!important;border-color:#ee316b!important;margin-right:24px}.tas-btn:disabled{background-color:#ccc!important;border-color:#ccc!important;cursor:not-allowed}.tas-btn:hover:not(:disabled){background-color:#d62a5f!important;border-color:#d62a5f!important}.tas-btn i{margin-right:5px}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
114
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasButtonComponent, decorators: [{
115
90
  type: Component,
116
- args: [{ selector: "tas-btn", template: "<button\n type=\"button\"\n class=\"btn btn-primary boton\"\n (click)=\"onClick()\"\n [disabled]=\"isLoading\"\n>\n <i class=\"fa fa-video-camera\" aria-hidden=\"true\" *ngIf=\"!isLoading\"></i>\n <span *ngIf=\"!isLoading\"> Iniciar TAS</span>\n <span *ngIf=\"isLoading\"> Processing...</span>\n</button>\n", styles: [":host{display:inline-block}.boton{background-color:#ee316b!important;color:#fff!important;margin-right:24px}.boton:disabled{background-color:#ccc!important;border-color:#ccc!important;cursor:not-allowed}.boton i{margin-right:5px}\n"] }]
117
- }], ctorParameters: function () { return [{ type: i1.TasService }, { type: i2.NgbModal }, { type: undefined, decorators: [{
118
- type: Optional
119
- }, {
120
- type: Inject,
121
- args: [TAS_USER_DATA_PROVIDER]
122
- }] }]; } });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWJ0bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdGFzLWJ0bi90YXMtYnRuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YXMtYnRuL3Rhcy1idG4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWMsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUNMLHNCQUFzQixHQUd2QixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU8zQyxNQUFNLE9BQU8sa0JBQWtCO0lBUTdCLFlBQ1UsVUFBc0IsRUFDdEIsWUFBc0IsRUFHdEIsZ0JBQTRDO1FBSjVDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFHdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE0QjtRQVp0RCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRVYsYUFBUSxHQUF1QixJQUFJLENBQUM7UUFDcEMsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLG9CQUFlLEdBQXVCLElBQUksQ0FBQztJQVFoRCxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lB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b21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRhc1NlcnZpY2UsIFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Rhcy5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBUQVNfVVNFUl9EQVRBX1BST1ZJREVSLFxuICBUYXNVc2VyRGF0YVByb3ZpZGVyLFxuICBUYXNVc2VyRGF0YSxcbn0gZnJvbSBcIi4uLy4uL3Rhcy5jb25maWdcIjtcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JNb2RhbFJlZiB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xuaW1wb3J0IHsgVGFzVmlkZW9jYWxsQ29tcG9uZW50IH0gZnJvbSBcIi4uL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInRhcy1idG5cIixcbiAgdGVtcGxhdGVVcmw6IFwiLi90YXMtYnRuLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi90YXMtYnRuLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdXNlckRhdGE6IFRhc1VzZXJEYXRhIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGVuYW50SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgY3VycmVudE1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGFzU2VydmljZTogVGFzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFRBU19VU0VSX0RBVEFfUFJPVklERVIpXG4gICAgcHJpdmF0ZSB1c2VyRGF0YVByb3ZpZGVyOiBUYXNVc2VyRGF0YVByb3ZpZGVyIHwgbnVsbFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkVXNlckRhdGEoKTtcbiAgICB0aGlzLnNldHVwVmlld01vZGVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25DbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudXNlckRhdGEgfHwgIXRoaXMudGVuYW50SWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2VyIGRhdGEgb3IgdGVuYW50IElEIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZVxuICAgICAgICAuY3JlYXRlUm9vbSh7XG4gICAgICAgICAgdGVuYW50OiB0aGlzLnRlbmFudElkLFxuICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VyRGF0YS5pZC50b1N0cmluZygpLFxuICAgICAgICAgIHByb2R1Y3Q6IFwiVWVsbFwiLFxuICAgICAgICAgIHJlY29yZDogdHJ1ZSxcbiAgICAgICAgICByb29tVHlwZTogXCJUQVNcIixcbiAgICAgICAgICB0eXBlOiBcIlNQT05UQU5FT1VTXCIsXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHJlc3BvbnNlLmNvbnRlbnQuc2Vzc2lvbklkO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFzU2VydmljZVxuICAgICAgICAgICAgICAuZ2VuZXJhdGVUb2tlbih7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy51c2VyRGF0YSEubmFtZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogdGhpcy51c2VyRGF0YSEuc3VybmFtZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh0b2tlblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlblJlc3BvbnNlLmNvbnRlbnQudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoeyBzZXNzaW9uSWQsIHRva2VuIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9wZW5WaWRlb0NhbGxNb2RhbChzZXNzaW9uSWQsIHRva2VuKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc3RhcnRpbmcgdmlkZW8gY2FsbDpcIiwgZXJyKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBNZXRob2RzXG4gIHByaXZhdGUgbG9hZFVzZXJEYXRhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VyRGF0YVByb3ZpZGVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJUYXNCdXR0b25Db21wb25lbnQ6IFVzZXJEYXRhUHJvdmlkZXIgbm90IGNvbmZpZ3VyZWRcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXNlckRhdGEgPSB0aGlzLnVzZXJEYXRhUHJvdmlkZXIuZ2V0VXNlckRhdGEoKTtcbiAgICB0aGlzLnRlbmFudElkID0gdGhpcy51c2VyRGF0YVByb3ZpZGVyLmdldFRlbmFudElkKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwVmlld01vZGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS52aWV3TW9kZSQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RlID09PSBWaWV3TW9kZS5GVUxMU0NSRUVOICYmXG4gICAgICAgICAgdGhpcy50YXNTZXJ2aWNlLmlzQ2FsbEFjdGl2ZSgpICYmXG4gICAgICAgICAgIXRoaXMuY3VycmVudE1vZGFsUmVmXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMudGFzU2VydmljZS5zZXNzaW9uSWQ7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRhc1NlcnZpY2UudG9rZW47XG4gICAgICAgICAgaWYgKHNlc3Npb25JZCAmJiB0b2tlbikge1xuICAgICAgICAgICAgdGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwoc2Vzc2lvbklkLCB0b2tlbiwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5WaWRlb0NhbGxNb2RhbChcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGlzUmV0dXJuaW5nRnJvbVBpcDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudE1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUYXNWaWRlb2NhbGxDb21wb25lbnQsIHtcbiAgICAgIHNpemU6IFwieGxcIixcbiAgICAgIHdpbmRvd0NsYXNzOiBcInRhcy12aWRlby1tb2RhbFwiLFxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXG4gICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5jdXJyZW50TW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pc1JldHVybmluZ0Zyb21QaXAgPVxuICAgICAgaXNSZXR1cm5pbmdGcm9tUGlwO1xuXG4gICAgdGhpcy5jdXJyZW50TW9kYWxSZWYucmVzdWx0LnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudE1vZGFsUmVmID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudE1vZGFsUmVmID0gbnVsbDtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBib3RvblwiXG4gIChjbGljayk9XCJvbkNsaWNrKClcIlxuICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbj5cbiAgPGkgY2xhc3M9XCJmYSBmYS12aWRlby1jYW1lcmFcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj48L2k+XG4gIDxzcGFuICpuZ0lmPVwiIWlzTG9hZGluZ1wiPiBJbmljaWFyIFRBUzwvc3Bhbj5cbiAgPHNwYW4gKm5nSWY9XCJpc0xvYWRpbmdcIj4gUHJvY2Vzc2luZy4uLjwvc3Bhbj5cbjwvYnV0dG9uPlxuIl19
91
+ args: [{ selector: "tas-btn", template: "<button\n\ttype=\"button\"\n\tclass=\"btn btn-primary tas-btn\"\n\t(click)=\"onClick()\"\n\t[disabled]=\"isLoading\"\n>\n\t<i class=\"fa fa-video-camera\" aria-hidden=\"true\" *ngIf=\"!isLoading\"></i>\n\t<span *ngIf=\"!isLoading\"> Iniciar TAS</span>\n\t<span *ngIf=\"isLoading\"> Processing...</span>\n</button>\n\n", styles: [":host{display:inline-block}.tas-btn{background-color:#ee316b!important;color:#fff!important;border-color:#ee316b!important;margin-right:24px}.tas-btn:disabled{background-color:#ccc!important;border-color:#ccc!important;cursor:not-allowed}.tas-btn:hover:not(:disabled){background-color:#d62a5f!important;border-color:#d62a5f!important}.tas-btn i{margin-right:5px}\n"] }]
92
+ }], ctorParameters: function () { return [{ type: i1.NgbModal }, { type: i2.TasService }]; }, propDecorators: { appointmentId: [{
93
+ type: Input
94
+ }], product: [{
95
+ type: Input
96
+ }], tenantId: [{
97
+ type: Input
98
+ }], currentUser: [{
99
+ type: Input
100
+ }], ownerUserIds: [{
101
+ type: Input
102
+ }], regularUserIds: [{
103
+ type: Input
104
+ }], moderatorUserIds: [{
105
+ type: Input
106
+ }] } });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWJ0bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQWtCLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7OztBQVFqRixNQUFNLE9BQU8sa0JBQWtCO0lBZTlCLFlBQ1MsWUFBc0IsRUFDdEIsVUFBc0I7UUFEdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWhCdEIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsWUFBTyxHQUFXLE1BQU0sQ0FBQztRQUN6QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBR3RCLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUVsQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUF1QixJQUFJLENBQUM7UUFDM0Msc0JBQWlCLEdBQXVCLElBQUksQ0FBQztJQUtsRCxDQUFDO0lBRUosUUFBUTtRQUNQLElBQUksQ0FB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b20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOZ2JNb2RhbCwgTmdiTW9kYWxSZWYgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBUYXNDdXJyZW50VXNlciwgVmlld01vZGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGFzV2FpdGluZ1Jvb21Db21wb25lbnQgfSBmcm9tIFwiLi4vdGFzLXdhaXRpbmctcm9vbS90YXMtd2FpdGluZy1yb29tLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGFzVmlkZW9jYWxsQ29tcG9uZW50IH0gZnJvbSBcIi4uL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRhc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGFzLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInRhcy1idG5cIixcblx0dGVtcGxhdGVVcmw6IFwiLi90YXMtYnRuLmNvbXBvbmVudC5odG1sXCIsXG5cdHN0eWxlVXJsczogW1wiLi90YXMtYnRuLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cdEBJbnB1dCgpIGFwcG9pbnRtZW50SWQ6IG51bWJlciA9IDE7XG5cdEBJbnB1dCgpIHByb2R1Y3Q6IHN0cmluZyA9IFwidWVsbFwiO1xuXHRASW5wdXQoKSB0ZW5hbnRJZDogc3RyaW5nID0gXCJcIjtcblx0QElucHV0KCkgY3VycmVudFVzZXIhOiBUYXNDdXJyZW50VXNlcjtcblx0QElucHV0KCkgb3duZXJVc2VySWRzITogbnVtYmVyW107XG5cdEBJbnB1dCgpIHJlZ3VsYXJVc2VySWRzOiBudW1iZXJbXSA9IFtdO1xuXHRASW5wdXQoKSBtb2RlcmF0b3JVc2VySWRzOiBudW1iZXJbXSA9IFtdO1xuXHRcblx0cHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xuXHRcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXHRwcml2YXRlIGN1cnJlbnRNb2RhbFJlZjogTmdiTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSB2aWRlb0NhbGxNb2RhbFJlZjogTmdiTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG5cdFx0cHJpdmF0ZSB0YXNTZXJ2aWNlOiBUYXNTZXJ2aWNlXG5cdCkge31cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMub3duZXJVc2VySWRzIHx8IHRoaXMub3duZXJVc2VySWRzLmxlbmd0aCAhPT0gMSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCd0YXMtYnRuOiBvd25lclVzZXJJZHMgaW5wdXQgaXMgcmVxdWlyZWQgYW5kIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSB1c2VyJyk7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIFN1YnNjcmliZSB0byB2aWV3TW9kZSB0byBoYW5kbGUgUGlQIHJldHVyblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2Uudmlld01vZGUkLnN1YnNjcmliZShtb2RlID0+IHtcblx0XHRcdFx0Ly8gUmVvcGVuIHZpZGVvIGNhbGwgbW9kYWwgd2hlbiByZXR1cm5pbmcgZnJvbSBQaVBcblx0XHRcdFx0aWYgKG1vZGUgPT09IFZpZXdNb2RlLkZVTExTQ1JFRU4gJiYgXG5cdFx0XHRcdFx0dGhpcy50YXNTZXJ2aWNlLmlzQ2FsbEFjdGl2ZSgpICYmIFxuXHRcdFx0XHRcdCF0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2Vzc2lvbklkID0gdGhpcy50YXNTZXJ2aWNlLnNlc3Npb25JZDtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudGFzU2VydmljZS50b2tlbjtcblx0XHRcdFx0XHRpZiAoc2Vzc2lvbklkICYmIHRva2VuKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5WaWRlb0NhbGxNb2RhbCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdC8vIFdoZW4gZW50ZXJpbmcgUGlQLCBjbGVhciB0aGUgdmlkZW9DYWxsTW9kYWxSZWYgc2luY2UgbW9kYWwgd2lsbCBjbG9zZVxuXHRcdFx0XHRpZiAobW9kZSA9PT0gVmlld01vZGUuUElQKSB7XG5cdFx0XHRcdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuXHR9XG5cblx0b25DbGljaygpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMudGVuYW50SWQgfHwgIXRoaXMuY3VycmVudFVzZXI/Lm5hbWUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJUZW5hbnQgSUQgb3IgY3VycmVudCB1c2VyIG5vdCBhdmFpbGFibGVcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5vcGVuV2FpdGluZ1Jvb21Nb2RhbCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvcGVuV2FpdGluZ1Jvb21Nb2RhbCgpOiB2b2lkIHtcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGFzV2FpdGluZ1Jvb21Db21wb25lbnQsIHtcblx0XHRcdHNpemU6IFwibGdcIixcblx0XHRcdHdpbmRvd0NsYXNzOiBcInRhcy13YWl0aW5nLXJvb20tbW9kYWxcIixcblx0XHRcdGJhY2tkcm9wOiBcInN0YXRpY1wiLFxuXHRcdFx0a2V5Ym9hcmQ6IGZhbHNlLFxuXHRcdFx0Y2VudGVyZWQ6IHRydWVcblx0XHR9KTtcblxuXHRcdC8vIFBhc3MgYWxsIG5lY2Vzc2FyeSBpbnB1dHMgdG8gdGhlIHdhaXRpbmcgcm9vbSBjb21wb25lbnRcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5hcHBvaW50bWVudElkID0gdGhpcy5hcHBvaW50bWVudElkO1xuXHRcdHRoaXMuY3VycmVudE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnByb2R1Y3QgPSB0aGlzLnByb2R1Y3Q7XG5cdFx0dGhpcy5jdXJyZW50TW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGVuYW50SWQgPSB0aGlzLnRlbmFudElkO1xuXHRcdHRoaXMuY3VycmVudE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlcjtcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5vd25lclVzZXJJZHMgPSB0aGlzLm93bmVyVXNlcklkcztcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5yZWd1bGFyVXNlcklkcyA9IHRoaXMucmVndWxhclVzZXJJZHM7XG5cdFx0dGhpcy5jdXJyZW50TW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UubW9kZXJhdG9yVXNlcklkcyA9IHRoaXMubW9kZXJhdG9yVXNlcklkcztcblxuXHRcdHRoaXMuY3VycmVudE1vZGFsUmVmLnJlc3VsdC50aGVuKFxuXHRcdFx0KCkgPT4geyB0aGlzLmN1cnJlbnRNb2RhbFJlZiA9IG51bGw7IH0sXG5cdFx0XHQoKSA9PiB7IHRoaXMuY3VycmVudE1vZGFsUmVmID0gbnVsbDsgfVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIG9wZW5WaWRlb0NhbGxNb2RhbChpc1JldHVybmluZ0Zyb21QaXA6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRhc1ZpZGVvY2FsbENvbXBvbmVudCwge1xuXHRcdFx0c2l6ZTogJ3hsJyxcblx0XHRcdHdpbmRvd0NsYXNzOiAndGFzLXZpZGVvLW1vZGFsJyxcblx0XHRcdGJhY2tkcm9wOiAnc3RhdGljJyxcblx0XHRcdGtleWJvYXJkOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zZXNzaW9uSWQgPSB0aGlzLnRhc1NlcnZpY2Uuc2Vzc2lvbklkO1xuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudG9rZW4gPSB0aGlzLnRhc1NlcnZpY2UudG9rZW47XG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pc1JldHVybmluZ0Zyb21QaXAgPSBpc1JldHVybmluZ0Zyb21QaXA7XG5cblx0XHR0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLnJlc3VsdC50aGVuKFxuXHRcdFx0KCkgPT4geyB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDsgfSxcblx0XHRcdCgpID0+IHsgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7IH1cblx0XHQpO1xuXHR9XG59XG5cbiIsIjxidXR0b25cblx0dHlwZT1cImJ1dHRvblwiXG5cdGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRhcy1idG5cIlxuXHQoY2xpY2spPVwib25DbGljaygpXCJcblx0W2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXG4+XG5cdDxpIGNsYXNzPVwiZmEgZmEtdmlkZW8tY2FtZXJhXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+PC9pPlxuXHQ8c3BhbiAqbmdJZj1cIiFpc0xvYWRpbmdcIj4gSW5pY2lhciBUQVM8L3NwYW4+XG5cdDxzcGFuICpuZ0lmPVwiaXNMb2FkaW5nXCI+IFByb2Nlc3NpbmcuLi48L3NwYW4+XG48L2J1dHRvbj5cblxuIl19
@@ -1,7 +1,7 @@
1
- import { Component } from "@angular/core";
2
- import { CallState, ViewMode } from "../../services/tas.service";
3
- import { Subscription } from "rxjs";
4
- import interact from "interactjs";
1
+ import { Component } from '@angular/core';
2
+ import { CallState, ViewMode } from '../../interfaces/tas.interfaces';
3
+ import { Subscription } from 'rxjs';
4
+ import interact from 'interactjs';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../services/tas.service";
7
7
  export class TasFloatingCallComponent {
@@ -10,13 +10,15 @@ export class TasFloatingCallComponent {
10
10
  this.isVisible = false;
11
11
  this.isMuted = false;
12
12
  this.subscriptions = new Subscription();
13
+ // Margin from screen edges (in pixels)
14
+ this.PIP_MARGIN = 20;
13
15
  }
14
16
  ngOnInit() {
15
17
  this.setupSubscriptions();
16
18
  }
17
19
  ngOnDestroy() {
18
20
  this.subscriptions.unsubscribe();
19
- interact(".tas-floating-container").unset();
21
+ interact('.tas-floating-container').unset();
20
22
  }
21
23
  // Public Methods
22
24
  onExpand() {
@@ -30,50 +32,98 @@ export class TasFloatingCallComponent {
30
32
  }
31
33
  // Private Methods
32
34
  setupSubscriptions() {
33
- this.subscriptions.add(this.tasService.callState$.subscribe((state) => {
35
+ // Call state subscription
36
+ this.subscriptions.add(this.tasService.callState$.subscribe(state => {
34
37
  if (state === CallState.DISCONNECTED) {
35
38
  this.isVisible = false;
36
39
  }
37
40
  }));
38
- this.subscriptions.add(this.tasService.viewMode$.subscribe((mode) => {
39
- this.isVisible =
40
- mode === ViewMode.PIP && this.tasService.isCallActive();
41
+ // View mode subscription
42
+ this.subscriptions.add(this.tasService.viewMode$.subscribe(mode => {
43
+ this.isVisible = mode === ViewMode.PIP && this.tasService.isCallActive();
41
44
  if (this.isVisible) {
42
45
  setTimeout(() => this.initInteract(), 100);
43
46
  }
44
47
  }));
45
- this.subscriptions.add(this.tasService.isMuted$.subscribe((muted) => {
48
+ // Mute state subscription
49
+ this.subscriptions.add(this.tasService.isMuted$.subscribe(muted => {
46
50
  this.isMuted = muted;
47
51
  }));
48
52
  }
49
53
  initInteract() {
50
- interact(".tas-floating-container").unset();
51
- interact(".tas-floating-container").draggable({
54
+ interact('.tas-floating-container').unset();
55
+ // Create restriction area with margin
56
+ const margin = this.PIP_MARGIN;
57
+ const restrictToBodyWithMargin = {
58
+ restriction: () => {
59
+ return {
60
+ left: margin,
61
+ top: margin,
62
+ right: window.innerWidth - margin,
63
+ bottom: window.innerHeight - margin
64
+ };
65
+ },
66
+ elementRect: { left: 0, right: 1, top: 0, bottom: 1 }
67
+ };
68
+ interact('.tas-floating-container')
69
+ .draggable({
52
70
  inertia: true,
53
71
  modifiers: [
54
- interact.modifiers.restrictRect({
55
- restriction: "body",
56
- endOnly: true,
57
- }),
72
+ interact.modifiers.restrict(restrictToBodyWithMargin)
58
73
  ],
59
74
  autoScroll: false,
60
75
  listeners: {
61
76
  move: (event) => {
62
77
  const target = event.target;
63
- const x = (parseFloat(target.getAttribute("data-x")) || 0) + event.dx;
64
- const y = (parseFloat(target.getAttribute("data-y")) || 0) + event.dy;
78
+ const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
79
+ const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
65
80
  target.style.transform = `translate(${x}px, ${y}px)`;
66
- target.setAttribute("data-x", String(x));
67
- target.setAttribute("data-y", String(y));
68
- },
81
+ target.setAttribute('data-x', String(x));
82
+ target.setAttribute('data-y', String(y));
83
+ }
84
+ }
85
+ })
86
+ .resizable({
87
+ edges: { left: false, right: true, bottom: true, top: false },
88
+ listeners: {
89
+ move: (event) => {
90
+ const target = event.target;
91
+ let x = parseFloat(target.getAttribute('data-x')) || 0;
92
+ let y = parseFloat(target.getAttribute('data-y')) || 0;
93
+ // Update element size
94
+ target.style.width = `${event.rect.width}px`;
95
+ target.style.height = `${event.rect.height}px`;
96
+ // Translate when resizing from top or left edges
97
+ x += event.deltaRect.left;
98
+ y += event.deltaRect.top;
99
+ target.style.transform = `translate(${x}px, ${y}px)`;
100
+ target.setAttribute('data-x', String(x));
101
+ target.setAttribute('data-y', String(y));
102
+ }
69
103
  },
104
+ modifiers: [
105
+ interact.modifiers.restrictEdges({
106
+ outer: {
107
+ left: margin,
108
+ top: margin,
109
+ right: window.innerWidth - margin,
110
+ bottom: window.innerHeight - margin
111
+ }
112
+ }),
113
+ interact.modifiers.restrictSize({
114
+ min: { width: 200, height: 130 },
115
+ max: { width: 500, height: 350 }
116
+ }),
117
+ interact.modifiers.aspectRatio({ ratio: 'preserve' })
118
+ ],
119
+ inertia: true
70
120
  });
71
121
  }
72
122
  }
73
123
  TasFloatingCallComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasFloatingCallComponent, deps: [{ token: i1.TasService }], target: i0.ɵɵFactoryTarget.Component });
74
- TasFloatingCallComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasFloatingCallComponent, selector: "tas-floating-call", ngImport: i0, template: "<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n <div class=\"floating-content\">\n <div id=\"pip-main-video\" class=\"pip-main-video\"></div>\n\n <div class=\"floating-controls\">\n <button\n class=\"action-btn expand-btn\"\n (click)=\"onExpand()\"\n title=\"Expandir a pantalla completa\"\n >\n <i class=\"fa fa-expand\"></i>\n </button>\n <button\n class=\"action-btn mute-btn\"\n [class.muted]=\"isMuted\"\n (click)=\"toggleMute()\"\n [title]=\"isMuted ? 'Activar micr\u00F3fono' : 'Silenciar micr\u00F3fono'\"\n >\n <i\n class=\"fa\"\n [class.fa-microphone]=\"!isMuted\"\n [class.fa-microphone-slash]=\"isMuted\"\n ></i>\n </button>\n <button\n class=\"action-btn hangup-btn\"\n (click)=\"onHangUp()\"\n title=\"Colgar llamada\"\n >\n <i class=\"fa fa-phone\" style=\"transform: rotate(135deg)\"></i>\n </button>\n </div>\n </div>\n</div>\n", styles: [".tas-floating-container{position:fixed;bottom:20px;right:20px;width:280px;height:180px;background:#000;border-radius:12px;box-shadow:0 8px 32px #00000080;z-index:9999;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;transition:opacity .3s ease,visibility .3s ease;opacity:0;visibility:hidden;pointer-events:none}.tas-floating-container.visible{opacity:1;visibility:visible;pointer-events:auto}.floating-content{position:relative;width:100%;height:100%;overflow:hidden}.pip-main-video{position:absolute;top:0;left:0;width:100%;height:100%;background:#000}.pip-main-video ::ng-deep video{width:100%;height:100%;object-fit:cover}.pip-main-video ::ng-deep .OT_subscriber,.pip-main-video ::ng-deep .OT_publisher{width:100%!important;height:100%!important}.pip-main-video ::ng-deep .OT_edge-bar-item,.pip-main-video ::ng-deep .OT_mute,.pip-main-video ::ng-deep .OT_audio-level-meter,.pip-main-video ::ng-deep .OT_bar,.pip-main-video ::ng-deep .OT_name{display:none!important}.floating-controls{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;gap:12px;padding:6px 14px;background:rgba(0,0,0,.7);border-radius:24px;backdrop-filter:blur(8px)}.action-btn{width:32px;height:32px;border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:13px;transition:all .2s ease}.action-btn.expand-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.expand-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn.muted{background:#f39c12;color:#fff}.action-btn.mute-btn.muted:hover{background:#e67e22}.action-btn.hangup-btn{background:#dc3545;color:#fff}.action-btn.hangup-btn:hover{background:#c82333;transform:scale(1.1)}\n"] });
124
+ TasFloatingCallComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasFloatingCallComponent, selector: "tas-floating-call", ngImport: i0, template: "<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n\t<!-- Video content area - shows main video only -->\n\t<div class=\"floating-content\">\n\t\t<!-- Main video container (subscriber if available, otherwise publisher) -->\n\t\t<div id=\"pip-main-video\" class=\"pip-main-video\"></div>\n\n\t\t<!-- Bottom controls -->\n\t\t<div class=\"floating-controls\">\n\t\t\t<button class=\"action-btn expand-btn\" (click)=\"onExpand()\" title=\"Expand to fullscreen\">\n\t\t\t\t<i class=\"fa fa-expand\"></i>\n\t\t\t</button>\n\t\t\t<button class=\"action-btn mute-btn\" [class.muted]=\"isMuted\" (click)=\"toggleMute()\" [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\">\n\t\t\t\t<i class=\"fa\" [class.fa-microphone]=\"!isMuted\" [class.fa-microphone-slash]=\"isMuted\"></i>\n\t\t\t</button>\n\t\t\t<button class=\"action-btn hangup-btn\" (click)=\"onHangUp()\" title=\"Hang up call\">\n\t\t\t\t<i class=\"fa fa-phone\" style=\"transform: rotate(135deg);\"></i>\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n\n", styles: [".tas-floating-container{position:fixed;bottom:20px;right:20px;width:280px;height:180px;background:#000;border-radius:12px;box-shadow:0 8px 32px #00000080;z-index:9999;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;transition:opacity .3s ease,visibility .3s ease,box-shadow .2s ease;opacity:0;visibility:hidden;pointer-events:none}.tas-floating-container.visible{opacity:1;visibility:visible;pointer-events:auto}.tas-floating-container:hover{box-shadow:0 8px 32px #00000080,0 0 0 2px #ffffff4d}.floating-content{position:relative;width:100%;height:100%;overflow:hidden}.pip-main-video{position:absolute;top:0;left:0;width:100%;height:100%;background:#000}.pip-main-video ::ng-deep video{width:100%;height:100%;object-fit:cover}.pip-main-video ::ng-deep .OT_subscriber,.pip-main-video ::ng-deep .OT_publisher{width:100%!important;height:100%!important}.pip-main-video ::ng-deep .OT_edge-bar-item,.pip-main-video ::ng-deep .OT_mute,.pip-main-video ::ng-deep .OT_audio-level-meter,.pip-main-video ::ng-deep .OT_bar,.pip-main-video ::ng-deep .OT_name{display:none!important}.floating-controls{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;gap:12px;padding:6px 14px;background:rgba(0,0,0,.7);border-radius:24px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.tas-floating-container:hover .floating-controls{opacity:1;visibility:visible}.action-btn{width:32px;height:32px;border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:13px;transition:all .2s ease}.action-btn.expand-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.expand-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn.muted{background:#f39c12;color:#fff}.action-btn.mute-btn.muted:hover{background:#e67e22}.action-btn.hangup-btn{background:#dc3545;color:#fff}.action-btn.hangup-btn:hover{background:#c82333;transform:scale(1.1)}\n"] });
75
125
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasFloatingCallComponent, decorators: [{
76
126
  type: Component,
77
- args: [{ selector: "tas-floating-call", template: "<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n <div class=\"floating-content\">\n <div id=\"pip-main-video\" class=\"pip-main-video\"></div>\n\n <div class=\"floating-controls\">\n <button\n class=\"action-btn expand-btn\"\n (click)=\"onExpand()\"\n title=\"Expandir a pantalla completa\"\n >\n <i class=\"fa fa-expand\"></i>\n </button>\n <button\n class=\"action-btn mute-btn\"\n [class.muted]=\"isMuted\"\n (click)=\"toggleMute()\"\n [title]=\"isMuted ? 'Activar micr\u00F3fono' : 'Silenciar micr\u00F3fono'\"\n >\n <i\n class=\"fa\"\n [class.fa-microphone]=\"!isMuted\"\n [class.fa-microphone-slash]=\"isMuted\"\n ></i>\n </button>\n <button\n class=\"action-btn hangup-btn\"\n (click)=\"onHangUp()\"\n title=\"Colgar llamada\"\n >\n <i class=\"fa fa-phone\" style=\"transform: rotate(135deg)\"></i>\n </button>\n </div>\n </div>\n</div>\n", styles: [".tas-floating-container{position:fixed;bottom:20px;right:20px;width:280px;height:180px;background:#000;border-radius:12px;box-shadow:0 8px 32px #00000080;z-index:9999;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;transition:opacity .3s ease,visibility .3s ease;opacity:0;visibility:hidden;pointer-events:none}.tas-floating-container.visible{opacity:1;visibility:visible;pointer-events:auto}.floating-content{position:relative;width:100%;height:100%;overflow:hidden}.pip-main-video{position:absolute;top:0;left:0;width:100%;height:100%;background:#000}.pip-main-video ::ng-deep video{width:100%;height:100%;object-fit:cover}.pip-main-video ::ng-deep .OT_subscriber,.pip-main-video ::ng-deep .OT_publisher{width:100%!important;height:100%!important}.pip-main-video ::ng-deep .OT_edge-bar-item,.pip-main-video ::ng-deep .OT_mute,.pip-main-video ::ng-deep .OT_audio-level-meter,.pip-main-video ::ng-deep .OT_bar,.pip-main-video ::ng-deep .OT_name{display:none!important}.floating-controls{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;gap:12px;padding:6px 14px;background:rgba(0,0,0,.7);border-radius:24px;backdrop-filter:blur(8px)}.action-btn{width:32px;height:32px;border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:13px;transition:all .2s ease}.action-btn.expand-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.expand-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn.muted{background:#f39c12;color:#fff}.action-btn.mute-btn.muted:hover{background:#e67e22}.action-btn.hangup-btn{background:#dc3545;color:#fff}.action-btn.hangup-btn:hover{background:#c82333;transform:scale(1.1)}\n"] }]
127
+ args: [{ selector: 'tas-floating-call', template: "<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n\t<!-- Video content area - shows main video only -->\n\t<div class=\"floating-content\">\n\t\t<!-- Main video container (subscriber if available, otherwise publisher) -->\n\t\t<div id=\"pip-main-video\" class=\"pip-main-video\"></div>\n\n\t\t<!-- Bottom controls -->\n\t\t<div class=\"floating-controls\">\n\t\t\t<button class=\"action-btn expand-btn\" (click)=\"onExpand()\" title=\"Expand to fullscreen\">\n\t\t\t\t<i class=\"fa fa-expand\"></i>\n\t\t\t</button>\n\t\t\t<button class=\"action-btn mute-btn\" [class.muted]=\"isMuted\" (click)=\"toggleMute()\" [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\">\n\t\t\t\t<i class=\"fa\" [class.fa-microphone]=\"!isMuted\" [class.fa-microphone-slash]=\"isMuted\"></i>\n\t\t\t</button>\n\t\t\t<button class=\"action-btn hangup-btn\" (click)=\"onHangUp()\" title=\"Hang up call\">\n\t\t\t\t<i class=\"fa fa-phone\" style=\"transform: rotate(135deg);\"></i>\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n\n", styles: [".tas-floating-container{position:fixed;bottom:20px;right:20px;width:280px;height:180px;background:#000;border-radius:12px;box-shadow:0 8px 32px #00000080;z-index:9999;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;transition:opacity .3s ease,visibility .3s ease,box-shadow .2s ease;opacity:0;visibility:hidden;pointer-events:none}.tas-floating-container.visible{opacity:1;visibility:visible;pointer-events:auto}.tas-floating-container:hover{box-shadow:0 8px 32px #00000080,0 0 0 2px #ffffff4d}.floating-content{position:relative;width:100%;height:100%;overflow:hidden}.pip-main-video{position:absolute;top:0;left:0;width:100%;height:100%;background:#000}.pip-main-video ::ng-deep video{width:100%;height:100%;object-fit:cover}.pip-main-video ::ng-deep .OT_subscriber,.pip-main-video ::ng-deep .OT_publisher{width:100%!important;height:100%!important}.pip-main-video ::ng-deep .OT_edge-bar-item,.pip-main-video ::ng-deep .OT_mute,.pip-main-video ::ng-deep .OT_audio-level-meter,.pip-main-video ::ng-deep .OT_bar,.pip-main-video ::ng-deep .OT_name{display:none!important}.floating-controls{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;gap:12px;padding:6px 14px;background:rgba(0,0,0,.7);border-radius:24px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.tas-floating-container:hover .floating-controls{opacity:1;visibility:visible}.action-btn{width:32px;height:32px;border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:13px;transition:all .2s ease}.action-btn.expand-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.expand-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn.muted{background:#f39c12;color:#fff}.action-btn.mute-btn.muted:hover{background:#e67e22}.action-btn.hangup-btn{background:#dc3545;color:#fff}.action-btn.hangup-btn:hover{background:#c82333;transform:scale(1.1)}\n"] }]
78
128
  }], ctorParameters: function () { return [{ type: i1.TasService }]; } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWZsb2F0aW5nLWNhbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1mbG9hdGluZy1jYWxsL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YXMtZmxvYXRpbmctY2FsbC90YXMtZmxvYXRpbmctY2FsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQWMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxRQUFRLE1BQU0sWUFBWSxDQUFDOzs7QUFPbEMsTUFBTSxPQUFPLHdCQUF3QjtJQU1uQyxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBTG5DLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVmLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVFLENBQUM7SUFFOUMsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsa0JBQWtCO0lBQ1Ysa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsWUFBWSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFNBQVM7Z0JBQ1osSUFBSSxLQUFLLFFBQVEsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2xCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWTtRQUNsQixRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU1QyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUMsT0FBTyxFQUFFLElBQUk7WUFDYixTQUFTLEVBQUU7Z0JBQ1QsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7b0JBQzlCLFdBQVcsRUFBRSxNQUFNO29CQUNuQixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDO2FBQ0g7WUFDRCxVQUFVLEVBQUUsS0FBSztZQUNqQixTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQkFDNUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RFLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUV0RSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDckQsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztxSEFqRlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IseURDVnJDLDBoQ0FrQ0E7MkZEeEJhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRhc1NlcnZpY2UsIENhbGxTdGF0ZSwgVmlld01vZGUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGFzLnNlcnZpY2VcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgaW50ZXJhY3QgZnJvbSBcImludGVyYWN0anNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInRhcy1mbG9hdGluZy1jYWxsXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGFzLWZsb2F0aW5nLWNhbGwuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNGbG9hdGluZ0NhbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBpc1Zpc2libGUgPSBmYWxzZTtcbiAgcHVibGljIGlzTXV0ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YXNTZXJ2aWNlOiBUYXNTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBTdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICBpbnRlcmFjdChcIi50YXMtZmxvYXRpbmctY29udGFpbmVyXCIpLnVuc2V0KCk7XG4gIH1cblxuICAvLyBQdWJsaWMgTWV0aG9kc1xuICBvbkV4cGFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhc1NlcnZpY2UuZXhpdFBpcE1vZGUoKTtcbiAgfVxuXG4gIG9uSGFuZ1VwKCk6IHZvaWQge1xuICAgIHRoaXMudGFzU2VydmljZS5kaXNjb25uZWN0U2Vzc2lvbigpO1xuICB9XG5cbiAgdG9nZ2xlTXV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhc1NlcnZpY2UudG9nZ2xlTXV0ZSgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBNZXRob2RzXG4gIHByaXZhdGUgc2V0dXBTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2UuY2FsbFN0YXRlJC5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gQ2FsbFN0YXRlLkRJU0NPTk5FQ1RFRCkge1xuICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2Uudmlld01vZGUkLnN1YnNjcmliZSgobW9kZSkgPT4ge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9XG4gICAgICAgICAgbW9kZSA9PT0gVmlld01vZGUuUElQICYmIHRoaXMudGFzU2VydmljZS5pc0NhbGxBY3RpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRJbnRlcmFjdCgpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmlzTXV0ZWQkLnN1YnNjcmliZSgobXV0ZWQpID0+IHtcbiAgICAgICAgdGhpcy5pc011dGVkID0gbXV0ZWQ7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRJbnRlcmFjdCgpOiB2b2lkIHtcbiAgICBpbnRlcmFjdChcIi50YXMtZmxvYXRpbmctY29udGFpbmVyXCIpLnVuc2V0KCk7XG5cbiAgICBpbnRlcmFjdChcIi50YXMtZmxvYXRpbmctY29udGFpbmVyXCIpLmRyYWdnYWJsZSh7XG4gICAgICBpbmVydGlhOiB0cnVlLFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdFJlY3Qoe1xuICAgICAgICAgIHJlc3RyaWN0aW9uOiBcImJvZHlcIixcbiAgICAgICAgICBlbmRPbmx5OiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgICBhdXRvU2Nyb2xsOiBmYWxzZSxcbiAgICAgIGxpc3RlbmVyczoge1xuICAgICAgICBtb3ZlOiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgY29uc3QgeCA9IChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXhcIikpIHx8IDApICsgZXZlbnQuZHg7XG4gICAgICAgICAgY29uc3QgeSA9IChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXlcIikpIHx8IDApICsgZXZlbnQuZHk7XG5cbiAgICAgICAgICB0YXJnZXQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXhcIiwgU3RyaW5nKHgpKTtcbiAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS15XCIsIFN0cmluZyh5KSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFzLWZsb2F0aW5nLWNvbnRhaW5lclwiIFtjbGFzcy52aXNpYmxlXT1cImlzVmlzaWJsZVwiPlxuICA8ZGl2IGNsYXNzPVwiZmxvYXRpbmctY29udGVudFwiPlxuICAgIDxkaXYgaWQ9XCJwaXAtbWFpbi12aWRlb1wiIGNsYXNzPVwicGlwLW1haW4tdmlkZW9cIj48L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbG9hdGluZy1jb250cm9sc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImFjdGlvbi1idG4gZXhwYW5kLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJvbkV4cGFuZCgpXCJcbiAgICAgICAgdGl0bGU9XCJFeHBhbmRpciBhIHBhbnRhbGxhIGNvbXBsZXRhXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leHBhbmRcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnRuIG11dGUtYnRuXCJcbiAgICAgICAgW2NsYXNzLm11dGVkXT1cImlzTXV0ZWRcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlTXV0ZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cImlzTXV0ZWQgPyAnQWN0aXZhciBtaWNyw7Nmb25vJyA6ICdTaWxlbmNpYXIgbWljcsOzZm9ubydcIlxuICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiZmFcIlxuICAgICAgICAgIFtjbGFzcy5mYS1taWNyb3Bob25lXT1cIiFpc011dGVkXCJcbiAgICAgICAgICBbY2xhc3MuZmEtbWljcm9waG9uZS1zbGFzaF09XCJpc011dGVkXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImFjdGlvbi1idG4gaGFuZ3VwLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJvbkhhbmdVcCgpXCJcbiAgICAgICAgdGl0bGU9XCJDb2xnYXIgbGxhbWFkYVwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGhvbmVcIiBzdHlsZT1cInRyYW5zZm9ybTogcm90YXRlKDEzNWRlZylcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWZsb2F0aW5nLWNhbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFzLXVlbGwtc2RrL3NyYy9saWIvY29tcG9uZW50cy90YXMtZmxvYXRpbmctY2FsbC90YXMtZmxvYXRpbmctY2FsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1mbG9hdGluZy1jYWxsL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7OztBQU9sQyxNQUFNLE9BQU8sd0JBQXdCO0lBT3BDLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFMbkMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWYsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBdUQzQyx1Q0FBdUM7UUFDdEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztJQXREYSxDQUFDO0lBRS9DLFFBQVE7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixRQUFRO1FBQ1AsSUFBSSxDQUFD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SyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDckQsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2FBQ0Q7WUFDRCxTQUFTLEVBQUU7Z0JBQ1YsUUFBUSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7b0JBQ2hDLEtBQUssRUFBRTt3QkFDTixJQUFJLEVBQUUsTUFBTTt3QkFDWixHQUFHLEVBQUUsTUFBTTt3QkFDWCxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNO3dCQUNqQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNO3FCQUNuQztpQkFDRCxDQUFDO2dCQUNGLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO29CQUMvQixHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7b0JBQ2hDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtpQkFDaEMsQ0FBQztnQkFDRixRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUNyRDtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7cUhBeklXLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLHlEQ1hyQywrZ0NBcUJBOzJGRFZhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsbFN0YXRlLCBWaWV3TW9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGFzLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgaW50ZXJhY3QgZnJvbSAnaW50ZXJhY3Rqcyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3Rhcy1mbG9hdGluZy1jYWxsJyxcblx0dGVtcGxhdGVVcmw6ICcuL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vdGFzLWZsb2F0aW5nLWNhbGwuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYXNGbG9hdGluZ0NhbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cblx0cHVibGljIGlzVmlzaWJsZSA9IGZhbHNlO1xuXHRwdWJsaWMgaXNNdXRlZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2UpIHsgfVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0dXBTdWJzY3JpcHRpb25zKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcblx0XHRpbnRlcmFjdCgnLnRhcy1mbG9hdGluZy1jb250YWluZXInKS51bnNldCgpO1xuXHR9XG5cblx0Ly8gUHVibGljIE1ldGhvZHNcblx0b25FeHBhbmQoKTogdm9pZCB7XG5cdFx0dGhpcy50YXNTZXJ2aWNlLmV4aXRQaXBNb2RlKCk7XG5cdH1cblxuXHRvbkhhbmdVcCgpOiB2b2lkIHtcblx0XHR0aGlzLnRhc1NlcnZpY2UuZGlzY29ubmVjdFNlc3Npb24oKTtcblx0fVxuXG5cdHRvZ2dsZU11dGUoKTogdm9pZCB7XG5cdFx0dGhpcy50YXNTZXJ2aWNlLnRvZ2dsZU11dGUoKTtcblx0fVxuXG5cdC8vIFByaXZhdGUgTWV0aG9kc1xuXHRwcml2YXRlIHNldHVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcblx0XHQvLyBDYWxsIHN0YXRlIHN1YnNjcmlwdGlvblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2UuY2FsbFN0YXRlJC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuXHRcdFx0XHRpZiAoc3RhdGUgPT09IENhbGxTdGF0ZS5ESVNDT05ORUNURUQpIHtcblx0XHRcdFx0XHR0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHQvLyBWaWV3IG1vZGUgc3Vic2NyaXB0aW9uXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLmFkZChcblx0XHRcdHRoaXMudGFzU2VydmljZS52aWV3TW9kZSQuc3Vic2NyaWJlKG1vZGUgPT4ge1xuXHRcdFx0XHR0aGlzLmlzVmlzaWJsZSA9IG1vZGUgPT09IFZpZXdNb2RlLlBJUCAmJiB0aGlzLnRhc1NlcnZpY2UuaXNDYWxsQWN0aXZlKCk7XG5cdFx0XHRcdGlmICh0aGlzLmlzVmlzaWJsZSkge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbml0SW50ZXJhY3QoKSwgMTAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0Ly8gTXV0ZSBzdGF0ZSBzdWJzY3JpcHRpb25cblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuXHRcdFx0dGhpcy50YXNTZXJ2aWNlLmlzTXV0ZWQkLnN1YnNjcmliZShtdXRlZCA9PiB7XG5cdFx0XHRcdHRoaXMuaXNNdXRlZCA9IG11dGVkO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0Ly8gTWFyZ2luIGZyb20gc2NyZWVuIGVkZ2VzIChpbiBwaXhlbHMpXG5cdHByaXZhdGUgcmVhZG9ubHkgUElQX01BUkdJTiA9IDIwO1xuXG5cdHByaXZhdGUgaW5pdEludGVyYWN0KCk6IHZvaWQge1xuXHRcdGludGVyYWN0KCcudGFzLWZsb2F0aW5nLWNvbnRhaW5lcicpLnVuc2V0KCk7XG5cblx0XHQvLyBDcmVhdGUgcmVzdHJpY3Rpb24gYXJlYSB3aXRoIG1hcmdpblxuXHRcdGNvbnN0IG1hcmdpbiA9IHRoaXMuUElQX01BUkdJTjtcblx0XHRjb25zdCByZXN0cmljdFRvQm9keVdpdGhNYXJnaW4gPSB7XG5cdFx0XHRyZXN0cmljdGlvbjogKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGxlZnQ6IG1hcmdpbixcblx0XHRcdFx0XHR0b3A6IG1hcmdpbixcblx0XHRcdFx0XHRyaWdodDogd2luZG93LmlubmVyV2lkdGggLSBtYXJnaW4sXG5cdFx0XHRcdFx0Ym90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYXJnaW5cblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHRlbGVtZW50UmVjdDogeyBsZWZ0OiAwLCByaWdodDogMSwgdG9wOiAwLCBib3R0b206IDEgfVxuXHRcdH07XG5cblx0XHRpbnRlcmFjdCgnLnRhcy1mbG9hdGluZy1jb250YWluZXInKVxuXHRcdFx0LmRyYWdnYWJsZSh7XG5cdFx0XHRcdGluZXJ0aWE6IHRydWUsXG5cdFx0XHRcdG1vZGlmaWVyczogW1xuXHRcdFx0XHRcdGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdChyZXN0cmljdFRvQm9keVdpdGhNYXJnaW4pXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGF1dG9TY3JvbGw6IGZhbHNlLFxuXHRcdFx0XHRsaXN0ZW5lcnM6IHtcblx0XHRcdFx0XHRtb3ZlOiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0XHRcdGNvbnN0IHggPSAocGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXgnKSkgfHwgMCkgKyBldmVudC5keDtcblx0XHRcdFx0XHRcdGNvbnN0IHkgPSAocGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXknKSkgfHwgMCkgKyBldmVudC5keTtcblxuXHRcdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgpYDtcblx0XHRcdFx0XHRcdHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteCcsIFN0cmluZyh4KSk7XG5cdFx0XHRcdFx0XHR0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLXknLCBTdHJpbmcoeSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5yZXNpemFibGUoe1xuXHRcdFx0XHRlZGdlczogeyBsZWZ0OiBmYWxzZSwgcmlnaHQ6IHRydWUsIGJvdHRvbTogdHJ1ZSwgdG9wOiBmYWxzZSB9LFxuXHRcdFx0XHRsaXN0ZW5lcnM6IHtcblx0XHRcdFx0XHRtb3ZlOiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0XHRcdGxldCB4ID0gcGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXgnKSkgfHwgMDtcblx0XHRcdFx0XHRcdGxldCB5ID0gcGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXknKSkgfHwgMDtcblxuXHRcdFx0XHRcdFx0Ly8gVXBkYXRlIGVsZW1lbnQgc2l6ZVxuXHRcdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLndpZHRoID0gYCR7ZXZlbnQucmVjdC53aWR0aH1weGA7XG5cdFx0XHRcdFx0XHR0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7ZXZlbnQucmVjdC5oZWlnaHR9cHhgO1xuXG5cdFx0XHRcdFx0XHQvLyBUcmFuc2xhdGUgd2hlbiByZXNpemluZyBmcm9tIHRvcCBvciBsZWZ0IGVkZ2VzXG5cdFx0XHRcdFx0XHR4ICs9IGV2ZW50LmRlbHRhUmVjdC5sZWZ0O1xuXHRcdFx0XHRcdFx0eSArPSBldmVudC5kZWx0YVJlY3QudG9wO1xuXG5cdFx0XHRcdFx0XHR0YXJnZXQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS14JywgU3RyaW5nKHgpKTtcblx0XHRcdFx0XHRcdHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteScsIFN0cmluZyh5KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RpZmllcnM6IFtcblx0XHRcdFx0XHRpbnRlcmFjdC5tb2RpZmllcnMucmVzdHJpY3RFZGdlcyh7XG5cdFx0XHRcdFx0XHRvdXRlcjoge1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBtYXJnaW4sXG5cdFx0XHRcdFx0XHRcdHRvcDogbWFyZ2luLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogd2luZG93LmlubmVyV2lkdGggLSBtYXJnaW4sXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogd2luZG93LmlubmVySGVpZ2h0IC0gbWFyZ2luXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0aW50ZXJhY3QubW9kaWZpZXJzLnJlc3RyaWN0U2l6ZSh7XG5cdFx0XHRcdFx0XHRtaW46IHsgd2lkdGg6IDIwMCwgaGVpZ2h0OiAxMzAgfSxcblx0XHRcdFx0XHRcdG1heDogeyB3aWR0aDogNTAwLCBoZWlnaHQ6IDM1MCB9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0aW50ZXJhY3QubW9kaWZpZXJzLmFzcGVjdFJhdGlvKHsgcmF0aW86ICdwcmVzZXJ2ZScgfSlcblx0XHRcdFx0XSxcblx0XHRcdFx0aW5lcnRpYTogdHJ1ZVxuXHRcdFx0fSk7XG5cdH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cInRhcy1mbG9hdGluZy1jb250YWluZXJcIiBbY2xhc3MudmlzaWJsZV09XCJpc1Zpc2libGVcIj5cblx0PCEtLSBWaWRlbyBjb250ZW50IGFyZWEgLSBzaG93cyBtYWluIHZpZGVvIG9ubHkgLS0+XG5cdDxkaXYgY2xhc3M9XCJmbG9hdGluZy1jb250ZW50XCI+XG5cdFx0PCEtLSBNYWluIHZpZGVvIGNvbnRhaW5lciAoc3Vic2NyaWJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBwdWJsaXNoZXIpIC0tPlxuXHRcdDxkaXYgaWQ9XCJwaXAtbWFpbi12aWRlb1wiIGNsYXNzPVwicGlwLW1haW4tdmlkZW9cIj48L2Rpdj5cblxuXHRcdDwhLS0gQm90dG9tIGNvbnRyb2xzIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJmbG9hdGluZy1jb250cm9sc1wiPlxuXHRcdFx0PGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gZXhwYW5kLWJ0blwiIChjbGljayk9XCJvbkV4cGFuZCgpXCIgdGl0bGU9XCJFeHBhbmQgdG8gZnVsbHNjcmVlblwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiPjwvaT5cblx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0PGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gbXV0ZS1idG5cIiBbY2xhc3MubXV0ZWRdPVwiaXNNdXRlZFwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIiBbdGl0bGVdPVwiaXNNdXRlZCA/ICdVbm11dGUgbWljcm9waG9uZScgOiAnTXV0ZSBtaWNyb3Bob25lJ1wiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhXCIgW2NsYXNzLmZhLW1pY3JvcGhvbmVdPVwiIWlzTXV0ZWRcIiBbY2xhc3MuZmEtbWljcm9waG9uZS1zbGFzaF09XCJpc011dGVkXCI+PC9pPlxuXHRcdFx0PC9idXR0b24+XG5cdFx0XHQ8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBoYW5ndXAtYnRuXCIgKGNsaWNrKT1cIm9uSGFuZ1VwKClcIiB0aXRsZT1cIkhhbmcgdXAgY2FsbFwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXBob25lXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpO1wiPjwvaT5cblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=