@tilde-nlp/ngx-common 5.0.9 → 5.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/services/quota/injection-tokens/quota-service-configuration.token.mjs +3 -2
- package/esm2022/lib/text-to-speech/models/voice.model.mjs +2 -0
- package/esm2022/lib/text-to-speech/services/tts-api.service.mjs +22 -0
- package/esm2022/lib/text-to-speech/text-to-speech.component.mjs +63 -77
- package/fesm2022/tilde-nlp-ngx-common.mjs +94 -135
- package/fesm2022/tilde-nlp-ngx-common.mjs.map +1 -1
- package/lib/services/quota/injection-tokens/quota-service-configuration.token.d.ts +3 -1
- package/lib/text-to-speech/models/voice.model.d.ts +4 -0
- package/lib/text-to-speech/services/tts-api.service.d.ts +9 -0
- package/lib/text-to-speech/text-to-speech.component.d.ts +9 -11
- package/package.json +1 -2
- package/web-components/3rdpartylicenses.txt +13 -13
- package/web-components/index.html +5 -6
- package/web-components/main.js +42 -15
- package/esm2022/lib/text-to-speech/services/text-play.service.mjs +0 -22
- package/esm2022/lib/text-to-speech/translations/tts-i18n.mjs +0 -26
- package/lib/text-to-speech/services/text-play.service.d.ts +0 -8
- package/lib/text-to-speech/translations/tts-i18n.d.ts +0 -1
- package/web-components/web-components.js +0 -1
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { InjectionToken } from "@angular/core";
|
|
2
|
+
export const QUOTA_SERVICE_CONFIGURATION_TOKEN = new InjectionToken('QUOTA_SERVICE_CONFIGURATION_TOKEN');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtc2VydmljZS1jb25maWd1cmF0aW9uLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3F1b3RhL2luamVjdGlvbi10b2tlbnMvcXVvdGEtc2VydmljZS1jb25maWd1cmF0aW9uLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxjQUFjLENBQTRCLG1DQUFtQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFF1b3RhU2VydmljZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3F1b3RhLXNlcnZpY2UtY29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFFVT1RBX1NFUlZJQ0VfQ09ORklHVVJBVElPTl9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxRdW90YVNlcnZpY2VDb25maWd1cmF0aW9uPignUVVPVEFfU0VSVklDRV9DT05GSUdVUkFUSU9OX1RPS0VOJyk7XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvdGV4dC10by1zcGVlY2gvbW9kZWxzL3ZvaWNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFZvaWNlIHtcclxuICB2b2ljZTogc3RyaW5nO1xyXG4gIGFwaVZlcnNpb246IG51bWJlcjtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class TTSApiService {
|
|
5
|
+
#http = inject(HttpClient);
|
|
6
|
+
play(text, voice) {
|
|
7
|
+
if (voice.apiVersion === 1) {
|
|
8
|
+
return this.#http.get(`https://services.tilde.com/service/tts?system=${voice.voice}&text=${text}`, { responseType: 'blob' });
|
|
9
|
+
}
|
|
10
|
+
const headers = { 'skip-auth': 'true' };
|
|
11
|
+
return this.#http.post(`https://runa.tilde.lv/client/say/?text=${text}&voice=${voice.voice}`, null, { headers, responseType: 'blob' });
|
|
12
|
+
}
|
|
13
|
+
static { this.ɵfac = function TTSApiService_Factory(t) { return new (t || TTSApiService)(); }; }
|
|
14
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TTSApiService, factory: TTSApiService.ɵfac, providedIn: 'root' }); }
|
|
15
|
+
}
|
|
16
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TTSApiService, [{
|
|
17
|
+
type: Injectable,
|
|
18
|
+
args: [{
|
|
19
|
+
providedIn: 'root',
|
|
20
|
+
}]
|
|
21
|
+
}], null, null); })();
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHRzLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3RleHQtdG8tc3BlZWNoL3NlcnZpY2VzL3R0cy1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT25ELE1BQU0sT0FBTyxhQUFhO0lBQ2YsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVwQyxJQUFJLENBQUMsSUFBWSxFQUFFLEtBQVk7UUFDN0IsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ25CLGlEQUFpRCxLQUFLLENBQUMsS0FBSyxTQUFTLElBQUksRUFBRSxFQUMzRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FDekIsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxFQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUMsQ0FBQztRQUV0QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNwQiwwQ0FBMEMsSUFBSSxVQUFVLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFDckUsSUFBSSxFQUNKLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FDbEMsQ0FBQztJQUNKLENBQUM7OEVBbEJVLGFBQWE7dUVBQWIsYUFBYSxXQUFiLGFBQWEsbUJBRlosTUFBTTs7aUZBRVAsYUFBYTtjQUh6QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWb2ljZSB9IGZyb20gJy4uL21vZGVscy92b2ljZS5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVFRTQXBpU2VydmljZSB7XHJcbiAgcmVhZG9ubHkgI2h0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcblxyXG4gIHBsYXkodGV4dDogc3RyaW5nLCB2b2ljZTogVm9pY2UpOiBPYnNlcnZhYmxlPEJsb2I+IHtcclxuICAgIGlmICh2b2ljZS5hcGlWZXJzaW9uID09PSAxKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLiNodHRwLmdldChcclxuICAgICAgICBgaHR0cHM6Ly9zZXJ2aWNlcy50aWxkZS5jb20vc2VydmljZS90dHM/c3lzdGVtPSR7dm9pY2Uudm9pY2V9JnRleHQ9JHt0ZXh0fWAsXHJcbiAgICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGVhZGVycyA9IHsnc2tpcC1hdXRoJzogJ3RydWUnfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy4jaHR0cC5wb3N0KFxyXG4gICAgICBgaHR0cHM6Ly9ydW5hLnRpbGRlLmx2L2NsaWVudC9zYXkvP3RleHQ9JHt0ZXh0fSZ2b2ljZT0ke3ZvaWNlLnZvaWNlfWAsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIHsgaGVhZGVycywgcmVzcG9uc2VUeXBlOiAnYmxvYicgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -3,14 +3,14 @@ import { Component, inject, Input } from '@angular/core';
|
|
|
3
3
|
import { FormsModule } from '@angular/forms';
|
|
4
4
|
import { MatButton, MatIconButton } from '@angular/material/button';
|
|
5
5
|
import { MatIcon } from '@angular/material/icon';
|
|
6
|
-
import {
|
|
6
|
+
import { TTSApiService } from './services/tts-api.service';
|
|
7
7
|
import { finalize } from 'rxjs';
|
|
8
8
|
import { MatProgressSpinner } from '@angular/material/progress-spinner';
|
|
9
|
-
import { TTS_I18N } from './translations/tts-i18n';
|
|
10
9
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
11
10
|
import { MatSelectModule } from '@angular/material/select';
|
|
12
11
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
13
12
|
import { FlexLayoutModule } from '@ngbracket/ngx-layout';
|
|
13
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
15
|
import * as i1 from "@angular/common";
|
|
16
16
|
import * as i2 from "@angular/forms";
|
|
@@ -19,27 +19,30 @@ import * as i4 from "@angular/material/form-field";
|
|
|
19
19
|
import * as i5 from "@angular/material/select";
|
|
20
20
|
import * as i6 from "@angular/material/core";
|
|
21
21
|
import * as i7 from "@ngbracket/ngx-layout/extended";
|
|
22
|
-
|
|
22
|
+
import * as i8 from "@ngx-translate/core";
|
|
23
|
+
const _c0 = a0 => ({ nth: a0 });
|
|
24
|
+
function TextToSpeechComponent_mat_option_6_Template(rf, ctx) { if (rf & 1) {
|
|
23
25
|
i0.ɵɵelementStart(0, "mat-option", 12);
|
|
24
26
|
i0.ɵɵtext(1);
|
|
27
|
+
i0.ɵɵpipe(2, "translate");
|
|
25
28
|
i0.ɵɵelementEnd();
|
|
26
29
|
} if (rf & 2) {
|
|
27
30
|
const voice_r1 = ctx.$implicit;
|
|
28
|
-
const
|
|
29
|
-
i0.ɵɵproperty("value", voice_r1);
|
|
31
|
+
const i_r2 = ctx.index;
|
|
32
|
+
i0.ɵɵproperty("value", voice_r1.voice);
|
|
30
33
|
i0.ɵɵadvance();
|
|
31
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
34
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(2, 2, "voice", i0.ɵɵpureFunction1(5, _c0, i_r2 + 1)), " ");
|
|
32
35
|
} }
|
|
33
|
-
function
|
|
36
|
+
function TextToSpeechComponent_mat_icon_17_Template(rf, ctx) { if (rf & 1) {
|
|
34
37
|
i0.ɵɵelementStart(0, "mat-icon");
|
|
35
38
|
i0.ɵɵtext(1);
|
|
36
39
|
i0.ɵɵelementEnd();
|
|
37
40
|
} if (rf & 2) {
|
|
38
|
-
const
|
|
41
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
39
42
|
i0.ɵɵadvance();
|
|
40
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
43
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r2.isPlaying ? "stop" : "volume_up", " ");
|
|
41
44
|
} }
|
|
42
|
-
function
|
|
45
|
+
function TextToSpeechComponent_mat_spinner_18_Template(rf, ctx) { if (rf & 1) {
|
|
43
46
|
i0.ɵɵelement(0, "mat-spinner", 13);
|
|
44
47
|
} if (rf & 2) {
|
|
45
48
|
i0.ɵɵproperty("diameter", 20);
|
|
@@ -47,46 +50,40 @@ function TextToSpeechComponent_mat_spinner_14_Template(rf, ctx) { if (rf & 1) {
|
|
|
47
50
|
export class TextToSpeechComponent {
|
|
48
51
|
constructor() {
|
|
49
52
|
this.maxCharLength = 1000;
|
|
50
|
-
this
|
|
51
|
-
this.defaultLanguage = 'lv';
|
|
52
|
-
this.voiceList = ['sandra4', 'lv-LV-general'];
|
|
53
|
-
this.selectedVoice = this.voiceList[0];
|
|
54
|
-
this.#textPlayService = inject(TextPlayService);
|
|
55
|
-
}
|
|
56
|
-
get translations() {
|
|
57
|
-
if (TTS_I18N[this.language]) {
|
|
58
|
-
return TTS_I18N[this.language];
|
|
59
|
-
}
|
|
60
|
-
return TTS_I18N[this.defaultLanguage];
|
|
53
|
+
this.#TTSApiService = inject(TTSApiService);
|
|
61
54
|
}
|
|
62
55
|
get hasOverflow() {
|
|
63
56
|
const textarea = document.querySelector('textarea');
|
|
64
57
|
return textarea?.clientHeight < textarea?.scrollHeight ? true : false;
|
|
65
58
|
}
|
|
66
|
-
#
|
|
59
|
+
#TTSApiService;
|
|
67
60
|
ngOnInit() {
|
|
68
|
-
this.
|
|
61
|
+
if (!this.voices?.length) {
|
|
62
|
+
this.voices = JSON.parse(this.voicesJson).voices;
|
|
63
|
+
}
|
|
64
|
+
this.selected = this.voices[0];
|
|
65
|
+
this.selectedVoice = this.selected.voice;
|
|
69
66
|
}
|
|
70
|
-
|
|
67
|
+
togglePlay() {
|
|
71
68
|
if (this.isPlaying) {
|
|
72
69
|
this.stop();
|
|
73
70
|
return;
|
|
74
71
|
}
|
|
75
72
|
this.isLoading = true;
|
|
76
73
|
const text = this.text.length > this.maxCharLength ? this.text.substring(0, this.maxCharLength) : this.text;
|
|
77
|
-
if ((this.audio && text === this.previousText) && (this.
|
|
74
|
+
if ((this.audio && text === this.previousText) && (this.selected.voice === this.previousVoice)) {
|
|
78
75
|
this.audio.play();
|
|
79
76
|
this.isPlaying = true;
|
|
80
77
|
this.isLoading = false;
|
|
81
78
|
return;
|
|
82
79
|
}
|
|
83
|
-
this.#
|
|
84
|
-
.play(text, this.
|
|
80
|
+
this.#TTSApiService
|
|
81
|
+
.play(text, this.selected)
|
|
85
82
|
.pipe(finalize(() => { this.isLoading = false; }))
|
|
86
83
|
.subscribe({
|
|
87
84
|
next: (res) => {
|
|
88
85
|
this.previousText = text;
|
|
89
|
-
this.previousVoice = this.
|
|
86
|
+
this.previousVoice = this.selected.voice;
|
|
90
87
|
const audioUrl = URL.createObjectURL(res);
|
|
91
88
|
this.audio = new Audio(audioUrl);
|
|
92
89
|
this.audio.play();
|
|
@@ -105,75 +102,63 @@ export class TextToSpeechComponent {
|
|
|
105
102
|
this.isPlaying = false;
|
|
106
103
|
}
|
|
107
104
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
this.language = language;
|
|
112
|
-
}
|
|
113
|
-
const onLangAttributeChange = (mutationsList) => {
|
|
114
|
-
for (const mutation of mutationsList) {
|
|
115
|
-
if (mutation.type === 'attributes' && mutation.attributeName === this.langAttributeKey) {
|
|
116
|
-
const lang = this.getHtmlLangAttribute();
|
|
117
|
-
this.language = lang;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
const observer = new MutationObserver(onLangAttributeChange);
|
|
122
|
-
const htmlElement = document.querySelector('html');
|
|
123
|
-
const config = { attributes: true, attributeFilter: [this.langAttributeKey] };
|
|
124
|
-
observer.observe(htmlElement, config);
|
|
125
|
-
}
|
|
126
|
-
getHtmlLangAttribute() {
|
|
127
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
128
|
-
return document.querySelector('html').getAttribute(this.langAttributeKey).split('-')[0];
|
|
105
|
+
changeSelectedVoice(event) {
|
|
106
|
+
this.selected = this.voices.find((item) => item.voice === event.value);
|
|
107
|
+
this.selectedVoice = this.selected.voice;
|
|
129
108
|
}
|
|
130
109
|
static { this.ɵfac = function TextToSpeechComponent_Factory(t) { return new (t || TextToSpeechComponent)(); }; }
|
|
131
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TextToSpeechComponent, selectors: [["lib-text-to-speech"]], inputs: {
|
|
110
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TextToSpeechComponent, selectors: [["lib-text-to-speech"]], inputs: { maxCharLength: "maxCharLength", voicesJson: "voicesJson", voices: "voices" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 19, vars: 23, consts: [[1, "text-to-speech-wrapper", 3, "ngClass.lt-md"], ["appearance", "outline", "color", "accent"], [3, "selectionChange", "valueChange", "value"], [3, "value", 4, "ngFor", "ngForOf"], [1, "text-to-speech-textarea-wrapper"], [1, "text-to-speech-textarea", 3, "ngModelChange", "ngModel", "placeholder"], [1, "text-to-speech-characters"], [1, "text-to-speech-actions"], [3, "matTooltip"], ["mat-icon-button", "", 3, "click", "matTooltip", "disabled"], [4, "ngIf"], [3, "diameter", 4, "ngIf"], [3, "value"], [3, "diameter"]], template: function TextToSpeechComponent_Template(rf, ctx) { if (rf & 1) {
|
|
132
111
|
i0.ɵɵelementStart(0, "div", 0)(1, "mat-form-field", 1)(2, "mat-label");
|
|
133
112
|
i0.ɵɵtext(3);
|
|
113
|
+
i0.ɵɵpipe(4, "translate");
|
|
134
114
|
i0.ɵɵelementEnd();
|
|
135
|
-
i0.ɵɵelementStart(
|
|
136
|
-
i0.ɵɵ
|
|
137
|
-
i0.ɵɵ
|
|
115
|
+
i0.ɵɵelementStart(5, "mat-select", 2);
|
|
116
|
+
i0.ɵɵlistener("selectionChange", function TextToSpeechComponent_Template_mat_select_selectionChange_5_listener($event) { return ctx.changeSelectedVoice($event); });
|
|
117
|
+
i0.ɵɵtwoWayListener("valueChange", function TextToSpeechComponent_Template_mat_select_valueChange_5_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selectedVoice, $event) || (ctx.selectedVoice = $event); return $event; });
|
|
118
|
+
i0.ɵɵtemplate(6, TextToSpeechComponent_mat_option_6_Template, 3, 7, "mat-option", 3);
|
|
138
119
|
i0.ɵɵelementEnd()();
|
|
139
|
-
i0.ɵɵelementStart(
|
|
140
|
-
i0.ɵɵ
|
|
120
|
+
i0.ɵɵelementStart(7, "div", 4)(8, "textarea", 5);
|
|
121
|
+
i0.ɵɵpipe(9, "translate");
|
|
122
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TextToSpeechComponent_Template_textarea_ngModelChange_8_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.text, $event) || (ctx.text = $event); return $event; });
|
|
141
123
|
i0.ɵɵelementEnd();
|
|
142
|
-
i0.ɵɵelementStart(
|
|
143
|
-
i0.ɵɵtext(
|
|
124
|
+
i0.ɵɵelementStart(10, "div", 6);
|
|
125
|
+
i0.ɵɵtext(11);
|
|
144
126
|
i0.ɵɵelementEnd()();
|
|
145
|
-
i0.ɵɵelementStart(
|
|
146
|
-
i0.ɵɵ
|
|
147
|
-
i0.ɵɵ
|
|
127
|
+
i0.ɵɵelementStart(12, "div", 7)(13, "div", 8);
|
|
128
|
+
i0.ɵɵpipe(14, "translate");
|
|
129
|
+
i0.ɵɵelementStart(15, "button", 9);
|
|
130
|
+
i0.ɵɵpipe(16, "translate");
|
|
131
|
+
i0.ɵɵlistener("click", function TextToSpeechComponent_Template_button_click_15_listener() { return ctx.togglePlay(); });
|
|
132
|
+
i0.ɵɵtemplate(17, TextToSpeechComponent_mat_icon_17_Template, 2, 1, "mat-icon", 10)(18, TextToSpeechComponent_mat_spinner_18_Template, 1, 1, "mat-spinner", 11);
|
|
148
133
|
i0.ɵɵelementEnd()()()();
|
|
149
134
|
} if (rf & 2) {
|
|
150
135
|
let tmp_7_0;
|
|
151
136
|
i0.ɵɵproperty("ngClass.lt-md", "mobile");
|
|
152
137
|
i0.ɵɵadvance(3);
|
|
153
|
-
i0.ɵɵtextInterpolate(
|
|
154
|
-
i0.ɵɵadvance();
|
|
138
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 15, "selectVoice"));
|
|
139
|
+
i0.ɵɵadvance(2);
|
|
155
140
|
i0.ɵɵtwoWayProperty("value", ctx.selectedVoice);
|
|
156
141
|
i0.ɵɵadvance();
|
|
157
|
-
i0.ɵɵproperty("ngForOf", ctx.
|
|
142
|
+
i0.ɵɵproperty("ngForOf", ctx.voices);
|
|
158
143
|
i0.ɵɵadvance(2);
|
|
159
144
|
i0.ɵɵtwoWayProperty("ngModel", ctx.text);
|
|
160
|
-
i0.ɵɵproperty("placeholder",
|
|
161
|
-
i0.ɵɵadvance();
|
|
145
|
+
i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(9, 17, "placeholder"));
|
|
146
|
+
i0.ɵɵadvance(2);
|
|
162
147
|
i0.ɵɵclassProp("text-overflow", ctx.hasOverflow);
|
|
163
148
|
i0.ɵɵadvance();
|
|
164
149
|
i0.ɵɵtextInterpolate2(" ", (tmp_7_0 = ctx.text == null ? null : ctx.text.length) !== null && tmp_7_0 !== undefined ? tmp_7_0 : 0, "/", ctx.maxCharLength, " ");
|
|
165
150
|
i0.ɵɵadvance(2);
|
|
166
|
-
i0.ɵɵproperty("matTooltip", !ctx.text ?
|
|
167
|
-
i0.ɵɵadvance();
|
|
168
|
-
i0.ɵɵproperty("matTooltip", ctx.isPlaying ?
|
|
169
|
-
i0.ɵɵadvance();
|
|
151
|
+
i0.ɵɵproperty("matTooltip", !ctx.text ? i0.ɵɵpipeBind1(14, 19, "playDisabled") : "");
|
|
152
|
+
i0.ɵɵadvance(2);
|
|
153
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(16, 21, ctx.isPlaying ? "stop" : "play"))("disabled", !ctx.text || ctx.isLoading);
|
|
154
|
+
i0.ɵɵadvance(2);
|
|
170
155
|
i0.ɵɵproperty("ngIf", !ctx.isLoading);
|
|
171
156
|
i0.ɵɵadvance();
|
|
172
157
|
i0.ɵɵproperty("ngIf", ctx.isLoading);
|
|
173
158
|
} }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, MatIconButton,
|
|
174
159
|
MatIcon,
|
|
175
160
|
FormsModule, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, MatProgressSpinner,
|
|
176
|
-
MatTooltipModule, i3.MatTooltip, MatFormFieldModule, i4.MatFormField, i4.MatLabel, MatSelectModule, i5.MatSelect, i6.MatOption, FlexLayoutModule, i7.DefaultClassDirective], styles: [".text-to-speech-wrapper[_ngcontent-%COMP%]{margin-top:5px;position:relative;display:flex;flex-direction:column;align-items:center}.text-to-speech-wrapper[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{max-width:900px!important;width:100%}.text-to-speech-textarea-wrapper[_ngcontent-%COMP%], .text-to-speech-textarea[_ngcontent-%COMP%]{position:relative;width:100%;max-width:900px}.text-to-speech-textarea-wrapper[_ngcontent-%COMP%]{border:1px solid var(--base-70);padding:5px;border-radius:8px;box-shadow:0 0 16px #0000001a}.text-to-speech-textarea[_ngcontent-%COMP%]{margin:15px 0;padding:0 10px;min-height:120px;resize:none;outline:none;border:none}.text-to-speech-actions[_ngcontent-%COMP%]{position:absolute;bottom:-25px}.text-to-speech-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:#fff;background-color:var(--accent)}.text-to-speech-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled{background-color:var(--base-70)}.text-to-speech-characters[_ngcontent-%COMP%]{position:absolute;right:10px;bottom:0;margin:5px;font-size:13px;color:var(--base-65)}.text-overflow[_ngcontent-%COMP%]{right:30px}.mobile[_ngcontent-%COMP%] .text-overflow[_ngcontent-%COMP%]{right:15px}"] }); }
|
|
161
|
+
MatTooltipModule, i3.MatTooltip, MatFormFieldModule, i4.MatFormField, i4.MatLabel, MatSelectModule, i5.MatSelect, i6.MatOption, FlexLayoutModule, i7.DefaultClassDirective, TranslateModule, i8.TranslatePipe], styles: [".text-to-speech-wrapper[_ngcontent-%COMP%]{margin-top:5px;position:relative;display:flex;flex-direction:column;align-items:center}.text-to-speech-wrapper[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{max-width:900px!important;width:100%}.text-to-speech-textarea-wrapper[_ngcontent-%COMP%], .text-to-speech-textarea[_ngcontent-%COMP%]{position:relative;width:100%;max-width:900px}.text-to-speech-textarea-wrapper[_ngcontent-%COMP%]{border:1px solid var(--base-70);padding:5px;border-radius:8px;box-shadow:0 0 16px #0000001a}.text-to-speech-textarea[_ngcontent-%COMP%]{margin:15px 0;padding:0 10px;min-height:120px;resize:none;outline:none;border:none}.text-to-speech-actions[_ngcontent-%COMP%]{position:absolute;bottom:-25px}.text-to-speech-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:#fff;background-color:var(--accent)}.text-to-speech-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled{background-color:var(--base-70)}.text-to-speech-characters[_ngcontent-%COMP%]{position:absolute;right:10px;bottom:0;margin:5px;font-size:13px;color:var(--base-65)}.text-overflow[_ngcontent-%COMP%]{right:30px}.mobile[_ngcontent-%COMP%] .text-overflow[_ngcontent-%COMP%]{right:15px}"] }); }
|
|
177
162
|
}
|
|
178
163
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TextToSpeechComponent, [{
|
|
179
164
|
type: Component,
|
|
@@ -187,14 +172,15 @@ export class TextToSpeechComponent {
|
|
|
187
172
|
MatTooltipModule,
|
|
188
173
|
MatFormFieldModule,
|
|
189
174
|
MatSelectModule,
|
|
190
|
-
FlexLayoutModule
|
|
191
|
-
|
|
192
|
-
}]
|
|
175
|
+
FlexLayoutModule,
|
|
176
|
+
TranslateModule
|
|
177
|
+
], template: "<div [ngClass.lt-md]=\"'mobile'\" class=\"text-to-speech-wrapper\">\r\n <mat-form-field appearance=\"outline\" color=\"accent\">\r\n <mat-label>{{\"selectVoice\" | translate }}</mat-label>\r\n <mat-select (selectionChange)=\"changeSelectedVoice($event)\" [(value)]=\"selectedVoice\">\r\n <mat-option *ngFor=\"let voice of voices; let i = index\" [value]=\"voice.voice\">\r\n {{ 'voice' | translate: {nth: i + 1} }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div class=\"text-to-speech-textarea-wrapper\">\r\n <textarea [(ngModel)]=\"text\" class=\"text-to-speech-textarea\" [placeholder]=\"'placeholder' | translate\"></textarea>\r\n <div [class.text-overflow]=\"hasOverflow\" class=\"text-to-speech-characters\">\r\n {{text?.length ?? 0}}/{{maxCharLength}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-to-speech-actions\">\r\n <div [matTooltip]=\"!text ? ('playDisabled' | translate) : ''\">\r\n <button [matTooltip]=\"(isPlaying ? 'stop' : 'play') | translate\" [disabled]=\"!text || isLoading\" (click)=\"togglePlay()\" mat-icon-button>\r\n <mat-icon *ngIf=\"!isLoading\"> {{ isPlaying ? 'stop' : 'volume_up' }} </mat-icon>\r\n <mat-spinner *ngIf=\"isLoading\" [diameter]=\"20\"></mat-spinner>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".text-to-speech-wrapper{margin-top:5px;position:relative;display:flex;flex-direction:column;align-items:center}.text-to-speech-wrapper mat-form-field{max-width:900px!important;width:100%}.text-to-speech-textarea-wrapper,.text-to-speech-textarea{position:relative;width:100%;max-width:900px}.text-to-speech-textarea-wrapper{border:1px solid var(--base-70);padding:5px;border-radius:8px;box-shadow:0 0 16px #0000001a}.text-to-speech-textarea{margin:15px 0;padding:0 10px;min-height:120px;resize:none;outline:none;border:none}.text-to-speech-actions{position:absolute;bottom:-25px}.text-to-speech-actions button{color:#fff;background-color:var(--accent)}.text-to-speech-actions button:disabled{background-color:var(--base-70)}.text-to-speech-characters{position:absolute;right:10px;bottom:0;margin:5px;font-size:13px;color:var(--base-65)}.text-overflow{right:30px}.mobile .text-overflow{right:15px}\n"] }]
|
|
178
|
+
}], null, { maxCharLength: [{
|
|
193
179
|
type: Input
|
|
194
|
-
}],
|
|
180
|
+
}], voicesJson: [{
|
|
195
181
|
type: Input
|
|
196
|
-
}],
|
|
182
|
+
}], voices: [{
|
|
197
183
|
type: Input
|
|
198
184
|
}] }); })();
|
|
199
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TextToSpeechComponent, { className: "TextToSpeechComponent", filePath: "lib\\text-to-speech\\text-to-speech.component.ts", lineNumber:
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10by1zcGVlY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3RleHQtdG8tc3BlZWNoL3RleHQtdG8tc3BlZWNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi90ZXh0LXRvLXNwZWVjaC90ZXh0LXRvLXNwZWVjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0lDUm5ELHNDQUE0RDtJQUMxRCxZ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LCtDQUF5QjtZQUNMLGNBQVk7WUFBWix1Q0FBWTtZQU9sQyxlQUFrQjtZQUFsQix3Q0FBa0I7WUFBaUMsMERBQXdDO1lBQ2hHLGNBQW1DO1lBQW5DLGdEQUFtQztZQUN0QyxjQUNGO1lBREUsOEpBQ0Y7WUFJSyxlQUFxRDtZQUFyRCwyRUFBcUQ7WUFDaEQsY0FBZ0U7WUFBQyxBQUFqRSwwRkFBZ0Usd0NBQWdDO1lBQzNGLGNBQWdCO1lBQWhCLHFDQUFnQjtZQUNiLGNBQWU7WUFBZixvQ0FBZTs0QkRIakMsWUFBWSx1QkFFWixhQUFhO1lBQ2IsT0FBTztZQUNQLFdBQVcsMkRBQ1gsa0JBQWtCO1lBQ2xCLGdCQUFnQixpQkFDaEIsa0JBQWtCLGdDQUNsQixlQUFlLDhCQUNmLGdCQUFnQjs7aUZBS1AscUJBQXFCO2NBbEJqQyxTQUFTOzJCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1A7b0JBQ1AsWUFBWTtvQkFDWixTQUFTO29CQUNULGFBQWE7b0JBQ2IsT0FBTztvQkFDUCxXQUFXO29CQUNYLGtCQUFrQjtvQkFDbEIsZ0JBQWdCO29CQUNoQixrQkFBa0I7b0JBQ2xCLGVBQWU7b0JBQ2YsZ0JBQWdCO2lCQUNqQjtnQkFLUSxPQUFPO2tCQUFmLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSzs7a0ZBSEsscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbiwgTWF0SWNvbkJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgVGV4dFBsYXlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LXBsYXkuc2VydmljZSc7XHJcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xyXG5pbXBvcnQgeyBUVFNfSTE4TiB9IGZyb20gJy4vdHJhbnNsYXRpb25zL3R0cy1pMThuJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10ZXh0LXRvLXNwZWVjaCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b24sXHJcbiAgICBNYXRJY29uQnV0dG9uLFxyXG4gICAgTWF0SWNvbixcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIEZsZXhMYXlvdXRNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LXRvLXNwZWVjaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RleHQtdG8tc3BlZWNoLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRUb1NwZWVjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgeEFwaUtleSE6IHN0cmluZztcclxuICBASW5wdXQoKSBsYW5ndWFnZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBtYXhDaGFyTGVuZ3RoOiBudW1iZXIgPSAxMDAwO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGxhbmdBdHRyaWJ1dGVLZXkgPSAnbGFuZyc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TGFuZ3VhZ2UgPSAnbHYnO1xyXG5cclxuICByZWFkb25seSB2b2ljZUxpc3QgPSBbJ3NhbmRyYTQnLCAnbHYtTFYtZ2VuZXJhbCddO1xyXG5cclxuICB0ZXh0ITogc3RyaW5nO1xyXG4gIHByZXZpb3VzVGV4dCE6IHN0cmluZztcclxuICBwcmV2aW91c1ZvaWNlITogc3RyaW5nO1xyXG4gIHNlbGVjdGVkVm9pY2UgPSB0aGlzLnZvaWNlTGlzdFswXTtcclxuICBhdWRpbyE6IEhUTUxBdWRpb0VsZW1lbnQ7XHJcbiAgaXNMb2FkaW5nITogYm9vbGVhbjtcclxuICBpc1BsYXlpbmchOiBib29sZWFuO1xyXG5cclxuICBnZXQgdHJhbnNsYXRpb25zKCkge1xyXG4gICAgaWYgKFRUU19JMThOW3RoaXMubGFuZ3VhZ2VdKSB7XHJcbiAgICAgIHJldHVybiBUVFNfSTE4Tlt0aGlzLmxhbmd1YWdlXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gVFRTX0kxOE5bdGhpcy5kZWZhdWx0TGFuZ3VhZ2VdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc092ZXJmbG93KCkge1xyXG4gICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XHJcbiAgICByZXR1cm4gdGV4dGFyZWE/LmNsaWVudEhlaWdodCA8IHRleHRhcmVhPy5zY3JvbGxIZWlnaHQgPyB0cnVlIDogZmFsc2VcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5ICN0ZXh0UGxheVNlcnZpY2UgPSBpbmplY3QoVGV4dFBsYXlTZXJ2aWNlKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLndhdGNoSHRtbExhbmdBdHRyaWJ1dGVDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwbGF5VGV4dCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzUGxheWluZykge1xyXG4gICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0Lmxlbmd0aCA+IHRoaXMubWF4Q2hhckxlbmd0aCA/IHRoaXMudGV4dC5zdWJzdHJpbmcoMCwgdGhpcy5tYXhDaGFyTGVuZ3RoKSA6IHRoaXMudGV4dDtcclxuXHJcbiAgICBpZiAoKHRoaXMuYXVkaW8gJiYgdGV4dCA9PT0gdGhpcy5wcmV2aW91c1RleHQpICYmICh0aGlzLnNlbGVjdGVkVm9pY2UgPT09IHRoaXMucHJldmlvdXNWb2ljZSkpIHtcclxuICAgICAgdGhpcy5hdWRpby5wbGF5KCk7XHJcbiAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuI3RleHRQbGF5U2VydmljZVxyXG4gICAgICAucGxheSh0ZXh0LCB0aGlzLnNlbGVjdGVkVm9pY2UsIHRoaXMueEFwaUtleSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4geyB0aGlzLmlzTG9hZGluZyA9IGZhbHNlIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzVGV4dCA9IHRleHQ7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzVm9pY2UgPSB0aGlzLnNlbGVjdGVkVm9pY2U7XHJcbiAgICAgICAgICBjb25zdCBhdWRpb1VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwocmVzKTtcclxuICAgICAgICAgIHRoaXMuYXVkaW8gPSBuZXcgQXVkaW8oYXVkaW9VcmwpO1xyXG4gICAgICAgICAgdGhpcy5hdWRpby5wbGF5KCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuYXVkaW8ub25lbmRlZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChhdWRpb1VybCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmF1ZGlvKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8ucGF1c2UoKTtcclxuICAgICAgdGhpcy5hdWRpby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhdGNoSHRtbExhbmdBdHRyaWJ1dGVDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldEh0bWxMYW5nQXR0cmlidXRlKCk7XHJcbiAgICBcclxuICAgIGlmICghdGhpcy5sYW5ndWFnZSAmJiAobGFuZ3VhZ2UgIT09IHRoaXMuZGVmYXVsdExhbmd1YWdlKSkge1xyXG4gICAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb25MYW5nQXR0cmlidXRlQ2hhbmdlID0gKG11dGF0aW9uc0xpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHtcclxuICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJiBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSB0aGlzLmxhbmdBdHRyaWJ1dGVLZXkpIHtcclxuICAgICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLmdldEh0bWxMYW5nQXR0cmlidXRlKCk7XHJcbiAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gbGFuZztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgXHJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9uTGFuZ0F0dHJpYnV0ZUNoYW5nZSk7XHJcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbdGhpcy5sYW5nQXR0cmlidXRlS2V5XSB9O1xyXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShodG1sRWxlbWVudCwgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHRtbExhbmdBdHRyaWJ1dGUoKTogc3RyaW5nIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICByZXR1cm4gKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSBhcyBhbnkpLmdldEF0dHJpYnV0ZSh0aGlzLmxhbmdBdHRyaWJ1dGVLZXkpLnNwbGl0KCctJylbMF07XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW25nQ2xhc3MubHQtbWRdPVwiJ21vYmlsZSdcIiBjbGFzcz1cInRleHQtdG8tc3BlZWNoLXdyYXBwZXJcIj5cclxuICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjb2xvcj1cImFjY2VudFwiPlxyXG4gICAgPG1hdC1sYWJlbD57e3RyYW5zbGF0aW9ucy5zZWxlY3RWb2ljZX19PC9tYXQtbGFiZWw+XHJcbiAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJzZWxlY3RlZFZvaWNlXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2b2ljZSBvZiB2b2ljZUxpc3RcIiBbdmFsdWVdPVwidm9pY2VcIj5cclxuICAgICAgICB7eyB0cmFuc2xhdGlvbnMudm9pY2VMaXN0W3ZvaWNlXSB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInRleHQtdG8tc3BlZWNoLXRleHRhcmVhLXdyYXBwZXJcIj5cclxuICAgIDx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cInRleHRcIiBjbGFzcz1cInRleHQtdG8tc3BlZWNoLXRleHRhcmVhXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9ucy5wbGFjZWhvbGRlclwiPjwvdGV4dGFyZWE+XHJcbiAgICA8ZGl2IFtjbGFzcy50ZXh0LW92ZXJmbG93XT1cImhhc092ZXJmbG93XCIgY2xhc3M9XCJ0ZXh0LXRvLXNwZWVjaC1jaGFyYWN0ZXJzXCI+XHJcbiAgICAgIHt7dGV4dD8ubGVuZ3RoID8/IDB9fS97e21heENoYXJMZW5ndGh9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ0ZXh0LXRvLXNwZWVjaC1hY3Rpb25zXCI+XHJcbiAgICA8ZGl2IFttYXRUb29sdGlwXT1cIiF0ZXh0ID8gdHJhbnNsYXRpb25zLnBsYXlEaXNhYmxlZCA6ICcnXCI+XHJcbiAgICAgIDxidXR0b24gW21hdFRvb2x0aXBdPVwiaXNQbGF5aW5nID8gdHJhbnNsYXRpb25zLnN0b3AgOiB0cmFuc2xhdGlvbnMucGxheVwiIFtkaXNhYmxlZF09XCIhdGV4dCB8fCBpc0xvYWRpbmdcIiAoY2xpY2spPVwicGxheVRleHQoKVwiIG1hdC1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhaXNMb2FkaW5nXCI+IHt7IGlzUGxheWluZyA/ICdzdG9wJyA6ICd2b2x1bWVfdXAnIH19ICA8L21hdC1pY29uPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZ1wiIFtkaWFtZXRlcl09XCIyMFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
185
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TextToSpeechComponent, { className: "TextToSpeechComponent", filePath: "lib\\text-to-speech\\text-to-speech.component.ts", lineNumber: 35 }); })();
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10by1zcGVlY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3RleHQtdG8tc3BlZWNoL3RleHQtdG8tc3BlZWNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi90ZXh0LXRvLXNwZWVjaC90ZXh0LXRvLXNwZWVjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQW1CLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7O0lDUmhELHNDQUE4RTtJQUM1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QVksSUFBQztZQUVySCxBQURBLG1GQUE2Qiw0RUFDa0I7WUFJdkQsQUFERSxBQURFLEFBREUsaUJBQVMsRUFDTCxFQUNGLEVBQ0Y7OztZQXpCRCx3Q0FBMEI7WUFFaEIsZUFBOEI7WUFBOUIsMERBQThCO1lBQ21CLGVBQXlCO1lBQXpCLCtDQUF5QjtZQUNyRCxjQUFXO1lBQVgsb0NBQVc7WUFPakMsZUFBa0I7WUFBbEIsd0NBQWtCO1lBQWlDLGtFQUF5QztZQUNqRyxlQUFtQztZQUFuQyxnREFBbUM7WUFDdEMsY0FDRjtZQURFLDhKQUNGO1lBSUssZUFBd0Q7WUFBeEQsb0ZBQXdEO1lBQ25ELGVBQXdEO1lBQUMsQUFBekQsb0ZBQXdELHdDQUFnQztZQUNuRixlQUFnQjtZQUFoQixxQ0FBZ0I7WUFDYixjQUFlO1lBQWYsb0NBQWU7NEJERmpDLFlBQVksdUJBRVosYUFBYTtZQUNiLE9BQU87WUFDUCxXQUFXLDJEQUNYLGtCQUFrQjtZQUNsQixnQkFBZ0IsaUJBQ2hCLGtCQUFrQixnQ0FDbEIsZUFBZSw4QkFDZixnQkFBZ0IsNEJBQ2hCLGVBQWU7O2lGQUtOLHFCQUFxQjtjQW5CakMsU0FBUzsyQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQO29CQUNQLFlBQVk7b0JBQ1osU0FBUztvQkFDVCxhQUFhO29CQUNiLE9BQU87b0JBQ1AsV0FBVztvQkFDWCxrQkFBa0I7b0JBQ2xCLGdCQUFnQjtvQkFDaEIsa0JBQWtCO29CQUNsQixlQUFlO29CQUNmLGdCQUFnQjtvQkFDaEIsZUFBZTtpQkFDaEI7Z0JBS1EsYUFBYTtrQkFBckIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxNQUFNO2tCQUFkLEtBQUs7O2tGQUhLLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b24sIE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFRUU0FwaVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3R0cy1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSwgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgVm9pY2UgfSBmcm9tICcuL21vZGVscy92b2ljZS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10ZXh0LXRvLXNwZWVjaCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b24sXHJcbiAgICBNYXRJY29uQnV0dG9uLFxyXG4gICAgTWF0SWNvbixcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIEZsZXhMYXlvdXRNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LXRvLXNwZWVjaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RleHQtdG8tc3BlZWNoLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRUb1NwZWVjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbWF4Q2hhckxlbmd0aDogbnVtYmVyID0gMTAwMDtcclxuICBASW5wdXQoKSB2b2ljZXNKc29uITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHZvaWNlcyE6IFZvaWNlW107XHJcblxyXG4gIHRleHQhOiBzdHJpbmc7XHJcbiAgcHJldmlvdXNUZXh0ITogc3RyaW5nO1xyXG4gIHByZXZpb3VzVm9pY2UhOiBzdHJpbmc7XHJcbiAgYXVkaW8hOiBIVE1MQXVkaW9FbGVtZW50O1xyXG4gIGlzTG9hZGluZyE6IGJvb2xlYW47XHJcbiAgaXNQbGF5aW5nITogYm9vbGVhbjtcclxuICBcclxuICBzZWxlY3RlZCE6IFZvaWNlO1xyXG4gIHNlbGVjdGVkVm9pY2UhOiBzdHJpbmc7XHJcblxyXG4gIGdldCBoYXNPdmVyZmxvdygpIHtcclxuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xyXG4gICAgcmV0dXJuIHRleHRhcmVhPy5jbGllbnRIZWlnaHQgPCB0ZXh0YXJlYT8uc2Nyb2xsSGVpZ2h0ID8gdHJ1ZSA6IGZhbHNlXHJcbiAgfVxyXG5cclxuICByZWFkb25seSAjVFRTQXBpU2VydmljZSA9IGluamVjdChUVFNBcGlTZXJ2aWNlKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudm9pY2VzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy52b2ljZXMgPSBKU09OLnBhcnNlKHRoaXMudm9pY2VzSnNvbikudm9pY2VzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnZvaWNlc1swXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRWb2ljZSA9IHRoaXMuc2VsZWN0ZWQudm9pY2U7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQbGF5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRleHQubGVuZ3RoID4gdGhpcy5tYXhDaGFyTGVuZ3RoID8gdGhpcy50ZXh0LnN1YnN0cmluZygwLCB0aGlzLm1heENoYXJMZW5ndGgpIDogdGhpcy50ZXh0O1xyXG5cclxuICAgIGlmICgodGhpcy5hdWRpbyAmJiB0ZXh0ID09PSB0aGlzLnByZXZpb3VzVGV4dCkgJiYgKHRoaXMuc2VsZWN0ZWQudm9pY2UgPT09IHRoaXMucHJldmlvdXNWb2ljZSkpIHtcclxuICAgICAgdGhpcy5hdWRpby5wbGF5KCk7XHJcbiAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuI1RUU0FwaVNlcnZpY2VcclxuICAgICAgLnBsYXkodGV4dCwgdGhpcy5zZWxlY3RlZClcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4geyB0aGlzLmlzTG9hZGluZyA9IGZhbHNlIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzVGV4dCA9IHRleHQ7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzVm9pY2UgPSB0aGlzLnNlbGVjdGVkLnZvaWNlO1xyXG4gICAgICAgICAgY29uc3QgYXVkaW9VcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlcyk7XHJcbiAgICAgICAgICB0aGlzLmF1ZGlvID0gbmV3IEF1ZGlvKGF1ZGlvVXJsKTtcclxuICAgICAgICAgIHRoaXMuYXVkaW8ucGxheSgpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB0aGlzLmF1ZGlvLm9uZW5kZWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYXVkaW9VcmwpO1xyXG4gICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0b3AoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdWRpbykge1xyXG4gICAgICB0aGlzLmF1ZGlvLnBhdXNlKCk7XHJcbiAgICAgIHRoaXMuYXVkaW8uY3VycmVudFRpbWUgPSAwO1xyXG4gICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlU2VsZWN0ZWRWb2ljZShldmVudDogTWF0U2VsZWN0Q2hhbmdlKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy52b2ljZXMuZmluZCgoaXRlbSkgPT4gaXRlbS52b2ljZSA9PT0gZXZlbnQudmFsdWUpIGFzIFZvaWNlOyAgXHJcbiAgICB0aGlzLnNlbGVjdGVkVm9pY2UgPSB0aGlzLnNlbGVjdGVkLnZvaWNlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtuZ0NsYXNzLmx0LW1kXT1cIidtb2JpbGUnXCIgY2xhc3M9XCJ0ZXh0LXRvLXNwZWVjaC13cmFwcGVyXCI+XHJcbiAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY29sb3I9XCJhY2NlbnRcIj5cclxuICAgIDxtYXQtbGFiZWw+e3tcInNlbGVjdFZvaWNlXCIgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlU2VsZWN0ZWRWb2ljZSgkZXZlbnQpXCIgWyh2YWx1ZSldPVwic2VsZWN0ZWRWb2ljZVwiPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdm9pY2Ugb2Ygdm9pY2VzOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cInZvaWNlLnZvaWNlXCI+XHJcbiAgICAgICAge3sgJ3ZvaWNlJyB8IHRyYW5zbGF0ZToge250aDogaSArIDF9IH19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwidGV4dC10by1zcGVlY2gtdGV4dGFyZWEtd3JhcHBlclwiPlxyXG4gICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwidGV4dFwiIGNsYXNzPVwidGV4dC10by1zcGVlY2gtdGV4dGFyZWFcIiBbcGxhY2Vob2xkZXJdPVwiJ3BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiPjwvdGV4dGFyZWE+XHJcbiAgICA8ZGl2IFtjbGFzcy50ZXh0LW92ZXJmbG93XT1cImhhc092ZXJmbG93XCIgY2xhc3M9XCJ0ZXh0LXRvLXNwZWVjaC1jaGFyYWN0ZXJzXCI+XHJcbiAgICAgIHt7dGV4dD8ubGVuZ3RoID8/IDB9fS97e21heENoYXJMZW5ndGh9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ0ZXh0LXRvLXNwZWVjaC1hY3Rpb25zXCI+XHJcbiAgICA8ZGl2IFttYXRUb29sdGlwXT1cIiF0ZXh0ID8gKCdwbGF5RGlzYWJsZWQnIHwgdHJhbnNsYXRlKSA6ICcnXCI+XHJcbiAgICAgIDxidXR0b24gW21hdFRvb2x0aXBdPVwiKGlzUGxheWluZyA/ICdzdG9wJyA6ICdwbGF5JykgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiIXRleHQgfHwgaXNMb2FkaW5nXCIgKGNsaWNrKT1cInRvZ2dsZVBsYXkoKVwiIG1hdC1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhaXNMb2FkaW5nXCI+IHt7IGlzUGxheWluZyA/ICdzdG9wJyA6ICd2b2x1bWVfdXAnIH19ICA8L21hdC1pY29uPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZ1wiIFtkaWFtZXRlcl09XCIyMFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|