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,7 +1,7 @@
1
- import { Component, Input, ViewChild, } from "@angular/core";
2
- import { CallState, ViewMode } from "../../services/tas.service";
3
- import { Subscription } from "rxjs";
4
- import interact from "interactjs";
1
+ import { Component, Input, ViewChild } 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 "@ng-bootstrap/ng-bootstrap";
7
7
  import * as i2 from "../../services/tas.service";
@@ -24,10 +24,11 @@ export class TasVideocallComponent {
24
24
  }
25
25
  ngOnDestroy() {
26
26
  this.subscriptions.unsubscribe();
27
+ // Only disconnect if not in PiP mode (keep session alive for floating window)
27
28
  if (!this.tasService.isPipMode()) {
28
29
  this.tasService.disconnectSession();
29
30
  }
30
- interact(".publisher-view").unset();
31
+ interact('.publisher-view').unset();
31
32
  }
32
33
  // Public Methods
33
34
  hangUp() {
@@ -37,7 +38,8 @@ export class TasVideocallComponent {
37
38
  this.tasService.toggleMute();
38
39
  }
39
40
  minimize() {
40
- this.tasService.moveMainVideoTo("pip-main-video");
41
+ this.tasService.moveMainVideoTo('pip-main-video');
42
+ // Small delay to ensure video is moved before closing modal
41
43
  setTimeout(() => this.tasService.enterPipMode(), 50);
42
44
  }
43
45
  toggleSwap() {
@@ -50,30 +52,33 @@ export class TasVideocallComponent {
50
52
  }
51
53
  // Private Methods
52
54
  setupSubscriptions() {
53
- this.subscriptions.add(this.tasService.callState$.subscribe((state) => {
55
+ // Call state subscription
56
+ this.subscriptions.add(this.tasService.callState$.subscribe(state => {
54
57
  this.callState = state;
55
58
  if (state === CallState.DISCONNECTED) {
56
- this.activeModal.close("hangup");
59
+ this.activeModal.close('hangup');
57
60
  }
58
61
  }));
59
- this.subscriptions.add(this.tasService.viewMode$.subscribe((mode) => {
62
+ // View mode subscription
63
+ this.subscriptions.add(this.tasService.viewMode$.subscribe(mode => {
60
64
  if (mode === ViewMode.PIP) {
61
- this.activeModal.close("pip");
65
+ this.activeModal.close('pip');
62
66
  }
63
67
  }));
64
- this.subscriptions.add(this.tasService.isMuted$.subscribe((muted) => {
68
+ // Mute state subscription
69
+ this.subscriptions.add(this.tasService.isMuted$.subscribe(muted => {
65
70
  this.isMuted = muted;
66
71
  }));
67
72
  }
68
73
  initializeCall() {
69
74
  if (this.isReturningFromPip) {
75
+ // Returning from PiP - just move videos back
70
76
  setTimeout(() => this.tasService.moveVideosToFullscreen(), 100);
71
77
  }
72
78
  else if (this.sessionId && this.token) {
73
- this.tasService
74
- .connectSession(this.sessionId, this.token, "publisher-container", "subscriber-container")
75
- .catch((err) => {
76
- console.error("Error connecting to video call:", err);
79
+ // New call - connect to session
80
+ this.tasService.connectSession(this.sessionId, this.token, 'publisher-container', 'subscriber-container').catch(err => {
81
+ console.error('Error connecting to video call:', err);
77
82
  });
78
83
  }
79
84
  }
@@ -81,69 +86,69 @@ export class TasVideocallComponent {
81
86
  const publisherEl = this.publisherContainer?.nativeElement;
82
87
  const subscriberEl = this.subscriberContainer?.nativeElement;
83
88
  if (publisherEl) {
84
- publisherEl.removeAttribute("style");
85
- publisherEl.removeAttribute("data-x");
86
- publisherEl.removeAttribute("data-y");
89
+ publisherEl.removeAttribute('style');
90
+ publisherEl.removeAttribute('data-x');
91
+ publisherEl.removeAttribute('data-y');
87
92
  }
88
93
  if (subscriberEl) {
89
- subscriberEl.removeAttribute("style");
90
- subscriberEl.removeAttribute("data-x");
91
- subscriberEl.removeAttribute("data-y");
94
+ subscriberEl.removeAttribute('style');
95
+ subscriberEl.removeAttribute('data-x');
96
+ subscriberEl.removeAttribute('data-y');
92
97
  }
93
98
  }
94
99
  initInteract() {
95
- interact(".publisher-view").unset();
96
- interact(".publisher-view")
100
+ interact('.publisher-view').unset();
101
+ interact('.publisher-view')
97
102
  .draggable({
98
103
  inertia: true,
99
104
  modifiers: [
100
105
  interact.modifiers.restrictRect({
101
- restriction: "parent",
102
- endOnly: true,
103
- }),
106
+ restriction: 'parent',
107
+ endOnly: true
108
+ })
104
109
  ],
105
110
  autoScroll: true,
106
111
  listeners: {
107
112
  move: (event) => {
108
113
  const target = event.target;
109
- const x = (parseFloat(target.getAttribute("data-x")) || 0) + event.dx;
110
- const y = (parseFloat(target.getAttribute("data-y")) || 0) + event.dy;
114
+ const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
115
+ const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
111
116
  target.style.transform = `translate(${x}px, ${y}px)`;
112
- target.setAttribute("data-x", String(x));
113
- target.setAttribute("data-y", String(y));
114
- },
115
- },
117
+ target.setAttribute('data-x', String(x));
118
+ target.setAttribute('data-y', String(y));
119
+ }
120
+ }
116
121
  })
117
122
  .resizable({
118
123
  edges: { left: false, right: true, bottom: true, top: false },
119
124
  listeners: {
120
125
  move: (event) => {
121
126
  const target = event.target;
122
- let x = parseFloat(target.getAttribute("data-x")) || 0;
123
- let y = parseFloat(target.getAttribute("data-y")) || 0;
127
+ let x = parseFloat(target.getAttribute('data-x')) || 0;
128
+ let y = parseFloat(target.getAttribute('data-y')) || 0;
124
129
  target.style.width = `${event.rect.width}px`;
125
130
  target.style.height = `${event.rect.height}px`;
126
131
  x += event.deltaRect.left;
127
132
  y += event.deltaRect.top;
128
133
  target.style.transform = `translate(${x}px, ${y}px)`;
129
- target.setAttribute("data-x", String(x));
130
- target.setAttribute("data-y", String(y));
131
- },
134
+ target.setAttribute('data-x', String(x));
135
+ target.setAttribute('data-y', String(y));
136
+ }
132
137
  },
133
138
  modifiers: [
134
- interact.modifiers.restrictEdges({ outer: "parent" }),
139
+ interact.modifiers.restrictEdges({ outer: 'parent' }),
135
140
  interact.modifiers.restrictSize({ min: { width: 150, height: 100 } }),
136
- interact.modifiers.aspectRatio({ ratio: "preserve" }),
141
+ interact.modifiers.aspectRatio({ ratio: 'preserve' })
137
142
  ],
138
- inertia: true,
143
+ inertia: true
139
144
  });
140
145
  }
141
146
  }
142
147
  TasVideocallComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasVideocallComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.TasService }], target: i0.ɵɵFactoryTarget.Component });
143
- TasVideocallComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasVideocallComponent, selector: "tas-videocall", inputs: { sessionId: "sessionId", token: "token", isReturningFromPip: "isReturningFromPip" }, viewQueries: [{ propertyName: "publisherContainer", first: true, predicate: ["publisherContainer"], descendants: true }, { propertyName: "subscriberContainer", first: true, predicate: ["subscriberContainer"], descendants: true }], ngImport: i0, template: "<div class=\"tas-videocall-container\">\n <div\n id=\"subscriber-container\"\n [class.subscriber-view]=\"isPublisherSmall\"\n [class.publisher-view]=\"!isPublisherSmall\"\n #subscriberContainer\n (dblclick)=\"onDoubleClick()\"\n ></div>\n\n <div\n id=\"publisher-container\"\n [class.publisher-view]=\"isPublisherSmall\"\n [class.subscriber-view]=\"!isPublisherSmall\"\n #publisherContainer\n (dblclick)=\"onDoubleClick()\"\n ></div>\n\n <div class=\"controls-container\">\n <button class=\"btn swap-btn\" (click)=\"toggleSwap()\" title=\"Cambiar vista\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n <button\n class=\"btn pip-btn\"\n (click)=\"minimize()\"\n title=\"Minimizar (Picture in Picture)\"\n >\n <i class=\"fa fa-compress\"></i>\n </button>\n <button\n class=\"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 class=\"btn hangup-btn\" (click)=\"hangUp()\" title=\"Colgar\">\n <i class=\"fa fa-phone\" style=\"transform: rotate(135deg)\"></i>\n </button>\n </div>\n</div>\n", styles: [".tas-videocall-container{position:relative;width:100vw;height:100vh;background-color:#000;overflow:hidden}.tas-videocall-container ::ng-deep .OT_edge-bar-item,.tas-videocall-container ::ng-deep .OT_mute,.tas-videocall-container ::ng-deep .OT_audio-level-meter,.tas-videocall-container ::ng-deep .OT_bar,.tas-videocall-container ::ng-deep .OT_name{display:none!important}.tas-videocall-container .subscriber-view{width:100%;height:100%;z-index:1}.tas-videocall-container .publisher-view{position:absolute;top:20px;right:20px;width:200px;height:150px;z-index:2;border:2px solid #fff;border-radius:8px;background-color:#333}.tas-videocall-container .controls-container{display:flex;flex-direction:row;gap:20px;position:absolute;bottom:30px;left:50%;transform:translate(-50%);z-index:3;background-color:#00000080;padding:15px 25px;border-radius:50px;backdrop-filter:blur(5px)}.tas-videocall-container .controls-container .hangup-btn,.tas-videocall-container .controls-container .swap-btn,.tas-videocall-container .controls-container .pip-btn,.tas-videocall-container .controls-container .mute-btn{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;border:none;box-shadow:0 4px 6px #0000004d;transition:all .2s ease}.tas-videocall-container .controls-container .hangup-btn i,.tas-videocall-container .controls-container .swap-btn i,.tas-videocall-container .controls-container .pip-btn i,.tas-videocall-container .controls-container .mute-btn i{color:#fff}.tas-videocall-container .controls-container .hangup-btn{background:#dc3545}.tas-videocall-container .controls-container .hangup-btn:hover{background:#c82333;transform:scale(1.05)}.tas-videocall-container .controls-container .swap-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .swap-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .pip-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .pip-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .mute-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .mute-btn.muted{background:#f39c12}.tas-videocall-container .controls-container .mute-btn.muted:hover{background:#e67e22}\n"] });
148
+ TasVideocallComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasVideocallComponent, selector: "tas-videocall", inputs: { sessionId: "sessionId", token: "token", isReturningFromPip: "isReturningFromPip" }, viewQueries: [{ propertyName: "publisherContainer", first: true, predicate: ["publisherContainer"], descendants: true }, { propertyName: "subscriberContainer", first: true, predicate: ["subscriberContainer"], descendants: true }], ngImport: i0, template: "<div class=\"tas-videocall-container\">\n\t<div id=\"subscriber-container\" \n\t\t[class.subscriber-view]=\"isPublisherSmall\" \n\t\t[class.publisher-view]=\"!isPublisherSmall\"\n\t\t#subscriberContainer\n\t\t(dblclick)=\"onDoubleClick()\">\n\t</div>\n\n\t<div id=\"publisher-container\" \n\t\t[class.publisher-view]=\"isPublisherSmall\" \n\t\t[class.subscriber-view]=\"!isPublisherSmall\"\n\t\t#publisherContainer \n\t\t(dblclick)=\"onDoubleClick()\">\n\t</div>\n\t\n\t<div class=\"controls-container\">\n\t\t<button class=\"btn swap-btn\" (click)=\"toggleSwap()\" title=\"Swap view\">\n\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t</button>\n\t\t<button class=\"btn pip-btn\" (click)=\"minimize()\" title=\"Minimize (Picture in Picture)\">\n\t\t\t<i class=\"fa fa-compress\"></i>\n\t\t</button>\n\t\t<button class=\"btn mute-btn\" [class.muted]=\"isMuted\" (click)=\"toggleMute()\" [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\">\n\t\t\t<i class=\"fa\" [class.fa-microphone]=\"!isMuted\" [class.fa-microphone-slash]=\"isMuted\"></i>\n\t\t</button>\n\t\t<button class=\"btn hangup-btn\" (click)=\"hangUp()\" title=\"Hang up\">\n\t\t\t<i class=\"fa fa-phone\" style=\"transform: rotate(135deg);\"></i>\n\t\t</button>\n\t</div>\n</div>\n\n", styles: [".tas-videocall-container{position:relative;width:100vw;height:100vh;background-color:#000;overflow:hidden}.tas-videocall-container ::ng-deep .OT_edge-bar-item,.tas-videocall-container ::ng-deep .OT_mute,.tas-videocall-container ::ng-deep .OT_audio-level-meter,.tas-videocall-container ::ng-deep .OT_bar,.tas-videocall-container ::ng-deep .OT_name{display:none!important}.tas-videocall-container .subscriber-view{width:100%;height:100%;z-index:1}.tas-videocall-container .publisher-view{position:absolute;top:20px;right:20px;width:200px;height:150px;z-index:2;border:2px solid #fff;border-radius:8px;background-color:#333}.tas-videocall-container .controls-container{display:flex;flex-direction:row;gap:20px;position:absolute;bottom:30px;left:50%;transform:translate(-50%);z-index:3;background-color:#00000080;padding:15px 25px;border-radius:50px;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.tas-videocall-container .controls-container .hangup-btn,.tas-videocall-container .controls-container .swap-btn,.tas-videocall-container .controls-container .pip-btn,.tas-videocall-container .controls-container .mute-btn{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;border:none;box-shadow:0 4px 6px #0000004d;transition:all .2s ease}.tas-videocall-container .controls-container .hangup-btn i,.tas-videocall-container .controls-container .swap-btn i,.tas-videocall-container .controls-container .pip-btn i,.tas-videocall-container .controls-container .mute-btn i{color:#fff}.tas-videocall-container .controls-container .hangup-btn{background:#dc3545}.tas-videocall-container .controls-container .hangup-btn:hover{background:#c82333;transform:scale(1.05)}.tas-videocall-container .controls-container .swap-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .swap-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .pip-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .pip-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .mute-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .mute-btn.muted{background:#f39c12}.tas-videocall-container .controls-container .mute-btn.muted:hover{background:#e67e22}\n"] });
144
149
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasVideocallComponent, decorators: [{
145
150
  type: Component,
146
- args: [{ selector: "tas-videocall", template: "<div class=\"tas-videocall-container\">\n <div\n id=\"subscriber-container\"\n [class.subscriber-view]=\"isPublisherSmall\"\n [class.publisher-view]=\"!isPublisherSmall\"\n #subscriberContainer\n (dblclick)=\"onDoubleClick()\"\n ></div>\n\n <div\n id=\"publisher-container\"\n [class.publisher-view]=\"isPublisherSmall\"\n [class.subscriber-view]=\"!isPublisherSmall\"\n #publisherContainer\n (dblclick)=\"onDoubleClick()\"\n ></div>\n\n <div class=\"controls-container\">\n <button class=\"btn swap-btn\" (click)=\"toggleSwap()\" title=\"Cambiar vista\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n <button\n class=\"btn pip-btn\"\n (click)=\"minimize()\"\n title=\"Minimizar (Picture in Picture)\"\n >\n <i class=\"fa fa-compress\"></i>\n </button>\n <button\n class=\"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 class=\"btn hangup-btn\" (click)=\"hangUp()\" title=\"Colgar\">\n <i class=\"fa fa-phone\" style=\"transform: rotate(135deg)\"></i>\n </button>\n </div>\n</div>\n", styles: [".tas-videocall-container{position:relative;width:100vw;height:100vh;background-color:#000;overflow:hidden}.tas-videocall-container ::ng-deep .OT_edge-bar-item,.tas-videocall-container ::ng-deep .OT_mute,.tas-videocall-container ::ng-deep .OT_audio-level-meter,.tas-videocall-container ::ng-deep .OT_bar,.tas-videocall-container ::ng-deep .OT_name{display:none!important}.tas-videocall-container .subscriber-view{width:100%;height:100%;z-index:1}.tas-videocall-container .publisher-view{position:absolute;top:20px;right:20px;width:200px;height:150px;z-index:2;border:2px solid #fff;border-radius:8px;background-color:#333}.tas-videocall-container .controls-container{display:flex;flex-direction:row;gap:20px;position:absolute;bottom:30px;left:50%;transform:translate(-50%);z-index:3;background-color:#00000080;padding:15px 25px;border-radius:50px;backdrop-filter:blur(5px)}.tas-videocall-container .controls-container .hangup-btn,.tas-videocall-container .controls-container .swap-btn,.tas-videocall-container .controls-container .pip-btn,.tas-videocall-container .controls-container .mute-btn{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;border:none;box-shadow:0 4px 6px #0000004d;transition:all .2s ease}.tas-videocall-container .controls-container .hangup-btn i,.tas-videocall-container .controls-container .swap-btn i,.tas-videocall-container .controls-container .pip-btn i,.tas-videocall-container .controls-container .mute-btn i{color:#fff}.tas-videocall-container .controls-container .hangup-btn{background:#dc3545}.tas-videocall-container .controls-container .hangup-btn:hover{background:#c82333;transform:scale(1.05)}.tas-videocall-container .controls-container .swap-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .swap-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .pip-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .pip-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .mute-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .mute-btn.muted{background:#f39c12}.tas-videocall-container .controls-container .mute-btn.muted:hover{background:#e67e22}\n"] }]
151
+ args: [{ selector: 'tas-videocall', template: "<div class=\"tas-videocall-container\">\n\t<div id=\"subscriber-container\" \n\t\t[class.subscriber-view]=\"isPublisherSmall\" \n\t\t[class.publisher-view]=\"!isPublisherSmall\"\n\t\t#subscriberContainer\n\t\t(dblclick)=\"onDoubleClick()\">\n\t</div>\n\n\t<div id=\"publisher-container\" \n\t\t[class.publisher-view]=\"isPublisherSmall\" \n\t\t[class.subscriber-view]=\"!isPublisherSmall\"\n\t\t#publisherContainer \n\t\t(dblclick)=\"onDoubleClick()\">\n\t</div>\n\t\n\t<div class=\"controls-container\">\n\t\t<button class=\"btn swap-btn\" (click)=\"toggleSwap()\" title=\"Swap view\">\n\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t</button>\n\t\t<button class=\"btn pip-btn\" (click)=\"minimize()\" title=\"Minimize (Picture in Picture)\">\n\t\t\t<i class=\"fa fa-compress\"></i>\n\t\t</button>\n\t\t<button class=\"btn mute-btn\" [class.muted]=\"isMuted\" (click)=\"toggleMute()\" [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\">\n\t\t\t<i class=\"fa\" [class.fa-microphone]=\"!isMuted\" [class.fa-microphone-slash]=\"isMuted\"></i>\n\t\t</button>\n\t\t<button class=\"btn hangup-btn\" (click)=\"hangUp()\" title=\"Hang up\">\n\t\t\t<i class=\"fa fa-phone\" style=\"transform: rotate(135deg);\"></i>\n\t\t</button>\n\t</div>\n</div>\n\n", styles: [".tas-videocall-container{position:relative;width:100vw;height:100vh;background-color:#000;overflow:hidden}.tas-videocall-container ::ng-deep .OT_edge-bar-item,.tas-videocall-container ::ng-deep .OT_mute,.tas-videocall-container ::ng-deep .OT_audio-level-meter,.tas-videocall-container ::ng-deep .OT_bar,.tas-videocall-container ::ng-deep .OT_name{display:none!important}.tas-videocall-container .subscriber-view{width:100%;height:100%;z-index:1}.tas-videocall-container .publisher-view{position:absolute;top:20px;right:20px;width:200px;height:150px;z-index:2;border:2px solid #fff;border-radius:8px;background-color:#333}.tas-videocall-container .controls-container{display:flex;flex-direction:row;gap:20px;position:absolute;bottom:30px;left:50%;transform:translate(-50%);z-index:3;background-color:#00000080;padding:15px 25px;border-radius:50px;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.tas-videocall-container .controls-container .hangup-btn,.tas-videocall-container .controls-container .swap-btn,.tas-videocall-container .controls-container .pip-btn,.tas-videocall-container .controls-container .mute-btn{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;border:none;box-shadow:0 4px 6px #0000004d;transition:all .2s ease}.tas-videocall-container .controls-container .hangup-btn i,.tas-videocall-container .controls-container .swap-btn i,.tas-videocall-container .controls-container .pip-btn i,.tas-videocall-container .controls-container .mute-btn i{color:#fff}.tas-videocall-container .controls-container .hangup-btn{background:#dc3545}.tas-videocall-container .controls-container .hangup-btn:hover{background:#c82333;transform:scale(1.05)}.tas-videocall-container .controls-container .swap-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .swap-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .pip-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .pip-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .mute-btn{background:rgba(255,255,255,.2)}.tas-videocall-container .controls-container .mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.05)}.tas-videocall-container .controls-container .mute-btn.muted{background:#f39c12}.tas-videocall-container .controls-container .mute-btn.muted:hover{background:#e67e22}\n"] }]
147
152
  }], ctorParameters: function () { return [{ type: i1.NgbActiveModal }, { type: i2.TasService }]; }, propDecorators: { sessionId: [{
148
153
  type: Input
149
154
  }], token: [{
@@ -152,9 +157,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
152
157
  type: Input
153
158
  }], publisherContainer: [{
154
159
  type: ViewChild,
155
- args: ["publisherContainer"]
160
+ args: ['publisherContainer']
156
161
  }], subscriberContainer: [{
157
162
  type: ViewChild,
158
- args: ["subscriberContainer"]
163
+ args: ['subscriberContainer']
159
164
  }] } });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXZpZGVvY2FsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdGFzLXZpZGVvY2FsbC90YXMtdmlkZW9jYWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YXMtdmlkZW9jYWxsL3Rhcy12aWRlb2NhbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxLQUFLLEVBQ0wsU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7Ozs7QUFPbEMsTUFBTSxPQUFPLHFCQUFxQjtJQWNoQyxZQUNTLFdBQTJCLEVBQzFCLFVBQXNCO1FBRHZCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBYnZCLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUt0QyxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsY0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVmLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUt4QyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7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LE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUNyRCxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7YUFDRjtZQUNELFNBQVMsRUFBRTtnQkFDVCxRQUFRLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDckQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNyRSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUN0RDtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7a0hBL0tVLHFCQUFxQjtzR0FBckIscUJBQXFCLDBYQ25CbEMsdTFDQTZDQTsyRkQxQmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGVBQWU7OEhBS2hCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFMkIsa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDRyxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlLCBDYWxsU3RhdGUsIFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Rhcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IGludGVyYWN0IGZyb20gXCJpbnRlcmFjdGpzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJ0YXMtdmlkZW9jYWxsXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGFzLXZpZGVvY2FsbC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdGFzLXZpZGVvY2FsbC5jb21wb25lbnQuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFzVmlkZW9jYWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBzZXNzaW9uSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBpc1JldHVybmluZ0Zyb21QaXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKFwicHVibGlzaGVyQ29udGFpbmVyXCIpIHB1Ymxpc2hlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoXCJzdWJzY3JpYmVyQ29udGFpbmVyXCIpIHN1YnNjcmliZXJDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIHB1YmxpYyBpc1B1Ymxpc2hlclNtYWxsID0gdHJ1ZTtcbiAgcHVibGljIGNhbGxTdGF0ZSA9IENhbGxTdGF0ZS5JRExFO1xuICBwdWJsaWMgaXNNdXRlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxuICAgIHByaXZhdGUgdGFzU2VydmljZTogVGFzU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmluaXRpYWxpemVDYWxsKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0SW50ZXJhY3QoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKCF0aGlzLnRhc1NlcnZpY2UuaXNQaXBNb2RlKCkpIHtcbiAgICAgIHRoaXMudGFzU2VydmljZS5kaXNjb25uZWN0U2Vzc2lvbigpO1xuICAgIH1cblxuICAgIGludGVyYWN0KFwiLnB1Ymxpc2hlci12aWV3XCIpLnVuc2V0KCk7XG4gIH1cblxuICAvLyBQdWJsaWMgTWV0aG9kc1xuICBoYW5nVXAoKTogdm9pZCB7XG4gICAgdGhpcy50YXNTZXJ2aWNlLmRpc2Nvbm5lY3RTZXNzaW9uKCk7XG4gIH1cblxuICB0b2dnbGVNdXRlKCk6IHZvaWQge1xuICAgIHRoaXMudGFzU2VydmljZS50b2dnbGVNdXRlKCk7XG4gIH1cblxuICBtaW5pbWl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhc1NlcnZpY2UubW92ZU1haW5WaWRlb1RvKFwicGlwLW1haW4tdmlkZW9cIik7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRhc1NlcnZpY2UuZW50ZXJQaXBNb2RlKCksIDUwKTtcbiAgfVxuXG4gIHRvZ2dsZVN3YXAoKTogdm9pZCB7XG4gICAgdGhpcy5pc1B1Ymxpc2hlclNtYWxsID0gIXRoaXMuaXNQdWJsaXNoZXJTbWFsbDtcbiAgICB0aGlzLnJlc2V0VmlkZW9Qb3NpdGlvbnMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5pdEludGVyYWN0KCkpO1xuICB9XG5cbiAgb25Eb3VibGVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN3YXAoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGUgTWV0aG9kc1xuICBwcml2YXRlIHNldHVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmNhbGxTdGF0ZSQuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmNhbGxTdGF0ZSA9IHN0YXRlO1xuICAgICAgICBpZiAoc3RhdGUgPT09IENhbGxTdGF0ZS5ESVNDT05ORUNURUQpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKFwiaGFuZ3VwXCIpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLnZpZXdNb2RlJC5zdWJzY3JpYmUoKG1vZGUpID0+IHtcbiAgICAgICAgaWYgKG1vZGUgPT09IFZpZXdNb2RlLlBJUCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoXCJwaXBcIik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2UuaXNNdXRlZCQuc3Vic2NyaWJlKChtdXRlZCkgPT4ge1xuICAgICAgICB0aGlzLmlzTXV0ZWQgPSBtdXRlZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXR1cm5pbmdGcm9tUGlwKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudGFzU2VydmljZS5tb3ZlVmlkZW9zVG9GdWxsc2NyZWVuKCksIDEwMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlc3Npb25JZCAmJiB0aGlzLnRva2VuKSB7XG4gICAgICB0aGlzLnRhc1NlcnZpY2VcbiAgICAgICAgLmNvbm5lY3RTZXNzaW9uKFxuICAgICAgICAgIHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgIHRoaXMudG9rZW4sXG4gICAgICAgICAgXCJwdWJsaXNoZXItY29udGFpbmVyXCIsXG4gICAgICAgICAgXCJzdWJzY3JpYmVyLWNvbnRhaW5lclwiXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgY29ubmVjdGluZyB0byB2aWRlbyBjYWxsOlwiLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0VmlkZW9Qb3NpdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgcHVibGlzaGVyRWwgPSB0aGlzLnB1Ymxpc2hlckNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBzdWJzY3JpYmVyRWwgPSB0aGlzLnN1YnNjcmliZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAocHVibGlzaGVyRWwpIHtcbiAgICAgIHB1Ymxpc2hlckVsLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgICAgcHVibGlzaGVyRWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS14XCIpO1xuICAgICAgcHVibGlzaGVyRWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS15XCIpO1xuICAgIH1cblxuICAgIGlmIChzdWJzY3JpYmVyRWwpIHtcbiAgICAgIHN1YnNjcmliZXJFbC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgIHN1YnNjcmliZXJFbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXhcIik7XG4gICAgICBzdWJzY3JpYmVyRWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS15XCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEludGVyYWN0KCk6IHZvaWQge1xuICAgIGludGVyYWN0KFwiLnB1Ymxpc2hlci12aWV3XCIpLnVuc2V0KCk7XG5cbiAgICBpbnRlcmFjdChcIi5wdWJsaXNoZXItdmlld1wiKVxuICAgICAgLmRyYWdnYWJsZSh7XG4gICAgICAgIGluZXJ0aWE6IHRydWUsXG4gICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdFJlY3Qoe1xuICAgICAgICAgICAgcmVzdHJpY3Rpb246IFwicGFyZW50XCIsXG4gICAgICAgICAgICBlbmRPbmx5OiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICBhdXRvU2Nyb2xsOiB0cnVlLFxuICAgICAgICBsaXN0ZW5lcnM6IHtcbiAgICAgICAgICBtb3ZlOiAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHggPVxuICAgICAgICAgICAgICAocGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS14XCIpKSB8fCAwKSArIGV2ZW50LmR4O1xuICAgICAgICAgICAgY29uc3QgeSA9XG4gICAgICAgICAgICAgIChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXlcIikpIHx8IDApICsgZXZlbnQuZHk7XG5cbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7eH1weCwgJHt5fXB4KWA7XG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS14XCIsIFN0cmluZyh4KSk7XG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS15XCIsIFN0cmluZyh5KSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucmVzaXphYmxlKHtcbiAgICAgICAgZWRnZXM6IHsgbGVmdDogZmFsc2UsIHJpZ2h0OiB0cnVlLCBib3R0b206IHRydWUsIHRvcDogZmFsc2UgfSxcbiAgICAgICAgbGlzdGVuZXJzOiB7XG4gICAgICAgICAgbW92ZTogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBsZXQgeCA9IHBhcnNlRmxvYXQodGFyZ2V0LmdldEF0dHJpYnV0ZShcImRhdGEteFwiKSkgfHwgMDtcbiAgICAgICAgICAgIGxldCB5ID0gcGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS15XCIpKSB8fCAwO1xuXG4gICAgICAgICAgICB0YXJnZXQuc3R5bGUud2lkdGggPSBgJHtldmVudC5yZWN0LndpZHRofXB4YDtcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHtldmVudC5yZWN0LmhlaWdodH1weGA7XG5cbiAgICAgICAgICAgIHggKz0gZXZlbnQuZGVsdGFSZWN0LmxlZnQ7XG4gICAgICAgICAgICB5ICs9IGV2ZW50LmRlbHRhUmVjdC50b3A7XG5cbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7eH1weCwgJHt5fXB4KWA7XG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS14XCIsIFN0cmluZyh4KSk7XG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS15XCIsIFN0cmluZyh5KSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgICAgaW50ZXJhY3QubW9kaWZpZXJzLnJlc3RyaWN0RWRnZXMoeyBvdXRlcjogXCJwYXJlbnRcIiB9KSxcbiAgICAgICAgICBpbnRlcmFjdC5tb2RpZmllcnMucmVzdHJpY3RTaXplKHsgbWluOiB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTAwIH0gfSksXG4gICAgICAgICAgaW50ZXJhY3QubW9kaWZpZXJzLmFzcGVjdFJhdGlvKHsgcmF0aW86IFwicHJlc2VydmVcIiB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgaW5lcnRpYTogdHJ1ZSxcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFzLXZpZGVvY2FsbC1jb250YWluZXJcIj5cbiAgPGRpdlxuICAgIGlkPVwic3Vic2NyaWJlci1jb250YWluZXJcIlxuICAgIFtjbGFzcy5zdWJzY3JpYmVyLXZpZXddPVwiaXNQdWJsaXNoZXJTbWFsbFwiXG4gICAgW2NsYXNzLnB1Ymxpc2hlci12aWV3XT1cIiFpc1B1Ymxpc2hlclNtYWxsXCJcbiAgICAjc3Vic2NyaWJlckNvbnRhaW5lclxuICAgIChkYmxjbGljayk9XCJvbkRvdWJsZUNsaWNrKClcIlxuICA+PC9kaXY+XG5cbiAgPGRpdlxuICAgIGlkPVwicHVibGlzaGVyLWNvbnRhaW5lclwiXG4gICAgW2NsYXNzLnB1Ymxpc2hlci12aWV3XT1cImlzUHVibGlzaGVyU21hbGxcIlxuICAgIFtjbGFzcy5zdWJzY3JpYmVyLXZpZXddPVwiIWlzUHVibGlzaGVyU21hbGxcIlxuICAgICNwdWJsaXNoZXJDb250YWluZXJcbiAgICAoZGJsY2xpY2spPVwib25Eb3VibGVDbGljaygpXCJcbiAgPjwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb250cm9scy1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHN3YXAtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZVN3YXAoKVwiIHRpdGxlPVwiQ2FtYmlhciB2aXN0YVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1yZWZyZXNoXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIHBpcC1idG5cIlxuICAgICAgKGNsaWNrKT1cIm1pbmltaXplKClcIlxuICAgICAgdGl0bGU9XCJNaW5pbWl6YXIgKFBpY3R1cmUgaW4gUGljdHVyZSlcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29tcHJlc3NcIj48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gbXV0ZS1idG5cIlxuICAgICAgW2NsYXNzLm11dGVkXT1cImlzTXV0ZWRcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiXG4gICAgICBbdGl0bGVdPVwiaXNNdXRlZCA/ICdBY3RpdmFyIG1pY3LDs2Zvbm8nIDogJ1NpbGVuY2lhciBtaWNyw7Nmb25vJ1wiXG4gICAgPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJmYVwiXG4gICAgICAgIFtjbGFzcy5mYS1taWNyb3Bob25lXT1cIiFpc011dGVkXCJcbiAgICAgICAgW2NsYXNzLmZhLW1pY3JvcGhvbmUtc2xhc2hdPVwiaXNNdXRlZFwiXG4gICAgICA+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gaGFuZ3VwLWJ0blwiIChjbGljayk9XCJoYW5nVXAoKVwiIHRpdGxlPVwiQ29sZ2FyXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBob25lXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXZpZGVvY2FsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUcxRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxRQUFRLE1BQU0sWUFBWSxDQUFDOzs7O0FBT2xDLE1BQU0sT0FBTyxxQkFBcUI7SUFlakMsWUFDUSxXQUEyQixFQUMxQixVQUFzQjtRQUR2QixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDMUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWJ0Qix1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFLdEMscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzNCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFZixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFLdkMsQ0FBQztJQUVMLFFBQVE7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGVBQWU7UUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckIsQ0FB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b21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFRhc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXMuc2VydmljZSc7XG5pbXBvcnQgeyBDYWxsU3RhdGUsIFZpZXdNb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCBpbnRlcmFjdCBmcm9tICdpbnRlcmFjdGpzJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAndGFzLXZpZGVvY2FsbCcsXG5cdHRlbXBsYXRlVXJsOiAnLi90YXMtdmlkZW9jYWxsLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vdGFzLXZpZGVvY2FsbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhc1ZpZGVvY2FsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuXHRASW5wdXQoKSBzZXNzaW9uSWQhOiBzdHJpbmc7XG5cdEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xuXHRASW5wdXQoKSBpc1JldHVybmluZ0Zyb21QaXA6IGJvb2xlYW4gPSBmYWxzZTtcblx0XG5cdEBWaWV3Q2hpbGQoJ3B1Ymxpc2hlckNvbnRhaW5lcicpIHB1Ymxpc2hlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cdEBWaWV3Q2hpbGQoJ3N1YnNjcmliZXJDb250YWluZXInKSBzdWJzY3JpYmVyQ29udGFpbmVyITogRWxlbWVudFJlZjtcblxuXHRwdWJsaWMgaXNQdWJsaXNoZXJTbWFsbCA9IHRydWU7XG5cdHB1YmxpYyBjYWxsU3RhdGUgPSBDYWxsU3RhdGUuSURMRTtcblx0cHVibGljIGlzTXV0ZWQgPSBmYWxzZTtcblxuXHRwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcblx0XHRwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2Vcblx0KSB7IH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnNldHVwU3Vic2NyaXB0aW9ucygpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZUNhbGwoKTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmluaXRJbnRlcmFjdCgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG5cdFx0XG5cdFx0Ly8gT25seSBkaXNjb25uZWN0IGlmIG5vdCBpbiBQaVAgbW9kZSAoa2VlcCBzZXNzaW9uIGFsaXZlIGZvciBmbG9hdGluZyB3aW5kb3cpXG5cdFx0aWYgKCF0aGlzLnRhc1NlcnZpY2UuaXNQaXBNb2RlKCkpIHtcblx0XHRcdHRoaXMudGFzU2VydmljZS5kaXNjb25uZWN0U2Vzc2lvbigpO1xuXHRcdH1cblx0XHRcblx0XHRpbnRlcmFjdCgnLnB1Ymxpc2hlci12aWV3JykudW5zZXQoKTtcblx0fVxuXG5cdC8vIFB1YmxpYyBNZXRob2RzXG5cdGhhbmdVcCgpOiB2b2lkIHtcblx0XHR0aGlzLnRhc1NlcnZpY2UuZGlzY29ubmVjdFNlc3Npb24oKTtcblx0fVxuXG5cdHRvZ2dsZU11dGUoKTogdm9pZCB7XG5cdFx0dGhpcy50YXNTZXJ2aWNlLnRvZ2dsZU11dGUoKTtcblx0fVxuXG5cdG1pbmltaXplKCk6IHZvaWQge1xuXHRcdHRoaXMudGFzU2VydmljZS5tb3ZlTWFpblZpZGVvVG8oJ3BpcC1tYWluLXZpZGVvJyk7XG5cdFx0Ly8gU21hbGwgZGVsYXkgdG8gZW5zdXJlIHZpZGVvIGlzIG1vdmVkIGJlZm9yZSBjbG9zaW5nIG1vZGFsXG5cdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnRhc1NlcnZpY2UuZW50ZXJQaXBNb2RlKCksIDUwKTtcblx0fVxuXG5cdHRvZ2dsZVN3YXAoKTogdm9pZCB7XG5cdFx0dGhpcy5pc1B1Ymxpc2hlclNtYWxsID0gIXRoaXMuaXNQdWJsaXNoZXJTbWFsbDtcblx0XHR0aGlzLnJlc2V0VmlkZW9Qb3NpdGlvbnMoKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5pdEludGVyYWN0KCkpO1xuXHR9XG5cblx0b25Eb3VibGVDbGljaygpOiB2b2lkIHtcblx0XHR0aGlzLnRvZ2dsZVN3YXAoKTtcblx0fVxuXG5cdC8vIFByaXZhdGUgTWV0aG9kc1xuXHRwcml2YXRlIHNldHVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcblx0XHQvLyBDYWxsIHN0YXRlIHN1YnNjcmlwdGlvblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2UuY2FsbFN0YXRlJC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuXHRcdFx0XHR0aGlzLmNhbGxTdGF0ZSA9IHN0YXRlO1xuXHRcdFx0XHRpZiAoc3RhdGUgPT09IENhbGxTdGF0ZS5ESVNDT05ORUNURUQpIHtcblx0XHRcdFx0XHR0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdoYW5ndXAnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0Ly8gVmlldyBtb2RlIHN1YnNjcmlwdGlvblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2Uudmlld01vZGUkLnN1YnNjcmliZShtb2RlID0+IHtcblx0XHRcdFx0aWYgKG1vZGUgPT09IFZpZXdNb2RlLlBJUCkge1xuXHRcdFx0XHRcdHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ3BpcCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHQvLyBNdXRlIHN0YXRlIHN1YnNjcmlwdGlvblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2UuaXNNdXRlZCQuc3Vic2NyaWJlKG11dGVkID0+IHtcblx0XHRcdFx0dGhpcy5pc011dGVkID0gbXV0ZWQ7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGluaXRpYWxpemVDYWxsKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlzUmV0dXJuaW5nRnJvbVBpcCkge1xuXHRcdFx0Ly8gUmV0dXJuaW5nIGZyb20gUGlQIC0ganVzdCBtb3ZlIHZpZGVvcyBiYWNrXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHRoaXMudGFzU2VydmljZS5tb3ZlVmlkZW9zVG9GdWxsc2NyZWVuKCksIDEwMCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnNlc3Npb25JZCAmJiB0aGlzLnRva2VuKSB7XG5cdFx0XHQvLyBOZXcgY2FsbCAtIGNvbm5lY3QgdG8gc2Vzc2lvblxuXHRcdFx0dGhpcy50YXNTZXJ2aWNlLmNvbm5lY3RTZXNzaW9uKFxuXHRcdFx0XHR0aGlzLnNlc3Npb25JZCxcblx0XHRcdFx0dGhpcy50b2tlbixcblx0XHRcdFx0J3B1Ymxpc2hlci1jb250YWluZXInLFxuXHRcdFx0XHQnc3Vic2NyaWJlci1jb250YWluZXInXG5cdFx0XHQpLmNhdGNoKGVyciA9PiB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbm5lY3RpbmcgdG8gdmlkZW8gY2FsbDonLCBlcnIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZXNldFZpZGVvUG9zaXRpb25zKCk6IHZvaWQge1xuXHRcdGNvbnN0IHB1Ymxpc2hlckVsID0gdGhpcy5wdWJsaXNoZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0Y29uc3Qgc3Vic2NyaWJlckVsID0gdGhpcy5zdWJzY3JpYmVyQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG5cdFx0aWYgKHB1Ymxpc2hlckVsKSB7XG5cdFx0XHRwdWJsaXNoZXJFbC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cdFx0XHRwdWJsaXNoZXJFbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEteCcpO1xuXHRcdFx0cHVibGlzaGVyRWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXknKTtcblx0XHR9XG5cblx0XHRpZiAoc3Vic2NyaWJlckVsKSB7XG5cdFx0XHRzdWJzY3JpYmVyRWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuXHRcdFx0c3Vic2NyaWJlckVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS14Jyk7XG5cdFx0XHRzdWJzY3JpYmVyRWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXknKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGluaXRJbnRlcmFjdCgpOiB2b2lkIHtcblx0XHRpbnRlcmFjdCgnLnB1Ymxpc2hlci12aWV3JykudW5zZXQoKTtcblxuXHRcdGludGVyYWN0KCcucHVibGlzaGVyLXZpZXcnKVxuXHRcdFx0LmRyYWdnYWJsZSh7XG5cdFx0XHRcdGluZXJ0aWE6IHRydWUsXG5cdFx0XHRcdG1vZGlmaWVyczogW1xuXHRcdFx0XHRcdGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdFJlY3Qoe1xuXHRcdFx0XHRcdFx0cmVzdHJpY3Rpb246ICdwYXJlbnQnLFxuXHRcdFx0XHRcdFx0ZW5kT25seTogdHJ1ZVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGF1dG9TY3JvbGw6IHRydWUsXG5cdFx0XHRcdGxpc3RlbmVyczoge1xuXHRcdFx0XHRcdG1vdmU6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRcdFx0Y29uc3QgeCA9IChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteCcpKSB8fCAwKSArIGV2ZW50LmR4O1xuXHRcdFx0XHRcdFx0Y29uc3QgeSA9IChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteScpKSB8fCAwKSArIGV2ZW50LmR5O1xuXG5cdFx0XHRcdFx0XHR0YXJnZXQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS14JywgU3RyaW5nKHgpKTtcblx0XHRcdFx0XHRcdHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteScsIFN0cmluZyh5KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LnJlc2l6YWJsZSh7XG5cdFx0XHRcdGVkZ2VzOiB7IGxlZnQ6IGZhbHNlLCByaWdodDogdHJ1ZSwgYm90dG9tOiB0cnVlLCB0b3A6IGZhbHNlIH0sXG5cdFx0XHRcdGxpc3RlbmVyczoge1xuXHRcdFx0XHRcdG1vdmU6IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRcdFx0bGV0IHggPSBwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteCcpKSB8fCAwO1xuXHRcdFx0XHRcdFx0bGV0IHkgPSBwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteScpKSB8fCAwO1xuXG5cdFx0XHRcdFx0XHR0YXJnZXQuc3R5bGUud2lkdGggPSBgJHtldmVudC5yZWN0LndpZHRofXB4YDtcblx0XHRcdFx0XHRcdHRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHtldmVudC5yZWN0LmhlaWdodH1weGA7XG5cblx0XHRcdFx0XHRcdHggKz0gZXZlbnQuZGVsdGFSZWN0LmxlZnQ7XG5cdFx0XHRcdFx0XHR5ICs9IGV2ZW50LmRlbHRhUmVjdC50b3A7XG5cblx0XHRcdFx0XHRcdHRhcmdldC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7eH1weCwgJHt5fXB4KWA7XG5cdFx0XHRcdFx0XHR0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLXgnLCBTdHJpbmcoeCkpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS15JywgU3RyaW5nKHkpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1vZGlmaWVyczogW1xuXHRcdFx0XHRcdGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdEVkZ2VzKHsgb3V0ZXI6ICdwYXJlbnQnIH0pLFxuXHRcdFx0XHRcdGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdFNpemUoeyBtaW46IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxMDAgfSB9KSxcblx0XHRcdFx0XHRpbnRlcmFjdC5tb2RpZmllcnMuYXNwZWN0UmF0aW8oeyByYXRpbzogJ3ByZXNlcnZlJyB9KVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRpbmVydGlhOiB0cnVlXG5cdFx0XHR9KTtcblx0fVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwidGFzLXZpZGVvY2FsbC1jb250YWluZXJcIj5cblx0PGRpdiBpZD1cInN1YnNjcmliZXItY29udGFpbmVyXCIgXG5cdFx0W2NsYXNzLnN1YnNjcmliZXItdmlld109XCJpc1B1Ymxpc2hlclNtYWxsXCIgXG5cdFx0W2NsYXNzLnB1Ymxpc2hlci12aWV3XT1cIiFpc1B1Ymxpc2hlclNtYWxsXCJcblx0XHQjc3Vic2NyaWJlckNvbnRhaW5lclxuXHRcdChkYmxjbGljayk9XCJvbkRvdWJsZUNsaWNrKClcIj5cblx0PC9kaXY+XG5cblx0PGRpdiBpZD1cInB1Ymxpc2hlci1jb250YWluZXJcIiBcblx0XHRbY2xhc3MucHVibGlzaGVyLXZpZXddPVwiaXNQdWJsaXNoZXJTbWFsbFwiIFxuXHRcdFtjbGFzcy5zdWJzY3JpYmVyLXZpZXddPVwiIWlzUHVibGlzaGVyU21hbGxcIlxuXHRcdCNwdWJsaXNoZXJDb250YWluZXIgXG5cdFx0KGRibGNsaWNrKT1cIm9uRG91YmxlQ2xpY2soKVwiPlxuXHQ8L2Rpdj5cblx0XG5cdDxkaXYgY2xhc3M9XCJjb250cm9scy1jb250YWluZXJcIj5cblx0XHQ8YnV0dG9uIGNsYXNzPVwiYnRuIHN3YXAtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZVN3YXAoKVwiIHRpdGxlPVwiU3dhcCB2aWV3XCI+XG5cdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L2k+XG5cdFx0PC9idXR0b24+XG5cdFx0PGJ1dHRvbiBjbGFzcz1cImJ0biBwaXAtYnRuXCIgKGNsaWNrKT1cIm1pbmltaXplKClcIiB0aXRsZT1cIk1pbmltaXplIChQaWN0dXJlIGluIFBpY3R1cmUpXCI+XG5cdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWNvbXByZXNzXCI+PC9pPlxuXHRcdDwvYnV0dG9uPlxuXHRcdDxidXR0b24gY2xhc3M9XCJidG4gbXV0ZS1idG5cIiBbY2xhc3MubXV0ZWRdPVwiaXNNdXRlZFwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIiBbdGl0bGVdPVwiaXNNdXRlZCA/ICdVbm11dGUgbWljcm9waG9uZScgOiAnTXV0ZSBtaWNyb3Bob25lJ1wiPlxuXHRcdFx0PGkgY2xhc3M9XCJmYVwiIFtjbGFzcy5mYS1taWNyb3Bob25lXT1cIiFpc011dGVkXCIgW2NsYXNzLmZhLW1pY3JvcGhvbmUtc2xhc2hdPVwiaXNNdXRlZFwiPjwvaT5cblx0XHQ8L2J1dHRvbj5cblx0XHQ8YnV0dG9uIGNsYXNzPVwiYnRuIGhhbmd1cC1idG5cIiAoY2xpY2spPVwiaGFuZ1VwKClcIiB0aXRsZT1cIkhhbmcgdXBcIj5cblx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtcGhvbmVcIiBzdHlsZT1cInRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7XCI+PC9pPlxuXHRcdDwvYnV0dG9uPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
@@ -0,0 +1,179 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { Subscription } from 'rxjs';
3
+ import { switchMap } from 'rxjs/operators';
4
+ import { TasRoomType, TasSessionType, TasUserRole, ViewMode } from '../../interfaces/tas.interfaces';
5
+ import { TasVideocallComponent } from '../tas-videocall/tas-videocall.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
8
+ import * as i2 from "../../services/tas.service";
9
+ import * as i3 from "@angular/common";
10
+ export var WaitingRoomState;
11
+ (function (WaitingRoomState) {
12
+ WaitingRoomState["IDLE"] = "IDLE";
13
+ WaitingRoomState["CREATING_ROOM"] = "CREATING_ROOM";
14
+ WaitingRoomState["GETTING_TOKEN"] = "GETTING_TOKEN";
15
+ WaitingRoomState["READY"] = "READY";
16
+ WaitingRoomState["ERROR"] = "ERROR";
17
+ })(WaitingRoomState || (WaitingRoomState = {}));
18
+ export class TasWaitingRoomComponent {
19
+ constructor(activeModal, tasService, modalService) {
20
+ this.activeModal = activeModal;
21
+ this.tasService = tasService;
22
+ this.modalService = modalService;
23
+ // Room configuration inputs
24
+ this.appointmentId = 1;
25
+ this.product = 'uell';
26
+ this.tenantId = '';
27
+ this.regularUserIds = [];
28
+ this.moderatorUserIds = [];
29
+ // Component state
30
+ this.state = WaitingRoomState.IDLE;
31
+ this.WaitingRoomState = WaitingRoomState; // Expose enum to template
32
+ this.errorMessage = '';
33
+ // Session data
34
+ this.sessionId = '';
35
+ this.token = '';
36
+ this.users = [];
37
+ this.subscriptions = new Subscription();
38
+ this.videoCallModalRef = null;
39
+ }
40
+ ngOnInit() {
41
+ this.buildUsersArray();
42
+ this.setupViewModeSubscription();
43
+ }
44
+ ngOnDestroy() {
45
+ this.subscriptions.unsubscribe();
46
+ }
47
+ /**
48
+ * Creates the room and fetches the token
49
+ */
50
+ createRoom() {
51
+ if (!this.tenantId || !this.currentUser?.name) {
52
+ this.state = WaitingRoomState.ERROR;
53
+ this.errorMessage = 'Missing configuration data (tenant or user)';
54
+ return;
55
+ }
56
+ this.state = WaitingRoomState.CREATING_ROOM;
57
+ this.errorMessage = '';
58
+ const body = {
59
+ roomType: TasRoomType.TAS,
60
+ type: TasSessionType.SPONTANEOUS,
61
+ tenant: this.tenantId,
62
+ appointmentId: this.appointmentId,
63
+ users: this.users,
64
+ product: this.product
65
+ };
66
+ this.subscriptions.add(this.tasService.createRoom(body).pipe(switchMap(response => {
67
+ this.sessionId = response.content.sessionId;
68
+ this.state = WaitingRoomState.GETTING_TOKEN;
69
+ return this.tasService.generateToken({
70
+ sessionId: this.sessionId,
71
+ name: this.currentUser.name,
72
+ lastname: this.currentUser.lastname,
73
+ roleVC: this.currentUser.role
74
+ });
75
+ })).subscribe({
76
+ next: (tokenResponse) => {
77
+ this.token = tokenResponse.content.token;
78
+ this.state = WaitingRoomState.READY;
79
+ },
80
+ error: (err) => {
81
+ console.error('Error creating room or getting token:', err);
82
+ this.state = WaitingRoomState.ERROR;
83
+ this.errorMessage = 'Error creating room. Please try again.';
84
+ }
85
+ }));
86
+ }
87
+ /**
88
+ * Joins the video call session
89
+ */
90
+ joinSession() {
91
+ if (!this.sessionId || !this.token) {
92
+ this.errorMessage = 'Cannot join session. Incomplete data.';
93
+ return;
94
+ }
95
+ // Close waiting room and open video call
96
+ this.activeModal.close('joining');
97
+ this.openVideoCallModal();
98
+ }
99
+ /**
100
+ * Closes the waiting room
101
+ */
102
+ cancel() {
103
+ this.activeModal.dismiss('cancel');
104
+ }
105
+ /**
106
+ * Retry after an error
107
+ */
108
+ retry() {
109
+ this.state = WaitingRoomState.IDLE;
110
+ this.errorMessage = '';
111
+ this.sessionId = '';
112
+ this.token = '';
113
+ }
114
+ // Private Methods
115
+ buildUsersArray() {
116
+ this.users = [];
117
+ // Add owners from input
118
+ this.ownerUserIds.forEach(id => {
119
+ this.users.push({ userExternalId: id, rol: TasUserRole.OWNER });
120
+ });
121
+ // Add regular users from input
122
+ this.regularUserIds.forEach(id => {
123
+ this.users.push({ userExternalId: id, rol: TasUserRole.USER });
124
+ });
125
+ // Add moderators from input
126
+ this.moderatorUserIds.forEach(id => {
127
+ this.users.push({ userExternalId: id, rol: TasUserRole.MODERATOR });
128
+ });
129
+ }
130
+ setupViewModeSubscription() {
131
+ this.subscriptions.add(this.tasService.viewMode$.subscribe(mode => {
132
+ // Re-open video call modal when returning from PiP mode
133
+ if (mode === ViewMode.FULLSCREEN &&
134
+ this.tasService.isCallActive() &&
135
+ !this.videoCallModalRef) {
136
+ const sessionId = this.tasService.sessionId;
137
+ const token = this.tasService.token;
138
+ if (sessionId && token) {
139
+ this.openVideoCallModal(true);
140
+ }
141
+ }
142
+ }));
143
+ }
144
+ openVideoCallModal(isReturningFromPip = false) {
145
+ this.videoCallModalRef = this.modalService.open(TasVideocallComponent, {
146
+ size: 'xl',
147
+ windowClass: 'tas-video-modal',
148
+ backdrop: 'static',
149
+ keyboard: false
150
+ });
151
+ const sessionIdToUse = this.sessionId || this.tasService.sessionId;
152
+ const tokenToUse = this.token || this.tasService.token;
153
+ this.videoCallModalRef.componentInstance.sessionId = sessionIdToUse;
154
+ this.videoCallModalRef.componentInstance.token = tokenToUse;
155
+ this.videoCallModalRef.componentInstance.isReturningFromPip = isReturningFromPip;
156
+ this.videoCallModalRef.result.then(() => { this.videoCallModalRef = null; }, () => { this.videoCallModalRef = null; });
157
+ }
158
+ }
159
+ TasWaitingRoomComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasWaitingRoomComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.TasService }, { token: i1.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
160
+ TasWaitingRoomComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasWaitingRoomComponent, selector: "tas-waiting-room", inputs: { appointmentId: "appointmentId", product: "product", tenantId: "tenantId", currentUser: "currentUser", ownerUserIds: "ownerUserIds", regularUserIds: "regularUserIds", moderatorUserIds: "moderatorUserIds" }, ngImport: i0, template: "<div class=\"tas-waiting-room\">\n\t<!-- Header -->\n\t<div class=\"waiting-room-header\">\n\t\t<div class=\"header-icon\">\n\t\t\t<i class=\"fa fa-video-camera\"></i>\n\t\t</div>\n\t\t<h2 class=\"header-title\">Waiting Room</h2>\n\t\t<p class=\"header-subtitle\">Prepare for your video call</p>\n\t\t<button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t</button>\n\t</div>\n\n\t<!-- Content -->\n\t<div class=\"waiting-room-content\">\n\t\t<!-- IDLE State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE\">\n\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreate a new video call room\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tPress the button to begin\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t(click)=\"createRoom()\">\n\t\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t\t\tCreate Room\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- CREATING_ROOM State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CREATING_ROOM\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreating video call room...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Creating</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tPreparing room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- READY State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tRoom is ready!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- ERROR State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n\t\t\t<div class=\"state-icon error\">\n\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message error\">\n\t\t\t\tAn error occurred\n\t\t\t</p>\n\t\t\t<p class=\"error-details\" *ngIf=\"errorMessage\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn retry-btn\"\n\t\t\t\t(click)=\"retry()\">\n\t\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t\t\tRetry\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\n\t<!-- Footer -->\n\t<div class=\"waiting-room-footer\">\n\t\t<button \n\t\t\ttype=\"button\" \n\t\t\tclass=\"btn cancel-btn\"\n\t\t\t(click)=\"cancel()\">\n\t\t\tCancel\n\t\t</button>\n\t</div>\n</div>\n\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:420px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-header{position:relative;padding:32px 40px 24px;text-align:center;border-bottom:1px solid #e9ecef}.waiting-room-header .header-icon{width:72px;height:72px;margin:0 auto 16px;background:linear-gradient(135deg,#1da4b1 0%,#0077b3 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #1da4b140}.waiting-room-header .header-icon i{font-size:28px;color:#fff}.waiting-room-header .header-title{margin:0 0 8px;font-size:20px;font-weight:700;line-height:28px;color:#212529}.waiting-room-header .header-subtitle{margin:0;font-size:14px;color:#6c757d;font-weight:400}.waiting-room-header .close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:none;background:transparent;border-radius:4px;color:#6c757d;cursor:pointer;transition:all .2s ease;font-size:20px}.waiting-room-header .close-btn:hover{background:#f8f9fa;color:#212529}.waiting-room-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 40px;background:#ffffff}.state-container{text-align:center;max-width:360px;width:100%}.state-icon{width:80px;height:80px;margin:0 auto 24px;border-radius:50%;display:flex;align-items:center;justify-content:center}.state-icon i{font-size:36px}.state-icon.idle{background:rgba(29,164,177,.1);border:2px dashed #1da4b1}.state-icon.idle i{color:#1da4b1}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.ready{background:linear-gradient(135deg,#1da4b1 0%,#38b89a 100%);box-shadow:0 4px 16px #1da4b14d}.state-icon.ready i{color:#fff}.state-icon.error{background:rgba(238,49,107,.1);border:2px solid #ee316b}.state-icon.error i{color:#ee316b}.spinner{width:40px;height:40px;border:3px solid #e9ecef;border-top-color:#1da4b1;border-radius:50%;animation:spin 1s linear infinite}.state-message{font-size:16px;font-weight:600;margin:0 0 8px;color:#212529;line-height:24px}.state-message.success{color:#1da4b1}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-details{font-size:13px;color:#ee316b;margin:0 0 24px;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2)}.progress-steps{display:flex;justify-content:center;gap:24px;margin:24px 0 32px}.step{display:flex;flex-direction:column;align-items:center;gap:8px}.step .step-indicator{width:32px;height:32px;border-radius:50%;background:#f8f9fa;border:2px solid #e9ecef;display:flex;align-items:center;justify-content:center;transition:all .3s ease}.step .step-indicator i{font-size:12px;color:#fff}.step .step-label{font-size:11px;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.step.active .step-indicator{background:rgba(29,164,177,.1);border-color:#1da4b1;animation:pulse-active 1.5s infinite}.step.active .step-label{color:#1da4b1;font-weight:600}.step.completed .step-indicator{background:#1da4b1;border-color:#1da4b1}.step.completed .step-label{color:#1da4b1;font-weight:600}.action-btn{padding:12px 32px;font-size:16px;font-weight:600;border-radius:4px;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:10px}.action-btn i{font-size:16px}.action-btn.create-btn{background:#0077b3;color:#fff;box-shadow:0 2px 8px #0077b340}.action-btn.create-btn:hover{background:#005c8a;box-shadow:0 4px 12px #0077b359}.action-btn.create-btn:active{transform:translateY(1px)}.action-btn.join-btn{background:#1da4b1;color:#fff;box-shadow:0 2px 8px #1da4b140;animation:pulse-ready 2s infinite}.action-btn.join-btn:hover{background:#17848e;box-shadow:0 4px 12px #1da4b159}.action-btn.join-btn:active{transform:translateY(1px)}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.waiting-room-footer{padding:16px 40px 24px;background:#ffffff;border-top:1px solid #e9ecef;display:flex;justify-content:center}.waiting-room-footer .cancel-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:4px;background:transparent;color:#6c757d;border:none;cursor:pointer;transition:all .2s ease}.waiting-room-footer .cancel-btn:hover{background:#f8f9fa;color:#212529}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-active{0%,to{box-shadow:0 0 #1da4b166}50%{box-shadow:0 0 0 8px #1da4b100}}@keyframes pulse-ready{0%,to{box-shadow:0 2px 8px #1da4b140}50%{box-shadow:0 4px 16px #1da4b166}}@media (max-width: 576px){.tas-waiting-room{min-height:380px}.waiting-room-header{padding:24px 24px 20px}.waiting-room-header .header-icon{width:56px;height:56px}.waiting-room-header .header-icon i{font-size:22px}.waiting-room-header .header-title{font-size:18px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.progress-steps{gap:12px}.step .step-indicator{width:28px;height:28px}.step .step-label{font-size:9px}.action-btn{padding:10px 24px;font-size:14px}.waiting-room-footer{padding:16px 24px 20px}}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasWaitingRoomComponent, decorators: [{
162
+ type: Component,
163
+ args: [{ selector: 'tas-waiting-room', template: "<div class=\"tas-waiting-room\">\n\t<!-- Header -->\n\t<div class=\"waiting-room-header\">\n\t\t<div class=\"header-icon\">\n\t\t\t<i class=\"fa fa-video-camera\"></i>\n\t\t</div>\n\t\t<h2 class=\"header-title\">Waiting Room</h2>\n\t\t<p class=\"header-subtitle\">Prepare for your video call</p>\n\t\t<button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t</button>\n\t</div>\n\n\t<!-- Content -->\n\t<div class=\"waiting-room-content\">\n\t\t<!-- IDLE State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE\">\n\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreate a new video call room\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tPress the button to begin\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t(click)=\"createRoom()\">\n\t\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t\t\tCreate Room\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- CREATING_ROOM State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CREATING_ROOM\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreating video call room...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Creating</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tPreparing room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- READY State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tRoom is ready!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- ERROR State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n\t\t\t<div class=\"state-icon error\">\n\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message error\">\n\t\t\t\tAn error occurred\n\t\t\t</p>\n\t\t\t<p class=\"error-details\" *ngIf=\"errorMessage\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn retry-btn\"\n\t\t\t\t(click)=\"retry()\">\n\t\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t\t\tRetry\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\n\t<!-- Footer -->\n\t<div class=\"waiting-room-footer\">\n\t\t<button \n\t\t\ttype=\"button\" \n\t\t\tclass=\"btn cancel-btn\"\n\t\t\t(click)=\"cancel()\">\n\t\t\tCancel\n\t\t</button>\n\t</div>\n</div>\n\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:420px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-header{position:relative;padding:32px 40px 24px;text-align:center;border-bottom:1px solid #e9ecef}.waiting-room-header .header-icon{width:72px;height:72px;margin:0 auto 16px;background:linear-gradient(135deg,#1da4b1 0%,#0077b3 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #1da4b140}.waiting-room-header .header-icon i{font-size:28px;color:#fff}.waiting-room-header .header-title{margin:0 0 8px;font-size:20px;font-weight:700;line-height:28px;color:#212529}.waiting-room-header .header-subtitle{margin:0;font-size:14px;color:#6c757d;font-weight:400}.waiting-room-header .close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:none;background:transparent;border-radius:4px;color:#6c757d;cursor:pointer;transition:all .2s ease;font-size:20px}.waiting-room-header .close-btn:hover{background:#f8f9fa;color:#212529}.waiting-room-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 40px;background:#ffffff}.state-container{text-align:center;max-width:360px;width:100%}.state-icon{width:80px;height:80px;margin:0 auto 24px;border-radius:50%;display:flex;align-items:center;justify-content:center}.state-icon i{font-size:36px}.state-icon.idle{background:rgba(29,164,177,.1);border:2px dashed #1da4b1}.state-icon.idle i{color:#1da4b1}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.ready{background:linear-gradient(135deg,#1da4b1 0%,#38b89a 100%);box-shadow:0 4px 16px #1da4b14d}.state-icon.ready i{color:#fff}.state-icon.error{background:rgba(238,49,107,.1);border:2px solid #ee316b}.state-icon.error i{color:#ee316b}.spinner{width:40px;height:40px;border:3px solid #e9ecef;border-top-color:#1da4b1;border-radius:50%;animation:spin 1s linear infinite}.state-message{font-size:16px;font-weight:600;margin:0 0 8px;color:#212529;line-height:24px}.state-message.success{color:#1da4b1}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-details{font-size:13px;color:#ee316b;margin:0 0 24px;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2)}.progress-steps{display:flex;justify-content:center;gap:24px;margin:24px 0 32px}.step{display:flex;flex-direction:column;align-items:center;gap:8px}.step .step-indicator{width:32px;height:32px;border-radius:50%;background:#f8f9fa;border:2px solid #e9ecef;display:flex;align-items:center;justify-content:center;transition:all .3s ease}.step .step-indicator i{font-size:12px;color:#fff}.step .step-label{font-size:11px;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.step.active .step-indicator{background:rgba(29,164,177,.1);border-color:#1da4b1;animation:pulse-active 1.5s infinite}.step.active .step-label{color:#1da4b1;font-weight:600}.step.completed .step-indicator{background:#1da4b1;border-color:#1da4b1}.step.completed .step-label{color:#1da4b1;font-weight:600}.action-btn{padding:12px 32px;font-size:16px;font-weight:600;border-radius:4px;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:10px}.action-btn i{font-size:16px}.action-btn.create-btn{background:#0077b3;color:#fff;box-shadow:0 2px 8px #0077b340}.action-btn.create-btn:hover{background:#005c8a;box-shadow:0 4px 12px #0077b359}.action-btn.create-btn:active{transform:translateY(1px)}.action-btn.join-btn{background:#1da4b1;color:#fff;box-shadow:0 2px 8px #1da4b140;animation:pulse-ready 2s infinite}.action-btn.join-btn:hover{background:#17848e;box-shadow:0 4px 12px #1da4b159}.action-btn.join-btn:active{transform:translateY(1px)}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.waiting-room-footer{padding:16px 40px 24px;background:#ffffff;border-top:1px solid #e9ecef;display:flex;justify-content:center}.waiting-room-footer .cancel-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:4px;background:transparent;color:#6c757d;border:none;cursor:pointer;transition:all .2s ease}.waiting-room-footer .cancel-btn:hover{background:#f8f9fa;color:#212529}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-active{0%,to{box-shadow:0 0 #1da4b166}50%{box-shadow:0 0 0 8px #1da4b100}}@keyframes pulse-ready{0%,to{box-shadow:0 2px 8px #1da4b140}50%{box-shadow:0 4px 16px #1da4b166}}@media (max-width: 576px){.tas-waiting-room{min-height:380px}.waiting-room-header{padding:24px 24px 20px}.waiting-room-header .header-icon{width:56px;height:56px}.waiting-room-header .header-icon i{font-size:22px}.waiting-room-header .header-title{font-size:18px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.progress-steps{gap:12px}.step .step-indicator{width:28px;height:28px}.step .step-label{font-size:9px}.action-btn{padding:10px 24px;font-size:14px}.waiting-room-footer{padding:16px 24px 20px}}\n"] }]
164
+ }], ctorParameters: function () { return [{ type: i1.NgbActiveModal }, { type: i2.TasService }, { type: i1.NgbModal }]; }, propDecorators: { appointmentId: [{
165
+ type: Input
166
+ }], product: [{
167
+ type: Input
168
+ }], tenantId: [{
169
+ type: Input
170
+ }], currentUser: [{
171
+ type: Input
172
+ }], ownerUserIds: [{
173
+ type: Input
174
+ }], regularUserIds: [{
175
+ type: Input
176
+ }], moderatorUserIds: [{
177
+ type: Input
178
+ }] } });
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUlOLFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7OztBQUVqRixNQUFNLENBQU4sSUFBWSxnQkFNWDtBQU5ELFdBQVksZ0JBQWdCO0lBQzNCLGlDQUFhLENBQUE7SUFDYixtREFBK0IsQ0FBQTtJQUMvQixtREFBK0IsQ0FBQTtJQUMvQixtQ0FBZSxDQUFBO0lBQ2YsbUNBQWUsQ0FBQTtBQUNoQixDQUFDLEVBTlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU0zQjtBQU9ELE1BQU0sT0FBTyx1QkFBdUI7SUFzQm5DLFlBQ1EsV0FBMkIsRUFDMUIsVUFBc0IsRUFDdEIsWUFBc0I7UUFGdkIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUF4Qi9C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bml0LCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgVGFzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rhcy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcblx0Q3JlYXRlUm9vbVJlcXVlc3QsXG5cdENyZWF0ZVJvb21Vc2VyLFxuXHRUYXNDdXJyZW50VXNlcixcblx0VGFzUm9vbVR5cGUsXG5cdFRhc1Nlc3Npb25UeXBlLFxuXHRUYXNVc2VyUm9sZSxcblx0Vmlld01vZGVcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUYXNWaWRlb2NhbGxDb21wb25lbnQgfSBmcm9tICcuLi90YXMtdmlkZW9jYWxsL3Rhcy12aWRlb2NhbGwuY29tcG9uZW50JztcblxuZXhwb3J0IGVudW0gV2FpdGluZ1Jvb21TdGF0ZSB7XG5cdElETEUgPSAnSURMRScsXG5cdENSRUFUSU5HX1JPT00gPSAnQ1JFQVRJTkdfUk9PTScsXG5cdEdFVFRJTkdfVE9LRU4gPSAnR0VUVElOR19UT0tFTicsXG5cdFJFQURZID0gJ1JFQURZJyxcblx0RVJST1IgPSAnRVJST1InXG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3Rhcy13YWl0aW5nLXJvb20nLFxuXHR0ZW1wbGF0ZVVybDogJy4vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL3Rhcy13YWl0aW5nLXJvb20uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblx0Ly8gUm9vbSBjb25maWd1cmF0aW9uIGlucHV0c1xuXHRASW5wdXQoKSBhcHBvaW50bWVudElkOiBudW1iZXIgPSAxO1xuXHRASW5wdXQoKSBwcm9kdWN0OiBzdHJpbmcgPSAndWVsbCc7XG5cdEBJbnB1dCgpIHRlbmFudElkOiBzdHJpbmcgPSAnJztcblx0QElucHV0KCkgY3VycmVudFVzZXIhOiBUYXNDdXJyZW50VXNlcjtcblx0QElucHV0KCkgb3duZXJVc2VySWRzITogbnVtYmVyW107XG5cdEBJbnB1dCgpIHJlZ3VsYXJVc2VySWRzOiBudW1iZXJbXSA9IFtdO1xuXHRASW5wdXQoKSBtb2RlcmF0b3JVc2VySWRzOiBudW1iZXJbXSA9IFtdO1xuXG5cdC8vIENvbXBvbmVudCBzdGF0ZVxuXHRwdWJsaWMgc3RhdGU6IFdhaXRpbmdSb29tU3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLklETEU7XG5cdHB1YmxpYyBXYWl0aW5nUm9vbVN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZTsgLy8gRXhwb3NlIGVudW0gdG8gdGVtcGxhdGVcblx0cHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG5cblx0Ly8gU2Vzc2lvbiBkYXRhXG5cdHByaXZhdGUgc2Vzc2lvbklkOiBzdHJpbmcgPSAnJztcblx0cHJpdmF0ZSB0b2tlbjogc3RyaW5nID0gJyc7XG5cdHByaXZhdGUgdXNlcnM6IENyZWF0ZVJvb21Vc2VyW10gPSBbXTtcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXHRwcml2YXRlIHZpZGVvQ2FsbE1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IG51bGwgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXG5cdFx0cHJpdmF0ZSB0YXNTZXJ2aWNlOiBUYXNTZXJ2aWNlLFxuXHRcdHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxuXHQpIHt9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5idWlsZFVzZXJzQXJyYXkoKTtcblx0XHR0aGlzLnNldHVwVmlld01vZGVTdWJzY3JpcHRpb24oKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIHJvb20gYW5kIGZldGNoZXMgdGhlIHRva2VuXG5cdCAqL1xuXHRjcmVhdGVSb29tKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy50ZW5hbnRJZCB8fCAhdGhpcy5jdXJyZW50VXNlcj8ubmFtZSkge1xuXHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG5cdFx0XHR0aGlzLmVycm9yTWVzc2FnZSA9ICdNaXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSAodGVuYW50IG9yIHVzZXIpJztcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DUkVBVElOR19ST09NO1xuXHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG5cblx0XHRjb25zdCBib2R5OiBDcmVhdGVSb29tUmVxdWVzdCA9IHtcblx0XHRcdHJvb21UeXBlOiBUYXNSb29tVHlwZS5UQVMsXG5cdFx0XHR0eXBlOiBUYXNTZXNzaW9uVHlwZS5TUE9OVEFORU9VUyxcblx0XHRcdHRlbmFudDogdGhpcy50ZW5hbnRJZCxcblx0XHRcdGFwcG9pbnRtZW50SWQ6IHRoaXMuYXBwb2ludG1lbnRJZCxcblx0XHRcdHVzZXJzOiB0aGlzLnVzZXJzLFxuXHRcdFx0cHJvZHVjdDogdGhpcy5wcm9kdWN0XG5cdFx0fTtcblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2UuY3JlYXRlUm9vbShib2R5KS5waXBlKFxuXHRcdFx0XHRzd2l0Y2hNYXAocmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2Vzc2lvbklkID0gcmVzcG9uc2UuY29udGVudC5zZXNzaW9uSWQ7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTjtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnRhc1NlcnZpY2UuZ2VuZXJhdGVUb2tlbih7XG5cdFx0XHRcdFx0XHRzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuXHRcdFx0XHRcdFx0bmFtZTogdGhpcy5jdXJyZW50VXNlci5uYW1lLFxuXHRcdFx0XHRcdFx0bGFzdG5hbWU6IHRoaXMuY3VycmVudFVzZXIubGFzdG5hbWUsXG5cdFx0XHRcdFx0XHRyb2xlVkM6IHRoaXMuY3VycmVudFVzZXIucm9sZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0KS5zdWJzY3JpYmUoe1xuXHRcdFx0XHRuZXh0OiAodG9rZW5SZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudG9rZW4gPSB0b2tlblJlc3BvbnNlLmNvbnRlbnQudG9rZW47XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuUkVBRFk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiAoZXJyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgcm9vbSBvciBnZXR0aW5nIHRva2VuOicsIGVycik7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG5cdFx0XHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnRXJyb3IgY3JlYXRpbmcgcm9vbS4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSm9pbnMgdGhlIHZpZGVvIGNhbGwgc2Vzc2lvblxuXHQgKi9cblx0am9pblNlc3Npb24oKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnNlc3Npb25JZCB8fCAhdGhpcy50b2tlbikge1xuXHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnQ2Fubm90IGpvaW4gc2Vzc2lvbi4gSW5jb21wbGV0ZSBkYXRhLic7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvc2Ugd2FpdGluZyByb29tIGFuZCBvcGVuIHZpZGVvIGNhbGxcblx0XHR0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdqb2luaW5nJyk7XG5cdFx0dGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIHdhaXRpbmcgcm9vbVxuXHQgKi9cblx0Y2FuY2VsKCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2FuY2VsJyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cnkgYWZ0ZXIgYW4gZXJyb3Jcblx0ICovXG5cdHJldHJ5KCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLklETEU7XG5cdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblx0XHR0aGlzLnNlc3Npb25JZCA9ICcnO1xuXHRcdHRoaXMudG9rZW4gPSAnJztcblx0fVxuXG5cdC8vIFByaXZhdGUgTWV0aG9kc1xuXHRwcml2YXRlIGJ1aWxkVXNlcnNBcnJheSgpOiB2b2lkIHtcblx0XHR0aGlzLnVzZXJzID0gW107XG5cblx0XHQvLyBBZGQgb3duZXJzIGZyb20gaW5wdXRcblx0XHR0aGlzLm93bmVyVXNlcklkcy5mb3JFYWNoKGlkID0+IHtcblx0XHRcdHRoaXMudXNlcnMucHVzaCh7IHVzZXJFeHRlcm5hbElkOiBpZCwgcm9sOiBUYXNVc2VyUm9sZS5PV05FUiB9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFkZCByZWd1bGFyIHVzZXJzIGZyb20gaW5wdXRcblx0XHR0aGlzLnJlZ3VsYXJVc2VySWRzLmZvckVhY2goaWQgPT4ge1xuXHRcdFx0dGhpcy51c2Vycy5wdXNoKHsgdXNlckV4dGVybmFsSWQ6IGlkLCByb2w6IFRhc1VzZXJSb2xlLlVTRVIgfSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBZGQgbW9kZXJhdG9ycyBmcm9tIGlucHV0XG5cdFx0dGhpcy5tb2RlcmF0b3JVc2VySWRzLmZvckVhY2goaWQgPT4ge1xuXHRcdFx0dGhpcy51c2Vycy5wdXNoKHsgdXNlckV4dGVybmFsSWQ6IGlkLCByb2w6IFRhc1VzZXJSb2xlLk1PREVSQVRPUiB9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0dXBWaWV3TW9kZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuXHRcdFx0dGhpcy50YXNTZXJ2aWNlLnZpZXdNb2RlJC5zdWJzY3JpYmUobW9kZSA9PiB7XG5cdFx0XHRcdC8vIFJlLW9wZW4gdmlkZW8gY2FsbCBtb2RhbCB3aGVuIHJldHVybmluZyBmcm9tIFBpUCBtb2RlXG5cdFx0XHRcdGlmIChtb2RlID09PSBWaWV3TW9kZS5GVUxMU0NSRUVOICYmIFxuXHRcdFx0XHRcdHRoaXMudGFzU2VydmljZS5pc0NhbGxBY3RpdmUoKSAmJiBcblx0XHRcdFx0XHQhdGhpcy52aWRlb0NhbGxNb2RhbFJlZikge1xuXHRcdFx0XHRcdGNvbnN0IHNlc3Npb25JZCA9IHRoaXMudGFzU2VydmljZS5zZXNzaW9uSWQ7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRhc1NlcnZpY2UudG9rZW47XG5cdFx0XHRcdFx0aWYgKHNlc3Npb25JZCAmJiB0b2tlbikge1xuXHRcdFx0XHRcdFx0dGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIG9wZW5WaWRlb0NhbGxNb2RhbChpc1JldHVybmluZ0Zyb21QaXA6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRhc1ZpZGVvY2FsbENvbXBvbmVudCwge1xuXHRcdFx0c2l6ZTogJ3hsJyxcblx0XHRcdHdpbmRvd0NsYXNzOiAndGFzLXZpZGVvLW1vZGFsJyxcblx0XHRcdGJhY2tkcm9wOiAnc3RhdGljJyxcblx0XHRcdGtleWJvYXJkOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgc2Vzc2lvbklkVG9Vc2UgPSB0aGlzLnNlc3Npb25JZCB8fCB0aGlzLnRhc1NlcnZpY2Uuc2Vzc2lvbklkO1xuXHRcdGNvbnN0IHRva2VuVG9Vc2UgPSB0aGlzLnRva2VuIHx8IHRoaXMudGFzU2VydmljZS50b2tlbjtcblxuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2Vzc2lvbklkID0gc2Vzc2lvbklkVG9Vc2U7XG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b2tlbiA9IHRva2VuVG9Vc2U7XG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pc1JldHVybmluZ0Zyb21QaXAgPSBpc1JldHVybmluZ0Zyb21QaXA7XG5cblx0XHR0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLnJlc3VsdC50aGVuKFxuXHRcdFx0KCkgPT4geyB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDsgfSxcblx0XHRcdCgpID0+IHsgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7IH1cblx0XHQpO1xuXHR9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJ0YXMtd2FpdGluZy1yb29tXCI+XG5cdDwhLS0gSGVhZGVyIC0tPlxuXHQ8ZGl2IGNsYXNzPVwid2FpdGluZy1yb29tLWhlYWRlclwiPlxuXHRcdDxkaXYgY2xhc3M9XCJoZWFkZXItaWNvblwiPlxuXHRcdFx0PGkgY2xhc3M9XCJmYSBmYS12aWRlby1jYW1lcmFcIj48L2k+XG5cdFx0PC9kaXY+XG5cdFx0PGgyIGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+V2FpdGluZyBSb29tPC9oMj5cblx0XHQ8cCBjbGFzcz1cImhlYWRlci1zdWJ0aXRsZVwiPlByZXBhcmUgZm9yIHlvdXIgdmlkZW8gY2FsbDwvcD5cblx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlLWJ0blwiIChjbGljayk9XCJjYW5jZWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxuXHRcdFx0PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cblx0XHQ8L2J1dHRvbj5cblx0PC9kaXY+XG5cblx0PCEtLSBDb250ZW50IC0tPlxuXHQ8ZGl2IGNsYXNzPVwid2FpdGluZy1yb29tLWNvbnRlbnRcIj5cblx0XHQ8IS0tIElETEUgU3RhdGUgLS0+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuSURMRVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cInN0YXRlLWljb24gaWRsZVwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5cblx0XHRcdFx0Q3JlYXRlIGEgbmV3IHZpZGVvIGNhbGwgcm9vbVxuXHRcdFx0PC9wPlxuXHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1zdWJtZXNzYWdlXCI+XG5cdFx0XHRcdFByZXNzIHRoZSBidXR0b24gdG8gYmVnaW5cblx0XHRcdDwvcD5cblx0XHRcdDxidXR0b24gXG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIiBcblx0XHRcdFx0Y2xhc3M9XCJidG4gYWN0aW9uLWJ0biBjcmVhdGUtYnRuXCJcblx0XHRcdFx0KGNsaWNrKT1cImNyZWF0ZVJvb20oKVwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXBsdXNcIj48L2k+XG5cdFx0XHRcdENyZWF0ZSBSb29tXG5cdFx0XHQ8L2J1dHRvbj5cblx0XHQ8L2Rpdj5cblxuXHRcdDwhLS0gQ1JFQVRJTkdfUk9PTSBTdGF0ZSAtLT5cblx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtY29udGFpbmVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5DUkVBVElOR19ST09NXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBsb2FkaW5nXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlxuXHRcdFx0XHRDcmVhdGluZyB2aWRlbyBjYWxsIHJvb20uLi5cblx0XHRcdDwvcD5cblx0XHRcdDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zdGVwc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBhY3RpdmVcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPkNyZWF0aW5nPC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXBcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPkFjY2Vzczwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5SZWFkeTwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblxuXHRcdDwhLS0gR0VUVElOR19UT0tFTiBTdGF0ZSAtLT5cblx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtY29udGFpbmVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5HRVRUSU5HX1RPS0VOXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBsb2FkaW5nXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlxuXHRcdFx0XHRQcmVwYXJpbmcgcm9vbSBhY2Nlc3MuLi5cblx0XHRcdDwvcD5cblx0XHRcdDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zdGVwc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBjb21wbGV0ZWRcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+Q3JlYXRlZDwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwIGFjdGl2ZVwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+QWNjZXNzPC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXBcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPlJlYWR5PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXG5cdFx0PCEtLSBSRUFEWSBTdGF0ZSAtLT5cblx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtY29udGFpbmVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5SRUFEWVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cInN0YXRlLWljb24gcmVhZHlcIj5cblx0XHRcdFx0PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48L2k+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZSBzdWNjZXNzXCI+XG5cdFx0XHRcdFJvb20gaXMgcmVhZHkhXG5cdFx0XHQ8L3A+XG5cdFx0XHQ8cCBjbGFzcz1cInN0YXRlLXN1Ym1lc3NhZ2VcIj5cblx0XHRcdFx0WW91IGNhbiBqb2luIHRoZSB2aWRlbyBjYWxsIHdoZW4gcmVhZHlcblx0XHRcdDwvcD5cblx0XHRcdDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zdGVwc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBjb21wbGV0ZWRcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+Q3JlYXRlZDwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwIGNvbXBsZXRlZFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5BY2Nlc3M8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBjb21wbGV0ZWRcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+UmVhZHk8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8YnV0dG9uIFxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgXG5cdFx0XHRcdGNsYXNzPVwiYnRuIGFjdGlvbi1idG4gam9pbi1idG5cIlxuXHRcdFx0XHQoY2xpY2spPVwiam9pblNlc3Npb24oKVwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXNpZ24taW5cIj48L2k+XG5cdFx0XHRcdEpvaW4gU2Vzc2lvblxuXHRcdFx0PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8IS0tIEVSUk9SIFN0YXRlIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBlcnJvclwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2UgZXJyb3JcIj5cblx0XHRcdFx0QW4gZXJyb3Igb2NjdXJyZWRcblx0XHRcdDwvcD5cblx0XHRcdDxwIGNsYXNzPVwiZXJyb3ItZGV0YWlsc1wiICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG5cdFx0XHRcdHt7IGVycm9yTWVzc2FnZSB9fVxuXHRcdFx0PC9wPlxuXHRcdFx0PGJ1dHRvbiBcblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIFxuXHRcdFx0XHRjbGFzcz1cImJ0biBhY3Rpb24tYnRuIHJldHJ5LWJ0blwiXG5cdFx0XHRcdChjbGljayk9XCJyZXRyeSgpXCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiPjwvaT5cblx0XHRcdFx0UmV0cnlcblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblxuXHQ8IS0tIEZvb3RlciAtLT5cblx0PGRpdiBjbGFzcz1cIndhaXRpbmctcm9vbS1mb290ZXJcIj5cblx0XHQ8YnV0dG9uIFxuXHRcdFx0dHlwZT1cImJ1dHRvblwiIFxuXHRcdFx0Y2xhc3M9XCJidG4gY2FuY2VsLWJ0blwiXG5cdFx0XHQoY2xpY2spPVwiY2FuY2VsKClcIj5cblx0XHRcdENhbmNlbFxuXHRcdDwvYnV0dG9uPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
@@ -0,0 +1,10 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * Injection token for TAS configuration
4
+ */
5
+ export const TAS_CONFIG = new InjectionToken('TAS_CONFIG');
6
+ /**
7
+ * Injection token for HTTP client adapter
8
+ */
9
+ export const TAS_HTTP_CLIENT = new InjectionToken('TAS_HTTP_CLIENT');
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rhcy11ZWxsLXNkay9zcmMvbGliL2NvbmZpZy90YXMuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFvQi9DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxDQUFZLFlBQVksQ0FBQyxDQUFDO0FBRXRFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFnQixpQkFBaUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgdGhlIFRBUyBtb2R1bGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXNDb25maWcge1xuXHQvKiogVG9rQm94L1ZvbmFnZSBBUEkgS2V5ICovXG5cdHRva0JveEFwaUtleTogc3RyaW5nO1xuXHQvKiogT3B0aW9uYWwgQVBJIGJhc2UgVVJMIGZvciByb29tL3Rva2VuIGVuZHBvaW50cyAqL1xuXHRhcGlCYXNlVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhUVFAgY2xpZW50IGludGVyZmFjZSB0aGF0IGNvbnN1bWluZyBhcHBzIG11c3QgaW1wbGVtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFzSHR0cENsaWVudCB7XG5cdHBvc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM6IHsgYm9keTogYW55OyBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KTogT2JzZXJ2YWJsZTxUPjtcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIFRBUyBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBUQVNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFRhc0NvbmZpZz4oJ1RBU19DT05GSUcnKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIEhUVFAgY2xpZW50IGFkYXB0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IFRBU19IVFRQX0NMSUVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUYXNIdHRwQ2xpZW50PignVEFTX0hUVFBfQ0xJRU5UJyk7XG5cbiJdfQ==