@tilde-nlp/ngx-common 4.1.27 → 4.1.28

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.
@@ -15,7 +15,13 @@ import * as i9 from "../../shared/llm-textarea/llm-textarea.component";
15
15
  import * as i10 from "@ngx-translate/core";
16
16
  export class CreateSummaryComponent {
17
17
  get isCreatingDisabled() {
18
- return this.isLoading || !this.text || !this.summaryQuotaLeft || this.isCharactersLimitExceeded;
18
+ return this.isLoading || !this.initialText || !this.summaryQuotaLeft;
19
+ }
20
+ get defaultErrorMessage() {
21
+ return this.llmHelperService.getDefaultErrorMessage();
22
+ }
23
+ get showMissingQuotaMessage() {
24
+ return !this.summaryQuotaLeft && !this.missingQuotaMessageClosed;
19
25
  }
20
26
  constructor(llmService, llmHelperService, quotaService, plausibleService, data) {
21
27
  this.llmService = llmService;
@@ -23,30 +29,33 @@ export class CreateSummaryComponent {
23
29
  this.quotaService = quotaService;
24
30
  this.plausibleService = plausibleService;
25
31
  this.data = data;
32
+ this.summarizedText = '';
33
+ this.manuallyEditedText = '';
26
34
  this.trialRequestCount = 15;
27
- this.summaryQuotaLocalStorageKey = 'LLM_SUMMARY_USAGE_KEY';
35
+ this.missingQuotaMessageClosed = false;
28
36
  }
29
37
  ngOnInit() {
30
- this.text = this.data.text;
38
+ this.initialText = this.data.text;
31
39
  this.language = this.data.language;
32
40
  this.subscriptionUrl = this.llmService.llmConfiguration.subscriptionUrl;
33
41
  this.reachedQuotaMessage = this.llmHelperService.getReachedQuotaMessage();
34
- this.createSummary();
35
42
  this.refreshQuota();
36
43
  }
37
44
  createSummary() {
38
45
  this.isLoading = true;
39
46
  this.subscription = this.llmService
40
- .summarize({ text: this.text, language: this.language })
47
+ .summarize({ text: this.manuallyEditedText !== '' ? this.manuallyEditedText : this.initialText, language: this.language })
41
48
  .pipe(finalize(() => (this.isLoading = false)))
42
49
  .subscribe({
43
50
  next: (response) => {
44
- this.text = response;
45
- this.showErrorMessage = false;
51
+ this.isSummarized = true;
52
+ this.summarizedText = response;
53
+ this.manuallyEditedText = '';
54
+ this.showDefaultErrorMessage = false;
46
55
  this.refreshQuota(true);
47
56
  },
48
57
  error: () => {
49
- this.showErrorMessage = true;
58
+ this.showDefaultErrorMessage = true;
50
59
  }
51
60
  });
52
61
  }
@@ -59,36 +68,39 @@ export class CreateSummaryComponent {
59
68
  dislikeEvent() {
60
69
  this.plausibleService.summaryDislikeEvent();
61
70
  }
62
- checkCharactersLimit() {
63
- if (this.text.length > 10000) {
64
- this.isCharactersLimitExceeded = true;
65
- return;
66
- }
67
- this.isCharactersLimitExceeded = false;
71
+ textEditEvent(text) {
72
+ this.manuallyEditedText = text;
73
+ this.initialText = text;
68
74
  }
69
75
  refreshQuota(decrease) {
70
76
  this.quotaService.getQuotaUsage().pipe(finalize(() => this.setQuotaMessage())).subscribe({
71
77
  next: (response) => {
72
78
  const quota = response.usage.find((item) => item.quotaType === QuotaType.LLM_REQUESTS);
73
79
  if (!quota) {
74
- this.summaryQuotaLeft = this.llmHelperService.setQuotaLocalStorageUsage(this.summaryQuotaLocalStorageKey, decrease);
80
+ this.setQuotaFromLocalStorage(decrease);
75
81
  return;
76
82
  }
77
83
  this.summaryQuotaLeft = quota.quotaRemaining;
78
84
  },
85
+ error: () => {
86
+ this.setQuotaFromLocalStorage(decrease);
87
+ }
79
88
  });
80
89
  }
81
90
  setQuotaMessage() {
82
91
  this.showRemainingQuotaMessage = this.summaryQuotaLeft <= this.trialRequestCount;
83
92
  }
93
+ setQuotaFromLocalStorage(decrease) {
94
+ this.summaryQuotaLeft = this.llmHelperService.setQuotaLocalStorageUsage(decrease);
95
+ }
84
96
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateSummaryComponent, deps: [{ token: i1.LLMService }, { token: i2.LLMHelperService }, { token: i3.QuotaService }, { token: i4.PlausibleService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
85
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CreateSummaryComponent, selector: "lib-create-summary", ngImport: i0, template: "<h1 mat-dialog-title>{{ \"LLM.SUMMARY_MODAL.TITLE\" | translate }}</h1>\r\n<div mat-dialog-content>\r\n <p>{{ \"LLM.SUMMARY_MODAL.DESCRIPTION\" | translate }}</p>\r\n\r\n <lib-tld-notification-message *ngIf=\"!summaryQuotaLeft\" [message]=\"reachedQuotaMessage\"></lib-tld-notification-message>\r\n\r\n <lib-llm-textarea [showErrorMessage]=\"showErrorMessage\" [text]=\"text\" [disabled]=\"isLoading || !summaryQuotaLeft\" (textEditEvent)=\"text = $event; checkCharactersLimit()\" (copyEvent)=\"copyEvent()\" (dislikeEvent)=\"dislikeEvent()\"></lib-llm-textarea>\r\n</div>\r\n<div class=\"llm-summary-actions-wrapper\" mat-dialog-actions>\r\n <div *ngIf=\"showRemainingQuotaMessage\" [innerHTML]=\"'LLM.SUMMARY_MODAL.LIMIT' | translate: { limit: summaryQuotaLeft, subscriptionUrl: subscriptionUrl }\"></div>\r\n\r\n <div [class.w-full]=\"!showRemainingQuotaMessage\" class=\"llm-summary-actions\">\r\n <button *ngIf=\"isLoading; else closeButton\" mat-button color=\"accent\" (click)=\"cancel()\">\r\n {{ \"LLM.SUMMARY_MODAL.CANCEL\" | translate }}\r\n </button>\r\n\r\n <ng-template #closeButton>\r\n <button mat-button color=\"accent\" [mat-dialog-close]=\"null\">\r\n {{ \"LLM.SUMMARY_MODAL.CLOSE\" | translate }}\r\n </button>\r\n </ng-template>\r\n \r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"createSummary()\"\r\n [disabled]=\"isCreatingDisabled\"\r\n >\r\n {{\r\n (isLoading\r\n ? \"LLM.SUMMARY_MODAL.CREATING\"\r\n : \"LLM.SUMMARY_MODAL.REGENERATE\"\r\n ) | translate\r\n }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep .message-body{font-size:14px}:host ::ng-deep .notification-message-container{margin:0 0 16px}:host ::ng-deep .items-container{margin-left:0!important}:host ::ng-deep .text-container{margin-right:0!important}.w-full{width:100%}.llm-summary-actions{display:flex;justify-content:end}.llm-summary-actions-wrapper{display:flex;justify-content:space-between;margin:0 1rem .5rem}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i7.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i7.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i7.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i8.NotificationMessageComponent, selector: "lib-tld-notification-message", inputs: ["message", "inline"], outputs: ["buttonClicked", "closeClicked", "linkClicked"] }, { kind: "component", type: i9.LLMTextareaComponent, selector: "lib-llm-textarea", inputs: ["text", "disabled", "showErrorMessage"], outputs: ["textEditEvent", "dislikeEvent", "copyEvent"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CreateSummaryComponent, selector: "lib-create-summary", ngImport: i0, template: "<h1 mat-dialog-title>{{ \"LLM.SUMMARY_MODAL.TITLE\" | translate }}</h1>\r\n<div mat-dialog-content>\r\n <p>{{ \"LLM.SUMMARY_MODAL.DESCRIPTION\" | translate }}</p>\r\n\r\n <lib-tld-notification-message *ngIf=\"showMissingQuotaMessage\" [message]=\"reachedQuotaMessage\" (closeClicked)=\"missingQuotaMessageClosed = true\"></lib-tld-notification-message>\r\n <lib-tld-notification-message *ngIf=\"showDefaultErrorMessage\" [message]=\"defaultErrorMessage\" (closeClicked)=\"showDefaultErrorMessage = false\"></lib-tld-notification-message>\r\n\r\n <lib-llm-textarea [text]=\"summarizedText !== '' ? summarizedText : initialText\" [disabled]=\"isLoading || !summaryQuotaLeft\" (textEditEvent)=\"textEditEvent($event)\" (copyEvent)=\"copyEvent()\" (dislikeEvent)=\"dislikeEvent()\"></lib-llm-textarea>\r\n</div>\r\n<div class=\"llm-summary-actions-wrapper\" mat-dialog-actions>\r\n <div *ngIf=\"showRemainingQuotaMessage\" [innerHTML]=\"'LLM.SUMMARY_MODAL.LIMIT' | translate: { limit: summaryQuotaLeft, subscriptionUrl: subscriptionUrl }\"></div>\r\n\r\n <div [class.w-full]=\"!showRemainingQuotaMessage\" class=\"llm-summary-actions\">\r\n <button *ngIf=\"isLoading; else closeButton\" mat-button color=\"accent\" (click)=\"cancel()\">\r\n {{ \"LLM.SUMMARY_MODAL.CANCEL\" | translate }}\r\n </button>\r\n\r\n <ng-template #closeButton>\r\n <button mat-button color=\"accent\" [mat-dialog-close]=\"null\">\r\n {{ \"LLM.SUMMARY_MODAL.CLOSE\" | translate }}\r\n </button>\r\n </ng-template>\r\n \r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"createSummary()\"\r\n [disabled]=\"isCreatingDisabled\"\r\n >\r\n {{\r\n (!isSummarized\r\n ? \"LLM.SUMMARY_MODAL.CREATE\"\r\n : \"LLM.SUMMARY_MODAL.REGENERATE\"\r\n ) | translate\r\n }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep .message-body{font-size:14px}:host ::ng-deep .notification-message-container{margin:0 0 16px}:host ::ng-deep .items-container{margin-left:0!important}:host ::ng-deep .text-container{margin-right:0!important}.w-full{width:100%}.llm-summary-actions{display:flex;justify-content:end}.llm-summary-actions-wrapper{display:flex;justify-content:space-between;margin:0 1rem .5rem}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i7.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i7.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i7.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i8.NotificationMessageComponent, selector: "lib-tld-notification-message", inputs: ["message", "inline"], outputs: ["buttonClicked", "closeClicked", "linkClicked"] }, { kind: "component", type: i9.LLMTextareaComponent, selector: "lib-llm-textarea", inputs: ["text", "disabled"], outputs: ["textEditEvent", "dislikeEvent", "copyEvent"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] }); }
86
98
  }
87
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateSummaryComponent, decorators: [{
88
100
  type: Component,
89
- args: [{ selector: 'lib-create-summary', template: "<h1 mat-dialog-title>{{ \"LLM.SUMMARY_MODAL.TITLE\" | translate }}</h1>\r\n<div mat-dialog-content>\r\n <p>{{ \"LLM.SUMMARY_MODAL.DESCRIPTION\" | translate }}</p>\r\n\r\n <lib-tld-notification-message *ngIf=\"!summaryQuotaLeft\" [message]=\"reachedQuotaMessage\"></lib-tld-notification-message>\r\n\r\n <lib-llm-textarea [showErrorMessage]=\"showErrorMessage\" [text]=\"text\" [disabled]=\"isLoading || !summaryQuotaLeft\" (textEditEvent)=\"text = $event; checkCharactersLimit()\" (copyEvent)=\"copyEvent()\" (dislikeEvent)=\"dislikeEvent()\"></lib-llm-textarea>\r\n</div>\r\n<div class=\"llm-summary-actions-wrapper\" mat-dialog-actions>\r\n <div *ngIf=\"showRemainingQuotaMessage\" [innerHTML]=\"'LLM.SUMMARY_MODAL.LIMIT' | translate: { limit: summaryQuotaLeft, subscriptionUrl: subscriptionUrl }\"></div>\r\n\r\n <div [class.w-full]=\"!showRemainingQuotaMessage\" class=\"llm-summary-actions\">\r\n <button *ngIf=\"isLoading; else closeButton\" mat-button color=\"accent\" (click)=\"cancel()\">\r\n {{ \"LLM.SUMMARY_MODAL.CANCEL\" | translate }}\r\n </button>\r\n\r\n <ng-template #closeButton>\r\n <button mat-button color=\"accent\" [mat-dialog-close]=\"null\">\r\n {{ \"LLM.SUMMARY_MODAL.CLOSE\" | translate }}\r\n </button>\r\n </ng-template>\r\n \r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"createSummary()\"\r\n [disabled]=\"isCreatingDisabled\"\r\n >\r\n {{\r\n (isLoading\r\n ? \"LLM.SUMMARY_MODAL.CREATING\"\r\n : \"LLM.SUMMARY_MODAL.REGENERATE\"\r\n ) | translate\r\n }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep .message-body{font-size:14px}:host ::ng-deep .notification-message-container{margin:0 0 16px}:host ::ng-deep .items-container{margin-left:0!important}:host ::ng-deep .text-container{margin-right:0!important}.w-full{width:100%}.llm-summary-actions{display:flex;justify-content:end}.llm-summary-actions-wrapper{display:flex;justify-content:space-between;margin:0 1rem .5rem}\n"] }]
101
+ args: [{ selector: 'lib-create-summary', template: "<h1 mat-dialog-title>{{ \"LLM.SUMMARY_MODAL.TITLE\" | translate }}</h1>\r\n<div mat-dialog-content>\r\n <p>{{ \"LLM.SUMMARY_MODAL.DESCRIPTION\" | translate }}</p>\r\n\r\n <lib-tld-notification-message *ngIf=\"showMissingQuotaMessage\" [message]=\"reachedQuotaMessage\" (closeClicked)=\"missingQuotaMessageClosed = true\"></lib-tld-notification-message>\r\n <lib-tld-notification-message *ngIf=\"showDefaultErrorMessage\" [message]=\"defaultErrorMessage\" (closeClicked)=\"showDefaultErrorMessage = false\"></lib-tld-notification-message>\r\n\r\n <lib-llm-textarea [text]=\"summarizedText !== '' ? summarizedText : initialText\" [disabled]=\"isLoading || !summaryQuotaLeft\" (textEditEvent)=\"textEditEvent($event)\" (copyEvent)=\"copyEvent()\" (dislikeEvent)=\"dislikeEvent()\"></lib-llm-textarea>\r\n</div>\r\n<div class=\"llm-summary-actions-wrapper\" mat-dialog-actions>\r\n <div *ngIf=\"showRemainingQuotaMessage\" [innerHTML]=\"'LLM.SUMMARY_MODAL.LIMIT' | translate: { limit: summaryQuotaLeft, subscriptionUrl: subscriptionUrl }\"></div>\r\n\r\n <div [class.w-full]=\"!showRemainingQuotaMessage\" class=\"llm-summary-actions\">\r\n <button *ngIf=\"isLoading; else closeButton\" mat-button color=\"accent\" (click)=\"cancel()\">\r\n {{ \"LLM.SUMMARY_MODAL.CANCEL\" | translate }}\r\n </button>\r\n\r\n <ng-template #closeButton>\r\n <button mat-button color=\"accent\" [mat-dialog-close]=\"null\">\r\n {{ \"LLM.SUMMARY_MODAL.CLOSE\" | translate }}\r\n </button>\r\n </ng-template>\r\n \r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"createSummary()\"\r\n [disabled]=\"isCreatingDisabled\"\r\n >\r\n {{\r\n (!isSummarized\r\n ? \"LLM.SUMMARY_MODAL.CREATE\"\r\n : \"LLM.SUMMARY_MODAL.REGENERATE\"\r\n ) | translate\r\n }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep .message-body{font-size:14px}:host ::ng-deep .notification-message-container{margin:0 0 16px}:host ::ng-deep .items-container{margin-left:0!important}:host ::ng-deep .text-container{margin-right:0!important}.w-full{width:100%}.llm-summary-actions{display:flex;justify-content:end}.llm-summary-actions-wrapper{display:flex;justify-content:space-between;margin:0 1rem .5rem}\n"] }]
90
102
  }], ctorParameters: function () { return [{ type: i1.LLMService }, { type: i2.LLMHelperService }, { type: i3.QuotaService }, { type: i4.PlausibleService }, { type: undefined, decorators: [{
91
103
  type: Inject,
92
104
  args: [MAT_DIALOG_DATA]
93
105
  }] }]; } });
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2xsbS9jb21wb25lbnRzL2NyZWF0ZS1zdW1tYXJ5L2NyZWF0ZS1zdW1tYXJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vY29tcG9uZW50cy9jcmVhdGUtc3VtbWFyeS9jcmVhdGUtc3VtbWFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHM0QsT0FBTyxFQUFnQixRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBVTVELE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDO0lBQ2xHLENBQUM7SUFFRCxZQUNtQixVQUFzQixFQUN0QixnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xCLElBQWE7UUFKN0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBUztRQVovQixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDdkIsZ0NBQTJCLEdBQUcsdUJBQXVCLENBQUM7SUFZcEUsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQztRQUN4RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDMUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVU7YUFDaEMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzlDLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztZQUN0QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBa0I7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3ZGLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRXZGLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3BILE9BQU87aUJBQ1I7Z0JBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDL0MsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ25GLENBQUM7K0dBL0ZVLHNCQUFzQix3SUEyQnZCLGVBQWU7bUdBM0JkLHNCQUFzQiwwRENmbkMsNm5EQXFDQTs7NEZEdEJhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7OzBCQStCM0IsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBMTE1EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xsbS1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgTExNU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xsbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBRdW90YVNlcnZpY2UsIFF1b3RhVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL25vdGlmaWNhdGlvbi1tZXNzYWdlJztcclxuaW1wb3J0IHsgTExNSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xsbS1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBsYXVzaWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wbGF1c2libGUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jcmVhdGUtc3VtbWFyeScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1zdW1tYXJ5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtc3VtbWFyeS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlU3VtbWFyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nITogYm9vbGVhbjtcclxuICBzaG93RXJyb3JNZXNzYWdlITogYm9vbGVhbjtcclxuICBzaG93UmVtYWluaW5nUXVvdGFNZXNzYWdlITogYm9vbGVhbjtcclxuICBpc1N1bW1hcml6aW5nQ2FuY2VsZWQhOiBib29sZWFuO1xyXG4gIGlzQ2hhcmFjdGVyc0xpbWl0RXhjZWVkZWQhOiBib29sZWFuO1xyXG4gIHRleHQhOiBzdHJpbmc7XHJcbiAgbGFuZ3VhZ2UhOiBzdHJpbmc7XHJcbiAgc3VtbWFyeVF1b3RhTGVmdCE6IG51bWJlcjtcclxuICBzdWJzY3JpcHRpb25VcmwhOiBzdHJpbmc7XHJcblxyXG4gIHJlYWNoZWRRdW90YU1lc3NhZ2UhOiBOb3RpZmljYXRpb25NZXNzYWdlO1xyXG5cclxuICBzdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJpYWxSZXF1ZXN0Q291bnQgPSAxNTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHN1bW1hcnlRdW90YUxvY2FsU3RvcmFnZUtleSA9ICdMTE1fU1VNTUFSWV9VU0FHRV9LRVknO1xyXG5cclxuICBnZXQgaXNDcmVhdGluZ0Rpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nIHx8ICF0aGlzLnRleHQgfHwgIXRoaXMuc3VtbWFyeVF1b3RhTGVmdCB8fCB0aGlzLmlzQ2hhcmFjdGVyc0xpbWl0RXhjZWVkZWQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGxtU2VydmljZTogTExNU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGxtSGVscGVyU2VydmljZTogTExNSGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXVzaWJsZVNlcnZpY2U6IFBsYXVzaWJsZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBkYXRhOiBMTE1EYXRhXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudGV4dCA9IHRoaXMuZGF0YS50ZXh0O1xyXG4gICAgdGhpcy5sYW5ndWFnZSA9IHRoaXMuZGF0YS5sYW5ndWFnZTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uVXJsID0gdGhpcy5sbG1TZXJ2aWNlLmxsbUNvbmZpZ3VyYXRpb24uc3Vic2NyaXB0aW9uVXJsO1xyXG4gICAgdGhpcy5yZWFjaGVkUXVvdGFNZXNzYWdlID0gdGhpcy5sbG1IZWxwZXJTZXJ2aWNlLmdldFJlYWNoZWRRdW90YU1lc3NhZ2UoKTtcclxuICAgIHRoaXMuY3JlYXRlU3VtbWFyeSgpO1xyXG4gICAgdGhpcy5yZWZyZXNoUXVvdGEoKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVN1bW1hcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmxsbVNlcnZpY2VcclxuICAgICAgLnN1bW1hcml6ZSh7IHRleHQ6IHRoaXMudGV4dCwgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UgfSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuaXNMb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRleHQgPSByZXNwb25zZTtcclxuICAgICAgICAgIHRoaXMuc2hvd0Vycm9yTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoUXVvdGEodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93RXJyb3JNZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGNvcHlFdmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGxhdXNpYmxlU2VydmljZS5zdW1tYXJ5Q29weUV2ZW50KCk7XHJcbiAgfVxyXG4gIFxyXG4gIGRpc2xpa2VFdmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGxhdXNpYmxlU2VydmljZS5zdW1tYXJ5RGlzbGlrZUV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0NoYXJhY3RlcnNMaW1pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRleHQubGVuZ3RoID4gMTAwMDApIHtcclxuICAgICAgdGhpcy5pc0NoYXJhY3RlcnNMaW1pdEV4Y2VlZGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNDaGFyYWN0ZXJzTGltaXRFeGNlZWRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUXVvdGEoZGVjcmVhc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnF1b3RhU2VydmljZS5nZXRRdW90YVVzYWdlKCkucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldFF1b3RhTWVzc2FnZSgpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVvdGEgPSByZXNwb25zZS51c2FnZS5maW5kKChpdGVtKSA9PiBpdGVtLnF1b3RhVHlwZSA9PT0gUXVvdGFUeXBlLkxMTV9SRVFVRVNUUyk7XHJcblxyXG4gICAgICAgIGlmICghcXVvdGEpIHtcclxuICAgICAgICAgIHRoaXMuc3VtbWFyeVF1b3RhTGVmdCA9IHRoaXMubGxtSGVscGVyU2VydmljZS5zZXRRdW90YUxvY2FsU3RvcmFnZVVzYWdlKHRoaXMuc3VtbWFyeVF1b3RhTG9jYWxTdG9yYWdlS2V5LCBkZWNyZWFzZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3VtbWFyeVF1b3RhTGVmdCA9IHF1b3RhLnF1b3RhUmVtYWluaW5nO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFF1b3RhTWVzc2FnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1JlbWFpbmluZ1F1b3RhTWVzc2FnZSA9IHRoaXMuc3VtbWFyeVF1b3RhTGVmdCA8PSB0aGlzLnRyaWFsUmVxdWVzdENvdW50O1xyXG4gIH1cclxufVxyXG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZT57eyBcIkxMTS5TVU1NQVJZX01PREFMLlRJVExFXCIgfCB0cmFuc2xhdGUgfX08L2gxPlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cclxuICA8cD57eyBcIkxMTS5TVU1NQVJZX01PREFMLkRFU0NSSVBUSU9OXCIgfCB0cmFuc2xhdGUgfX08L3A+XHJcblxyXG4gIDxsaWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlICpuZ0lmPVwiIXN1bW1hcnlRdW90YUxlZnRcIiBbbWVzc2FnZV09XCJyZWFjaGVkUXVvdGFNZXNzYWdlXCI+PC9saWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlPlxyXG5cclxuICA8bGliLWxsbS10ZXh0YXJlYSBbc2hvd0Vycm9yTWVzc2FnZV09XCJzaG93RXJyb3JNZXNzYWdlXCIgW3RleHRdPVwidGV4dFwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcgfHwgIXN1bW1hcnlRdW90YUxlZnRcIiAodGV4dEVkaXRFdmVudCk9XCJ0ZXh0ID0gJGV2ZW50OyBjaGVja0NoYXJhY3RlcnNMaW1pdCgpXCIgKGNvcHlFdmVudCk9XCJjb3B5RXZlbnQoKVwiIChkaXNsaWtlRXZlbnQpPVwiZGlzbGlrZUV2ZW50KClcIj48L2xpYi1sbG0tdGV4dGFyZWE+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwibGxtLXN1bW1hcnktYWN0aW9ucy13cmFwcGVyXCIgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93UmVtYWluaW5nUXVvdGFNZXNzYWdlXCIgW2lubmVySFRNTF09XCInTExNLlNVTU1BUllfTU9EQUwuTElNSVQnIHwgdHJhbnNsYXRlOiB7IGxpbWl0OiBzdW1tYXJ5UXVvdGFMZWZ0LCBzdWJzY3JpcHRpb25Vcmw6IHN1YnNjcmlwdGlvblVybCB9XCI+PC9kaXY+XHJcblxyXG4gIDxkaXYgW2NsYXNzLnctZnVsbF09XCIhc2hvd1JlbWFpbmluZ1F1b3RhTWVzc2FnZVwiIGNsYXNzPVwibGxtLXN1bW1hcnktYWN0aW9uc1wiPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImlzTG9hZGluZzsgZWxzZSBjbG9zZUJ1dHRvblwiIG1hdC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAge3sgXCJMTE0uU1VNTUFSWV9NT0RBTC5DQU5DRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNjbG9zZUJ1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxyXG4gICAgICAgIHt7IFwiTExNLlNVTU1BUllfTU9EQUwuQ0xPU0VcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBcclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgKGNsaWNrKT1cImNyZWF0ZVN1bW1hcnkoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc0NyZWF0aW5nRGlzYWJsZWRcIlxyXG4gICAgPlxyXG4gICAgICB7e1xyXG4gICAgICAgIChpc0xvYWRpbmdcclxuICAgICAgICAgID8gXCJMTE0uU1VNTUFSWV9NT0RBTC5DUkVBVElOR1wiXHJcbiAgICAgICAgICA6IFwiTExNLlNVTU1BUllfTU9EQUwuUkVHRU5FUkFURVwiXHJcbiAgICAgICAgKSB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2xsbS9jb21wb25lbnRzL2NyZWF0ZS1zdW1tYXJ5L2NyZWF0ZS1zdW1tYXJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vY29tcG9uZW50cy9jcmVhdGUtc3VtbWFyeS9jcmVhdGUtc3VtbWFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHM0QsT0FBTyxFQUFnQixRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBVTVELE1BQU0sT0FBTyxzQkFBc0I7SUF1QmpDLElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDdkUsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQUksdUJBQXVCO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7SUFDbkUsQ0FBQztJQUVELFlBQ21CLFVBQXNCLEVBQ3RCLGdCQUFrQyxFQUNsQyxZQUEwQixFQUMxQixnQkFBa0MsRUFDbEIsSUFBYTtRQUo3QixlQUFVLEdBQVYs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LEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUV2RixJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNWLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEMsT0FBTztpQkFDUjtnQkFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ25GLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxRQUFrQjtRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7K0dBaEhVLHNCQUFzQix3SUF3Q3ZCLGVBQWU7bUdBeENkLHNCQUFzQiwwRENmbkMsMjJEQXNDQTs7NEZEdkJhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7OzBCQTRDM0IsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBMTE1EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xsbS1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgTExNU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xsbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBRdW90YVNlcnZpY2UsIFF1b3RhVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL25vdGlmaWNhdGlvbi1tZXNzYWdlJztcclxuaW1wb3J0IHsgTExNSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xsbS1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBsYXVzaWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wbGF1c2libGUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jcmVhdGUtc3VtbWFyeScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1zdW1tYXJ5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtc3VtbWFyeS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlU3VtbWFyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nITogYm9vbGVhbjtcclxuICBzaG93RGVmYXVsdEVycm9yTWVzc2FnZSE6IGJvb2xlYW47XHJcbiAgc2hvd1JlbWFpbmluZ1F1b3RhTWVzc2FnZSE6IGJvb2xlYW47XHJcbiAgaXNTdW1tYXJpemluZ0NhbmNlbGVkITogYm9vbGVhbjtcclxuICBsYW5ndWFnZSE6IHN0cmluZztcclxuICBzdW1tYXJ5UXVvdGFMZWZ0ITogbnVtYmVyO1xyXG4gIHN1YnNjcmlwdGlvblVybCE6IHN0cmluZztcclxuXHJcbiAgcmVhY2hlZFF1b3RhTWVzc2FnZSE6IE5vdGlmaWNhdGlvbk1lc3NhZ2U7XHJcblxyXG4gIHN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgaXNTdW1tYXJpemVkITogYm9vbGVhbjtcclxuXHJcbiAgaW5pdGlhbFRleHQhOiBzdHJpbmc7XHJcbiAgc3VtbWFyaXplZFRleHQgPSAnJztcclxuICBtYW51YWxseUVkaXRlZFRleHQgPSAnJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0cmlhbFJlcXVlc3RDb3VudCA9IDE1O1xyXG5cclxuICBtaXNzaW5nUXVvdGFNZXNzYWdlQ2xvc2VkID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc0NyZWF0aW5nRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmcgfHwgIXRoaXMuaW5pdGlhbFRleHQgfHwgIXRoaXMuc3VtbWFyeVF1b3RhTGVmdDtcclxuICB9XHJcblxyXG4gIGdldCBkZWZhdWx0RXJyb3JNZXNzYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGxtSGVscGVyU2VydmljZS5nZXREZWZhdWx0RXJyb3JNZXNzYWdlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd01pc3NpbmdRdW90YU1lc3NhZ2UoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuc3VtbWFyeVF1b3RhTGVmdCAmJiAhdGhpcy5taXNzaW5nUXVvdGFNZXNzYWdlQ2xvc2VkO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxsbVNlcnZpY2U6IExMTVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxsbUhlbHBlclNlcnZpY2U6IExMTUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHF1b3RhU2VydmljZTogUXVvdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwbGF1c2libGVTZXJ2aWNlOiBQbGF1c2libGVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgZGF0YTogTExNRGF0YVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYWxUZXh0ID0gdGhpcy5kYXRhLnRleHQ7XHJcbiAgICB0aGlzLmxhbmd1YWdlID0gdGhpcy5kYXRhLmxhbmd1YWdlO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25VcmwgPSB0aGlzLmxsbVNlcnZpY2UubGxtQ29uZmlndXJhdGlvbi5zdWJzY3JpcHRpb25Vcmw7XHJcbiAgICB0aGlzLnJlYWNoZWRRdW90YU1lc3NhZ2UgPSB0aGlzLmxsbUhlbHBlclNlcnZpY2UuZ2V0UmVhY2hlZFF1b3RhTWVzc2FnZSgpO1xyXG4gICAgdGhpcy5yZWZyZXNoUXVvdGEoKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVN1bW1hcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmxsbVNlcnZpY2VcclxuICAgICAgLnN1bW1hcml6ZSh7IHRleHQ6IHRoaXMubWFudWFsbHlFZGl0ZWRUZXh0ICE9PSAnJyA/IHRoaXMubWFudWFsbHlFZGl0ZWRUZXh0IDogdGhpcy5pbml0aWFsVGV4dCwgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UgfSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuaXNMb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzU3VtbWFyaXplZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN1bW1hcml6ZWRUZXh0ID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB0aGlzLm1hbnVhbGx5RWRpdGVkVGV4dCA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5zaG93RGVmYXVsdEVycm9yTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoUXVvdGEodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93RGVmYXVsdEVycm9yTWVzc2FnZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBjb3B5RXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBsYXVzaWJsZVNlcnZpY2Uuc3VtbWFyeUNvcHlFdmVudCgpO1xyXG4gIH1cclxuICBcclxuICBkaXNsaWtlRXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBsYXVzaWJsZVNlcnZpY2Uuc3VtbWFyeURpc2xpa2VFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgdGV4dEVkaXRFdmVudCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubWFudWFsbHlFZGl0ZWRUZXh0ID0gdGV4dDtcclxuICAgIHRoaXMuaW5pdGlhbFRleHQgPSB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUXVvdGEoZGVjcmVhc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnF1b3RhU2VydmljZS5nZXRRdW90YVVzYWdlKCkucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldFF1b3RhTWVzc2FnZSgpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVvdGEgPSByZXNwb25zZS51c2FnZS5maW5kKChpdGVtKSA9PiBpdGVtLnF1b3RhVHlwZSA9PT0gUXVvdGFUeXBlLkxMTV9SRVFVRVNUUyk7XHJcblxyXG4gICAgICAgIGlmICghcXVvdGEpIHtcclxuICAgICAgICAgIHRoaXMuc2V0UXVvdGFGcm9tTG9jYWxTdG9yYWdlKGRlY3JlYXNlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zdW1tYXJ5UXVvdGFMZWZ0ID0gcXVvdGEucXVvdGFSZW1haW5pbmc7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRRdW90YUZyb21Mb2NhbFN0b3JhZ2UoZGVjcmVhc2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UXVvdGFNZXNzYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93UmVtYWluaW5nUXVvdGFNZXNzYWdlID0gdGhpcy5zdW1tYXJ5UXVvdGFMZWZ0IDw9IHRoaXMudHJpYWxSZXF1ZXN0Q291bnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFF1b3RhRnJvbUxvY2FsU3RvcmFnZShkZWNyZWFzZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VtbWFyeVF1b3RhTGVmdCA9IHRoaXMubGxtSGVscGVyU2VydmljZS5zZXRRdW90YUxvY2FsU3RvcmFnZVVzYWdlKGRlY3JlYXNlKTsgICAgICAgICAgXHJcbiAgfVxyXG59XHJcbiIsIjxoMSBtYXQtZGlhbG9nLXRpdGxlPnt7IFwiTExNLlNVTU1BUllfTU9EQUwuVElUTEVcIiB8IHRyYW5zbGF0ZSB9fTwvaDE+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxwPnt7IFwiTExNLlNVTU1BUllfTU9EQUwuREVTQ1JJUFRJT05cIiB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuXHJcbiAgPGxpYi10bGQtbm90aWZpY2F0aW9uLW1lc3NhZ2UgKm5nSWY9XCJzaG93TWlzc2luZ1F1b3RhTWVzc2FnZVwiIFttZXNzYWdlXT1cInJlYWNoZWRRdW90YU1lc3NhZ2VcIiAoY2xvc2VDbGlja2VkKT1cIm1pc3NpbmdRdW90YU1lc3NhZ2VDbG9zZWQgPSB0cnVlXCI+PC9saWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlPlxyXG4gIDxsaWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlICpuZ0lmPVwic2hvd0RlZmF1bHRFcnJvck1lc3NhZ2VcIiBbbWVzc2FnZV09XCJkZWZhdWx0RXJyb3JNZXNzYWdlXCIgKGNsb3NlQ2xpY2tlZCk9XCJzaG93RGVmYXVsdEVycm9yTWVzc2FnZSA9IGZhbHNlXCI+PC9saWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlPlxyXG5cclxuICA8bGliLWxsbS10ZXh0YXJlYSBbdGV4dF09XCJzdW1tYXJpemVkVGV4dCAhPT0gJycgPyBzdW1tYXJpemVkVGV4dCA6IGluaXRpYWxUZXh0XCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZyB8fCAhc3VtbWFyeVF1b3RhTGVmdFwiICh0ZXh0RWRpdEV2ZW50KT1cInRleHRFZGl0RXZlbnQoJGV2ZW50KVwiIChjb3B5RXZlbnQpPVwiY29weUV2ZW50KClcIiAoZGlzbGlrZUV2ZW50KT1cImRpc2xpa2VFdmVudCgpXCI+PC9saWItbGxtLXRleHRhcmVhPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImxsbS1zdW1tYXJ5LWFjdGlvbnMtd3JhcHBlclwiIG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd1JlbWFpbmluZ1F1b3RhTWVzc2FnZVwiIFtpbm5lckhUTUxdPVwiJ0xMTS5TVU1NQVJZX01PREFMLkxJTUlUJyB8IHRyYW5zbGF0ZTogeyBsaW1pdDogc3VtbWFyeVF1b3RhTGVmdCwgc3Vic2NyaXB0aW9uVXJsOiBzdWJzY3JpcHRpb25VcmwgfVwiPjwvZGl2PlxyXG5cclxuICA8ZGl2IFtjbGFzcy53LWZ1bGxdPVwiIXNob3dSZW1haW5pbmdRdW90YU1lc3NhZ2VcIiBjbGFzcz1cImxsbS1zdW1tYXJ5LWFjdGlvbnNcIj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJpc0xvYWRpbmc7IGVsc2UgY2xvc2VCdXR0b25cIiBtYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XHJcbiAgICAgIHt7IFwiTExNLlNVTU1BUllfTU9EQUwuQ0FOQ0VMXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjY2xvc2VCdXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIj5cclxuICAgICAgICB7eyBcIkxMTS5TVU1NQVJZX01PREFMLkNMT1NFXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICBjb2xvcj1cImFjY2VudFwiXHJcbiAgICAgIChjbGljayk9XCJjcmVhdGVTdW1tYXJ5KClcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNDcmVhdGluZ0Rpc2FibGVkXCJcclxuICAgID5cclxuICAgICAge3tcclxuICAgICAgICAoIWlzU3VtbWFyaXplZFxyXG4gICAgICAgICAgPyBcIkxMTS5TVU1NQVJZX01PREFMLkNSRUFURVwiXHJcbiAgICAgICAgICA6IFwiTExNLlNVTU1BUllfTU9EQUwuUkVHRU5FUkFURVwiXHJcbiAgICAgICAgKSB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -20,7 +20,13 @@ import * as i13 from "../../shared/llm-textarea/llm-textarea.component";
20
20
  import * as i14 from "@ngx-translate/core";
21
21
  export class RephraseTranslationComponent {
22
22
  get isRephrasingDisabled() {
23
- return this.isLoading || !this.text || !this.rephraseQuotaLeft || this.isCharactersLimitExceeded;
23
+ return this.isLoading || !this.initialText || !this.rephraseQuotaLeft;
24
+ }
25
+ get defaultErrorMessage() {
26
+ return this.llmHelperService.getDefaultErrorMessage();
27
+ }
28
+ get showMissingQuotaMessage() {
29
+ return !this.rephraseQuotaLeft && !this.missingQuotaMessageClosed;
24
30
  }
25
31
  constructor(llmService, quotaService, llmHelperService, plausibleService, data) {
26
32
  this.llmService = llmService;
@@ -29,29 +35,54 @@ export class RephraseTranslationComponent {
29
35
  this.plausibleService = plausibleService;
30
36
  this.data = data;
31
37
  this.selectedWritingStyle = LLMWritingStyle.GENERAL;
38
+ this.rephrasedText = '';
39
+ this.manuallyEditedText = '';
40
+ this.savedRephrasings = [];
32
41
  this.writingStyles = Object.values(LLMWritingStyle);
33
42
  this.trialRequestCount = 15;
34
- this.rephraseQuotaLocalStorageKey = 'LLM_REPHRASE_USAGE_KEY';
43
+ this.missingQuotaMessageClosed = false;
35
44
  }
36
45
  ngOnInit() {
37
- this.text = this.data.text;
46
+ this.initialText = this.data.text;
38
47
  this.subscriptionUrl = this.llmService.llmConfiguration.subscriptionUrl;
39
48
  this.reachedQuotaMessage = this.llmHelperService.getReachedQuotaMessage();
40
49
  this.refreshQuota();
41
50
  }
51
+ checkRephrasedTextSaves() {
52
+ const selectedWritingStyleSave = this.savedRephrasings.find((rephrasing) => rephrasing.style === this.selectedWritingStyle);
53
+ const previousWritingStyleSave = this.savedRephrasings.find((save) => save.style === this.previousWritingStyle);
54
+ if (previousWritingStyleSave) {
55
+ const save = this.savedRephrasings.find((save) => save.style === this.previousWritingStyle);
56
+ if (save) {
57
+ save.text = this.rephrasedText !== '' ? this.rephrasedText : this.initialText;
58
+ }
59
+ }
60
+ else {
61
+ this.savedRephrasings.push({ style: this.previousWritingStyle, text: this.rephrasedText !== '' ? this.rephrasedText : this.initialText });
62
+ }
63
+ this.rephrasedText = selectedWritingStyleSave?.text ?? this.initialText;
64
+ this.manuallyEditedText = '';
65
+ }
66
+ saveWritingStyleBeforeChange(isOpened) {
67
+ if (!isOpened) {
68
+ return;
69
+ }
70
+ this.previousWritingStyle = this.selectedWritingStyle;
71
+ }
42
72
  rephraseText() {
43
73
  this.isLoading = true;
44
74
  this.subscription = this.llmService
45
- .rephrase({ text: this.text, style: this.selectedWritingStyle })
75
+ .rephrase({ text: this.manuallyEditedText !== '' ? this.manuallyEditedText : this.initialText, style: this.selectedWritingStyle })
46
76
  .pipe(finalize(() => (this.isLoading = false)))
47
77
  .subscribe({
48
78
  next: (response) => {
49
- this.text = response;
50
- this.showErrorMessage = false;
79
+ this.rephrasedText = response;
80
+ this.manuallyEditedText = '';
81
+ this.showDefaultErrorMessage = false;
51
82
  this.refreshQuota(true);
52
83
  },
53
84
  error: () => {
54
- this.showErrorMessage = true;
85
+ this.showDefaultErrorMessage = true;
55
86
  }
56
87
  });
57
88
  }
@@ -64,36 +95,40 @@ export class RephraseTranslationComponent {
64
95
  dislikeEvent() {
65
96
  this.plausibleService.rephraseDislikeEvent();
66
97
  }
67
- checkCharactersLimit() {
68
- if (this.text.length > 10000) {
69
- this.isCharactersLimitExceeded = true;
70
- return;
71
- }
72
- this.isCharactersLimitExceeded = false;
98
+ textEditEvent(text) {
99
+ this.manuallyEditedText = text;
100
+ this.initialText = text;
101
+ this.rephrasedText = '';
73
102
  }
74
103
  refreshQuota(decrease) {
75
104
  this.quotaService.getQuotaUsage().pipe(finalize(() => this.setQuotaMessage())).subscribe({
76
105
  next: (response) => {
77
106
  const quota = response.usage.find((item) => item.quotaType === QuotaType.LLM_CHARACTER_COUNT);
78
107
  if (!quota) {
79
- this.rephraseQuotaLeft = this.llmHelperService.setQuotaLocalStorageUsage(this.rephraseQuotaLocalStorageKey, decrease);
108
+ this.setQuotaFromLocalStorage(decrease);
80
109
  return;
81
110
  }
82
111
  this.rephraseQuotaLeft = quota.quotaRemaining;
83
112
  },
113
+ error: () => {
114
+ this.setQuotaFromLocalStorage(decrease);
115
+ }
84
116
  });
85
117
  }
86
118
  setQuotaMessage() {
87
119
  this.showRemainingQuotaMessage = this.rephraseQuotaLeft <= this.trialRequestCount;
88
120
  }
121
+ setQuotaFromLocalStorage(decrease) {
122
+ this.rephraseQuotaLeft = this.llmHelperService.setQuotaLocalStorageUsage(decrease);
123
+ }
89
124
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RephraseTranslationComponent, deps: [{ token: i1.LLMService }, { token: i2.QuotaService }, { token: i3.LLMHelperService }, { token: i4.PlausibleService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
90
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RephraseTranslationComponent, selector: "lib-rephrase-translation", ngImport: i0, template: "<h1 mat-dialog-title>{{ \"LLM.REPHRASE_MODAL.TITLE\" | translate }}</h1>\r\n<div mat-dialog-content>\r\n <p>{{ \"LLM.REPHRASE_MODAL.DESCRIPTION\" | translate }}</p>\r\n\r\n <lib-tld-notification-message *ngIf=\"!rephraseQuotaLeft\" [message]=\"reachedQuotaMessage\"></lib-tld-notification-message>\r\n\r\n <mat-form-field color=\"accent\" class=\"w-full llm-writing-style-select\" appearance=\"outline\">\r\n <mat-label>{{ 'LLM.REPHRASE_MODAL.WRITING_STYLES.TITLE' | translate }}</mat-label>\r\n <mat-select [(value)]=\"selectedWritingStyle\">\r\n <mat-option *ngFor=\"let style of writingStyles\" [value]=\"style\">\r\n {{ 'LLM.REPHRASE_MODAL.WRITING_STYLES.' + (style | uppercase) | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <p class=\"llm-writing-style text-m-semi-bold\">{{\r\n \"LLM.REPHRASE_MODAL.WRITING_STYLES.SPECIFIC_STYLE\" | translate : \r\n { style: 'LLM.REPHRASE_MODAL.WRITING_STYLES.' + (selectedWritingStyle | uppercase) | translate } \r\n }}\r\n <span\r\n class=\"material-icons-outlined info-icon\"\r\n matTooltipClass=\"multiline-tooltip\"\r\n matTooltipPosition=\"above\" \r\n [matTooltip]=\"'LLM.REPHRASE_MODAL.WRITING_STYLES.TOOLTIP_' + (selectedWritingStyle | uppercase) | translate\" \r\n >\r\n info\r\n </span>\r\n </p>\r\n\r\n <lib-llm-textarea [text]=\"text\" [disabled]=\"isLoading || !rephraseQuotaLeft\" [showErrorMessage]=\"showErrorMessage\" (textEditEvent)=\"text = $event; checkCharactersLimit()\" (copyEvent)=\"copyEvent()\" (dislikeEvent)=\"dislikeEvent()\"></lib-llm-textarea>\r\n</div>\r\n<div class=\"llm-rephrase-actions-wrapper\" mat-dialog-actions>\r\n <div *ngIf=\"showRemainingQuotaMessage\" [innerHTML]=\"'LLM.REPHRASE_MODAL.LIMIT' | translate: { limit: rephraseQuotaLeft, subscriptionUrl: subscriptionUrl }\"></div>\r\n\r\n <div [class.w-full]=\"!showRemainingQuotaMessage\" class=\"llm-rephrase-actions\">\r\n <button *ngIf=\"isLoading; else closeButton\" mat-button color=\"accent\" (click)=\"cancel()\">\r\n {{ \"LLM.REPHRASE_MODAL.CANCEL\" | translate }}\r\n </button>\r\n\r\n <ng-template #closeButton>\r\n <button mat-button color=\"accent\" [mat-dialog-close]=\"null\">\r\n {{ \"LLM.REPHRASE_MODAL.CLOSE\" | translate }}\r\n </button>\r\n </ng-template>\r\n \r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"rephraseText()\"\r\n [disabled]=\"isRephrasingDisabled\"\r\n >\r\n {{\r\n (isLoading\r\n ? \"LLM.REPHRASE_MODAL.REPHRASING\"\r\n : \"LLM.REPHRASE_MODAL.REPHRASE\"\r\n ) | translate\r\n }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".info-icon{font-size:1rem;margin-left:5px}:host ::ng-deep .message-body{font-size:14px}:host ::ng-deep .notification-message-container{margin:0 0 16px}:host ::ng-deep .items-container{margin-left:0!important}:host ::ng-deep .text-container{margin-right:0!important}::ng-deep .multiline-tooltip{white-space:pre;min-width:-moz-fit-content;min-width:fit-content}::ng-deep .multiline-tooltip .mdc-tooltip__surface{max-width:none!important}.llm-writing-style-select{margin-top:1.25rem}.llm-writing-style{display:flex;align-items:center;margin-bottom:.25rem}.llm-rephrase-actions-wrapper{display:flex;justify-content:space-between;margin:0 1rem .5rem}.llm-rephrase-actions{display:flex;justify-content:end}.w-full{width:100%}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i7.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i7.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i7.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i11.NotificationMessageComponent, selector: "lib-tld-notification-message", inputs: ["message", "inline"], outputs: ["buttonClicked", "closeClicked", "linkClicked"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.LLMTextareaComponent, selector: "lib-llm-textarea", inputs: ["text", "disabled", "showErrorMessage"], outputs: ["textEditEvent", "dislikeEvent", "copyEvent"] }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
125
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RephraseTranslationComponent, selector: "lib-rephrase-translation", ngImport: i0, template: "<h1 mat-dialog-title>{{ \"LLM.REPHRASE_MODAL.TITLE\" | translate }}</h1>\r\n<div mat-dialog-content>\r\n <p>{{ \"LLM.REPHRASE_MODAL.DESCRIPTION\" | translate }}</p>\r\n\r\n <lib-tld-notification-message *ngIf=\"showMissingQuotaMessage\" [message]=\"reachedQuotaMessage\" (closeClicked)=\"missingQuotaMessageClosed = true\"></lib-tld-notification-message>\r\n <lib-tld-notification-message *ngIf=\"showDefaultErrorMessage\" [message]=\"defaultErrorMessage\" (closeClicked)=\"showDefaultErrorMessage = false\"></lib-tld-notification-message>\r\n\r\n <mat-form-field color=\"accent\" class=\"w-full llm-writing-style-select\" appearance=\"outline\">\r\n <mat-label>{{ 'LLM.REPHRASE_MODAL.WRITING_STYLES.TITLE' | translate }}</mat-label>\r\n <mat-select (openedChange)=\"saveWritingStyleBeforeChange($event)\" (selectionChange)=\"checkRephrasedTextSaves()\" [(value)]=\"selectedWritingStyle\">\r\n <mat-option *ngFor=\"let style of writingStyles\" [value]=\"style\">\r\n {{ 'LLM.REPHRASE_MODAL.WRITING_STYLES.' + (style | uppercase) | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <p class=\"llm-writing-style text-m-semi-bold\">{{\r\n \"LLM.REPHRASE_MODAL.WRITING_STYLES.SPECIFIC_STYLE\" | translate : \r\n { style: 'LLM.REPHRASE_MODAL.WRITING_STYLES.' + (selectedWritingStyle | uppercase) | translate } \r\n }}\r\n <span\r\n class=\"material-icons-outlined info-icon\"\r\n matTooltipClass=\"multiline-tooltip\"\r\n matTooltipPosition=\"above\" \r\n [matTooltip]=\"'LLM.REPHRASE_MODAL.WRITING_STYLES.TOOLTIP_' + (selectedWritingStyle | uppercase) | translate\" \r\n >\r\n info\r\n </span>\r\n </p>\r\n\r\n <lib-llm-textarea [text]=\"rephrasedText !== '' ? rephrasedText : initialText\" [disabled]=\"isLoading || !rephraseQuotaLeft\" (textEditEvent)=\"textEditEvent($event)\" (copyEvent)=\"copyEvent()\" (dislikeEvent)=\"dislikeEvent()\"></lib-llm-textarea>\r\n</div>\r\n<div class=\"llm-rephrase-actions-wrapper\" mat-dialog-actions>\r\n <div *ngIf=\"showRemainingQuotaMessage\" [innerHTML]=\"'LLM.REPHRASE_MODAL.LIMIT' | translate: { limit: rephraseQuotaLeft, subscriptionUrl: subscriptionUrl }\"></div>\r\n\r\n <div [class.w-full]=\"!showRemainingQuotaMessage\" class=\"llm-rephrase-actions\">\r\n <button *ngIf=\"isLoading; else closeButton\" mat-button color=\"accent\" (click)=\"cancel()\">\r\n {{ \"LLM.REPHRASE_MODAL.CANCEL\" | translate }}\r\n </button>\r\n\r\n <ng-template #closeButton>\r\n <button mat-button color=\"accent\" [mat-dialog-close]=\"null\">\r\n {{ \"LLM.REPHRASE_MODAL.CLOSE\" | translate }}\r\n </button>\r\n </ng-template>\r\n \r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"rephraseText()\"\r\n [disabled]=\"isRephrasingDisabled\"\r\n >\r\n {{ \"LLM.REPHRASE_MODAL.REPHRASE\" | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".info-icon{font-size:1rem;margin-left:5px}:host ::ng-deep .message-body{font-size:14px}:host ::ng-deep .notification-message-container{margin:0 0 16px}:host ::ng-deep .items-container{margin-left:0!important}:host ::ng-deep .text-container{margin-right:0!important}::ng-deep .multiline-tooltip{white-space:pre;min-width:-moz-fit-content;min-width:fit-content}::ng-deep .multiline-tooltip .mdc-tooltip__surface{max-width:none!important}.llm-writing-style-select{margin-top:1.25rem}.llm-writing-style{display:flex;align-items:center;margin-bottom:.25rem}.llm-rephrase-actions-wrapper{display:flex;justify-content:space-between;margin:0 1rem .5rem}.llm-rephrase-actions{display:flex;justify-content:end}.w-full{width:100%}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i7.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i7.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i7.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i11.NotificationMessageComponent, selector: "lib-tld-notification-message", inputs: ["message", "inline"], outputs: ["buttonClicked", "closeClicked", "linkClicked"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.LLMTextareaComponent, selector: "lib-llm-textarea", inputs: ["text", "disabled"], outputs: ["textEditEvent", "dislikeEvent", "copyEvent"] }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
91
126
  }
92
127
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RephraseTranslationComponent, decorators: [{
93
128
  type: Component,
94
- args: [{ selector: 'lib-rephrase-translation', template: "<h1 mat-dialog-title>{{ \"LLM.REPHRASE_MODAL.TITLE\" | translate }}</h1>\r\n<div mat-dialog-content>\r\n <p>{{ \"LLM.REPHRASE_MODAL.DESCRIPTION\" | translate }}</p>\r\n\r\n <lib-tld-notification-message *ngIf=\"!rephraseQuotaLeft\" [message]=\"reachedQuotaMessage\"></lib-tld-notification-message>\r\n\r\n <mat-form-field color=\"accent\" class=\"w-full llm-writing-style-select\" appearance=\"outline\">\r\n <mat-label>{{ 'LLM.REPHRASE_MODAL.WRITING_STYLES.TITLE' | translate }}</mat-label>\r\n <mat-select [(value)]=\"selectedWritingStyle\">\r\n <mat-option *ngFor=\"let style of writingStyles\" [value]=\"style\">\r\n {{ 'LLM.REPHRASE_MODAL.WRITING_STYLES.' + (style | uppercase) | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <p class=\"llm-writing-style text-m-semi-bold\">{{\r\n \"LLM.REPHRASE_MODAL.WRITING_STYLES.SPECIFIC_STYLE\" | translate : \r\n { style: 'LLM.REPHRASE_MODAL.WRITING_STYLES.' + (selectedWritingStyle | uppercase) | translate } \r\n }}\r\n <span\r\n class=\"material-icons-outlined info-icon\"\r\n matTooltipClass=\"multiline-tooltip\"\r\n matTooltipPosition=\"above\" \r\n [matTooltip]=\"'LLM.REPHRASE_MODAL.WRITING_STYLES.TOOLTIP_' + (selectedWritingStyle | uppercase) | translate\" \r\n >\r\n info\r\n </span>\r\n </p>\r\n\r\n <lib-llm-textarea [text]=\"text\" [disabled]=\"isLoading || !rephraseQuotaLeft\" [showErrorMessage]=\"showErrorMessage\" (textEditEvent)=\"text = $event; checkCharactersLimit()\" (copyEvent)=\"copyEvent()\" (dislikeEvent)=\"dislikeEvent()\"></lib-llm-textarea>\r\n</div>\r\n<div class=\"llm-rephrase-actions-wrapper\" mat-dialog-actions>\r\n <div *ngIf=\"showRemainingQuotaMessage\" [innerHTML]=\"'LLM.REPHRASE_MODAL.LIMIT' | translate: { limit: rephraseQuotaLeft, subscriptionUrl: subscriptionUrl }\"></div>\r\n\r\n <div [class.w-full]=\"!showRemainingQuotaMessage\" class=\"llm-rephrase-actions\">\r\n <button *ngIf=\"isLoading; else closeButton\" mat-button color=\"accent\" (click)=\"cancel()\">\r\n {{ \"LLM.REPHRASE_MODAL.CANCEL\" | translate }}\r\n </button>\r\n\r\n <ng-template #closeButton>\r\n <button mat-button color=\"accent\" [mat-dialog-close]=\"null\">\r\n {{ \"LLM.REPHRASE_MODAL.CLOSE\" | translate }}\r\n </button>\r\n </ng-template>\r\n \r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"rephraseText()\"\r\n [disabled]=\"isRephrasingDisabled\"\r\n >\r\n {{\r\n (isLoading\r\n ? \"LLM.REPHRASE_MODAL.REPHRASING\"\r\n : \"LLM.REPHRASE_MODAL.REPHRASE\"\r\n ) | translate\r\n }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".info-icon{font-size:1rem;margin-left:5px}:host ::ng-deep .message-body{font-size:14px}:host ::ng-deep .notification-message-container{margin:0 0 16px}:host ::ng-deep .items-container{margin-left:0!important}:host ::ng-deep .text-container{margin-right:0!important}::ng-deep .multiline-tooltip{white-space:pre;min-width:-moz-fit-content;min-width:fit-content}::ng-deep .multiline-tooltip .mdc-tooltip__surface{max-width:none!important}.llm-writing-style-select{margin-top:1.25rem}.llm-writing-style{display:flex;align-items:center;margin-bottom:.25rem}.llm-rephrase-actions-wrapper{display:flex;justify-content:space-between;margin:0 1rem .5rem}.llm-rephrase-actions{display:flex;justify-content:end}.w-full{width:100%}\n"] }]
129
+ args: [{ selector: 'lib-rephrase-translation', template: "<h1 mat-dialog-title>{{ \"LLM.REPHRASE_MODAL.TITLE\" | translate }}</h1>\r\n<div mat-dialog-content>\r\n <p>{{ \"LLM.REPHRASE_MODAL.DESCRIPTION\" | translate }}</p>\r\n\r\n <lib-tld-notification-message *ngIf=\"showMissingQuotaMessage\" [message]=\"reachedQuotaMessage\" (closeClicked)=\"missingQuotaMessageClosed = true\"></lib-tld-notification-message>\r\n <lib-tld-notification-message *ngIf=\"showDefaultErrorMessage\" [message]=\"defaultErrorMessage\" (closeClicked)=\"showDefaultErrorMessage = false\"></lib-tld-notification-message>\r\n\r\n <mat-form-field color=\"accent\" class=\"w-full llm-writing-style-select\" appearance=\"outline\">\r\n <mat-label>{{ 'LLM.REPHRASE_MODAL.WRITING_STYLES.TITLE' | translate }}</mat-label>\r\n <mat-select (openedChange)=\"saveWritingStyleBeforeChange($event)\" (selectionChange)=\"checkRephrasedTextSaves()\" [(value)]=\"selectedWritingStyle\">\r\n <mat-option *ngFor=\"let style of writingStyles\" [value]=\"style\">\r\n {{ 'LLM.REPHRASE_MODAL.WRITING_STYLES.' + (style | uppercase) | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <p class=\"llm-writing-style text-m-semi-bold\">{{\r\n \"LLM.REPHRASE_MODAL.WRITING_STYLES.SPECIFIC_STYLE\" | translate : \r\n { style: 'LLM.REPHRASE_MODAL.WRITING_STYLES.' + (selectedWritingStyle | uppercase) | translate } \r\n }}\r\n <span\r\n class=\"material-icons-outlined info-icon\"\r\n matTooltipClass=\"multiline-tooltip\"\r\n matTooltipPosition=\"above\" \r\n [matTooltip]=\"'LLM.REPHRASE_MODAL.WRITING_STYLES.TOOLTIP_' + (selectedWritingStyle | uppercase) | translate\" \r\n >\r\n info\r\n </span>\r\n </p>\r\n\r\n <lib-llm-textarea [text]=\"rephrasedText !== '' ? rephrasedText : initialText\" [disabled]=\"isLoading || !rephraseQuotaLeft\" (textEditEvent)=\"textEditEvent($event)\" (copyEvent)=\"copyEvent()\" (dislikeEvent)=\"dislikeEvent()\"></lib-llm-textarea>\r\n</div>\r\n<div class=\"llm-rephrase-actions-wrapper\" mat-dialog-actions>\r\n <div *ngIf=\"showRemainingQuotaMessage\" [innerHTML]=\"'LLM.REPHRASE_MODAL.LIMIT' | translate: { limit: rephraseQuotaLeft, subscriptionUrl: subscriptionUrl }\"></div>\r\n\r\n <div [class.w-full]=\"!showRemainingQuotaMessage\" class=\"llm-rephrase-actions\">\r\n <button *ngIf=\"isLoading; else closeButton\" mat-button color=\"accent\" (click)=\"cancel()\">\r\n {{ \"LLM.REPHRASE_MODAL.CANCEL\" | translate }}\r\n </button>\r\n\r\n <ng-template #closeButton>\r\n <button mat-button color=\"accent\" [mat-dialog-close]=\"null\">\r\n {{ \"LLM.REPHRASE_MODAL.CLOSE\" | translate }}\r\n </button>\r\n </ng-template>\r\n \r\n <button\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"rephraseText()\"\r\n [disabled]=\"isRephrasingDisabled\"\r\n >\r\n {{ \"LLM.REPHRASE_MODAL.REPHRASE\" | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".info-icon{font-size:1rem;margin-left:5px}:host ::ng-deep .message-body{font-size:14px}:host ::ng-deep .notification-message-container{margin:0 0 16px}:host ::ng-deep .items-container{margin-left:0!important}:host ::ng-deep .text-container{margin-right:0!important}::ng-deep .multiline-tooltip{white-space:pre;min-width:-moz-fit-content;min-width:fit-content}::ng-deep .multiline-tooltip .mdc-tooltip__surface{max-width:none!important}.llm-writing-style-select{margin-top:1.25rem}.llm-writing-style{display:flex;align-items:center;margin-bottom:.25rem}.llm-rephrase-actions-wrapper{display:flex;justify-content:space-between;margin:0 1rem .5rem}.llm-rephrase-actions{display:flex;justify-content:end}.w-full{width:100%}\n"] }]
95
130
  }], ctorParameters: function () { return [{ type: i1.LLMService }, { type: i2.QuotaService }, { type: i3.LLMHelperService }, { type: i4.PlausibleService }, { type: undefined, decorators: [{
96
131
  type: Inject,
97
132
  args: [MAT_DIALOG_DATA]
98
133
  }] }]; } });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwaHJhc2UtdHJhbnNsYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2xsbS9jb21wb25lbnRzL3JlcGhyYXNlLXRyYW5zbGF0aW9uL3JlcGhyYXNlLXRyYW5zbGF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vY29tcG9uZW50cy9yZXBocmFzZS10cmFuc2xhdGlvbi9yZXBocmFzZS10cmFuc2xhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUUxRCxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVdEUsTUFBTSxPQUFPLDRCQUE0QjtJQW9CdkMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUE7SUFDbEcsQ0FBQztJQUVELFlBQ21CLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEIsSUFBYTtRQUo3QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFD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QUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQ2hELENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNwRixDQUFDOytHQS9GVSw0QkFBNEIsd0lBNkI3QixlQUFlO21HQTdCZCw0QkFBNEIsZ0VDaEJ6QywrcUZBNERBOzs0RkQ1Q2EsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDBCQUEwQjs7MEJBaUNqQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExMTVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sbG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFF1b3RhU2VydmljZSwgUXVvdGFUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBMTE1EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xsbS1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMTE1Xcml0aW5nU3R5bGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGxtLXdyaXRpbmctc3R5bGUuZW51bSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9ub3RpZmljYXRpb24tbWVzc2FnZSc7XHJcbmltcG9ydCB7IExMTUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sbG0taGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQbGF1c2libGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGxhdXNpYmxlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcmVwaHJhc2UtdHJhbnNsYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBocmFzZS10cmFuc2xhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVwaHJhc2UtdHJhbnNsYXRpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwaHJhc2VUcmFuc2xhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nITogYm9vbGVhbjtcclxuICBzaG93RXJyb3JNZXNzYWdlITogYm9vbGVhbjtcclxuICBzaG93UmVtYWluaW5nUXVvdGFNZXNzYWdlITogYm9vbGVhbjtcclxuICBpc1JlcGhyYXNlQ2FuY2VsZWQhOiBib29sZWFuO1xyXG4gIHRleHQhOiBzdHJpbmc7XHJcbiAgcmVwaHJhc2VRdW90YUxlZnQhOiBudW1iZXI7XHJcbiAgc3Vic2NyaXB0aW9uVXJsITogc3RyaW5nO1xyXG4gIHNlbGVjdGVkV3JpdGluZ1N0eWxlID0gTExNV3JpdGluZ1N0eWxlLkdFTkVSQUw7XHJcbiAgaXNDaGFyYWN0ZXJzTGltaXRFeGNlZWRlZCE6IGJvb2xlYW47XHJcblxyXG4gIHJlYWNoZWRRdW90YU1lc3NhZ2UhOiBOb3RpZmljYXRpb25NZXNzYWdlO1xyXG5cclxuICBzdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcbiAgXHJcbiAgcmVhZG9ubHkgd3JpdGluZ1N0eWxlcyA9IE9iamVjdC52YWx1ZXMoTExNV3JpdGluZ1N0eWxlKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0cmlhbFJlcXVlc3RDb3VudCA9IDE1O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwaHJhc2VRdW90YUxvY2FsU3RvcmFnZUtleSA9ICdMTE1fUkVQSFJBU0VfVVNBR0VfS0VZJztcclxuXHJcbiAgZ2V0IGlzUmVwaHJhc2luZ0Rpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nIHx8ICF0aGlzLnRleHQgfHwgIXRoaXMucmVwaHJhc2VRdW90YUxlZnQgfHwgdGhpcy5pc0NoYXJhY3RlcnNMaW1pdEV4Y2VlZGVkXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGxtU2VydmljZTogTExNU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxsbUhlbHBlclNlcnZpY2U6IExMTUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXVzaWJsZVNlcnZpY2U6IFBsYXVzaWJsZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBkYXRhOiBMTE1EYXRhXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudGV4dCA9IHRoaXMuZGF0YS50ZXh0O1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25VcmwgPSB0aGlzLmxsbVNlcnZpY2UubGxtQ29uZmlndXJhdGlvbi5zdWJzY3JpcHRpb25Vcmw7XHJcbiAgICB0aGlzLnJlYWNoZWRRdW90YU1lc3NhZ2UgPSB0aGlzLmxsbUhlbHBlclNlcnZpY2UuZ2V0UmVhY2hlZFF1b3RhTWVzc2FnZSgpO1xyXG4gICAgdGhpcy5yZWZyZXNoUXVvdGEoKTtcclxuICB9XHJcblxyXG4gIHJlcGhyYXNlVGV4dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubGxtU2VydmljZVxyXG4gICAgICAucmVwaHJhc2UoeyB0ZXh0OiB0aGlzLnRleHQsIHN0eWxlOiB0aGlzLnNlbGVjdGVkV3JpdGluZ1N0eWxlIH0pXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmlzTG9hZGluZyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50ZXh0ID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dFcnJvck1lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaFF1b3RhKHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd0Vycm9yTWVzc2FnZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBjb3B5RXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBsYXVzaWJsZVNlcnZpY2UucmVwaHJhc2VDb3B5RXZlbnQoKTtcclxuICB9XHJcbiAgXHJcbiAgZGlzbGlrZUV2ZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wbGF1c2libGVTZXJ2aWNlLnJlcGhyYXNlRGlzbGlrZUV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0NoYXJhY3RlcnNMaW1pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRleHQubGVuZ3RoID4gMTAwMDApIHtcclxuICAgICAgdGhpcy5pc0NoYXJhY3RlcnNMaW1pdEV4Y2VlZGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNDaGFyYWN0ZXJzTGltaXRFeGNlZWRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUXVvdGEoZGVjcmVhc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnF1b3RhU2VydmljZS5nZXRRdW90YVVzYWdlKCkucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldFF1b3RhTWVzc2FnZSgpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVvdGEgPSByZXNwb25zZS51c2FnZS5maW5kKChpdGVtKSA9PiBpdGVtLnF1b3RhVHlwZSA9PT0gUXVvdGFUeXBlLkxMTV9DSEFSQUNURVJfQ09VTlQpO1xyXG5cclxuICAgICAgICBpZiAoIXF1b3RhKSB7XHJcbiAgICAgICAgICB0aGlzLnJlcGhyYXNlUXVvdGFMZWZ0ID0gdGhpcy5sbG1IZWxwZXJTZXJ2aWNlLnNldFF1b3RhTG9jYWxTdG9yYWdlVXNhZ2UodGhpcy5yZXBocmFzZVF1b3RhTG9jYWxTdG9yYWdlS2V5LCBkZWNyZWFzZSk7ICAgICAgICAgIFxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXBocmFzZVF1b3RhTGVmdCA9IHF1b3RhLnF1b3RhUmVtYWluaW5nO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFF1b3RhTWVzc2FnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1JlbWFpbmluZ1F1b3RhTWVzc2FnZSA9IHRoaXMucmVwaHJhc2VRdW90YUxlZnQgPD0gdGhpcy50cmlhbFJlcXVlc3RDb3VudDtcclxuICB9XHJcbn1cclxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+e3sgXCJMTE0uUkVQSFJBU0VfTU9EQUwuVElUTEVcIiB8IHRyYW5zbGF0ZSB9fTwvaDE+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxwPnt7IFwiTExNLlJFUEhSQVNFX01PREFMLkRFU0NSSVBUSU9OXCIgfCB0cmFuc2xhdGUgfX08L3A+XHJcblxyXG4gIDxsaWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlICpuZ0lmPVwiIXJlcGhyYXNlUXVvdGFMZWZ0XCIgW21lc3NhZ2VdPVwicmVhY2hlZFF1b3RhTWVzc2FnZVwiPjwvbGliLXRsZC1ub3RpZmljYXRpb24tbWVzc2FnZT5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJ3LWZ1bGwgbGxtLXdyaXRpbmctc3R5bGUtc2VsZWN0XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgIDxtYXQtbGFiZWw+e3sgJ0xMTS5SRVBIUkFTRV9NT0RBTC5XUklUSU5HX1NUWUxFUy5USVRMRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cInNlbGVjdGVkV3JpdGluZ1N0eWxlXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzdHlsZSBvZiB3cml0aW5nU3R5bGVzXCIgW3ZhbHVlXT1cInN0eWxlXCI+XHJcbiAgICAgICAge3sgJ0xMTS5SRVBIUkFTRV9NT0RBTC5XUklUSU5HX1NUWUxFUy4nICsgKHN0eWxlIHwgdXBwZXJjYXNlKSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgPHAgY2xhc3M9XCJsbG0td3JpdGluZy1zdHlsZSB0ZXh0LW0tc2VtaS1ib2xkXCI+e3tcclxuICAgICAgXCJMTE0uUkVQSFJBU0VfTU9EQUwuV1JJVElOR19TVFlMRVMuU1BFQ0lGSUNfU1RZTEVcIiB8IHRyYW5zbGF0ZSA6IFxyXG4gICAgICB7IHN0eWxlOiAnTExNLlJFUEhSQVNFX01PREFMLldSSVRJTkdfU1RZTEVTLicgKyAoc2VsZWN0ZWRXcml0aW5nU3R5bGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlIH0gXHJcbiAgICB9fVxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCBpbmZvLWljb25cIlxyXG4gICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtdWx0aWxpbmUtdG9vbHRpcFwiXHJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidMTE0uUkVQSFJBU0VfTU9EQUwuV1JJVElOR19TVFlMRVMuVE9PTFRJUF8nICsgKHNlbGVjdGVkV3JpdGluZ1N0eWxlIHwgdXBwZXJjYXNlKSB8IHRyYW5zbGF0ZVwiIFxyXG4gICAgPlxyXG4gICAgICBpbmZvXHJcbiAgICA8L3NwYW4+XHJcbiAgPC9wPlxyXG5cclxuICA8bGliLWxsbS10ZXh0YXJlYSBbdGV4dF09XCJ0ZXh0XCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZyB8fCAhcmVwaHJhc2VRdW90YUxlZnRcIiBbc2hvd0Vycm9yTWVzc2FnZV09XCJzaG93RXJyb3JNZXNzYWdlXCIgKHRleHRFZGl0RXZlbnQpPVwidGV4dCA9ICRldmVudDsgY2hlY2tDaGFyYWN0ZXJzTGltaXQoKVwiIChjb3B5RXZlbnQpPVwiY29weUV2ZW50KClcIiAoZGlzbGlrZUV2ZW50KT1cImRpc2xpa2VFdmVudCgpXCI+PC9saWItbGxtLXRleHRhcmVhPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImxsbS1yZXBocmFzZS1hY3Rpb25zLXdyYXBwZXJcIiBtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgPGRpdiAqbmdJZj1cInNob3dSZW1haW5pbmdRdW90YU1lc3NhZ2VcIiBbaW5uZXJIVE1MXT1cIidMTE0uUkVQSFJBU0VfTU9EQUwuTElNSVQnIHwgdHJhbnNsYXRlOiB7IGxpbWl0OiByZXBocmFzZVF1b3RhTGVmdCwgc3Vic2NyaXB0aW9uVXJsOiBzdWJzY3JpcHRpb25VcmwgfVwiPjwvZGl2PlxyXG5cclxuICA8ZGl2IFtjbGFzcy53LWZ1bGxdPVwiIXNob3dSZW1haW5pbmdRdW90YU1lc3NhZ2VcIiBjbGFzcz1cImxsbS1yZXBocmFzZS1hY3Rpb25zXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiaXNMb2FkaW5nOyBlbHNlIGNsb3NlQnV0dG9uXCIgbWF0LWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJjYW5jZWwoKVwiPlxyXG4gICAgICB7eyBcIkxMTS5SRVBIUkFTRV9NT0RBTC5DQU5DRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNjbG9zZUJ1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxyXG4gICAgICAgIHt7IFwiTExNLlJFUEhSQVNFX01PREFMLkNMT1NFXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICBjb2xvcj1cImFjY2VudFwiXHJcbiAgICAgIChjbGljayk9XCJyZXBocmFzZVRleHQoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcGhyYXNpbmdEaXNhYmxlZFwiXHJcbiAgICA+XHJcbiAgICAgIHt7XHJcbiAgICAgICAgKGlzTG9hZGluZ1xyXG4gICAgICAgICAgPyBcIkxMTS5SRVBIUkFTRV9NT0RBTC5SRVBIUkFTSU5HXCJcclxuICAgICAgICAgIDogXCJMTE0uUkVQSFJBU0VfTU9EQUwuUkVQSFJBU0VcIlxyXG4gICAgICAgICkgfCB0cmFuc2xhdGVcclxuICAgICAgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwaHJhc2UtdHJhbnNsYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2xsbS9jb21wb25lbnRzL3JlcGhyYXNlLXRyYW5zbGF0aW9uL3JlcGhyYXNlLXRyYW5zbGF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vY29tcG9uZW50cy9yZXBocmFzZS10cmFuc2xhdGlvbi9yZXBocmFzZS10cmFuc2xhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUUxRCxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVdEUsTUFBTSxPQUFPLDRCQUE0QjtJQTBCdkMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSx1QkFBdUI7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUNwRSxDQUFDO0lBRUQs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bml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExMTVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sbG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFF1b3RhU2VydmljZSwgUXVvdGFUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBMTE1EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xsbS1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMTE1Xcml0aW5nU3R5bGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGxtLXdyaXRpbmctc3R5bGUuZW51bSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9ub3RpZmljYXRpb24tbWVzc2FnZSc7XHJcbmltcG9ydCB7IExMTUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sbG0taGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQbGF1c2libGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGxhdXNpYmxlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcmVwaHJhc2UtdHJhbnNsYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBocmFzZS10cmFuc2xhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVwaHJhc2UtdHJhbnNsYXRpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwaHJhc2VUcmFuc2xhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nITogYm9vbGVhbjtcclxuICBzaG93RGVmYXVsdEVycm9yTWVzc2FnZSE6IGJvb2xlYW47XHJcbiAgc2hvd1JlbWFpbmluZ1F1b3RhTWVzc2FnZSE6IGJvb2xlYW47XHJcbiAgaXNSZXBocmFzZUNhbmNlbGVkITogYm9vbGVhbjtcclxuICByZXBocmFzZVF1b3RhTGVmdCE6IG51bWJlcjtcclxuICBzdWJzY3JpcHRpb25VcmwhOiBzdHJpbmc7XHJcbiAgcHJldmlvdXNXcml0aW5nU3R5bGUhOiBMTE1Xcml0aW5nU3R5bGU7XHJcbiAgc2VsZWN0ZWRXcml0aW5nU3R5bGUgPSBMTE1Xcml0aW5nU3R5bGUuR0VORVJBTDtcclxuXHJcbiAgcmVhY2hlZFF1b3RhTWVzc2FnZSE6IE5vdGlmaWNhdGlvbk1lc3NhZ2U7XHJcblxyXG4gIHN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgaW5pdGlhbFRleHQhOiBzdHJpbmc7XHJcbiAgcmVwaHJhc2VkVGV4dCA9ICcnO1xyXG4gIG1hbnVhbGx5RWRpdGVkVGV4dCA9ICcnO1xyXG5cclxuICBwcml2YXRlIHNhdmVkUmVwaHJhc2luZ3M6IHtzdHlsZTogTExNV3JpdGluZ1N0eWxlLCB0ZXh0OiBzdHJpbmd9W10gPSBbXTtcclxuICBcclxuICByZWFkb25seSB3cml0aW5nU3R5bGVzID0gT2JqZWN0LnZhbHVlcyhMTE1Xcml0aW5nU3R5bGUpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHRyaWFsUmVxdWVzdENvdW50ID0gMTU7XHJcblxyXG4gIG1pc3NpbmdRdW90YU1lc3NhZ2VDbG9zZWQgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGlzUmVwaHJhc2luZ0Rpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nIHx8ICF0aGlzLmluaXRpYWxUZXh0IHx8ICF0aGlzLnJlcGhyYXNlUXVvdGFMZWZ0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlZmF1bHRFcnJvck1lc3NhZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sbG1IZWxwZXJTZXJ2aWNlLmdldERlZmF1bHRFcnJvck1lc3NhZ2UoKTtcclxuICB9XHJcblxyXG4gIGdldCBzaG93TWlzc2luZ1F1b3RhTWVzc2FnZSgpIHtcclxuICAgIHJldHVybiAhdGhpcy5yZXBocmFzZVF1b3RhTGVmdCAmJiAhdGhpcy5taXNzaW5nUXVvdGFNZXNzYWdlQ2xvc2VkO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxsbVNlcnZpY2U6IExMTVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHF1b3RhU2VydmljZTogUXVvdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsbG1IZWxwZXJTZXJ2aWNlOiBMTE1IZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwbGF1c2libGVTZXJ2aWNlOiBQbGF1c2libGVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgZGF0YTogTExNRGF0YVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYWxUZXh0ID0gdGhpcy5kYXRhLnRleHQ7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvblVybCA9IHRoaXMubGxtU2VydmljZS5sbG1Db25maWd1cmF0aW9uLnN1YnNjcmlwdGlvblVybDtcclxuICAgIHRoaXMucmVhY2hlZFF1b3RhTWVzc2FnZSA9IHRoaXMubGxtSGVscGVyU2VydmljZS5nZXRSZWFjaGVkUXVvdGFNZXNzYWdlKCk7XHJcbiAgICB0aGlzLnJlZnJlc2hRdW90YSgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tSZXBocmFzZWRUZXh0U2F2ZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFdyaXRpbmdTdHlsZVNhdmUgPSB0aGlzLnNhdmVkUmVwaHJhc2luZ3MuZmluZCgocmVwaHJhc2luZykgPT4gcmVwaHJhc2luZy5zdHlsZSA9PT0gdGhpcy5zZWxlY3RlZFdyaXRpbmdTdHlsZSk7XHJcbiAgICBjb25zdCBwcmV2aW91c1dyaXRpbmdTdHlsZVNhdmUgPSB0aGlzLnNhdmVkUmVwaHJhc2luZ3MuZmluZCgoc2F2ZSkgPT4gc2F2ZS5zdHlsZSA9PT0gdGhpcy5wcmV2aW91c1dyaXRpbmdTdHlsZSk7XHJcbiAgICBcclxuICAgIGlmIChwcmV2aW91c1dyaXRpbmdTdHlsZVNhdmUpIHtcclxuICAgICAgY29uc3Qgc2F2ZSA9IHRoaXMuc2F2ZWRSZXBocmFzaW5ncy5maW5kKChzYXZlKSA9PiBzYXZlLnN0eWxlID09PSB0aGlzLnByZXZpb3VzV3JpdGluZ1N0eWxlKTtcclxuICAgICAgaWYgKHNhdmUpIHtcclxuICAgICAgICBzYXZlLnRleHQgPSB0aGlzLnJlcGhyYXNlZFRleHQgIT09ICcnID8gdGhpcy5yZXBocmFzZWRUZXh0IDogdGhpcy5pbml0aWFsVGV4dDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlZFJlcGhyYXNpbmdzLnB1c2goeyBzdHlsZTogdGhpcy5wcmV2aW91c1dyaXRpbmdTdHlsZSwgdGV4dDogdGhpcy5yZXBocmFzZWRUZXh0ICE9PSAnJyA/IHRoaXMucmVwaHJhc2VkVGV4dCA6IHRoaXMuaW5pdGlhbFRleHQgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucmVwaHJhc2VkVGV4dCA9IHNlbGVjdGVkV3JpdGluZ1N0eWxlU2F2ZT8udGV4dCA/PyB0aGlzLmluaXRpYWxUZXh0O1xyXG4gICAgdGhpcy5tYW51YWxseUVkaXRlZFRleHQgPSAnJztcclxuICB9XHJcblxyXG4gIHNhdmVXcml0aW5nU3R5bGVCZWZvcmVDaGFuZ2UoaXNPcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICghaXNPcGVuZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJldmlvdXNXcml0aW5nU3R5bGUgPSB0aGlzLnNlbGVjdGVkV3JpdGluZ1N0eWxlO1xyXG4gIH1cclxuXHJcbiAgcmVwaHJhc2VUZXh0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5sbG1TZXJ2aWNlXHJcbiAgICAgIC5yZXBocmFzZSh7IHRleHQ6IHRoaXMubWFudWFsbHlFZGl0ZWRUZXh0ICE9PSAnJyA/IHRoaXMubWFudWFsbHlFZGl0ZWRUZXh0IDogdGhpcy5pbml0aWFsVGV4dCwgc3R5bGU6IHRoaXMuc2VsZWN0ZWRXcml0aW5nU3R5bGUgfSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuaXNMb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcGhyYXNlZFRleHQgPSByZXNwb25zZTtcclxuICAgICAgICAgIHRoaXMubWFudWFsbHlFZGl0ZWRUZXh0ID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnNob3dEZWZhdWx0RXJyb3JNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hRdW90YSh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dEZWZhdWx0RXJyb3JNZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGNvcHlFdmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGxhdXNpYmxlU2VydmljZS5yZXBocmFzZUNvcHlFdmVudCgpO1xyXG4gIH1cclxuICBcclxuICBkaXNsaWtlRXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBsYXVzaWJsZVNlcnZpY2UucmVwaHJhc2VEaXNsaWtlRXZlbnQoKTtcclxuICB9XHJcblxyXG4gIHRleHRFZGl0RXZlbnQodGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1hbnVhbGx5RWRpdGVkVGV4dCA9IHRleHQ7XHJcbiAgICB0aGlzLmluaXRpYWxUZXh0ID0gdGV4dDtcclxuICAgIHRoaXMucmVwaHJhc2VkVGV4dCA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoUXVvdGEoZGVjcmVhc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnF1b3RhU2VydmljZS5nZXRRdW90YVVzYWdlKCkucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldFF1b3RhTWVzc2FnZSgpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVvdGEgPSByZXNwb25zZS51c2FnZS5maW5kKChpdGVtKSA9PiBpdGVtLnF1b3RhVHlwZSA9PT0gUXVvdGFUeXBlLkxMTV9DSEFSQUNURVJfQ09VTlQpO1xyXG5cclxuICAgICAgICBpZiAoIXF1b3RhKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFF1b3RhRnJvbUxvY2FsU3RvcmFnZShkZWNyZWFzZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcGhyYXNlUXVvdGFMZWZ0ID0gcXVvdGEucXVvdGFSZW1haW5pbmc7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRRdW90YUZyb21Mb2NhbFN0b3JhZ2UoZGVjcmVhc2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UXVvdGFNZXNzYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93UmVtYWluaW5nUXVvdGFNZXNzYWdlID0gdGhpcy5yZXBocmFzZVF1b3RhTGVmdCA8PSB0aGlzLnRyaWFsUmVxdWVzdENvdW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRRdW90YUZyb21Mb2NhbFN0b3JhZ2UoZGVjcmVhc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcGhyYXNlUXVvdGFMZWZ0ID0gdGhpcy5sbG1IZWxwZXJTZXJ2aWNlLnNldFF1b3RhTG9jYWxTdG9yYWdlVXNhZ2UoZGVjcmVhc2UpOyAgICAgICAgICBcclxuICB9XHJcbn1cclxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+e3sgXCJMTE0uUkVQSFJBU0VfTU9EQUwuVElUTEVcIiB8IHRyYW5zbGF0ZSB9fTwvaDE+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxwPnt7IFwiTExNLlJFUEhSQVNFX01PREFMLkRFU0NSSVBUSU9OXCIgfCB0cmFuc2xhdGUgfX08L3A+XHJcblxyXG4gIDxsaWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlICpuZ0lmPVwic2hvd01pc3NpbmdRdW90YU1lc3NhZ2VcIiBbbWVzc2FnZV09XCJyZWFjaGVkUXVvdGFNZXNzYWdlXCIgKGNsb3NlQ2xpY2tlZCk9XCJtaXNzaW5nUXVvdGFNZXNzYWdlQ2xvc2VkID0gdHJ1ZVwiPjwvbGliLXRsZC1ub3RpZmljYXRpb24tbWVzc2FnZT5cclxuICA8bGliLXRsZC1ub3RpZmljYXRpb24tbWVzc2FnZSAqbmdJZj1cInNob3dEZWZhdWx0RXJyb3JNZXNzYWdlXCIgW21lc3NhZ2VdPVwiZGVmYXVsdEVycm9yTWVzc2FnZVwiIChjbG9zZUNsaWNrZWQpPVwic2hvd0RlZmF1bHRFcnJvck1lc3NhZ2UgPSBmYWxzZVwiPjwvbGliLXRsZC1ub3RpZmljYXRpb24tbWVzc2FnZT5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJ3LWZ1bGwgbGxtLXdyaXRpbmctc3R5bGUtc2VsZWN0XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgIDxtYXQtbGFiZWw+e3sgJ0xMTS5SRVBIUkFTRV9NT0RBTC5XUklUSU5HX1NUWUxFUy5USVRMRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgIDxtYXQtc2VsZWN0IChvcGVuZWRDaGFuZ2UpPVwic2F2ZVdyaXRpbmdTdHlsZUJlZm9yZUNoYW5nZSgkZXZlbnQpXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGVja1JlcGhyYXNlZFRleHRTYXZlcygpXCIgWyh2YWx1ZSldPVwic2VsZWN0ZWRXcml0aW5nU3R5bGVcIj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0eWxlIG9mIHdyaXRpbmdTdHlsZXNcIiBbdmFsdWVdPVwic3R5bGVcIj5cclxuICAgICAgICB7eyAnTExNLlJFUEhSQVNFX01PREFMLldSSVRJTkdfU1RZTEVTLicgKyAoc3R5bGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8cCBjbGFzcz1cImxsbS13cml0aW5nLXN0eWxlIHRleHQtbS1zZW1pLWJvbGRcIj57e1xyXG4gICAgICBcIkxMTS5SRVBIUkFTRV9NT0RBTC5XUklUSU5HX1NUWUxFUy5TUEVDSUZJQ19TVFlMRVwiIHwgdHJhbnNsYXRlIDogXHJcbiAgICAgIHsgc3R5bGU6ICdMTE0uUkVQSFJBU0VfTU9EQUwuV1JJVElOR19TVFlMRVMuJyArIChzZWxlY3RlZFdyaXRpbmdTdHlsZSB8IHVwcGVyY2FzZSkgfCB0cmFuc2xhdGUgfSBcclxuICAgIH19XHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIGluZm8taWNvblwiXHJcbiAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm11bHRpbGluZS10b29sdGlwXCJcclxuICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ0xMTS5SRVBIUkFTRV9NT0RBTC5XUklUSU5HX1NUWUxFUy5UT09MVElQXycgKyAoc2VsZWN0ZWRXcml0aW5nU3R5bGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlXCIgXHJcbiAgICA+XHJcbiAgICAgIGluZm9cclxuICAgIDwvc3Bhbj5cclxuICA8L3A+XHJcblxyXG4gIDxsaWItbGxtLXRleHRhcmVhIFt0ZXh0XT1cInJlcGhyYXNlZFRleHQgIT09ICcnID8gcmVwaHJhc2VkVGV4dCA6IGluaXRpYWxUZXh0XCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZyB8fCAhcmVwaHJhc2VRdW90YUxlZnRcIiAodGV4dEVkaXRFdmVudCk9XCJ0ZXh0RWRpdEV2ZW50KCRldmVudClcIiAoY29weUV2ZW50KT1cImNvcHlFdmVudCgpXCIgKGRpc2xpa2VFdmVudCk9XCJkaXNsaWtlRXZlbnQoKVwiPjwvbGliLWxsbS10ZXh0YXJlYT5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJsbG0tcmVwaHJhc2UtYWN0aW9ucy13cmFwcGVyXCIgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93UmVtYWluaW5nUXVvdGFNZXNzYWdlXCIgW2lubmVySFRNTF09XCInTExNLlJFUEhSQVNFX01PREFMLkxJTUlUJyB8IHRyYW5zbGF0ZTogeyBsaW1pdDogcmVwaHJhc2VRdW90YUxlZnQsIHN1YnNjcmlwdGlvblVybDogc3Vic2NyaXB0aW9uVXJsIH1cIj48L2Rpdj5cclxuXHJcbiAgPGRpdiBbY2xhc3Mudy1mdWxsXT1cIiFzaG93UmVtYWluaW5nUXVvdGFNZXNzYWdlXCIgY2xhc3M9XCJsbG0tcmVwaHJhc2UtYWN0aW9uc1wiPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImlzTG9hZGluZzsgZWxzZSBjbG9zZUJ1dHRvblwiIG1hdC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAge3sgXCJMTE0uUkVQSFJBU0VfTU9EQUwuQ0FOQ0VMXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjY2xvc2VCdXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIj5cclxuICAgICAgICB7eyBcIkxMTS5SRVBIUkFTRV9NT0RBTC5DTE9TRVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIFxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAoY2xpY2spPVwicmVwaHJhc2VUZXh0KClcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBocmFzaW5nRGlzYWJsZWRcIlxyXG4gICAgPlxyXG4gICAgICB7eyBcIkxMTS5SRVBIUkFTRV9NT0RBTC5SRVBIUkFTRVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -14,12 +14,13 @@ import * as i6 from "@angular/material/menu";
14
14
  import * as i7 from "@angular/material/tooltip";
15
15
  import * as i8 from "@ngx-translate/core";
16
16
  export class LLMComponent {
17
- get isTextSummarasible() {
17
+ get isTextSummarizable() {
18
18
  return this.text.length > 100;
19
19
  }
20
20
  constructor(dialog, iconService) {
21
21
  this.dialog = dialog;
22
22
  this.iconService = iconService;
23
+ this.rephrasableLanguagesCodeList = ['en'];
23
24
  this.llmActions = Object.values(LLMActions);
24
25
  this.llmAction = LLMActions;
25
26
  this.iconService.registerIcons(icons);
@@ -42,16 +43,20 @@ export class LLMComponent {
42
43
  }
43
44
  }
44
45
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LLMComponent, deps: [{ token: i1.MatDialog }, { token: i2.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LLMComponent, selector: "lib-llm", inputs: { text: "text", language: "language", llmActions: "llmActions" }, ngImport: i0, template: "<button [matTooltip]=\"'LLM.MENU_TOOLTIP' | translate\" mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon svgIcon=\"llm_menu\"></mat-icon>\r\n</button>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-container *ngFor=\"let action of llmActions\">\r\n <button\r\n mat-menu-item\r\n [disabled]=\"action === llmAction.SUMMARY && !isTextSummarasible\"\r\n (click)=\"openLLMModal(action)\"\r\n >\r\n {{ \"LLM.\" + action | translate }}\r\n </button>\r\n </ng-container>\r\n</mat-menu>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
46
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LLMComponent, selector: "lib-llm", inputs: { text: "text", language: "language", isMenuDisabled: "isMenuDisabled", rephrasableLanguagesCodeList: "rephrasableLanguagesCodeList", llmActions: "llmActions" }, ngImport: i0, template: "<button [disabled]=\"isMenuDisabled\" [matTooltip]=\"'LLM.MENU_TOOLTIP' | translate\" mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon svgIcon=\"llm_menu\"></mat-icon>\r\n</button>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-container *ngFor=\"let action of llmActions\">\r\n <div [matTooltip]=\"((action === llmAction.REPHRASE) && !rephrasableLanguagesCodeList.includes(language)) ? ('LLM.MENU_REPHRASE_DISABLED_TOOLTIP' | translate) : ''\">\r\n <button\r\n mat-menu-item\r\n [disabled]=\"((action === llmAction.SUMMARY) && !isTextSummarizable) || ((action === llmAction.REPHRASE) && !rephrasableLanguagesCodeList.includes(language))\"\r\n (click)=\"openLLMModal(action)\"\r\n >\r\n {{ \"LLM.\" + action | translate }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n</mat-menu>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
46
47
  }
47
48
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LLMComponent, decorators: [{
48
49
  type: Component,
49
- args: [{ selector: 'lib-llm', template: "<button [matTooltip]=\"'LLM.MENU_TOOLTIP' | translate\" mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon svgIcon=\"llm_menu\"></mat-icon>\r\n</button>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-container *ngFor=\"let action of llmActions\">\r\n <button\r\n mat-menu-item\r\n [disabled]=\"action === llmAction.SUMMARY && !isTextSummarasible\"\r\n (click)=\"openLLMModal(action)\"\r\n >\r\n {{ \"LLM.\" + action | translate }}\r\n </button>\r\n </ng-container>\r\n</mat-menu>\r\n" }]
50
+ args: [{ selector: 'lib-llm', template: "<button [disabled]=\"isMenuDisabled\" [matTooltip]=\"'LLM.MENU_TOOLTIP' | translate\" mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon svgIcon=\"llm_menu\"></mat-icon>\r\n</button>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-container *ngFor=\"let action of llmActions\">\r\n <div [matTooltip]=\"((action === llmAction.REPHRASE) && !rephrasableLanguagesCodeList.includes(language)) ? ('LLM.MENU_REPHRASE_DISABLED_TOOLTIP' | translate) : ''\">\r\n <button\r\n mat-menu-item\r\n [disabled]=\"((action === llmAction.SUMMARY) && !isTextSummarizable) || ((action === llmAction.REPHRASE) && !rephrasableLanguagesCodeList.includes(language))\"\r\n (click)=\"openLLMModal(action)\"\r\n >\r\n {{ \"LLM.\" + action | translate }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n</mat-menu>\r\n" }]
50
51
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.IconService }]; }, propDecorators: { text: [{
51
52
  type: Input
52
53
  }], language: [{
53
54
  type: Input
55
+ }], isMenuDisabled: [{
56
+ type: Input
57
+ }], rephrasableLanguagesCodeList: [{
58
+ type: Input
54
59
  }], llmActions: [{
55
60
  type: Input
56
61
  }] } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vbGxtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vbGxtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHOUMsT0FBTyxLQUFLLEtBQUssTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7QUFPakMsTUFBTSxPQUFPLFlBQVk7SUFPdkIsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQW1CLE1BQWlCLEVBQW1CLFdBQXdCO1FBQTVELFdBQU0sR0FBTixNQUFNLENBQVc7UUFBbUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFSdEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQsY0FBUyxHQUFHLFVBQVUsQ0FBQztRQU9yQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWtCO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyRCxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTztZQUMzRCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTthQUN4QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxNQUFrQjtRQUNoRCxRQUFRLE1BQU0sRUFBRTtZQUNkLEtBQUssVUFBVSxDQUFDLFFBQVE7Z0JBQ3RCLE9BQU8sNEJBQTRCLENBQUM7WUFDdEMsS0FBSyxVQUFVLENBQUMsT0FBTztnQkFDckIsT0FBTyxzQkFBc0IsQ0FBQztTQUNqQztJQUNILENBQUM7K0dBaENVLFlBQVk7bUdBQVosWUFBWSx5SENmekIseWdCQWVBOzs0RkRBYSxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVM7MEhBS1YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTExNQWN0aW9ucyB9IGZyb20gJy4vbW9kZWxzL2xsbS1hY3Rpb25zLmVudW0nO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBSZXBocmFzZVRyYW5zbGF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JlcGhyYXNlLXRyYW5zbGF0aW9uL3JlcGhyYXNlLXRyYW5zbGF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENyZWF0ZVN1bW1hcnlDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3JlYXRlLXN1bW1hcnkvY3JlYXRlLXN1bW1hcnkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzb2x1dGlvbkhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgKiBhcyBpY29ucyBmcm9tICcuL2ljb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWxsbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xsbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGxtLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMTE1Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHRleHQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGFuZ3VhZ2UhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGxtQWN0aW9ucyA9IE9iamVjdC52YWx1ZXMoTExNQWN0aW9ucyk7XHJcblxyXG4gIGxsbUFjdGlvbiA9IExMTUFjdGlvbnM7XHJcblxyXG4gIGdldCBpc1RleHRTdW1tYXJhc2libGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aCA+IDEwMDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UpIHtcclxuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJJY29ucyhpY29ucyk7XHJcbiAgfVxyXG5cclxuICBvcGVuTExNTW9kYWwoYWN0aW9uOiBMTE1BY3Rpb25zKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZ2V0Q29tcG9uZW50QnlMTE1BY3Rpb24oYWN0aW9uKSwge1xyXG4gICAgICBtaW5XaWR0aDogUmVzb2x1dGlvbkhlbHBlci5pc01vYmlsZVJlcygpID8gJzEwMCUnIDogJzgwMHB4JyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRleHQ6IHRoaXMudGV4dCxcclxuICAgICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50QnlMTE1BY3Rpb24oYWN0aW9uOiBMTE1BY3Rpb25zKTogQ29tcG9uZW50VHlwZTxSZXBocmFzZVRyYW5zbGF0aW9uQ29tcG9uZW50IHwgQ3JlYXRlU3VtbWFyeUNvbXBvbmVudD4ge1xyXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcclxuICAgICAgY2FzZSBMTE1BY3Rpb25zLlJFUEhSQVNFOlxyXG4gICAgICAgIHJldHVybiBSZXBocmFzZVRyYW5zbGF0aW9uQ29tcG9uZW50O1xyXG4gICAgICBjYXNlIExMTUFjdGlvbnMuU1VNTUFSWTpcclxuICAgICAgICByZXR1cm4gQ3JlYXRlU3VtbWFyeUNvbXBvbmVudDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvbiBbbWF0VG9vbHRpcF09XCInTExNLk1FTlVfVE9PTFRJUCcgfCB0cmFuc2xhdGVcIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICA8bWF0LWljb24gc3ZnSWNvbj1cImxsbV9tZW51XCI+PC9tYXQtaWNvbj5cclxuPC9idXR0b24+XHJcblxyXG48bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGxsbUFjdGlvbnNcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uID09PSBsbG1BY3Rpb24uU1VNTUFSWSAmJiAhaXNUZXh0U3VtbWFyYXNpYmxlXCJcclxuICAgICAgKGNsaWNrKT1cIm9wZW5MTE1Nb2RhbChhY3Rpb24pXCJcclxuICAgID5cclxuICAgICAge3sgXCJMTE0uXCIgKyBhY3Rpb24gfCB0cmFuc2xhdGUgfX1cclxuICA8L2J1dHRvbj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9tYXQtbWVudT5cclxuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vbGxtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vbGxtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHOUMsT0FBTyxLQUFLLEtBQUssTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7QUFPakMsTUFBTSxPQUFPLFlBQVk7SUFTdkIsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQW1CLE1BQWlCLEVBQW1CLFdBQXdCO1FBQTVELFdBQU0sR0FBTixNQUFNLENBQVc7UUFBbUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFUdEUsaUNBQTRCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxlQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2QyxjQUFTLEdBQUcsVUFBVSxDQUFDO1FBTzlCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBa0I7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JELFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQzNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE1BQWtCO1FBQ2hELFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxVQUFVLENBQUMsUUFBUTtnQkFDdEIsT0FBTyw0QkFBNEIsQ0FBQztZQUN0QyxLQUFLLFVBQVUsQ0FBQyxPQUFPO2dCQUNyQixPQUFPLHNCQUFzQixDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzsrR0FsQ1UsWUFBWTttR0FBWixZQUFZLHlOQ2Z6QixnMUJBaUJBOzs0RkRGYSxZQUFZO2tCQUx4QixTQUFTOytCQUNFLFNBQVM7MEhBS1YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTExNQWN0aW9ucyB9IGZyb20gJy4vbW9kZWxzL2xsbS1hY3Rpb25zLmVudW0nO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBSZXBocmFzZVRyYW5zbGF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JlcGhyYXNlLXRyYW5zbGF0aW9uL3JlcGhyYXNlLXRyYW5zbGF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENyZWF0ZVN1bW1hcnlDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3JlYXRlLXN1bW1hcnkvY3JlYXRlLXN1bW1hcnkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzb2x1dGlvbkhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgKiBhcyBpY29ucyBmcm9tICcuL2ljb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWxsbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xsbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGxtLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMTE1Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHRleHQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGFuZ3VhZ2UhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNNZW51RGlzYWJsZWQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHJlcGhyYXNhYmxlTGFuZ3VhZ2VzQ29kZUxpc3QgPSBbJ2VuJ107XHJcbiAgQElucHV0KCkgbGxtQWN0aW9ucyA9IE9iamVjdC52YWx1ZXMoTExNQWN0aW9ucyk7XHJcblxyXG4gIHJlYWRvbmx5IGxsbUFjdGlvbiA9IExMTUFjdGlvbnM7XHJcblxyXG4gIGdldCBpc1RleHRTdW1tYXJpemFibGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aCA+IDEwMDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UpIHtcclxuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJJY29ucyhpY29ucyk7XHJcbiAgfVxyXG5cclxuICBvcGVuTExNTW9kYWwoYWN0aW9uOiBMTE1BY3Rpb25zKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZ2V0Q29tcG9uZW50QnlMTE1BY3Rpb24oYWN0aW9uKSwge1xyXG4gICAgICBtaW5XaWR0aDogUmVzb2x1dGlvbkhlbHBlci5pc01vYmlsZVJlcygpID8gJzEwMCUnIDogJzgwMHB4JyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRleHQ6IHRoaXMudGV4dCxcclxuICAgICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50QnlMTE1BY3Rpb24oYWN0aW9uOiBMTE1BY3Rpb25zKTogQ29tcG9uZW50VHlwZTxSZXBocmFzZVRyYW5zbGF0aW9uQ29tcG9uZW50IHwgQ3JlYXRlU3VtbWFyeUNvbXBvbmVudD4ge1xyXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcclxuICAgICAgY2FzZSBMTE1BY3Rpb25zLlJFUEhSQVNFOlxyXG4gICAgICAgIHJldHVybiBSZXBocmFzZVRyYW5zbGF0aW9uQ29tcG9uZW50O1xyXG4gICAgICBjYXNlIExMTUFjdGlvbnMuU1VNTUFSWTpcclxuICAgICAgICByZXR1cm4gQ3JlYXRlU3VtbWFyeUNvbXBvbmVudDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNNZW51RGlzYWJsZWRcIiBbbWF0VG9vbHRpcF09XCInTExNLk1FTlVfVE9PTFRJUCcgfCB0cmFuc2xhdGVcIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICA8bWF0LWljb24gc3ZnSWNvbj1cImxsbV9tZW51XCI+PC9tYXQtaWNvbj5cclxuPC9idXR0b24+XHJcblxyXG48bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGxsbUFjdGlvbnNcIj5cclxuICAgIDxkaXYgW21hdFRvb2x0aXBdPVwiKChhY3Rpb24gPT09IGxsbUFjdGlvbi5SRVBIUkFTRSkgJiYgIXJlcGhyYXNhYmxlTGFuZ3VhZ2VzQ29kZUxpc3QuaW5jbHVkZXMobGFuZ3VhZ2UpKSA/ICgnTExNLk1FTlVfUkVQSFJBU0VfRElTQUJMRURfVE9PTFRJUCcgfCB0cmFuc2xhdGUpIDogJydcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICBbZGlzYWJsZWRdPVwiKChhY3Rpb24gPT09IGxsbUFjdGlvbi5TVU1NQVJZKSAmJiAhaXNUZXh0U3VtbWFyaXphYmxlKSB8fCAoKGFjdGlvbiA9PT0gbGxtQWN0aW9uLlJFUEhSQVNFKSAmJiAhcmVwaHJhc2FibGVMYW5ndWFnZXNDb2RlTGlzdC5pbmNsdWRlcyhsYW5ndWFnZSkpXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkxMTU1vZGFsKGFjdGlvbilcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgXCJMTE0uXCIgKyBhY3Rpb24gfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9tYXQtbWVudT5cclxuIl19
@@ -5,10 +5,11 @@ import * as i1 from "./llm.service";
5
5
  export class LLMHelperService {
6
6
  constructor(llmService) {
7
7
  this.llmService = llmService;
8
+ this.LLMQuotaLocalStorageKey = 'LLM_QUOTA';
8
9
  }
9
- setQuotaLocalStorageUsage(quotaLocalStorageKey, decrease) {
10
+ setQuotaLocalStorageUsage(decrease) {
10
11
  const trialRequestCount = 15;
11
- const localStorageObj = localStorage.getItem(quotaLocalStorageKey);
12
+ const localStorageObj = localStorage.getItem(this.LLMQuotaLocalStorageKey);
12
13
  const currentDate = new Date();
13
14
  let trialQuota = {
14
15
  remainingQuota: trialRequestCount,
@@ -28,20 +29,27 @@ export class LLMHelperService {
28
29
  }
29
30
  }
30
31
  trialQuota.lastUsedAt = currentDate;
31
- localStorage.setItem(quotaLocalStorageKey, JSON.stringify(trialQuota));
32
+ localStorage.setItem(this.LLMQuotaLocalStorageKey, JSON.stringify(trialQuota));
32
33
  return trialQuota.remainingQuota;
33
34
  }
34
35
  getReachedQuotaMessage() {
35
36
  return {
36
37
  type: NotificationMessageType.ERROR,
37
38
  body: 'LLM.ERRORS.QUOTA_LIMIT_REACHED',
38
- hideClose: true,
39
39
  hideIcon: true,
40
40
  localizationParams: {
41
41
  subscriptionUrl: this.llmService.llmConfiguration.subscriptionUrl,
42
42
  },
43
43
  };
44
44
  }
45
+ getDefaultErrorMessage() {
46
+ return {
47
+ type: NotificationMessageType.ERROR,
48
+ body: 'LLM.ERRORS.DEFAULT',
49
+ hideIcon: true,
50
+ localizationParams: { supportEmail: this.llmService.llmConfiguration.supportEmail }
51
+ };
52
+ }
45
53
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LLMHelperService, deps: [{ token: i1.LLMService }], target: i0.ɵɵFactoryTarget.Injectable }); }
46
54
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LLMHelperService, providedIn: 'root' }); }
47
55
  }
@@ -51,4 +59,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
51
59
  providedIn: 'root'
52
60
  }]
53
61
  }], ctorParameters: function () { return [{ type: i1.LLMService }]; } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2xsbS9zZXJ2aWNlcy9sbG0taGVscGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXVCLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQU0xRixNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQThCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDO0lBRXhELHlCQUF5QixDQUFDLG9CQUE0QixFQUFFLFFBQWtCO1FBQ3hFLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksVUFBVSxHQUFHO1lBQ2YsY0FBYyxFQUFFLGlCQUFpQjtZQUNqQyxVQUFVLEVBQUUsV0FBVztTQUN4QixDQUFDO1FBRUYsSUFBSSxlQUFlLEVBQUU7WUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM5QyxVQUFVLEdBQUcsU0FBUyxDQUFDO1lBRXZCLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVyRCxvRUFBb0U7WUFDcEUsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxLQUFLLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDdEssaUNBQWlDO2dCQUNqQyxVQUFVLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDO2FBQy9DO1lBRUQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osVUFBVSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7YUFDaEM7U0FDRjtRQUVELFVBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO1FBRXBDLFlBQVksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXZFLE9BQU8sVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU87WUFDTCxJQUFJLEVBQUUsdUJBQXVCLENBQUMsS0FBSztZQUNuQyxJQUFJLEVBQUUsZ0NBQWdDO1lBQ3RDLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxrQkFBa0IsRUFBRTtnQkFDbEIsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsZUFBZTthQUNsRTtTQUNGLENBQUM7SUFDSixDQUFDOytHQTlDVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLW1lc3NhZ2UnO1xyXG5pbXBvcnQgeyBMTE1TZXJ2aWNlIH0gZnJvbSAnLi9sbG0uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMTE1IZWxwZXJTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvciAocHJpdmF0ZSByZWFkb25seSBsbG1TZXJ2aWNlOiBMTE1TZXJ2aWNlKSB7fVxyXG5cclxuICBzZXRRdW90YUxvY2FsU3RvcmFnZVVzYWdlKHF1b3RhTG9jYWxTdG9yYWdlS2V5OiBzdHJpbmcsIGRlY3JlYXNlPzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBjb25zdCB0cmlhbFJlcXVlc3RDb3VudCA9IDE1O1xyXG4gICAgY29uc3QgbG9jYWxTdG9yYWdlT2JqID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0ocXVvdGFMb2NhbFN0b3JhZ2VLZXkpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgbGV0IHRyaWFsUXVvdGEgPSB7XHJcbiAgICAgIHJlbWFpbmluZ1F1b3RhOiB0cmlhbFJlcXVlc3RDb3VudCxcclxuICAgICAgbGFzdFVzZWRBdDogY3VycmVudERhdGVcclxuICAgIH07XHJcbiAgXHJcbiAgICBpZiAobG9jYWxTdG9yYWdlT2JqKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZE9iaiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlT2JqKTtcclxuICAgICAgdHJpYWxRdW90YSA9IHBhcnNlZE9iajtcclxuICBcclxuICAgICAgY29uc3QgbGFzdFVzZWREYXRlID0gbmV3IERhdGUodHJpYWxRdW90YS5sYXN0VXNlZEF0KTtcclxuICBcclxuICAgICAgLy8gQ2hlY2tpbmcgaWYgdGhlIGxhc3QgdXNlZCBkYXRlIGlzIGZyb20gYSBkaWZmZXJlbnQgZGF5IHRoYW4gdG9kYXlcclxuICAgICAgaWYgKGxhc3RVc2VkRGF0ZS5nZXREYXRlKCkgIT09IGN1cnJlbnREYXRlLmdldERhdGUoKSB8fCBsYXN0VXNlZERhdGUuZ2V0TW9udGgoKSAhPT0gY3VycmVudERhdGUuZ2V0TW9udGgoKSB8fCBsYXN0VXNlZERhdGUuZ2V0RnVsbFllYXIoKSAhPT0gY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSkge1xyXG4gICAgICAgIC8vIFJlc2V0aW5nIHF1b3RhIGZvciB0aGUgbmV3IGRheVxyXG4gICAgICAgIHRyaWFsUXVvdGEucmVtYWluaW5nUXVvdGEgPSB0cmlhbFJlcXVlc3RDb3VudDsgIFxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGlmIChkZWNyZWFzZSkge1xyXG4gICAgICAgIHRyaWFsUXVvdGEucmVtYWluaW5nUXVvdGEgLT0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gICAgdHJpYWxRdW90YS5sYXN0VXNlZEF0ID0gY3VycmVudERhdGU7XHJcblxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0ocXVvdGFMb2NhbFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KHRyaWFsUXVvdGEpKTtcclxuXHJcbiAgICByZXR1cm4gdHJpYWxRdW90YS5yZW1haW5pbmdRdW90YTtcclxuICB9XHJcblxyXG4gIGdldFJlYWNoZWRRdW90YU1lc3NhZ2UoKTogTm90aWZpY2F0aW9uTWVzc2FnZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiBOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5FUlJPUixcclxuICAgICAgYm9keTogJ0xMTS5FUlJPUlMuUVVPVEFfTElNSVRfUkVBQ0hFRCcsXHJcbiAgICAgIGhpZGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGlkZUljb246IHRydWUsXHJcbiAgICAgIGxvY2FsaXphdGlvblBhcmFtczoge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvblVybDogdGhpcy5sbG1TZXJ2aWNlLmxsbUNvbmZpZ3VyYXRpb24uc3Vic2NyaXB0aW9uVXJsLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2xsbS9zZXJ2aWNlcy9sbG0taGVscGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXVCLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQU0xRixNQUFNLE9BQU8sZ0JBQWdCO0lBRzNCLFlBQThCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFGbkMsNEJBQXVCLEdBQUcsV0FBVyxDQUFDO0lBRUEsQ0FBQztJQUV4RCx5QkFBeUIsQ0FBQyxRQUFrQjtRQUMxQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxVQUFVLEdBQUc7WUFDZixjQUFjLEVBQUUsaUJBQWlCO1lBQ2pDLFVBQVUsRUFBRSxXQUFXO1NBQ3hCLENBQUM7UUFFRixJQUFJLGVBQWUsRUFBRTtZQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzlDLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFFdkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJELG9FQUFvRTtZQUNwRSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUN0SyxpQ0FBaUM7Z0JBQ2pDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUM7YUFDL0M7WUFFRCxJQUFJLFFBQVEsRUFBRTtnQkFDWixVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQzthQUNoQztTQUNGO1FBRUQsVUFBVSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFFcEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRS9FLE9BQU8sVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU87WUFDTCxJQUFJLEVBQUUsdUJBQXVCLENBQUMsS0FBSztZQUNuQyxJQUFJLEVBQUUsZ0NBQWdDO1lBQ3RDLFFBQVEsRUFBRSxJQUFJO1lBQ2Qsa0JBQWtCLEVBQUU7Z0JBQ2xCLGVBQWUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLGVBQWU7YUFDbEU7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPO1lBQ0wsSUFBSSxFQUFFLHVCQUF1QixDQUFDLEtBQUs7WUFDbkMsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixRQUFRLEVBQUUsSUFBSTtZQUNkLGtCQUFrQixFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFO1NBQ3BGLENBQUE7SUFDSCxDQUFDOytHQXhEVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLW1lc3NhZ2UnO1xyXG5pbXBvcnQgeyBMTE1TZXJ2aWNlIH0gZnJvbSAnLi9sbG0uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMTE1IZWxwZXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IExMTVF1b3RhTG9jYWxTdG9yYWdlS2V5ID0gJ0xMTV9RVU9UQSc7XHJcblxyXG4gIGNvbnN0cnVjdG9yIChwcml2YXRlIHJlYWRvbmx5IGxsbVNlcnZpY2U6IExMTVNlcnZpY2UpIHt9XHJcblxyXG4gIHNldFF1b3RhTG9jYWxTdG9yYWdlVXNhZ2UoZGVjcmVhc2U/OiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHRyaWFsUmVxdWVzdENvdW50ID0gMTU7XHJcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2VPYmogPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxMTVF1b3RhTG9jYWxTdG9yYWdlS2V5KTtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIGxldCB0cmlhbFF1b3RhID0ge1xyXG4gICAgICByZW1haW5pbmdRdW90YTogdHJpYWxSZXF1ZXN0Q291bnQsXHJcbiAgICAgIGxhc3RVc2VkQXQ6IGN1cnJlbnREYXRlXHJcbiAgICB9O1xyXG4gIFxyXG4gICAgaWYgKGxvY2FsU3RvcmFnZU9iaikge1xyXG4gICAgICBjb25zdCBwYXJzZWRPYmogPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU9iaik7XHJcbiAgICAgIHRyaWFsUXVvdGEgPSBwYXJzZWRPYmo7XHJcbiAgXHJcbiAgICAgIGNvbnN0IGxhc3RVc2VkRGF0ZSA9IG5ldyBEYXRlKHRyaWFsUXVvdGEubGFzdFVzZWRBdCk7XHJcbiAgXHJcbiAgICAgIC8vIENoZWNraW5nIGlmIHRoZSBsYXN0IHVzZWQgZGF0ZSBpcyBmcm9tIGEgZGlmZmVyZW50IGRheSB0aGFuIHRvZGF5XHJcbiAgICAgIGlmIChsYXN0VXNlZERhdGUuZ2V0RGF0ZSgpICE9PSBjdXJyZW50RGF0ZS5nZXREYXRlKCkgfHwgbGFzdFVzZWREYXRlLmdldE1vbnRoKCkgIT09IGN1cnJlbnREYXRlLmdldE1vbnRoKCkgfHwgbGFzdFVzZWREYXRlLmdldEZ1bGxZZWFyKCkgIT09IGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkpIHtcclxuICAgICAgICAvLyBSZXNldGluZyBxdW90YSBmb3IgdGhlIG5ldyBkYXlcclxuICAgICAgICB0cmlhbFF1b3RhLnJlbWFpbmluZ1F1b3RhID0gdHJpYWxSZXF1ZXN0Q291bnQ7ICBcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAoZGVjcmVhc2UpIHtcclxuICAgICAgICB0cmlhbFF1b3RhLnJlbWFpbmluZ1F1b3RhIC09IDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICBcclxuICAgIHRyaWFsUXVvdGEubGFzdFVzZWRBdCA9IGN1cnJlbnREYXRlO1xyXG5cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTExNUXVvdGFMb2NhbFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KHRyaWFsUXVvdGEpKTtcclxuXHJcbiAgICByZXR1cm4gdHJpYWxRdW90YS5yZW1haW5pbmdRdW90YTtcclxuICB9XHJcblxyXG4gIGdldFJlYWNoZWRRdW90YU1lc3NhZ2UoKTogTm90aWZpY2F0aW9uTWVzc2FnZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiBOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5FUlJPUixcclxuICAgICAgYm9keTogJ0xMTS5FUlJPUlMuUVVPVEFfTElNSVRfUkVBQ0hFRCcsXHJcbiAgICAgIGhpZGVJY29uOiB0cnVlLFxyXG4gICAgICBsb2NhbGl6YXRpb25QYXJhbXM6IHtcclxuICAgICAgICBzdWJzY3JpcHRpb25Vcmw6IHRoaXMubGxtU2VydmljZS5sbG1Db25maWd1cmF0aW9uLnN1YnNjcmlwdGlvblVybCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0RXJyb3JNZXNzYWdlKCk6IE5vdGlmaWNhdGlvbk1lc3NhZ2Uge1xyXG4gICAgcmV0dXJuIHsgXHJcbiAgICAgIHR5cGU6IE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLkVSUk9SLCBcclxuICAgICAgYm9keTogJ0xMTS5FUlJPUlMuREVGQVVMVCcsXHJcbiAgICAgIGhpZGVJY29uOiB0cnVlLFxyXG4gICAgICBsb2NhbGl6YXRpb25QYXJhbXM6IHsgc3VwcG9ydEVtYWlsOiB0aGlzLmxsbVNlcnZpY2UubGxtQ29uZmlndXJhdGlvbi5zdXBwb3J0RW1haWwgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=