@tilde-nlp/ngx-common 5.0.3 → 5.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,7 @@ import * as i4 from "@angular/material/form-field";
18
18
  import * as i5 from "@angular/material/select";
19
19
  import * as i6 from "@angular/material/core";
20
20
  function TextToSpeechComponent_mat_option_5_Template(rf, ctx) { if (rf & 1) {
21
- i0.ɵɵelementStart(0, "mat-option", 11);
21
+ i0.ɵɵelementStart(0, "mat-option", 12);
22
22
  i0.ɵɵtext(1);
23
23
  i0.ɵɵelementEnd();
24
24
  } if (rf & 2) {
@@ -28,7 +28,7 @@ function TextToSpeechComponent_mat_option_5_Template(rf, ctx) { if (rf & 1) {
28
28
  i0.ɵɵadvance();
29
29
  i0.ɵɵtextInterpolate1(" ", ctx_r1.translations.voiceList[voice_r1], " ");
30
30
  } }
31
- function TextToSpeechComponent_mat_icon_11_Template(rf, ctx) { if (rf & 1) {
31
+ function TextToSpeechComponent_mat_icon_13_Template(rf, ctx) { if (rf & 1) {
32
32
  i0.ɵɵelementStart(0, "mat-icon");
33
33
  i0.ɵɵtext(1);
34
34
  i0.ɵɵelementEnd();
@@ -37,13 +37,14 @@ function TextToSpeechComponent_mat_icon_11_Template(rf, ctx) { if (rf & 1) {
37
37
  i0.ɵɵadvance();
38
38
  i0.ɵɵtextInterpolate1(" ", ctx_r1.isPlaying ? "stop" : "volume_up", " ");
39
39
  } }
40
- function TextToSpeechComponent_mat_spinner_12_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelement(0, "mat-spinner", 12);
40
+ function TextToSpeechComponent_mat_spinner_14_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelement(0, "mat-spinner", 13);
42
42
  } if (rf & 2) {
43
43
  i0.ɵɵproperty("diameter", 20);
44
44
  } }
45
45
  export class TextToSpeechComponent {
46
46
  constructor() {
47
+ this.maxCharLength = 1000;
47
48
  this.langAttributeKey = 'lang';
48
49
  this.defaultLanguage = 'lv';
49
50
  this.voiceList = ['sandra4', 'lv-LV-general'];
@@ -56,6 +57,10 @@ export class TextToSpeechComponent {
56
57
  }
57
58
  return TTS_I18N[this.defaultLanguage];
58
59
  }
60
+ get hasOverflow() {
61
+ const textarea = document.querySelector('textarea');
62
+ return textarea?.clientHeight < textarea?.scrollHeight ? true : false;
63
+ }
59
64
  #textPlayService;
60
65
  ngOnInit() {
61
66
  this.watchHtmlLangAttributeChanges();
@@ -66,8 +71,9 @@ export class TextToSpeechComponent {
66
71
  return;
67
72
  }
68
73
  this.isLoading = true;
74
+ const text = this.text.length > this.maxCharLength ? this.text.substring(0, this.maxCharLength) : this.text;
69
75
  this.#textPlayService
70
- .play(this.text, this.selectedVoice, this.xApiKey)
76
+ .play(text, this.selectedVoice, this.xApiKey)
71
77
  .pipe(finalize(() => { this.isLoading = false; }))
72
78
  .subscribe({
73
79
  next: (res) => {
@@ -111,7 +117,7 @@ export class TextToSpeechComponent {
111
117
  return document.querySelector('html').getAttribute(this.langAttributeKey).split('-')[0];
112
118
  }
113
119
  static { this.ɵfac = function TextToSpeechComponent_Factory(t) { return new (t || TextToSpeechComponent)(); }; }
114
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TextToSpeechComponent, selectors: [["lib-text-to-speech"]], inputs: { xApiKey: "xApiKey", language: "language" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 13, vars: 10, consts: [[1, "text-to-speech-wrapper"], ["appearance", "outline", "color", "accent"], [3, "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-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) {
120
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TextToSpeechComponent, selectors: [["lib-text-to-speech"]], inputs: { xApiKey: "xApiKey", language: "language", maxCharLength: "maxCharLength" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 15, vars: 14, consts: [[1, "text-to-speech-wrapper"], ["appearance", "outline", "color", "accent"], [3, "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) {
115
121
  i0.ɵɵelementStart(0, "div", 0)(1, "mat-form-field", 1)(2, "mat-label");
116
122
  i0.ɵɵtext(3);
117
123
  i0.ɵɵelementEnd();
@@ -121,12 +127,16 @@ export class TextToSpeechComponent {
121
127
  i0.ɵɵelementEnd()();
122
128
  i0.ɵɵelementStart(6, "div", 4)(7, "textarea", 5);
123
129
  i0.ɵɵtwoWayListener("ngModelChange", function TextToSpeechComponent_Template_textarea_ngModelChange_7_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.text, $event) || (ctx.text = $event); return $event; });
130
+ i0.ɵɵelementEnd();
131
+ i0.ɵɵelementStart(8, "div", 6);
132
+ i0.ɵɵtext(9);
124
133
  i0.ɵɵelementEnd()();
125
- i0.ɵɵelementStart(8, "div", 6)(9, "div", 7)(10, "button", 8);
126
- i0.ɵɵlistener("click", function TextToSpeechComponent_Template_button_click_10_listener() { return ctx.playText(); });
127
- i0.ɵɵtemplate(11, TextToSpeechComponent_mat_icon_11_Template, 2, 1, "mat-icon", 9)(12, TextToSpeechComponent_mat_spinner_12_Template, 1, 1, "mat-spinner", 10);
134
+ i0.ɵɵelementStart(10, "div", 7)(11, "div", 8)(12, "button", 9);
135
+ i0.ɵɵlistener("click", function TextToSpeechComponent_Template_button_click_12_listener() { return ctx.playText(); });
136
+ i0.ɵɵtemplate(13, TextToSpeechComponent_mat_icon_13_Template, 2, 1, "mat-icon", 10)(14, TextToSpeechComponent_mat_spinner_14_Template, 1, 1, "mat-spinner", 11);
128
137
  i0.ɵɵelementEnd()()()();
129
138
  } if (rf & 2) {
139
+ let tmp_6_0;
130
140
  i0.ɵɵadvance(3);
131
141
  i0.ɵɵtextInterpolate(ctx.translations.selectVoice);
132
142
  i0.ɵɵadvance();
@@ -136,6 +146,10 @@ export class TextToSpeechComponent {
136
146
  i0.ɵɵadvance(2);
137
147
  i0.ɵɵtwoWayProperty("ngModel", ctx.text);
138
148
  i0.ɵɵproperty("placeholder", ctx.translations.placeholder);
149
+ i0.ɵɵadvance();
150
+ i0.ɵɵclassProp("text-overflow", ctx.hasOverflow);
151
+ i0.ɵɵadvance();
152
+ i0.ɵɵtextInterpolate2(" ", (tmp_6_0 = ctx.text == null ? null : ctx.text.length) !== null && tmp_6_0 !== undefined ? tmp_6_0 : 0, "/", ctx.maxCharLength, " ");
139
153
  i0.ɵɵadvance(2);
140
154
  i0.ɵɵproperty("matTooltip", !ctx.text ? ctx.translations.playDisabled : "");
141
155
  i0.ɵɵadvance();
@@ -147,7 +161,7 @@ export class TextToSpeechComponent {
147
161
  } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, MatIconButton,
148
162
  MatIcon,
149
163
  FormsModule, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, MatProgressSpinner,
150
- MatTooltipModule, i3.MatTooltip, MatFormFieldModule, i4.MatFormField, i4.MatLabel, MatSelectModule, i5.MatSelect, i6.MatOption], 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%]{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)}"] }); }
164
+ MatTooltipModule, i3.MatTooltip, MatFormFieldModule, i4.MatFormField, i4.MatLabel, MatSelectModule, i5.MatSelect, i6.MatOption], 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:0;bottom:0;margin:5px;font-size:14px;color:var(--base-65)}.text-overflow[_ngcontent-%COMP%]{right:30px}"] }); }
151
165
  }
152
166
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TextToSpeechComponent, [{
153
167
  type: Component,
@@ -161,11 +175,13 @@ export class TextToSpeechComponent {
161
175
  MatTooltipModule,
162
176
  MatFormFieldModule,
163
177
  MatSelectModule
164
- ], template: "<div class=\"text-to-speech-wrapper\">\r\n <mat-form-field appearance=\"outline\" color=\"accent\">\r\n <mat-label>{{translations.selectVoice}}</mat-label>\r\n <mat-select [(value)]=\"selectedVoice\">\r\n <mat-option *ngFor=\"let voice of voiceList\" [value]=\"voice\">\r\n {{ translations.voiceList[voice] }}\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]=\"translations.placeholder\"></textarea>\r\n </div>\r\n\r\n <div class=\"text-to-speech-actions\">\r\n <div [matTooltip]=\"!text ? translations.playDisabled : ''\">\r\n <button [matTooltip]=\"isPlaying ? translations.stop : translations.play\" [disabled]=\"!text || isLoading\" (click)=\"playText()\" 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{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)}\n"] }]
178
+ ], template: "<div class=\"text-to-speech-wrapper\">\r\n <mat-form-field appearance=\"outline\" color=\"accent\">\r\n <mat-label>{{translations.selectVoice}}</mat-label>\r\n <mat-select [(value)]=\"selectedVoice\">\r\n <mat-option *ngFor=\"let voice of voiceList\" [value]=\"voice\">\r\n {{ translations.voiceList[voice] }}\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]=\"translations.placeholder\"></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 ? translations.playDisabled : ''\">\r\n <button [matTooltip]=\"isPlaying ? translations.stop : translations.play\" [disabled]=\"!text || isLoading\" (click)=\"playText()\" 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:0;bottom:0;margin:5px;font-size:14px;color:var(--base-65)}.text-overflow{right:30px}\n"] }]
165
179
  }], null, { xApiKey: [{
166
180
  type: Input
167
181
  }], language: [{
168
182
  type: Input
183
+ }], maxCharLength: [{
184
+ type: Input
169
185
  }] }); })();
170
186
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TextToSpeechComponent, { className: "TextToSpeechComponent", filePath: "lib\\text-to-speech\\text-to-speech.component.ts", lineNumber: 31 }); })();
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10by1zcGVlY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3RleHQtdG8tc3BlZWNoL3RleHQtdG8tc3BlZWNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi90ZXh0LXRvLXNwZWVjaC90ZXh0LXRvLXNwZWVjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7SUNQNUQsc0NBQTREO0lBQzFELFlBQ0Y7SUFBQSxpQkFBYTs7OztJQUYrQixnQ0FBZTtJQUN6RCxjQUNGO0lBREUs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RUFDRixFQUNGOztZQXBCUyxlQUE0QjtZQUE1QixrREFBNEI7WUFDM0IsY0FBeUI7WUFBekIsK0NBQXlCO1lBQ0wsY0FBWTtZQUFaLHVDQUFZO1lBT2xDLGVBQWtCO1lBQWxCLHdDQUFrQjtZQUFpQywwREFBd0M7WUFJaEcsZUFBcUQ7WUFBckQsMkVBQXFEO1lBQ2hELGNBQWdFO1lBQUMsQUFBakUsMEZBQWdFLHdDQUFnQztZQUMzRixjQUFnQjtZQUFoQixxQ0FBZ0I7WUFDYixjQUFlO1lBQWYsb0NBQWU7NEJERGpDLFlBQVksdUJBRVosYUFBYTtZQUNiLE9BQU87WUFDUCxXQUFXLDJEQUNYLGtCQUFrQjtZQUNsQixnQkFBZ0IsaUJBQ2hCLGtCQUFrQixnQ0FDbEIsZUFBZTs7aUZBS04scUJBQXFCO2NBakJqQyxTQUFTOzJCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1A7b0JBQ1AsWUFBWTtvQkFDWixTQUFTO29CQUNULGFBQWE7b0JBQ2IsT0FBTztvQkFDUCxXQUFXO29CQUNYLGtCQUFrQjtvQkFDbEIsZ0JBQWdCO29CQUNoQixrQkFBa0I7b0JBQ2xCLGVBQWU7aUJBQ2hCO2dCQUtRLE9BQU87a0JBQWYsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7O2tGQUZLLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b24sIE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFRleHRQbGF5U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGV4dC1wbGF5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgVFRTX0kxOE4gfSBmcm9tICcuL3RyYW5zbGF0aW9ucy90dHMtaTE4bic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10ZXh0LXRvLXNwZWVjaCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b24sXHJcbiAgICBNYXRJY29uQnV0dG9uLFxyXG4gICAgTWF0SWNvbixcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtdG8tc3BlZWNoLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdGV4dC10by1zcGVlY2guY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dFRvU3BlZWNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSB4QXBpS2V5ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhbmd1YWdlITogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGxhbmdBdHRyaWJ1dGVLZXkgPSAnbGFuZyc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TGFuZ3VhZ2UgPSAnbHYnO1xyXG5cclxuICByZWFkb25seSB2b2ljZUxpc3QgPSBbJ3NhbmRyYTQnLCAnbHYtTFYtZ2VuZXJhbCddO1xyXG5cclxuICB0ZXh0ITogc3RyaW5nO1xyXG4gIHNlbGVjdGVkVm9pY2UgPSB0aGlzLnZvaWNlTGlzdFswXTtcclxuICBhdWRpbyE6IEhUTUxBdWRpb0VsZW1lbnQ7XHJcbiAgaXNMb2FkaW5nITogYm9vbGVhbjtcclxuICBpc1BsYXlpbmchOiBib29sZWFuO1xyXG5cclxuICBnZXQgdHJhbnNsYXRpb25zKCkge1xyXG4gICAgaWYgKFRUU19JMThOW3RoaXMubGFuZ3VhZ2VdKSB7XHJcbiAgICAgIHJldHVybiBUVFNfSTE4Tlt0aGlzLmxhbmd1YWdlXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gVFRTX0kxOE5bdGhpcy5kZWZhdWx0TGFuZ3VhZ2VdO1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgI3RleHRQbGF5U2VydmljZSA9IGluamVjdChUZXh0UGxheVNlcnZpY2UpO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMud2F0Y2hIdG1sTGFuZ0F0dHJpYnV0ZUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHBsYXlUZXh0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuI3RleHRQbGF5U2VydmljZVxyXG4gICAgICAucGxheSh0aGlzLnRleHQsIHRoaXMuc2VsZWN0ZWRWb2ljZSwgdGhpcy54QXBpS2V5KVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7IHRoaXMuaXNMb2FkaW5nID0gZmFsc2UgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGF1ZGlvVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXMpO1xyXG4gICAgICAgICAgdGhpcy5hdWRpbyA9IG5ldyBBdWRpbyhhdWRpb1VybCk7XHJcbiAgICAgICAgICB0aGlzLmF1ZGlvLnBsYXkoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5hdWRpby5vbmVuZGVkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGF1ZGlvVXJsKTtcclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXVkaW8pIHtcclxuICAgICAgdGhpcy5hdWRpby5wYXVzZSgpO1xyXG4gICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaEh0bWxMYW5nQXR0cmlidXRlQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5nZXRIdG1sTGFuZ0F0dHJpYnV0ZSgpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMubGFuZ3VhZ2UgJiYgKGxhbmd1YWdlICE9PSB0aGlzLmRlZmF1bHRMYW5ndWFnZSkpIHtcclxuICAgICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9uTGFuZ0F0dHJpYnV0ZUNoYW5nZSA9IChtdXRhdGlvbnNMaXN0OiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zTGlzdCkge1xyXG4gICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycgJiYgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gdGhpcy5sYW5nQXR0cmlidXRlS2V5KSB7XHJcbiAgICAgICAgICBjb25zdCBsYW5nID0gdGhpcy5nZXRIdG1sTGFuZ0F0dHJpYnV0ZSgpO1xyXG4gICAgICAgICAgdGhpcy5sYW5ndWFnZSA9IGxhbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIFxyXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvbkxhbmdBdHRyaWJ1dGVDaGFuZ2UpO1xyXG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBjb25maWcgPSB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogW3RoaXMubGFuZ0F0dHJpYnV0ZUtleV0gfTtcclxuICAgIG9ic2VydmVyLm9ic2VydmUoaHRtbEVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEh0bWxMYW5nQXR0cmlidXRlKCk6IHN0cmluZyB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgcmV0dXJuIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykgYXMgYW55KS5nZXRBdHRyaWJ1dGUodGhpcy5sYW5nQXR0cmlidXRlS2V5KS5zcGxpdCgnLScpWzBdO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGV4dC10by1zcGVlY2gtd3JhcHBlclwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNvbG9yPVwiYWNjZW50XCI+XHJcbiAgICA8bWF0LWxhYmVsPnt7dHJhbnNsYXRpb25zLnNlbGVjdFZvaWNlfX08L21hdC1sYWJlbD5cclxuICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cInNlbGVjdGVkVm9pY2VcIj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZvaWNlIG9mIHZvaWNlTGlzdFwiIFt2YWx1ZV09XCJ2b2ljZVwiPlxyXG4gICAgICAgIHt7IHRyYW5zbGF0aW9ucy52b2ljZUxpc3Rbdm9pY2VdIH19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwidGV4dC10by1zcGVlY2gtdGV4dGFyZWEtd3JhcHBlclwiPlxyXG4gICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwidGV4dFwiIGNsYXNzPVwidGV4dC10by1zcGVlY2gtdGV4dGFyZWFcIiBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25zLnBsYWNlaG9sZGVyXCI+PC90ZXh0YXJlYT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInRleHQtdG8tc3BlZWNoLWFjdGlvbnNcIj5cclxuICAgIDxkaXYgW21hdFRvb2x0aXBdPVwiIXRleHQgPyB0cmFuc2xhdGlvbnMucGxheURpc2FibGVkIDogJydcIj5cclxuICAgICAgPGJ1dHRvbiBbbWF0VG9vbHRpcF09XCJpc1BsYXlpbmcgPyB0cmFuc2xhdGlvbnMuc3RvcCA6IHRyYW5zbGF0aW9ucy5wbGF5XCIgW2Rpc2FibGVkXT1cIiF0ZXh0IHx8IGlzTG9hZGluZ1wiIChjbGljayk9XCJwbGF5VGV4dCgpXCIgbWF0LWljb24tYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpc0xvYWRpbmdcIj4ge3sgaXNQbGF5aW5nID8gJ3N0b3AnIDogJ3ZvbHVtZV91cCcgfX0gIDwvbWF0LWljb24+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2RpYW1ldGVyXT1cIjIwXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10by1zcGVlY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3RleHQtdG8tc3BlZWNoL3RleHQtdG8tc3BlZWNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi90ZXh0LXRvLXNwZWVjaC90ZXh0LXRvLXNwZWVjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7SUNQNUQsc0NBQTREO0lBQzFELFlBQ0Y7SUFBQSxpQkFBYTs7OztJQUYrQixnQ0FBZTtJQUN6RCxjQUNGO0lBREUs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QkFBZ0I7b0JBQ2hCLGtCQUFrQjtvQkFDbEIsZUFBZTtpQkFDaEI7Z0JBS1EsT0FBTztrQkFBZixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7O2tGQUhLLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b24sIE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFRleHRQbGF5U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGV4dC1wbGF5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgVFRTX0kxOE4gfSBmcm9tICcuL3RyYW5zbGF0aW9ucy90dHMtaTE4bic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10ZXh0LXRvLXNwZWVjaCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b24sXHJcbiAgICBNYXRJY29uQnV0dG9uLFxyXG4gICAgTWF0SWNvbixcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtdG8tc3BlZWNoLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdGV4dC10by1zcGVlY2guY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dFRvU3BlZWNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSB4QXBpS2V5ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhbmd1YWdlITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1heENoYXJMZW5ndGg6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGFuZ0F0dHJpYnV0ZUtleSA9ICdsYW5nJztcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZSA9ICdsdic7XHJcblxyXG4gIHJlYWRvbmx5IHZvaWNlTGlzdCA9IFsnc2FuZHJhNCcsICdsdi1MVi1nZW5lcmFsJ107XHJcblxyXG4gIHRleHQhOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRWb2ljZSA9IHRoaXMudm9pY2VMaXN0WzBdO1xyXG4gIGF1ZGlvITogSFRNTEF1ZGlvRWxlbWVudDtcclxuICBpc0xvYWRpbmchOiBib29sZWFuO1xyXG4gIGlzUGxheWluZyE6IGJvb2xlYW47XHJcblxyXG4gIGdldCB0cmFuc2xhdGlvbnMoKSB7XHJcbiAgICBpZiAoVFRTX0kxOE5bdGhpcy5sYW5ndWFnZV0pIHtcclxuICAgICAgcmV0dXJuIFRUU19JMThOW3RoaXMubGFuZ3VhZ2VdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBUVFNfSTE4Tlt0aGlzLmRlZmF1bHRMYW5ndWFnZV07XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzT3ZlcmZsb3coKSB7XHJcbiAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJykgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcclxuICAgIHJldHVybiB0ZXh0YXJlYT8uY2xpZW50SGVpZ2h0IDwgdGV4dGFyZWE/LnNjcm9sbEhlaWdodCA/IHRydWUgOiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgI3RleHRQbGF5U2VydmljZSA9IGluamVjdChUZXh0UGxheVNlcnZpY2UpO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMud2F0Y2hIdG1sTGFuZ0F0dHJpYnV0ZUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHBsYXlUZXh0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRleHQubGVuZ3RoID4gdGhpcy5tYXhDaGFyTGVuZ3RoID8gdGhpcy50ZXh0LnN1YnN0cmluZygwLCB0aGlzLm1heENoYXJMZW5ndGgpIDogdGhpcy50ZXh0O1xyXG5cclxuICAgIHRoaXMuI3RleHRQbGF5U2VydmljZVxyXG4gICAgICAucGxheSh0ZXh0LCB0aGlzLnNlbGVjdGVkVm9pY2UsIHRoaXMueEFwaUtleSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4geyB0aGlzLmlzTG9hZGluZyA9IGZhbHNlIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBhdWRpb1VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwocmVzKTtcclxuICAgICAgICAgIHRoaXMuYXVkaW8gPSBuZXcgQXVkaW8oYXVkaW9VcmwpO1xyXG4gICAgICAgICAgdGhpcy5hdWRpby5wbGF5KCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuYXVkaW8ub25lbmRlZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChhdWRpb1VybCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmF1ZGlvKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8ucGF1c2UoKTtcclxuICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2F0Y2hIdG1sTGFuZ0F0dHJpYnV0ZUNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0SHRtbExhbmdBdHRyaWJ1dGUoKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLmxhbmd1YWdlICYmIChsYW5ndWFnZSAhPT0gdGhpcy5kZWZhdWx0TGFuZ3VhZ2UpKSB7XHJcbiAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvbkxhbmdBdHRyaWJ1dGVDaGFuZ2UgPSAobXV0YXRpb25zTGlzdDogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xyXG4gICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcclxuICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09IHRoaXMubGFuZ0F0dHJpYnV0ZUtleSkge1xyXG4gICAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMuZ2V0SHRtbExhbmdBdHRyaWJ1dGUoKTtcclxuICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICBcclxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob25MYW5nQXR0cmlidXRlQ2hhbmdlKTtcclxuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgY29uZmlnID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFt0aGlzLmxhbmdBdHRyaWJ1dGVLZXldIH07XHJcbiAgICBvYnNlcnZlci5vYnNlcnZlKGh0bWxFbGVtZW50LCBjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIdG1sTGFuZ0F0dHJpYnV0ZSgpOiBzdHJpbmcge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHJldHVybiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpIGFzIGFueSkuZ2V0QXR0cmlidXRlKHRoaXMubGFuZ0F0dHJpYnV0ZUtleSkuc3BsaXQoJy0nKVswXTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRleHQtdG8tc3BlZWNoLXdyYXBwZXJcIj5cclxuICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjb2xvcj1cImFjY2VudFwiPlxyXG4gICAgPG1hdC1sYWJlbD57e3RyYW5zbGF0aW9ucy5zZWxlY3RWb2ljZX19PC9tYXQtbGFiZWw+XHJcbiAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJzZWxlY3RlZFZvaWNlXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2b2ljZSBvZiB2b2ljZUxpc3RcIiBbdmFsdWVdPVwidm9pY2VcIj5cclxuICAgICAgICB7eyB0cmFuc2xhdGlvbnMudm9pY2VMaXN0W3ZvaWNlXSB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInRleHQtdG8tc3BlZWNoLXRleHRhcmVhLXdyYXBwZXJcIj5cclxuICAgIDx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cInRleHRcIiBjbGFzcz1cInRleHQtdG8tc3BlZWNoLXRleHRhcmVhXCIgW3BsYWNlaG9sZGVyXT1cInRyYW5zbGF0aW9ucy5wbGFjZWhvbGRlclwiPjwvdGV4dGFyZWE+XHJcbiAgICA8ZGl2IFtjbGFzcy50ZXh0LW92ZXJmbG93XT1cImhhc092ZXJmbG93XCIgY2xhc3M9XCJ0ZXh0LXRvLXNwZWVjaC1jaGFyYWN0ZXJzXCI+XHJcbiAgICAgIHt7dGV4dD8ubGVuZ3RoID8/IDB9fS97e21heENoYXJMZW5ndGh9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ0ZXh0LXRvLXNwZWVjaC1hY3Rpb25zXCI+XHJcbiAgICA8ZGl2IFttYXRUb29sdGlwXT1cIiF0ZXh0ID8gdHJhbnNsYXRpb25zLnBsYXlEaXNhYmxlZCA6ICcnXCI+XHJcbiAgICAgIDxidXR0b24gW21hdFRvb2x0aXBdPVwiaXNQbGF5aW5nID8gdHJhbnNsYXRpb25zLnN0b3AgOiB0cmFuc2xhdGlvbnMucGxheVwiIFtkaXNhYmxlZF09XCIhdGV4dCB8fCBpc0xvYWRpbmdcIiAoY2xpY2spPVwicGxheVRleHQoKVwiIG1hdC1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhaXNMb2FkaW5nXCI+IHt7IGlzUGxheWluZyA/ICdzdG9wJyA6ICd2b2x1bWVfdXAnIH19ICA8L21hdC1pY29uPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZ1wiIFtkaWFtZXRlcl09XCIyMFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,26 +1,26 @@
1
1
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
2
  export const TTS_I18N = {
3
3
  en: {
4
- selectVoice: 'Voice',
5
- placeholder: 'Enter text to listen to a demonstration of the text-to-speech technology. Remember, this service can only be used in accordance with its terms of use (see the "Terms of Use" section). It is not permitted to use this service for texts that contain offensive, indecent, defamatory, misleading, hateful, or discriminatory statements. Violation of the terms of use may result in liability as stipulated by the laws of the Republic of Latvia.',
4
+ selectVoice: 'Demo voices (currently only for Latvian language)',
5
+ placeholder: 'Enter text to listen to a demonstration of the text-to-speech technology. Remember, this service can only be used in accordance with its terms of use (see the "Frequently asked questions" section). It is not permitted to use this service for texts that contain offensive, indecent, defamatory, misleading, hateful, or discriminatory statements. Violation of the terms of use may result in liability as stipulated by the laws of the Republic of Latvia. A maximum of 1000 characters will be spoken.',
6
6
  playDisabled: 'Enter text to play',
7
7
  play: 'Play',
8
8
  stop: 'Stop',
9
9
  voiceList: {
10
- sandra4: 'Sandra',
11
- 'lv-LV-general': 'Aleksandrs'
10
+ sandra4: 'Voice 1',
11
+ 'lv-LV-general': 'Voice 2'
12
12
  }
13
13
  },
14
14
  lv: {
15
- selectVoice: 'Balss',
16
- placeholder: 'Ievadi tekstu, lai noklausītos balss sintēzes tehnoloģijas demonstrāciju. Atceries, ka šo pakalpojumu var lietot tikai atbilstoši tā lietošanas noteikumiem (skatīt sadaļu “Lietošanas noteikumi”)! To nav atļauts izmantot tekstiem, kas satur aizskarošus, nepieklājīgus, apmelojošus, maldinošus, naidu vai diskrimināciju veicinošus apgalvojumus. Par lietošanas noteikumu pārkāpumu var iestāties LR likumos noteiktā atbildība.',
15
+ selectVoice: 'Demo balsis (šobrīd tikai Latviešu valodā)',
16
+ placeholder: 'Ievadi tekstu, lai noklausītos balss sintēzes tehnoloģijas demonstrāciju. Atceries, ka šo pakalpojumu var lietot tikai atbilstoši tā lietošanas noteikumiem (skatīt sadaļu “Biežāk uzdotie jautājumi”)! To nav atļauts izmantot tekstiem, kas satur aizskarošus, nepieklājīgus, apmelojošus, maldinošus, naidu vai diskrimināciju veicinošus apgalvojumus. Par lietošanas noteikumu pārkāpumu var iestāties LR likumos noteiktā atbildība. Tiks izrunāti ne vairāk kā 1000 simboli.',
17
17
  playDisabled: 'Ievadi tekstu, lai atskaņot to',
18
18
  play: 'Atskaņot',
19
19
  stop: 'Apstādināt',
20
20
  voiceList: {
21
- sandra4: 'Sandra',
22
- 'lv-LV-general': 'Aleksandrs'
21
+ sandra4: 'Balss 1',
22
+ 'lv-LV-general': 'Balss 2'
23
23
  }
24
24
  }
25
25
  };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHRzLWkxOG4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvdGV4dC10by1zcGVlY2gvdHJhbnNsYXRpb25zL3R0cy1pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQVE7SUFDM0IsRUFBRSxFQUFFO1FBQ0YsV0FBVyxFQUFFLE9BQU87UUFDcEIsV0FBVyxFQUFFLHViQUF1YjtRQUNwYyxZQUFZLEVBQUUsb0JBQW9CO1FBQ2xDLElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFLE1BQU07UUFDWixTQUFTLEVBQUU7WUFDVCxPQUFPLEVBQUUsUUFBUTtZQUNqQixlQUFlLEVBQUUsWUFBWTtTQUM5QjtLQUNGO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsV0FBVyxFQUFFLE9BQU87UUFDcEIsV0FBVyxFQUFFLHdhQUF3YTtRQUNyYixZQUFZLEVBQUUsZ0NBQWdDO1FBQzlDLElBQUksRUFBRSxVQUFVO1FBQ2hCLElBQUksRUFBRSxZQUFZO1FBQ2xCLFNBQVMsRUFBRTtZQUNULE9BQU8sRUFBRSxRQUFRO1lBQ2pCLGVBQWUsRUFBRSxZQUFZO1NBQzlCO0tBQ0Y7Q0FDRixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuZXhwb3J0IGNvbnN0IFRUU19JMThOOiBhbnkgPSB7XHJcbiAgZW46IHtcclxuICAgIHNlbGVjdFZvaWNlOiAnVm9pY2UnLFxyXG4gICAgcGxhY2Vob2xkZXI6ICdFbnRlciB0ZXh0IHRvIGxpc3RlbiB0byBhIGRlbW9uc3RyYXRpb24gb2YgdGhlIHRleHQtdG8tc3BlZWNoIHRlY2hub2xvZ3kuIFJlbWVtYmVyLCB0aGlzIHNlcnZpY2UgY2FuIG9ubHkgYmUgdXNlZCBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zIG9mIHVzZSAoc2VlIHRoZSBcIlRlcm1zIG9mIFVzZVwiIHNlY3Rpb24pLiBJdCBpcyBub3QgcGVybWl0dGVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgZm9yIHRleHRzIHRoYXQgY29udGFpbiBvZmZlbnNpdmUsIGluZGVjZW50LCBkZWZhbWF0b3J5LCBtaXNsZWFkaW5nLCBoYXRlZnVsLCBvciBkaXNjcmltaW5hdG9yeSBzdGF0ZW1lbnRzLiBWaW9sYXRpb24gb2YgdGhlIHRlcm1zIG9mIHVzZSBtYXkgcmVzdWx0IGluIGxpYWJpbGl0eSBhcyBzdGlwdWxhdGVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBSZXB1YmxpYyBvZiBMYXR2aWEuJyxcclxuICAgIHBsYXlEaXNhYmxlZDogJ0VudGVyIHRleHQgdG8gcGxheScsXHJcbiAgICBwbGF5OiAnUGxheScsXHJcbiAgICBzdG9wOiAnU3RvcCcsXHJcbiAgICB2b2ljZUxpc3Q6IHtcclxuICAgICAgc2FuZHJhNDogJ1NhbmRyYScsXHJcbiAgICAgICdsdi1MVi1nZW5lcmFsJzogJ0FsZWtzYW5kcnMnXHJcbiAgICB9XHJcbiAgfSxcclxuICBsdjoge1xyXG4gICAgc2VsZWN0Vm9pY2U6ICdCYWxzcycsXHJcbiAgICBwbGFjZWhvbGRlcjogJ0lldmFkaSB0ZWtzdHUsIGxhaSBub2tsYXVzxKt0b3MgYmFsc3Mgc2ludMSTemVzIHRlaG5vbG/Eo2lqYXMgZGVtb25zdHLEgWNpanUuIEF0Y2VyaWVzLCBrYSDFoW8gcGFrYWxwb2p1bXUgdmFyIGxpZXRvdCB0aWthaSBhdGJpbHN0b8WhaSB0xIEgbGlldG/FoWFuYXMgbm90ZWlrdW1pZW0gKHNrYXTEq3Qgc2FkYcS8dSDigJxMaWV0b8WhYW5hcyBub3RlaWt1bWnigJ0pISBUbyBuYXYgYXTEvGF1dHMgaXptYW50b3QgdGVrc3RpZW0sIGthcyBzYXR1ciBhaXpza2Fyb8WhdXMsIG5lcGlla2zEgWrEq2d1cywgYXBtZWxvam/FoXVzLCBtYWxkaW5vxaF1cywgbmFpZHUgdmFpIGRpc2tyaW1pbsSBY2lqdSB2ZWljaW5vxaF1cyBhcGdhbHZvanVtdXMuIFBhciBsaWV0b8WhYW5hcyBub3RlaWt1bXUgcMSBcmvEgXB1bXUgdmFyIGllc3TEgXRpZXMgTFIgbGlrdW1vcyBub3RlaWt0xIEgYXRiaWxkxKtiYS4nLFxyXG4gICAgcGxheURpc2FibGVkOiAnSWV2YWRpIHRla3N0dSwgbGFpIGF0c2thxYZvdCB0bycsXHJcbiAgICBwbGF5OiAnQXRza2HFhm90JyxcclxuICAgIHN0b3A6ICdBcHN0xIFkaW7EgXQnLFxyXG4gICAgdm9pY2VMaXN0OiB7XHJcbiAgICAgIHNhbmRyYTQ6ICdTYW5kcmEnLFxyXG4gICAgICAnbHYtTFYtZ2VuZXJhbCc6ICdBbGVrc2FuZHJzJ1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHRzLWkxOG4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvdGV4dC10by1zcGVlY2gvdHJhbnNsYXRpb25zL3R0cy1pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQVE7SUFDM0IsRUFBRSxFQUFFO1FBQ0YsV0FBVyxFQUFFLG1EQUFtRDtRQUNoRSxXQUFXLEVBQUUsa2ZBQWtmO1FBQy9mLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsTUFBTTtRQUNaLFNBQVMsRUFBRTtZQUNULE9BQU8sRUFBRSxTQUFTO1lBQ2xCLGVBQWUsRUFBRSxTQUFTO1NBQzNCO0tBQ0Y7SUFDRCxFQUFFLEVBQUU7UUFDRixXQUFXLEVBQUUsNENBQTRDO1FBQ3pELFdBQVcsRUFBRSxxZEFBcWQ7UUFDbGUsWUFBWSxFQUFFLGdDQUFnQztRQUM5QyxJQUFJLEVBQUUsVUFBVTtRQUNoQixJQUFJLEVBQUUsWUFBWTtRQUNsQixTQUFTLEVBQUU7WUFDVCxPQUFPLEVBQUUsU0FBUztZQUNsQixlQUFlLEVBQUUsU0FBUztTQUMzQjtLQUNGO0NBQ0YsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbmV4cG9ydCBjb25zdCBUVFNfSTE4TjogYW55ID0ge1xyXG4gIGVuOiB7XHJcbiAgICBzZWxlY3RWb2ljZTogJ0RlbW8gdm9pY2VzIChjdXJyZW50bHkgb25seSBmb3IgTGF0dmlhbiBsYW5ndWFnZSknLFxyXG4gICAgcGxhY2Vob2xkZXI6ICdFbnRlciB0ZXh0IHRvIGxpc3RlbiB0byBhIGRlbW9uc3RyYXRpb24gb2YgdGhlIHRleHQtdG8tc3BlZWNoIHRlY2hub2xvZ3kuIFJlbWVtYmVyLCB0aGlzIHNlcnZpY2UgY2FuIG9ubHkgYmUgdXNlZCBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zIG9mIHVzZSAoc2VlIHRoZSBcIkZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zXCIgc2VjdGlvbikuIEl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gdXNlIHRoaXMgc2VydmljZSBmb3IgdGV4dHMgdGhhdCBjb250YWluIG9mZmVuc2l2ZSwgaW5kZWNlbnQsIGRlZmFtYXRvcnksIG1pc2xlYWRpbmcsIGhhdGVmdWwsIG9yIGRpc2NyaW1pbmF0b3J5IHN0YXRlbWVudHMuIFZpb2xhdGlvbiBvZiB0aGUgdGVybXMgb2YgdXNlIG1heSByZXN1bHQgaW4gbGlhYmlsaXR5IGFzIHN0aXB1bGF0ZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFJlcHVibGljIG9mIExhdHZpYS4gQSBtYXhpbXVtIG9mIDEwMDAgY2hhcmFjdGVycyB3aWxsIGJlIHNwb2tlbi4nLFxyXG4gICAgcGxheURpc2FibGVkOiAnRW50ZXIgdGV4dCB0byBwbGF5JyxcclxuICAgIHBsYXk6ICdQbGF5JyxcclxuICAgIHN0b3A6ICdTdG9wJyxcclxuICAgIHZvaWNlTGlzdDoge1xyXG4gICAgICBzYW5kcmE0OiAnVm9pY2UgMScsXHJcbiAgICAgICdsdi1MVi1nZW5lcmFsJzogJ1ZvaWNlIDInXHJcbiAgICB9XHJcbiAgfSxcclxuICBsdjoge1xyXG4gICAgc2VsZWN0Vm9pY2U6ICdEZW1vIGJhbHNpcyAoxaFvYnLEq2QgdGlrYWkgTGF0dmllxaF1IHZhbG9kxIEpJyxcclxuICAgIHBsYWNlaG9sZGVyOiAnSWV2YWRpIHRla3N0dSwgbGFpIG5va2xhdXPEq3RvcyBiYWxzcyBzaW50xJN6ZXMgdGVobm9sb8SjaWphcyBkZW1vbnN0csSBY2lqdS4gQXRjZXJpZXMsIGthIMWhbyBwYWthbHBvanVtdSB2YXIgbGlldG90IHRpa2FpIGF0Ymlsc3RvxaFpIHTEgSBsaWV0b8WhYW5hcyBub3RlaWt1bWllbSAoc2thdMSrdCBzYWRhxLx1IOKAnEJpZcW+xIFrIHV6ZG90aWUgamF1dMSBanVtaeKAnSkhIFRvIG5hdiBhdMS8YXV0cyBpem1hbnRvdCB0ZWtzdGllbSwga2FzIHNhdHVyIGFpenNrYXJvxaF1cywgbmVwaWVrbMSBasSrZ3VzLCBhcG1lbG9qb8WhdXMsIG1hbGRpbm/FoXVzLCBuYWlkdSB2YWkgZGlza3JpbWluxIFjaWp1IHZlaWNpbm/FoXVzIGFwZ2Fsdm9qdW11cy4gUGFyIGxpZXRvxaFhbmFzIG5vdGVpa3VtdSBwxIFya8SBcHVtdSB2YXIgaWVzdMSBdGllcyBMUiBsaWt1bW9zIG5vdGVpa3TEgSBhdGJpbGTEq2JhLiBUaWtzIGl6cnVuxIF0aSBuZSB2YWlyxIFrIGvEgSAxMDAwIHNpbWJvbGkuJyxcclxuICAgIHBsYXlEaXNhYmxlZDogJ0lldmFkaSB0ZWtzdHUsIGxhaSBhdHNrYcWGb3QgdG8nLFxyXG4gICAgcGxheTogJ0F0c2thxYZvdCcsXHJcbiAgICBzdG9wOiAnQXBzdMSBZGluxIF0JyxcclxuICAgIHZvaWNlTGlzdDoge1xyXG4gICAgICBzYW5kcmE0OiAnQmFsc3MgMScsXHJcbiAgICAgICdsdi1MVi1nZW5lcmFsJzogJ0JhbHNzIDInXHJcbiAgICB9XHJcbiAgfVxyXG59Il19
@@ -5681,31 +5681,31 @@ class TextPlayService {
5681
5681
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
5682
5682
  const TTS_I18N = {
5683
5683
  en: {
5684
- selectVoice: 'Voice',
5685
- placeholder: 'Enter text to listen to a demonstration of the text-to-speech technology. Remember, this service can only be used in accordance with its terms of use (see the "Terms of Use" section). It is not permitted to use this service for texts that contain offensive, indecent, defamatory, misleading, hateful, or discriminatory statements. Violation of the terms of use may result in liability as stipulated by the laws of the Republic of Latvia.',
5684
+ selectVoice: 'Demo voices (currently only for Latvian language)',
5685
+ placeholder: 'Enter text to listen to a demonstration of the text-to-speech technology. Remember, this service can only be used in accordance with its terms of use (see the "Frequently asked questions" section). It is not permitted to use this service for texts that contain offensive, indecent, defamatory, misleading, hateful, or discriminatory statements. Violation of the terms of use may result in liability as stipulated by the laws of the Republic of Latvia. A maximum of 1000 characters will be spoken.',
5686
5686
  playDisabled: 'Enter text to play',
5687
5687
  play: 'Play',
5688
5688
  stop: 'Stop',
5689
5689
  voiceList: {
5690
- sandra4: 'Sandra',
5691
- 'lv-LV-general': 'Aleksandrs'
5690
+ sandra4: 'Voice 1',
5691
+ 'lv-LV-general': 'Voice 2'
5692
5692
  }
5693
5693
  },
5694
5694
  lv: {
5695
- selectVoice: 'Balss',
5696
- placeholder: 'Ievadi tekstu, lai noklausītos balss sintēzes tehnoloģijas demonstrāciju. Atceries, ka šo pakalpojumu var lietot tikai atbilstoši tā lietošanas noteikumiem (skatīt sadaļu “Lietošanas noteikumi”)! To nav atļauts izmantot tekstiem, kas satur aizskarošus, nepieklājīgus, apmelojošus, maldinošus, naidu vai diskrimināciju veicinošus apgalvojumus. Par lietošanas noteikumu pārkāpumu var iestāties LR likumos noteiktā atbildība.',
5695
+ selectVoice: 'Demo balsis (šobrīd tikai Latviešu valodā)',
5696
+ placeholder: 'Ievadi tekstu, lai noklausītos balss sintēzes tehnoloģijas demonstrāciju. Atceries, ka šo pakalpojumu var lietot tikai atbilstoši tā lietošanas noteikumiem (skatīt sadaļu “Biežāk uzdotie jautājumi”)! To nav atļauts izmantot tekstiem, kas satur aizskarošus, nepieklājīgus, apmelojošus, maldinošus, naidu vai diskrimināciju veicinošus apgalvojumus. Par lietošanas noteikumu pārkāpumu var iestāties LR likumos noteiktā atbildība. Tiks izrunāti ne vairāk kā 1000 simboli.',
5697
5697
  playDisabled: 'Ievadi tekstu, lai atskaņot to',
5698
5698
  play: 'Atskaņot',
5699
5699
  stop: 'Apstādināt',
5700
5700
  voiceList: {
5701
- sandra4: 'Sandra',
5702
- 'lv-LV-general': 'Aleksandrs'
5701
+ sandra4: 'Balss 1',
5702
+ 'lv-LV-general': 'Balss 2'
5703
5703
  }
5704
5704
  }
5705
5705
  };
5706
5706
 
5707
5707
  function TextToSpeechComponent_mat_option_5_Template(rf, ctx) { if (rf & 1) {
5708
- i0.ɵɵelementStart(0, "mat-option", 11);
5708
+ i0.ɵɵelementStart(0, "mat-option", 12);
5709
5709
  i0.ɵɵtext(1);
5710
5710
  i0.ɵɵelementEnd();
5711
5711
  } if (rf & 2) {
@@ -5715,7 +5715,7 @@ function TextToSpeechComponent_mat_option_5_Template(rf, ctx) { if (rf & 1) {
5715
5715
  i0.ɵɵadvance();
5716
5716
  i0.ɵɵtextInterpolate1(" ", ctx_r1.translations.voiceList[voice_r1], " ");
5717
5717
  } }
5718
- function TextToSpeechComponent_mat_icon_11_Template(rf, ctx) { if (rf & 1) {
5718
+ function TextToSpeechComponent_mat_icon_13_Template(rf, ctx) { if (rf & 1) {
5719
5719
  i0.ɵɵelementStart(0, "mat-icon");
5720
5720
  i0.ɵɵtext(1);
5721
5721
  i0.ɵɵelementEnd();
@@ -5724,13 +5724,14 @@ function TextToSpeechComponent_mat_icon_11_Template(rf, ctx) { if (rf & 1) {
5724
5724
  i0.ɵɵadvance();
5725
5725
  i0.ɵɵtextInterpolate1(" ", ctx_r1.isPlaying ? "stop" : "volume_up", " ");
5726
5726
  } }
5727
- function TextToSpeechComponent_mat_spinner_12_Template(rf, ctx) { if (rf & 1) {
5728
- i0.ɵɵelement(0, "mat-spinner", 12);
5727
+ function TextToSpeechComponent_mat_spinner_14_Template(rf, ctx) { if (rf & 1) {
5728
+ i0.ɵɵelement(0, "mat-spinner", 13);
5729
5729
  } if (rf & 2) {
5730
5730
  i0.ɵɵproperty("diameter", 20);
5731
5731
  } }
5732
5732
  class TextToSpeechComponent {
5733
5733
  constructor() {
5734
+ this.maxCharLength = 1000;
5734
5735
  this.langAttributeKey = 'lang';
5735
5736
  this.defaultLanguage = 'lv';
5736
5737
  this.voiceList = ['sandra4', 'lv-LV-general'];
@@ -5743,6 +5744,10 @@ class TextToSpeechComponent {
5743
5744
  }
5744
5745
  return TTS_I18N[this.defaultLanguage];
5745
5746
  }
5747
+ get hasOverflow() {
5748
+ const textarea = document.querySelector('textarea');
5749
+ return textarea?.clientHeight < textarea?.scrollHeight ? true : false;
5750
+ }
5746
5751
  #textPlayService;
5747
5752
  ngOnInit() {
5748
5753
  this.watchHtmlLangAttributeChanges();
@@ -5753,8 +5758,9 @@ class TextToSpeechComponent {
5753
5758
  return;
5754
5759
  }
5755
5760
  this.isLoading = true;
5761
+ const text = this.text.length > this.maxCharLength ? this.text.substring(0, this.maxCharLength) : this.text;
5756
5762
  this.#textPlayService
5757
- .play(this.text, this.selectedVoice, this.xApiKey)
5763
+ .play(text, this.selectedVoice, this.xApiKey)
5758
5764
  .pipe(finalize(() => { this.isLoading = false; }))
5759
5765
  .subscribe({
5760
5766
  next: (res) => {
@@ -5798,7 +5804,7 @@ class TextToSpeechComponent {
5798
5804
  return document.querySelector('html').getAttribute(this.langAttributeKey).split('-')[0];
5799
5805
  }
5800
5806
  static { this.ɵfac = function TextToSpeechComponent_Factory(t) { return new (t || TextToSpeechComponent)(); }; }
5801
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TextToSpeechComponent, selectors: [["lib-text-to-speech"]], inputs: { xApiKey: "xApiKey", language: "language" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 13, vars: 10, consts: [[1, "text-to-speech-wrapper"], ["appearance", "outline", "color", "accent"], [3, "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-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) {
5807
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TextToSpeechComponent, selectors: [["lib-text-to-speech"]], inputs: { xApiKey: "xApiKey", language: "language", maxCharLength: "maxCharLength" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 15, vars: 14, consts: [[1, "text-to-speech-wrapper"], ["appearance", "outline", "color", "accent"], [3, "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) {
5802
5808
  i0.ɵɵelementStart(0, "div", 0)(1, "mat-form-field", 1)(2, "mat-label");
5803
5809
  i0.ɵɵtext(3);
5804
5810
  i0.ɵɵelementEnd();
@@ -5808,12 +5814,16 @@ class TextToSpeechComponent {
5808
5814
  i0.ɵɵelementEnd()();
5809
5815
  i0.ɵɵelementStart(6, "div", 4)(7, "textarea", 5);
5810
5816
  i0.ɵɵtwoWayListener("ngModelChange", function TextToSpeechComponent_Template_textarea_ngModelChange_7_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.text, $event) || (ctx.text = $event); return $event; });
5817
+ i0.ɵɵelementEnd();
5818
+ i0.ɵɵelementStart(8, "div", 6);
5819
+ i0.ɵɵtext(9);
5811
5820
  i0.ɵɵelementEnd()();
5812
- i0.ɵɵelementStart(8, "div", 6)(9, "div", 7)(10, "button", 8);
5813
- i0.ɵɵlistener("click", function TextToSpeechComponent_Template_button_click_10_listener() { return ctx.playText(); });
5814
- i0.ɵɵtemplate(11, TextToSpeechComponent_mat_icon_11_Template, 2, 1, "mat-icon", 9)(12, TextToSpeechComponent_mat_spinner_12_Template, 1, 1, "mat-spinner", 10);
5821
+ i0.ɵɵelementStart(10, "div", 7)(11, "div", 8)(12, "button", 9);
5822
+ i0.ɵɵlistener("click", function TextToSpeechComponent_Template_button_click_12_listener() { return ctx.playText(); });
5823
+ i0.ɵɵtemplate(13, TextToSpeechComponent_mat_icon_13_Template, 2, 1, "mat-icon", 10)(14, TextToSpeechComponent_mat_spinner_14_Template, 1, 1, "mat-spinner", 11);
5815
5824
  i0.ɵɵelementEnd()()()();
5816
5825
  } if (rf & 2) {
5826
+ let tmp_6_0;
5817
5827
  i0.ɵɵadvance(3);
5818
5828
  i0.ɵɵtextInterpolate(ctx.translations.selectVoice);
5819
5829
  i0.ɵɵadvance();
@@ -5823,6 +5833,10 @@ class TextToSpeechComponent {
5823
5833
  i0.ɵɵadvance(2);
5824
5834
  i0.ɵɵtwoWayProperty("ngModel", ctx.text);
5825
5835
  i0.ɵɵproperty("placeholder", ctx.translations.placeholder);
5836
+ i0.ɵɵadvance();
5837
+ i0.ɵɵclassProp("text-overflow", ctx.hasOverflow);
5838
+ i0.ɵɵadvance();
5839
+ i0.ɵɵtextInterpolate2(" ", (tmp_6_0 = ctx.text == null ? null : ctx.text.length) !== null && tmp_6_0 !== undefined ? tmp_6_0 : 0, "/", ctx.maxCharLength, " ");
5826
5840
  i0.ɵɵadvance(2);
5827
5841
  i0.ɵɵproperty("matTooltip", !ctx.text ? ctx.translations.playDisabled : "");
5828
5842
  i0.ɵɵadvance();
@@ -5834,7 +5848,7 @@ class TextToSpeechComponent {
5834
5848
  } }, dependencies: [CommonModule, i2$2.NgForOf, i2$2.NgIf, MatIconButton,
5835
5849
  MatIcon,
5836
5850
  FormsModule, i4$1.DefaultValueAccessor, i4$1.NgControlStatus, i4$1.NgModel, MatProgressSpinner,
5837
- MatTooltipModule, i2$1.MatTooltip, MatFormFieldModule, i4.MatFormField, i4.MatLabel, MatSelectModule, i7.MatSelect, i8.MatOption], 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%]{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)}"] }); }
5851
+ MatTooltipModule, i2$1.MatTooltip, MatFormFieldModule, i4.MatFormField, i4.MatLabel, MatSelectModule, i7.MatSelect, i8.MatOption], 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:0;bottom:0;margin:5px;font-size:14px;color:var(--base-65)}.text-overflow[_ngcontent-%COMP%]{right:30px}"] }); }
5838
5852
  }
5839
5853
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TextToSpeechComponent, [{
5840
5854
  type: Component,
@@ -5848,11 +5862,13 @@ class TextToSpeechComponent {
5848
5862
  MatTooltipModule,
5849
5863
  MatFormFieldModule,
5850
5864
  MatSelectModule
5851
- ], template: "<div class=\"text-to-speech-wrapper\">\r\n <mat-form-field appearance=\"outline\" color=\"accent\">\r\n <mat-label>{{translations.selectVoice}}</mat-label>\r\n <mat-select [(value)]=\"selectedVoice\">\r\n <mat-option *ngFor=\"let voice of voiceList\" [value]=\"voice\">\r\n {{ translations.voiceList[voice] }}\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]=\"translations.placeholder\"></textarea>\r\n </div>\r\n\r\n <div class=\"text-to-speech-actions\">\r\n <div [matTooltip]=\"!text ? translations.playDisabled : ''\">\r\n <button [matTooltip]=\"isPlaying ? translations.stop : translations.play\" [disabled]=\"!text || isLoading\" (click)=\"playText()\" 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{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)}\n"] }]
5865
+ ], template: "<div class=\"text-to-speech-wrapper\">\r\n <mat-form-field appearance=\"outline\" color=\"accent\">\r\n <mat-label>{{translations.selectVoice}}</mat-label>\r\n <mat-select [(value)]=\"selectedVoice\">\r\n <mat-option *ngFor=\"let voice of voiceList\" [value]=\"voice\">\r\n {{ translations.voiceList[voice] }}\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]=\"translations.placeholder\"></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 ? translations.playDisabled : ''\">\r\n <button [matTooltip]=\"isPlaying ? translations.stop : translations.play\" [disabled]=\"!text || isLoading\" (click)=\"playText()\" 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:0;bottom:0;margin:5px;font-size:14px;color:var(--base-65)}.text-overflow{right:30px}\n"] }]
5852
5866
  }], null, { xApiKey: [{
5853
5867
  type: Input
5854
5868
  }], language: [{
5855
5869
  type: Input
5870
+ }], maxCharLength: [{
5871
+ type: Input
5856
5872
  }] }); })();
5857
5873
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TextToSpeechComponent, { className: "TextToSpeechComponent", filePath: "lib\\text-to-speech\\text-to-speech.component.ts", lineNumber: 31 }); })();
5858
5874