@firestitch/report 18.0.2 → 18.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/data/report.data.d.ts +5 -2
- package/app/reports/dialogs/report-settings/report-settings-default.d.ts +2 -0
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +24 -1
- package/app/reports/interfaces/report.interface.d.ts +2 -0
- package/app/reports/report-filter-items.d.ts +12 -0
- package/esm2022/app/reports/data/report.data.mjs +7 -4
- package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +4 -4
- package/esm2022/app/reports/dialogs/report-settings/report-settings-default.mjs +22 -0
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +114 -15
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/report-filter-items.mjs +28 -28
- package/esm2022/app/reports/services/report-filter-state.service.mjs +11 -3
- package/fesm2022/{firestitch-report-echarts-Bgshq3H7.mjs → firestitch-report-echarts-DibqM0Fw.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-Bgshq3H7.mjs.map → firestitch-report-echarts-DibqM0Fw.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-DJ3o7KId.mjs → firestitch-report-firestitch-report-UX1baw15.mjs} +179 -53
- package/fesm2022/firestitch-report-firestitch-report-UX1baw15.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/firestitch-report-firestitch-report-DJ3o7KId.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RequestConfig } from '@firestitch/api';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { ComponentDataState, ReportFilterLevel, ResolvedFilterValue } from '../interfaces/report.interface';
|
|
3
|
+
import { ComponentDataState, FilterGroupDefault, ReportFilterLevel, ResolvedFilterValue } from '../interfaces/report.interface';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class ReportData<T = any> {
|
|
6
6
|
private _api;
|
|
@@ -42,7 +42,10 @@ export declare class ReportData<T = any> {
|
|
|
42
42
|
enabled?: boolean;
|
|
43
43
|
}, config?: RequestConfig): Observable<T>;
|
|
44
44
|
deleteFilter(reportId: number, filterId: number, config?: RequestConfig): Observable<T>;
|
|
45
|
-
|
|
45
|
+
updateFilterGroup(reportId: number, groupId: number, changes: {
|
|
46
|
+
level?: ReportFilterLevel;
|
|
47
|
+
default?: FilterGroupDefault | null;
|
|
48
|
+
}, config?: RequestConfig): Observable<T>;
|
|
46
49
|
static ɵfac: i0.ɵɵFactoryDeclaration<ReportData<any>, never>;
|
|
47
50
|
static ɵprov: i0.ɵɵInjectableDeclaration<ReportData<any>>;
|
|
48
51
|
}
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { ReportFilterGroup } from '../../interfaces/report.interface';
|
|
2
4
|
import * as i0 from "@angular/core";
|
|
3
5
|
export interface ReportSettingsResult {
|
|
4
6
|
action: 'saved' | 'deleted';
|
|
5
7
|
}
|
|
8
|
+
interface FilterDefaultRow {
|
|
9
|
+
group: ReportFilterGroup;
|
|
10
|
+
label: string;
|
|
11
|
+
start: Date | null;
|
|
12
|
+
end: Date | null;
|
|
13
|
+
values: {
|
|
14
|
+
name: string;
|
|
15
|
+
value: unknown;
|
|
16
|
+
}[];
|
|
17
|
+
value: string;
|
|
18
|
+
fetch: (keyword?: string) => Observable<{
|
|
19
|
+
name: string;
|
|
20
|
+
value: unknown;
|
|
21
|
+
}[]>;
|
|
22
|
+
}
|
|
6
23
|
export declare class ReportSettingsComponent implements OnInit {
|
|
7
24
|
selectedTab: string;
|
|
8
25
|
name: string;
|
|
@@ -11,6 +28,7 @@ export declare class ReportSettingsComponent implements OnInit {
|
|
|
11
28
|
layout: 'freeform' | 'flow';
|
|
12
29
|
timezone: string;
|
|
13
30
|
headingSize: number;
|
|
31
|
+
readonly filterRows: import("@angular/core").WritableSignal<FilterDefaultRow[]>;
|
|
14
32
|
private readonly _data;
|
|
15
33
|
private readonly _dialogRef;
|
|
16
34
|
private readonly _reportData;
|
|
@@ -19,7 +37,12 @@ export declare class ReportSettingsComponent implements OnInit {
|
|
|
19
37
|
private readonly _destroyRef;
|
|
20
38
|
ngOnInit(): void;
|
|
21
39
|
delete(): void;
|
|
22
|
-
save: () =>
|
|
40
|
+
save: () => Observable<[any, ...any[]]>;
|
|
41
|
+
private _buildFilterRows;
|
|
42
|
+
private _rowDefault;
|
|
43
|
+
private _defaultChanged;
|
|
44
|
+
private _normalize;
|
|
23
45
|
static ɵfac: i0.ɵɵFactoryDeclaration<ReportSettingsComponent, never>;
|
|
24
46
|
static ɵcmp: i0.ɵɵComponentDeclaration<ReportSettingsComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
25
47
|
}
|
|
48
|
+
export {};
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { IFilterConfigItem } from '@firestitch/filter';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
2
3
|
import { ReportData } from './data/report.data';
|
|
3
4
|
import { FilterGroupValue, ReportFilterGroup } from './interfaces/report.interface';
|
|
4
5
|
export declare function dateBoundString(value: Date | string | null | undefined): string | undefined;
|
|
6
|
+
export declare function loadGroupOptions(group: ReportFilterGroup, reportData: ReportData, reportId: number): Observable<{
|
|
7
|
+
name: string;
|
|
8
|
+
value: unknown;
|
|
9
|
+
}[]>;
|
|
10
|
+
export declare function matchOptions(options$: Observable<{
|
|
11
|
+
name: string;
|
|
12
|
+
value: unknown;
|
|
13
|
+
}[]>, keyword?: string): Observable<{
|
|
14
|
+
name: string;
|
|
15
|
+
value: unknown;
|
|
16
|
+
}[]>;
|
|
5
17
|
export declare function filterItemForGroup(group: ReportFilterGroup, reportData: ReportData, reportId: number, initial?: FilterGroupValue): IFilterConfigItem;
|
|
6
18
|
export declare function groupValuesFromQuery(query: Record<string, any>, groups: ReportFilterGroup[]): {
|
|
7
19
|
groupId: number;
|
|
@@ -133,9 +133,12 @@ export class ReportData {
|
|
|
133
133
|
...config,
|
|
134
134
|
});
|
|
135
135
|
}
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
// Update a filter group — its exposure level ('component' | 'report' | 'both')
|
|
137
|
+
// and/or its default value (the value seeding the report bar on open). Send
|
|
138
|
+
// `default: null` (or an empty default) to clear it. Only the keys provided
|
|
139
|
+
// are changed.
|
|
140
|
+
updateFilterGroup(reportId, groupId, changes, config = {}) {
|
|
141
|
+
return this._api.put(this._path(`${reportId}/filtergroups/${groupId}`), changes, {
|
|
139
142
|
key: 'filterGroup',
|
|
140
143
|
...config,
|
|
141
144
|
});
|
|
@@ -149,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
149
152
|
providedIn: 'root',
|
|
150
153
|
}]
|
|
151
154
|
}] });
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGF0YS9yZXBvcnQuZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsS0FBSyxFQUFpQixNQUFNLGlCQUFpQixDQUFDOztBQVd2RCwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLHFGQUFxRjtBQUlyRixNQUFNLE9BQU8sVUFBVTtJQUNiLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0IsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUN2RSxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBRTVCLGtGQUFrRjtJQUNsRixrREFBa0Q7SUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDL0QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFhLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFDWixLQUFLLEVBQ0w7WUFDRSxHQUFHLEVBQUUsU0FBUztZQUNkLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBWSxFQUFFLFNBQXdCLEVBQUU7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUNaLEVBQUUsSUFBSSxFQUFFLEVBQ1I7WUFDRSxHQUFHLEVBQUUsUUFBUTtZQUNiLEdBQUcsTUFBTTtTQUNWLENB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QyxFQUNqRCxFQUFFLEtBQUssRUFBRSxFQUNUO1lBQ0UsR0FBRyxFQUFFLGFBQWE7WUFDbEIsR0FBRyxNQUFNO1NBQ1YsQ0FDRixDQUFDO0lBQ0osQ0FBQzt3R0E3UFUsVUFBVTs0R0FBVixVQUFVLGNBRlQsTUFBTTs7NEZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNBcGksIFJlcXVlc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9hcGknO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgUmVwb3J0RmlsdGVyTGV2ZWwsXG4gIFJlc29sdmVkRmlsdGVyVmFsdWUsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gQVBJIGdhdGV3YXkgZm9yIHRoZSBSZXBvcnRzIG1vZHVsZS4gRXZlcnkgZW5kcG9pbnQgaGFuZ3Mgb2ZmIFtiYXNlUGF0aF0sXG4vLyB3aGljaCBkZWZhdWx0cyB0byBcInJlcG9ydHNcIiAodGhlIGZyYW1ld29yayByZXBvcnRzIGJhY2tlbmQgYXQgL2FwaS9yZXBvcnRzKVxuLy8gYW5kIGNhbiBiZSByZXBvaW50ZWQgYnkgdGhlIGhvc3Qgc28gdGhlIHBhY2thZ2Ugc3RheXMgc2VsZi1jb250YWluZWQgYW5kIHBvcnRhYmxlLlxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydERhdGE8VCA9IGFueT4ge1xuICBwcml2YXRlIF9hcGkgPSBpbmplY3QoRnNBcGkpO1xuXG4gIC8vIFRoZSBBUEkgcm9vdCBmb3IgZXZlcnkgcmVwb3J0cyBlbmRwb2ludC4gRGVmYXVsdHMgdG8gdGhlIGZyYW1ld29yayByZXBvcnRzXG4gIC8vIGNvbnRleHQ7IHNldCBpdCBvbmNlIChlLmcuIGZyb20gdGhlIGhvc3QncyByZXBvcnQgcGFnZSkgdG8gbW91bnQgZWxzZXdoZXJlLlxuICBwdWJsaWMgYmFzZVBhdGggPSAncmVwb3J0cyc7XG5cbiAgLy8gQnVpbGQgYW4gZW5kcG9pbnQgcGF0aCB1bmRlciB0aGUgY29uZmlndXJlZCBiYXNlLCBlLmcuIF9wYXRoKCkgPT4gXCJhaS9yZXBvcnRzXCIsXG4gIC8vIF9wYXRoKGAke2lkfS9wYWdlc2ApID0+IFwiYWkvcmVwb3J0cy8xMjMvcGFnZXNcIi5cbiAgcHJpdmF0ZSBfcGF0aChzdWZmaXggPSAnJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1ZmZpeCA/IGAke3RoaXMuYmFzZVBhdGh9LyR7c3VmZml4fWAgOiB0aGlzLmJhc2VQYXRoO1xuICB9XG5cbiAgcHVibGljIHJlcG9ydHMocXVlcnk6IGFueSA9IHt9LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aCgpLFxuICAgICAgcXVlcnksXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydHMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlKG5hbWU6IHN0cmluZywgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKCksXG4gICAgICB7IG5hbWUgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlbmFtZShyZXBvcnRJZDogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfWApLFxuICAgICAgeyBuYW1lIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlcG9ydCBzZXR0aW5nczogYW55IHN1YnNldCBvZiB7IG5hbWUsIHBhZ2VTaXplLCBwYWdlT3JpZW50YXRpb24sIGxheW91dCxcbiAgLy8gc3R5bGVzIH0g4oCUIHN0eWxlcyBjYXJyeSB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoaWMgY29uZmlnIChlLmcuIGhlYWRpbmcgc2l6ZSkuXG4gIHB1YmxpYyB1cGRhdGUocmVwb3J0SWQ6IG51bWJlciwgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBcHBlbmQgYSBibGFuayBwYWdlIHRvIHRoZSByZXBvcnQ7IHJlc29sdmVzIHRvIHRoZSBuZXcgcGFnZS5cbiAgcHVibGljIGFkZFBhZ2UocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9wYWdlc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBDb21wb25lbnQgc2V0dGluZ3M6IGFueSBzdWJzZXQgb2YgeyB0aXRsZSwgcGFkZGluZyB9IOKAlCB0aGUgaHVtYW4tZmFjaW5nXG4gIC8vIGRpYWxvZyBlZGl0czsgZ2VvbWV0cnkgKHgveS93L2gvZmxvd1dpZHRoKSBpcyBwZXJzaXN0ZWQgdmlhIHNhdmVQb3NpdGlvbnNcbiAgLy8gZnJvbSB0aGUgY2FudmFzIGluc3RlYWQuXG4gIHB1YmxpYyB1cGRhdGVDb21wb25lbnQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L3NldHRpbmdzYCksXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29tcG9uZW50JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShyZXBvcnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZGVsZXRlKFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgYXNzZW1ibGVkIHN0cnVjdHVyZTogcGFnZXMg4oaSIGNvbXBvbmVudHMgKCsgdGhlaXIgZmlsdGVycykgYW5kIHRoZVxuICAvLyByZXBvcnQncyBmaWx0ZXIgZ3JvdXBzLlxuICBwdWJsaWMgZ2V0KHJlcG9ydElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBlcnNpc3QgZ2VvbWV0cnkgZm9yIHRoZSBtb3ZlZCBjb21wb25lbnRzIG9ubHkg4oCUIGFueSBzdWJzZXQgb2ZcbiAgLy8geyB4LCB5LCB3LCBoIH0gKGluY2hlcyksIGZsb3dXaWR0aCAocGVyY2VudCkgYW5kIG9yZGVyIChmbG93IHBvc2l0aW9uKS5cbiAgcHVibGljIHNhdmVQb3NpdGlvbnMoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBwb3NpdGlvbnM6ICh7IGNvbXBvbmVudElkOiBudW1iZXIgfSAmIFBhcnRpYWw8eyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXI7IGZsb3dXaWR0aDogbnVtYmVyOyBvcmRlcjogbnVtYmVyIH0+KVtdLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvcG9zaXRpb25zYCksXG4gICAgICB7IHBvc2l0aW9ucyB9LFxuICAgICAge1xuICAgICAgICBrZXk6IG51bGwsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIE9uZSBjb21wb25lbnQncyBkYXRhLiBUaGUgYm9keSBjYXJyaWVzIGV2ZXJ5dGhpbmcgc2Vzc2lvbi1zY29wZWQ6IHRoZVxuICAvLyByZXNvbHZlZCBmaWx0ZXIgdmFsdWVzIGFuZCB0aGUgY29tcG9uZW50J3Mgb3duIGludGVyYWN0aW9uIHN0YXRlLlxuICBwdWJsaWMgY29tcG9uZW50RGF0YShcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgZmlsdGVyczogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdID0gW10sXG4gICAgc3RhdGU6IENvbXBvbmVudERhdGFTdGF0ZSA9IHt9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2RhdGFgKSxcbiAgICAgIHsgZmlsdGVycywgc3RhdGUgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZGF0YScsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIEV4cG9ydHMgdGhlIGNvbXBvbmVudCdzIEZVTEwgZmlsdGVyZWQgZGF0YXNldCB0byBDU1Ygc2VydmVyLXNpZGUgYW5kXG4gIC8vIHJlc29sdmVzIHRvIGEgcHJlc2lnbmVkIGRvd25sb2FkIFVSTC4gVGhlIGJhY2tlbmQgc3RyZWFtcyBwZXJjZW50YWdlXG4gIC8vIHByb2dyZXNzIHdoaWxlIGNodW5raW5nOyBjb25zdW1lIHRocm91Z2ggRnNQcm9jZXNzLmRvd25sb2FkLlxuICBwdWJsaWMgZXhwb3J0Q29tcG9uZW50KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBmaWx0ZXJzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10gPSBbXSxcbiAgICBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0ge30sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZXhwb3J0YCksXG4gICAgICB7IGZpbHRlcnMsIHN0YXRlIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3VybCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIERpc3RpbmN0IG9wdGlvbnMgZm9yIGEgc2VsZWN0IGZpbHRlciAoZHJpdmVzIG11bHRpc2VsZWN0IGNvbnRyb2xzKS5cbiAgcHVibGljIGZpbHRlck9wdGlvbnMocmVwb3J0SWQ6IG51bWJlciwgZmlsdGVySWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH0vb3B0aW9uc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ29wdGlvbnMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgY29tcG9uZW50IFNRTCdzIGZpbHRlcmFibGUgb3V0cHV0IGNvbHVtbnMg4oCUIGRyaXZlcyB0aGUgY29sdW1uIHBpY2tlclxuICAvLyBpbiB0aGUgZmlsdGVyIFVJIHNvIGEgY29sdW1uIG5hbWUgaXMgbmV2ZXIgdHlwZWQgYnkgaGFuZC5cbiAgcHVibGljIGNvbXBvbmVudENvbHVtbnMocmVwb3J0SWQ6IG51bWJlciwgY29tcG9uZW50SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vY29sdW1uc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2NvbHVtbnMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBNYWtlIG9uZSBjb2x1bW4gZmlsdGVyYWJsZS4gYGxldmVsYCAoY29tcG9uZW50IHwgcmVwb3J0KSBwbGFjZXMgYSBuZXdcbiAgLy8gZ3JvdXA7IGBncm91cElkYCBpbnN0ZWFkIGxpbmtzIGludG8gYW4gZXhpc3RpbmcgZ3JvdXAuIEEgc2VsZWN0IGZpbHRlcidzXG4gIC8vIG9wdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50IFNRTCB3aGVuIG9wdGlvbnNTcWwgaXMgb21pdHRlZC5cbiAgcHVibGljIGFkZEZpbHRlcihcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgZmlsdGVyOiB7IGZpbHRlckNvbHVtbjogc3RyaW5nOyB0eXBlPzogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgbGV2ZWw/OiBzdHJpbmc7IG9wdGlvbnNTcWw/OiBzdHJpbmc7IGdyb3VwSWQ/OiBudW1iZXIgfSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9maWx0ZXJzYCksXG4gICAgICBmaWx0ZXIsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBhIGZpbHRlciDigJQgYW55IHN1YnNldCBvZiB7IGxhYmVsLCBvcHRpb25zU3FsLCBlbmFibGVkIH0uXG4gIHB1YmxpYyB1cGRhdGVGaWx0ZXIoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBmaWx0ZXJJZDogbnVtYmVyLFxuICAgIGNoYW5nZXM6IHsgbGFiZWw/OiBzdHJpbmc7IG9wdGlvbnNTcWw/OiBzdHJpbmc7IGVuYWJsZWQ/OiBib29sZWFuIH0sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vZmlsdGVycy8ke2ZpbHRlcklkfWApLFxuICAgICAgY2hhbmdlcyxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVtb3ZlIGEgZmlsdGVyIChpdHMgZ3JvdXAgZ29lcyB0b28gd2hlbiBub3RoaW5nIGVsc2UgdXNlcyBpdCkuXG4gIHB1YmxpYyBkZWxldGVGaWx0ZXIocmVwb3J0SWQ6IG51bWJlciwgZmlsdGVySWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdmaWx0ZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBTZXQgd2hlcmUgYSBmaWx0ZXIgZ3JvdXAgcmVuZGVyczogJ2NvbXBvbmVudCcsICdyZXBvcnQnIG9yICdib3RoJy5cbiAgcHVibGljIHNldEZpbHRlckdyb3VwTGV2ZWwocmVwb3J0SWQ6IG51bWJlciwgZ3JvdXBJZDogbnVtYmVyLCBsZXZlbDogUmVwb3J0RmlsdGVyTGV2ZWwsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJncm91cHMvJHtncm91cElkfWApLFxuICAgICAgeyBsZXZlbCB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdmaWx0ZXJHcm91cCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGF0YS9yZXBvcnQuZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsS0FBSyxFQUFpQixNQUFNLGlCQUFpQixDQUFDOztBQVl2RCwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLHFGQUFxRjtBQUlyRixNQUFNLE9BQU8sVUFBVTtJQUNiLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0IsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUN2RSxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBRTVCLGtGQUFrRjtJQUNsRixrREFBa0Q7SUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDL0QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFhLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFDWixLQUFLLEVBQ0w7WUFDRSxHQUFHLEVBQUUsU0FBUztZQUNkLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBWSxFQUFFLFNBQXdCLEVBQUU7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUNaLEVBQUUsSUFBSSxFQUFFLEVBQ1I7WUFDRSxHQUFHLEVBQUUsUUFBUTtZQUNiLEdBQUcsTUFBTTtTQUNWLENB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QUFLLENBQUMsR0FBRyxRQUFRLGlCQUFpQixPQUFPLEVBQUUsQ0FBQyxFQUNqRCxPQUFPLEVBQ1A7WUFDRSxHQUFHLEVBQUUsYUFBYTtZQUNsQixHQUFHLE1BQU07U0FDVixDQUNGLENBQUM7SUFDSixDQUFDO3dHQXJRVSxVQUFVOzRHQUFWLFVBQVUsY0FGVCxNQUFNOzs0RkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0FwaSwgUmVxdWVzdENvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL2FwaSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YVN0YXRlLFxuICBGaWx0ZXJHcm91cERlZmF1bHQsXG4gIFJlcG9ydEZpbHRlckxldmVsLFxuICBSZXNvbHZlZEZpbHRlclZhbHVlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuXG5cbi8vIEFQSSBnYXRld2F5IGZvciB0aGUgUmVwb3J0cyBtb2R1bGUuIEV2ZXJ5IGVuZHBvaW50IGhhbmdzIG9mZiBbYmFzZVBhdGhdLFxuLy8gd2hpY2ggZGVmYXVsdHMgdG8gXCJyZXBvcnRzXCIgKHRoZSBmcmFtZXdvcmsgcmVwb3J0cyBiYWNrZW5kIGF0IC9hcGkvcmVwb3J0cylcbi8vIGFuZCBjYW4gYmUgcmVwb2ludGVkIGJ5IHRoZSBob3N0IHNvIHRoZSBwYWNrYWdlIHN0YXlzIHNlbGYtY29udGFpbmVkIGFuZCBwb3J0YWJsZS5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnREYXRhPFQgPSBhbnk+IHtcbiAgcHJpdmF0ZSBfYXBpID0gaW5qZWN0KEZzQXBpKTtcblxuICAvLyBUaGUgQVBJIHJvb3QgZm9yIGV2ZXJ5IHJlcG9ydHMgZW5kcG9pbnQuIERlZmF1bHRzIHRvIHRoZSBmcmFtZXdvcmsgcmVwb3J0c1xuICAvLyBjb250ZXh0OyBzZXQgaXQgb25jZSAoZS5nLiBmcm9tIHRoZSBob3N0J3MgcmVwb3J0IHBhZ2UpIHRvIG1vdW50IGVsc2V3aGVyZS5cbiAgcHVibGljIGJhc2VQYXRoID0gJ3JlcG9ydHMnO1xuXG4gIC8vIEJ1aWxkIGFuIGVuZHBvaW50IHBhdGggdW5kZXIgdGhlIGNvbmZpZ3VyZWQgYmFzZSwgZS5nLiBfcGF0aCgpID0+IFwiYWkvcmVwb3J0c1wiLFxuICAvLyBfcGF0aChgJHtpZH0vcGFnZXNgKSA9PiBcImFpL3JlcG9ydHMvMTIzL3BhZ2VzXCIuXG4gIHByaXZhdGUgX3BhdGgoc3VmZml4ID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdWZmaXggPyBgJHt0aGlzLmJhc2VQYXRofS8ke3N1ZmZpeH1gIDogdGhpcy5iYXNlUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyByZXBvcnRzKHF1ZXJ5OiBhbnkgPSB7fSwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoKSxcbiAgICAgIHF1ZXJ5LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnRzJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZShuYW1lOiBzdHJpbmcsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aCgpLFxuICAgICAgeyBuYW1lIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZW5hbWUocmVwb3J0SWQ6IG51bWJlciwgbmFtZTogc3RyaW5nLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHsgbmFtZSB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBSZXBvcnQgc2V0dGluZ3M6IGFueSBzdWJzZXQgb2YgeyBuYW1lLCBwYWdlU2l6ZSwgcGFnZU9yaWVudGF0aW9uLCBsYXlvdXQsXG4gIC8vIHN0eWxlcyB9IOKAlCBzdHlsZXMgY2FycnkgdGhlIHJlcG9ydCdzIHR5cG9ncmFwaGljIGNvbmZpZyAoZS5nLiBoZWFkaW5nIHNpemUpLlxuICBwdWJsaWMgdXBkYXRlKHJlcG9ydElkOiBudW1iZXIsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gQXBwZW5kIGEgYmxhbmsgcGFnZSB0byB0aGUgcmVwb3J0OyByZXNvbHZlcyB0byB0aGUgbmV3IHBhZ2UuXG4gIHB1YmxpYyBhZGRQYWdlKHJlcG9ydElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vcGFnZXNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdwYWdlJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gQ29tcG9uZW50IHNldHRpbmdzOiBhbnkgc3Vic2V0IG9mIHsgdGl0bGUsIHBhZGRpbmcgfSDigJQgdGhlIGh1bWFuLWZhY2luZ1xuICAvLyBkaWFsb2cgZWRpdHM7IGdlb21ldHJ5ICh4L3kvdy9oL2Zsb3dXaWR0aCkgaXMgcGVyc2lzdGVkIHZpYSBzYXZlUG9zaXRpb25zXG4gIC8vIGZyb20gdGhlIGNhbnZhcyBpbnN0ZWFkLlxuICBwdWJsaWMgdXBkYXRlQ29tcG9uZW50KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9zZXR0aW5nc2ApLFxuICAgICAgc2V0dGluZ3MsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2NvbXBvbmVudCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGFzc2VtYmxlZCBzdHJ1Y3R1cmU6IHBhZ2VzIOKGkiBjb21wb25lbnRzICgrIHRoZWlyIGZpbHRlcnMpIGFuZCB0aGVcbiAgLy8gcmVwb3J0J3MgZmlsdGVyIGdyb3Vwcy5cbiAgcHVibGljIGdldChyZXBvcnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBQZXJzaXN0IGdlb21ldHJ5IGZvciB0aGUgbW92ZWQgY29tcG9uZW50cyBvbmx5IOKAlCBhbnkgc3Vic2V0IG9mXG4gIC8vIHsgeCwgeSwgdywgaCB9IChpbmNoZXMpLCBmbG93V2lkdGggKHBlcmNlbnQpIGFuZCBvcmRlciAoZmxvdyBwb3NpdGlvbikuXG4gIHB1YmxpYyBzYXZlUG9zaXRpb25zKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgcG9zaXRpb25zOiAoeyBjb21wb25lbnRJZDogbnVtYmVyIH0gJiBQYXJ0aWFsPHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyOyBmbG93V2lkdGg6IG51bWJlcjsgb3JkZXI6IG51bWJlciB9PilbXSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzL3Bvc2l0aW9uc2ApLFxuICAgICAgeyBwb3NpdGlvbnMgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBPbmUgY29tcG9uZW50J3MgZGF0YS4gVGhlIGJvZHkgY2FycmllcyBldmVyeXRoaW5nIHNlc3Npb24tc2NvcGVkOiB0aGVcbiAgLy8gcmVzb2x2ZWQgZmlsdGVyIHZhbHVlcyBhbmQgdGhlIGNvbXBvbmVudCdzIG93biBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAgcHVibGljIGNvbXBvbmVudERhdGEoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSA9IFtdLFxuICAgIHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUgPSB7fSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9kYXRhYCksXG4gICAgICB7IGZpbHRlcnMsIHN0YXRlIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2RhdGEnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBFeHBvcnRzIHRoZSBjb21wb25lbnQncyBGVUxMIGZpbHRlcmVkIGRhdGFzZXQgdG8gQ1NWIHNlcnZlci1zaWRlIGFuZFxuICAvLyByZXNvbHZlcyB0byBhIHByZXNpZ25lZCBkb3dubG9hZCBVUkwuIFRoZSBiYWNrZW5kIHN0cmVhbXMgcGVyY2VudGFnZVxuICAvLyBwcm9ncmVzcyB3aGlsZSBjaHVua2luZzsgY29uc3VtZSB0aHJvdWdoIEZzUHJvY2Vzcy5kb3dubG9hZC5cbiAgcHVibGljIGV4cG9ydENvbXBvbmVudChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgZmlsdGVyczogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdID0gW10sXG4gICAgc3RhdGU6IENvbXBvbmVudERhdGFTdGF0ZSA9IHt9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2V4cG9ydGApLFxuICAgICAgeyBmaWx0ZXJzLCBzdGF0ZSB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd1cmwnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBEaXN0aW5jdCBvcHRpb25zIGZvciBhIHNlbGVjdCBmaWx0ZXIgKGRyaXZlcyBtdWx0aXNlbGVjdCBjb250cm9scykuXG4gIHB1YmxpYyBmaWx0ZXJPcHRpb25zKHJlcG9ydElkOiBudW1iZXIsIGZpbHRlcklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJzLyR7ZmlsdGVySWR9L29wdGlvbnNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdvcHRpb25zJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGNvbXBvbmVudCBTUUwncyBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW5zIOKAlCBkcml2ZXMgdGhlIGNvbHVtbiBwaWNrZXJcbiAgLy8gaW4gdGhlIGZpbHRlciBVSSBzbyBhIGNvbHVtbiBuYW1lIGlzIG5ldmVyIHR5cGVkIGJ5IGhhbmQuXG4gIHB1YmxpYyBjb21wb25lbnRDb2x1bW5zKHJlcG9ydElkOiBudW1iZXIsIGNvbXBvbmVudElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2NvbHVtbnNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdjb2x1bW5zJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gTWFrZSBvbmUgY29sdW1uIGZpbHRlcmFibGUuIGBsZXZlbGAgKGNvbXBvbmVudCB8IHJlcG9ydCkgcGxhY2VzIGEgbmV3XG4gIC8vIGdyb3VwOyBgZ3JvdXBJZGAgaW5zdGVhZCBsaW5rcyBpbnRvIGFuIGV4aXN0aW5nIGdyb3VwLiBBIHNlbGVjdCBmaWx0ZXInc1xuICAvLyBvcHRpb25zIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudCBTUUwgd2hlbiBvcHRpb25zU3FsIGlzIG9taXR0ZWQuXG4gIHB1YmxpYyBhZGRGaWx0ZXIoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcjogeyBmaWx0ZXJDb2x1bW46IHN0cmluZzsgdHlwZT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IGxldmVsPzogc3RyaW5nOyBvcHRpb25zU3FsPzogc3RyaW5nOyBncm91cElkPzogbnVtYmVyIH0sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZmlsdGVyc2ApLFxuICAgICAgZmlsdGVyLFxuICAgICAge1xuICAgICAgICBrZXk6ICdmaWx0ZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBVcGRhdGUgYSBmaWx0ZXIg4oCUIGFueSBzdWJzZXQgb2YgeyBsYWJlbCwgb3B0aW9uc1NxbCwgZW5hYmxlZCB9LlxuICBwdWJsaWMgdXBkYXRlRmlsdGVyKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZmlsdGVySWQ6IG51bWJlcixcbiAgICBjaGFuZ2VzOiB7IGxhYmVsPzogc3RyaW5nOyBvcHRpb25zU3FsPzogc3RyaW5nOyBlbmFibGVkPzogYm9vbGVhbiB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH1gKSxcbiAgICAgIGNoYW5nZXMsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBhIGZpbHRlciAoaXRzIGdyb3VwIGdvZXMgdG9vIHdoZW4gbm90aGluZyBlbHNlIHVzZXMgaXQpLlxuICBwdWJsaWMgZGVsZXRlRmlsdGVyKHJlcG9ydElkOiBudW1iZXIsIGZpbHRlcklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJzLyR7ZmlsdGVySWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVXBkYXRlIGEgZmlsdGVyIGdyb3VwIOKAlCBpdHMgZXhwb3N1cmUgbGV2ZWwgKCdjb21wb25lbnQnIHwgJ3JlcG9ydCcgfCAnYm90aCcpXG4gIC8vIGFuZC9vciBpdHMgZGVmYXVsdCB2YWx1ZSAodGhlIHZhbHVlIHNlZWRpbmcgdGhlIHJlcG9ydCBiYXIgb24gb3BlbikuIFNlbmRcbiAgLy8gYGRlZmF1bHQ6IG51bGxgIChvciBhbiBlbXB0eSBkZWZhdWx0KSB0byBjbGVhciBpdC4gT25seSB0aGUga2V5cyBwcm92aWRlZFxuICAvLyBhcmUgY2hhbmdlZC5cbiAgcHVibGljIHVwZGF0ZUZpbHRlckdyb3VwKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZ3JvdXBJZDogbnVtYmVyLFxuICAgIGNoYW5nZXM6IHsgbGV2ZWw/OiBSZXBvcnRGaWx0ZXJMZXZlbDsgZGVmYXVsdD86IEZpbHRlckdyb3VwRGVmYXVsdCB8IG51bGwgfSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJncm91cHMvJHtncm91cElkfWApLFxuICAgICAgY2hhbmdlcyxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyR3JvdXAnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -116,7 +116,7 @@ export class ComponentSettingsComponent {
|
|
|
116
116
|
? 'both'
|
|
117
117
|
: (row.report ? 'report' : 'component');
|
|
118
118
|
if (existing) {
|
|
119
|
-
this._run(this._reportData.
|
|
119
|
+
this._run(this._reportData.updateFilterGroup(this.report.id, existing.filterGroupId, { level }));
|
|
120
120
|
}
|
|
121
121
|
else {
|
|
122
122
|
this._run(this._reportData.addFilter(this.report.id, this.component.id, {
|
|
@@ -196,7 +196,7 @@ export class ComponentSettingsComponent {
|
|
|
196
196
|
.replace(/\b\w/g, (character) => character.toUpperCase());
|
|
197
197
|
}
|
|
198
198
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ComponentSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
199
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ComponentSettingsComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n {{ component.title || 'Component' }}\n </h1>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"Settings\"\n name=\"settings\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Title\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"title\"\n name=\"title\">\n </mat-form-field>\n <div class=\"subheading-2\">\n Padding\n </div>\n <div class=\"geometry-row\">\n <mat-form-field>\n <mat-label>\n Top\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingTop\"\n name=\"paddingTop\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Right\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingRight\"\n name=\"paddingRight\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Bottom\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingBottom\"\n name=\"paddingBottom\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Left\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingLeft\"\n name=\"paddingLeft\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n </div>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Filters\"\n name=\"filters\">\n <div class=\"tab-body\">\n @if (columnsError) {\n <div class=\"filters-empty error\">\n {{ columnsError }}\n </div>\n } @else if (rows.length) {\n <!-- Every filterable column. Toggle where its control shows: in\n the report bar, on this component, both, or neither. The\n interface (date range vs value picker) follows the data. -->\n <div class=\"filter-list\">\n <div class=\"filter-head\">\n <span class=\"filter-head-spacer\"></span>\n <span class=\"small\">\n Report bar\n </span>\n <span class=\"small\">\n This component\n </span>\n </div>\n @for (row of rows; track row.column) {\n <div class=\"filter-card\">\n <div class=\"filter-card-main\">\n <div class=\"filter-card-title\">\n {{ row.label }}\n </div>\n <div class=\"filter-card-meta\">\n {{ typeLabel(row.type) }}\n </div>\n </div>\n <mat-slide-toggle\n class=\"filter-toggle\"\n [ngModel]=\"row.report\"\n (ngModelChange)=\"setExposure(row, 'report', $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n matTooltip=\"Show in the report bar\">\n </mat-slide-toggle>\n <mat-slide-toggle\n class=\"filter-toggle\"\n [ngModel]=\"row.component\"\n (ngModelChange)=\"setExposure(row, 'component', $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n matTooltip=\"Show on this component\">\n </mat-slide-toggle>\n </div>\n }\n </div>\n } @else {\n <div class=\"filters-empty\">\n This component has no filterable columns yet \u2014 give it some SQL first.\n </div>\n }\n </div>\n </mat-tab>\n <mat-tab\n label=\"SQL\"\n name=\"sql\">\n <div class=\"tab-body\">\n <pre class=\"code-block\">\n {{ component.sql }}\n </pre>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Config\"\n name=\"config\">\n <div class=\"tab-body\">\n <pre class=\"code-block\">\n {{ configJson }}\n </pre>\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <fs-form-dialog-actions\n [save]=\"selectedTab === 'settings'\"\n [done]=\"selectedTab !== 'settings'\">\n </fs-form-dialog-actions>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["mat-form-field{width:100%}.tab-body{padding-top:16px}.geometry-row{display:flex;gap:8px}.geometry-row mat-form-field{flex:1}.filter-list{display:flex;flex-direction:column;gap:8px}.filter-head{display:flex;align-items:center;gap:8px;padding:0 10px 2px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:#9aa5b1}.filter-head .filter-head-spacer{flex:1}.filter-head .filter-head-toggle{width:110px;flex:0 0 auto;text-align:center}.filter-card{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid #e4e7eb;border-radius:8px;background:#fff}.filter-card .filter-card-main{flex:1;min-width:0}.filter-card .filter-card-main .filter-card-title{font-weight:600;font-size:13px;color:#1f2933;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filter-card .filter-card-main .filter-card-meta{font-size:12px;color:#7b8794}.filter-card .filter-card-main .filter-card-meta code{background:#f0f4f8;border-radius:3px;padding:0 4px}.filter-card .filter-toggle{width:110px;flex:0 0 auto;display:flex;justify-content:center}.filters-empty{font-size:13px;color:#7b8794;padding:8px 0 4px}.filters-empty.error{color:#e15759}.code-block{margin:0;padding:10px 12px;background:#1f2933;color:#e4e7eb;border-radius:6px;font-family:JetBrains Mono,Consolas,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow:auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "component", type: i2.FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: ["save", "create", "close", "done", "closeData", "name"] }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "ngmodule", type: FsLabelModule }, { kind: "ngmodule", type: FsTabsModule }, { kind: "directive", type: i4.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { kind: "directive", type: i4.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: 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: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
199
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ComponentSettingsComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n {{ component.title || 'Component' }}\n </h1>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"Settings\"\n name=\"settings\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Title\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"title\"\n name=\"title\">\n </mat-form-field>\n <div class=\"subheading-2\">\n Padding\n </div>\n <div class=\"geometry-row\">\n <mat-form-field>\n <mat-label>\n Top\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingTop\"\n name=\"paddingTop\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Right\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingRight\"\n name=\"paddingRight\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Bottom\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingBottom\"\n name=\"paddingBottom\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Left\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingLeft\"\n name=\"paddingLeft\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n </div>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Filters\"\n name=\"filters\">\n <div class=\"tab-body\">\n @if (columnsError) {\n <div class=\"filters-empty error\">\n {{ columnsError }}\n </div>\n } @else if (rows.length) {\n <!-- Every filterable column. Toggle where its control shows: in\n the report bar, on this component, both, or neither. The\n interface (date range vs value picker) follows the data. -->\n <table class=\"filter-table\">\n <thead>\n <tr>\n <th class=\"filter-col-name\">\n Filter\n </th>\n <th class=\"filter-col-type\">\n Type\n </th>\n <th class=\"filter-col-toggle\">\n Report bar\n </th>\n <th class=\"filter-col-toggle\">\n This component\n </th>\n </tr>\n </thead>\n <tbody>\n @for (row of rows; track row.column) {\n <tr>\n <td class=\"filter-col-name\">\n {{ row.label }}\n </td>\n <td class=\"filter-col-type\">\n {{ typeLabel(row.type) }}\n </td>\n <td class=\"filter-col-toggle\">\n <mat-slide-toggle\n [ngModel]=\"row.report\"\n (ngModelChange)=\"setExposure(row, 'report', $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n matTooltip=\"Show in the report bar\">\n </mat-slide-toggle>\n </td>\n <td class=\"filter-col-toggle\">\n <mat-slide-toggle\n [ngModel]=\"row.component\"\n (ngModelChange)=\"setExposure(row, 'component', $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n matTooltip=\"Show on this component\">\n </mat-slide-toggle>\n </td>\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <div class=\"filters-empty\">\n This component has no filterable columns yet \u2014 give it some SQL first.\n </div>\n }\n </div>\n </mat-tab>\n <mat-tab\n label=\"SQL\"\n name=\"sql\">\n <div class=\"tab-body\">\n <pre class=\"code-block\">\n {{ component.sql }}\n </pre>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Config\"\n name=\"config\">\n <div class=\"tab-body\">\n <pre class=\"code-block\">\n {{ configJson }}\n </pre>\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <fs-form-dialog-actions\n [save]=\"selectedTab === 'settings'\"\n [done]=\"selectedTab !== 'settings'\">\n </fs-form-dialog-actions>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["mat-form-field{width:100%}.tab-body{padding-top:16px}.geometry-row{display:flex;gap:8px}.geometry-row mat-form-field{flex:1}.filter-table{border-spacing:0;width:100%;border-collapse:collapse}.filter-table thead th{color:#8f8f8f;font-weight:400;font-size:85%;text-align:left;padding:8px 16px}.filter-table tbody tr{clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}.filter-table tbody td{border:none;background-color:#fafafa;padding:8px 16px;vertical-align:middle;text-align:left}.filter-table .filter-col-name{font-weight:600;color:#1f2933}.filter-table .filter-col-type{color:#7b8794;width:120px}.filter-table .filter-col-toggle,.filter-table th.filter-col-toggle{width:130px;text-align:center}.filters-empty{font-size:13px;color:#7b8794;padding:8px 0 4px}.filters-empty.error{color:#e15759}.code-block{margin:0;padding:10px 12px;background:#1f2933;color:#e4e7eb;border-radius:6px;font-family:JetBrains Mono,Consolas,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow:auto}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "component", type: i2.FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: ["save", "create", "close", "done", "closeData", "name"] }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "ngmodule", type: FsLabelModule }, { kind: "ngmodule", type: FsTabsModule }, { kind: "directive", type: i4.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { kind: "directive", type: i4.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: 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: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
200
200
|
}
|
|
201
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ComponentSettingsComponent, decorators: [{
|
|
202
202
|
type: Component,
|
|
@@ -216,6 +216,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
216
216
|
MatInput,
|
|
217
217
|
MatSlideToggle,
|
|
218
218
|
MatTooltip,
|
|
219
|
-
], template: "<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n {{ component.title || 'Component' }}\n </h1>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"Settings\"\n name=\"settings\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Title\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"title\"\n name=\"title\">\n </mat-form-field>\n <div class=\"subheading-2\">\n Padding\n </div>\n <div class=\"geometry-row\">\n <mat-form-field>\n <mat-label>\n Top\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingTop\"\n name=\"paddingTop\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Right\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingRight\"\n name=\"paddingRight\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Bottom\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingBottom\"\n name=\"paddingBottom\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Left\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingLeft\"\n name=\"paddingLeft\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n </div>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Filters\"\n name=\"filters\">\n <div class=\"tab-body\">\n @if (columnsError) {\n <div class=\"filters-empty error\">\n {{ columnsError }}\n </div>\n } @else if (rows.length) {\n <!-- Every filterable column. Toggle where its control shows: in\n the report bar, on this component, both, or neither. The\n interface (date range vs value picker) follows the data. -->\n <
|
|
219
|
+
], template: "<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n {{ component.title || 'Component' }}\n </h1>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"Settings\"\n name=\"settings\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Title\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"title\"\n name=\"title\">\n </mat-form-field>\n <div class=\"subheading-2\">\n Padding\n </div>\n <div class=\"geometry-row\">\n <mat-form-field>\n <mat-label>\n Top\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingTop\"\n name=\"paddingTop\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Right\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingRight\"\n name=\"paddingRight\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Bottom\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingBottom\"\n name=\"paddingBottom\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n <mat-form-field>\n <mat-label>\n Left\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.05\"\n min=\"0\"\n [(ngModel)]=\"paddingLeft\"\n name=\"paddingLeft\">\n <span matTextSuffix>\n in\n </span>\n </mat-form-field>\n </div>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Filters\"\n name=\"filters\">\n <div class=\"tab-body\">\n @if (columnsError) {\n <div class=\"filters-empty error\">\n {{ columnsError }}\n </div>\n } @else if (rows.length) {\n <!-- Every filterable column. Toggle where its control shows: in\n the report bar, on this component, both, or neither. The\n interface (date range vs value picker) follows the data. -->\n <table class=\"filter-table\">\n <thead>\n <tr>\n <th class=\"filter-col-name\">\n Filter\n </th>\n <th class=\"filter-col-type\">\n Type\n </th>\n <th class=\"filter-col-toggle\">\n Report bar\n </th>\n <th class=\"filter-col-toggle\">\n This component\n </th>\n </tr>\n </thead>\n <tbody>\n @for (row of rows; track row.column) {\n <tr>\n <td class=\"filter-col-name\">\n {{ row.label }}\n </td>\n <td class=\"filter-col-type\">\n {{ typeLabel(row.type) }}\n </td>\n <td class=\"filter-col-toggle\">\n <mat-slide-toggle\n [ngModel]=\"row.report\"\n (ngModelChange)=\"setExposure(row, 'report', $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n matTooltip=\"Show in the report bar\">\n </mat-slide-toggle>\n </td>\n <td class=\"filter-col-toggle\">\n <mat-slide-toggle\n [ngModel]=\"row.component\"\n (ngModelChange)=\"setExposure(row, 'component', $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n matTooltip=\"Show on this component\">\n </mat-slide-toggle>\n </td>\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <div class=\"filters-empty\">\n This component has no filterable columns yet \u2014 give it some SQL first.\n </div>\n }\n </div>\n </mat-tab>\n <mat-tab\n label=\"SQL\"\n name=\"sql\">\n <div class=\"tab-body\">\n <pre class=\"code-block\">\n {{ component.sql }}\n </pre>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Config\"\n name=\"config\">\n <div class=\"tab-body\">\n <pre class=\"code-block\">\n {{ configJson }}\n </pre>\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <fs-form-dialog-actions\n [save]=\"selectedTab === 'settings'\"\n [done]=\"selectedTab !== 'settings'\">\n </fs-form-dialog-actions>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["mat-form-field{width:100%}.tab-body{padding-top:16px}.geometry-row{display:flex;gap:8px}.geometry-row mat-form-field{flex:1}.filter-table{border-spacing:0;width:100%;border-collapse:collapse}.filter-table thead th{color:#8f8f8f;font-weight:400;font-size:85%;text-align:left;padding:8px 16px}.filter-table tbody tr{clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}.filter-table tbody td{border:none;background-color:#fafafa;padding:8px 16px;vertical-align:middle;text-align:left}.filter-table .filter-col-name{font-weight:600;color:#1f2933}.filter-table .filter-col-type{color:#7b8794;width:120px}.filter-table .filter-col-toggle,.filter-table th.filter-col-toggle{width:130px;text-align:center}.filters-empty{font-size:13px;color:#7b8794;padding:8px 0 4px}.filters-empty.error{color:#e15759}.code-block{margin:0;padding:10px 12px;background:#1f2933;color:#e4e7eb;border-radius:6px;font-family:JetBrains Mono,Consolas,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow:auto}\n"] }]
|
|
220
220
|
}] });
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9kaWFsb2dzL2NvbXBvbmVudC1zZXR0aW5ncy9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvY29tcG9uZW50LXNldHRpbmdzL2NvbXBvbmVudC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFB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QUNkLGFBQWEsOEJBQ2IsWUFBWSxtYUFDWixhQUFhLDZvQkFDYixjQUFjLCtIQUNkLGdCQUFnQix5R0FDaEIsZ0JBQWdCLDRIQUNoQixZQUFZLDRMQUNaLFFBQVEsc0RBQ1IsU0FBUyxxSEFDVCxRQUFRLGlVQUNSLGNBQWMsMFVBQ2QsVUFBVTs7NEZBR0QsMEJBQTBCO2tCQXZCdEMsU0FBUztzQ0FHUyx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxhQUFhO3dCQUNiLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxRQUFRO3dCQUNSLGNBQWM7d0JBQ2QsVUFBVTtxQkFDWCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdExhYmVsLCBNYXRTdWZmaXggfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBGc0RpYWxvZ01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RpYWxvZyc7XG5pbXBvcnQgeyBGc0Zvcm1Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcbmltcG9ydCB7IEZzTGFiZWxNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9sYWJlbCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzVGFic01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3RhYnMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7XG4gIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGaWx0ZXIsXG4gIFJlcG9ydEZpbHRlckdyb3VwLFxuICBSZXBvcnRGaWx0ZXJMZXZlbCxcbiAgUmVwb3J0RmlsdGVyVHlwZSxcbiAgUmVwb3J0RmlsdGVyYWJsZUNvbHVtbixcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcgfSBmcm9tICcuLi8uLi9sYXlvdXQnO1xuXG5cbi8vIE9uZSByb3cgb2YgdGhlIEZpbHRlcnMgdGFiIGxpc3Rpbmc6IGEgZmlsdGVyYWJsZSBjb2x1bW4sIHRoZSBpbnRlcmZhY2Vcbi8vIGluZmVycmVkIGZyb20gaXRzIGRhdGEsIGFuZCB3aGVyZSBpdHMgZmlsdGVyIGlzIGV4cG9zZWQgKHRoZSB0d28gdG9nZ2xlcykuXG5pbnRlcmZhY2UgRmlsdGVyUm93IHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGU7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlcG9ydDogYm9vbGVhbjtcbiAgY29tcG9uZW50OiBib29sZWFuO1xufVxuXG5cbi8vIENvbXBvbmVudCBzZXR0aW5ncywgaW4gdGFiczpcbi8vICAgU2V0dGluZ3Mg4oCUIHRpdGxlIGFuZCBjb250ZW50IHBhZGRpbmcuIFBvc2l0aW9uL3NpemUgYXJlIHR1bmVkIGJ5IGRyYWdnaW5nXG4vLyAgIG9uIHRoZSBjYW52YXM7IGhlaWdodCBiZWhhdmlvdXIgZm9sbG93cyBmcm9tIHRoZSBjb21wb25lbnQgdHlwZS5cbi8vICAgRmlsdGVycyAg4oCUIE9ORSBsaXN0aW5nIG9mIGV2ZXJ5IGZpbHRlcmFibGUgY29sdW1uIG9uIHRoaXMgY29tcG9uZW50LiBFYWNoXG4vLyAgIHJvdyBjYXJyaWVzIHR3byB0b2dnbGVzOiBzaG93IGluIHRoZSByZXBvcnQgYmFyIGFuZC9vciBzaG93IG9uIHRoaXNcbi8vICAgY29tcG9uZW50IChib3RoLCBlaXRoZXIsIG9yIG5laXRoZXIpLiBUaGUgaW50ZXJmYWNlIChkYXRlIHJhbmdlIHZzIHZhbHVlXG4vLyAgIHBpY2tlcikgaXMgaW5mZXJyZWQgZnJvbSB0aGUgZGF0YSwgbmV2ZXIgY2hvc2VuLiBFYWNoIHRvZ2dsZSBwZXJzaXN0c1xuLy8gICBpbW1lZGlhdGVseSBhbmQgcmVmcmVzaGVzIHRoZSBpbi1kaWFsb2cgbGlzdC5cbi8vICAgU1FMIC8gQ29uZmlnIOKAlCByZWFkLW9ubHkgZGlhZ25vc3RpY3MuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBvbmVudC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXBvbmVudC1zZXR0aW5ncy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZzRm9ybU1vZHVsZSxcbiAgICBGc0RpYWxvZ01vZHVsZSxcbiAgICBGc0xhYmVsTW9kdWxlLFxuICAgIEZzVGFic01vZHVsZSxcbiAgICBNYXRUYWJzTW9kdWxlLFxuICAgIE1hdERpYWxvZ1RpdGxlLFxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gICAgTWF0RGlhbG9nQWN0aW9ucyxcbiAgICBNYXRGb3JtRmllbGQsXG4gICAgTWF0TGFiZWwsXG4gICAgTWF0U3VmZml4LFxuICAgIE1hdElucHV0LFxuICAgIE1hdFNsaWRlVG9nZ2xlLFxuICAgIE1hdFRvb2x0aXAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQ7XG4gIHB1YmxpYyByZXBvcnQ6IFJlcG9ydDtcblxuICBwdWJsaWMgc2VsZWN0ZWRUYWIgPSAnc2V0dGluZ3MnO1xuXG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyBwYWRkaW5nVG9wID0gREVGQVVMVF9DT01QT05FTlRfUEFERElORztcbiAgcHVibGljIHBhZGRpbmdSaWdodCA9IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkc7XG4gIHB1YmxpYyBwYWRkaW5nQm90dG9tID0gREVGQVVMVF9DT01QT05FTlRfUEFERElORztcbiAgcHVibGljIHBhZGRpbmdMZWZ0ID0gREVGQVVMVF9DT01QT05FTlRfUEFERElORztcblxuICBwdWJsaWMgY29uZmlnSnNvbiA9ICcnO1xuXG4gIC8vIC0tLS0gZmlsdGVyIG1hbmFnZW1lbnQgc3RhdGUgLS0tLVxuICAvLyBPbmUgcm93IHBlciBmaWx0ZXJhYmxlIGNvbHVtbi4gVGhlIHR3byBib29sZWFucyBkcml2ZSB0aGUgdG9nZ2xlczsgd2UgZmxpcFxuICAvLyB0aGVtIG9wdGltaXN0aWNhbGx5IG9uIGNsaWNrIChzbyB0aGUgVUkgbmV2ZXIgYmxpbmtzIHdoaWxlIHRoZSByZXF1ZXN0IGlzXG4gIC8vIGluIGZsaWdodCkgYW5kIHJlY29uY2lsZSBmcm9tIHRoZSBzZXJ2ZXIgb24gcmVsb2FkLlxuICBwdWJsaWMgcm93czogRmlsdGVyUm93W10gPSBbXTtcbiAgcHVibGljIGNvbHVtbnNFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gVGhlIHJhdyBpbnB1dHMgdGhlIHJvd3MgYXJlIGJ1aWx0IGZyb20uXG4gIHByaXZhdGUgX2ZpbHRlcmFibGVDb2x1bW5zOiBSZXBvcnRGaWx0ZXJhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfZmlsdGVyczogUmVwb3J0RmlsdGVyW10gPSBbXTtcbiAgcHJpdmF0ZSBfZ3JvdXBzQnlJZCA9IG5ldyBNYXA8bnVtYmVyLCBSZXBvcnRGaWx0ZXJHcm91cD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90eXBlTGFiZWxzOiBSZWNvcmQ8UmVwb3J0RmlsdGVyVHlwZSwgc3RyaW5nPiA9IHtcbiAgICBzZWxlY3Q6ICdQaWNrIHZhbHVlcycsXG4gICAgZGF0ZVJhbmdlOiAnRGF0ZSByYW5nZScsXG4gICAga2V5d29yZDogJ1NlYXJjaCB0ZXh0JyxcbiAgfTtcblxuICAvLyBUcnVlIG9uY2UgYW55IGZpbHRlciBtdXRhdGlvbiBoYXBwZW5lZCDigJQgdGhlIHBhcmVudCByZWxvYWRzIHRoZSByZXBvcnQgc29cbiAgLy8gdGhlIGNhbnZhcyArIHJlcG9ydCBiYXIgcmVmbGVjdCB0aGUgY2hhbmdlLlxuICBwcml2YXRlIF9jaGFuZ2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YTogeyByZXBvcnQ6IFJlcG9ydDsgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQgfSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2dSZWYgPSBpbmplY3Q8TWF0RGlhbG9nUmVmPENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50Pj4oTWF0RGlhbG9nUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVwb3J0ID0gdGhpcy5fZGF0YS5yZXBvcnQ7XG4gICAgdGhpcy5jb21wb25lbnQgPSB0aGlzLl9kYXRhLmNvbXBvbmVudDtcblxuICAgIHRoaXMudGl0bGUgPSB0aGlzLmNvbXBvbmVudC50aXRsZSA/PyAnJztcblxuICAgIGNvbnN0IHBhZGRpbmcgPSB0aGlzLmNvbXBvbmVudC5jb25maWc/LnBhZGRpbmc7XG4gICAgdGhpcy5wYWRkaW5nVG9wID0gcGFkZGluZz8udG9wID8/IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkc7XG4gICAgdGhpcy5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nPy5yaWdodCA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HO1xuICAgIHRoaXMucGFkZGluZ0JvdHRvbSA9IHBhZGRpbmc/LmJvdHRvbSA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HO1xuICAgIHRoaXMucGFkZGluZ0xlZnQgPSBwYWRkaW5nPy5sZWZ0ID8/IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkc7XG5cbiAgICB0aGlzLmNvbmZpZ0pzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBvbmVudC5jb25maWcgPz8ge30sIG51bGwsIDIpO1xuXG4gICAgdGhpcy5fc2VlZEZpbHRlcnModGhpcy5yZXBvcnQsIHRoaXMuY29tcG9uZW50LmlkKTtcbiAgICB0aGlzLl9sb2FkQ29sdW1ucygpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VkO1xuICB9XG5cbiAgLy8gSHVtYW4tZnJpZW5kbHkgbmFtZSBmb3IgdGhlIGluZmVycmVkIGludGVyZmFjZSBzaG93biBiZXNpZGUgZWFjaCBjb2x1bW4uXG4gIHB1YmxpYyB0eXBlTGFiZWwodHlwZTogUmVwb3J0RmlsdGVyVHlwZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGVMYWJlbHNbdHlwZV0gPz8gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlID0gKCkgPT4ge1xuICAgIGNvbnN0IHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgcGFkZGluZzoge1xuICAgICAgICB0b3A6IHRoaXMucGFkZGluZ1RvcCxcbiAgICAgICAgcmlnaHQ6IHRoaXMucGFkZGluZ1JpZ2h0LFxuICAgICAgICBib3R0b206IHRoaXMucGFkZGluZ0JvdHRvbSxcbiAgICAgICAgbGVmdDogdGhpcy5wYWRkaW5nTGVmdCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9yZXBvcnREYXRhLnVwZGF0ZUNvbXBvbmVudCh0aGlzLnJlcG9ydC5pZCwgdGhpcy5jb21wb25lbnQuaWQsIHNldHRpbmdzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdDb21wb25lbnQgc2F2ZWQnKTtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UodHJ1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfTtcblxuICAvLyBGbGlwIG9uZSBleHBvc3VyZSAocmVwb3J0IGJhciBvciB0aGlzIGNvbXBvbmVudCkgZm9yIGEgcm93LiBXZSB1cGRhdGUgdGhlXG4gIC8vIHJvdydzIGJvb2xlYW4gZmlyc3Qg4oCUIHNvIHRoZSB0b2dnbGUgc3RheXMgcHV0IHdpdGggbm8gYmxpbmsg4oCUIHRoZW4gcGVyc2lzdFxuICAvLyBhbmQgcmVjb25jaWxlIG9uIHJlbG9hZC4gTmVpdGhlciBvbiDihpIgbm8gZmlsdGVyIChyZW1vdmVkKTsgZWl0aGVyIG9uIOKGkiB0aGVcbiAgLy8gZmlsdGVyIGV4aXN0cyBhdCB0aGUgY29tYmluZWQgbGV2ZWwuIFRoZSBpbnRlcmZhY2UgdHlwZSBpcyBpbmZlcnJlZFxuICAvLyBzZXJ2ZXItc2lkZS5cbiAgcHVibGljIHNldEV4cG9zdXJlKHJvdzogRmlsdGVyUm93LCB0YXJnZXQ6ICdyZXBvcnQnIHwgJ2NvbXBvbmVudCcsIG9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgcm93W3RhcmdldF0gPSBvbjtcblxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fZmlsdGVycy5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5maWx0ZXJDb2x1bW4gPT09IHJvdy5jb2x1bW4pO1xuXG4gICAgaWYgKCFyb3cucmVwb3J0ICYmICFyb3cuY29tcG9uZW50KSB7XG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgdGhpcy5fcnVuKHRoaXMuX3JlcG9ydERhdGEuZGVsZXRlRmlsdGVyKHRoaXMucmVwb3J0LmlkLCBleGlzdGluZy5pZCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGV2ZWw6IFJlcG9ydEZpbHRlckxldmVsID0gcm93LnJlcG9ydCAmJiByb3cuY29tcG9uZW50XG4gICAgICA/ICdib3RoJ1xuICAgICAgOiAocm93LnJlcG9ydCA/ICdyZXBvcnQnIDogJ2NvbXBvbmVudCcpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLl9ydW4odGhpcy5fcmVwb3J0RGF0YS5zZXRGaWx0ZXJHcm91cExldmVsKHRoaXMucmVwb3J0LmlkLCBleGlzdGluZy5maWx0ZXJHcm91cElkLCBsZXZlbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ydW4odGhpcy5fcmVwb3J0RGF0YS5hZGRGaWx0ZXIodGhpcy5yZXBvcnQuaWQsIHRoaXMuY29tcG9uZW50LmlkLCB7XG4gICAgICAgIGZpbHRlckNvbHVtbjogcm93LmNvbHVtbixcbiAgICAgICAgbGFiZWw6IHJvdy5sYWJlbCxcbiAgICAgICAgbGV2ZWwsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUnVuIGEgZmlsdGVyIG11dGF0aW9uLCB0aGVuIHJlbG9hZCB0byByZWNvbmNpbGUgdGhlIG9wdGltaXN0aWMgc3RhdGUuXG4gIHByaXZhdGUgX3J1bihyZXF1ZXN0OiBPYnNlcnZhYmxlPHVua25vd24+KTogdm9pZCB7XG4gICAgcmVxdWVzdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gdGhpcy5fYWZ0ZXJNdXRhdGlvbigpLFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4gdGhpcy5fbXV0YXRpb25FcnJvcihlcnJvciksXG4gICAgfSk7XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgcm93IHZpZXctbW9kZWwgZnJvbSB0aGUgbG9hZGVkIGNvbHVtbnMgKyBmaWx0ZXJzL2dyb3Vwcy4gRWFjaFxuICAvLyByb3cncyB0b2dnbGVzIHJlZmxlY3Qgd2hlcmUgaXRzIGZpbHRlciBncm91cCBpcyBjdXJyZW50bHkgZXhwb3NlZC5cbiAgcHJpdmF0ZSBfcmVidWlsZFJvd3MoKTogdm9pZCB7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5fZmlsdGVyYWJsZUNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuX2ZpbHRlcnMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuZmlsdGVyQ29sdW1uID09PSBjb2x1bW4uY29sdW1uKTtcbiAgICAgIGNvbnN0IGxldmVsID0gZmlsdGVyID8gdGhpcy5fZ3JvdXBzQnlJZC5nZXQoZmlsdGVyLmZpbHRlckdyb3VwSWQpPy5sZXZlbCA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW4uY29sdW1uLFxuICAgICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgICAgbGFiZWw6IGZpbHRlcj8ubGFiZWxcbiAgICAgICAgICB8fCB0aGlzLl9ncm91cHNCeUlkLmdldChmaWx0ZXI/LmZpbHRlckdyb3VwSWQgPz8gLTEpPy5sYWJlbFxuICAgICAgICAgIHx8IHRoaXMuX2h1bWFuaXplKGNvbHVtbi5jb2x1bW4pLFxuICAgICAgICByZXBvcnQ6IGxldmVsID09PSAncmVwb3J0JyB8fCBsZXZlbCA9PT0gJ2JvdGgnLFxuICAgICAgICBjb21wb25lbnQ6IGxldmVsID09PSAnY29tcG9uZW50JyB8fCBsZXZlbCA9PT0gJ2JvdGgnLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFmdGVyIGFueSBmaWx0ZXIgbXV0YXRpb246IHJlLWZldGNoIHRoZSByZXBvcnQgc28gdGhlIGRpYWxvZydzIGZpbHRlciBsaXN0XG4gIC8vIChhbmQgdGhlIHBhcmVudCBjYW52YXMsIG9uIGNsb3NlKSByZWZsZWN0IHRoZSBuZXcgZ3JvdXBzL2xldmVscy5cbiAgcHJpdmF0ZSBfYWZ0ZXJNdXRhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3JlcG9ydERhdGEuZ2V0KHRoaXMucmVwb3J0LmlkKVxuICAgICAgLnN1YnNjcmliZSgocmVwb3J0OiBSZXBvcnQpID0+IHtcbiAgICAgICAgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgICAgIHRoaXMuX3NlZWRGaWx0ZXJzKHJlcG9ydCwgdGhpcy5jb21wb25lbnQuaWQpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbXV0YXRpb25FcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fbWVzc2FnZS5lcnJvcihlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgPz8gZXJyb3I/Lm1lc3NhZ2UgPz8gJ0ZpbHRlciBvcGVyYXRpb24gZmFpbGVkJyk7XG4gICAgLy8gUmUtc2VlZCBmcm9tIHRoZSBzZXJ2ZXIgc28gdGhlIG9wdGltaXN0aWMgdG9nZ2xlIHNuYXBzIGJhY2sgdG8gdHJ1dGguXG4gICAgdGhpcy5fYWZ0ZXJNdXRhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VlZEZpbHRlcnMocmVwb3J0OiBSZXBvcnQsIGNvbXBvbmVudElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncm91cHNCeUlkID0gbmV3IE1hcCgocmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXSkubWFwKChncm91cCkgPT4gW2dyb3VwLmlkLCBncm91cF0pKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHJlcG9ydC5wYWdlc1xuICAgICAgLmZsYXRNYXAoKHBhZ2UpID0+IHBhZ2UuY29tcG9uZW50cylcbiAgICAgIC5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gY29tcG9uZW50SWQpO1xuXG4gICAgdGhpcy5fZmlsdGVycyA9IGNvbXBvbmVudD8uZmlsdGVycyA/PyBbXTtcbiAgICB0aGlzLl9yZWJ1aWxkUm93cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZENvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVwb3J0RGF0YS5jb21wb25lbnRDb2x1bW5zKHRoaXMucmVwb3J0LmlkLCB0aGlzLmNvbXBvbmVudC5pZClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoY29sdW1uczogUmVwb3J0RmlsdGVyYWJsZUNvbHVtbltdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZmlsdGVyYWJsZUNvbHVtbnMgPSBjb2x1bW5zID8/IFtdO1xuICAgICAgICAgIHRoaXMuX3JlYnVpbGRSb3dzKCk7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnNFcnJvciA9IGVycm9yPy5lcnJvcj8ubWVzc2FnZSA/PyAnQ291bGQgbm90IHJlYWQgdGhlIGNvbXBvbmVudCBjb2x1bW5zJztcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaHVtYW5pemUoY29sdW1uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW5cbiAgICAgIC5yZXBsYWNlKC9bX1xcLV0rL2csICcgJylcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXBsYWNlKC9cXGJcXHcvZywgKGNoYXJhY3RlcikgPT4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCkpO1xuICB9XG59XG4iLCI8Zm9ybVxuICAgIGZzRm9ybVxuICAgIFtzdWJtaXRdPVwic2F2ZVwiPlxuICA8ZnMtZGlhbG9nPlxuICAgIDxoMSBtYXQtZGlhbG9nLXRpdGxlPlxuICAgICAge3sgY29tcG9uZW50LnRpdGxlIHx8ICdDb21wb25lbnQnIH19XG4gICAgPC9oMT5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC10YWItZ3JvdXAgWyhzZWxlY3RlZCldPVwic2VsZWN0ZWRUYWJcIj5cbiAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgIGxhYmVsPVwiU2V0dGluZ3NcIlxuICAgICAgICAgICAgbmFtZT1cInNldHRpbmdzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtbiB0YWItYm9keVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIFRpdGxlXG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJoZWFkaW5nLTJcIj5cbiAgICAgICAgICAgICAgUGFkZGluZ1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvbWV0cnktcm93XCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgVG9wXG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wNVwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFkZGluZ1RvcFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicGFkZGluZ1RvcFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIG1hdFRleHRTdWZmaXg+XG4gICAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBSaWdodFxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDVcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhZGRpbmdSaWdodFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicGFkZGluZ1JpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEJvdHRvbVxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDVcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhZGRpbmdCb3R0b21cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBtYXRUZXh0U3VmZml4PlxuICAgICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgTGVmdFxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDVcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhZGRpbmdMZWZ0XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYWRkaW5nTGVmdFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIG1hdFRleHRTdWZmaXg+XG4gICAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRlcnNcIlxuICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJvZHlcIj5cbiAgICAgICAgICAgIEBpZiAoY29sdW1uc0Vycm9yKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzLWVtcHR5IGVycm9yXCI+XG4gICAgICAgICAgICAgICAge3sgY29sdW1uc0Vycm9yIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAocm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPCEtLSBFdmVyeSBmaWx0ZXJhYmxlIGNvbHVtbi4gVG9nZ2xlIHdoZXJlIGl0cyBjb250cm9sIHNob3dzOiBpblxuICAgICAgICAgICAgICAgICAgIHRoZSByZXBvcnQgYmFyLCBvbiB0aGlzIGNvbXBvbmVudCwgYm90aCwgb3IgbmVpdGhlci4gVGhlXG4gICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIChkYXRlIHJhbmdlIHZzIHZhbHVlIHBpY2tlcikgZm9sbG93cyB0aGUgZGF0YS4gLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItaGVhZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaGVhZC1zcGFjZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIFJlcG9ydCBiYXJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21wb25lbnRcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBAZm9yIChyb3cgb2Ygcm93czsgdHJhY2sgcm93LmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2FyZC1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jYXJkLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyByb3cubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNhcmQtbWV0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdHlwZUxhYmVsKHJvdy50eXBlKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvdy5yZXBvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEV4cG9zdXJlKHJvdywgJ3JlcG9ydCcsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlNob3cgaW4gdGhlIHJlcG9ydCBiYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93LmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RXhwb3N1cmUocm93LCAnY29tcG9uZW50JywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiU2hvdyBvbiB0aGlzIGNvbXBvbmVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzLWVtcHR5XCI+XG4gICAgICAgICAgICAgICAgVGhpcyBjb21wb25lbnQgaGFzIG5vIGZpbHRlcmFibGUgY29sdW1ucyB5ZXQg4oCUIGdpdmUgaXQgc29tZSBTUUwgZmlyc3QuXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIlNRTFwiXG4gICAgICAgICAgICBuYW1lPVwic3FsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1ib2R5XCI+XG4gICAgICAgICAgICA8cHJlIGNsYXNzPVwiY29kZS1ibG9ja1wiPlxuICAgICAgICAgICAgICB7eyBjb21wb25lbnQuc3FsIH19XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgbGFiZWw9XCJDb25maWdcIlxuICAgICAgICAgICAgbmFtZT1cImNvbmZpZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYm9keVwiPlxuICAgICAgICAgICAgPHByZSBjbGFzcz1cImNvZGUtYmxvY2tcIj5cbiAgICAgICAgICAgICAge3sgY29uZmlnSnNvbiB9fVxuICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgICAgPGZzLWZvcm0tZGlhbG9nLWFjdGlvbnNcbiAgICAgICAgW3NhdmVdPVwic2VsZWN0ZWRUYWIgPT09ICdzZXR0aW5ncydcIlxuICAgICAgICBbZG9uZV09XCJzZWxlY3RlZFRhYiAhPT0gJ3NldHRpbmdzJ1wiPlxuICAgICAgPC9mcy1mb3JtLWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT4iXX0=
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9kaWFsb2dzL2NvbXBvbmVudC1zZXR0aW5ncy9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvY29tcG9uZW50LXNldHRpbmdzL2NvbXBvbmVudC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFB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Q1osY0FBYyxnTUFDZCxhQUFhLDhCQUNiLFlBQVksbWFBQ1osYUFBYSw2b0JBQ2IsY0FBYywrSEFDZCxnQkFBZ0IseUdBQ2hCLGdCQUFnQiw0SEFDaEIsWUFBWSw0TEFDWixRQUFRLHNEQUNSLFNBQVMscUhBQ1QsUUFBUSxpVUFDUixjQUFjLDBVQUNkLFVBQVU7OzRGQUdELDBCQUEwQjtrQkF2QnRDLFNBQVM7c0NBR1MsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixRQUFRO3dCQUNSLFNBQVM7d0JBQ1QsUUFBUTt3QkFDUixjQUFjO3dCQUNkLFVBQVU7cUJBQ1giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCwgTWF0U3VmZml4IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRnNEaWFsb2dNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kaWFsb2cnO1xuaW1wb3J0IHsgRnNGb3JtTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZm9ybSc7XG5pbXBvcnQgeyBGc0xhYmVsTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGFiZWwnO1xuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1RhYnNNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC90YWJzJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQge1xuICBSZXBvcnQsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0RmlsdGVyLFxuICBSZXBvcnRGaWx0ZXJHcm91cCxcbiAgUmVwb3J0RmlsdGVyTGV2ZWwsXG4gIFJlcG9ydEZpbHRlclR5cGUsXG4gIFJlcG9ydEZpbHRlcmFibGVDb2x1bW4sXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HIH0gZnJvbSAnLi4vLi4vbGF5b3V0JztcblxuXG4vLyBPbmUgcm93IG9mIHRoZSBGaWx0ZXJzIHRhYiBsaXN0aW5nOiBhIGZpbHRlcmFibGUgY29sdW1uLCB0aGUgaW50ZXJmYWNlXG4vLyBpbmZlcnJlZCBmcm9tIGl0cyBkYXRhLCBhbmQgd2hlcmUgaXRzIGZpbHRlciBpcyBleHBvc2VkICh0aGUgdHdvIHRvZ2dsZXMpLlxuaW50ZXJmYWNlIEZpbHRlclJvdyB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xuICBsYWJlbDogc3RyaW5nO1xuICByZXBvcnQ6IGJvb2xlYW47XG4gIGNvbXBvbmVudDogYm9vbGVhbjtcbn1cblxuXG4vLyBDb21wb25lbnQgc2V0dGluZ3MsIGluIHRhYnM6XG4vLyAgIFNldHRpbmdzIOKAlCB0aXRsZSBhbmQgY29udGVudCBwYWRkaW5nLiBQb3NpdGlvbi9zaXplIGFyZSB0dW5lZCBieSBkcmFnZ2luZ1xuLy8gICBvbiB0aGUgY2FudmFzOyBoZWlnaHQgYmVoYXZpb3VyIGZvbGxvd3MgZnJvbSB0aGUgY29tcG9uZW50IHR5cGUuXG4vLyAgIEZpbHRlcnMgIOKAlCBPTkUgbGlzdGluZyBvZiBldmVyeSBmaWx0ZXJhYmxlIGNvbHVtbiBvbiB0aGlzIGNvbXBvbmVudC4gRWFjaFxuLy8gICByb3cgY2FycmllcyB0d28gdG9nZ2xlczogc2hvdyBpbiB0aGUgcmVwb3J0IGJhciBhbmQvb3Igc2hvdyBvbiB0aGlzXG4vLyAgIGNvbXBvbmVudCAoYm90aCwgZWl0aGVyLCBvciBuZWl0aGVyKS4gVGhlIGludGVyZmFjZSAoZGF0ZSByYW5nZSB2cyB2YWx1ZVxuLy8gICBwaWNrZXIpIGlzIGluZmVycmVkIGZyb20gdGhlIGRhdGEsIG5ldmVyIGNob3Nlbi4gRWFjaCB0b2dnbGUgcGVyc2lzdHNcbi8vICAgaW1tZWRpYXRlbHkgYW5kIHJlZnJlc2hlcyB0aGUgaW4tZGlhbG9nIGxpc3QuXG4vLyAgIFNRTCAvIENvbmZpZyDigJQgcmVhZC1vbmx5IGRpYWdub3N0aWNzLlxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBGc0Zvcm1Nb2R1bGUsXG4gICAgRnNEaWFsb2dNb2R1bGUsXG4gICAgRnNMYWJlbE1vZHVsZSxcbiAgICBGc1RhYnNNb2R1bGUsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXREaWFsb2dUaXRsZSxcbiAgICBNYXREaWFsb2dDb250ZW50LFxuICAgIE1hdERpYWxvZ0FjdGlvbnMsXG4gICAgTWF0Rm9ybUZpZWxkLFxuICAgIE1hdExhYmVsLFxuICAgIE1hdFN1ZmZpeCxcbiAgICBNYXRJbnB1dCxcbiAgICBNYXRTbGlkZVRvZ2dsZSxcbiAgICBNYXRUb29sdGlwLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50O1xuICBwdWJsaWMgcmVwb3J0OiBSZXBvcnQ7XG5cbiAgcHVibGljIHNlbGVjdGVkVGFiID0gJ3NldHRpbmdzJztcblxuICBwdWJsaWMgdGl0bGUgPSAnJztcblxuICBwdWJsaWMgcGFkZGluZ1RvcCA9IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkc7XG4gIHB1YmxpYyBwYWRkaW5nUmlnaHQgPSBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HO1xuICBwdWJsaWMgcGFkZGluZ0JvdHRvbSA9IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkc7XG4gIHB1YmxpYyBwYWRkaW5nTGVmdCA9IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkc7XG5cbiAgcHVibGljIGNvbmZpZ0pzb24gPSAnJztcblxuICAvLyAtLS0tIGZpbHRlciBtYW5hZ2VtZW50IHN0YXRlIC0tLS1cbiAgLy8gT25lIHJvdyBwZXIgZmlsdGVyYWJsZSBjb2x1bW4uIFRoZSB0d28gYm9vbGVhbnMgZHJpdmUgdGhlIHRvZ2dsZXM7IHdlIGZsaXBcbiAgLy8gdGhlbSBvcHRpbWlzdGljYWxseSBvbiBjbGljayAoc28gdGhlIFVJIG5ldmVyIGJsaW5rcyB3aGlsZSB0aGUgcmVxdWVzdCBpc1xuICAvLyBpbiBmbGlnaHQpIGFuZCByZWNvbmNpbGUgZnJvbSB0aGUgc2VydmVyIG9uIHJlbG9hZC5cbiAgcHVibGljIHJvd3M6IEZpbHRlclJvd1tdID0gW107XG4gIHB1YmxpYyBjb2x1bW5zRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFRoZSByYXcgaW5wdXRzIHRoZSByb3dzIGFyZSBidWlsdCBmcm9tLlxuICBwcml2YXRlIF9maWx0ZXJhYmxlQ29sdW1uczogUmVwb3J0RmlsdGVyYWJsZUNvbHVtbltdID0gW107XG4gIHByaXZhdGUgX2ZpbHRlcnM6IFJlcG9ydEZpbHRlcltdID0gW107XG4gIHByaXZhdGUgX2dyb3Vwc0J5SWQgPSBuZXcgTWFwPG51bWJlciwgUmVwb3J0RmlsdGVyR3JvdXA+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZUxhYmVsczogUmVjb3JkPFJlcG9ydEZpbHRlclR5cGUsIHN0cmluZz4gPSB7XG4gICAgc2VsZWN0OiAnUGljayB2YWx1ZXMnLFxuICAgIGRhdGVSYW5nZTogJ0RhdGUgcmFuZ2UnLFxuICAgIGtleXdvcmQ6ICdTZWFyY2ggdGV4dCcsXG4gIH07XG5cbiAgLy8gVHJ1ZSBvbmNlIGFueSBmaWx0ZXIgbXV0YXRpb24gaGFwcGVuZWQg4oCUIHRoZSBwYXJlbnQgcmVsb2FkcyB0aGUgcmVwb3J0IHNvXG4gIC8vIHRoZSBjYW52YXMgKyByZXBvcnQgYmFyIHJlZmxlY3QgdGhlIGNoYW5nZS5cbiAgcHJpdmF0ZSBfY2hhbmdlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IHsgcmVwb3J0OiBSZXBvcnQ7IGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50IH0gPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudD4+KE1hdERpYWxvZ1JlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlcG9ydERhdGEgPSBpbmplY3QoUmVwb3J0RGF0YSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2UgPSBpbmplY3QoRnNNZXNzYWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2RSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlcG9ydCA9IHRoaXMuX2RhdGEucmVwb3J0O1xuICAgIHRoaXMuY29tcG9uZW50ID0gdGhpcy5fZGF0YS5jb21wb25lbnQ7XG5cbiAgICB0aGlzLnRpdGxlID0gdGhpcy5jb21wb25lbnQudGl0bGUgPz8gJyc7XG5cbiAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5jb21wb25lbnQuY29uZmlnPy5wYWRkaW5nO1xuICAgIHRoaXMucGFkZGluZ1RvcCA9IHBhZGRpbmc/LnRvcCA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HO1xuICAgIHRoaXMucGFkZGluZ1JpZ2h0ID0gcGFkZGluZz8ucmlnaHQgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORztcbiAgICB0aGlzLnBhZGRpbmdCb3R0b20gPSBwYWRkaW5nPy5ib3R0b20gPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORztcbiAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gcGFkZGluZz8ubGVmdCA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HO1xuXG4gICAgdGhpcy5jb25maWdKc29uID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb21wb25lbnQuY29uZmlnID8/IHt9LCBudWxsLCAyKTtcblxuICAgIHRoaXMuX3NlZWRGaWx0ZXJzKHRoaXMucmVwb3J0LCB0aGlzLmNvbXBvbmVudC5pZCk7XG4gICAgdGhpcy5fbG9hZENvbHVtbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlZDtcbiAgfVxuXG4gIC8vIEh1bWFuLWZyaWVuZGx5IG5hbWUgZm9yIHRoZSBpbmZlcnJlZCBpbnRlcmZhY2Ugc2hvd24gYmVzaWRlIGVhY2ggY29sdW1uLlxuICBwdWJsaWMgdHlwZUxhYmVsKHR5cGU6IFJlcG9ydEZpbHRlclR5cGUpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlTGFiZWxzW3R5cGVdID8/IHR5cGU7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSA9ICgpID0+IHtcbiAgICBjb25zdCBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgdG9wOiB0aGlzLnBhZGRpbmdUb3AsXG4gICAgICAgIHJpZ2h0OiB0aGlzLnBhZGRpbmdSaWdodCxcbiAgICAgICAgYm90dG9tOiB0aGlzLnBhZGRpbmdCb3R0b20sXG4gICAgICAgIGxlZnQ6IHRoaXMucGFkZGluZ0xlZnQsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YS51cGRhdGVDb21wb25lbnQodGhpcy5yZXBvcnQuaWQsIHRoaXMuY29tcG9uZW50LmlkLCBzZXR0aW5ncylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnQ29tcG9uZW50IHNhdmVkJyk7XG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH07XG5cbiAgLy8gRmxpcCBvbmUgZXhwb3N1cmUgKHJlcG9ydCBiYXIgb3IgdGhpcyBjb21wb25lbnQpIGZvciBhIHJvdy4gV2UgdXBkYXRlIHRoZVxuICAvLyByb3cncyBib29sZWFuIGZpcnN0IOKAlCBzbyB0aGUgdG9nZ2xlIHN0YXlzIHB1dCB3aXRoIG5vIGJsaW5rIOKAlCB0aGVuIHBlcnNpc3RcbiAgLy8gYW5kIHJlY29uY2lsZSBvbiByZWxvYWQuIE5laXRoZXIgb24g4oaSIG5vIGZpbHRlciAocmVtb3ZlZCk7IGVpdGhlciBvbiDihpIgdGhlXG4gIC8vIGZpbHRlciBleGlzdHMgYXQgdGhlIGNvbWJpbmVkIGxldmVsLiBUaGUgaW50ZXJmYWNlIHR5cGUgaXMgaW5mZXJyZWRcbiAgLy8gc2VydmVyLXNpZGUuXG4gIHB1YmxpYyBzZXRFeHBvc3VyZShyb3c6IEZpbHRlclJvdywgdGFyZ2V0OiAncmVwb3J0JyB8ICdjb21wb25lbnQnLCBvbjogYm9vbGVhbik6IHZvaWQge1xuICAgIHJvd1t0YXJnZXRdID0gb247XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuX2ZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXIuZmlsdGVyQ29sdW1uID09PSByb3cuY29sdW1uKTtcblxuICAgIGlmICghcm93LnJlcG9ydCAmJiAhcm93LmNvbXBvbmVudCkge1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIHRoaXMuX3J1bih0aGlzLl9yZXBvcnREYXRhLmRlbGV0ZUZpbHRlcih0aGlzLnJlcG9ydC5pZCwgZXhpc3RpbmcuaWQpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxldmVsOiBSZXBvcnRGaWx0ZXJMZXZlbCA9IHJvdy5yZXBvcnQgJiYgcm93LmNvbXBvbmVudFxuICAgICAgPyAnYm90aCdcbiAgICAgIDogKHJvdy5yZXBvcnQgPyAncmVwb3J0JyA6ICdjb21wb25lbnQnKTtcblxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5fcnVuKHRoaXMuX3JlcG9ydERhdGEudXBkYXRlRmlsdGVyR3JvdXAodGhpcy5yZXBvcnQuaWQsIGV4aXN0aW5nLmZpbHRlckdyb3VwSWQsIHsgbGV2ZWwgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ydW4odGhpcy5fcmVwb3J0RGF0YS5hZGRGaWx0ZXIodGhpcy5yZXBvcnQuaWQsIHRoaXMuY29tcG9uZW50LmlkLCB7XG4gICAgICAgIGZpbHRlckNvbHVtbjogcm93LmNvbHVtbixcbiAgICAgICAgbGFiZWw6IHJvdy5sYWJlbCxcbiAgICAgICAgbGV2ZWwsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUnVuIGEgZmlsdGVyIG11dGF0aW9uLCB0aGVuIHJlbG9hZCB0byByZWNvbmNpbGUgdGhlIG9wdGltaXN0aWMgc3RhdGUuXG4gIHByaXZhdGUgX3J1bihyZXF1ZXN0OiBPYnNlcnZhYmxlPHVua25vd24+KTogdm9pZCB7XG4gICAgcmVxdWVzdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gdGhpcy5fYWZ0ZXJNdXRhdGlvbigpLFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4gdGhpcy5fbXV0YXRpb25FcnJvcihlcnJvciksXG4gICAgfSk7XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgcm93IHZpZXctbW9kZWwgZnJvbSB0aGUgbG9hZGVkIGNvbHVtbnMgKyBmaWx0ZXJzL2dyb3Vwcy4gRWFjaFxuICAvLyByb3cncyB0b2dnbGVzIHJlZmxlY3Qgd2hlcmUgaXRzIGZpbHRlciBncm91cCBpcyBjdXJyZW50bHkgZXhwb3NlZC5cbiAgcHJpdmF0ZSBfcmVidWlsZFJvd3MoKTogdm9pZCB7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5fZmlsdGVyYWJsZUNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuX2ZpbHRlcnMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuZmlsdGVyQ29sdW1uID09PSBjb2x1bW4uY29sdW1uKTtcbiAgICAgIGNvbnN0IGxldmVsID0gZmlsdGVyID8gdGhpcy5fZ3JvdXBzQnlJZC5nZXQoZmlsdGVyLmZpbHRlckdyb3VwSWQpPy5sZXZlbCA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW4uY29sdW1uLFxuICAgICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgICAgbGFiZWw6IGZpbHRlcj8ubGFiZWxcbiAgICAgICAgICB8fCB0aGlzLl9ncm91cHNCeUlkLmdldChmaWx0ZXI/LmZpbHRlckdyb3VwSWQgPz8gLTEpPy5sYWJlbFxuICAgICAgICAgIHx8IHRoaXMuX2h1bWFuaXplKGNvbHVtbi5jb2x1bW4pLFxuICAgICAgICByZXBvcnQ6IGxldmVsID09PSAncmVwb3J0JyB8fCBsZXZlbCA9PT0gJ2JvdGgnLFxuICAgICAgICBjb21wb25lbnQ6IGxldmVsID09PSAnY29tcG9uZW50JyB8fCBsZXZlbCA9PT0gJ2JvdGgnLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFmdGVyIGFueSBmaWx0ZXIgbXV0YXRpb246IHJlLWZldGNoIHRoZSByZXBvcnQgc28gdGhlIGRpYWxvZydzIGZpbHRlciBsaXN0XG4gIC8vIChhbmQgdGhlIHBhcmVudCBjYW52YXMsIG9uIGNsb3NlKSByZWZsZWN0IHRoZSBuZXcgZ3JvdXBzL2xldmVscy5cbiAgcHJpdmF0ZSBfYWZ0ZXJNdXRhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3JlcG9ydERhdGEuZ2V0KHRoaXMucmVwb3J0LmlkKVxuICAgICAgLnN1YnNjcmliZSgocmVwb3J0OiBSZXBvcnQpID0+IHtcbiAgICAgICAgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgICAgIHRoaXMuX3NlZWRGaWx0ZXJzKHJlcG9ydCwgdGhpcy5jb21wb25lbnQuaWQpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbXV0YXRpb25FcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fbWVzc2FnZS5lcnJvcihlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgPz8gZXJyb3I/Lm1lc3NhZ2UgPz8gJ0ZpbHRlciBvcGVyYXRpb24gZmFpbGVkJyk7XG4gICAgLy8gUmUtc2VlZCBmcm9tIHRoZSBzZXJ2ZXIgc28gdGhlIG9wdGltaXN0aWMgdG9nZ2xlIHNuYXBzIGJhY2sgdG8gdHJ1dGguXG4gICAgdGhpcy5fYWZ0ZXJNdXRhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VlZEZpbHRlcnMocmVwb3J0OiBSZXBvcnQsIGNvbXBvbmVudElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncm91cHNCeUlkID0gbmV3IE1hcCgocmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXSkubWFwKChncm91cCkgPT4gW2dyb3VwLmlkLCBncm91cF0pKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHJlcG9ydC5wYWdlc1xuICAgICAgLmZsYXRNYXAoKHBhZ2UpID0+IHBhZ2UuY29tcG9uZW50cylcbiAgICAgIC5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gY29tcG9uZW50SWQpO1xuXG4gICAgdGhpcy5fZmlsdGVycyA9IGNvbXBvbmVudD8uZmlsdGVycyA/PyBbXTtcbiAgICB0aGlzLl9yZWJ1aWxkUm93cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZENvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVwb3J0RGF0YS5jb21wb25lbnRDb2x1bW5zKHRoaXMucmVwb3J0LmlkLCB0aGlzLmNvbXBvbmVudC5pZClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoY29sdW1uczogUmVwb3J0RmlsdGVyYWJsZUNvbHVtbltdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZmlsdGVyYWJsZUNvbHVtbnMgPSBjb2x1bW5zID8/IFtdO1xuICAgICAgICAgIHRoaXMuX3JlYnVpbGRSb3dzKCk7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnNFcnJvciA9IGVycm9yPy5lcnJvcj8ubWVzc2FnZSA/PyAnQ291bGQgbm90IHJlYWQgdGhlIGNvbXBvbmVudCBjb2x1bW5zJztcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaHVtYW5pemUoY29sdW1uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW5cbiAgICAgIC5yZXBsYWNlKC9bX1xcLV0rL2csICcgJylcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXBsYWNlKC9cXGJcXHcvZywgKGNoYXJhY3RlcikgPT4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCkpO1xuICB9XG59XG4iLCI8Zm9ybVxuICAgIGZzRm9ybVxuICAgIFtzdWJtaXRdPVwic2F2ZVwiPlxuICA8ZnMtZGlhbG9nPlxuICAgIDxoMSBtYXQtZGlhbG9nLXRpdGxlPlxuICAgICAge3sgY29tcG9uZW50LnRpdGxlIHx8ICdDb21wb25lbnQnIH19XG4gICAgPC9oMT5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC10YWItZ3JvdXAgWyhzZWxlY3RlZCldPVwic2VsZWN0ZWRUYWJcIj5cbiAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgIGxhYmVsPVwiU2V0dGluZ3NcIlxuICAgICAgICAgICAgbmFtZT1cInNldHRpbmdzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtbiB0YWItYm9keVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIFRpdGxlXG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJoZWFkaW5nLTJcIj5cbiAgICAgICAgICAgICAgUGFkZGluZ1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvbWV0cnktcm93XCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgVG9wXG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wNVwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFkZGluZ1RvcFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicGFkZGluZ1RvcFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIG1hdFRleHRTdWZmaXg+XG4gICAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBSaWdodFxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDVcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhZGRpbmdSaWdodFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicGFkZGluZ1JpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEJvdHRvbVxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDVcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhZGRpbmdCb3R0b21cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBtYXRUZXh0U3VmZml4PlxuICAgICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgTGVmdFxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDVcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhZGRpbmdMZWZ0XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYWRkaW5nTGVmdFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIG1hdFRleHRTdWZmaXg+XG4gICAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRlcnNcIlxuICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJvZHlcIj5cbiAgICAgICAgICAgIEBpZiAoY29sdW1uc0Vycm9yKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzLWVtcHR5IGVycm9yXCI+XG4gICAgICAgICAgICAgICAge3sgY29sdW1uc0Vycm9yIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAocm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPCEtLSBFdmVyeSBmaWx0ZXJhYmxlIGNvbHVtbi4gVG9nZ2xlIHdoZXJlIGl0cyBjb250cm9sIHNob3dzOiBpblxuICAgICAgICAgICAgICAgICAgIHRoZSByZXBvcnQgYmFyLCBvbiB0aGlzIGNvbXBvbmVudCwgYm90aCwgb3IgbmVpdGhlci4gVGhlXG4gICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIChkYXRlIHJhbmdlIHZzIHZhbHVlIHBpY2tlcikgZm9sbG93cyB0aGUgZGF0YS4gLS0+XG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImZpbHRlci10YWJsZVwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiZmlsdGVyLWNvbC1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImZpbHRlci1jb2wtdHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFR5cGVcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiZmlsdGVyLWNvbC10b2dnbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBSZXBvcnQgYmFyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImZpbHRlci1jb2wtdG9nZ2xlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICBAZm9yIChyb3cgb2Ygcm93czsgdHJhY2sgcm93LmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZmlsdGVyLWNvbC1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyByb3cubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZpbHRlci1jb2wtdHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdHlwZUxhYmVsKHJvdy50eXBlKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZmlsdGVyLWNvbC10b2dnbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvdy5yZXBvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRFeHBvc3VyZShyb3csICdyZXBvcnQnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlNob3cgaW4gdGhlIHJlcG9ydCBiYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZpbHRlci1jb2wtdG9nZ2xlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3cuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RXhwb3N1cmUocm93LCAnY29tcG9uZW50JywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJTaG93IG9uIHRoaXMgY29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzLWVtcHR5XCI+XG4gICAgICAgICAgICAgICAgVGhpcyBjb21wb25lbnQgaGFzIG5vIGZpbHRlcmFibGUgY29sdW1ucyB5ZXQg4oCUIGdpdmUgaXQgc29tZSBTUUwgZmlyc3QuXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIlNRTFwiXG4gICAgICAgICAgICBuYW1lPVwic3FsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1ib2R5XCI+XG4gICAgICAgICAgICA8cHJlIGNsYXNzPVwiY29kZS1ibG9ja1wiPlxuICAgICAgICAgICAgICB7eyBjb21wb25lbnQuc3FsIH19XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgbGFiZWw9XCJDb25maWdcIlxuICAgICAgICAgICAgbmFtZT1cImNvbmZpZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYm9keVwiPlxuICAgICAgICAgICAgPHByZSBjbGFzcz1cImNvZGUtYmxvY2tcIj5cbiAgICAgICAgICAgICAge3sgY29uZmlnSnNvbiB9fVxuICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgICAgPGZzLWZvcm0tZGlhbG9nLWFjdGlvbnNcbiAgICAgICAgW3NhdmVdPVwic2VsZWN0ZWRUYWIgPT09ICdzZXR0aW5ncydcIlxuICAgICAgICBbZG9uZV09XCJzZWxlY3RlZFRhYiAhPT0gJ3NldHRpbmdzJ1wiPlxuICAgICAgPC9mcy1mb3JtLWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { format, parseISO } from 'date-fns';
|
|
2
|
+
// Date-range defaults are stored as calendar-day strings (yyyy-MM-dd, no time,
|
|
3
|
+
// no timezone) so the backend never shifts them; the date picker works in Date
|
|
4
|
+
// objects. These two convert between the two forms — the only translation the
|
|
5
|
+
// Filters tab needs for a fixed date range.
|
|
6
|
+
// A stored yyyy-MM-dd boundary as a local Date for the picker, or null.
|
|
7
|
+
export function dateFromBound(value) {
|
|
8
|
+
if (!value) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const date = parseISO(value.slice(0, 10));
|
|
12
|
+
return isNaN(date.getTime()) ? null : date;
|
|
13
|
+
}
|
|
14
|
+
// A picked Date as a yyyy-MM-dd boundary for storage, or null. Uses the local
|
|
15
|
+
// calendar day (format, not toISOString) so the boundary is the day the admin
|
|
16
|
+
// picked, regardless of timezone.
|
|
17
|
+
export function dateToBound(value) {
|
|
18
|
+
return value instanceof Date && !isNaN(value.getTime())
|
|
19
|
+
? format(value, 'yyyy-MM-dd')
|
|
20
|
+
: null;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNldHRpbmdzLWRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGlhbG9ncy9yZXBvcnQtc2V0dGluZ3MvcmVwb3J0LXNldHRpbmdzLWRlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHNUMsK0VBQStFO0FBQy9FLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNENBQTRDO0FBRTVDLHdFQUF3RTtBQUN4RSxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWdDO0lBQzVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3QyxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSxrQ0FBa0M7QUFDbEMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUE4QjtJQUN4RCxPQUFPLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztRQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCwgcGFyc2VJU08gfSBmcm9tICdkYXRlLWZucyc7XG5cblxuLy8gRGF0ZS1yYW5nZSBkZWZhdWx0cyBhcmUgc3RvcmVkIGFzIGNhbGVuZGFyLWRheSBzdHJpbmdzICh5eXl5LU1NLWRkLCBubyB0aW1lLFxuLy8gbm8gdGltZXpvbmUpIHNvIHRoZSBiYWNrZW5kIG5ldmVyIHNoaWZ0cyB0aGVtOyB0aGUgZGF0ZSBwaWNrZXIgd29ya3MgaW4gRGF0ZVxuLy8gb2JqZWN0cy4gVGhlc2UgdHdvIGNvbnZlcnQgYmV0d2VlbiB0aGUgdHdvIGZvcm1zIOKAlCB0aGUgb25seSB0cmFuc2xhdGlvbiB0aGVcbi8vIEZpbHRlcnMgdGFiIG5lZWRzIGZvciBhIGZpeGVkIGRhdGUgcmFuZ2UuXG5cbi8vIEEgc3RvcmVkIHl5eXktTU0tZGQgYm91bmRhcnkgYXMgYSBsb2NhbCBEYXRlIGZvciB0aGUgcGlja2VyLCBvciBudWxsLlxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVGcm9tQm91bmQodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBEYXRlIHwgbnVsbCB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyh2YWx1ZS5zbGljZSgwLCAxMCkpO1xuXG4gIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZTtcbn1cblxuLy8gQSBwaWNrZWQgRGF0ZSBhcyBhIHl5eXktTU0tZGQgYm91bmRhcnkgZm9yIHN0b3JhZ2UsIG9yIG51bGwuIFVzZXMgdGhlIGxvY2FsXG4vLyBjYWxlbmRhciBkYXkgKGZvcm1hdCwgbm90IHRvSVNPU3RyaW5nKSBzbyB0aGUgYm91bmRhcnkgaXMgdGhlIGRheSB0aGUgYWRtaW5cbi8vIHBpY2tlZCwgcmVnYXJkbGVzcyBvZiB0aW1lem9uZS5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlVG9Cb3VuZCh2YWx1ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKVxuICAgID8gZm9ybWF0KHZhbHVlLCAneXl5eS1NTS1kZCcpXG4gICAgOiBudWxsO1xufVxuIl19
|