speechrecorderng 3.10.13 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/speechrecorderng.mjs +204 -201
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/responsive_component.d.ts +1 -1
- package/package.json +13 -15
- package/esm2022/lib/action/action.mjs +0 -73
- package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
- package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
- package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
- package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2022/lib/audio/audio_display.mjs +0 -118
- package/esm2022/lib/audio/audio_player.mjs +0 -238
- package/esm2022/lib/audio/capture/capture.mjs +0 -855
- package/esm2022/lib/audio/context.mjs +0 -79
- package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
- package/esm2022/lib/audio/format.mjs +0 -20
- package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
- package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
- package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2022/lib/audio/io/stream.mjs +0 -59
- package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2022/lib/audio/persistor.mjs +0 -81
- package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
- package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
- package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
- package/esm2022/lib/audio/playback/player.mjs +0 -402
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
- package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
- package/esm2022/lib/audio/ui/common.mjs +0 -19
- package/esm2022/lib/audio/ui/container.mjs +0 -414
- package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2022/lib/db/inddb.mjs +0 -120
- package/esm2022/lib/dsp/utils.mjs +0 -48
- package/esm2022/lib/environment/environment.defaults.mjs +0 -9
- package/esm2022/lib/io/BinaryReader.mjs +0 -93
- package/esm2022/lib/io/BinaryWriter.mjs +0 -80
- package/esm2022/lib/io/stream.mjs +0 -259
- package/esm2022/lib/math/2d/geometry.mjs +0 -28
- package/esm2022/lib/math/complex.mjs +0 -58
- package/esm2022/lib/math/dft.mjs +0 -196
- package/esm2022/lib/media/utils.mjs +0 -14
- package/esm2022/lib/net/uploader.mjs +0 -367
- package/esm2022/lib/recorder_component.mjs +0 -65
- package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
- package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2022/lib/speechrecorder/recording.mjs +0 -124
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
- package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
- package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
- package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
- package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
- package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
- package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
- package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2022/lib/speechrecorderng.component.mjs +0 -392
- package/esm2022/lib/speechrecorderng.module.mjs +0 -97
- package/esm2022/lib/spr.config.mjs +0 -27
- package/esm2022/lib/spr.module.version.mjs +0 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
- package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
- package/esm2022/lib/ui/message_dialog.mjs +0 -51
- package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2022/lib/ui/responsive_component.mjs +0 -24
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
- package/esm2022/lib/utils/ua-parser.mjs +0 -190
- package/esm2022/lib/utils/utils.mjs +0 -132
- package/esm2022/lib/utils/wake_lock.mjs +0 -114
- package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
- package/esm2022/public-api.mjs +0 -35
- package/esm2022/speechrecorderng.mjs +0 -5
|
@@ -1,416 +0,0 @@
|
|
|
1
|
-
import { Action } from '../../action/action';
|
|
2
|
-
import { Component, ViewChild, Input } from "@angular/core";
|
|
3
|
-
import { ResponsiveComponent } from "../../ui/responsive_component";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "@angular/material/icon";
|
|
7
|
-
import * as i3 from "@angular/material/progress-spinner";
|
|
8
|
-
import * as i4 from "@angular/material/tooltip";
|
|
9
|
-
import * as i5 from "@angular/cdk/layout";
|
|
10
|
-
import * as i6 from "@angular/material/button";
|
|
11
|
-
import * as i7 from "@angular/material/dialog";
|
|
12
|
-
export class StatusDisplay {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.statusAlertType = 'info';
|
|
15
|
-
this.statusMsg = 'Initialize...';
|
|
16
|
-
this.statusWaiting = false;
|
|
17
|
-
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
|
|
20
|
-
<p matTooltip="Status">
|
|
21
|
-
<mat-progress-spinner *ngIf="statusWaiting" color="black" mode="indeterminate" [diameter]="30" [strokeWidth]="5"></mat-progress-spinner><mat-icon *ngIf="statusAlertType==='error'" style="color:red">report_problem</mat-icon>
|
|
22
|
-
{{statusMsg}}
|
|
23
|
-
</p>
|
|
24
|
-
`, isInline: true, styles: [":host{display:inline;text-align:left;font-size:smaller}\n", "p{padding:4px;white-space:nowrap;display:inline-block}\n", "mat-progress-spinner{color:#000;display:inline-block}\n", "span{color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
25
|
-
}
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: StatusDisplay, decorators: [{
|
|
27
|
-
type: Component,
|
|
28
|
-
args: [{ selector: 'app-sprstatusdisplay', template: `
|
|
29
|
-
<p matTooltip="Status">
|
|
30
|
-
<mat-progress-spinner *ngIf="statusWaiting" color="black" mode="indeterminate" [diameter]="30" [strokeWidth]="5"></mat-progress-spinner><mat-icon *ngIf="statusAlertType==='error'" style="color:red">report_problem</mat-icon>
|
|
31
|
-
{{statusMsg}}
|
|
32
|
-
</p>
|
|
33
|
-
`, styles: [":host{display:inline;text-align:left;font-size:smaller}\n", "p{padding:4px;white-space:nowrap;display:inline-block}\n", "mat-progress-spinner{color:#000;display:inline-block}\n", "span{color:red}\n"] }]
|
|
34
|
-
}], propDecorators: { statusAlertType: [{
|
|
35
|
-
type: Input
|
|
36
|
-
}], statusMsg: [{
|
|
37
|
-
type: Input
|
|
38
|
-
}], statusWaiting: [{
|
|
39
|
-
type: Input
|
|
40
|
-
}] } });
|
|
41
|
-
export class UploadStatus {
|
|
42
|
-
constructor() {
|
|
43
|
-
this._awaitNewUpload = false;
|
|
44
|
-
this.spinnerMode = 'determinate';
|
|
45
|
-
this.colorStatus = 'primary';
|
|
46
|
-
this._value = 100;
|
|
47
|
-
this.displayValue = null;
|
|
48
|
-
this.toolTipText = '';
|
|
49
|
-
}
|
|
50
|
-
_updateSpinner() {
|
|
51
|
-
let uplMsg;
|
|
52
|
-
if (this._awaitNewUpload || this._value === 0) {
|
|
53
|
-
this.spinnerMode = 'indeterminate';
|
|
54
|
-
this.displayValue = ' ';
|
|
55
|
-
uplMsg = 'Preparing upload.';
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.spinnerMode = 'determinate';
|
|
59
|
-
this.displayValue = this._value + '%';
|
|
60
|
-
if (this._value === 100) {
|
|
61
|
-
uplMsg = 'Upload complete';
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
uplMsg = 'Upload progress: ' + this.displayValue;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (this.status === 'warn') {
|
|
68
|
-
uplMsg = 'Upload error occurred. Please check your network connection. ' + uplMsg;
|
|
69
|
-
}
|
|
70
|
-
this.toolTipText = uplMsg;
|
|
71
|
-
}
|
|
72
|
-
set value(value) {
|
|
73
|
-
this._value = value;
|
|
74
|
-
this._updateSpinner();
|
|
75
|
-
}
|
|
76
|
-
;
|
|
77
|
-
set awaitNewUpload(awaitNewUpload) {
|
|
78
|
-
this._awaitNewUpload = awaitNewUpload;
|
|
79
|
-
this._updateSpinner();
|
|
80
|
-
}
|
|
81
|
-
set status(status) {
|
|
82
|
-
this._status = status;
|
|
83
|
-
if ('accent' === status) {
|
|
84
|
-
this.colorStatus = 'accent';
|
|
85
|
-
}
|
|
86
|
-
else if ('warn' === status) {
|
|
87
|
-
this.colorStatus = 'warn';
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
this.colorStatus = 'primary';
|
|
91
|
-
}
|
|
92
|
-
this._updateSpinner();
|
|
93
|
-
}
|
|
94
|
-
get status() {
|
|
95
|
-
return this._status;
|
|
96
|
-
}
|
|
97
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
|
|
99
|
-
<mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
|
|
100
|
-
[matTooltip]="toolTipText"></mat-progress-spinner>
|
|
101
|
-
`, isInline: true, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"], dependencies: [{ kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
102
|
-
}
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UploadStatus, decorators: [{
|
|
104
|
-
type: Component,
|
|
105
|
-
args: [{ selector: 'app-uploadstatus', template: `
|
|
106
|
-
<mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
|
|
107
|
-
[matTooltip]="toolTipText"></mat-progress-spinner>
|
|
108
|
-
`, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"] }]
|
|
109
|
-
}], propDecorators: { value: [{
|
|
110
|
-
type: Input
|
|
111
|
-
}], awaitNewUpload: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], status: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}] } });
|
|
116
|
-
export class ProgressDisplay {
|
|
117
|
-
constructor() {
|
|
118
|
-
this.progressMsg = '[itemcode]';
|
|
119
|
-
}
|
|
120
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
121
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
|
|
122
|
-
<p>{{progressMsg}}</p>
|
|
123
|
-
`, isInline: true, styles: [":host{flex:1;width:100%;text-align:left}\n"] }); }
|
|
124
|
-
}
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ProgressDisplay, decorators: [{
|
|
126
|
-
type: Component,
|
|
127
|
-
args: [{ selector: 'app-sprprogressdisplay', template: `
|
|
128
|
-
<p>{{progressMsg}}</p>
|
|
129
|
-
`, styles: [":host{flex:1;width:100%;text-align:left}\n"] }]
|
|
130
|
-
}] });
|
|
131
|
-
export class TransportActions {
|
|
132
|
-
constructor() {
|
|
133
|
-
this.startAction = new Action('Start');
|
|
134
|
-
this.stopAction = new Action('Stop');
|
|
135
|
-
this.nextAction = new Action('Next');
|
|
136
|
-
this.pauseAction = new Action('Pause');
|
|
137
|
-
this.fwdNextAction = new Action('Next recording');
|
|
138
|
-
this.fwdAction = new Action('Forward');
|
|
139
|
-
this.bwdAction = new Action('Backward');
|
|
140
|
-
this.stopNonrecordingAction = new Action('Next');
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
export class TransportPanel extends ResponsiveComponent {
|
|
144
|
-
constructor(breakpointObserver) {
|
|
145
|
-
super(breakpointObserver);
|
|
146
|
-
this.navigationEnabled = true;
|
|
147
|
-
this.pausingEnabled = true;
|
|
148
|
-
}
|
|
149
|
-
startDisabled() {
|
|
150
|
-
return !this.actions || this.readonly || this.actions.startAction.disabled;
|
|
151
|
-
}
|
|
152
|
-
stopDisabled() {
|
|
153
|
-
return !this.actions || this.actions.stopAction.disabled;
|
|
154
|
-
}
|
|
155
|
-
nextDisabled() {
|
|
156
|
-
return !this.actions || this.actions.nextAction.disabled || !this.navigationEnabled;
|
|
157
|
-
}
|
|
158
|
-
stopNonrecordingDisabled() {
|
|
159
|
-
return !this.actions || this.actions.stopNonrecordingAction.disabled || !this.navigationEnabled;
|
|
160
|
-
}
|
|
161
|
-
pauseDisabled() {
|
|
162
|
-
return !this.actions || this.actions.pauseAction.disabled || !this.pausingEnabled;
|
|
163
|
-
}
|
|
164
|
-
fwdDisabled() {
|
|
165
|
-
return !this.actions || this.actions.fwdAction.disabled || !this.navigationEnabled;
|
|
166
|
-
}
|
|
167
|
-
fwdNextDisabled() {
|
|
168
|
-
return !this.actions || this.actions.fwdNextAction.disabled || !this.navigationEnabled;
|
|
169
|
-
}
|
|
170
|
-
bwdDisabled() {
|
|
171
|
-
return !this.actions || this.actions.bwdAction.disabled || !this.navigationEnabled;
|
|
172
|
-
}
|
|
173
|
-
startStopNextName() {
|
|
174
|
-
if (!this.nextDisabled() || !this.stopNonrecordingDisabled()) {
|
|
175
|
-
this.startStopNextButtonName = "Next";
|
|
176
|
-
}
|
|
177
|
-
else if (!this.startDisabled()) {
|
|
178
|
-
this.startStopNextButtonName = "Start";
|
|
179
|
-
}
|
|
180
|
-
else if (!this.stopDisabled()) {
|
|
181
|
-
this.startStopNextButtonName = "Stop";
|
|
182
|
-
}
|
|
183
|
-
return this.startStopNextButtonName;
|
|
184
|
-
}
|
|
185
|
-
startStopNextIconName() {
|
|
186
|
-
if (!this.startDisabled()) {
|
|
187
|
-
this.startStopNextButtonIconName = "fiber_manual_record";
|
|
188
|
-
}
|
|
189
|
-
else if (!this.stopDisabled() || !this.stopNonrecordingDisabled()) {
|
|
190
|
-
this.startStopNextButtonIconName = "stop";
|
|
191
|
-
}
|
|
192
|
-
else if (!this.nextDisabled()) {
|
|
193
|
-
this.startStopNextButtonIconName = "stop";
|
|
194
|
-
}
|
|
195
|
-
return this.startStopNextButtonIconName;
|
|
196
|
-
}
|
|
197
|
-
startStopNextIconColor() {
|
|
198
|
-
if (!this.startDisabled()) {
|
|
199
|
-
return "red";
|
|
200
|
-
}
|
|
201
|
-
else if (!this.stopDisabled() || !this.nextDisabled()) {
|
|
202
|
-
return "yellow";
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
return "grey";
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
startStopNextPerform() {
|
|
209
|
-
if (!this.startDisabled()) {
|
|
210
|
-
this.actions.startAction.perform();
|
|
211
|
-
}
|
|
212
|
-
else if (!this.stopDisabled()) {
|
|
213
|
-
this.actions.stopAction.perform();
|
|
214
|
-
}
|
|
215
|
-
else if (!this.nextDisabled()) {
|
|
216
|
-
this.actions.nextAction.perform();
|
|
217
|
-
}
|
|
218
|
-
else if (!this.stopNonrecordingDisabled()) {
|
|
219
|
-
this.actions.stopNonrecordingAction.perform();
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TransportPanel, deps: [{ token: i5.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
223
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, usesInheritance: true, ngImport: i0, template: `
|
|
224
|
-
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
225
|
-
mat-raised-button class="transport-button-icon">
|
|
226
|
-
<span><mat-icon>chevron_left</mat-icon></span>
|
|
227
|
-
</button>
|
|
228
|
-
<button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled() && stopNonrecordingDisabled()" mat-raised-button class="transport-button-icon">
|
|
229
|
-
<span><mat-icon class="transport-button-icon" [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon class="transport-button-icon" *ngIf="!nextDisabled() || !stopNonrecordingDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon></span>
|
|
230
|
-
<span *ngIf="!screenXs" class="transport-button-text">{{startStopNextName()}}</span>
|
|
231
|
-
</button>
|
|
232
|
-
<button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button class="transport-button-icon">
|
|
233
|
-
<span><mat-icon class="transport-button-icon">pause</mat-icon></span>
|
|
234
|
-
<span *ngIf="!screenXs" class="transport-button-text">Pause</span>
|
|
235
|
-
</button>
|
|
236
|
-
<button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button class="transport-button-icon">
|
|
237
|
-
<span><mat-icon>redo</mat-icon></span>
|
|
238
|
-
</button>
|
|
239
|
-
<button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button class="transport-button-icon">
|
|
240
|
-
<span><mat-icon>chevron_right</mat-icon></span>
|
|
241
|
-
</button>
|
|
242
|
-
|
|
243
|
-
`, isInline: true, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n", ".transport-button-icon{font-size:24px;vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap}\n", ".transport-button-text{font-size:14px;letter-spacing:normal;vertical-align:baseline}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
|
|
244
|
-
}
|
|
245
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TransportPanel, decorators: [{
|
|
246
|
-
type: Component,
|
|
247
|
-
args: [{ selector: 'app-sprtransport', template: `
|
|
248
|
-
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
249
|
-
mat-raised-button class="transport-button-icon">
|
|
250
|
-
<span><mat-icon>chevron_left</mat-icon></span>
|
|
251
|
-
</button>
|
|
252
|
-
<button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled() && stopNonrecordingDisabled()" mat-raised-button class="transport-button-icon">
|
|
253
|
-
<span><mat-icon class="transport-button-icon" [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon class="transport-button-icon" *ngIf="!nextDisabled() || !stopNonrecordingDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon></span>
|
|
254
|
-
<span *ngIf="!screenXs" class="transport-button-text">{{startStopNextName()}}</span>
|
|
255
|
-
</button>
|
|
256
|
-
<button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button class="transport-button-icon">
|
|
257
|
-
<span><mat-icon class="transport-button-icon">pause</mat-icon></span>
|
|
258
|
-
<span *ngIf="!screenXs" class="transport-button-text">Pause</span>
|
|
259
|
-
</button>
|
|
260
|
-
<button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button class="transport-button-icon">
|
|
261
|
-
<span><mat-icon>redo</mat-icon></span>
|
|
262
|
-
</button>
|
|
263
|
-
<button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button class="transport-button-icon">
|
|
264
|
-
<span><mat-icon>chevron_right</mat-icon></span>
|
|
265
|
-
</button>
|
|
266
|
-
|
|
267
|
-
`, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n", ".transport-button-icon{font-size:24px;vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap}\n", ".transport-button-text{font-size:14px;letter-spacing:normal;vertical-align:baseline}\n"] }]
|
|
268
|
-
}], ctorParameters: () => [{ type: i5.BreakpointObserver }], propDecorators: { readonly: [{
|
|
269
|
-
type: Input
|
|
270
|
-
}], actions: [{
|
|
271
|
-
type: Input
|
|
272
|
-
}], navigationEnabled: [{
|
|
273
|
-
type: Input
|
|
274
|
-
}], pausingEnabled: [{
|
|
275
|
-
type: Input
|
|
276
|
-
}] } });
|
|
277
|
-
export class WakeLockIndicator {
|
|
278
|
-
constructor() {
|
|
279
|
-
this._screenLocked = false;
|
|
280
|
-
}
|
|
281
|
-
set screenLocked(screenLock) {
|
|
282
|
-
this._screenLocked = screenLock;
|
|
283
|
-
}
|
|
284
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
285
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
|
|
286
|
-
<mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
|
|
287
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
288
|
-
}
|
|
289
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: WakeLockIndicator, decorators: [{
|
|
290
|
-
type: Component,
|
|
291
|
-
args: [{ selector: 'app-wakelockindicator', template: `
|
|
292
|
-
<mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
|
|
293
|
-
` }]
|
|
294
|
-
}], ctorParameters: () => [], propDecorators: { screenLocked: [{
|
|
295
|
-
type: Input
|
|
296
|
-
}] } });
|
|
297
|
-
export class ReadyStateIndicator {
|
|
298
|
-
constructor() {
|
|
299
|
-
this._ready = true;
|
|
300
|
-
this.hourGlassIconName = 'hourglass_empty';
|
|
301
|
-
this.readyStateToolTip = '';
|
|
302
|
-
}
|
|
303
|
-
set ready(ready) {
|
|
304
|
-
this._ready = ready;
|
|
305
|
-
this.hourGlassIconName = this._ready ? 'hourglass_empty' : 'hourglass_full';
|
|
306
|
-
this.readyStateToolTip = this._ready ? 'Audio processing and upload done. You can leave the page without data loss.' : 'Please wait until audio processing and upload have finished. Please do not leave the page.';
|
|
307
|
-
}
|
|
308
|
-
get ready() {
|
|
309
|
-
return this._ready;
|
|
310
|
-
}
|
|
311
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
312
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
|
|
313
|
-
<mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
|
|
314
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
315
|
-
}
|
|
316
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ReadyStateIndicator, decorators: [{
|
|
317
|
-
type: Component,
|
|
318
|
-
args: [{ selector: 'app-readystateindicator', template: `
|
|
319
|
-
<mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
|
|
320
|
-
` }]
|
|
321
|
-
}], ctorParameters: () => [], propDecorators: { ready: [{
|
|
322
|
-
type: Input
|
|
323
|
-
}] } });
|
|
324
|
-
export class ControlPanel extends ResponsiveComponent {
|
|
325
|
-
constructor(bpo, dialog) {
|
|
326
|
-
super(bpo);
|
|
327
|
-
this.bpo = bpo;
|
|
328
|
-
this.dialog = dialog;
|
|
329
|
-
this.processing = false;
|
|
330
|
-
this.navigationEnabled = true;
|
|
331
|
-
this._ready = true;
|
|
332
|
-
}
|
|
333
|
-
set ready(ready) {
|
|
334
|
-
this._ready = ready;
|
|
335
|
-
}
|
|
336
|
-
get ready() {
|
|
337
|
-
return this._ready;
|
|
338
|
-
}
|
|
339
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i5.BreakpointObserver }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
340
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ControlPanel, selector: "app-sprcontrolpanel", inputs: { readonly: "readonly", transportActions: "transportActions", processing: "processing", statusMsg: "statusMsg", statusAlertType: "statusAlertType", statusWaiting: "statusWaiting", uploadStatus: "uploadStatus", uploadProgress: "uploadProgress", currentRecording: "currentRecording", enableUploadRecordings: "enableUploadRecordings", navigationEnabled: "navigationEnabled", ready: "ready" }, viewQueries: [{ propertyName: "statusDisplay", first: true, predicate: StatusDisplay, descendants: true, static: true }, { propertyName: "transportPanel", first: true, predicate: TransportPanel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
341
|
-
<div *ngIf="!screenXs" style="flex-direction: row" >
|
|
342
|
-
<app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
343
|
-
class="hidden-xs"></app-sprstatusdisplay>
|
|
344
|
-
<app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
345
|
-
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
346
|
-
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
347
|
-
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
348
|
-
</div>
|
|
349
|
-
<div *ngIf="screenXs" style="flex-direction: column">
|
|
350
|
-
<div style="flex-direction: row" class="flexFill" >
|
|
351
|
-
<app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
352
|
-
class="hidden-xs"></app-sprstatusdisplay>
|
|
353
|
-
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
354
|
-
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
355
|
-
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
356
|
-
</div>
|
|
357
|
-
<app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
358
|
-
|
|
359
|
-
</div>
|
|
360
|
-
`, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }] }); }
|
|
361
|
-
}
|
|
362
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ControlPanel, decorators: [{
|
|
363
|
-
type: Component,
|
|
364
|
-
args: [{ selector: 'app-sprcontrolpanel', template: `
|
|
365
|
-
<div *ngIf="!screenXs" style="flex-direction: row" >
|
|
366
|
-
<app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
367
|
-
class="hidden-xs"></app-sprstatusdisplay>
|
|
368
|
-
<app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
369
|
-
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
370
|
-
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
371
|
-
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
372
|
-
</div>
|
|
373
|
-
<div *ngIf="screenXs" style="flex-direction: column">
|
|
374
|
-
<div style="flex-direction: row" class="flexFill" >
|
|
375
|
-
<app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
376
|
-
class="hidden-xs"></app-sprstatusdisplay>
|
|
377
|
-
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
378
|
-
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
379
|
-
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
380
|
-
</div>
|
|
381
|
-
<app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
382
|
-
|
|
383
|
-
</div>
|
|
384
|
-
`, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
|
|
385
|
-
}], ctorParameters: () => [{ type: i5.BreakpointObserver }, { type: i7.MatDialog }], propDecorators: { statusDisplay: [{
|
|
386
|
-
type: ViewChild,
|
|
387
|
-
args: [StatusDisplay, { static: true }]
|
|
388
|
-
}], transportPanel: [{
|
|
389
|
-
type: ViewChild,
|
|
390
|
-
args: [TransportPanel, { static: true }]
|
|
391
|
-
}], readonly: [{
|
|
392
|
-
type: Input
|
|
393
|
-
}], transportActions: [{
|
|
394
|
-
type: Input
|
|
395
|
-
}], processing: [{
|
|
396
|
-
type: Input
|
|
397
|
-
}], statusMsg: [{
|
|
398
|
-
type: Input
|
|
399
|
-
}], statusAlertType: [{
|
|
400
|
-
type: Input
|
|
401
|
-
}], statusWaiting: [{
|
|
402
|
-
type: Input
|
|
403
|
-
}], uploadStatus: [{
|
|
404
|
-
type: Input
|
|
405
|
-
}], uploadProgress: [{
|
|
406
|
-
type: Input
|
|
407
|
-
}], currentRecording: [{
|
|
408
|
-
type: Input
|
|
409
|
-
}], enableUploadRecordings: [{
|
|
410
|
-
type: Input
|
|
411
|
-
}], navigationEnabled: [{
|
|
412
|
-
type: Input
|
|
413
|
-
}], ready: [{
|
|
414
|
-
type: Input
|
|
415
|
-
}] } });
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vY29udHJvbHBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQzVCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFzQ2xFLE1BQU0sT0FBTyxhQUFhO0lBakMxQjtRQWtDVyxvQkFBZSxHQUFHLE1BQU0sQ0FBQztRQUN6QixjQUFTLEdBQUcsZUFBZSxDQUFDO1FBQzVCLGtCQUFhLEdBQUUsS0FBSyxDQUFDO0tBQy9COytHQUpZLGFBQWE7bUdBQWIsYUFBYSxvS0E3QmQ7Ozs7O0dBS1Q7OzRGQXdCVSxhQUFhO2tCQWpDekIsU0FBUzsrQkFFRSxzQkFBc0IsWUFFdEI7Ozs7O0dBS1Q7OEJBeUJRLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLOztBQWdCUixNQUFNLE9BQU8sWUFBWTtJQVp6QjtRQWFVLG9CQUFlLEdBQUMsS0FBSyxDQUFDO1FBQzlCLGdCQUFXLEdBQXVCLGFBQWEsQ0FBQztRQUVoRCxnQkFBVyxHQUFjLFNBQVMsQ0FBQztRQUNuQyxXQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2IsaUJBQVksR0FBYSxJQUFJLENBQUM7UUFDOUIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7S0FtRHZCO0lBakRTLGNBQWM7UUFFcEIsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVB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Q0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUU8sS0FBSztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9ufSBmcm9tICcuLi8uLi9hY3Rpb24vYWN0aW9uJ1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCwgVmlld0NoaWxkLCBJbnB1dFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2RlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lclwiO1xyXG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcbmltcG9ydCB7UmVzcG9uc2l2ZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL3VpL3Jlc3BvbnNpdmVfY29tcG9uZW50XCI7XHJcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZVwiO1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhcHAtc3Byc3RhdHVzZGlzcGxheScsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cCBtYXRUb29sdGlwPVwiU3RhdHVzXCI+XHJcbiAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciAqbmdJZj1cInN0YXR1c1dhaXRpbmdcIiBjb2xvcj1cImJsYWNrXCIgIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW2RpYW1ldGVyXT1cIjMwXCIgW3N0cm9rZVdpZHRoXT1cIjVcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPjxtYXQtaWNvbiAqbmdJZj1cInN0YXR1c0FsZXJ0VHlwZT09PSdlcnJvcidcIiBzdHlsZT1cImNvbG9yOnJlZFwiPnJlcG9ydF9wcm9ibGVtPC9tYXQtaWNvbj5cclxuICAgICAge3tzdGF0dXNNc2d9fVxyXG4gICAgPC9wPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGRpc3BsYXk6IGlubGluZTtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgfWAsIGBcclxuICAgIHAge1xyXG4gICAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICAgIHdoaXRlLXNwYWNlOm5vd3JhcDtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gIGAsIGBcclxuICAgIG1hdC1wcm9ncmVzcy1zcGlubmVyIHtcclxuICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgYCwgYFxyXG4gICAgc3BhbiB7XHJcbiAgICAgIGNvbG9yOiByZWQ7XHJcbiAgICB9XHJcbiAgYF1cclxuXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdHVzRGlzcGxheSB7XHJcbiAgQElucHV0KCkgc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01zZyA9ICdJbml0aWFsaXplLi4uJztcclxuICBASW5wdXQoKSBzdGF0dXNXYWl0aW5nID1mYWxzZTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZHN0YXR1cycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbbW9kZV09XCJzcGlubmVyTW9kZVwiIFtjb2xvcl09XCJjb2xvclN0YXR1c1wiIFtkaWFtZXRlcl09XCIzMFwiIFtzdHJva2VXaWR0aF09XCI1XCIgW3ZhbHVlXT1cIl92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwidG9vbFRpcFRleHRcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgfWAsYG1hdC1wcm9ncmVzcy1zcGlubmVye1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgfWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRTdGF0dXMge1xyXG4gIHByaXZhdGUgX2F3YWl0TmV3VXBsb2FkPWZhbHNlO1xyXG4gIHNwaW5uZXJNb2RlOlByb2dyZXNzU3Bpbm5lck1vZGUgPSAnZGV0ZXJtaW5hdGUnO1xyXG4gIF9zdGF0dXMhOnN0cmluZztcclxuICBjb2xvclN0YXR1czpUaGVtZVBhbGV0dGU9J3ByaW1hcnknO1xyXG4gIF92YWx1ZSA9IDEwMDtcclxuICBkaXNwbGF5VmFsdWU6c3RyaW5nfG51bGw9bnVsbDtcclxuICB0b29sVGlwVGV4dDpzdHJpbmc9Jyc7XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVNwaW5uZXIoKXtcclxuXHJcbiAgICBsZXQgdXBsTXNnO1xyXG4gICAgaWYgKHRoaXMuX2F3YWl0TmV3VXBsb2FkIHx8IHRoaXMuX3ZhbHVlID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lck1vZGUgPSAnaW5kZXRlcm1pbmF0ZSdcclxuICAgICAgdGhpcy5kaXNwbGF5VmFsdWU9JyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOydcclxuICAgICAgdXBsTXNnPSdQcmVwYXJpbmcgdXBsb2FkLidcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lck1vZGUgPSAnZGV0ZXJtaW5hdGUnXHJcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlPXRoaXMuX3ZhbHVlKyclJ1xyXG4gICAgICBpZih0aGlzLl92YWx1ZT09PTEwMCl7XHJcbiAgICAgICAgdXBsTXNnID0gJ1VwbG9hZCBjb21wbGV0ZSdcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHVwbE1zZyA9ICdVcGxvYWQgcHJvZ3Jlc3M6ICcgKyB0aGlzLmRpc3BsYXlWYWx1ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnN0YXR1cz09PSd3YXJuJyl7XHJcbiAgICAgIHVwbE1zZz0nVXBsb2FkIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uICcrdXBsTXNnXHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2xUaXBUZXh0PXVwbE1zZ1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdmFsdWUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVNwaW5uZXIoKVxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHNldCBhd2FpdE5ld1VwbG9hZChhd2FpdE5ld1VwbG9hZDpib29sZWFuKXtcclxuICAgIHRoaXMuX2F3YWl0TmV3VXBsb2FkPWF3YWl0TmV3VXBsb2FkXHJcbiAgICB0aGlzLl91cGRhdGVTcGlubmVyKClcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzdGF0dXMoc3RhdHVzOnN0cmluZykge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgaWYgKCdhY2NlbnQnID09PSBzdGF0dXMpIHtcclxuICAgICAgdGhpcy5jb2xvclN0YXR1cyA9ICdhY2NlbnQnO1xyXG4gICAgfSBlbHNlIGlmICgnd2FybicgPT09IHN0YXR1cykge1xyXG4gICAgICB0aGlzLmNvbG9yU3RhdHVzID0gJ3dhcm4nO1xyXG4gICAgfSBlbHNle1xyXG4gICAgICB0aGlzLmNvbG9yU3RhdHVzID0gJ3ByaW1hcnknO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlU3Bpbm5lcigpXHJcbiAgfVxyXG5cclxuICBnZXQgc3RhdHVzKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1c1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9ncmVzc2Rpc3BsYXknLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cD57e3Byb2dyZXNzTXNnfX08L3A+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgZmxleDogMTtcclxuICAvKiBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OyAqL1xyXG4gICAgLypkaXNwbGF5OiBpbmxpbmU7ICovXHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICB9YF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzRGlzcGxheSB7XHJcbiAgcHJvZ3Jlc3NNc2cgPSAnW2l0ZW1jb2RlXSc7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFuc3BvcnRBY3Rpb25zIHtcclxuICBzdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIHN0b3BBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuICBuZXh0QWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgZndkTmV4dEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG4gIHBhdXNlQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgZndkQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgYndkQWN0aW9uOiBBY3Rpb248dm9pZD47XHJcbiAgc3RvcE5vbnJlY29yZGluZ0FjdGlvbjpBY3Rpb248dm9pZD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5zdGFydEFjdGlvbiA9IG5ldyBBY3Rpb24oJ1N0YXJ0Jyk7XHJcbiAgICB0aGlzLnN0b3BBY3Rpb24gPSBuZXcgQWN0aW9uKCdTdG9wJyk7XHJcbiAgICB0aGlzLm5leHRBY3Rpb24gPSBuZXcgQWN0aW9uKCdOZXh0Jyk7XHJcbiAgICB0aGlzLnBhdXNlQWN0aW9uID0gbmV3IEFjdGlvbignUGF1c2UnKTtcclxuICAgIHRoaXMuZndkTmV4dEFjdGlvbiA9IG5ldyBBY3Rpb24oJ05leHQgcmVjb3JkaW5nJyk7XHJcbiAgICB0aGlzLmZ3ZEFjdGlvbiA9IG5ldyBBY3Rpb24oJ0ZvcndhcmQnKTtcclxuICAgIHRoaXMuYndkQWN0aW9uID0gbmV3IEFjdGlvbignQmFja3dhcmQnKTtcclxuICAgIHRoaXMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbj1uZXcgQWN0aW9uKCdOZXh0Jyk7XHJcblxyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnRyYW5zcG9ydCcsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YnV0dG9uIGlkPVwiYndkQnRuXCIgKm5nSWY9XCJuYXZpZ2F0aW9uRW5hYmxlZFwiICAoY2xpY2spPVwiYWN0aW9ucy5id2RBY3Rpb24ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cImJ3ZERpc2FibGVkKClcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24taWNvblwiPlxyXG4gICAgICA8c3Bhbj48bWF0LWljb24+Y2hldnJvbl9sZWZ0PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cInN0YXJ0U3RvcE5leHRQZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwic3RhcnREaXNhYmxlZCgpICYmIHN0b3BEaXNhYmxlZCgpICYmIG5leHREaXNhYmxlZCgpICYmIHN0b3BOb25yZWNvcmRpbmdEaXNhYmxlZCgpXCIgIG1hdC1yYWlzZWQtYnV0dG9uICBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24taWNvblwiPlxyXG4gICAgICA8c3Bhbj48bWF0LWljb24gY2xhc3M9XCJ0cmFuc3BvcnQtYnV0dG9uLWljb25cIiBbc3R5bGUuY29sb3JdPVwic3RhcnRTdG9wTmV4dEljb25Db2xvcigpXCI+e3tzdGFydFN0b3BOZXh0SWNvbk5hbWUoKX19PC9tYXQtaWNvbj48bWF0LWljb24gY2xhc3M9XCJ0cmFuc3BvcnQtYnV0dG9uLWljb25cIiAqbmdJZj1cIiFuZXh0RGlzYWJsZWQoKSB8fCAhc3RvcE5vbnJlY29yZGluZ0Rpc2FibGVkKClcIiBbc3R5bGUuY29sb3JdPVwibmV4dERpc2FibGVkKCkgPyAnZ3JleScgOiAnYmxhY2snXCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFzY3JlZW5Yc1wiIGNsYXNzPVwidHJhbnNwb3J0LWJ1dHRvbi10ZXh0XCI+e3tzdGFydFN0b3BOZXh0TmFtZSgpfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJwYXVzaW5nRW5hYmxlZFwiIChjbGljayk9XCJhY3Rpb25zLnBhdXNlQWN0aW9uLnBlcmZvcm0oKVwiIFtkaXNhYmxlZF09XCJwYXVzZURpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiAgY2xhc3M9XCJ0cmFuc3BvcnQtYnV0dG9uLWljb25cIj5cclxuICAgICAgPHNwYW4+PG1hdC1pY29uIGNsYXNzPVwidHJhbnNwb3J0LWJ1dHRvbi1pY29uXCI+cGF1c2U8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhc2NyZWVuWHNcIiBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24tdGV4dFwiPlBhdXNlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZndkTmV4dEJ0blwiICpuZ0lmPVwibmF2aWdhdGlvbkVuYWJsZWQgJiYgIXNjcmVlblhzXCIgKGNsaWNrKT1cImFjdGlvbnMuZndkTmV4dEFjdGlvbi5wZXJmb3JtKClcIiBbZGlzYWJsZWRdPVwiZndkTmV4dERpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24taWNvblwiPlxyXG4gICAgICA8c3Bhbj48bWF0LWljb24+cmVkbzwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZndkQnRuXCIgKm5nSWY9XCJuYXZpZ2F0aW9uRW5hYmxlZFwiICAoY2xpY2spPVwiYWN0aW9ucy5md2RBY3Rpb24ucGVyZm9ybSgpXCIgW2Rpc2FibGVkXT1cImZ3ZERpc2FibGVkKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cInRyYW5zcG9ydC1idXR0b24taWNvblwiPlxyXG4gICAgICA8c3Bhbj48bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDIwO1xyXG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDA7XHJcblxyXG4gIH1gLCBgXHJcbiAgICBkaXYge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmU7XHJcbiAgICAgIGZsZXg6IDA7XHJcbiAgICB9YCxgXHJcbiAgICAgYnV0dG9uIHtcclxuICAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xyXG4gICAgIH1gLGBcclxuICAgIC50cmFuc3BvcnQtYnV0dG9uLWljb257XHJcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcclxuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIH1gLGBcclxuICAgIC50cmFuc3BvcnQtYnV0dG9uLXRleHR7XHJcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xyXG4gICAgfWBcclxuICBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhbnNwb3J0UGFuZWwgZXh0ZW5kcyBSZXNwb25zaXZlQ29tcG9uZW50e1xyXG5cclxuICBASW5wdXQoKSByZWFkb25seSE6Ym9vbGVhbjtcclxuICBASW5wdXQoKSBhY3Rpb25zITogVHJhbnNwb3J0QWN0aW9ucztcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uRW5hYmxlZD10cnVlO1xyXG4gIEBJbnB1dCgpIHBhdXNpbmdFbmFibGVkPXRydWU7XHJcblxyXG4gIHN0YXJ0U3RvcE5leHRCdXR0b25OYW1lITpzdHJpbmc7XHJcbiAgc3RhcnRTdG9wTmV4dEJ1dHRvbkljb25OYW1lITpzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHtcclxuICAgICAgc3VwZXIoYnJlYWtwb2ludE9ic2VydmVyKTtcclxuICAgIH1cclxuXHJcbiAgc3RhcnREaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5hY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkXHJcbiAgfVxyXG5cclxuICBzdG9wRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZFxyXG4gIH1cclxuXHJcbiAgbmV4dERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMubmF2aWdhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzdG9wTm9ucmVjb3JkaW5nRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuc3RvcE5vbnJlY29yZGluZ0FjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIHBhdXNlRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMucGF1c2luZ0VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBmd2REaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5hY3Rpb25zIHx8IHRoaXMuYWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgfHwgIXRoaXMubmF2aWdhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBmd2ROZXh0RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMuZndkTmV4dEFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIGJ3ZERpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCB8fCAhdGhpcy5uYXZpZ2F0aW9uRW5hYmxlZDtcclxuICB9XHJcblxyXG4gICAgc3RhcnRTdG9wTmV4dE5hbWUoKTpzdHJpbmd7XHJcbiAgICAgICAgaWYoIXRoaXMubmV4dERpc2FibGVkKCkgfHwgIXRoaXMuc3RvcE5vbnJlY29yZGluZ0Rpc2FibGVkKCkpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25OYW1lPSBcIk5leHRcIlxyXG4gICAgICAgIH1lbHNlIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTdG9wTmV4dEJ1dHRvbk5hbWU9XCJTdGFydFwiXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uTmFtZSA9IFwiU3RvcFwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3RvcE5leHRCdXR0b25OYW1lO1xyXG4gICAgfVxyXG4gIHN0YXJ0U3RvcE5leHRJY29uTmFtZSgpOnN0cmluZ3tcclxuICAgICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJmaWJlcl9tYW51YWxfcmVjb3JkXCJcclxuICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkgfHwgIXRoaXMuc3RvcE5vbnJlY29yZGluZ0Rpc2FibGVkKCkpe1xyXG4gICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJzdG9wXCJcclxuICAgICAgfWVsc2UgaWYoIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWU9XCJzdG9wXCJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zdGFydFN0b3BOZXh0QnV0dG9uSWNvbk5hbWVcclxuICB9XHJcbiAgICBzdGFydFN0b3BOZXh0SWNvbkNvbG9yKCk6c3RyaW5ne1xyXG4gICAgICAgIGlmKCF0aGlzLnN0YXJ0RGlzYWJsZWQoKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBcInJlZFwiXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuc3RvcERpc2FibGVkKCkgfHwgIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICAgICAgICByZXR1cm4gXCJ5ZWxsb3dcIlxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gXCJncmV5XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICBzdGFydFN0b3BOZXh0UGVyZm9ybSgpe1xyXG4gICAgaWYoIXRoaXMuc3RhcnREaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5hY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1lbHNlIGlmKCF0aGlzLnN0b3BEaXNhYmxlZCgpKXtcclxuICAgICAgdGhpcy5hY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfWVsc2UgaWYoIXRoaXMubmV4dERpc2FibGVkKCkpe1xyXG4gICAgICB0aGlzLmFjdGlvbnMubmV4dEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9ZWxzZSBpZighdGhpcy5zdG9wTm9ucmVjb3JkaW5nRGlzYWJsZWQoKSl7XHJcbiAgICAgIHRoaXMuYWN0aW9ucy5zdG9wTm9ucmVjb3JkaW5nQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC13YWtlbG9ja2luZGljYXRvcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtaWNvbiAqbmdJZj1cIl9zY3JlZW5Mb2NrZWRcIj5zY3JlZW5fbG9ja19wb3J0cmFpdDwvbWF0LWljb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXYWtlTG9ja0luZGljYXRvciB7XHJcbiAgX3NjcmVlbkxvY2tlZD1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBASW5wdXQoKSBzZXQgc2NyZWVuTG9ja2VkKHNjcmVlbkxvY2s6Ym9vbGVhbil7XHJcbiAgICB0aGlzLl9zY3JlZW5Mb2NrZWQ9c2NyZWVuTG9jaztcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yJyxcclxuXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCJyZWFkeVN0YXRlVG9vbFRpcFwiPnt7aG91ckdsYXNzSWNvbk5hbWV9fTwvbWF0LWljb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWFkeVN0YXRlSW5kaWNhdG9yIHtcclxuICBfcmVhZHk9dHJ1ZTtcclxuICBob3VyR2xhc3NJY29uTmFtZT0naG91cmdsYXNzX2VtcHR5J1xyXG4gIHJlYWR5U3RhdGVUb29sVGlwOnN0cmluZz0nJ1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIEBJbnB1dCgpIHNldCByZWFkeShyZWFkeTpib29sZWFuKXtcclxuICAgIHRoaXMuX3JlYWR5PXJlYWR5XHJcbiAgICB0aGlzLmhvdXJHbGFzc0ljb25OYW1lPXRoaXMuX3JlYWR5Pydob3VyZ2xhc3NfZW1wdHknOidob3VyZ2xhc3NfZnVsbCdcclxuICAgIHRoaXMucmVhZHlTdGF0ZVRvb2xUaXA9dGhpcy5fcmVhZHk/J0F1ZGlvIHByb2Nlc3NpbmcgYW5kIHVwbG9hZCBkb25lLiBZb3UgY2FuIGxlYXZlIHRoZSBwYWdlIHdpdGhvdXQgZGF0YSBsb3NzLic6J1BsZWFzZSB3YWl0IHVudGlsIGF1ZGlvIHByb2Nlc3NpbmcgYW5kIHVwbG9hZCBoYXZlIGZpbmlzaGVkLiBQbGVhc2UgZG8gbm90IGxlYXZlIHRoZSBwYWdlLidcclxuICB9XHJcblxyXG4gIGdldCByZWFkeSgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5fcmVhZHlcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJjb250cm9scGFuZWwnLFxyXG5cclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiAqbmdJZj1cIiFzY3JlZW5Yc1wiIHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvd1wiID5cclxuICAgICA8YXBwLXNwcnN0YXR1c2Rpc3BsYXkgc3R5bGU9XCJmbGV4OjAgMCAwXCIgW3N0YXR1c01zZ109XCJzdGF0dXNNc2dcIiBbc3RhdHVzQWxlcnRUeXBlXT1cInN0YXR1c0FsZXJ0VHlwZVwiIFtzdGF0dXNXYWl0aW5nXT1cInN0YXR1c1dhaXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgPGFwcC1zcHJ0cmFuc3BvcnQgc3R5bGU9XCJmbGV4OjEwIDAgMFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFthY3Rpb25zXT1cInRyYW5zcG9ydEFjdGlvbnNcIiBbbmF2aWdhdGlvbkVuYWJsZWRdPVwibmF2aWdhdGlvbkVuYWJsZWRcIj48L2FwcC1zcHJ0cmFuc3BvcnQ+XHJcbiAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIHN0eWxlPVwiZmxleDowIDAgMFwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgW3JlYWR5XT1cIl9yZWFkeVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzY3JlZW5Yc1wiIHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IGNvbHVtblwiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvd1wiIGNsYXNzPVwiZmxleEZpbGxcIiA+XHJcbiAgICAgICA8YXBwLXNwcnN0YXR1c2Rpc3BsYXkgc3R5bGU9XCJmbGV4OjEwIDAgMFwiIFtzdGF0dXNNc2ddPVwic3RhdHVzTXNnXCIgW3N0YXR1c0FsZXJ0VHlwZV09XCJzdGF0dXNBbGVydFR5cGVcIiBbc3RhdHVzV2FpdGluZ109XCJzdGF0dXNXYWl0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCI+PC9hcHAtc3Byc3RhdHVzZGlzcGxheT5cclxuICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIHN0eWxlPVwiZmxleDowIDAgMFwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwidXBsb2FkU3RhdHVzXCIgW2F3YWl0TmV3VXBsb2FkXT1cInByb2Nlc3NpbmdcIj48L2FwcC11cGxvYWRzdGF0dXM+XHJcbiAgICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yIFtyZWFkeV09XCJfcmVhZHlcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGFwcC1zcHJ0cmFuc3BvcnQgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2FjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiIFtuYXZpZ2F0aW9uRW5hYmxlZF09XCJuYXZpZ2F0aW9uRW5hYmxlZFwiPjwvYXBwLXNwcnRyYW5zcG9ydD5cclxuXHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlczogW2BkaXYge1xyXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICBtaW4taGVpZ2h0OiBtaW4tY29udGVudDsgLyogaW1wb3J0YW50ICovXHJcbiAgfWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sUGFuZWwgZXh0ZW5kcyBSZXNwb25zaXZlQ29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKFN0YXR1c0Rpc3BsYXksIHsgc3RhdGljOiB0cnVlIH0pIHN0YXR1c0Rpc3BsYXkhOiBTdGF0dXNEaXNwbGF5O1xyXG4gIEBWaWV3Q2hpbGQoVHJhbnNwb3J0UGFuZWwsIHsgc3RhdGljOiB0cnVlIH0pIHRyYW5zcG9ydFBhbmVsITogVHJhbnNwb3J0UGFuZWw7XHJcblxyXG4gIEBJbnB1dCgpIHJlYWRvbmx5ITpib29sZWFuXHJcbiAgQElucHV0KCkgdHJhbnNwb3J0QWN0aW9ucyE6IFRyYW5zcG9ydEFjdGlvbnNcclxuICBASW5wdXQoKSBwcm9jZXNzaW5nPWZhbHNlXHJcbiAgQElucHV0KCkgc3RhdHVzTXNnITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c0FsZXJ0VHlwZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGF0dXNXYWl0aW5nITogYm9vbGVhbjtcclxuICBASW5wdXQoKSB1cGxvYWRTdGF0dXMhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdXBsb2FkUHJvZ3Jlc3MhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgY3VycmVudFJlY29yZGluZzogQXVkaW9CdWZmZXJ8IG51bGx8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBlbmFibGVVcGxvYWRSZWNvcmRpbmdzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uRW5hYmxlZD10cnVlO1xyXG5cclxuICBfcmVhZHk9dHJ1ZVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYnBvOkJyZWFrcG9pbnRPYnNlcnZlcixwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2cpIHtcclxuICAgIHN1cGVyKGJwbyk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgcmVhZHkocmVhZHk6Ym9vbGVhbil7XHJcbiAgICB0aGlzLl9yZWFkeT1yZWFkeVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJlYWR5KCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLl9yZWFkeVxyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export class Item {
|
|
2
|
-
constructor(_promptAsString, _training, _recording) {
|
|
3
|
-
this._promptAsString = _promptAsString;
|
|
4
|
-
this._training = _training;
|
|
5
|
-
this._recording = _recording;
|
|
6
|
-
this.recs = null;
|
|
7
|
-
}
|
|
8
|
-
itemDone() {
|
|
9
|
-
let done = false;
|
|
10
|
-
if (this.recs) {
|
|
11
|
-
for (let rf of this.recs) {
|
|
12
|
-
if (rf.recordingFileDone()) {
|
|
13
|
-
done = true;
|
|
14
|
-
break;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return done;
|
|
19
|
-
}
|
|
20
|
-
get promptAsString() {
|
|
21
|
-
return this._promptAsString;
|
|
22
|
-
}
|
|
23
|
-
get training() {
|
|
24
|
-
return this._training;
|
|
25
|
-
}
|
|
26
|
-
get recording() {
|
|
27
|
-
return this._recording;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2l0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLElBQUk7SUFHYixZQUFvQixlQUF1QixFQUFVLFNBQWtCLEVBQVMsVUFBa0I7UUFBOUUsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUM5RixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxHQUFDLEtBQUssQ0FBQztRQUNmLElBQUcsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDO1lBQ1osS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUM7Z0JBQ3ZCLElBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUMsQ0FBQztvQkFDekIsSUFBSSxHQUFDLElBQUksQ0FBQztvQkFDVixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTcHJSZWNvcmRpbmdGaWxlfSBmcm9tIFwiLi4vcmVjb3JkaW5nXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbSB7XHJcbiAgICByZWNzOiBBcnJheTxTcHJSZWNvcmRpbmdGaWxlPiB8IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcHJvbXB0QXNTdHJpbmc6IHN0cmluZywgcHJpdmF0ZSBfdHJhaW5pbmc6IGJvb2xlYW4scHJpdmF0ZSBfcmVjb3JkaW5nOmJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnJlY3MgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGl0ZW1Eb25lKCl7XHJcbiAgICAgIGxldCBkb25lPWZhbHNlO1xyXG4gICAgICBpZih0aGlzLnJlY3Mpe1xyXG4gICAgICAgIGZvcihsZXQgcmYgb2YgdGhpcy5yZWNzKXtcclxuICAgICAgICAgIGlmKHJmLnJlY29yZGluZ0ZpbGVEb25lKCkpe1xyXG4gICAgICAgICAgICBkb25lPXRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbXB0QXNTdHJpbmcoKTpzdHJpbmd7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdEFzU3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB0cmFpbmluZygpOmJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWluaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWNvcmRpbmcoKTpib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvcmRpbmc7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|