@huntsman-cancer-institute/dictionary-editor 16.0.1 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/components/detail.component.d.ts +90 -90
  2. package/components/home.component.d.ts +13 -13
  3. package/components/new-row.component.d.ts +20 -20
  4. package/dictionary-editor.component.d.ts +43 -43
  5. package/dictionary-editor.module.d.ts +24 -24
  6. package/dictionary-editor.routes.d.ts +4 -4
  7. package/esm2022/components/detail.component.mjs +606 -606
  8. package/esm2022/components/home.component.mjs +28 -28
  9. package/esm2022/components/new-row.component.mjs +81 -81
  10. package/esm2022/dictionary-editor.component.mjs +169 -169
  11. package/esm2022/dictionary-editor.module.mjs +76 -76
  12. package/esm2022/dictionary-editor.routes.mjs +14 -14
  13. package/esm2022/grid-editors/ag-grid-date-cell-editor.component.mjs +30 -30
  14. package/esm2022/grid-editors/ag-grid-editor.module.mjs +55 -55
  15. package/esm2022/grid-editors/datepicker.component.mjs +93 -93
  16. package/esm2022/grid-editors/select.editor.mjs +142 -142
  17. package/esm2022/grid-renderers/ag-grid-renderer.module.mjs +36 -36
  18. package/esm2022/grid-renderers/cell-renderer-validation.mjs +345 -345
  19. package/esm2022/grid-renderers/date.renderer.mjs +68 -68
  20. package/esm2022/grid-renderers/select.renderer.mjs +95 -95
  21. package/esm2022/huntsman-cancer-institute-dictionary-editor.mjs +4 -4
  22. package/esm2022/index.mjs +4 -4
  23. package/fesm2022/huntsman-cancer-institute-dictionary-editor.mjs +1718 -1718
  24. package/fesm2022/huntsman-cancer-institute-dictionary-editor.mjs.map +1 -1
  25. package/grid-editors/ag-grid-date-cell-editor.component.d.ts +11 -11
  26. package/grid-editors/ag-grid-editor.module.d.ts +15 -15
  27. package/grid-editors/datepicker.component.d.ts +16 -16
  28. package/grid-editors/select.editor.d.ts +30 -30
  29. package/grid-renderers/ag-grid-renderer.module.d.ts +10 -10
  30. package/grid-renderers/cell-renderer-validation.d.ts +69 -69
  31. package/grid-renderers/date.renderer.d.ts +15 -15
  32. package/grid-renderers/select.renderer.d.ts +17 -17
  33. package/index.d.ts +4 -4
  34. package/package.json +18 -10
@@ -1,138 +1,138 @@
1
- import { Component } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/forms";
5
- //import {MatDialog, MatDialogConfig, MatDialogRef} from "@angular/material/dialog";
6
- //import {SpinnerDialogComponent} from "../popup/spinner-dialog.component";
7
- export class SelectEditor {
8
- get options() {
9
- if (this.using_selectOptionsPerRowFilterFunction) {
10
- return this._filteredOptions;
11
- }
12
- else {
13
- return this._options;
14
- }
15
- }
16
- set options(value) {
17
- this._options = value;
18
- }
19
- // private spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[] = [];
20
- constructor() {
21
- this.using_selectOptionsPerRowFilterFunction = false;
22
- this._spinnerDialogIsOpen = false;
23
- }
24
- agInit(params) {
25
- this.params = params;
26
- this.options = [];
27
- this.optionsValueField = "";
28
- this.optionsDisplayField = "";
29
- if (this.params && this.params.column && this.params.column.colDef) {
30
- this.gridValueField = this.params.column.colDef.field;
31
- this.options = this.params.column.colDef.selectOptions;
32
- this.optionsValueField = this.params.column.colDef.selectOptionsValueField;
33
- this.optionsDisplayField = this.params.column.colDef.selectOptionsDisplayField;
34
- if (this.params.column.colDef.selectOptionsPerRowFilterFunction) {
35
- let backup = this.selectOptionsPerRowFilterFunction;
36
- try {
37
- this.selectOptionsPerRowFilterFunction = this.params.column.colDef.selectOptionsPerRowFilterFunction;
38
- this.using_selectOptionsPerRowFilterFunction = !!this.selectOptionsPerRowFilterFunction;
39
- }
40
- catch (e) {
41
- console.error("selectOptionsPerRowFilterFunction option has wrong signature for column : " + this.params.column.colDef.headerName + "\n"
42
- + " Requires signature (context:any, rowData: any, option: any) => boolean");
43
- this.selectOptionsPerRowFilterFunction = backup;
44
- this.using_selectOptionsPerRowFilterFunction = !!backup;
45
- }
46
- }
47
- this.context = this.params.column.colDef.context;
48
- this.fillGroupAttribute = this.params.column.colDef.fillGroupAttribute;
49
- this.fillAll = this.params.column.colDef.fillAll && ("" + this.params.column.colDef.fillAll).toLowerCase() !== "false";
50
- this.showFillButton = this.params.column.colDef.showFillButton && ("" + this.params.column.colDef.showFillButton).toLowerCase() !== "false";
51
- if (this._options
52
- && this.params.node
53
- && this.params.node.data
54
- && this.using_selectOptionsPerRowFilterFunction) {
55
- this._filteredOptions = this._options.filter((option) => {
56
- return this.selectOptionsPerRowFilterFunction(this.context, this.params.node.data, option);
57
- });
58
- }
59
- }
60
- if (this.params) {
61
- this.value = this.params.value ? "" + this.params.value : "";
62
- }
63
- if (this.showFillButton && !this.fillAll && (!this.fillGroupAttribute || this.fillGroupAttribute === "")) {
64
- throw new Error("Invalid state, cannot use fill button without specifying the fillGroupAttribute or fillAll.");
65
- }
66
- }
67
- ngOnDestroy() {
68
- if (this.params && this.params.node && this.params.node[(this.gridValueField + "_originalValue")]) {
69
- this.value = this.params.node[(this.gridValueField + "_originalValue")];
70
- }
71
- }
72
- onChange(event) {
73
- if (event && event.currentTarget) {
74
- if (this.params && this.params.node && !this.params.node[(this.gridValueField + "_originalValue")]) {
75
- this.params.node[(this.gridValueField + "_originalValue")] = this.value;
76
- }
77
- // This looks unnecessary, since this.value is linked to the value of the select component, but
78
- // because this also ends editing, it also queues the destruction of this component and the call to getValue.
79
- // The problem was that this.value isn't updated with the new value before this event fires,
80
- // so we need to update it manually here.
81
- this.value = event.currentTarget.value;
82
- this.params.node.setDataValue(this.gridValueField, this.value);
83
- }
84
- if (this.params) {
85
- // If the fill button, which is part of the editor, is activated, don't stop editing
86
- // immediately after making a selection.
87
- if (!this.showFillButton) {
88
- this.params.stopEditing();
89
- }
90
- }
91
- }
92
- getValue() {
93
- return this.value ? this.value : "";
94
- }
95
- isPopup() {
96
- return false;
97
- }
98
- onFillButtonClicked() {
99
- if (!this.fillAll && (!this.fillGroupAttribute || this.fillGroupAttribute === "")) {
100
- throw new Error('No column attribute "fillGroupAttribute" or "fillAll" specified. This is required to use the Fill functionality.');
101
- }
102
- if (this.params && this.params.column && this.params.column.gridApi && this.params.node && (this.fillAll || (this.fillGroupAttribute && this.fillGroupAttribute !== ""))) {
103
- let thisRowNode = this.params.node;
104
- //this.startSpinnerDialog();
105
- this.params.column.gridApi.forEachNodeAfterFilter((rowNode) => {
106
- if (rowNode && rowNode.data && thisRowNode && thisRowNode.data && (this.fillAll || rowNode.data[this.fillGroupAttribute] === thisRowNode.data[this.fillGroupAttribute])) {
107
- let spoofedEvent = {
108
- api: this.params.column.gridApi,
109
- colDef: this.params.column.colDef,
110
- column: this.params.column,
111
- columnApi: this.params.column.columnApi,
112
- context: undefined,
113
- data: rowNode.data,
114
- event: null,
115
- newValue: this.value,
116
- node: rowNode,
117
- oldValue: rowNode.data[this.gridValueField],
118
- rowIndex: rowNode.rowIndex,
119
- rowPinned: undefined,
120
- type: "cellValueChanged",
121
- value: this.value
122
- };
123
- rowNode.data[this.gridValueField] = this.value;
124
- rowNode.setDataValue(this.gridValueField, this.value);
125
- this.params.column.gridApi.dispatchEvent(spoofedEvent);
126
- }
127
- });
128
- this.params.column.gridApi.refreshCells();
129
- setTimeout(() => {
130
- //this.stopSpinnerDialogs();
131
- });
132
- }
133
- }
134
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectEditor, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
135
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SelectEditor, selector: "ng-component", ngImport: i0, template: `
1
+ import { Component } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "@angular/forms";
5
+ //import {MatDialog, MatDialogConfig, MatDialogRef} from "@angular/material/dialog";
6
+ //import {SpinnerDialogComponent} from "../popup/spinner-dialog.component";
7
+ export class SelectEditor {
8
+ get options() {
9
+ if (this.using_selectOptionsPerRowFilterFunction) {
10
+ return this._filteredOptions;
11
+ }
12
+ else {
13
+ return this._options;
14
+ }
15
+ }
16
+ set options(value) {
17
+ this._options = value;
18
+ }
19
+ // private spinnerDialogRefs: MatDialogRef<SpinnerDialogComponent>[] = [];
20
+ constructor() {
21
+ this.using_selectOptionsPerRowFilterFunction = false;
22
+ this._spinnerDialogIsOpen = false;
23
+ }
24
+ agInit(params) {
25
+ this.params = params;
26
+ this.options = [];
27
+ this.optionsValueField = "";
28
+ this.optionsDisplayField = "";
29
+ if (this.params && this.params.column && this.params.column.colDef) {
30
+ this.gridValueField = this.params.column.colDef.field;
31
+ this.options = this.params.column.colDef.selectOptions;
32
+ this.optionsValueField = this.params.column.colDef.selectOptionsValueField;
33
+ this.optionsDisplayField = this.params.column.colDef.selectOptionsDisplayField;
34
+ if (this.params.column.colDef.selectOptionsPerRowFilterFunction) {
35
+ let backup = this.selectOptionsPerRowFilterFunction;
36
+ try {
37
+ this.selectOptionsPerRowFilterFunction = this.params.column.colDef.selectOptionsPerRowFilterFunction;
38
+ this.using_selectOptionsPerRowFilterFunction = !!this.selectOptionsPerRowFilterFunction;
39
+ }
40
+ catch (e) {
41
+ console.error("selectOptionsPerRowFilterFunction option has wrong signature for column : " + this.params.column.colDef.headerName + "\n"
42
+ + " Requires signature (context:any, rowData: any, option: any) => boolean");
43
+ this.selectOptionsPerRowFilterFunction = backup;
44
+ this.using_selectOptionsPerRowFilterFunction = !!backup;
45
+ }
46
+ }
47
+ this.context = this.params.column.colDef.context;
48
+ this.fillGroupAttribute = this.params.column.colDef.fillGroupAttribute;
49
+ this.fillAll = this.params.column.colDef.fillAll && ("" + this.params.column.colDef.fillAll).toLowerCase() !== "false";
50
+ this.showFillButton = this.params.column.colDef.showFillButton && ("" + this.params.column.colDef.showFillButton).toLowerCase() !== "false";
51
+ if (this._options
52
+ && this.params.node
53
+ && this.params.node.data
54
+ && this.using_selectOptionsPerRowFilterFunction) {
55
+ this._filteredOptions = this._options.filter((option) => {
56
+ return this.selectOptionsPerRowFilterFunction(this.context, this.params.node.data, option);
57
+ });
58
+ }
59
+ }
60
+ if (this.params) {
61
+ this.value = this.params.value ? "" + this.params.value : "";
62
+ }
63
+ if (this.showFillButton && !this.fillAll && (!this.fillGroupAttribute || this.fillGroupAttribute === "")) {
64
+ throw new Error("Invalid state, cannot use fill button without specifying the fillGroupAttribute or fillAll.");
65
+ }
66
+ }
67
+ ngOnDestroy() {
68
+ if (this.params && this.params.node && this.params.node[(this.gridValueField + "_originalValue")]) {
69
+ this.value = this.params.node[(this.gridValueField + "_originalValue")];
70
+ }
71
+ }
72
+ onChange(event) {
73
+ if (event && event.currentTarget) {
74
+ if (this.params && this.params.node && !this.params.node[(this.gridValueField + "_originalValue")]) {
75
+ this.params.node[(this.gridValueField + "_originalValue")] = this.value;
76
+ }
77
+ // This looks unnecessary, since this.value is linked to the value of the select component, but
78
+ // because this also ends editing, it also queues the destruction of this component and the call to getValue.
79
+ // The problem was that this.value isn't updated with the new value before this event fires,
80
+ // so we need to update it manually here.
81
+ this.value = event.currentTarget.value;
82
+ this.params.node.setDataValue(this.gridValueField, this.value);
83
+ }
84
+ if (this.params) {
85
+ // If the fill button, which is part of the editor, is activated, don't stop editing
86
+ // immediately after making a selection.
87
+ if (!this.showFillButton) {
88
+ this.params.stopEditing();
89
+ }
90
+ }
91
+ }
92
+ getValue() {
93
+ return this.value ? this.value : "";
94
+ }
95
+ isPopup() {
96
+ return false;
97
+ }
98
+ onFillButtonClicked() {
99
+ if (!this.fillAll && (!this.fillGroupAttribute || this.fillGroupAttribute === "")) {
100
+ throw new Error('No column attribute "fillGroupAttribute" or "fillAll" specified. This is required to use the Fill functionality.');
101
+ }
102
+ if (this.params && this.params.column && this.params.column.gridApi && this.params.node && (this.fillAll || (this.fillGroupAttribute && this.fillGroupAttribute !== ""))) {
103
+ let thisRowNode = this.params.node;
104
+ //this.startSpinnerDialog();
105
+ this.params.column.gridApi.forEachNodeAfterFilter((rowNode) => {
106
+ if (rowNode && rowNode.data && thisRowNode && thisRowNode.data && (this.fillAll || rowNode.data[this.fillGroupAttribute] === thisRowNode.data[this.fillGroupAttribute])) {
107
+ let spoofedEvent = {
108
+ api: this.params.column.gridApi,
109
+ colDef: this.params.column.colDef,
110
+ column: this.params.column,
111
+ columnApi: this.params.column.columnApi,
112
+ context: undefined,
113
+ data: rowNode.data,
114
+ event: null,
115
+ newValue: this.value,
116
+ node: rowNode,
117
+ oldValue: rowNode.data[this.gridValueField],
118
+ rowIndex: rowNode.rowIndex,
119
+ rowPinned: undefined,
120
+ type: "cellValueChanged",
121
+ value: this.value
122
+ };
123
+ rowNode.data[this.gridValueField] = this.value;
124
+ rowNode.setDataValue(this.gridValueField, this.value);
125
+ this.params.column.gridApi.dispatchEvent(spoofedEvent);
126
+ }
127
+ });
128
+ this.params.column.gridApi.refreshCells();
129
+ setTimeout(() => {
130
+ //this.stopSpinnerDialogs();
131
+ });
132
+ }
133
+ }
134
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectEditor, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
135
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: SelectEditor, selector: "ng-component", ngImport: i0, template: `
136
136
  <div class="full-width full-height flex-column-container">
137
137
  <div class="full-height flex-stretch flex-row">
138
138
  <select class="full-width full-height" [(value)]="value" (change)="onChange($event)">
@@ -150,10 +150,10 @@ export class SelectEditor {
150
150
  <button class="full-height" (click)="onFillButtonClicked()">Fill</button>
151
151
  </div>
152
152
  </div>
153
- `, isInline: true, styles: [".full-width{width:100%}.full-height{height:100%}.flex-column-container{display:flex;flex-direction:row}.flex-row{display:flex}.flex-stretch{display:flex;flex:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] }); }
154
- }
155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectEditor, decorators: [{
156
- type: Component,
153
+ `, isInline: true, styles: [".full-width{width:100%}.full-height{height:100%}.flex-column-container{display:flex;flex-direction:row}.flex-row{display:flex}.flex-stretch{display:flex;flex:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] }); }
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectEditor, decorators: [{
156
+ type: Component,
157
157
  args: [{ template: `
158
158
  <div class="full-width full-height flex-column-container">
159
159
  <div class="full-height flex-stretch flex-row">
@@ -172,6 +172,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
172
172
  <button class="full-height" (click)="onFillButtonClicked()">Fill</button>
173
173
  </div>
174
174
  </div>
175
- `, styles: [".full-width{width:100%}.full-height{height:100%}.flex-column-container{display:flex;flex-direction:row}.flex-row{display:flex}.flex-stretch{display:flex;flex:1}\n"] }]
176
- }], ctorParameters: function () { return []; } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RpY3Rpb25hcnktZWRpdG9yL3NyYy9ncmlkLWVkaXRvcnMvc2VsZWN0LmVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFZLE1BQU0sZUFBZSxDQUFDOzs7O0FBRW5ELG9GQUFvRjtBQUNwRiwyRUFBMkU7QUFvRDNFLE1BQU0sT0FBTyxZQUFZO0lBSXJCLElBQVcsT0FBTztRQUNkLElBQUksSUFBSSxDQUFDLHVDQUF1QyxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQ2hDO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBQ0QsSUFBVyxPQUFPLENBQUMsS0FBWTtRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBd0JMLDZFQUE2RTtJQUV6RTtRQW5CVSw0Q0FBdUMsR0FBWSxLQUFLLENBQUM7UUFnQjNELHlCQUFvQixHQUFZLEtBQUssQ0FBQztJQUdDLENBQUM7SUFFaEQsTUFBTSxDQUFDLE1BQVc7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNoRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFF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QztZQUVILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLDRCQUE0QjtZQUNoQyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzsrR0E1S1EsWUFBWTttR0FBWixZQUFZLG9EQS9DbkI7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCQzs7NEZBNkJNLFlBQVk7a0JBbER4QixTQUFTOytCQUdKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0lDZWxsRWRpdG9yQW5ndWxhckNvbXB9IGZyb20gXCJhZy1ncmlkLWFuZ3VsYXJcIjtcclxuLy9pbXBvcnQge01hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnLCBNYXREaWFsb2dSZWZ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuLy9pbXBvcnQge1NwaW5uZXJEaWFsb2dDb21wb25lbnR9IGZyb20gXCIuLi9wb3B1cC9zcGlubmVyLWRpYWxvZy5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoXHJcbiAge1xyXG4gICAgdGVtcGxhdGU6XHJcbiAgICAgIGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnVsbC13aWR0aCBmdWxsLWhlaWdodCBmbGV4LWNvbHVtbi1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdWxsLWhlaWdodCBmbGV4LXN0cmV0Y2ggZmxleC1yb3dcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZ1bGwtd2lkdGggZnVsbC1oZWlnaHRcIiBbKHZhbHVlKV09XCJ2YWx1ZVwiIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gaGlkZGVuPlxyXG4gICAgICAgICAgICAgICAgU2VsZWN0IEFuIE9wdGlvblxyXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cInt7b3B0aW9uLmhhc093blByb3BlcnR5KG9wdGlvbnNWYWx1ZUZpZWxkKSA/IG9wdGlvbltvcHRpb25zVmFsdWVGaWVsZF0gOiAob3B0aW9uLnZhbHVlKSA/IG9wdGlvbi52YWx1ZSA6IG9wdGlvbiB9fVwiPlxyXG4gICAgICAgICAgICAgICAge3tvcHRpb24uaGFzT3duUHJvcGVydHkob3B0aW9uc0Rpc3BsYXlGaWVsZCkgPyBvcHRpb25bb3B0aW9uc0Rpc3BsYXlGaWVsZF0gOiAob3B0aW9uLmRpc3BsYXkpID8gb3B0aW9uLmRpc3BsYXkgOiBvcHRpb24gfX1cclxuICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmlsbEJ1dHRvblwiIGNsYXNzPVwiZnVsbC1oZWlnaHQgZmxleC1yb3cgYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZnVsbC1oZWlnaHRcIiAoY2xpY2spPVwib25GaWxsQnV0dG9uQ2xpY2tlZCgpXCI+RmlsbDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIGBcclxuICAgICxcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgLmZ1bGwtd2lkdGgge1xyXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZnVsbC1oZWlnaHQge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZsZXgtY29sdW1uLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5mbGV4LXJvdyB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZsZXgtc3RyZXRjaCB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgZmxleDogMTtcclxuICAgICAgICB9XHJcbiAgICAgIGBcclxuICAgIF1cclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIFNlbGVjdEVkaXRvciBpbXBsZW1lbnRzIElDZWxsRWRpdG9yQW5ndWxhckNvbXAsIE9uRGVzdHJveSB7XHJcbiAgICBwdWJsaWMgcGFyYW1zOiBhbnk7XHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgX29wdGlvbnM6IGFueVtdO1xyXG4gICAgcHVibGljIGdldCBvcHRpb25zKCk6IGFueVtdIHtcclxuICAgICAgICBpZiAodGhpcy51c2luZ19zZWxlY3RPcHRpb25zUGVyUm93RmlsdGVyRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcHRpb25zVmFsdWVGaWVsZDogc3RyaW5nO1xyXG4gICAgcHVibGljIG9wdGlvbnNEaXNwbGF5RmllbGQ6IHN0cmluZztcclxuXHJcbiAgICAvLyB2YXJpYWJsZXMgdXNlZCBmb3IgdGhlIG9wdGlvbmFsIHBlci1yb3ctZmlsdGVyaW5nXHJcbiAgICBwdWJsaWMgY29udGV4dDogYW55O1xyXG4gICAgcHJvdGVjdGVkIHVzaW5nX3NlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHNlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbjogKGNvbnRleHQ6IGFueSwgcm93RGF0YTogYW55LCBvcHRpb246IGFueSkgPT4gYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX2ZpbHRlcmVkT3B0aW9uczogYW55W107XHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ3JpZFZhbHVlRmllbGQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgc2hvd0ZpbGxCdXR0b246IGJvb2xlYW47XHRcdC8vIFRoaXMgcmVwcmVzZW50cyB3aGV0aGVyIHRoZSBlZGl0b3Igc2hvdWxkIHNob3cgdGhlIFwiRmlsbFwiIGJ1dHRvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIGlzIHVzZWQgdG8gY29weSB0aGUgdmFsdWUgb2YgdGhpcyBjZWxsIHRvIG90aGVyIGNlbGxzIGluIHRoaXMgY29sdW1uIGluIHRoZSBncmlkXHJcbiAgICBwdWJsaWMgZmlsbEdyb3VwQXR0cmlidXRlOiBzdHJpbmc7XHRcdC8vIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBcIkdyb3VwXCIgYSBwYXJ0aWN1bGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm93IGJlbG9uZ3MgdG8sIHdoaWNoIGlzIHVzZWQgd2hlbiB0aGUgZmlsbCBidXR0b24gaXMgYWN0aXZlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gY2xpY2tlZCwgdGhlIGZpbGwgYnV0dG9uIHdpbGwgY29weSB0aGUgZGF0YSBpbiB0aGF0IGNlbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgY29ycmVzcG9uZGluZyBjZWxscyBpbiByb3dzIG9mIHRoZSBzYW1lIGdyb3VwLlxyXG4gICAgcHVibGljIGZpbGxBbGw6IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIElmIGZpbGxBbGwgaXMgc2V0LCBhbGwgZGF0YSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZ3JvdXBlZCB0b2dldGhlclxyXG5cclxuICAgIHByaXZhdGUgX3NwaW5uZXJEaWFsb2dJc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuLy8gICAgcHJpdmF0ZSBzcGlubmVyRGlhbG9nUmVmczogTWF0RGlhbG9nUmVmPFNwaW5uZXJEaWFsb2dDb21wb25lbnQ+W10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigvKnByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZyovKSB7IH1cclxuXHJcbiAgICBhZ0luaXQocGFyYW1zOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLm9wdGlvbnNWYWx1ZUZpZWxkID0gXCJcIjtcclxuICAgICAgICB0aGlzLm9wdGlvbnNEaXNwbGF5RmllbGQgPSBcIlwiO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wYXJhbXMgJiYgdGhpcy5wYXJhbXMuY29sdW1uICYmIHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkVmFsdWVGaWVsZCA9IHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYuZmllbGQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLnNlbGVjdE9wdGlvbnM7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1ZhbHVlRmllbGQgPSB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLnNlbGVjdE9wdGlvbnNWYWx1ZUZpZWxkO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNEaXNwbGF5RmllbGQgPSB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLnNlbGVjdE9wdGlvbnNEaXNwbGF5RmllbGQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZi5zZWxlY3RPcHRpb25zUGVyUm93RmlsdGVyRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGxldCBiYWNrdXAgPSB0aGlzLnNlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbjtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25zUGVyUm93RmlsdGVyRnVuY3Rpb24gPSB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLnNlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzaW5nX3NlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbiA9ICEhdGhpcy5zZWxlY3RPcHRpb25zUGVyUm93RmlsdGVyRnVuY3Rpb247XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcInNlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbiBvcHRpb24gaGFzIHdyb25nIHNpZ25hdHVyZSBmb3IgY29sdW1uIDogXCIgKyB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLmhlYWRlck5hbWUgKyBcIlxcblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsgXCIgIFJlcXVpcmVzIHNpZ25hdHVyZSAoY29udGV4dDphbnksIHJvd0RhdGE6IGFueSwgb3B0aW9uOiBhbnkpID0+IGJvb2xlYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25zUGVyUm93RmlsdGVyRnVuY3Rpb24gPSBiYWNrdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2luZ19zZWxlY3RPcHRpb25zUGVyUm93RmlsdGVyRnVuY3Rpb24gPSAhIWJhY2t1cDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZi5jb250ZXh0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5maWxsR3JvdXBBdHRyaWJ1dGUgPSB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLmZpbGxHcm91cEF0dHJpYnV0ZTtcclxuICAgICAgICAgICAgdGhpcy5maWxsQWxsID0gdGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZi5maWxsQWxsICYmIChcIlwiICsgdGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZi5maWxsQWxsKS50b0xvd2VyQ2FzZSgpICE9PSBcImZhbHNlXCI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dGaWxsQnV0dG9uID0gdGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZi5zaG93RmlsbEJ1dHRvbiAmJiAoXCJcIiArIHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYuc2hvd0ZpbGxCdXR0b24pLnRvTG93ZXJDYXNlKCkgIT09IFwiZmFsc2VcIjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnBhcmFtcy5ub2RlXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnBhcmFtcy5ub2RlLmRhdGFcclxuICAgICAgICAgICAgICAgICYmIHRoaXMudXNpbmdfc2VsZWN0T3B0aW9uc1BlclJvd0ZpbHRlckZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRPcHRpb25zID0gdGhpcy5fb3B0aW9ucy5maWx0ZXIoKG9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0T3B0aW9uc1BlclJvd0ZpbHRlckZ1bmN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5wYXJhbXMubm9kZS5kYXRhLCBvcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhcmFtcykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5wYXJhbXMudmFsdWUgPyBcIlwiICsgdGhpcy5wYXJhbXMudmFsdWUgOiBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0ZpbGxCdXR0b24gJiYgIXRoaXMuZmlsbEFsbCAmJiAoIXRoaXMuZmlsbEdyb3VwQXR0cmlidXRlIHx8IHRoaXMuZmlsbEdyb3VwQXR0cmlidXRlID09PSBcIlwiKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlLCBjYW5ub3QgdXNlIGZpbGwgYnV0dG9uIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgZmlsbEdyb3VwQXR0cmlidXRlIG9yIGZpbGxBbGwuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJhbXMgJiYgdGhpcy5wYXJhbXMubm9kZSAmJiB0aGlzLnBhcmFtcy5ub2RlWyh0aGlzLmdyaWRWYWx1ZUZpZWxkICsgXCJfb3JpZ2luYWxWYWx1ZVwiKV0pIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucGFyYW1zLm5vZGVbKHRoaXMuZ3JpZFZhbHVlRmllbGQgKyBcIl9vcmlnaW5hbFZhbHVlXCIpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC5jdXJyZW50VGFyZ2V0KSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJhbXMgJiYgdGhpcy5wYXJhbXMubm9kZSAmJiAhdGhpcy5wYXJhbXMubm9kZVsodGhpcy5ncmlkVmFsdWVGaWVsZCArIFwiX29yaWdpbmFsVmFsdWVcIildKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5ub2RlWyh0aGlzLmdyaWRWYWx1ZUZpZWxkICsgXCJfb3JpZ2luYWxWYWx1ZVwiKV0gPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBUaGlzIGxvb2tzIHVubmVjZXNzYXJ5LCBzaW5jZSB0aGlzLnZhbHVlIGlzIGxpbmtlZCB0byB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBjb21wb25lbnQsIGJ1dFxyXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHRoaXMgYWxzbyBlbmRzIGVkaXRpbmcsIGl0IGFsc28gcXVldWVzIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGlzIGNvbXBvbmVudCBhbmQgdGhlIGNhbGwgdG8gZ2V0VmFsdWUuXHJcbiAgICAgICAgICAgIC8vIFRoZSBwcm9ibGVtIHdhcyB0aGF0IHRoaXMudmFsdWUgaXNuJ3QgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdmFsdWUgYmVmb3JlIHRoaXMgZXZlbnQgZmlyZXMsXHJcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gdXBkYXRlIGl0IG1hbnVhbGx5IGhlcmUuXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5ub2RlLnNldERhdGFWYWx1ZSh0aGlzLmdyaWRWYWx1ZUZpZWxkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1zKSB7XHJcblxyXG4gICAgICAgICAgICAvLyAgSWYgdGhlIGZpbGwgYnV0dG9uLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBlZGl0b3IsIGlzIGFjdGl2YXRlZCwgZG9uJ3Qgc3RvcCBlZGl0aW5nXHJcbiAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGFmdGVyIG1ha2luZyBhIHNlbGVjdGlvbi5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dGaWxsQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5zdG9wRWRpdGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpc1BvcHVwKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZpbGxCdXR0b25DbGlja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5maWxsQWxsICYmICghdGhpcy5maWxsR3JvdXBBdHRyaWJ1dGUgfHwgdGhpcy5maWxsR3JvdXBBdHRyaWJ1dGUgPT09IFwiXCIpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29sdW1uIGF0dHJpYnV0ZSBcImZpbGxHcm91cEF0dHJpYnV0ZVwiIG9yIFwiZmlsbEFsbFwiIHNwZWNpZmllZC4gVGhpcyBpcyByZXF1aXJlZCB0byB1c2UgdGhlIEZpbGwgZnVuY3Rpb25hbGl0eS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhcmFtcyAmJiB0aGlzLnBhcmFtcy5jb2x1bW4gJiYgdGhpcy5wYXJhbXMuY29sdW1uLmdyaWRBcGkgJiYgdGhpcy5wYXJhbXMubm9kZSAmJiAodGhpcy5maWxsQWxsIHx8ICh0aGlzLmZpbGxHcm91cEF0dHJpYnV0ZSAmJiB0aGlzLmZpbGxHcm91cEF0dHJpYnV0ZSAhPT0gXCJcIikpKSB7XHJcbiAgICAgICAgICAgIGxldCB0aGlzUm93Tm9kZSA9IHRoaXMucGFyYW1zLm5vZGU7XHJcblxyXG4gICAgICAgICAgICAvL3RoaXMuc3RhcnRTcGlubmVyRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNvbHVtbi5ncmlkQXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXIoKHJvd05vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyb3dOb2RlICYmIHJvd05vZGUuZGF0YSAmJiB0aGlzUm93Tm9kZSAmJiB0aGlzUm93Tm9kZS5kYXRhICYmICh0aGlzLmZpbGxBbGwgfHwgcm93Tm9kZS5kYXRhW3RoaXMuZmlsbEdyb3VwQXR0cmlidXRlXSA9PT0gdGhpc1Jvd05vZGUuZGF0YVt0aGlzLmZpbGxHcm91cEF0dHJpYnV0ZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwb29mZWRFdmVudDogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGk6IHRoaXMucGFyYW1zLmNvbHVtbi5ncmlkQXBpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xEZWY6IHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5wYXJhbXMuY29sdW1uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5BcGk6IHRoaXMucGFyYW1zLmNvbHVtbi5jb2x1bW5BcGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcm93Tm9kZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IHJvd05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiByb3dOb2RlLmRhdGFbdGhpcy5ncmlkVmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiByb3dOb2RlLnJvd0luZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dQaW5uZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjZWxsVmFsdWVDaGFuZ2VkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcm93Tm9kZS5kYXRhW3RoaXMuZ3JpZFZhbHVlRmllbGRdID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICByb3dOb2RlLnNldERhdGFWYWx1ZSh0aGlzLmdyaWRWYWx1ZUZpZWxkLCB0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5jb2x1bW4uZ3JpZEFwaS5kaXNwYXRjaEV2ZW50KHNwb29mZWRFdmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuY29sdW1uLmdyaWRBcGkucmVmcmVzaENlbGxzKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnN0b3BTcGlubmVyRGlhbG9ncygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cdC8qXHJcbiAgICBzdGFydFNwaW5uZXJEaWFsb2coKTogTWF0RGlhbG9nUmVmPFNwaW5uZXJEaWFsb2dDb21wb25lbnQ+IHtcclxuICAgICAgICBpZiAodGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgY29uZmlndXJhdGlvbjogTWF0RGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YSA9IHtcclxuICAgICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2Ugd2FpdC4uLlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMyxcclxuICAgICAgICAgICAgZGlhbWV0ZXI6IDMwXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLndpZHRoID0gXCIxM2VtXCI7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD4gPSB0aGlzLmRpYWxvZy5vcGVuKFNwaW5uZXJEaWFsb2dDb21wb25lbnQsIGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4gPSBmYWxzZTsgfSk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyRGlhbG9nUmVmcy5wdXNoKGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFNwaW5uZXJEaWFsb2dzKCk6IHZvaWQge1xyXG4gICAgICAgIGZvciAobGV0IGRpYWxvZ1JlZiBvZiB0aGlzLnNwaW5uZXJEaWFsb2dSZWZzKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNwaW5uZXJEaWFsb2dSZWZzID0gW107XHJcbiAgICB9XHJcblx0Ki9cclxufVxyXG4iXX0=
175
+ `, styles: [".full-width{width:100%}.full-height{height:100%}.flex-column-container{display:flex;flex-direction:row}.flex-row{display:flex}.flex-stretch{display:flex;flex:1}\n"] }]
176
+ }], ctorParameters: () => [] });
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RpY3Rpb25hcnktZWRpdG9yL3NyYy9ncmlkLWVkaXRvcnMvc2VsZWN0LmVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFZLE1BQU0sZUFBZSxDQUFDOzs7O0FBRW5ELG9GQUFvRjtBQUNwRiwyRUFBMkU7QUFvRDNFLE1BQU0sT0FBTyxZQUFZO0lBSXJCLElBQVcsT0FBTztRQUNkLElBQUksSUFBSSxDQUFDLHVDQUF1QyxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFXLE9BQU8sQ0FBQyxLQUFZO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUF3QkwsNkVBQTZFO0lBRXpFO1FBbkJVLDRDQUF1QyxHQUFZLEtBQUssQ0FBQztRQWdCM0QseUJBQW9CLEdBQVksS0FBSyxDQUFDO0lBR0MsQ0FBQztJQUVoRCxNQUFNLENBQUMsTUFBVztRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FB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QU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzNELENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLDRCQUE0QjtZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDOzhHQTVLUSxZQUFZO2tHQUFaLFlBQVksb0RBL0NuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JDOzsyRkE2Qk0sWUFBWTtrQkFsRHhCLFNBQVM7K0JBR0o7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3l9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SUNlbGxFZGl0b3JBbmd1bGFyQ29tcH0gZnJvbSBcImFnLWdyaWQtYW5ndWxhclwiO1xyXG4vL2ltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcsIE1hdERpYWxvZ1JlZn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG4vL2ltcG9ydCB7U3Bpbm5lckRpYWxvZ0NvbXBvbmVudH0gZnJvbSBcIi4uL3BvcHVwL3NwaW5uZXItZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdWxsLXdpZHRoIGZ1bGwtaGVpZ2h0IGZsZXgtY29sdW1uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ1bGwtaGVpZ2h0IGZsZXgtc3RyZXRjaCBmbGV4LXJvd1wiPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZnVsbC13aWR0aCBmdWxsLWhlaWdodFwiIFsodmFsdWUpXT1cInZhbHVlXCIgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiBoaWRkZW4+XHJcbiAgICAgICAgICAgICAgICBTZWxlY3QgQW4gT3B0aW9uXHJcbiAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3tvcHRpb24uaGFzT3duUHJvcGVydHkob3B0aW9uc1ZhbHVlRmllbGQpID8gb3B0aW9uW29wdGlvbnNWYWx1ZUZpZWxkXSA6IChvcHRpb24udmFsdWUpID8gb3B0aW9uLnZhbHVlIDogb3B0aW9uIH19XCI+XHJcbiAgICAgICAgICAgICAgICB7e29wdGlvbi5oYXNPd25Qcm9wZXJ0eShvcHRpb25zRGlzcGxheUZpZWxkKSA/IG9wdGlvbltvcHRpb25zRGlzcGxheUZpZWxkXSA6IChvcHRpb24uZGlzcGxheSkgPyBvcHRpb24uZGlzcGxheSA6IG9wdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWxsQnV0dG9uXCIgY2xhc3M9XCJmdWxsLWhlaWdodCBmbGV4LXJvdyBidXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmdWxsLWhlaWdodFwiIChjbGljayk9XCJvbkZpbGxCdXR0b25DbGlja2VkKClcIj5GaWxsPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gICAgLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICAuZnVsbC13aWR0aCB7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5mdWxsLWhlaWdodCB7XHJcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZmxleC1jb2x1bW4tY29udGFpbmVyIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZsZXgtcm93IHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZmxleC1zdHJldGNoIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBmbGV4OiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgYFxyXG4gICAgXVxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0RWRpdG9yIGltcGxlbWVudHMgSUNlbGxFZGl0b3JBbmd1bGFyQ29tcCwgT25EZXN0cm95IHtcclxuICAgIHB1YmxpYyBwYXJhbXM6IGFueTtcclxuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSBfb3B0aW9uczogYW55W107XHJcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogYW55W10ge1xyXG4gICAgICAgIGlmICh0aGlzLnVzaW5nX3NlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWRPcHRpb25zO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgb3B0aW9ucyh2YWx1ZTogYW55W10pIHtcclxuICAgICAgICB0aGlzLl9vcHRpb25zID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9wdGlvbnNWYWx1ZUZpZWxkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgb3B0aW9uc0Rpc3BsYXlGaWVsZDogc3RyaW5nO1xyXG5cclxuICAgIC8vIHZhcmlhYmxlcyB1c2VkIGZvciB0aGUgb3B0aW9uYWwgcGVyLXJvdy1maWx0ZXJpbmdcclxuICAgIHB1YmxpYyBjb250ZXh0OiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgdXNpbmdfc2VsZWN0T3B0aW9uc1BlclJvd0ZpbHRlckZ1bmN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgc2VsZWN0T3B0aW9uc1BlclJvd0ZpbHRlckZ1bmN0aW9uOiAoY29udGV4dDogYW55LCByb3dEYXRhOiBhbnksIG9wdGlvbjogYW55KSA9PiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfZmlsdGVyZWRPcHRpb25zOiBhbnlbXTtcclxuXHJcblxyXG5cclxuICAgIHB1YmxpYyBncmlkVmFsdWVGaWVsZDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBzaG93RmlsbEJ1dHRvbjogYm9vbGVhbjtcdFx0Ly8gVGhpcyByZXByZXNlbnRzIHdoZXRoZXIgdGhlIGVkaXRvciBzaG91bGQgc2hvdyB0aGUgXCJGaWxsXCIgYnV0dG9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMgdXNlZCB0byBjb3B5IHRoZSB2YWx1ZSBvZiB0aGlzIGNlbGwgdG8gb3RoZXIgY2VsbHMgaW4gdGhpcyBjb2x1bW4gaW4gdGhlIGdyaWRcclxuICAgIHB1YmxpYyBmaWxsR3JvdXBBdHRyaWJ1dGU6IHN0cmluZztcdFx0Ly8gVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIFwiR3JvdXBcIiBhIHBhcnRpY3VsYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3cgYmVsb25ncyB0bywgd2hpY2ggaXMgdXNlZCB3aGVuIHRoZSBmaWxsIGJ1dHRvbiBpcyBhY3RpdmUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBjbGlja2VkLCB0aGUgZmlsbCBidXR0b24gd2lsbCBjb3B5IHRoZSBkYXRhIGluIHRoYXQgY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNlbGxzIGluIHJvd3Mgb2YgdGhlIHNhbWUgZ3JvdXAuXHJcbiAgICBwdWJsaWMgZmlsbEFsbDogYm9vbGVhbjsgICAgICAgICAgICAgICAgLy8gSWYgZmlsbEFsbCBpcyBzZXQsIGFsbCBkYXRhIHdpbGwgYXV0b21hdGljYWxseSBiZSBncm91cGVkIHRvZ2V0aGVyXHJcblxyXG4gICAgcHJpdmF0ZSBfc3Bpbm5lckRpYWxvZ0lzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4vLyAgICBwcml2YXRlIHNwaW5uZXJEaWFsb2dSZWZzOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD5bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKC8qcHJvdGVjdGVkIGRpYWxvZzogTWF0RGlhbG9nKi8pIHsgfVxyXG5cclxuICAgIGFnSW5pdChwYXJhbXM6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMub3B0aW9uc1ZhbHVlRmllbGQgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMub3B0aW9uc0Rpc3BsYXlGaWVsZCA9IFwiXCI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhcmFtcyAmJiB0aGlzLnBhcmFtcy5jb2x1bW4gJiYgdGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZikge1xyXG4gICAgICAgICAgICB0aGlzLmdyaWRWYWx1ZUZpZWxkID0gdGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZi5maWVsZDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYuc2VsZWN0T3B0aW9ucztcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zVmFsdWVGaWVsZCA9IHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYuc2VsZWN0T3B0aW9uc1ZhbHVlRmllbGQ7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc0Rpc3BsYXlGaWVsZCA9IHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYuc2VsZWN0T3B0aW9uc0Rpc3BsYXlGaWVsZDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLnNlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGJhY2t1cCA9IHRoaXMuc2VsZWN0T3B0aW9uc1BlclJvd0ZpbHRlckZ1bmN0aW9uO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbiA9IHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYuc2VsZWN0T3B0aW9uc1BlclJvd0ZpbHRlckZ1bmN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNpbmdfc2VsZWN0T3B0aW9uc1BlclJvd0ZpbHRlckZ1bmN0aW9uID0gISF0aGlzLnNlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbjtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwic2VsZWN0T3B0aW9uc1BlclJvd0ZpbHRlckZ1bmN0aW9uIG9wdGlvbiBoYXMgd3Jvbmcgc2lnbmF0dXJlIGZvciBjb2x1bW4gOiBcIiArIHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYuaGVhZGVyTmFtZSArIFwiXFxuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyBcIiAgUmVxdWlyZXMgc2lnbmF0dXJlIChjb250ZXh0OmFueSwgcm93RGF0YTogYW55LCBvcHRpb246IGFueSkgPT4gYm9vbGVhblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbiA9IGJhY2t1cDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzaW5nX3NlbGVjdE9wdGlvbnNQZXJSb3dGaWx0ZXJGdW5jdGlvbiA9ICEhYmFja3VwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLmNvbnRleHQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZpbGxHcm91cEF0dHJpYnV0ZSA9IHRoaXMucGFyYW1zLmNvbHVtbi5jb2xEZWYuZmlsbEdyb3VwQXR0cmlidXRlO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxBbGwgPSB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLmZpbGxBbGwgJiYgKFwiXCIgKyB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLmZpbGxBbGwpLnRvTG93ZXJDYXNlKCkgIT09IFwiZmFsc2VcIjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0ZpbGxCdXR0b24gPSB0aGlzLnBhcmFtcy5jb2x1bW4uY29sRGVmLnNob3dGaWxsQnV0dG9uICYmIChcIlwiICsgdGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZi5zaG93RmlsbEJ1dHRvbikudG9Mb3dlckNhc2UoKSAhPT0gXCJmYWxzZVwiO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnNcclxuICAgICAgICAgICAgICAgICYmIHRoaXMucGFyYW1zLm5vZGVcclxuICAgICAgICAgICAgICAgICYmIHRoaXMucGFyYW1zLm5vZGUuZGF0YVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy51c2luZ19zZWxlY3RPcHRpb25zUGVyUm93RmlsdGVyRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zLmZpbHRlcigob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RPcHRpb25zUGVyUm93RmlsdGVyRnVuY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnBhcmFtcy5ub2RlLmRhdGEsIG9wdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcmFtcy52YWx1ZSA/IFwiXCIgKyB0aGlzLnBhcmFtcy52YWx1ZSA6IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93RmlsbEJ1dHRvbiAmJiAhdGhpcy5maWxsQWxsICYmICghdGhpcy5maWxsR3JvdXBBdHRyaWJ1dGUgfHwgdGhpcy5maWxsR3JvdXBBdHRyaWJ1dGUgPT09IFwiXCIpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUsIGNhbm5vdCB1c2UgZmlsbCBidXR0b24gd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBmaWxsR3JvdXBBdHRyaWJ1dGUgb3IgZmlsbEFsbC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmFtcyAmJiB0aGlzLnBhcmFtcy5ub2RlICYmIHRoaXMucGFyYW1zLm5vZGVbKHRoaXMuZ3JpZFZhbHVlRmllbGQgKyBcIl9vcmlnaW5hbFZhbHVlXCIpXSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5wYXJhbXMubm9kZVsodGhpcy5ncmlkVmFsdWVGaWVsZCArIFwiX29yaWdpbmFsVmFsdWVcIildO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtcyAmJiB0aGlzLnBhcmFtcy5ub2RlICYmICF0aGlzLnBhcmFtcy5ub2RlWyh0aGlzLmdyaWRWYWx1ZUZpZWxkICsgXCJfb3JpZ2luYWxWYWx1ZVwiKV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLm5vZGVbKHRoaXMuZ3JpZFZhbHVlRmllbGQgKyBcIl9vcmlnaW5hbFZhbHVlXCIpXSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgdW5uZWNlc3NhcnksIHNpbmNlIHRoaXMudmFsdWUgaXMgbGlua2VkIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0IGNvbXBvbmVudCwgYnV0XHJcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBhbHNvIGVuZHMgZWRpdGluZywgaXQgYWxzbyBxdWV1ZXMgdGhlIGRlc3RydWN0aW9uIG9mIHRoaXMgY29tcG9uZW50IGFuZCB0aGUgY2FsbCB0byBnZXRWYWx1ZS5cclxuICAgICAgICAgICAgLy8gVGhlIHByb2JsZW0gd2FzIHRoYXQgdGhpcy52YWx1ZSBpc24ndCB1cGRhdGVkIHdpdGggdGhlIG5ldyB2YWx1ZSBiZWZvcmUgdGhpcyBldmVudCBmaXJlcyxcclxuICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byB1cGRhdGUgaXQgbWFudWFsbHkgaGVyZS5cclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLm5vZGUuc2V0RGF0YVZhbHVlKHRoaXMuZ3JpZFZhbHVlRmllbGQsIHRoaXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wYXJhbXMpIHtcclxuXHJcbiAgICAgICAgICAgIC8vICBJZiB0aGUgZmlsbCBidXR0b24sIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGVkaXRvciwgaXMgYWN0aXZhdGVkLCBkb24ndCBzdG9wIGVkaXRpbmdcclxuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIgbWFraW5nIGEgc2VsZWN0aW9uLlxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd0ZpbGxCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLnN0b3BFZGl0aW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlzUG9wdXAoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRmlsbEJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbGxBbGwgJiYgKCF0aGlzLmZpbGxHcm91cEF0dHJpYnV0ZSB8fCB0aGlzLmZpbGxHcm91cEF0dHJpYnV0ZSA9PT0gXCJcIikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb2x1bW4gYXR0cmlidXRlIFwiZmlsbEdyb3VwQXR0cmlidXRlXCIgb3IgXCJmaWxsQWxsXCIgc3BlY2lmaWVkLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgRmlsbCBmdW5jdGlvbmFsaXR5LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1zICYmIHRoaXMucGFyYW1zLmNvbHVtbiAmJiB0aGlzLnBhcmFtcy5jb2x1bW4uZ3JpZEFwaSAmJiB0aGlzLnBhcmFtcy5ub2RlICYmICh0aGlzLmZpbGxBbGwgfHwgKHRoaXMuZmlsbEdyb3VwQXR0cmlidXRlICYmIHRoaXMuZmlsbEdyb3VwQXR0cmlidXRlICE9PSBcIlwiKSkpIHtcclxuICAgICAgICAgICAgbGV0IHRoaXNSb3dOb2RlID0gdGhpcy5wYXJhbXMubm9kZTtcclxuXHJcbiAgICAgICAgICAgIC8vdGhpcy5zdGFydFNwaW5uZXJEaWFsb2coKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuY29sdW1uLmdyaWRBcGkuZm9yRWFjaE5vZGVBZnRlckZpbHRlcigocm93Tm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvd05vZGUgJiYgcm93Tm9kZS5kYXRhICYmIHRoaXNSb3dOb2RlICYmIHRoaXNSb3dOb2RlLmRhdGEgJiYgKHRoaXMuZmlsbEFsbCB8fCByb3dOb2RlLmRhdGFbdGhpcy5maWxsR3JvdXBBdHRyaWJ1dGVdID09PSB0aGlzUm93Tm9kZS5kYXRhW3RoaXMuZmlsbEdyb3VwQXR0cmlidXRlXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3Bvb2ZlZEV2ZW50OiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaTogdGhpcy5wYXJhbXMuY29sdW1uLmdyaWRBcGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbERlZjogdGhpcy5wYXJhbXMuY29sdW1uLmNvbERlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnBhcmFtcy5jb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkFwaTogdGhpcy5wYXJhbXMuY29sdW1uLmNvbHVtbkFwaSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByb3dOb2RlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogcm93Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IHJvd05vZGUuZGF0YVt0aGlzLmdyaWRWYWx1ZUZpZWxkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IHJvd05vZGUucm93SW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1Bpbm5lZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImNlbGxWYWx1ZUNoYW5nZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByb3dOb2RlLmRhdGFbdGhpcy5ncmlkVmFsdWVGaWVsZF0gPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd05vZGUuc2V0RGF0YVZhbHVlKHRoaXMuZ3JpZFZhbHVlRmllbGQsIHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLmNvbHVtbi5ncmlkQXBpLmRpc3BhdGNoRXZlbnQoc3Bvb2ZlZEV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jb2x1bW4uZ3JpZEFwaS5yZWZyZXNoQ2VsbHMoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuc3RvcFNwaW5uZXJEaWFsb2dzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblx0LypcclxuICAgIHN0YXJ0U3Bpbm5lckRpYWxvZygpOiBNYXREaWFsb2dSZWY8U3Bpbm5lckRpYWxvZ0NvbXBvbmVudD4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3BlbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBjb25maWd1cmF0aW9uOiBNYXREaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhID0ge1xyXG4gICAgICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSB3YWl0Li4uXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAzLFxyXG4gICAgICAgICAgICBkaWFtZXRlcjogMzBcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ud2lkdGggPSBcIjEzZW1cIjtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiA9IHRoaXMuZGlhbG9nLm9wZW4oU3Bpbm5lckRpYWxvZ0NvbXBvbmVudCwgY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3BlbiA9IGZhbHNlOyB9KTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJEaWFsb2dSZWZzLnB1c2goZGlhbG9nUmVmKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZjtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wU3Bpbm5lckRpYWxvZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgZm9yIChsZXQgZGlhbG9nUmVmIG9mIHRoaXMuc3Bpbm5lckRpYWxvZ1JlZnMpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3Bpbm5lckRpYWxvZ1JlZnMgPSBbXTtcclxuICAgIH1cclxuXHQqL1xyXG59XHJcbiJdfQ==
@@ -1,36 +1,36 @@
1
- import { NgModule } from "@angular/core";
2
- import { CommonModule } from "@angular/common";
3
- import { FormsModule, ReactiveFormsModule } from "@angular/forms";
4
- import { SelectRenderer } from "./select.renderer";
5
- import { DateRenderer } from "./date.renderer";
6
- import * as i0 from "@angular/core";
7
- export class AgGridRendererModule {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AgGridRendererModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AgGridRendererModule, declarations: [SelectRenderer,
10
- DateRenderer], imports: [CommonModule,
11
- FormsModule,
12
- ReactiveFormsModule], exports: [SelectRenderer,
13
- DateRenderer] }); }
14
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AgGridRendererModule, imports: [CommonModule,
15
- FormsModule,
16
- ReactiveFormsModule] }); }
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AgGridRendererModule, decorators: [{
19
- type: NgModule,
20
- args: [{
21
- imports: [
22
- CommonModule,
23
- FormsModule,
24
- ReactiveFormsModule,
25
- ],
26
- declarations: [
27
- SelectRenderer,
28
- DateRenderer
29
- ],
30
- exports: [
31
- SelectRenderer,
32
- DateRenderer
33
- ]
34
- }]
35
- }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWctZ3JpZC1yZW5kZXJlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWN0aW9uYXJ5LWVkaXRvci9zcmMvZ3JpZC1yZW5kZXJlcnMvYWctZ3JpZC1yZW5kZXJlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBZ0I3QyxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQixpQkFSL0IsY0FBYztZQUNWLFlBQVksYUFOVixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQixhQU96QixjQUFjO1lBQ1YsWUFBWTtnSEFHTCxvQkFBb0IsWUFiekIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7OzRGQVdkLG9CQUFvQjtrQkFmaEMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjtxQkFDdEI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNoQixjQUFjO3dCQUNWLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNYLGNBQWM7d0JBQ1YsWUFBWTtxQkFDYjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuaW1wb3J0IHsgU2VsZWN0UmVuZGVyZXIgfSBmcm9tIFwiLi9zZWxlY3QucmVuZGVyZXJcIjtcclxuaW1wb3J0IHtEYXRlUmVuZGVyZXJ9IGZyb20gXCIuL2RhdGUucmVuZGVyZXJcIjtcclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuXHRcdFNlbGVjdFJlbmRlcmVyLFxyXG4gICAgICBEYXRlUmVuZGVyZXJcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcblx0XHRTZWxlY3RSZW5kZXJlcixcclxuICAgICAgRGF0ZVJlbmRlcmVyXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ0dyaWRSZW5kZXJlck1vZHVsZSB7IH1cclxuIl19
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { FormsModule, ReactiveFormsModule } from "@angular/forms";
4
+ import { SelectRenderer } from "./select.renderer";
5
+ import { DateRenderer } from "./date.renderer";
6
+ import * as i0 from "@angular/core";
7
+ export class AgGridRendererModule {
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AgGridRendererModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.2", ngImport: i0, type: AgGridRendererModule, declarations: [SelectRenderer,
10
+ DateRenderer], imports: [CommonModule,
11
+ FormsModule,
12
+ ReactiveFormsModule], exports: [SelectRenderer,
13
+ DateRenderer] }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AgGridRendererModule, imports: [CommonModule,
15
+ FormsModule,
16
+ ReactiveFormsModule] }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AgGridRendererModule, decorators: [{
19
+ type: NgModule,
20
+ args: [{
21
+ imports: [
22
+ CommonModule,
23
+ FormsModule,
24
+ ReactiveFormsModule,
25
+ ],
26
+ declarations: [
27
+ SelectRenderer,
28
+ DateRenderer
29
+ ],
30
+ exports: [
31
+ SelectRenderer,
32
+ DateRenderer
33
+ ]
34
+ }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWctZ3JpZC1yZW5kZXJlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWN0aW9uYXJ5LWVkaXRvci9zcmMvZ3JpZC1yZW5kZXJlcnMvYWctZ3JpZC1yZW5kZXJlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBZ0I3QyxNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQixpQkFSL0IsY0FBYztZQUNWLFlBQVksYUFOVixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQixhQU96QixjQUFjO1lBQ1YsWUFBWTsrR0FHTCxvQkFBb0IsWUFiekIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7OzJGQVdkLG9CQUFvQjtrQkFmaEMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjtxQkFDdEI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNoQixjQUFjO3dCQUNWLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNYLGNBQWM7d0JBQ1YsWUFBWTtxQkFDYjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuaW1wb3J0IHsgU2VsZWN0UmVuZGVyZXIgfSBmcm9tIFwiLi9zZWxlY3QucmVuZGVyZXJcIjtcclxuaW1wb3J0IHtEYXRlUmVuZGVyZXJ9IGZyb20gXCIuL2RhdGUucmVuZGVyZXJcIjtcclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuXHRcdFNlbGVjdFJlbmRlcmVyLFxyXG4gICAgICBEYXRlUmVuZGVyZXJcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcblx0XHRTZWxlY3RSZW5kZXJlcixcclxuICAgICAgRGF0ZVJlbmRlcmVyXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ0dyaWRSZW5kZXJlck1vZHVsZSB7IH1cclxuIl19