speechrecorderng 3.4.3 → 3.4.5

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 (68) hide show
  1. package/esm2020/lib/action/action.mjs +3 -3
  2. package/esm2020/lib/audio/audio_display.mjs +9 -11
  3. package/esm2020/lib/audio/audio_player.mjs +4 -4
  4. package/esm2020/lib/audio/capture/capture.mjs +120 -106
  5. package/esm2020/lib/audio/io/stream.mjs +1 -1
  6. package/esm2020/lib/audio/net_audio_buffer.mjs +1 -1
  7. package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +2 -2
  8. package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +2 -2
  9. package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
  10. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
  11. package/esm2020/lib/audio/ui/audio_display_control.mjs +4 -4
  12. package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
  13. package/esm2020/lib/audio/ui/audiosignal.mjs +4 -4
  14. package/esm2020/lib/audio/ui/container.mjs +6 -6
  15. package/esm2020/lib/audio/ui/livelevel.mjs +4 -4
  16. package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +4 -4
  17. package/esm2020/lib/audio/ui/sonagram.mjs +4 -4
  18. package/esm2020/lib/db/inddb.mjs +4 -4
  19. package/esm2020/lib/net/uploader.mjs +31 -28
  20. package/esm2020/lib/speechrecorder/project/project.service.mjs +7 -7
  21. package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +53 -51
  22. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +124 -116
  23. package/esm2020/lib/speechrecorder/script/script.service.mjs +4 -4
  24. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +26 -27
  25. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +1 -1
  26. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +34 -32
  27. package/esm2020/lib/speechrecorder/session/progress.mjs +4 -4
  28. package/esm2020/lib/speechrecorder/session/prompting.mjs +16 -16
  29. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +4 -4
  30. package/esm2020/lib/speechrecorder/session/recording_list.mjs +4 -4
  31. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
  32. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +6 -6
  33. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +20 -19
  34. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +43 -41
  35. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +147 -137
  36. package/esm2020/lib/speechrecorder/session/session.service.mjs +15 -12
  37. package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
  38. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +4 -4
  39. package/esm2020/lib/speechrecorder/session/warning_bar.mjs +4 -4
  40. package/esm2020/lib/speechrecorder/spruploader.mjs +4 -4
  41. package/esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -2
  42. package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
  43. package/esm2020/lib/speechrecorderng.component.mjs +6 -6
  44. package/esm2020/lib/speechrecorderng.module.mjs +5 -5
  45. package/esm2020/lib/spr.config.mjs +4 -4
  46. package/esm2020/lib/spr.module.version.mjs +2 -2
  47. package/esm2020/lib/ui/canvas_layer_comp.mjs +4 -4
  48. package/esm2020/lib/ui/message_dialog.mjs +4 -4
  49. package/esm2020/lib/ui/recordingitem_display.mjs +8 -8
  50. package/esm2020/lib/ui/responsive_component.mjs +4 -4
  51. package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +4 -4
  52. package/fesm2015/speechrecorderng.mjs +744 -701
  53. package/fesm2015/speechrecorderng.mjs.map +1 -1
  54. package/fesm2020/speechrecorderng.mjs +744 -701
  55. package/fesm2020/speechrecorderng.mjs.map +1 -1
  56. package/lib/action/action.d.ts +1 -1
  57. package/lib/audio/audio_display.d.ts +1 -3
  58. package/lib/audio/capture/capture.d.ts +2 -0
  59. package/lib/audio/io/stream.d.ts +1 -1
  60. package/lib/net/uploader.d.ts +6 -6
  61. package/lib/speechrecorder/project/project.service.d.ts +4 -4
  62. package/lib/speechrecorder/script/script.service.d.ts +2 -2
  63. package/lib/speechrecorder/session/audiorecorder.d.ts +1 -2
  64. package/lib/speechrecorder/session/basicrecorder.d.ts +1 -1
  65. package/lib/speechrecorder/session/controlpanel.d.ts +1 -1
  66. package/lib/speechrecorder/session/session.service.d.ts +2 -2
  67. package/lib/spr.module.version.d.ts +1 -1
  68. package/package.json +14 -14
@@ -6,17 +6,15 @@ import { HttpErrorResponse, HttpHeaders, HttpClientModule } from '@angular/commo
6
6
  import { timeout } from 'rxjs/operators';
7
7
  import * as i1$1 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
- import * as i1$2 from '@angular/router';
10
- import { RouterModule } from '@angular/router';
11
9
  import * as i4$1 from '@angular/material/checkbox';
12
10
  import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox';
13
11
  import * as i2 from '@angular/material/icon';
14
12
  import { MatIconModule } from '@angular/material/icon';
15
13
  import * as i4 from '@angular/material/tooltip';
16
14
  import { MatTooltipModule } from '@angular/material/tooltip';
17
- import * as i1$3 from '@angular/cdk/layout';
15
+ import * as i1$2 from '@angular/cdk/layout';
18
16
  import { Breakpoints } from '@angular/cdk/layout';
19
- import * as i1$4 from '@angular/material/dialog';
17
+ import * as i1$3 from '@angular/material/dialog';
20
18
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
21
19
  import * as i3 from '@angular/material/button';
22
20
  import { MatButtonModule } from '@angular/material/button';
@@ -25,13 +23,15 @@ import * as i3$1 from '@angular/material/progress-spinner';
25
23
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
26
24
  import * as i7 from '@angular/material/progress-bar';
27
25
  import { MatProgressBarModule } from '@angular/material/progress-bar';
26
+ import * as i4$2 from '@angular/router';
27
+ import { RouterModule } from '@angular/router';
28
28
  import * as i3$2 from '@angular/material/card';
29
29
  import { MatCardModule } from '@angular/material/card';
30
30
  import { MatDividerModule } from '@angular/material/divider';
31
31
  import { MatGridListModule } from '@angular/material/grid-list';
32
32
  import * as i6 from '@angular/material/snack-bar';
33
33
  import { MatSnackBarModule } from '@angular/material/snack-bar';
34
- import * as i4$2 from '@angular/material/table';
34
+ import * as i4$3 from '@angular/material/table';
35
35
  import { MatTableDataSource, MatTableModule } from '@angular/material/table';
36
36
  import { MatSelectModule } from '@angular/material/select';
37
37
  import { MatInputModule } from '@angular/material/input';
@@ -95,7 +95,7 @@ class Action {
95
95
  ctrl.disabled = this.disabled;
96
96
  this.controls.push(ctrl);
97
97
  if (actionEventName) {
98
- ctrl.addEventListener(actionEventName, (e) => {
98
+ ctrl.addEventListener(actionEventName, () => {
99
99
  this.perform();
100
100
  });
101
101
  }
@@ -103,7 +103,7 @@ class Action {
103
103
  }
104
104
  }
105
105
  removeControl(ctrl) {
106
- var i = this.controls.indexOf(ctrl);
106
+ const i = this.controls.indexOf(ctrl);
107
107
  if (i >= 0) {
108
108
  this.controls = this.controls.splice(i, 1);
109
109
  }
@@ -947,7 +947,7 @@ class ArrayAudioBufferSourceNode extends AudioSourceNode {
947
947
  }
948
948
  };
949
949
  }
950
- fillBuffer(frameOffset) {
950
+ fillBuffer() {
951
951
  if (this._arrayAudioBuffer && this._audioInputStream && this._aisBufs) {
952
952
  let filled = this.filledFrames;
953
953
  let bufLen = 0;
@@ -1746,7 +1746,7 @@ const aswpStr = "\n" +
1746
1746
  "\n" +
1747
1747
  " let copied=0;\n" +
1748
1748
  " do{\n" +
1749
- " if(this.currentAudioBufferAvail==0){\n" +
1749
+ " if(this.currentAudioBufferAvail===0){\n" +
1750
1750
  " let nxtBuff=this.audioBuffers.shift();\n" +
1751
1751
  " if(nxtBuff){\n" +
1752
1752
  " this.currentAudioBuffer=nxtBuff;\n" +
@@ -3181,7 +3181,7 @@ class AudioCapture {
3181
3181
  this.inddbAudioBuffer = null;
3182
3182
  this.context = context;
3183
3183
  this.n = navigator;
3184
- this.context.addEventListener('statechange', (ev) => {
3184
+ this.context.addEventListener('statechange', () => {
3185
3185
  if (this.context.state !== 'running') {
3186
3186
  this.close();
3187
3187
  }
@@ -3327,6 +3327,104 @@ class AudioCapture {
3327
3327
  console.log("Audio device: Id: " + di.deviceId + " groupId: " + di.groupId + " label: " + di.label + " kind: " + di.kind);
3328
3328
  }
3329
3329
  }
3330
+ addCaptureInterceptor() {
3331
+ const awn = new AudioWorkletNode(this.context, 'capture-interceptor');
3332
+ awn.onprocessorerror = (ev) => {
3333
+ let msg = 'Unknwon error';
3334
+ if (ev instanceof ErrorEvent) {
3335
+ msg = ev.message;
3336
+ }
3337
+ console.error("Capture audio worklet error: " + msg);
3338
+ if (this.listener) {
3339
+ this.listener.error(msg);
3340
+ }
3341
+ };
3342
+ let awnPt = awn.port;
3343
+ if (awnPt) {
3344
+ awnPt.onmessage = (ev) => {
3345
+ if (this.capturing) {
3346
+ let dt = ev.data;
3347
+ let chs = dt.chs;
3348
+ let adaLen = dt.data.length;
3349
+ if (DEBUG_TRACE_LEVEL > 8) {
3350
+ console.debug('Received data from worklet: ' + chs + ' ' + dt.len + ' Data chs: ' + adaLen);
3351
+ }
3352
+ let chunk = new Array(chs);
3353
+ const samples = this.framesRecorded * chs;
3354
+ if ((AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this.audioStorageType || AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this.audioStorageType) && this.data && samples > this._maxAutoNetMemStoreSamples) {
3355
+ this.data = null;
3356
+ }
3357
+ //console.debug("Data initialized: "+(this.data!=null));
3358
+ for (let ch = 0; ch < chs; ch++) {
3359
+ //console.debug("Data ch initialized: "+(this.data !=null && this.data[ch] !=null));
3360
+ if (ch < this.channelCount) {
3361
+ if (dt.data[ch]) {
3362
+ let fa = new Float32Array(dt.data[ch]);
3363
+ if (this.data && this.data[ch]) {
3364
+ this.data[ch].push(fa);
3365
+ }
3366
+ chunk[ch] = fa;
3367
+ // Use samples of channel 0 to count frames (samples)
3368
+ if (ch == 0) {
3369
+ this.framesRecorded += fa.length;
3370
+ }
3371
+ }
3372
+ }
3373
+ }
3374
+ if (this.audioOutStream) {
3375
+ try {
3376
+ this.audioOutStream.write(chunk);
3377
+ // // Random test error:
3378
+ // if(Math.random()>0.98) {
3379
+ // throw new Error('Test');
3380
+ // }
3381
+ }
3382
+ catch (err) {
3383
+ if (err instanceof Error) {
3384
+ this.persistError = err;
3385
+ }
3386
+ else {
3387
+ this.persistError = new Error('Error handling recorded audio data');
3388
+ }
3389
+ console.error("Capture error: " + err);
3390
+ try {
3391
+ this.stop();
3392
+ }
3393
+ catch (err2) {
3394
+ console.error("Capture next error (ignored): " + err2);
3395
+ }
3396
+ finally {
3397
+ if (this.listener) {
3398
+ let errExpl = '';
3399
+ if (err instanceof DOMException) {
3400
+ errExpl = ': ' + err.name + ': ' + err.message;
3401
+ }
3402
+ this.listener.error("Could not handle recorded audio data" + errExpl, "Please try to record again.");
3403
+ }
3404
+ else {
3405
+ this.close();
3406
+ }
3407
+ }
3408
+ }
3409
+ }
3410
+ if (AudioStorageType.DB_CHUNKED === this._audioStorageType && this._persistentAudioStorageTarget) {
3411
+ this.store();
3412
+ }
3413
+ }
3414
+ };
3415
+ }
3416
+ // Tried to fix that Safari does not record the second channel
3417
+ // Does not help
3418
+ //awn.channelCount=this.channelCount;
3419
+ //awn.channelCountMode='explicit';
3420
+ //console.debug('Channel count explicitly set to '+this.channelCount);
3421
+ this.bufferingNode = awn;
3422
+ //this.bufferingNode.channelCount=this.channelCount;
3423
+ this._opened = true;
3424
+ if (this.listener) {
3425
+ this.listener.opened();
3426
+ }
3427
+ }
3330
3428
  open(channelCount, selDeviceId, autoGainControlConfigs) {
3331
3429
  //console.debug("Capture open: ctx state: "+this.context.state);
3332
3430
  if (this.context.state !== 'running') {
@@ -3450,7 +3548,7 @@ class AudioCapture {
3450
3548
  audio: {
3451
3549
  deviceId: selDeviceId,
3452
3550
  channelCount: channelCount,
3453
- echoCancellation: false
3551
+ //echoCancellation: false
3454
3552
  },
3455
3553
  video: false,
3456
3554
  };
@@ -3503,108 +3601,21 @@ class AudioCapture {
3503
3601
  //const workletFileName = ('file-loader!./interceptor_worklet.js');
3504
3602
  //const workletFileName = 'http://localhost:4200/assets/interceptor_worklet.js';
3505
3603
  //console.log(awpStr);
3506
- let audioWorkletModuleBlob = new Blob([awpStr], { type: 'text/javascript' });
3507
- let audioWorkletModuleBlobUrl = window.URL.createObjectURL(audioWorkletModuleBlob);
3508
- this.context.audioWorklet.addModule(audioWorkletModuleBlobUrl).then(() => {
3509
- const awn = new AudioWorkletNode(this.context, 'capture-interceptor');
3510
- awn.onprocessorerror = (ev) => {
3511
- let msg = 'Unknwon error';
3512
- if (ev instanceof ErrorEvent) {
3513
- msg = ev.message;
3514
- }
3515
- console.error("Capture audio worklet error: " + msg);
3516
- if (this.listener) {
3517
- this.listener.error(msg);
3518
- }
3519
- };
3520
- let awnPt = awn.port;
3521
- if (awnPt) {
3522
- awnPt.onmessage = (ev) => {
3523
- if (this.capturing) {
3524
- let dt = ev.data;
3525
- let chs = dt.chs;
3526
- let adaLen = dt.data.length;
3527
- if (DEBUG_TRACE_LEVEL > 8) {
3528
- console.debug('Received data from worklet: ' + chs + ' ' + dt.len + ' Data chs: ' + adaLen);
3529
- }
3530
- let chunk = new Array(chs);
3531
- const samples = this.framesRecorded * chs;
3532
- if ((AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this.audioStorageType || AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this.audioStorageType) && this.data && samples > this._maxAutoNetMemStoreSamples) {
3533
- this.data = null;
3534
- }
3535
- //console.debug("Data initialized: "+(this.data!=null));
3536
- for (let ch = 0; ch < chs; ch++) {
3537
- //console.debug("Data ch initialized: "+(this.data !=null && this.data[ch] !=null));
3538
- if (ch < this.channelCount) {
3539
- if (dt.data[ch]) {
3540
- let fa = new Float32Array(dt.data[ch]);
3541
- if (this.data && this.data[ch]) {
3542
- this.data[ch].push(fa);
3543
- }
3544
- chunk[ch] = fa;
3545
- // Use samples of channel 0 to count frames (samples)
3546
- if (ch == 0) {
3547
- this.framesRecorded += fa.length;
3548
- }
3549
- }
3550
- }
3551
- }
3552
- if (this.audioOutStream) {
3553
- try {
3554
- this.audioOutStream.write(chunk);
3555
- // // Random test error:
3556
- // if(Math.random()>0.98) {
3557
- // throw new Error('Test');
3558
- // }
3559
- }
3560
- catch (err) {
3561
- if (err instanceof Error) {
3562
- this.persistError = err;
3563
- }
3564
- else {
3565
- this.persistError = new Error('Error handling recorded audio data');
3566
- }
3567
- console.error("Capture error: " + err);
3568
- try {
3569
- this.stop();
3570
- }
3571
- catch (err2) {
3572
- console.error("Capture next error (ignored): " + err2);
3573
- }
3574
- finally {
3575
- if (this.listener) {
3576
- let errExpl = '';
3577
- if (err instanceof DOMException) {
3578
- errExpl = ': ' + err.name + ': ' + err.message;
3579
- }
3580
- this.listener.error("Could not handle recorded audio data" + errExpl, "Please try to record again.");
3581
- }
3582
- else {
3583
- this.close();
3584
- }
3585
- }
3586
- }
3587
- }
3588
- if (AudioStorageType.DB_CHUNKED === this._audioStorageType && this._persistentAudioStorageTarget) {
3589
- this.store();
3590
- }
3591
- }
3592
- };
3593
- }
3594
- // Tried to fix that Safari does not record the second channel
3595
- // Does not help
3596
- //awn.channelCount=this.channelCount;
3597
- //awn.channelCountMode='explicit';
3598
- //console.debug('Channel count explicitly set to '+this.channelCount);
3599
- this.bufferingNode = awn;
3600
- //this.bufferingNode.channelCount=this.channelCount;
3601
- this._opened = true;
3602
- if (this.listener) {
3603
- this.listener.opened();
3604
- }
3605
- }).catch((error) => {
3606
- console.log('Could not add module ' + error);
3607
- });
3604
+ if (AudioCapture.captureInterceptorModuleRegistered) {
3605
+ // Required capture interceptor module already registered
3606
+ this.addCaptureInterceptor();
3607
+ }
3608
+ else {
3609
+ // Register capture interceptor module
3610
+ let audioWorkletModuleBlob = new Blob([awpStr], { type: 'text/javascript' });
3611
+ let audioWorkletModuleBlobUrl = window.URL.createObjectURL(audioWorkletModuleBlob);
3612
+ this.context.audioWorklet.addModule(audioWorkletModuleBlobUrl).then(() => {
3613
+ AudioCapture.captureInterceptorModuleRegistered = true;
3614
+ this.addCaptureInterceptor();
3615
+ }).catch((error) => {
3616
+ console.log('Could not add module ' + error);
3617
+ });
3618
+ }
3608
3619
  }
3609
3620
  else if (this.context.createScriptProcessor) {
3610
3621
  // The ScriptProcessorNode Interface - DEPRECATED Only as fallback
@@ -3807,7 +3818,9 @@ class AudioCapture {
3807
3818
  }
3808
3819
  }
3809
3820
  close() {
3810
- this.mediaStream.disconnect();
3821
+ if (this.mediaStream) {
3822
+ this.mediaStream.disconnect();
3823
+ }
3811
3824
  if (this.stream) {
3812
3825
  const mts = this.stream.getTracks();
3813
3826
  for (let i = 0; i < mts.length; i++) {
@@ -3881,7 +3894,8 @@ class AudioCapture {
3881
3894
  }
3882
3895
  }
3883
3896
  AudioCapture.BUFFER_SIZE = 8192;
3884
- AudioCapture.DEFAULT_MAX_NET_AUTO_MEM_STORE_SAMPLES = 2880000 * 5; // Default 5 minute at 48kHz
3897
+ AudioCapture.DEFAULT_MAX_NET_AUTO_MEM_STORE_SAMPLES = 2880000 * 5; // Default 5 minute at 48kHz
3898
+ AudioCapture.captureInterceptorModuleRegistered = false;
3885
3899
 
3886
3900
  class WavFileFormat {
3887
3901
  }
@@ -4519,7 +4533,7 @@ class Uploader {
4519
4533
  si += v.size;
4520
4534
  }
4521
4535
  else if (typeof v === 'string') {
4522
- // encode to UT-f8 to get upload size
4536
+ // encode to UTF-8 to get upload size
4523
4537
  si += this.te.encode().length;
4524
4538
  }
4525
4539
  });
@@ -4557,34 +4571,37 @@ class Uploader {
4557
4571
  // pipe(timeout()) is not the same as xhr.timeout
4558
4572
  let uploadedUpload = null;
4559
4573
  //console.debug("Post upload: "+ul)
4560
- this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe(data => {
4561
- uploadedUpload = ul;
4562
- //console.debug('Next method called for upload: '+uploadedUpload)
4563
- }, (err) => {
4564
- if (err.error instanceof Error) {
4565
- // A client-side or network error occurred. Handle it accordingly.
4566
- console.error('Upload error occurred:', err.error.message);
4567
- }
4568
- else {
4569
- // The backend returned an unsuccessful response code.
4570
- // The response body may contain clues as to what went wrong,
4571
- console.error(`Upload error: Server returned code ${err.status}`);
4572
- }
4573
- this.processError(ul);
4574
- }, () => {
4575
- //console.debug('Upload complete method called')
4576
- if (uploadedUpload) {
4577
- if (this.DEBUG_DELAY > 0) {
4578
- window.setTimeout(() => {
4579
- this.uploadDone(ul);
4580
- }, this.DEBUG_DELAY);
4574
+ this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe({
4575
+ next: (data) => {
4576
+ uploadedUpload = ul;
4577
+ //console.debug('Next method called for upload: '+uploadedUpload)
4578
+ },
4579
+ error: (err) => {
4580
+ if (err.error instanceof Error) {
4581
+ // A client-side or network error occurred. Handle it accordingly.
4582
+ console.error('Upload error occurred:', err.error.message);
4581
4583
  }
4582
4584
  else {
4583
- this.uploadDone(uploadedUpload);
4585
+ // The backend returned an unsuccessful response code.
4586
+ // The response body may contain clues as to what went wrong,
4587
+ console.error(`Upload error: Server returned code ${err.status}`);
4588
+ }
4589
+ this.processError(ul);
4590
+ }, complete: () => {
4591
+ //console.debug('Upload complete method called')
4592
+ if (uploadedUpload) {
4593
+ if (this.DEBUG_DELAY > 0) {
4594
+ window.setTimeout(() => {
4595
+ this.uploadDone(ul);
4596
+ }, this.DEBUG_DELAY);
4597
+ }
4598
+ else {
4599
+ this.uploadDone(uploadedUpload);
4600
+ }
4601
+ }
4602
+ else {
4603
+ console.error('Upload post complete, but upload not set in next method!');
4584
4604
  }
4585
- }
4586
- else {
4587
- console.error('Upload post complete, but upload not set in next method!');
4588
4605
  }
4589
4606
  });
4590
4607
  }
@@ -4599,7 +4616,7 @@ class Uploader {
4599
4616
  // set retry timer
4600
4617
  this.retryTimerId = window.setTimeout(() => {
4601
4618
  this.retryTimerRunning = false;
4602
- //console.debug("Upload retry timer exprired. Continue processing...")
4619
+ //console.debug("Upload retry timer expired. Continue processing...")
4603
4620
  this.process();
4604
4621
  }, this.RETRY_DELAY);
4605
4622
  this.retryTimerRunning = true;
@@ -4683,9 +4700,9 @@ class SpeechRecorderConfig {
4683
4700
  this.withCredentials = false;
4684
4701
  }
4685
4702
  }
4686
- SpeechRecorderConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4687
- SpeechRecorderConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderConfig });
4688
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderConfig, decorators: [{
4703
+ SpeechRecorderConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4704
+ SpeechRecorderConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderConfig });
4705
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderConfig, decorators: [{
4689
4706
  type: Injectable
4690
4707
  }], ctorParameters: function () { return []; } });
4691
4708
 
@@ -4693,12 +4710,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
4693
4710
  * Created by klausj on 17.06.2017.
4694
4711
  */
4695
4712
  class ProjectService {
4696
- constructor(http, platformLoaction, config) {
4713
+ constructor(http, platformLocation, config) {
4697
4714
  this.http = http;
4698
- this.platformLoaction = platformLoaction;
4715
+ this.platformLocation = platformLocation;
4699
4716
  this.config = config;
4700
4717
  this.withCredentials = false;
4701
- console.log("Base Href: " + platformLoaction.getBaseHrefFromDOM());
4718
+ console.log("Base Href: " + platformLocation.getBaseHrefFromDOM());
4702
4719
  let apiEndPoint = '';
4703
4720
  if (config && config.apiEndPoint) {
4704
4721
  apiEndPoint = config.apiEndPoint;
@@ -4737,9 +4754,9 @@ class ProjectService {
4737
4754
  }
4738
4755
  }
4739
4756
  ProjectService.PROJECT_API_CTX = 'project';
4740
- ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i1$1.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
4741
- ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProjectService });
4742
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProjectService, decorators: [{
4757
+ ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i1$1.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
4758
+ ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService });
4759
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, decorators: [{
4743
4760
  type: Injectable
4744
4761
  }], ctorParameters: function () {
4745
4762
  return [{ type: i1.HttpClient }, { type: i1$1.PlatformLocation }, { type: SpeechRecorderConfig, decorators: [{
@@ -4783,23 +4800,26 @@ class SessionService {
4783
4800
  let wrapObs = new Observable(subscriber => {
4784
4801
  this._uploadCount++;
4785
4802
  let obs = this.http.patch(sesssUrl, body, { withCredentials: this.withCredentials });
4786
- obs.subscribe((value) => {
4787
- subscriber.next(value);
4788
- }, error => {
4789
- this._uploadCount--;
4790
- subscriber.error(error);
4791
- }, () => {
4792
- this._uploadCount--;
4793
- subscriber.complete();
4803
+ obs.subscribe({
4804
+ next: (value) => {
4805
+ subscriber.next(value);
4806
+ },
4807
+ error: error => {
4808
+ this._uploadCount--;
4809
+ subscriber.error(error);
4810
+ }, complete: () => {
4811
+ this._uploadCount--;
4812
+ subscriber.complete();
4813
+ }
4794
4814
  });
4795
4815
  });
4796
4816
  return wrapObs;
4797
4817
  }
4798
4818
  }
4799
4819
  SessionService.SESSION_API_CTX = 'session';
4800
- SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
4801
- SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService });
4802
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService, decorators: [{
4820
+ SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
4821
+ SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionService });
4822
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionService, decorators: [{
4803
4823
  type: Injectable
4804
4824
  }], ctorParameters: function () {
4805
4825
  return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
@@ -4840,8 +4860,8 @@ class SimpleTrafficLight {
4840
4860
  }
4841
4861
  }
4842
4862
  }
4843
- SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SimpleTrafficLight, deps: [], target: i0.ɵɵFactoryTarget.Component });
4844
- SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: { status: "status" }, ngImport: i0, template: `
4863
+ SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SimpleTrafficLight, deps: [], target: i0.ɵɵFactoryTarget.Component });
4864
+ SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: { status: "status" }, ngImport: i0, template: `
4845
4865
 
4846
4866
  <div>
4847
4867
  <div class="circle {{lighttop}}"></div>
@@ -4849,7 +4869,7 @@ SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
4849
4869
  <div class="circle {{lightbottom}}"></div>
4850
4870
  </div>
4851
4871
  `, isInline: true, styles: [".circle{width:50px;height:50px;border-radius:50%;margin:5px;background:grey}\n", ".red{background:red}\n", ".yellow{background:yellow}\n", ".green{background:green}\n", ".black{background:black}\n", ":host{display:flex;flex-direction:column;background:black;padding:2px;height:170px;max-height:170px;flex:0 0 content}\n"] });
4852
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SimpleTrafficLight, decorators: [{
4872
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SimpleTrafficLight, decorators: [{
4853
4873
  type: Component,
4854
4874
  args: [{ selector: 'app-simpletrafficlight', template: `
4855
4875
 
@@ -4920,9 +4940,9 @@ class CanvasLayerComponent {
4920
4940
  }
4921
4941
  }
4922
4942
  }
4923
- CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CanvasLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4924
- CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: CanvasLayerComponent, ngImport: i0 });
4925
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CanvasLayerComponent, decorators: [{
4943
+ CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CanvasLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4944
+ CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: CanvasLayerComponent, ngImport: i0 });
4945
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CanvasLayerComponent, decorators: [{
4926
4946
  type: Directive
4927
4947
  }], ctorParameters: function () { return []; } });
4928
4948
 
@@ -5164,9 +5184,9 @@ class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
5164
5184
  }
5165
5185
  }
5166
5186
  }
5167
- BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5168
- BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 });
5169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
5187
+ BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5188
+ BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 });
5189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
5170
5190
  type: Directive
5171
5191
  }] });
5172
5192
  class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
@@ -5343,9 +5363,9 @@ class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
5343
5363
  }
5344
5364
  }
5345
5365
  AudioCanvasLayerComponent.ENABLE_STREAMING_NUMBER_OF_SAMPLES_THRESHOLD = 10 * 60 * 48000; // Use streaming/chunking if audio clip has more than this number of samples
5346
- AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5347
- AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
5348
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
5366
+ AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5367
+ AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
5368
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
5349
5369
  type: Directive
5350
5370
  }], propDecorators: { bgCanvasRef: [{
5351
5371
  type: ViewChild,
@@ -5875,14 +5895,14 @@ class AudioSignal extends AudioCanvasLayerComponent {
5875
5895
  this.playFramePosition = 0;
5876
5896
  }
5877
5897
  }
5878
- AudioSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioSignal, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
5879
- AudioSignal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioSignal, selector: "audio-signal", viewQueries: [{ propertyName: "audioSignalCanvasRef", first: true, predicate: ["audioSignal"], descendants: true, static: true }, { propertyName: "playPosCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
5898
+ AudioSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioSignal, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
5899
+ AudioSignal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioSignal, selector: "audio-signal", viewQueries: [{ propertyName: "audioSignalCanvasRef", first: true, predicate: ["audioSignal"], descendants: true, static: true }, { propertyName: "playPosCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
5880
5900
  <canvas #bg height="10"></canvas>
5881
5901
  <canvas #audioSignal height="10"></canvas>
5882
5902
  <canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
5883
5903
  (mouseleave)="updateCursorCanvas($event, false)"></canvas>
5884
5904
  <canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] });
5885
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioSignal, decorators: [{
5905
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioSignal, decorators: [{
5886
5906
  type: Component,
5887
5907
  args: [{ selector: 'audio-signal', template: `
5888
5908
  <canvas #bg height="10"></canvas>
@@ -7021,14 +7041,14 @@ class Sonagram extends AudioCanvasLayerComponent {
7021
7041
  this.playFramePosition = 0;
7022
7042
  }
7023
7043
  }
7024
- Sonagram.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7025
- Sonagram.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
7044
+ Sonagram.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7045
+ Sonagram.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
7026
7046
  <canvas #sonagram height="10"></canvas>
7027
7047
  <canvas #bg height="10"></canvas>
7028
7048
  <canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
7029
7049
  (mouseleave)="updateCursorCanvas($event, false)"></canvas>
7030
7050
  <canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] });
7031
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Sonagram, decorators: [{
7051
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Sonagram, decorators: [{
7032
7052
  type: Component,
7033
7053
  args: [{ selector: 'audio-sonagram', template: `
7034
7054
  <canvas #sonagram height="10"></canvas>
@@ -7401,16 +7421,16 @@ class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
7401
7421
  }
7402
7422
  }
7403
7423
  AudioClipUIContainer.DIVIDER_PIXEL_SIZE = 10;
7404
- AudioClipUIContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioClipUIContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7405
- AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioClipUIContainer, selector: "app-audio", inputs: { audioData: "audioData", audioClip: "audioClip" }, outputs: { selectionEventEmitter: "selectionEventEmitter" }, host: { listeners: { "window:resize": "onResize($event)", "document:mouseup": "onMouseup($event)", "document:mousemove": "onMousemove($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["divider"], descendants: true, static: true }, { propertyName: "ceRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "as", first: true, predicate: AudioSignal, descendants: true, static: true }, { propertyName: "so", first: true, predicate: Sonagram, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
7424
+ AudioClipUIContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioClipUIContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7425
+ AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioClipUIContainer, selector: "app-audio", inputs: { audioData: "audioData", audioClip: "audioClip" }, outputs: { selectionEventEmitter: "selectionEventEmitter" }, host: { listeners: { "window:resize": "onResize($event)", "document:mouseup": "onMouseup($event)", "document:mousemove": "onMousemove($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["divider"], descendants: true, static: true }, { propertyName: "ceRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "as", first: true, predicate: AudioSignal, descendants: true, static: true }, { propertyName: "so", first: true, predicate: Sonagram, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
7406
7426
  <div #virtualCanvas>
7407
7427
  <canvas #divider (mousedown)="mousedown($event)" (mouseover)="mouseover($event)"
7408
7428
  (mouseleave)="mouseleave($event)" height="10"></canvas>
7409
7429
  <audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
7410
7430
  <audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
7411
7431
  </div>
7412
- `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"], dependencies: [{ kind: "component", type: AudioSignal, selector: "audio-signal" }, { kind: "component", type: Sonagram, selector: "audio-sonagram" }] });
7413
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioClipUIContainer, decorators: [{
7432
+ `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;z-index:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;z-index:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;z-index:1;transform:none}\n"], dependencies: [{ kind: "component", type: AudioSignal, selector: "audio-signal" }, { kind: "component", type: Sonagram, selector: "audio-sonagram" }] });
7433
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioClipUIContainer, decorators: [{
7414
7434
  type: Component,
7415
7435
  args: [{ selector: 'app-audio', template: `
7416
7436
  <div #virtualCanvas>
@@ -7419,7 +7439,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
7419
7439
  <audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
7420
7440
  <audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
7421
7441
  </div>
7422
- `, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"] }]
7442
+ `, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;z-index:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;z-index:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;z-index:1;transform:none}\n"] }]
7423
7443
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { canvasRef: [{
7424
7444
  type: ViewChild,
7425
7445
  args: ['divider', { static: true }]
@@ -7555,13 +7575,13 @@ class AudioDisplayScrollPane {
7555
7575
  this.ac.playFramePosition = framePos;
7556
7576
  }
7557
7577
  }
7558
- AudioDisplayScrollPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayScrollPane, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7559
- AudioDisplayScrollPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: { audioClip: "audioClip" }, outputs: { zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomSelectedAction: "zoomSelectedAction", zoomFitToPanelAction: "zoomFitToPanelAction" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "ac", first: true, predicate: AudioClipUIContainer, descendants: true, static: true }], ngImport: i0, template: `
7578
+ AudioDisplayScrollPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayScrollPane, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7579
+ AudioDisplayScrollPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: { audioClip: "audioClip" }, outputs: { zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomSelectedAction: "zoomSelectedAction", zoomFitToPanelAction: "zoomFitToPanelAction" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "ac", first: true, predicate: AudioClipUIContainer, descendants: true, static: true }], ngImport: i0, template: `
7560
7580
 
7561
7581
  <app-audio #audioSignalContainer (selectionEventEmitter)="selectionChanged($event)"></app-audio>
7562
7582
 
7563
7583
  `, isInline: true, styles: [":host{flex:2;width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "app-audio{margin:0;padding:0;top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "component", type: AudioClipUIContainer, selector: "app-audio", inputs: ["audioData", "audioClip"], outputs: ["selectionEventEmitter"] }] });
7564
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayScrollPane, decorators: [{
7584
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayScrollPane, decorators: [{
7565
7585
  type: Component,
7566
7586
  args: [{ selector: 'audio-display-scroll-pane', template: `
7567
7587
 
@@ -7618,8 +7638,8 @@ class AudioDisplayControl {
7618
7638
  this.status = 'ERROR';
7619
7639
  }
7620
7640
  }
7621
- AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayControl, deps: [], target: i0.ɵɵFactoryTarget.Component });
7622
- AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
7641
+ AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayControl, deps: [], target: i0.ɵɵFactoryTarget.Component });
7642
+ AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
7623
7643
  <div #controlPanel style="display:flex;flex-direction: row;">
7624
7644
  <fieldset>
7625
7645
 
@@ -7663,7 +7683,7 @@ AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
7663
7683
 
7664
7684
  </fieldset>
7665
7685
  </div>`, isInline: true, styles: [":host{flex:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i4$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
7666
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayControl, decorators: [{
7686
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayControl, decorators: [{
7667
7687
  type: Component,
7668
7688
  args: [{ selector: 'audio-display-control', template: `
7669
7689
  <div #controlPanel style="display:flex;flex-direction: row;">
@@ -7733,8 +7753,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
7733
7753
  }] } });
7734
7754
 
7735
7755
  class AudioDisplay {
7736
- constructor(route, ref, eRef) {
7737
- this.route = route;
7756
+ constructor(ref, eRef) {
7738
7757
  this.ref = ref;
7739
7758
  this.eRef = eRef;
7740
7759
  this._audioClip = null;
@@ -7797,8 +7816,8 @@ class AudioDisplay {
7797
7816
  this.status = 'ERROR';
7798
7817
  }
7799
7818
  }
7800
- AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplay, deps: [{ token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7801
- AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioDisplay, selector: "app-audiodisplay", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
7819
+ AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplay, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7820
+ AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplay, selector: "app-audiodisplay", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
7802
7821
 
7803
7822
  <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
7804
7823
 
@@ -7812,7 +7831,7 @@ AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
7812
7831
  [zoomSelectedAction]="zoomSelectedAction"
7813
7832
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
7814
7833
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"], dependencies: [{ kind: "component", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] });
7815
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplay, decorators: [{
7834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplay, decorators: [{
7816
7835
  type: Component,
7817
7836
  args: [{ selector: 'app-audiodisplay', template: `
7818
7837
 
@@ -7828,7 +7847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
7828
7847
  [zoomSelectedAction]="zoomSelectedAction"
7829
7848
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
7830
7849
  `, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"] }]
7831
- }], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
7850
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
7832
7851
  type: Input
7833
7852
  }], playStopAction: [{
7834
7853
  type: Input
@@ -7859,11 +7878,11 @@ class ResponsiveComponent {
7859
7878
  });
7860
7879
  }
7861
7880
  }
7862
- ResponsiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ResponsiveComponent, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Directive });
7863
- ResponsiveComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ResponsiveComponent, ngImport: i0 });
7864
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ResponsiveComponent, decorators: [{
7881
+ ResponsiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Directive });
7882
+ ResponsiveComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ResponsiveComponent, ngImport: i0 });
7883
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, decorators: [{
7865
7884
  type: Directive
7866
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; } });
7885
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; } });
7867
7886
 
7868
7887
  class ScrollIntoViewDirective {
7869
7888
  constructor(elRef) {
@@ -7875,9 +7894,9 @@ class ScrollIntoViewDirective {
7875
7894
  }
7876
7895
  }
7877
7896
  }
7878
- ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScrollIntoViewDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
7879
- ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: { scrollIntoViewToBottom: "scrollIntoViewToBottom" }, ngImport: i0 });
7880
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
7897
+ ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollIntoViewDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
7898
+ ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: { scrollIntoViewToBottom: "scrollIntoViewToBottom" }, ngImport: i0 });
7899
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
7881
7900
  type: Directive,
7882
7901
  args: [{
7883
7902
  selector: "[scrollIntoViewToBottom]"
@@ -7924,8 +7943,8 @@ class Progress {
7924
7943
  return cached;
7925
7944
  }
7926
7945
  }
7927
- Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
7928
- Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
7946
+ Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
7947
+ Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
7929
7948
 
7930
7949
  <table class="mat-typography">
7931
7950
  <thead>
@@ -7954,7 +7973,7 @@ Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
7954
7973
  </tbody>
7955
7974
  </table>
7956
7975
  `, isInline: true, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background:white;min-height:1px}\n", "table{min-height:1px;border-collapse:collapse}table,th,td{border:1px solid lightgrey;padding:.5em}\n", ".selRow{background:lightblue}\n", ".promptDescriptor{max-width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }] });
7957
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Progress, decorators: [{
7976
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Progress, decorators: [{
7958
7977
  type: Component,
7959
7978
  args: [{ selector: 'app-sprprogress', template: `
7960
7979
 
@@ -8017,12 +8036,12 @@ class Recinstructions {
8017
8036
  return riTxt;
8018
8037
  }
8019
8038
  }
8020
- Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Recinstructions, deps: [], target: i0.ɵɵFactoryTarget.Component });
8021
- Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Recinstructions, selector: "spr-recinstructions", inputs: { recinstructions: "recinstructions", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount" }, ngImport: i0, template: `
8039
+ Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Recinstructions, deps: [], target: i0.ɵɵFactoryTarget.Component });
8040
+ Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Recinstructions, selector: "spr-recinstructions", inputs: { recinstructions: "recinstructions", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount" }, ngImport: i0, template: `
8022
8041
 
8023
8042
  {{displayText()}}
8024
8043
  `, isInline: true, styles: [":host{justify-content:left;align-items:flex-start;background:white;text-align:left;font-size:1em;flex:0;width:100%}\n"] });
8025
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Recinstructions, decorators: [{
8044
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Recinstructions, decorators: [{
8026
8045
  type: Component,
8027
8046
  args: [{ selector: 'spr-recinstructions', template: `
8028
8047
 
@@ -8196,13 +8215,13 @@ class Prompter {
8196
8215
  }
8197
8216
  }
8198
8217
  }
8199
- Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Prompter, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: ProjectService }], target: i0.ɵɵFactoryTarget.Component });
8200
- Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Prompter, selector: "app-sprprompter", inputs: { projectName: "projectName", prompterHeight: "prompterHeight", promptMediaItems: "promptMediaItems" }, host: { properties: { "class.fill": "this.prompterStyleFill" } }, ngImport: i0, template: `
8218
+ Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompter, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: ProjectService }], target: i0.ɵɵFactoryTarget.Component });
8219
+ Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Prompter, selector: "app-sprprompter", inputs: { projectName: "projectName", prompterHeight: "prompterHeight", promptMediaItems: "promptMediaItems" }, host: { properties: { "class.fill": "this.prompterStyleFill" } }, ngImport: i0, template: `
8201
8220
 
8202
8221
  <!--<ng-template [ngIf]="text">{{text}}</ng-template>-->
8203
8222
  <!-- <img *ngIf="src" #promptImage [src]="srcUrl()" [height]="prompterHeight-20" /> -->
8204
8223
  `, isInline: true, styles: [":host{justify-content:center;align-items:center;background:white;text-align:center;line-height:1.2em;font-weight:700;flex:0 1}\n", ":host(.fill){flex:3;width:100%;height:100%;max-height:100%;max-width:100%;vertical-align:middle}\n"] });
8205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Prompter, decorators: [{
8224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompter, decorators: [{
8206
8225
  type: Component,
8207
8226
  args: [{ selector: 'app-sprprompter', template: `
8208
8227
 
@@ -8350,11 +8369,11 @@ class PromptContainer {
8350
8369
  }
8351
8370
  }
8352
8371
  }
8353
- PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PromptContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
8354
- PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: { projectName: "projectName", mediaitems: "mediaitems" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "prompter", first: true, predicate: Prompter, descendants: true, static: true }], ngImport: i0, template: `
8372
+ PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PromptContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
8373
+ PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: { projectName: "projectName", mediaitems: "mediaitems" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "prompter", first: true, predicate: Prompter, descendants: true, static: true }], ngImport: i0, template: `
8355
8374
  <app-sprprompter #prompter [projectName]="projectName" [promptMediaItems]="mediaitems" [style.font-size]="fontSize+'px'" [style.visibility]="prDisplay" [prompterHeight]="prompterHeight"></app-sprprompter>
8356
8375
  `, isInline: true, styles: [":host{flex:3;padding:10pt;height:100%;max-height:100%;justify-content:center;align-items:center;background:white;text-align:center;display:flex;flex-direction:column;min-height:0px;width:100%}\n"], dependencies: [{ kind: "component", type: Prompter, selector: "app-sprprompter", inputs: ["projectName", "prompterHeight", "promptMediaItems"] }] });
8357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PromptContainer, decorators: [{
8376
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PromptContainer, decorators: [{
8358
8377
  type: Component,
8359
8378
  args: [{ selector: 'app-sprpromptcontainer', template: `
8360
8379
  <app-sprprompter #prompter [projectName]="projectName" [promptMediaItems]="mediaitems" [style.font-size]="fontSize+'px'" [style.visibility]="prDisplay" [prompterHeight]="prompterHeight"></app-sprprompter>
@@ -8477,15 +8496,15 @@ class PromptingContainer {
8477
8496
  //ev.preventDefault();
8478
8497
  }
8479
8498
  }
8480
- PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PromptingContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
8481
- PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: { projectName: "projectName", promptItem: "promptItem", showPrompt: "showPrompt", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount", transportActions: "transportActions" }, host: { listeners: { "touchstart": "onTouchstart($event)", "touchend": "onTouchEnd($event)", "touchmove": "onTouchMove($event)", "touchcancel": "onTouchCancel($event)" } }, ngImport: i0, template: `
8499
+ PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PromptingContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
8500
+ PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: { projectName: "projectName", promptItem: "promptItem", showPrompt: "showPrompt", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount", transportActions: "transportActions" }, host: { listeners: { "touchstart": "onTouchstart($event)", "touchend": "onTouchEnd($event)", "touchmove": "onTouchMove($event)", "touchcancel": "onTouchCancel($event)" } }, ngImport: i0, template: `
8482
8501
  <spr-recinstructions [selectedItemIdx]="selectedItemIdx" [itemCount]="itemCount"
8483
8502
  [recinstructions]="promptItem?.recinstructions?.recinstructions"></spr-recinstructions>
8484
8503
  <app-sprpromptcontainer [projectName]="projectName"
8485
8504
  [mediaitems]="showPrompt?(promptItem?promptItem.mediaitems:null):null"></app-sprpromptcontainer>
8486
8505
 
8487
8506
  `, isInline: true, styles: [":host{position:relative;flex:3;padding:10pt;justify-content:center;align-items:center;background:white;text-align:center;display:flex;flex-direction:column;min-height:0px}\n"], dependencies: [{ kind: "component", type: Recinstructions, selector: "spr-recinstructions", inputs: ["recinstructions", "selectedItemIdx", "itemCount"] }, { kind: "component", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: ["projectName", "mediaitems"] }] });
8488
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PromptingContainer, decorators: [{
8507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PromptingContainer, decorators: [{
8489
8508
  type: Component,
8490
8509
  args: [{ selector: 'app-sprpromptingcontainer', template: `
8491
8510
  <spr-recinstructions [selectedItemIdx]="selectedItemIdx" [itemCount]="itemCount"
@@ -8543,8 +8562,8 @@ class Prompting extends ResponsiveComponent {
8543
8562
  this.onPrevItem.emit();
8544
8563
  }
8545
8564
  }
8546
- Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Prompting, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
8547
- Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Prompting, selector: "app-sprprompting", inputs: { projectName: "projectName", startStopSignalState: "startStopSignalState", promptItem: "promptItem", showPrompt: "showPrompt", items: "items", selectedItemIdx: "selectedItemIdx", transportActions: "transportActions", enableDownload: "enableDownload", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { onItemSelect: "onItemSelect", onNextItem: "onNextItem", onPrevItem: "onPrevItem" }, viewQueries: [{ propertyName: "simpleTrafficLight", first: true, predicate: SimpleTrafficLight, descendants: true, static: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
8565
+ Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
8566
+ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Prompting, selector: "app-sprprompting", inputs: { projectName: "projectName", startStopSignalState: "startStopSignalState", promptItem: "promptItem", showPrompt: "showPrompt", items: "items", selectedItemIdx: "selectedItemIdx", transportActions: "transportActions", enableDownload: "enableDownload", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { onItemSelect: "onItemSelect", onNextItem: "onNextItem", onPrevItem: "onPrevItem" }, viewQueries: [{ propertyName: "simpleTrafficLight", first: true, predicate: SimpleTrafficLight, descendants: true, static: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
8548
8567
 
8549
8568
  <app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
8550
8569
  <app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
@@ -8567,7 +8586,7 @@ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14
8567
8586
 
8568
8587
 
8569
8588
  `, isInline: true, styles: [":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "app-simpletrafficlight{margin:10px;min-height:0px;z-index:3}\n", "app-sprprogress{z-index:3}\n", "div{display:none;position:absolute;z-index:5}\n", "div.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:5;box-sizing:border-box;background-color:#0000}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }, { kind: "component", type: Progress, selector: "app-sprprogress", inputs: ["items", "selectedItemIdx", "enableDownload"], outputs: ["onRowSelect", "rowSelect", "onShowDoneAction", "clickDone", "onDownloadDoneAction", "clickDownloadDone"] }, { kind: "component", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: ["status"] }, { kind: "component", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: ["projectName", "promptItem", "showPrompt", "selectedItemIdx", "itemCount", "transportActions"] }] });
8570
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Prompting, decorators: [{
8589
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, decorators: [{
8571
8590
  type: Component,
8572
8591
  args: [{ selector: 'app-sprprompting', template: `
8573
8592
 
@@ -8592,7 +8611,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
8592
8611
 
8593
8612
 
8594
8613
  `, styles: [":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "app-simpletrafficlight{margin:10px;min-height:0px;z-index:3}\n", "app-sprprogress{z-index:3}\n", "div{display:none;position:absolute;z-index:5}\n", "div.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:5;box-sizing:border-box;background-color:#0000}\n"] }]
8595
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { simpleTrafficLight: [{
8614
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { simpleTrafficLight: [{
8596
8615
  type: ViewChild,
8597
8616
  args: [SimpleTrafficLight, { static: true }]
8598
8617
  }], audioDisplay: [{
@@ -8643,8 +8662,8 @@ class SessionFinishedDialog {
8643
8662
  this.dialogRef.close();
8644
8663
  }
8645
8664
  }
8646
- SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1$4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
8647
- SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SessionFinishedDialog, selector: "spr-session-finished-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon [style.color]="'green'">done_all</mat-icon> Session finished</h1>
8665
+ SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1$3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
8666
+ SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SessionFinishedDialog, selector: "spr-session-finished-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon [style.color]="'green'">done_all</mat-icon> Session finished</h1>
8648
8667
  <div mat-dialog-content>
8649
8668
 
8650
8669
  <p>Thank you! The recording session is complete.</p>
@@ -8653,8 +8672,8 @@ SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
8653
8672
  <div mat-dialog-actions>
8654
8673
  <button mat-button (click)="closeDialog()">OK</button>
8655
8674
  </div>
8656
- `, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
8657
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionFinishedDialog, decorators: [{
8675
+ `, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
8676
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionFinishedDialog, decorators: [{
8658
8677
  type: Component,
8659
8678
  args: [{
8660
8679
  selector: 'spr-session-finished-dialog',
@@ -8670,7 +8689,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
8670
8689
  `
8671
8690
  }]
8672
8691
  }], ctorParameters: function () {
8673
- return [{ type: i1$4.MatDialogRef }, { type: undefined, decorators: [{
8692
+ return [{ type: i1$3.MatDialogRef }, { type: undefined, decorators: [{
8674
8693
  type: Inject,
8675
8694
  args: [MAT_DIALOG_DATA]
8676
8695
  }] }];
@@ -8685,8 +8704,8 @@ class MessageDialog {
8685
8704
  this.dialogRef.close();
8686
8705
  }
8687
8706
  }
8688
- MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MessageDialog, deps: [{ token: i1$4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
8689
- MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MessageDialog, selector: "msg-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon *ngIf="data.type==='error'" [style.color]="'red'">error</mat-icon>
8707
+ MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, deps: [{ token: i1$3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
8708
+ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: MessageDialog, selector: "msg-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon *ngIf="data.type==='error'" [style.color]="'red'">error</mat-icon>
8690
8709
  <mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
8691
8710
  <div mat-dialog-content>
8692
8711
 
@@ -8697,8 +8716,8 @@ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
8697
8716
  <div mat-dialog-actions>
8698
8717
  <button mat-button (click)="closeDialog()">OK</button>
8699
8718
  </div>
8700
- `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.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.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
8701
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MessageDialog, decorators: [{
8719
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.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.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
8720
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, decorators: [{
8702
8721
  type: Component,
8703
8722
  args: [{
8704
8723
  selector: 'msg-dialog',
@@ -8716,7 +8735,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
8716
8735
  `
8717
8736
  }]
8718
8737
  }], ctorParameters: function () {
8719
- return [{ type: i1$4.MatDialogRef }, { type: undefined, decorators: [{
8738
+ return [{ type: i1$3.MatDialogRef }, { type: undefined, decorators: [{
8720
8739
  type: Inject,
8721
8740
  args: [MAT_DIALOG_DATA]
8722
8741
  }] }];
@@ -9019,62 +9038,64 @@ let BasicRecordingService = class BasicRecordingService {
9019
9038
  ausps.set('requestUUID', UUID.generate());
9020
9039
  }
9021
9040
  let obs = new Observable(observer => {
9022
- this.audioRequestByURL(baseAudioUrl, ausps).subscribe(resp => {
9023
- // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9024
- if (resp.body) {
9025
- //console.debug("chunkAudioRequest: observer.closed: "+observer.closed);
9026
- //console.debug("Audio file bytes: "+resp.body.byteLength);
9027
- // Check original audio format
9028
- let wr = new WavReader(resp.body);
9029
- const pcmFmt = wr.readFormat();
9030
- const orgFl = wr.frameLength();
9031
- // if(pcmFmt){
9032
- // console.debug("Original WAVE format of download chunk: "+pcmFmt);
9033
- // }else{
9034
- // console.error("Could not read WAVE format of original download chunk!");
9035
- // }
9036
- // if(orgFl){
9037
- // console.debug("Original frame length of download chunk: "+orgFl);
9038
- // }else{
9039
- // console.error("Could not read WAVE format of original download chunk!");
9040
- // }
9041
- if (pcmFmt && orgFl) {
9042
- aCtx.decodeAudioData(resp.body, ab => {
9043
- //console.debug("Decoded audio chunk frames: "+ab.length);
9044
- let chDl = new ChunkDownload(pcmFmt, orgFl, ab);
9045
- observer.next(chDl);
9046
- observer.complete();
9047
- }, error => {
9048
- //if(error instanceof HttpErrorResponse) {
9049
- // if (error.status == 404) {
9050
- // // Interpret not as an error, the file ist not recorded yet
9051
- // observer.next(null);
9052
- // observer.complete()
9053
- // } else {
9054
- // // all other states are errors
9055
- console.error("Recordings service chunkAudioRequest error decoding audio data: " + error.name + ": " + error.message);
9056
- observer.error(error);
9057
- // }
9058
- // }
9059
- });
9041
+ this.audioRequestByURL(baseAudioUrl, ausps).subscribe({
9042
+ next: resp => {
9043
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9044
+ if (resp.body) {
9045
+ //console.debug("chunkAudioRequest: observer.closed: "+observer.closed);
9046
+ //console.debug("Audio file bytes: "+resp.body.byteLength);
9047
+ // Check original audio format
9048
+ let wr = new WavReader(resp.body);
9049
+ const pcmFmt = wr.readFormat();
9050
+ const orgFl = wr.frameLength();
9051
+ // if(pcmFmt){
9052
+ // console.debug("Original WAVE format of download chunk: "+pcmFmt);
9053
+ // }else{
9054
+ // console.error("Could not read WAVE format of original download chunk!");
9055
+ // }
9056
+ // if(orgFl){
9057
+ // console.debug("Original frame length of download chunk: "+orgFl);
9058
+ // }else{
9059
+ // console.error("Could not read WAVE format of original download chunk!");
9060
+ // }
9061
+ if (pcmFmt && orgFl) {
9062
+ aCtx.decodeAudioData(resp.body, ab => {
9063
+ //console.debug("Decoded audio chunk frames: "+ab.length);
9064
+ let chDl = new ChunkDownload(pcmFmt, orgFl, ab);
9065
+ observer.next(chDl);
9066
+ observer.complete();
9067
+ }, error => {
9068
+ //if(error instanceof HttpErrorResponse) {
9069
+ // if (error.status == 404) {
9070
+ // // Interpret not as an error, the file ist not recorded yet
9071
+ // observer.next(null);
9072
+ // observer.complete()
9073
+ // } else {
9074
+ // // all other states are errors
9075
+ console.error("Recordings service chunkAudioRequest error decoding audio data: " + error.name + ": " + error.message);
9076
+ observer.error(error);
9077
+ // }
9078
+ // }
9079
+ });
9080
+ }
9081
+ else {
9082
+ const errMsg = 'Could not parse audio header for format and/or frame length of download.';
9083
+ console.error(errMsg);
9084
+ observer.error(errMsg);
9085
+ }
9060
9086
  }
9061
9087
  else {
9062
- const errMsg = 'Could not parse audio header for format and/or frame length of download.';
9088
+ const errMsg = 'Fetching audio file: response has no body';
9063
9089
  console.error(errMsg);
9064
9090
  observer.error(errMsg);
9065
9091
  }
9092
+ }, error: (error) => {
9093
+ // all other states are errors
9094
+ //const errMsg='Fetching audio file HTTP error: '+error;
9095
+ //console.error(errMsg);
9096
+ observer.error(error);
9097
+ //observer.complete();
9066
9098
  }
9067
- else {
9068
- const errMsg = 'Fetching audio file: response has no body';
9069
- console.error(errMsg);
9070
- observer.error(errMsg);
9071
- }
9072
- }, (error) => {
9073
- // all other states are errors
9074
- //const errMsg='Fetching audio file HTTP error: '+error;
9075
- //console.error(errMsg);
9076
- observer.error(error);
9077
- //observer.complete();
9078
9099
  });
9079
9100
  });
9080
9101
  return obs;
@@ -9644,36 +9665,38 @@ class RecordingService extends BasicRecordingService {
9644
9665
  }
9645
9666
  if (recordingFile.session && recFileId) {
9646
9667
  let obs = this.fetchAudiofile(projectName, recordingFile.session, recFileId);
9647
- obs.subscribe(resp => {
9648
- // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9649
- if (resp.body) {
9650
- aCtx.decodeAudioData(resp.body, ab => {
9651
- observer.next(ab);
9652
- observer.complete();
9653
- }, error => {
9654
- observer.error(error);
9655
- observer.complete();
9656
- });
9657
- }
9658
- else {
9659
- observer.error('Fetching audio file: response has no body');
9660
- }
9661
- }, (err) => {
9662
- if (err instanceof HttpErrorResponse) {
9663
- if (err.status == 404) {
9664
- // Interpret not as an error, the file ist not recorded yet
9665
- observer.next(null);
9666
- observer.complete();
9668
+ obs.subscribe({
9669
+ next: resp => {
9670
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9671
+ if (resp.body) {
9672
+ aCtx.decodeAudioData(resp.body, ab => {
9673
+ observer.next(ab);
9674
+ observer.complete();
9675
+ }, error => {
9676
+ observer.error(error);
9677
+ observer.complete();
9678
+ });
9679
+ }
9680
+ else {
9681
+ observer.error('Fetching audio file: response has no body');
9682
+ }
9683
+ }, error: (err) => {
9684
+ if (err instanceof HttpErrorResponse) {
9685
+ if (err.status == 404) {
9686
+ // Interpret not as an error, the file ist not recorded yet
9687
+ observer.next(null);
9688
+ observer.complete();
9689
+ }
9690
+ else {
9691
+ // all other states are errors
9692
+ observer.error(err);
9693
+ observer.complete();
9694
+ }
9667
9695
  }
9668
9696
  else {
9669
- // all other states are errors
9670
9697
  observer.error(err);
9671
- observer.complete();
9672
9698
  }
9673
9699
  }
9674
- else {
9675
- observer.error(err);
9676
- }
9677
9700
  });
9678
9701
  }
9679
9702
  else {
@@ -9690,49 +9713,50 @@ class RecordingService extends BasicRecordingService {
9690
9713
  }
9691
9714
  if (recordingFile.session && recFileId) {
9692
9715
  let obs = this.fetchAudiofile(projectName, recordingFile.session, recFileId);
9693
- obs.subscribe(resp => {
9694
- //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
9695
- // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9696
- if (resp.body) {
9697
- aCtx.decodeAudioData(resp.body, ab => {
9698
- let abs = new AudioBufferSource(ab);
9699
- let adh = new AudioDataHolder(abs);
9700
- RecordingFileUtils.setAudioData(recordingFile, adh);
9701
- if (this.debugDelay > 0) {
9702
- window.setTimeout(() => {
9716
+ obs.subscribe({ next: resp => {
9717
+ //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
9718
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9719
+ if (resp.body) {
9720
+ aCtx.decodeAudioData(resp.body, ab => {
9721
+ let abs = new AudioBufferSource(ab);
9722
+ let adh = new AudioDataHolder(abs);
9723
+ RecordingFileUtils.setAudioData(recordingFile, adh);
9724
+ if (this.debugDelay > 0) {
9725
+ window.setTimeout(() => {
9726
+ observer.next(recordingFile);
9727
+ observer.complete();
9728
+ }, this.debugDelay);
9729
+ }
9730
+ else {
9703
9731
  observer.next(recordingFile);
9704
9732
  observer.complete();
9705
- }, this.debugDelay);
9733
+ }
9734
+ }, error => {
9735
+ observer.error(error);
9736
+ observer.complete();
9737
+ });
9738
+ }
9739
+ else {
9740
+ observer.error('Fetching audio file: response has no body');
9741
+ }
9742
+ },
9743
+ error: (err) => {
9744
+ if (err instanceof HttpErrorResponse) {
9745
+ if (err.status == 404) {
9746
+ // Interpret not as an error, the file ist not recorded yet
9747
+ observer.next(null);
9748
+ observer.complete();
9706
9749
  }
9707
9750
  else {
9708
- observer.next(recordingFile);
9751
+ // all other states are errors
9752
+ observer.error(err);
9709
9753
  observer.complete();
9710
9754
  }
9711
- }, error => {
9712
- observer.error(error);
9713
- observer.complete();
9714
- });
9715
- }
9716
- else {
9717
- observer.error('Fetching audio file: response has no body');
9718
- }
9719
- }, (err) => {
9720
- if (err instanceof HttpErrorResponse) {
9721
- if (err.status == 404) {
9722
- // Interpret not as an error, the file ist not recorded yet
9723
- observer.next(null);
9724
- observer.complete();
9725
9755
  }
9726
9756
  else {
9727
- // all other states are errors
9728
9757
  observer.error(err);
9729
- observer.complete();
9730
9758
  }
9731
- }
9732
- else {
9733
- observer.error(err);
9734
- }
9735
- });
9759
+ } });
9736
9760
  }
9737
9761
  else {
9738
9762
  observer.error();
@@ -10054,83 +10078,88 @@ class RecordingService extends BasicRecordingService {
10054
10078
  let wobs = new Observable(observer => {
10055
10079
  if (recordingFile.session) {
10056
10080
  let obs = this.fetchSprAudiofile(projectName, recordingFile.session, recordingFile.itemCode, recordingFile.version);
10057
- obs.subscribe(resp => {
10058
- //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
10059
- // Do not use Promise version, which does not work with Safari 13 (13.0.5)
10081
+ obs.subscribe({
10082
+ next: resp => {
10083
+ //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
10084
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
10085
+ if (resp.body) {
10086
+ aCtx.decodeAudioData(resp.body, ab => {
10087
+ let abs = new AudioBufferSource(ab);
10088
+ RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(abs));
10089
+ if (this.debugDelay > 0) {
10090
+ window.setTimeout(() => {
10091
+ observer.next(recordingFile);
10092
+ observer.complete();
10093
+ }, this.debugDelay);
10094
+ }
10095
+ else {
10096
+ observer.next(recordingFile);
10097
+ observer.complete();
10098
+ }
10099
+ }, error => {
10100
+ observer.error(error);
10101
+ observer.complete();
10102
+ });
10103
+ }
10104
+ else {
10105
+ observer.error('Fetching audio file: response has no body');
10106
+ }
10107
+ },
10108
+ error: (err) => {
10109
+ if (err instanceof HttpErrorResponse && err.status == 404) {
10110
+ // Interpret not as an error, the file ist not recorded yet
10111
+ observer.next(null);
10112
+ observer.complete();
10113
+ }
10114
+ else {
10115
+ // all other states are errors
10116
+ observer.error(err);
10117
+ }
10118
+ }
10119
+ });
10120
+ }
10121
+ else {
10122
+ observer.error();
10123
+ }
10124
+ });
10125
+ return wobs;
10126
+ }
10127
+ fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
10128
+ let wobs = new Observable(observer => {
10129
+ let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
10130
+ obs.subscribe({ next: resp => {
10131
+ // Do not use Promise version, which does not work with Safari 13
10060
10132
  if (resp.body) {
10061
10133
  aCtx.decodeAudioData(resp.body, ab => {
10062
10134
  let abs = new AudioBufferSource(ab);
10063
- RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(abs));
10135
+ let adh = new AudioDataHolder(abs);
10136
+ let rf = new SprRecordingFile(sessId, itemcode, version, adh);
10064
10137
  if (this.debugDelay > 0) {
10065
10138
  window.setTimeout(() => {
10066
- observer.next(recordingFile);
10139
+ observer.next(rf);
10067
10140
  observer.complete();
10068
10141
  }, this.debugDelay);
10069
10142
  }
10070
10143
  else {
10071
- observer.next(recordingFile);
10144
+ observer.next(rf);
10072
10145
  observer.complete();
10073
10146
  }
10074
- }, error => {
10075
- observer.error(error);
10076
- observer.complete();
10077
10147
  });
10078
10148
  }
10079
10149
  else {
10080
- observer.error('Fetching audio file: response has no body');
10150
+ observer.error();
10081
10151
  }
10082
- }, (err) => {
10152
+ },
10153
+ error: (err) => {
10083
10154
  if (err instanceof HttpErrorResponse && err.status == 404) {
10084
10155
  // Interpret not as an error, the file ist not recorded yet
10085
10156
  observer.next(null);
10086
10157
  observer.complete();
10087
10158
  }
10088
10159
  else {
10089
- // all other states are errors
10160
+ // all other errors are real errors
10090
10161
  observer.error(err);
10091
10162
  }
10092
- });
10093
- }
10094
- else {
10095
- observer.error();
10096
- }
10097
- });
10098
- return wobs;
10099
- }
10100
- fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
10101
- let wobs = new Observable(observer => {
10102
- let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
10103
- obs.subscribe(resp => {
10104
- // Do not use Promise version, which does not work with Safari 13
10105
- if (resp.body) {
10106
- aCtx.decodeAudioData(resp.body, ab => {
10107
- let abs = new AudioBufferSource(ab);
10108
- let adh = new AudioDataHolder(abs);
10109
- let rf = new SprRecordingFile(sessId, itemcode, version, adh);
10110
- if (this.debugDelay > 0) {
10111
- window.setTimeout(() => {
10112
- observer.next(rf);
10113
- observer.complete();
10114
- }, this.debugDelay);
10115
- }
10116
- else {
10117
- observer.next(rf);
10118
- observer.complete();
10119
- }
10120
- });
10121
- }
10122
- else {
10123
- observer.error();
10124
- }
10125
- }, (err) => {
10126
- if (err instanceof HttpErrorResponse && err.status == 404) {
10127
- // Interpret not as an error, the file ist not recorded yet
10128
- observer.next(null);
10129
- observer.complete();
10130
- }
10131
- else {
10132
- // all other errors are real errors
10133
- observer.error(err);
10134
10163
  }
10135
10164
  });
10136
10165
  });
@@ -10141,9 +10170,9 @@ class RecordingService extends BasicRecordingService {
10141
10170
  //public static readonly DEFAULT_CHUNKED_DOWNLOAD_SECONDS:number=4;
10142
10171
  RecordingService.REC_API_CTX = 'recfile';
10143
10172
  RecordingService.RECORDING_API_CTX = 'recordingfile';
10144
- RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
10145
- RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingService });
10146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingService, decorators: [{
10173
+ RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
10174
+ RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingService });
10175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingService, decorators: [{
10147
10176
  type: Injectable
10148
10177
  }], ctorParameters: function () {
10149
10178
  return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
@@ -10520,14 +10549,14 @@ class LevelBar {
10520
10549
  }
10521
10550
  }
10522
10551
  }
10523
- LevelBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LevelBar, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
10524
- LevelBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: LevelBar, selector: "audio-levelbar", inputs: { streamingMode: "streamingMode", displayLevelInfos: "displayLevelInfos", state: "state" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "virtualCanvasRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "liveLevelCanvasRef", first: true, predicate: ["levelbar"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["markerCanvas"], descendants: true, static: true }], ngImport: i0, template: `
10552
+ LevelBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LevelBar, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
10553
+ LevelBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: LevelBar, selector: "audio-levelbar", inputs: { streamingMode: "streamingMode", displayLevelInfos: "displayLevelInfos", state: "state" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "virtualCanvasRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "liveLevelCanvasRef", first: true, predicate: ["levelbar"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["markerCanvas"], descendants: true, static: true }], ngImport: i0, template: `
10525
10554
  <div #virtualCanvas>
10526
10555
  <canvas #levelbar></canvas>
10527
10556
  <canvas #markerCanvas></canvas>
10528
10557
  </div>
10529
10558
  `, isInline: true, styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "div{top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n", "canvas{top:0;left:0;width:100%;height:100%;position:absolute}\n"] });
10530
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LevelBar, decorators: [{
10559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LevelBar, decorators: [{
10531
10560
  type: Component,
10532
10561
  args: [{ selector: 'audio-levelbar', template: `
10533
10562
  <div #virtualCanvas>
@@ -10565,14 +10594,14 @@ class StatusDisplay {
10565
10594
  this.statusWaiting = false;
10566
10595
  }
10567
10596
  }
10568
- StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
10569
- StatusDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
10597
+ StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
10598
+ StatusDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
10570
10599
  <p matTooltip="Status">
10571
10600
  <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>
10572
10601
  {{statusMsg}}
10573
10602
  </p>
10574
10603
  `, 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$1.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$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
10575
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StatusDisplay, decorators: [{
10604
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: StatusDisplay, decorators: [{
10576
10605
  type: Component,
10577
10606
  args: [{ selector: 'app-sprstatusdisplay', template: `
10578
10607
  <p matTooltip="Status">
@@ -10591,7 +10620,7 @@ class UploadStatus {
10591
10620
  constructor() {
10592
10621
  this._awaitNewUpload = false;
10593
10622
  this.spinnerMode = 'determinate';
10594
- this._colorStatus = 'primary';
10623
+ this.colorStatus = 'primary';
10595
10624
  this._value = 100;
10596
10625
  this.displayValue = null;
10597
10626
  this.toolTipText = '';
@@ -10630,13 +10659,13 @@ class UploadStatus {
10630
10659
  set status(status) {
10631
10660
  this._status = status;
10632
10661
  if ('accent' === status) {
10633
- this._colorStatus = 'accent';
10662
+ this.colorStatus = 'accent';
10634
10663
  }
10635
10664
  else if ('warn' === status) {
10636
- this._colorStatus = 'warn';
10665
+ this.colorStatus = 'warn';
10637
10666
  }
10638
10667
  else {
10639
- this._colorStatus = 'primary';
10668
+ this.colorStatus = 'primary';
10640
10669
  }
10641
10670
  this._updateSpinner();
10642
10671
  }
@@ -10644,14 +10673,16 @@ class UploadStatus {
10644
10673
  return this._status;
10645
10674
  }
10646
10675
  }
10647
- UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
10648
- UploadStatus.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
10649
- <mat-progress-spinner [mode]="spinnerMode" [color]="status" [diameter]="30" [strokeWidth]="5" [value]="_value" [matTooltip]="toolTipText"></mat-progress-spinner>
10676
+ UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
10677
+ UploadStatus.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
10678
+ <mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
10679
+ [matTooltip]="toolTipText"></mat-progress-spinner>
10650
10680
  `, isInline: true, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"], dependencies: [{ kind: "component", type: i3$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
10651
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UploadStatus, decorators: [{
10681
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UploadStatus, decorators: [{
10652
10682
  type: Component,
10653
10683
  args: [{ selector: 'app-uploadstatus', template: `
10654
- <mat-progress-spinner [mode]="spinnerMode" [color]="status" [diameter]="30" [strokeWidth]="5" [value]="_value" [matTooltip]="toolTipText"></mat-progress-spinner>
10684
+ <mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
10685
+ [matTooltip]="toolTipText"></mat-progress-spinner>
10655
10686
  `, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"] }]
10656
10687
  }], propDecorators: { value: [{
10657
10688
  type: Input
@@ -10665,11 +10696,11 @@ class ProgressDisplay {
10665
10696
  this.progressMsg = '[itemcode]';
10666
10697
  }
10667
10698
  }
10668
- ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
10669
- ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
10699
+ ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
10700
+ ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
10670
10701
  <p>{{progressMsg}}</p>
10671
10702
  `, isInline: true, styles: [":host{flex:1;width:100%;text-align:left}\n"] });
10672
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgressDisplay, decorators: [{
10703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProgressDisplay, decorators: [{
10673
10704
  type: Component,
10674
10705
  args: [{ selector: 'app-sprprogressdisplay', template: `
10675
10706
  <p>{{progressMsg}}</p>
@@ -10760,8 +10791,8 @@ class TransportPanel extends ResponsiveComponent {
10760
10791
  }
10761
10792
  }
10762
10793
  }
10763
- TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TransportPanel, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
10764
- TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, usesInheritance: true, ngImport: i0, template: `
10794
+ TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
10795
+ TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, usesInheritance: true, ngImport: i0, template: `
10765
10796
  <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
10766
10797
  mat-raised-button>
10767
10798
  <mat-icon>chevron_left</mat-icon>
@@ -10782,7 +10813,7 @@ TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
10782
10813
  </button>
10783
10814
 
10784
10815
  `, 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"], dependencies: [{ kind: "directive", type: i1$1.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.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
10785
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TransportPanel, decorators: [{
10816
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, decorators: [{
10786
10817
  type: Component,
10787
10818
  args: [{ selector: 'app-sprtransport', template: `
10788
10819
  <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
@@ -10805,7 +10836,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
10805
10836
  </button>
10806
10837
 
10807
10838
  `, 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"] }]
10808
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { readonly: [{
10839
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { readonly: [{
10809
10840
  type: Input
10810
10841
  }], actions: [{
10811
10842
  type: Input
@@ -10822,11 +10853,11 @@ class WakeLockIndicator {
10822
10853
  this._screenLocked = screenLock;
10823
10854
  }
10824
10855
  }
10825
- WakeLockIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
10826
- WakeLockIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
10856
+ WakeLockIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
10857
+ WakeLockIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
10827
10858
  <mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
10828
10859
  `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
10829
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WakeLockIndicator, decorators: [{
10860
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WakeLockIndicator, decorators: [{
10830
10861
  type: Component,
10831
10862
  args: [{ selector: 'app-wakelockindicator', template: `
10832
10863
  <mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
@@ -10849,11 +10880,11 @@ class ReadyStateIndicator {
10849
10880
  return this._ready;
10850
10881
  }
10851
10882
  }
10852
- ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
10853
- ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
10883
+ ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
10884
+ ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
10854
10885
  <mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
10855
10886
  `, 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]", exportAs: ["matTooltip"] }] });
10856
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReadyStateIndicator, decorators: [{
10887
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ReadyStateIndicator, decorators: [{
10857
10888
  type: Component,
10858
10889
  args: [{ selector: 'app-readystateindicator', template: `
10859
10890
  <mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
@@ -10877,8 +10908,8 @@ class ControlPanel extends ResponsiveComponent {
10877
10908
  return this._ready;
10878
10909
  }
10879
10910
  }
10880
- ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ControlPanel, deps: [{ token: i1$3.BreakpointObserver }, { token: i1$4.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
10881
- ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", 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: `
10911
+ ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i1$2.BreakpointObserver }, { token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
10912
+ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.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: `
10882
10913
  <div *ngIf="!screenXs" style="flex-direction: row" >
10883
10914
  <app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10884
10915
  class="hidden-xs"></app-sprstatusdisplay>
@@ -10887,9 +10918,9 @@ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
10887
10918
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10888
10919
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10889
10920
  </div>
10890
- <div *ngIf="screenXs"style="flex-direction: column" >
10921
+ <div *ngIf="screenXs" style="flex-direction: column" >
10891
10922
  <div style="flex-direction: row" class="flexFill" >
10892
- <app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10923
+ <app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10893
10924
  class="hidden-xs"></app-sprstatusdisplay>
10894
10925
  <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10895
10926
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
@@ -10899,7 +10930,7 @@ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
10899
10930
 
10900
10931
  </div>
10901
10932
  `, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type: i1$1.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"] }] });
10902
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ControlPanel, decorators: [{
10933
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, decorators: [{
10903
10934
  type: Component,
10904
10935
  args: [{ selector: 'app-sprcontrolpanel', template: `
10905
10936
  <div *ngIf="!screenXs" style="flex-direction: row" >
@@ -10910,9 +10941,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
10910
10941
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10911
10942
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10912
10943
  </div>
10913
- <div *ngIf="screenXs"style="flex-direction: column" >
10944
+ <div *ngIf="screenXs" style="flex-direction: column" >
10914
10945
  <div style="flex-direction: row" class="flexFill" >
10915
- <app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10946
+ <app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10916
10947
  class="hidden-xs"></app-sprstatusdisplay>
10917
10948
  <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10918
10949
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
@@ -10922,7 +10953,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
10922
10953
 
10923
10954
  </div>
10924
10955
  `, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
10925
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i1$4.MatDialog }]; }, propDecorators: { statusDisplay: [{
10956
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i1$3.MatDialog }]; }, propDecorators: { statusDisplay: [{
10926
10957
  type: ViewChild,
10927
10958
  args: [StatusDisplay, { static: true }]
10928
10959
  }], transportPanel: [{
@@ -11577,8 +11608,8 @@ class RecordingItemControls extends ResponsiveComponent {
11577
11608
  // this.status = 'ERROR';
11578
11609
  }
11579
11610
  }
11580
- RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingItemControls, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11581
- RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: { audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", peakDbLvl: "peakDbLvl", agc: "agc", disableAudioDetails: "disableAudioDetails", audioLoaded: "audioLoaded", playStartAction: "playStartAction", playStopAction: "playStopAction", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, usesInheritance: true, ngImport: i0, template: `
11611
+ RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, deps: [{ token: i1$2.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11612
+ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: { audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", peakDbLvl: "peakDbLvl", agc: "agc", disableAudioDetails: "disableAudioDetails", audioLoaded: "audioLoaded", playStartAction: "playStartAction", playStopAction: "playStopAction", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, usesInheritance: true, ngImport: i0, template: `
11582
11613
  <button matTooltip="Start playback" (click)="playStartAction?.perform()"
11583
11614
  [disabled]="playStartAction?.disabled"
11584
11615
  [style.color]="playStartAction?.disabled ? 'grey' : 'green'">
@@ -11601,7 +11632,7 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
11601
11632
  [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
11602
11633
  <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
11603
11634
  `, isInline: true, styles: [":host{flex:0;width:100%;background:darkgray;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
11604
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingItemControls, decorators: [{
11635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, decorators: [{
11605
11636
  type: Component,
11606
11637
  args: [{ selector: 'spr-recordingitemcontrols', template: `
11607
11638
  <button matTooltip="Start playback" (click)="playStartAction?.perform()"
@@ -11626,7 +11657,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
11626
11657
  [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
11627
11658
  <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
11628
11659
  `, styles: [":host{flex:0;width:100%;background:darkgray;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"] }]
11629
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
11660
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
11630
11661
  type: Input
11631
11662
  }], enableDownload: [{
11632
11663
  type: Input
@@ -11707,7 +11738,7 @@ class RecordingItemDisplay extends ResponsiveComponent {
11707
11738
  let peakDBVal = levelInfo.powerLevelDB();
11708
11739
  if (this.peakDbLvl < peakDBVal) {
11709
11740
  this.peakDbLvl = peakDBVal;
11710
- // the event comes from outside of an Angular zone
11741
+ // the event comes from outside an Angular zone
11711
11742
  this.changeDetectorRef.detectChanges();
11712
11743
  }
11713
11744
  this.liveLevel.update(levelInfo);
@@ -11723,14 +11754,14 @@ class RecordingItemDisplay extends ResponsiveComponent {
11723
11754
  this.changeDetectorRef.detectChanges();
11724
11755
  }
11725
11756
  }
11726
- RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11727
- RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingItemDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", agc: "agc", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
11757
+ RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i1$2.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11758
+ RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingItemDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", agc: "agc", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
11728
11759
  <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
11729
11760
  <audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11730
11761
  <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11731
11762
  </div>
11732
11763
  `, isInline: true, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "component", type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }] });
11733
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingItemDisplay, decorators: [{
11764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, decorators: [{
11734
11765
  type: Component,
11735
11766
  args: [{ selector: 'spr-recordingitemdisplay', template: `
11736
11767
  <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
@@ -11738,7 +11769,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
11738
11769
  <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11739
11770
  </div>
11740
11771
  `, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
11741
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
11772
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
11742
11773
  type: ViewChild,
11743
11774
  args: [LevelBar, { static: true }]
11744
11775
  }], streamingMode: [{
@@ -12779,9 +12810,9 @@ class SpeechRecorderUploader extends Uploader {
12779
12810
  this.config = config;
12780
12811
  }
12781
12812
  }
12782
- SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderUploader, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
12783
- SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderUploader });
12784
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderUploader, decorators: [{
12813
+ SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderUploader, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
12814
+ SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderUploader });
12815
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderUploader, decorators: [{
12785
12816
  type: Injectable
12786
12817
  }], ctorParameters: function () {
12787
12818
  return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
@@ -12803,12 +12834,12 @@ class WarningBar {
12803
12834
  }
12804
12835
  }
12805
12836
  }
12806
- WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WarningBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
12807
- WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: WarningBar, selector: "app-warningbar", inputs: { warningText: "warningText", show: "show" }, providers: [SessionService], ngImport: i0, template: `
12837
+ WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WarningBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
12838
+ WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: WarningBar, selector: "app-warningbar", inputs: { warningText: "warningText", show: "show" }, providers: [SessionService], ngImport: i0, template: `
12808
12839
  <div [class]="displayClass">{{warningText}}</div>
12809
12840
 
12810
12841
  `, isInline: true, styles: [":host{flex:0 0 content;background:orange}\n", ".off{display:none}\n", ".on{padding:2px;display:inline-block;width:100%;font-weight:700;font-size:larger;text-align:center}\n"] });
12811
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WarningBar, decorators: [{
12842
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WarningBar, decorators: [{
12812
12843
  type: Component,
12813
12844
  args: [{ selector: 'app-warningbar', providers: [SessionService], template: `
12814
12845
  <div [class]="displayClass">{{warningText}}</div>
@@ -13997,8 +14028,8 @@ class SessionManager extends BasicRecorder {
13997
14028
  }
13998
14029
  }
13999
14030
  }
14000
- SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionManager, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$4.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
14001
- SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SessionManager, selector: "app-sprrecordingsession", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "prompting", first: true, predicate: Prompting, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
14031
+ SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, deps: [{ token: i1$2.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$3.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
14032
+ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SessionManager, selector: "app-sprrecordingsession", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "prompting", first: true, predicate: Prompting, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
14002
14033
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
14003
14034
  <app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
14004
14035
  <app-sprprompting [projectName]="projectName"
@@ -14048,7 +14079,7 @@ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
14048
14079
  </div>
14049
14080
  </div>
14050
14081
  `, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{display:flex;padding:4px;box-sizing:border-box;height:100%;flex-direction:row;justify-content:flex-end;align-items:center;align-content:center}\n", ".dark{background:darkgray}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: Prompting, selector: "app-sprprompting", inputs: ["projectName", "startStopSignalState", "promptItem", "showPrompt", "items", "selectedItemIdx", "transportActions", "enableDownload", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["onItemSelect", "onNextItem", "onPrevItem"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { 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: WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { kind: "component", type: WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }] });
14051
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionManager, decorators: [{
14082
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, decorators: [{
14052
14083
  type: Component,
14053
14084
  args: [{ selector: 'app-sprrecordingsession', providers: [SessionService], template: `
14054
14085
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
@@ -14101,7 +14132,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
14101
14132
  </div>
14102
14133
  `, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{display:flex;padding:4px;box-sizing:border-box;height:100%;flex-direction:row;justify-content:flex-end;align-items:center;align-content:center}\n", ".dark{background:darkgray}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
14103
14134
  }], ctorParameters: function () {
14104
- return [{ type: i1$3.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
14135
+ return [{ type: i1$2.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$3.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
14105
14136
  type: Inject,
14106
14137
  args: [SPEECHRECORDER_CONFIG]
14107
14138
  }] }];
@@ -14234,9 +14265,9 @@ SprDb.dbName = 'speechrecorder';
14234
14265
  SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME = '_recording_file_cache';
14235
14266
  //public static RECORDING_FILE_CHUNKS_OBJECT_STORE_NAME='rec_file_chunks';
14236
14267
  SprDb.dbVersion = 1;
14237
- SprDb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14238
- SprDb.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SprDb });
14239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SprDb, decorators: [{
14268
+ SprDb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14269
+ SprDb.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb });
14270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb, decorators: [{
14240
14271
  type: Injectable
14241
14272
  }], ctorParameters: function () { return []; } });
14242
14273
 
@@ -14334,9 +14365,9 @@ class ScriptService {
14334
14365
  return this.http.get(scriptUrl, { withCredentials: this.withCredentials });
14335
14366
  }
14336
14367
  }
14337
- ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
14338
- ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScriptService });
14339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScriptService, decorators: [{
14368
+ ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
14369
+ ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScriptService });
14370
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScriptService, decorators: [{
14340
14371
  type: Injectable
14341
14372
  }], ctorParameters: function () {
14342
14373
  return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
@@ -14550,7 +14581,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
14550
14581
  }
14551
14582
  else {
14552
14583
  // all this attempts to customize the message do not work anymore (for security reasons)!!
14553
- var message = "Please do not leave the page, until all recordings are uploaded!";
14584
+ const message = "Please do not leave the page, until all recordings are uploaded!";
14554
14585
  alert(message);
14555
14586
  e = e || window.event;
14556
14587
  if (e) {
@@ -14674,7 +14705,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
14674
14705
  projUrl = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/wikispeech/rest/projects/?sessionId=' + this.sessionId;
14675
14706
  }
14676
14707
  if (projUrl) {
14677
- var pLoader = new XMLHttpRequest();
14708
+ const pLoader = new XMLHttpRequest();
14678
14709
  pLoader.open("GET", projUrl, true);
14679
14710
  pLoader.setRequestHeader('Accept', 'application/json');
14680
14711
  pLoader.responseType = "json";
@@ -14709,25 +14740,25 @@ class SpeechrecorderngComponent extends RecorderComponent {
14709
14740
  this.sm.statusMsg = 'ERROR: Recording.';
14710
14741
  }
14711
14742
  }
14712
- SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i1$2.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: ScriptService }, { token: RecordingService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
14713
- SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SpeechrecorderngComponent, selector: "app-speechrecorder", providers: [SessionService], viewQueries: [{ propertyName: "sm", first: true, predicate: SessionManager, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
14743
+ SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token: i4$2.ActivatedRoute }, { token: i4$2.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: ScriptService }, { token: RecordingService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
14744
+ SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SpeechrecorderngComponent, selector: "app-speechrecorder", providers: [SessionService], viewQueries: [{ propertyName: "sm", first: true, predicate: SessionManager, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
14714
14745
  <app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
14715
14746
  `, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"], dependencies: [{ kind: "component", type: SessionManager, selector: "app-sprrecordingsession", inputs: ["projectName", "dataSaved"] }] });
14716
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngComponent, decorators: [{
14747
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngComponent, decorators: [{
14717
14748
  type: Component,
14718
14749
  args: [{ selector: 'app-speechrecorder', providers: [SessionService], template: `
14719
14750
  <app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
14720
14751
  `, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"] }]
14721
- }], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }, { type: i1$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: ScriptService }, { type: RecordingService }, { type: SpeechRecorderUploader }]; }, propDecorators: { sm: [{
14752
+ }], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i4$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: ScriptService }, { type: RecordingService }, { type: SpeechRecorderUploader }]; }, propDecorators: { sm: [{
14722
14753
  type: ViewChild,
14723
14754
  args: [SessionManager, { static: true }]
14724
14755
  }] } });
14725
14756
 
14726
14757
  class ScrollPaneHorizontal {
14727
14758
  }
14728
- ScrollPaneHorizontal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component });
14729
- ScrollPaneHorizontal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScrollPaneHorizontal, selector: "scroll-pane-horizontal", ngImport: i0, template: '', isInline: true, styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] });
14730
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
14759
+ ScrollPaneHorizontal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component });
14760
+ ScrollPaneHorizontal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ScrollPaneHorizontal, selector: "scroll-pane-horizontal", ngImport: i0, template: '', isInline: true, styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] });
14761
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
14731
14762
  type: Component,
14732
14763
  args: [{ selector: 'scroll-pane-horizontal', template: '', styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] }]
14733
14764
  }] });
@@ -14924,8 +14955,8 @@ class AudioDisplayPlayer {
14924
14955
  this.status = 'ERROR';
14925
14956
  }
14926
14957
  }
14927
- AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
14928
- AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioDisplayPlayer, selector: "app-audiodisplayplayer", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
14958
+ AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token: i4$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
14959
+ AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplayPlayer, selector: "app-audiodisplayplayer", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
14929
14960
 
14930
14961
  <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
14931
14962
 
@@ -14939,7 +14970,7 @@ AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
14939
14970
  [zoomSelectedAction]="zoomSelectedAction"
14940
14971
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
14941
14972
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#000000bf}\n"], dependencies: [{ kind: "component", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] });
14942
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
14973
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
14943
14974
  type: Component,
14944
14975
  args: [{ selector: 'app-audiodisplayplayer', template: `
14945
14976
 
@@ -14955,7 +14986,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
14955
14986
  [zoomSelectedAction]="zoomSelectedAction"
14956
14987
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
14957
14988
  `, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#000000bf}\n"] }]
14958
- }], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
14989
+ }], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
14959
14990
  type: Input
14960
14991
  }], playStopAction: [{
14961
14992
  type: Input
@@ -15105,37 +15136,39 @@ class RecordingFileService extends BasicRecordingService {
15105
15136
  let wobs = new Observable(observer => {
15106
15137
  if (recordingFile.recordingFileId) {
15107
15138
  let obs = this.fetchAudiofile(recordingFile.recordingFileId);
15108
- obs.subscribe(resp => {
15109
- // Do not use Promise version, which does not work with Safari 13
15110
- if (resp.body) {
15111
- aCtx.decodeAudioData(resp.body, ab => {
15112
- let as = new AudioBufferSource(ab);
15113
- RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(as));
15114
- if (this.debugDelay > 0) {
15115
- window.setTimeout(() => {
15139
+ obs.subscribe({ next: resp => {
15140
+ // Do not use Promise version, which does not work with Safari 13
15141
+ if (resp.body) {
15142
+ aCtx.decodeAudioData(resp.body, ab => {
15143
+ let as = new AudioBufferSource(ab);
15144
+ RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(as));
15145
+ if (this.debugDelay > 0) {
15146
+ window.setTimeout(() => {
15147
+ observer.next(recordingFile);
15148
+ observer.complete();
15149
+ }, this.debugDelay);
15150
+ }
15151
+ else {
15116
15152
  observer.next(recordingFile);
15117
15153
  observer.complete();
15118
- }, this.debugDelay);
15119
- }
15120
- else {
15121
- observer.next(recordingFile);
15122
- observer.complete();
15123
- }
15124
- });
15125
- }
15126
- else {
15127
- observer.error('Received no audio data!');
15128
- }
15129
- }, (error) => {
15130
- if (error.status == 404) {
15131
- // Interpret not as an error, the file ist not recorded yet
15132
- observer.next(null);
15133
- observer.complete();
15134
- }
15135
- else {
15136
- // all other states are errors
15137
- observer.error(error);
15138
- observer.complete();
15154
+ }
15155
+ });
15156
+ }
15157
+ else {
15158
+ observer.error('Received no audio data!');
15159
+ }
15160
+ },
15161
+ error: (error) => {
15162
+ if (error.status == 404) {
15163
+ // Interpret not as an error, the file ist not recorded yet
15164
+ observer.next(null);
15165
+ observer.complete();
15166
+ }
15167
+ else {
15168
+ // all other states are errors
15169
+ observer.error(error);
15170
+ observer.complete();
15171
+ }
15139
15172
  }
15140
15173
  });
15141
15174
  }
@@ -15149,81 +15182,39 @@ class RecordingFileService extends BasicRecordingService {
15149
15182
  let wobs = new Observable(observer => {
15150
15183
  let rf = null;
15151
15184
  let rfDescrObs = this.recordingFileDescrObserver(recordingFileId);
15152
- rfDescrObs.subscribe(value => {
15153
- rf = value;
15154
- }, (error) => {
15155
- observer.error(error);
15156
- }, () => {
15157
- let rfAudioObs = this.fetchAudiofile(recordingFileId);
15158
- rfAudioObs.subscribe(resp => {
15159
- // Do not use Promise version, which does not work with Safari 13
15160
- if (resp.body) {
15161
- aCtx.decodeAudioData(resp.body, ab => {
15162
- if (rf) {
15163
- let as = new AudioBufferSource(ab);
15164
- RecordingFileUtils.setAudioData(rf, new AudioDataHolder(as));
15165
- }
15166
- else {
15167
- observer.error('Recording file object null');
15168
- }
15169
- if (this.debugDelay > 0) {
15170
- window.setTimeout(() => {
15171
- observer.next(rf);
15172
- observer.complete();
15173
- }, this.debugDelay);
15185
+ rfDescrObs.subscribe({ next: value => {
15186
+ rf = value;
15187
+ }, error: (error) => {
15188
+ observer.error(error);
15189
+ }, complete: () => {
15190
+ let rfAudioObs = this.fetchAudiofile(recordingFileId);
15191
+ rfAudioObs.subscribe({
15192
+ next: resp => {
15193
+ // Do not use Promise version, which does not work with Safari 13
15194
+ if (resp.body) {
15195
+ aCtx.decodeAudioData(resp.body, ab => {
15196
+ if (rf) {
15197
+ let as = new AudioBufferSource(ab);
15198
+ RecordingFileUtils.setAudioData(rf, new AudioDataHolder(as));
15199
+ }
15200
+ else {
15201
+ observer.error('Recording file object null');
15202
+ }
15203
+ if (this.debugDelay > 0) {
15204
+ window.setTimeout(() => {
15205
+ observer.next(rf);
15206
+ observer.complete();
15207
+ }, this.debugDelay);
15208
+ }
15209
+ else {
15210
+ observer.next(rf);
15211
+ observer.complete();
15212
+ }
15213
+ });
15174
15214
  }
15175
15215
  else {
15176
- observer.next(rf);
15177
- observer.complete();
15216
+ observer.error('Received no audio data');
15178
15217
  }
15179
- });
15180
- }
15181
- else {
15182
- observer.error('Received no audio data');
15183
- }
15184
- }, (error) => {
15185
- if (error.status == 404) {
15186
- // Interpret not as an error, the file ist not recorded yet
15187
- observer.next(null);
15188
- observer.complete();
15189
- }
15190
- else {
15191
- // all other states are errors
15192
- observer.error(error);
15193
- observer.complete();
15194
- }
15195
- });
15196
- });
15197
- });
15198
- return wobs;
15199
- }
15200
- fetchSprRecordingFile(aCtx, recordingFileId) {
15201
- let wobs = new Observable(observer => {
15202
- let rf = null;
15203
- let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
15204
- rfDescrObs.subscribe(value => {
15205
- rf = value;
15206
- }, (error) => {
15207
- observer.error(error);
15208
- }, () => {
15209
- let sampleCnt = null;
15210
- if (rf && rf.channels && rf.frames) {
15211
- sampleCnt = rf.channels * rf.frames;
15212
- }
15213
- // TODO use download storage type depending on sample count of file
15214
- if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
15215
- const baseUrl = this.recoFileUrl(recordingFileId);
15216
- const obNetAb = this.chunkAudioRequestToNetAudioBuffer(aCtx, baseUrl, 0, rf === null || rf === void 0 ? void 0 : rf.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
15217
- obNetAb.subscribe({
15218
- next: (nab) => {
15219
- let adh = new AudioDataHolder(nab);
15220
- if (rf) {
15221
- RecordingFileUtils.setAudioData(rf, adh);
15222
- observer.next(rf);
15223
- }
15224
- },
15225
- complete: () => {
15226
- observer.complete();
15227
15218
  },
15228
15219
  error: (error) => {
15229
15220
  if (error.status == 404) {
@@ -15239,47 +15230,97 @@ class RecordingFileService extends BasicRecordingService {
15239
15230
  }
15240
15231
  });
15241
15232
  }
15242
- else {
15243
- let rfAudioObs = this.fetchAudiofile(recordingFileId);
15244
- rfAudioObs.subscribe(resp => {
15245
- // Do not use Promise version, which does not work with Safari 13
15246
- if (resp.body) {
15247
- aCtx.decodeAudioData(resp.body, ab => {
15233
+ });
15234
+ });
15235
+ return wobs;
15236
+ }
15237
+ fetchSprRecordingFile(aCtx, recordingFileId) {
15238
+ let wobs = new Observable(observer => {
15239
+ let rf = null;
15240
+ let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
15241
+ rfDescrObs.subscribe({ next: value => {
15242
+ rf = value;
15243
+ },
15244
+ error: (error) => {
15245
+ observer.error(error);
15246
+ }, complete: () => {
15247
+ let sampleCnt = null;
15248
+ if (rf && rf.channels && rf.frames) {
15249
+ sampleCnt = rf.channels * rf.frames;
15250
+ }
15251
+ // TODO use download storage type depending on sample count of file
15252
+ if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
15253
+ const baseUrl = this.recoFileUrl(recordingFileId);
15254
+ const obNetAb = this.chunkAudioRequestToNetAudioBuffer(aCtx, baseUrl, 0, rf === null || rf === void 0 ? void 0 : rf.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
15255
+ obNetAb.subscribe({
15256
+ next: (nab) => {
15257
+ let adh = new AudioDataHolder(nab);
15248
15258
  if (rf) {
15249
- let as = new AudioBufferSource(ab);
15250
- let adh = new AudioDataHolder(as);
15251
15259
  RecordingFileUtils.setAudioData(rf, adh);
15260
+ observer.next(rf);
15261
+ }
15262
+ },
15263
+ complete: () => {
15264
+ observer.complete();
15265
+ },
15266
+ error: (error) => {
15267
+ if (error.status == 404) {
15268
+ // Interpret not as an error, the file ist not recorded yet
15269
+ observer.next(null);
15270
+ observer.complete();
15252
15271
  }
15253
15272
  else {
15254
- observer.error('Recording file object null');
15273
+ // all other states are errors
15274
+ observer.error(error);
15275
+ observer.complete();
15255
15276
  }
15256
- if (this.debugDelay > 0) {
15257
- window.setTimeout(() => {
15258
- observer.next(rf);
15259
- observer.complete();
15260
- }, this.debugDelay);
15277
+ }
15278
+ });
15279
+ }
15280
+ else {
15281
+ let rfAudioObs = this.fetchAudiofile(recordingFileId);
15282
+ rfAudioObs.subscribe({ next: resp => {
15283
+ // Do not use Promise version, which does not work with Safari 13
15284
+ if (resp.body) {
15285
+ aCtx.decodeAudioData(resp.body, ab => {
15286
+ if (rf) {
15287
+ let as = new AudioBufferSource(ab);
15288
+ let adh = new AudioDataHolder(as);
15289
+ RecordingFileUtils.setAudioData(rf, adh);
15290
+ }
15291
+ else {
15292
+ observer.error('Recording file object null');
15293
+ }
15294
+ if (this.debugDelay > 0) {
15295
+ window.setTimeout(() => {
15296
+ observer.next(rf);
15297
+ observer.complete();
15298
+ }, this.debugDelay);
15299
+ }
15300
+ else {
15301
+ observer.next(rf);
15302
+ observer.complete();
15303
+ }
15304
+ });
15261
15305
  }
15262
15306
  else {
15263
- observer.next(rf);
15307
+ observer.error('Received no audio data');
15308
+ }
15309
+ },
15310
+ error: (error) => {
15311
+ if (error.status == 404) {
15312
+ // Interpret not as an error, the file ist not recorded yet
15313
+ observer.next(null);
15264
15314
  observer.complete();
15265
15315
  }
15266
- });
15267
- }
15268
- else {
15269
- observer.error('Received no audio data');
15270
- }
15271
- }, (error) => {
15272
- if (error.status == 404) {
15273
- // Interpret not as an error, the file ist not recorded yet
15274
- observer.next(null);
15275
- observer.complete();
15276
- }
15277
- else {
15278
- // all other states are errors
15279
- observer.error(error);
15280
- observer.complete();
15281
- }
15282
- });
15316
+ else {
15317
+ // all other states are errors
15318
+ observer.error(error);
15319
+ observer.complete();
15320
+ }
15321
+ }
15322
+ });
15323
+ }
15283
15324
  }
15284
15325
  });
15285
15326
  });
@@ -15297,9 +15338,9 @@ class RecordingFileService extends BasicRecordingService {
15297
15338
  }
15298
15339
  }
15299
15340
  RecordingFileService.RECOFILE_API_CTX = 'recordingfile';
15300
- RecordingFileService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
15301
- RecordingFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileService });
15302
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileService, decorators: [{
15341
+ RecordingFileService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
15342
+ RecordingFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileService });
15343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileService, decorators: [{
15303
15344
  type: Injectable
15304
15345
  }], ctorParameters: function () {
15305
15346
  return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
@@ -15325,15 +15366,15 @@ class RecordingFileNaviComponent {
15325
15366
  }
15326
15367
  }
15327
15368
  }
15328
- RecordingFileNaviComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileNaviComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15329
- RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: { firstAction: "firstAction", prevAction: "prevAction", nextAction: "nextAction", lastAction: "lastAction", items: "items", itemPos: "itemPos", selectVersion: "selectVersion", versions: "versions", version: "version", naviInfoLoading: "naviInfoLoading" }, ngImport: i0, template: `
15369
+ RecordingFileNaviComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileNaviComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15370
+ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: { firstAction: "firstAction", prevAction: "prevAction", nextAction: "nextAction", lastAction: "lastAction", items: "items", itemPos: "itemPos", selectVersion: "selectVersion", versions: "versions", version: "version", naviInfoLoading: "naviInfoLoading" }, ngImport: i0, template: `
15330
15371
  <div #controlPanel style="display:flex;flex-direction: row;">
15331
15372
  <div #navi style="flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap">
15332
15373
  <fieldset>
15333
15374
  <legend>Versions</legend>
15334
15375
  <mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
15335
15376
  <select *ngIf="!naviInfoLoading" [disabled]="versions==null || versions.length==1" (change)="selectVersionChange($event)">
15336
- <option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<span *ngIf="i==0"> (latest)</span></option>
15377
+ <option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<ng-container *ngIf="i==0"> (latest)</ng-container></option>
15337
15378
  </select>
15338
15379
  </fieldset>
15339
15380
  <fieldset>
@@ -15359,7 +15400,7 @@ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15359
15400
  </div>
15360
15401
  </div>
15361
15402
  `, isInline: true, styles: [":host{flex:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.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$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
15362
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileNaviComponent, decorators: [{
15403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileNaviComponent, decorators: [{
15363
15404
  type: Component,
15364
15405
  args: [{ selector: 'app-recording-file-navi', template: `
15365
15406
  <div #controlPanel style="display:flex;flex-direction: row;">
@@ -15368,7 +15409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
15368
15409
  <legend>Versions</legend>
15369
15410
  <mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
15370
15411
  <select *ngIf="!naviInfoLoading" [disabled]="versions==null || versions.length==1" (change)="selectVersionChange($event)">
15371
- <option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<span *ngIf="i==0"> (latest)</span></option>
15412
+ <option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<ng-container *ngIf="i==0"> (latest)</ng-container></option>
15372
15413
  </select>
15373
15414
  </fieldset>
15374
15415
  <fieldset>
@@ -15458,8 +15499,8 @@ class RecordingFileMetaComponent {
15458
15499
  return t;
15459
15500
  }
15460
15501
  }
15461
- RecordingFileMetaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileMetaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15462
- RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: { sessionId: "sessionId", stateLoading: "stateLoading", recordingFile: "recordingFile" }, ngImport: i0, template: `
15502
+ RecordingFileMetaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileMetaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15503
+ RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: { sessionId: "sessionId", stateLoading: "stateLoading", recordingFile: "recordingFile" }, ngImport: i0, template: `
15463
15504
  <mat-card>
15464
15505
  <mat-card-title>Recording file ID: {{recordingFile?.recordingFileId}}</mat-card-title>
15465
15506
  <mat-card-content>
@@ -15494,7 +15535,7 @@ RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15494
15535
  </mat-card-content>
15495
15536
  </mat-card>
15496
15537
  `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i3$2.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i3$2.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i3$2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }] });
15497
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileMetaComponent, decorators: [{
15538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileMetaComponent, decorators: [{
15498
15539
  type: Component,
15499
15540
  args: [{ selector: 'app-recording-file-meta', template: `
15500
15541
  <mat-card>
@@ -15734,47 +15775,49 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
15734
15775
  let audioContext = AudioContextProvider.audioContextInstance();
15735
15776
  if (audioContext) {
15736
15777
  this.audioFetching = true;
15737
- this.recordingFileService.fetchSprRecordingFile(audioContext, rfId).subscribe(value => {
15738
- this.audioFetching = false;
15739
- this.status = 'Audio file loaded.';
15740
- let clip = null;
15741
- this.recordingFile = value;
15742
- if (this.recordingFile) {
15743
- let ab = this.recordingFile.audioDataHolder;
15744
- if (ab) {
15745
- clip = new AudioClip(ab);
15746
- let esffsr = null;
15747
- let eeffsr = null;
15748
- let esr = null;
15749
- if (clip.audioDataHolder != null) {
15750
- esr = ab.sampleRate;
15751
- if (esr != null) {
15752
- esffsr = RecordingFileUtil.editStartFrameForSampleRate(this.recordingFile, esr);
15753
- eeffsr = RecordingFileUtil.editEndFrameForSampleRate(this.recordingFile, esr);
15754
- }
15755
- let sel = null;
15756
- if (esffsr != null) {
15757
- if (eeffsr != null) {
15758
- sel = new Selection(ab.sampleRate, esffsr, eeffsr);
15778
+ this.recordingFileService.fetchSprRecordingFile(audioContext, rfId).subscribe({
15779
+ next: value => {
15780
+ this.audioFetching = false;
15781
+ this.status = 'Audio file loaded.';
15782
+ let clip = null;
15783
+ this.recordingFile = value;
15784
+ if (this.recordingFile) {
15785
+ let ab = this.recordingFile.audioDataHolder;
15786
+ if (ab) {
15787
+ clip = new AudioClip(ab);
15788
+ let esffsr = null;
15789
+ let eeffsr = null;
15790
+ let esr = null;
15791
+ if (clip.audioDataHolder != null) {
15792
+ esr = ab.sampleRate;
15793
+ if (esr != null) {
15794
+ esffsr = RecordingFileUtil.editStartFrameForSampleRate(this.recordingFile, esr);
15795
+ eeffsr = RecordingFileUtil.editEndFrameForSampleRate(this.recordingFile, esr);
15759
15796
  }
15760
- else {
15761
- //let ch0 = ab.getChannelData(0);
15762
- let frameLength = ab.frameLen;
15763
- sel = new Selection(esr, esffsr, frameLength);
15797
+ let sel = null;
15798
+ if (esffsr != null) {
15799
+ if (eeffsr != null) {
15800
+ sel = new Selection(ab.sampleRate, esffsr, eeffsr);
15801
+ }
15802
+ else {
15803
+ //let ch0 = ab.getChannelData(0);
15804
+ let frameLength = ab.frameLen;
15805
+ sel = new Selection(esr, esffsr, frameLength);
15806
+ }
15764
15807
  }
15808
+ else if (eeffsr != null) {
15809
+ sel = new Selection(esr, 0, eeffsr);
15810
+ }
15811
+ clip.selection = sel;
15765
15812
  }
15766
- else if (eeffsr != null) {
15767
- sel = new Selection(esr, 0, eeffsr);
15768
- }
15769
- clip.selection = sel;
15770
15813
  }
15771
15814
  }
15815
+ this.audioClip = clip;
15816
+ this.loadedRecfile();
15817
+ }, error: error1 => {
15818
+ this.audioFetching = false;
15819
+ this.status = 'Error loading audio file!';
15772
15820
  }
15773
- this.audioClip = clip;
15774
- this.loadedRecfile();
15775
- }, error1 => {
15776
- this.audioFetching = false;
15777
- this.status = 'Error loading audio file!';
15778
15821
  });
15779
15822
  }
15780
15823
  }
@@ -15802,7 +15845,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
15802
15845
  this.lastAction.disabled = (this.posInList == null || itemCnt == null || this.posInList >= itemCnt - 1);
15803
15846
  }
15804
15847
  loadSession(sessionId) {
15805
- // load session and recording file meta data only when on init and when session changes
15848
+ // load session and recording file metadata only when on init and when session changes
15806
15849
  if (sessionId != this.sessionId) {
15807
15850
  // tell UI that we are working...
15808
15851
  this.naviInfoLoading = true;
@@ -15840,7 +15883,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
15840
15883
  else {
15841
15884
  // rec file with itemcode already exists, add (push) this version ...
15842
15885
  exRfsForIc.push(rfd);
15843
- // .. and sort latest version (highest version number) to lowest index
15886
+ // ... and sort latest version (highest version number) to lowest index
15844
15887
  exRfsForIc.sort((rfd1, rfd2) => {
15845
15888
  return rfd2.version - rfd1.version;
15846
15889
  });
@@ -15894,8 +15937,8 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
15894
15937
  }
15895
15938
  }
15896
15939
  }
15897
- RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileViewComponent, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$4.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
15898
- RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingFileViewComponent, selector: "app-audiodisplayplayer", viewQueries: [{ propertyName: "ac", first: true, predicate: AudioDisplayScrollPane, descendants: true }], usesInheritance: true, ngImport: i0, template: `
15940
+ RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileViewComponent, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i4$2.Router }, { token: i4$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
15941
+ RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileViewComponent, selector: "app-audiodisplayplayer", viewQueries: [{ propertyName: "ac", first: true, predicate: AudioDisplayScrollPane, descendants: true }], usesInheritance: true, ngImport: i0, template: `
15899
15942
 
15900
15943
  <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
15901
15944
  <div class="ctrlview">
@@ -15913,7 +15956,7 @@ RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15913
15956
  <app-recording-file-navi [items]="availRecFiles?.length" [itemPos]="posInList" [version]="recordingFileVersion" [versions]="versions" [firstAction]="firstAction" [prevAction]="prevAction" [nextAction]="nextAction" [lastAction]="lastAction" [selectVersion]="toVersionAction" [naviInfoLoading]="naviInfoLoading"></app-recording-file-navi>
15914
15957
  </div>
15915
15958
  `, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"], dependencies: [{ kind: "component", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }, { kind: "component", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: ["firstAction", "prevAction", "nextAction", "lastAction", "items", "itemPos", "selectVersion", "versions", "version", "naviInfoLoading"] }, { kind: "component", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: ["sessionId", "stateLoading", "recordingFile"] }] });
15916
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileViewComponent, decorators: [{
15959
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileViewComponent, decorators: [{
15917
15960
  type: Component,
15918
15961
  args: [{ selector: 'app-audiodisplayplayer', template: `
15919
15962
 
@@ -15933,7 +15976,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
15933
15976
  <app-recording-file-navi [items]="availRecFiles?.length" [itemPos]="posInList" [version]="recordingFileVersion" [versions]="versions" [firstAction]="firstAction" [prevAction]="prevAction" [nextAction]="nextAction" [lastAction]="lastAction" [selectVersion]="toVersionAction" [naviInfoLoading]="naviInfoLoading"></app-recording-file-navi>
15934
15977
  </div>
15935
15978
  `, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"] }]
15936
- }], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$4.MatDialog }]; }, propDecorators: { ac: [{
15979
+ }], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type: i4$2.Router }, { type: i4$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$3.MatDialog }]; }, propDecorators: { ac: [{
15937
15980
  type: ViewChild,
15938
15981
  args: [AudioDisplayScrollPane]
15939
15982
  }] } });
@@ -15999,28 +16042,29 @@ class RecordingFileUI extends RecordingFileViewComponent {
15999
16042
  sf = s.startFrame;
16000
16043
  ef = s.endFrame;
16001
16044
  }
16002
- this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe((value) => {
16003
- }, () => {
16004
- this.dialog.open(MessageDialog, {
16005
- data: {
16006
- type: 'error',
16007
- title: 'Save selection edit error',
16008
- msg: "Could not save edit selection to WikiSpeech server!",
16009
- advice: "Please check network connection and server state."
16010
- }
16011
- });
16012
- }, () => {
16013
- // Or use returned selection value from server?
16014
- this.savedEditSelection = s;
16015
- this.editSaved = true;
16016
- this.snackBar.open('Selection edit saved successfully.', 'OK', { duration: 1500 });
16045
+ this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe({ next: (value) => { },
16046
+ error: () => {
16047
+ this.dialog.open(MessageDialog, {
16048
+ data: {
16049
+ type: 'error',
16050
+ title: 'Save selection edit error',
16051
+ msg: "Could not save edit selection to WikiSpeech server!",
16052
+ advice: "Please check network connection and server state."
16053
+ }
16054
+ });
16055
+ }, complete: () => {
16056
+ // Or use returned selection value from server?
16057
+ this.savedEditSelection = s;
16058
+ this.editSaved = true;
16059
+ this.snackBar.open('Selection edit saved successfully.', 'OK', { duration: 1500 });
16060
+ }
16017
16061
  });
16018
16062
  }
16019
16063
  }
16020
16064
  }
16021
16065
  }
16022
- RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileUI, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$4.MatDialog }, { token: i6.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
16023
- RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingFileUI, selector: "app-audiodisplayplayer", usesInheritance: true, ngImport: i0, template: `
16066
+ RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileUI, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i4$2.Router }, { token: i4$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$3.MatDialog }, { token: i6.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
16067
+ RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileUI, selector: "app-audiodisplayplayer", usesInheritance: true, ngImport: i0, template: `
16024
16068
  <h1>Recording file editing</h1>
16025
16069
  <p>On export or delivery the editing selection of the recording file is cut out. If no editing selection is applied the original file is exported.</p>
16026
16070
 
@@ -16041,7 +16085,7 @@ RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
16041
16085
 
16042
16086
  <button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
16043
16087
  `, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"], dependencies: [{ kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }, { kind: "component", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: ["firstAction", "prevAction", "nextAction", "lastAction", "items", "itemPos", "selectVersion", "versions", "version", "naviInfoLoading"] }, { kind: "component", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: ["sessionId", "stateLoading", "recordingFile"] }] });
16044
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileUI, decorators: [{
16088
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileUI, decorators: [{
16045
16089
  type: Component,
16046
16090
  args: [{ selector: 'app-audiodisplayplayer', template: `
16047
16091
  <h1>Recording file editing</h1>
@@ -16064,7 +16108,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
16064
16108
 
16065
16109
  <button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
16066
16110
  `, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"] }]
16067
- }], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$4.MatDialog }, { type: i6.MatSnackBar }]; } });
16111
+ }], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type: i4$2.Router }, { type: i4$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$3.MatDialog }, { type: i6.MatSnackBar }]; } });
16068
16112
 
16069
16113
  class MediaUtils {
16070
16114
  static toMediaTime(timeInSeconds) {
@@ -16157,8 +16201,8 @@ class RecordingList {
16157
16201
  return cached;
16158
16202
  }
16159
16203
  }
16160
- RecordingList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingList, deps: [], target: i0.ɵɵFactoryTarget.Component });
16161
- RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingList, selector: "app-recordinglist", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, ngImport: i0, template: `
16204
+ RecordingList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingList, deps: [], target: i0.ɵɵFactoryTarget.Component });
16205
+ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingList, selector: "app-recordinglist", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, ngImport: i0, template: `
16162
16206
  <mat-card>
16163
16207
  <mat-card-header>
16164
16208
  <h2>Recording list</h2>
@@ -16202,8 +16246,8 @@ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
16202
16246
  </mat-card-content>
16203
16247
  </mat-card>
16204
16248
 
16205
- `, isInline: true, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;overflow-y:auto;min-height:0px}\n", ".selected{font-weight:700}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$2.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i3$2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3$2.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i4$2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4$2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4$2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }] });
16206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingList, decorators: [{
16249
+ `, isInline: true, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;overflow-y:auto;min-height:0px}\n", ".selected{font-weight:700}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$2.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i3$2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3$2.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i4$3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$3.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4$3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4$3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }] });
16250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingList, decorators: [{
16207
16251
  type: Component,
16208
16252
  args: [{ selector: 'app-recordinglist', template: `
16209
16253
  <mat-card>
@@ -16283,8 +16327,8 @@ class RecorderCombiPane extends ResponsiveComponent {
16283
16327
  this.recordingListComp.selectTop();
16284
16328
  }
16285
16329
  }
16286
- RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecorderCombiPane, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
16287
- RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, viewQueries: [{ propertyName: "recordingListComp", first: true, predicate: RecordingList, descendants: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
16330
+ RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
16331
+ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, viewQueries: [{ propertyName: "recordingListComp", first: true, predicate: RecordingList, descendants: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
16288
16332
  <div class="scrollList">
16289
16333
  <app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
16290
16334
  </div>
@@ -16297,7 +16341,7 @@ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
16297
16341
  [playStopAction]="playStopAction"></app-audiodisplay>
16298
16342
  </div>
16299
16343
  `, isInline: true, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{background-color:#ff0;position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px}\n", ".scrollList{margin:0;padding:0;background:lightgrey;width:100%;height:100%;overflow-y:auto}\n", ".collapsable{display:none;position:absolute;z-index:5}\n", ".collapsable.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"], dependencies: [{ kind: "component", type: AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }, { kind: "component", type: RecordingList, selector: "app-recordinglist", inputs: ["selectDisabled", "selectedRecordingFile"], outputs: ["selectedRecordingFileChanged"] }] });
16300
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecorderCombiPane, decorators: [{
16344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, decorators: [{
16301
16345
  type: Component,
16302
16346
  args: [{ selector: 'app-recordercombipane', template: `
16303
16347
  <div class="scrollList">
@@ -16312,7 +16356,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
16312
16356
  [playStopAction]="playStopAction"></app-audiodisplay>
16313
16357
  </div>
16314
16358
  `, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{background-color:#ff0;position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px}\n", ".scrollList{margin:0;padding:0;background:lightgrey;width:100%;height:100%;overflow-y:auto}\n", ".collapsable{display:none;position:absolute;z-index:5}\n", ".collapsable.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"] }]
16315
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { recordingListComp: [{
16359
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { recordingListComp: [{
16316
16360
  type: ViewChild,
16317
16361
  args: [RecordingList]
16318
16362
  }], selectDisabled: [{
@@ -16339,11 +16383,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
16339
16383
  }] } });
16340
16384
 
16341
16385
  class AudioRecorder extends BasicRecorder {
16342
- constructor(bpo, changeDetectorRef, renderer, route, dialog, sessionService, recFileService, uploader, config) {
16386
+ constructor(bpo, changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
16343
16387
  super(bpo, changeDetectorRef, dialog, sessionService, uploader, config);
16344
16388
  this.bpo = bpo;
16345
16389
  this.renderer = renderer;
16346
- this.route = route;
16347
16390
  this.recFileService = recFileService;
16348
16391
  this.uploader = uploader;
16349
16392
  this._project = null;
@@ -17253,8 +17296,8 @@ class AudioRecorder extends BasicRecorder {
17253
17296
  }
17254
17297
  }
17255
17298
  }
17256
- AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecorder, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$2.ActivatedRoute }, { token: i1$4.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
17257
- AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioRecorder, selector: "app-audiorecorder", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "recorderCombiPane", first: true, predicate: RecorderCombiPane, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
17299
+ AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, deps: [{ token: i1$2.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$3.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
17300
+ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioRecorder, selector: "app-audiorecorder", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "recorderCombiPane", first: true, predicate: RecorderCombiPane, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
17258
17301
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
17259
17302
  <app-warningbar [show]="isDefaultAudioTestSession()"
17260
17303
  warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
@@ -17313,7 +17356,7 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
17313
17356
  </div>
17314
17357
  </div>
17315
17358
  `, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;flex:1 0 30%;align-items:center;text-align:center;align-content:center}\n", ".startstopscreenxs{width:100%;flex:1 0 100%;align-items:center;text-align:center;align-content:center}\n", ".bigbutton{min-width:70px;min-height:50px;font-size:50px;border-radius:20px}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "directive", type: i1$1.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.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { kind: "component", type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { kind: "component", type: WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }, { kind: "component", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: ["selectDisabled", "selectedRecordingFile", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["selectedRecordingFileChanged"] }] });
17316
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecorder, decorators: [{
17359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, decorators: [{
17317
17360
  type: Component,
17318
17361
  args: [{ selector: 'app-audiorecorder', providers: [SessionService], template: `
17319
17362
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
@@ -17375,7 +17418,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
17375
17418
  </div>
17376
17419
  `, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;flex:1 0 30%;align-items:center;text-align:center;align-content:center}\n", ".startstopscreenxs{width:100%;flex:1 0 100%;align-items:center;text-align:center;align-content:center}\n", ".bigbutton{min-width:70px;min-height:50px;font-size:50px;border-radius:20px}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
17377
17420
  }], ctorParameters: function () {
17378
- return [{ type: i1$3.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$2.ActivatedRoute }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
17421
+ return [{ type: i1$2.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$3.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
17379
17422
  type: Inject,
17380
17423
  args: [SPEECHRECORDER_CONFIG]
17381
17424
  }] }];
@@ -17421,7 +17464,7 @@ class AudioRecorderComponent extends RecorderComponent {
17421
17464
  }
17422
17465
  else {
17423
17466
  // all this attempts to customize the message do not work anymore (for security reasons)!!
17424
- var message = "Please do not leave the page, until all recordings are uploaded!";
17467
+ const message = "Please do not leave the page, until all recordings are uploaded!";
17425
17468
  alert(message);
17426
17469
  e = e || window.event;
17427
17470
  if (e) {
@@ -17521,16 +17564,16 @@ class AudioRecorderComponent extends RecorderComponent {
17521
17564
  return this.dataSaved && !this.ar.isActive();
17522
17565
  }
17523
17566
  }
17524
- AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecorderComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i1$2.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
17525
- AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioRecorderComponent, selector: "app-audiorecorder-comp", providers: [SessionService], viewQueries: [{ propertyName: "ar", first: true, predicate: AudioRecorder, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
17567
+ AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorderComponent, deps: [{ token: i4$2.ActivatedRoute }, { token: i4$2.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
17568
+ AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioRecorderComponent, selector: "app-audiorecorder-comp", providers: [SessionService], viewQueries: [{ propertyName: "ar", first: true, predicate: AudioRecorder, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
17526
17569
  <app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
17527
17570
  `, isInline: true, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"], dependencies: [{ kind: "component", type: AudioRecorder, selector: "app-audiorecorder", inputs: ["projectName", "dataSaved"] }] });
17528
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecorderComponent, decorators: [{
17571
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorderComponent, decorators: [{
17529
17572
  type: Component,
17530
17573
  args: [{ selector: 'app-audiorecorder-comp', providers: [SessionService], template: `
17531
17574
  <app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
17532
17575
  `, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"] }]
17533
- }], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }, { type: i1$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: SpeechRecorderUploader }]; }, propDecorators: { ar: [{
17576
+ }], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i4$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: SpeechRecorderUploader }]; }, propDecorators: { ar: [{
17534
17577
  type: ViewChild,
17535
17578
  args: [AudioRecorder, { static: true }]
17536
17579
  }] } });
@@ -17564,11 +17607,11 @@ class SpeechrecorderngModule {
17564
17607
  };
17565
17608
  }
17566
17609
  }
17567
- SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17568
- SpeechrecorderngModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngModule, declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
17569
- ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [i1$2.RouterModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule], exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder] });
17570
- SpeechrecorderngModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngModule, providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader], imports: [RouterModule.forChild(SPR_ROUTES), CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule] });
17571
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
17610
+ SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17611
+ SpeechrecorderngModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
17612
+ ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [i4$2.RouterModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule], exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder] });
17613
+ SpeechrecorderngModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader], imports: [RouterModule.forChild(SPR_ROUTES), CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule] });
17614
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
17572
17615
  type: NgModule,
17573
17616
  args: [{
17574
17617
  declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
@@ -17579,7 +17622,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
17579
17622
  }]
17580
17623
  }] });
17581
17624
 
17582
- const VERSION = '3.4.3';
17625
+ const VERSION = '3.4.5';
17583
17626
 
17584
17627
  /*
17585
17628
  * Public API Surface of speechrecorderng