speechrecorderng 3.3.1 → 3.3.4

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 (32) hide show
  1. package/esm2020/lib/audio/playback/player.mjs +2 -2
  2. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +92 -77
  3. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +11 -5
  4. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +50 -37
  5. package/esm2020/lib/speechrecorder/session/prompting.mjs +19 -15
  6. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +14 -11
  7. package/esm2020/lib/speechrecorder/session/recording_list.mjs +2 -2
  8. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -9
  9. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +3 -3
  10. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +3 -3
  11. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +226 -206
  12. package/esm2020/lib/speechrecorderng.component.mjs +2 -1
  13. package/esm2020/lib/speechrecorderng.module.mjs +5 -5
  14. package/esm2020/lib/spr.module.version.mjs +2 -2
  15. package/esm2020/lib/ui/recordingitem_display.mjs +29 -25
  16. package/esm2020/lib/ui/responsive_component.mjs +24 -0
  17. package/fesm2015/speechrecorderng.mjs +432 -349
  18. package/fesm2015/speechrecorderng.mjs.map +1 -1
  19. package/fesm2020/speechrecorderng.mjs +432 -349
  20. package/fesm2020/speechrecorderng.mjs.map +1 -1
  21. package/lib/speechrecorder/session/audiorecorder.d.ts +5 -3
  22. package/lib/speechrecorder/session/basicrecorder.d.ts +6 -3
  23. package/lib/speechrecorder/session/controlpanel.d.ts +9 -3
  24. package/lib/speechrecorder/session/prompting.d.ts +5 -1
  25. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +5 -2
  26. package/lib/speechrecorder/session/sessionmanager.d.ts +6 -3
  27. package/lib/speechrecorderng.component.d.ts +1 -1
  28. package/lib/speechrecorderng.module.d.ts +18 -19
  29. package/lib/spr.module.version.d.ts +1 -1
  30. package/lib/ui/recordingitem_display.d.ts +8 -4
  31. package/lib/ui/responsive_component.d.ts +9 -0
  32. package/package.json +1 -2
@@ -14,7 +14,8 @@ import * as i2 from '@angular/material/icon';
14
14
  import { MatIconModule } from '@angular/material/icon';
15
15
  import * as i4 from '@angular/material/tooltip';
16
16
  import { MatTooltipModule } from '@angular/material/tooltip';
17
- import * as i1$3 from '@angular/flex-layout/extended';
17
+ import * as i1$3 from '@angular/cdk/layout';
18
+ import { Breakpoints } from '@angular/cdk/layout';
18
19
  import * as i1$4 from '@angular/material/dialog';
19
20
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
20
21
  import * as i3 from '@angular/material/button';
@@ -22,10 +23,8 @@ import { MatButtonModule } from '@angular/material/button';
22
23
  import { __decorate, __param } from 'tslib';
23
24
  import * as i3$1 from '@angular/material/progress-spinner';
24
25
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
25
- import * as i5 from '@angular/flex-layout/flex';
26
- import * as i8 from '@angular/material/progress-bar';
26
+ import * as i7 from '@angular/material/progress-bar';
27
27
  import { MatProgressBarModule } from '@angular/material/progress-bar';
28
- import { FlexLayoutModule } from '@angular/flex-layout';
29
28
  import * as i3$2 from '@angular/material/card';
30
29
  import { MatCardModule } from '@angular/material/card';
31
30
  import { MatDividerModule } from '@angular/material/divider';
@@ -2548,6 +2547,7 @@ class AudioPlayer {
2548
2547
  return this._stopAction;
2549
2548
  }
2550
2549
  set audioClip(audioClip) {
2550
+ this._audioClip = audioClip;
2551
2551
  let length = 0;
2552
2552
  let chs = 0;
2553
2553
  if (audioClip && audioClip.audioDataHolder) {
@@ -2570,7 +2570,6 @@ class AudioPlayer {
2570
2570
  else {
2571
2571
  this.audioSource = null;
2572
2572
  }
2573
- this._audioClip = audioClip;
2574
2573
  }
2575
2574
  get audioSource() {
2576
2575
  return this._audioSource;
@@ -7825,6 +7824,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
7825
7824
  type: Input
7826
7825
  }] } });
7827
7826
 
7827
+ class ResponsiveComponent {
7828
+ constructor(breakpointObserver) {
7829
+ this.breakpointObserver = breakpointObserver;
7830
+ this.screenXs = false;
7831
+ breakpointObserver
7832
+ .observe([
7833
+ Breakpoints.XSmall
7834
+ ])
7835
+ .subscribe(result => {
7836
+ this.screenXs = (result.matches);
7837
+ //console.debug("Screen XS: "+this.screenXs);
7838
+ });
7839
+ }
7840
+ }
7841
+ ResponsiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Directive });
7842
+ ResponsiveComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ResponsiveComponent, ngImport: i0 });
7843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, decorators: [{
7844
+ type: Directive
7845
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; } });
7846
+
7828
7847
  class ScrollIntoViewDirective {
7829
7848
  constructor(elRef) {
7830
7849
  this.elRef = elRef;
@@ -8479,8 +8498,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
8479
8498
  type: HostListener,
8480
8499
  args: ['touchcancel', ['$event']]
8481
8500
  }] } });
8482
- class Prompting {
8483
- constructor() {
8501
+ class Prompting extends ResponsiveComponent {
8502
+ constructor(bpo) {
8503
+ super(bpo);
8504
+ this.bpo = bpo;
8484
8505
  this.promptItem = null;
8485
8506
  this.showPrompt = false;
8486
8507
  this.items = undefined;
@@ -8501,16 +8522,16 @@ class Prompting {
8501
8522
  this.onPrevItem.emit();
8502
8523
  }
8503
8524
  }
8504
- Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, deps: [], target: i0.ɵɵFactoryTarget.Component });
8505
- 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 }], ngImport: i0, template: `
8525
+ Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
8526
+ 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: `
8506
8527
 
8507
8528
  <app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
8508
8529
  <app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
8509
8530
  [itemCount]="items?.length" [selectedItemIdx]="selectedItemIdx"
8510
8531
  [transportActions]="transportActions"></app-sprpromptingcontainer>
8511
- <app-sprprogress fxHide.xs [items]="items" [selectedItemIdx]="selectedItemIdx"
8532
+ <app-sprprogress *ngIf="!screenXs" [items]="items" [selectedItemIdx]="selectedItemIdx"
8512
8533
  (onRowSelect)="itemSelect($event)"></app-sprprogress>
8513
- <div fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
8534
+ <div #asCt [class.active]="!audioSignalCollapsed && !screenXs">
8514
8535
 
8515
8536
  <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
8516
8537
  [audioClip]="displayAudioClip"
@@ -8524,7 +8545,7 @@ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14
8524
8545
 
8525
8546
 
8526
8547
 
8527
- `, 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:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:5;box-sizing:border-box;background-color:#0000}\n"], dependencies: [{ kind: "directive", type: i1$3.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { 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"] }] });
8548
+ `, 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:0px;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"] }] });
8528
8549
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, decorators: [{
8529
8550
  type: Component,
8530
8551
  args: [{ selector: 'app-sprprompting', template: `
@@ -8533,9 +8554,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
8533
8554
  <app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
8534
8555
  [itemCount]="items?.length" [selectedItemIdx]="selectedItemIdx"
8535
8556
  [transportActions]="transportActions"></app-sprpromptingcontainer>
8536
- <app-sprprogress fxHide.xs [items]="items" [selectedItemIdx]="selectedItemIdx"
8557
+ <app-sprprogress *ngIf="!screenXs" [items]="items" [selectedItemIdx]="selectedItemIdx"
8537
8558
  (onRowSelect)="itemSelect($event)"></app-sprprogress>
8538
- <div fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
8559
+ <div #asCt [class.active]="!audioSignalCollapsed && !screenXs">
8539
8560
 
8540
8561
  <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
8541
8562
  [audioClip]="displayAudioClip"
@@ -8550,7 +8571,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
8550
8571
 
8551
8572
 
8552
8573
  `, 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:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:5;box-sizing:border-box;background-color:#0000}\n"] }]
8553
- }], propDecorators: { simpleTrafficLight: [{
8574
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { simpleTrafficLight: [{
8554
8575
  type: ViewChild,
8555
8576
  args: [SimpleTrafficLight, { static: true }]
8556
8577
  }], audioDisplay: [{
@@ -10542,6 +10563,7 @@ class UploadStatus {
10542
10563
  constructor() {
10543
10564
  this._awaitNewUpload = false;
10544
10565
  this.spinnerMode = 'determinate';
10566
+ this._colorStatus = 'primary';
10545
10567
  this._value = 100;
10546
10568
  this.displayValue = null;
10547
10569
  this.toolTipText = '';
@@ -10579,6 +10601,15 @@ class UploadStatus {
10579
10601
  }
10580
10602
  set status(status) {
10581
10603
  this._status = status;
10604
+ if ('accent' === status) {
10605
+ this._colorStatus = 'accent';
10606
+ }
10607
+ else if ('warn' === status) {
10608
+ this._colorStatus = 'warn';
10609
+ }
10610
+ else {
10611
+ this._colorStatus = 'primary';
10612
+ }
10582
10613
  this._updateSpinner();
10583
10614
  }
10584
10615
  get status() {
@@ -10627,8 +10658,9 @@ class TransportActions {
10627
10658
  this.bwdAction = new Action('Backward');
10628
10659
  }
10629
10660
  }
10630
- class TransportPanel {
10631
- constructor() {
10661
+ class TransportPanel extends ResponsiveComponent {
10662
+ constructor(breakpointObserver) {
10663
+ super(breakpointObserver);
10632
10664
  this.navigationEnabled = true;
10633
10665
  this.pausingEnabled = true;
10634
10666
  }
@@ -10700,28 +10732,28 @@ class TransportPanel {
10700
10732
  }
10701
10733
  }
10702
10734
  }
10703
- TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10704
- 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" }, ngImport: i0, template: `
10735
+ TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
10736
+ 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: `
10705
10737
  <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
10706
10738
  mat-raised-button>
10707
10739
  <mat-icon>chevron_left</mat-icon>
10708
10740
  </button>
10709
10741
  <button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled()" mat-raised-button>
10710
10742
  <mat-icon [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf="!nextDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon>
10711
- <span fxShow.xs="false">{{startStopNextName()}}</span>
10743
+ <span *ngIf="!screenXs">{{startStopNextName()}}</span>
10712
10744
  </button>
10713
10745
  <button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button>
10714
10746
  <mat-icon>pause</mat-icon>
10715
- <span fxShow.xs="false">Pause</span>
10747
+ <span *ngIf="!screenXs">Pause</span>
10716
10748
  </button>
10717
- <button id="fwdNextBtn" *ngIf="navigationEnabled" fxHide.xs (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
10749
+ <button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
10718
10750
  <mat-icon>redo</mat-icon>
10719
10751
  </button>
10720
10752
  <button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button>
10721
10753
  <mat-icon>chevron_right</mat-icon>
10722
10754
  </button>
10723
10755
 
10724
- `, 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$3.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { 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"] }] });
10756
+ `, 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"] }] });
10725
10757
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, decorators: [{
10726
10758
  type: Component,
10727
10759
  args: [{ selector: 'app-sprtransport', template: `
@@ -10731,13 +10763,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
10731
10763
  </button>
10732
10764
  <button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled()" mat-raised-button>
10733
10765
  <mat-icon [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf="!nextDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon>
10734
- <span fxShow.xs="false">{{startStopNextName()}}</span>
10766
+ <span *ngIf="!screenXs">{{startStopNextName()}}</span>
10735
10767
  </button>
10736
10768
  <button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button>
10737
10769
  <mat-icon>pause</mat-icon>
10738
- <span fxShow.xs="false">Pause</span>
10770
+ <span *ngIf="!screenXs">Pause</span>
10739
10771
  </button>
10740
- <button id="fwdNextBtn" *ngIf="navigationEnabled" fxHide.xs (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
10772
+ <button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
10741
10773
  <mat-icon>redo</mat-icon>
10742
10774
  </button>
10743
10775
  <button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button>
@@ -10745,7 +10777,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
10745
10777
  </button>
10746
10778
 
10747
10779
  `, 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"] }]
10748
- }], propDecorators: { readonly: [{
10780
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { readonly: [{
10749
10781
  type: Input
10750
10782
  }], actions: [{
10751
10783
  type: Input
@@ -10801,8 +10833,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
10801
10833
  }], ctorParameters: function () { return []; }, propDecorators: { ready: [{
10802
10834
  type: Input
10803
10835
  }] } });
10804
- class ControlPanel {
10805
- constructor(dialog) {
10836
+ class ControlPanel extends ResponsiveComponent {
10837
+ constructor(bpo, dialog) {
10838
+ super(bpo);
10839
+ this.bpo = bpo;
10806
10840
  this.dialog = dialog;
10807
10841
  this.processing = false;
10808
10842
  this.navigationEnabled = true;
@@ -10815,44 +10849,44 @@ class ControlPanel {
10815
10849
  return this._ready;
10816
10850
  }
10817
10851
  }
10818
- ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i1$4.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
10819
- 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 }], ngImport: i0, template: `
10820
- <div fxHide.xs fxLayout="row" >
10821
- <app-sprstatusdisplay fxFlex="0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10852
+ ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i1$3.BreakpointObserver }, { token: i1$4.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
10853
+ 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: `
10854
+ <div *ngIf="!screenXs" style="flex-direction: row" >
10855
+ <app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10822
10856
  class="hidden-xs"></app-sprstatusdisplay>
10823
- <app-sprtransport fxFlex="10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10824
- <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10857
+ <app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10858
+ <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10825
10859
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10826
10860
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10827
10861
  </div>
10828
- <div fxShow.xs fxHide fxLayout="column">
10829
- <div fxLayout="row" fxFlexFill>
10830
- <app-sprstatusdisplay fxFlex="10 0 0" fxFlexAlign="left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10862
+ <div *ngIf="screenXs"style="flex-direction: column" >
10863
+ <div style="flex-direction: row" class="flexFill" >
10864
+ <app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10831
10865
  class="hidden-xs"></app-sprstatusdisplay>
10832
- <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10866
+ <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10833
10867
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10834
10868
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10835
10869
  </div>
10836
10870
  <app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10837
10871
 
10838
10872
  </div>
10839
- `, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i5.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1$3.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { 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"] }] });
10873
+ `, 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"] }] });
10840
10874
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, decorators: [{
10841
10875
  type: Component,
10842
10876
  args: [{ selector: 'app-sprcontrolpanel', template: `
10843
- <div fxHide.xs fxLayout="row" >
10844
- <app-sprstatusdisplay fxFlex="0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10877
+ <div *ngIf="!screenXs" style="flex-direction: row" >
10878
+ <app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10845
10879
  class="hidden-xs"></app-sprstatusdisplay>
10846
- <app-sprtransport fxFlex="10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10847
- <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10880
+ <app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10881
+ <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10848
10882
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10849
10883
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10850
10884
  </div>
10851
- <div fxShow.xs fxHide fxLayout="column">
10852
- <div fxLayout="row" fxFlexFill>
10853
- <app-sprstatusdisplay fxFlex="10 0 0" fxFlexAlign="left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10885
+ <div *ngIf="screenXs"style="flex-direction: column" >
10886
+ <div style="flex-direction: row" class="flexFill" >
10887
+ <app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10854
10888
  class="hidden-xs"></app-sprstatusdisplay>
10855
- <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10889
+ <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10856
10890
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10857
10891
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10858
10892
  </div>
@@ -10860,7 +10894,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
10860
10894
 
10861
10895
  </div>
10862
10896
  `, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
10863
- }], ctorParameters: function () { return [{ type: i1$4.MatDialog }]; }, propDecorators: { statusDisplay: [{
10897
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i1$4.MatDialog }]; }, propDecorators: { statusDisplay: [{
10864
10898
  type: ViewChild,
10865
10899
  args: [StatusDisplay, { static: true }]
10866
10900
  }], transportPanel: [{
@@ -11455,8 +11489,10 @@ class StreamLevelMeasure {
11455
11489
 
11456
11490
  const MIN_DB_LEVEL = -40.0;
11457
11491
  const DEFAULT_WARN_DB_LEVEL = -2;
11458
- class RecordingItemControls {
11459
- constructor(ref, changeDetectorRef) {
11492
+ class RecordingItemControls extends ResponsiveComponent {
11493
+ constructor(bpo, ref, changeDetectorRef) {
11494
+ super(bpo);
11495
+ this.bpo = bpo;
11460
11496
  this.ref = ref;
11461
11497
  this.changeDetectorRef = changeDetectorRef;
11462
11498
  this.ce = null;
@@ -11509,8 +11545,8 @@ class RecordingItemControls {
11509
11545
  // this.status = 'ERROR';
11510
11546
  }
11511
11547
  }
11512
- RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11513
- 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" }, ngImport: i0, template: `
11548
+ RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11549
+ 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: `
11514
11550
  <button matTooltip="Start playback" (click)="playStartAction?.perform()"
11515
11551
  [disabled]="playStartAction?.disabled"
11516
11552
  [style.color]="playStartAction?.disabled ? 'grey' : 'green'">
@@ -11521,7 +11557,7 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
11521
11557
  [style.color]="playStopAction?.disabled ? 'grey' : 'yellow'">
11522
11558
  <mat-icon>stop</mat-icon>
11523
11559
  </button>
11524
- <button fxHide.xs matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
11560
+ <button *ngIf="!screenXs" matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
11525
11561
  (click)="showRecordingDetails()">
11526
11562
  <mat-icon>{{(audioSignalCollapsed) ? "expand_less" : "expand_more"}}</mat-icon>
11527
11563
  </button>
@@ -11532,7 +11568,7 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
11532
11568
  <div style="min-width: 14ch;padding:2px"><table style="border-style: none"><tr><td>Peak:</td><td><span matTooltip="Peak level"
11533
11569
  [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
11534
11570
  <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
11535
- `, 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$3.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { 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" }] });
11571
+ `, 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" }] });
11536
11572
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, decorators: [{
11537
11573
  type: Component,
11538
11574
  args: [{ selector: 'spr-recordingitemcontrols', template: `
@@ -11546,7 +11582,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
11546
11582
  [style.color]="playStopAction?.disabled ? 'grey' : 'yellow'">
11547
11583
  <mat-icon>stop</mat-icon>
11548
11584
  </button>
11549
- <button fxHide.xs matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
11585
+ <button *ngIf="!screenXs" matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
11550
11586
  (click)="showRecordingDetails()">
11551
11587
  <mat-icon>{{(audioSignalCollapsed) ? "expand_less" : "expand_more"}}</mat-icon>
11552
11588
  </button>
@@ -11558,7 +11594,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
11558
11594
  [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
11559
11595
  <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
11560
11596
  `, 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"] }]
11561
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
11597
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
11562
11598
  type: Input
11563
11599
  }], enableDownload: [{
11564
11600
  type: Input
@@ -11581,8 +11617,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
11581
11617
  }], displayLevelInfos: [{
11582
11618
  type: Input
11583
11619
  }] } });
11584
- class RecordingItemDisplay {
11585
- constructor(ref, changeDetectorRef) {
11620
+ class RecordingItemDisplay extends ResponsiveComponent {
11621
+ constructor(bpo, ref, changeDetectorRef) {
11622
+ super(bpo);
11623
+ this.bpo = bpo;
11586
11624
  this.ref = ref;
11587
11625
  this.changeDetectorRef = changeDetectorRef;
11588
11626
  this.ce = null;
@@ -11653,22 +11691,22 @@ class RecordingItemDisplay {
11653
11691
  this.changeDetectorRef.detectChanges();
11654
11692
  }
11655
11693
  }
11656
- RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11657
- 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 }], ngImport: i0, template: `
11658
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
11659
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11660
- <spr-recordingitemcontrols fxFlex="0 0 0" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11694
+ RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11695
+ 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: `
11696
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
11697
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11698
+ <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11661
11699
  </div>
11662
- `, 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"], dependencies: [{ kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1$3.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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"] }] });
11700
+ `, 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"] }] });
11663
11701
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, decorators: [{
11664
11702
  type: Component,
11665
11703
  args: [{ selector: 'spr-recordingitemdisplay', template: `
11666
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
11667
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11668
- <spr-recordingitemcontrols fxFlex="0 0 0" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11704
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
11705
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11706
+ <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11669
11707
  </div>
11670
- `, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n"] }]
11671
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
11708
+ `, 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"] }]
11709
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
11672
11710
  type: ViewChild,
11673
11711
  args: [LevelBar, { static: true }]
11674
11712
  }], streamingMode: [{
@@ -11950,8 +11988,10 @@ class ChunkManager {
11950
11988
  return frameLen;
11951
11989
  }
11952
11990
  }
11953
- let BasicRecorder = class BasicRecorder {
11954
- constructor(changeDetectorRef, dialog, sessionService, uploader, config) {
11991
+ let BasicRecorder = class BasicRecorder extends ResponsiveComponent {
11992
+ constructor(bpo, changeDetectorRef, dialog, sessionService, uploader, config) {
11993
+ super(bpo);
11994
+ this.bpo = bpo;
11955
11995
  this.changeDetectorRef = changeDetectorRef;
11956
11996
  this.dialog = dialog;
11957
11997
  this.sessionService = sessionService;
@@ -11979,6 +12019,7 @@ let BasicRecorder = class BasicRecorder {
11979
12019
  this.peakLevelInDb = MIN_DB_LEVEL;
11980
12020
  this.audioLoaded = false;
11981
12021
  this.disableAudioDetails = false;
12022
+ this._controlAudioPlayer = null;
11982
12023
  this.displayAudioClip = null;
11983
12024
  this.audioFetchSubscription = null;
11984
12025
  this.liveLevelDisplayState = State.READY;
@@ -12123,7 +12164,9 @@ let BasicRecorder = class BasicRecorder {
12123
12164
  }
12124
12165
  }
12125
12166
  showRecording() {
12126
- this._controlAudioPlayer.stop();
12167
+ if (this._controlAudioPlayer) {
12168
+ this._controlAudioPlayer.stop();
12169
+ }
12127
12170
  if (this.calcBufferInfosSubscr) {
12128
12171
  this.calcBufferInfosSubscr.unsubscribe();
12129
12172
  }
@@ -12495,7 +12538,7 @@ BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS = 30;
12495
12538
  // Enable only for developemnt/debug purposes of array audio buffers !!
12496
12539
  BasicRecorder.FORCE_ARRRAY_AUDIO_BUFFER = false;
12497
12540
  BasicRecorder = __decorate([
12498
- __param(4, Inject(SPEECHRECORDER_CONFIG))
12541
+ __param(5, Inject(SPEECHRECORDER_CONFIG))
12499
12542
  ], BasicRecorder);
12500
12543
 
12501
12544
  class BasicRecFilesCache {
@@ -12741,8 +12784,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
12741
12784
  const DEFAULT_PRE_REC_DELAY = 1000;
12742
12785
  const DEFAULT_POST_REC_DELAY = 500;
12743
12786
  class SessionManager extends BasicRecorder {
12744
- constructor(changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
12745
- super(changeDetectorRef, dialog, sessionService, uploader, config);
12787
+ constructor(bpo, changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
12788
+ super(bpo, changeDetectorRef, dialog, sessionService, uploader, config);
12789
+ this.bpo = bpo;
12746
12790
  this.renderer = renderer;
12747
12791
  this.recFileService = recFileService;
12748
12792
  this.enableUploadRecordings = true;
@@ -12873,7 +12917,7 @@ class SessionManager extends BasicRecorder {
12873
12917
  this.transportActions.fwdAction.onAction = () => this.nextItem();
12874
12918
  this.transportActions.fwdNextAction.onAction = () => this.nextUnrecordedItem();
12875
12919
  this.transportActions.bwdAction.onAction = () => this.prevItem();
12876
- this.playStartAction.onAction = () => this.controlAudioPlayer.start();
12920
+ this.playStartAction.onAction = () => this.controlAudioPlayer?.start();
12877
12921
  }
12878
12922
  this.startStopSignalState = 4 /* OFF */;
12879
12923
  }
@@ -13031,7 +13075,7 @@ class SessionManager extends BasicRecorder {
13031
13075
  this.transportActions.fwdAction.disabled = true;
13032
13076
  this.transportActions.fwdNextAction.disabled = true;
13033
13077
  this.transportActions.bwdAction.disabled = true;
13034
- this.displayRecFile = null;
13078
+ this.updateDisplayRecFile(null);
13035
13079
  this.displayRecFileVersion = 0;
13036
13080
  this.displayAudioClip = null;
13037
13081
  this.liveLevelDisplay.reset(true);
@@ -13129,6 +13173,9 @@ class SessionManager extends BasicRecorder {
13129
13173
  }
13130
13174
  set displayRecFile(displayRecFile) {
13131
13175
  this._displayRecFile = displayRecFile;
13176
+ }
13177
+ updateDisplayRecFile(displayRecFile, fetchAndApplyRecordingFile = true) {
13178
+ this.displayRecFile = displayRecFile;
13132
13179
  if (this._displayRecFile) {
13133
13180
  if (this.items) {
13134
13181
  this.items.currentRecordingFile = this._displayRecFile;
@@ -13136,7 +13183,9 @@ class SessionManager extends BasicRecorder {
13136
13183
  let adh = this._displayRecFile.audioDataHolder;
13137
13184
  if (adh) {
13138
13185
  this.displayAudioClip = new AudioClip(adh);
13139
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13186
+ if (this._controlAudioPlayer) {
13187
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13188
+ }
13140
13189
  this.showRecording();
13141
13190
  }
13142
13191
  else {
@@ -13145,47 +13194,90 @@ class SessionManager extends BasicRecorder {
13145
13194
  if (this.controlAudioPlayer) {
13146
13195
  this.controlAudioPlayer.audioClip = null;
13147
13196
  }
13148
- if (this._controlAudioPlayer && this._session) {
13149
- //... and try to fetch from server
13150
- this.liveLevelDisplayState = State.LOADING;
13151
- const rf = this._displayRecFile;
13152
- let audioDownloadType = this._clientAudioStorageType;
13153
- if (AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this._clientAudioStorageType || AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13154
- // Default is network mode
13155
- audioDownloadType = AudioStorageType.NET_CHUNKED;
13156
- if (rf.channels && rf.frames) {
13157
- const samples = rf.channels * rf.frames;
13158
- if (samples <= this._maxAutoNetMemStoreSamples) {
13159
- // But if audio file is small, load in continuous resp. chunked mode
13160
- if (AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13161
- audioDownloadType = AudioStorageType.MEM_ENTIRE;
13162
- }
13163
- else if (AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13164
- audioDownloadType = AudioStorageType.MEM_CHUNKED;
13197
+ if (fetchAndApplyRecordingFile) {
13198
+ if (this._controlAudioPlayer && this._session) {
13199
+ //... and try to fetch from server
13200
+ this.liveLevelDisplayState = State.LOADING;
13201
+ const rf = this._displayRecFile;
13202
+ let audioDownloadType = this._clientAudioStorageType;
13203
+ if (AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this._clientAudioStorageType || AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13204
+ // Default is network mode
13205
+ audioDownloadType = AudioStorageType.NET_CHUNKED;
13206
+ if (rf.channels && rf.frames) {
13207
+ const samples = rf.channels * rf.frames;
13208
+ if (samples <= this._maxAutoNetMemStoreSamples) {
13209
+ // But if audio file is small, load in continuous resp. chunked mode
13210
+ if (AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13211
+ audioDownloadType = AudioStorageType.MEM_ENTIRE;
13212
+ }
13213
+ else if (AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13214
+ audioDownloadType = AudioStorageType.MEM_CHUNKED;
13215
+ }
13165
13216
  }
13166
13217
  }
13167
13218
  }
13168
- }
13169
- console.debug("Audio download type: " + audioDownloadType);
13170
- if (AudioStorageType.DB_CHUNKED === this._clientAudioStorageType) {
13171
- // Fetch chunked indexed db audio buffer
13172
- let nextIab = null;
13173
- if (!this._persistentAudioStorageTarget) {
13174
- throw Error('Error: Persistent storage target not set.');
13219
+ console.debug("Audio download type: " + audioDownloadType);
13220
+ if (AudioStorageType.DB_CHUNKED === this._clientAudioStorageType) {
13221
+ // Fetch chunked indexed db audio buffer
13222
+ let nextIab = null;
13223
+ if (!this._persistentAudioStorageTarget) {
13224
+ throw Error('Error: Persistent storage target not set.');
13225
+ }
13226
+ else {
13227
+ //console.debug("Fetch audio and store to indexed db...");
13228
+ this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileIndDbAudioBuffer(this._controlAudioPlayer.context, this._persistentAudioStorageTarget, this._session.project, rf).subscribe({
13229
+ next: (iab) => {
13230
+ //console.debug("Sessionmanager: Received inddb audio buffer: "+iab);
13231
+ nextIab = iab;
13232
+ },
13233
+ complete: () => {
13234
+ this.liveLevelDisplayState = State.READY;
13235
+ let fabDh = null;
13236
+ if (nextIab) {
13237
+ if (rf && this.items) {
13238
+ fabDh = new AudioDataHolder(nextIab);
13239
+ this.items.setSprRecFileAudioData(rf, fabDh);
13240
+ }
13241
+ }
13242
+ else {
13243
+ // Should actually be handled by the error resolver
13244
+ this.statusMsg = 'Recording file could not be loaded.';
13245
+ this.statusAlertType = 'error';
13246
+ }
13247
+ if (fabDh) {
13248
+ // this.displayAudioClip could have been changed meanwhile, but the recorder unsubcribes before changing the item, therefore there should be no risk to set to wrong item
13249
+ this.displayAudioClip = new AudioClip(fabDh);
13250
+ }
13251
+ if (this._controlAudioPlayer) {
13252
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13253
+ }
13254
+ this.showRecording();
13255
+ },
13256
+ error: err => {
13257
+ console.error("Could not load recording file from server: " + err);
13258
+ this.liveLevelDisplayState = State.READY;
13259
+ this.statusMsg = 'Recording file could not be loaded: ' + err;
13260
+ this.statusAlertType = 'error';
13261
+ this.changeDetectorRef.detectChanges();
13262
+ }
13263
+ });
13264
+ }
13175
13265
  }
13176
- else {
13177
- //console.debug("Fetch audio and store to indexed db...");
13178
- this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileIndDbAudioBuffer(this._controlAudioPlayer.context, this._persistentAudioStorageTarget, this._session.project, rf).subscribe({
13179
- next: (iab) => {
13180
- //console.debug("Sessionmanager: Received inddb audio buffer: "+iab);
13181
- nextIab = iab;
13266
+ else if (AudioStorageType.NET_CHUNKED === audioDownloadType) {
13267
+ // Fetch chunked audio buffer from network
13268
+ let nextNetAb = null;
13269
+ //console.debug("Fetch chunked audio from network");
13270
+ this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileNetAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13271
+ next: (netAb) => {
13272
+ //console.debug("Sessionmanager: Received net audio buffer: "+netAb);
13273
+ nextNetAb = netAb;
13182
13274
  },
13183
13275
  complete: () => {
13184
13276
  this.liveLevelDisplayState = State.READY;
13185
13277
  let fabDh = null;
13186
- if (nextIab) {
13278
+ if (nextNetAb) {
13187
13279
  if (rf && this.items) {
13188
- fabDh = new AudioDataHolder(nextIab);
13280
+ fabDh = new AudioDataHolder(nextNetAb);
13189
13281
  this.items.setSprRecFileAudioData(rf, fabDh);
13190
13282
  }
13191
13283
  }
@@ -13196,9 +13288,12 @@ class SessionManager extends BasicRecorder {
13196
13288
  }
13197
13289
  if (fabDh) {
13198
13290
  // this.displayAudioClip could have been changed meanwhile, but the recorder unsubcribes before changing the item, therefore there should be no risk to set to wrong item
13291
+ //console.debug("set displayRecFile(): fetch net ab complete, set displayAudioClip.")
13199
13292
  this.displayAudioClip = new AudioClip(fabDh);
13200
13293
  }
13201
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13294
+ if (this._controlAudioPlayer) {
13295
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13296
+ }
13202
13297
  this.showRecording();
13203
13298
  },
13204
13299
  error: err => {
@@ -13210,126 +13305,90 @@ class SessionManager extends BasicRecorder {
13210
13305
  }
13211
13306
  });
13212
13307
  }
13213
- }
13214
- else if (AudioStorageType.NET_CHUNKED === audioDownloadType) {
13215
- // Fetch chunked audio buffer from network
13216
- let nextNetAb = null;
13217
- //console.debug("Fetch chunked audio from network");
13218
- this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileNetAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13219
- next: (netAb) => {
13220
- //console.debug("Sessionmanager: Received net audio buffer: "+netAb);
13221
- nextNetAb = netAb;
13222
- },
13223
- complete: () => {
13224
- this.liveLevelDisplayState = State.READY;
13225
- let fabDh = null;
13226
- if (nextNetAb) {
13227
- if (rf && this.items) {
13228
- fabDh = new AudioDataHolder(nextNetAb);
13229
- this.items.setSprRecFileAudioData(rf, fabDh);
13308
+ else if (AudioStorageType.MEM_CHUNKED === audioDownloadType) {
13309
+ // Fetch chunked array audio buffer
13310
+ let nextAab = null;
13311
+ //console.debug("Fetch audio and store to (chunked) array buffer...");
13312
+ this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileArrayAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13313
+ next: (aab) => {
13314
+ nextAab = aab;
13315
+ },
13316
+ complete: () => {
13317
+ this.liveLevelDisplayState = State.READY;
13318
+ let fabDh = null;
13319
+ if (nextAab) {
13320
+ if (rf && this.items) {
13321
+ fabDh = new AudioDataHolder(nextAab);
13322
+ this.items.setSprRecFileAudioData(rf, fabDh);
13323
+ }
13230
13324
  }
13231
- }
13232
- else {
13233
- // Should actually be handled by the error resolver
13234
- this.statusMsg = 'Recording file could not be loaded.';
13235
- this.statusAlertType = 'error';
13236
- }
13237
- if (fabDh) {
13238
- // this.displayAudioClip could have been changed meanwhile, but the recorder unsubcribes before changing the item, therefore there should be no risk to set to wrong item
13239
- //console.debug("set displayRecFile(): fetch net ab complete, set displayAudioClip.")
13240
- this.displayAudioClip = new AudioClip(fabDh);
13241
- }
13242
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13243
- this.showRecording();
13244
- },
13245
- error: err => {
13246
- console.error("Could not load recording file from server: " + err);
13247
- this.liveLevelDisplayState = State.READY;
13248
- this.statusMsg = 'Recording file could not be loaded: ' + err;
13249
- this.statusAlertType = 'error';
13250
- this.changeDetectorRef.detectChanges();
13251
- }
13252
- });
13253
- }
13254
- else if (AudioStorageType.MEM_CHUNKED === audioDownloadType) {
13255
- // Fetch chunked array audio buffer
13256
- let nextAab = null;
13257
- //console.debug("Fetch audio and store to (chunked) array buffer...");
13258
- this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileArrayAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13259
- next: (aab) => {
13260
- nextAab = aab;
13261
- },
13262
- complete: () => {
13263
- this.liveLevelDisplayState = State.READY;
13264
- let fabDh = null;
13265
- if (nextAab) {
13266
- if (rf && this.items) {
13267
- fabDh = new AudioDataHolder(nextAab);
13268
- this.items.setSprRecFileAudioData(rf, fabDh);
13325
+ else {
13326
+ // Should actually be handled by the error resolver
13327
+ this.statusMsg = 'Recording file could not be loaded.';
13328
+ this.statusAlertType = 'error';
13269
13329
  }
13270
- }
13271
- else {
13272
- // Should actually be handled by the error resolver
13273
- this.statusMsg = 'Recording file could not be loaded.';
13330
+ if (fabDh) {
13331
+ // this.displayAudioClip could have been changed meanwhile, but the recorder unsubcribes before changing the item, therefore there should be no risk to set to wrong item
13332
+ this.displayAudioClip = new AudioClip(fabDh);
13333
+ }
13334
+ if (this._controlAudioPlayer) {
13335
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13336
+ }
13337
+ this.showRecording();
13338
+ },
13339
+ error: err => {
13340
+ console.error("Could not load recording file from server: " + err);
13341
+ this.liveLevelDisplayState = State.READY;
13342
+ this.statusMsg = 'Recording file could not be loaded: ' + err;
13274
13343
  this.statusAlertType = 'error';
13275
13344
  }
13276
- if (fabDh) {
13277
- // this.displayAudioClip could have been changed meanwhile, but the recorder unsubcribes before changing the item, therefore there should be no risk to set to wrong item
13278
- this.displayAudioClip = new AudioClip(fabDh);
13279
- }
13280
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13281
- this.showRecording();
13282
- },
13283
- error: err => {
13284
- console.error("Could not load recording file from server: " + err);
13285
- this.liveLevelDisplayState = State.READY;
13286
- this.statusMsg = 'Recording file could not be loaded: ' + err;
13287
- this.statusAlertType = 'error';
13288
- }
13289
- });
13290
- }
13291
- else {
13292
- // Fetch regular audio buffer
13293
- //console.debug("Fetch audio and store to audio buffer...");
13294
- this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13295
- next: (ab) => {
13296
- this.liveLevelDisplayState = State.READY;
13297
- let fabDh = null;
13298
- if (ab) {
13299
- if (rf && this.items) {
13300
- if (SessionManager.FORCE_ARRRAY_AUDIO_BUFFER) {
13301
- let aab = ArrayAudioBuffer.fromAudioBuffer(ab);
13302
- fabDh = new AudioDataHolder(aab);
13303
- }
13304
- else {
13305
- fabDh = new AudioDataHolder(new AudioBufferSource(ab));
13345
+ });
13346
+ }
13347
+ else {
13348
+ // Fetch regular audio buffer
13349
+ //console.debug("Fetch audio and store to audio buffer...");
13350
+ this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13351
+ next: (ab) => {
13352
+ this.liveLevelDisplayState = State.READY;
13353
+ let fabDh = null;
13354
+ if (ab) {
13355
+ if (rf && this.items) {
13356
+ if (SessionManager.FORCE_ARRRAY_AUDIO_BUFFER) {
13357
+ let aab = ArrayAudioBuffer.fromAudioBuffer(ab);
13358
+ fabDh = new AudioDataHolder(aab);
13359
+ }
13360
+ else {
13361
+ fabDh = new AudioDataHolder(new AudioBufferSource(ab));
13362
+ }
13363
+ this.items.setSprRecFileAudioData(rf, fabDh);
13306
13364
  }
13307
- this.items.setSprRecFileAudioData(rf, fabDh);
13308
13365
  }
13309
- }
13310
- else {
13311
- // Should actually be handled by the error resolver
13312
- this.statusMsg = 'Recording file could not be loaded.';
13366
+ else {
13367
+ // Should actually be handled by the error resolver
13368
+ this.statusMsg = 'Recording file could not be loaded.';
13369
+ this.statusAlertType = 'error';
13370
+ }
13371
+ if (fabDh) {
13372
+ // this.displayAudioClip could have been changed meanwhile, but the recorder unsubcribes before changing the item, therefore there should be no risk to set to wrong item
13373
+ this.displayAudioClip = new AudioClip(fabDh);
13374
+ }
13375
+ if (this._controlAudioPlayer) {
13376
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13377
+ }
13378
+ this.showRecording();
13379
+ }, error: err => {
13380
+ console.error("Could not load recording file from server: " + err);
13381
+ this.liveLevelDisplayState = State.READY;
13382
+ this.statusMsg = 'Recording file could not be loaded: ' + err;
13313
13383
  this.statusAlertType = 'error';
13314
13384
  }
13315
- if (fabDh) {
13316
- // this.displayAudioClip could have been changed meanwhile, but the recorder unsubcribes before changing the item, therefore there should be no risk to set to wrong item
13317
- this.displayAudioClip = new AudioClip(fabDh);
13318
- }
13319
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13320
- this.showRecording();
13321
- }, error: err => {
13322
- console.error("Could not load recording file from server: " + err);
13323
- this.liveLevelDisplayState = State.READY;
13324
- this.statusMsg = 'Recording file could not be loaded: ' + err;
13325
- this.statusAlertType = 'error';
13326
- }
13327
- });
13385
+ });
13386
+ }
13387
+ }
13388
+ else {
13389
+ this.statusMsg = 'Recording file could not be decoded. Audio context unavailable.';
13390
+ this.statusAlertType = 'error';
13328
13391
  }
13329
- }
13330
- else {
13331
- this.statusMsg = 'Recording file could not be decoded. Audio context unavailable.';
13332
- this.statusAlertType = 'error';
13333
13392
  }
13334
13393
  }
13335
13394
  }
@@ -13369,7 +13428,7 @@ class SessionManager extends BasicRecorder {
13369
13428
  this.applyPrompt();
13370
13429
  }
13371
13430
  if (isNonrecording) {
13372
- this.displayRecFile = null;
13431
+ this.updateDisplayRecFile(null);
13373
13432
  this.displayRecFileVersion = 0;
13374
13433
  this.startStopSignalState = 4 /* OFF */;
13375
13434
  }
@@ -13384,11 +13443,11 @@ class SessionManager extends BasicRecorder {
13384
13443
  if (availRecfiles > 0) {
13385
13444
  let rfVers = availRecfiles - 1;
13386
13445
  recentRecFile = it.recs[rfVers];
13387
- this.displayRecFile = recentRecFile;
13446
+ this.updateDisplayRecFile(recentRecFile, !temporary);
13388
13447
  this.displayRecFileVersion = rfVers;
13389
13448
  }
13390
13449
  else {
13391
- this.displayRecFile = null;
13450
+ this.updateDisplayRecFile(null);
13392
13451
  this.displayRecFileVersion = 0;
13393
13452
  }
13394
13453
  }
@@ -13868,9 +13927,14 @@ class SessionManager extends BasicRecorder {
13868
13927
  }
13869
13928
  }
13870
13929
  updateControlPlaybackPosition() {
13871
- if (this._controlAudioPlayer.playPositionFrames) {
13872
- this.prompting.audioDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;
13873
- this.liveLevelDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;
13930
+ if (this._controlAudioPlayer) {
13931
+ const ppFrames = this._controlAudioPlayer.playPositionFrames;
13932
+ if (ppFrames !== null) {
13933
+ if (this.prompting.audioDisplay) {
13934
+ this.prompting.audioDisplay.playFramePosition = ppFrames;
13935
+ }
13936
+ this.liveLevelDisplay.playFramePosition = ppFrames;
13937
+ }
13874
13938
  }
13875
13939
  }
13876
13940
  audioPlayerUpdate(e) {
@@ -13889,7 +13953,7 @@ class SessionManager extends BasicRecorder {
13889
13953
  }
13890
13954
  }
13891
13955
  }
13892
- SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$4.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
13956
+ SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", 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 });
13893
13957
  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: `
13894
13958
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
13895
13959
  <app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
@@ -13905,13 +13969,13 @@ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
13905
13969
  [playStopAction]="controlAudioPlayer?.stopAction">
13906
13970
 
13907
13971
  </app-sprprompting>
13908
- <mat-progress-bar [value]="progressPercentValue()" fxShow="false" fxShow.xs="true" ></mat-progress-bar>
13972
+ <mat-progress-bar [value]="progressPercentValue()" *ngIf="screenXs" ></mat-progress-bar>
13909
13973
 
13910
13974
 
13911
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
13912
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording() || keepLiveLevel" [displayLevelInfos]="displayAudioClip?.levelInfos" [state]="liveLevelDisplayState"></audio-levelbar>
13913
- <div fxLayout="row">
13914
- <spr-recordingitemcontrols fxFlex="10 0 1"
13975
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
13976
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="isRecording() || keepLiveLevel" [displayLevelInfos]="displayAudioClip?.levelInfos" [state]="liveLevelDisplayState"></audio-levelbar>
13977
+ <div style="display:flex;flex-direction: row">
13978
+ <spr-recordingitemcontrols style="display:flex;flex:10 0 1px"
13915
13979
  [audioLoaded]="audioLoaded"
13916
13980
  [disableAudioDetails]="disableAudioDetails"
13917
13981
  [playStartAction]="controlAudioPlayer?.startAction"
@@ -13921,25 +13985,25 @@ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
13921
13985
  (onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
13922
13986
  </spr-recordingitemcontrols>
13923
13987
 
13924
- <app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
13988
+ <app-uploadstatus *ngIf="screenXs && enableUploadRecordings" class="ricontrols dark" style="flex:0 0 0" [value]="uploadProgress"
13925
13989
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
13926
- <app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
13927
- <app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
13990
+ <app-wakelockindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
13991
+ <app-readystateindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
13928
13992
  </div>
13929
13993
  </div>
13930
- <div #controlpanel class="controlpanel" fxLayout="row">
13931
- <div fxFlex="1 1 30%" fxLayoutAlign="start center">
13932
- <app-sprstatusdisplay fxHide.xs [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
13994
+ <div #controlpanel class="controlpanel">
13995
+ <div style="flex:1 1 30%;justify-content: flex-start;align-items: center; align-content: center">
13996
+ <app-sprstatusdisplay *ngIf="!screenXs" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
13933
13997
  </div>
13934
- <app-sprtransport fxFlex="10 0 30%" fxLayoutAlign="center center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="!items || items.length()>1"></app-sprtransport>
13935
- <div fxFlex="1 1 30%" fxLayoutAlign="end center" fxLayout="row">
13936
- <app-uploadstatus class="ricontrols" fxHide.xs fxLayoutAlign="end center" *ngIf="enableUploadRecordings" [value]="uploadProgress"
13998
+ <app-sprtransport style="display:flex;flex:10 0 30%;justify-content: center;align-items: center; align-content: center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="!items || items.length()>1"></app-sprtransport>
13999
+ <div style="display:flex;flex:1 1 30%;flex-direction:row;justify-content: flex-end;align-items: center; align-content: center">
14000
+ <app-uploadstatus *ngIf="!screenXs && enableUploadRecordings" class="ricontrols" [value]="uploadProgress"
13937
14001
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
13938
- <app-wakelockindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
13939
- <app-readystateindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [ready]="dataSaved && !isActive()"></app-readystateindicator>
14002
+ <app-wakelockindicator *ngIf="!screenXs" class="ricontrols" [screenLocked]="screenLocked"></app-wakelockindicator>
14003
+ <app-readystateindicator *ngIf="!screenXs" class="ricontrols" [ready]="dataSaved && !isActive()"></app-readystateindicator>
13940
14004
  </div>
13941
14005
  </div>
13942
- `, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1$3.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i1$3.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i8.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"] }] });
14006
+ `, 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"] }] });
13943
14007
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, decorators: [{
13944
14008
  type: Component,
13945
14009
  args: [{ selector: 'app-sprrecordingsession', providers: [SessionService], template: `
@@ -13957,13 +14021,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
13957
14021
  [playStopAction]="controlAudioPlayer?.stopAction">
13958
14022
 
13959
14023
  </app-sprprompting>
13960
- <mat-progress-bar [value]="progressPercentValue()" fxShow="false" fxShow.xs="true" ></mat-progress-bar>
14024
+ <mat-progress-bar [value]="progressPercentValue()" *ngIf="screenXs" ></mat-progress-bar>
13961
14025
 
13962
14026
 
13963
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
13964
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording() || keepLiveLevel" [displayLevelInfos]="displayAudioClip?.levelInfos" [state]="liveLevelDisplayState"></audio-levelbar>
13965
- <div fxLayout="row">
13966
- <spr-recordingitemcontrols fxFlex="10 0 1"
14027
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
14028
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="isRecording() || keepLiveLevel" [displayLevelInfos]="displayAudioClip?.levelInfos" [state]="liveLevelDisplayState"></audio-levelbar>
14029
+ <div style="display:flex;flex-direction: row">
14030
+ <spr-recordingitemcontrols style="display:flex;flex:10 0 1px"
13967
14031
  [audioLoaded]="audioLoaded"
13968
14032
  [disableAudioDetails]="disableAudioDetails"
13969
14033
  [playStartAction]="controlAudioPlayer?.startAction"
@@ -13973,26 +14037,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
13973
14037
  (onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
13974
14038
  </spr-recordingitemcontrols>
13975
14039
 
13976
- <app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
14040
+ <app-uploadstatus *ngIf="screenXs && enableUploadRecordings" class="ricontrols dark" style="flex:0 0 0" [value]="uploadProgress"
13977
14041
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
13978
- <app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
13979
- <app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
14042
+ <app-wakelockindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
14043
+ <app-readystateindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
13980
14044
  </div>
13981
14045
  </div>
13982
- <div #controlpanel class="controlpanel" fxLayout="row">
13983
- <div fxFlex="1 1 30%" fxLayoutAlign="start center">
13984
- <app-sprstatusdisplay fxHide.xs [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
14046
+ <div #controlpanel class="controlpanel">
14047
+ <div style="flex:1 1 30%;justify-content: flex-start;align-items: center; align-content: center">
14048
+ <app-sprstatusdisplay *ngIf="!screenXs" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
13985
14049
  </div>
13986
- <app-sprtransport fxFlex="10 0 30%" fxLayoutAlign="center center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="!items || items.length()>1"></app-sprtransport>
13987
- <div fxFlex="1 1 30%" fxLayoutAlign="end center" fxLayout="row">
13988
- <app-uploadstatus class="ricontrols" fxHide.xs fxLayoutAlign="end center" *ngIf="enableUploadRecordings" [value]="uploadProgress"
14050
+ <app-sprtransport style="display:flex;flex:10 0 30%;justify-content: center;align-items: center; align-content: center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="!items || items.length()>1"></app-sprtransport>
14051
+ <div style="display:flex;flex:1 1 30%;flex-direction:row;justify-content: flex-end;align-items: center; align-content: center">
14052
+ <app-uploadstatus *ngIf="!screenXs && enableUploadRecordings" class="ricontrols" [value]="uploadProgress"
13989
14053
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
13990
- <app-wakelockindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
13991
- <app-readystateindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [ready]="dataSaved && !isActive()"></app-readystateindicator>
14054
+ <app-wakelockindicator *ngIf="!screenXs" class="ricontrols" [screenLocked]="screenLocked"></app-wakelockindicator>
14055
+ <app-readystateindicator *ngIf="!screenXs" class="ricontrols" [ready]="dataSaved && !isActive()"></app-readystateindicator>
13992
14056
  </div>
13993
14057
  </div>
13994
- `, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
13995
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
14058
+ `, 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"] }]
14059
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
13996
14060
  type: Inject,
13997
14061
  args: [SPEECHRECORDER_CONFIG]
13998
14062
  }] }]; }, propDecorators: { projectName: [{
@@ -14249,6 +14313,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
14249
14313
  this.scriptService = scriptService;
14250
14314
  this.recFilesService = recFilesService;
14251
14315
  this.uploader = uploader;
14316
+ this.controlAudioPlayer = null;
14252
14317
  this._project = null;
14253
14318
  }
14254
14319
  handleError(err) {
@@ -15222,16 +15287,16 @@ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15222
15287
  <legend>Navigate</legend>
15223
15288
  <mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
15224
15289
  <div *ngIf="!naviInfoLoading" style="flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap">
15225
- <button (click)="firstAction?.perform()" [disabled]="!firstAction || firstAction?.disabled" matTooltip="First recording file">
15290
+ <button (click)="firstAction?.perform()" [disabled]="!firstAction || firstAction.disabled" matTooltip="First recording file">
15226
15291
  <mat-icon>first_page</mat-icon>
15227
15292
  </button>
15228
- <button (click)="prevAction?.perform()" [disabled]="!prevAction || prevAction?.disabled" matTooltip="Previous recording file">
15293
+ <button (click)="prevAction?.perform()" [disabled]="!prevAction || prevAction.disabled" matTooltip="Previous recording file">
15229
15294
  <mat-icon>chevron_left</mat-icon>
15230
15295
  </button>
15231
- <button (click)="nextAction?.perform()" [disabled]="!nextAction || nextAction?.disabled" matTooltip="Next recording file">
15296
+ <button (click)="nextAction?.perform()" [disabled]="!nextAction || nextAction.disabled" matTooltip="Next recording file">
15232
15297
  <mat-icon>chevron_right</mat-icon>
15233
15298
  </button>
15234
- <button (click)="lastAction?.perform()" [disabled]="!lastAction || lastAction?.disabled" matTooltip="Last recording file">
15299
+ <button (click)="lastAction?.perform()" [disabled]="!lastAction || lastAction.disabled" matTooltip="Last recording file">
15235
15300
  <mat-icon>last_page</mat-icon>
15236
15301
  </button>
15237
15302
  </div>
@@ -15257,16 +15322,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
15257
15322
  <legend>Navigate</legend>
15258
15323
  <mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
15259
15324
  <div *ngIf="!naviInfoLoading" style="flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap">
15260
- <button (click)="firstAction?.perform()" [disabled]="!firstAction || firstAction?.disabled" matTooltip="First recording file">
15325
+ <button (click)="firstAction?.perform()" [disabled]="!firstAction || firstAction.disabled" matTooltip="First recording file">
15261
15326
  <mat-icon>first_page</mat-icon>
15262
15327
  </button>
15263
- <button (click)="prevAction?.perform()" [disabled]="!prevAction || prevAction?.disabled" matTooltip="Previous recording file">
15328
+ <button (click)="prevAction?.perform()" [disabled]="!prevAction || prevAction.disabled" matTooltip="Previous recording file">
15264
15329
  <mat-icon>chevron_left</mat-icon>
15265
15330
  </button>
15266
- <button (click)="nextAction?.perform()" [disabled]="!nextAction || nextAction?.disabled" matTooltip="Next recording file">
15331
+ <button (click)="nextAction?.perform()" [disabled]="!nextAction || nextAction.disabled" matTooltip="Next recording file">
15267
15332
  <mat-icon>chevron_right</mat-icon>
15268
15333
  </button>
15269
- <button (click)="lastAction?.perform()" [disabled]="!lastAction || lastAction?.disabled" matTooltip="Last recording file">
15334
+ <button (click)="lastAction?.perform()" [disabled]="!lastAction || lastAction.disabled" matTooltip="Last recording file">
15270
15335
  <mat-icon>last_page</mat-icon>
15271
15336
  </button>
15272
15337
  </div>
@@ -15788,7 +15853,7 @@ RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15788
15853
  [zoomOutAction]="zoomOutAction"
15789
15854
  [zoomSelectedAction]="zoomSelectedAction"
15790
15855
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
15791
- <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>
15856
+ <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>
15792
15857
  </div>
15793
15858
  `, 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"] }] });
15794
15859
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileViewComponent, decorators: [{
@@ -15808,7 +15873,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
15808
15873
  [zoomOutAction]="zoomOutAction"
15809
15874
  [zoomSelectedAction]="zoomSelectedAction"
15810
15875
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
15811
- <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>
15876
+ <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>
15812
15877
  </div>
15813
15878
  `, 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"] }]
15814
15879
  }], 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: [{
@@ -15913,7 +15978,7 @@ RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
15913
15978
  [zoomOutAction]="zoomOutAction"
15914
15979
  [zoomSelectedAction]="zoomSelectedAction"
15915
15980
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
15916
- <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>
15981
+ <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>
15917
15982
  </div>
15918
15983
 
15919
15984
  <button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
@@ -15936,7 +16001,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
15936
16001
  [zoomOutAction]="zoomOutAction"
15937
16002
  [zoomSelectedAction]="zoomSelectedAction"
15938
16003
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
15939
- <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>
16004
+ <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>
15940
16005
  </div>
15941
16006
 
15942
16007
  <button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
@@ -16078,7 +16143,7 @@ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
16078
16143
  </mat-card-content>
16079
16144
  </mat-card>
16080
16145
 
16081
- `, 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}\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" }] });
16146
+ `, 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" }] });
16082
16147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingList, decorators: [{
16083
16148
  type: Component,
16084
16149
  args: [{ selector: 'app-recordinglist', template: `
@@ -16125,7 +16190,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16125
16190
  </mat-card-content>
16126
16191
  </mat-card>
16127
16192
 
16128
- `, 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}\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"] }]
16193
+ `, 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"] }]
16129
16194
  }], ctorParameters: function () { return []; }, propDecorators: { selectDisabled: [{
16130
16195
  type: Input
16131
16196
  }], selectedRecordingFileChanged: [{
@@ -16134,8 +16199,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16134
16199
  type: Input
16135
16200
  }] } });
16136
16201
 
16137
- class RecorderCombiPane {
16138
- constructor() {
16202
+ class RecorderCombiPane extends ResponsiveComponent {
16203
+ constructor(bpo) {
16204
+ super(bpo);
16205
+ this.bpo = bpo;
16139
16206
  this.selectDisabled = false;
16140
16207
  this.selectedRecordingFileChanged = new EventEmitter();
16141
16208
  this.selectedRecordingFile = null;
@@ -16157,12 +16224,12 @@ class RecorderCombiPane {
16157
16224
  this.recordingListComp.selectTop();
16158
16225
  }
16159
16226
  }
16160
- RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, deps: [], target: i0.ɵɵFactoryTarget.Component });
16161
- 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 }], ngImport: i0, template: `
16227
+ RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
16228
+ 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: `
16162
16229
  <div class="scrollList">
16163
16230
  <app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
16164
16231
  </div>
16165
- <div class="collapsable" fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
16232
+ <div class="collapsable" #asCt [class.active]="!audioSignalCollapsed && !screenXs">
16166
16233
  <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
16167
16234
  [audioClip]="displayAudioClip"
16168
16235
  [playStartAction]="playStartAction"
@@ -16170,14 +16237,14 @@ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
16170
16237
  [autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
16171
16238
  [playStopAction]="playStopAction"></app-audiodisplay>
16172
16239
  </div>
16173
- `, 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}\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:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"], dependencies: [{ kind: "directive", type: i1$3.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { 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"] }] });
16240
+ `, 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:0px;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"] }] });
16174
16241
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, decorators: [{
16175
16242
  type: Component,
16176
16243
  args: [{ selector: 'app-recordercombipane', template: `
16177
16244
  <div class="scrollList">
16178
16245
  <app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
16179
16246
  </div>
16180
- <div class="collapsable" fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
16247
+ <div class="collapsable" #asCt [class.active]="!audioSignalCollapsed && !screenXs">
16181
16248
  <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
16182
16249
  [audioClip]="displayAudioClip"
16183
16250
  [playStartAction]="playStartAction"
@@ -16185,8 +16252,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16185
16252
  [autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
16186
16253
  [playStopAction]="playStopAction"></app-audiodisplay>
16187
16254
  </div>
16188
- `, 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}\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:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"] }]
16189
- }], ctorParameters: function () { return []; }, propDecorators: { recordingListComp: [{
16255
+ `, 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:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"] }]
16256
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { recordingListComp: [{
16190
16257
  type: ViewChild,
16191
16258
  args: [RecordingList]
16192
16259
  }], selectDisabled: [{
@@ -16213,8 +16280,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16213
16280
  }] } });
16214
16281
 
16215
16282
  class AudioRecorder extends BasicRecorder {
16216
- constructor(changeDetectorRef, renderer, route, dialog, sessionService, recFileService, uploader, config) {
16217
- super(changeDetectorRef, dialog, sessionService, uploader, config);
16283
+ constructor(bpo, changeDetectorRef, renderer, route, dialog, sessionService, recFileService, uploader, config) {
16284
+ super(bpo, changeDetectorRef, dialog, sessionService, uploader, config);
16285
+ this.bpo = bpo;
16218
16286
  this.renderer = renderer;
16219
16287
  this.route = route;
16220
16288
  this.recFileService = recFileService;
@@ -16333,7 +16401,7 @@ class AudioRecorder extends BasicRecorder {
16333
16401
  this.transportActions.stopAction.onAction = () => this.stopItem();
16334
16402
  this.transportActions.nextAction.onAction = () => this.stopItem();
16335
16403
  //this.transportActions.pauseAction.onAction = () => this.pauseItem();
16336
- this.playStartAction.onAction = () => this.controlAudioPlayer.start();
16404
+ this.playStartAction.onAction = () => this.controlAudioPlayer?.start();
16337
16405
  }
16338
16406
  this.uploader.listener = (ue) => {
16339
16407
  this.uploadUpdate(ue);
@@ -16602,14 +16670,18 @@ class AudioRecorder extends BasicRecorder {
16602
16670
  this.displayAudioClip = new AudioClip(adh);
16603
16671
  //this.audioLoaded=true;
16604
16672
  //console.debug(" set recording file: display audio clip set");
16605
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16673
+ if (this._controlAudioPlayer) {
16674
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16675
+ }
16606
16676
  this.showRecording();
16607
16677
  }
16608
16678
  else {
16609
16679
  // clear for now ...
16610
16680
  this.displayAudioClip = null;
16611
16681
  //console.debug("set recording file: display audio clip null");
16612
- this.controlAudioPlayer.audioClip = null;
16682
+ if (this._controlAudioPlayer) {
16683
+ this._controlAudioPlayer.audioClip = null;
16684
+ }
16613
16685
  if (this._controlAudioPlayer && this._session) {
16614
16686
  //... and try to fetch from server
16615
16687
  this.liveLevelDisplayState = State.LOADING;
@@ -16663,7 +16735,9 @@ class AudioRecorder extends BasicRecorder {
16663
16735
  // this.displayAudioClip could have been changed meanwhile, but the recorder unsubcribes before changing the item. Therefore, there should be no risk to set to wrong item
16664
16736
  this.displayAudioClip = new AudioClip(fabDh);
16665
16737
  }
16666
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16738
+ if (this._controlAudioPlayer) {
16739
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16740
+ }
16667
16741
  this.showRecording();
16668
16742
  },
16669
16743
  error: err => {
@@ -16707,7 +16781,9 @@ class AudioRecorder extends BasicRecorder {
16707
16781
  // this.audioLoaded=true;
16708
16782
  // }
16709
16783
  }
16710
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16784
+ if (this._controlAudioPlayer) {
16785
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16786
+ }
16711
16787
  this.showRecording();
16712
16788
  },
16713
16789
  error: err => {
@@ -16746,7 +16822,9 @@ class AudioRecorder extends BasicRecorder {
16746
16822
  this.displayAudioClip = new AudioClip(fabDh);
16747
16823
  //this.audioLoaded=true;
16748
16824
  }
16749
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16825
+ if (this._controlAudioPlayer) {
16826
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16827
+ }
16750
16828
  this.showRecording();
16751
16829
  },
16752
16830
  error: err => {
@@ -16780,7 +16858,9 @@ class AudioRecorder extends BasicRecorder {
16780
16858
  //this.audioLoaded=true;
16781
16859
  //console.debug("set recording file: display audio clip from fetched audio buffer");
16782
16860
  }
16783
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16861
+ if (this._controlAudioPlayer) {
16862
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16863
+ }
16784
16864
  this.showRecording();
16785
16865
  }, error: err => {
16786
16866
  console.error("Could not load recording file from server: " + err);
@@ -16800,7 +16880,9 @@ class AudioRecorder extends BasicRecorder {
16800
16880
  else {
16801
16881
  //console.debug("recording file null");
16802
16882
  this.displayAudioClip = null;
16803
- this.controlAudioPlayer.audioClip = null;
16883
+ if (this._controlAudioPlayer) {
16884
+ this._controlAudioPlayer.audioClip = null;
16885
+ }
16804
16886
  }
16805
16887
  this.showRecording();
16806
16888
  }
@@ -17086,9 +17168,12 @@ class AudioRecorder extends BasicRecorder {
17086
17168
  }
17087
17169
  }
17088
17170
  updateControlPlaybackPosition() {
17089
- if (this._controlAudioPlayer.playPositionFrames) {
17090
- this.recorderCombiPane.audioDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;
17091
- this.liveLevelDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;
17171
+ if (this._controlAudioPlayer) {
17172
+ const ppFrames = this._controlAudioPlayer.playPositionFrames;
17173
+ if (ppFrames !== null) {
17174
+ this.recorderCombiPane.audioDisplay.playFramePosition = ppFrames;
17175
+ this.liveLevelDisplay.playFramePosition = ppFrames;
17176
+ }
17092
17177
  }
17093
17178
  }
17094
17179
  audioPlayerUpdate(e) {
@@ -17107,7 +17192,7 @@ class AudioRecorder extends BasicRecorder {
17107
17192
  }
17108
17193
  }
17109
17194
  }
17110
- AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, deps: [{ 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 });
17195
+ AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", 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 });
17111
17196
  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: `
17112
17197
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
17113
17198
  <app-warningbar [show]="isDefaultAudioTestSession()"
@@ -17117,18 +17202,17 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
17117
17202
  [selectedRecordingFile]="displayRecFile"
17118
17203
  [selectDisabled]="isActive()"
17119
17204
  [displayAudioClip]="displayAudioClip"
17120
- [playStartAction]="controlAudioPlayer.startAction"
17121
- [playStopAction]="controlAudioPlayer.stopAction"
17122
- [playSelectionAction]="controlAudioPlayer.startSelectionAction"
17123
- [autoPlayOnSelectToggleAction]="controlAudioPlayer.autoPlayOnSelectToggleAction"
17205
+ [playStartAction]="controlAudioPlayer?.startAction"
17206
+ [playStopAction]="controlAudioPlayer?.stopAction"
17207
+ [playSelectionAction]="controlAudioPlayer?.startSelectionAction"
17208
+ [autoPlayOnSelectToggleAction]="controlAudioPlayer?.autoPlayOnSelectToggleAction"
17124
17209
  ></app-recordercombipane>
17125
17210
 
17126
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}"
17127
- [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
17128
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording() || keepLiveLevel" [state]="liveLevelDisplayState"
17211
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
17212
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="isRecording() || keepLiveLevel" [state]="liveLevelDisplayState"
17129
17213
  [displayLevelInfos]="displayAudioClip?.levelInfos"></audio-levelbar>
17130
- <div fxLayout="row">
17131
- <spr-recordingitemcontrols fxFlex="10 0 1"
17214
+ <div style="flex-direction: row">
17215
+ <spr-recordingitemcontrols style="flex:10 0 1%"
17132
17216
  [disableAudioDetails]="disableAudioDetails"
17133
17217
  [audioLoaded]="audioLoaded"
17134
17218
  [playStartAction]="controlAudioPlayer?.startAction"
@@ -17138,19 +17222,19 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
17138
17222
  (onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
17139
17223
  </spr-recordingitemcontrols>
17140
17224
 
17141
- <app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
17225
+ <app-uploadstatus *ngIf="screenXs && enableUploadRecordings" class="ricontrols dark" style="flex:0 0 0"
17142
17226
  [value]="uploadProgress"
17143
17227
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
17144
- <app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
17145
- <app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
17228
+ <app-wakelockindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
17229
+ <app-readystateindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0"
17146
17230
  [ready]="dataSaved && !isActive()"></app-readystateindicator>
17147
17231
  </div>
17148
17232
  </div>
17149
- <div #controlpanel class="controlpanel" fxLayout="row">
17150
- <app-sprstatusdisplay fxHide.xs fxFlex="30% 1 30%" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType"
17233
+ <div #controlpanel class="controlpanel">
17234
+ <app-sprstatusdisplay *ngIf="!screenXs" style="flex:0.333 1 30%" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType"
17151
17235
  [statusWaiting]="statusWaiting"
17152
17236
  class="hidden-xs"></app-sprstatusdisplay>
17153
- <div fxFlex="100% 0 100%" class="startstop">
17237
+ <div style="flex:1 0 100%" class="startstop">
17154
17238
  <div style="align-content: center">
17155
17239
  <button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
17156
17240
  <mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
@@ -17158,18 +17242,18 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
17158
17242
  </button>
17159
17243
  </div>
17160
17244
  </div>
17161
- <div fxFlex="30% 1 30%" >
17162
- <div fxFlex="1 1 auto"></div>
17245
+ <div style="flex:0.333 1 30%" >
17246
+ <div style="flex:1 1 auto"></div>
17163
17247
 
17164
- <app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
17248
+ <app-uploadstatus *ngIf="!screenXs && enableUploadRecordings" class="ricontrols" style="flex:0 0 0"
17165
17249
  [value]="uploadProgress"
17166
17250
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
17167
- <app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
17168
- <app-readystateindicator class="ricontrols" fxHide.xs
17251
+ <app-wakelockindicator *ngIf="!screenXs" class="ricontrols" [screenLocked]="screenLocked"></app-wakelockindicator>
17252
+ <app-readystateindicator *ngIf="!screenXs" class="ricontrols"
17169
17253
  [ready]="dataSaved && !isActive()"></app-readystateindicator>
17170
17254
  </div>
17171
17255
  </div>
17172
- `, 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{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;text-align:center;align-content:center;align-items:center}\n", ".bigbutton{min-width:70px;min-height:50px;font-size:50px;border-radius:20px}\n"], dependencies: [{ kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1$3.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i1$3.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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"] }] });
17256
+ `, 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%;text-align:center;align-content:center;align-items: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"] }] });
17173
17257
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, decorators: [{
17174
17258
  type: Component,
17175
17259
  args: [{ selector: 'app-audiorecorder', providers: [SessionService], template: `
@@ -17181,18 +17265,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
17181
17265
  [selectedRecordingFile]="displayRecFile"
17182
17266
  [selectDisabled]="isActive()"
17183
17267
  [displayAudioClip]="displayAudioClip"
17184
- [playStartAction]="controlAudioPlayer.startAction"
17185
- [playStopAction]="controlAudioPlayer.stopAction"
17186
- [playSelectionAction]="controlAudioPlayer.startSelectionAction"
17187
- [autoPlayOnSelectToggleAction]="controlAudioPlayer.autoPlayOnSelectToggleAction"
17268
+ [playStartAction]="controlAudioPlayer?.startAction"
17269
+ [playStopAction]="controlAudioPlayer?.stopAction"
17270
+ [playSelectionAction]="controlAudioPlayer?.startSelectionAction"
17271
+ [autoPlayOnSelectToggleAction]="controlAudioPlayer?.autoPlayOnSelectToggleAction"
17188
17272
  ></app-recordercombipane>
17189
17273
 
17190
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}"
17191
- [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
17192
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording() || keepLiveLevel" [state]="liveLevelDisplayState"
17274
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
17275
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="isRecording() || keepLiveLevel" [state]="liveLevelDisplayState"
17193
17276
  [displayLevelInfos]="displayAudioClip?.levelInfos"></audio-levelbar>
17194
- <div fxLayout="row">
17195
- <spr-recordingitemcontrols fxFlex="10 0 1"
17277
+ <div style="flex-direction: row">
17278
+ <spr-recordingitemcontrols style="flex:10 0 1%"
17196
17279
  [disableAudioDetails]="disableAudioDetails"
17197
17280
  [audioLoaded]="audioLoaded"
17198
17281
  [playStartAction]="controlAudioPlayer?.startAction"
@@ -17202,19 +17285,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
17202
17285
  (onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
17203
17286
  </spr-recordingitemcontrols>
17204
17287
 
17205
- <app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
17288
+ <app-uploadstatus *ngIf="screenXs && enableUploadRecordings" class="ricontrols dark" style="flex:0 0 0"
17206
17289
  [value]="uploadProgress"
17207
17290
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
17208
- <app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
17209
- <app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
17291
+ <app-wakelockindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
17292
+ <app-readystateindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0"
17210
17293
  [ready]="dataSaved && !isActive()"></app-readystateindicator>
17211
17294
  </div>
17212
17295
  </div>
17213
- <div #controlpanel class="controlpanel" fxLayout="row">
17214
- <app-sprstatusdisplay fxHide.xs fxFlex="30% 1 30%" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType"
17296
+ <div #controlpanel class="controlpanel">
17297
+ <app-sprstatusdisplay *ngIf="!screenXs" style="flex:0.333 1 30%" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType"
17215
17298
  [statusWaiting]="statusWaiting"
17216
17299
  class="hidden-xs"></app-sprstatusdisplay>
17217
- <div fxFlex="100% 0 100%" class="startstop">
17300
+ <div style="flex:1 0 100%" class="startstop">
17218
17301
  <div style="align-content: center">
17219
17302
  <button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
17220
17303
  <mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
@@ -17222,19 +17305,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
17222
17305
  </button>
17223
17306
  </div>
17224
17307
  </div>
17225
- <div fxFlex="30% 1 30%" >
17226
- <div fxFlex="1 1 auto"></div>
17308
+ <div style="flex:0.333 1 30%" >
17309
+ <div style="flex:1 1 auto"></div>
17227
17310
 
17228
- <app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
17311
+ <app-uploadstatus *ngIf="!screenXs && enableUploadRecordings" class="ricontrols" style="flex:0 0 0"
17229
17312
  [value]="uploadProgress"
17230
17313
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
17231
- <app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
17232
- <app-readystateindicator class="ricontrols" fxHide.xs
17314
+ <app-wakelockindicator *ngIf="!screenXs" class="ricontrols" [screenLocked]="screenLocked"></app-wakelockindicator>
17315
+ <app-readystateindicator *ngIf="!screenXs" class="ricontrols"
17233
17316
  [ready]="dataSaved && !isActive()"></app-readystateindicator>
17234
17317
  </div>
17235
17318
  </div>
17236
- `, 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{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;text-align:center;align-content:center;align-items:center}\n", ".bigbutton{min-width:70px;min-height:50px;font-size:50px;border-radius:20px}\n"] }]
17237
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$2.ActivatedRoute }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
17319
+ `, 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%;text-align:center;align-content:center;align-items: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"] }]
17320
+ }], ctorParameters: function () { 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: [{
17238
17321
  type: Inject,
17239
17322
  args: [SPEECHRECORDER_CONFIG]
17240
17323
  }] }]; }, propDecorators: { projectName: [{
@@ -17424,20 +17507,20 @@ class SpeechrecorderngModule {
17424
17507
  }
17425
17508
  SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17426
17509
  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,
17427
- 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, FlexLayoutModule, 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] });
17428
- 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), FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule] });
17510
+ 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] });
17511
+ 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] });
17429
17512
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
17430
17513
  type: NgModule,
17431
17514
  args: [{
17432
17515
  declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
17433
17516
  ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder],
17434
17517
  exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder],
17435
- imports: [RouterModule.forChild(SPR_ROUTES), FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule],
17518
+ imports: [RouterModule.forChild(SPR_ROUTES), CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule],
17436
17519
  providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader]
17437
17520
  }]
17438
17521
  }] });
17439
17522
 
17440
- const VERSION = '3.3.1';
17523
+ const VERSION = '3.3.4';
17441
17524
 
17442
17525
  /*
17443
17526
  * Public API Surface of speechrecorderng