speechrecorderng 3.10.0 → 3.10.2

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 (47) hide show
  1. package/README.md +2 -2
  2. package/esm2022/lib/audio/audio_display.mjs +3 -3
  3. package/esm2022/lib/audio/audio_player.mjs +3 -3
  4. package/esm2022/lib/audio/impl/wavwriter.mjs +10 -2
  5. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +6 -6
  6. package/esm2022/lib/audio/ui/audio_display_control.mjs +3 -3
  7. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +3 -3
  8. package/esm2022/lib/audio/ui/audiosignal.mjs +3 -3
  9. package/esm2022/lib/audio/ui/container.mjs +3 -3
  10. package/esm2022/lib/audio/ui/livelevel.mjs +3 -3
  11. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +3 -3
  12. package/esm2022/lib/audio/ui/sonagram.mjs +3 -3
  13. package/esm2022/lib/db/inddb.mjs +3 -3
  14. package/esm2022/lib/speechrecorder/project/project.service.mjs +3 -3
  15. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +3 -3
  16. package/esm2022/lib/speechrecorder/script/script.service.mjs +3 -3
  17. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +10 -10
  18. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +21 -21
  19. package/esm2022/lib/speechrecorder/session/progress.mjs +3 -3
  20. package/esm2022/lib/speechrecorder/session/prompting.mjs +15 -15
  21. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +3 -3
  22. package/esm2022/lib/speechrecorder/session/recording_list.mjs +3 -3
  23. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +3 -3
  24. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +3 -3
  25. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +3 -3
  26. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +3 -3
  27. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +3 -3
  28. package/esm2022/lib/speechrecorder/session/session.service.mjs +3 -3
  29. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +3 -3
  30. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +6 -6
  31. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +3 -3
  32. package/esm2022/lib/speechrecorder/spruploader.mjs +3 -3
  33. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +3 -3
  34. package/esm2022/lib/speechrecorderng.component.mjs +3 -3
  35. package/esm2022/lib/speechrecorderng.module.mjs +4 -4
  36. package/esm2022/lib/spr.config.mjs +3 -3
  37. package/esm2022/lib/spr.module.version.mjs +2 -2
  38. package/esm2022/lib/ui/canvas_layer_comp.mjs +3 -3
  39. package/esm2022/lib/ui/intersection-observer.directive.mjs +3 -3
  40. package/esm2022/lib/ui/message_dialog.mjs +3 -3
  41. package/esm2022/lib/ui/recordingitem_display.mjs +6 -6
  42. package/esm2022/lib/ui/responsive_component.mjs +3 -3
  43. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +3 -3
  44. package/fesm2022/speechrecorderng.mjs +175 -167
  45. package/fesm2022/speechrecorderng.mjs.map +1 -1
  46. package/lib/spr.module.version.d.ts +1 -1
  47. package/package.json +12 -12
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # SpeechRecorderNg
2
2
 
3
- A Speech Recording Tool implemented as an Angular 17 module.
3
+ A Speech Recording Tool implemented as an Angular 18 module.
4
4
 
5
5
  ## Migrate from version 2.x.x to 3.x.x
6
6
  For backwards compatibility to server REST API v1 set the property `apiVersion: 1` in your environment file.
@@ -9,7 +9,7 @@ For backwards compatibility to server REST API v1 set the property `apiVersion:
9
9
 
10
10
  ### Install NPM package
11
11
  Speechrecorder module is available as NPM package.
12
- Add `"speechrecorderng": "3.10.0"` to the `dependencies` array property in the `package.json` file of your application. Run `npm install` to install the package.
12
+ Add `"speechrecorderng": "3.10.2"` to the `dependencies` array property in the `package.json` file of your application. Run `npm install` to install the package.
13
13
  ### Module integration
14
14
  Add SpeechRecorderNg module to imports property of your `AppModule` annotation. The module main component `SpeechRecorder` should be activated by an Angular route.
15
15
 
@@ -67,8 +67,8 @@ export class AudioDisplay {
67
67
  error() {
68
68
  this.status = 'ERROR';
69
69
  }
70
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioDisplay, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
71
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: AudioDisplay, selector: "app-audiodisplay", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioDisplay, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: AudioDisplay, selector: "app-audiodisplay", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
72
72
 
73
73
  <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
74
74
 
@@ -83,7 +83,7 @@ export class AudioDisplay {
83
83
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
84
84
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"], dependencies: [{ kind: "component", type: i1.AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: i2.AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] }); }
85
85
  }
86
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioDisplay, decorators: [{
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioDisplay, decorators: [{
87
87
  type: Component,
88
88
  args: [{ selector: 'app-audiodisplay', template: `
89
89
 
@@ -187,8 +187,8 @@ export class AudioDisplayPlayer {
187
187
  error() {
188
188
  this.status = 'ERROR';
189
189
  }
190
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
191
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: AudioDisplayPlayer, selector: "app-audiodisplayplayer", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
190
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
191
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: AudioDisplayPlayer, selector: "app-audiodisplayplayer", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
192
192
 
193
193
  <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
194
194
 
@@ -203,7 +203,7 @@ export class AudioDisplayPlayer {
203
203
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
204
204
  `, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#000000bf}\n"], dependencies: [{ kind: "component", type: i2.AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: i3.AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] }); }
205
205
  }
206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
207
207
  type: Component,
208
208
  args: [{ selector: 'app-audiodisplayplayer', template: `
209
209
 
@@ -14,9 +14,17 @@ export class WavWriter {
14
14
  this.sampleSize = WavWriter.DEFAULT_SAMPLE_SIZE;
15
15
  this.sampleSizeInBits = this.sampleSize.valueOf();
16
16
  this.workerURL = null;
17
+ //console.debug("WavWriter: "+encodingFloat+", "+sampleSize);
17
18
  if (encodingFloat !== undefined && encodingFloat !== null) {
18
19
  this.encodingFloat = encodingFloat;
19
- this.sampleSize = SampleSize.INT32;
20
+ if (encodingFloat === true) {
21
+ this.sampleSize = SampleSize.INT32;
22
+ }
23
+ else {
24
+ if (sampleSize) {
25
+ this.sampleSize = sampleSize;
26
+ }
27
+ }
20
28
  }
21
29
  else if (sampleSize) {
22
30
  this.sampleSize = sampleSize;
@@ -180,4 +188,4 @@ export class WavWriter {
180
188
  return dataChkByteLen;
181
189
  }
182
190
  }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F2d3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2ltcGwvd2F2d3JpdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSS9DLE1BQU0sQ0FBTixJQUFZLFVBQThCO0FBQTFDLFdBQVksVUFBVTtJQUFFLDhDQUFRLENBQUE7SUFBQyw4Q0FBUSxDQUFBO0FBQUEsQ0FBQyxFQUE5QixVQUFVLEtBQVYsVUFBVSxRQUFvQjtBQUN2QyxNQUFNLE9BQU8sU0FBUzthQUVKLHdCQUFtQixHQUFjLFVBQVUsQ0FBQyxLQUFLLEFBQTlCLENBQStCO0lBUWxFLFlBQVksYUFBc0IsRUFBQyxVQUFzQjtRQVB4QyxzQkFBaUIsR0FBUSxTQUFTLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEdBQUMsQ0FBQyxDQUFDO1FBQzVFLGtCQUFhLEdBQVMsS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUM7UUFDekMscUJBQWdCLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUUzQyxjQUFTLEdBQWMsSUFBSSxDQUFDO1FBR2xDLElBQUcsYUFBYSxLQUFHLFNBQVMsSUFBSSxhQUFhLEtBQUcsSUFBSSxFQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBQyxhQUFhLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ25DLENBQUM7YUFBSyxJQUFHLFVBQVUsRUFBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFV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QztRQUUxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsSUFBRyxJQUFJLENBQUMsYUFBYSxLQUFHLElBQUksRUFBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0MsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdhdkZpbGVGb3JtYXQgfSBmcm9tICcuL3dhdmZvcm1hdCdcclxuaW1wb3J0IHsgQmluYXJ5Qnl0ZVdyaXRlciB9IGZyb20gJy4uLy4uL2lvL0JpbmFyeVdyaXRlcidcclxuaW1wb3J0IHtXb3JrZXJIZWxwZXJ9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5kZWNsYXJlIGZ1bmN0aW9uIHBvc3RNZXNzYWdlIChtZXNzYWdlOmFueSwgdHJhbnNmZXI6QXJyYXk8YW55Pik6dm9pZDtcclxuXHJcblxyXG5leHBvcnQgZW51bSBTYW1wbGVTaXplIHtJTlQxNj0xNixJTlQzMj0zMn1cclxuICAgZXhwb3J0IGNsYXNzIFdhdldyaXRlciB7XHJcblxyXG4gICAgIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1NBTVBMRV9TSVpFOlNhbXBsZVNpemUgPSBTYW1wbGVTaXplLklOVDE2O1xyXG4gICAgIHByaXZhdGUgcmVhZG9ubHkgc2FtcGxlU2l6ZUluQnl0ZXM6bnVtYmVyPVdhdldyaXRlci5ERUZBVUxUX1NBTVBMRV9TSVpFLnZhbHVlT2YoKS84O1xyXG4gICAgIHByaXZhdGUgZW5jb2RpbmdGbG9hdDpib29sZWFuPWZhbHNlO1xyXG4gICAgIHByaXZhdGUgc2FtcGxlU2l6ZT1XYXZXcml0ZXIuREVGQVVMVF9TQU1QTEVfU0laRTtcclxuICAgICBwcml2YXRlIHNhbXBsZVNpemVJbkJpdHM9dGhpcy5zYW1wbGVTaXplLnZhbHVlT2YoKTtcclxuICAgICBwcml2YXRlIGJ3OkJpbmFyeUJ5dGVXcml0ZXI7XHJcbiAgICAgcHJpdmF0ZSB3b3JrZXJVUkw6IHN0cmluZ3xudWxsPW51bGw7XHJcblxyXG4gICAgIGNvbnN0cnVjdG9yKGVuY29kaW5nRmxvYXQ/OmJvb2xlYW4sc2FtcGxlU2l6ZT86U2FtcGxlU2l6ZSkge1xyXG4gICAgICAgaWYoZW5jb2RpbmdGbG9hdCE9PXVuZGVmaW5lZCAmJiBlbmNvZGluZ0Zsb2F0IT09bnVsbCl7XHJcbiAgICAgICAgIHRoaXMuZW5jb2RpbmdGbG9hdD1lbmNvZGluZ0Zsb2F0O1xyXG4gICAgICAgICB0aGlzLnNhbXBsZVNpemU9U2FtcGxlU2l6ZS5JTlQzMjtcclxuICAgICAgIH1lbHNlIGlmKHNhbXBsZVNpemUpe1xyXG4gICAgICAgICB0aGlzLnNhbXBsZVNpemU9c2FtcGxlU2l6ZTtcclxuICAgICAgIH1cclxuICAgICAgIHRoaXMuc2FtcGxlU2l6ZUluQml0cz10aGlzLnNhbXBsZVNpemUudmFsdWVPZigpO1xyXG4gICAgICAgdGhpcy5zYW1wbGVTaXplSW5CeXRlcz1NYXRoLnJvdW5kKHRoaXMuc2FtcGxlU2l6ZUluQml0cy84KTtcclxuXHJcbiAgICAgICB0aGlzLmJ3ID0gbmV3IEJpbmFyeUJ5dGVXcml0ZXIoKTtcclxuICAgICB9XHJcblxyXG4gICAgIC8qXHJcbiAgICAgICogIE1ldGhvZCB1c2VkIGFzIHdvcmtlciBjb2RlLlxyXG4gICAgICAqL1xyXG4gICAgIHdvcmtlckZ1bmN0aW9uKCkge1xyXG4gICAgICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAobXNnOk1lc3NhZ2VFdmVudCkge1xyXG5cclxuICAgICAgICAgY29uc3QgdmFsVmlldyA9IG5ldyBEYXRhVmlldyhtc2cuZGF0YS5idWYsbXNnLmRhdGEuYnVmUG9zKTtcclxuICAgICAgICAgY29uc3Qgc2FtcGxlU2l6ZUluYnl0ZXM9TWF0aC5yb3VuZChtc2cuZGF0YS5zYW1wbGVTaXplSW5CaXRzLzgpO1xyXG4gICAgICAgICBsZXQgYnVmUG9zID0gMDtcclxuICAgICAgICAgY29uc3QgaER5bkludFJhbmdlID0gMSA8PCAobXNnLmRhdGEuc2FtcGxlU2l6ZUluQml0cyAtIDEpO1xyXG4gICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IG1zZy5kYXRhLmZyYW1lTGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgICAvLyBpbnRlcmxlYXZlZCBjaGFubmVsIGRhdGFcclxuXHJcbiAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IG1zZy5kYXRhLmNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgY29uc3Qgc3JjUG9zPShjaCptc2cuZGF0YS5mcmFtZUxlbmd0aCkrcztcclxuICAgICAgICAgICAgIGNvbnN0IHZhbEZsdCA9IG1zZy5kYXRhLmF1ZGlvRGF0YVtzcmNQb3NdO1xyXG4gICAgICAgICAgICAgaWYobXNnLmRhdGEuZW5jb2RpbmdGbG9hdD09PXRydWUpe1xyXG4gICAgICAgICAgICAgICB2YWxWaWV3LnNldEZsb2F0MzIoYnVmUG9zLHZhbEZsdCx0cnVlKTtcclxuICAgICAgICAgICAgICAgYnVmUG9zKz00O1xyXG4gICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICBjb25zdCB2YWxJbnQgPSBNYXRoLnJvdW5kKHZhbEZsdCAqIGhEeW5JbnRSYW5nZSk7XHJcbiAgICAgICAgICAgICAgIGlmIChtc2cuZGF0YS5zYW1wbGVTaXplSW5CaXRzID09PSAzMikge1xyXG4gICAgICAgICAgICAgICAgIHZhbFZpZXcuc2V0SW50MzIoYnVmUG9zLCB2YWxJbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgIHZhbFZpZXcuc2V0SW50MTYoYnVmUG9zLCB2YWxJbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIGJ1ZlBvcys9c2FtcGxlU2l6ZUluYnl0ZXM7XHJcbiAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICBwb3N0TWVzc2FnZSh7YnVmOm1zZy5kYXRhLmJ1Zn0sIFttc2cuZGF0YS5idWZdKTtcclxuICAgICAgICAgLy9zZWxmLmNsb3NlKClcclxuICAgICAgIH1cclxuICAgICB9XHJcblxyXG5cclxuICAgICB3cml0ZUZtdENodW5rKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKXtcclxuXHJcbiAgICAgICBpZih0aGlzLmVuY29kaW5nRmxvYXQ9PT10cnVlKXtcclxuICAgICAgICAgdGhpcy5idy53cml0ZVVpbnQxNihXYXZGaWxlRm9ybWF0LldBVkVfRk9STUFUX0lFRUVfRkxPQVQsIHRydWUpO1xyXG4gICAgICAgfWVsc2Uge1xyXG4gICAgICAgICB0aGlzLmJ3LndyaXRlVWludDE2KFdhdkZpbGVGb3JtYXQuUENNLCB0cnVlKTtcclxuICAgICAgIH1cclxuICAgICAgIGNvbnN0IGZyYW1lU2l6ZT10aGlzLnNhbXBsZVNpemVJbkJ5dGVzKmF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDE2KGF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHMsdHJ1ZSk7XHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDMyKGF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUsdHJ1ZSk7XHJcbiAgICAgICAgIC8vIGR3QXZnQnl0ZXNQZXJTZWNcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MzIoZnJhbWVTaXplKmF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUsdHJ1ZSk7XHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDE2KGZyYW1lU2l6ZSx0cnVlKTtcclxuICAgICAgIC8vIHNhbXBsZSBzaXplIGluIGJpdHMgKFBDTSBmb3JtYXQgb25seSlcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MTYodGhpcy5zYW1wbGVTaXplSW5CaXRzLHRydWUpO1xyXG4gICAgICAgaWYodGhpcy5lbmNvZGluZ0Zsb2F0PT09dHJ1ZSl7XHJcbiAgICAgICAgIHRoaXMuYncud3JpdGVVaW50MTYoMCx0cnVlKTtcclxuICAgICAgIH1cclxuICAgICB9XHJcblxyXG4gICAgIHdyaXRlRmFjdENodW5rKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKXtcclxuICAgICAgIGNvbnN0IGNoMD1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcclxuICAgICAgIGxldCBzYW1wbGVMZW49MDtcclxuICAgICAgIGlmKGNoMCl7XHJcbiAgICAgICAgIHNhbXBsZUxlbj1jaDAubGVuZ3RoO1xyXG4gICAgICAgfVxyXG4gICAgICAgIHRoaXMuYncud3JpdGVVaW50MzIoc2FtcGxlTGVuLHRydWUpO1xyXG4gICAgIH1cclxuXHJcbiAgICAgd3JpdGVEYXRhQ2h1bmsoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpe1xyXG5cclxuICAgICAgIGNvbnN0IGNoRGF0YTA9YXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XHJcbiAgICAgICBjb25zdCBkYXRhTGVuPWNoRGF0YTAubGVuZ3RoO1xyXG4gICAgICAgaWYodGhpcy5lbmNvZGluZ0Zsb2F0PT09dHJ1ZSl7XHJcbiAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgZGF0YUxlbjsgcysrKSB7XHJcbiAgICAgICAgICAgLy8gaW50ZXJsZWF2ZWQgY2hhbm5lbCBkYXRhXHJcbiAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7IGNoKyspIHtcclxuICAgICAgICAgICAgIGNvbnN0IGNoRGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKTtcclxuICAgICAgICAgICAgIGNvbnN0IHZhbEZsdCA9IGNoRGF0YVtzXTtcclxuICAgICAgICAgICAgIHRoaXMuYncud3JpdGVGbG9hdCh2YWxGbHQpO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgfWVsc2Uge1xyXG4gICAgICAgICBjb25zdCBoRHluSW50UmFuZ2UgPSAxIDw8ICgodGhpcy5zYW1wbGVTaXplSW5CaXRzKSAtIDEpO1xyXG4gICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGRhdGFMZW47IHMrKykge1xyXG4gICAgICAgICAgIC8vIGludGVybGVhdmVkIGNoYW5uZWwgZGF0YVxyXG4gICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICBjb25zdCBjaERhdGEgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCk7XHJcbiAgICAgICAgICAgICBjb25zdCB2YWxGbHQgPSBjaERhdGFbc107XHJcbiAgICAgICAgICAgICBjb25zdCB2YWxJbnQgPSBNYXRoLnJvdW5kKHZhbEZsdCAqIGhEeW5JbnRSYW5nZSk7XHJcbiAgICAgICAgICAgICBpZiAodGhpcy5zYW1wbGVTaXplID09PSBTYW1wbGVTaXplLklOVDE2KSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMuYncud3JpdGVJbnQxNih2YWxJbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNhbXBsZVNpemUgPT09IFNhbXBsZVNpemUuSU5UMzIpIHtcclxuICAgICAgICAgICAgICAgdGhpcy5idy53cml0ZUludDMyKHZhbEludCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICB9XHJcblxyXG4gICAgIH1cclxuXHJcbiAgICAgd3JpdGVDaHVua0hlYWRlcihuYW1lOnN0cmluZyxjaGtMZW46bnVtYmVyKXtcclxuICAgICAgIHRoaXMuYncud3JpdGVBc2NpaShuYW1lKTtcclxuICAgICAgIHRoaXMuYncud3JpdGVVaW50MzIoY2hrTGVuLHRydWUpO1xyXG4gICAgIH1cclxuXHJcbiAgICAgd3JpdGVBc3luYyhhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcixjYWxsYmFjazogKHdhdkZpbGVEYXRhOlVpbnQ4QXJyYXkpPT4gYW55KXtcclxuXHJcbiAgICAgICBjb25zdCBkYXRhQ2hrQnl0ZUxlbj10aGlzLndyaXRlSGVhZGVyKGF1ZGlvQnVmZmVyKTtcclxuICAgICAgIGlmICghdGhpcy53b3JrZXJVUkwpIHtcclxuICAgICAgICAgdGhpcy53b3JrZXJVUkwgPSBXb3JrZXJIZWxwZXIuYnVpbGRXb3JrZXJCbG9iVVJMKHRoaXMud29ya2VyRnVuY3Rpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgY29uc3Qgd28gPSBuZXcgV29ya2VyKHRoaXMud29ya2VyVVJMKTtcclxuXHJcbiAgICAgICBjb25zdCBjaHMgPSBhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG5cclxuICAgICAgIGNvbnN0IGZyYW1lTGVuZ3RoID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCkubGVuZ3RoO1xyXG4gICAgICAgY29uc3QgYWQgPSBuZXcgRmxvYXQzMkFycmF5KGNocyAqIGZyYW1lTGVuZ3RoKTtcclxuICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgYWQuc2V0KGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKSwgY2ggKiBmcmFtZUxlbmd0aCk7XHJcbiAgICAgICB9XHJcbiAgICAgICAgIC8vIGVuc3VyZUNhcGFjaXR5IGJsb2NrcyAhISFcclxuICAgICAgIHRoaXMuYncuZW5zdXJlQ2FwYWNpdHkoZGF0YUNoa0J5dGVMZW4pO1xyXG4gICAgICAgd28ub25tZXNzYWdlID0gKG1lKSA9PiB7XHJcbiAgICAgICAgIGNhbGxiYWNrKG1lLmRhdGEuYnVmKTtcclxuICAgICAgICAgd28udGVybWluYXRlKCk7XHJcbiAgICAgICB9XHJcblxyXG5cclxuICAgICAgIHdvLnBvc3RNZXNzYWdlKHtlbmNvZGluZ0Zsb2F0OnRoaXMuZW5jb2RpbmdGbG9hdCxzYW1wbGVTaXplSW5CaXRzOnRoaXMuc2FtcGxlU2l6ZUluQml0cywgY2hzOiBjaHMsIGZyYW1lTGVuZ3RoOiBmcmFtZUxlbmd0aCwgYXVkaW9EYXRhOiBhZCxidWY6dGhpcy5idy5idWYsYnVmUG9zOnRoaXMuYncucG9zfSwgW2FkLmJ1ZmZlcix0aGlzLmJ3LmJ1Zl0pO1xyXG5cclxuICAgICB9XHJcblxyXG4gICAgIHdyaXRlKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKTpVaW50OEFycmF5e1xyXG4gICAgICAgdGhpcy53cml0ZUhlYWRlcihhdWRpb0J1ZmZlcik7XHJcbiAgICAgICB0aGlzLndyaXRlRGF0YUNodW5rKGF1ZGlvQnVmZmVyKTtcclxuICAgICAgIHJldHVybiB0aGlzLmJ3LmZpbmlzaCgpO1xyXG4gICAgIH1cclxuXHJcblxyXG4gICAgICB3cml0ZUhlYWRlcihhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcik6bnVtYmVye1xyXG4gICAgICAgIHRoaXMuYncud3JpdGVBc2NpaShXYXZGaWxlRm9ybWF0LlJJRkZfS0VZKTtcclxuICAgICAgICBsZXQgZGF0YUNoa0J5dGVMZW49MDtcclxuICAgICAgICAvL2NvbnN0IGRhdGFDaGtCeXRlTGVuPWF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApLmxlbmd0aCpXYXZXcml0ZXIuREVGQVVMVF9TQU1QTEVfU0laRV9CWVRFUyphdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICAgIGNvbnN0IGFiQ2hzPWF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICAgICAgaWYoYWJDaHM+MCl7XHJcbiAgICAgICAgICBjb25zdCBhYkNoMD1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcclxuICAgICAgICAgIGRhdGFDaGtCeXRlTGVuPWFiQ2gwLmxlbmd0aCp0aGlzLnNhbXBsZVNpemVJbkJ5dGVzKmFiQ2hzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaGVhZGVyQ250cz0zOyAvL1dhdmUsZm10IGFuZCBkYXRhXHJcblxyXG4gICAgICAgIGxldCBmbXRDaHVua1NpemU9MTY7XHJcbiAgICAgICAgbGV0IGZhY3RDaHVua1NpemU9NDtcclxuICAgICAgICBpZih0aGlzLmVuY29kaW5nRmxvYXQ9PT10cnVlKXtcclxuICAgICAgICAgIGZtdENodW5rU2l6ZT0xODtcclxuICAgICAgICAgIGhlYWRlckNudHMrKzsgLy8gZmFjdFxyXG4gICAgICAgIH0vLyBGbG9hdCBlbmNvZGluZyByZXF1aXJlcyBmbXQgZXh0ZW5zaW9uICh3aXRoIHplcm8gbGVuZ3RoKVxyXG4gICAgICAgIGxldCB3YXZDaHVua0J5dGVMZW49KDQrNCkqaGVhZGVyQ250cztcclxuXHJcbiAgICAgICAgd2F2Q2h1bmtCeXRlTGVuKz1mbXRDaHVua1NpemU7XHJcbiAgICAgICAgd2F2Q2h1bmtCeXRlTGVuKz1mYWN0Q2h1bmtTaXplO1xyXG4gICAgICAgIHdhdkNodW5rQnl0ZUxlbis9ZGF0YUNoa0J5dGVMZW47XHJcblxyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJXcml0ZSBXQVYgaGVhZGVyOiBXYXYgY2h1bmsgbGVuOiBcIit3YXZDaHVua0J5dGVMZW4pO1xyXG4gICAgICAgIHRoaXMuYncud3JpdGVVaW50MzIod2F2Q2h1bmtCeXRlTGVuLHRydWUpOyAvLyBtdXN0IGJlIHNldCB0byBmaWxlIGxlbmd0aC04IGxhdGVyXHJcbiAgICAgICAgdGhpcy5idy53cml0ZUFzY2lpKFdhdkZpbGVGb3JtYXQuV0FWX0tFWSk7XHJcblxyXG4gICAgICAgIHRoaXMud3JpdGVDaHVua0hlYWRlcignZm10ICcsZm10Q2h1bmtTaXplKTtcclxuICAgICAgICB0aGlzLndyaXRlRm10Q2h1bmsoYXVkaW9CdWZmZXIpO1xyXG4gICAgICAgIGlmKHRoaXMuZW5jb2RpbmdGbG9hdD09PXRydWUpe1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIldyaXRlIFdBViBoZWFkZXI6IFdyaXRlICdmYWN0JyBjaHVuay5cIik7XHJcbiAgICAgICAgICB0aGlzLndyaXRlQ2h1bmtIZWFkZXIoJ2ZhY3QnLDQpO1xyXG4gICAgICAgICAgdGhpcy53cml0ZUZhY3RDaHVuayhhdWRpb0J1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud3JpdGVDaHVua0hlYWRlcignZGF0YScsZGF0YUNoa0J5dGVMZW4pO1xyXG4gICAgICAgIHJldHVybiBkYXRhQ2hrQnl0ZUxlbjtcclxuICAgICAgfVxyXG5cclxuICAgfVxyXG5cclxuXHJcblxyXG4iXX0=
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F2d3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2ltcGwvd2F2d3JpdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSS9DLE1BQU0sQ0FBTixJQUFZLFVBQThCO0FBQTFDLFdBQVksVUFBVTtJQUFFLDhDQUFRLENBQUE7SUFBQyw4Q0FBUSxDQUFBO0FBQUEsQ0FBQyxFQUE5QixVQUFVLEtBQVYsVUFBVSxRQUFvQjtBQUN2QyxNQUFNLE9BQU8sU0FBUzthQUVKLHdCQUFtQixHQUFjLFVBQVUsQ0FBQyxLQUFLLEFBQTlCLENBQStCO0lBUWxFLFlBQVksYUFBc0IsRUFBQyxVQUFzQjtRQVB4QyxzQkFBaUIsR0FBUSxTQUFTLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEdBQUMsQ0FBQyxDQUFDO1FBQzVFLGtCQUFhLEdBQVMsS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUM7UUFDekMscUJBQWdCLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUUzQyxjQUFTLEdBQWMsSUFBSSxDQUFDO1FBR2xDLDZEQUE2RDtRQUM3RCxJQUFHLGFBQWEsS0FBRyxTQUFTLElBQUksYUFBYSxLQUFHLElBQUksRUFBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUMsYUFBYSxDQUFDO1lBQ2pDLElBQUcsYUFBYSxLQUFHLElBQUksRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDckMs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bUMsR0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7UUFDaEYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxJQUFHLElBQUksQ0FBQyxhQUFhLEtBQUcsSUFBSSxFQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBQyxjQUFjLENBQUMsQ0FBQztRQUM3QyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2F2RmlsZUZvcm1hdCB9IGZyb20gJy4vd2F2Zm9ybWF0J1xyXG5pbXBvcnQgeyBCaW5hcnlCeXRlV3JpdGVyIH0gZnJvbSAnLi4vLi4vaW8vQmluYXJ5V3JpdGVyJ1xyXG5pbXBvcnQge1dvcmtlckhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcbmRlY2xhcmUgZnVuY3Rpb24gcG9zdE1lc3NhZ2UgKG1lc3NhZ2U6YW55LCB0cmFuc2ZlcjpBcnJheTxhbnk+KTp2b2lkO1xyXG5cclxuXHJcbmV4cG9ydCBlbnVtIFNhbXBsZVNpemUge0lOVDE2PTE2LElOVDMyPTMyfVxyXG4gICBleHBvcnQgY2xhc3MgV2F2V3JpdGVyIHtcclxuXHJcbiAgICAgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfU0FNUExFX1NJWkU6U2FtcGxlU2l6ZSA9IFNhbXBsZVNpemUuSU5UMTY7XHJcbiAgICAgcHJpdmF0ZSByZWFkb25seSBzYW1wbGVTaXplSW5CeXRlczpudW1iZXI9V2F2V3JpdGVyLkRFRkFVTFRfU0FNUExFX1NJWkUudmFsdWVPZigpLzg7XHJcbiAgICAgcHJpdmF0ZSBlbmNvZGluZ0Zsb2F0OmJvb2xlYW49ZmFsc2U7XHJcbiAgICAgcHJpdmF0ZSBzYW1wbGVTaXplPVdhdldyaXRlci5ERUZBVUxUX1NBTVBMRV9TSVpFO1xyXG4gICAgIHByaXZhdGUgc2FtcGxlU2l6ZUluQml0cz10aGlzLnNhbXBsZVNpemUudmFsdWVPZigpO1xyXG4gICAgIHByaXZhdGUgYnc6QmluYXJ5Qnl0ZVdyaXRlcjtcclxuICAgICBwcml2YXRlIHdvcmtlclVSTDogc3RyaW5nfG51bGw9bnVsbDtcclxuXHJcbiAgICAgY29uc3RydWN0b3IoZW5jb2RpbmdGbG9hdD86Ym9vbGVhbixzYW1wbGVTaXplPzpTYW1wbGVTaXplKSB7XHJcbiAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJXYXZXcml0ZXI6IFwiK2VuY29kaW5nRmxvYXQrXCIsIFwiK3NhbXBsZVNpemUpO1xyXG4gICAgICAgaWYoZW5jb2RpbmdGbG9hdCE9PXVuZGVmaW5lZCAmJiBlbmNvZGluZ0Zsb2F0IT09bnVsbCl7XHJcbiAgICAgICAgIHRoaXMuZW5jb2RpbmdGbG9hdD1lbmNvZGluZ0Zsb2F0O1xyXG4gICAgICAgICBpZihlbmNvZGluZ0Zsb2F0PT09dHJ1ZSkge1xyXG4gICAgICAgICAgIHRoaXMuc2FtcGxlU2l6ZSA9IFNhbXBsZVNpemUuSU5UMzI7XHJcbiAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgIGlmKHNhbXBsZVNpemUpIHtcclxuICAgICAgICAgICAgIHRoaXMuc2FtcGxlU2l6ZSA9IHNhbXBsZVNpemU7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICB9ZWxzZSBpZihzYW1wbGVTaXplKXtcclxuICAgICAgICAgdGhpcy5zYW1wbGVTaXplPXNhbXBsZVNpemU7XHJcbiAgICAgICB9XHJcbiAgICAgICB0aGlzLnNhbXBsZVNpemVJbkJpdHM9dGhpcy5zYW1wbGVTaXplLnZhbHVlT2YoKTtcclxuICAgICAgIHRoaXMuc2FtcGxlU2l6ZUluQnl0ZXM9TWF0aC5yb3VuZCh0aGlzLnNhbXBsZVNpemVJbkJpdHMvOCk7XHJcblxyXG4gICAgICAgdGhpcy5idyA9IG5ldyBCaW5hcnlCeXRlV3JpdGVyKCk7XHJcbiAgICAgfVxyXG5cclxuICAgICAvKlxyXG4gICAgICAqICBNZXRob2QgdXNlZCBhcyB3b3JrZXIgY29kZS5cclxuICAgICAgKi9cclxuICAgICB3b3JrZXJGdW5jdGlvbigpIHtcclxuICAgICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZzpNZXNzYWdlRXZlbnQpIHtcclxuXHJcbiAgICAgICAgIGNvbnN0IHZhbFZpZXcgPSBuZXcgRGF0YVZpZXcobXNnLmRhdGEuYnVmLG1zZy5kYXRhLmJ1ZlBvcyk7XHJcbiAgICAgICAgIGNvbnN0IHNhbXBsZVNpemVJbmJ5dGVzPU1hdGgucm91bmQobXNnLmRhdGEuc2FtcGxlU2l6ZUluQml0cy84KTtcclxuICAgICAgICAgbGV0IGJ1ZlBvcyA9IDA7XHJcbiAgICAgICAgIGNvbnN0IGhEeW5JbnRSYW5nZSA9IDEgPDwgKG1zZy5kYXRhLnNhbXBsZVNpemVJbkJpdHMgLSAxKTtcclxuICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBtc2cuZGF0YS5mcmFtZUxlbmd0aDsgcysrKSB7XHJcbiAgICAgICAgICAgLy8gaW50ZXJsZWF2ZWQgY2hhbm5lbCBkYXRhXHJcblxyXG4gICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBtc2cuZGF0YS5jaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgIGNvbnN0IHNyY1Bvcz0oY2gqbXNnLmRhdGEuZnJhbWVMZW5ndGgpK3M7XHJcbiAgICAgICAgICAgICBjb25zdCB2YWxGbHQgPSBtc2cuZGF0YS5hdWRpb0RhdGFbc3JjUG9zXTtcclxuICAgICAgICAgICAgIGlmKG1zZy5kYXRhLmVuY29kaW5nRmxvYXQ9PT10cnVlKXtcclxuICAgICAgICAgICAgICAgdmFsVmlldy5zZXRGbG9hdDMyKGJ1ZlBvcyx2YWxGbHQsdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgIGJ1ZlBvcys9NDtcclxuICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgY29uc3QgdmFsSW50ID0gTWF0aC5yb3VuZCh2YWxGbHQgKiBoRHluSW50UmFuZ2UpO1xyXG4gICAgICAgICAgICAgICBpZiAobXNnLmRhdGEuc2FtcGxlU2l6ZUluQml0cyA9PT0gMzIpIHtcclxuICAgICAgICAgICAgICAgICB2YWxWaWV3LnNldEludDMyKGJ1ZlBvcywgdmFsSW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICB2YWxWaWV3LnNldEludDE2KGJ1ZlBvcywgdmFsSW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBidWZQb3MrPXNhbXBsZVNpemVJbmJ5dGVzO1xyXG4gICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgcG9zdE1lc3NhZ2Uoe2J1Zjptc2cuZGF0YS5idWZ9LCBbbXNnLmRhdGEuYnVmXSk7XHJcbiAgICAgICAgIC8vc2VsZi5jbG9zZSgpXHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG5cclxuXHJcbiAgICAgd3JpdGVGbXRDaHVuayhhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcil7XHJcblxyXG4gICAgICAgaWYodGhpcy5lbmNvZGluZ0Zsb2F0PT09dHJ1ZSl7XHJcbiAgICAgICAgIHRoaXMuYncud3JpdGVVaW50MTYoV2F2RmlsZUZvcm1hdC5XQVZFX0ZPUk1BVF9JRUVFX0ZMT0FULCB0cnVlKTtcclxuICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgdGhpcy5idy53cml0ZVVpbnQxNihXYXZGaWxlRm9ybWF0LlBDTSwgdHJ1ZSk7XHJcbiAgICAgICB9XHJcbiAgICAgICBjb25zdCBmcmFtZVNpemU9dGhpcy5zYW1wbGVTaXplSW5CeXRlcyphdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICAgdGhpcy5idy53cml0ZVVpbnQxNihhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzLHRydWUpO1xyXG4gICAgICAgdGhpcy5idy53cml0ZVVpbnQzMihhdWRpb0J1ZmZlci5zYW1wbGVSYXRlLHRydWUpO1xyXG4gICAgICAgICAvLyBkd0F2Z0J5dGVzUGVyU2VjXHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDMyKGZyYW1lU2l6ZSphdWRpb0J1ZmZlci5zYW1wbGVSYXRlLHRydWUpO1xyXG4gICAgICAgdGhpcy5idy53cml0ZVVpbnQxNihmcmFtZVNpemUsdHJ1ZSk7XHJcbiAgICAgICAvLyBzYW1wbGUgc2l6ZSBpbiBiaXRzIChQQ00gZm9ybWF0IG9ubHkpXHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDE2KHRoaXMuc2FtcGxlU2l6ZUluQml0cyx0cnVlKTtcclxuICAgICAgIGlmKHRoaXMuZW5jb2RpbmdGbG9hdD09PXRydWUpe1xyXG4gICAgICAgICB0aGlzLmJ3LndyaXRlVWludDE2KDAsdHJ1ZSk7XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG5cclxuICAgICB3cml0ZUZhY3RDaHVuayhhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcil7XHJcbiAgICAgICBjb25zdCBjaDA9YXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XHJcbiAgICAgICBsZXQgc2FtcGxlTGVuPTA7XHJcbiAgICAgICBpZihjaDApe1xyXG4gICAgICAgICBzYW1wbGVMZW49Y2gwLmxlbmd0aDtcclxuICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ3LndyaXRlVWludDMyKHNhbXBsZUxlbix0cnVlKTtcclxuICAgICB9XHJcblxyXG4gICAgIHdyaXRlRGF0YUNodW5rKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKXtcclxuXHJcbiAgICAgICBjb25zdCBjaERhdGEwPWF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xyXG4gICAgICAgY29uc3QgZGF0YUxlbj1jaERhdGEwLmxlbmd0aDtcclxuICAgICAgIGlmKHRoaXMuZW5jb2RpbmdGbG9hdD09PXRydWUpe1xyXG4gICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGRhdGFMZW47IHMrKykge1xyXG4gICAgICAgICAgIC8vIGludGVybGVhdmVkIGNoYW5uZWwgZGF0YVxyXG4gICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgICBjb25zdCBjaERhdGEgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCk7XHJcbiAgICAgICAgICAgICBjb25zdCB2YWxGbHQgPSBjaERhdGFbc107XHJcbiAgICAgICAgICAgICB0aGlzLmJ3LndyaXRlRmxvYXQodmFsRmx0KTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgY29uc3QgaER5bkludFJhbmdlID0gMSA8PCAoKHRoaXMuc2FtcGxlU2l6ZUluQml0cykgLSAxKTtcclxuICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBkYXRhTGVuOyBzKyspIHtcclxuICAgICAgICAgICAvLyBpbnRlcmxlYXZlZCBjaGFubmVsIGRhdGFcclxuICAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVsczsgY2grKykge1xyXG4gICAgICAgICAgICAgY29uc3QgY2hEYXRhID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gICAgICAgICAgICAgY29uc3QgdmFsRmx0ID0gY2hEYXRhW3NdO1xyXG4gICAgICAgICAgICAgY29uc3QgdmFsSW50ID0gTWF0aC5yb3VuZCh2YWxGbHQgKiBoRHluSW50UmFuZ2UpO1xyXG4gICAgICAgICAgICAgaWYgKHRoaXMuc2FtcGxlU2l6ZSA9PT0gU2FtcGxlU2l6ZS5JTlQxNikge1xyXG4gICAgICAgICAgICAgICB0aGlzLmJ3LndyaXRlSW50MTYodmFsSW50LCB0cnVlKTtcclxuICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zYW1wbGVTaXplID09PSBTYW1wbGVTaXplLklOVDMyKSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMuYncud3JpdGVJbnQzMih2YWxJbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgfVxyXG5cclxuICAgICB9XHJcblxyXG4gICAgIHdyaXRlQ2h1bmtIZWFkZXIobmFtZTpzdHJpbmcsY2hrTGVuOm51bWJlcil7XHJcbiAgICAgICB0aGlzLmJ3LndyaXRlQXNjaWkobmFtZSk7XHJcbiAgICAgICB0aGlzLmJ3LndyaXRlVWludDMyKGNoa0xlbix0cnVlKTtcclxuICAgICB9XHJcblxyXG4gICAgIHdyaXRlQXN5bmMoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIsY2FsbGJhY2s6ICh3YXZGaWxlRGF0YTpVaW50OEFycmF5KT0+IGFueSl7XHJcblxyXG4gICAgICAgY29uc3QgZGF0YUNoa0J5dGVMZW49dGhpcy53cml0ZUhlYWRlcihhdWRpb0J1ZmZlcik7XHJcbiAgICAgICBpZiAoIXRoaXMud29ya2VyVVJMKSB7XHJcbiAgICAgICAgIHRoaXMud29ya2VyVVJMID0gV29ya2VySGVscGVyLmJ1aWxkV29ya2VyQmxvYlVSTCh0aGlzLndvcmtlckZ1bmN0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgIGNvbnN0IHdvID0gbmV3IFdvcmtlcih0aGlzLndvcmtlclVSTCk7XHJcblxyXG4gICAgICAgY29uc3QgY2hzID0gYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVscztcclxuXHJcbiAgICAgICBjb25zdCBmcmFtZUxlbmd0aCA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApLmxlbmd0aDtcclxuICAgICAgIGNvbnN0IGFkID0gbmV3IEZsb2F0MzJBcnJheShjaHMgKiBmcmFtZUxlbmd0aCk7XHJcbiAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgIGFkLnNldChhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCksIGNoICogZnJhbWVMZW5ndGgpO1xyXG4gICAgICAgfVxyXG4gICAgICAgICAvLyBlbnN1cmVDYXBhY2l0eSBibG9ja3MgISEhXHJcbiAgICAgICB0aGlzLmJ3LmVuc3VyZUNhcGFjaXR5KGRhdGFDaGtCeXRlTGVuKTtcclxuICAgICAgIHdvLm9ubWVzc2FnZSA9IChtZSkgPT4ge1xyXG4gICAgICAgICBjYWxsYmFjayhtZS5kYXRhLmJ1Zik7XHJcbiAgICAgICAgIHdvLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgfVxyXG5cclxuXHJcbiAgICAgICB3by5wb3N0TWVzc2FnZSh7ZW5jb2RpbmdGbG9hdDp0aGlzLmVuY29kaW5nRmxvYXQsc2FtcGxlU2l6ZUluQml0czp0aGlzLnNhbXBsZVNpemVJbkJpdHMsIGNoczogY2hzLCBmcmFtZUxlbmd0aDogZnJhbWVMZW5ndGgsIGF1ZGlvRGF0YTogYWQsYnVmOnRoaXMuYncuYnVmLGJ1ZlBvczp0aGlzLmJ3LnBvc30sIFthZC5idWZmZXIsdGhpcy5idy5idWZdKTtcclxuXHJcbiAgICAgfVxyXG5cclxuICAgICB3cml0ZShhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcik6VWludDhBcnJheXtcclxuICAgICAgIHRoaXMud3JpdGVIZWFkZXIoYXVkaW9CdWZmZXIpO1xyXG4gICAgICAgdGhpcy53cml0ZURhdGFDaHVuayhhdWRpb0J1ZmZlcik7XHJcbiAgICAgICByZXR1cm4gdGhpcy5idy5maW5pc2goKTtcclxuICAgICB9XHJcblxyXG5cclxuICAgICAgd3JpdGVIZWFkZXIoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpOm51bWJlcntcclxuICAgICAgICB0aGlzLmJ3LndyaXRlQXNjaWkoV2F2RmlsZUZvcm1hdC5SSUZGX0tFWSk7XHJcbiAgICAgICAgbGV0IGRhdGFDaGtCeXRlTGVuPTA7XHJcbiAgICAgICAgLy9jb25zdCBkYXRhQ2hrQnl0ZUxlbj1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKS5sZW5ndGgqV2F2V3JpdGVyLkRFRkFVTFRfU0FNUExFX1NJWkVfQllURVMqYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgICBjb25zdCBhYkNocz1hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICAgIGlmKGFiQ2hzPjApe1xyXG4gICAgICAgICAgY29uc3QgYWJDaDA9YXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XHJcbiAgICAgICAgICBkYXRhQ2hrQnl0ZUxlbj1hYkNoMC5sZW5ndGgqdGhpcy5zYW1wbGVTaXplSW5CeXRlcyphYkNocztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGhlYWRlckNudHM9MzsgLy9XYXZlLGZtdCBhbmQgZGF0YVxyXG5cclxuICAgICAgICBsZXQgZm10Q2h1bmtTaXplPTE2O1xyXG4gICAgICAgIGxldCBmYWN0Q2h1bmtTaXplPTQ7XHJcbiAgICAgICAgaWYodGhpcy5lbmNvZGluZ0Zsb2F0PT09dHJ1ZSl7XHJcbiAgICAgICAgICBmbXRDaHVua1NpemU9MTg7XHJcbiAgICAgICAgICBoZWFkZXJDbnRzKys7IC8vIGZhY3RcclxuICAgICAgICB9Ly8gRmxvYXQgZW5jb2RpbmcgcmVxdWlyZXMgZm10IGV4dGVuc2lvbiAod2l0aCB6ZXJvIGxlbmd0aClcclxuICAgICAgICBsZXQgd2F2Q2h1bmtCeXRlTGVuPSg0KzQpKmhlYWRlckNudHM7XHJcblxyXG4gICAgICAgIHdhdkNodW5rQnl0ZUxlbis9Zm10Q2h1bmtTaXplO1xyXG4gICAgICAgIHdhdkNodW5rQnl0ZUxlbis9ZmFjdENodW5rU2l6ZTtcclxuICAgICAgICB3YXZDaHVua0J5dGVMZW4rPWRhdGFDaGtCeXRlTGVuO1xyXG5cclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiV3JpdGUgV0FWIGhlYWRlcjogV2F2IGNodW5rIGxlbjogXCIrd2F2Q2h1bmtCeXRlTGVuKTtcclxuICAgICAgICB0aGlzLmJ3LndyaXRlVWludDMyKHdhdkNodW5rQnl0ZUxlbix0cnVlKTsgLy8gbXVzdCBiZSBzZXQgdG8gZmlsZSBsZW5ndGgtOCBsYXRlclxyXG4gICAgICAgIHRoaXMuYncud3JpdGVBc2NpaShXYXZGaWxlRm9ybWF0LldBVl9LRVkpO1xyXG5cclxuICAgICAgICB0aGlzLndyaXRlQ2h1bmtIZWFkZXIoJ2ZtdCAnLGZtdENodW5rU2l6ZSk7XHJcbiAgICAgICAgdGhpcy53cml0ZUZtdENodW5rKGF1ZGlvQnVmZmVyKTtcclxuICAgICAgICBpZih0aGlzLmVuY29kaW5nRmxvYXQ9PT10cnVlKXtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJXcml0ZSBXQVYgaGVhZGVyOiBXcml0ZSAnZmFjdCcgY2h1bmsuXCIpO1xyXG4gICAgICAgICAgdGhpcy53cml0ZUNodW5rSGVhZGVyKCdmYWN0Jyw0KTtcclxuICAgICAgICAgIHRoaXMud3JpdGVGYWN0Q2h1bmsoYXVkaW9CdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndyaXRlQ2h1bmtIZWFkZXIoJ2RhdGEnLGRhdGFDaGtCeXRlTGVuKTtcclxuICAgICAgICByZXR1cm4gZGF0YUNoa0J5dGVMZW47XHJcbiAgICAgIH1cclxuXHJcbiAgIH1cclxuXHJcblxyXG5cclxuIl19
@@ -138,10 +138,10 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
138
138
  }
139
139
  }
140
140
  }
141
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
142
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 }); }
141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
142
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.6", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 }); }
143
143
  }
144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
145
145
  type: Directive
146
146
  }] });
147
147
  export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
@@ -317,10 +317,10 @@ export class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
317
317
  }
318
318
  }
319
319
  }
320
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
321
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 }); }
320
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
321
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.6", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 }); }
322
322
  }
323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
324
324
  type: Directive
325
325
  }], propDecorators: { bgCanvasRef: [{
326
326
  type: ViewChild,
@@ -33,8 +33,8 @@ export class AudioDisplayControl {
33
33
  error() {
34
34
  this.status = 'ERROR';
35
35
  }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioDisplayControl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioDisplayControl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
37
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
38
38
  <div #controlPanel style="display:flex;flex-direction: row;">
39
39
  <fieldset>
40
40
 
@@ -79,7 +79,7 @@ export class AudioDisplayControl {
79
79
  </fieldset>
80
80
  </div>`, isInline: true, styles: [":host{flex:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] }); }
81
81
  }
82
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioDisplayControl, decorators: [{
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioDisplayControl, decorators: [{
83
83
  type: Component,
84
84
  args: [{ selector: 'audio-display-control', template: `
85
85
  <div #controlPanel style="display:flex;flex-direction: row;">
@@ -109,14 +109,14 @@ export class AudioDisplayScrollPane {
109
109
  set playFramePosition(framePos) {
110
110
  this.ac.playFramePosition = framePos;
111
111
  }
112
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioDisplayScrollPane, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
113
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: { audioClip: "audioClip" }, outputs: { zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomSelectedAction: "zoomSelectedAction", zoomFitToPanelAction: "zoomFitToPanelAction" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "ac", first: true, predicate: AudioClipUIContainer, descendants: true, static: true }], ngImport: i0, template: `
112
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioDisplayScrollPane, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
113
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: { audioClip: "audioClip" }, outputs: { zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomSelectedAction: "zoomSelectedAction", zoomFitToPanelAction: "zoomFitToPanelAction" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "ac", first: true, predicate: AudioClipUIContainer, descendants: true, static: true }], ngImport: i0, template: `
114
114
 
115
115
  <app-audio #audioSignalContainer (selectionEventEmitter)="selectionChanged($event)"></app-audio>
116
116
 
117
117
  `, isInline: true, styles: [":host{flex:2;width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "app-audio{margin:0;padding:0;top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "component", type: i1.AudioClipUIContainer, selector: "app-audio", inputs: ["audioData", "audioClip"], outputs: ["selectionEventEmitter"] }] }); }
118
118
  }
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioDisplayScrollPane, decorators: [{
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioDisplayScrollPane, decorators: [{
120
120
  type: Component,
121
121
  args: [{ selector: 'audio-display-scroll-pane', template: `
122
122
 
@@ -507,15 +507,15 @@ export class AudioSignal extends AudioCanvasLayerComponent {
507
507
  this._audioDataHolder = audioData;
508
508
  this.playFramePosition = 0;
509
509
  }
510
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioSignal, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
511
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: AudioSignal, selector: "audio-signal", viewQueries: [{ propertyName: "audioSignalCanvasRef", first: true, predicate: ["audioSignal"], descendants: true, static: true }, { propertyName: "playPosCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
510
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioSignal, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
511
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: AudioSignal, selector: "audio-signal", viewQueries: [{ propertyName: "audioSignalCanvasRef", first: true, predicate: ["audioSignal"], descendants: true, static: true }, { propertyName: "playPosCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
512
512
  <canvas #bg height="10"></canvas>
513
513
  <canvas #audioSignal height="10"></canvas>
514
514
  <canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
515
515
  (mouseleave)="updateCursorCanvas($event, false)"></canvas>
516
516
  <canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] }); }
517
517
  }
518
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioSignal, decorators: [{
518
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioSignal, decorators: [{
519
519
  type: Component,
520
520
  args: [{ selector: 'audio-signal', template: `
521
521
  <canvas #bg height="10"></canvas>
@@ -363,8 +363,8 @@ export class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
363
363
  this.as.playFramePosition = playFramePosition;
364
364
  this.so.playFramePosition = playFramePosition;
365
365
  }
366
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioClipUIContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
367
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: AudioClipUIContainer, selector: "app-audio", inputs: { audioData: "audioData", audioClip: "audioClip" }, outputs: { selectionEventEmitter: "selectionEventEmitter" }, host: { listeners: { "window:resize": "onResize($event)", "document:mouseup": "onMouseup($event)", "document:mousemove": "onMousemove($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["divider"], descendants: true, static: true }, { propertyName: "ceRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "as", first: true, predicate: AudioSignal, descendants: true, static: true }, { propertyName: "so", first: true, predicate: Sonagram, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
366
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioClipUIContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
367
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: AudioClipUIContainer, selector: "app-audio", inputs: { audioData: "audioData", audioClip: "audioClip" }, outputs: { selectionEventEmitter: "selectionEventEmitter" }, host: { listeners: { "window:resize": "onResize($event)", "document:mouseup": "onMouseup($event)", "document:mousemove": "onMousemove($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["divider"], descendants: true, static: true }, { propertyName: "ceRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "as", first: true, predicate: AudioSignal, descendants: true, static: true }, { propertyName: "so", first: true, predicate: Sonagram, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
368
368
  <div #virtualCanvas>
369
369
  <canvas #divider (mousedown)="mousedown($event)" (mouseover)="mouseover($event)"
370
370
  (mouseleave)="mouseleave($event)" height="10"></canvas>
@@ -373,7 +373,7 @@ export class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
373
373
  </div>
374
374
  `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;z-index:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;z-index:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;z-index:1;transform:none}\n"], dependencies: [{ kind: "component", type: i1.AudioSignal, selector: "audio-signal" }, { kind: "component", type: i2.Sonagram, selector: "audio-sonagram" }] }); }
375
375
  }
376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AudioClipUIContainer, decorators: [{
376
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AudioClipUIContainer, decorators: [{
377
377
  type: Component,
378
378
  args: [{ selector: 'app-audio', template: `
379
379
  <div #virtualCanvas>
@@ -320,15 +320,15 @@ export class LevelBar {
320
320
  }
321
321
  }
322
322
  }
323
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: LevelBar, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
324
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: LevelBar, selector: "audio-levelbar", inputs: { streamingMode: "streamingMode", displayLevelInfos: "displayLevelInfos", state: "state" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "virtualCanvasRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "liveLevelCanvasRef", first: true, predicate: ["levelbar"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["markerCanvas"], descendants: true, static: true }], ngImport: i0, template: `
323
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: LevelBar, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
324
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: LevelBar, selector: "audio-levelbar", inputs: { streamingMode: "streamingMode", displayLevelInfos: "displayLevelInfos", state: "state" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "virtualCanvasRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "liveLevelCanvasRef", first: true, predicate: ["levelbar"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["markerCanvas"], descendants: true, static: true }], ngImport: i0, template: `
325
325
  <div #virtualCanvas>
326
326
  <canvas #levelbar></canvas>
327
327
  <canvas #markerCanvas></canvas>
328
328
  </div>
329
329
  `, isInline: true, styles: [":host{width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "div{top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n", "canvas{top:0;left:0;width:100%;height:100%;position:absolute}\n"] }); }
330
330
  }
331
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: LevelBar, decorators: [{
331
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: LevelBar, decorators: [{
332
332
  type: Component,
333
333
  args: [{ selector: 'audio-levelbar', template: `
334
334
  <div #virtualCanvas>
@@ -1,10 +1,10 @@
1
1
  import { Component } from "@angular/core";
2
2
  import * as i0 from "@angular/core";
3
3
  export class ScrollPaneHorizontal {
4
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ScrollPaneHorizontal, selector: "scroll-pane-horizontal", ngImport: i0, template: '', isInline: true, styles: [":host{width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] }); }
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: ScrollPaneHorizontal, selector: "scroll-pane-horizontal", ngImport: i0, template: '', isInline: true, styles: [":host{width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] }); }
6
6
  }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
8
8
  type: Component,
9
9
  args: [{ selector: 'scroll-pane-horizontal', template: '', styles: [":host{width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] }]
10
10
  }] });
@@ -874,15 +874,15 @@ export class Sonagram extends AudioCanvasLayerComponent {
874
874
  this._audioDataHolder = audioData;
875
875
  this.playFramePosition = 0;
876
876
  }
877
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
878
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
877
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
878
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
879
879
  <canvas #sonagram height="10"></canvas>
880
880
  <canvas #bg height="10"></canvas>
881
881
  <canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
882
882
  (mouseleave)="updateCursorCanvas($event, false)"></canvas>
883
883
  <canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] }); }
884
884
  }
885
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: Sonagram, decorators: [{
885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: Sonagram, decorators: [{
886
886
  type: Component,
887
887
  args: [{ selector: 'audio-sonagram', template: `
888
888
  <canvas #sonagram height="10"></canvas>
@@ -111,10 +111,10 @@ export class SprDb {
111
111
  });
112
112
  return obs;
113
113
  }
114
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
115
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SprDb }); }
114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
115
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: SprDb }); }
116
116
  }
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SprDb, decorators: [{
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: SprDb, decorators: [{
118
118
  type: Injectable
119
119
  }], ctorParameters: () => [] });
120
120
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvZGIvaW5kZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUdoQyxNQUFNLE9BQU8sSUFBSTtJQUtiLFlBQVksZUFBc0IsRUFBQyxRQUFzQjtRQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsZUFBZSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUMsUUFBUSxDQUFBO0lBQzNCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDaEIsT0FBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN6QixDQUFDO0NBQ0o7QUFHRCxNQUFNLE9BQU8sS0FBSzthQUVBLFdBQU0sR0FBQyxnQkFBZ0IsQUFBakIsQ0FBaUI7YUFFdkIsMkNBQXNDLEdBQUMsdUJBQXVCLEFBQXhCLENBQXlCO0lBQzVFLDBFQUEwRTthQUM3RCxjQUFTLEdBQUMsQ0FBQyxBQUFGLENBQUc7SUFHMUI7UUFEUSxXQUFNLEdBQWtCLElBQUksQ0FBQTtJQUVwQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVk7UUFDaEIsSUFBSSxLQUFLLEdBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUVyQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBSUQsTUFBTSxDQUFDLE9BQU87UUFDVixJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBYyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBRTdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtZQUMzQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNa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Q0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO2dCQUMxRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOzhHQTlHUSxLQUFLO2tIQUFMLEtBQUs7OzJGQUFMLEtBQUs7a0JBRGpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU3luY3tcclxuICAgIGlkPzpudW1iZXI7XHJcbiAgICBfb2JqZWN0U3RvcmVOYW1lOnN0cmluZztcclxuICAgIF9vYmplY3RJZDpzdHJpbmd8bnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9iamVjdFN0b3JlTmFtZTpzdHJpbmcsb2JqZWN0SWQ6c3RyaW5nfG51bWJlcil7XHJcbiAgICAgICAgdGhpcy5fb2JqZWN0U3RvcmVOYW1lPW9iamVjdFN0b3JlTmFtZVxyXG4gICAgICAgIHRoaXMuX29iamVjdElkPW9iamVjdElkXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9iamVjdFN0b3JlTmFtZSgpOnN0cmluZ3tcclxuICAgICAgIHJldHVybiAgdGhpcy5fb2JqZWN0U3RvcmVOYW1lXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9iamVjdElkKCk6c3RyaW5nfG51bWJlcntcclxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0SWRcclxuICAgIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3ByRGIge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZGJOYW1lPSdzcGVlY2hyZWNvcmRlcidcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FPSdfcmVjb3JkaW5nX2ZpbGVfY2FjaGUnO1xyXG4gICAgIC8vcHVibGljIHN0YXRpYyBSRUNPUkRJTkdfRklMRV9DSFVOS1NfT0JKRUNUX1NUT1JFX05BTUU9J3JlY19maWxlX2NodW5rcyc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRiVmVyc2lvbj0xO1xyXG5cclxuICAgIHByaXZhdGUgX3N0b3JlOklEQkRhdGFiYXNlfG51bGw9bnVsbFxyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc3ByRGJGYWN0b3J5KCk6U3ByRGJ7XHJcbiAgICAgICBsZXQgc3ByRGI9bmV3IFNwckRiKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzcHJEYjtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHN0YXRpYyBwcmVwYXJlKCk6T2JzZXJ2YWJsZTxJREJEYXRhYmFzZT4ge1xyXG4gICAgICAgIGxldCBvYnMgPSBuZXcgT2JzZXJ2YWJsZTxJREJEYXRhYmFzZT4oKHN1YnNjcmliZXIpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcmVwYXJlIGluZGV4ZWQgZGF0YWJhc2UuLi5cIilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkREIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3I6IElEQk9wZW5EQlJlcXVlc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgb3IgPSBpbmRleGVkREIub3BlbihTcHJEYi5kYk5hbWUsIFNwckRiLmRiVmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgb3Iub251cGdyYWRlbmVlZGVkID0gKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYiA9IG9yLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHI9b3IudHJhbnNhY3Rpb25cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTcHJEYi5SRUNPUkRJTkdfRklMRV9DQUNIRV9PQkpFQ1RfU1RPUkVfTkFNRSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0FDSEVfT0JKRUNUX1NUT1JFX05BTUUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGdXR1cmUgd29yayB0b3dhcmRzIGEgY29tcGxldGUgUFdBIHdoaWNoIHN0b3JlcyBhbGwgY2xpZW4gZGF0YSBpbiBpbmRleGVkIGRiIGFuZCBzeW5jaHJvbml6ZXMgdG8gdGhlIHNlcnZlcjogU2VlIGV4cGVyaW1lbnRhbCBHaXQgYnJhbmNoIFwicHJvZ3Jlc3NpdmVfd2ViX2FwcFwiXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ19zeW5jJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdfc3luYycsIHtrZXlQYXRoOiAnaWQnLCBhdXRvSW5jcmVtZW50OnRydWV9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ3Byb2plY3QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Byb2plY3QnLCB7a2V5UGF0aDogJ25hbWUnfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdzZXNzaW9uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxldCBzZXNzU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Nlc3Npb24nLCB7a2V5UGF0aDogJ3Nlc3Npb25JZCd9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHNlc3NTdG9yZS5jcmVhdGVJbmRleCgncHJvamVjdElkeCcsIFsncHJvamVjdCddLCB7dW5pcXVlOmZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKGV2Lm9sZFZlcnNpb248NSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgc2Vzc1N0b3JlPXRyLm9iamVjdFN0b3JlKCdzZXNzaW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgc2Vzc1N0b3JlLmNyZWF0ZUluZGV4KCdwcm9qZWN0SWR4JywgWydwcm9qZWN0J10sIHt1bmlxdWU6ZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJ3NjcmlwdCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgc2NyU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3NjcmlwdCcsIHtrZXlQYXRoOiAnc2NyaXB0SWQnfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzY3JTdG9yZS5jcmVhdGVJbmRleCgncHJvamVjdElkeCcsIFsncHJvamVjdCddLCB7dW5pcXVlOmZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdyZWNmaWxlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxldCByZlN0b3JlPWRiLmNyZWF0ZU9iamVjdFN0b3JlKCdyZWNmaWxlJywge2tleVBhdGg6ICd1dWlkJ30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmZTdG9yZS5jcmVhdGVJbmRleCgnc2Vzc0lkSWR4JywgWydzZXNzaW9uSWQnXSwge3VuaXF1ZTpmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmZTdG9yZS5jcmVhdGVJbmRleCgnc2Vzc0lkSXRlbWNvZGVJZHgnLCBbJ3Nlc3Npb25JZCcsJ2l0ZW1Db2RlJ10sIHt1bmlxdWU6ZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNwckRiLlJFQ09SRElOR19GSUxFX0NBQ0hFX09CSkVDVF9TVE9SRV9OQU1FKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJmU3RvcmU9ZGIuY3JlYXRlT2JqZWN0U3RvcmUoU3ByRGIuUkVDT1JESU5HX0ZJTEVfQ0FDSEVfT0JKRUNUX1NUT1JFX05BTUUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldi5vbGRWZXJzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJVcGdyYWRlZCBpbmRleGVkIGRhdGFiYXNlIFwiICsgU3ByRGIuZGJOYW1lICsgXCIgc2NoZW1hIGZyb20gdmVyc2lvbiBcIiArIGV2Lm9sZFZlcnNpb24gKyBcIiB0byBcIiArIGV2Lm5ld1ZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJDcmVhdGVkIGluZGV4ZWQgZGF0YWJhc2UgXCIgKyBTcHJEYi5kYk5hbWUgKyBcIiBzY2hlbWEgdmVyc2lvbiBcIiArIGV2Lm5ld1ZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb3Iub25zdWNjZXNzID0gKGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIk9wZW5lZCBpbmRleGVkIGRhdGFiYXNlXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGRiPW9yLnJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgLy8gaVBhZCBXRWJLaXQgd29ya2Fyb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgaGVscCFcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGIub25jbG9zZT0oZXYpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS5kZWJ1ZyhcIkRCIGNsb3NlZC4uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXCJDbG9zZSBkYi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGRiLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgb3BhUnE9aW5kZXhlZERCLm9wZW4oU3ByRGIuZGJOYW1lLCBTcHJEYi5kYlZlcnNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gb3BhUnEub251cGdyYWRlbmVlZGVkPShldik9Pnt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gb3BhUnEub25zdWNjZXNzPShldik9PntcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhcImFuZCBvcGVuZWQgYWdhaW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIHN1YnNjcmliZXIubmV4dChvcGFScS5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBvcGFScS5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IG9wZW4gaW5kZXhlZCBkYXRhYmFzZTogXCIgKyBTcHJEYi5kYk5hbWUgKyBcIjogXCIgKyBlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBvci5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IG9wZW4gaW5kZXhlZCBkYXRhYmFzZTogXCIgKyBTcHJEYi5kYk5hbWUgKyBcIjogXCIgKyBlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGluZGV4ZWQgZGF0YWJhc2VzXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvYnM7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -52,10 +52,10 @@ export class ProjectService {
52
52
  let prjUrl = this.projectUrl(id);
53
53
  return this.http.get(prjUrl, { withCredentials: this.withCredentials });
54
54
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i2.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
56
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ProjectService }); }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i2.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
56
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ProjectService }); }
57
57
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ProjectService, decorators: [{
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ProjectService, decorators: [{
59
59
  type: Injectable
60
60
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.PlatformLocation }, { type: i3.SpeechRecorderConfig, decorators: [{
61
61
  type: Inject,
@@ -1002,10 +1002,10 @@ export class RecordingService extends BasicRecordingService {
1002
1002
  });
1003
1003
  return wobs;
1004
1004
  }
1005
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
1006
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: RecordingService }); }
1005
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
1006
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: RecordingService }); }
1007
1007
  }
1008
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: RecordingService, decorators: [{
1008
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: RecordingService, decorators: [{
1009
1009
  type: Injectable
1010
1010
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
1011
1011
  type: Inject,
@@ -35,10 +35,10 @@ export class ScriptService {
35
35
  }
36
36
  return this.http.get(scriptUrl, { withCredentials: this.withCredentials });
37
37
  }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
39
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ScriptService }); }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
39
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ScriptService }); }
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ScriptService, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ScriptService, decorators: [{
42
42
  type: Injectable
43
43
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
44
44
  type: Inject,