@porscheinformatik/clr-addons 18.1.3 → 18.1.4
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.
|
@@ -9,6 +9,8 @@ export declare class ClrDateFilterComponent<T extends {
|
|
|
9
9
|
private clrPopoverEventsService;
|
|
10
10
|
private nestedProp;
|
|
11
11
|
timeActive: boolean;
|
|
12
|
+
dateValidationError: string;
|
|
13
|
+
valError: boolean;
|
|
12
14
|
set property(value: string);
|
|
13
15
|
get property(): string;
|
|
14
16
|
constructor(commonStrings: ClrCommonStringsService, clrPopoverEventsService: ClrPopoverEventsService, filterContainer: ClrDatagridFilter);
|
|
@@ -50,6 +52,7 @@ export declare class ClrDateFilterComponent<T extends {
|
|
|
50
52
|
get state(): any;
|
|
51
53
|
clearFilter(): void;
|
|
52
54
|
equals(other: ClrDatagridFilterInterface<T, any>): boolean;
|
|
55
|
+
private validateDates;
|
|
53
56
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrDateFilterComponent<any>, never>;
|
|
54
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ClrDateFilterComponent<any>, "clr-date-filter", never, { "timeActive": { "alias": "timeActive"; "required": false; }; "property": { "alias": "clrProperty"; "required": false; }; "maxPlaceholder": { "alias": "clrFilterMaxPlaceholder"; "required": false; }; "minPlaceholder": { "alias": "clrFilterMinPlaceholder"; "required": false; }; "value": { "alias": "clrFilterValue"; "required": false; }; }, { "filterValueChange": "clrFilterValueChange"; }, never, never, false, never>;
|
|
57
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrDateFilterComponent<any>, "clr-date-filter", never, { "timeActive": { "alias": "timeActive"; "required": false; }; "dateValidationError": { "alias": "dateValidationError"; "required": false; }; "property": { "alias": "clrProperty"; "required": false; }; "maxPlaceholder": { "alias": "clrFilterMaxPlaceholder"; "required": false; }; "minPlaceholder": { "alias": "clrFilterMinPlaceholder"; "required": false; }; "value": { "alias": "clrFilterValue"; "required": false; }; }, { "filterValueChange": "clrFilterValueChange"; }, never, never, false, never>;
|
|
55
58
|
}
|
|
@@ -21,6 +21,7 @@ export class ClrDateFilterComponent {
|
|
|
21
21
|
this.commonStrings = commonStrings;
|
|
22
22
|
this.clrPopoverEventsService = clrPopoverEventsService;
|
|
23
23
|
this.timeActive = false;
|
|
24
|
+
this.valError = false;
|
|
24
25
|
this.filterValueChange = new EventEmitter();
|
|
25
26
|
/**
|
|
26
27
|
* Internal values and accessor
|
|
@@ -47,14 +48,14 @@ export class ClrDateFilterComponent {
|
|
|
47
48
|
if (values && (values[0] !== this._from || values[1] !== this._to)) {
|
|
48
49
|
if (typeof values[0] === 'object') {
|
|
49
50
|
this._from = values[0];
|
|
50
|
-
this._fromTime = this._from?.toLocaleTimeString();
|
|
51
|
+
this._fromTime = this._from?.toLocaleTimeString().substring(0, 5);
|
|
51
52
|
}
|
|
52
53
|
else {
|
|
53
54
|
this._from = null;
|
|
54
55
|
}
|
|
55
56
|
if (typeof values[1] === 'object') {
|
|
56
57
|
this._to = values[1];
|
|
57
|
-
this._toTime = this._to?.toLocaleTimeString();
|
|
58
|
+
this._toTime = this._to?.toLocaleTimeString().substring(0, 5);
|
|
58
59
|
}
|
|
59
60
|
else {
|
|
60
61
|
this._to = null;
|
|
@@ -74,14 +75,18 @@ export class ClrDateFilterComponent {
|
|
|
74
75
|
}
|
|
75
76
|
set from(from) {
|
|
76
77
|
if (typeof from === 'object' && from !== this._from) {
|
|
77
|
-
if (from && typeof from.setHours === 'function') {
|
|
78
|
+
if (!this.timeActive && from && typeof from.setHours === 'function') {
|
|
78
79
|
from.setHours(0, 0, 0, 0); // set from-date to start of day
|
|
79
80
|
}
|
|
80
|
-
if (this.fromTime) {
|
|
81
|
+
if (!this.fromTime && from && from?.toLocaleTimeString() !== '00:00:00') {
|
|
82
|
+
this.fromTime = from?.toLocaleTimeString().substring(0, 5);
|
|
83
|
+
}
|
|
84
|
+
if (this.fromTime && from) {
|
|
81
85
|
const [hours, minutes, seconds] = this.fromTime.split(':').map(n => parseInt(n));
|
|
82
86
|
from.setHours(hours, minutes, seconds || 0, 0);
|
|
83
87
|
}
|
|
84
88
|
this._from = from;
|
|
89
|
+
this.validateDates();
|
|
85
90
|
this._changes.next([this._from, this._to]);
|
|
86
91
|
this.filterValueChange.emit([this._from, this._to]);
|
|
87
92
|
}
|
|
@@ -91,6 +96,7 @@ export class ClrDateFilterComponent {
|
|
|
91
96
|
if (this._fromTime && this._from) {
|
|
92
97
|
const [hours, minutes, seconds] = this._fromTime.split(':').map(n => parseInt(n));
|
|
93
98
|
this._from.setHours(hours, minutes, seconds || 0, 0);
|
|
99
|
+
this.validateDates();
|
|
94
100
|
this._changes.next([this._from, this._to]);
|
|
95
101
|
this.filterValueChange.emit([this._from, this._to]);
|
|
96
102
|
}
|
|
@@ -100,14 +106,18 @@ export class ClrDateFilterComponent {
|
|
|
100
106
|
}
|
|
101
107
|
set to(to) {
|
|
102
108
|
if (typeof to === 'object' && to !== this._to) {
|
|
103
|
-
if (to && typeof to.setHours === 'function') {
|
|
109
|
+
if (!this.timeActive && to && typeof to.setHours === 'function') {
|
|
104
110
|
to.setHours(23, 59, 59, 999); // set to-date to end of day
|
|
105
111
|
}
|
|
112
|
+
if (!this.toTime && to?.toLocaleTimeString() !== '23:59:59' && to?.toLocaleTimeString() !== '00:00:00') {
|
|
113
|
+
this.toTime = to?.toLocaleTimeString().substring(0, 5);
|
|
114
|
+
}
|
|
106
115
|
if (this.toTime) {
|
|
107
116
|
const [hours, minutes, seconds] = this.toTime.split(':').map(n => parseInt(n));
|
|
108
117
|
to.setHours(hours, minutes, seconds || 0, 0);
|
|
109
118
|
}
|
|
110
119
|
this._to = to;
|
|
120
|
+
this.validateDates();
|
|
111
121
|
this._changes.next([this._from, this._to]);
|
|
112
122
|
this.filterValueChange.emit([this._from, this._to]);
|
|
113
123
|
}
|
|
@@ -117,6 +127,7 @@ export class ClrDateFilterComponent {
|
|
|
117
127
|
if (this._toTime && this._to) {
|
|
118
128
|
const [hours, minutes, seconds] = this._toTime.split(':').map(n => parseInt(n));
|
|
119
129
|
this._to.setHours(hours, minutes, seconds || 0, 0);
|
|
130
|
+
this.validateDates();
|
|
120
131
|
this._changes.next([this._from, this._to]);
|
|
121
132
|
this.filterValueChange.emit([this._from, this._to]);
|
|
122
133
|
}
|
|
@@ -165,14 +176,21 @@ export class ClrDateFilterComponent {
|
|
|
165
176
|
equals(other) {
|
|
166
177
|
return other === this;
|
|
167
178
|
}
|
|
179
|
+
validateDates() {
|
|
180
|
+
if (this._from && this._to) {
|
|
181
|
+
this.valError = this._from > this._to;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
168
184
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterComponent, deps: [{ token: i1.ClrCommonStringsService }, { token: i1.ClrPopoverEventsService }, { token: i1.ClrDatagridFilter }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
169
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrDateFilterComponent, selector: "clr-date-filter", inputs: { timeActive: "timeActive", property: ["clrProperty", "property"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], value: ["clrFilterValue", "value"] }, outputs: { filterValueChange: "clrFilterValueChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input
|
|
185
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrDateFilterComponent, selector: "clr-date-filter", inputs: { timeActive: "timeActive", dateValidationError: "dateValidationError", property: ["clrProperty", "property"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], value: ["clrFilterValue", "value"] }, outputs: { filterValueChange: "clrFilterValueChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" step=\"60\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" step=\"60\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n <clr-control-error *ngIf=\"valError\"\n >{{ dateValidationError || 'Date \"from\" must be before date \"to\"!' }}\n </clr-control-error>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input,.time-filter-input{width:4.5rem!important}\n"], dependencies: [{ kind: "directive", type: i1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: i1.ClrControlError, selector: "clr-control-error" }, { kind: "component", type: i1.ClrDateContainer, selector: "clr-date-container", inputs: ["clrPosition"] }, { kind: "directive", type: i1.ClrDateInput, selector: "[clrDate]", inputs: ["placeholder", "clrDate", "min", "max", "disabled"], outputs: ["clrDateChange"] }, { kind: "directive", type: i1.ClrDateInputValidator, selector: "[clrDate]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.ClrDateTimeContainer, selector: "clr-date-time-container" }, { kind: "directive", type: i5.ClrTimeInput, selector: "[clrTime]" }] }); }
|
|
170
186
|
}
|
|
171
187
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterComponent, decorators: [{
|
|
172
188
|
type: Component,
|
|
173
|
-
args: [{ selector: 'clr-date-filter', template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input
|
|
189
|
+
args: [{ selector: 'clr-date-filter', template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" step=\"60\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" step=\"60\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n <clr-control-error *ngIf=\"valError\"\n >{{ dateValidationError || 'Date \"from\" must be before date \"to\"!' }}\n </clr-control-error>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input,.time-filter-input{width:4.5rem!important}\n"] }]
|
|
174
190
|
}], ctorParameters: () => [{ type: i1.ClrCommonStringsService }, { type: i1.ClrPopoverEventsService }, { type: i1.ClrDatagridFilter }], propDecorators: { timeActive: [{
|
|
175
191
|
type: Input
|
|
192
|
+
}], dateValidationError: [{
|
|
193
|
+
type: Input
|
|
176
194
|
}], property: [{
|
|
177
195
|
type: Input,
|
|
178
196
|
args: ['clrProperty']
|
|
@@ -189,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
|
|
|
189
207
|
type: Output,
|
|
190
208
|
args: ['clrFilterValueChange']
|
|
191
209
|
}] } });
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZGF0ZS1maWx0ZXIvZGF0ZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZGF0ZS1maWx0ZXIvZGF0ZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFFakIsdUJBQXVCLEdBQ3hCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFFekQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQU9qQyxNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLElBQTBCLFFBQVEsQ0FBQyxLQUFhO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQ1UsYUFBc0MsRUFDdEMsdUJBQWdELEVBQ3hELGVBQWtDO1FBRjFCLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUN0Qyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBWjFELGVBQVUsR0FBRyxLQUFLLENBQUM7UUEwRGEsc0JB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QUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQXlDO1FBQ3JELE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQztJQUN4QixDQUFDOzhHQWhNVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiw4VkNsQm5DLHd5REF1REE7OzJGRHJDYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsaUJBQWlCO2tLQVMzQixVQUFVO3NCQURULEtBQUs7Z0JBR29CLFFBQVE7c0JBQWpDLEtBQUs7dUJBQUMsYUFBYTtnQkF1QmMsY0FBYztzQkFBL0MsS0FBSzt1QkFBQyx5QkFBeUI7Z0JBTUUsY0FBYztzQkFBL0MsS0FBSzt1QkFBQyx5QkFBeUI7Z0JBT3JCLEtBQUs7c0JBRGYsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBcUJTLGlCQUFpQjtzQkFBaEQsTUFBTTt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UsXG4gIENsckRhdGFncmlkRmlsdGVyLFxuICBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZSxcbiAgQ2xyUG9wb3ZlckV2ZW50c1NlcnZpY2UsXG59IGZyb20gJ0BjbHIvYW5ndWxhcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZXN0ZWRQcm9wZXJ0eSB9IGZyb20gJy4vbmVzdGVkLXByb3BlcnR5JztcbmltcG9ydCB7IENsYXJpdHlJY29ucywgdHJhc2hJY29uIH0gZnJvbSAnQGNkcy9jb3JlL2ljb24nO1xuXG5DbGFyaXR5SWNvbnMuYWRkSWNvbnModHJhc2hJY29uKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2xyLWRhdGUtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xyRGF0ZUZpbHRlckNvbXBvbmVudDxUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfT5cbiAgaW1wbGVtZW50cyBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZTxUPiwgQWZ0ZXJWaWV3SW5pdFxue1xuICBwcml2YXRlIG5lc3RlZFByb3A6IE5lc3RlZFByb3BlcnR5PGFueT47XG4gIEBJbnB1dCgpXG4gIHRpbWVBY3RpdmUgPSBmYWxzZTtcblxuICBASW5wdXQoJ2NsclByb3BlcnR5Jykgc2V0IHByb3BlcnR5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5lc3RlZFByb3AgPSBuZXcgTmVzdGVkUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHByb3BlcnR5KCkge1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFByb3AucHJvcDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tbW9uU3RyaW5nczogQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjbHJQb3BvdmVyRXZlbnRzU2VydmljZTogQ2xyUG9wb3ZlckV2ZW50c1NlcnZpY2UsXG4gICAgZmlsdGVyQ29udGFpbmVyOiBDbHJEYXRhZ3JpZEZpbHRlclxuICApIHtcbiAgICBmaWx0ZXJDb250YWluZXIuc2V0RmlsdGVyKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsclBvcG92ZXJFdmVudHNTZXJ2aWNlLm91dHNpZGVDbGlja0Nsb3NlID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBhIHdheSB0byBwYXNzIGV4dGVybmFsIHBsYWNlaG9sZGVyIGFuZCBhcmlhLWxhYmVsIHRvIHRoZSBmaWx0ZXIgaW5wdXRcbiAgICovXG4gIEBJbnB1dCgnY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXInKSBtYXhQbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIGdldCBtYXhQbGFjZWhvbGRlclZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm1heFBsYWNlaG9sZGVyIHx8IHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlO1xuICB9XG5cbiAgQElucHV0KCdjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlcicpIG1pblBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgZ2V0IG1pblBsYWNlaG9sZGVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXIgfHwgdGhpcy5jb21tb25TdHJpbmdzLmtleXMubWluVmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ2NsckZpbHRlclZhbHVlJylcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZXM6IFtEYXRlLCBEYXRlXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgIGlmICh2YWx1ZXMgJiYgKHZhbHVlc1swXSAhPT0gdGhpcy5fZnJvbSB8fCB2YWx1ZXNbMV0gIT09IHRoaXMuX3RvKSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aGlzLl9mcm9tID0gdmFsdWVzWzBdO1xuICAgICAgICAgIHRoaXMuX2Zyb21UaW1lID0gdGhpcy5fZnJvbT8udG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fZnJvbSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZXNbMV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhpcy5fdG8gPSB2YWx1ZXNbMV07XG4gICAgICAgICAgdGhpcy5fdG9UaW1lID0gdGhpcy5fdG8/LnRvTG9jYWxlVGltZVN0cmluZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3RvID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VzLm5leHQodmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCdjbHJGaWx0ZXJWYWx1ZUNoYW5nZScpIGZpbHRlclZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCB2YWx1ZXMgYW5kIGFjY2Vzc29yXG4gICAqL1xuICBwcml2YXRlIF9mcm9tOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3RvOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3RvVGltZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSBfZnJvbVRpbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgcHVibGljIGdldCBmcm9tKCkge1xuICAgIHJldHVybiB0aGlzLl9mcm9tO1xuICB9XG5cbiAgcHVibGljIGdldCBmcm9tVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnJvbVRpbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9UaW1lO1xuICB9XG5cbiAgcHVibGljIHNldCBmcm9tKGZyb206IERhdGUpIHtcbiAgICBpZiAodHlwZW9mIGZyb20gPT09ICdvYmplY3QnICYmIGZyb20gIT09IHRoaXMuX2Zyb20pIHtcbiAgICAgIGlmIChmcm9tICYmIHR5cGVvZiBmcm9tLnNldEhvdXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZyb20uc2V0SG91cnMoMCwgMCwgMCwgMCk7IC8vIHNldCBmcm9tLWRhdGUgdG8gc3RhcnQgb2YgZGF5XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mcm9tVGltZSkge1xuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXMsIHNlY29uZHNdID0gdGhpcy5mcm9tVGltZS5zcGxpdCgnOicpLm1hcChuID0+IHBhcnNlSW50KG4pKTtcbiAgICAgICAgZnJvbS5zZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcyB8fCAwLCAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zyb20gPSBmcm9tO1xuICAgICAgdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9mcm9tLCB0aGlzLl90b10pO1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLl9mcm9tLCB0aGlzLl90b10pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXQgZnJvbVRpbWUoZnJvbXRpbWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Zyb21UaW1lID0gZnJvbXRpbWU7XG4gICAgaWYgKHRoaXMuX2Zyb21UaW1lICYmIHRoaXMuX2Zyb20pIHtcbiAgICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSB0aGlzLl9mcm9tVGltZS5zcGxpdCgnOicpLm1hcChuID0+IHBhcnNlSW50KG4pKTtcbiAgICAgIHRoaXMuX2Zyb20uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfHwgMCwgMCk7XG4gICAgICB0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB0bygpIHtcbiAgICByZXR1cm4gdGhpcy5fdG87XG4gIH1cblxuICBwdWJsaWMgc2V0IHRvKHRvOiBEYXRlKSB7XG4gICAgaWYgKHR5cGVvZiB0byA9PT0gJ29iamVjdCcgJiYgdG8gIT09IHRoaXMuX3RvKSB7XG4gICAgICBpZiAodG8gJiYgdHlwZW9mIHRvLnNldEhvdXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7IC8vIHNldCB0by1kYXRlIHRvIGVuZCBvZiBkYXlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRvVGltZSkge1xuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXMsIHNlY29uZHNdID0gdGhpcy50b1RpbWUuc3BsaXQoJzonKS5tYXAobiA9PiBwYXJzZUludChuKSk7XG4gICAgICAgIHRvLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIHx8IDAsIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5fdG8gPSB0bztcbiAgICAgIHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fZnJvbSwgdGhpcy5fdG9dKTtcbiAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5fZnJvbSwgdGhpcy5fdG9dKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0IHRvVGltZSh0b3RpbWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RvVGltZSA9IHRvdGltZTtcbiAgICBpZiAodGhpcy5fdG9UaW1lICYmIHRoaXMuX3RvKSB7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXMsIHNlY29uZHNdID0gdGhpcy5fdG9UaW1lLnNwbGl0KCc6JykubWFwKG4gPT4gcGFyc2VJbnQobikpO1xuICAgICAgdGhpcy5fdG8uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfHwgMCwgMCk7XG4gICAgICB0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZmlsdGVyIGlzIGN1cnJlbnRseSBhY3RpdmUsIChhdCBsZWFzdCBvbmUgaW5wdXQgaXMgc2V0KVxuICAgKi9cbiAgcHVibGljIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mcm9tICE9PSBudWxsIHx8IHRoaXMuX3RvICE9PSBudWxsO1xuICB9XG5cbiAgYWNjZXB0cyhpdGVtOiBUKTogYm9vbGVhbiB7XG4gICAgbGV0IHByb3BWYWx1ZSA9IHRoaXMubmVzdGVkUHJvcCA/IHRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUoaXRlbSkgOiBpdGVtO1xuICAgIGlmIChwcm9wVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3BWYWx1ZSA9IG5ldyBEYXRlKHByb3BWYWx1ZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mcm9tICE9PSBudWxsICYmICghKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IHByb3BWYWx1ZS5nZXRUaW1lKCkgPCB0aGlzLl9mcm9tLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RvICE9PSBudWxsICYmICghKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IHByb3BWYWx1ZS5nZXRUaW1lKCkgPiB0aGlzLl90by5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNlcnZhYmxlIHJlcXVpcmVkIGFzIHBhcnQgb2YgdGhlIEZpbHRlciBpbnRlcmZhY2VcbiAgICovXG4gIHByaXZhdGUgX2NoYW5nZXMgPSBuZXcgU3ViamVjdDxbRGF0ZSwgRGF0ZV0+KCk7XG5cbiAgLy8gV2UgZG8gbm90IHdhbnQgdG8gZXhwb3NlIHRoZSBTdWJqZWN0IGl0c2VsZiwgYnV0IHRoZSBPYnNlcnZhYmxlIHdoaWNoIGlzIHJlYWQtb25seVxuICBwdWJsaWMgZ2V0IGNoYW5nZXMoKTogT2JzZXJ2YWJsZTxbRGF0ZSwgRGF0ZV0+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcGVydHk6IHRoaXMubmVzdGVkUHJvcCxcbiAgICAgIGZyb206IHRoaXMuX2Zyb20sXG4gICAgICB0bzogdGhpcy5fdG8sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLl9mcm9tID0gbnVsbDtcbiAgICB0aGlzLl90byA9IG51bGw7XG4gICAgdGhpcy5mcm9tVGltZSA9IG51bGw7XG4gICAgdGhpcy50b1RpbWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fZnJvbSwgdGhpcy5fdG9dKTtcbiAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gIH1cblxuICBwdWJsaWMgZXF1YWxzKG90aGVyOiBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZTxULCBhbnk+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyID09PSB0aGlzO1xuICB9XG59XG4iLCI8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tbGluayBidG4tdHJhc2hcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiPlxuICA8Y2RzLWljb24gc2hhcGU9XCJ0cmFzaFwiPjwvY2RzLWljb24+XG48L2J1dHRvbj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhdGltZUFjdGl2ZVwiPlxuICA8Y2xyLWRhdGUtY29udGFpbmVyPlxuICAgIDxpbnB1dFxuICAgICAgI2lucHV0X2Zyb21cbiAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgIG5hbWU9XCJmcm9tXCJcbiAgICAgIGNsYXNzPVwiZGF0YWdyaWQtZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgWyhjbHJEYXRlKV09XCJmcm9tXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJtaW5QbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibWluUGxhY2Vob2xkZXJWYWx1ZVwiXG4gICAgLz5cbiAgPC9jbHItZGF0ZS1jb250YWluZXI+XG4gIDxjbHItZGF0ZS1jb250YWluZXI+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICBuYW1lPVwidG9cIlxuICAgICAgY2xhc3M9XCJkYXRhZ3JpZC1kYXRlLWZpbHRlci1pbnB1dFwiXG4gICAgICBbKGNsckRhdGUpXT1cInRvXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJtYXhQbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibWF4UGxhY2Vob2xkZXJWYWx1ZVwiXG4gICAgLz5cbiAgPC9jbHItZGF0ZS1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0aW1lQWN0aXZlXCI+XG4gIDxjbHItZGF0ZS10aW1lLWNvbnRhaW5lcj5cbiAgICA8Y2xyLWRhdGUtY29udGFpbmVyIGNsYXNzPVwidGltZS1maWx0ZXItYWN0aXZlXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI2lucHV0X2Zyb21cbiAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICBuYW1lPVwiZnJvbVwiXG4gICAgICAgIGNsYXNzPVwiZGF0YWdyaWQtZGF0ZS1maWx0ZXItaW5wdXQgdGltZS1maWx0ZXItYWN0aXZlLWlucHV0XCJcbiAgICAgICAgWyhjbHJEYXRlKV09XCJmcm9tXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1pblBsYWNlaG9sZGVyVmFsdWVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm1pblBsYWNlaG9sZGVyVmFsdWVcIlxuICAgICAgLz5cbiAgICA8L2Nsci1kYXRlLWNvbnRhaW5lcj5cbiAgICA8aW5wdXQgY2xyVGltZSB0eXBlPVwidGltZVwiIGNsYXNzPVwidGltZS1maWx0ZXItaW5wdXRcIiBbKG5nTW9kZWwpXT1cImZyb21UaW1lXCIgLz5cbiAgPC9jbHItZGF0ZS10aW1lLWNvbnRhaW5lcj5cbiAgPGNsci1kYXRlLXRpbWUtY29udGFpbmVyPlxuICAgIDxjbHItZGF0ZS1jb250YWluZXIgY2xhc3M9XCJ0aW1lLWZpbHRlci1hY3RpdmVcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgIG5hbWU9XCJ0b1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YWdyaWQtZGF0ZS1maWx0ZXItaW5wdXQgdGltZS1maWx0ZXItYWN0aXZlLWlucHV0XCJcbiAgICAgICAgWyhjbHJEYXRlKV09XCJ0b1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJtYXhQbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJtYXhQbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgIC8+XG4gICAgPC9jbHItZGF0ZS1jb250YWluZXI+XG4gICAgPGlucHV0IGNsclRpbWUgdHlwZT1cInRpbWVcIiBjbGFzcz1cInRpbWUtZmlsdGVyLWlucHV0XCIgWyhuZ01vZGVsKV09XCJ0b1RpbWVcIiAvPlxuICA8L2Nsci1kYXRlLXRpbWUtY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZGF0ZS1maWx0ZXIvZGF0ZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZGF0ZS1maWx0ZXIvZGF0ZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFFakIsdUJBQXVCLEdBQ3hCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFFekQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQU9qQyxNQUFNLE9BQU8sc0JBQXNCO0lBV2pDLElBQTBCLFFBQVEsQ0FBQyxLQUFhO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQ1UsYUFBc0MsRUFDdEMsdUJBQWdELEVBQ3hELGVBQWtDO1FBRjFCLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUN0Qyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBaEIxRCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBSW5CLGFB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QUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQzs4R0FwTlUsc0JBQXNCO2tHQUF0QixzQkFBc0IsMFlDbEJuQyxnOURBMERBOzsyRkR4Q2Esc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLGlCQUFpQjtrS0FTM0IsVUFBVTtzQkFEVCxLQUFLO2dCQUdOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLb0IsUUFBUTtzQkFBakMsS0FBSzt1QkFBQyxhQUFhO2dCQXVCYyxjQUFjO3NCQUEvQyxLQUFLO3VCQUFDLHlCQUF5QjtnQkFNRSxjQUFjO3NCQUEvQyxLQUFLO3VCQUFDLHlCQUF5QjtnQkFPckIsS0FBSztzQkFEZixLQUFLO3VCQUFDLGdCQUFnQjtnQkFxQlMsaUJBQWlCO3NCQUFoRCxNQUFNO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDbHJDb21tb25TdHJpbmdzU2VydmljZSxcbiAgQ2xyRGF0YWdyaWRGaWx0ZXIsXG4gIENsckRhdGFncmlkRmlsdGVySW50ZXJmYWNlLFxuICBDbHJQb3BvdmVyRXZlbnRzU2VydmljZSxcbn0gZnJvbSAnQGNsci9hbmd1bGFyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5lc3RlZFByb3BlcnR5IH0gZnJvbSAnLi9uZXN0ZWQtcHJvcGVydHknO1xuaW1wb3J0IHsgQ2xhcml0eUljb25zLCB0cmFzaEljb24gfSBmcm9tICdAY2RzL2NvcmUvaWNvbic7XG5cbkNsYXJpdHlJY29ucy5hZGRJY29ucyh0cmFzaEljb24pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItZGF0ZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWZpbHRlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJEYXRlRmlsdGVyQ29tcG9uZW50PFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9PlxuICBpbXBsZW1lbnRzIENsckRhdGFncmlkRmlsdGVySW50ZXJmYWNlPFQ+LCBBZnRlclZpZXdJbml0XG57XG4gIHByaXZhdGUgbmVzdGVkUHJvcDogTmVzdGVkUHJvcGVydHk8YW55PjtcbiAgQElucHV0KClcbiAgdGltZUFjdGl2ZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBkYXRlVmFsaWRhdGlvbkVycm9yOiBzdHJpbmc7XG5cbiAgdmFsRXJyb3IgPSBmYWxzZTtcblxuICBASW5wdXQoJ2NsclByb3BlcnR5Jykgc2V0IHByb3BlcnR5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5lc3RlZFByb3AgPSBuZXcgTmVzdGVkUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHByb3BlcnR5KCkge1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFByb3AucHJvcDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tbW9uU3RyaW5nczogQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjbHJQb3BvdmVyRXZlbnRzU2VydmljZTogQ2xyUG9wb3ZlckV2ZW50c1NlcnZpY2UsXG4gICAgZmlsdGVyQ29udGFpbmVyOiBDbHJEYXRhZ3JpZEZpbHRlclxuICApIHtcbiAgICBmaWx0ZXJDb250YWluZXIuc2V0RmlsdGVyKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsclBvcG92ZXJFdmVudHNTZXJ2aWNlLm91dHNpZGVDbGlja0Nsb3NlID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBhIHdheSB0byBwYXNzIGV4dGVybmFsIHBsYWNlaG9sZGVyIGFuZCBhcmlhLWxhYmVsIHRvIHRoZSBmaWx0ZXIgaW5wdXRcbiAgICovXG4gIEBJbnB1dCgnY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXInKSBtYXhQbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIGdldCBtYXhQbGFjZWhvbGRlclZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm1heFBsYWNlaG9sZGVyIHx8IHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlO1xuICB9XG5cbiAgQElucHV0KCdjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlcicpIG1pblBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgZ2V0IG1pblBsYWNlaG9sZGVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXIgfHwgdGhpcy5jb21tb25TdHJpbmdzLmtleXMubWluVmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ2NsckZpbHRlclZhbHVlJylcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZXM6IFtEYXRlLCBEYXRlXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgIGlmICh2YWx1ZXMgJiYgKHZhbHVlc1swXSAhPT0gdGhpcy5fZnJvbSB8fCB2YWx1ZXNbMV0gIT09IHRoaXMuX3RvKSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aGlzLl9mcm9tID0gdmFsdWVzWzBdO1xuICAgICAgICAgIHRoaXMuX2Zyb21UaW1lID0gdGhpcy5fZnJvbT8udG9Mb2NhbGVUaW1lU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2Zyb20gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVzWzFdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRoaXMuX3RvID0gdmFsdWVzWzFdO1xuICAgICAgICAgIHRoaXMuX3RvVGltZSA9IHRoaXMuX3RvPy50b0xvY2FsZVRpbWVTdHJpbmcoKS5zdWJzdHJpbmcoMCwgNSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdG8gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoYW5nZXMubmV4dCh2YWx1ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoJ2NsckZpbHRlclZhbHVlQ2hhbmdlJykgZmlsdGVyVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEludGVybmFsIHZhbHVlcyBhbmQgYWNjZXNzb3JcbiAgICovXG4gIHByaXZhdGUgX2Zyb206IERhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfdG86IERhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfdG9UaW1lOiBzdHJpbmcgfCBudWxsO1xuICBwcml2YXRlIF9mcm9tVGltZTogc3RyaW5nIHwgbnVsbDtcblxuICBwdWJsaWMgZ2V0IGZyb20oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb207XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZyb21UaW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9mcm9tVGltZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9UaW1lKCkge1xuICAgIHJldHVybiB0aGlzLl90b1RpbWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGZyb20oZnJvbTogRGF0ZSkge1xuICAgIGlmICh0eXBlb2YgZnJvbSA9PT0gJ29iamVjdCcgJiYgZnJvbSAhPT0gdGhpcy5fZnJvbSkge1xuICAgICAgaWYgKCF0aGlzLnRpbWVBY3RpdmUgJiYgZnJvbSAmJiB0eXBlb2YgZnJvbS5zZXRIb3VycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmcm9tLnNldEhvdXJzKDAsIDAsIDAsIDApOyAvLyBzZXQgZnJvbS1kYXRlIHRvIHN0YXJ0IG9mIGRheVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmZyb21UaW1lICYmIGZyb20gJiYgZnJvbT8udG9Mb2NhbGVUaW1lU3RyaW5nKCkgIT09ICcwMDowMDowMCcpIHtcbiAgICAgICAgdGhpcy5mcm9tVGltZSA9IGZyb20/LnRvTG9jYWxlVGltZVN0cmluZygpLnN1YnN0cmluZygwLCA1KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZyb21UaW1lICYmIGZyb20pIHtcbiAgICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IHRoaXMuZnJvbVRpbWUuc3BsaXQoJzonKS5tYXAobiA9PiBwYXJzZUludChuKSk7XG4gICAgICAgIGZyb20uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfHwgMCwgMCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9mcm9tID0gZnJvbTtcbiAgICAgIHRoaXMudmFsaWRhdGVEYXRlcygpO1xuICAgICAgdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9mcm9tLCB0aGlzLl90b10pO1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLl9mcm9tLCB0aGlzLl90b10pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXQgZnJvbVRpbWUoZnJvbXRpbWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Zyb21UaW1lID0gZnJvbXRpbWU7XG4gICAgaWYgKHRoaXMuX2Zyb21UaW1lICYmIHRoaXMuX2Zyb20pIHtcbiAgICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSB0aGlzLl9mcm9tVGltZS5zcGxpdCgnOicpLm1hcChuID0+IHBhcnNlSW50KG4pKTtcbiAgICAgIHRoaXMuX2Zyb20uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfHwgMCwgMCk7XG4gICAgICB0aGlzLnZhbGlkYXRlRGF0ZXMoKTtcbiAgICAgIHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fZnJvbSwgdGhpcy5fdG9dKTtcbiAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5fZnJvbSwgdGhpcy5fdG9dKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvKCkge1xuICAgIHJldHVybiB0aGlzLl90bztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdG8odG86IERhdGUpIHtcbiAgICBpZiAodHlwZW9mIHRvID09PSAnb2JqZWN0JyAmJiB0byAhPT0gdGhpcy5fdG8pIHtcbiAgICAgIGlmICghdGhpcy50aW1lQWN0aXZlICYmIHRvICYmIHR5cGVvZiB0by5zZXRIb3VycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0by5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpOyAvLyBzZXQgdG8tZGF0ZSB0byBlbmQgb2YgZGF5XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudG9UaW1lICYmIHRvPy50b0xvY2FsZVRpbWVTdHJpbmcoKSAhPT0gJzIzOjU5OjU5JyAmJiB0bz8udG9Mb2NhbGVUaW1lU3RyaW5nKCkgIT09ICcwMDowMDowMCcpIHtcbiAgICAgICAgdGhpcy50b1RpbWUgPSB0bz8udG9Mb2NhbGVUaW1lU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudG9UaW1lKSB7XG4gICAgICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSB0aGlzLnRvVGltZS5zcGxpdCgnOicpLm1hcChuID0+IHBhcnNlSW50KG4pKTtcbiAgICAgICAgdG8uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfHwgMCwgMCk7XG4gICAgICB9XG4gICAgICB0aGlzLl90byA9IHRvO1xuICAgICAgdGhpcy52YWxpZGF0ZURhdGVzKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldCB0b1RpbWUodG90aW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90b1RpbWUgPSB0b3RpbWU7XG4gICAgaWYgKHRoaXMuX3RvVGltZSAmJiB0aGlzLl90bykge1xuICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IHRoaXMuX3RvVGltZS5zcGxpdCgnOicpLm1hcChuID0+IHBhcnNlSW50KG4pKTtcbiAgICAgIHRoaXMuX3RvLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIHx8IDAsIDApO1xuICAgICAgdGhpcy52YWxpZGF0ZURhdGVzKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZmlsdGVyIGlzIGN1cnJlbnRseSBhY3RpdmUsIChhdCBsZWFzdCBvbmUgaW5wdXQgaXMgc2V0KVxuICAgKi9cbiAgcHVibGljIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mcm9tICE9PSBudWxsIHx8IHRoaXMuX3RvICE9PSBudWxsO1xuICB9XG5cbiAgYWNjZXB0cyhpdGVtOiBUKTogYm9vbGVhbiB7XG4gICAgbGV0IHByb3BWYWx1ZSA9IHRoaXMubmVzdGVkUHJvcCA/IHRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUoaXRlbSkgOiBpdGVtO1xuICAgIGlmIChwcm9wVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3BWYWx1ZSA9IG5ldyBEYXRlKHByb3BWYWx1ZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mcm9tICE9PSBudWxsICYmICghKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IHByb3BWYWx1ZS5nZXRUaW1lKCkgPCB0aGlzLl9mcm9tLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RvICE9PSBudWxsICYmICghKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IHByb3BWYWx1ZS5nZXRUaW1lKCkgPiB0aGlzLl90by5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNlcnZhYmxlIHJlcXVpcmVkIGFzIHBhcnQgb2YgdGhlIEZpbHRlciBpbnRlcmZhY2VcbiAgICovXG4gIHByaXZhdGUgX2NoYW5nZXMgPSBuZXcgU3ViamVjdDxbRGF0ZSwgRGF0ZV0+KCk7XG5cbiAgLy8gV2UgZG8gbm90IHdhbnQgdG8gZXhwb3NlIHRoZSBTdWJqZWN0IGl0c2VsZiwgYnV0IHRoZSBPYnNlcnZhYmxlIHdoaWNoIGlzIHJlYWQtb25seVxuICBwdWJsaWMgZ2V0IGNoYW5nZXMoKTogT2JzZXJ2YWJsZTxbRGF0ZSwgRGF0ZV0+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcGVydHk6IHRoaXMubmVzdGVkUHJvcCxcbiAgICAgIGZyb206IHRoaXMuX2Zyb20sXG4gICAgICB0bzogdGhpcy5fdG8sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLl9mcm9tID0gbnVsbDtcbiAgICB0aGlzLl90byA9IG51bGw7XG4gICAgdGhpcy5mcm9tVGltZSA9IG51bGw7XG4gICAgdGhpcy50b1RpbWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fZnJvbSwgdGhpcy5fdG9dKTtcbiAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuX2Zyb20sIHRoaXMuX3RvXSk7XG4gIH1cblxuICBwdWJsaWMgZXF1YWxzKG90aGVyOiBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZTxULCBhbnk+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyID09PSB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURhdGVzKCkge1xuICAgIGlmICh0aGlzLl9mcm9tICYmIHRoaXMuX3RvKSB7XG4gICAgICB0aGlzLnZhbEVycm9yID0gdGhpcy5fZnJvbSA+IHRoaXMuX3RvO1xuICAgIH1cbiAgfVxufVxuIiwiPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpbmsgYnRuLXRyYXNoXCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj5cbiAgPGNkcy1pY29uIHNoYXBlPVwidHJhc2hcIj48L2Nkcy1pY29uPlxuPC9idXR0b24+XG48bmctY29udGFpbmVyICpuZ0lmPVwiIXRpbWVBY3RpdmVcIj5cbiAgPGNsci1kYXRlLWNvbnRhaW5lcj5cbiAgICA8aW5wdXRcbiAgICAgICNpbnB1dF9mcm9tXG4gICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICBuYW1lPVwiZnJvbVwiXG4gICAgICBjbGFzcz1cImRhdGFncmlkLWRhdGUtZmlsdGVyLWlucHV0XCJcbiAgICAgIFsoY2xyRGF0ZSldPVwiZnJvbVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwibWluUGxhY2Vob2xkZXJWYWx1ZVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm1pblBsYWNlaG9sZGVyVmFsdWVcIlxuICAgIC8+XG4gIDwvY2xyLWRhdGUtY29udGFpbmVyPlxuICA8Y2xyLWRhdGUtY29udGFpbmVyPlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgbmFtZT1cInRvXCJcbiAgICAgIGNsYXNzPVwiZGF0YWdyaWQtZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgWyhjbHJEYXRlKV09XCJ0b1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwibWF4UGxhY2Vob2xkZXJWYWx1ZVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm1heFBsYWNlaG9sZGVyVmFsdWVcIlxuICAgIC8+XG4gIDwvY2xyLWRhdGUtY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidGltZUFjdGl2ZVwiPlxuICA8Y2xyLWRhdGUtdGltZS1jb250YWluZXI+XG4gICAgPGNsci1kYXRlLWNvbnRhaW5lciBjbGFzcz1cInRpbWUtZmlsdGVyLWFjdGl2ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNpbnB1dF9mcm9tXG4gICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgbmFtZT1cImZyb21cIlxuICAgICAgICBjbGFzcz1cImRhdGFncmlkLWRhdGUtZmlsdGVyLWlucHV0IHRpbWUtZmlsdGVyLWFjdGl2ZS1pbnB1dFwiXG4gICAgICAgIFsoY2xyRGF0ZSldPVwiZnJvbVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJtaW5QbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJtaW5QbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgIC8+XG4gICAgPC9jbHItZGF0ZS1jb250YWluZXI+XG4gICAgPGlucHV0IGNsclRpbWUgdHlwZT1cInRpbWVcIiBjbGFzcz1cInRpbWUtZmlsdGVyLWlucHV0XCIgc3RlcD1cIjYwXCIgWyhuZ01vZGVsKV09XCJmcm9tVGltZVwiIC8+XG4gIDwvY2xyLWRhdGUtdGltZS1jb250YWluZXI+XG4gIDxjbHItZGF0ZS10aW1lLWNvbnRhaW5lcj5cbiAgICA8Y2xyLWRhdGUtY29udGFpbmVyIGNsYXNzPVwidGltZS1maWx0ZXItYWN0aXZlXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICBuYW1lPVwidG9cIlxuICAgICAgICBjbGFzcz1cImRhdGFncmlkLWRhdGUtZmlsdGVyLWlucHV0IHRpbWUtZmlsdGVyLWFjdGl2ZS1pbnB1dFwiXG4gICAgICAgIFsoY2xyRGF0ZSldPVwidG9cIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwibWF4UGxhY2Vob2xkZXJWYWx1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibWF4UGxhY2Vob2xkZXJWYWx1ZVwiXG4gICAgICAvPlxuICAgIDwvY2xyLWRhdGUtY29udGFpbmVyPlxuICAgIDxpbnB1dCBjbHJUaW1lIHR5cGU9XCJ0aW1lXCIgY2xhc3M9XCJ0aW1lLWZpbHRlci1pbnB1dFwiIHN0ZXA9XCI2MFwiIFsobmdNb2RlbCldPVwidG9UaW1lXCIgLz5cbiAgPC9jbHItZGF0ZS10aW1lLWNvbnRhaW5lcj5cbiAgPGNsci1jb250cm9sLWVycm9yICpuZ0lmPVwidmFsRXJyb3JcIlxuICAgID57eyBkYXRlVmFsaWRhdGlvbkVycm9yIHx8ICdEYXRlIFwiZnJvbVwiIG11c3QgYmUgYmVmb3JlIGRhdGUgXCJ0b1wiIScgfX1cbiAgPC9jbHItY29udHJvbC1lcnJvcj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
package/fesm2022/clr-addons.mjs
CHANGED
|
@@ -6435,6 +6435,7 @@ class ClrDateFilterComponent {
|
|
|
6435
6435
|
this.commonStrings = commonStrings;
|
|
6436
6436
|
this.clrPopoverEventsService = clrPopoverEventsService;
|
|
6437
6437
|
this.timeActive = false;
|
|
6438
|
+
this.valError = false;
|
|
6438
6439
|
this.filterValueChange = new EventEmitter();
|
|
6439
6440
|
/**
|
|
6440
6441
|
* Internal values and accessor
|
|
@@ -6461,14 +6462,14 @@ class ClrDateFilterComponent {
|
|
|
6461
6462
|
if (values && (values[0] !== this._from || values[1] !== this._to)) {
|
|
6462
6463
|
if (typeof values[0] === 'object') {
|
|
6463
6464
|
this._from = values[0];
|
|
6464
|
-
this._fromTime = this._from?.toLocaleTimeString();
|
|
6465
|
+
this._fromTime = this._from?.toLocaleTimeString().substring(0, 5);
|
|
6465
6466
|
}
|
|
6466
6467
|
else {
|
|
6467
6468
|
this._from = null;
|
|
6468
6469
|
}
|
|
6469
6470
|
if (typeof values[1] === 'object') {
|
|
6470
6471
|
this._to = values[1];
|
|
6471
|
-
this._toTime = this._to?.toLocaleTimeString();
|
|
6472
|
+
this._toTime = this._to?.toLocaleTimeString().substring(0, 5);
|
|
6472
6473
|
}
|
|
6473
6474
|
else {
|
|
6474
6475
|
this._to = null;
|
|
@@ -6488,14 +6489,18 @@ class ClrDateFilterComponent {
|
|
|
6488
6489
|
}
|
|
6489
6490
|
set from(from) {
|
|
6490
6491
|
if (typeof from === 'object' && from !== this._from) {
|
|
6491
|
-
if (from && typeof from.setHours === 'function') {
|
|
6492
|
+
if (!this.timeActive && from && typeof from.setHours === 'function') {
|
|
6492
6493
|
from.setHours(0, 0, 0, 0); // set from-date to start of day
|
|
6493
6494
|
}
|
|
6494
|
-
if (this.fromTime) {
|
|
6495
|
+
if (!this.fromTime && from && from?.toLocaleTimeString() !== '00:00:00') {
|
|
6496
|
+
this.fromTime = from?.toLocaleTimeString().substring(0, 5);
|
|
6497
|
+
}
|
|
6498
|
+
if (this.fromTime && from) {
|
|
6495
6499
|
const [hours, minutes, seconds] = this.fromTime.split(':').map(n => parseInt(n));
|
|
6496
6500
|
from.setHours(hours, minutes, seconds || 0, 0);
|
|
6497
6501
|
}
|
|
6498
6502
|
this._from = from;
|
|
6503
|
+
this.validateDates();
|
|
6499
6504
|
this._changes.next([this._from, this._to]);
|
|
6500
6505
|
this.filterValueChange.emit([this._from, this._to]);
|
|
6501
6506
|
}
|
|
@@ -6505,6 +6510,7 @@ class ClrDateFilterComponent {
|
|
|
6505
6510
|
if (this._fromTime && this._from) {
|
|
6506
6511
|
const [hours, minutes, seconds] = this._fromTime.split(':').map(n => parseInt(n));
|
|
6507
6512
|
this._from.setHours(hours, minutes, seconds || 0, 0);
|
|
6513
|
+
this.validateDates();
|
|
6508
6514
|
this._changes.next([this._from, this._to]);
|
|
6509
6515
|
this.filterValueChange.emit([this._from, this._to]);
|
|
6510
6516
|
}
|
|
@@ -6514,14 +6520,18 @@ class ClrDateFilterComponent {
|
|
|
6514
6520
|
}
|
|
6515
6521
|
set to(to) {
|
|
6516
6522
|
if (typeof to === 'object' && to !== this._to) {
|
|
6517
|
-
if (to && typeof to.setHours === 'function') {
|
|
6523
|
+
if (!this.timeActive && to && typeof to.setHours === 'function') {
|
|
6518
6524
|
to.setHours(23, 59, 59, 999); // set to-date to end of day
|
|
6519
6525
|
}
|
|
6526
|
+
if (!this.toTime && to?.toLocaleTimeString() !== '23:59:59' && to?.toLocaleTimeString() !== '00:00:00') {
|
|
6527
|
+
this.toTime = to?.toLocaleTimeString().substring(0, 5);
|
|
6528
|
+
}
|
|
6520
6529
|
if (this.toTime) {
|
|
6521
6530
|
const [hours, minutes, seconds] = this.toTime.split(':').map(n => parseInt(n));
|
|
6522
6531
|
to.setHours(hours, minutes, seconds || 0, 0);
|
|
6523
6532
|
}
|
|
6524
6533
|
this._to = to;
|
|
6534
|
+
this.validateDates();
|
|
6525
6535
|
this._changes.next([this._from, this._to]);
|
|
6526
6536
|
this.filterValueChange.emit([this._from, this._to]);
|
|
6527
6537
|
}
|
|
@@ -6531,6 +6541,7 @@ class ClrDateFilterComponent {
|
|
|
6531
6541
|
if (this._toTime && this._to) {
|
|
6532
6542
|
const [hours, minutes, seconds] = this._toTime.split(':').map(n => parseInt(n));
|
|
6533
6543
|
this._to.setHours(hours, minutes, seconds || 0, 0);
|
|
6544
|
+
this.validateDates();
|
|
6534
6545
|
this._changes.next([this._from, this._to]);
|
|
6535
6546
|
this.filterValueChange.emit([this._from, this._to]);
|
|
6536
6547
|
}
|
|
@@ -6579,14 +6590,21 @@ class ClrDateFilterComponent {
|
|
|
6579
6590
|
equals(other) {
|
|
6580
6591
|
return other === this;
|
|
6581
6592
|
}
|
|
6593
|
+
validateDates() {
|
|
6594
|
+
if (this._from && this._to) {
|
|
6595
|
+
this.valError = this._from > this._to;
|
|
6596
|
+
}
|
|
6597
|
+
}
|
|
6582
6598
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterComponent, deps: [{ token: i2.ClrCommonStringsService }, { token: i2.ClrPopoverEventsService }, { token: i2.ClrDatagridFilter }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6583
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrDateFilterComponent, selector: "clr-date-filter", inputs: { timeActive: "timeActive", property: ["clrProperty", "property"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], value: ["clrFilterValue", "value"] }, outputs: { filterValueChange: "clrFilterValueChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input
|
|
6599
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ClrDateFilterComponent, selector: "clr-date-filter", inputs: { timeActive: "timeActive", dateValidationError: "dateValidationError", property: ["clrProperty", "property"], maxPlaceholder: ["clrFilterMaxPlaceholder", "maxPlaceholder"], minPlaceholder: ["clrFilterMinPlaceholder", "minPlaceholder"], value: ["clrFilterValue", "value"] }, outputs: { filterValueChange: "clrFilterValueChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" step=\"60\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" step=\"60\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n <clr-control-error *ngIf=\"valError\"\n >{{ dateValidationError || 'Date \"from\" must be before date \"to\"!' }}\n </clr-control-error>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input,.time-filter-input{width:4.5rem!important}\n"], dependencies: [{ kind: "directive", type: i2.CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: i2.ClrControlError, selector: "clr-control-error" }, { kind: "component", type: i2.ClrDateContainer, selector: "clr-date-container", inputs: ["clrPosition"] }, { kind: "directive", type: i2.ClrDateInput, selector: "[clrDate]", inputs: ["placeholder", "clrDate", "min", "max", "disabled"], outputs: ["clrDateChange"] }, { kind: "directive", type: i2.ClrDateInputValidator, selector: "[clrDate]" }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrDateTimeContainer, selector: "clr-date-time-container" }, { kind: "directive", type: ClrTimeInput, selector: "[clrTime]" }] }); }
|
|
6584
6600
|
}
|
|
6585
6601
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ClrDateFilterComponent, decorators: [{
|
|
6586
6602
|
type: Component,
|
|
6587
|
-
args: [{ selector: 'clr-date-filter', template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input
|
|
6603
|
+
args: [{ selector: 'clr-date-filter', template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilter()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<ng-container *ngIf=\"!timeActive\">\n <clr-date-container>\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <clr-date-container>\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n</ng-container>\n<ng-container *ngIf=\"timeActive\">\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n #input_from\n type=\"date\"\n name=\"from\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"from\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" step=\"60\" [(ngModel)]=\"fromTime\" />\n </clr-date-time-container>\n <clr-date-time-container>\n <clr-date-container class=\"time-filter-active\">\n <input\n type=\"date\"\n name=\"to\"\n class=\"datagrid-date-filter-input time-filter-active-input\"\n [(clrDate)]=\"to\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-date-container>\n <input clrTime type=\"time\" class=\"time-filter-input\" step=\"60\" [(ngModel)]=\"toTime\" />\n </clr-date-time-container>\n <clr-control-error *ngIf=\"valError\"\n >{{ dateValidationError || 'Date \"from\" must be before date \"to\"!' }}\n </clr-control-error>\n</ng-container>\n", styles: [".btn-trash{position:absolute;top:15px;right:40px;padding:0}.time-filter-active{width:12rem}.time-filter-active-input,.time-filter-input{width:4.5rem!important}\n"] }]
|
|
6588
6604
|
}], ctorParameters: () => [{ type: i2.ClrCommonStringsService }, { type: i2.ClrPopoverEventsService }, { type: i2.ClrDatagridFilter }], propDecorators: { timeActive: [{
|
|
6589
6605
|
type: Input
|
|
6606
|
+
}], dateValidationError: [{
|
|
6607
|
+
type: Input
|
|
6590
6608
|
}], property: [{
|
|
6591
6609
|
type: Input,
|
|
6592
6610
|
args: ['clrProperty']
|