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';
@@ -2562,6 +2561,7 @@ class AudioPlayer {
2562
2561
  return this._stopAction;
2563
2562
  }
2564
2563
  set audioClip(audioClip) {
2564
+ this._audioClip = audioClip;
2565
2565
  let length = 0;
2566
2566
  let chs = 0;
2567
2567
  if (audioClip && audioClip.audioDataHolder) {
@@ -2584,7 +2584,6 @@ class AudioPlayer {
2584
2584
  else {
2585
2585
  this.audioSource = null;
2586
2586
  }
2587
- this._audioClip = audioClip;
2588
2587
  }
2589
2588
  get audioSource() {
2590
2589
  return this._audioSource;
@@ -7846,6 +7845,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
7846
7845
  type: Input
7847
7846
  }] } });
7848
7847
 
7848
+ class ResponsiveComponent {
7849
+ constructor(breakpointObserver) {
7850
+ this.breakpointObserver = breakpointObserver;
7851
+ this.screenXs = false;
7852
+ breakpointObserver
7853
+ .observe([
7854
+ Breakpoints.XSmall
7855
+ ])
7856
+ .subscribe(result => {
7857
+ this.screenXs = (result.matches);
7858
+ //console.debug("Screen XS: "+this.screenXs);
7859
+ });
7860
+ }
7861
+ }
7862
+ 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 });
7863
+ ResponsiveComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ResponsiveComponent, ngImport: i0 });
7864
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, decorators: [{
7865
+ type: Directive
7866
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; } });
7867
+
7849
7868
  class ScrollIntoViewDirective {
7850
7869
  constructor(elRef) {
7851
7870
  this.elRef = elRef;
@@ -8500,8 +8519,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
8500
8519
  type: HostListener,
8501
8520
  args: ['touchcancel', ['$event']]
8502
8521
  }] } });
8503
- class Prompting {
8504
- constructor() {
8522
+ class Prompting extends ResponsiveComponent {
8523
+ constructor(bpo) {
8524
+ super(bpo);
8525
+ this.bpo = bpo;
8505
8526
  this.promptItem = null;
8506
8527
  this.showPrompt = false;
8507
8528
  this.items = undefined;
@@ -8522,16 +8543,16 @@ class Prompting {
8522
8543
  this.onPrevItem.emit();
8523
8544
  }
8524
8545
  }
8525
- Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, deps: [], 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 }], ngImport: i0, template: `
8546
+ 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 });
8547
+ 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: `
8527
8548
 
8528
8549
  <app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
8529
8550
  <app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
8530
8551
  [itemCount]="items?.length" [selectedItemIdx]="selectedItemIdx"
8531
8552
  [transportActions]="transportActions"></app-sprpromptingcontainer>
8532
- <app-sprprogress fxHide.xs [items]="items" [selectedItemIdx]="selectedItemIdx"
8553
+ <app-sprprogress *ngIf="!screenXs" [items]="items" [selectedItemIdx]="selectedItemIdx"
8533
8554
  (onRowSelect)="itemSelect($event)"></app-sprprogress>
8534
- <div fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
8555
+ <div #asCt [class.active]="!audioSignalCollapsed && !screenXs">
8535
8556
 
8536
8557
  <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
8537
8558
  [audioClip]="displayAudioClip"
@@ -8545,7 +8566,7 @@ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14
8545
8566
 
8546
8567
 
8547
8568
 
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$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"] }] });
8569
+ `, 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"] }] });
8549
8570
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, decorators: [{
8550
8571
  type: Component,
8551
8572
  args: [{ selector: 'app-sprprompting', template: `
@@ -8554,9 +8575,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
8554
8575
  <app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
8555
8576
  [itemCount]="items?.length" [selectedItemIdx]="selectedItemIdx"
8556
8577
  [transportActions]="transportActions"></app-sprpromptingcontainer>
8557
- <app-sprprogress fxHide.xs [items]="items" [selectedItemIdx]="selectedItemIdx"
8578
+ <app-sprprogress *ngIf="!screenXs" [items]="items" [selectedItemIdx]="selectedItemIdx"
8558
8579
  (onRowSelect)="itemSelect($event)"></app-sprprogress>
8559
- <div fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
8580
+ <div #asCt [class.active]="!audioSignalCollapsed && !screenXs">
8560
8581
 
8561
8582
  <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
8562
8583
  [audioClip]="displayAudioClip"
@@ -8571,7 +8592,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
8571
8592
 
8572
8593
 
8573
8594
  `, 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"] }]
8574
- }], propDecorators: { simpleTrafficLight: [{
8595
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { simpleTrafficLight: [{
8575
8596
  type: ViewChild,
8576
8597
  args: [SimpleTrafficLight, { static: true }]
8577
8598
  }], audioDisplay: [{
@@ -10570,6 +10591,7 @@ class UploadStatus {
10570
10591
  constructor() {
10571
10592
  this._awaitNewUpload = false;
10572
10593
  this.spinnerMode = 'determinate';
10594
+ this._colorStatus = 'primary';
10573
10595
  this._value = 100;
10574
10596
  this.displayValue = null;
10575
10597
  this.toolTipText = '';
@@ -10607,6 +10629,15 @@ class UploadStatus {
10607
10629
  }
10608
10630
  set status(status) {
10609
10631
  this._status = status;
10632
+ if ('accent' === status) {
10633
+ this._colorStatus = 'accent';
10634
+ }
10635
+ else if ('warn' === status) {
10636
+ this._colorStatus = 'warn';
10637
+ }
10638
+ else {
10639
+ this._colorStatus = 'primary';
10640
+ }
10610
10641
  this._updateSpinner();
10611
10642
  }
10612
10643
  get status() {
@@ -10655,8 +10686,9 @@ class TransportActions {
10655
10686
  this.bwdAction = new Action('Backward');
10656
10687
  }
10657
10688
  }
10658
- class TransportPanel {
10659
- constructor() {
10689
+ class TransportPanel extends ResponsiveComponent {
10690
+ constructor(breakpointObserver) {
10691
+ super(breakpointObserver);
10660
10692
  this.navigationEnabled = true;
10661
10693
  this.pausingEnabled = true;
10662
10694
  }
@@ -10728,28 +10760,28 @@ class TransportPanel {
10728
10760
  }
10729
10761
  }
10730
10762
  }
10731
- TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10732
- 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: `
10763
+ 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 });
10764
+ 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: `
10733
10765
  <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
10734
10766
  mat-raised-button>
10735
10767
  <mat-icon>chevron_left</mat-icon>
10736
10768
  </button>
10737
10769
  <button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled()" mat-raised-button>
10738
10770
  <mat-icon [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf="!nextDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon>
10739
- <span fxShow.xs="false">{{startStopNextName()}}</span>
10771
+ <span *ngIf="!screenXs">{{startStopNextName()}}</span>
10740
10772
  </button>
10741
10773
  <button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button>
10742
10774
  <mat-icon>pause</mat-icon>
10743
- <span fxShow.xs="false">Pause</span>
10775
+ <span *ngIf="!screenXs">Pause</span>
10744
10776
  </button>
10745
- <button id="fwdNextBtn" *ngIf="navigationEnabled" fxHide.xs (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
10777
+ <button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
10746
10778
  <mat-icon>redo</mat-icon>
10747
10779
  </button>
10748
10780
  <button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button>
10749
10781
  <mat-icon>chevron_right</mat-icon>
10750
10782
  </button>
10751
10783
 
10752
- `, 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"] }] });
10784
+ `, 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"] }] });
10753
10785
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, decorators: [{
10754
10786
  type: Component,
10755
10787
  args: [{ selector: 'app-sprtransport', template: `
@@ -10759,13 +10791,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
10759
10791
  </button>
10760
10792
  <button (click)="startStopNextPerform()" [disabled]="startDisabled() && stopDisabled() && nextDisabled()" mat-raised-button>
10761
10793
  <mat-icon [style.color]="startStopNextIconColor()">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf="!nextDisabled()" [style.color]="nextDisabled() ? 'grey' : 'black'">chevron_right</mat-icon>
10762
- <span fxShow.xs="false">{{startStopNextName()}}</span>
10794
+ <span *ngIf="!screenXs">{{startStopNextName()}}</span>
10763
10795
  </button>
10764
10796
  <button *ngIf="pausingEnabled" (click)="actions.pauseAction.perform()" [disabled]="pauseDisabled()" mat-raised-button>
10765
10797
  <mat-icon>pause</mat-icon>
10766
- <span fxShow.xs="false">Pause</span>
10798
+ <span *ngIf="!screenXs">Pause</span>
10767
10799
  </button>
10768
- <button id="fwdNextBtn" *ngIf="navigationEnabled" fxHide.xs (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
10800
+ <button id="fwdNextBtn" *ngIf="navigationEnabled && !screenXs" (click)="actions.fwdNextAction.perform()" [disabled]="fwdNextDisabled()" mat-raised-button>
10769
10801
  <mat-icon>redo</mat-icon>
10770
10802
  </button>
10771
10803
  <button id="fwdBtn" *ngIf="navigationEnabled" (click)="actions.fwdAction.perform()" [disabled]="fwdDisabled()" mat-raised-button>
@@ -10773,7 +10805,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
10773
10805
  </button>
10774
10806
 
10775
10807
  `, 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"] }]
10776
- }], propDecorators: { readonly: [{
10808
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { readonly: [{
10777
10809
  type: Input
10778
10810
  }], actions: [{
10779
10811
  type: Input
@@ -10829,8 +10861,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
10829
10861
  }], ctorParameters: function () { return []; }, propDecorators: { ready: [{
10830
10862
  type: Input
10831
10863
  }] } });
10832
- class ControlPanel {
10833
- constructor(dialog) {
10864
+ class ControlPanel extends ResponsiveComponent {
10865
+ constructor(bpo, dialog) {
10866
+ super(bpo);
10867
+ this.bpo = bpo;
10834
10868
  this.dialog = dialog;
10835
10869
  this.processing = false;
10836
10870
  this.navigationEnabled = true;
@@ -10843,44 +10877,44 @@ class ControlPanel {
10843
10877
  return this._ready;
10844
10878
  }
10845
10879
  }
10846
- 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 });
10847
- 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: `
10848
- <div fxHide.xs fxLayout="row" >
10849
- <app-sprstatusdisplay fxFlex="0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10880
+ 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 });
10881
+ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ControlPanel, selector: "app-sprcontrolpanel", inputs: { readonly: "readonly", transportActions: "transportActions", processing: "processing", statusMsg: "statusMsg", statusAlertType: "statusAlertType", statusWaiting: "statusWaiting", uploadStatus: "uploadStatus", uploadProgress: "uploadProgress", currentRecording: "currentRecording", enableUploadRecordings: "enableUploadRecordings", navigationEnabled: "navigationEnabled", ready: "ready" }, viewQueries: [{ propertyName: "statusDisplay", first: true, predicate: StatusDisplay, descendants: true, static: true }, { propertyName: "transportPanel", first: true, predicate: TransportPanel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
10882
+ <div *ngIf="!screenXs" style="flex-direction: row" >
10883
+ <app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10850
10884
  class="hidden-xs"></app-sprstatusdisplay>
10851
- <app-sprtransport fxFlex="10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10852
- <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10885
+ <app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10886
+ <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10853
10887
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10854
10888
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10855
10889
  </div>
10856
- <div fxShow.xs fxHide fxLayout="column">
10857
- <div fxLayout="row" fxFlexFill>
10858
- <app-sprstatusdisplay fxFlex="10 0 0" fxFlexAlign="left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10890
+ <div *ngIf="screenXs"style="flex-direction: column" >
10891
+ <div style="flex-direction: row" class="flexFill" >
10892
+ <app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10859
10893
  class="hidden-xs"></app-sprstatusdisplay>
10860
- <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10894
+ <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10861
10895
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10862
10896
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10863
10897
  </div>
10864
10898
  <app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10865
10899
 
10866
10900
  </div>
10867
- `, 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"] }] });
10901
+ `, 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"] }] });
10868
10902
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, decorators: [{
10869
10903
  type: Component,
10870
10904
  args: [{ selector: 'app-sprcontrolpanel', template: `
10871
- <div fxHide.xs fxLayout="row" >
10872
- <app-sprstatusdisplay fxFlex="0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10905
+ <div *ngIf="!screenXs" style="flex-direction: row" >
10906
+ <app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10873
10907
  class="hidden-xs"></app-sprstatusdisplay>
10874
- <app-sprtransport fxFlex="10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10875
- <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10908
+ <app-sprtransport style="flex:10 0 0" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
10909
+ <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10876
10910
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10877
10911
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10878
10912
  </div>
10879
- <div fxShow.xs fxHide fxLayout="column">
10880
- <div fxLayout="row" fxFlexFill>
10881
- <app-sprstatusdisplay fxFlex="10 0 0" fxFlexAlign="left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10913
+ <div *ngIf="screenXs"style="flex-direction: column" >
10914
+ <div style="flex-direction: row" class="flexFill" >
10915
+ <app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10882
10916
  class="hidden-xs"></app-sprstatusdisplay>
10883
- <app-uploadstatus fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10917
+ <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10884
10918
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10885
10919
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10886
10920
  </div>
@@ -10888,7 +10922,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
10888
10922
 
10889
10923
  </div>
10890
10924
  `, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
10891
- }], ctorParameters: function () { return [{ type: i1$4.MatDialog }]; }, propDecorators: { statusDisplay: [{
10925
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i1$4.MatDialog }]; }, propDecorators: { statusDisplay: [{
10892
10926
  type: ViewChild,
10893
10927
  args: [StatusDisplay, { static: true }]
10894
10928
  }], transportPanel: [{
@@ -11487,8 +11521,10 @@ class StreamLevelMeasure {
11487
11521
 
11488
11522
  const MIN_DB_LEVEL = -40.0;
11489
11523
  const DEFAULT_WARN_DB_LEVEL = -2;
11490
- class RecordingItemControls {
11491
- constructor(ref, changeDetectorRef) {
11524
+ class RecordingItemControls extends ResponsiveComponent {
11525
+ constructor(bpo, ref, changeDetectorRef) {
11526
+ super(bpo);
11527
+ this.bpo = bpo;
11492
11528
  this.ref = ref;
11493
11529
  this.changeDetectorRef = changeDetectorRef;
11494
11530
  this.ce = null;
@@ -11541,8 +11577,8 @@ class RecordingItemControls {
11541
11577
  // this.status = 'ERROR';
11542
11578
  }
11543
11579
  }
11544
- 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 });
11545
- 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: `
11580
+ 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 });
11581
+ 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: `
11546
11582
  <button matTooltip="Start playback" (click)="playStartAction?.perform()"
11547
11583
  [disabled]="playStartAction?.disabled"
11548
11584
  [style.color]="playStartAction?.disabled ? 'grey' : 'green'">
@@ -11553,7 +11589,7 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
11553
11589
  [style.color]="playStopAction?.disabled ? 'grey' : 'yellow'">
11554
11590
  <mat-icon>stop</mat-icon>
11555
11591
  </button>
11556
- <button fxHide.xs matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
11592
+ <button *ngIf="!screenXs" matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
11557
11593
  (click)="showRecordingDetails()">
11558
11594
  <mat-icon>{{(audioSignalCollapsed) ? "expand_less" : "expand_more"}}</mat-icon>
11559
11595
  </button>
@@ -11564,7 +11600,7 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
11564
11600
  <div style="min-width: 14ch;padding:2px"><table style="border-style: none"><tr><td>Peak:</td><td><span matTooltip="Peak level"
11565
11601
  [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
11566
11602
  <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
11567
- `, 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" }] });
11603
+ `, 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" }] });
11568
11604
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, decorators: [{
11569
11605
  type: Component,
11570
11606
  args: [{ selector: 'spr-recordingitemcontrols', template: `
@@ -11578,7 +11614,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
11578
11614
  [style.color]="playStopAction?.disabled ? 'grey' : 'yellow'">
11579
11615
  <mat-icon>stop</mat-icon>
11580
11616
  </button>
11581
- <button fxHide.xs matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
11617
+ <button *ngIf="!screenXs" matTooltip="Toggle detailed audio display" [disabled]="disableAudioDetails || !audioLoaded"
11582
11618
  (click)="showRecordingDetails()">
11583
11619
  <mat-icon>{{(audioSignalCollapsed) ? "expand_less" : "expand_more"}}</mat-icon>
11584
11620
  </button>
@@ -11590,7 +11626,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
11590
11626
  [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
11591
11627
  <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
11592
11628
  `, 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"] }]
11593
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
11629
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
11594
11630
  type: Input
11595
11631
  }], enableDownload: [{
11596
11632
  type: Input
@@ -11613,8 +11649,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
11613
11649
  }], displayLevelInfos: [{
11614
11650
  type: Input
11615
11651
  }] } });
11616
- class RecordingItemDisplay {
11617
- constructor(ref, changeDetectorRef) {
11652
+ class RecordingItemDisplay extends ResponsiveComponent {
11653
+ constructor(bpo, ref, changeDetectorRef) {
11654
+ super(bpo);
11655
+ this.bpo = bpo;
11618
11656
  this.ref = ref;
11619
11657
  this.changeDetectorRef = changeDetectorRef;
11620
11658
  this.ce = null;
@@ -11685,22 +11723,22 @@ class RecordingItemDisplay {
11685
11723
  this.changeDetectorRef.detectChanges();
11686
11724
  }
11687
11725
  }
11688
- 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 });
11689
- 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: `
11690
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
11691
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11692
- <spr-recordingitemcontrols fxFlex="0 0 0" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11726
+ 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 });
11727
+ RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingItemDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", agc: "agc", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
11728
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
11729
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11730
+ <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11693
11731
  </div>
11694
- `, 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"] }] });
11732
+ `, 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"] }] });
11695
11733
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, decorators: [{
11696
11734
  type: Component,
11697
11735
  args: [{ selector: 'spr-recordingitemdisplay', template: `
11698
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
11699
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11700
- <spr-recordingitemcontrols fxFlex="0 0 0" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11736
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
11737
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11738
+ <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11701
11739
  </div>
11702
- `, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n"] }]
11703
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
11740
+ `, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
11741
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
11704
11742
  type: ViewChild,
11705
11743
  args: [LevelBar, { static: true }]
11706
11744
  }], streamingMode: [{
@@ -11983,8 +12021,10 @@ class ChunkManager {
11983
12021
  return frameLen;
11984
12022
  }
11985
12023
  }
11986
- let BasicRecorder = class BasicRecorder {
11987
- constructor(changeDetectorRef, dialog, sessionService, uploader, config) {
12024
+ let BasicRecorder = class BasicRecorder extends ResponsiveComponent {
12025
+ constructor(bpo, changeDetectorRef, dialog, sessionService, uploader, config) {
12026
+ super(bpo);
12027
+ this.bpo = bpo;
11988
12028
  this.changeDetectorRef = changeDetectorRef;
11989
12029
  this.dialog = dialog;
11990
12030
  this.sessionService = sessionService;
@@ -12012,6 +12052,7 @@ let BasicRecorder = class BasicRecorder {
12012
12052
  this.peakLevelInDb = MIN_DB_LEVEL;
12013
12053
  this.audioLoaded = false;
12014
12054
  this.disableAudioDetails = false;
12055
+ this._controlAudioPlayer = null;
12015
12056
  this.displayAudioClip = null;
12016
12057
  this.audioFetchSubscription = null;
12017
12058
  this.liveLevelDisplayState = State.READY;
@@ -12157,7 +12198,9 @@ let BasicRecorder = class BasicRecorder {
12157
12198
  }
12158
12199
  }
12159
12200
  showRecording() {
12160
- this._controlAudioPlayer.stop();
12201
+ if (this._controlAudioPlayer) {
12202
+ this._controlAudioPlayer.stop();
12203
+ }
12161
12204
  if (this.calcBufferInfosSubscr) {
12162
12205
  this.calcBufferInfosSubscr.unsubscribe();
12163
12206
  }
@@ -12531,7 +12574,7 @@ BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS = 30;
12531
12574
  // Enable only for developemnt/debug purposes of array audio buffers !!
12532
12575
  BasicRecorder.FORCE_ARRRAY_AUDIO_BUFFER = false;
12533
12576
  BasicRecorder = __decorate([
12534
- __param(4, Inject(SPEECHRECORDER_CONFIG))
12577
+ __param(5, Inject(SPEECHRECORDER_CONFIG))
12535
12578
  ], BasicRecorder);
12536
12579
 
12537
12580
  class BasicRecFilesCache {
@@ -12779,8 +12822,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
12779
12822
  const DEFAULT_PRE_REC_DELAY = 1000;
12780
12823
  const DEFAULT_POST_REC_DELAY = 500;
12781
12824
  class SessionManager extends BasicRecorder {
12782
- constructor(changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
12783
- super(changeDetectorRef, dialog, sessionService, uploader, config);
12825
+ constructor(bpo, changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
12826
+ super(bpo, changeDetectorRef, dialog, sessionService, uploader, config);
12827
+ this.bpo = bpo;
12784
12828
  this.renderer = renderer;
12785
12829
  this.recFileService = recFileService;
12786
12830
  this.enableUploadRecordings = true;
@@ -12911,7 +12955,7 @@ class SessionManager extends BasicRecorder {
12911
12955
  this.transportActions.fwdAction.onAction = () => this.nextItem();
12912
12956
  this.transportActions.fwdNextAction.onAction = () => this.nextUnrecordedItem();
12913
12957
  this.transportActions.bwdAction.onAction = () => this.prevItem();
12914
- this.playStartAction.onAction = () => this.controlAudioPlayer.start();
12958
+ this.playStartAction.onAction = () => { var _a; return (_a = this.controlAudioPlayer) === null || _a === void 0 ? void 0 : _a.start(); };
12915
12959
  }
12916
12960
  this.startStopSignalState = 4 /* OFF */;
12917
12961
  }
@@ -13069,7 +13113,7 @@ class SessionManager extends BasicRecorder {
13069
13113
  this.transportActions.fwdAction.disabled = true;
13070
13114
  this.transportActions.fwdNextAction.disabled = true;
13071
13115
  this.transportActions.bwdAction.disabled = true;
13072
- this.displayRecFile = null;
13116
+ this.updateDisplayRecFile(null);
13073
13117
  this.displayRecFileVersion = 0;
13074
13118
  this.displayAudioClip = null;
13075
13119
  this.liveLevelDisplay.reset(true);
@@ -13167,6 +13211,9 @@ class SessionManager extends BasicRecorder {
13167
13211
  }
13168
13212
  set displayRecFile(displayRecFile) {
13169
13213
  this._displayRecFile = displayRecFile;
13214
+ }
13215
+ updateDisplayRecFile(displayRecFile, fetchAndApplyRecordingFile = true) {
13216
+ this.displayRecFile = displayRecFile;
13170
13217
  if (this._displayRecFile) {
13171
13218
  if (this.items) {
13172
13219
  this.items.currentRecordingFile = this._displayRecFile;
@@ -13174,7 +13221,9 @@ class SessionManager extends BasicRecorder {
13174
13221
  let adh = this._displayRecFile.audioDataHolder;
13175
13222
  if (adh) {
13176
13223
  this.displayAudioClip = new AudioClip(adh);
13177
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13224
+ if (this._controlAudioPlayer) {
13225
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13226
+ }
13178
13227
  this.showRecording();
13179
13228
  }
13180
13229
  else {
@@ -13183,47 +13232,90 @@ class SessionManager extends BasicRecorder {
13183
13232
  if (this.controlAudioPlayer) {
13184
13233
  this.controlAudioPlayer.audioClip = null;
13185
13234
  }
13186
- if (this._controlAudioPlayer && this._session) {
13187
- //... and try to fetch from server
13188
- this.liveLevelDisplayState = State.LOADING;
13189
- const rf = this._displayRecFile;
13190
- let audioDownloadType = this._clientAudioStorageType;
13191
- if (AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this._clientAudioStorageType || AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13192
- // Default is network mode
13193
- audioDownloadType = AudioStorageType.NET_CHUNKED;
13194
- if (rf.channels && rf.frames) {
13195
- const samples = rf.channels * rf.frames;
13196
- if (samples <= this._maxAutoNetMemStoreSamples) {
13197
- // But if audio file is small, load in continuous resp. chunked mode
13198
- if (AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13199
- audioDownloadType = AudioStorageType.MEM_ENTIRE;
13200
- }
13201
- else if (AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13202
- audioDownloadType = AudioStorageType.MEM_CHUNKED;
13235
+ if (fetchAndApplyRecordingFile) {
13236
+ if (this._controlAudioPlayer && this._session) {
13237
+ //... and try to fetch from server
13238
+ this.liveLevelDisplayState = State.LOADING;
13239
+ const rf = this._displayRecFile;
13240
+ let audioDownloadType = this._clientAudioStorageType;
13241
+ if (AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this._clientAudioStorageType || AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13242
+ // Default is network mode
13243
+ audioDownloadType = AudioStorageType.NET_CHUNKED;
13244
+ if (rf.channels && rf.frames) {
13245
+ const samples = rf.channels * rf.frames;
13246
+ if (samples <= this._maxAutoNetMemStoreSamples) {
13247
+ // But if audio file is small, load in continuous resp. chunked mode
13248
+ if (AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13249
+ audioDownloadType = AudioStorageType.MEM_ENTIRE;
13250
+ }
13251
+ else if (AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this._clientAudioStorageType) {
13252
+ audioDownloadType = AudioStorageType.MEM_CHUNKED;
13253
+ }
13203
13254
  }
13204
13255
  }
13205
13256
  }
13206
- }
13207
- console.debug("Audio download type: " + audioDownloadType);
13208
- if (AudioStorageType.DB_CHUNKED === this._clientAudioStorageType) {
13209
- // Fetch chunked indexed db audio buffer
13210
- let nextIab = null;
13211
- if (!this._persistentAudioStorageTarget) {
13212
- throw Error('Error: Persistent storage target not set.');
13257
+ console.debug("Audio download type: " + audioDownloadType);
13258
+ if (AudioStorageType.DB_CHUNKED === this._clientAudioStorageType) {
13259
+ // Fetch chunked indexed db audio buffer
13260
+ let nextIab = null;
13261
+ if (!this._persistentAudioStorageTarget) {
13262
+ throw Error('Error: Persistent storage target not set.');
13263
+ }
13264
+ else {
13265
+ //console.debug("Fetch audio and store to indexed db...");
13266
+ this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileIndDbAudioBuffer(this._controlAudioPlayer.context, this._persistentAudioStorageTarget, this._session.project, rf).subscribe({
13267
+ next: (iab) => {
13268
+ //console.debug("Sessionmanager: Received inddb audio buffer: "+iab);
13269
+ nextIab = iab;
13270
+ },
13271
+ complete: () => {
13272
+ this.liveLevelDisplayState = State.READY;
13273
+ let fabDh = null;
13274
+ if (nextIab) {
13275
+ if (rf && this.items) {
13276
+ fabDh = new AudioDataHolder(nextIab);
13277
+ this.items.setSprRecFileAudioData(rf, fabDh);
13278
+ }
13279
+ }
13280
+ else {
13281
+ // Should actually be handled by the error resolver
13282
+ this.statusMsg = 'Recording file could not be loaded.';
13283
+ this.statusAlertType = 'error';
13284
+ }
13285
+ if (fabDh) {
13286
+ // 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
13287
+ this.displayAudioClip = new AudioClip(fabDh);
13288
+ }
13289
+ if (this._controlAudioPlayer) {
13290
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13291
+ }
13292
+ this.showRecording();
13293
+ },
13294
+ error: err => {
13295
+ console.error("Could not load recording file from server: " + err);
13296
+ this.liveLevelDisplayState = State.READY;
13297
+ this.statusMsg = 'Recording file could not be loaded: ' + err;
13298
+ this.statusAlertType = 'error';
13299
+ this.changeDetectorRef.detectChanges();
13300
+ }
13301
+ });
13302
+ }
13213
13303
  }
13214
- else {
13215
- //console.debug("Fetch audio and store to indexed db...");
13216
- this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileIndDbAudioBuffer(this._controlAudioPlayer.context, this._persistentAudioStorageTarget, this._session.project, rf).subscribe({
13217
- next: (iab) => {
13218
- //console.debug("Sessionmanager: Received inddb audio buffer: "+iab);
13219
- nextIab = iab;
13304
+ else if (AudioStorageType.NET_CHUNKED === audioDownloadType) {
13305
+ // Fetch chunked audio buffer from network
13306
+ let nextNetAb = null;
13307
+ //console.debug("Fetch chunked audio from network");
13308
+ this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileNetAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13309
+ next: (netAb) => {
13310
+ //console.debug("Sessionmanager: Received net audio buffer: "+netAb);
13311
+ nextNetAb = netAb;
13220
13312
  },
13221
13313
  complete: () => {
13222
13314
  this.liveLevelDisplayState = State.READY;
13223
13315
  let fabDh = null;
13224
- if (nextIab) {
13316
+ if (nextNetAb) {
13225
13317
  if (rf && this.items) {
13226
- fabDh = new AudioDataHolder(nextIab);
13318
+ fabDh = new AudioDataHolder(nextNetAb);
13227
13319
  this.items.setSprRecFileAudioData(rf, fabDh);
13228
13320
  }
13229
13321
  }
@@ -13234,9 +13326,12 @@ class SessionManager extends BasicRecorder {
13234
13326
  }
13235
13327
  if (fabDh) {
13236
13328
  // 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
13329
+ //console.debug("set displayRecFile(): fetch net ab complete, set displayAudioClip.")
13237
13330
  this.displayAudioClip = new AudioClip(fabDh);
13238
13331
  }
13239
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13332
+ if (this._controlAudioPlayer) {
13333
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13334
+ }
13240
13335
  this.showRecording();
13241
13336
  },
13242
13337
  error: err => {
@@ -13248,126 +13343,90 @@ class SessionManager extends BasicRecorder {
13248
13343
  }
13249
13344
  });
13250
13345
  }
13251
- }
13252
- else if (AudioStorageType.NET_CHUNKED === audioDownloadType) {
13253
- // Fetch chunked audio buffer from network
13254
- let nextNetAb = null;
13255
- //console.debug("Fetch chunked audio from network");
13256
- this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileNetAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13257
- next: (netAb) => {
13258
- //console.debug("Sessionmanager: Received net audio buffer: "+netAb);
13259
- nextNetAb = netAb;
13260
- },
13261
- complete: () => {
13262
- this.liveLevelDisplayState = State.READY;
13263
- let fabDh = null;
13264
- if (nextNetAb) {
13265
- if (rf && this.items) {
13266
- fabDh = new AudioDataHolder(nextNetAb);
13267
- this.items.setSprRecFileAudioData(rf, fabDh);
13346
+ else if (AudioStorageType.MEM_CHUNKED === audioDownloadType) {
13347
+ // Fetch chunked array audio buffer
13348
+ let nextAab = null;
13349
+ //console.debug("Fetch audio and store to (chunked) array buffer...");
13350
+ this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileArrayAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13351
+ next: (aab) => {
13352
+ nextAab = aab;
13353
+ },
13354
+ complete: () => {
13355
+ this.liveLevelDisplayState = State.READY;
13356
+ let fabDh = null;
13357
+ if (nextAab) {
13358
+ if (rf && this.items) {
13359
+ fabDh = new AudioDataHolder(nextAab);
13360
+ this.items.setSprRecFileAudioData(rf, fabDh);
13361
+ }
13268
13362
  }
13269
- }
13270
- else {
13271
- // Should actually be handled by the error resolver
13272
- this.statusMsg = 'Recording file could not be loaded.';
13273
- this.statusAlertType = 'error';
13274
- }
13275
- if (fabDh) {
13276
- // 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
13277
- //console.debug("set displayRecFile(): fetch net ab complete, set displayAudioClip.")
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
- this.changeDetectorRef.detectChanges();
13289
- }
13290
- });
13291
- }
13292
- else if (AudioStorageType.MEM_CHUNKED === audioDownloadType) {
13293
- // Fetch chunked array audio buffer
13294
- let nextAab = null;
13295
- //console.debug("Fetch audio and store to (chunked) array buffer...");
13296
- this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileArrayAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13297
- next: (aab) => {
13298
- nextAab = aab;
13299
- },
13300
- complete: () => {
13301
- this.liveLevelDisplayState = State.READY;
13302
- let fabDh = null;
13303
- if (nextAab) {
13304
- if (rf && this.items) {
13305
- fabDh = new AudioDataHolder(nextAab);
13306
- this.items.setSprRecFileAudioData(rf, fabDh);
13363
+ else {
13364
+ // Should actually be handled by the error resolver
13365
+ this.statusMsg = 'Recording file could not be loaded.';
13366
+ this.statusAlertType = 'error';
13307
13367
  }
13308
- }
13309
- else {
13310
- // Should actually be handled by the error resolver
13311
- this.statusMsg = 'Recording file could not be loaded.';
13368
+ if (fabDh) {
13369
+ // 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
13370
+ this.displayAudioClip = new AudioClip(fabDh);
13371
+ }
13372
+ if (this._controlAudioPlayer) {
13373
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13374
+ }
13375
+ this.showRecording();
13376
+ },
13377
+ error: err => {
13378
+ console.error("Could not load recording file from server: " + err);
13379
+ this.liveLevelDisplayState = State.READY;
13380
+ this.statusMsg = 'Recording file could not be loaded: ' + err;
13312
13381
  this.statusAlertType = 'error';
13313
13382
  }
13314
- if (fabDh) {
13315
- // 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
13316
- this.displayAudioClip = new AudioClip(fabDh);
13317
- }
13318
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13319
- this.showRecording();
13320
- },
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
- });
13328
- }
13329
- else {
13330
- // Fetch regular audio buffer
13331
- //console.debug("Fetch audio and store to audio buffer...");
13332
- this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13333
- next: (ab) => {
13334
- this.liveLevelDisplayState = State.READY;
13335
- let fabDh = null;
13336
- if (ab) {
13337
- if (rf && this.items) {
13338
- if (SessionManager.FORCE_ARRRAY_AUDIO_BUFFER) {
13339
- let aab = ArrayAudioBuffer.fromAudioBuffer(ab);
13340
- fabDh = new AudioDataHolder(aab);
13341
- }
13342
- else {
13343
- fabDh = new AudioDataHolder(new AudioBufferSource(ab));
13383
+ });
13384
+ }
13385
+ else {
13386
+ // Fetch regular audio buffer
13387
+ //console.debug("Fetch audio and store to audio buffer...");
13388
+ this.audioFetchSubscription = this.recFileService.fetchSprRecordingFileAudioBuffer(this._controlAudioPlayer.context, this._session.project, rf).subscribe({
13389
+ next: (ab) => {
13390
+ this.liveLevelDisplayState = State.READY;
13391
+ let fabDh = null;
13392
+ if (ab) {
13393
+ if (rf && this.items) {
13394
+ if (SessionManager.FORCE_ARRRAY_AUDIO_BUFFER) {
13395
+ let aab = ArrayAudioBuffer.fromAudioBuffer(ab);
13396
+ fabDh = new AudioDataHolder(aab);
13397
+ }
13398
+ else {
13399
+ fabDh = new AudioDataHolder(new AudioBufferSource(ab));
13400
+ }
13401
+ this.items.setSprRecFileAudioData(rf, fabDh);
13344
13402
  }
13345
- this.items.setSprRecFileAudioData(rf, fabDh);
13346
13403
  }
13347
- }
13348
- else {
13349
- // Should actually be handled by the error resolver
13350
- this.statusMsg = 'Recording file could not be loaded.';
13404
+ else {
13405
+ // Should actually be handled by the error resolver
13406
+ this.statusMsg = 'Recording file could not be loaded.';
13407
+ this.statusAlertType = 'error';
13408
+ }
13409
+ if (fabDh) {
13410
+ // 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
13411
+ this.displayAudioClip = new AudioClip(fabDh);
13412
+ }
13413
+ if (this._controlAudioPlayer) {
13414
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
13415
+ }
13416
+ this.showRecording();
13417
+ }, error: err => {
13418
+ console.error("Could not load recording file from server: " + err);
13419
+ this.liveLevelDisplayState = State.READY;
13420
+ this.statusMsg = 'Recording file could not be loaded: ' + err;
13351
13421
  this.statusAlertType = 'error';
13352
13422
  }
13353
- if (fabDh) {
13354
- // 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
13355
- this.displayAudioClip = new AudioClip(fabDh);
13356
- }
13357
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
13358
- this.showRecording();
13359
- }, error: err => {
13360
- console.error("Could not load recording file from server: " + err);
13361
- this.liveLevelDisplayState = State.READY;
13362
- this.statusMsg = 'Recording file could not be loaded: ' + err;
13363
- this.statusAlertType = 'error';
13364
- }
13365
- });
13423
+ });
13424
+ }
13425
+ }
13426
+ else {
13427
+ this.statusMsg = 'Recording file could not be decoded. Audio context unavailable.';
13428
+ this.statusAlertType = 'error';
13366
13429
  }
13367
- }
13368
- else {
13369
- this.statusMsg = 'Recording file could not be decoded. Audio context unavailable.';
13370
- this.statusAlertType = 'error';
13371
13430
  }
13372
13431
  }
13373
13432
  }
@@ -13407,7 +13466,7 @@ class SessionManager extends BasicRecorder {
13407
13466
  this.applyPrompt();
13408
13467
  }
13409
13468
  if (isNonrecording) {
13410
- this.displayRecFile = null;
13469
+ this.updateDisplayRecFile(null);
13411
13470
  this.displayRecFileVersion = 0;
13412
13471
  this.startStopSignalState = 4 /* OFF */;
13413
13472
  }
@@ -13422,11 +13481,11 @@ class SessionManager extends BasicRecorder {
13422
13481
  if (availRecfiles > 0) {
13423
13482
  let rfVers = availRecfiles - 1;
13424
13483
  recentRecFile = it.recs[rfVers];
13425
- this.displayRecFile = recentRecFile;
13484
+ this.updateDisplayRecFile(recentRecFile, !temporary);
13426
13485
  this.displayRecFileVersion = rfVers;
13427
13486
  }
13428
13487
  else {
13429
- this.displayRecFile = null;
13488
+ this.updateDisplayRecFile(null);
13430
13489
  this.displayRecFileVersion = 0;
13431
13490
  }
13432
13491
  }
@@ -13908,9 +13967,14 @@ class SessionManager extends BasicRecorder {
13908
13967
  }
13909
13968
  }
13910
13969
  updateControlPlaybackPosition() {
13911
- if (this._controlAudioPlayer.playPositionFrames) {
13912
- this.prompting.audioDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;
13913
- this.liveLevelDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;
13970
+ if (this._controlAudioPlayer) {
13971
+ const ppFrames = this._controlAudioPlayer.playPositionFrames;
13972
+ if (ppFrames !== null) {
13973
+ if (this.prompting.audioDisplay) {
13974
+ this.prompting.audioDisplay.playFramePosition = ppFrames;
13975
+ }
13976
+ this.liveLevelDisplay.playFramePosition = ppFrames;
13977
+ }
13914
13978
  }
13915
13979
  }
13916
13980
  audioPlayerUpdate(e) {
@@ -13929,7 +13993,7 @@ class SessionManager extends BasicRecorder {
13929
13993
  }
13930
13994
  }
13931
13995
  }
13932
- 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 });
13996
+ 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 });
13933
13997
  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: `
13934
13998
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
13935
13999
  <app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
@@ -13945,13 +14009,13 @@ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
13945
14009
  [playStopAction]="controlAudioPlayer?.stopAction">
13946
14010
 
13947
14011
  </app-sprprompting>
13948
- <mat-progress-bar [value]="progressPercentValue()" fxShow="false" fxShow.xs="true" ></mat-progress-bar>
14012
+ <mat-progress-bar [value]="progressPercentValue()" *ngIf="screenXs" ></mat-progress-bar>
13949
14013
 
13950
14014
 
13951
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
13952
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording() || keepLiveLevel" [displayLevelInfos]="displayAudioClip?.levelInfos" [state]="liveLevelDisplayState"></audio-levelbar>
13953
- <div fxLayout="row">
13954
- <spr-recordingitemcontrols fxFlex="10 0 1"
14015
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
14016
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="isRecording() || keepLiveLevel" [displayLevelInfos]="displayAudioClip?.levelInfos" [state]="liveLevelDisplayState"></audio-levelbar>
14017
+ <div style="display:flex;flex-direction: row">
14018
+ <spr-recordingitemcontrols style="display:flex;flex:10 0 1px"
13955
14019
  [audioLoaded]="audioLoaded"
13956
14020
  [disableAudioDetails]="disableAudioDetails"
13957
14021
  [playStartAction]="controlAudioPlayer?.startAction"
@@ -13961,25 +14025,25 @@ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
13961
14025
  (onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
13962
14026
  </spr-recordingitemcontrols>
13963
14027
 
13964
- <app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
14028
+ <app-uploadstatus *ngIf="screenXs && enableUploadRecordings" class="ricontrols dark" style="flex:0 0 0" [value]="uploadProgress"
13965
14029
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
13966
- <app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
13967
- <app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
14030
+ <app-wakelockindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
14031
+ <app-readystateindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
13968
14032
  </div>
13969
14033
  </div>
13970
- <div #controlpanel class="controlpanel" fxLayout="row">
13971
- <div fxFlex="1 1 30%" fxLayoutAlign="start center">
13972
- <app-sprstatusdisplay fxHide.xs [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
14034
+ <div #controlpanel class="controlpanel">
14035
+ <div style="flex:1 1 30%;justify-content: flex-start;align-items: center; align-content: center">
14036
+ <app-sprstatusdisplay *ngIf="!screenXs" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
13973
14037
  </div>
13974
- <app-sprtransport fxFlex="10 0 30%" fxLayoutAlign="center center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="!items || items.length()>1"></app-sprtransport>
13975
- <div fxFlex="1 1 30%" fxLayoutAlign="end center" fxLayout="row">
13976
- <app-uploadstatus class="ricontrols" fxHide.xs fxLayoutAlign="end center" *ngIf="enableUploadRecordings" [value]="uploadProgress"
14038
+ <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>
14039
+ <div style="display:flex;flex:1 1 30%;flex-direction:row;justify-content: flex-end;align-items: center; align-content: center">
14040
+ <app-uploadstatus *ngIf="!screenXs && enableUploadRecordings" class="ricontrols" [value]="uploadProgress"
13977
14041
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
13978
- <app-wakelockindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
13979
- <app-readystateindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [ready]="dataSaved && !isActive()"></app-readystateindicator>
14042
+ <app-wakelockindicator *ngIf="!screenXs" class="ricontrols" [screenLocked]="screenLocked"></app-wakelockindicator>
14043
+ <app-readystateindicator *ngIf="!screenXs" class="ricontrols" [ready]="dataSaved && !isActive()"></app-readystateindicator>
13980
14044
  </div>
13981
14045
  </div>
13982
- `, 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"] }] });
14046
+ `, 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"] }] });
13983
14047
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, decorators: [{
13984
14048
  type: Component,
13985
14049
  args: [{ selector: 'app-sprrecordingsession', providers: [SessionService], template: `
@@ -13997,13 +14061,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
13997
14061
  [playStopAction]="controlAudioPlayer?.stopAction">
13998
14062
 
13999
14063
  </app-sprprompting>
14000
- <mat-progress-bar [value]="progressPercentValue()" fxShow="false" fxShow.xs="true" ></mat-progress-bar>
14064
+ <mat-progress-bar [value]="progressPercentValue()" *ngIf="screenXs" ></mat-progress-bar>
14001
14065
 
14002
14066
 
14003
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
14004
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording() || keepLiveLevel" [displayLevelInfos]="displayAudioClip?.levelInfos" [state]="liveLevelDisplayState"></audio-levelbar>
14005
- <div fxLayout="row">
14006
- <spr-recordingitemcontrols fxFlex="10 0 1"
14067
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
14068
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="isRecording() || keepLiveLevel" [displayLevelInfos]="displayAudioClip?.levelInfos" [state]="liveLevelDisplayState"></audio-levelbar>
14069
+ <div style="display:flex;flex-direction: row">
14070
+ <spr-recordingitemcontrols style="display:flex;flex:10 0 1px"
14007
14071
  [audioLoaded]="audioLoaded"
14008
14072
  [disableAudioDetails]="disableAudioDetails"
14009
14073
  [playStartAction]="controlAudioPlayer?.startAction"
@@ -14013,27 +14077,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
14013
14077
  (onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
14014
14078
  </spr-recordingitemcontrols>
14015
14079
 
14016
- <app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
14080
+ <app-uploadstatus *ngIf="screenXs && enableUploadRecordings" class="ricontrols dark" style="flex:0 0 0" [value]="uploadProgress"
14017
14081
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
14018
- <app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
14019
- <app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
14082
+ <app-wakelockindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
14083
+ <app-readystateindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
14020
14084
  </div>
14021
14085
  </div>
14022
- <div #controlpanel class="controlpanel" fxLayout="row">
14023
- <div fxFlex="1 1 30%" fxLayoutAlign="start center">
14024
- <app-sprstatusdisplay fxHide.xs [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
14086
+ <div #controlpanel class="controlpanel">
14087
+ <div style="flex:1 1 30%;justify-content: flex-start;align-items: center; align-content: center">
14088
+ <app-sprstatusdisplay *ngIf="!screenXs" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
14025
14089
  </div>
14026
- <app-sprtransport fxFlex="10 0 30%" fxLayoutAlign="center center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="!items || items.length()>1"></app-sprtransport>
14027
- <div fxFlex="1 1 30%" fxLayoutAlign="end center" fxLayout="row">
14028
- <app-uploadstatus class="ricontrols" fxHide.xs fxLayoutAlign="end center" *ngIf="enableUploadRecordings" [value]="uploadProgress"
14090
+ <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>
14091
+ <div style="display:flex;flex:1 1 30%;flex-direction:row;justify-content: flex-end;align-items: center; align-content: center">
14092
+ <app-uploadstatus *ngIf="!screenXs && enableUploadRecordings" class="ricontrols" [value]="uploadProgress"
14029
14093
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
14030
- <app-wakelockindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
14031
- <app-readystateindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [ready]="dataSaved && !isActive()"></app-readystateindicator>
14094
+ <app-wakelockindicator *ngIf="!screenXs" class="ricontrols" [screenLocked]="screenLocked"></app-wakelockindicator>
14095
+ <app-readystateindicator *ngIf="!screenXs" class="ricontrols" [ready]="dataSaved && !isActive()"></app-readystateindicator>
14032
14096
  </div>
14033
14097
  </div>
14034
- `, 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"] }]
14098
+ `, 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"] }]
14035
14099
  }], ctorParameters: function () {
14036
- return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
14100
+ return [{ type: i1$3.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
14037
14101
  type: Inject,
14038
14102
  args: [SPEECHRECORDER_CONFIG]
14039
14103
  }] }];
@@ -14293,6 +14357,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
14293
14357
  this.scriptService = scriptService;
14294
14358
  this.recFilesService = recFilesService;
14295
14359
  this.uploader = uploader;
14360
+ this.controlAudioPlayer = null;
14296
14361
  this._project = null;
14297
14362
  }
14298
14363
  handleError(err) {
@@ -15268,16 +15333,16 @@ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15268
15333
  <legend>Navigate</legend>
15269
15334
  <mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
15270
15335
  <div *ngIf="!naviInfoLoading" style="flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap">
15271
- <button (click)="firstAction?.perform()" [disabled]="!firstAction || firstAction?.disabled" matTooltip="First recording file">
15336
+ <button (click)="firstAction?.perform()" [disabled]="!firstAction || firstAction.disabled" matTooltip="First recording file">
15272
15337
  <mat-icon>first_page</mat-icon>
15273
15338
  </button>
15274
- <button (click)="prevAction?.perform()" [disabled]="!prevAction || prevAction?.disabled" matTooltip="Previous recording file">
15339
+ <button (click)="prevAction?.perform()" [disabled]="!prevAction || prevAction.disabled" matTooltip="Previous recording file">
15275
15340
  <mat-icon>chevron_left</mat-icon>
15276
15341
  </button>
15277
- <button (click)="nextAction?.perform()" [disabled]="!nextAction || nextAction?.disabled" matTooltip="Next recording file">
15342
+ <button (click)="nextAction?.perform()" [disabled]="!nextAction || nextAction.disabled" matTooltip="Next recording file">
15278
15343
  <mat-icon>chevron_right</mat-icon>
15279
15344
  </button>
15280
- <button (click)="lastAction?.perform()" [disabled]="!lastAction || lastAction?.disabled" matTooltip="Last recording file">
15345
+ <button (click)="lastAction?.perform()" [disabled]="!lastAction || lastAction.disabled" matTooltip="Last recording file">
15281
15346
  <mat-icon>last_page</mat-icon>
15282
15347
  </button>
15283
15348
  </div>
@@ -15303,16 +15368,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
15303
15368
  <legend>Navigate</legend>
15304
15369
  <mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
15305
15370
  <div *ngIf="!naviInfoLoading" style="flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap">
15306
- <button (click)="firstAction?.perform()" [disabled]="!firstAction || firstAction?.disabled" matTooltip="First recording file">
15371
+ <button (click)="firstAction?.perform()" [disabled]="!firstAction || firstAction.disabled" matTooltip="First recording file">
15307
15372
  <mat-icon>first_page</mat-icon>
15308
15373
  </button>
15309
- <button (click)="prevAction?.perform()" [disabled]="!prevAction || prevAction?.disabled" matTooltip="Previous recording file">
15374
+ <button (click)="prevAction?.perform()" [disabled]="!prevAction || prevAction.disabled" matTooltip="Previous recording file">
15310
15375
  <mat-icon>chevron_left</mat-icon>
15311
15376
  </button>
15312
- <button (click)="nextAction?.perform()" [disabled]="!nextAction || nextAction?.disabled" matTooltip="Next recording file">
15377
+ <button (click)="nextAction?.perform()" [disabled]="!nextAction || nextAction.disabled" matTooltip="Next recording file">
15313
15378
  <mat-icon>chevron_right</mat-icon>
15314
15379
  </button>
15315
- <button (click)="lastAction?.perform()" [disabled]="!lastAction || lastAction?.disabled" matTooltip="Last recording file">
15380
+ <button (click)="lastAction?.perform()" [disabled]="!lastAction || lastAction.disabled" matTooltip="Last recording file">
15316
15381
  <mat-icon>last_page</mat-icon>
15317
15382
  </button>
15318
15383
  </div>
@@ -15837,7 +15902,7 @@ RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15837
15902
  [zoomOutAction]="zoomOutAction"
15838
15903
  [zoomSelectedAction]="zoomSelectedAction"
15839
15904
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
15840
- <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>
15905
+ <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>
15841
15906
  </div>
15842
15907
  `, 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"] }] });
15843
15908
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileViewComponent, decorators: [{
@@ -15857,7 +15922,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
15857
15922
  [zoomOutAction]="zoomOutAction"
15858
15923
  [zoomSelectedAction]="zoomSelectedAction"
15859
15924
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
15860
- <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>
15925
+ <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>
15861
15926
  </div>
15862
15927
  `, 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"] }]
15863
15928
  }], 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: [{
@@ -15963,7 +16028,7 @@ RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
15963
16028
  [zoomOutAction]="zoomOutAction"
15964
16029
  [zoomSelectedAction]="zoomSelectedAction"
15965
16030
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
15966
- <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>
16031
+ <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>
15967
16032
  </div>
15968
16033
 
15969
16034
  <button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
@@ -15986,7 +16051,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
15986
16051
  [zoomOutAction]="zoomOutAction"
15987
16052
  [zoomSelectedAction]="zoomSelectedAction"
15988
16053
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
15989
- <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>
16054
+ <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>
15990
16055
  </div>
15991
16056
 
15992
16057
  <button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
@@ -16129,7 +16194,7 @@ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
16129
16194
  </mat-card-content>
16130
16195
  </mat-card>
16131
16196
 
16132
- `, 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" }] });
16197
+ `, 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" }] });
16133
16198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingList, decorators: [{
16134
16199
  type: Component,
16135
16200
  args: [{ selector: 'app-recordinglist', template: `
@@ -16176,7 +16241,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16176
16241
  </mat-card-content>
16177
16242
  </mat-card>
16178
16243
 
16179
- `, 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"] }]
16244
+ `, 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"] }]
16180
16245
  }], ctorParameters: function () { return []; }, propDecorators: { selectDisabled: [{
16181
16246
  type: Input
16182
16247
  }], selectedRecordingFileChanged: [{
@@ -16185,8 +16250,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16185
16250
  type: Input
16186
16251
  }] } });
16187
16252
 
16188
- class RecorderCombiPane {
16189
- constructor() {
16253
+ class RecorderCombiPane extends ResponsiveComponent {
16254
+ constructor(bpo) {
16255
+ super(bpo);
16256
+ this.bpo = bpo;
16190
16257
  this.selectDisabled = false;
16191
16258
  this.selectedRecordingFileChanged = new EventEmitter();
16192
16259
  this.selectedRecordingFile = null;
@@ -16208,12 +16275,12 @@ class RecorderCombiPane {
16208
16275
  this.recordingListComp.selectTop();
16209
16276
  }
16210
16277
  }
16211
- RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, deps: [], target: i0.ɵɵFactoryTarget.Component });
16212
- 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: `
16278
+ 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 });
16279
+ 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: `
16213
16280
  <div class="scrollList">
16214
16281
  <app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
16215
16282
  </div>
16216
- <div class="collapsable" fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
16283
+ <div class="collapsable" #asCt [class.active]="!audioSignalCollapsed && !screenXs">
16217
16284
  <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
16218
16285
  [audioClip]="displayAudioClip"
16219
16286
  [playStartAction]="playStartAction"
@@ -16221,14 +16288,14 @@ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
16221
16288
  [autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
16222
16289
  [playStopAction]="playStopAction"></app-audiodisplay>
16223
16290
  </div>
16224
- `, 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"] }] });
16291
+ `, 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"] }] });
16225
16292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, decorators: [{
16226
16293
  type: Component,
16227
16294
  args: [{ selector: 'app-recordercombipane', template: `
16228
16295
  <div class="scrollList">
16229
16296
  <app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
16230
16297
  </div>
16231
- <div class="collapsable" fxHide.xs #asCt [class.active]="!audioSignalCollapsed">
16298
+ <div class="collapsable" #asCt [class.active]="!audioSignalCollapsed && !screenXs">
16232
16299
  <app-audiodisplay #audioSignalContainer [class.active]="!audioSignalCollapsed"
16233
16300
  [audioClip]="displayAudioClip"
16234
16301
  [playStartAction]="playStartAction"
@@ -16236,8 +16303,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16236
16303
  [autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
16237
16304
  [playStopAction]="playStopAction"></app-audiodisplay>
16238
16305
  </div>
16239
- `, 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"] }]
16240
- }], ctorParameters: function () { return []; }, propDecorators: { recordingListComp: [{
16306
+ `, 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"] }]
16307
+ }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { recordingListComp: [{
16241
16308
  type: ViewChild,
16242
16309
  args: [RecordingList]
16243
16310
  }], selectDisabled: [{
@@ -16264,8 +16331,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16264
16331
  }] } });
16265
16332
 
16266
16333
  class AudioRecorder extends BasicRecorder {
16267
- constructor(changeDetectorRef, renderer, route, dialog, sessionService, recFileService, uploader, config) {
16268
- super(changeDetectorRef, dialog, sessionService, uploader, config);
16334
+ constructor(bpo, changeDetectorRef, renderer, route, dialog, sessionService, recFileService, uploader, config) {
16335
+ super(bpo, changeDetectorRef, dialog, sessionService, uploader, config);
16336
+ this.bpo = bpo;
16269
16337
  this.renderer = renderer;
16270
16338
  this.route = route;
16271
16339
  this.recFileService = recFileService;
@@ -16384,7 +16452,7 @@ class AudioRecorder extends BasicRecorder {
16384
16452
  this.transportActions.stopAction.onAction = () => this.stopItem();
16385
16453
  this.transportActions.nextAction.onAction = () => this.stopItem();
16386
16454
  //this.transportActions.pauseAction.onAction = () => this.pauseItem();
16387
- this.playStartAction.onAction = () => this.controlAudioPlayer.start();
16455
+ this.playStartAction.onAction = () => { var _a; return (_a = this.controlAudioPlayer) === null || _a === void 0 ? void 0 : _a.start(); };
16388
16456
  }
16389
16457
  this.uploader.listener = (ue) => {
16390
16458
  this.uploadUpdate(ue);
@@ -16653,14 +16721,18 @@ class AudioRecorder extends BasicRecorder {
16653
16721
  this.displayAudioClip = new AudioClip(adh);
16654
16722
  //this.audioLoaded=true;
16655
16723
  //console.debug(" set recording file: display audio clip set");
16656
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16724
+ if (this._controlAudioPlayer) {
16725
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16726
+ }
16657
16727
  this.showRecording();
16658
16728
  }
16659
16729
  else {
16660
16730
  // clear for now ...
16661
16731
  this.displayAudioClip = null;
16662
16732
  //console.debug("set recording file: display audio clip null");
16663
- this.controlAudioPlayer.audioClip = null;
16733
+ if (this._controlAudioPlayer) {
16734
+ this._controlAudioPlayer.audioClip = null;
16735
+ }
16664
16736
  if (this._controlAudioPlayer && this._session) {
16665
16737
  //... and try to fetch from server
16666
16738
  this.liveLevelDisplayState = State.LOADING;
@@ -16714,7 +16786,9 @@ class AudioRecorder extends BasicRecorder {
16714
16786
  // 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
16715
16787
  this.displayAudioClip = new AudioClip(fabDh);
16716
16788
  }
16717
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16789
+ if (this._controlAudioPlayer) {
16790
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16791
+ }
16718
16792
  this.showRecording();
16719
16793
  },
16720
16794
  error: err => {
@@ -16758,7 +16832,9 @@ class AudioRecorder extends BasicRecorder {
16758
16832
  // this.audioLoaded=true;
16759
16833
  // }
16760
16834
  }
16761
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16835
+ if (this._controlAudioPlayer) {
16836
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16837
+ }
16762
16838
  this.showRecording();
16763
16839
  },
16764
16840
  error: err => {
@@ -16797,7 +16873,9 @@ class AudioRecorder extends BasicRecorder {
16797
16873
  this.displayAudioClip = new AudioClip(fabDh);
16798
16874
  //this.audioLoaded=true;
16799
16875
  }
16800
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16876
+ if (this._controlAudioPlayer) {
16877
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16878
+ }
16801
16879
  this.showRecording();
16802
16880
  },
16803
16881
  error: err => {
@@ -16831,7 +16909,9 @@ class AudioRecorder extends BasicRecorder {
16831
16909
  //this.audioLoaded=true;
16832
16910
  //console.debug("set recording file: display audio clip from fetched audio buffer");
16833
16911
  }
16834
- this.controlAudioPlayer.audioClip = this.displayAudioClip;
16912
+ if (this._controlAudioPlayer) {
16913
+ this._controlAudioPlayer.audioClip = this.displayAudioClip;
16914
+ }
16835
16915
  this.showRecording();
16836
16916
  }, error: err => {
16837
16917
  console.error("Could not load recording file from server: " + err);
@@ -16851,7 +16931,9 @@ class AudioRecorder extends BasicRecorder {
16851
16931
  else {
16852
16932
  //console.debug("recording file null");
16853
16933
  this.displayAudioClip = null;
16854
- this.controlAudioPlayer.audioClip = null;
16934
+ if (this._controlAudioPlayer) {
16935
+ this._controlAudioPlayer.audioClip = null;
16936
+ }
16855
16937
  }
16856
16938
  this.showRecording();
16857
16939
  }
@@ -17139,9 +17221,12 @@ class AudioRecorder extends BasicRecorder {
17139
17221
  }
17140
17222
  }
17141
17223
  updateControlPlaybackPosition() {
17142
- if (this._controlAudioPlayer.playPositionFrames) {
17143
- this.recorderCombiPane.audioDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;
17144
- this.liveLevelDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;
17224
+ if (this._controlAudioPlayer) {
17225
+ const ppFrames = this._controlAudioPlayer.playPositionFrames;
17226
+ if (ppFrames !== null) {
17227
+ this.recorderCombiPane.audioDisplay.playFramePosition = ppFrames;
17228
+ this.liveLevelDisplay.playFramePosition = ppFrames;
17229
+ }
17145
17230
  }
17146
17231
  }
17147
17232
  audioPlayerUpdate(e) {
@@ -17160,7 +17245,7 @@ class AudioRecorder extends BasicRecorder {
17160
17245
  }
17161
17246
  }
17162
17247
  }
17163
- 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 });
17248
+ 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 });
17164
17249
  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: `
17165
17250
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
17166
17251
  <app-warningbar [show]="isDefaultAudioTestSession()"
@@ -17170,18 +17255,17 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
17170
17255
  [selectedRecordingFile]="displayRecFile"
17171
17256
  [selectDisabled]="isActive()"
17172
17257
  [displayAudioClip]="displayAudioClip"
17173
- [playStartAction]="controlAudioPlayer.startAction"
17174
- [playStopAction]="controlAudioPlayer.stopAction"
17175
- [playSelectionAction]="controlAudioPlayer.startSelectionAction"
17176
- [autoPlayOnSelectToggleAction]="controlAudioPlayer.autoPlayOnSelectToggleAction"
17258
+ [playStartAction]="controlAudioPlayer?.startAction"
17259
+ [playStopAction]="controlAudioPlayer?.stopAction"
17260
+ [playSelectionAction]="controlAudioPlayer?.startSelectionAction"
17261
+ [autoPlayOnSelectToggleAction]="controlAudioPlayer?.autoPlayOnSelectToggleAction"
17177
17262
  ></app-recordercombipane>
17178
17263
 
17179
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}"
17180
- [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
17181
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording() || keepLiveLevel" [state]="liveLevelDisplayState"
17264
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
17265
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="isRecording() || keepLiveLevel" [state]="liveLevelDisplayState"
17182
17266
  [displayLevelInfos]="displayAudioClip?.levelInfos"></audio-levelbar>
17183
- <div fxLayout="row">
17184
- <spr-recordingitemcontrols fxFlex="10 0 1"
17267
+ <div style="flex-direction: row">
17268
+ <spr-recordingitemcontrols style="flex:10 0 1%"
17185
17269
  [disableAudioDetails]="disableAudioDetails"
17186
17270
  [audioLoaded]="audioLoaded"
17187
17271
  [playStartAction]="controlAudioPlayer?.startAction"
@@ -17191,19 +17275,19 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
17191
17275
  (onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
17192
17276
  </spr-recordingitemcontrols>
17193
17277
 
17194
- <app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
17278
+ <app-uploadstatus *ngIf="screenXs && enableUploadRecordings" class="ricontrols dark" style="flex:0 0 0"
17195
17279
  [value]="uploadProgress"
17196
17280
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
17197
- <app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
17198
- <app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
17281
+ <app-wakelockindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
17282
+ <app-readystateindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0"
17199
17283
  [ready]="dataSaved && !isActive()"></app-readystateindicator>
17200
17284
  </div>
17201
17285
  </div>
17202
- <div #controlpanel class="controlpanel" fxLayout="row">
17203
- <app-sprstatusdisplay fxHide.xs fxFlex="30% 1 30%" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType"
17286
+ <div #controlpanel class="controlpanel">
17287
+ <app-sprstatusdisplay *ngIf="!screenXs" style="flex:0.333 1 30%" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType"
17204
17288
  [statusWaiting]="statusWaiting"
17205
17289
  class="hidden-xs"></app-sprstatusdisplay>
17206
- <div fxFlex="100% 0 100%" class="startstop">
17290
+ <div style="flex:1 0 100%" class="startstop">
17207
17291
  <div style="align-content: center">
17208
17292
  <button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
17209
17293
  <mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
@@ -17211,18 +17295,18 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
17211
17295
  </button>
17212
17296
  </div>
17213
17297
  </div>
17214
- <div fxFlex="30% 1 30%" >
17215
- <div fxFlex="1 1 auto"></div>
17298
+ <div style="flex:0.333 1 30%" >
17299
+ <div style="flex:1 1 auto"></div>
17216
17300
 
17217
- <app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
17301
+ <app-uploadstatus *ngIf="!screenXs && enableUploadRecordings" class="ricontrols" style="flex:0 0 0"
17218
17302
  [value]="uploadProgress"
17219
17303
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
17220
- <app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
17221
- <app-readystateindicator class="ricontrols" fxHide.xs
17304
+ <app-wakelockindicator *ngIf="!screenXs" class="ricontrols" [screenLocked]="screenLocked"></app-wakelockindicator>
17305
+ <app-readystateindicator *ngIf="!screenXs" class="ricontrols"
17222
17306
  [ready]="dataSaved && !isActive()"></app-readystateindicator>
17223
17307
  </div>
17224
17308
  </div>
17225
- `, 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"] }] });
17309
+ `, 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"] }] });
17226
17310
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, decorators: [{
17227
17311
  type: Component,
17228
17312
  args: [{ selector: 'app-audiorecorder', providers: [SessionService], template: `
@@ -17234,18 +17318,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
17234
17318
  [selectedRecordingFile]="displayRecFile"
17235
17319
  [selectDisabled]="isActive()"
17236
17320
  [displayAudioClip]="displayAudioClip"
17237
- [playStartAction]="controlAudioPlayer.startAction"
17238
- [playStopAction]="controlAudioPlayer.stopAction"
17239
- [playSelectionAction]="controlAudioPlayer.startSelectionAction"
17240
- [autoPlayOnSelectToggleAction]="controlAudioPlayer.autoPlayOnSelectToggleAction"
17321
+ [playStartAction]="controlAudioPlayer?.startAction"
17322
+ [playStopAction]="controlAudioPlayer?.stopAction"
17323
+ [playSelectionAction]="controlAudioPlayer?.startSelectionAction"
17324
+ [autoPlayOnSelectToggleAction]="controlAudioPlayer?.autoPlayOnSelectToggleAction"
17241
17325
  ></app-recordercombipane>
17242
17326
 
17243
- <div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}"
17244
- [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
17245
- <audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording() || keepLiveLevel" [state]="liveLevelDisplayState"
17327
+ <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
17328
+ <audio-levelbar style="flex:1 0 1%" [streamingMode]="isRecording() || keepLiveLevel" [state]="liveLevelDisplayState"
17246
17329
  [displayLevelInfos]="displayAudioClip?.levelInfos"></audio-levelbar>
17247
- <div fxLayout="row">
17248
- <spr-recordingitemcontrols fxFlex="10 0 1"
17330
+ <div style="flex-direction: row">
17331
+ <spr-recordingitemcontrols style="flex:10 0 1%"
17249
17332
  [disableAudioDetails]="disableAudioDetails"
17250
17333
  [audioLoaded]="audioLoaded"
17251
17334
  [playStartAction]="controlAudioPlayer?.startAction"
@@ -17255,19 +17338,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
17255
17338
  (onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
17256
17339
  </spr-recordingitemcontrols>
17257
17340
 
17258
- <app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
17341
+ <app-uploadstatus *ngIf="screenXs && enableUploadRecordings" class="ricontrols dark" style="flex:0 0 0"
17259
17342
  [value]="uploadProgress"
17260
17343
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
17261
- <app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
17262
- <app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
17344
+ <app-wakelockindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
17345
+ <app-readystateindicator *ngIf="screenXs" class="ricontrols dark" style="flex:0 0 0"
17263
17346
  [ready]="dataSaved && !isActive()"></app-readystateindicator>
17264
17347
  </div>
17265
17348
  </div>
17266
- <div #controlpanel class="controlpanel" fxLayout="row">
17267
- <app-sprstatusdisplay fxHide.xs fxFlex="30% 1 30%" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType"
17349
+ <div #controlpanel class="controlpanel">
17350
+ <app-sprstatusdisplay *ngIf="!screenXs" style="flex:0.333 1 30%" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType"
17268
17351
  [statusWaiting]="statusWaiting"
17269
17352
  class="hidden-xs"></app-sprstatusdisplay>
17270
- <div fxFlex="100% 0 100%" class="startstop">
17353
+ <div style="flex:1 0 100%" class="startstop">
17271
17354
  <div style="align-content: center">
17272
17355
  <button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
17273
17356
  <mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
@@ -17275,20 +17358,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
17275
17358
  </button>
17276
17359
  </div>
17277
17360
  </div>
17278
- <div fxFlex="30% 1 30%" >
17279
- <div fxFlex="1 1 auto"></div>
17361
+ <div style="flex:0.333 1 30%" >
17362
+ <div style="flex:1 1 auto"></div>
17280
17363
 
17281
- <app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
17364
+ <app-uploadstatus *ngIf="!screenXs && enableUploadRecordings" class="ricontrols" style="flex:0 0 0"
17282
17365
  [value]="uploadProgress"
17283
17366
  [status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
17284
- <app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
17285
- <app-readystateindicator class="ricontrols" fxHide.xs
17367
+ <app-wakelockindicator *ngIf="!screenXs" class="ricontrols" [screenLocked]="screenLocked"></app-wakelockindicator>
17368
+ <app-readystateindicator *ngIf="!screenXs" class="ricontrols"
17286
17369
  [ready]="dataSaved && !isActive()"></app-readystateindicator>
17287
17370
  </div>
17288
17371
  </div>
17289
- `, 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"] }]
17372
+ `, 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"] }]
17290
17373
  }], ctorParameters: function () {
17291
- return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$2.ActivatedRoute }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
17374
+ 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: [{
17292
17375
  type: Inject,
17293
17376
  args: [SPEECHRECORDER_CONFIG]
17294
17377
  }] }];
@@ -17479,20 +17562,20 @@ class SpeechrecorderngModule {
17479
17562
  }
17480
17563
  SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17481
17564
  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,
17482
- 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] });
17483
- 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] });
17565
+ 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] });
17566
+ 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] });
17484
17567
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
17485
17568
  type: NgModule,
17486
17569
  args: [{
17487
17570
  declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
17488
17571
  ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder],
17489
17572
  exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder],
17490
- imports: [RouterModule.forChild(SPR_ROUTES), FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule],
17573
+ imports: [RouterModule.forChild(SPR_ROUTES), CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule],
17491
17574
  providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader]
17492
17575
  }]
17493
17576
  }] });
17494
17577
 
17495
- const VERSION = '3.3.1';
17578
+ const VERSION = '3.3.4';
17496
17579
 
17497
17580
  /*
17498
17581
  * Public API Surface of speechrecorderng