@tft/crispr-forms 14.0.1 → 14.0.2

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.
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @nrwl/nx/enforce-module-boundaries */
1
2
  import { NgModule } from '@angular/core';
2
3
  import { CommonModule } from '@angular/common';
3
4
  import { ReactiveFormsModule } from '@angular/forms';
@@ -11,6 +12,7 @@ import { CrisprFieldDirective } from './field.directive';
11
12
  import { SubGroupModule } from './sub-group';
12
13
  import { CrisprPipesModule } from './pipes/crispr-pipes.module';
13
14
  import { FieldContainerComponent } from '@tft/crispr-forms/ui';
15
+ import { CrisprDisplayFieldDirective } from './display-field.directive';
14
16
  import * as i0 from "@angular/core";
15
17
  export class CrisprFormsModule {
16
18
  }
@@ -21,6 +23,7 @@ CrisprFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
21
23
  FormGroupListComponent,
22
24
  FieldContainerComponent,
23
25
  CrisprFieldDirective,
26
+ CrisprDisplayFieldDirective,
24
27
  SubGroupModule,
25
28
  CrisprPipesModule,
26
29
  CrisprFormComponent], exports: [CrisprFormComponent,
@@ -43,6 +46,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImpor
43
46
  FormGroupListComponent,
44
47
  FieldContainerComponent,
45
48
  CrisprFieldDirective,
49
+ CrisprDisplayFieldDirective,
46
50
  SubGroupModule,
47
51
  CrisprPipesModule,
48
52
  CrisprFormComponent
@@ -50,8 +54,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImpor
50
54
  exports: [
51
55
  CrisprFormComponent,
52
56
  FieldContainerComponent,
53
- // MaterialModule
54
57
  ]
55
58
  }]
56
59
  }] });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jpc3ByLWZvcm1zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvY3Jpc3ByLWZvcm1zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFM0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELGFBQWE7QUFDYixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQW9CL0QsTUFBTSxPQUFPLGlCQUFpQjs7OEdBQWpCLGlCQUFpQjsrR0FBakIsaUJBQWlCLFlBaEIxQixZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLDJCQUEyQjtRQUMzQixzQkFBc0I7UUFDdEIsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixjQUFjO1FBQ2QsaUJBQWlCO1FBQ2pCLG1CQUFtQixhQUduQixtQkFBbUI7UUFDbkIsdUJBQXVCOytHQUlkLGlCQUFpQixZQWhCMUIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQiwyQkFBMkI7UUFDM0Isc0JBQXNCO1FBQ3RCLHVCQUF1QjtRQUV2QixjQUFjO1FBQ2QsaUJBQWlCO1FBQ2pCLG1CQUFtQjsyRkFRVixpQkFBaUI7a0JBbEI3QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsMkJBQTJCO3dCQUMzQixzQkFBc0I7d0JBQ3RCLHVCQUF1Qjt3QkFDdkIsb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLGlCQUFpQjtxQkFDbEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG4vLyBjdXN0b20gbW9kdWxlc1xuaW1wb3J0IHsgRm9ybVZhbGlkYXRpb25IYW5kbGVyTW9kdWxlIH0gZnJvbSAnQHRmdC9mb3JtLXZhbGlkYXRpb24taGFuZGxlcic7XG5cbi8vIGNvbXBvbmVudHNcbmltcG9ydCB7IENyaXNwckZvcm1Db21wb25lbnQgfSBmcm9tICcuL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdyb3VwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1ncm91cC1saXN0Jztcbi8vIGRpcmVjdGl2ZXNcbmltcG9ydCB7IENyaXNwckZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi9maWVsZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3ViR3JvdXBNb2R1bGUgfSBmcm9tICcuL3N1Yi1ncm91cCc7XG5pbXBvcnQgeyBDcmlzcHJQaXBlc01vZHVsZSB9IGZyb20gJy4vcGlwZXMvY3Jpc3ByLXBpcGVzLm1vZHVsZSc7XG5pbXBvcnQgeyBGaWVsZENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJ0B0ZnQvY3Jpc3ByLWZvcm1zL3VpJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1WYWxpZGF0aW9uSGFuZGxlck1vZHVsZSxcbiAgICBGb3JtR3JvdXBMaXN0Q29tcG9uZW50LFxuICAgIEZpZWxkQ29udGFpbmVyQ29tcG9uZW50LFxuICAgIENyaXNwckZpZWxkRGlyZWN0aXZlLFxuICAgIFN1Ykdyb3VwTW9kdWxlLFxuICAgIENyaXNwclBpcGVzTW9kdWxlLFxuICAgIENyaXNwckZvcm1Db21wb25lbnRcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIENyaXNwckZvcm1Db21wb25lbnQsXG4gICAgRmllbGRDb250YWluZXJDb21wb25lbnQsXG4gICAgLy8gTWF0ZXJpYWxNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDcmlzcHJGb3Jtc01vZHVsZSB7IH1cbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jpc3ByLWZvcm1zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvY3Jpc3ByLWZvcm1zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLGFBQWE7QUFDYixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFvQnhFLE1BQU0sT0FBTyxpQkFBaUI7OzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixZQWhCMUIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQiwyQkFBMkI7UUFDM0Isc0JBQXNCO1FBQ3RCLHVCQUF1QjtRQUN2QixvQkFBb0I7UUFDcEIsMkJBQTJCO1FBQzNCLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsbUJBQW1CLGFBR25CLG1CQUFtQjtRQUNuQix1QkFBdUI7K0dBR2QsaUJBQWlCLFlBaEIxQixZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLDJCQUEyQjtRQUMzQixzQkFBc0I7UUFDdEIsdUJBQXVCO1FBR3ZCLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsbUJBQW1COzJGQU9WLGlCQUFpQjtrQkFsQjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQiwyQkFBMkI7d0JBQzNCLHNCQUFzQjt3QkFDdEIsdUJBQXVCO3dCQUN2QixvQkFBb0I7d0JBQ3BCLDJCQUEyQjt3QkFDM0IsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLG1CQUFtQjtxQkFDcEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3FCQUN4QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBucndsL254L2VuZm9yY2UtbW9kdWxlLWJvdW5kYXJpZXMgKi9cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbi8vIGN1c3RvbSBtb2R1bGVzXG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvbkhhbmRsZXJNb2R1bGUgfSBmcm9tICdAdGZ0L2Zvcm0tdmFsaWRhdGlvbi1oYW5kbGVyJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IHsgQ3Jpc3ByRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtR3JvdXBMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLWdyb3VwLWxpc3QnO1xuLy8gZGlyZWN0aXZlc1xuaW1wb3J0IHsgQ3Jpc3ByRmllbGREaXJlY3RpdmUgfSBmcm9tICcuL2ZpZWxkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTdWJHcm91cE1vZHVsZSB9IGZyb20gJy4vc3ViLWdyb3VwJztcbmltcG9ydCB7IENyaXNwclBpcGVzTW9kdWxlIH0gZnJvbSAnLi9waXBlcy9jcmlzcHItcGlwZXMubW9kdWxlJztcbmltcG9ydCB7IEZpZWxkQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnQHRmdC9jcmlzcHItZm9ybXMvdWknO1xuaW1wb3J0IHsgQ3Jpc3ByRGlzcGxheUZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXNwbGF5LWZpZWxkLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtVmFsaWRhdGlvbkhhbmRsZXJNb2R1bGUsXG4gICAgRm9ybUdyb3VwTGlzdENvbXBvbmVudCxcbiAgICBGaWVsZENvbnRhaW5lckNvbXBvbmVudCxcbiAgICBDcmlzcHJGaWVsZERpcmVjdGl2ZSxcbiAgICBDcmlzcHJEaXNwbGF5RmllbGREaXJlY3RpdmUsXG4gICAgU3ViR3JvdXBNb2R1bGUsXG4gICAgQ3Jpc3ByUGlwZXNNb2R1bGUsXG4gICAgQ3Jpc3ByRm9ybUNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQ3Jpc3ByRm9ybUNvbXBvbmVudCxcbiAgICBGaWVsZENvbnRhaW5lckNvbXBvbmVudCxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDcmlzcHJGb3Jtc01vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,53 @@
1
+ import { Directive, Input, ViewContainerRef, ChangeDetectorRef, Type } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export class CrisprDisplayFieldDirective {
5
+ constructor(container, cdr) {
6
+ this.container = container;
7
+ this.cdr = cdr;
8
+ }
9
+ set value(value) {
10
+ this._value = value;
11
+ // This is needed to keep the group list from resetting control values to the initial input value
12
+ this.updateComponentValue(value);
13
+ }
14
+ ;
15
+ get value() {
16
+ return this._value;
17
+ }
18
+ async ngOnInit() {
19
+ if (this.component) {
20
+ /**
21
+ * create component and set values from config on its instance
22
+ */
23
+ const componentRef = this.container.createComponent(this.component);
24
+ this.componentInstance = componentRef.instance;
25
+ this.componentInstance.index = this.index;
26
+ this.updateComponentValue(this.value);
27
+ }
28
+ }
29
+ updateComponentValue(value) {
30
+ if (!this.componentInstance)
31
+ return;
32
+ this.componentInstance.value = value;
33
+ this.cdr.detectChanges();
34
+ }
35
+ }
36
+ CrisprDisplayFieldDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CrisprDisplayFieldDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
37
+ CrisprDisplayFieldDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CrisprDisplayFieldDirective, isStandalone: true, selector: "[crisprDisplayField]", inputs: { group: "group", value: "value", component: "component", index: "index" }, ngImport: i0 });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CrisprDisplayFieldDirective, decorators: [{
39
+ type: Directive,
40
+ args: [{
41
+ selector: '[crisprDisplayField]',
42
+ standalone: true
43
+ }]
44
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { group: [{
45
+ type: Input
46
+ }], value: [{
47
+ type: Input
48
+ }], component: [{
49
+ type: Input
50
+ }], index: [{
51
+ type: Input
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL2Rpc3BsYXktZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFVLGlCQUFpQixFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBUTNDLE1BQU0sT0FBTywyQkFBMkI7SUFzQnRDLFlBQ1UsU0FBMkIsRUFDM0IsR0FBc0I7UUFEdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFDN0IsQ0FBQztJQWxCSixJQUFhLEtBQUssQ0FBQyxLQUEyQjtRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixpR0FBaUc7UUFDakcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFhRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUVsQjs7ZUFFRztZQUNILE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVwRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7WUFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUEyQjtRQUM5QyxJQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDOzt3SEE3Q1UsMkJBQTJCOzRHQUEzQiwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7dUlBR1UsS0FBSztzQkFBYixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBU1csU0FBUztzQkFBekIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBWaWV3Q29udGFpbmVyUmVmLCBPbkluaXQsIENoYW5nZURldGVjdG9yUmVmLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQG5yd2wvbngvZW5mb3JjZS1tb2R1bGUtYm91bmRhcmllc1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlLCBDcmlzcHJEaXNwbGF5RmllbGRDb21wb25lbnQgfSBmcm9tICdAdGZ0L2NyaXNwci1mb3Jtcy91dGlscyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjcmlzcHJEaXNwbGF5RmllbGRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDcmlzcHJEaXNwbGF5RmllbGREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XG4gIC8qKlxuICAgKiB2YWx1ZSBzZXR0ZXIgdXBkYXRlcyB0aGUgY29udHJvbCdzIHZhbHVlIGFzIHdlbGxcbiAgICovXG4gIF92YWx1ZTogQ29udHJvbFZhbHVlIHwgYW55W11cbiAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBDb250cm9sVmFsdWUgfCBhbnlbXSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8ga2VlcCB0aGUgZ3JvdXAgbGlzdCBmcm9tIHJlc2V0dGluZyBjb250cm9sIHZhbHVlcyB0byB0aGUgaW5pdGlhbCBpbnB1dCB2YWx1ZVxuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50VmFsdWUodmFsdWUpO1xuICB9O1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQElucHV0KCkgcHJpdmF0ZSBjb21wb25lbnQ6IFR5cGU8Q3Jpc3ByRGlzcGxheUZpZWxkQ29tcG9uZW50PjtcblxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcblxuICBwcml2YXRlIGNvbXBvbmVudEluc3RhbmNlOiBDcmlzcHJEaXNwbGF5RmllbGRDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnQpIHtcblxuICAgICAgLyoqXG4gICAgICAgKiBjcmVhdGUgY29tcG9uZW50IGFuZCBzZXQgdmFsdWVzIGZyb20gY29uZmlnIG9uIGl0cyBpbnN0YW5jZVxuICAgICAgICovXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQodGhpcy5jb21wb25lbnQpO1xuXG4gICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZS5pbmRleCA9IHRoaXMuaW5kZXhcbiAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29tcG9uZW50VmFsdWUodmFsdWU6IENvbnRyb2xWYWx1ZSB8IGFueVtdKSB7XG4gICAgaWYoIXRoaXMuY29tcG9uZW50SW5zdGFuY2UpIHJldHVybjtcbiAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG4iXX0=
@@ -66,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImpor
66
66
  }], value: [{
67
67
  type: Input
68
68
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmlzcHItZm9ybXMvc3JjL2xpYi9maWVsZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQTRCLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBUXpJLE1BQU0sT0FBTyxvQkFBb0I7SUFrQi9CLFlBQ1UsU0FBMkIsRUFDM0IsUUFBbUIsRUFDbkIsR0FBc0I7UUFGdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUM3QixDQUFDO0lBZEosSUFBYSxLQUFLLENBQUMsS0FBMkI7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsaUdBQWlHO1FBQ2pHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBU0QsS0FBSyxDQUFDLFFBQVE7UUFDWjs7V0FFRztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzdGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUEyQixTQUFTLENBQUMsQ0FBQztRQUV6RixJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxpRUFBaUU7UUFDakUseUdBQXlHO1FBQ3pHLElBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BDLDBEQUEwRDtZQUMxRCxJQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sS0FBSyxDQUFDLGdDQUFnQyxLQUFLLDBCQUEwQixDQUFDLENBQUM7YUFDOUU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUEyQjtRQUM5QyxJQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDN0Isc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOztpSEF4RFUsb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOytKQUdVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFZpZXdDb250YWluZXJSZWYsIFJlbmRlcmVyMiwgT25Jbml0LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ3Jpc3ByRmllbGRDb21wb25lbnRUeXBlLCBGSUVMRF9DT01QT05FTlRTLCBpc0NvbnRyb2xDb21wb25lbnQsIGlzQ29udHJvbE9yQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZC1jb21wb25lbnQtbWFwLmNvbnN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAbnJ3bC9ueC9lbmZvcmNlLW1vZHVsZS1ib3VuZGFyaWVzXG5pbXBvcnQgeyBBbnlGaWVsZENvbmZpZywgQ29udHJvbFZhbHVlIH0gZnJvbSAnQHRmdC9jcmlzcHItZm9ybXMvdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY3Jpc3ByRmllbGRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDcmlzcHJGaWVsZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgY29uZmlnOiBBbnlGaWVsZENvbmZpZztcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcbiAgLyoqXG4gICAqIHZhbHVlIHNldHRlciB1cGRhdGVzIHRoZSBjb250cm9sJ3MgdmFsdWUgYXMgd2VsbFxuICAgKi9cbiAgX3ZhbHVlOiBDb250cm9sVmFsdWUgfCBhbnlbXVxuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IENvbnRyb2xWYWx1ZSB8IGFueVtdKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBncm91cCBsaXN0IGZyb20gcmVzZXR0aW5nIGNvbnRyb2wgdmFsdWVzIHRvIHRoZSBpbml0aWFsIGlucHV0IHZhbHVlXG4gICAgdGhpcy51cGRhdGVDb21wb25lbnRWYWx1ZSh2YWx1ZSk7XG4gIH07XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgY29tcG9uZW50OiBDcmlzcHJGaWVsZENvbXBvbmVudFR5cGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgLyoqXG4gICAgICogY3JlYXRlIGNvbXBvbmVudCBhbmQgc2V0IHZhbHVlcyBmcm9tIGNvbmZpZyBvbiBpdHMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbmZpZy5jb21wb25lbnQgfHwgYXdhaXQgRklFTERfQ09NUE9ORU5UU1t0aGlzLmNvbmZpZy5jb250cm9sVHlwZV0oKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8Q3Jpc3ByRmllbGRDb21wb25lbnRUeXBlPihjb21wb25lbnQpO1xuXG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgdGhpcy5jb21wb25lbnQuY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgaWYgKGlzQ29udHJvbE9yQnV0dG9uQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KSkge1xuICAgICAgdGhpcy5jb21wb25lbnQuZ3JvdXAgPSB0aGlzLmdyb3VwO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIC8vIGFkZHMgYW55IGNvbmZpZyBjbGFzc2VzIHRvIHRoZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY29tcG9uZW50XG4gICAgLy8gZG9pbmcgdGhpcyBoZXJlIGtlZXBzIHVzIGZyb20gaGF2aW5nIHRvIGV4dGVuZCBhIGJhc2UgY29tcG9uZW50IGludG8gZWFjaCBmaWVsZCBjb21wb25lbnQgaW5kaXZpZHVhbGx5XG4gICAgaWYoIXRoaXMuY29uZmlnLmNsYXNzZXMpIHJldHVybjtcbiAgICB0aGlzLmNvbmZpZy5jbGFzc2VzLmZvckVhY2goKGtsYXNzKSA9PiB7XG4gICAgICAvLyBjaGVjayBmb3IgcGFzc2luZyBtdWx0aXBsZSBjbGFzc2VzIGluIG9uZSBhcnJheSBlbGVtZW50XG4gICAgICBpZihrbGFzcy5pbmNsdWRlcygnICcpKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBJbXByb3Blcmx5IGZvcm1hdHRlZCBjbGFzcy4gJyR7a2xhc3N9JyBjYW5ub3QgY29udGFpbiBzcGFjZXMuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCBrbGFzcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVDb21wb25lbnRWYWx1ZSh2YWx1ZTogQ29udHJvbFZhbHVlIHwgYW55W10pIHtcbiAgICBpZihpc0NvbnRyb2xDb21wb25lbnQodGhpcy5jb21wb25lbnQpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudC52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gU3ViR3JvdXBzIHdvbid0IHBvcHVsYXRlIHdpdGhvdXQgdGhpcyBkZXRlY3RDaGFuZ2VzXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmlzcHItZm9ybXMvc3JjL2xpYi9maWVsZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQTRCLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBUXpJLE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQ1UsU0FBMkIsRUFDM0IsUUFBbUIsRUFDbkIsR0FBc0I7UUFGdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUM3QixDQUFDO0lBZkosSUFBYSxLQUFLLENBQUMsS0FBMkI7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsaUdBQWlHO1FBQ2pHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBVUQsS0FBSyxDQUFDLFFBQVE7UUFDWjs7V0FFRztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzdGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUEyQixTQUFTLENBQUMsQ0FBQztRQUV6RixJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxpRUFBaUU7UUFDakUseUdBQXlHO1FBQ3pHLElBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BDLDBEQUEwRDtZQUMxRCxJQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sS0FBSyxDQUFDLGdDQUFnQyxLQUFLLDBCQUEwQixDQUFDLENBQUM7YUFDOUU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUEyQjtRQUM5QyxJQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDN0Isc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOztpSEF6RFUsb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOytKQUdVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFZpZXdDb250YWluZXJSZWYsIFJlbmRlcmVyMiwgT25Jbml0LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ3Jpc3ByRmllbGRDb21wb25lbnRUeXBlLCBGSUVMRF9DT01QT05FTlRTLCBpc0NvbnRyb2xDb21wb25lbnQsIGlzQ29udHJvbE9yQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZC1jb21wb25lbnQtbWFwLmNvbnN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAbnJ3bC9ueC9lbmZvcmNlLW1vZHVsZS1ib3VuZGFyaWVzXG5pbXBvcnQgeyBBbnlGaWVsZENvbmZpZywgQ29udHJvbFZhbHVlIH0gZnJvbSAnQHRmdC9jcmlzcHItZm9ybXMvdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY3Jpc3ByRmllbGRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDcmlzcHJGaWVsZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgY29uZmlnOiBBbnlGaWVsZENvbmZpZztcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcbiAgLyoqXG4gICAqIHZhbHVlIHNldHRlciB1cGRhdGVzIHRoZSBjb250cm9sJ3MgdmFsdWUgYXMgd2VsbFxuICAgKi9cbiAgX3ZhbHVlOiBDb250cm9sVmFsdWUgfCBhbnlbXVxuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IENvbnRyb2xWYWx1ZSB8IGFueVtdKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBncm91cCBsaXN0IGZyb20gcmVzZXR0aW5nIGNvbnRyb2wgdmFsdWVzIHRvIHRoZSBpbml0aWFsIGlucHV0IHZhbHVlXG4gICAgdGhpcy51cGRhdGVDb21wb25lbnRWYWx1ZSh2YWx1ZSk7XG4gIH07XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuIGNvbXBvbmVudDogQ3Jpc3ByRmllbGRDb21wb25lbnRUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIC8qKlxuICAgICAqIGNyZWF0ZSBjb21wb25lbnQgYW5kIHNldCB2YWx1ZXMgZnJvbSBjb25maWcgb24gaXRzIGluc3RhbmNlXG4gICAgICovXG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb25maWcuY29tcG9uZW50IHx8IGF3YWl0IEZJRUxEX0NPTVBPTkVOVFNbdGhpcy5jb25maWcuY29udHJvbFR5cGVdKCk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50PENyaXNwckZpZWxkQ29tcG9uZW50VHlwZT4oY29tcG9uZW50KTtcblxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIHRoaXMuY29tcG9uZW50LmNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgIGlmIChpc0NvbnRyb2xPckJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbXBvbmVudCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lmdyb3VwID0gdGhpcy5ncm91cDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb21wb25lbnRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAvLyBhZGRzIGFueSBjb25maWcgY2xhc3NlcyB0byB0aGUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNvbXBvbmVudFxuICAgIC8vIGRvaW5nIHRoaXMgaGVyZSBrZWVwcyB1cyBmcm9tIGhhdmluZyB0byBleHRlbmQgYSBiYXNlIGNvbXBvbmVudCBpbnRvIGVhY2ggZmllbGQgY29tcG9uZW50IGluZGl2aWR1YWxseVxuICAgIGlmKCF0aGlzLmNvbmZpZy5jbGFzc2VzKSByZXR1cm47XG4gICAgdGhpcy5jb25maWcuY2xhc3Nlcy5mb3JFYWNoKChrbGFzcykgPT4ge1xuICAgICAgLy8gY2hlY2sgZm9yIHBhc3NpbmcgbXVsdGlwbGUgY2xhc3NlcyBpbiBvbmUgYXJyYXkgZWxlbWVudFxuICAgICAgaWYoa2xhc3MuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgICB0aHJvdyBFcnJvcihgSW1wcm9wZXJseSBmb3JtYXR0ZWQgY2xhc3MuICcke2tsYXNzfScgY2Fubm90IGNvbnRhaW4gc3BhY2VzLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCwga2xhc3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlQ29tcG9uZW50VmFsdWUodmFsdWU6IENvbnRyb2xWYWx1ZSB8IGFueVtdKSB7XG4gICAgaWYoaXNDb250cm9sQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KSkge1xuICAgICAgdGhpcy5jb21wb25lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIFN1Ykdyb3VwcyB3b24ndCBwb3B1bGF0ZSB3aXRob3V0IHRoaXMgZGV0ZWN0Q2hhbmdlc1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -10,6 +10,7 @@ import { FormValidationHandlerModule } from '@tft/form-validation-handler';
10
10
  import { CrisprFieldComponent, crisprControlMixin, createControlForType } from '@tft/crispr-forms/utils';
11
11
  // eslint-disable-next-line @nrwl/nx/enforce-module-boundaries
12
12
  import { FieldContainerComponent } from '@tft/crispr-forms/ui';
13
+ import { CrisprDisplayFieldDirective } from '../display-field.directive';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@angular/common";
15
16
  import * as i2 from "@angular/material/button";
@@ -32,6 +33,7 @@ export class FormGroupListComponent extends FormGroupListMixin {
32
33
  * we can block original values from overwriting form values
33
34
  * */
34
35
  this.blockValue = false;
36
+ this.selectedIndex = null;
35
37
  }
36
38
  ngOnInit() {
37
39
  super.ngOnInit();
@@ -74,9 +76,12 @@ export class FormGroupListComponent extends FormGroupListMixin {
74
76
  deleteGroup(index) {
75
77
  this.control.removeAt(index);
76
78
  }
79
+ clickEditItem(index) {
80
+ this.selectedIndex = index;
81
+ }
77
82
  }
78
83
  FormGroupListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: FormGroupListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
79
- FormGroupListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: FormGroupListComponent, isStandalone: true, selector: "crispr-form-group-list", usesInheritance: true, ngImport: i0, template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\"\n [formGroup]=\"group\">\n\n <div [formArrayName]=\"config.controlName\">\n <!-- Don't add trackBy function, it confuses the state of the array -->\n <div *ngFor=\"let con of control?.controls; let i = index;\">\n <!-- TODO: use content projection to allow custom item label component -->\n <div class=\"item-header\">\n <span class=\"mat-h2\"> {{ config.itemLabelBuilder ? config.itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n <button\n mat-icon-button\n type=\"button\"\n *ngIf=\"i + 1 > config.minListLength\">\n <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n </button>\n </div>\n <div\n [formGroup]=\"con\">\n <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n <ng-container\n *ngFor=\"let field of config.itemConfig.fields;\"\n crisprField\n [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"con\">\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"group-footer\">\n <button\n type=\"button\"\n class=\"add\"\n mat-raised-button\n [color]=\"config.addButtonColor\"\n (click)=\"clickAdd()\">\n {{config.addItemLabel || config.addButtonLabel}}\n </button>\n </div>\n\n</crispr-field-container>\n", styles: [".item-header{display:flex;justify-content:space-between}.group-footer{display:flex;justify-content:flex-end}.group-footer button.add{margin-bottom:16px}\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: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }, { kind: "ngmodule", type: CrisprPipesModule }, { kind: "pipe", type: i5.InitialControlValuePipe, name: "initialControlValue" }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i6.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
84
+ FormGroupListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: FormGroupListComponent, isStandalone: true, selector: "crispr-form-group-list", usesInheritance: true, ngImport: i0, template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\"\n [formGroup]=\"group\">\n\n <div [formArrayName]=\"config.controlName\">\n\n <!-- Don't add trackBy function, it confuses the state of the array -->\n <ng-container *ngFor=\"let itemControl of control?.controls; let i = index; let last = last\">\n <ng-container *ngIf=\"!config.displayItemComponent || i === selectedIndex || (last && selectedIndex ?? true); else display\">\n <!-- TODO: use content projection to allow custom item label component -->\n <div class=\"item-header\">\n <span class=\"mat-h2\"> {{ config.itemLabelBuilder ? config.itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n <button\n mat-icon-button\n type=\"button\"\n *ngIf=\"i + 1 > config.minListLength\">\n <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n </button>\n </div>\n <div\n [formGroup]=\"itemControl\">\n <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n <ng-container\n *ngFor=\"let field of config.itemConfig.fields;\"\n crisprField\n [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"itemControl\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #display>\n <div\n class=\"display-field-container\"\n crisprDisplayField\n [component]=\"config.displayItemComponent\"\n [value]=\"itemControl.value\"\n [index]=\"i\">\n <button mat-icon-button (click)=\"clickEditItem(i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <div class=\"group-footer\">\n <button\n type=\"button\"\n class=\"add\"\n mat-raised-button\n [color]=\"config.addButtonColor\"\n (click)=\"clickAdd()\">\n {{config.addItemLabel || config.addButtonLabel}}\n </button>\n </div>\n\n</crispr-field-container>\n", styles: [".item-header{display:flex;justify-content:space-between}.group-footer{display:flex;justify-content:flex-end}.group-footer button.add{margin-bottom:16px}.display-field-container{position:relative}.display-field-container button{position:absolute;top:0;right:0}\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: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FieldContainerComponent, selector: "crispr-field-container", inputs: ["config", "group", "inlineField"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }, { kind: "directive", type: CrisprDisplayFieldDirective, selector: "[crisprDisplayField]", inputs: ["group", "value", "component", "index"] }, { kind: "ngmodule", type: CrisprPipesModule }, { kind: "pipe", type: i5.InitialControlValuePipe, name: "initialControlValue" }, { kind: "ngmodule", type: FormValidationHandlerModule }, { kind: "directive", type: i6.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
80
85
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: FormGroupListComponent, decorators: [{
81
86
  type: Component,
82
87
  args: [{ selector: 'crispr-form-group-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
@@ -86,8 +91,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImpor
86
91
  FieldContainerComponent,
87
92
  ReactiveFormsModule,
88
93
  CrisprFieldDirective,
94
+ CrisprDisplayFieldDirective,
89
95
  CrisprPipesModule,
90
96
  FormValidationHandlerModule
91
- ], template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\"\n [formGroup]=\"group\">\n\n <div [formArrayName]=\"config.controlName\">\n <!-- Don't add trackBy function, it confuses the state of the array -->\n <div *ngFor=\"let con of control?.controls; let i = index;\">\n <!-- TODO: use content projection to allow custom item label component -->\n <div class=\"item-header\">\n <span class=\"mat-h2\"> {{ config.itemLabelBuilder ? config.itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n <button\n mat-icon-button\n type=\"button\"\n *ngIf=\"i + 1 > config.minListLength\">\n <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n </button>\n </div>\n <div\n [formGroup]=\"con\">\n <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n <ng-container\n *ngFor=\"let field of config.itemConfig.fields;\"\n crisprField\n [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"con\">\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"group-footer\">\n <button\n type=\"button\"\n class=\"add\"\n mat-raised-button\n [color]=\"config.addButtonColor\"\n (click)=\"clickAdd()\">\n {{config.addItemLabel || config.addButtonLabel}}\n </button>\n </div>\n\n</crispr-field-container>\n", styles: [".item-header{display:flex;justify-content:space-between}.group-footer{display:flex;justify-content:flex-end}.group-footer button.add{margin-bottom:16px}\n"] }]
97
+ ], template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\"\n [formGroup]=\"group\">\n\n <div [formArrayName]=\"config.controlName\">\n\n <!-- Don't add trackBy function, it confuses the state of the array -->\n <ng-container *ngFor=\"let itemControl of control?.controls; let i = index; let last = last\">\n <ng-container *ngIf=\"!config.displayItemComponent || i === selectedIndex || (last && selectedIndex ?? true); else display\">\n <!-- TODO: use content projection to allow custom item label component -->\n <div class=\"item-header\">\n <span class=\"mat-h2\"> {{ config.itemLabelBuilder ? config.itemLabelBuilder(i) : 'Item ' + (i + 1) }} </span>\n <button\n mat-icon-button\n type=\"button\"\n *ngIf=\"i + 1 > config.minListLength\">\n <mat-icon (click)=\"clickDelete(i)\">delete</mat-icon>\n </button>\n </div>\n <div\n [formGroup]=\"itemControl\">\n <!-- TODO: if chiplists didn't need to have labels mixed in with their values we could use [value]=\"control.value\" below -->\n <ng-container\n *ngFor=\"let field of config.itemConfig.fields;\"\n crisprField\n [value]=\"blockValue ? null : value && value[i] | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"itemControl\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #display>\n <div\n class=\"display-field-container\"\n crisprDisplayField\n [component]=\"config.displayItemComponent\"\n [value]=\"itemControl.value\"\n [index]=\"i\">\n <button mat-icon-button (click)=\"clickEditItem(i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <div class=\"group-footer\">\n <button\n type=\"button\"\n class=\"add\"\n mat-raised-button\n [color]=\"config.addButtonColor\"\n (click)=\"clickAdd()\">\n {{config.addItemLabel || config.addButtonLabel}}\n </button>\n </div>\n\n</crispr-field-container>\n", styles: [".item-header{display:flex;justify-content:space-between}.group-footer{display:flex;justify-content:flex-end}.group-footer button.add{margin-bottom:16px}.display-field-container{position:relative}.display-field-container button{position:absolute;top:0;right:0}\n"] }]
92
98
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvZm9ybS1ncm91cC1saXN0L2Zvcm0tZ3JvdXAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL2Zvcm0tZ3JvdXAtbGlzdC9mb3JtLWdyb3VwLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRSw4REFBOEQ7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUF1QixNQUFNLHlCQUF5QixDQUFDO0FBQzlILDhEQUE4RDtBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7QUFFL0QsTUFBTSxhQUFhLEdBQWlDO0lBQ2xELGNBQWMsRUFBRSxVQUFVO0lBQzFCLGFBQWEsRUFBRSxDQUFDO0NBQ2pCLENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUFzQixvQkFBb0IsQ0FBQyxDQUFDO0FBa0J6RixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsa0JBQWtCO0lBVzVELFlBQW9CLEdBQXNCO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBRFUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFUMUMsa0JBQWEsR0FBRyxhQUFhLENBQUE7UUFHN0I7OzthQUdLO1FBQ0wsZUFBVSxHQUFHLEtBQUssQ0FBQztJQUluQixDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixnRkFBZ0Y7SUFDbEYsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFhO1FBQzNCLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNmLElBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JCLDhFQUE4RTtnQkFDOUUsTUFBTSxhQUFhLEdBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzVDLElBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRTtvQkFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDdEI7Z0JBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUUvQztpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTthQUNoQjtZQUNELDBDQUEwQztZQUMxQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUk7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2RSwwQ0FBMEM7UUFDMUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7bUhBNURVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHlHQ3JDbkMsc2dEQTRDQSxtTkRqQkksWUFBWSwrUEFDWixlQUFlLDBWQUNmLGFBQWEsb0xBQ2IsdUJBQXVCLDhHQUN2QixtQkFBbUIsbWJBQ25CLG9CQUFvQiwrRkFDcEIsaUJBQWlCLCtHQUNqQiwyQkFBMkI7MkZBR2xCLHNCQUFzQjtrQkFqQmxDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixpQkFBaUI7d0JBQ2pCLDJCQUEyQjtxQkFDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBDcmlzcHJGaWVsZERpcmVjdGl2ZSB9IGZyb20gJy4uL2ZpZWxkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcmlzcHJQaXBlc01vZHVsZSB9IGZyb20gJy4uL3BpcGVzL2NyaXNwci1waXBlcy5tb2R1bGUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvbkhhbmRsZXJNb2R1bGUgfSBmcm9tICdAdGZ0L2Zvcm0tdmFsaWRhdGlvbi1oYW5kbGVyJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAbnJ3bC9ueC9lbmZvcmNlLW1vZHVsZS1ib3VuZGFyaWVzXG5pbXBvcnQgeyBDcmlzcHJGaWVsZENvbXBvbmVudCwgY3Jpc3ByQ29udHJvbE1peGluLCBjcmVhdGVDb250cm9sRm9yVHlwZSwgRm9ybUdyb3VwTGlzdENvbmZpZyB9IGZyb20gJ0B0ZnQvY3Jpc3ByLWZvcm1zL3V0aWxzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAbnJ3bC9ueC9lbmZvcmNlLW1vZHVsZS1ib3VuZGFyaWVzXG5pbXBvcnQgeyBGaWVsZENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJ0B0ZnQvY3Jpc3ByLWZvcm1zL3VpJztcblxuY29uc3QgZGVmYXVsdENvbmZpZzogUGFydGlhbDxGb3JtR3JvdXBMaXN0Q29uZmlnPiA9IHtcbiAgYWRkQnV0dG9uTGFiZWw6ICdBREQgSVRFTScsXG4gIG1pbkxpc3RMZW5ndGg6IDEsXG59O1xuXG5jb25zdCBGb3JtR3JvdXBMaXN0TWl4aW4gPSBjcmlzcHJDb250cm9sTWl4aW48Rm9ybUdyb3VwTGlzdENvbmZpZz4oQ3Jpc3ByRmllbGRDb21wb25lbnQpO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3Jpc3ByLWZvcm0tZ3JvdXAtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWdyb3VwLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWdyb3VwLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgRmllbGRDb250YWluZXJDb21wb25lbnQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBDcmlzcHJGaWVsZERpcmVjdGl2ZSxcbiAgICBDcmlzcHJQaXBlc01vZHVsZSxcbiAgICBGb3JtVmFsaWRhdGlvbkhhbmRsZXJNb2R1bGVcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUdyb3VwTGlzdENvbXBvbmVudCBleHRlbmRzIEZvcm1Hcm91cExpc3RNaXhpbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZGVmYXVsdENvbmZpZyA9IGRlZmF1bHRDb25maWdcbiAgZ3JvdXA6IEZvcm1Hcm91cDtcbiAgY29udHJvbDogRm9ybUFycmF5O1xuICAvKipcbiAgICogQnkgc2V0dGluZyB0aGlzIHRvIHRydWUgd2hlbiBhZGRpbmcvcmVtb3ZpbmcgaXRlbXMgZnJvbSBhcnJheSxcbiAgICogd2UgY2FuIGJsb2NrIG9yaWdpbmFsIHZhbHVlcyBmcm9tIG92ZXJ3cml0aW5nIGZvcm0gdmFsdWVzXG4gICAqICovXG4gIGJsb2NrVmFsdWUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIHJlcXVpcmVkIHRvIG5nRm9yIG9mIGNvbnRyb2xzIGluIHRlbXBsYXRlLCBtdXN0IGJlIGEgYmV0dGVyIHdheVxuICB9XG5cbiAgc2V0Q29udHJvbFZhbHVlKHZhbHVlczogYW55W10pIHtcbiAgICBpZih0aGlzLmNvbnRyb2wpIHtcbiAgICAgIGlmKHZhbHVlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBjbGVhciBhbnkgZXhpc3RpbmcgdmFsdWVzIHNvIHRoYXQgbmV3IHZhbHVlcyBkb24ndCBjb25jYXRlbmF0ZSBvbnRvIHRoZSBvbGRcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlczpbXSA9IHRoaXMuY29udHJvbC52YWx1ZTtcbiAgICAgICAgaWYoY3VycmVudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2wuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB0aGlzLmFkZEdyb3VwKHZhbHVlKSk7XG5cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcuZGlzcGxheUluaXRpYWxJdGVtKSB7XG4gICAgICAgIHRoaXMuYWRkR3JvdXAoKVxuICAgICAgfVxuICAgICAgLy8gbmVlZGVkIHRvIGVuc3VyZSBuZXcgYXJyYXkgaXRlbXMgcmVuZGVyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjbGlja0RlbGV0ZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5ibG9ja1ZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLmRlbGV0ZUdyb3VwKGluZGV4KTtcbiAgfVxuXG4gIGNsaWNrQWRkKCkge1xuICAgIHRoaXMuYmxvY2tWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy5hZGRHcm91cCgpO1xuICB9XG5cbiAgYWRkR3JvdXAodmFsdWUgPSBudWxsKSB7XG4gICAgdGhpcy5jb250cm9sLnB1c2goY3JlYXRlQ29udHJvbEZvclR5cGUodGhpcy5jb25maWcuaXRlbUNvbmZpZywgdmFsdWUpKTtcbiAgICAvLyBuZWVkZWQgdG8gZW5zdXJlIG5ldyBhcnJheSBpdGVtcyByZW5kZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KVxuICB9XG5cbiAgZGVsZXRlR3JvdXAoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29udHJvbC5yZW1vdmVBdChpbmRleCk7XG4gIH1cbn1cbiIsIlxuPGNyaXNwci1maWVsZC1jb250YWluZXJcbiAgW2NvbmZpZ109XCJjb25maWdcIlxuICBbZ3JvdXBdPVwiZ3JvdXBcIlxuICBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XG5cbiAgPGRpdiBbZm9ybUFycmF5TmFtZV09XCJjb25maWcuY29udHJvbE5hbWVcIj5cbiAgICA8IS0tIERvbid0IGFkZCB0cmFja0J5IGZ1bmN0aW9uLCBpdCBjb25mdXNlcyB0aGUgc3RhdGUgb2YgdGhlIGFycmF5IC0tPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbiBvZiBjb250cm9sPy5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgIDwhLS0gVE9ETzogdXNlIGNvbnRlbnQgcHJvamVjdGlvbiB0byBhbGxvdyBjdXN0b20gaXRlbSBsYWJlbCBjb21wb25lbnQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1oZWFkZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtaDJcIj4ge3sgY29uZmlnLml0ZW1MYWJlbEJ1aWxkZXIgPyBjb25maWcuaXRlbUxhYmVsQnVpbGRlcihpKSA6ICdJdGVtICcgKyAoaSArIDEpIH19IDwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICpuZ0lmPVwiaSArIDEgPiBjb25maWcubWluTGlzdExlbmd0aFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xpY2tEZWxldGUoaSlcIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBbZm9ybUdyb3VwXT1cImNvblwiPlxuICAgICAgICA8IS0tIFRPRE86IGlmIGNoaXBsaXN0cyBkaWRuJ3QgbmVlZCB0byBoYXZlIGxhYmVscyBtaXhlZCBpbiB3aXRoIHRoZWlyIHZhbHVlcyB3ZSBjb3VsZCB1c2UgW3ZhbHVlXT1cImNvbnRyb2wudmFsdWVcIiBiZWxvdyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBjb25maWcuaXRlbUNvbmZpZy5maWVsZHM7XCJcbiAgICAgICAgICBjcmlzcHJGaWVsZFxuICAgICAgICAgIFt2YWx1ZV09XCJibG9ja1ZhbHVlID8gbnVsbCA6IHZhbHVlICYmIHZhbHVlW2ldIHwgaW5pdGlhbENvbnRyb2xWYWx1ZSA6IGZpZWxkXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpZWxkXCJcbiAgICAgICAgICBbZ3JvdXBdPVwiY29uXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZ3JvdXAtZm9vdGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImFkZFwiXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgW2NvbG9yXT1cImNvbmZpZy5hZGRCdXR0b25Db2xvclwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tBZGQoKVwiPlxuICAgICAge3tjb25maWcuYWRkSXRlbUxhYmVsIHx8IGNvbmZpZy5hZGRCdXR0b25MYWJlbH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG48L2NyaXNwci1maWVsZC1jb250YWluZXI+XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3NyYy9saWIvZm9ybS1ncm91cC1saXN0L2Zvcm0tZ3JvdXAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL2Zvcm0tZ3JvdXAtbGlzdC9mb3JtLWdyb3VwLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRSw4REFBOEQ7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUF1QixNQUFNLHlCQUF5QixDQUFDO0FBQzlILDhEQUE4RDtBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFFekUsTUFBTSxhQUFhLEdBQWlDO0lBQ2xELGNBQWMsRUFBRSxVQUFV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QUFpQjt3QkFDakIsMkJBQTJCO3FCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IENyaXNwckZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi4vZmllbGQuZGlyZWN0aXZlJztcbmltcG9ydCB7IENyaXNwclBpcGVzTW9kdWxlIH0gZnJvbSAnLi4vcGlwZXMvY3Jpc3ByLXBpcGVzLm1vZHVsZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uSGFuZGxlck1vZHVsZSB9IGZyb20gJ0B0ZnQvZm9ybS12YWxpZGF0aW9uLWhhbmRsZXInO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBucndsL254L2VuZm9yY2UtbW9kdWxlLWJvdW5kYXJpZXNcbmltcG9ydCB7IENyaXNwckZpZWxkQ29tcG9uZW50LCBjcmlzcHJDb250cm9sTWl4aW4sIGNyZWF0ZUNvbnRyb2xGb3JUeXBlLCBGb3JtR3JvdXBMaXN0Q29uZmlnIH0gZnJvbSAnQHRmdC9jcmlzcHItZm9ybXMvdXRpbHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBucndsL254L2VuZm9yY2UtbW9kdWxlLWJvdW5kYXJpZXNcbmltcG9ydCB7IEZpZWxkQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnQHRmdC9jcmlzcHItZm9ybXMvdWknO1xuaW1wb3J0IHsgQ3Jpc3ByRGlzcGxheUZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlzcGxheS1maWVsZC5kaXJlY3RpdmUnO1xuXG5jb25zdCBkZWZhdWx0Q29uZmlnOiBQYXJ0aWFsPEZvcm1Hcm91cExpc3RDb25maWc+ID0ge1xuICBhZGRCdXR0b25MYWJlbDogJ0FERCBJVEVNJyxcbiAgbWluTGlzdExlbmd0aDogMSxcbn07XG5cbmNvbnN0IEZvcm1Hcm91cExpc3RNaXhpbiA9IGNyaXNwckNvbnRyb2xNaXhpbjxGb3JtR3JvdXBMaXN0Q29uZmlnPihDcmlzcHJGaWVsZENvbXBvbmVudCk7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcmlzcHItZm9ybS1ncm91cC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ3JvdXAtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZ3JvdXAtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBGaWVsZENvbnRhaW5lckNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIENyaXNwckZpZWxkRGlyZWN0aXZlLFxuICAgIENyaXNwckRpc3BsYXlGaWVsZERpcmVjdGl2ZSxcbiAgICBDcmlzcHJQaXBlc01vZHVsZSxcbiAgICBGb3JtVmFsaWRhdGlvbkhhbmRsZXJNb2R1bGVcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUdyb3VwTGlzdENvbXBvbmVudCBleHRlbmRzIEZvcm1Hcm91cExpc3RNaXhpbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZGVmYXVsdENvbmZpZyA9IGRlZmF1bHRDb25maWdcbiAgZ3JvdXA6IEZvcm1Hcm91cDtcbiAgY29udHJvbDogRm9ybUFycmF5O1xuICAvKipcbiAgICogQnkgc2V0dGluZyB0aGlzIHRvIHRydWUgd2hlbiBhZGRpbmcvcmVtb3ZpbmcgaXRlbXMgZnJvbSBhcnJheSxcbiAgICogd2UgY2FuIGJsb2NrIG9yaWdpbmFsIHZhbHVlcyBmcm9tIG92ZXJ3cml0aW5nIGZvcm0gdmFsdWVzXG4gICAqICovXG4gIGJsb2NrVmFsdWUgPSBmYWxzZTtcblxuICBzZWxlY3RlZEluZGV4OiBudW1iZXIgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIC8vIFRPRE86IHRoaXMgaXMgcmVxdWlyZWQgdG8gbmdGb3Igb2YgY29udHJvbHMgaW4gdGVtcGxhdGUsIG11c3QgYmUgYSBiZXR0ZXIgd2F5XG4gIH1cblxuICBzZXRDb250cm9sVmFsdWUodmFsdWVzOiBhbnlbXSkge1xuICAgIGlmKHRoaXMuY29udHJvbCkge1xuICAgICAgaWYodmFsdWVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGNsZWFyIGFueSBleGlzdGluZyB2YWx1ZXMgc28gdGhhdCBuZXcgdmFsdWVzIGRvbid0IGNvbmNhdGVuYXRlIG9udG8gdGhlIG9sZFxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzOltdID0gdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgICBpZihjdXJyZW50VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY29udHJvbC5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHRoaXMuYWRkR3JvdXAodmFsdWUpKTtcblxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5kaXNwbGF5SW5pdGlhbEl0ZW0pIHtcbiAgICAgICAgdGhpcy5hZGRHcm91cCgpXG4gICAgICB9XG4gICAgICAvLyBuZWVkZWQgdG8gZW5zdXJlIG5ldyBhcnJheSBpdGVtcyByZW5kZXJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNsaWNrRGVsZXRlKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmJsb2NrVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuZGVsZXRlR3JvdXAoaW5kZXgpO1xuICB9XG5cbiAgY2xpY2tBZGQoKSB7XG4gICAgdGhpcy5ibG9ja1ZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLmFkZEdyb3VwKCk7XG4gIH1cblxuICBhZGRHcm91cCh2YWx1ZSA9IG51bGwpIHtcbiAgICB0aGlzLmNvbnRyb2wucHVzaChjcmVhdGVDb250cm9sRm9yVHlwZSh0aGlzLmNvbmZpZy5pdGVtQ29uZmlnLCB2YWx1ZSkpO1xuICAgIC8vIG5lZWRlZCB0byBlbnN1cmUgbmV3IGFycmF5IGl0ZW1zIHJlbmRlclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pXG4gIH1cblxuICBkZWxldGVHcm91cChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jb250cm9sLnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIGNsaWNrRWRpdEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICB9XG59XG4iLCJcbjxjcmlzcHItZmllbGQtY29udGFpbmVyXG4gIFtjb25maWddPVwiY29uZmlnXCJcbiAgW2dyb3VwXT1cImdyb3VwXCJcbiAgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxuXG4gIDxkaXYgW2Zvcm1BcnJheU5hbWVdPVwiY29uZmlnLmNvbnRyb2xOYW1lXCI+XG5cbiAgICA8IS0tIERvbid0IGFkZCB0cmFja0J5IGZ1bmN0aW9uLCBpdCBjb25mdXNlcyB0aGUgc3RhdGUgb2YgdGhlIGFycmF5IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW1Db250cm9sIG9mIGNvbnRyb2w/LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29uZmlnLmRpc3BsYXlJdGVtQ29tcG9uZW50IHx8IGkgPT09IHNlbGVjdGVkSW5kZXggfHwgKGxhc3QgJiYgc2VsZWN0ZWRJbmRleCA/PyB0cnVlKTsgZWxzZSBkaXNwbGF5XCI+XG4gICAgICAgIDwhLS0gVE9ETzogdXNlIGNvbnRlbnQgcHJvamVjdGlvbiB0byBhbGxvdyBjdXN0b20gaXRlbSBsYWJlbCBjb21wb25lbnQgLS0+XG4gICAgICAgIDxkaXYgIGNsYXNzPVwiaXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1oMlwiPiB7eyBjb25maWcuaXRlbUxhYmVsQnVpbGRlciA/IGNvbmZpZy5pdGVtTGFiZWxCdWlsZGVyKGkpIDogJ0l0ZW0gJyArIChpICsgMSkgfX0gPC9zcGFuPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAqbmdJZj1cImkgKyAxID4gY29uZmlnLm1pbkxpc3RMZW5ndGhcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xpY2tEZWxldGUoaSlcIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtmb3JtR3JvdXBdPVwiaXRlbUNvbnRyb2xcIj5cbiAgICAgICAgICA8IS0tIFRPRE86IGlmIGNoaXBsaXN0cyBkaWRuJ3QgbmVlZCB0byBoYXZlIGxhYmVscyBtaXhlZCBpbiB3aXRoIHRoZWlyIHZhbHVlcyB3ZSBjb3VsZCB1c2UgW3ZhbHVlXT1cImNvbnRyb2wudmFsdWVcIiBiZWxvdyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgY29uZmlnLml0ZW1Db25maWcuZmllbGRzO1wiXG4gICAgICAgICAgICBjcmlzcHJGaWVsZFxuICAgICAgICAgICAgW3ZhbHVlXT1cImJsb2NrVmFsdWUgPyBudWxsIDogdmFsdWUgJiYgdmFsdWVbaV0gfCBpbml0aWFsQ29udHJvbFZhbHVlIDogZmllbGRcIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJmaWVsZFwiXG4gICAgICAgICAgICBbZ3JvdXBdPVwiaXRlbUNvbnRyb2xcIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZGlzcGxheS1maWVsZC1jb250YWluZXJcIlxuICAgICAgICAgIGNyaXNwckRpc3BsYXlGaWVsZFxuICAgICAgICAgIFtjb21wb25lbnRdPVwiY29uZmlnLmRpc3BsYXlJdGVtQ29tcG9uZW50XCJcbiAgICAgICAgICBbdmFsdWVdPVwiaXRlbUNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgIFtpbmRleF09XCJpXCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsaWNrRWRpdEl0ZW0oaSlcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImdyb3VwLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhZGRcIlxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIFtjb2xvcl09XCJjb25maWcuYWRkQnV0dG9uQ29sb3JcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrQWRkKClcIj5cbiAgICAgIHt7Y29uZmlnLmFkZEl0ZW1MYWJlbCB8fCBjb25maWcuYWRkQnV0dG9uTGFiZWx9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuPC9jcmlzcHItZmllbGQtY29udGFpbmVyPlxuIl19
@@ -0,0 +1,14 @@
1
+ import { Directive } from '@angular/core';
2
+ import { CrisprFieldComponent } from './crispr-field.abstract';
3
+ import { crisprControlMixin } from './crispr-control.mixin';
4
+ import * as i0 from "@angular/core";
5
+ const CrisprDisplayFieldMixin = crisprControlMixin(CrisprFieldComponent);
6
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
7
+ export class CrisprDisplayFieldComponent extends CrisprDisplayFieldMixin {
8
+ }
9
+ CrisprDisplayFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CrisprDisplayFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
10
+ CrisprDisplayFieldComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CrisprDisplayFieldComponent, usesInheritance: true, ngImport: i0 });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CrisprDisplayFieldComponent, decorators: [{
12
+ type: Directive
13
+ }] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jpc3ByLWRpc3BsYXktZmllbGQuYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy91dGlscy9hYnN0cmFjdHMvY3Jpc3ByLWRpc3BsYXktZmllbGQuYWJzdHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFNUQsTUFBTSx1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBc0Isb0JBQW9CLENBQUMsQ0FBQztBQUk5RixrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQiwyQkFBNEIsU0FBUSx1QkFBdUI7O3dIQUEzRCwyQkFBMkI7NEdBQTNCLDJCQUEyQjsyRkFBM0IsMkJBQTJCO2tCQUZoRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBDcmlzcHJDb250cm9sQ29uZmlnLFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgT25Jbml0LCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENyaXNwckZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9jcmlzcHItZmllbGQuYWJzdHJhY3QnO1xuaW1wb3J0IHsgY3Jpc3ByQ29udHJvbE1peGluIH0gZnJvbSAnLi9jcmlzcHItY29udHJvbC5taXhpbic7XG5cbmNvbnN0IENyaXNwckRpc3BsYXlGaWVsZE1peGluID0gY3Jpc3ByQ29udHJvbE1peGluPENyaXNwckNvbnRyb2xDb25maWc+KENyaXNwckZpZWxkQ29tcG9uZW50KTtcblxuXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENyaXNwckRpc3BsYXlGaWVsZENvbXBvbmVudCBleHRlbmRzIENyaXNwckRpc3BsYXlGaWVsZE1peGluIGltcGxlbWVudHMgT25Jbml0IHtcbiAgaW5kZXg/OiBudW1iZXI7XG59XG5cblxuIl19
@@ -1,4 +1,5 @@
1
1
  export * from './autocomplete-field.abstract';
2
2
  export * from './crispr-control.mixin';
3
3
  export * from './crispr-field.abstract';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy91dGlscy9hYnN0cmFjdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F1dG9jb21wbGV0ZS1maWVsZC5hYnN0cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2NyaXNwci1jb250cm9sLm1peGluJztcbmV4cG9ydCAqIGZyb20gJy4vY3Jpc3ByLWZpZWxkLmFic3RyYWN0JztcbiJdfQ==
4
+ export * from './crispr-display-field.abstract';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy91dGlscy9hYnN0cmFjdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXV0b2NvbXBsZXRlLWZpZWxkLmFic3RyYWN0JztcbmV4cG9ydCAqIGZyb20gJy4vY3Jpc3ByLWNvbnRyb2wubWl4aW4nO1xuZXhwb3J0ICogZnJvbSAnLi9jcmlzcHItZmllbGQuYWJzdHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmlzcHItZGlzcGxheS1maWVsZC5hYnN0cmFjdCc7XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC1saXN0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3V0aWxzL21vZGVscy9mb3JtLWdyb3VwLWxpc3QuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IENyaXNwckNvbnRyb2xDb25maWcsIENvbnRyb2xUeXBlLCBTdWJHcm91cENvbmZpZyB9IGZyb20gJy4vY3Jpc3ByLWZpZWxkLmNvbmZpZyc7XG5cbi8vIFRPRE86IEJlbG93IHR5cGUgd291bGQgYmUgaWRlYWwgdHlwZSB0byB1c2UgZm9yIGl0ZW1Db25maWcsIGJ1dCB0aGVyZSB3ZXJlIHNvbWUgaXNzdWVzIGdldHRpbmcgaXQgdG8gd29ya1xuLy8gZXhwb3J0IHR5cGUgR3JvdXBMaXN0SXRlbUNvbmZpZyA9IE9taXQ8U3ViR3JvdXBDb25maWcsICdjb250cm9sTmFtZSc+ICYge1xuLy8gICAvKipcbi8vICAgICogQGRlcHJlY2F0ZWQgY29udHJvbE5hbWUgZG9lc24ndCBkbyBhbnl0aGluZyBpbiB0aGUgaXRlbUNvbmZpZyBhbmQgc2hvdWxkIGJlIHJlbW92ZWRcbi8vICAgICogICovXG4vLyAgIGNvbnRyb2xOYW1lPzogc3RyaW5nO1xuLy8gfVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1Hcm91cExpc3RDb25maWcgZXh0ZW5kcyBDcmlzcHJDb250cm9sQ29uZmlnIHtcbiAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLkdST1VQX0xJU1Q7XG4gIGl0ZW1Db25maWc6IFN1Ykdyb3VwQ29uZmlnOyAvLyBUT0RPOiBzaG91bGQgYmUgR3JvdXBMaXN0SXRlbUNvbmZpZyBidXQgaGF2aW5nIGlzc3VlcyB3b3JraW5nIGl0IG91dFxuICBpdGVtTGFiZWxCdWlsZGVyPzogKGluZGV4OiBudW1iZXIpID0+IHN0cmluZztcbiAgLyoqIFRoZSBudW1iZXIgb2YgbGlzdCBpdGVtcyB0aGF0IGEgdXNlciBjYW4gZGVsZXRlICovXG4gIG1pbkxpc3RMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBJZiBubyBpdGVtcyBhcmUgcGFzc2VkIGFzIGFuIGluaXRpYWwgdmFsdWUsIHNob3VsZCBhbiBpbml0aWFsIGVtcHR5IGl0ZW0gYmUgY3JlYXRlZCAqL1xuICBkaXNwbGF5SW5pdGlhbEl0ZW0/OiBib29sZWFuO1xuICBhZGRCdXR0b25Db2xvcj86IFRoZW1lUGFsZXR0ZTtcbiAgYWRkQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGFkZEJ1dHRvbkxhYmVsLCBhZGRJdGVtTGFiZWwgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICovXG4gIGFkZEl0ZW1MYWJlbD86IHN0cmluZztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC1saXN0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3Jpc3ByLWZvcm1zL3V0aWxzL21vZGVscy9mb3JtLWdyb3VwLWxpc3QuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IENyaXNwckNvbnRyb2xDb25maWcsIENvbnRyb2xUeXBlLCBTdWJHcm91cENvbmZpZyB9IGZyb20gJy4vY3Jpc3ByLWZpZWxkLmNvbmZpZyc7XG5cbi8vIFRPRE86IEJlbG93IHR5cGUgd291bGQgYmUgaWRlYWwgdHlwZSB0byB1c2UgZm9yIGl0ZW1Db25maWcsIGJ1dCB0aGVyZSB3ZXJlIHNvbWUgaXNzdWVzIGdldHRpbmcgaXQgdG8gd29ya1xuLy8gZXhwb3J0IHR5cGUgR3JvdXBMaXN0SXRlbUNvbmZpZyA9IE9taXQ8U3ViR3JvdXBDb25maWcsICdjb250cm9sTmFtZSc+ICYge1xuLy8gICAvKipcbi8vICAgICogQGRlcHJlY2F0ZWQgY29udHJvbE5hbWUgZG9lc24ndCBkbyBhbnl0aGluZyBpbiB0aGUgaXRlbUNvbmZpZyBhbmQgc2hvdWxkIGJlIHJlbW92ZWRcbi8vICAgICogICovXG4vLyAgIGNvbnRyb2xOYW1lPzogc3RyaW5nO1xuLy8gfVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1Hcm91cExpc3RDb25maWcgZXh0ZW5kcyBDcmlzcHJDb250cm9sQ29uZmlnIHtcbiAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLkdST1VQX0xJU1Q7XG4gIGl0ZW1Db25maWc6IFN1Ykdyb3VwQ29uZmlnOyAvLyBUT0RPOiBzaG91bGQgYmUgR3JvdXBMaXN0SXRlbUNvbmZpZyBidXQgaGF2aW5nIGlzc3VlcyB3b3JraW5nIGl0IG91dFxuICBpdGVtTGFiZWxCdWlsZGVyPzogKGluZGV4OiBudW1iZXIpID0+IHN0cmluZztcbiAgLyoqIFRoZSBudW1iZXIgb2YgbGlzdCBpdGVtcyB0aGF0IGEgdXNlciBjYW4gZGVsZXRlICovXG4gIG1pbkxpc3RMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBJZiBubyBpdGVtcyBhcmUgcGFzc2VkIGFzIGFuIGluaXRpYWwgdmFsdWUsIHNob3VsZCBhbiBpbml0aWFsIGVtcHR5IGl0ZW0gYmUgY3JlYXRlZCAqL1xuICBkaXNwbGF5SW5pdGlhbEl0ZW0/OiBib29sZWFuO1xuICBhZGRCdXR0b25Db2xvcj86IFRoZW1lUGFsZXR0ZTtcbiAgYWRkQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIGRpc3BsYXlJdGVtQ29tcG9uZW50PzogYW55OyAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBhIGNvbXBvbmVudCB0eXBlXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGFkZEJ1dHRvbkxhYmVsLCBhZGRJdGVtTGFiZWwgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICovXG4gIGFkZEl0ZW1MYWJlbD86IHN0cmluZztcbn1cbiJdfQ==
@@ -152,6 +152,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImpor
152
152
  type: Directive
153
153
  }] });
154
154
 
155
+ const CrisprDisplayFieldMixin = crisprControlMixin(CrisprFieldComponent);
156
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
157
+ class CrisprDisplayFieldComponent extends CrisprDisplayFieldMixin {
158
+ }
159
+ CrisprDisplayFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CrisprDisplayFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
160
+ CrisprDisplayFieldComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CrisprDisplayFieldComponent, usesInheritance: true, ngImport: i0 });
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CrisprDisplayFieldComponent, decorators: [{
162
+ type: Directive
163
+ }] });
164
+
155
165
  /**
156
166
  * Analyze the config and build a form control to spec. Notice we don't use FormBuilder here
157
167
  * as we want to keep this function pure.
@@ -266,5 +276,5 @@ function allowedFileType(matchExp) {
266
276
  * Generated bundle index. Do not edit.
267
277
  */
268
278
 
269
- export { AbstractAutocompleteComponent, ControlType, CrisprFieldComponent, DEFAULT_EMPTY_OPTIONS_MESSAGE, allowedFileExtValidator, allowedFileType, buildFormGroupFromConfig, callOptionsIfFunction, convertBytesToMb, createControlForType, crisprControlMixin, filterOptionsByLabel, isControlConfig, maxFileSizeValidator, observablifyOptions, valueIn };
279
+ export { AbstractAutocompleteComponent, ControlType, CrisprDisplayFieldComponent, CrisprFieldComponent, DEFAULT_EMPTY_OPTIONS_MESSAGE, allowedFileExtValidator, allowedFileType, buildFormGroupFromConfig, callOptionsIfFunction, convertBytesToMb, createControlForType, crisprControlMixin, filterOptionsByLabel, isControlConfig, maxFileSizeValidator, observablifyOptions, valueIn };
270
280
  //# sourceMappingURL=tft-crispr-forms-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tft-crispr-forms-utils.mjs","sources":["../../../../libs/crispr-forms/utils/operators/form.operators.ts","../../../../libs/crispr-forms/utils/models/select-field.config.ts","../../../../libs/crispr-forms/utils/models/crispr-field.config.ts","../../../../libs/crispr-forms/utils/models/heading.config.ts","../../../../libs/crispr-forms/utils/abstracts/crispr-control.mixin.ts","../../../../libs/crispr-forms/utils/abstracts/crispr-field.abstract.ts","../../../../libs/crispr-forms/utils/functions/callOptionsIfFunction.ts","../../../../libs/crispr-forms/utils/functions/observablifyOptions.ts","../../../../libs/crispr-forms/utils/abstracts/autocomplete-field.abstract.ts","../../../../libs/crispr-forms/utils/functions/createControlForType.ts","../../../../libs/crispr-forms/utils/functions/isControlConfig.ts","../../../../libs/crispr-forms/utils/functions/buildFormGroupFromConfig.ts","../../../../libs/crispr-forms/utils/functions/filterOptionsByLabel.ts","../../../../libs/crispr-forms/utils/functions/image-compression.helpers.ts","../../../../libs/crispr-forms/utils/tft-crispr-forms-utils.ts"],"sourcesContent":["import { map } from 'rxjs/operators';\n\nexport function valueIn (values: string[]) {\n return map( (value: string) => {\n if (value) {\n return values.some(v => {\n if (isRegex(v)) {\n const trimmedStringForRegex = v.substr(1, v.length - 2);\n const regex = new RegExp(trimmedStringForRegex);\n return regex.test(value);\n } else {\n return v === value;\n }\n });\n } else {\n return false;\n }\n });\n}\n\nfunction isRegex(string: string) {\n return string.startsWith('/') && string.endsWith('/');\n}\n","import { Observable } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { ControlType, FieldDescriptors, Info, MatFieldProperties, CrisprControlConfig } from './crispr-field.config';\n\nexport interface SelectFieldConfig extends Omit<CrisprControlConfig, 'placeholder'>,\n FieldDescriptors,\n MatFieldProperties {\n controlType: ControlType.SELECT,\n emptyOptionsMessage?: string;\n multiple?: boolean;\n enableToggleAll?: boolean;\n options: OptionsType;\n}\n\nexport type OptionsType = SelectOption[] | Observable<SelectOption[]> | OptionsCallback | Promise<SelectOption[]>;\n\nexport type OptionsCallback = (group?: FormGroup) => OptionsType;\nexport type ReactiveOptionsCallback = (group?: FormGroup) => Observable<SelectOption[]>;\n// tslint:disable-next-line: max-line-length\nexport type AutocompleteOptionsCallback = (group?: FormGroup, searchTerm?: string) => OptionsType;\nexport interface SelectOption {\n label: string;\n value: any;\n imageUrl?: string;\n info?: Info;\n}\n\nexport const DEFAULT_EMPTY_OPTIONS_MESSAGE = 'No Items';\n","import { FormGroup, ValidatorFn } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { TooltipPosition } from '@angular/material/tooltip';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { ErrorDictionary } from '@tft/form-validation-handler';\n\nimport type {\n SelectFieldConfig,\n HeadingConfig,\n ButtonConfig,\n DatepickerFieldConfig,\n InputFieldConfig,\n CheckboxFieldConfig,\n TextareaFieldConfig,\n AutocompleteFieldConfig,\n FormGroupListConfig,\n AutocompleteChiplistFieldConfig,\n SliderFieldConfig,\n DividerConfig,\n SelectOption,\n RadioFieldConfig,\n ImageUploadFieldConfig,\n FileUploadFieldConfig,\n UnitConversionFieldConfig\n} from '../models';\n\nimport { ThemePalette } from '@angular/material/core';\n\n// export type ControlType = keyof typeof FIELD_COMPONENTS;\nexport enum ControlType {\n AUTOCOMPLETE = 'autocomplete',\n AUTOCOMPLETE_CHIPLIST = 'autocompleteChiplist',\n BUTTON = 'button',\n CHECKBOX = 'checkbox',\n CUSTOM = 'custom',\n DATEPICKER = 'datepicker',\n DIVIDER = 'divider',\n FILE_UPLOAD = 'fileUpload',\n HEADING = 'heading',\n INPUT = 'input',\n IMAGE_UPLOAD = 'imageUpload',\n GROUP_LIST = 'groupList',\n RADIO = 'radio',\n SELECT = 'select',\n SLIDER = 'slider',\n SUB_GROUP = 'subGroup',\n TEXTAREA = 'textarea',\n UNIT_CONVERSION = 'unitConversion',\n}\n\n/**\n * The base interface for all the fields in the form's config\n */\nexport interface CrisprFieldConfig {\n controlType?: ControlType;\n classes?: string[];\n component?: any; // TODO: Define this better\n}\n\ntype RestrictedControlName<M> = M extends null ? string : keyof M;\n/**\n * The base interface for all control configs\n */\nexport interface CrisprControlConfig<M = null> extends CrisprFieldConfig {\n controlName: RestrictedControlName<M>\n controlType: ControlType;\n validators?: ValidatorFn[];\n computeValue?: (group: FormGroup) => Observable<unknown>;\n disabledCallback?: (group: FormGroup) => Observable<boolean>;\n /**\n * Hide the control when disabled\n * @default false\n */\n hideDisabled?: boolean;\n heading?: HeadingConfig;\n hint?: string;\n}\n\n/**\n * Holds properties for control fields that describe field behavior to users\n */\nexport interface FieldDescriptors {\n label: string;\n info?: Info;\n fieldSuffix?: string;\n placeholder?: string;\n}\n\nexport interface MatFieldProperties {\n appearance?: MatFormFieldAppearance;\n color?: ThemePalette;\n}\n\nexport interface Info {\n content: string;\n tooltipPosition?: TooltipPosition;\n iconName?: string;\n}\n\n// TODO: having AnyFieldConfig as the default for C seems redundant and silly\nexport interface AbstractGroupConfig<C extends CrisprFieldConfig = AnyFieldConfig> {\n // this union is needed, it joins any custom config provided by users to our default config options\n fields?: (AnyFieldConfig | C)[];\n}\nexport interface FormConfig<C = AnyFieldConfig> extends AbstractGroupConfig<C> {\n classes?: string[];\n errorDictionary?: ErrorDictionary;\n autoComplete?: string;\n /** @deprecated use autoComplete */\n autocomplete?: string;\n validators?: ValidatorFn[];\n}\n/**\n * Configuration for SubGroup components\n */\nexport interface SubGroupConfig extends CrisprControlConfig, AbstractGroupConfig<any> {\n controlType: ControlType.SUB_GROUP;\n}\n\nexport type AnyFieldConfig = InputFieldConfig\n | SelectFieldConfig\n | RadioFieldConfig\n | FormGroupListConfig\n | SubGroupConfig\n | AutocompleteFieldConfig\n | AutocompleteChiplistFieldConfig\n | TextareaFieldConfig\n | CheckboxFieldConfig\n | DatepickerFieldConfig\n | SliderFieldConfig\n | FileUploadFieldConfig\n | ImageUploadFieldConfig\n | HeadingConfig\n | ButtonConfig\n | DividerConfig\n | UnitConversionFieldConfig;\n // | CustomFieldConfig;\n\n\nexport type ControlValue<T = any> = boolean | string | number | Date | SelectOption | SelectOption[] | ControlGroupValue | T;\n\nexport type ControlGroupValue = {[key: string]: ControlValue};\n","import { FieldDescriptors, CrisprFieldConfig, ControlType } from './crispr-field.config';\n// This is done different from the rest of the fields because\n// when we use the heading inside of a field we don't want to have to\n// pass a controlType\nexport interface HeadingConfig extends\n Omit<CrisprFieldConfig, 'controlType'>,\n Omit<FieldDescriptors, 'placeholder' | 'fieldSuffix'> {\n // controlType is optional here because this component can be used as a crispr field where it needs a ControlType\n // or by a crispr field where it doesn't need a ControlType\n controlType?: ControlType.HEADING;\n typographyClass?: string;\n label: string;\n};\n","import { FormGroup, AbstractControl } from '@angular/forms';\nimport { CrisprControlConfig, ControlValue, ControlType } from '../models/crispr-field.config';\nimport { CrisprFieldComponent } from './crispr-field.abstract';\n\nexport function crisprControlMixin<C extends CrisprControlConfig>(BaseClass: typeof CrisprFieldComponent) {\n return class extends BaseClass<C> {\n config: C;\n group: FormGroup;\n control: AbstractControl;\n\n _value: ControlValue;\n set value(value: ControlValue) {\n this.setControlValue(value);\n this._value = value;\n }\n\n get value() {\n return this._value;\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.control = this.group.get(this.config.controlName);\n this.setControlValue(this.value);\n // setTimeouts are ugly but this seems to be the only way to get the computed field to compute initial values\n setTimeout(()=> {\n this.control.updateValueAndValidity();\n })\n }\n\n setControlValue(value: ControlValue) {\n if(value && this.control && this.config.controlType !== ControlType.SUB_GROUP) {\n this.control.setValue(value)\n }\n }\n }\n}\n","import type {\n CrisprFieldConfig,\n} from '../models';\nimport { OnInit, Directive } from '@angular/core';\n\n@Directive({\n standalone: true\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class CrisprFieldComponent<C extends CrisprFieldConfig> implements OnInit {\n config: C;\n defaultConfig?: Partial<C>\n\n ngOnInit() {\n this.applyDefaultConfig();\n }\n\n applyDefaultConfig() {\n this.config = this.defaultConfig ? {...this.defaultConfig, ...this.config} : this.config;\n }\n}\n\n\n","import { FormGroup } from \"@angular/forms\";\nimport { AutocompleteOptionsCallback, OptionsType } from \"../models\";\n\nexport function callOptionsIfFunction(\n options: OptionsType | AutocompleteOptionsCallback,\n parentGroup?: FormGroup,\n searchString?: string\n): OptionsType {\n return options instanceof Function ? options(parentGroup, searchString) : options;\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { from, isObservable, Observable, of } from \"rxjs\";\nimport { OptionsType, SelectOption } from \"../models\";\nimport { callOptionsIfFunction } from \"./callOptionsIfFunction\";\n\n/**\n * The user can give us select options as an array, a function that resolves to a promise,\n * or an observable. This functions consumes any of those and returns an observable that\n * resolves an array of options\n *\n * @param options the options passed in from the config\n * @param emptyMessageOption the message to display when the array is empty\n */\n export function observablifyOptions(\n options: OptionsType,\n parentGroup: FormGroup,\n searchString?: string,\n): Observable<SelectOption[]> {\n const calledOptions = callOptionsIfFunction(options, parentGroup, searchString);\n // if options are a promise\n const observableOptions = calledOptions instanceof Promise\n // convert to observable\n ? from(calledOptions)\n // if array that isn't empty\n : Array.isArray(calledOptions) && calledOptions.length\n // convert to observable\n ? of(calledOptions)\n // if observable\n : isObservable(calledOptions)\n // return it\n ? calledOptions\n // else an empty array\n : of([]);\n return observableOptions;\n}\n","import { OnInit, Directive } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap } from 'rxjs/operators';\n\nimport { crisprControlMixin } from './crispr-control.mixin';\nimport type { AutocompleteFieldConfig, AutocompleteChiplistFieldConfig, SelectOption } from '../models';\nimport { CrisprFieldComponent } from './crispr-field.abstract';\nimport { observablifyOptions } from '../functions/observablifyOptions';\n\ntype AutocompleteConfigTypes = AutocompleteFieldConfig | AutocompleteChiplistFieldConfig;\n\nconst AbstractAutocompleteFieldMixin = crisprControlMixin<AutocompleteConfigTypes>(CrisprFieldComponent);\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class AbstractAutocompleteComponent<C>\n extends AbstractAutocompleteFieldMixin implements OnInit {\n // we need a separate control for the UI because of the way the material autocomplete chiplist works\n autocompleteInputControl = new FormControl('');\n options$: Observable<SelectOption[]>\n config: AutocompleteConfigTypes & C;\n ngOnInit() {\n super.ngOnInit();\n\n this.group.addControl(this.config.controlName, new FormControl());\n // filter options by the search string using either the default filter function or one passed in through config\n this.options$ = this.autocompleteInputControl.valueChanges.pipe(\n // this is needed to have the options panel to open on focus\n startWith(''),\n debounceTime(this.config.typeDebounceTime),\n map((searchText: string) => typeof searchText === 'string' ? searchText?.trim() : ''),\n distinctUntilChanged(),\n switchMap((searchText: string) => observablifyOptions(this.config.options, this.group, searchText)),\n shareReplay(1),\n );\n }\n}\n","import { FormArray, FormControl } from \"@angular/forms\";\nimport { AnyFieldConfig, ControlType, ControlValue, CrisprControlConfig, FormConfig, FormGroupListConfig } from \"../models\";\nimport { buildFormGroupFromConfig } from \"./buildFormGroupFromConfig\";\n\n/**\n * Analyze the config and build a form control to spec. Notice we don't use FormBuilder here\n * as we want to keep this function pure.\n * @param controlConfig the configuration object for the control to build\n * @param value an initial value to use if passed in\n */\n export function createControlForType(controlConfig: AnyFieldConfig, value: ControlValue = null) {\n // build form control out based on the control type\n const control = controlConfig.controlType === ControlType.SUB_GROUP\n ? buildFormGroupFromConfig(controlConfig as FormConfig, value)\n : controlConfig.controlType === ControlType.GROUP_LIST\n ? new FormArray([], (controlConfig as FormGroupListConfig).validators)\n : new FormControl(\n value || null,\n (controlConfig as CrisprControlConfig).validators\n );\n\n return control;\n}\n","import { CrisprControlConfig, CrisprFieldConfig } from \"../models\";\n\n/**\n * Determines if the field config is for a form control (not a divider, heading or other non-control field)\n * */\n export function isControlConfig(fieldConfig: CrisprFieldConfig): fieldConfig is CrisprControlConfig {\n return 'controlName' in fieldConfig;\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { AnyFieldConfig, FormConfig } from \"../models\";\nimport { createControlForType } from \"./createControlForType\";\nimport { isControlConfig } from \"./isControlConfig\";\n\n/**\n * builds out form group based on config\n * @param config a configuration for a form group\n * @param value an object of initial values to pass in\n * @param group the form group to modify and build out\n */\n export function buildFormGroupFromConfig(config: FormConfig, value = null, group: FormGroup = new FormGroup({}) ) {\n config.fields.forEach( (controlConfig: AnyFieldConfig) => {\n if (isControlConfig(controlConfig)) {\n // then add a control to the group using the controlName from configuration\n const {controlName} = controlConfig;\n if (group.get(controlName)) {\n group.removeControl(controlName);\n }\n // if there's a value object and it has a non-null/undefined value for this field use it.\n // Otherwise, default to null\n const controlValue = (value && value[controlName]) ?? null;\n const control = createControlForType(controlConfig, controlValue)\n group.addControl(controlName, control);\n }\n });\n group.setValidators(config.validators);\n return group;\n}\n","import { SelectOption } from \"../models\";\n\n/**\n * A basic filter function that filters the search string against the label of the options object\n * @param options the array of options to filter\n * @param searchString the string from the input\n */\n export function filterOptionsByLabel(options: SelectOption[], searchString: string) {\n return options.filter(option => {\n return option.label && option.label.toLowerCase().includes(searchString.toLowerCase());\n });\n}\n","import { FormControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\n\nexport function convertBytesToMb( bytes: number): number {\n return bytes/1048576;\n}\n\nexport function maxFileSizeValidator(maxFileSize: number): ValidatorFn {\n return (control: FormControl): ValidationErrors | null => {\n const controlValue = control.value;\n if (!(controlValue instanceof File)) {\n return null;\n }\n const actualFileSize = +convertBytesToMb(controlValue.size).toPrecision(3);\n if (maxFileSize > actualFileSize) return null;\n return {maxFileSize: { maxFileSize, actualFileSize }};\n }\n}\n\nexport function allowedFileExtValidator(allowedFileExtensions: string[], onlyAllowFiles = true): ValidatorFn {\n return (control: FormControl): ValidationErrors | null => {\n const controlValue = control.value;\n const isFile = controlValue instanceof File;\n if (!onlyAllowFiles && !isFile) return null;\n const actualExtension = isFile ? controlValue.name.split('.').pop().toLocaleLowerCase() : 'Not a file';\n const isAllowedExtension = allowedFileExtensions.includes(actualExtension);\n if(isAllowedExtension) {\n return null;\n }\n return {allowedExtension: { allowedFileExtensions, actualExtension }};\n }\n}\n\nexport function allowedFileType(matchExp: string | RegExp): ValidatorFn {\n return (formControl) => {\n const value = (formControl as FormControl).value;\n if (!(value instanceof File)) return null\n const type = value.type;\n const matches = type.match(matchExp)\n if (!type || !matches?.length) {\n return {\n allowedFileType: {\n actualType: type,\n allowedTypeExp: matchExp\n }\n }\n } else {\n return null\n }\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tft-crispr-forms-utils.mjs","sources":["../../../../libs/crispr-forms/utils/operators/form.operators.ts","../../../../libs/crispr-forms/utils/models/select-field.config.ts","../../../../libs/crispr-forms/utils/models/crispr-field.config.ts","../../../../libs/crispr-forms/utils/models/heading.config.ts","../../../../libs/crispr-forms/utils/abstracts/crispr-control.mixin.ts","../../../../libs/crispr-forms/utils/abstracts/crispr-field.abstract.ts","../../../../libs/crispr-forms/utils/functions/callOptionsIfFunction.ts","../../../../libs/crispr-forms/utils/functions/observablifyOptions.ts","../../../../libs/crispr-forms/utils/abstracts/autocomplete-field.abstract.ts","../../../../libs/crispr-forms/utils/abstracts/crispr-display-field.abstract.ts","../../../../libs/crispr-forms/utils/functions/createControlForType.ts","../../../../libs/crispr-forms/utils/functions/isControlConfig.ts","../../../../libs/crispr-forms/utils/functions/buildFormGroupFromConfig.ts","../../../../libs/crispr-forms/utils/functions/filterOptionsByLabel.ts","../../../../libs/crispr-forms/utils/functions/image-compression.helpers.ts","../../../../libs/crispr-forms/utils/tft-crispr-forms-utils.ts"],"sourcesContent":["import { map } from 'rxjs/operators';\n\nexport function valueIn (values: string[]) {\n return map( (value: string) => {\n if (value) {\n return values.some(v => {\n if (isRegex(v)) {\n const trimmedStringForRegex = v.substr(1, v.length - 2);\n const regex = new RegExp(trimmedStringForRegex);\n return regex.test(value);\n } else {\n return v === value;\n }\n });\n } else {\n return false;\n }\n });\n}\n\nfunction isRegex(string: string) {\n return string.startsWith('/') && string.endsWith('/');\n}\n","import { Observable } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { ControlType, FieldDescriptors, Info, MatFieldProperties, CrisprControlConfig } from './crispr-field.config';\n\nexport interface SelectFieldConfig extends Omit<CrisprControlConfig, 'placeholder'>,\n FieldDescriptors,\n MatFieldProperties {\n controlType: ControlType.SELECT,\n emptyOptionsMessage?: string;\n multiple?: boolean;\n enableToggleAll?: boolean;\n options: OptionsType;\n}\n\nexport type OptionsType = SelectOption[] | Observable<SelectOption[]> | OptionsCallback | Promise<SelectOption[]>;\n\nexport type OptionsCallback = (group?: FormGroup) => OptionsType;\nexport type ReactiveOptionsCallback = (group?: FormGroup) => Observable<SelectOption[]>;\n// tslint:disable-next-line: max-line-length\nexport type AutocompleteOptionsCallback = (group?: FormGroup, searchTerm?: string) => OptionsType;\nexport interface SelectOption {\n label: string;\n value: any;\n imageUrl?: string;\n info?: Info;\n}\n\nexport const DEFAULT_EMPTY_OPTIONS_MESSAGE = 'No Items';\n","import { FormGroup, ValidatorFn } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { TooltipPosition } from '@angular/material/tooltip';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\nimport { ErrorDictionary } from '@tft/form-validation-handler';\n\nimport type {\n SelectFieldConfig,\n HeadingConfig,\n ButtonConfig,\n DatepickerFieldConfig,\n InputFieldConfig,\n CheckboxFieldConfig,\n TextareaFieldConfig,\n AutocompleteFieldConfig,\n FormGroupListConfig,\n AutocompleteChiplistFieldConfig,\n SliderFieldConfig,\n DividerConfig,\n SelectOption,\n RadioFieldConfig,\n ImageUploadFieldConfig,\n FileUploadFieldConfig,\n UnitConversionFieldConfig\n} from '../models';\n\nimport { ThemePalette } from '@angular/material/core';\n\n// export type ControlType = keyof typeof FIELD_COMPONENTS;\nexport enum ControlType {\n AUTOCOMPLETE = 'autocomplete',\n AUTOCOMPLETE_CHIPLIST = 'autocompleteChiplist',\n BUTTON = 'button',\n CHECKBOX = 'checkbox',\n CUSTOM = 'custom',\n DATEPICKER = 'datepicker',\n DIVIDER = 'divider',\n FILE_UPLOAD = 'fileUpload',\n HEADING = 'heading',\n INPUT = 'input',\n IMAGE_UPLOAD = 'imageUpload',\n GROUP_LIST = 'groupList',\n RADIO = 'radio',\n SELECT = 'select',\n SLIDER = 'slider',\n SUB_GROUP = 'subGroup',\n TEXTAREA = 'textarea',\n UNIT_CONVERSION = 'unitConversion',\n}\n\n/**\n * The base interface for all the fields in the form's config\n */\nexport interface CrisprFieldConfig {\n controlType?: ControlType;\n classes?: string[];\n component?: any; // TODO: Define this better\n}\n\ntype RestrictedControlName<M> = M extends null ? string : keyof M;\n/**\n * The base interface for all control configs\n */\nexport interface CrisprControlConfig<M = null> extends CrisprFieldConfig {\n controlName: RestrictedControlName<M>\n controlType: ControlType;\n validators?: ValidatorFn[];\n computeValue?: (group: FormGroup) => Observable<unknown>;\n disabledCallback?: (group: FormGroup) => Observable<boolean>;\n /**\n * Hide the control when disabled\n * @default false\n */\n hideDisabled?: boolean;\n heading?: HeadingConfig;\n hint?: string;\n}\n\n/**\n * Holds properties for control fields that describe field behavior to users\n */\nexport interface FieldDescriptors {\n label: string;\n info?: Info;\n fieldSuffix?: string;\n placeholder?: string;\n}\n\nexport interface MatFieldProperties {\n appearance?: MatFormFieldAppearance;\n color?: ThemePalette;\n}\n\nexport interface Info {\n content: string;\n tooltipPosition?: TooltipPosition;\n iconName?: string;\n}\n\n// TODO: having AnyFieldConfig as the default for C seems redundant and silly\nexport interface AbstractGroupConfig<C extends CrisprFieldConfig = AnyFieldConfig> {\n // this union is needed, it joins any custom config provided by users to our default config options\n fields?: (AnyFieldConfig | C)[];\n}\nexport interface FormConfig<C = AnyFieldConfig> extends AbstractGroupConfig<C> {\n classes?: string[];\n errorDictionary?: ErrorDictionary;\n autoComplete?: string;\n /** @deprecated use autoComplete */\n autocomplete?: string;\n validators?: ValidatorFn[];\n}\n/**\n * Configuration for SubGroup components\n */\nexport interface SubGroupConfig extends CrisprControlConfig, AbstractGroupConfig<any> {\n controlType: ControlType.SUB_GROUP;\n}\n\nexport type AnyFieldConfig = InputFieldConfig\n | SelectFieldConfig\n | RadioFieldConfig\n | FormGroupListConfig\n | SubGroupConfig\n | AutocompleteFieldConfig\n | AutocompleteChiplistFieldConfig\n | TextareaFieldConfig\n | CheckboxFieldConfig\n | DatepickerFieldConfig\n | SliderFieldConfig\n | FileUploadFieldConfig\n | ImageUploadFieldConfig\n | HeadingConfig\n | ButtonConfig\n | DividerConfig\n | UnitConversionFieldConfig;\n // | CustomFieldConfig;\n\n\nexport type ControlValue<T = any> = boolean | string | number | Date | SelectOption | SelectOption[] | ControlGroupValue | T;\n\nexport type ControlGroupValue = {[key: string]: ControlValue};\n","import { FieldDescriptors, CrisprFieldConfig, ControlType } from './crispr-field.config';\n// This is done different from the rest of the fields because\n// when we use the heading inside of a field we don't want to have to\n// pass a controlType\nexport interface HeadingConfig extends\n Omit<CrisprFieldConfig, 'controlType'>,\n Omit<FieldDescriptors, 'placeholder' | 'fieldSuffix'> {\n // controlType is optional here because this component can be used as a crispr field where it needs a ControlType\n // or by a crispr field where it doesn't need a ControlType\n controlType?: ControlType.HEADING;\n typographyClass?: string;\n label: string;\n};\n","import { FormGroup, AbstractControl } from '@angular/forms';\nimport { CrisprControlConfig, ControlValue, ControlType } from '../models/crispr-field.config';\nimport { CrisprFieldComponent } from './crispr-field.abstract';\n\nexport function crisprControlMixin<C extends CrisprControlConfig>(BaseClass: typeof CrisprFieldComponent) {\n return class extends BaseClass<C> {\n config: C;\n group: FormGroup;\n control: AbstractControl;\n\n _value: ControlValue;\n set value(value: ControlValue) {\n this.setControlValue(value);\n this._value = value;\n }\n\n get value() {\n return this._value;\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.control = this.group.get(this.config.controlName);\n this.setControlValue(this.value);\n // setTimeouts are ugly but this seems to be the only way to get the computed field to compute initial values\n setTimeout(()=> {\n this.control.updateValueAndValidity();\n })\n }\n\n setControlValue(value: ControlValue) {\n if(value && this.control && this.config.controlType !== ControlType.SUB_GROUP) {\n this.control.setValue(value)\n }\n }\n }\n}\n","import type {\n CrisprFieldConfig,\n} from '../models';\nimport { OnInit, Directive } from '@angular/core';\n\n@Directive({\n standalone: true\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class CrisprFieldComponent<C extends CrisprFieldConfig> implements OnInit {\n config: C;\n defaultConfig?: Partial<C>\n\n ngOnInit() {\n this.applyDefaultConfig();\n }\n\n applyDefaultConfig() {\n this.config = this.defaultConfig ? {...this.defaultConfig, ...this.config} : this.config;\n }\n}\n\n\n","import { FormGroup } from \"@angular/forms\";\nimport { AutocompleteOptionsCallback, OptionsType } from \"../models\";\n\nexport function callOptionsIfFunction(\n options: OptionsType | AutocompleteOptionsCallback,\n parentGroup?: FormGroup,\n searchString?: string\n): OptionsType {\n return options instanceof Function ? options(parentGroup, searchString) : options;\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { from, isObservable, Observable, of } from \"rxjs\";\nimport { OptionsType, SelectOption } from \"../models\";\nimport { callOptionsIfFunction } from \"./callOptionsIfFunction\";\n\n/**\n * The user can give us select options as an array, a function that resolves to a promise,\n * or an observable. This functions consumes any of those and returns an observable that\n * resolves an array of options\n *\n * @param options the options passed in from the config\n * @param emptyMessageOption the message to display when the array is empty\n */\n export function observablifyOptions(\n options: OptionsType,\n parentGroup: FormGroup,\n searchString?: string,\n): Observable<SelectOption[]> {\n const calledOptions = callOptionsIfFunction(options, parentGroup, searchString);\n // if options are a promise\n const observableOptions = calledOptions instanceof Promise\n // convert to observable\n ? from(calledOptions)\n // if array that isn't empty\n : Array.isArray(calledOptions) && calledOptions.length\n // convert to observable\n ? of(calledOptions)\n // if observable\n : isObservable(calledOptions)\n // return it\n ? calledOptions\n // else an empty array\n : of([]);\n return observableOptions;\n}\n","import { OnInit, Directive } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap } from 'rxjs/operators';\n\nimport { crisprControlMixin } from './crispr-control.mixin';\nimport type { AutocompleteFieldConfig, AutocompleteChiplistFieldConfig, SelectOption } from '../models';\nimport { CrisprFieldComponent } from './crispr-field.abstract';\nimport { observablifyOptions } from '../functions/observablifyOptions';\n\ntype AutocompleteConfigTypes = AutocompleteFieldConfig | AutocompleteChiplistFieldConfig;\n\nconst AbstractAutocompleteFieldMixin = crisprControlMixin<AutocompleteConfigTypes>(CrisprFieldComponent);\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class AbstractAutocompleteComponent<C>\n extends AbstractAutocompleteFieldMixin implements OnInit {\n // we need a separate control for the UI because of the way the material autocomplete chiplist works\n autocompleteInputControl = new FormControl('');\n options$: Observable<SelectOption[]>\n config: AutocompleteConfigTypes & C;\n ngOnInit() {\n super.ngOnInit();\n\n this.group.addControl(this.config.controlName, new FormControl());\n // filter options by the search string using either the default filter function or one passed in through config\n this.options$ = this.autocompleteInputControl.valueChanges.pipe(\n // this is needed to have the options panel to open on focus\n startWith(''),\n debounceTime(this.config.typeDebounceTime),\n map((searchText: string) => typeof searchText === 'string' ? searchText?.trim() : ''),\n distinctUntilChanged(),\n switchMap((searchText: string) => observablifyOptions(this.config.options, this.group, searchText)),\n shareReplay(1),\n );\n }\n}\n","import type {\n CrisprControlConfig,\n} from '../models';\nimport { OnInit, Directive } from '@angular/core';\nimport { CrisprFieldComponent } from './crispr-field.abstract';\nimport { crisprControlMixin } from './crispr-control.mixin';\n\nconst CrisprDisplayFieldMixin = crisprControlMixin<CrisprControlConfig>(CrisprFieldComponent);\n\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class CrisprDisplayFieldComponent extends CrisprDisplayFieldMixin implements OnInit {\n index?: number;\n}\n\n\n","import { FormArray, FormControl } from \"@angular/forms\";\nimport { AnyFieldConfig, ControlType, ControlValue, CrisprControlConfig, FormConfig, FormGroupListConfig } from \"../models\";\nimport { buildFormGroupFromConfig } from \"./buildFormGroupFromConfig\";\n\n/**\n * Analyze the config and build a form control to spec. Notice we don't use FormBuilder here\n * as we want to keep this function pure.\n * @param controlConfig the configuration object for the control to build\n * @param value an initial value to use if passed in\n */\n export function createControlForType(controlConfig: AnyFieldConfig, value: ControlValue = null) {\n // build form control out based on the control type\n const control = controlConfig.controlType === ControlType.SUB_GROUP\n ? buildFormGroupFromConfig(controlConfig as FormConfig, value)\n : controlConfig.controlType === ControlType.GROUP_LIST\n ? new FormArray([], (controlConfig as FormGroupListConfig).validators)\n : new FormControl(\n value || null,\n (controlConfig as CrisprControlConfig).validators\n );\n\n return control;\n}\n","import { CrisprControlConfig, CrisprFieldConfig } from \"../models\";\n\n/**\n * Determines if the field config is for a form control (not a divider, heading or other non-control field)\n * */\n export function isControlConfig(fieldConfig: CrisprFieldConfig): fieldConfig is CrisprControlConfig {\n return 'controlName' in fieldConfig;\n}\n","import { FormGroup } from \"@angular/forms\";\nimport { AnyFieldConfig, FormConfig } from \"../models\";\nimport { createControlForType } from \"./createControlForType\";\nimport { isControlConfig } from \"./isControlConfig\";\n\n/**\n * builds out form group based on config\n * @param config a configuration for a form group\n * @param value an object of initial values to pass in\n * @param group the form group to modify and build out\n */\n export function buildFormGroupFromConfig(config: FormConfig, value = null, group: FormGroup = new FormGroup({}) ) {\n config.fields.forEach( (controlConfig: AnyFieldConfig) => {\n if (isControlConfig(controlConfig)) {\n // then add a control to the group using the controlName from configuration\n const {controlName} = controlConfig;\n if (group.get(controlName)) {\n group.removeControl(controlName);\n }\n // if there's a value object and it has a non-null/undefined value for this field use it.\n // Otherwise, default to null\n const controlValue = (value && value[controlName]) ?? null;\n const control = createControlForType(controlConfig, controlValue)\n group.addControl(controlName, control);\n }\n });\n group.setValidators(config.validators);\n return group;\n}\n","import { SelectOption } from \"../models\";\n\n/**\n * A basic filter function that filters the search string against the label of the options object\n * @param options the array of options to filter\n * @param searchString the string from the input\n */\n export function filterOptionsByLabel(options: SelectOption[], searchString: string) {\n return options.filter(option => {\n return option.label && option.label.toLowerCase().includes(searchString.toLowerCase());\n });\n}\n","import { FormControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\n\nexport function convertBytesToMb( bytes: number): number {\n return bytes/1048576;\n}\n\nexport function maxFileSizeValidator(maxFileSize: number): ValidatorFn {\n return (control: FormControl): ValidationErrors | null => {\n const controlValue = control.value;\n if (!(controlValue instanceof File)) {\n return null;\n }\n const actualFileSize = +convertBytesToMb(controlValue.size).toPrecision(3);\n if (maxFileSize > actualFileSize) return null;\n return {maxFileSize: { maxFileSize, actualFileSize }};\n }\n}\n\nexport function allowedFileExtValidator(allowedFileExtensions: string[], onlyAllowFiles = true): ValidatorFn {\n return (control: FormControl): ValidationErrors | null => {\n const controlValue = control.value;\n const isFile = controlValue instanceof File;\n if (!onlyAllowFiles && !isFile) return null;\n const actualExtension = isFile ? controlValue.name.split('.').pop().toLocaleLowerCase() : 'Not a file';\n const isAllowedExtension = allowedFileExtensions.includes(actualExtension);\n if(isAllowedExtension) {\n return null;\n }\n return {allowedExtension: { allowedFileExtensions, actualExtension }};\n }\n}\n\nexport function allowedFileType(matchExp: string | RegExp): ValidatorFn {\n return (formControl) => {\n const value = (formControl as FormControl).value;\n if (!(value instanceof File)) return null\n const type = value.type;\n const matches = type.match(matchExp)\n if (!type || !matches?.length) {\n return {\n allowedFileType: {\n actualType: type,\n allowedTypeExp: matchExp\n }\n }\n } else {\n return null\n }\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}