stream-chat-angular 6.3.2 → 6.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/version.d.ts +1 -1
- package/esm2020/assets/version.mjs +2 -2
- package/esm2020/lib/polls/poll-composer/poll-composer.component.mjs +4 -4
- package/fesm2015/stream-chat-angular.mjs +7 -7
- package/fesm2015/stream-chat-angular.mjs.map +1 -1
- package/fesm2020/stream-chat-angular.mjs +4 -4
- package/fesm2020/stream-chat-angular.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/version.ts +1 -1
package/assets/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "6.
|
|
1
|
+
export declare const version = "6.4.1";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '6.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export const version = '6.4.1';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc2LjQuMSc7XG4iXX0=
|
|
@@ -60,7 +60,7 @@ export class PollComposerComponent {
|
|
|
60
60
|
optionChanged(index) {
|
|
61
61
|
const control = this.options.at(index);
|
|
62
62
|
const penultimateIndex = this.options.length - 2;
|
|
63
|
-
if (index === this.options.length - 1
|
|
63
|
+
if (index === this.options.length - 1) {
|
|
64
64
|
this.addOption();
|
|
65
65
|
}
|
|
66
66
|
else if (index === penultimateIndex &&
|
|
@@ -119,10 +119,10 @@ export class PollComposerComponent {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
PollComposerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollComposerComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.ChatClientService }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
122
|
-
PollComposerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollComposerComponent, selector: "stream-poll-composer", outputs: { pollCompose: "pollCompose", cancel: "cancel" }, viewQueries: [{ propertyName: "formContent", first: true, predicate: ["formContent"], descendants: true }], ngImport: i0, template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{ 'streamChat.Add an option' | translate }}\"\n />\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "component", type: i6.NotificationListComponent, selector: "stream-notification-list" }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
122
|
+
PollComposerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollComposerComponent, selector: "stream-poll-composer", outputs: { pollCompose: "pollCompose", cancel: "cancel" }, viewQueries: [{ propertyName: "formContent", first: true, predicate: ["formContent"], descendants: true }], ngImport: i0, template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <div class=\"str-chat__form__input-field__value\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{\n 'streamChat.Add an option' | translate\n }}\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "component", type: i6.NotificationListComponent, selector: "stream-notification-list" }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
123
123
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollComposerComponent, decorators: [{
|
|
124
124
|
type: Component,
|
|
125
|
-
args: [{ selector: 'stream-poll-composer', template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <input\n
|
|
125
|
+
args: [{ selector: 'stream-poll-composer', template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <div class=\"str-chat__form__input-field__value\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{\n 'streamChat.Add an option' | translate\n }}\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n" }]
|
|
126
126
|
}], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.ChatClientService }, { type: i3.NotificationService }]; }, propDecorators: { pollCompose: [{
|
|
127
127
|
type: Output
|
|
128
128
|
}], cancel: [{
|
|
@@ -131,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
131
131
|
type: ViewChild,
|
|
132
132
|
args: ['formContent']
|
|
133
133
|
}] } });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1jb21wb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvcG9sbHMvcG9sbC1jb21wb3Nlci9wb2xsLWNvbXBvc2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWNvbXBvc2VyL3BvbGwtY29tcG9zZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQUV0RTs7R0FFRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUEyQmhDLFlBQ1csc0JBQThDLEVBQy9DLFdBQThCLEVBQzlCLG1CQUF3QztRQUZ2QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQy9DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBN0JsRDs7V0FFRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRDs7V0FFRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLGNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN4QixJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENB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QVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLO2dCQUNuRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsS0FBSztvQkFDdkMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUs7b0JBQ3hCLENBQUMsQ0FBQyxTQUFTO2dCQUNiLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUs7b0JBQzFELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTO29CQUM1QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtnQkFDM0IsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNoRCw4QkFBOEIsQ0FDL0IsRUFBRSxLQUFLO2dCQUNSLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSzthQUM1RCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDckM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0Msa0NBQWtDLENBQ25DLENBQUM7WUFDRixNQUFNLEtBQUssQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7a0hBN0hVLHFCQUFxQjtzR0FBckIscUJBQXFCLG1PQ3ZCbEMsK2lRQTZOQTsyRkR0TWEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHNCQUFzQjsrS0FRdEIsV0FBVztzQkFBcEIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBaUIyQixXQUFXO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFZvdGluZ1Zpc2liaWxpdHkgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsQ29udGV4dCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXRMZWFzdE9uZU9wdGlvbiwgbWF4aW11bU51bWJlck9mVm90ZXMgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1wb2xsLWNvbXBvc2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvbGwtY29tcG9zZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBQb2xsQ29tcG9zZXJDb21wb25lbnQge1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcG9sbCBpcyBjcmVhdGVkLCB0aGUgcG9sbCBpZCBpcyBlbWl0dGVkXG4gICAqL1xuICBAT3V0cHV0KCkgcG9sbENvbXBvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgcG9sbCBjb21wb3NpbmcgaXMgY2FuY2VsbGVkXG4gICAqL1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgb3B0aW9uczogbmV3IEZvcm1BcnJheTxGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPj4oXG4gICAgICBbbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KCcnKV0sXG4gICAgICBbYXRMZWFzdE9uZU9wdGlvbigpXVxuICAgICksXG4gICAgbXVsdGlwbGVfYW5zd2VyczogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBtYXhpbXVtX251bWJlcl9vZl92b3RlczogbmV3IEZvcm1Db250cm9sKG51bGwsIFtcbiAgICAgIFZhbGlkYXRvcnMubWluKDIpLFxuICAgICAgVmFsaWRhdG9ycy5tYXgoMTApLFxuICAgIF0pLFxuICAgIGlzX2Fub255bW91czogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIGFsbG93X2Fuc3dlcnM6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gIH0pO1xuICBpc01vZGFsT3BlbiA9IHRydWU7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1Db250ZW50JykgcHJpdmF0ZSBmb3JtQ29udGVudCE6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpXG4gICAgICA/LmFkZFZhbGlkYXRvcnMoW1xuICAgICAgICBtYXhpbXVtTnVtYmVyT2ZWb3RlcyhcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ211bHRpcGxlX2Fuc3dlcnMnKSBhcyBGb3JtQ29udHJvbDxib29sZWFuPlxuICAgICAgICApLFxuICAgICAgXSk7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUubXVsdGlwbGVfYW5zd2VycyAmJlxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk/LmRpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5lbmFibGUoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICF2YWx1ZS5tdWx0aXBsZV9hbnN3ZXJzICYmXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbWF4aW11bV9udW1iZXJfb2Zfdm90ZXMnKT8uZW5hYmxlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbWF4aW11bV9udW1iZXJfb2Zfdm90ZXMnKT8uZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3B0aW9uQ2hhbmdlZChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMub3B0aW9ucy5hdChpbmRleCk7XG4gICAgY29uc3QgcGVudWx0aW1hdGVJbmRleCA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAyO1xuICAgIGlmIChpbmRleCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDEgJiYgY29udHJvbC52YWx1ZT8ubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmFkZE9wdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpbmRleCA9PT0gcGVudWx0aW1hdGVJbmRleCAmJlxuICAgICAgY29udHJvbC52YWx1ZT8ubGVuZ3RoID09PSAwICYmXG4gICAgICB0aGlzLm9wdGlvbnMuYXQodGhpcy5vcHRpb25zLmxlbmd0aCAtIDEpLnZhbHVlPy5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlTGFzdE9wdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk8XG4gICAgICBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPlxuICAgID47XG4gIH1cblxuICBhZGRPcHRpb24oKSB7XG4gICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPignJywgW10pO1xuICAgIHRoaXMub3B0aW9ucy5wdXNoKGNvbnRyb2wpO1xuICB9XG5cbiAgcmVtb3ZlTGFzdE9wdGlvbigpIHtcbiAgICB0aGlzLm9wdGlvbnMucmVtb3ZlQXQodGhpcy5vcHRpb25zLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgZ2V0TW9kYWxDb250ZXh0KCk6IE1vZGFsQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzT3BlbjogdGhpcy5pc01vZGFsT3BlbixcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc01vZGFsT3BlbiA9IGlzT3BlbjtcbiAgICAgIH0sXG4gICAgICBjb250ZW50OiB0aGlzLmZvcm1Db250ZW50LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVQb2xsKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYXhWb3Rlc0NvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuY2hhdENsaWVudC5wb2xscy5jcmVhdGVQb2xsKHtcbiAgICAgICAgbmFtZTogdGhpcy5mb3JtR3JvdXAuZ2V0KCduYW1lJykhLnZhbHVlISxcbiAgICAgICAgb3B0aW9uczogdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KCdvcHRpb25zJykhXG4gICAgICAgICAgLnZhbHVlLmZpbHRlcigodikgPT4gISF2KVxuICAgICAgICAgIC5tYXAoKHYpID0+ICh7IHRleHQ6IHYhIH0pKSxcbiAgICAgICAgZW5mb3JjZV91bmlxdWVfdm90ZTogIXRoaXMuZm9ybUdyb3VwLmdldCgnbXVsdGlwbGVfYW5zd2VycycpPy52YWx1ZSxcbiAgICAgICAgbWF4X3ZvdGVzX2FsbG93ZWQ6IG1heFZvdGVzQ29udHJvbD8udmFsdWVcbiAgICAgICAgICA/ICttYXhWb3Rlc0NvbnRyb2wudmFsdWVcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgdm90aW5nX3Zpc2liaWxpdHk6IHRoaXMuZm9ybUdyb3VwLmdldCgnaXNfYW5vbnltb3VzJyk/LnZhbHVlXG4gICAgICAgICAgPyBWb3RpbmdWaXNpYmlsaXR5LmFub255bW91c1xuICAgICAgICAgIDogVm90aW5nVmlzaWJpbGl0eS5wdWJsaWMsXG4gICAgICAgIGFsbG93X3VzZXJfc3VnZ2VzdGVkX29wdGlvbnM6ICEhdGhpcy5mb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICdhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zJ1xuICAgICAgICApPy52YWx1ZSxcbiAgICAgICAgYWxsb3dfYW5zd2VyczogISF0aGlzLmZvcm1Hcm91cC5nZXQoJ2FsbG93X2Fuc3dlcnMnKT8udmFsdWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucG9sbENvbXBvc2UuZW1pdChyZXNwb25zZT8uaWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5GYWlsZWQgdG8gY3JlYXRlIHBvbGwnXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1vZGFsVGVtcGxhdGUkIHwgYXN5bmMpIHx8IGRlZmF1bHRNb2RhbDtcbiAgICAgIGNvbnRleHQ6IGdldE1vZGFsQ29udGV4dCgpXG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdE1vZGFsXG4gIGxldC1pc09wZW49XCJpc09wZW5cIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICA8c3RyZWFtLW1vZGFsXG4gICAgY2xhc3M9XCJzdHItY2hhdC1hbmd1bGFyX19jcmVhdGUtcG9sbC1tb2RhbCBzdHItY2hhdF9fY3JlYXRlLXBvbGwtbW9kYWxcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cImlzT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gID5cbiAgPC9zdHJlYW0tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvcm1Db250ZW50PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nIHN0ci1jaGF0X19wb2xsLWNyZWF0aW9uLWRpYWxvZ1wiXG4gICAgZGF0YS10ZXN0aWQ9XCJwb2xsLWNyZWF0aW9uLWRpYWxvZ1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21vZGFsLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tb2RhbC1oZWFkZXJfX3RpdGxlXCI+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5DcmVhdGUgcG9sbFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZ19fYm9keVwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2ZpZWxkIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZCBzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQtLXdpdGgtbGFiZWxcIlxuICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQtLWhhcy1lcnJvcl09XCJcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ25hbWUnKT8uZXJyb3JzICYmIGZvcm1Hcm91cC5nZXQoJ25hbWUnKT8udG91Y2hlZFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQtbGFiZWxcIiBodG1sRm9yPVwibmFtZVwiPlxuICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0LlF1ZXN0aW9uXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGRfX3ZhbHVlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm0tZmllbGQtZXJyb3Igc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX19lcnJvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKGZvcm1Hcm91cC5nZXQoXCJuYW1lXCIpPy5lcnJvcnM/LnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcIm5hbWVcIik/LnRvdWNoZWRcbiAgICAgICAgICAgICAgICAgID8gXCJzdHJlYW1DaGF0LlF1ZXN0aW9uIGlzIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibmFtZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3N0cmVhbUNoYXQuQXNrIGEgcXVlc3Rpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQgc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkc2V0XCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0Lk9wdGlvbnNcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm0tZmllbGQtZXJyb3Igc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX19lcnJvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgKGZvcm1Hcm91cC5nZXQoXCJvcHRpb25zXCIpPy5lcnJvcnM/LmF0TGVhc3RPbmUgJiZcbiAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcIm9wdGlvbnNcIik/LnRvdWNoZWRcbiAgICAgICAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5Qcm92aWRlIGF0IGxlYXN0IG9uZSBvcHRpb25cIlxuICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGRzZXRfX3ZhbHVlc1wiPlxuICAgICAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS91c2UtdHJhY2stYnktZnVuY3Rpb24gLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSBlc2xpbnQtZW5hYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS91c2UtdHJhY2stYnktZnVuY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kcmFnLWFuZC1kcm9wLWNvbnRhaW5lcl9faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cIm9wdGlvbnt7IGkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJvcHRpb257eyBpIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9wdGlvbkNoYW5nZWQoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3N0cmVhbUNoYXQuQWRkIGFuIG9wdGlvbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc3dpdGNoO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBuYW1lOiAnbXVsdGlwbGVfYW5zd2VycycsXG4gICAgICAgICAgICAgIGNvbnRyb2w6IGZvcm1Hcm91cC5nZXQoJ211bHRpcGxlX2Fuc3dlcnMnKSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzdHJlYW1DaGF0Lk11bHRpcGxlIGFuc3dlcnMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KCdtdWx0aXBsZV9hbnN3ZXJzJyk/LnZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQgc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkLS13aXRoLWxhYmVsXCJcbiAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkLS1oYXMtZXJyb3JdPVwiXG4gICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5lcnJvcnMgJiZcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk/LnRvdWNoZWRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2ZpZWxkLWxhYmVsXCIgaHRtbEZvcj1cIm5hbWVcIj5cbiAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5NYXhpbXVtIG51bWJlciBvZiB2b3Rlc1wiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX192YWx1ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtLWZpZWxkLWVycm9yIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZF9fZXJyb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChmb3JtR3JvdXAuZ2V0KFwibWF4aW11bV9udW1iZXJfb2Zfdm90ZXNcIik/LmVycm9ycyAmJlxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXCJtYXhpbXVtX251bWJlcl9vZl92b3Rlc1wiKT8udG91Y2hlZFxuICAgICAgICAgICAgICAgICAgPyBcInN0cmVhbUNoYXQuUHJvdmlkZSBhIHZhbHVlIGJldHdlZW4ge3sgbWluIH19XG4gICAgICAgICAgICAgIGFuZCB7eyBtYXggfX1cIiA6IFwiXCIgKSB8IHRyYW5zbGF0ZTogeyBtaW46IDIsIG1heDogMTAgfSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJtYXhpbXVtX251bWJlcl9vZl92b3Rlc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4aW11bV9udW1iZXJfb2Zfdm90ZXNcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdzdHJlYW1DaGF0LlByb3ZpZGUgYSB2YWx1ZSBiZXR3ZWVuICcgXG4gICAgICAgICAgICAgICsgJ3t7IG1pbiB9fSBhbmQge3sgbWF4IH19JyB8IHRyYW5zbGF0ZTogeyBtaW46IDIsIG1heDogMTAgfSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdpc19hbm9ueW1vdXMnLFxuICAgICAgICAgICAgICBjb250cm9sOiBmb3JtR3JvdXAuZ2V0KCdpc19hbm9ueW1vdXMnKSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzdHJlYW1DaGF0LkFub255bW91cyBwb2xsJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zJyxcbiAgICAgICAgICAgICAgY29udHJvbDogZm9ybUdyb3VwLmdldCgnYWxsb3dfdXNlcl9zdWdnZXN0ZWRfb3B0aW9ucycpLFxuICAgICAgICAgICAgICBsYWJlbDogJ3N0cmVhbUNoYXQuQWxsb3cgb3B0aW9uIHN1Z2dlc3Rpb25zJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGxvd19hbnN3ZXJzJyxcbiAgICAgICAgICAgICAgY29udHJvbDogZm9ybUdyb3VwLmdldCgnYWxsb3dfYW5zd2VycycpLFxuICAgICAgICAgICAgICBsYWJlbDogJ3N0cmVhbUNoYXQuQWxsb3cgY29tbWVudHMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxzdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+PC9zdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZ19fY29udHJvbHMtYnV0dG9uIHN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzLWJ1dHRvbi0tY2FuY2VsXCJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbC5lbWl0KClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0LkNhbmNlbFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nX19jb250cm9scy1idXR0b24gc3RyLWNoYXRfX2RpYWxvZ19fY29udHJvbHMtYnV0dG9uLS1zdWJtaXRcIlxuICAgICAgICAoY2xpY2spPVwiY3JlYXRlUG9sbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Hcm91cC5pbnZhbGlkXCJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICA+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5DcmVhdGVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzd2l0Y2ggbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LWxhYmVsPVwibGFiZWxcIiBsZXQtbmFtZT1cIm5hbWVcIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkXCI+XG4gICAgPGxhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkX190ZXh0XCI+XG4gICAgICAgICAge3sgbGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBbY2hlY2tlZF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgaWQ9XCJ7eyBuYW1lIH19XCJcbiAgICAgICAgbmFtZT1cInt7IG5hbWUgfX1cIlxuICAgICAgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkX19zd2l0Y2hcIlxuICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2Zvcm1fX3N3aXRjaC1maWVsZF9fc3dpdGNoLS1vbl09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgKGNsaWNrKT1cImNvbnRyb2wuc2V0VmFsdWUoIWNvbnRyb2wudmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImNvbnRyb2wuc2V0VmFsdWUoIWNvbnRyb2wudmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19zd2l0Y2gtZmllbGRfX3N3aXRjaC1oYW5kbGVcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1jb21wb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvcG9sbHMvcG9sbC1jb21wb3Nlci9wb2xsLWNvbXBvc2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWNvbXBvc2VyL3BvbGwtY29tcG9zZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQUV0RTs7R0FFRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUEyQmhDLFlBQ1csc0JBQThDLEVBQy9DLFdBQThCLEVBQzlCLG1CQUF3QztRQUZ2QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQy9DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBN0JsRDs7V0FFRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRDs7V0FFRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLGNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN4QixJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENB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Z0JBQ25FLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxLQUFLO29CQUN2QyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSztvQkFDeEIsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSztvQkFDMUQsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFNBQVM7b0JBQzVCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNO2dCQUMzQiw0QkFBNEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ2hELDhCQUE4QixDQUMvQixFQUFFLEtBQUs7Z0JBQ1IsYUFBYSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLO2FBQzVELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNyQztRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUMvQyxrQ0FBa0MsQ0FDbkMsQ0FBQztZQUNGLE1BQU0sS0FBSyxDQUFDO1NBQ2I7SUFDSCxDQUFDOztrSEE3SFUscUJBQXFCO3NHQUFyQixxQkFBcUIsbU9DdkJsQyx1dFFBaU9BOzJGRDFNYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0Usc0JBQXNCOytLQVF0QixXQUFXO3NCQUFwQixNQUFNO2dCQUlHLE1BQU07c0JBQWYsTUFBTTtnQkFpQjJCLFdBQVc7c0JBQTVDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVm90aW5nVmlzaWJpbGl0eSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBhdExlYXN0T25lT3B0aW9uLCBtYXhpbXVtTnVtYmVyT2ZWb3RlcyB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLXBvbGwtY29tcG9zZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9sbC1jb21wb3Nlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFBvbGxDb21wb3NlckNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSBwb2xsIGlzIGNyZWF0ZWQsIHRoZSBwb2xsIGlkIGlzIGVtaXR0ZWRcbiAgICovXG4gIEBPdXRwdXQoKSBwb2xsQ29tcG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBwb2xsIGNvbXBvc2luZyBpcyBjYW5jZWxsZWRcbiAgICovXG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICBvcHRpb25zOiBuZXcgRm9ybUFycmF5PEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+PihcbiAgICAgIFtuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oJycpXSxcbiAgICAgIFthdExlYXN0T25lT3B0aW9uKCldXG4gICAgKSxcbiAgICBtdWx0aXBsZV9hbnN3ZXJzOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIG1heGltdW1fbnVtYmVyX29mX3ZvdGVzOiBuZXcgRm9ybUNvbnRyb2wobnVsbCwgW1xuICAgICAgVmFsaWRhdG9ycy5taW4oMiksXG4gICAgICBWYWxpZGF0b3JzLm1heCgxMCksXG4gICAgXSksXG4gICAgaXNfYW5vbnltb3VzOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIGFsbG93X3VzZXJfc3VnZ2VzdGVkX29wdGlvbnM6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgYWxsb3dfYW5zd2VyczogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgfSk7XG4gIGlzTW9kYWxPcGVuID0gdHJ1ZTtcbiAgQFZpZXdDaGlsZCgnZm9ybUNvbnRlbnQnKSBwcml2YXRlIGZvcm1Db250ZW50ITogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgIC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJylcbiAgICAgID8uYWRkVmFsaWRhdG9ycyhbXG4gICAgICAgIG1heGltdW1OdW1iZXJPZlZvdGVzKFxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbXVsdGlwbGVfYW5zd2VycycpIGFzIEZvcm1Db250cm9sPGJvb2xlYW4+XG4gICAgICAgICksXG4gICAgICBdKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk/LmRpc2FibGUoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZS5tdWx0aXBsZV9hbnN3ZXJzICYmXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbWF4aW11bV9udW1iZXJfb2Zfdm90ZXMnKT8uZGlzYWJsZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk/LmVuYWJsZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgIXZhbHVlLm11bHRpcGxlX2Fuc3dlcnMgJiZcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5lbmFibGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcHRpb25DaGFuZ2VkKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5vcHRpb25zLmF0KGluZGV4KTtcbiAgICBjb25zdCBwZW51bHRpbWF0ZUluZGV4ID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDI7XG4gICAgaWYgKGluZGV4ID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5hZGRPcHRpb24oKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaW5kZXggPT09IHBlbnVsdGltYXRlSW5kZXggJiZcbiAgICAgIGNvbnRyb2wudmFsdWU/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgdGhpcy5vcHRpb25zLmF0KHRoaXMub3B0aW9ucy5sZW5ndGggLSAxKS52YWx1ZT8ubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLnJlbW92ZUxhc3RPcHRpb24oKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5PFxuICAgICAgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD5cbiAgICA+O1xuICB9XG5cbiAgYWRkT3B0aW9uKCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oJycsIFtdKTtcbiAgICB0aGlzLm9wdGlvbnMucHVzaChjb250cm9sKTtcbiAgfVxuXG4gIHJlbW92ZUxhc3RPcHRpb24oKSB7XG4gICAgdGhpcy5vcHRpb25zLnJlbW92ZUF0KHRoaXMub3B0aW9ucy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIGdldE1vZGFsQ29udGV4dCgpOiBNb2RhbENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBpc09wZW46IHRoaXMuaXNNb2RhbE9wZW4sXG4gICAgICBpc09wZW5DaGFuZ2VIYW5kbGVyOiAoaXNPcGVuOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBpc09wZW47XG4gICAgICB9LFxuICAgICAgY29udGVudDogdGhpcy5mb3JtQ29udGVudCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUG9sbCgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWF4Vm90ZXNDb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmNoYXRDbGllbnQucG9sbHMuY3JlYXRlUG9sbCh7XG4gICAgICAgIG5hbWU6IHRoaXMuZm9ybUdyb3VwLmdldCgnbmFtZScpIS52YWx1ZSEsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldCgnb3B0aW9ucycpIVxuICAgICAgICAgIC52YWx1ZS5maWx0ZXIoKHYpID0+ICEhdilcbiAgICAgICAgICAubWFwKCh2KSA9PiAoeyB0ZXh0OiB2ISB9KSksXG4gICAgICAgIGVuZm9yY2VfdW5pcXVlX3ZvdGU6ICF0aGlzLmZvcm1Hcm91cC5nZXQoJ211bHRpcGxlX2Fuc3dlcnMnKT8udmFsdWUsXG4gICAgICAgIG1heF92b3Rlc19hbGxvd2VkOiBtYXhWb3Rlc0NvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgPyArbWF4Vm90ZXNDb250cm9sLnZhbHVlXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHZvdGluZ192aXNpYmlsaXR5OiB0aGlzLmZvcm1Hcm91cC5nZXQoJ2lzX2Fub255bW91cycpPy52YWx1ZVxuICAgICAgICAgID8gVm90aW5nVmlzaWJpbGl0eS5hbm9ueW1vdXNcbiAgICAgICAgICA6IFZvdGluZ1Zpc2liaWxpdHkucHVibGljLFxuICAgICAgICBhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zOiAhIXRoaXMuZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAnYWxsb3dfdXNlcl9zdWdnZXN0ZWRfb3B0aW9ucydcbiAgICAgICAgKT8udmFsdWUsXG4gICAgICAgIGFsbG93X2Fuc3dlcnM6ICEhdGhpcy5mb3JtR3JvdXAuZ2V0KCdhbGxvd19hbnN3ZXJzJyk/LnZhbHVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnBvbGxDb21wb3NlLmVtaXQocmVzcG9uc2U/LmlkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgJ3N0cmVhbUNoYXQuRmFpbGVkIHRvIGNyZWF0ZSBwb2xsJ1xuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tb2RhbFRlbXBsYXRlJCB8IGFzeW5jKSB8fCBkZWZhdWx0TW9kYWw7XG4gICAgICBjb250ZXh0OiBnZXRNb2RhbENvbnRleHQoKVxuICAgIFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGVcbiAgI2RlZmF1bHRNb2RhbFxuICBsZXQtaXNPcGVuPVwiaXNPcGVuXCJcbiAgbGV0LWlzT3BlbkNoYW5nZUhhbmRsZXI9XCJpc09wZW5DaGFuZ2VIYW5kbGVyXCJcbiAgbGV0LWNvbnRlbnQ9XCJjb250ZW50XCJcbj5cbiAgPHN0cmVhbS1tb2RhbFxuICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fY3JlYXRlLXBvbGwtbW9kYWwgc3RyLWNoYXRfX2NyZWF0ZS1wb2xsLW1vZGFsXCJcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gICAgKGlzT3BlbkNoYW5nZSk9XCJpc09wZW5DaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICA+XG4gIDwvc3RyZWFtLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb3JtQ29udGVudD5cbiAgPGRpdlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZyBzdHItY2hhdF9fcG9sbC1jcmVhdGlvbi1kaWFsb2dcIlxuICAgIGRhdGEtdGVzdGlkPVwicG9sbC1jcmVhdGlvbi1kaWFsb2dcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tb2RhbC1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbW9kYWwtaGVhZGVyX190aXRsZVwiPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuQ3JlYXRlIHBvbGxcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kaWFsb2dfX2JvZHlcIj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQgc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkLS13aXRoLWxhYmVsXCJcbiAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkLS1oYXMtZXJyb3JdPVwiXG4gICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCduYW1lJyk/LmVycm9ycyAmJiBmb3JtR3JvdXAuZ2V0KCduYW1lJyk/LnRvdWNoZWRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2ZpZWxkLWxhYmVsXCIgaHRtbEZvcj1cIm5hbWVcIj5cbiAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5RdWVzdGlvblwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX192YWx1ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtLWZpZWxkLWVycm9yIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZF9fZXJyb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChmb3JtR3JvdXAuZ2V0KFwibmFtZVwiKT8uZXJyb3JzPy5yZXF1aXJlZCAmJlxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXCJuYW1lXCIpPy50b3VjaGVkXG4gICAgICAgICAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5RdWVzdGlvbiBpcyByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdzdHJlYW1DaGF0LkFzayBhIHF1ZXN0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2ZpZWxkIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZHNldFwiPlxuICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5PcHRpb25zXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtLWZpZWxkLWVycm9yIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZF9fZXJyb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIChmb3JtR3JvdXAuZ2V0KFwib3B0aW9uc1wiKT8uZXJyb3JzPy5hdExlYXN0T25lICYmXG4gICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXCJvcHRpb25zXCIpPy50b3VjaGVkXG4gICAgICAgICAgICAgICAgPyBcInN0cmVhbUNoYXQuUHJvdmlkZSBhdCBsZWFzdCBvbmUgb3B0aW9uXCJcbiAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkc2V0X192YWx1ZXNcIj5cbiAgICAgICAgICAgICAgPCEtLSBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvdXNlLXRyYWNrLWJ5LWZ1bmN0aW9uIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gZXNsaW50LWVuYWJsZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvdXNlLXRyYWNrLWJ5LWZ1bmN0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZHJhZy1hbmQtZHJvcC1jb250YWluZXJfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZF9fdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwib3B0aW9ue3sgaSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwib3B0aW9ue3sgaSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvcHRpb25DaGFuZ2VkKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmVhbUNoYXQuQWRkIGFuIG9wdGlvbicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHN3aXRjaDtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgbmFtZTogJ211bHRpcGxlX2Fuc3dlcnMnLFxuICAgICAgICAgICAgICBjb250cm9sOiBmb3JtR3JvdXAuZ2V0KCdtdWx0aXBsZV9hbnN3ZXJzJyksXG4gICAgICAgICAgICAgIGxhYmVsOiAnc3RyZWFtQ2hhdC5NdWx0aXBsZSBhbnN3ZXJzJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldCgnbXVsdGlwbGVfYW5zd2VycycpPy52YWx1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQgc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZC0td2l0aC1sYWJlbFwiXG4gICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZC0taGFzLWVycm9yXT1cIlxuICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnbWF4aW11bV9udW1iZXJfb2Zfdm90ZXMnKT8uZXJyb3JzICYmXG4gICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy50b3VjaGVkXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZC1sYWJlbFwiIGh0bWxGb3I9XCJuYW1lXCI+XG4gICAgICAgICAgICB7eyBcInN0cmVhbUNoYXQuTWF4aW11bSBudW1iZXIgb2Ygdm90ZXNcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZF9fdmFsdWVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZm9ybS1maWVsZC1lcnJvciBzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGRfX2Vycm9yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAoZm9ybUdyb3VwLmdldChcIm1heGltdW1fbnVtYmVyX29mX3ZvdGVzXCIpPy5lcnJvcnMgJiZcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KFwibWF4aW11bV9udW1iZXJfb2Zfdm90ZXNcIik/LnRvdWNoZWRcbiAgICAgICAgICAgICAgICAgID8gXCJzdHJlYW1DaGF0LlByb3ZpZGUgYSB2YWx1ZSBiZXR3ZWVuIHt7IG1pbiB9fVxuICAgICAgICAgICAgICBhbmQge3sgbWF4IH19XCIgOiBcIlwiICkgfCB0cmFuc2xhdGU6IHsgbWluOiAyLCBtYXg6IDEwIH0gfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibWF4aW11bV9udW1iZXJfb2Zfdm90ZXNcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1heGltdW1fbnVtYmVyX29mX3ZvdGVzXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnc3RyZWFtQ2hhdC5Qcm92aWRlIGEgdmFsdWUgYmV0d2VlbiAnIFxuICAgICAgICAgICAgICArICd7eyBtaW4gfX0gYW5kIHt7IG1heCB9fScgfCB0cmFuc2xhdGU6IHsgbWluOiAyLCBtYXg6IDEwIH0gfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc3dpdGNoO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBuYW1lOiAnaXNfYW5vbnltb3VzJyxcbiAgICAgICAgICAgICAgY29udHJvbDogZm9ybUdyb3VwLmdldCgnaXNfYW5vbnltb3VzJyksXG4gICAgICAgICAgICAgIGxhYmVsOiAnc3RyZWFtQ2hhdC5Bbm9ueW1vdXMgcG9sbCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc3dpdGNoO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBuYW1lOiAnYWxsb3dfdXNlcl9zdWdnZXN0ZWRfb3B0aW9ucycsXG4gICAgICAgICAgICAgIGNvbnRyb2w6IGZvcm1Hcm91cC5nZXQoJ2FsbG93X3VzZXJfc3VnZ2VzdGVkX29wdGlvbnMnKSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzdHJlYW1DaGF0LkFsbG93IG9wdGlvbiBzdWdnZXN0aW9ucycgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc3dpdGNoO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBuYW1lOiAnYWxsb3dfYW5zd2VycycsXG4gICAgICAgICAgICAgIGNvbnRyb2w6IGZvcm1Hcm91cC5nZXQoJ2FsbG93X2Fuc3dlcnMnKSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzdHJlYW1DaGF0LkFsbG93IGNvbW1lbnRzJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgICA8c3RyZWFtLW5vdGlmaWNhdGlvbi1saXN0Pjwvc3RyZWFtLW5vdGlmaWNhdGlvbi1saXN0PlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nX19jb250cm9sc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzLWJ1dHRvbiBzdHItY2hhdF9fZGlhbG9nX19jb250cm9scy1idXR0b24tLWNhbmNlbFwiXG4gICAgICAgIChjbGljayk9XCJjYW5jZWwuZW1pdCgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5DYW5jZWxcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZ19fY29udHJvbHMtYnV0dG9uIHN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzLWJ1dHRvbi0tc3VibWl0XCJcbiAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVBvbGwoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuQ3JlYXRlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3dpdGNoIGxldC1jb250cm9sPVwiY29udHJvbFwiIGxldC1sYWJlbD1cImxhYmVsXCIgbGV0LW5hbWU9XCJuYW1lXCI+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQgc3RyLWNoYXRfX2Zvcm1fX3N3aXRjaC1maWVsZFwiPlxuICAgIDxsYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQgc3RyLWNoYXRfX2Zvcm1fX3N3aXRjaC1maWVsZC1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQgc3RyLWNoYXRfX2Zvcm1fX3N3aXRjaC1maWVsZF9fdGV4dFwiPlxuICAgICAgICAgIHt7IGxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgW2NoZWNrZWRdPVwiY29udHJvbC52YWx1ZVwiXG4gICAgICAgIGlkPVwie3sgbmFtZSB9fVwiXG4gICAgICAgIG5hbWU9XCJ7eyBuYW1lIH19XCJcbiAgICAgIC8+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX3N3aXRjaC1maWVsZF9fc3dpdGNoXCJcbiAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19mb3JtX19zd2l0Y2gtZmllbGRfX3N3aXRjaC0tb25dPVwiY29udHJvbC52YWx1ZVwiXG4gICAgICAgIChjbGljayk9XCJjb250cm9sLnNldFZhbHVlKCFjb250cm9sLnZhbHVlLCB7IGVtaXRFdmVudDogdHJ1ZSB9KVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJjb250cm9sLnNldFZhbHVlKCFjb250cm9sLnZhbHVlLCB7IGVtaXRFdmVudDogdHJ1ZSB9KVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkX19zd2l0Y2gtaGFuZGxlXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xhYmVsPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -23,7 +23,7 @@ import { MentionModule } from 'angular-mentions';
|
|
|
23
23
|
import * as i1$1 from '@angular/forms';
|
|
24
24
|
import { FormGroup, FormControl, Validators, FormArray, ReactiveFormsModule } from '@angular/forms';
|
|
25
25
|
|
|
26
|
-
const version = '6.
|
|
26
|
+
const version = '6.4.1';
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* The `NotificationService` can be used to add or remove notifications. By default the [`NotificationList`](/chat/docs/sdk/angular/components/NotificationListComponent/) component displays the currently active notifications.
|
|
@@ -9528,15 +9528,15 @@ class PollComposerComponent {
|
|
|
9528
9528
|
});
|
|
9529
9529
|
}
|
|
9530
9530
|
optionChanged(index) {
|
|
9531
|
-
var _a, _b
|
|
9531
|
+
var _a, _b;
|
|
9532
9532
|
const control = this.options.at(index);
|
|
9533
9533
|
const penultimateIndex = this.options.length - 2;
|
|
9534
|
-
if (index === this.options.length - 1
|
|
9534
|
+
if (index === this.options.length - 1) {
|
|
9535
9535
|
this.addOption();
|
|
9536
9536
|
}
|
|
9537
9537
|
else if (index === penultimateIndex &&
|
|
9538
|
-
((
|
|
9539
|
-
((
|
|
9538
|
+
((_a = control.value) === null || _a === void 0 ? void 0 : _a.length) === 0 &&
|
|
9539
|
+
((_b = this.options.at(this.options.length - 1).value) === null || _b === void 0 ? void 0 : _b.length) === 0) {
|
|
9540
9540
|
this.removeLastOption();
|
|
9541
9541
|
}
|
|
9542
9542
|
}
|
|
@@ -9593,10 +9593,10 @@ class PollComposerComponent {
|
|
|
9593
9593
|
}
|
|
9594
9594
|
}
|
|
9595
9595
|
PollComposerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollComposerComponent, deps: [{ token: CustomTemplatesService }, { token: ChatClientService }, { token: NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9596
|
-
PollComposerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollComposerComponent, selector: "stream-poll-composer", outputs: { pollCompose: "pollCompose", cancel: "cancel" }, viewQueries: [{ propertyName: "formContent", first: true, predicate: ["formContent"], descendants: true }], ngImport: i0, template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{ 'streamChat.Add an option' | translate }}\"\n />\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "component", type: NotificationListComponent, selector: "stream-notification-list" }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
|
|
9596
|
+
PollComposerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollComposerComponent, selector: "stream-poll-composer", outputs: { pollCompose: "pollCompose", cancel: "cancel" }, viewQueries: [{ propertyName: "formContent", first: true, predicate: ["formContent"], descendants: true }], ngImport: i0, template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <div class=\"str-chat__form__input-field__value\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{\n 'streamChat.Add an option' | translate\n }}\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "component", type: NotificationListComponent, selector: "stream-notification-list" }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
|
|
9597
9597
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollComposerComponent, decorators: [{
|
|
9598
9598
|
type: Component,
|
|
9599
|
-
args: [{ selector: 'stream-poll-composer', template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <input\n
|
|
9599
|
+
args: [{ selector: 'stream-poll-composer', template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <div class=\"str-chat__form__input-field__value\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{\n 'streamChat.Add an option' | translate\n }}\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n" }]
|
|
9600
9600
|
}], ctorParameters: function () { return [{ type: CustomTemplatesService }, { type: ChatClientService }, { type: NotificationService }]; }, propDecorators: { pollCompose: [{
|
|
9601
9601
|
type: Output
|
|
9602
9602
|
}], cancel: [{
|