@decaf-ts/for-angular 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE.md +157 -21
  2. package/README.md +0 -0
  3. package/dist/for-angular/README.md +0 -0
  4. package/dist/for-angular/assets/i18n/en.json +0 -0
  5. package/dist/for-angular/components/decaf-crud-field/decaf-crud-field.component.d.ts +33 -6
  6. package/dist/for-angular/components/decaf-crud-form/constants.d.ts +0 -0
  7. package/dist/for-angular/components/decaf-crud-form/decaf-crud-form.component.d.ts +4 -4
  8. package/dist/for-angular/components/decaf-crud-form/types.d.ts +0 -0
  9. package/dist/for-angular/components/decaf-model-renderer/decaf-model-renderer.component.d.ts +13 -13
  10. package/dist/for-angular/engine/DynamicModule.d.ts +0 -0
  11. package/dist/for-angular/engine/NgxCrudFormField.d.ts +16 -17
  12. package/dist/for-angular/engine/NgxFormService.d.ts +2 -2
  13. package/dist/for-angular/engine/NgxRenderingEngine.d.ts +7 -6
  14. package/dist/for-angular/engine/ValidatorFactory.d.ts +0 -0
  15. package/dist/for-angular/engine/constants.d.ts +3 -0
  16. package/dist/for-angular/engine/decorators.d.ts +0 -0
  17. package/dist/for-angular/engine/index.d.ts +0 -0
  18. package/dist/for-angular/engine/types.d.ts +15 -3
  19. package/dist/for-angular/esm2022/components/decaf-crud-field/decaf-crud-field.component.mjs +84 -21
  20. package/dist/for-angular/esm2022/components/decaf-crud-form/constants.mjs +0 -0
  21. package/dist/for-angular/esm2022/components/decaf-crud-form/decaf-crud-form.component.mjs +15 -19
  22. package/dist/for-angular/esm2022/components/decaf-crud-form/types.mjs +0 -0
  23. package/dist/for-angular/esm2022/components/decaf-model-renderer/decaf-model-renderer.component.mjs +30 -29
  24. package/dist/for-angular/esm2022/decaf-ts-for-angular.mjs +0 -0
  25. package/dist/for-angular/esm2022/engine/DynamicModule.mjs +0 -0
  26. package/dist/for-angular/esm2022/engine/NgxCrudFormField.mjs +6 -9
  27. package/dist/for-angular/esm2022/engine/NgxFormService.mjs +4 -1
  28. package/dist/for-angular/esm2022/engine/NgxRenderingEngine.mjs +52 -3
  29. package/dist/for-angular/esm2022/engine/ValidatorFactory.mjs +0 -0
  30. package/dist/for-angular/esm2022/engine/constants.mjs +4 -1
  31. package/dist/for-angular/esm2022/engine/decorators.mjs +5 -8
  32. package/dist/for-angular/esm2022/engine/index.mjs +0 -0
  33. package/dist/for-angular/esm2022/engine/types.mjs +1 -1
  34. package/dist/for-angular/esm2022/interfaces.mjs +0 -0
  35. package/dist/for-angular/esm2022/public-apis.mjs +2 -1
  36. package/dist/for-angular/fesm2022/decaf-ts-for-angular.mjs +237 -153
  37. package/dist/for-angular/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
  38. package/dist/for-angular/index.d.ts +0 -0
  39. package/dist/for-angular/interfaces.d.ts +0 -0
  40. package/dist/for-angular/public-apis.d.ts +1 -0
  41. package/package.json +3 -1
  42. package/dist/for-angular/directives/decaf-field.directive.d.ts +0 -8
  43. package/dist/for-angular/esm2022/directives/decaf-field.directive.mjs +0 -23
@@ -1,20 +1,24 @@
1
+ import { __decorate } from "tslib";
1
2
  import { Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, Input, NO_ERRORS_SCHEMA, ViewChild, } from '@angular/core';
2
3
  import { FormGroup, ReactiveFormsModule } from '@angular/forms';
3
- import { HTML5InputTypes } from '@decaf-ts/ui-decorators';
4
- import { IonCheckbox, IonInput, IonItem, IonRadio, IonRadioGroup, IonSelect, IonSelectOption, } from '@ionic/angular/standalone';
4
+ import { IonCheckbox, IonInput, IonItem, IonRadio, IonRadioGroup, IonSelect, IonSelectOption, IonTextarea, } from '@ionic/angular/standalone';
5
5
  import { TranslatePipe } from '@ngx-translate/core';
6
- import { DecafFieldDirective } from '../../directives/decaf-field.directive';
7
- import { NgClass } from '@angular/common';
8
6
  import { NgxCrudFormField } from '../../engine/NgxCrudFormField';
7
+ import { Dynamic } from '../../engine/decorators';
9
8
  import * as i0 from "@angular/core";
10
9
  import * as i1 from "@angular/forms";
11
- // @Dynamic()
12
- export class DecafCrudFieldComponent extends NgxCrudFormField {
10
+ let DecafCrudFieldComponent = class DecafCrudFieldComponent extends NgxCrudFormField {
13
11
  constructor() {
14
12
  super(...arguments);
13
+ this.value = '';
14
+ this.spellcheck = false;
15
+ this.inputmode = 'none';
16
+ this.autocomplete = 'off';
17
+ this.fill = 'outline';
18
+ this.labelPlacement = 'stacked';
19
+ // Component
15
20
  this.updateOn = 'change';
16
21
  this.translatable = true;
17
- this.HTML5InputTypes = Object.values(HTML5InputTypes);
18
22
  }
19
23
  ngAfterViewInit() {
20
24
  super.afterViewInit();
@@ -26,13 +30,16 @@ export class DecafCrudFieldComponent extends NgxCrudFormField {
26
30
  super.onInit(this.updateOn);
27
31
  }
28
32
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafCrudFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafCrudFieldComponent, isStandalone: true, selector: "decaf-crud-field", inputs: { updateOn: "updateOn", operation: "operation", props: "props", name: "name", options: "options", formGroup: "formGroup", translatable: "translatable" }, viewQueries: [{ propertyName: "component", first: true, predicate: ["component"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-container #component [formGroup]=\"formGroup\">\n @if(props.type === 'textarea') {\n <ion-item>\n <ion-textarea\n [ngClass]=\"props.className\"\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [required]=\"props.required !== undefined ? props.required : null\"\n [minlength]=\"props.minlength !== undefined ? props.minlength : null\"\n [maxlength]=\"props.maxlength !== undefined ? props.maxlength : null\"\n [readonly]=\"props.readonly !== undefined ? props.readonly : null\"\n [inputmode]=\"props.inputmode\"\n [spellcheck]=\"props.spellcheck\"\n [rows]=\"props.rows\"\n [labelPlacement]=\"props.labelPlacement\"\n [value]=\"props.value\"\n [fill]=\"props.fill\"\n [placeholder]=\"translatable ? (props.placeholder | translate) : props.placeholder\"\n [formControlName]=\"props.name\"\n [label]=\"translatable ? (props.label | translate) : props.label\">\n </ion-textarea>\n </ion-item>\n }\n @if(props.type === 'checkbox') {\n <ion-item [formControlName]=\"props.name\">\n <ion-checkbox\n #checkboxElement\n [name]=\"props.name\"\n [ngClass]=\"props.className\"\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [labelPlacement]=\"props.labelPlacement\"\n [alignment]=\"props.alignment\"\n [justify]=\"props.justify\"\n [disabled]=\"props.disabled || props.readonly\"\n [attr.checkedValue]=\"props.value\"\n [value]=\"props.value\"\n [checked]=\"props.checked\"\n (ionChange)=\"props.checked = !props.checked\"\n [formControlName]=\"props.name\">\n <span [innerHTML]=\"props.label | translate\"></span>\n </ion-checkbox>\n </ion-item>\n }\n @else if(props.type === 'radio') {\n <ion-radio-group [ngClass]=\"props.className\" [formControlName]=\"props.name\" [name]=\"props.name\" [value]=\"props.value\">\n <label class=\"radio-group-label\">{{props.label | translate}}</label>\n @for(option of options; track option.value) {\n <ion-item>\n <ion-radio\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [disabled]=\"props.readonly || props.disabled\"\n [labelPlacement]=\"props.labelPlacement\"\n [alignment]=\"props.alignment\"\n [justify]=\"props.justify\"\n [value]=\"option.value\"\n >{{ option.text | translate }}</ion-radio>\n </ion-item>\n }\n </ion-radio-group>\n }\n @else if(props.type === 'select') {\n <ion-item>\n <ion-select\n [name]=\"props.name\"\n [ngClass]=\"props.className\"\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [labelPlacement]=\"props.labelPlacement\"\n [cancelText]=\"props.cancelText | translate\"\n [label]=\"translatable ? (props.label | translate) : props.label\"\n [value]=\"props.value\"\n [fill]=\"props.fill\"\n [disabled]=\"props.readonly || props.disabled\"\n [placeholder]=\"props.placeholder | translate\"\n [formControlName]=\"props.name\"\n [interface]=\"props.interface\">\n @for(option of options; track option.value) {\n <ion-select-option [value]=\"option.value\">\n {{ translatable ? (option.text | translate) : option.text }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n @else if(HTML5InputTypes.includes(props.type)) {\n <ion-item>\n <ion-input\n [ngClass]=\"props.className\"\n [type]=\"props.type\"\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [inputmode]=\"props.inputmode\"\n [autocomplete]=\"props.autocomplete\"\n [spellcheck]=\"props.spellcheck\"\n [labelPlacement]=\"props.labelPlacement\"\n [required]=\"props.required !== undefined ? props.required : false\"\n [minlength]=\"props.minlength !== undefined ? props.minlength : null\"\n [maxlength]=\"props.maxlength !== undefined ? props.maxlength : null\"\n [readonly]=\"props.readonly !== undefined ? props.readonly : null\"\n [max]=\"props.max !== undefined ? props.max : null\"\n [min]=\"props.min !== undefined ? props.min : null\"\n [pattern]=\"props.pattern !== undefined ? props.pattern : null\"\n [step]=\"props.step !== undefined ? props.step : null\"\n [value]=\"props.value\"\n [fill]=\"props.fill\"\n [placeholder]=\"props.placeholder | translate\"\n [formControlName]=\"props.name\"\n [label]=\"props.label | translate\">\n </ion-input>\n </ion-item>\n }\n @else {\n <h1>INVALID FIELD TYPE</h1>\n }\n @if((!formGroup.pristine || formGroup.touched) && !formGroup.valid) {\n <div class=\"error uk-flex uk-flex-top\">\n @for(item of getErrors(); track item.key) {\n <p>\n <span color=\"danger\" class=\"ti ti-alert-triangle\"></span>\n <span>{{item.key}} - {{ sf((\"errors.\" + item.message) | translate, props[item.key]) }}</span>\n </p>\n }\n </div>\n }\n</ng-container>\n", styles: [".disabled{opacity:.7;pointer-events:none;touch-action:none}.disabled *{pointer-events:none;touch-action:none}.proccessing,.proccessing *{pointer-events:none;touch-action:none;cursor:text}ion-item{--border-color: transparent;--padding-start: .75rem;--background: transparent;--background-hover-opacity: .1;--background-hover: var(--ion-color-primary);--background-activated-opacity: .15;--background-focused: var(--ion-color-primary);--background-focused-opacity: .15}ion-textarea textarea{scrollbar-width:thin!important;margin-bottom:.5rem!important}ion-select.select-label-placement-floating::part(label){line-height:1.2rem!important}.radio-group-label{margin-left:.5rem}.radio-group-label+ion-item{margin-top:.5rem}ion-checkbox{--size: 1.5rem;--checkbox-background-checked: var(--ion-color-primary);--checkmark-width: 2px}ion-checkbox::part(container){border-radius:50%;border:2px solid var(--ion-color-primary);padding:3px}ion-item+.helper,ion-radio-group+.helper{padding-left:.75rem;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonRadioGroup, selector: "ion-radio-group", inputs: ["allowEmptySelection", "compareWith", "name", "value"] }, { kind: "component", type: IonRadio, selector: "ion-radio", inputs: ["alignment", "color", "disabled", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "expandedIcon", "fill", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }] }); }
30
- }
33
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafCrudFieldComponent, isStandalone: true, selector: "decaf-crud-field", inputs: { operation: "operation", name: "name", type: "type", value: "value", disabled: "disabled", label: "label", placeholder: "placeholder", format: "format", hidden: "hidden", max: "max", maxlength: "maxlength", min: "min", minlength: "minlength", pattern: "pattern", readonly: "readonly", required: "required", step: "step", cols: "cols", rows: "rows", alignment: "alignment", checked: "checked", justify: "justify", cancelText: "cancelText", interface: "interface", options: "options", mode: "mode", spellcheck: "spellcheck", inputmode: "inputmode", autocomplete: "autocomplete", fill: "fill", labelPlacement: "labelPlacement", updateOn: "updateOn", formGroup: "formGroup", translatable: "translatable" }, viewQueries: [{ propertyName: "component", first: true, predicate: ["component"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-container #component [formGroup]=\"formGroup\">\n @if(type === 'textarea') {\n <ion-item>\n <ion-textarea\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [required]=\"required !== undefined ? required : null\"\n [minlength]=\"minlength !== undefined ? minlength : null\"\n [maxlength]=\"maxlength !== undefined ? maxlength : null\"\n [readonly]=\"readonly !== undefined ? readonly : null\"\n [inputmode]=\"inputmode\"\n [spellcheck]=\"spellcheck\"\n [rows]=\"rows\"\n [labelPlacement]=\"labelPlacement\"\n [value]=\"value\"\n [fill]=\"fill\"\n [placeholder]=\"translatable ? (placeholder | translate) : placeholder\"\n [formControlName]=\"name\"\n [label]=\"translatable ? (label | translate) : label\">\n </ion-textarea>\n </ion-item>\n }\n @if(type === 'checkbox') {\n <ion-item [formControlName]=\"name\">\n <ion-checkbox\n #checkboxElement\n [name]=\"name\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [labelPlacement]=\"labelPlacement\"\n [justify]=\"justify\"\n [disabled]=\"disabled || readonly\"\n [value]=\"value\"\n [checked]=\"checked\"\n (ionChange)=\"checked = !checked\"\n [formControlName]=\"name\">\n <span [innerHTML]=\"label | translate\"></span>\n </ion-checkbox>\n </ion-item>\n }\n @else if(type === 'radio') {\n <ion-radio-group [formControlName]=\"name\" [name]=\"name\" [value]=\"value\">\n <label class=\"radio-group-label\">{{label | translate}}</label>\n @for(option of options; track option.value) {\n <ion-item>\n <ion-radio\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [disabled]=\"readonly || disabled\"\n [labelPlacement]=\"labelPlacement\"\n [alignment]=\"alignment\"\n [justify]=\"justify\"\n [value]=\"option.value\"\n >{{ option.text | translate }}</ion-radio>\n </ion-item>\n }\n </ion-radio-group>\n }\n @else if(type === 'select') {\n <ion-item>\n <ion-select\n [name]=\"name\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [labelPlacement]=\"labelPlacement\"\n [cancelText]=\"cancelText | translate\"\n [label]=\"translatable ? (label | translate) : label\"\n [value]=\"value\"\n [fill]=\"fill\"\n [disabled]=\"readonly || disabled\"\n [placeholder]=\"placeholder | translate\"\n [formControlName]=\"name\"\n [interface]=\"interface\">\n @for(option of options; track option.value) {\n <ion-select-option [value]=\"option.value\">\n {{ translatable ? (option.text | translate) : option.text }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n @else {\n <ion-item>\n <ion-input\n [type]=\"type\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [inputmode]=\"inputmode\"\n [autocomplete]=\"autocomplete\"\n [spellcheck]=\"spellcheck\"\n [labelPlacement]=\"labelPlacement\"\n [required]=\"required !== undefined ? required : false\"\n [minlength]=\"minlength !== undefined ? minlength : null\"\n [maxlength]=\"maxlength !== undefined ? maxlength : null\"\n [readonly]=\"readonly !== undefined ? readonly : null\"\n [max]=\"max !== undefined ? max : null\"\n [min]=\"min !== undefined ? min : null\"\n [pattern]=\"pattern !== undefined ? pattern : null\"\n [step]=\"step !== undefined ? step : null\"\n [value]=\"value\"\n [fill]=\"fill\"\n [placeholder]=\"placeholder | translate\"\n [formControlName]=\"name\"\n [label]=\"label | translate\">\n </ion-input>\n </ion-item>\n }\n @if((!formGroup.pristine || formGroup.touched) && !formGroup.valid) {\n <div class=\"error uk-flex uk-flex-top\">\n @for(item of getErrors(); track item.key) {\n <p>\n <span color=\"danger\" class=\"ti ti-alert-triangle\"></span>\n <span>{{item.key}} - {{ sf((\"errors.\" + item.message) | translate, this[item.key]) }}</span>\n </p>\n }\n </div>\n }\n</ng-container>\n", styles: [".disabled{opacity:.7;pointer-events:none;touch-action:none}.disabled *{pointer-events:none;touch-action:none}.proccessing,.proccessing *{pointer-events:none;touch-action:none;cursor:text}ion-item{--border-color: transparent;--padding-start: .75rem;--background: transparent;--background-hover-opacity: .1;--background-hover: var(--ion-color-primary);--background-activated-opacity: .15;--background-focused: var(--ion-color-primary);--background-focused-opacity: .15}ion-textarea textarea{scrollbar-width:thin!important;margin-bottom:.5rem!important}ion-select.select-label-placement-floating::part(label){line-height:1.2rem!important}.radio-group-label{margin-left:.5rem}.radio-group-label+ion-item{margin-top:.5rem}ion-checkbox{--size: 1.5rem;--checkbox-background-checked: var(--ion-color-primary);--checkmark-width: 2px}ion-checkbox::part(container){border-radius:50%;border:2px solid var(--ion-color-primary);padding:3px}ion-item+.helper,ion-radio-group+.helper{padding-left:.75rem;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonRadioGroup, selector: "ion-radio-group", inputs: ["allowEmptySelection", "compareWith", "name", "value"] }, { kind: "component", type: IonRadio, selector: "ion-radio", inputs: ["alignment", "color", "disabled", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "expandedIcon", "fill", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }] }); }
34
+ };
35
+ DecafCrudFieldComponent = __decorate([
36
+ Dynamic()
37
+ ], DecafCrudFieldComponent);
38
+ export { DecafCrudFieldComponent };
31
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafCrudFieldComponent, decorators: [{
32
40
  type: Component,
33
41
  args: [{ standalone: true, imports: [
34
42
  ReactiveFormsModule,
35
- NgClass,
36
43
  IonInput,
37
44
  IonItem,
38
45
  IonCheckbox,
@@ -41,26 +48,82 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
41
48
  IonSelect,
42
49
  TranslatePipe,
43
50
  IonSelectOption,
44
- DecafFieldDirective,
45
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], selector: 'decaf-crud-field', template: "<ng-container #component [formGroup]=\"formGroup\">\n @if(props.type === 'textarea') {\n <ion-item>\n <ion-textarea\n [ngClass]=\"props.className\"\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [required]=\"props.required !== undefined ? props.required : null\"\n [minlength]=\"props.minlength !== undefined ? props.minlength : null\"\n [maxlength]=\"props.maxlength !== undefined ? props.maxlength : null\"\n [readonly]=\"props.readonly !== undefined ? props.readonly : null\"\n [inputmode]=\"props.inputmode\"\n [spellcheck]=\"props.spellcheck\"\n [rows]=\"props.rows\"\n [labelPlacement]=\"props.labelPlacement\"\n [value]=\"props.value\"\n [fill]=\"props.fill\"\n [placeholder]=\"translatable ? (props.placeholder | translate) : props.placeholder\"\n [formControlName]=\"props.name\"\n [label]=\"translatable ? (props.label | translate) : props.label\">\n </ion-textarea>\n </ion-item>\n }\n @if(props.type === 'checkbox') {\n <ion-item [formControlName]=\"props.name\">\n <ion-checkbox\n #checkboxElement\n [name]=\"props.name\"\n [ngClass]=\"props.className\"\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [labelPlacement]=\"props.labelPlacement\"\n [alignment]=\"props.alignment\"\n [justify]=\"props.justify\"\n [disabled]=\"props.disabled || props.readonly\"\n [attr.checkedValue]=\"props.value\"\n [value]=\"props.value\"\n [checked]=\"props.checked\"\n (ionChange)=\"props.checked = !props.checked\"\n [formControlName]=\"props.name\">\n <span [innerHTML]=\"props.label | translate\"></span>\n </ion-checkbox>\n </ion-item>\n }\n @else if(props.type === 'radio') {\n <ion-radio-group [ngClass]=\"props.className\" [formControlName]=\"props.name\" [name]=\"props.name\" [value]=\"props.value\">\n <label class=\"radio-group-label\">{{props.label | translate}}</label>\n @for(option of options; track option.value) {\n <ion-item>\n <ion-radio\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [disabled]=\"props.readonly || props.disabled\"\n [labelPlacement]=\"props.labelPlacement\"\n [alignment]=\"props.alignment\"\n [justify]=\"props.justify\"\n [value]=\"option.value\"\n >{{ option.text | translate }}</ion-radio>\n </ion-item>\n }\n </ion-radio-group>\n }\n @else if(props.type === 'select') {\n <ion-item>\n <ion-select\n [name]=\"props.name\"\n [ngClass]=\"props.className\"\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [labelPlacement]=\"props.labelPlacement\"\n [cancelText]=\"props.cancelText | translate\"\n [label]=\"translatable ? (props.label | translate) : props.label\"\n [value]=\"props.value\"\n [fill]=\"props.fill\"\n [disabled]=\"props.readonly || props.disabled\"\n [placeholder]=\"props.placeholder | translate\"\n [formControlName]=\"props.name\"\n [interface]=\"props.interface\">\n @for(option of options; track option.value) {\n <ion-select-option [value]=\"option.value\">\n {{ translatable ? (option.text | translate) : option.text }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n @else if(HTML5InputTypes.includes(props.type)) {\n <ion-item>\n <ion-input\n [ngClass]=\"props.className\"\n [type]=\"props.type\"\n [mode]=\"props.mode\"\n [hidden]=\"props.hidden\"\n [inputmode]=\"props.inputmode\"\n [autocomplete]=\"props.autocomplete\"\n [spellcheck]=\"props.spellcheck\"\n [labelPlacement]=\"props.labelPlacement\"\n [required]=\"props.required !== undefined ? props.required : false\"\n [minlength]=\"props.minlength !== undefined ? props.minlength : null\"\n [maxlength]=\"props.maxlength !== undefined ? props.maxlength : null\"\n [readonly]=\"props.readonly !== undefined ? props.readonly : null\"\n [max]=\"props.max !== undefined ? props.max : null\"\n [min]=\"props.min !== undefined ? props.min : null\"\n [pattern]=\"props.pattern !== undefined ? props.pattern : null\"\n [step]=\"props.step !== undefined ? props.step : null\"\n [value]=\"props.value\"\n [fill]=\"props.fill\"\n [placeholder]=\"props.placeholder | translate\"\n [formControlName]=\"props.name\"\n [label]=\"props.label | translate\">\n </ion-input>\n </ion-item>\n }\n @else {\n <h1>INVALID FIELD TYPE</h1>\n }\n @if((!formGroup.pristine || formGroup.touched) && !formGroup.valid) {\n <div class=\"error uk-flex uk-flex-top\">\n @for(item of getErrors(); track item.key) {\n <p>\n <span color=\"danger\" class=\"ti ti-alert-triangle\"></span>\n <span>{{item.key}} - {{ sf((\"errors.\" + item.message) | translate, props[item.key]) }}</span>\n </p>\n }\n </div>\n }\n</ng-container>\n", styles: [".disabled{opacity:.7;pointer-events:none;touch-action:none}.disabled *{pointer-events:none;touch-action:none}.proccessing,.proccessing *{pointer-events:none;touch-action:none;cursor:text}ion-item{--border-color: transparent;--padding-start: .75rem;--background: transparent;--background-hover-opacity: .1;--background-hover: var(--ion-color-primary);--background-activated-opacity: .15;--background-focused: var(--ion-color-primary);--background-focused-opacity: .15}ion-textarea textarea{scrollbar-width:thin!important;margin-bottom:.5rem!important}ion-select.select-label-placement-floating::part(label){line-height:1.2rem!important}.radio-group-label{margin-left:.5rem}.radio-group-label+ion-item{margin-top:.5rem}ion-checkbox{--size: 1.5rem;--checkbox-background-checked: var(--ion-color-primary);--checkmark-width: 2px}ion-checkbox::part(container){border-radius:50%;border:2px solid var(--ion-color-primary);padding:3px}ion-item+.helper,ion-radio-group+.helper{padding-left:.75rem;position:relative}\n"] }]
46
- }], propDecorators: { updateOn: [{
47
- type: Input
48
- }], component: [{
49
- type: ViewChild,
50
- args: ['component', { read: ElementRef }]
51
- }], operation: [{
51
+ IonTextarea,
52
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], selector: 'decaf-crud-field', template: "<ng-container #component [formGroup]=\"formGroup\">\n @if(type === 'textarea') {\n <ion-item>\n <ion-textarea\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [required]=\"required !== undefined ? required : null\"\n [minlength]=\"minlength !== undefined ? minlength : null\"\n [maxlength]=\"maxlength !== undefined ? maxlength : null\"\n [readonly]=\"readonly !== undefined ? readonly : null\"\n [inputmode]=\"inputmode\"\n [spellcheck]=\"spellcheck\"\n [rows]=\"rows\"\n [labelPlacement]=\"labelPlacement\"\n [value]=\"value\"\n [fill]=\"fill\"\n [placeholder]=\"translatable ? (placeholder | translate) : placeholder\"\n [formControlName]=\"name\"\n [label]=\"translatable ? (label | translate) : label\">\n </ion-textarea>\n </ion-item>\n }\n @if(type === 'checkbox') {\n <ion-item [formControlName]=\"name\">\n <ion-checkbox\n #checkboxElement\n [name]=\"name\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [labelPlacement]=\"labelPlacement\"\n [justify]=\"justify\"\n [disabled]=\"disabled || readonly\"\n [value]=\"value\"\n [checked]=\"checked\"\n (ionChange)=\"checked = !checked\"\n [formControlName]=\"name\">\n <span [innerHTML]=\"label | translate\"></span>\n </ion-checkbox>\n </ion-item>\n }\n @else if(type === 'radio') {\n <ion-radio-group [formControlName]=\"name\" [name]=\"name\" [value]=\"value\">\n <label class=\"radio-group-label\">{{label | translate}}</label>\n @for(option of options; track option.value) {\n <ion-item>\n <ion-radio\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [disabled]=\"readonly || disabled\"\n [labelPlacement]=\"labelPlacement\"\n [alignment]=\"alignment\"\n [justify]=\"justify\"\n [value]=\"option.value\"\n >{{ option.text | translate }}</ion-radio>\n </ion-item>\n }\n </ion-radio-group>\n }\n @else if(type === 'select') {\n <ion-item>\n <ion-select\n [name]=\"name\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [labelPlacement]=\"labelPlacement\"\n [cancelText]=\"cancelText | translate\"\n [label]=\"translatable ? (label | translate) : label\"\n [value]=\"value\"\n [fill]=\"fill\"\n [disabled]=\"readonly || disabled\"\n [placeholder]=\"placeholder | translate\"\n [formControlName]=\"name\"\n [interface]=\"interface\">\n @for(option of options; track option.value) {\n <ion-select-option [value]=\"option.value\">\n {{ translatable ? (option.text | translate) : option.text }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n @else {\n <ion-item>\n <ion-input\n [type]=\"type\"\n [mode]=\"mode\"\n [hidden]=\"hidden\"\n [inputmode]=\"inputmode\"\n [autocomplete]=\"autocomplete\"\n [spellcheck]=\"spellcheck\"\n [labelPlacement]=\"labelPlacement\"\n [required]=\"required !== undefined ? required : false\"\n [minlength]=\"minlength !== undefined ? minlength : null\"\n [maxlength]=\"maxlength !== undefined ? maxlength : null\"\n [readonly]=\"readonly !== undefined ? readonly : null\"\n [max]=\"max !== undefined ? max : null\"\n [min]=\"min !== undefined ? min : null\"\n [pattern]=\"pattern !== undefined ? pattern : null\"\n [step]=\"step !== undefined ? step : null\"\n [value]=\"value\"\n [fill]=\"fill\"\n [placeholder]=\"placeholder | translate\"\n [formControlName]=\"name\"\n [label]=\"label | translate\">\n </ion-input>\n </ion-item>\n }\n @if((!formGroup.pristine || formGroup.touched) && !formGroup.valid) {\n <div class=\"error uk-flex uk-flex-top\">\n @for(item of getErrors(); track item.key) {\n <p>\n <span color=\"danger\" class=\"ti ti-alert-triangle\"></span>\n <span>{{item.key}} - {{ sf((\"errors.\" + item.message) | translate, this[item.key]) }}</span>\n </p>\n }\n </div>\n }\n</ng-container>\n", styles: [".disabled{opacity:.7;pointer-events:none;touch-action:none}.disabled *{pointer-events:none;touch-action:none}.proccessing,.proccessing *{pointer-events:none;touch-action:none;cursor:text}ion-item{--border-color: transparent;--padding-start: .75rem;--background: transparent;--background-hover-opacity: .1;--background-hover: var(--ion-color-primary);--background-activated-opacity: .15;--background-focused: var(--ion-color-primary);--background-focused-opacity: .15}ion-textarea textarea{scrollbar-width:thin!important;margin-bottom:.5rem!important}ion-select.select-label-placement-floating::part(label){line-height:1.2rem!important}.radio-group-label{margin-left:.5rem}.radio-group-label+ion-item{margin-top:.5rem}ion-checkbox{--size: 1.5rem;--checkbox-background-checked: var(--ion-color-primary);--checkmark-width: 2px}ion-checkbox::part(container){border-radius:50%;border:2px solid var(--ion-color-primary);padding:3px}ion-item+.helper,ion-radio-group+.helper{padding-left:.75rem;position:relative}\n"] }]
53
+ }], propDecorators: { operation: [{
54
+ type: Input,
55
+ args: [{ required: true }]
56
+ }], name: [{
52
57
  type: Input,
53
58
  args: [{ required: true }]
54
- }], props: [{
59
+ }], type: [{
55
60
  type: Input,
56
61
  args: [{ required: true }]
57
- }], name: [{
62
+ }], value: [{
63
+ type: Input
64
+ }], disabled: [{
65
+ type: Input
66
+ }], label: [{
67
+ type: Input,
68
+ args: [{ required: true }]
69
+ }], placeholder: [{
70
+ type: Input
71
+ }], format: [{
72
+ type: Input
73
+ }], hidden: [{
74
+ type: Input
75
+ }], max: [{
76
+ type: Input
77
+ }], maxlength: [{
78
+ type: Input
79
+ }], min: [{
80
+ type: Input
81
+ }], minlength: [{
82
+ type: Input
83
+ }], pattern: [{
84
+ type: Input
85
+ }], readonly: [{
86
+ type: Input
87
+ }], required: [{
88
+ type: Input
89
+ }], step: [{
90
+ type: Input
91
+ }], cols: [{
92
+ type: Input
93
+ }], rows: [{
94
+ type: Input
95
+ }], alignment: [{
96
+ type: Input
97
+ }], checked: [{
98
+ type: Input
99
+ }], justify: [{
100
+ type: Input
101
+ }], cancelText: [{
102
+ type: Input
103
+ }], interface: [{
58
104
  type: Input
59
105
  }], options: [{
60
106
  type: Input
107
+ }], mode: [{
108
+ type: Input
109
+ }], spellcheck: [{
110
+ type: Input
111
+ }], inputmode: [{
112
+ type: Input
113
+ }], autocomplete: [{
114
+ type: Input
115
+ }], fill: [{
116
+ type: Input
117
+ }], labelPlacement: [{
118
+ type: Input
119
+ }], updateOn: [{
120
+ type: Input
121
+ }], component: [{
122
+ type: ViewChild,
123
+ args: ['component', { read: ElementRef }]
61
124
  }], formGroup: [{
62
125
  type: Input
63
126
  }], translatable: [{
64
127
  type: Input
65
128
  }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtY3J1ZC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGVjYWYtY3J1ZC1maWVsZC9kZWNhZi1jcnVkLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZpZWxkL2RlY2FmLWNydWQtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLEtBQUssRUFDTCxnQkFBZ0IsRUFHaEIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsT0FBTyxFQUNQLFFBQVEsRUFDUixhQUFhLEVBQ2IsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSwyQkFBMkIsQ0FBQztBQVFuQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFHakUsYUFBYTtBQXNCYixNQUFNLE9BQU8sdUJBQ1gsU0FBUSxnQkFBZ0I7SUF0QjFCOztRQTBCRSxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQXFCckMsaUJBQVksR0FBb0IsSUFBSSxDQUFDO1FBY2xCLG9CQUFlLEdBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUMvRTtJQWJDLGVBQWU7UUFDYixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDOytHQXRDVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixpVUFPRixVQUFVLG9EQ2pFNUMsMGxLQStIQSx3aUNEdkZJLG1CQUFtQixneENBQ25CLE9BQU8sb0ZBQ1AsUUFBUSw4ZUFDUixPQUFPLDBOQUNQLFdBQVcsMEtBQ1gsYUFBYSw2SEFDYixRQUFRLHdKQUNSLFNBQVMsa1RBQ1QsYUFBYSxrREFDYixlQUFlOzs0RkFTTix1QkFBdUI7a0JBckJuQyxTQUFTO2lDQUNJLElBQUksV0FDUDt3QkFDUCxtQkFBbUI7d0JBQ25CLE9BQU87d0JBQ1AsUUFBUTt3QkFDUixPQUFPO3dCQUNQLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixRQUFRO3dCQUNSLFNBQVM7d0JBQ1QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLG1CQUFtQjtxQkFDcEIsV0FDUSxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLFlBRXpDLGtCQUFrQjs4QkFTNUIsUUFBUTtzQkFEUCxLQUFLO2dCQUlHLFNBQVM7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJbkMsU0FBUztzQkFEakIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSWhCLEtBQUs7c0JBRGIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSWhCLElBQUk7c0JBRFosS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSUcsU0FBUztzQkFEakIsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBOT19FUlJPUlNfU0NIRU1BLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSFRNTDVJbnB1dFR5cGVzIH0gZnJvbSAnQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgSW9uQ2hlY2tib3gsXG4gIElvbklucHV0LFxuICBJb25JdGVtLFxuICBJb25SYWRpbyxcbiAgSW9uUmFkaW9Hcm91cCxcbiAgSW9uU2VsZWN0LFxuICBJb25TZWxlY3RPcHRpb24sXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHtcbiAgQW5ndWxhckZpZWxkRGVmaW5pdGlvbixcbiAgRmllbGRVcGRhdGVNb2RlLFxuICBSYWRpb09wdGlvbixcbiAgU2VsZWN0T3B0aW9uLFxuICBTdHJpbmdPckJvb2xlYW4sXG59IGZyb20gJy4uLy4uL2VuZ2luZS90eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBEZWNhZkZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9kZWNhZi1maWVsZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ3hDcnVkRm9ybUZpZWxkIH0gZnJvbSAnLi4vLi4vZW5naW5lL05neENydWRGb3JtRmllbGQnO1xuaW1wb3J0IHsgRHluYW1pYyB9IGZyb20gJy4uLy4uL2VuZ2luZS9kZWNvcmF0b3JzJztcblxuLy8gQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5nQ2xhc3MsXG4gICAgSW9uSW5wdXQsXG4gICAgSW9uSXRlbSxcbiAgICBJb25DaGVja2JveCxcbiAgICBJb25SYWRpb0dyb3VwLFxuICAgIElvblJhZGlvLFxuICAgIElvblNlbGVjdCxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIElvblNlbGVjdE9wdGlvbixcbiAgICBEZWNhZkZpZWxkRGlyZWN0aXZlLFxuICBdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTk9fRVJST1JTX1NDSEVNQV0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnZGVjYWYtY3J1ZC1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWNhZi1jcnVkLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RlY2FmLWNydWQtZmllbGQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBEZWNhZkNydWRGaWVsZENvbXBvbmVudFxuICBleHRlbmRzIE5neENydWRGb3JtRmllbGRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICBASW5wdXQoKVxuICB1cGRhdGVPbjogRmllbGRVcGRhdGVNb2RlID0gJ2NoYW5nZSc7XG5cbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIG92ZXJyaWRlIGNvbXBvbmVudCE6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3ZlcnJpZGUgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3ZlcnJpZGUgcHJvcHMhOiBBbmd1bGFyRmllbGREZWZpbml0aW9uO1xuXG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIG5hbWUhOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgb3B0aW9ucyE6IFNlbGVjdE9wdGlvbltdIHwgUmFkaW9PcHRpb25bXTtcblxuICBASW5wdXQoKVxuICBvdmVycmlkZSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG5cbiAgQElucHV0KClcbiAgdHJhbnNsYXRhYmxlOiBTdHJpbmdPckJvb2xlYW4gPSB0cnVlO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5hZnRlclZpZXdJbml0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIub25Jbml0KHRoaXMudXBkYXRlT24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEhUTUw1SW5wdXRUeXBlczogc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKEhUTUw1SW5wdXRUeXBlcyk7XG59XG4iLCI8bmctY29udGFpbmVyICNjb21wb25lbnQgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgQGlmKHByb3BzLnR5cGUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICA8aW9uLWl0ZW0+XG4gICAgICA8aW9uLXRleHRhcmVhXG4gICAgICAgIFtuZ0NsYXNzXT1cInByb3BzLmNsYXNzTmFtZVwiXG4gICAgICAgIFttb2RlXT1cInByb3BzLm1vZGVcIlxuICAgICAgICBbaGlkZGVuXT1cInByb3BzLmhpZGRlblwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJwcm9wcy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gcHJvcHMucmVxdWlyZWQgOiBudWxsXCJcbiAgICAgICAgW21pbmxlbmd0aF09XCJwcm9wcy5taW5sZW5ndGggIT09IHVuZGVmaW5lZCA/IHByb3BzLm1pbmxlbmd0aCA6IG51bGxcIlxuICAgICAgICBbbWF4bGVuZ3RoXT1cInByb3BzLm1heGxlbmd0aCAhPT0gdW5kZWZpbmVkID8gcHJvcHMubWF4bGVuZ3RoIDogbnVsbFwiXG4gICAgICAgIFtyZWFkb25seV09XCJwcm9wcy5yZWFkb25seSAhPT0gdW5kZWZpbmVkID8gcHJvcHMucmVhZG9ubHkgOiBudWxsXCJcbiAgICAgICAgW2lucHV0bW9kZV09XCJwcm9wcy5pbnB1dG1vZGVcIlxuICAgICAgICBbc3BlbGxjaGVja109XCJwcm9wcy5zcGVsbGNoZWNrXCJcbiAgICAgICAgW3Jvd3NdPVwicHJvcHMucm93c1wiXG4gICAgICAgIFtsYWJlbFBsYWNlbWVudF09XCJwcm9wcy5sYWJlbFBsYWNlbWVudFwiXG4gICAgICAgIFt2YWx1ZV09XCJwcm9wcy52YWx1ZVwiXG4gICAgICAgIFtmaWxsXT1cInByb3BzLmZpbGxcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRhYmxlID8gKHByb3BzLnBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlKSA6IHByb3BzLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wcy5uYW1lXCJcbiAgICAgICAgW2xhYmVsXT1cInRyYW5zbGF0YWJsZSA/IChwcm9wcy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBwcm9wcy5sYWJlbFwiPlxuICAgICAgPC9pb24tdGV4dGFyZWE+XG4gICAgPC9pb24taXRlbT5cbiAgfVxuICBAaWYocHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgIDxpb24taXRlbSBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BzLm5hbWVcIj5cbiAgICAgIDxpb24tY2hlY2tib3hcbiAgICAgICAgI2NoZWNrYm94RWxlbWVudFxuICAgICAgICBbbmFtZV09XCJwcm9wcy5uYW1lXCJcbiAgICAgICAgW25nQ2xhc3NdPVwicHJvcHMuY2xhc3NOYW1lXCJcbiAgICAgICAgW21vZGVdPVwicHJvcHMubW9kZVwiXG4gICAgICAgIFtoaWRkZW5dPVwicHJvcHMuaGlkZGVuXCJcbiAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cInByb3BzLmxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgW2FsaWdubWVudF09XCJwcm9wcy5hbGlnbm1lbnRcIlxuICAgICAgICBbanVzdGlmeV09XCJwcm9wcy5qdXN0aWZ5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInByb3BzLmRpc2FibGVkIHx8IHByb3BzLnJlYWRvbmx5XCJcbiAgICAgICAgW2F0dHIuY2hlY2tlZFZhbHVlXT1cInByb3BzLnZhbHVlXCJcbiAgICAgICAgW3ZhbHVlXT1cInByb3BzLnZhbHVlXCJcbiAgICAgICAgW2NoZWNrZWRdPVwicHJvcHMuY2hlY2tlZFwiXG4gICAgICAgIChpb25DaGFuZ2UpPVwicHJvcHMuY2hlY2tlZCA9ICFwcm9wcy5jaGVja2VkXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wcy5uYW1lXCI+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwicHJvcHMubGFiZWwgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICA8L2lvbi1jaGVja2JveD5cbiAgICA8L2lvbi1pdGVtPlxuICB9XG4gIEBlbHNlIGlmKHByb3BzLnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICA8aW9uLXJhZGlvLWdyb3VwIFtuZ0NsYXNzXT1cInByb3BzLmNsYXNzTmFtZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcHMubmFtZVwiIFtuYW1lXT1cInByb3BzLm5hbWVcIiBbdmFsdWVdPVwicHJvcHMudmFsdWVcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvLWdyb3VwLWxhYmVsXCI+e3twcm9wcy5sYWJlbCB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIEBmb3Iob3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgPGlvbi1yYWRpb1xuICAgICAgICAgICAgW21vZGVdPVwicHJvcHMubW9kZVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cInByb3BzLmhpZGRlblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMucmVhZG9ubHkgfHwgcHJvcHMuZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cInByb3BzLmxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgICAgIFthbGlnbm1lbnRdPVwicHJvcHMuYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtqdXN0aWZ5XT1cInByb3BzLmp1c3RpZnlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgPnt7IG9wdGlvbi50ZXh0IHwgdHJhbnNsYXRlIH19PC9pb24tcmFkaW8+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICB9XG4gICAgPC9pb24tcmFkaW8tZ3JvdXA+XG4gIH1cbiAgQGVsc2UgaWYocHJvcHMudHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICA8aW9uLWl0ZW0+XG4gICAgICA8aW9uLXNlbGVjdFxuICAgICAgICBbbmFtZV09XCJwcm9wcy5uYW1lXCJcbiAgICAgICAgW25nQ2xhc3NdPVwicHJvcHMuY2xhc3NOYW1lXCJcbiAgICAgICAgW21vZGVdPVwicHJvcHMubW9kZVwiXG4gICAgICAgIFtoaWRkZW5dPVwicHJvcHMuaGlkZGVuXCJcbiAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cInByb3BzLmxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgW2NhbmNlbFRleHRdPVwicHJvcHMuY2FuY2VsVGV4dCB8ICB0cmFuc2xhdGVcIlxuICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRhYmxlID8gKHByb3BzLmxhYmVsIHwgdHJhbnNsYXRlKSA6IHByb3BzLmxhYmVsXCJcbiAgICAgICAgW3ZhbHVlXT1cInByb3BzLnZhbHVlXCJcbiAgICAgICAgW2ZpbGxdPVwicHJvcHMuZmlsbFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJwcm9wcy5yZWFkb25seSB8fCBwcm9wcy5kaXNhYmxlZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wcy5wbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcHMubmFtZVwiXG4gICAgICAgIFtpbnRlcmZhY2VdPVwicHJvcHMuaW50ZXJmYWNlXCI+XG4gICAgICAgIEBmb3Iob3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGFibGUgPyAob3B0aW9uLnRleHQgfCB0cmFuc2xhdGUpIDogb3B0aW9uLnRleHQgfX1cbiAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24taXRlbT5cbiAgfVxuICBAZWxzZSBpZihIVE1MNUlucHV0VHlwZXMuaW5jbHVkZXMocHJvcHMudHlwZSkpIHtcbiAgICA8aW9uLWl0ZW0+XG4gICAgICA8aW9uLWlucHV0XG4gICAgICAgIFtuZ0NsYXNzXT1cInByb3BzLmNsYXNzTmFtZVwiXG4gICAgICAgIFt0eXBlXT1cInByb3BzLnR5cGVcIlxuICAgICAgICBbbW9kZV09XCJwcm9wcy5tb2RlXCJcbiAgICAgICAgW2hpZGRlbl09XCJwcm9wcy5oaWRkZW5cIlxuICAgICAgICBbaW5wdXRtb2RlXT1cInByb3BzLmlucHV0bW9kZVwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwicHJvcHMuYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW3NwZWxsY2hlY2tdPVwicHJvcHMuc3BlbGxjaGVja1wiXG4gICAgICAgIFtsYWJlbFBsYWNlbWVudF09XCJwcm9wcy5sYWJlbFBsYWNlbWVudFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJwcm9wcy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gcHJvcHMucmVxdWlyZWQgOiBmYWxzZVwiXG4gICAgICAgIFttaW5sZW5ndGhdPVwicHJvcHMubWlubGVuZ3RoICE9PSB1bmRlZmluZWQgPyBwcm9wcy5taW5sZW5ndGggOiBudWxsXCJcbiAgICAgICAgW21heGxlbmd0aF09XCJwcm9wcy5tYXhsZW5ndGggIT09IHVuZGVmaW5lZCA/IHByb3BzLm1heGxlbmd0aCA6IG51bGxcIlxuICAgICAgICBbcmVhZG9ubHldPVwicHJvcHMucmVhZG9ubHkgIT09IHVuZGVmaW5lZCA/IHByb3BzLnJlYWRvbmx5IDogbnVsbFwiXG4gICAgICAgIFttYXhdPVwicHJvcHMubWF4ICE9PSB1bmRlZmluZWQgPyBwcm9wcy5tYXggOiBudWxsXCJcbiAgICAgICAgW21pbl09XCJwcm9wcy5taW4gIT09IHVuZGVmaW5lZCA/IHByb3BzLm1pbiA6IG51bGxcIlxuICAgICAgICBbcGF0dGVybl09XCJwcm9wcy5wYXR0ZXJuICE9PSB1bmRlZmluZWQgPyBwcm9wcy5wYXR0ZXJuIDogbnVsbFwiXG4gICAgICAgIFtzdGVwXT1cInByb3BzLnN0ZXAgIT09IHVuZGVmaW5lZCA/IHByb3BzLnN0ZXAgOiBudWxsXCJcbiAgICAgICAgW3ZhbHVlXT1cInByb3BzLnZhbHVlXCJcbiAgICAgICAgW2ZpbGxdPVwicHJvcHMuZmlsbFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wcy5wbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcHMubmFtZVwiXG4gICAgICAgIFtsYWJlbF09XCJwcm9wcy5sYWJlbCB8IHRyYW5zbGF0ZVwiPlxuICAgICAgPC9pb24taW5wdXQ+XG4gICAgPC9pb24taXRlbT5cbiAgfVxuICBAZWxzZSB7XG4gICAgPGgxPklOVkFMSUQgRklFTEQgVFlQRTwvaDE+XG4gIH1cbiAgQGlmKCghZm9ybUdyb3VwLnByaXN0aW5lIHx8IGZvcm1Hcm91cC50b3VjaGVkKSAmJiAhZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgPGRpdiBjbGFzcz1cImVycm9yIHVrLWZsZXggdWstZmxleC10b3BcIj5cbiAgICAgIEBmb3IoaXRlbSBvZiBnZXRFcnJvcnMoKTsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHNwYW4gY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cInRpIHRpLWFsZXJ0LXRyaWFuZ2xlXCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7aXRlbS5rZXl9fSAtIHt7IHNmKChcImVycm9ycy5cIiArIGl0ZW0ubWVzc2FnZSkgfCB0cmFuc2xhdGUsIHByb3BzW2l0ZW0ua2V5XSkgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy1jb250YWluZXI+XG4iXX0=
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtY3J1ZC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGVjYWYtY3J1ZC1maWVsZC9kZWNhZi1jcnVkLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZpZWxkL2RlY2FmLWNydWQtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLFVBQVUsRUFDVixLQUFLLEVBQ0wsZ0JBQWdCLEVBR2hCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsT0FBTyxFQUNQLFFBQVEsRUFDUixhQUFhLEVBQ2IsU0FBUyxFQUNULGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQVFuQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUE0QjNDLElBQU0sdUJBQXVCLEdBQTdCLE1BQU0sdUJBQ1gsU0FBUSxnQkFBZ0I7SUFEbkI7O1FBY0ksVUFBSyxHQUEyQixFQUFFLENBQUM7UUFrRTVDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsY0FBUyxHQVFNLE1BQU0sQ0FBQztRQUd0QixpQkFBWSxHQUFzQixLQUFLLENBQUM7UUFHeEMsU0FBSSxHQUF3QixTQUFTLENBQUM7UUFHdEMsbUJBQWMsR0FDWixTQUFTLENBQUM7UUFFWixZQUFZO1FBR1osYUFBUSxHQUFvQixRQUFRLENBQUM7UUFTckMsaUJBQVksR0FBb0IsSUFBSSxDQUFDO0tBYXRDO0lBWEMsZUFBZTtRQUNiLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBL0hVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHUyQkE0R0YsVUFBVSxvREN4SzVDLHVzSUFzSEEsd2lDRDNFSSxtQkFBbUIsZ3hDQUNuQixRQUFRLDhlQUNSLE9BQU8sME5BQ1AsV0FBVywwS0FDWCxhQUFhLDZIQUNiLFFBQVEsd0pBQ1IsU0FBUyxrVEFDVCxhQUFhLGtEQUNiLGVBQWUsNkZBQ2YsV0FBVzs7QUFRRix1QkFBdUI7SUFyQm5DLE9BQU8sRUFBRTtHQXFCRyx1QkFBdUIsQ0FnSW5DOzs0RkFoSVksdUJBQXVCO2tCQXBCbkMsU0FBUztpQ0FDSSxJQUFJLFdBQ1A7d0JBQ1AsbUJBQW1CO3dCQUNuQixRQUFRO3dCQUNSLE9BQU87d0JBQ1AsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsV0FBVztxQkFDWixXQUNRLENBQUMsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUMsWUFFekMsa0JBQWtCOzhCQVNuQixTQUFTO3NCQURqQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJaEIsSUFBSTtzQkFEWixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJaEIsSUFBSTtzQkFEWixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJaEIsS0FBSztzQkFEYixLQUFLO2dCQUlHLFFBQVE7c0JBRGhCLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsV0FBVztzQkFEVixLQUFLO2dCQU1HLE1BQU07c0JBRGQsS0FBSztnQkFHRyxNQUFNO3NCQURkLEtBQUs7Z0JBR0csR0FBRztzQkFEWCxLQUFLO2dCQUdHLFNBQVM7c0JBRGpCLEtBQUs7Z0JBR0csR0FBRztzQkFEWCxLQUFLO2dCQUdHLFNBQVM7c0JBRGpCLEtBQUs7Z0JBR0csT0FBTztzQkFEZixLQUFLO2dCQUdHLFFBQVE7c0JBRGhCLEtBQUs7Z0JBR0csUUFBUTtzQkFEaEIsS0FBSztnQkFHRyxJQUFJO3NCQURaLEtBQUs7Z0JBTU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFNTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFZTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFPTixRQUFRO3NCQURQLEtBQUs7Z0JBSUcsU0FBUztzQkFEakIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUluQyxTQUFTO3NCQURqQixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5PX0VSUk9SU19TQ0hFTUEsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbnMgfSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBJb25DaGVja2JveCxcbiAgSW9uSW5wdXQsXG4gIElvbkl0ZW0sXG4gIElvblJhZGlvLFxuICBJb25SYWRpb0dyb3VwLFxuICBJb25TZWxlY3QsXG4gIElvblNlbGVjdE9wdGlvbixcbiAgSW9uVGV4dGFyZWEsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHtcbiAgRmllbGRVcGRhdGVNb2RlLFxuICBQb3NzaWJsZUlucHV0VHlwZXMsXG4gIFJhZGlvT3B0aW9uLFxuICBTZWxlY3RPcHRpb24sXG4gIFN0cmluZ09yQm9vbGVhbixcbn0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5neENydWRGb3JtRmllbGQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4Q3J1ZEZvcm1GaWVsZCc7XG5pbXBvcnQgeyBEeW5hbWljIH0gZnJvbSAnLi4vLi4vZW5naW5lL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQXV0b2NvbXBsZXRlVHlwZXMsXG4gIFNlbGVjdEludGVyZmFjZSxcbiAgVGV4dEZpZWxkVHlwZXMsXG59IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIElvbklucHV0LFxuICAgIElvbkl0ZW0sXG4gICAgSW9uQ2hlY2tib3gsXG4gICAgSW9uUmFkaW9Hcm91cCxcbiAgICBJb25SYWRpbyxcbiAgICBJb25TZWxlY3QsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBJb25TZWxlY3RPcHRpb24sXG4gICAgSW9uVGV4dGFyZWEsXG4gIF0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOT19FUlJPUlNfU0NIRU1BXSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdkZWNhZi1jcnVkLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RlY2FmLWNydWQtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGVjYWYtY3J1ZC1maWVsZC5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIERlY2FmQ3J1ZEZpZWxkQ29tcG9uZW50XG4gIGV4dGVuZHMgTmd4Q3J1ZEZvcm1GaWVsZFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIG92ZXJyaWRlIG9wZXJhdGlvbiE6IENydWRPcGVyYXRpb25zO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIG92ZXJyaWRlIG5hbWUhOiBzdHJpbmc7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3ZlcnJpZGUgdHlwZSE6IFBvc3NpYmxlSW5wdXRUeXBlcztcblxuICBASW5wdXQoKVxuICBvdmVycmlkZSB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIGRpc2FibGVkPzogYm9vbGVhbjtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBsYWJlbCE6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlciE6IHN0cmluZztcblxuICAvLyBWYWxpZGF0aW9uXG5cbiAgQElucHV0KClcbiAgb3ZlcnJpZGUgZm9ybWF0Pzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSBoaWRkZW4/OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSBtYXg/OiBudW1iZXIgfCBEYXRlO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSBtYXhsZW5ndGg/OiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIG1pbj86IG51bWJlciB8IERhdGU7XG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIG1pbmxlbmd0aD86IG51bWJlcjtcbiAgQElucHV0KClcbiAgb3ZlcnJpZGUgcGF0dGVybj86IHN0cmluZztcbiAgQElucHV0KClcbiAgb3ZlcnJpZGUgcmVhZG9ubHk/OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBvdmVycmlkZSByZXF1aXJlZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIHN0ZXA/OiBudW1iZXI7XG5cbiAgLy8gdHlwZSBzcGVjaWZpYyBvcHRpb25zXG5cbiAgQElucHV0KClcbiAgY29scz86IG51bWJlcjtcblxuICBASW5wdXQoKVxuICByb3dzPzogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGFsaWdubWVudD86ICdzdGFydCcgfCAnY2VudGVyJztcblxuICBASW5wdXQoKVxuICBjaGVja2VkPzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBqdXN0aWZ5PzogJ3N0YXJ0JyB8ICdlbmQnIHwgJ3NwYWNlLWJldHdlZW4nO1xuXG4gIEBJbnB1dCgpXG4gIGNhbmNlbFRleHQ/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgaW50ZXJmYWNlPzogU2VsZWN0SW50ZXJmYWNlO1xuXG4gIEBJbnB1dCgpXG4gIG9wdGlvbnMhOiBTZWxlY3RPcHRpb25bXSB8IFJhZGlvT3B0aW9uW107XG5cbiAgLy8gZW5naW5lIHNwZWNpZmljIHByb3BlcnRpZXNcblxuICBASW5wdXQoKVxuICBtb2RlPzogJ2lvcycgfCAnbWQnO1xuXG4gIEBJbnB1dCgpXG4gIHNwZWxsY2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBpbnB1dG1vZGU6XG4gICAgfCAnbm9uZSdcbiAgICB8ICd0ZXh0J1xuICAgIHwgJ3RlbCdcbiAgICB8ICd1cmwnXG4gICAgfCAnZW1haWwnXG4gICAgfCAnbnVtZXJpYydcbiAgICB8ICdkZWNpbWFsJ1xuICAgIHwgJ3NlYXJjaCcgPSAnbm9uZSc7XG5cbiAgQElucHV0KClcbiAgYXV0b2NvbXBsZXRlOiBBdXRvY29tcGxldGVUeXBlcyA9ICdvZmYnO1xuXG4gIEBJbnB1dCgpXG4gIGZpbGw6ICdvdXRsaW5lJyB8ICdzb2xpZCcgPSAnb3V0bGluZSc7XG5cbiAgQElucHV0KClcbiAgbGFiZWxQbGFjZW1lbnQ6ICdzdGFydCcgfCAnZW5kJyB8ICdmbG9hdGluZycgfCAnc3RhY2tlZCcgfCAnZml4ZWQnID1cbiAgICAnc3RhY2tlZCc7XG5cbiAgLy8gQ29tcG9uZW50XG5cbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbXBvbmVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBvdmVycmlkZSBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcblxuICBASW5wdXQoKVxuICB0cmFuc2xhdGFibGU6IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbkluaXQodGhpcy51cGRhdGVPbik7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgI2NvbXBvbmVudCBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICBAaWYodHlwZSA9PT0gJ3RleHRhcmVhJykge1xuICAgIDxpb24taXRlbT5cbiAgICAgIDxpb24tdGV4dGFyZWFcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyByZXF1aXJlZCA6IG51bGxcIlxuICAgICAgICBbbWlubGVuZ3RoXT1cIm1pbmxlbmd0aCAhPT0gdW5kZWZpbmVkID8gbWlubGVuZ3RoIDogbnVsbFwiXG4gICAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoICE9PSB1bmRlZmluZWQgPyBtYXhsZW5ndGggOiBudWxsXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5ICE9PSB1bmRlZmluZWQgPyByZWFkb25seSA6IG51bGxcIlxuICAgICAgICBbaW5wdXRtb2RlXT1cImlucHV0bW9kZVwiXG4gICAgICAgIFtzcGVsbGNoZWNrXT1cInNwZWxsY2hlY2tcIlxuICAgICAgICBbcm93c109XCJyb3dzXCJcbiAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cImxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2ZpbGxdPVwiZmlsbFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0cmFuc2xhdGFibGUgPyAocGxhY2Vob2xkZXIgfCB0cmFuc2xhdGUpIDogcGxhY2Vob2xkZXJcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVcIlxuICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRhYmxlID8gKGxhYmVsIHwgdHJhbnNsYXRlKSA6IGxhYmVsXCI+XG4gICAgICA8L2lvbi10ZXh0YXJlYT5cbiAgICA8L2lvbi1pdGVtPlxuICB9XG4gIEBpZih0eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgPGlvbi1pdGVtIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVwiPlxuICAgICAgPGlvbi1jaGVja2JveFxuICAgICAgICAjY2hlY2tib3hFbGVtZW50XG4gICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgICAgW2hpZGRlbl09XCJoaWRkZW5cIlxuICAgICAgICBbbGFiZWxQbGFjZW1lbnRdPVwibGFiZWxQbGFjZW1lbnRcIlxuICAgICAgICBbanVzdGlmeV09XCJqdXN0aWZ5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgICAgIChpb25DaGFuZ2UpPVwiY2hlY2tlZCA9ICFjaGVja2VkXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJuYW1lXCI+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibGFiZWwgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICA8L2lvbi1jaGVja2JveD5cbiAgICA8L2lvbi1pdGVtPlxuICB9XG4gIEBlbHNlIGlmKHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICA8aW9uLXJhZGlvLWdyb3VwIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvLWdyb3VwLWxhYmVsXCI+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIEBmb3Iob3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgPGlvbi1yYWRpb1xuICAgICAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cImhpZGRlblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHkgfHwgZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cImxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgICAgIFthbGlnbm1lbnRdPVwiYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtqdXN0aWZ5XT1cImp1c3RpZnlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgPnt7IG9wdGlvbi50ZXh0IHwgdHJhbnNsYXRlIH19PC9pb24tcmFkaW8+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICB9XG4gICAgPC9pb24tcmFkaW8tZ3JvdXA+XG4gIH1cbiAgQGVsc2UgaWYodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICA8aW9uLWl0ZW0+XG4gICAgICA8aW9uLXNlbGVjdFxuICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuXCJcbiAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cImxhYmVsUGxhY2VtZW50XCJcbiAgICAgICAgW2NhbmNlbFRleHRdPVwiY2FuY2VsVGV4dCB8ICB0cmFuc2xhdGVcIlxuICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRhYmxlID8gKGxhYmVsIHwgdHJhbnNsYXRlKSA6IGxhYmVsXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2ZpbGxdPVwiZmlsbFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seSB8fCBkaXNhYmxlZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVwiXG4gICAgICAgIFtpbnRlcmZhY2VdPVwiaW50ZXJmYWNlXCI+XG4gICAgICAgIEBmb3Iob3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICB7eyB0cmFuc2xhdGFibGUgPyAob3B0aW9uLnRleHQgfCB0cmFuc2xhdGUpIDogb3B0aW9uLnRleHQgfX1cbiAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24taXRlbT5cbiAgfVxuICBAZWxzZSB7XG4gICAgPGlvbi1pdGVtPlxuICAgICAgPGlvbi1pbnB1dFxuICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuXCJcbiAgICAgICAgW2lucHV0bW9kZV09XCJpbnB1dG1vZGVcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgIFtzcGVsbGNoZWNrXT1cInNwZWxsY2hlY2tcIlxuICAgICAgICBbbGFiZWxQbGFjZW1lbnRdPVwibGFiZWxQbGFjZW1lbnRcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IHJlcXVpcmVkIDogZmFsc2VcIlxuICAgICAgICBbbWlubGVuZ3RoXT1cIm1pbmxlbmd0aCAhPT0gdW5kZWZpbmVkID8gbWlubGVuZ3RoIDogbnVsbFwiXG4gICAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoICE9PSB1bmRlZmluZWQgPyBtYXhsZW5ndGggOiBudWxsXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5ICE9PSB1bmRlZmluZWQgPyByZWFkb25seSA6IG51bGxcIlxuICAgICAgICBbbWF4XT1cIm1heCAhPT0gdW5kZWZpbmVkID8gbWF4IDogbnVsbFwiXG4gICAgICAgIFttaW5dPVwibWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiBudWxsXCJcbiAgICAgICAgW3BhdHRlcm5dPVwicGF0dGVybiAhPT0gdW5kZWZpbmVkID8gcGF0dGVybiA6IG51bGxcIlxuICAgICAgICBbc3RlcF09XCJzdGVwICE9PSB1bmRlZmluZWQgPyBzdGVwIDogbnVsbFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFtmaWxsXT1cImZpbGxcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVcIlxuICAgICAgICBbbGFiZWxdPVwibGFiZWwgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDwvaW9uLWlucHV0PlxuICAgIDwvaW9uLWl0ZW0+XG4gIH1cbiAgQGlmKCghZm9ybUdyb3VwLnByaXN0aW5lIHx8IGZvcm1Hcm91cC50b3VjaGVkKSAmJiAhZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgPGRpdiBjbGFzcz1cImVycm9yIHVrLWZsZXggdWstZmxleC10b3BcIj5cbiAgICAgIEBmb3IoaXRlbSBvZiBnZXRFcnJvcnMoKTsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHNwYW4gY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cInRpIHRpLWFsZXJ0LXRyaWFuZ2xlXCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7aXRlbS5rZXl9fSAtIHt7IHNmKChcImVycm9ycy5cIiArIGl0ZW0ubWVzc2FnZSkgfCB0cmFuc2xhdGUsIHRoaXNbaXRlbS5rZXldKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,12 +1,14 @@
1
+ import { __decorate } from "tslib";
1
2
  import { Component, ElementRef, ViewChild, Input, Output, EventEmitter, } from '@angular/core';
2
3
  import { FormGroup, ReactiveFormsModule } from '@angular/forms';
3
4
  import { NgxFormService } from '../../engine/NgxFormService';
4
5
  import { IonicModule } from '@ionic/angular';
6
+ import { Dynamic, } from '../../engine';
5
7
  import { DefaultFormReactiveOptions } from './constants';
6
8
  import * as i0 from "@angular/core";
7
9
  import * as i1 from "@ionic/angular";
8
10
  import * as i2 from "@angular/forms";
9
- export class DecafCrudFormComponent {
11
+ let DecafCrudFormComponent = class DecafCrudFormComponent {
10
12
  constructor() {
11
13
  this.updateOn = 'change';
12
14
  this.target = '_self';
@@ -15,15 +17,13 @@ export class DecafCrudFormComponent {
15
17
  this.submitEvent = new EventEmitter();
16
18
  }
17
19
  ngAfterViewInit() {
18
- NgxFormService.formAfterViewInit(this, this.formId);
20
+ NgxFormService.formAfterViewInit(this, this.rendererId);
19
21
  }
20
22
  ngOnInit() {
21
23
  this.options = Object.assign({}, DefaultFormReactiveOptions, this.options || {});
22
- if (!this.formId)
23
- this.formId = Date.now().toString();
24
24
  }
25
25
  ngOnDestroy() {
26
- NgxFormService.forOnDestroy(this, this.formId);
26
+ NgxFormService.forOnDestroy(this, this.rendererId);
27
27
  }
28
28
  /**
29
29
  * @param {Event} event
@@ -36,28 +36,24 @@ export class DecafCrudFormComponent {
36
36
  return NgxFormService.validateFields(this.formGroup);
37
37
  console.log('onSubmit');
38
38
  // fix para valores de campos radio e check
39
- const data = NgxFormService.getFormData(this.formId);
39
+ const data = NgxFormService.getFormData(this.rendererId);
40
40
  const submitEvent = {
41
41
  data: data,
42
42
  };
43
43
  if (this.action)
44
44
  return this.component.nativeElement.dispatchEvent(new CustomEvent('submit', data));
45
45
  this.submitEvent.emit(submitEvent);
46
- // self.emitEvent({
47
- // role: button?.role || FORM_BUTTON_ROLES.SUBMIT,
48
- // data,
49
- // reset: button?.reset,
50
- // operation: self.operation,
51
- // eventName: self.eventName,
52
- // event,
53
- // } as FormReactiveSubmitEvent);
54
46
  }
55
47
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafCrudFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafCrudFormComponent, isStandalone: true, selector: "decaf-crud-form", inputs: { updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", formGroup: "formGroup", formId: "formId" }, outputs: { submitEvent: "submitEvent" }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "<form #reactiveForm [id]=\"formId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"buttons-container\">\n <ion-button\n type=\"submit\">\n<!-- [shape]=\"buttons?.submit?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.submit?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.submit?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.submit?.fill || 'solid'\"-->\n<!-- [disabled]=\"buttons?.submit?.disabled || false\"-->\n<!-- expand=\"block\"-->\n<!-- [disabled]=\"disableSubmitButtonWhenInvalid ? !form.valid : false\"-->\n @if(options.buttons.submit.icon) {\n <ion-icon [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n @if(options.buttons.clear) {\n <ion-button>\n<!-- type=\"clear\"-->\n<!-- (click)=\"clear($event)\"-->\n<!-- [shape]=\"buttons?.clear?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.clear?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.clear?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.clear?.fill || 'clear'\"-->\n<!-- [disabled]=\"buttons?.clear?.disabled || false\"-->\n<!-- expand=\"block\"-->\n @if(options.buttons.clear?.icon) {\n <ion-icon [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
57
- }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafCrudFormComponent, isStandalone: true, selector: "decaf-crud-form", inputs: { updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", formGroup: "formGroup", rendererId: "rendererId" }, outputs: { submitEvent: "submitEvent" }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "<form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"buttons-container\">\n <ion-button\n type=\"submit\">\n<!-- [shape]=\"buttons?.submit?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.submit?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.submit?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.submit?.fill || 'solid'\"-->\n<!-- [disabled]=\"buttons?.submit?.disabled || false\"-->\n<!-- expand=\"block\"-->\n<!-- [disabled]=\"disableSubmitButtonWhenInvalid ? !form.valid : false\"-->\n @if(options.buttons.submit.icon) {\n <ion-icon [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n @if(options.buttons.clear) {\n <ion-button>\n<!-- type=\"clear\"-->\n<!-- (click)=\"clear($event)\"-->\n<!-- [shape]=\"buttons?.clear?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.clear?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.clear?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.clear?.fill || 'clear'\"-->\n<!-- [disabled]=\"buttons?.clear?.disabled || false\"-->\n<!-- expand=\"block\"-->\n @if(options.buttons.clear?.icon) {\n <ion-icon [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
49
+ };
50
+ DecafCrudFormComponent = __decorate([
51
+ Dynamic()
52
+ ], DecafCrudFormComponent);
53
+ export { DecafCrudFormComponent };
58
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafCrudFormComponent, decorators: [{
59
55
  type: Component,
60
- args: [{ standalone: true, selector: 'decaf-crud-form', imports: [IonicModule, ReactiveFormsModule], template: "<form #reactiveForm [id]=\"formId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"buttons-container\">\n <ion-button\n type=\"submit\">\n<!-- [shape]=\"buttons?.submit?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.submit?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.submit?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.submit?.fill || 'solid'\"-->\n<!-- [disabled]=\"buttons?.submit?.disabled || false\"-->\n<!-- expand=\"block\"-->\n<!-- [disabled]=\"disableSubmitButtonWhenInvalid ? !form.valid : false\"-->\n @if(options.buttons.submit.icon) {\n <ion-icon [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n @if(options.buttons.clear) {\n <ion-button>\n<!-- type=\"clear\"-->\n<!-- (click)=\"clear($event)\"-->\n<!-- [shape]=\"buttons?.clear?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.clear?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.clear?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.clear?.fill || 'clear'\"-->\n<!-- [disabled]=\"buttons?.clear?.disabled || false\"-->\n<!-- expand=\"block\"-->\n @if(options.buttons.clear?.icon) {\n <ion-icon [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n</form>\n" }]
56
+ args: [{ standalone: true, selector: 'decaf-crud-form', imports: [IonicModule, ReactiveFormsModule], template: "<form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div class=\"buttons-container\">\n <ion-button\n type=\"submit\">\n<!-- [shape]=\"buttons?.submit?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.submit?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.submit?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.submit?.fill || 'solid'\"-->\n<!-- [disabled]=\"buttons?.submit?.disabled || false\"-->\n<!-- expand=\"block\"-->\n<!-- [disabled]=\"disableSubmitButtonWhenInvalid ? !form.valid : false\"-->\n @if(options.buttons.submit.icon) {\n <ion-icon [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n @if(options.buttons.clear) {\n <ion-button>\n<!-- type=\"clear\"-->\n<!-- (click)=\"clear($event)\"-->\n<!-- [shape]=\"buttons?.clear?.shape || 'round'\"-->\n<!-- [color]=\"buttons?.clear?.color || 'primary'\"-->\n<!-- [size]=\"buttons?.clear?.size || 'default'\"-->\n<!-- [fill]=\"buttons?.clear?.fill || 'clear'\"-->\n<!-- [disabled]=\"buttons?.clear?.disabled || false\"-->\n<!-- expand=\"block\"-->\n @if(options.buttons.clear?.icon) {\n <ion-icon [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n</form>\n" }]
61
57
  }], propDecorators: { updateOn: [{
62
58
  type: Input
63
59
  }], component: [{
@@ -76,9 +72,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
76
72
  args: [{ required: true }]
77
73
  }], formGroup: [{
78
74
  type: Input
79
- }], formId: [{
75
+ }], rendererId: [{
80
76
  type: Input
81
77
  }], submitEvent: [{
82
78
  type: Output
83
79
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZvcm0vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZvcm0vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUVWLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFVekQsTUFBTSxPQUFPLHNCQUFzQjtJQVJuQztRQVlFLGFBQVEsR0FBb0IsUUFBUSxDQUFDO1FBTXJDLFdBQU0sR0FBbUIsT0FBTyxDQUFDO1FBR2pDLFdBQU0sR0FBNkIsT0FBTyxDQUFDO1FBWTNDLGNBQVMsR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQU16QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO0tBcUQzRDtJQW5EQyxlQUFlO1FBQ2IsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzFCLEVBQUUsRUFDRiwwQkFBMEIsRUFDMUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQ25CLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQsV0FBVztRQUNULGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsS0FBa0I7UUFDdkIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQ3ZCLE9BQU8sY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4QiwyQ0FBMkM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckQsTUFBTSxXQUFXLEdBQTRCO1lBQzNDLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLE1BQU07WUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDL0MsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUNoQyxDQUFDO1FBRUosSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsbUJBQW1CO1FBQ25CLG9EQUFvRDtRQUNwRCxVQUFVO1FBQ1YsMEJBQTBCO1FBQzFCLCtCQUErQjtRQUMvQiwrQkFBK0I7UUFDL0IsV0FBVztRQUNYLGlDQUFpQztJQUNuQyxDQUFDOytHQW5GVSxzQkFBc0I7bUdBQXRCLHNCQUFzQix3WEFNaUIsVUFBVSw2QkNsQzlELDRsREFtQ0EseUREVFksV0FBVyxtY0FBRSxtQkFBbUI7OzRGQUUvQixzQkFBc0I7a0JBUmxDLFNBQVM7aUNBQ0ksSUFBSSxZQUVOLGlCQUFpQixXQUdsQixDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQzs4QkFNM0MsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSTlELE1BQU07c0JBREwsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl6QixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEZpZWxkVXBkYXRlTW9kZSwgSFRNTEZvcm1UYXJnZXQgfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1PcHRpb25zLCBGb3JtUmVhY3RpdmVTdWJtaXRFdmVudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbnMgfSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBEZWZhdWx0Rm9ybVJlYWN0aXZlT3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnZGVjYWYtY3J1ZC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RlY2FmLWNydWQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RlY2FmLWNydWQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbSW9uaWNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBEZWNhZkNydWRGb3JtQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBGb3JtRWxlbWVudCwgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpXG4gIHVwZGF0ZU9uOiBGaWVsZFVwZGF0ZU1vZGUgPSAnY2hhbmdlJztcblxuICBAVmlld0NoaWxkKCdyZWFjdGl2ZUZvcm0nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKVxuICB0YXJnZXQ6IEhUTUxGb3JtVGFyZ2V0ID0gJ19zZWxmJztcblxuICBASW5wdXQoKVxuICBtZXRob2Q6ICdnZXQnIHwgJ3Bvc3QnIHwgJ2V2ZW50JyA9ICdldmVudCc7XG5cbiAgQElucHV0KClcbiAgb3B0aW9ucyE6IENydWRGb3JtT3B0aW9ucztcblxuICBASW5wdXQoKVxuICBhY3Rpb24/OiBzdHJpbmc7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgQElucHV0KClcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBASW5wdXQoKVxuICBmb3JtSWQhOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIHN1Ym1pdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtUmVhY3RpdmVTdWJtaXRFdmVudD4oKTtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgTmd4Rm9ybVNlcnZpY2UuZm9ybUFmdGVyVmlld0luaXQodGhpcywgdGhpcy5mb3JtSWQpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgRGVmYXVsdEZvcm1SZWFjdGl2ZU9wdGlvbnMsXG4gICAgICB0aGlzLm9wdGlvbnMgfHwge30sXG4gICAgKTtcbiAgICBpZiAoIXRoaXMuZm9ybUlkKSB0aGlzLmZvcm1JZCA9IERhdGUubm93KCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIE5neEZvcm1TZXJ2aWNlLmZvck9uRGVzdHJveSh0aGlzLCB0aGlzLmZvcm1JZCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtICB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBzdWJtaXQoZXZlbnQ6IFN1Ym1pdEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghdGhpcy5mb3JtR3JvdXAudmFsaWQpXG4gICAgICByZXR1cm4gTmd4Rm9ybVNlcnZpY2UudmFsaWRhdGVGaWVsZHModGhpcy5mb3JtR3JvdXApO1xuICAgIGNvbnNvbGUubG9nKCdvblN1Ym1pdCcpO1xuXG4gICAgLy8gZml4IHBhcmEgdmFsb3JlcyBkZSBjYW1wb3MgcmFkaW8gZSBjaGVja1xuICAgIGNvbnN0IGRhdGEgPSBOZ3hGb3JtU2VydmljZS5nZXRGb3JtRGF0YSh0aGlzLmZvcm1JZCk7XG5cbiAgICBjb25zdCBzdWJtaXRFdmVudDogRm9ybVJlYWN0aXZlU3VibWl0RXZlbnQgPSB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5hY3Rpb24pXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3N1Ym1pdCcsIGRhdGEpLFxuICAgICAgKTtcblxuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdChzdWJtaXRFdmVudCk7XG4gICAgLy8gc2VsZi5lbWl0RXZlbnQoe1xuICAgIC8vICAgcm9sZTogYnV0dG9uPy5yb2xlIHx8IEZPUk1fQlVUVE9OX1JPTEVTLlNVQk1JVCxcbiAgICAvLyAgIGRhdGEsXG4gICAgLy8gICByZXNldDogYnV0dG9uPy5yZXNldCxcbiAgICAvLyAgIG9wZXJhdGlvbjogc2VsZi5vcGVyYXRpb24sXG4gICAgLy8gICBldmVudE5hbWU6IHNlbGYuZXZlbnROYW1lLFxuICAgIC8vICAgZXZlbnQsXG4gICAgLy8gfSBhcyBGb3JtUmVhY3RpdmVTdWJtaXRFdmVudCk7XG4gIH1cbn1cbiIsIjxmb3JtICNyZWFjdGl2ZUZvcm0gW2lkXT1cImZvcm1JZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKHN1Ym1pdCk9XCJzdWJtaXQoJGV2ZW50KVwiIFt0YXJnZXRdPVwidGFyZ2V0XCI+XG4gIDxuZy1jb250ZW50ICNmb3JtQ29udGVudD48L25nLWNvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgIDxpb24tYnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCI+XG48IS0tICAgICAgW3NoYXBlXT1cImJ1dHRvbnM/LnN1Ym1pdD8uc2hhcGUgfHwgJ3JvdW5kJ1wiLS0+XG48IS0tICAgICAgW2NvbG9yXT1cImJ1dHRvbnM/LnN1Ym1pdD8uY29sb3IgfHwgJ3ByaW1hcnknXCItLT5cbjwhLS0gICAgICBbc2l6ZV09XCJidXR0b25zPy5zdWJtaXQ/LnNpemUgfHwgJ2RlZmF1bHQnXCItLT5cbjwhLS0gICAgICBbZmlsbF09XCJidXR0b25zPy5zdWJtaXQ/LmZpbGwgfHwgJ3NvbGlkJ1wiLS0+XG48IS0tICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbnM/LnN1Ym1pdD8uZGlzYWJsZWQgfHwgZmFsc2VcIi0tPlxuPCEtLSAgICAgIGV4cGFuZD1cImJsb2NrXCItLT5cbjwhLS0gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVN1Ym1pdEJ1dHRvbldoZW5JbnZhbGlkID8gIWZvcm0udmFsaWQgOiBmYWxzZVwiLS0+XG4gICAgICBAaWYob3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uKSB7XG4gICAgICAgIDxpb24taWNvbiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgIH1cbiAgICAgIHt7b3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICA8L2lvbi1idXR0b24+XG4gICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcikge1xuICAgICAgPGlvbi1idXR0b24+XG48IS0tICAgICAgICB0eXBlPVwiY2xlYXJcIi0tPlxuPCEtLSAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCItLT5cbjwhLS0gICAgICAgICAgICBbc2hhcGVdPVwiYnV0dG9ucz8uY2xlYXI/LnNoYXBlIHx8ICdyb3VuZCdcIi0tPlxuPCEtLSAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b25zPy5jbGVhcj8uY29sb3IgfHwgJ3ByaW1hcnknXCItLT5cbjwhLS0gICAgICAgICAgICBbc2l6ZV09XCJidXR0b25zPy5jbGVhcj8uc2l6ZSB8fCAnZGVmYXVsdCdcIi0tPlxuPCEtLSAgICAgICAgICAgIFtmaWxsXT1cImJ1dHRvbnM/LmNsZWFyPy5maWxsIHx8ICdjbGVhcidcIi0tPlxuPCEtLSAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25zPy5jbGVhcj8uZGlzYWJsZWQgfHwgZmFsc2VcIi0tPlxuPCEtLSAgICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCItLT5cbiAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvbikge1xuICAgICAgICAgIDxpb24taWNvbiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgfVxuICAgICAgICB7e29wdGlvbnMuYnV0dG9ucy5jbGVhcj8udGV4dH19XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZvcm0vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1jcnVkLWZvcm0vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFFVixTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUNMLE9BQU8sR0FJUixNQUFNLGNBQWMsQ0FBQztBQUd0QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFXbEQsSUFBTSxzQkFBc0IsR0FBNUIsTUFBTSxzQkFBc0I7SUFBNUI7UUFJTCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQU1yQyxXQUFNLEdBQW1CLE9BQU8sQ0FBQztRQUdqQyxXQUFNLEdBQTZCLE9BQU8sQ0FBQztRQVkzQyxjQUFTLEdBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFNekMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztLQTRDM0Q7SUExQ0MsZUFBZTtRQUNiLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUMxQixFQUFFLEVBQ0YsMEJBQTBCLEVBQzFCLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQWtCO1FBQ3ZCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNqQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztZQUN2QixPQUFPLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEIsMkNBQTJDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELE1BQU0sV0FBVyxHQUE0QjtZQUMzQyxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNO1lBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQy9DLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FDaEMsQ0FBQztRQUVKLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7K0dBMUVVLHNCQUFzQjttR0FBdEIsc0JBQXNCLGdZQU1pQixVQUFVLDZCQ3hDOUQsZ21EQW1DQSx5RERIWSxXQUFXLG1jQUFFLG1CQUFtQjs7QUFFL0Isc0JBQXNCO0lBVGxDLE9BQU8sRUFBRTtHQVNHLHNCQUFzQixDQTJFbEM7OzRGQTNFWSxzQkFBc0I7a0JBUmxDLFNBQVM7aUNBQ0ksSUFBSSxZQUVOLGlCQUFpQixXQUdsQixDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQzs4QkFNM0MsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSTlELE1BQU07c0JBREwsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl6QixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7XG4gIER5bmFtaWMsXG4gIEZpZWxkVXBkYXRlTW9kZSxcbiAgSFRNTEZvcm1UYXJnZXQsXG4gIFJlbmRlcmVkTW9kZWwsXG59IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDcnVkRm9ybU9wdGlvbnMsIEZvcm1SZWFjdGl2ZVN1Ym1pdEV2ZW50IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdkZWNhZi1jcnVkLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGVjYWYtY3J1ZC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtJb25pY01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIERlY2FmQ3J1ZEZvcm1Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEZvcm1FbGVtZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVkTW9kZWxcbntcbiAgQElucHV0KClcbiAgdXBkYXRlT246IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnO1xuXG4gIEBWaWV3Q2hpbGQoJ3JlYWN0aXZlRm9ybScsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHRhcmdldDogSFRNTEZvcm1UYXJnZXQgPSAnX3NlbGYnO1xuXG4gIEBJbnB1dCgpXG4gIG1ldGhvZDogJ2dldCcgfCAncG9zdCcgfCAnZXZlbnQnID0gJ2V2ZW50JztcblxuICBASW5wdXQoKVxuICBvcHRpb25zITogQ3J1ZEZvcm1PcHRpb25zO1xuXG4gIEBJbnB1dCgpXG4gIGFjdGlvbj86IHN0cmluZztcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBvcGVyYXRpb24hOiBDcnVkT3BlcmF0aW9ucztcblxuICBASW5wdXQoKVxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQhOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIHN1Ym1pdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtUmVhY3RpdmVTdWJtaXRFdmVudD4oKTtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgTmd4Rm9ybVNlcnZpY2UuZm9ybUFmdGVyVmlld0luaXQodGhpcywgdGhpcy5yZW5kZXJlcklkKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBOZ3hGb3JtU2VydmljZS5mb3JPbkRlc3Ryb3kodGhpcywgdGhpcy5yZW5kZXJlcklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC52YWxpZClcbiAgICAgIHJldHVybiBOZ3hGb3JtU2VydmljZS52YWxpZGF0ZUZpZWxkcyh0aGlzLmZvcm1Hcm91cCk7XG4gICAgY29uc29sZS5sb2coJ29uU3VibWl0Jyk7XG5cbiAgICAvLyBmaXggcGFyYSB2YWxvcmVzIGRlIGNhbXBvcyByYWRpbyBlIGNoZWNrXG4gICAgY29uc3QgZGF0YSA9IE5neEZvcm1TZXJ2aWNlLmdldEZvcm1EYXRhKHRoaXMucmVuZGVyZXJJZCk7XG5cbiAgICBjb25zdCBzdWJtaXRFdmVudDogRm9ybVJlYWN0aXZlU3VibWl0RXZlbnQgPSB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5hY3Rpb24pXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3N1Ym1pdCcsIGRhdGEpLFxuICAgICAgKTtcblxuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdChzdWJtaXRFdmVudCk7XG4gIH1cbn1cbiIsIjxmb3JtICNyZWFjdGl2ZUZvcm0gW2lkXT1cInJlbmRlcmVySWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChzdWJtaXQpPVwic3VibWl0KCRldmVudClcIiBbdGFyZ2V0XT1cInRhcmdldFwiPlxuICA8bmctY29udGVudCAjZm9ybUNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICA8aW9uLWJ1dHRvblxuICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuPCEtLSAgICAgIFtzaGFwZV09XCJidXR0b25zPy5zdWJtaXQ/LnNoYXBlIHx8ICdyb3VuZCdcIi0tPlxuPCEtLSAgICAgIFtjb2xvcl09XCJidXR0b25zPy5zdWJtaXQ/LmNvbG9yIHx8ICdwcmltYXJ5J1wiLS0+XG48IS0tICAgICAgW3NpemVdPVwiYnV0dG9ucz8uc3VibWl0Py5zaXplIHx8ICdkZWZhdWx0J1wiLS0+XG48IS0tICAgICAgW2ZpbGxdPVwiYnV0dG9ucz8uc3VibWl0Py5maWxsIHx8ICdzb2xpZCdcIi0tPlxuPCEtLSAgICAgIFtkaXNhYmxlZF09XCJidXR0b25zPy5zdWJtaXQ/LmRpc2FibGVkIHx8IGZhbHNlXCItLT5cbjwhLS0gICAgICBleHBhbmQ9XCJibG9ja1wiLS0+XG48IS0tICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTdWJtaXRCdXR0b25XaGVuSW52YWxpZCA/ICFmb3JtLnZhbGlkIDogZmFsc2VcIi0tPlxuICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICA8aW9uLWljb24gW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICB9XG4gICAgICB7e29wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgPC9pb24tYnV0dG9uPlxuICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXIpIHtcbiAgICAgIDxpb24tYnV0dG9uPlxuPCEtLSAgICAgICAgdHlwZT1cImNsZWFyXCItLT5cbjwhLS0gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiLS0+XG48IS0tICAgICAgICAgICAgW3NoYXBlXT1cImJ1dHRvbnM/LmNsZWFyPy5zaGFwZSB8fCAncm91bmQnXCItLT5cbjwhLS0gICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9ucz8uY2xlYXI/LmNvbG9yIHx8ICdwcmltYXJ5J1wiLS0+XG48IS0tICAgICAgICAgICAgW3NpemVdPVwiYnV0dG9ucz8uY2xlYXI/LnNpemUgfHwgJ2RlZmF1bHQnXCItLT5cbjwhLS0gICAgICAgICAgICBbZmlsbF09XCJidXR0b25zPy5jbGVhcj8uZmlsbCB8fCAnY2xlYXInXCItLT5cbjwhLS0gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9ucz8uY2xlYXI/LmRpc2FibGVkIHx8IGZhbHNlXCItLT5cbjwhLS0gICAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiLS0+XG4gICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb24pIHtcbiAgICAgICAgICA8aW9uLWljb24gW3Nsb3RdPVwib3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uU2xvdFwiIFtuYW1lXT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgIH1cbiAgICAgICAge3tvcHRpb25zLmJ1dHRvbnMuY2xlYXI/LnRleHR9fVxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
@@ -1,46 +1,47 @@
1
- import { Component, Input, ViewContainerRef, } from '@angular/core';
2
- import { Model } from '@decaf-ts/decorator-validation';
3
- import { IonSkeletonText } from '@ionic/angular/standalone';
1
+ import { Component, Injector, Input, TemplateRef, ViewChild, ViewContainerRef, } from '@angular/core';
2
+ import { Model, sf } from '@decaf-ts/decorator-validation';
4
3
  import { NgComponentOutlet } from '@angular/common';
4
+ import { AngularEngineKeys, } from '../../engine';
5
5
  import * as i0 from "@angular/core";
6
6
  export class DecafModelRendererComponent {
7
- //
8
- // @ViewChild('componentElementContainer', {
9
- // static: true,
10
- // read: ViewContainerRef,
11
- // })
12
- // componentElementContainer!: ViewContainerRef;
13
- constructor(vcr) {
7
+ constructor(vcr, injector) {
14
8
  this.vcr = vcr;
9
+ this.injector = injector;
10
+ this.JSON = JSON;
15
11
  }
16
- ngOnInit() {
17
- this.model =
18
- typeof this.model === 'string'
19
- ? Model.build({}, JSON.parse(this.model))
20
- : this.model;
21
- // this.output = RenderingEngine.render(this.model as unknown as Model);
22
- // this.component = NgxRenderingEngine.components(this.output.tag);
23
- // this.props = this.output.props;
24
- // this.content = this.output.children?.map((child) => {
25
- // return this.vcr.createEmbeddedView();
26
- // });
12
+ refresh(model) {
13
+ model =
14
+ typeof model === 'string'
15
+ ? Model.build({}, JSON.parse(model))
16
+ : model;
17
+ this.output = model.render(this.globals || {}, this.vcr, this.injector, this.inner);
18
+ this.rendererId = sf(AngularEngineKeys.RENDERED_ID, this.output.inputs['rendererId']);
27
19
  }
28
20
  ngOnChanges(changes) {
29
21
  if (changes['model']) {
30
22
  const { currentValue, previousValue, firstChange } = changes['model'];
23
+ this.refresh(currentValue);
31
24
  }
32
- if (changes['details']) {
33
- const { currentValue, previousValue, firstChange } = changes['details'];
34
- }
25
+ // this.refresh();
26
+ }
27
+ ngOnDestroy() {
28
+ this.output = undefined;
35
29
  }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafModelRendererComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafModelRendererComponent, isStandalone: true, selector: "decaf-model-renderer", inputs: { model: "model" }, usesOnChanges: true, ngImport: i0, template: "<!--<div #loadingElement>-->\n<!-- <ion-skeleton-text [animated]=\"true\" style=\"width: 100%;\"></ion-skeleton-text>-->\n<!--</div>-->\n@if (output?.children?.length){\n @for (item of output.children; track item.props.name){\n <ng-template>{{item.props.name}}</ng-template>\n }\n}\n<ng-container *ngComponentOutlet=\"component;\n inputs: props;\n content: content;\">\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafModelRendererComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DecafModelRendererComponent, isStandalone: true, selector: "decaf-model-renderer", inputs: { model: "model", globals: "globals", rendererId: "rendererId" }, viewQueries: [{ propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: (TemplateRef), static: true }], usesOnChanges: true, ngImport: i0, template: "<div #renderer>\n <ng-container #outer *ngComponentOutlet=\"output?.component;\n inputs: output?.inputs;\n content: output?.content;\">\n </ng-container>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child.inputs.name) {\n <ng-container *ngComponentOutlet=\"child.component;\n injector: child.injector;\n inputs: child.inputs\n content: child.content\">\n </ng-container>\n }\n </div>\n </ng-template>\n</div>\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
38
32
  }
39
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecafModelRendererComponent, decorators: [{
40
34
  type: Component,
41
- args: [{ standalone: true, imports: [IonSkeletonText, NgComponentOutlet], selector: 'decaf-model-renderer', template: "<!--<div #loadingElement>-->\n<!-- <ion-skeleton-text [animated]=\"true\" style=\"width: 100%;\"></ion-skeleton-text>-->\n<!--</div>-->\n@if (output?.children?.length){\n @for (item of output.children; track item.props.name){\n <ng-template>{{item.props.name}}</ng-template>\n }\n}\n<ng-container *ngComponentOutlet=\"component;\n inputs: props;\n content: content;\">\n</ng-container>\n" }]
42
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { model: [{
35
+ args: [{ standalone: true, imports: [NgComponentOutlet], selector: 'decaf-model-renderer', template: "<div #renderer>\n <ng-container #outer *ngComponentOutlet=\"output?.component;\n inputs: output?.inputs;\n content: output?.content;\">\n </ng-container>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child.inputs.name) {\n <ng-container *ngComponentOutlet=\"child.component;\n injector: child.injector;\n inputs: child.inputs\n content: child.content\">\n </ng-container>\n }\n </div>\n </ng-template>\n</div>\n\n\n" }]
36
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.Injector }], propDecorators: { model: [{
43
37
  type: Input,
44
38
  args: [{ required: true }]
39
+ }], globals: [{
40
+ type: Input
41
+ }], inner: [{
42
+ type: ViewChild,
43
+ args: ['inner', { read: (TemplateRef), static: true }]
44
+ }], rendererId: [{
45
+ type: Input
45
46
  }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RlY2FmLW1vZGVsLXJlbmRlcmVyL2RlY2FmLW1vZGVsLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1tb2RlbC1yZW5kZXJlci9kZWNhZi1tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFJTCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFVcEQsTUFBTSxPQUFPLDJCQUEyQjtJQWF0QyxFQUFFO0lBQ0YsNENBQTRDO0lBQzVDLGtCQUFrQjtJQUNsQiw0QkFBNEI7SUFDNUIsS0FBSztJQUNMLGdEQUFnRDtJQUVoRCxZQUFvQixHQUFxQjtRQUFyQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtJQUFHLENBQUM7SUFFN0MsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLO1lBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVE7Z0JBQzVCLENBQUMsQ0FBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBTztnQkFDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDakIsd0VBQXdFO1FBQ3hFLG1FQUFtRTtRQUNuRSxrQ0FBa0M7UUFDbEMsd0RBQXdEO1FBQ3hELDBDQUEwQztRQUMxQyxNQUFNO0lBQ1IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7K0dBMUNVLDJCQUEyQjttR0FBM0IsMkJBQTJCLGlJQ3RCeEMsNmNBWUEsMERESTZCLGlCQUFpQjs7NEZBTWpDLDJCQUEyQjtrQkFSdkMsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsWUFFbkMsc0JBQXNCO3FGQVFoQyxLQUFLO3NCQURKLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmllbGREZWZpbml0aW9uIH0gZnJvbSAnQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgSW9uU2tlbGV0b25UZXh0IH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBBbmd1bGFyRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtJb25Ta2VsZXRvblRleHQsIE5nQ29tcG9uZW50T3V0bGV0XSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdkZWNhZi1tb2RlbC1yZW5kZXJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWNhZi1tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kZWNhZi1tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIERlY2FmTW9kZWxSZW5kZXJlckNvbXBvbmVudDxNIGV4dGVuZHMgTW9kZWw+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgbW9kZWwhOiBNIHwgc3RyaW5nO1xuXG4gIGNvbXBvbmVudCE6IHVua25vd247XG5cbiAgcHJvcHMhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb250ZW50ITogeyBpZDogc3RyaW5nIH1bXVtdO1xuXG4gIG91dHB1dCE6IEZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPjtcbiAgLy9cbiAgLy8gQFZpZXdDaGlsZCgnY29tcG9uZW50RWxlbWVudENvbnRhaW5lcicsIHtcbiAgLy8gICBzdGF0aWM6IHRydWUsXG4gIC8vICAgcmVhZDogVmlld0NvbnRhaW5lclJlZixcbiAgLy8gfSlcbiAgLy8gY29tcG9uZW50RWxlbWVudENvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9XG4gICAgICB0eXBlb2YgdGhpcy5tb2RlbCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyAoTW9kZWwuYnVpbGQoe30sIEpTT04ucGFyc2UodGhpcy5tb2RlbCkpIGFzIE0pXG4gICAgICAgIDogdGhpcy5tb2RlbDtcbiAgICAvLyB0aGlzLm91dHB1dCA9IFJlbmRlcmluZ0VuZ2luZS5yZW5kZXIodGhpcy5tb2RlbCBhcyB1bmtub3duIGFzIE1vZGVsKTtcbiAgICAvLyB0aGlzLmNvbXBvbmVudCA9IE5neFJlbmRlcmluZ0VuZ2luZS5jb21wb25lbnRzKHRoaXMub3V0cHV0LnRhZyk7XG4gICAgLy8gdGhpcy5wcm9wcyA9IHRoaXMub3V0cHV0LnByb3BzO1xuICAgIC8vIHRoaXMuY29udGVudCA9IHRoaXMub3V0cHV0LmNoaWxkcmVuPy5tYXAoKGNoaWxkKSA9PiB7XG4gICAgLy8gICByZXR1cm4gdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KCk7XG4gICAgLy8gfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ21vZGVsJ10pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBmaXJzdENoYW5nZSB9ID0gY2hhbmdlc1snbW9kZWwnXTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2RldGFpbHMnXSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUsIGZpcnN0Q2hhbmdlIH0gPSBjaGFuZ2VzWydkZXRhaWxzJ107XG4gICAgfVxuICB9XG4gIC8vIC8vXG4gIC8vIG5nT25EZXN0cm95KCk6IHZvaWQge31cbn1cbiIsIjwhLS08ZGl2ICNsb2FkaW5nRWxlbWVudD4tLT5cbjwhLS0gIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+PC9pb24tc2tlbGV0b24tdGV4dD4tLT5cbjwhLS08L2Rpdj4tLT5cbkBpZiAob3V0cHV0Py5jaGlsZHJlbj8ubGVuZ3RoKXtcbiAgQGZvciAoaXRlbSBvZiBvdXRwdXQuY2hpbGRyZW47IHRyYWNrIGl0ZW0ucHJvcHMubmFtZSl7XG4gICAgPG5nLXRlbXBsYXRlPnt7aXRlbS5wcm9wcy5uYW1lfX08L25nLXRlbXBsYXRlPlxuICB9XG59XG48bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cImNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IHByb3BzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQ7XCI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjYWYtbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RlY2FmLW1vZGVsLXJlbmRlcmVyL2RlY2FmLW1vZGVsLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kZWNhZi1tb2RlbC1yZW5kZXJlci9kZWNhZi1tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsaUJBQWlCLEdBRWxCLE1BQU0sY0FBYyxDQUFDOztBQVV0QixNQUFNLE9BQU8sMkJBQTJCO0lBaUJ0QyxZQUNVLEdBQXFCLEVBQ3JCLFFBQWtCO1FBRGxCLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFrQ1QsU0FBSSxHQUFHLElBQUksQ0FBQztJQWpDNUIsQ0FBQztJQUVJLE9BQU8sQ0FBQyxLQUFpQjtRQUMvQixLQUFLO1lBQ0gsT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFDdkIsQ0FBQyxDQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQU87Z0JBQzNDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFWixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQ3hCLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUNsQixJQUFJLENBQUMsR0FBRyxFQUNSLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQ2xCLGlCQUFpQixDQUFDLFdBQVcsRUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUE4QixDQUFDLFlBQVksQ0FBVyxDQUNwRSxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxrQkFBa0I7SUFDcEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDOytHQW5EVSwyQkFBMkI7bUdBQTNCLDJCQUEyQixxT0FTVixDQUFBLFdBQWdCLENBQUEsZ0VDbkM5QyxvcUJBbUJBLDBERENZLGlCQUFpQjs7NEZBTWhCLDJCQUEyQjtrQkFSdkMsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxpQkFBaUIsQ0FBQyxZQUVsQixzQkFBc0I7NEdBUWhDLEtBQUs7c0JBREosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSXpCLE9BQU87c0JBRE4sS0FBSztnQkFJTixLQUFLO3NCQURKLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUEsV0FBZ0IsQ0FBQSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTTVELFVBQVU7c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kZWwsIHNmIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFuZ3VsYXJEeW5hbWljT3V0cHV0LFxuICBBbmd1bGFyRW5naW5lS2V5cyxcbiAgUmVuZGVyZWRNb2RlbCxcbn0gZnJvbSAnLi4vLi4vZW5naW5lJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0NvbXBvbmVudE91dGxldF0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnZGVjYWYtbW9kZWwtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVjYWYtbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGVjYWYtbW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBEZWNhZk1vZGVsUmVuZGVyZXJDb21wb25lbnQ8TSBleHRlbmRzIE1vZGVsPlxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgUmVuZGVyZWRNb2RlbFxue1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBtb2RlbCE6IE0gfCBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgZ2xvYmFscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIEBWaWV3Q2hpbGQoJ2lubmVyJywgeyByZWFkOiBUZW1wbGF0ZVJlZjxhbnk+LCBzdGF0aWM6IHRydWUgfSlcbiAgaW5uZXI/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIG91dHB1dD86IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICkge31cblxuICBwcml2YXRlIHJlZnJlc2gobW9kZWw6IHN0cmluZyB8IE0pIHtcbiAgICBtb2RlbCA9XG4gICAgICB0eXBlb2YgbW9kZWwgPT09ICdzdHJpbmcnXG4gICAgICAgID8gKE1vZGVsLmJ1aWxkKHt9LCBKU09OLnBhcnNlKG1vZGVsKSkgYXMgTSlcbiAgICAgICAgOiBtb2RlbDtcblxuICAgIHRoaXMub3V0cHV0ID0gbW9kZWwucmVuZGVyPEFuZ3VsYXJEeW5hbWljT3V0cHV0PihcbiAgICAgIHRoaXMuZ2xvYmFscyB8fCB7fSxcbiAgICAgIHRoaXMudmNyLFxuICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgIHRoaXMuaW5uZXIsXG4gICAgKTtcbiAgICB0aGlzLnJlbmRlcmVySWQgPSBzZihcbiAgICAgIEFuZ3VsYXJFbmdpbmVLZXlzLlJFTkRFUkVEX0lELFxuICAgICAgKHRoaXMub3V0cHV0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVsncmVuZGVyZXJJZCddIGFzIHN0cmluZyxcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydtb2RlbCddKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgZmlyc3RDaGFuZ2UgfSA9IGNoYW5nZXNbJ21vZGVsJ107XG4gICAgICB0aGlzLnJlZnJlc2goY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub3V0cHV0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEpTT04gPSBKU09OO1xufVxuIiwiPGRpdiAjcmVuZGVyZXI+XG4gIDxuZy1jb250YWluZXIgI291dGVyICpuZ0NvbXBvbmVudE91dGxldD1cIm91dHB1dD8uY29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0czogb3V0cHV0Py5pbnB1dHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogb3V0cHV0Py5jb250ZW50O1wiPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNpbm5lcj5cbiAgICA8ZGl2IFtpZF09XCJyZW5kZXJlcklkIHx8IG51bGxcIj5cbiAgICAgIEBmb3IgKGNoaWxkIG9mIG91dHB1dD8uY2hpbGRyZW47IHRyYWNrIGNoaWxkLmlucHV0cy5uYW1lKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiY2hpbGQuY29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5qZWN0b3I6IGNoaWxkLmluamVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzOiBjaGlsZC5pbnB1dHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNoaWxkLmNvbnRlbnRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuXG4iXX0=
File without changes
File without changes