@flywheel-io/vision 0.9.2 → 0.10.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.
@@ -1,14 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./table.component";
3
- import * as i2 from "@angular/common";
4
- import * as i3 from "@angular/forms";
5
- import * as i4 from "@angular/material/input";
6
- import * as i5 from "@angular/material/paginator";
7
- import * as i6 from "@angular/material/select";
8
- import * as i7 from "@angular/material/sort";
9
- import * as i8 from "@angular/material/table";
10
- export declare class FwTableModule {
11
- static ɵfac: i0.ɵɵFactoryDeclaration<FwTableModule, never>;
12
- static ɵmod: i0.ɵɵNgModuleDeclaration<FwTableModule, [typeof i1.FwTableComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i3.ReactiveFormsModule, typeof i4.MatInputModule, typeof i5.MatPaginatorModule, typeof i6.MatSelectModule, typeof i7.MatSortModule, typeof i8.MatTableModule], [typeof i1.FwTableComponent]>;
13
- static ɵinj: i0.ɵɵInjectorDeclaration<FwTableModule>;
14
- }
@@ -1,179 +0,0 @@
1
- import { Component, Input, ViewChild } from '@angular/core';
2
- import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
3
- import { MatPaginator } from '@angular/material/paginator';
4
- import { MatSort } from '@angular/material/sort';
5
- import { MatTableDataSource } from '@angular/material/table';
6
- import { debounceTime } from 'rxjs/operators';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/forms";
10
- import * as i3 from "@angular/material/form-field";
11
- import * as i4 from "@angular/material/input";
12
- import * as i5 from "@angular/material/paginator";
13
- import * as i6 from "@angular/material/select";
14
- import * as i7 from "@angular/material/core";
15
- import * as i8 from "@angular/material/sort";
16
- import * as i9 from "@angular/material/table";
17
- export class FwTableComponent {
18
- constructor(changeDetectorRef) {
19
- this.changeDetectorRef = changeDetectorRef;
20
- this.columns = [];
21
- this.dataSource = [];
22
- this.layout = 'basic';
23
- this.pageSize = null;
24
- this.webCompPageSize = null;
25
- this.sort = null;
26
- this.sortColumn = '';
27
- this.sortOrder = 'asc';
28
- this.displayedColumns = [];
29
- this.filters = new UntypedFormGroup({});
30
- // to support updating column header labels
31
- this.trackByIndex = i => i;
32
- }
33
- ngOnInit() {
34
- this.setDataSource();
35
- this.setColumns();
36
- this.addFilterControls();
37
- this.setFilter();
38
- this.matDataSource.filterPredicate = (row, filter) => {
39
- const filters = JSON.parse(filter);
40
- for (const filter in filters) {
41
- const filterValue = filters[filter];
42
- const rowValue = row[filter];
43
- // multi-select
44
- if (Array.isArray(filterValue) && filterValue.length > 0 && !filterValue.includes(rowValue)) {
45
- return false;
46
- }
47
- // input or select
48
- if (!Array.isArray(filterValue) && !String(rowValue).toLowerCase().includes(String(filterValue ?? '').toLowerCase())) {
49
- return false;
50
- }
51
- }
52
- return true;
53
- };
54
- this.filters.valueChanges.pipe(debounceTime(200)).subscribe(() => this.setFilter());
55
- }
56
- ngAfterViewInit() {
57
- this.setSort();
58
- this.setPaginator();
59
- }
60
- ngOnChanges(changes) {
61
- if (changes.columns) {
62
- this.setColumns();
63
- }
64
- if (changes.dataSource) {
65
- this.setDataSource();
66
- }
67
- if (changes.sort || changes.dataSource) {
68
- this.setSort();
69
- }
70
- if (changes.pageSize || changes['page-size']) {
71
- this.setPaginator();
72
- }
73
- }
74
- get isCompact() {
75
- return this.layout === 'compact';
76
- }
77
- get paginationSize() {
78
- return this.pageSize || this.webCompPageSize || 0;
79
- }
80
- get isSortEnabled() {
81
- return this.sort !== null;
82
- }
83
- addFilterControls() {
84
- for (const column of this.columns) {
85
- this.filters.addControl(column.key, new UntypedFormControl());
86
- }
87
- }
88
- setDataSource() {
89
- this.matDataSource = new MatTableDataSource(this.dataSource);
90
- }
91
- setColumns() {
92
- this.displayedColumns = this.columns.map(column => column.key);
93
- }
94
- setFilter() {
95
- this.matDataSource.filter = JSON.stringify(this.filters.value);
96
- }
97
- setSort() {
98
- if (!this.matSort || this.sort === null) {
99
- return;
100
- }
101
- const sortSplit = this.sort.split(' ');
102
- this.sortColumn = sortSplit[0];
103
- if (['asc', 'desc'].includes(sortSplit[1])) {
104
- this.sortOrder = sortSplit[1];
105
- }
106
- else {
107
- console.warn(`Sort order '${sortSplit[1]}' is not 'asc' or 'desc', defaulting to 'asc'`);
108
- }
109
- if (this.sortColumn) {
110
- this.matSort.sort({ id: this.sortColumn, start: this.sortOrder, disableClear: false });
111
- const sortHeader = this.matSort.sortables.get(this.sortColumn);
112
- if (sortHeader) {
113
- sortHeader._setAnimationTransitionState({ toState: 'active' });
114
- }
115
- else {
116
- console.warn(`Unable to find sort column '${this.sortColumn}'. Initial sort failed.`);
117
- }
118
- }
119
- this.matDataSource.sort = this.matSort;
120
- }
121
- setPaginator() {
122
- // ensures ui updates correctly when paginator options change
123
- this.changeDetectorRef.detectChanges();
124
- this.matDataSource.paginator = this.matPaginator;
125
- }
126
- // necessary for web component to trigger this.filter.valueChanges
127
- onInputFilter(event, column) {
128
- // defer setting filter control as event.target.value is not set yet
129
- setTimeout(() => this.filters.get(column.key).setValue(event.target.value));
130
- }
131
- // necessary for web component to trigger this.filter.valueChanges
132
- onSelectFilter(event, column) {
133
- const innerText = event.target.innerText;
134
- this.filters.get(column.key).setValue(innerText === '- none -' ? null : innerText);
135
- }
136
- // necessary for web component to trigger this.filter.valueChanges
137
- onMultiSelectFilter(event, column) {
138
- let value = this.filters.controls[column.key].value || [];
139
- const innerText = event.target.parentElement.innerText;
140
- if (value.includes(innerText)) {
141
- value = value.filter(v => v !== innerText);
142
- }
143
- else {
144
- value.push(innerText);
145
- }
146
- this.filters.get(column.key).setValue(value.length === 1 && innerText === ''
147
- ? null // when all checboxes have been deselected
148
- : value);
149
- }
150
- }
151
- FwTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
152
- FwTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FwTableComponent, selector: "fw-table", inputs: { columns: "columns", dataSource: "dataSource", layout: "layout", pageSize: "pageSize", webCompPageSize: ["page-size", "webCompPageSize"], sort: "sort" }, host: { properties: { "class.compact": "isCompact" }, classAttribute: "fw-table" }, viewQueries: [{ propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table mat-table [dataSource]=\"matDataSource\" matSort>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByIndex\">\n <ng-container [matColumnDef]=\"column.key\">\n\n <ng-template #tableHeaders>\n <ng-container [ngSwitch]=\"column.filter?.control\">\n <ng-container *ngSwitchCase=\"'input'\">\n <mat-form-field *ngIf=\"filters.get(column.key) as control\" appearance=\"outline\" (click)=\"$event.stopPropagation()\">\n <mat-label *ngIf=\"!isCompact\">{{ column.label }}</mat-label>\n <input matInput [formControl]=\"control\" [placeholder]=\"column.filter.placeholder\" (keydown)=\"$event.stopPropagation(); onInputFilter($event, column);\">\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <mat-form-field *ngIf=\"filters.get(column.key) as control\" appearance=\"outline\" (click)=\"$event.stopPropagation()\">\n <mat-label *ngIf=\"!isCompact\">{{ column.label }}</mat-label>\n <mat-select [formControl]=\"control\" [placeholder]=\"column.filter.placeholder\">\n <mat-option (click)=\"onSelectFilter($event, column);\">- none -</mat-option>\n <mat-option *ngFor=\"let option of column.filter.options\" [value]=\"option\" (click)=\"onSelectFilter($event, column);\">{{ option }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"'multi-select'\">\n <mat-form-field *ngIf=\"filters.get(column.key) as control\" appearance=\"outline\" (click)=\"$event.stopPropagation()\">\n <mat-label *ngIf=\"!isCompact\">{{ column.label }}</mat-label>\n <mat-select [formControl]=\"control\" [placeholder]=\"column.filter.placeholder\" multiple=\"true\">\n <mat-option *ngFor=\"let option of column.filter.options\" [value]=\"option\" (click)=\"onMultiSelectFilter($event, column);\">{{ option }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchDefault>{{ column.label }}</ng-container>\n </ng-container>\n </ng-template>\n\n <ng-container *ngIf=\"isSortEnabled\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ng-container [ngTemplateOutlet]=\"tableHeaders\"></ng-container>\n </th>\n </ng-container>\n\n <ng-container *ngIf=\"!isSortEnabled\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container [ngTemplateOutlet]=\"tableHeaders\"></ng-container>\n </th>\n </ng-container>\n\n <td mat-cell *matCellDef=\"let element\"> {{ element[column.key] }} </td>\n </ng-container>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n<mat-paginator *ngIf=\"paginationSize > 0\" [pageSize]=\"paginationSize\"></mat-paginator>\n\n\n\n", styles: [":host{display:block;width:100%}:host:not(.compact) table.mat-table tr.mat-header-row,:host:not(.compact) table.mat-table tr.mat-row{height:56px}:host.compact table.mat-table tr.mat-header-row,:host.compact table.mat-table tr.mat-row{height:32px}:host.compact mat-paginator.mat-paginator{align-items:center;display:flex;height:32px;justify-content:flex-end}table.mat-table{width:100%}table.mat-table th,table.mat-table td{vertical-align:middle}table.mat-table th.mat-header-cell,table.mat-table th.mat-cell,table.mat-table td.mat-header-cell,table.mat-table td.mat-cell{border-bottom-color:var(--color-gray)}\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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }] });
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwTableComponent, decorators: [{
154
- type: Component,
155
- args: [{ host: {
156
- 'class': 'fw-table',
157
- '[class.compact]': 'isCompact',
158
- }, selector: 'fw-table', template: "<table mat-table [dataSource]=\"matDataSource\" matSort>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByIndex\">\n <ng-container [matColumnDef]=\"column.key\">\n\n <ng-template #tableHeaders>\n <ng-container [ngSwitch]=\"column.filter?.control\">\n <ng-container *ngSwitchCase=\"'input'\">\n <mat-form-field *ngIf=\"filters.get(column.key) as control\" appearance=\"outline\" (click)=\"$event.stopPropagation()\">\n <mat-label *ngIf=\"!isCompact\">{{ column.label }}</mat-label>\n <input matInput [formControl]=\"control\" [placeholder]=\"column.filter.placeholder\" (keydown)=\"$event.stopPropagation(); onInputFilter($event, column);\">\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <mat-form-field *ngIf=\"filters.get(column.key) as control\" appearance=\"outline\" (click)=\"$event.stopPropagation()\">\n <mat-label *ngIf=\"!isCompact\">{{ column.label }}</mat-label>\n <mat-select [formControl]=\"control\" [placeholder]=\"column.filter.placeholder\">\n <mat-option (click)=\"onSelectFilter($event, column);\">- none -</mat-option>\n <mat-option *ngFor=\"let option of column.filter.options\" [value]=\"option\" (click)=\"onSelectFilter($event, column);\">{{ option }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"'multi-select'\">\n <mat-form-field *ngIf=\"filters.get(column.key) as control\" appearance=\"outline\" (click)=\"$event.stopPropagation()\">\n <mat-label *ngIf=\"!isCompact\">{{ column.label }}</mat-label>\n <mat-select [formControl]=\"control\" [placeholder]=\"column.filter.placeholder\" multiple=\"true\">\n <mat-option *ngFor=\"let option of column.filter.options\" [value]=\"option\" (click)=\"onMultiSelectFilter($event, column);\">{{ option }}</mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchDefault>{{ column.label }}</ng-container>\n </ng-container>\n </ng-template>\n\n <ng-container *ngIf=\"isSortEnabled\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ng-container [ngTemplateOutlet]=\"tableHeaders\"></ng-container>\n </th>\n </ng-container>\n\n <ng-container *ngIf=\"!isSortEnabled\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container [ngTemplateOutlet]=\"tableHeaders\"></ng-container>\n </th>\n </ng-container>\n\n <td mat-cell *matCellDef=\"let element\"> {{ element[column.key] }} </td>\n </ng-container>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n<mat-paginator *ngIf=\"paginationSize > 0\" [pageSize]=\"paginationSize\"></mat-paginator>\n\n\n\n", styles: [":host{display:block;width:100%}:host:not(.compact) table.mat-table tr.mat-header-row,:host:not(.compact) table.mat-table tr.mat-row{height:56px}:host.compact table.mat-table tr.mat-header-row,:host.compact table.mat-table tr.mat-row{height:32px}:host.compact mat-paginator.mat-paginator{align-items:center;display:flex;height:32px;justify-content:flex-end}table.mat-table{width:100%}table.mat-table th,table.mat-table td{vertical-align:middle}table.mat-table th.mat-header-cell,table.mat-table th.mat-cell,table.mat-table td.mat-header-cell,table.mat-table td.mat-cell{border-bottom-color:var(--color-gray)}\n"] }]
159
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { columns: [{
160
- type: Input
161
- }], dataSource: [{
162
- type: Input
163
- }], layout: [{
164
- type: Input
165
- }], pageSize: [{
166
- type: Input
167
- }], webCompPageSize: [{
168
- type: Input,
169
- args: ['page-size']
170
- }], sort: [{
171
- type: Input
172
- }], matPaginator: [{
173
- type: ViewChild,
174
- args: [MatPaginator]
175
- }], matSort: [{
176
- type: ViewChild,
177
- args: [MatSort]
178
- }] } });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFvQyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQXlCOUMsTUFBTSxPQUFPLGdCQUFnQjtJQXFCM0IsWUFDVSxpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXJCckMsWUFBTyxHQUFhLEVBQUUsQ0FBQTtRQUN0QixlQUFVLEdBQVUsRUFBRSxDQUFBO1FBQ3RCLFdBQU0sR0FBeUIsT0FBTyxDQUFBO1FBQ3RDLGFBQVEsR0FBRyxJQUFJLENBQUE7UUFDSixvQkFBZSxHQUFHLElBQUksQ0FBQTtRQUNqQyxTQUFJLEdBQUcsSUFBSSxDQUFBO1FBRVosZUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNmLGNBQVMsR0FBYyxLQUFLLENBQUE7UUFFcEMscUJBQWdCLEdBQWEsRUFBRSxDQUFBO1FBQy9CLFlBQU8sR0FBcUIsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUdwRCwyQ0FBMkM7UUFDM0MsaUJBQVksR0FB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QUFZO2dCQUNILE9BQU87c0JBQTFCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydEhlYWRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG50eXBlIFNvcnRPcmRlciA9ICdhc2MnIHwgJ2Rlc2MnXG5cbmludGVyZmFjZSBDb2x1bW5GaWx0ZXIge1xuICBjb250cm9sOiAnaW5wdXQnIHwgJ3NlbGVjdCcgfCAnbXVsdGktc2VsZWN0JyxcbiAgb3B0aW9ucz86IHN0cmluZ1tdLFxuICBwbGFjZWhvbGRlcj86IHN0cmluZyxcbn1cblxuaW50ZXJmYWNlIENvbHVtbiB7XG4gIGxhYmVsOiBzdHJpbmcsXG4gIGtleTogc3RyaW5nLFxuICBmaWx0ZXI/OiBDb2x1bW5GaWx0ZXIsXG59XG5cbkBDb21wb25lbnQoe1xuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2Z3LXRhYmxlJyxcbiAgICAnW2NsYXNzLmNvbXBhY3RdJzogJ2lzQ29tcGFjdCcsXG4gIH0sXG4gIHNlbGVjdG9yOiAnZnctdGFibGUnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBGd1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb2x1bW5zOiBDb2x1bW5bXSA9IFtdXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdID0gW11cbiAgQElucHV0KCkgbGF5b3V0PzogJ2Jhc2ljJyB8ICdjb21wYWN0JyA9ICdiYXNpYydcbiAgQElucHV0KCkgcGFnZVNpemUgPSBudWxsXG4gIEBJbnB1dCgncGFnZS1zaXplJykgd2ViQ29tcFBhZ2VTaXplID0gbnVsbFxuICBASW5wdXQoKSBzb3J0ID0gbnVsbFxuXG4gIHByaXZhdGUgc29ydENvbHVtbiA9ICcnXG4gIHByaXZhdGUgc29ydE9yZGVyOiBTb3J0T3JkZXIgPSAnYXNjJ1xuXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW11cbiAgZmlsdGVyczogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KVxuICBtYXREYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PlxuXG4gIC8vIHRvIHN1cHBvcnQgdXBkYXRpbmcgY29sdW1uIGhlYWRlciBsYWJlbHNcbiAgdHJhY2tCeUluZGV4OiBhbnkgPSBpID0+IGlcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgbWF0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3JcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBtYXRTb3J0OiBNYXRTb3J0XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRhU291cmNlKCk7XG4gICAgdGhpcy5zZXRDb2x1bW5zKCk7XG4gICAgdGhpcy5hZGRGaWx0ZXJDb250cm9scygpO1xuICAgIHRoaXMuc2V0RmlsdGVyKCk7XG4gICAgdGhpcy5tYXREYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChyb3csIGZpbHRlcikgPT4ge1xuICAgICAgY29uc3QgZmlsdGVycyA9IEpTT04ucGFyc2UoZmlsdGVyKTtcbiAgICAgIGZvciAoY29uc3QgZmlsdGVyIGluIGZpbHRlcnMpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBmaWx0ZXJzW2ZpbHRlcl07XG4gICAgICAgIGNvbnN0IHJvd1ZhbHVlID0gcm93W2ZpbHRlcl07XG4gICAgICAgIC8vIG11bHRpLXNlbGVjdFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZSkgJiYgZmlsdGVyVmFsdWUubGVuZ3RoID4gMCAmJiAhZmlsdGVyVmFsdWUuaW5jbHVkZXMocm93VmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlucHV0IG9yIHNlbGVjdFxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpICYmICFTdHJpbmcocm93VmFsdWUpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoU3RyaW5nKGZpbHRlclZhbHVlID8/ICcnKS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB0aGlzLmZpbHRlcnMudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldEZpbHRlcigpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNvcnQoKTtcbiAgICB0aGlzLnNldFBhZ2luYXRvcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuc2V0Q29sdW1ucygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5kYXRhU291cmNlKSB7XG4gICAgICB0aGlzLnNldERhdGFTb3VyY2UoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuc29ydCB8fCBjaGFuZ2VzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuc2V0U29ydCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5wYWdlU2l6ZSB8fCBjaGFuZ2VzWydwYWdlLXNpemUnXSkge1xuICAgICAgdGhpcy5zZXRQYWdpbmF0b3IoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNDb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxheW91dCA9PT0gJ2NvbXBhY3QnO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRpb25TaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnZVNpemUgfHwgdGhpcy53ZWJDb21wUGFnZVNpemUgfHwgMDtcbiAgfVxuXG4gIGdldCBpc1NvcnRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvcnQgIT09IG51bGw7XG4gIH1cblxuICBhZGRGaWx0ZXJDb250cm9scygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5hZGRDb250cm9sKGNvbHVtbi5rZXksIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF0YVNvdXJjZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1hdERhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSk7XG4gIH1cblxuICBzZXRDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5rZXkpO1xuICB9XG5cbiAgc2V0RmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMubWF0RGF0YVNvdXJjZS5maWx0ZXIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcnMudmFsdWUpO1xuICB9XG5cbiAgc2V0U29ydCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWF0U29ydCB8fCB0aGlzLnNvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc29ydFNwbGl0ID0gdGhpcy5zb3J0LnNwbGl0KCcgJyk7XG4gICAgdGhpcy5zb3J0Q29sdW1uID0gc29ydFNwbGl0WzBdO1xuICAgIGlmIChbJ2FzYycsICdkZXNjJ10uaW5jbHVkZXMoc29ydFNwbGl0WzFdKSkge1xuICAgICAgdGhpcy5zb3J0T3JkZXIgPSBzb3J0U3BsaXRbMV0gYXMgU29ydE9yZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYFNvcnQgb3JkZXIgJyR7c29ydFNwbGl0WzFdfScgaXMgbm90ICdhc2MnIG9yICdkZXNjJywgZGVmYXVsdGluZyB0byAnYXNjJ2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0Q29sdW1uKSB7XG4gICAgICB0aGlzLm1hdFNvcnQuc29ydCh7IGlkOiB0aGlzLnNvcnRDb2x1bW4sIHN0YXJ0OiB0aGlzLnNvcnRPcmRlciwgZGlzYWJsZUNsZWFyOiBmYWxzZSB9KTtcbiAgICAgIGNvbnN0IHNvcnRIZWFkZXIgPSB0aGlzLm1hdFNvcnQuc29ydGFibGVzLmdldCh0aGlzLnNvcnRDb2x1bW4pIGFzIE1hdFNvcnRIZWFkZXI7XG4gICAgICBpZiAoc29ydEhlYWRlcikge1xuICAgICAgICBzb3J0SGVhZGVyLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoeyB0b1N0YXRlOiAnYWN0aXZlJyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVW5hYmxlIHRvIGZpbmQgc29ydCBjb2x1bW4gJyR7dGhpcy5zb3J0Q29sdW1ufScuIEluaXRpYWwgc29ydCBmYWlsZWQuYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubWF0RGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5tYXRTb3J0O1xuICB9XG5cbiAgc2V0UGFnaW5hdG9yKCk6IHZvaWQge1xuICAgIC8vIGVuc3VyZXMgdWkgdXBkYXRlcyBjb3JyZWN0bHkgd2hlbiBwYWdpbmF0b3Igb3B0aW9ucyBjaGFuZ2VcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLm1hdERhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRQYWdpbmF0b3I7XG4gIH1cblxuICAvLyBuZWNlc3NhcnkgZm9yIHdlYiBjb21wb25lbnQgdG8gdHJpZ2dlciB0aGlzLmZpbHRlci52YWx1ZUNoYW5nZXNcbiAgb25JbnB1dEZpbHRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBDb2x1bW4pOiB2b2lkIHtcbiAgICAvLyBkZWZlciBzZXR0aW5nIGZpbHRlciBjb250cm9sIGFzIGV2ZW50LnRhcmdldC52YWx1ZSBpcyBub3Qgc2V0IHlldFxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5maWx0ZXJzLmdldChjb2x1bW4ua2V5KS5zZXRWYWx1ZSgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSk7XG4gIH1cblxuICAvLyBuZWNlc3NhcnkgZm9yIHdlYiBjb21wb25lbnQgdG8gdHJpZ2dlciB0aGlzLmZpbHRlci52YWx1ZUNoYW5nZXNcbiAgb25TZWxlY3RGaWx0ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbHVtbjogQ29sdW1uKTogdm9pZCB7XG4gICAgY29uc3QgaW5uZXJUZXh0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5pbm5lclRleHQ7XG4gICAgdGhpcy5maWx0ZXJzLmdldChjb2x1bW4ua2V5KS5zZXRWYWx1ZShpbm5lclRleHQgPT09ICctIG5vbmUgLScgPyBudWxsIDogaW5uZXJUZXh0KTtcbiAgfVxuXG4gIC8vIG5lY2Vzc2FyeSBmb3Igd2ViIGNvbXBvbmVudCB0byB0cmlnZ2VyIHRoaXMuZmlsdGVyLnZhbHVlQ2hhbmdlc1xuICBvbk11bHRpU2VsZWN0RmlsdGVyKGV2ZW50OiBNb3VzZUV2ZW50LCBjb2x1bW46IENvbHVtbik6IHZvaWQge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuZmlsdGVycy5jb250cm9sc1tjb2x1bW4ua2V5XS52YWx1ZSB8fCBbXTtcbiAgICBjb25zdCBpbm5lclRleHQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnBhcmVudEVsZW1lbnQuaW5uZXJUZXh0O1xuICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhpbm5lclRleHQpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcih2ID0+IHYgIT09IGlubmVyVGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlLnB1c2goaW5uZXJUZXh0KTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJzLmdldChjb2x1bW4ua2V5KS5zZXRWYWx1ZShcbiAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMSAmJiBpbm5lclRleHQgPT09ICcnXG4gICAgICAgID8gbnVsbCAvLyB3aGVuIGFsbCBjaGVjYm94ZXMgaGF2ZSBiZWVuIGRlc2VsZWN0ZWRcbiAgICAgICAgOiB2YWx1ZVxuICAgICk7XG4gIH1cbn1cbiIsIjx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwibWF0RGF0YVNvdXJjZVwiIG1hdFNvcnQ+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj5cbiAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmtleVwiPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3RhYmxlSGVhZGVycz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uLmZpbHRlcj8uY29udHJvbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dCdcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImZpbHRlcnMuZ2V0KGNvbHVtbi5rZXkpIGFzIGNvbnRyb2xcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cIiFpc0NvbXBhY3RcIj57eyBjb2x1bW4ubGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgW3BsYWNlaG9sZGVyXT1cImNvbHVtbi5maWx0ZXIucGxhY2Vob2xkZXJcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uSW5wdXRGaWx0ZXIoJGV2ZW50LCBjb2x1bW4pO1wiPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZmlsdGVycy5nZXQoY29sdW1uLmtleSkgYXMgY29udHJvbFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwiIWlzQ29tcGFjdFwiPnt7IGNvbHVtbi5sYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtwbGFjZWhvbGRlcl09XCJjb2x1bW4uZmlsdGVyLnBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKGNsaWNrKT1cIm9uU2VsZWN0RmlsdGVyKCRldmVudCwgY29sdW1uKTtcIj4tIG5vbmUgLTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbi5maWx0ZXIub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIiAoY2xpY2spPVwib25TZWxlY3RGaWx0ZXIoJGV2ZW50LCBjb2x1bW4pO1wiPnt7IG9wdGlvbiB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZmlsdGVycy5nZXQoY29sdW1uLmtleSkgYXMgY29udHJvbFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwiIWlzQ29tcGFjdFwiPnt7IGNvbHVtbi5sYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtwbGFjZWhvbGRlcl09XCJjb2x1bW4uZmlsdGVyLnBsYWNlaG9sZGVyXCIgbXVsdGlwbGU9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb2x1bW4uZmlsdGVyLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCIgKGNsaWNrKT1cIm9uTXVsdGlTZWxlY3RGaWx0ZXIoJGV2ZW50LCBjb2x1bW4pO1wiPnt7IG9wdGlvbiB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+e3sgY29sdW1uLmxhYmVsIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU29ydEVuYWJsZWRcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZUhlYWRlcnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU29ydEVuYWJsZWRcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlSGVhZGVyc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RoPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+IHt7IGVsZW1lbnRbY29sdW1uLmtleV0gfX0gPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiPjwvdHI+XG48L3RhYmxlPlxuPG1hdC1wYWdpbmF0b3IgKm5nSWY9XCJwYWdpbmF0aW9uU2l6ZSA+IDBcIiBbcGFnZVNpemVdPVwicGFnaW5hdGlvblNpemVcIj48L21hdC1wYWdpbmF0b3I+XG5cblxuXG4iXX0=
@@ -1,51 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { NgModule } from '@angular/core';
3
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
- import { MatInputModule } from '@angular/material/input';
5
- import { MatPaginatorModule } from '@angular/material/paginator';
6
- import { MatSelectModule } from '@angular/material/select';
7
- import { MatSortModule } from '@angular/material/sort';
8
- import { MatTableModule } from '@angular/material/table';
9
- import { FwTableComponent } from './table.component';
10
- import * as i0 from "@angular/core";
11
- export class FwTableModule {
12
- }
13
- FwTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- FwTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: FwTableModule, declarations: [FwTableComponent], imports: [CommonModule,
15
- FormsModule,
16
- ReactiveFormsModule,
17
- MatInputModule,
18
- MatPaginatorModule,
19
- MatSelectModule,
20
- MatSortModule,
21
- MatTableModule], exports: [FwTableComponent] });
22
- FwTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwTableModule, imports: [CommonModule,
23
- FormsModule,
24
- ReactiveFormsModule,
25
- MatInputModule,
26
- MatPaginatorModule,
27
- MatSelectModule,
28
- MatSortModule,
29
- MatTableModule] });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwTableModule, decorators: [{
31
- type: NgModule,
32
- args: [{
33
- imports: [
34
- CommonModule,
35
- FormsModule,
36
- ReactiveFormsModule,
37
- MatInputModule,
38
- MatPaginatorModule,
39
- MatSelectModule,
40
- MatSortModule,
41
- MatTableModule,
42
- ],
43
- exports: [
44
- FwTableComponent,
45
- ],
46
- declarations: [
47
- FwTableComponent,
48
- ]
49
- }]
50
- }] });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBb0JyRCxNQUFNLE9BQU8sYUFBYTs7MEdBQWIsYUFBYTsyR0FBYixhQUFhLGlCQUhsQixnQkFBZ0IsYUFiaEIsWUFBWTtRQUNaLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLGtCQUFrQjtRQUNsQixlQUFlO1FBQ2YsYUFBYTtRQUNiLGNBQWMsYUFHZCxnQkFBZ0I7MkdBTVgsYUFBYSxZQWhCbEIsWUFBWTtRQUNaLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLGtCQUFrQjtRQUNsQixlQUFlO1FBQ2YsYUFBYTtRQUNiLGNBQWM7MkZBU1QsYUFBYTtrQkFsQnpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYztxQkFDakI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGdCQUFnQjtxQkFDbkI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLGdCQUFnQjtxQkFDbkI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNvcnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuXG5pbXBvcnQgeyBGd1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBNYXRTb3J0TW9kdWxlLFxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgRndUYWJsZUNvbXBvbmVudCxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBGd1RhYmxlQ29tcG9uZW50LFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRndUYWJsZU1vZHVsZSB7fVxuIl19