special-forms 16.2.1 → 17.0.0

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 (86) hide show
  1. package/esm2022/lib/components/index.mjs +13 -13
  2. package/esm2022/lib/components/special-autocomplete/special-autocomplete.component.mjs +75 -75
  3. package/esm2022/lib/components/special-autocomplete/special-autocomplete.interface.mjs +2 -2
  4. package/esm2022/lib/components/special-checkbox/special-checkbox.component.mjs +39 -36
  5. package/esm2022/lib/components/special-checkbox/special-checkbox.interface.mjs +3 -2
  6. package/esm2022/lib/components/special-datepicker/special-datepicker.component.mjs +43 -40
  7. package/esm2022/lib/components/special-datepicker/special-datepicker.interface.mjs +3 -2
  8. package/esm2022/lib/components/special-dropdown/special-dropdown.component.mjs +48 -47
  9. package/esm2022/lib/components/special-dropdown/special-dropdown.interface.mjs +3 -2
  10. package/esm2022/lib/components/special-form/special-form.component.mjs +99 -99
  11. package/esm2022/lib/components/special-form/special-form.module.mjs +78 -78
  12. package/esm2022/lib/components/special-input/special-input.component.mjs +56 -56
  13. package/esm2022/lib/components/special-input/special-input.interface.mjs +2 -2
  14. package/esm2022/lib/components/special-label/special-label.component.mjs +27 -27
  15. package/esm2022/lib/components/special-label/special-label.interface.mjs +2 -2
  16. package/esm2022/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.mjs +97 -97
  17. package/esm2022/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.interface.mjs +2 -2
  18. package/esm2022/lib/components/special-richtext/special-richtext.component.mjs +54 -45
  19. package/esm2022/lib/components/special-richtext/special-richtext.interface.mjs +3 -2
  20. package/esm2022/lib/components/special-text-area/special-text-area.component.mjs +44 -44
  21. package/esm2022/lib/components/special-text-area/special-text-area.interface.mjs +2 -2
  22. package/esm2022/lib/components/special-upload/special-upload.component.mjs +84 -84
  23. package/esm2022/lib/components/special-upload/special-upload.interface.mjs +2 -2
  24. package/esm2022/lib/core/aux-data/control-types.enum.mjs +17 -17
  25. package/esm2022/lib/core/aux-data/input-types.mjs +15 -15
  26. package/esm2022/lib/core/forms/special-forms.mjs +240 -260
  27. package/esm2022/lib/core/interfaces/field-basics.interfaces.mjs +1 -1
  28. package/esm2022/lib/core/interfaces/form.interfaces.mjs +2 -2
  29. package/esm2022/lib/core/interfaces/special-control.interface.mjs +2 -2
  30. package/esm2022/lib/core/masks/currency.mask.mjs +10 -10
  31. package/esm2022/lib/core/masks/index.mjs +2 -2
  32. package/esm2022/lib/core/masks/number.mask.mjs +2 -2
  33. package/esm2022/lib/core/pipes/controls-list-pipe/controls-list.pipe.mjs +17 -17
  34. package/esm2022/lib/core/pipes/error-message-pipe/error.pipe.mjs +22 -22
  35. package/esm2022/lib/core/pipes/index.mjs +3 -3
  36. package/esm2022/lib/core/pipes/text-by-function/text-by-function.pipe.mjs +21 -21
  37. package/esm2022/lib/core/services/error-state-matcher/error-matcher.mjs +12 -12
  38. package/esm2022/lib/core/services/index.mjs +3 -3
  39. package/esm2022/lib/core/services/special-form-builder/special-form-builder.service.mjs +156 -156
  40. package/esm2022/public-api.mjs +12 -12
  41. package/esm2022/special-forms.mjs +4 -4
  42. package/fesm2022/special-forms.mjs +1018 -1024
  43. package/fesm2022/special-forms.mjs.map +1 -1
  44. package/index.d.ts +5 -5
  45. package/lib/components/index.d.ts +23 -23
  46. package/lib/components/special-autocomplete/special-autocomplete.component.d.ts +19 -19
  47. package/lib/components/special-autocomplete/special-autocomplete.interface.d.ts +19 -18
  48. package/lib/components/special-checkbox/special-checkbox.component.d.ts +12 -11
  49. package/lib/components/special-checkbox/special-checkbox.interface.d.ts +13 -12
  50. package/lib/components/special-datepicker/special-datepicker.component.d.ts +13 -12
  51. package/lib/components/special-datepicker/special-datepicker.interface.d.ts +12 -11
  52. package/lib/components/special-dropdown/special-dropdown.component.d.ts +11 -11
  53. package/lib/components/special-dropdown/special-dropdown.interface.d.ts +17 -16
  54. package/lib/components/special-form/special-form.component.d.ts +31 -31
  55. package/lib/components/special-form/special-form.module.d.ts +20 -20
  56. package/lib/components/special-input/special-input.component.d.ts +15 -15
  57. package/lib/components/special-input/special-input.interface.d.ts +17 -16
  58. package/lib/components/special-label/special-label.component.d.ts +13 -13
  59. package/lib/components/special-label/special-label.interface.d.ts +13 -12
  60. package/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.d.ts +22 -22
  61. package/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.interface.d.ts +19 -18
  62. package/lib/components/special-richtext/special-richtext.component.d.ts +17 -17
  63. package/lib/components/special-richtext/special-richtext.interface.d.ts +10 -9
  64. package/lib/components/special-text-area/special-text-area.component.d.ts +13 -13
  65. package/lib/components/special-text-area/special-text-area.interface.d.ts +8 -7
  66. package/lib/components/special-upload/special-upload.component.d.ts +21 -21
  67. package/lib/components/special-upload/special-upload.interface.d.ts +12 -11
  68. package/lib/core/aux-data/control-types.enum.d.ts +16 -16
  69. package/lib/core/aux-data/input-types.d.ts +2 -2
  70. package/lib/core/forms/special-forms.d.ts +108 -123
  71. package/lib/core/interfaces/field-basics.interfaces.d.ts +22 -22
  72. package/lib/core/interfaces/form.interfaces.d.ts +58 -55
  73. package/lib/core/interfaces/special-control.interface.d.ts +4 -4
  74. package/lib/core/masks/currency.mask.d.ts +1 -1
  75. package/lib/core/masks/index.d.ts +2 -2
  76. package/lib/core/masks/number.mask.d.ts +1 -1
  77. package/lib/core/pipes/controls-list-pipe/controls-list.pipe.d.ts +11 -11
  78. package/lib/core/pipes/error-message-pipe/error.pipe.d.ts +12 -12
  79. package/lib/core/pipes/index.d.ts +3 -3
  80. package/lib/core/pipes/text-by-function/text-by-function.pipe.d.ts +7 -7
  81. package/lib/core/services/error-state-matcher/error-matcher.d.ts +8 -8
  82. package/lib/core/services/index.d.ts +3 -3
  83. package/lib/core/services/special-form-builder/special-form-builder.service.d.ts +25 -25
  84. package/lib/styles/tailwind-final.scss +31 -0
  85. package/package.json +9 -9
  86. package/public-api.d.ts +9 -9
@@ -1,47 +1,48 @@
1
- import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { MatSelectModule } from '@angular/material/select';
4
- import { ReactiveFormsModule } from '@angular/forms';
5
- import { MatIconModule } from '@angular/material/icon';
6
- import { MatButtonModule } from '@angular/material/button';
7
- import { ErrorMessagePipe, TextByFunctionPipe, } from '../../core/pipes';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "@angular/material/form-field";
11
- import * as i3 from "@angular/material/select";
12
- import * as i4 from "@angular/material/core";
13
- import * as i5 from "@angular/forms";
14
- import * as i6 from "@angular/material/icon";
15
- import * as i7 from "@angular/material/button";
16
- export class SpecialDropdownComponent {
17
- get settings() {
18
- return this.control.settings;
19
- }
20
- iconClick(event) {
21
- if (this.settings.iconAction) {
22
- this.settings.iconAction(this.control.value);
23
- event.stopPropagation();
24
- }
25
- }
26
- optionSelected(value) {
27
- if (this.settings.onSelect)
28
- this.settings.onSelect(value);
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SpecialDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SpecialDropdownComponent, isStandalone: true, selector: "sp-dropdown", inputs: { control: "control" }, ngImport: i0, template: "<mat-form-field\r\n *ngIf=\"control && !control.hidden\"\r\n [id]=\"control.elementId\"\r\n class=\"special-dropdown w-full mb-3 {{ control.styleClasses }}\"\r\n [appearance]=\"control.label ? 'outline' : 'fill'\"\r\n>\r\n <mat-label *ngIf=\"control.label\">\r\n {{ control.label }}\r\n </mat-label>\r\n <mat-select\r\n [formControl]=\"control\"\r\n [required]=\"control.required\"\r\n (selectionChange)=\"optionSelected($event.value)\"\r\n [placeholder]=\"control.placeholder\"\r\n >\r\n <mat-option *ngIf=\"!control.required\" [value]=\"null\">\r\n {{ control.placeholder || control.settings.notSelectedText }}\r\n </mat-option>\r\n <mat-option\r\n *ngFor=\"let item of control.settings.source | async\"\r\n [value]=\"item[control.settings.fieldId]\"\r\n >\r\n {{ item | textByFunction: control.settings.fieldName }}\r\n </mat-option>\r\n </mat-select>\r\n <button\r\n *ngIf=\"settings.icon\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"iconClick($event)\"\r\n >\r\n <mat-icon>\r\n {{ settings.icon }}\r\n </mat-icon>\r\n </button>\r\n <mat-icon *ngIf=\"control.icon\" matPrefix>{{ control.icon }}</mat-icon>\r\n <mat-hint *ngIf=\"control.tooltip\">{{ control.tooltip }}</mat-hint>\r\n <mat-error>\r\n {{ control.errors | errorMessage: control.errorMessages }}\r\n </mat-error>\r\n</mat-form-field>\r\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: ErrorMessagePipe, name: "errorMessage" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: TextByFunctionPipe, name: "textByFunction" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SpecialDropdownComponent, decorators: [{
34
- type: Component,
35
- args: [{ standalone: true, selector: 'sp-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
36
- CommonModule,
37
- MatSelectModule,
38
- ReactiveFormsModule,
39
- ErrorMessagePipe,
40
- MatIconModule,
41
- MatButtonModule,
42
- TextByFunctionPipe,
43
- ], template: "<mat-form-field\r\n *ngIf=\"control && !control.hidden\"\r\n [id]=\"control.elementId\"\r\n class=\"special-dropdown w-full mb-3 {{ control.styleClasses }}\"\r\n [appearance]=\"control.label ? 'outline' : 'fill'\"\r\n>\r\n <mat-label *ngIf=\"control.label\">\r\n {{ control.label }}\r\n </mat-label>\r\n <mat-select\r\n [formControl]=\"control\"\r\n [required]=\"control.required\"\r\n (selectionChange)=\"optionSelected($event.value)\"\r\n [placeholder]=\"control.placeholder\"\r\n >\r\n <mat-option *ngIf=\"!control.required\" [value]=\"null\">\r\n {{ control.placeholder || control.settings.notSelectedText }}\r\n </mat-option>\r\n <mat-option\r\n *ngFor=\"let item of control.settings.source | async\"\r\n [value]=\"item[control.settings.fieldId]\"\r\n >\r\n {{ item | textByFunction: control.settings.fieldName }}\r\n </mat-option>\r\n </mat-select>\r\n <button\r\n *ngIf=\"settings.icon\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"iconClick($event)\"\r\n >\r\n <mat-icon>\r\n {{ settings.icon }}\r\n </mat-icon>\r\n </button>\r\n <mat-icon *ngIf=\"control.icon\" matPrefix>{{ control.icon }}</mat-icon>\r\n <mat-hint *ngIf=\"control.tooltip\">{{ control.tooltip }}</mat-hint>\r\n <mat-error>\r\n {{ control.errors | errorMessage: control.errorMessages }}\r\n </mat-error>\r\n</mat-form-field>\r\n", styles: [":host{display:contents}\n"] }]
44
- }], propDecorators: { control: [{
45
- type: Input
46
- }] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjaWFsLWZvcm1zL3NyYy9saWIvY29tcG9uZW50cy9zcGVjaWFsLWRyb3Bkb3duL3NwZWNpYWwtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlY2lhbC1mb3Jtcy9zcmMvbGliL2NvbXBvbmVudHMvc3BlY2lhbC1kcm9wZG93bi9zcGVjaWFsLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7O0FBaUIxQixNQUFNLE9BQU8sd0JBQXdCO0lBR25DLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFZO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDOzhHQWhCVSx3QkFBd0I7a0dBQXhCLHdCQUF3Qix1R0NoQ3JDLDAzQ0F5Q0Esa0ZEbEJJLFlBQVksb1RBQ1osZUFBZSwwL0JBQ2YsbUJBQW1CLGtoQkFDbkIsZ0JBQWdCLG9EQUNoQixhQUFhLG1MQUNiLGVBQWUsdUxBQ2Ysa0JBQWtCOzsyRkFHVCx3QkFBd0I7a0JBaEJwQyxTQUFTO2lDQUNJLElBQUksWUFDTixhQUFhLG1CQUdOLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2Ysa0JBQWtCO3FCQUNuQjs4QkFHUSxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3BlY2lhbEZvcm1Db250cm9sIH0gZnJvbSAnLi4vLi4vY29yZS9mb3Jtcy9zcGVjaWFsLWZvcm1zJztcclxuaW1wb3J0IHsgSURyb3Bkb3duU2V0dGluZ3MgfSBmcm9tICcuL3NwZWNpYWwtZHJvcGRvd24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQge1xyXG4gIEVycm9yTWVzc2FnZVBpcGUsXHJcbiAgVGV4dEJ5RnVuY3Rpb25QaXBlLFxyXG59IGZyb20gJy4uLy4uL2NvcmUvcGlwZXMnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHNlbGVjdG9yOiAnc3AtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGVjaWFsLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zcGVjaWFsLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEVycm9yTWVzc2FnZVBpcGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgVGV4dEJ5RnVuY3Rpb25QaXBlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGVjaWFsRHJvcGRvd25Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNvbnRyb2whOiBTcGVjaWFsRm9ybUNvbnRyb2w8SURyb3Bkb3duU2V0dGluZ3M+O1xyXG5cclxuICBnZXQgc2V0dGluZ3MoKTogSURyb3Bkb3duU2V0dGluZ3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC5zZXR0aW5ncztcclxuICB9XHJcblxyXG4gIGljb25DbGljayhldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNldHRpbmdzLmljb25BY3Rpb24pIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5pY29uQWN0aW9uKHRoaXMuY29udHJvbC52YWx1ZSk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3B0aW9uU2VsZWN0ZWQodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2V0dGluZ3Mub25TZWxlY3QpIHRoaXMuc2V0dGluZ3Mub25TZWxlY3QodmFsdWUpO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LWZvcm0tZmllbGRcclxuICAqbmdJZj1cImNvbnRyb2wgJiYgIWNvbnRyb2wuaGlkZGVuXCJcclxuICBbaWRdPVwiY29udHJvbC5lbGVtZW50SWRcIlxyXG4gIGNsYXNzPVwic3BlY2lhbC1kcm9wZG93biB3LWZ1bGwgbWItMyB7eyBjb250cm9sLnN0eWxlQ2xhc3NlcyB9fVwiXHJcbiAgW2FwcGVhcmFuY2VdPVwiY29udHJvbC5sYWJlbCA/ICdvdXRsaW5lJyA6ICdmaWxsJ1wiXHJcbj5cclxuICA8bWF0LWxhYmVsICpuZ0lmPVwiY29udHJvbC5sYWJlbFwiPlxyXG4gICAge3sgY29udHJvbC5sYWJlbCB9fVxyXG4gIDwvbWF0LWxhYmVsPlxyXG4gIDxtYXQtc2VsZWN0XHJcbiAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICBbcmVxdWlyZWRdPVwiY29udHJvbC5yZXF1aXJlZFwiXHJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9wdGlvblNlbGVjdGVkKCRldmVudC52YWx1ZSlcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cImNvbnRyb2wucGxhY2Vob2xkZXJcIlxyXG4gID5cclxuICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiIWNvbnRyb2wucmVxdWlyZWRcIiBbdmFsdWVdPVwibnVsbFwiPlxyXG4gICAgICB7eyBjb250cm9sLnBsYWNlaG9sZGVyIHx8IGNvbnRyb2wuc2V0dGluZ3Mubm90U2VsZWN0ZWRUZXh0IH19XHJcbiAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8bWF0LW9wdGlvblxyXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250cm9sLnNldHRpbmdzLnNvdXJjZSB8IGFzeW5jXCJcclxuICAgICAgW3ZhbHVlXT1cIml0ZW1bY29udHJvbC5zZXR0aW5ncy5maWVsZElkXVwiXHJcbiAgICA+XHJcbiAgICAgIHt7IGl0ZW0gfCB0ZXh0QnlGdW5jdGlvbjogY29udHJvbC5zZXR0aW5ncy5maWVsZE5hbWUgfX1cclxuICAgIDwvbWF0LW9wdGlvbj5cclxuICA8L21hdC1zZWxlY3Q+XHJcbiAgPGJ1dHRvblxyXG4gICAgKm5nSWY9XCJzZXR0aW5ncy5pY29uXCJcclxuICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgbWF0U3VmZml4XHJcbiAgICAoY2xpY2spPVwiaWNvbkNsaWNrKCRldmVudClcIlxyXG4gID5cclxuICAgIDxtYXQtaWNvbj5cclxuICAgICAge3sgc2V0dGluZ3MuaWNvbiB9fVxyXG4gICAgPC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuICA8bWF0LWljb24gKm5nSWY9XCJjb250cm9sLmljb25cIiBtYXRQcmVmaXg+e3sgY29udHJvbC5pY29uIH19PC9tYXQtaWNvbj5cclxuICA8bWF0LWhpbnQgKm5nSWY9XCJjb250cm9sLnRvb2x0aXBcIj57eyBjb250cm9sLnRvb2x0aXAgfX08L21hdC1oaW50PlxyXG4gIDxtYXQtZXJyb3I+XHJcbiAgICB7eyBjb250cm9sLmVycm9ycyB8IGVycm9yTWVzc2FnZTogY29udHJvbC5lcnJvck1lc3NhZ2VzIH19XHJcbiAgPC9tYXQtZXJyb3I+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcbiJdfQ==
1
+ import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatSelectModule } from '@angular/material/select';
4
+ import { ReactiveFormsModule } from '@angular/forms';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { MatButtonModule } from '@angular/material/button';
7
+ import { ErrorMessagePipe, TextByFunctionPipe, } from '../../core/pipes';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@angular/material/form-field";
11
+ import * as i3 from "@angular/material/select";
12
+ import * as i4 from "@angular/material/core";
13
+ import * as i5 from "@angular/forms";
14
+ import * as i6 from "@angular/material/icon";
15
+ import * as i7 from "@angular/material/button";
16
+ export class SpecialDropdownComponent {
17
+ get settings() {
18
+ return this.control.settings;
19
+ }
20
+ iconClick(event) {
21
+ if (this.settings.iconAction) {
22
+ this.settings.iconAction(this.control.value);
23
+ event.stopPropagation();
24
+ }
25
+ }
26
+ optionSelected(value) {
27
+ console.log(value);
28
+ if (this.settings.onSelect)
29
+ this.settings.onSelect(value);
30
+ }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SpecialDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: SpecialDropdownComponent, isStandalone: true, selector: "sp-dropdown", inputs: { control: "control" }, ngImport: i0, template: "<mat-form-field\r\n *ngIf=\"control && !control.hidden\"\r\n [id]=\"control.elementId\"\r\n class=\"special-dropdown w-full mb-3 {{ control.styleClasses }}\"\r\n [appearance]=\"control.label ? 'outline' : 'fill'\"\r\n>\r\n <mat-label *ngIf=\"control.label\">\r\n {{ control.label }}\r\n </mat-label>\r\n <mat-select\r\n [formControl]=\"control\"\r\n [required]=\"control.required\"\r\n (selectionChange)=\"optionSelected($event.value)\"\r\n [placeholder]=\"control.placeholder\"\r\n >\r\n <mat-option *ngIf=\"!control.required\" [value]=\"null\">\r\n {{ control.placeholder || control.settings.notSelectedText }}\r\n </mat-option>\r\n <mat-option\r\n *ngFor=\"let item of control.settings.source | async\"\r\n [value]=\"item[control.settings.fieldId]\"\r\n >\r\n {{ item | textByFunction: control.settings.fieldName }}\r\n </mat-option>\r\n </mat-select>\r\n <button\r\n *ngIf=\"settings.icon\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"iconClick($event)\"\r\n >\r\n <mat-icon>\r\n {{ settings.icon }}\r\n </mat-icon>\r\n </button>\r\n <mat-icon *ngIf=\"control.icon\" matPrefix>{{ control.icon }}</mat-icon>\r\n <mat-hint *ngIf=\"control.tooltip\">{{ control.tooltip }}</mat-hint>\r\n <mat-error>\r\n {{ control.errors | errorMessage: control.errorMessages }}\r\n </mat-error>\r\n</mat-form-field>\r\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: ErrorMessagePipe, name: "errorMessage" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: TextByFunctionPipe, name: "textByFunction" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SpecialDropdownComponent, decorators: [{
35
+ type: Component,
36
+ args: [{ standalone: true, selector: 'sp-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
37
+ CommonModule,
38
+ MatSelectModule,
39
+ ReactiveFormsModule,
40
+ ErrorMessagePipe,
41
+ MatIconModule,
42
+ MatButtonModule,
43
+ TextByFunctionPipe,
44
+ ], template: "<mat-form-field\r\n *ngIf=\"control && !control.hidden\"\r\n [id]=\"control.elementId\"\r\n class=\"special-dropdown w-full mb-3 {{ control.styleClasses }}\"\r\n [appearance]=\"control.label ? 'outline' : 'fill'\"\r\n>\r\n <mat-label *ngIf=\"control.label\">\r\n {{ control.label }}\r\n </mat-label>\r\n <mat-select\r\n [formControl]=\"control\"\r\n [required]=\"control.required\"\r\n (selectionChange)=\"optionSelected($event.value)\"\r\n [placeholder]=\"control.placeholder\"\r\n >\r\n <mat-option *ngIf=\"!control.required\" [value]=\"null\">\r\n {{ control.placeholder || control.settings.notSelectedText }}\r\n </mat-option>\r\n <mat-option\r\n *ngFor=\"let item of control.settings.source | async\"\r\n [value]=\"item[control.settings.fieldId]\"\r\n >\r\n {{ item | textByFunction: control.settings.fieldName }}\r\n </mat-option>\r\n </mat-select>\r\n <button\r\n *ngIf=\"settings.icon\"\r\n mat-icon-button\r\n matSuffix\r\n (click)=\"iconClick($event)\"\r\n >\r\n <mat-icon>\r\n {{ settings.icon }}\r\n </mat-icon>\r\n </button>\r\n <mat-icon *ngIf=\"control.icon\" matPrefix>{{ control.icon }}</mat-icon>\r\n <mat-hint *ngIf=\"control.tooltip\">{{ control.tooltip }}</mat-hint>\r\n <mat-error>\r\n {{ control.errors | errorMessage: control.errorMessages }}\r\n </mat-error>\r\n</mat-form-field>\r\n", styles: [":host{display:contents}\n"] }]
45
+ }], propDecorators: { control: [{
46
+ type: Input
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjaWFsLWZvcm1zL3NyYy9saWIvY29tcG9uZW50cy9zcGVjaWFsLWRyb3Bkb3duL3NwZWNpYWwtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlY2lhbC1mb3Jtcy9zcmMvbGliL2NvbXBvbmVudHMvc3BlY2lhbC1kcm9wZG93bi9zcGVjaWFsLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7O0FBaUIxQixNQUFNLE9BQU8sd0JBQXdCO0lBR25DLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFZO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7OEdBakJVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLHVHQ2hDckMsMDNDQXlDQSxrRkRsQkksWUFBWSxvVEFDWixlQUFlLHMzQ0FDZixtQkFBbUIsa2hCQUNuQixnQkFBZ0Isb0RBQ2hCLGFBQWEsbUxBQ2IsZUFBZSx1SUFDZixrQkFBa0I7OzJGQUdULHdCQUF3QjtrQkFoQnBDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGFBQWEsbUJBR04sdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixrQkFBa0I7cUJBQ25COzhCQUdRLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTcGVjaWFsRm9ybUNvbnRyb2wgfSBmcm9tICcuLi8uLi9jb3JlL2Zvcm1zL3NwZWNpYWwtZm9ybXMnO1xyXG5pbXBvcnQgeyBJRHJvcGRvd25GaWVsZCwgSURyb3Bkb3duU2V0dGluZ3MgfSBmcm9tICcuL3NwZWNpYWwtZHJvcGRvd24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQge1xyXG4gIEVycm9yTWVzc2FnZVBpcGUsXHJcbiAgVGV4dEJ5RnVuY3Rpb25QaXBlLFxyXG59IGZyb20gJy4uLy4uL2NvcmUvcGlwZXMnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHNlbGVjdG9yOiAnc3AtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGVjaWFsLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zcGVjaWFsLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEVycm9yTWVzc2FnZVBpcGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgVGV4dEJ5RnVuY3Rpb25QaXBlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGVjaWFsRHJvcGRvd25Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNvbnRyb2whOiBTcGVjaWFsRm9ybUNvbnRyb2w8SURyb3Bkb3duRmllbGQ+O1xyXG5cclxuICBnZXQgc2V0dGluZ3MoKTogSURyb3Bkb3duU2V0dGluZ3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC5zZXR0aW5ncztcclxuICB9XHJcblxyXG4gIGljb25DbGljayhldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNldHRpbmdzLmljb25BY3Rpb24pIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5pY29uQWN0aW9uKHRoaXMuY29udHJvbC52YWx1ZSk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3B0aW9uU2VsZWN0ZWQodmFsdWU6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuc2V0dGluZ3Mub25TZWxlY3QpIHRoaXMuc2V0dGluZ3Mub25TZWxlY3QodmFsdWUpO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LWZvcm0tZmllbGRcclxuICAqbmdJZj1cImNvbnRyb2wgJiYgIWNvbnRyb2wuaGlkZGVuXCJcclxuICBbaWRdPVwiY29udHJvbC5lbGVtZW50SWRcIlxyXG4gIGNsYXNzPVwic3BlY2lhbC1kcm9wZG93biB3LWZ1bGwgbWItMyB7eyBjb250cm9sLnN0eWxlQ2xhc3NlcyB9fVwiXHJcbiAgW2FwcGVhcmFuY2VdPVwiY29udHJvbC5sYWJlbCA/ICdvdXRsaW5lJyA6ICdmaWxsJ1wiXHJcbj5cclxuICA8bWF0LWxhYmVsICpuZ0lmPVwiY29udHJvbC5sYWJlbFwiPlxyXG4gICAge3sgY29udHJvbC5sYWJlbCB9fVxyXG4gIDwvbWF0LWxhYmVsPlxyXG4gIDxtYXQtc2VsZWN0XHJcbiAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICBbcmVxdWlyZWRdPVwiY29udHJvbC5yZXF1aXJlZFwiXHJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9wdGlvblNlbGVjdGVkKCRldmVudC52YWx1ZSlcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cImNvbnRyb2wucGxhY2Vob2xkZXJcIlxyXG4gID5cclxuICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiIWNvbnRyb2wucmVxdWlyZWRcIiBbdmFsdWVdPVwibnVsbFwiPlxyXG4gICAgICB7eyBjb250cm9sLnBsYWNlaG9sZGVyIHx8IGNvbnRyb2wuc2V0dGluZ3Mubm90U2VsZWN0ZWRUZXh0IH19XHJcbiAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8bWF0LW9wdGlvblxyXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250cm9sLnNldHRpbmdzLnNvdXJjZSB8IGFzeW5jXCJcclxuICAgICAgW3ZhbHVlXT1cIml0ZW1bY29udHJvbC5zZXR0aW5ncy5maWVsZElkXVwiXHJcbiAgICA+XHJcbiAgICAgIHt7IGl0ZW0gfCB0ZXh0QnlGdW5jdGlvbjogY29udHJvbC5zZXR0aW5ncy5maWVsZE5hbWUgfX1cclxuICAgIDwvbWF0LW9wdGlvbj5cclxuICA8L21hdC1zZWxlY3Q+XHJcbiAgPGJ1dHRvblxyXG4gICAgKm5nSWY9XCJzZXR0aW5ncy5pY29uXCJcclxuICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgbWF0U3VmZml4XHJcbiAgICAoY2xpY2spPVwiaWNvbkNsaWNrKCRldmVudClcIlxyXG4gID5cclxuICAgIDxtYXQtaWNvbj5cclxuICAgICAge3sgc2V0dGluZ3MuaWNvbiB9fVxyXG4gICAgPC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuICA8bWF0LWljb24gKm5nSWY9XCJjb250cm9sLmljb25cIiBtYXRQcmVmaXg+e3sgY29udHJvbC5pY29uIH19PC9tYXQtaWNvbj5cclxuICA8bWF0LWhpbnQgKm5nSWY9XCJjb250cm9sLnRvb2x0aXBcIj57eyBjb250cm9sLnRvb2x0aXAgfX08L21hdC1oaW50PlxyXG4gIDxtYXQtZXJyb3I+XHJcbiAgICB7eyBjb250cm9sLmVycm9ycyB8IGVycm9yTWVzc2FnZTogY29udHJvbC5lcnJvck1lc3NhZ2VzIH19XHJcbiAgPC9tYXQtZXJyb3I+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcbiJdfQ==
@@ -1,2 +1,3 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1kcm9wZG93bi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjaWFsLWZvcm1zL3NyYy9saWIvY29tcG9uZW50cy9zcGVjaWFsLWRyb3Bkb3duL3NwZWNpYWwtZHJvcGRvd24uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVDb250cm9sVHlwZXMgfSBmcm9tICcuLi8uLi9jb3JlL2F1eC1kYXRhL2NvbnRyb2wtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7IElGaWVsZERhdGEgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMvZmllbGQtYmFzaWNzLmludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IHR5cGUgSURyb3Bkb3duU2V0dGluZ3MgPSB7XHJcbiAgaWNvbj86IHN0cmluZztcclxuICBvblNlbGVjdD86IChkYXRhOiBhbnkpID0+IHZvaWQ7XHJcbiAgaWNvbkFjdGlvbj86IChkYXRhOiBhbnkpID0+IHZvaWQ7XHJcbiAgc291cmNlOiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICBmaWVsZElkOiBzdHJpbmc7XHJcbiAgZmllbGROYW1lOiBzdHJpbmcgfCAoKGE/OiBhbnkpID0+IHN0cmluZyk7XHJcbiAgbm90U2VsZWN0ZWRUZXh0Pzogc3RyaW5nO1xyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHJvcGRvd25GaWVsZCBleHRlbmRzIElGaWVsZERhdGEge1xyXG4gIHNldHRpbmdzOiBJRHJvcGRvd25TZXR0aW5ncztcclxuICB0eXBlOiBFQ29udHJvbFR5cGVzLmRyb3Bkb3duO1xyXG59XHJcbiJdfQ==
1
+ ;
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1kcm9wZG93bi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjaWFsLWZvcm1zL3NyYy9saWIvY29tcG9uZW50cy9zcGVjaWFsLWRyb3Bkb3duL3NwZWNpYWwtZHJvcGRvd24uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVDb250cm9sVHlwZXMgfSBmcm9tICcuLi8uLi9jb3JlL2F1eC1kYXRhL2NvbnRyb2wtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7IElGaWVsZERhdGEgfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMvZmllbGQtYmFzaWNzLmludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHJvcGRvd25TZXR0aW5nc3tcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIG9uU2VsZWN0PzogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxuICBpY29uQWN0aW9uPzogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxuICBzb3VyY2U6IE9ic2VydmFibGU8YW55W10+O1xyXG4gIGZpZWxkSWQ6IHN0cmluZztcclxuICBmaWVsZE5hbWU6IHN0cmluZyB8ICgoYT86IGFueSkgPT4gc3RyaW5nKTtcclxuICBub3RTZWxlY3RlZFRleHQ/OiBzdHJpbmc7XHJcbn07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElEcm9wZG93bkZpZWxkIGV4dGVuZHMgSUZpZWxkRGF0YSB7XHJcbiAgc2V0dGluZ3M6IElEcm9wZG93blNldHRpbmdzO1xyXG4gIHR5cGU6IEVDb250cm9sVHlwZXMuZHJvcGRvd247XHJcbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmc7XHJcbn1cclxuIl19
@@ -1,99 +1,99 @@
1
- import { ChangeDetectionStrategy, Directive, } from '@angular/core';
2
- import { Component, Input } from '@angular/core';
3
- import { EControlTypes } from '../../core/aux-data/control-types.enum';
4
- import { SpecialAutocompleteComponent } from '../special-autocomplete/special-autocomplete.component';
5
- import { SpecialCheckboxComponent } from '../special-checkbox/special-checkbox.component';
6
- import { SpecialDatepickerComponent } from '../special-datepicker/special-datepicker.component';
7
- import { SpecialDropdownComponent } from '../special-dropdown/special-dropdown.component';
8
- import { SpecialInputComponent } from '../special-input/special-input.component';
9
- import { SpecialLabelComponent } from '../special-label/special-label.component';
10
- import { SpecialMultipleAutocompleteComponent } from '../special-multiple-autocomplete/special-multiple-autocomplete.component';
11
- import { SpecialRichtextComponent } from '../special-richtext/special-richtext.component';
12
- import { SpecialTextAreaComponent } from '../special-text-area/special-text-area.component';
13
- import { SpecialUploadComponent } from '../special-upload/special-upload.component';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "@angular/common";
16
- import * as i2 from "../../core/pipes/controls-list-pipe/controls-list.pipe";
17
- import * as i3 from "@angular/material/button";
18
- export class SpecialFormComponent {
19
- set control(form) {
20
- this.form = form;
21
- }
22
- ngOnInit() { }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SpecialFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SpecialFormComponent, selector: "sp-form", inputs: { form: ["control", "form"] }, ngImport: i0, template: "<div\r\n *ngIf=\"form && !form.hidden\"\r\n [id]=\"form.elementId\"\r\n class=\"special-form w-full box-border p-2 {{ form.styleClasses }}\"\r\n>\r\n <div\r\n *ngIf=\"form\"\r\n [class]=\"\r\n form.label\r\n ? 'w-full mt-2 p-3 border-slate-200 border border-solid box-border'\r\n : 'container'\r\n \"\r\n >\r\n <h1 *ngIf=\"!!form.label\" class=\"font-bold py-3\">{{ form.label }}</h1>\r\n <div class=\"w-full flex flex-wrap\">\r\n <ng-template\r\n *ngFor=\"let control of form.controls | controlsList\"\r\n controlRender\r\n [control]=\"control\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return FormControlsRenderDirective; }), selector: "[controlRender]", inputs: ["control"] }, { kind: "pipe", type: i0.forwardRef(function () { return i2.FormControlsListPipe; }), name: "controlsList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25
- }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SpecialFormComponent, decorators: [{
27
- type: Component,
28
- args: [{ selector: 'sp-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n *ngIf=\"form && !form.hidden\"\r\n [id]=\"form.elementId\"\r\n class=\"special-form w-full box-border p-2 {{ form.styleClasses }}\"\r\n>\r\n <div\r\n *ngIf=\"form\"\r\n [class]=\"\r\n form.label\r\n ? 'w-full mt-2 p-3 border-slate-200 border border-solid box-border'\r\n : 'container'\r\n \"\r\n >\r\n <h1 *ngIf=\"!!form.label\" class=\"font-bold py-3\">{{ form.label }}</h1>\r\n <div class=\"w-full flex flex-wrap\">\r\n <ng-template\r\n *ngFor=\"let control of form.controls | controlsList\"\r\n controlRender\r\n [control]=\"control\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}\n"] }]
29
- }], propDecorators: { form: [{
30
- type: Input,
31
- args: ['control']
32
- }] } });
33
- export class SpecialArrayComponent {
34
- set control(formArray) {
35
- this.formArray = formArray;
36
- }
37
- get withFormHeader() {
38
- return this.formArray.settings.withFormHeader;
39
- }
40
- get settings() {
41
- return this.formArray.settings;
42
- }
43
- constructor() { }
44
- ngOnInit() { }
45
- removeItem(index) {
46
- this.formArray.removeAt(index);
47
- }
48
- addItem() {
49
- this.formArray.addItem();
50
- }
51
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SpecialArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
52
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SpecialArrayComponent, selector: "sp-array", inputs: { formArray: ["control", "formArray"] }, ngImport: i0, template: "<div\r\n *ngIf=\"formArray && !formArray.hidden\"\r\n [id]=\"formArray.elementId\"\r\n class=\"special-form-array w-full box-border p-2 {{ formArray.styleClasses }}\"\r\n>\r\n <div class=\"w-full mt-2 p-3 border-slate-200 border border-solid box-border\">\r\n <h1 *ngIf=\"!!formArray.label\" class=\"font-bold py-3\">\r\n {{ formArray.label }}\r\n </h1>\r\n <div class=\"divide-y divide-x-0 divide-solid divide-slate-200\">\r\n <div\r\n *ngIf=\"formArray.form\"\r\n [ngClass]=\"{ 'md:grid-cols-15': settings.withActionButtons }\"\r\n class=\"grid gap-4 grid-cols-12\"\r\n >\r\n <ng-container *ngIf=\"!withFormHeader; else FORMHEADERREF\">\r\n <h2\r\n [class]=\"item.styleClasses\"\r\n *ngFor=\"let item of formArray.form.controls | controlsList\"\r\n >\r\n {{ item.label }}\r\n </h2>\r\n <div\r\n *ngIf=\"settings.withActionButtons\"\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n ></div>\r\n </ng-container>\r\n <ng-template #FORMHEADERREF>\r\n <ng-template\r\n *ngFor=\"let item of formArray.form.controls | controlsList\"\r\n controlRender\r\n [control]=\"item\"\r\n ></ng-template>\r\n <div\r\n *ngIf=\"settings.withActionButtons\"\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n >\r\n <button\r\n mat-flat-button\r\n color=\"primary\"\r\n [disabled]=\"formArray.form.invalid\"\r\n (click)=\"addItem()\"\r\n >\r\n {{settings.addActionLabel || 'Add'}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"w-full pt-5 grid gap-4 grid-cols-12 md:grid-cols-15\"\r\n *ngFor=\"let formGroup of formArray.controls; let i = index\"\r\n >\r\n <ng-template\r\n *ngFor=\"let item of formGroup.controls | controlsList\"\r\n controlRender\r\n [control]=\"item\"\r\n ></ng-template>\r\n <div\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n >\r\n <button mat-flat-button color=\"warn\" (click)=\"removeItem(i)\">\r\n {{ settings.removeActionLabel || \"Remove\" }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(function () { return i3.MatButton; }), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i0.forwardRef(function () { return FormControlsRenderDirective; }), selector: "[controlRender]", inputs: ["control"] }, { kind: "pipe", type: i0.forwardRef(function () { return i2.FormControlsListPipe; }), name: "controlsList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
53
- }
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SpecialArrayComponent, decorators: [{
55
- type: Component,
56
- args: [{ selector: 'sp-array', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n *ngIf=\"formArray && !formArray.hidden\"\r\n [id]=\"formArray.elementId\"\r\n class=\"special-form-array w-full box-border p-2 {{ formArray.styleClasses }}\"\r\n>\r\n <div class=\"w-full mt-2 p-3 border-slate-200 border border-solid box-border\">\r\n <h1 *ngIf=\"!!formArray.label\" class=\"font-bold py-3\">\r\n {{ formArray.label }}\r\n </h1>\r\n <div class=\"divide-y divide-x-0 divide-solid divide-slate-200\">\r\n <div\r\n *ngIf=\"formArray.form\"\r\n [ngClass]=\"{ 'md:grid-cols-15': settings.withActionButtons }\"\r\n class=\"grid gap-4 grid-cols-12\"\r\n >\r\n <ng-container *ngIf=\"!withFormHeader; else FORMHEADERREF\">\r\n <h2\r\n [class]=\"item.styleClasses\"\r\n *ngFor=\"let item of formArray.form.controls | controlsList\"\r\n >\r\n {{ item.label }}\r\n </h2>\r\n <div\r\n *ngIf=\"settings.withActionButtons\"\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n ></div>\r\n </ng-container>\r\n <ng-template #FORMHEADERREF>\r\n <ng-template\r\n *ngFor=\"let item of formArray.form.controls | controlsList\"\r\n controlRender\r\n [control]=\"item\"\r\n ></ng-template>\r\n <div\r\n *ngIf=\"settings.withActionButtons\"\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n >\r\n <button\r\n mat-flat-button\r\n color=\"primary\"\r\n [disabled]=\"formArray.form.invalid\"\r\n (click)=\"addItem()\"\r\n >\r\n {{settings.addActionLabel || 'Add'}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"w-full pt-5 grid gap-4 grid-cols-12 md:grid-cols-15\"\r\n *ngFor=\"let formGroup of formArray.controls; let i = index\"\r\n >\r\n <ng-template\r\n *ngFor=\"let item of formGroup.controls | controlsList\"\r\n controlRender\r\n [control]=\"item\"\r\n ></ng-template>\r\n <div\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n >\r\n <button mat-flat-button color=\"warn\" (click)=\"removeItem(i)\">\r\n {{ settings.removeActionLabel || \"Remove\" }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}\n"] }]
57
- }], ctorParameters: function () { return []; }, propDecorators: { formArray: [{
58
- type: Input,
59
- args: ['control']
60
- }] } });
61
- export class FormControlsRenderDirective {
62
- set controlSetter(control) {
63
- this.viewContainer.clear();
64
- const component = this.componentsBuffer[control.type];
65
- if (component) {
66
- const componentRef = this.viewContainer.createComponent(component);
67
- componentRef.instance.control = control;
68
- }
69
- }
70
- constructor(viewContainer) {
71
- this.viewContainer = viewContainer;
72
- this.componentsBuffer = {
73
- [EControlTypes.autocomplete]: SpecialAutocompleteComponent,
74
- [EControlTypes.checkbox]: SpecialCheckboxComponent,
75
- [EControlTypes.date]: SpecialDatepickerComponent,
76
- [EControlTypes.dropdown]: SpecialDropdownComponent,
77
- [EControlTypes.array]: SpecialArrayComponent,
78
- [EControlTypes.input]: SpecialInputComponent,
79
- [EControlTypes.multiple]: SpecialMultipleAutocompleteComponent,
80
- [EControlTypes.textArea]: SpecialTextAreaComponent,
81
- [EControlTypes.label]: SpecialLabelComponent,
82
- [EControlTypes.upload]: SpecialUploadComponent,
83
- [EControlTypes.form]: SpecialFormComponent,
84
- [EControlTypes.richText]: SpecialRichtextComponent,
85
- };
86
- }
87
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: FormControlsRenderDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
88
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: FormControlsRenderDirective, selector: "[controlRender]", inputs: { controlSetter: ["control", "controlSetter"] }, ngImport: i0 }); }
89
- }
90
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: FormControlsRenderDirective, decorators: [{
91
- type: Directive,
92
- args: [{
93
- selector: `[controlRender]`,
94
- }]
95
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { controlSetter: [{
96
- type: Input,
97
- args: ['control']
98
- }] } });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWNpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NwZWNpYWwtZm9ybS9zcGVjaWFsLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlY2lhbC1mb3Jtcy9zcmMvbGliL2NvbXBvbmVudHMvc3BlY2lhbC1mb3JtL3NwZWNpYWwtZm9ybS5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWNpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NwZWNpYWwtZm9ybS9zcGVjaWFsLWZvcm0tYXJyYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBS3ZFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7OztBQVFwRixNQUFNLE9BQU8sb0JBQW9CO0lBRS9CLElBQUksT0FBTyxDQUFDLElBQXNCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxRQUFRLEtBQVUsQ0FBQzs4R0FMUixvQkFBb0I7a0dBQXBCLG9CQUFvQixzRkM1QmpDLHNxQkF1QkEscWFEaURhLDJCQUEyQjs7MkZBNUMzQixvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsU0FBUyxtQkFHRix1QkFBdUIsQ0FBQyxNQUFNOzhCQUc3QixJQUFJO3NCQUFyQixLQUFLO3VCQUFDLFNBQVM7O0FBYWxCLE1BQU0sT0FBTyxxQkFBcUI7SUFHaEMsSUFBSSxPQUFPLENBQUMsU0FBYztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZSxDQUFDO0lBRWhCLFFBQVEsS0FBSSxDQUFDO0lBRWIsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELE9BQU87UUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7OEdBeEJVLHFCQUFxQjtrR0FBckIscUJBQXFCLGlHRTFDbEMsdzVGQXlGQSw4ekJGakJhLDJCQUEyQjs7MkZBOUIzQixxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNOzBFQUc3QixTQUFTO3NCQUExQixLQUFLO3VCQUFDLFNBQVM7O0FBNkJsQixNQUFNLE9BQU8sMkJBQTJCO0lBZXRDLElBQXNCLGFBQWEsQ0FBQyxPQUFnQztRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLE1BQU0sU0FBUyxHQUFJLElBQUksQ0FBQyxnQkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0QsSUFBSSxTQUFTLEVBQUU7WUFDYixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRSxZQUFZLENBQUMsUUFBZ0IsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVELFlBQW9CLGFBQStCO1FBQS9CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQXZCbEMscUJBQWdCLEdBQUc7WUFDbEMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsNEJBQTRCO1lBQzFELENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLHdCQUF3QjtZQUNsRCxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSwwQkFBMEI7WUFDaEQsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsd0JBQXdCO1lBQ2xELENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLHFCQUFxQjtZQUM1QyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxxQkFBcUI7WUFDNUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsb0NBQW9DO1lBQzlELENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLHdCQUF3QjtZQUNsRCxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxxQkFBcUI7WUFDNUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsc0JBQXNCO1lBQzlDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLG9CQUFvQjtZQUMxQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSx3QkFBd0I7U0FDbkQsQ0FBQztJQVVvRCxDQUFDOzhHQXhCNUMsMkJBQTJCO2tHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBSHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7dUdBZ0J1QixhQUFhO3NCQUFsQyxLQUFLO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIERpcmVjdGl2ZSxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRUNvbnRyb2xUeXBlcyB9IGZyb20gJy4uLy4uL2NvcmUvYXV4LWRhdGEvY29udHJvbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHtcclxuICBTcGVjaWFsRm9ybUdyb3VwLFxyXG4gIFNwZWNpYWxGb3JtQ29udHJvbCxcclxufSBmcm9tICcuLi8uLi9jb3JlL2Zvcm1zL3NwZWNpYWwtZm9ybXMnO1xyXG5pbXBvcnQgeyBTcGVjaWFsQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vc3BlY2lhbC1hdXRvY29tcGxldGUvc3BlY2lhbC1hdXRvY29tcGxldGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BlY2lhbENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vc3BlY2lhbC1jaGVja2JveC9zcGVjaWFsLWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwZWNpYWxEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vc3BlY2lhbC1kYXRlcGlja2VyL3NwZWNpYWwtZGF0ZXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGVjaWFsRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9zcGVjaWFsLWRyb3Bkb3duL3NwZWNpYWwtZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BlY2lhbElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vc3BlY2lhbC1pbnB1dC9zcGVjaWFsLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwZWNpYWxMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uL3NwZWNpYWwtbGFiZWwvc3BlY2lhbC1sYWJlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGVjaWFsTXVsdGlwbGVBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi9zcGVjaWFsLW11bHRpcGxlLWF1dG9jb21wbGV0ZS9zcGVjaWFsLW11bHRpcGxlLWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGVjaWFsUmljaHRleHRDb21wb25lbnQgfSBmcm9tICcuLi9zcGVjaWFsLXJpY2h0ZXh0L3NwZWNpYWwtcmljaHRleHQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BlY2lhbFRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vc3BlY2lhbC10ZXh0LWFyZWEvc3BlY2lhbC10ZXh0LWFyZWEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BlY2lhbFVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL3NwZWNpYWwtdXBsb2FkL3NwZWNpYWwtdXBsb2FkLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGVjaWFsLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NwZWNpYWwtZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BlY2lhbEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgnY29udHJvbCcpIGZvcm06IFNwZWNpYWxGb3JtR3JvdXA7XHJcbiAgc2V0IGNvbnRyb2woZm9ybTogU3BlY2lhbEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5mb3JtID0gZm9ybTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7fVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwLWFycmF5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3BlY2lhbC1mb3JtLWFycmF5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zcGVjaWFsLWZvcm0tYXJyYXkuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwZWNpYWxBcnJheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCdjb250cm9sJykgZm9ybUFycmF5OiBhbnk7XHJcblxyXG4gIHNldCBjb250cm9sKGZvcm1BcnJheTogYW55KSB7XHJcbiAgICB0aGlzLmZvcm1BcnJheSA9IGZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCB3aXRoRm9ybUhlYWRlcigpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1BcnJheS5zZXR0aW5ncy53aXRoRm9ybUhlYWRlcjtcclxuICB9XHJcblxyXG4gIGdldCBzZXR0aW5ncygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1BcnJheS5zZXR0aW5ncztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICByZW1vdmVJdGVtKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcbiAgYWRkSXRlbSgpIHtcclxuICAgIHRoaXMuZm9ybUFycmF5LmFkZEl0ZW0oKTtcclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBgW2NvbnRyb2xSZW5kZXJdYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1Db250cm9sc1JlbmRlckRpcmVjdGl2ZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRzQnVmZmVyID0ge1xyXG4gICAgW0VDb250cm9sVHlwZXMuYXV0b2NvbXBsZXRlXTogU3BlY2lhbEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLmNoZWNrYm94XTogU3BlY2lhbENoZWNrYm94Q29tcG9uZW50LFxyXG4gICAgW0VDb250cm9sVHlwZXMuZGF0ZV06IFNwZWNpYWxEYXRlcGlja2VyQ29tcG9uZW50LFxyXG4gICAgW0VDb250cm9sVHlwZXMuZHJvcGRvd25dOiBTcGVjaWFsRHJvcGRvd25Db21wb25lbnQsXHJcbiAgICBbRUNvbnRyb2xUeXBlcy5hcnJheV06IFNwZWNpYWxBcnJheUNvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLmlucHV0XTogU3BlY2lhbElucHV0Q29tcG9uZW50LFxyXG4gICAgW0VDb250cm9sVHlwZXMubXVsdGlwbGVdOiBTcGVjaWFsTXVsdGlwbGVBdXRvY29tcGxldGVDb21wb25lbnQsXHJcbiAgICBbRUNvbnRyb2xUeXBlcy50ZXh0QXJlYV06IFNwZWNpYWxUZXh0QXJlYUNvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLmxhYmVsXTogU3BlY2lhbExhYmVsQ29tcG9uZW50LFxyXG4gICAgW0VDb250cm9sVHlwZXMudXBsb2FkXTogU3BlY2lhbFVwbG9hZENvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLmZvcm1dOiBTcGVjaWFsRm9ybUNvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLnJpY2hUZXh0XTogU3BlY2lhbFJpY2h0ZXh0Q29tcG9uZW50LFxyXG4gIH07XHJcbiAgQElucHV0KCdjb250cm9sJykgc2V0IGNvbnRyb2xTZXR0ZXIoY29udHJvbDogU3BlY2lhbEZvcm1Db250cm9sPGFueT4pIHtcclxuICAgIHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgY29uc3QgY29tcG9uZW50ID0gKHRoaXMuY29tcG9uZW50c0J1ZmZlciBhcyBhbnkpW2NvbnRyb2wudHlwZV07XHJcbiAgICBpZiAoY29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50KTtcclxuICAgICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLmNvbnRyb2wgPSBjb250cm9sO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxyXG59XHJcbiIsIjxkaXZcclxuICAqbmdJZj1cImZvcm0gJiYgIWZvcm0uaGlkZGVuXCJcclxuICBbaWRdPVwiZm9ybS5lbGVtZW50SWRcIlxyXG4gIGNsYXNzPVwic3BlY2lhbC1mb3JtIHctZnVsbCBib3gtYm9yZGVyIHAtMiB7eyBmb3JtLnN0eWxlQ2xhc3NlcyB9fVwiXHJcbj5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImZvcm1cIlxyXG4gICAgW2NsYXNzXT1cIlxyXG4gICAgICBmb3JtLmxhYmVsXHJcbiAgICAgICAgPyAndy1mdWxsIG10LTIgcC0zIGJvcmRlci1zbGF0ZS0yMDAgYm9yZGVyIGJvcmRlci1zb2xpZCBib3gtYm9yZGVyJ1xyXG4gICAgICAgIDogJ2NvbnRhaW5lcidcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgPGgxICpuZ0lmPVwiISFmb3JtLmxhYmVsXCIgY2xhc3M9XCJmb250LWJvbGQgcHktM1wiPnt7IGZvcm0ubGFiZWwgfX08L2gxPlxyXG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtd3JhcFwiPlxyXG4gICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAqbmdGb3I9XCJsZXQgY29udHJvbCBvZiBmb3JtLmNvbnRyb2xzIHwgY29udHJvbHNMaXN0XCJcclxuICAgICAgICBjb250cm9sUmVuZGVyXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iLCI8ZGl2XHJcbiAgKm5nSWY9XCJmb3JtQXJyYXkgJiYgIWZvcm1BcnJheS5oaWRkZW5cIlxyXG4gIFtpZF09XCJmb3JtQXJyYXkuZWxlbWVudElkXCJcclxuICBjbGFzcz1cInNwZWNpYWwtZm9ybS1hcnJheSB3LWZ1bGwgYm94LWJvcmRlciBwLTIge3sgZm9ybUFycmF5LnN0eWxlQ2xhc3NlcyB9fVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIG10LTIgcC0zIGJvcmRlci1zbGF0ZS0yMDAgYm9yZGVyIGJvcmRlci1zb2xpZCBib3gtYm9yZGVyXCI+XHJcbiAgICA8aDEgKm5nSWY9XCIhIWZvcm1BcnJheS5sYWJlbFwiIGNsYXNzPVwiZm9udC1ib2xkIHB5LTNcIj5cclxuICAgICAge3sgZm9ybUFycmF5LmxhYmVsIH19XHJcbiAgICA8L2gxPlxyXG4gICAgPGRpdiBjbGFzcz1cImRpdmlkZS15IGRpdmlkZS14LTAgZGl2aWRlLXNvbGlkIGRpdmlkZS1zbGF0ZS0yMDBcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiZm9ybUFycmF5LmZvcm1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ21kOmdyaWQtY29scy0xNSc6IHNldHRpbmdzLndpdGhBY3Rpb25CdXR0b25zIH1cIlxyXG4gICAgICAgIGNsYXNzPVwiZ3JpZCBnYXAtNCBncmlkLWNvbHMtMTJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF3aXRoRm9ybUhlYWRlcjsgZWxzZSBGT1JNSEVBREVSUkVGXCI+XHJcbiAgICAgICAgICA8aDJcclxuICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uc3R5bGVDbGFzc2VzXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZm9ybUFycmF5LmZvcm0uY29udHJvbHMgfCBjb250cm9sc0xpc3RcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cInNldHRpbmdzLndpdGhBY3Rpb25CdXR0b25zXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgICAgICBjb2wtc3RhcnQtNyBjb2wtZW5kLTEzXHJcbiAgICAgICAgICAgICAgbWQ6Y29sLXN0YXJ0LTEzIG1kOmNvbC1lbmQtMTZcclxuICAgICAgICAgICAgICBwYi01XHJcbiAgICAgICAgICAgICAgbXktYXV0b1xyXG4gICAgICAgICAgICAgIG1sLWF1dG9cclxuICAgICAgICAgICAgICBtZDptLWF1dG9cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI0ZPUk1IRUFERVJSRUY+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZm9ybUFycmF5LmZvcm0uY29udHJvbHMgfCBjb250cm9sc0xpc3RcIlxyXG4gICAgICAgICAgICBjb250cm9sUmVuZGVyXHJcbiAgICAgICAgICAgIFtjb250cm9sXT1cIml0ZW1cIlxyXG4gICAgICAgICAgPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwic2V0dGluZ3Mud2l0aEFjdGlvbkJ1dHRvbnNcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIlxyXG4gICAgICAgICAgICAgIGNvbC1zdGFydC03IGNvbC1lbmQtMTNcclxuICAgICAgICAgICAgICBtZDpjb2wtc3RhcnQtMTMgbWQ6Y29sLWVuZC0xNlxyXG4gICAgICAgICAgICAgIHBiLTVcclxuICAgICAgICAgICAgICBteS1hdXRvXHJcbiAgICAgICAgICAgICAgbWwtYXV0b1xyXG4gICAgICAgICAgICAgIG1kOm0tYXV0b1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUFycmF5LmZvcm0uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW0oKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7e3NldHRpbmdzLmFkZEFjdGlvbkxhYmVsIHx8ICdBZGQnfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidy1mdWxsIHB0LTUgZ3JpZCBnYXAtNCBncmlkLWNvbHMtMTIgbWQ6Z3JpZC1jb2xzLTE1XCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgZm9ybUdyb3VwIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZvcm1Hcm91cC5jb250cm9scyB8IGNvbnRyb2xzTGlzdFwiXHJcbiAgICAgICAgICBjb250cm9sUmVuZGVyXHJcbiAgICAgICAgICBbY29udHJvbF09XCJpdGVtXCJcclxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIlxyXG4gICAgICAgICAgICBjb2wtc3RhcnQtNyBjb2wtZW5kLTEzXHJcbiAgICAgICAgICAgIG1kOmNvbC1zdGFydC0xMyBtZDpjb2wtZW5kLTE2XHJcbiAgICAgICAgICAgIHBiLTVcclxuICAgICAgICAgICAgbXktYXV0b1xyXG4gICAgICAgICAgICBtbC1hdXRvXHJcbiAgICAgICAgICAgIG1kOm0tYXV0b1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwicmVtb3ZlSXRlbShpKVwiPlxyXG4gICAgICAgICAgICB7eyBzZXR0aW5ncy5yZW1vdmVBY3Rpb25MYWJlbCB8fCBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
1
+ import { ChangeDetectionStrategy, Directive, } from '@angular/core';
2
+ import { Component, Input } from '@angular/core';
3
+ import { EControlTypes } from '../../core/aux-data/control-types.enum';
4
+ import { SpecialAutocompleteComponent } from '../special-autocomplete/special-autocomplete.component';
5
+ import { SpecialCheckboxComponent } from '../special-checkbox/special-checkbox.component';
6
+ import { SpecialDatepickerComponent } from '../special-datepicker/special-datepicker.component';
7
+ import { SpecialDropdownComponent } from '../special-dropdown/special-dropdown.component';
8
+ import { SpecialInputComponent } from '../special-input/special-input.component';
9
+ import { SpecialLabelComponent } from '../special-label/special-label.component';
10
+ import { SpecialMultipleAutocompleteComponent } from '../special-multiple-autocomplete/special-multiple-autocomplete.component';
11
+ import { SpecialRichtextComponent } from '../special-richtext/special-richtext.component';
12
+ import { SpecialTextAreaComponent } from '../special-text-area/special-text-area.component';
13
+ import { SpecialUploadComponent } from '../special-upload/special-upload.component';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@angular/common";
16
+ import * as i2 from "../../core/pipes/controls-list-pipe/controls-list.pipe";
17
+ import * as i3 from "@angular/material/button";
18
+ export class SpecialFormComponent {
19
+ set control(form) {
20
+ this.form = form;
21
+ }
22
+ ngOnInit() { }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SpecialFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: SpecialFormComponent, selector: "sp-form", inputs: { form: ["control", "form"] }, ngImport: i0, template: "<div\r\n *ngIf=\"form && !form.hidden\"\r\n [id]=\"form.elementId\"\r\n class=\"special-form w-full box-border p-2 {{ form.styleClasses }}\"\r\n>\r\n <div\r\n *ngIf=\"form\"\r\n [class]=\"\r\n form.label\r\n ? 'w-full mt-2 p-3 border-slate-200 border border-solid box-border'\r\n : 'container'\r\n \"\r\n >\r\n <h1 *ngIf=\"!!form.label\" class=\"font-bold py-3\">{{ form.label }}</h1>\r\n <div class=\"w-full flex flex-wrap\">\r\n <ng-template\r\n *ngFor=\"let control of form.controls | controlsList\"\r\n controlRender\r\n [control]=\"control\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => FormControlsRenderDirective), selector: "[controlRender]", inputs: ["control"] }, { kind: "pipe", type: i0.forwardRef(() => i2.FormControlsListPipe), name: "controlsList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SpecialFormComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'sp-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n *ngIf=\"form && !form.hidden\"\r\n [id]=\"form.elementId\"\r\n class=\"special-form w-full box-border p-2 {{ form.styleClasses }}\"\r\n>\r\n <div\r\n *ngIf=\"form\"\r\n [class]=\"\r\n form.label\r\n ? 'w-full mt-2 p-3 border-slate-200 border border-solid box-border'\r\n : 'container'\r\n \"\r\n >\r\n <h1 *ngIf=\"!!form.label\" class=\"font-bold py-3\">{{ form.label }}</h1>\r\n <div class=\"w-full flex flex-wrap\">\r\n <ng-template\r\n *ngFor=\"let control of form.controls | controlsList\"\r\n controlRender\r\n [control]=\"control\"\r\n ></ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}\n"] }]
29
+ }], propDecorators: { form: [{
30
+ type: Input,
31
+ args: ['control']
32
+ }] } });
33
+ export class SpecialArrayComponent {
34
+ set control(formArray) {
35
+ this.formArray = formArray;
36
+ }
37
+ get withFormHeader() {
38
+ return this.formArray.settings.withFormHeader;
39
+ }
40
+ get settings() {
41
+ return this.formArray.settings;
42
+ }
43
+ constructor() { }
44
+ ngOnInit() { }
45
+ removeItem(index) {
46
+ this.formArray.removeAt(index);
47
+ }
48
+ addItem() {
49
+ this.formArray.addItem();
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SpecialArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
52
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: SpecialArrayComponent, selector: "sp-array", inputs: { formArray: ["control", "formArray"] }, ngImport: i0, template: "<div\r\n *ngIf=\"formArray && !formArray.hidden\"\r\n [id]=\"formArray.elementId\"\r\n class=\"special-form-array w-full box-border p-2 {{ formArray.styleClasses }}\"\r\n>\r\n <div class=\"w-full mt-2 p-3 border-slate-200 border border-solid box-border\">\r\n <h1 *ngIf=\"!!formArray.label\" class=\"font-bold py-3\">\r\n {{ formArray.label }}\r\n </h1>\r\n <div class=\"divide-y divide-x-0 divide-solid divide-slate-200\">\r\n <div\r\n *ngIf=\"formArray.form\"\r\n [ngClass]=\"{ 'md:grid-cols-15': settings.withActionButtons }\"\r\n class=\"grid gap-4 grid-cols-12\"\r\n >\r\n <ng-container *ngIf=\"!withFormHeader; else FORMHEADERREF\">\r\n <h2\r\n [class]=\"item.styleClasses\"\r\n *ngFor=\"let item of formArray.form.controls | controlsList\"\r\n >\r\n {{ item.label }}\r\n </h2>\r\n <div\r\n *ngIf=\"settings.withActionButtons\"\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n ></div>\r\n </ng-container>\r\n <ng-template #FORMHEADERREF>\r\n <ng-template\r\n *ngFor=\"let item of formArray.form.controls | controlsList\"\r\n controlRender\r\n [control]=\"item\"\r\n ></ng-template>\r\n <div\r\n *ngIf=\"settings.withActionButtons\"\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n >\r\n <button\r\n mat-flat-button\r\n color=\"primary\"\r\n [disabled]=\"formArray.form.invalid\"\r\n (click)=\"addItem()\"\r\n >\r\n {{settings.addActionLabel || 'Add'}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"w-full pt-5 grid gap-4 grid-cols-12 md:grid-cols-15\"\r\n *ngFor=\"let formGroup of formArray.controls; let i = index\"\r\n >\r\n <ng-template\r\n *ngFor=\"let item of formGroup.controls | controlsList\"\r\n controlRender\r\n [control]=\"item\"\r\n ></ng-template>\r\n <div\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n >\r\n <button mat-flat-button color=\"warn\" (click)=\"removeItem(i)\">\r\n {{ settings.removeActionLabel || \"Remove\" }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => i3.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i0.forwardRef(() => FormControlsRenderDirective), selector: "[controlRender]", inputs: ["control"] }, { kind: "pipe", type: i0.forwardRef(() => i2.FormControlsListPipe), name: "controlsList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SpecialArrayComponent, decorators: [{
55
+ type: Component,
56
+ args: [{ selector: 'sp-array', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n *ngIf=\"formArray && !formArray.hidden\"\r\n [id]=\"formArray.elementId\"\r\n class=\"special-form-array w-full box-border p-2 {{ formArray.styleClasses }}\"\r\n>\r\n <div class=\"w-full mt-2 p-3 border-slate-200 border border-solid box-border\">\r\n <h1 *ngIf=\"!!formArray.label\" class=\"font-bold py-3\">\r\n {{ formArray.label }}\r\n </h1>\r\n <div class=\"divide-y divide-x-0 divide-solid divide-slate-200\">\r\n <div\r\n *ngIf=\"formArray.form\"\r\n [ngClass]=\"{ 'md:grid-cols-15': settings.withActionButtons }\"\r\n class=\"grid gap-4 grid-cols-12\"\r\n >\r\n <ng-container *ngIf=\"!withFormHeader; else FORMHEADERREF\">\r\n <h2\r\n [class]=\"item.styleClasses\"\r\n *ngFor=\"let item of formArray.form.controls | controlsList\"\r\n >\r\n {{ item.label }}\r\n </h2>\r\n <div\r\n *ngIf=\"settings.withActionButtons\"\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n ></div>\r\n </ng-container>\r\n <ng-template #FORMHEADERREF>\r\n <ng-template\r\n *ngFor=\"let item of formArray.form.controls | controlsList\"\r\n controlRender\r\n [control]=\"item\"\r\n ></ng-template>\r\n <div\r\n *ngIf=\"settings.withActionButtons\"\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n >\r\n <button\r\n mat-flat-button\r\n color=\"primary\"\r\n [disabled]=\"formArray.form.invalid\"\r\n (click)=\"addItem()\"\r\n >\r\n {{settings.addActionLabel || 'Add'}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div\r\n class=\"w-full pt-5 grid gap-4 grid-cols-12 md:grid-cols-15\"\r\n *ngFor=\"let formGroup of formArray.controls; let i = index\"\r\n >\r\n <ng-template\r\n *ngFor=\"let item of formGroup.controls | controlsList\"\r\n controlRender\r\n [control]=\"item\"\r\n ></ng-template>\r\n <div\r\n class=\"\r\n col-start-7 col-end-13\r\n md:col-start-13 md:col-end-16\r\n pb-5\r\n my-auto\r\n ml-auto\r\n md:m-auto\r\n \"\r\n >\r\n <button mat-flat-button color=\"warn\" (click)=\"removeItem(i)\">\r\n {{ settings.removeActionLabel || \"Remove\" }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}\n"] }]
57
+ }], ctorParameters: () => [], propDecorators: { formArray: [{
58
+ type: Input,
59
+ args: ['control']
60
+ }] } });
61
+ export class FormControlsRenderDirective {
62
+ set controlSetter(control) {
63
+ this.viewContainer.clear();
64
+ const component = this.componentsBuffer[control.type];
65
+ if (component) {
66
+ const componentRef = this.viewContainer.createComponent(component);
67
+ componentRef.instance.control = control;
68
+ }
69
+ }
70
+ constructor(viewContainer) {
71
+ this.viewContainer = viewContainer;
72
+ this.componentsBuffer = {
73
+ [EControlTypes.autocomplete]: SpecialAutocompleteComponent,
74
+ [EControlTypes.checkbox]: SpecialCheckboxComponent,
75
+ [EControlTypes.date]: SpecialDatepickerComponent,
76
+ [EControlTypes.dropdown]: SpecialDropdownComponent,
77
+ [EControlTypes.array]: SpecialArrayComponent,
78
+ [EControlTypes.input]: SpecialInputComponent,
79
+ [EControlTypes.multiple]: SpecialMultipleAutocompleteComponent,
80
+ [EControlTypes.textArea]: SpecialTextAreaComponent,
81
+ [EControlTypes.label]: SpecialLabelComponent,
82
+ [EControlTypes.upload]: SpecialUploadComponent,
83
+ [EControlTypes.form]: SpecialFormComponent,
84
+ [EControlTypes.richText]: SpecialRichtextComponent,
85
+ };
86
+ }
87
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormControlsRenderDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
88
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.0", type: FormControlsRenderDirective, selector: "[controlRender]", inputs: { controlSetter: ["control", "controlSetter"] }, ngImport: i0 }); }
89
+ }
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormControlsRenderDirective, decorators: [{
91
+ type: Directive,
92
+ args: [{
93
+ selector: `[controlRender]`,
94
+ }]
95
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { controlSetter: [{
96
+ type: Input,
97
+ args: ['control']
98
+ }] } });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWNpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NwZWNpYWwtZm9ybS9zcGVjaWFsLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlY2lhbC1mb3Jtcy9zcmMvbGliL2NvbXBvbmVudHMvc3BlY2lhbC1mb3JtL3NwZWNpYWwtZm9ybS5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWNpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NwZWNpYWwtZm9ybS9zcGVjaWFsLWZvcm0tYXJyYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBTXZFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSx3QkFBd0IsRUFB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LG9CQUFvQjtZQUMxQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSx3QkFBd0I7U0FDbkQsQ0FBQztJQVVvRCxDQUFDOzhHQXhCNUMsMkJBQTJCO2tHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBSHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7cUZBZ0J1QixhQUFhO3NCQUFsQyxLQUFLO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIERpcmVjdGl2ZSxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRUNvbnRyb2xUeXBlcyB9IGZyb20gJy4uLy4uL2NvcmUvYXV4LWRhdGEvY29udHJvbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHtcclxuICBTcGVjaWFsRm9ybUdyb3VwLFxyXG4gIFNwZWNpYWxGb3JtQ29udHJvbCxcclxuICBTcGVjaWFsRm9ybUFycmF5XHJcbn0gZnJvbSAnLi4vLi4vY29yZS9mb3Jtcy9zcGVjaWFsLWZvcm1zJztcclxuaW1wb3J0IHsgU3BlY2lhbEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uL3NwZWNpYWwtYXV0b2NvbXBsZXRlL3NwZWNpYWwtYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwZWNpYWxDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL3NwZWNpYWwtY2hlY2tib3gvc3BlY2lhbC1jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGVjaWFsRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL3NwZWNpYWwtZGF0ZXBpY2tlci9zcGVjaWFsLWRhdGVwaWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BlY2lhbERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vc3BlY2lhbC1kcm9wZG93bi9zcGVjaWFsLWRyb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwZWNpYWxJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL3NwZWNpYWwtaW5wdXQvc3BlY2lhbC1pbnB1dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGVjaWFsTGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi9zcGVjaWFsLWxhYmVsL3NwZWNpYWwtbGFiZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BlY2lhbE11bHRpcGxlQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vc3BlY2lhbC1tdWx0aXBsZS1hdXRvY29tcGxldGUvc3BlY2lhbC1tdWx0aXBsZS1hdXRvY29tcGxldGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BlY2lhbFJpY2h0ZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vc3BlY2lhbC1yaWNodGV4dC9zcGVjaWFsLXJpY2h0ZXh0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwZWNpYWxUZXh0QXJlYUNvbXBvbmVudCB9IGZyb20gJy4uL3NwZWNpYWwtdGV4dC1hcmVhL3NwZWNpYWwtdGV4dC1hcmVhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwZWNpYWxVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi9zcGVjaWFsLXVwbG9hZC9zcGVjaWFsLXVwbG9hZC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcC1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3BlY2lhbC1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zcGVjaWFsLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwZWNpYWxGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoJ2NvbnRyb2wnKSBmb3JtOiBTcGVjaWFsRm9ybUdyb3VwO1xyXG4gIHNldCBjb250cm9sKGZvcm06IFNwZWNpYWxGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm07XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge31cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcC1hcnJheScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NwZWNpYWwtZm9ybS1hcnJheS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc3BlY2lhbC1mb3JtLWFycmF5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGVjaWFsQXJyYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgnY29udHJvbCcpIGZvcm1BcnJheTogYW55O1xyXG5cclxuICBzZXQgY29udHJvbChmb3JtQXJyYXk6IGFueSkge1xyXG4gICAgdGhpcy5mb3JtQXJyYXkgPSBmb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgd2l0aEZvcm1IZWFkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXkuc2V0dGluZ3Mud2l0aEZvcm1IZWFkZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgc2V0dGluZ3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXkuc2V0dGluZ3M7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgcmVtb3ZlSXRlbShpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgfVxyXG4gIGFkZEl0ZW0oKSB7XHJcbiAgICB0aGlzLmZvcm1BcnJheS5hZGRJdGVtKCk7XHJcbiAgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogYFtjb250cm9sUmVuZGVyXWAsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ29udHJvbHNSZW5kZXJEaXJlY3RpdmUge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50c0J1ZmZlciA9IHtcclxuICAgIFtFQ29udHJvbFR5cGVzLmF1dG9jb21wbGV0ZV06IFNwZWNpYWxBdXRvY29tcGxldGVDb21wb25lbnQsXHJcbiAgICBbRUNvbnRyb2xUeXBlcy5jaGVja2JveF06IFNwZWNpYWxDaGVja2JveENvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLmRhdGVdOiBTcGVjaWFsRGF0ZXBpY2tlckNvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLmRyb3Bkb3duXTogU3BlY2lhbERyb3Bkb3duQ29tcG9uZW50LFxyXG4gICAgW0VDb250cm9sVHlwZXMuYXJyYXldOiBTcGVjaWFsQXJyYXlDb21wb25lbnQsXHJcbiAgICBbRUNvbnRyb2xUeXBlcy5pbnB1dF06IFNwZWNpYWxJbnB1dENvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLm11bHRpcGxlXTogU3BlY2lhbE11bHRpcGxlQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxyXG4gICAgW0VDb250cm9sVHlwZXMudGV4dEFyZWFdOiBTcGVjaWFsVGV4dEFyZWFDb21wb25lbnQsXHJcbiAgICBbRUNvbnRyb2xUeXBlcy5sYWJlbF06IFNwZWNpYWxMYWJlbENvbXBvbmVudCxcclxuICAgIFtFQ29udHJvbFR5cGVzLnVwbG9hZF06IFNwZWNpYWxVcGxvYWRDb21wb25lbnQsXHJcbiAgICBbRUNvbnRyb2xUeXBlcy5mb3JtXTogU3BlY2lhbEZvcm1Db21wb25lbnQsXHJcbiAgICBbRUNvbnRyb2xUeXBlcy5yaWNoVGV4dF06IFNwZWNpYWxSaWNodGV4dENvbXBvbmVudCxcclxuICB9O1xyXG4gIEBJbnB1dCgnY29udHJvbCcpIHNldCBjb250cm9sU2V0dGVyKGNvbnRyb2w6IFNwZWNpYWxGb3JtQ29udHJvbDxhbnk+KSB7XHJcbiAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgIGNvbnN0IGNvbXBvbmVudCA9ICh0aGlzLmNvbXBvbmVudHNCdWZmZXIgYXMgYW55KVtjb250cm9sLnR5cGVdO1xyXG4gICAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCk7XHJcbiAgICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS5jb250cm9sID0gY29udHJvbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZikge31cclxufVxyXG4iLCI8ZGl2XHJcbiAgKm5nSWY9XCJmb3JtICYmICFmb3JtLmhpZGRlblwiXHJcbiAgW2lkXT1cImZvcm0uZWxlbWVudElkXCJcclxuICBjbGFzcz1cInNwZWNpYWwtZm9ybSB3LWZ1bGwgYm94LWJvcmRlciBwLTIge3sgZm9ybS5zdHlsZUNsYXNzZXMgfX1cIlxyXG4+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJmb3JtXCJcclxuICAgIFtjbGFzc109XCJcclxuICAgICAgZm9ybS5sYWJlbFxyXG4gICAgICAgID8gJ3ctZnVsbCBtdC0yIHAtMyBib3JkZXItc2xhdGUtMjAwIGJvcmRlciBib3JkZXItc29saWQgYm94LWJvcmRlcidcclxuICAgICAgICA6ICdjb250YWluZXInXHJcbiAgICBcIlxyXG4gID5cclxuICAgIDxoMSAqbmdJZj1cIiEhZm9ybS5sYWJlbFwiIGNsYXNzPVwiZm9udC1ib2xkIHB5LTNcIj57eyBmb3JtLmxhYmVsIH19PC9oMT5cclxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBmbGV4LXdyYXBcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbnRyb2wgb2YgZm9ybS5jb250cm9scyB8IGNvbnRyb2xzTGlzdFwiXHJcbiAgICAgICAgY29udHJvbFJlbmRlclxyXG4gICAgICAgIFtjb250cm9sXT1cImNvbnRyb2xcIlxyXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIiwiPGRpdlxyXG4gICpuZ0lmPVwiZm9ybUFycmF5ICYmICFmb3JtQXJyYXkuaGlkZGVuXCJcclxuICBbaWRdPVwiZm9ybUFycmF5LmVsZW1lbnRJZFwiXHJcbiAgY2xhc3M9XCJzcGVjaWFsLWZvcm0tYXJyYXkgdy1mdWxsIGJveC1ib3JkZXIgcC0yIHt7IGZvcm1BcnJheS5zdHlsZUNsYXNzZXMgfX1cIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cInctZnVsbCBtdC0yIHAtMyBib3JkZXItc2xhdGUtMjAwIGJvcmRlciBib3JkZXItc29saWQgYm94LWJvcmRlclwiPlxyXG4gICAgPGgxICpuZ0lmPVwiISFmb3JtQXJyYXkubGFiZWxcIiBjbGFzcz1cImZvbnQtYm9sZCBweS0zXCI+XHJcbiAgICAgIHt7IGZvcm1BcnJheS5sYWJlbCB9fVxyXG4gICAgPC9oMT5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXZpZGUteSBkaXZpZGUteC0wIGRpdmlkZS1zb2xpZCBkaXZpZGUtc2xhdGUtMjAwXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cImZvcm1BcnJheS5mb3JtXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7ICdtZDpncmlkLWNvbHMtMTUnOiBzZXR0aW5ncy53aXRoQWN0aW9uQnV0dG9ucyB9XCJcclxuICAgICAgICBjbGFzcz1cImdyaWQgZ2FwLTQgZ3JpZC1jb2xzLTEyXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhd2l0aEZvcm1IZWFkZXI7IGVsc2UgRk9STUhFQURFUlJFRlwiPlxyXG4gICAgICAgICAgPGgyXHJcbiAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLnN0eWxlQ2xhc3Nlc1wiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZvcm1BcnJheS5mb3JtLmNvbnRyb2xzIHwgY29udHJvbHNMaXN0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICAgICAgPC9oMj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nSWY9XCJzZXR0aW5ncy53aXRoQWN0aW9uQnV0dG9uc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiXHJcbiAgICAgICAgICAgICAgY29sLXN0YXJ0LTcgY29sLWVuZC0xM1xyXG4gICAgICAgICAgICAgIG1kOmNvbC1zdGFydC0xMyBtZDpjb2wtZW5kLTE2XHJcbiAgICAgICAgICAgICAgcGItNVxyXG4gICAgICAgICAgICAgIG15LWF1dG9cclxuICAgICAgICAgICAgICBtbC1hdXRvXHJcbiAgICAgICAgICAgICAgbWQ6bS1hdXRvXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNGT1JNSEVBREVSUkVGPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZvcm1BcnJheS5mb3JtLmNvbnRyb2xzIHwgY29udHJvbHNMaXN0XCJcclxuICAgICAgICAgICAgY29udHJvbFJlbmRlclxyXG4gICAgICAgICAgICBbY29udHJvbF09XCJpdGVtXCJcclxuICAgICAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cInNldHRpbmdzLndpdGhBY3Rpb25CdXR0b25zXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgICAgICBjb2wtc3RhcnQtNyBjb2wtZW5kLTEzXHJcbiAgICAgICAgICAgICAgbWQ6Y29sLXN0YXJ0LTEzIG1kOmNvbC1lbmQtMTZcclxuICAgICAgICAgICAgICBwYi01XHJcbiAgICAgICAgICAgICAgbXktYXV0b1xyXG4gICAgICAgICAgICAgIG1sLWF1dG9cclxuICAgICAgICAgICAgICBtZDptLWF1dG9cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1BcnJheS5mb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRJdGVtKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3tzZXR0aW5ncy5hZGRBY3Rpb25MYWJlbCB8fCAnQWRkJ319XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInctZnVsbCBwdC01IGdyaWQgZ2FwLTQgZ3JpZC1jb2xzLTEyIG1kOmdyaWQtY29scy0xNVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGZvcm1Hcm91cCBvZiBmb3JtQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb3JtR3JvdXAuY29udHJvbHMgfCBjb250cm9sc0xpc3RcIlxyXG4gICAgICAgICAgY29udHJvbFJlbmRlclxyXG4gICAgICAgICAgW2NvbnRyb2xdPVwiaXRlbVwiXHJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgICAgY29sLXN0YXJ0LTcgY29sLWVuZC0xM1xyXG4gICAgICAgICAgICBtZDpjb2wtc3RhcnQtMTMgbWQ6Y29sLWVuZC0xNlxyXG4gICAgICAgICAgICBwYi01XHJcbiAgICAgICAgICAgIG15LWF1dG9cclxuICAgICAgICAgICAgbWwtYXV0b1xyXG4gICAgICAgICAgICBtZDptLWF1dG9cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJ3YXJuXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaSlcIj5cclxuICAgICAgICAgICAge3sgc2V0dGluZ3MucmVtb3ZlQWN0aW9uTGFiZWwgfHwgXCJSZW1vdmVcIiB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=