@lenne.tech/ng-base 14.21.2 → 14.21.3

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 (37) hide show
  1. package/base-components/components/checkbox/checkbox.component.d.ts +2 -1
  2. package/base-components/components/input/input.component.d.ts +2 -1
  3. package/base-components/components/model-form/model-form.component.d.ts +4 -1
  4. package/base-components/components/model-form-sub/model-form-sub.component.d.ts +4 -1
  5. package/base-components/components/refence-input/refence-input.component.d.ts +2 -1
  6. package/base-components/components/select/select.component.d.ts +2 -1
  7. package/base-components/components/tags/tags.component.d.ts +2 -1
  8. package/base-components/components/textarea/textarea.component.d.ts +2 -1
  9. package/base-components/components/upload-image/upload-image.component.d.ts +2 -1
  10. package/esm2020/base-components/components/change-password/change-password.component.mjs +1 -1
  11. package/esm2020/base-components/components/checkbox/checkbox.component.mjs +6 -3
  12. package/esm2020/base-components/components/input/input.component.mjs +6 -3
  13. package/esm2020/base-components/components/model-form/model-form.component.mjs +41 -17
  14. package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +13 -3
  15. package/esm2020/base-components/components/refence-input/refence-input.component.mjs +6 -3
  16. package/esm2020/base-components/components/select/select.component.mjs +6 -3
  17. package/esm2020/base-components/components/tags/tags.component.mjs +6 -3
  18. package/esm2020/base-components/components/textarea/textarea.component.mjs +6 -3
  19. package/esm2020/base-components/components/upload-image/upload-image.component.mjs +15 -5
  20. package/esm2020/base-prototype/pages/forgot-password/forgot-password.component.mjs +1 -1
  21. package/esm2020/base-prototype/pages/login/login.component.mjs +1 -1
  22. package/esm2020/base-prototype/pages/register/register.component.mjs +1 -1
  23. package/esm2020/base-prototype/pages/set-password/set-password.component.mjs +1 -1
  24. package/esm2020/shared/services/forms.service.mjs +7 -4
  25. package/fesm2015/lenne.tech-ng-base-base-components.mjs +98 -35
  26. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
  27. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +4 -4
  28. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  29. package/fesm2015/lenne.tech-ng-base-shared.mjs +6 -3
  30. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
  31. package/fesm2020/lenne.tech-ng-base-base-components.mjs +97 -35
  32. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
  33. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs +4 -4
  34. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  35. package/fesm2020/lenne.tech-ng-base-shared.mjs +6 -3
  36. package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
  37. package/package.json +1 -1
@@ -6,6 +6,7 @@ export declare class CheckboxComponent {
6
6
  value: string | number;
7
7
  control: any;
8
8
  required: boolean;
9
+ objectPath: string;
9
10
  static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
10
- static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "base-checkbox", never, { "id": "id"; "name": "name"; "label": "label"; "value": "value"; "control": "control"; "required": "required"; }, {}, never, ["*"], false>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "base-checkbox", never, { "id": "id"; "name": "name"; "label": "label"; "value": "value"; "control": "control"; "required": "required"; "objectPath": "objectPath"; }, {}, never, ["*"], false>;
11
12
  }
@@ -11,6 +11,7 @@ export declare class InputComponent {
11
11
  type: string;
12
12
  required: boolean;
13
13
  eyeButton: boolean;
14
+ objectPath: string;
14
15
  enter: EventEmitter<any>;
15
16
  /**
16
17
  * If the control has a value, emit the enter event
@@ -21,5 +22,5 @@ export declare class InputComponent {
21
22
  */
22
23
  togglePasswordType(): void;
23
24
  static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
24
- static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "base-input", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "autocomplete": "autocomplete"; "tabIndex": "tabIndex"; "control": "control"; "type": "type"; "required": "required"; "eyeButton": "eyeButton"; }, { "enter": "enter"; }, never, never, false>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "base-input", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "autocomplete": "autocomplete"; "tabIndex": "tabIndex"; "control": "control"; "type": "type"; "required": "required"; "eyeButton": "eyeButton"; "objectPath": "objectPath"; }, { "enter": "enter"; }, never, never, false>;
25
26
  }
@@ -70,8 +70,9 @@ export declare class ModelFormComponent implements OnInit, OnChanges {
70
70
  * It takes a collection of GraphQL types and creates a form group with a form control for each type
71
71
  *
72
72
  * @param fields - IGraphQLTypeCollection
73
+ * @param parents
73
74
  */
74
- createForm(fields: IGraphQLTypeCollection): UntypedFormGroup;
75
+ createForm(fields: IGraphQLTypeCollection, parents?: any[]): UntypedFormGroup;
75
76
  /**
76
77
  * Process form validators for control
77
78
  */
@@ -123,8 +124,10 @@ export declare class ModelFormComponent implements OnInit, OnChanges {
123
124
  processFileChanges(event: {
124
125
  field: string;
125
126
  file: File | null;
127
+ base64: string | null;
126
128
  }): void;
127
129
  private formatDate;
130
+ private nestedObject;
128
131
  static ɵfac: i0.ɵɵFactoryDeclaration<ModelFormComponent, never>;
129
132
  static ɵcmp: i0.ɵɵComponentDeclaration<ModelFormComponent, "base-model-form", never, { "modelName": "modelName"; "label": "label"; "id": "id"; "delete": "delete"; "onlyUpdateMode": "onlyUpdateMode"; "duplicate": "duplicate"; "logging": "logging"; "config": "config"; "showFavButton": "showFavButton"; }, { "finished": "finished"; }, never, never, false>;
130
133
  }
@@ -5,6 +5,7 @@ import * as i0 from "@angular/core";
5
5
  export declare class ModelFormSubComponent implements OnInit {
6
6
  private authService;
7
7
  id: string;
8
+ parentKey: string;
8
9
  fields: Record<string, GraphQLType>;
9
10
  form: any;
10
11
  config: {
@@ -14,9 +15,11 @@ export declare class ModelFormSubComponent implements OnInit {
14
15
  fileChanged: EventEmitter<{
15
16
  field: string;
16
17
  file: File | null;
18
+ base64: string | null;
17
19
  }>;
18
20
  keys: string[];
19
21
  user: BasicUser;
22
+ objectPath: string;
20
23
  constructor(authService: AuthService);
21
24
  ngOnInit(): void;
22
25
  /**
@@ -49,5 +52,5 @@ export declare class ModelFormSubComponent implements OnInit {
49
52
  */
50
53
  transformToControl(control: AbstractControl | null | undefined): UntypedFormControl;
51
54
  static ɵfac: i0.ɵɵFactoryDeclaration<ModelFormSubComponent, never>;
52
- static ɵcmp: i0.ɵɵComponentDeclaration<ModelFormSubComponent, "base-model-form-sub", never, { "id": "id"; "fields": "fields"; "form": "form"; "config": "config"; }, { "imageChanged": "imageChanged"; "fileChanged": "fileChanged"; }, never, never, false>;
55
+ static ɵcmp: i0.ɵɵComponentDeclaration<ModelFormSubComponent, "base-model-form-sub", never, { "id": "id"; "parentKey": "parentKey"; "fields": "fields"; "form": "form"; "config": "config"; }, { "imageChanged": "imageChanged"; "fileChanged": "fileChanged"; }, never, never, false>;
53
56
  }
@@ -19,6 +19,7 @@ export declare class RefenceInputComponent implements OnInit, OnDestroy {
19
19
  method: string;
20
20
  fields: string[];
21
21
  valueField: string;
22
+ objectPath: string;
22
23
  nameField: string[] | string;
23
24
  objects: any[];
24
25
  currentValue: any;
@@ -71,5 +72,5 @@ export declare class RefenceInputComponent implements OnInit, OnDestroy {
71
72
  */
72
73
  checkForNameFields(object: any): any;
73
74
  static ɵfac: i0.ɵɵFactoryDeclaration<RefenceInputComponent, never>;
74
- static ɵcmp: i0.ɵɵComponentDeclaration<RefenceInputComponent, "base-refence-input", never, { "id": "id"; "name": "name"; "label": "label"; "isList": "isList"; "search": "search"; "useParamAsArg": "useParamAsArg"; "param": "param"; "placeholder": "placeholder"; "autocomplete": "autocomplete"; "tabIndex": "tabIndex"; "control": "control"; "required": "required"; "method": "method"; "fields": "fields"; "valueField": "valueField"; "nameField": "nameField"; }, {}, never, never, false>;
75
+ static ɵcmp: i0.ɵɵComponentDeclaration<RefenceInputComponent, "base-refence-input", never, { "id": "id"; "name": "name"; "label": "label"; "isList": "isList"; "search": "search"; "useParamAsArg": "useParamAsArg"; "param": "param"; "placeholder": "placeholder"; "autocomplete": "autocomplete"; "tabIndex": "tabIndex"; "control": "control"; "required": "required"; "method": "method"; "fields": "fields"; "valueField": "valueField"; "objectPath": "objectPath"; "nameField": "nameField"; }, {}, never, never, false>;
75
76
  }
@@ -10,6 +10,7 @@ export declare class SelectComponent implements OnInit {
10
10
  name: string;
11
11
  label?: string;
12
12
  placeholder?: string;
13
+ objectPath: string;
13
14
  control: any;
14
15
  tabIndex?: number;
15
16
  required: boolean;
@@ -18,6 +19,6 @@ export declare class SelectComponent implements OnInit {
18
19
  options: Option[];
19
20
  ngOnInit(): void;
20
21
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectComponent, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "base-select", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "control": "control"; "tabIndex": "tabIndex"; "required": "required"; "multiple": "multiple"; "search": "search"; "options": "options"; }, {}, never, never, false>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "base-select", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "objectPath": "objectPath"; "control": "control"; "tabIndex": "tabIndex"; "required": "required"; "multiple": "multiple"; "search": "search"; "options": "options"; }, {}, never, never, false>;
22
23
  }
23
24
  export {};
@@ -14,6 +14,7 @@ export declare class TagsComponent {
14
14
  custom: boolean;
15
15
  removeByKey: boolean;
16
16
  required: boolean;
17
+ objectPath: string;
17
18
  inputValue: string;
18
19
  selectedElement: HTMLElement;
19
20
  /**
@@ -52,5 +53,5 @@ export declare class TagsComponent {
52
53
  */
53
54
  onFocus(event?: any): void;
54
55
  static ɵfac: i0.ɵɵFactoryDeclaration<TagsComponent, never>;
55
- static ɵcmp: i0.ɵɵComponentDeclaration<TagsComponent, "base-tags", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "autocomplete": "autocomplete"; "tabIndex": "tabIndex"; "control": "control"; "options": "options"; "custom": "custom"; "removeByKey": "removeByKey"; "required": "required"; }, {}, never, never, false>;
56
+ static ɵcmp: i0.ɵɵComponentDeclaration<TagsComponent, "base-tags", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "autocomplete": "autocomplete"; "tabIndex": "tabIndex"; "control": "control"; "options": "options"; "custom": "custom"; "removeByKey": "removeByKey"; "required": "required"; "objectPath": "objectPath"; }, {}, never, never, false>;
56
57
  }
@@ -8,6 +8,7 @@ export declare class TextareaComponent {
8
8
  rows: number;
9
9
  required: boolean;
10
10
  tabIndex?: number;
11
+ objectPath: string;
11
12
  static ɵfac: i0.ɵɵFactoryDeclaration<TextareaComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<TextareaComponent, "base-textarea", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "control": "control"; "rows": "rows"; "required": "required"; "tabIndex": "tabIndex"; }, {}, never, never, false>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextareaComponent, "base-textarea", never, { "id": "id"; "name": "name"; "label": "label"; "placeholder": "placeholder"; "control": "control"; "rows": "rows"; "required": "required"; "tabIndex": "tabIndex"; "objectPath": "objectPath"; }, {}, never, never, false>;
13
14
  }
@@ -25,6 +25,7 @@ export declare class UploadImageComponent {
25
25
  compressOptions: CompressOptions;
26
26
  maxSize: number;
27
27
  uploadDirectly: boolean;
28
+ objectPath: string;
28
29
  imageUploaded: EventEmitter<any>;
29
30
  imageDeleted: EventEmitter<any>;
30
31
  fileChanged: EventEmitter<{
@@ -90,5 +91,5 @@ export declare class UploadImageComponent {
90
91
  */
91
92
  protected getBase64(file: any): Promise<string>;
92
93
  static ɵfac: i0.ɵɵFactoryDeclaration<UploadImageComponent, never>;
93
- static ɵcmp: i0.ɵɵComponentDeclaration<UploadImageComponent, "base-upload-image", never, { "id": "id"; "name": "name"; "label": "label"; "supportText": "supportText"; "required": "required"; "defaultDragText": "defaultDragText"; "defaultReleaseText": "defaultReleaseText"; "preButtonText": "preButtonText"; "buttonText": "buttonText"; "validExtensions": "validExtensions"; "control": "control"; "url": "url"; "uploadPath": "uploadPath"; "deletePath": "deletePath"; "path": "path"; "compressOptions": "compressOptions"; "maxSize": "maxSize"; "uploadDirectly": "uploadDirectly"; }, { "imageUploaded": "imageUploaded"; "imageDeleted": "imageDeleted"; "fileChanged": "fileChanged"; }, never, never, false>;
94
+ static ɵcmp: i0.ɵɵComponentDeclaration<UploadImageComponent, "base-upload-image", never, { "id": "id"; "name": "name"; "label": "label"; "supportText": "supportText"; "required": "required"; "defaultDragText": "defaultDragText"; "defaultReleaseText": "defaultReleaseText"; "preButtonText": "preButtonText"; "buttonText": "buttonText"; "validExtensions": "validExtensions"; "control": "control"; "url": "url"; "uploadPath": "uploadPath"; "deletePath": "deletePath"; "path": "path"; "compressOptions": "compressOptions"; "maxSize": "maxSize"; "uploadDirectly": "uploadDirectly"; "objectPath": "objectPath"; }, { "imageUploaded": "imageUploaded"; "imageDeleted": "imageDeleted"; "fileChanged": "fileChanged"; }, never, never, false>;
94
95
  }
@@ -82,7 +82,7 @@ export class ChangePasswordComponent {
82
82
  }
83
83
  }
84
84
  ChangePasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ChangePasswordComponent, deps: [{ token: i1.FormsService }, { token: i1.UserService }, { token: i1.AuthService }, { token: i1.ToastService }], target: i0.ɵɵFactoryTarget.Component });
85
- ChangePasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ChangePasswordComponent, selector: "base-change-password", ngImport: i0, template: "<h3>Passwort \u00E4ndern</h3>\n\n<form [formGroup]=\"form\">\n <base-input\n [id]=\"'Aktuelles Passwort'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('current')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [label]=\"'Neues Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Neues Passwort best\u00E4tigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"3\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-flex justify-content-end\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Passwort \u00E4ndern</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</form>\n", styles: [""], dependencies: [{ 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"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.InputComponent, selector: "base-input", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "type", "required", "eyeButton"], outputs: ["enter"] }] });
85
+ ChangePasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ChangePasswordComponent, selector: "base-change-password", ngImport: i0, template: "<h3>Passwort \u00E4ndern</h3>\n\n<form [formGroup]=\"form\">\n <base-input\n [id]=\"'Aktuelles Passwort'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('current')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [label]=\"'Neues Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Neues Passwort best\u00E4tigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"3\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-flex justify-content-end\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Passwort \u00E4ndern</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</form>\n", styles: [""], dependencies: [{ 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"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.InputComponent, selector: "base-input", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "type", "required", "eyeButton", "objectPath"], outputs: ["enter"] }] });
86
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ChangePasswordComponent, decorators: [{
87
87
  type: Component,
88
88
  args: [{ selector: 'base-change-password', template: "<h3>Passwort \u00E4ndern</h3>\n\n<form [formGroup]=\"form\">\n <base-input\n [id]=\"'Aktuelles Passwort'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('current')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [label]=\"'Neues Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Neues Passwort best\u00E4tigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"3\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-flex justify-content-end\">\n <div>\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Passwort \u00E4ndern</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </div>\n</form>\n" }]
@@ -5,13 +5,14 @@ import * as i2 from "@angular/common";
5
5
  export class CheckboxComponent {
6
6
  constructor() {
7
7
  this.required = false;
8
+ this.objectPath = '';
8
9
  }
9
10
  }
10
11
  CheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
- CheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: CheckboxComponent, selector: "base-checkbox", inputs: { id: "id", name: "name", label: "label", value: "value", control: "control", required: "required" }, ngImport: i0, template: "<div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [required]=\"required\"\n [value]=\"value\"\n [id]=\"id\"\n [name]=\"name\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n />\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">\n <ng-container *ngIf=\"label\">\n {{ label }}\n </ng-container>\n <ng-content></ng-content>\n </label>\n\n <div class=\"invalid-feedback ms-0 m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n", styles: [".required:after{content:\" *\"}\n"], dependencies: [{ kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12
+ CheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: CheckboxComponent, selector: "base-checkbox", inputs: { id: "id", name: "name", label: "label", value: "value", control: "control", required: "required", objectPath: "objectPath" }, ngImport: i0, template: "<div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [required]=\"required\"\n [value]=\"value\"\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n />\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">\n <ng-container *ngIf=\"label\">\n {{ label }}\n </ng-container>\n <ng-content></ng-content>\n </label>\n\n <div class=\"invalid-feedback ms-0 m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n", styles: [".required:after{content:\" *\"}\n"], dependencies: [{ kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12
13
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: CheckboxComponent, decorators: [{
13
14
  type: Component,
14
- args: [{ selector: 'base-checkbox', template: "<div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [required]=\"required\"\n [value]=\"value\"\n [id]=\"id\"\n [name]=\"name\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n />\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">\n <ng-container *ngIf=\"label\">\n {{ label }}\n </ng-container>\n <ng-content></ng-content>\n </label>\n\n <div class=\"invalid-feedback ms-0 m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n", styles: [".required:after{content:\" *\"}\n"] }]
15
+ args: [{ selector: 'base-checkbox', template: "<div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [required]=\"required\"\n [value]=\"value\"\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n />\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\">\n <ng-container *ngIf=\"label\">\n {{ label }}\n </ng-container>\n <ng-content></ng-content>\n </label>\n\n <div class=\"invalid-feedback ms-0 m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n </div>\n</div>\n", styles: [".required:after{content:\" *\"}\n"] }]
15
16
  }], propDecorators: { id: [{
16
17
  type: Input
17
18
  }], name: [{
@@ -24,5 +25,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
24
25
  type: Input
25
26
  }], required: [{
26
27
  type: Input
28
+ }], objectPath: [{
29
+ type: Input
27
30
  }] } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBT2pELE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFXVyxhQUFRLEdBQUcsS0FBSyxDQUFDO0tBQzNCOzs4R0FQWSxpQkFBaUI7a0dBQWpCLGlCQUFpQixtS0NQOUIsOHNCQXNCQTsyRkRmYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsZUFBZTs4QkFLaEIsRUFBRTtzQkFBVixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiYXNlLWNoZWNrYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tib3guY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDb21wb25lbnQge1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuICBASW5wdXQoKSBjb250cm9sOiBhbnk7XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICA8aW5wdXRcbiAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbaWRdPVwiaWRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LnRvdWNoZWQgfVwiXG4gIC8+XG4gIDxsYWJlbCBbZm9yXT1cImlkXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW25nQ2xhc3NdPVwieyByZXF1aXJlZDogcmVxdWlyZWQgfVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbFwiPlxuICAgICAge3sgbGFiZWwgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvbGFiZWw+XG5cbiAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2sgbXMtMCBtLTJcIiAqbmdJZj1cImNvbnRyb2w/LmludmFsaWQgJiYgKGNvbnRyb2w/LmRpcnR5IHx8IGNvbnRyb2w/LnRvdWNoZWQpXCI+XG4gICAgPGRpdiAqbmdJZj1cImNvbnRyb2w/LmVycm9ycz8uWydyZXF1aXJlZCddXCI+RGllc2VzIEZlbGQgaXN0IGVpbiBQZmxpY2h0ZmVsZC48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBT2pELE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFXVyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxFQUFFLENBQUM7S0FDMUI7OzhHQVJZLGlCQUFpQjtrR0FBakIsaUJBQWlCLDZMQ1A5QixtdkJBc0JBOzJGRGZhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1jaGVja2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrYm94LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrYm94Q29tcG9uZW50IHtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgQElucHV0KCkgY29udHJvbDogYW55O1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBvYmplY3RQYXRoID0gJyc7XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICA8aW5wdXRcbiAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbaWRdPVwib2JqZWN0UGF0aCA/IG9iamVjdFBhdGggKyAnLicgKyBpZCA6IGlkXCJcbiAgICBbbmFtZV09XCJuYW1lXCJcbiAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogY29udHJvbD8uaW52YWxpZCAmJiBjb250cm9sPy50b3VjaGVkIH1cIlxuICAvPlxuICA8bGFiZWwgW2Zvcl09XCJpZFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiIFtuZ0NsYXNzXT1cInsgcmVxdWlyZWQ6IHJlcXVpcmVkIH1cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFiZWxcIj5cbiAgICAgIHt7IGxhYmVsIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2xhYmVsPlxuXG4gIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrIG1zLTAgbS0yXCIgKm5nSWY9XCJjb250cm9sPy5pbnZhbGlkICYmIChjb250cm9sPy5kaXJ0eSB8fCBjb250cm9sPy50b3VjaGVkKVwiPlxuICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPkRpZXNlcyBGZWxkIGlzdCBlaW4gUGZsaWNodGZlbGQuPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -8,6 +8,7 @@ export class InputComponent {
8
8
  this.type = 'text';
9
9
  this.required = false;
10
10
  this.eyeButton = false;
11
+ this.objectPath = '';
11
12
  this.enter = new EventEmitter();
12
13
  }
13
14
  /**
@@ -31,10 +32,10 @@ export class InputComponent {
31
32
  }
32
33
  }
33
34
  InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
- InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: InputComponent, selector: "base-input", inputs: { id: "id", name: "name", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", tabIndex: "tabIndex", control: "control", type: "type", required: "required", eyeButton: "eyeButton" }, outputs: { enter: "enter" }, ngImport: i0, template: "<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <div class=\"input-group\">\n <input\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-control\"\n [type]=\"type\"\n [formControl]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (keyup.enter)=\"enterEvent()\"\n [attr.aria-describedby]=\"id + 'eye-button'\"\n />\n <button\n class=\"btn btn-outline-primary\"\n type=\"button\"\n [id]=\"id + 'eye-button'\"\n (click)=\"togglePasswordType()\"\n *ngIf=\"eyeButton\"\n >\n <i class=\"bi bi-eye\" *ngIf=\"type === 'password'\"></i>\n <i class=\"bi bi-eye-slash\" *ngIf=\"type === 'text'\"></i>\n </button>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestl\u00E4nge f\u00FCr dieses Feld betr\u00E4gt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale L\u00E4nge f\u00FCr dieses Feld betr\u00E4gt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine g\u00FCltige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['pattern'] && type === 'tel'\">Bitte eine g\u00FCltige Telefonnummer angeben.</div>\n <div *ngIf=\"control?.errors?.['invalidEmail']\">Bitte eine g\u00FCltige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passw\u00F6rter m\u00FCssen \u00FCberein stimmen.</div>\n <div *ngIf=\"control?.errors?.['invalidSecurePassword']\">\n Das Passwort ist zu unsicher. Es muss mind. 8 Zeichen lang sein, ein Gro\u00DFbustabe, ein Kleinbuchstabe, eine Zahl\n und ein Sonderzeichen enthalten.\n </div>\n </div>\n </div>\n</div>\n", styles: [".required:after{content:\" *\"}.input-group>.btn{min-width:100px}button{height:100%}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
35
+ InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: InputComponent, selector: "base-input", inputs: { id: "id", name: "name", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", tabIndex: "tabIndex", control: "control", type: "type", required: "required", eyeButton: "eyeButton", objectPath: "objectPath" }, outputs: { enter: "enter" }, ngImport: i0, template: "<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <div class=\"input-group\">\n <input\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-control\"\n [type]=\"type\"\n [formControl]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (keyup.enter)=\"enterEvent()\"\n [attr.aria-describedby]=\"id + 'eye-button'\"\n />\n <button\n class=\"btn btn-outline-primary\"\n type=\"button\"\n [id]=\"id + 'eye-button'\"\n (click)=\"togglePasswordType()\"\n *ngIf=\"eyeButton\"\n >\n <i class=\"bi bi-eye\" *ngIf=\"type === 'password'\"></i>\n <i class=\"bi bi-eye-slash\" *ngIf=\"type === 'text'\"></i>\n </button>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestl\u00E4nge f\u00FCr dieses Feld betr\u00E4gt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale L\u00E4nge f\u00FCr dieses Feld betr\u00E4gt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine g\u00FCltige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['pattern'] && type === 'tel'\">Bitte eine g\u00FCltige Telefonnummer angeben.</div>\n <div *ngIf=\"control?.errors?.['invalidEmail']\">Bitte eine g\u00FCltige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passw\u00F6rter m\u00FCssen \u00FCberein stimmen.</div>\n <div *ngIf=\"control?.errors?.['invalidSecurePassword']\">\n Das Passwort ist zu unsicher. Es muss mind. 8 Zeichen lang sein, ein Gro\u00DFbustabe, ein Kleinbuchstabe, eine Zahl\n und ein Sonderzeichen enthalten.\n </div>\n </div>\n </div>\n</div>\n", styles: [".required:after{content:\" *\"}.input-group>.btn{min-width:100px}button{height:100%}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
35
36
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: InputComponent, decorators: [{
36
37
  type: Component,
37
- args: [{ selector: 'base-input', template: "<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <div class=\"input-group\">\n <input\n [id]=\"id\"\n [name]=\"name\"\n class=\"form-control\"\n [type]=\"type\"\n [formControl]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (keyup.enter)=\"enterEvent()\"\n [attr.aria-describedby]=\"id + 'eye-button'\"\n />\n <button\n class=\"btn btn-outline-primary\"\n type=\"button\"\n [id]=\"id + 'eye-button'\"\n (click)=\"togglePasswordType()\"\n *ngIf=\"eyeButton\"\n >\n <i class=\"bi bi-eye\" *ngIf=\"type === 'password'\"></i>\n <i class=\"bi bi-eye-slash\" *ngIf=\"type === 'text'\"></i>\n </button>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestl\u00E4nge f\u00FCr dieses Feld betr\u00E4gt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale L\u00E4nge f\u00FCr dieses Feld betr\u00E4gt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine g\u00FCltige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['pattern'] && type === 'tel'\">Bitte eine g\u00FCltige Telefonnummer angeben.</div>\n <div *ngIf=\"control?.errors?.['invalidEmail']\">Bitte eine g\u00FCltige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passw\u00F6rter m\u00FCssen \u00FCberein stimmen.</div>\n <div *ngIf=\"control?.errors?.['invalidSecurePassword']\">\n Das Passwort ist zu unsicher. Es muss mind. 8 Zeichen lang sein, ein Gro\u00DFbustabe, ein Kleinbuchstabe, eine Zahl\n und ein Sonderzeichen enthalten.\n </div>\n </div>\n </div>\n</div>\n", styles: [".required:after{content:\" *\"}.input-group>.btn{min-width:100px}button{height:100%}\n"] }]
38
+ args: [{ selector: 'base-input', template: "<div class=\"form-group mb-3\">\n <label [for]=\"id\" class=\"form-label\" [ngClass]=\"{ required: required }\" *ngIf=\"label\">{{ label }}</label>\n <div class=\"input-group\">\n <input\n [id]=\"objectPath ? objectPath + '.' + id : id\"\n [name]=\"name\"\n class=\"form-control\"\n [type]=\"type\"\n [formControl]=\"control\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [autocomplete]=\"autocomplete ?? null\"\n [tabIndex]=\"tabIndex ?? null\"\n [ngClass]=\"{ 'is-invalid': control?.invalid && control?.touched }\"\n (keyup.enter)=\"enterEvent()\"\n [attr.aria-describedby]=\"id + 'eye-button'\"\n />\n <button\n class=\"btn btn-outline-primary\"\n type=\"button\"\n [id]=\"id + 'eye-button'\"\n (click)=\"togglePasswordType()\"\n *ngIf=\"eyeButton\"\n >\n <i class=\"bi bi-eye\" *ngIf=\"type === 'password'\"></i>\n <i class=\"bi bi-eye-slash\" *ngIf=\"type === 'text'\"></i>\n </button>\n\n <div class=\"invalid-feedback m-2\" *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <div *ngIf=\"control?.errors?.['required']\">Dieses Feld ist ein Pflichtfeld.</div>\n <div *ngIf=\"control?.errors?.['minlength']\">\n Die Mindestl\u00E4nge f\u00FCr dieses Feld betr\u00E4gt\n {{control.errors?.['minlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['maxlength']\">\n Die maximale L\u00E4nge f\u00FCr dieses Feld betr\u00E4gt\n {{control.errors?.['maxlength']?.requiredLength}} Zeichen.\n </div>\n <div *ngIf=\"control?.errors?.['email']\">Bitte eine g\u00FCltige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['pattern'] && type === 'tel'\">Bitte eine g\u00FCltige Telefonnummer angeben.</div>\n <div *ngIf=\"control?.errors?.['invalidEmail']\">Bitte eine g\u00FCltige E-Mail Adresse angeben.</div>\n <div *ngIf=\"control?.errors?.['matching']\">Die Passw\u00F6rter m\u00FCssen \u00FCberein stimmen.</div>\n <div *ngIf=\"control?.errors?.['invalidSecurePassword']\">\n Das Passwort ist zu unsicher. Es muss mind. 8 Zeichen lang sein, ein Gro\u00DFbustabe, ein Kleinbuchstabe, eine Zahl\n und ein Sonderzeichen enthalten.\n </div>\n </div>\n </div>\n</div>\n", styles: [".required:after{content:\" *\"}.input-group>.btn{min-width:100px}button{height:100%}\n"] }]
38
39
  }], propDecorators: { id: [{
39
40
  type: Input
40
41
  }], name: [{
@@ -55,7 +56,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
55
56
  type: Input
56
57
  }], eyeButton: [{
57
58
  type: Input
59
+ }], objectPath: [{
60
+ type: Input
58
61
  }], enter: [{
59
62
  type: Output
60
63
  }] } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPdkUsTUFBTSxPQUFPLGNBQWM7SUFMM0I7UUFTVyxnQkFBVyxHQUFZLEVBQUUsQ0FBQztRQUkxQixTQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ2QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBcUJ0QztJQW5CQzs7T0FFRztJQUNILFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNwQjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7U0FDeEI7SUFDSCxDQUFDOzsyR0FoQ1UsY0FBYzsrRkFBZCxjQUFjLG1TQ1AzQiwyd0VBaURBOzJGRDFDYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFlBQVk7OEJBS2IsRUFBRTtzQkFBVixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlPzogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJJbmRleD86IG51bWJlcjtcbiAgQElucHV0KCkgY29udHJvbDogYW55O1xuICBASW5wdXQoKSB0eXBlID0gJ3RleHQnO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBleWVCdXR0b24gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgZW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlLCBlbWl0IHRoZSBlbnRlciBldmVudFxuICAgKi9cbiAgZW50ZXJFdmVudCgpIHtcbiAgICBpZiAodGhpcy5jb250cm9sPy52YWx1ZSkge1xuICAgICAgdGhpcy5lbnRlci5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaCBpbnB1dCB0eXBlXG4gICAqL1xuICB0b2dnbGVQYXNzd29yZFR5cGUoKSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgdGhpcy50eXBlID0gJ3RleHQnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnR5cGUgPSAncGFzc3dvcmQnO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItM1wiPlxuICA8bGFiZWwgW2Zvcl09XCJpZFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiIFtuZ0NsYXNzXT1cInsgcmVxdWlyZWQ6IHJlcXVpcmVkIH1cIiAqbmdJZj1cImxhYmVsXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICA8aW5wdXRcbiAgICAgIFtpZF09XCJpZFwiXG4gICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSA/PyBudWxsXCJcbiAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleCA/PyBudWxsXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LnRvdWNoZWQgfVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwiZW50ZXJFdmVudCgpXCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWQgKyAnZXllLWJ1dHRvbidcIlxuICAgIC8+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtpZF09XCJpZCArICdleWUtYnV0dG9uJ1wiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlUGFzc3dvcmRUeXBlKClcIlxuICAgICAgKm5nSWY9XCJleWVCdXR0b25cIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiYmkgYmktZXllXCIgKm5nSWY9XCJ0eXBlID09PSAncGFzc3dvcmQnXCI+PC9pPlxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS1leWUtc2xhc2hcIiAqbmdJZj1cInR5cGUgPT09ICd0ZXh0J1wiPjwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrIG0tMlwiICpuZ0lmPVwiY29udHJvbD8uaW52YWxpZCAmJiAoY29udHJvbD8uZGlydHkgfHwgY29udHJvbD8udG91Y2hlZClcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPkRpZXNlcyBGZWxkIGlzdCBlaW4gUGZsaWNodGZlbGQuPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29udHJvbD8uZXJyb3JzPy5bJ21pbmxlbmd0aCddXCI+XG4gICAgICAgIERpZSBNaW5kZXN0bMOkbmdlIGbDvHIgZGllc2VzIEZlbGQgYmV0csOkZ3RcbiAgICAgICAge3tjb250cm9sLmVycm9ycz8uWydtaW5sZW5ndGgnXT8ucmVxdWlyZWRMZW5ndGh9fSBaZWljaGVuLlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29udHJvbD8uZXJyb3JzPy5bJ21heGxlbmd0aCddXCI+XG4gICAgICAgIERpZSBtYXhpbWFsZSBMw6RuZ2UgZsO8ciBkaWVzZXMgRmVsZCBiZXRyw6RndFxuICAgICAgICB7e2NvbnRyb2wuZXJyb3JzPy5bJ21heGxlbmd0aCddPy5yZXF1aXJlZExlbmd0aH19IFplaWNoZW4uXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsnZW1haWwnXVwiPkJpdHRlIGVpbmUgZ8O8bHRpZ2UgRS1NYWlsIEFkcmVzc2UgYW5nZWJlbi48L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsncGF0dGVybiddICYmIHR5cGUgPT09ICd0ZWwnXCI+Qml0dGUgZWluZSBnw7xsdGlnZSBUZWxlZm9ubnVtbWVyIGFuZ2ViZW4uPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29udHJvbD8uZXJyb3JzPy5bJ2ludmFsaWRFbWFpbCddXCI+Qml0dGUgZWluZSBnw7xsdGlnZSBFLU1haWwgQWRyZXNzZSBhbmdlYmVuLjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImNvbnRyb2w/LmVycm9ycz8uWydtYXRjaGluZyddXCI+RGllIFBhc3N3w7ZydGVyIG3DvHNzZW4gw7xiZXJlaW4gc3RpbW1lbi48L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsnaW52YWxpZFNlY3VyZVBhc3N3b3JkJ11cIj5cbiAgICAgICAgRGFzIFBhc3N3b3J0IGlzdCB6dSB1bnNpY2hlci4gRXMgbXVzcyBtaW5kLiA4IFplaWNoZW4gbGFuZyBzZWluLCBlaW4gR3Jvw59idXN0YWJlLCBlaW4gS2xlaW5idWNoc3RhYmUsIGVpbmUgWmFobFxuICAgICAgICB1bmQgZWluIFNvbmRlcnplaWNoZW4gZW50aGFsdGVuLlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPdkUsTUFBTSxPQUFPLGNBQWM7SUFMM0I7UUFTVyxnQkFBVyxHQUFZLEVBQUUsQ0FBQztRQUkxQixTQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ2QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFZixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztLQXFCdEM7SUFuQkM7O09BRUc7SUFDSCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7U0FDcEI7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQzs7MkdBakNVLGNBQWM7K0ZBQWQsY0FBYyw2VENQM0IsZ3pFQWlEQTsyRkQxQ2EsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxZQUFZOzhCQUtiLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlPzogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJJbmRleD86IG51bWJlcjtcbiAgQElucHV0KCkgY29udHJvbDogYW55O1xuICBASW5wdXQoKSB0eXBlID0gJ3RleHQnO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBleWVCdXR0b24gPSBmYWxzZTtcbiAgQElucHV0KCkgb2JqZWN0UGF0aCA9ICcnO1xuXG4gIEBPdXRwdXQoKSBlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogSWYgdGhlIGNvbnRyb2wgaGFzIGEgdmFsdWUsIGVtaXQgdGhlIGVudGVyIGV2ZW50XG4gICAqL1xuICBlbnRlckV2ZW50KCkge1xuICAgIGlmICh0aGlzLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICB0aGlzLmVudGVyLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoIGlucHV0IHR5cGVcbiAgICovXG4gIHRvZ2dsZVBhc3N3b3JkVHlwZSgpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSAncGFzc3dvcmQnKSB7XG4gICAgICB0aGlzLnR5cGUgPSAndGV4dCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0zXCI+XG4gIDxsYWJlbCBbZm9yXT1cImlkXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW25nQ2xhc3NdPVwieyByZXF1aXJlZDogcmVxdWlyZWQgfVwiICpuZ0lmPVwibGFiZWxcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgIDxpbnB1dFxuICAgICAgW2lkXT1cIm9iamVjdFBhdGggPyBvYmplY3RQYXRoICsgJy4nICsgaWQgOiBpZFwiXG4gICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSA/PyBudWxsXCJcbiAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleCA/PyBudWxsXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LnRvdWNoZWQgfVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwiZW50ZXJFdmVudCgpXCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWQgKyAnZXllLWJ1dHRvbidcIlxuICAgIC8+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtpZF09XCJpZCArICdleWUtYnV0dG9uJ1wiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlUGFzc3dvcmRUeXBlKClcIlxuICAgICAgKm5nSWY9XCJleWVCdXR0b25cIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiYmkgYmktZXllXCIgKm5nSWY9XCJ0eXBlID09PSAncGFzc3dvcmQnXCI+PC9pPlxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS1leWUtc2xhc2hcIiAqbmdJZj1cInR5cGUgPT09ICd0ZXh0J1wiPjwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrIG0tMlwiICpuZ0lmPVwiY29udHJvbD8uaW52YWxpZCAmJiAoY29udHJvbD8uZGlydHkgfHwgY29udHJvbD8udG91Y2hlZClcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPkRpZXNlcyBGZWxkIGlzdCBlaW4gUGZsaWNodGZlbGQuPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29udHJvbD8uZXJyb3JzPy5bJ21pbmxlbmd0aCddXCI+XG4gICAgICAgIERpZSBNaW5kZXN0bMOkbmdlIGbDvHIgZGllc2VzIEZlbGQgYmV0csOkZ3RcbiAgICAgICAge3tjb250cm9sLmVycm9ycz8uWydtaW5sZW5ndGgnXT8ucmVxdWlyZWRMZW5ndGh9fSBaZWljaGVuLlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29udHJvbD8uZXJyb3JzPy5bJ21heGxlbmd0aCddXCI+XG4gICAgICAgIERpZSBtYXhpbWFsZSBMw6RuZ2UgZsO8ciBkaWVzZXMgRmVsZCBiZXRyw6RndFxuICAgICAgICB7e2NvbnRyb2wuZXJyb3JzPy5bJ21heGxlbmd0aCddPy5yZXF1aXJlZExlbmd0aH19IFplaWNoZW4uXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsnZW1haWwnXVwiPkJpdHRlIGVpbmUgZ8O8bHRpZ2UgRS1NYWlsIEFkcmVzc2UgYW5nZWJlbi48L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsncGF0dGVybiddICYmIHR5cGUgPT09ICd0ZWwnXCI+Qml0dGUgZWluZSBnw7xsdGlnZSBUZWxlZm9ubnVtbWVyIGFuZ2ViZW4uPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29udHJvbD8uZXJyb3JzPy5bJ2ludmFsaWRFbWFpbCddXCI+Qml0dGUgZWluZSBnw7xsdGlnZSBFLU1haWwgQWRyZXNzZSBhbmdlYmVuLjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImNvbnRyb2w/LmVycm9ycz8uWydtYXRjaGluZyddXCI+RGllIFBhc3N3w7ZydGVyIG3DvHNzZW4gw7xiZXJlaW4gc3RpbW1lbi48L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb250cm9sPy5lcnJvcnM/LlsnaW52YWxpZFNlY3VyZVBhc3N3b3JkJ11cIj5cbiAgICAgICAgRGFzIFBhc3N3b3J0IGlzdCB6dSB1bnNpY2hlci4gRXMgbXVzcyBtaW5kLiA4IFplaWNoZW4gbGFuZyBzZWluLCBlaW4gR3Jvw59idXN0YWJlLCBlaW4gS2xlaW5idWNoc3RhYmUsIGVpbmUgWmFobFxuICAgICAgICB1bmQgZWluIFNvbmRlcnplaWNoZW4gZW50aGFsdGVuLlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=