@valtimo/logging 12.5.1 → 12.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,11 +15,11 @@
15
15
  */
16
16
  import { CommonModule } from '@angular/common';
17
17
  import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
18
- import { ReactiveFormsModule } from '@angular/forms';
18
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
19
19
  import { TrashCan16 } from '@carbon/icons';
20
20
  import { TranslateModule } from '@ngx-translate/core';
21
21
  import { CARBON_THEME, CurrentCarbonTheme } from '@valtimo/components';
22
- import { ButtonModule, DatePickerModule, DropdownModule, IconModule, InputModule, } from 'carbon-components-angular';
22
+ import { ButtonModule, DatePickerModule, DropdownModule, IconModule, InputModule, TimePickerModule, } from 'carbon-components-angular';
23
23
  import flatpickr from 'flatpickr';
24
24
  import { debounceTime, map, Subscription } from 'rxjs';
25
25
  import { LogLevel, } from '../../models';
@@ -43,7 +43,9 @@ export class LogSearchComponent {
43
43
  likeFormattedMessage: this.fb.control(''),
44
44
  level: this.fb.control({ content: '', selected: false }),
45
45
  beforeTimestamp: this.fb.control(''),
46
+ beforeTime: this.fb.control(''),
46
47
  afterTimestamp: this.fb.control(''),
48
+ afterTime: this.fb.control(''),
47
49
  properties: this.fb.array([
48
50
  this.fb.group({
49
51
  key: this.fb.control(''),
@@ -126,6 +128,24 @@ export class LogSearchComponent {
126
128
  this.addPropertySearchField();
127
129
  }
128
130
  }
131
+ initTimeForm(formValue) {
132
+ const { beforeTimestamp, afterTimestamp } = formValue;
133
+ if (!!beforeTimestamp) {
134
+ const { hours, minutes } = this.convertTimestampToTimeString(beforeTimestamp);
135
+ this.formGroup.patchValue({ beforeTime: `${hours}:${minutes}` }, { emitEvent: false });
136
+ }
137
+ if (!!afterTimestamp) {
138
+ const { hours, minutes } = this.convertTimestampToTimeString(afterTimestamp);
139
+ this.formGroup.patchValue({ afterTime: `${hours}:${minutes}` }, { emitEvent: false });
140
+ }
141
+ }
142
+ convertTimestampToTimeString(timestamp) {
143
+ const date = new Date(timestamp);
144
+ return {
145
+ hours: `0${date.getHours()}`.slice(-2),
146
+ minutes: `0${date.getMinutes()}`.slice(-2),
147
+ };
148
+ }
129
149
  mapFormValueToLogSearch() {
130
150
  const formValue = this.formGroup.getRawValue();
131
151
  const properties = formValue.properties.filter((property) => !!property.key && !!property.value);
@@ -134,8 +154,12 @@ export class LogSearchComponent {
134
154
  likeFormattedMessage: formValue.likeFormattedMessage,
135
155
  }),
136
156
  ...(!!formValue.level?.content && { level: formValue.level.content }),
137
- ...(!!formValue.afterTimestamp && { afterTimestamp: formValue.afterTimestamp }),
138
- ...(!!formValue.beforeTimestamp && { beforeTimestamp: formValue.beforeTimestamp }),
157
+ ...(!!formValue.afterTimestamp && {
158
+ afterTimestamp: this.mapTimeStamps(formValue.afterTimestamp, formValue.afterTime),
159
+ }),
160
+ ...(!!formValue.beforeTimestamp && {
161
+ beforeTimestamp: this.mapTimeStamps(formValue.beforeTimestamp, formValue.beforeTime),
162
+ }),
139
163
  ...(!!properties.length && { properties }),
140
164
  };
141
165
  }
@@ -155,14 +179,23 @@ export class LogSearchComponent {
155
179
  ...(searchRequest.properties && { properties: searchRequest.properties }),
156
180
  };
157
181
  }
182
+ mapTimeStamps(date, time) {
183
+ if (!time)
184
+ return date;
185
+ const timeValue = time.split(':');
186
+ const dateObject = new Date(date);
187
+ dateObject.setHours(+timeValue[0], +timeValue[1]);
188
+ return flatpickr.formatDate(dateObject, 'Z');
189
+ }
158
190
  setInitialForm() {
159
191
  const mappedFormValue = this.mapSearchRequestToFormValue(this.initSearchRequest);
160
192
  this.initLogItems(mappedFormValue);
161
193
  this.initPropertiesForm(mappedFormValue);
194
+ this.initTimeForm(mappedFormValue);
162
195
  this.formGroup.patchValue(mappedFormValue, { emitEvent: false });
163
196
  }
164
197
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LogSearchComponent, deps: [{ token: i1.CdsThemeService }, { token: i2.FormBuilder }, { token: i3.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
165
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: LogSearchComponent, isStandalone: true, selector: "valtimo-log-search", inputs: { initSearchRequest: "initSearchRequest" }, outputs: { searchSubmitEvent: "searchSubmitEvent" }, viewQueries: [{ propertyName: "_afterTimestampDatePicker", first: true, predicate: ["afterTimestamp"], descendants: true }, { propertyName: "_beforeTimestampDatePicker", first: true, predicate: ["beforeTimestamp"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label>\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp{display:flex;gap:16px}.valtimo-log-search__fields{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.valtimo-log-search__properties{display:flex;flex-direction:column;max-width:50%}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i3.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
198
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: LogSearchComponent, isStandalone: true, selector: "valtimo-log-search", inputs: { initSearchRequest: "initSearchRequest" }, outputs: { searchSubmitEvent: "searchSubmitEvent" }, viewQueries: [{ propertyName: "_afterTimestampDatePicker", first: true, predicate: ["afterTimestamp"], descendants: true }, { propertyName: "_beforeTimestampDatePicker", first: true, predicate: ["beforeTimestamp"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp,.valtimo-log-search__datetime{display:flex;gap:16px}.valtimo-log-search__message{grid-area:message}.valtimo-log-search__level{grid-area:level}.valtimo-log-search__fields{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);grid-template-areas:\"message timestamp\" \"level timestamp\"}.valtimo-log-search__timestamp{grid-area:timestamp;flex-direction:column}.valtimo-log-search__datetime{align-items:flex-end}.valtimo-log-search__properties{display:flex;flex-direction:column}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i3.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: TimePickerModule }, { kind: "component", type: i3.TimePicker, selector: "cds-timepicker, ibm-timepicker", inputs: ["invalid", "invalidText", "label", "hideLabel", "placeholder", "pattern", "id", "disabled", "value", "maxLength", "skeleton", "theme", "size"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
166
199
  }
167
200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LogSearchComponent, decorators: [{
168
201
  type: Component,
@@ -174,8 +207,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
174
207
  IconModule,
175
208
  InputModule,
176
209
  ReactiveFormsModule,
210
+ FormsModule,
177
211
  DatePickerModule,
178
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label>\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp{display:flex;gap:16px}.valtimo-log-search__fields{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.valtimo-log-search__properties{display:flex;flex-direction:column;max-width:50%}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n"] }]
212
+ TimePickerModule,
213
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp,.valtimo-log-search__datetime{display:flex;gap:16px}.valtimo-log-search__message{grid-area:message}.valtimo-log-search__level{grid-area:level}.valtimo-log-search__fields{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);grid-template-areas:\"message timestamp\" \"level timestamp\"}.valtimo-log-search__timestamp{grid-area:timestamp;flex-direction:column}.valtimo-log-search__datetime{align-items:flex-end}.valtimo-log-search__properties{display:flex;flex-direction:column}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n"] }]
179
214
  }], ctorParameters: () => [{ type: i1.CdsThemeService }, { type: i2.FormBuilder }, { type: i3.IconService }], propDecorators: { _afterTimestampDatePicker: [{
180
215
  type: ViewChild,
181
216
  args: ['afterTimestamp']
@@ -187,4 +222,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
187
222
  }], searchSubmitEvent: [{
188
223
  type: Output
189
224
  }] } });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2xvZ2dpbmcvc3JjL2xpYi9jb21wb25lbnRzL2xvZy1zZWFyY2gvbG9nLXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2xvZ2dpbmcvc3JjL2xpYi9jb21wb25lbnRzL2xvZy1zZWFyY2gvbG9nLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QixtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQW1CLGtCQUFrQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEYsT0FBTyxFQUNMLFlBQVksRUFFWixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLFVBQVUsRUFFVixXQUFXLEdBRVosTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLFlBQVksRUFBWSxHQUFHLEVBQWMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFJTCxRQUFRLEdBQ1QsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7QUFtQnRCLE1BQU0sT0FBTyxrQkFBa0I7SUE4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MkIsQ0FDbkYsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7SUFDakUsQ0FBQzsrR0E3S1Usa0JBQWtCO21HQUFsQixrQkFBa0Isb2FDbkUvQix1MUhBZ0hBLDB3QkR2REksWUFBWSx1TEFDWixlQUFlLDJGQUNmLFlBQVksZ01BQ1osY0FBYyxnc0JBQ2QsVUFBVSw0TkFDVixXQUFXLDJhQUNYLG1CQUFtQixtakNBQ25CLGdCQUFnQjs7NEZBR1Asa0JBQWtCO2tCQWpCOUIsU0FBUzsrQkFDRSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxVQUFVO3dCQUNWLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7cUJBQ2pCO3dJQUc2Qyx5QkFBeUI7c0JBQXRFLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNvQiwwQkFBMEI7c0JBQXhFLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUVaLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFDb0IsaUJBQWlCO3NCQUExQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUFycmF5LCBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUcmFzaENhbjE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q0FSQk9OX1RIRU1FLCBDZHNUaGVtZVNlcnZpY2UsIEN1cnJlbnRDYXJib25UaGVtZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIERhdGVQaWNrZXIsXG4gIERhdGVQaWNrZXJNb2R1bGUsXG4gIERyb3Bkb3duTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBJY29uU2VydmljZSxcbiAgSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxufSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCBmbGF0cGlja3IgZnJvbSAnZmxhdHBpY2tyJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgTG9nZ2luZ0V2ZW50UHJvcGVydHksXG4gIExvZ2dpbmdFdmVudFNlYXJjaEZvcm1WYWx1ZSxcbiAgTG9nZ2luZ0V2ZW50U2VhcmNoUmVxdWVzdCxcbiAgTG9nTGV2ZWwsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tbG9nLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2ctc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2xvZy1zZWFyY2guY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMb2dTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2FmdGVyVGltZXN0YW1wJykgcHJpdmF0ZSByZWFkb25seSBfYWZ0ZXJUaW1lc3RhbXBEYXRlUGlja2VyOiBEYXRlUGlja2VyO1xuICBAVmlld0NoaWxkKCdiZWZvcmVUaW1lc3RhbXAnKSBwcml2YXRlIHJlYWRvbmx5IF9iZWZvcmVUaW1lc3RhbXBEYXRlUGlja2VyOiBEYXRlUGlja2VyO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBpbml0U2VhcmNoUmVxdWVzdDogTG9nZ2luZ0V2ZW50U2VhcmNoUmVxdWVzdDtcbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWFyY2hTdWJtaXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8TG9nZ2luZ0V2ZW50U2VhcmNoUmVxdWVzdD4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdGhlbWUkOiBPYnNlcnZhYmxlPENBUkJPTl9USEVNRT4gPSB0aGlzLmNkc1RoZW1lU2VydmljZS5jdXJyZW50VGhlbWUkLnBpcGUoXG4gICAgbWFwKCh0aGVtZTogQ3VycmVudENhcmJvblRoZW1lKSA9PlxuICAgICAgdGhlbWUgPT09IEN1cnJlbnRDYXJib25UaGVtZS5HMTAgPyBDQVJCT05fVEhFTUUuV0hJVEUgOiBDQVJCT05fVEhFTUUuRzEwMFxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgbGlrZUZvcm1hdHRlZE1lc3NhZ2U6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnKSxcbiAgICBsZXZlbDogdGhpcy5mYi5jb250cm9sPExpc3RJdGVtPih7Y29udGVudDogJycsIHNlbGVjdGVkOiBmYWxzZX0pLFxuICAgIGJlZm9yZVRpbWVzdGFtcDogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oJycpLFxuICAgIGFmdGVyVGltZXN0YW1wOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJyksXG4gICAgcHJvcGVydGllczogdGhpcy5mYi5hcnJheShbXG4gICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAga2V5OiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJyksXG4gICAgICAgIHZhbHVlOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJyksXG4gICAgICB9KSxcbiAgICBdKSxcbiAgfSk7XG5cbiAgcHVibGljIGxvZ0xldmVsSXRlbXM6IFBhcnRpYWw8TGlzdEl0ZW0+W10gPSBbXG4gICAge1xuICAgICAgY29udGVudDogTG9nTGV2ZWwuRVJST1IsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb250ZW50OiBMb2dMZXZlbC5XQVJOLFxuICAgIH0sXG4gICAge1xuICAgICAgY29udGVudDogTG9nTGV2ZWwuSU5GTyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbnRlbnQ6IExvZ0xldmVsLkRFQlVHLFxuICAgIH0sXG4gICAge1xuICAgICAgY29udGVudDogTG9nTGV2ZWwuVFJBQ0UsXG4gICAgfSxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBnZXQgcHJvcGVydGllc0FycmF5KCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgncHJvcGVydGllcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RzVGhlbWVTZXJ2aWNlOiBDZHNUaGVtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlcihUcmFzaENhbjE2KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEluaXRpYWxGb3JtKCk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg1MDApKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFN1Ym1pdEV2ZW50LmVtaXQodGhpcy5tYXBGb3JtVmFsdWVUb0xvZ1NlYXJjaCgpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWZ0ZXJUaW1lc3RhbXBDb250cm9sVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2FmdGVyVGltZXN0YW1wJyk/LnZhbHVlO1xuICAgIGNvbnN0IGJlZm9yZVRpbWVzdGFtcENvbnRyb2xWYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldCgnYmVmb3JlVGltZXN0YW1wJyk/LnZhbHVlO1xuXG4gICAgaWYgKCEhYWZ0ZXJUaW1lc3RhbXBDb250cm9sVmFsdWUpIHtcbiAgICAgIHRoaXMuX2FmdGVyVGltZXN0YW1wRGF0ZVBpY2tlci53cml0ZVZhbHVlKFtcbiAgICAgICAgZmxhdHBpY2tyLmZvcm1hdERhdGUobmV3IERhdGUoYWZ0ZXJUaW1lc3RhbXBDb250cm9sVmFsdWUpLCAnZC1tLVknKSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGlmICghIWJlZm9yZVRpbWVzdGFtcENvbnRyb2xWYWx1ZSkge1xuICAgICAgdGhpcy5fYmVmb3JlVGltZXN0YW1wRGF0ZVBpY2tlci53cml0ZVZhbHVlKFtcbiAgICAgICAgZmxhdHBpY2tyLmZvcm1hdERhdGUobmV3IERhdGUoYmVmb3JlVGltZXN0YW1wQ29udHJvbFZhbHVlKSwgJ2QtbS1ZJyksXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xlYXJGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcbiAgICB0aGlzLl9hZnRlclRpbWVzdGFtcERhdGVQaWNrZXIud3JpdGVWYWx1ZShbXSk7XG4gICAgdGhpcy5fYmVmb3JlVGltZXN0YW1wRGF0ZVBpY2tlci53cml0ZVZhbHVlKFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGVTZWxlY3RlZChjb250cm9sOiAnYWZ0ZXJUaW1lc3RhbXAnIHwgJ2JlZm9yZVRpbWVzdGFtcCcsIGV2ZW50OiBEYXRlW10pOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQoY29udHJvbCk/LnBhdGNoVmFsdWUoZmxhdHBpY2tyLmZvcm1hdERhdGUoZXZlbnRbMF0sICdaJykpO1xuICB9XG5cbiAgcHVibGljIGFkZFByb3BlcnR5U2VhcmNoRmllbGQoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzQXJyYXkucHVzaChcbiAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBrZXk6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnKSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVQcm9wZXJ0eVNlYXJjaEZpZWxkKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BlcnRpZXNBcnJheS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRMb2dJdGVtcyhmb3JtVmFsdWU6IExvZ2dpbmdFdmVudFNlYXJjaEZvcm1WYWx1ZSk6IHZvaWQge1xuICAgIGlmICghZm9ybVZhbHVlLmxldmVsKSByZXR1cm47XG5cbiAgICB0aGlzLmxvZ0xldmVsSXRlbXMgPSB0aGlzLmxvZ0xldmVsSXRlbXMubWFwKChsZXZlbEl0ZW06IFBhcnRpYWw8TGlzdEl0ZW0+KSA9PiAoe1xuICAgICAgLi4ubGV2ZWxJdGVtLFxuICAgICAgc2VsZWN0ZWQ6IGZvcm1WYWx1ZS5sZXZlbD8uY29udGVudCA9PT0gbGV2ZWxJdGVtLmNvbnRlbnQsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UHJvcGVydGllc0Zvcm0oZm9ybVZhbHVlOiBMb2dnaW5nRXZlbnRTZWFyY2hGb3JtVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAoIWZvcm1WYWx1ZS5wcm9wZXJ0aWVzKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZvcm1WYWx1ZS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFkZFByb3BlcnR5U2VhcmNoRmllbGQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEZvcm1WYWx1ZVRvTG9nU2VhcmNoKCk6IExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3Qge1xuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGZvcm1WYWx1ZS5wcm9wZXJ0aWVzLmZpbHRlcihcbiAgICAgIChwcm9wZXJ0eToge2tleTogc3RyaW5nIHwgbnVsbDsgdmFsdWU6IHN0cmluZyB8IG51bGx9KSA9PiAhIXByb3BlcnR5LmtleSAmJiAhIXByb3BlcnR5LnZhbHVlXG4gICAgKSBhcyBMb2dnaW5nRXZlbnRQcm9wZXJ0eVtdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLighIWZvcm1WYWx1ZS5saWtlRm9ybWF0dGVkTWVzc2FnZSAmJiB7XG4gICAgICAgIGxpa2VGb3JtYXR0ZWRNZXNzYWdlOiBmb3JtVmFsdWUubGlrZUZvcm1hdHRlZE1lc3NhZ2UsXG4gICAgICB9KSxcbiAgICAgIC4uLighIWZvcm1WYWx1ZS5sZXZlbD8uY29udGVudCAmJiB7bGV2ZWw6IGZvcm1WYWx1ZS5sZXZlbC5jb250ZW50fSksXG4gICAgICAuLi4oISFmb3JtVmFsdWUuYWZ0ZXJUaW1lc3RhbXAgJiYge2FmdGVyVGltZXN0YW1wOiBmb3JtVmFsdWUuYWZ0ZXJUaW1lc3RhbXB9KSxcbiAgICAgIC4uLighIWZvcm1WYWx1ZS5iZWZvcmVUaW1lc3RhbXAgJiYge2JlZm9yZVRpbWVzdGFtcDogZm9ybVZhbHVlLmJlZm9yZVRpbWVzdGFtcH0pLFxuICAgICAgLi4uKCEhcHJvcGVydGllcy5sZW5ndGggJiYge3Byb3BlcnRpZXN9KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZWFyY2hSZXF1ZXN0VG9Gb3JtVmFsdWUoXG4gICAgc2VhcmNoUmVxdWVzdDogTG9nZ2luZ0V2ZW50U2VhcmNoUmVxdWVzdFxuICApOiBMb2dnaW5nRXZlbnRTZWFyY2hGb3JtVmFsdWUge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4oc2VhcmNoUmVxdWVzdC5saWtlRm9ybWF0dGVkTWVzc2FnZSAmJiB7XG4gICAgICAgIGxpa2VGb3JtYXR0ZWRNZXNzYWdlOiBzZWFyY2hSZXF1ZXN0Lmxpa2VGb3JtYXR0ZWRNZXNzYWdlLFxuICAgICAgfSksXG4gICAgICAuLi4oc2VhcmNoUmVxdWVzdC5sZXZlbCAmJiB7XG4gICAgICAgIGxldmVsOiB7XG4gICAgICAgICAgY29udGVudDogc2VhcmNoUmVxdWVzdC5sZXZlbCxcbiAgICAgICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHNlYXJjaFJlcXVlc3QuYWZ0ZXJUaW1lc3RhbXAgJiYge2FmdGVyVGltZXN0YW1wOiBzZWFyY2hSZXF1ZXN0LmFmdGVyVGltZXN0YW1wfSksXG4gICAgICAuLi4oc2VhcmNoUmVxdWVzdC5iZWZvcmVUaW1lc3RhbXAgJiYge2JlZm9yZVRpbWVzdGFtcDogc2VhcmNoUmVxdWVzdC5iZWZvcmVUaW1lc3RhbXB9KSxcbiAgICAgIC4uLihzZWFyY2hSZXF1ZXN0LnByb3BlcnRpZXMgJiYge3Byb3BlcnRpZXM6IHNlYXJjaFJlcXVlc3QucHJvcGVydGllc30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcHBlZEZvcm1WYWx1ZTogTG9nZ2luZ0V2ZW50U2VhcmNoRm9ybVZhbHVlID0gdGhpcy5tYXBTZWFyY2hSZXF1ZXN0VG9Gb3JtVmFsdWUoXG4gICAgICB0aGlzLmluaXRTZWFyY2hSZXF1ZXN0XG4gICAgKTtcbiAgICB0aGlzLmluaXRMb2dJdGVtcyhtYXBwZWRGb3JtVmFsdWUpO1xuICAgIHRoaXMuaW5pdFByb3BlcnRpZXNGb3JtKG1hcHBlZEZvcm1WYWx1ZSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKG1hcHBlZEZvcm1WYWx1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGZvcm1cbiAgKm5nSWY9XCJ0aGVtZSQgfCBhc3luYyBhcyB0aGVtZVwiXG4gIGNsYXNzPVwidmFsdGltby1sb2ctc2VhcmNoXCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAoY2xpY2spPVwiJGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXCJcbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJ2YWx0aW1vLWxvZy1zZWFyY2hfX2ZpZWxkc1wiPlxuICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgIHt7ICdsb2dnaW5nLmNvbHVtbnMuZm9ybWF0dGVkTWVzc2FnZScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgPGlucHV0XG4gICAgICAgIGNkc1RleHRcbiAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwidGhlbWVcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsaWtlRm9ybWF0dGVkTWVzc2FnZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInbG9nZ2luZy5jb2x1bW5zLmZvcm1hdHRlZE1lc3NhZ2UnIHwgdHJhbnNsYXRlXCJcbiAgICAgIC8+XG4gICAgPC9jZHMtdGV4dC1sYWJlbD5cblxuICAgIDxjZHMtZHJvcGRvd25cbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImxldmVsXCJcbiAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICBbbGFiZWxdPVwiJ2xvZ2dpbmcuY29sdW1ucy5sZXZlbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidsb2dnaW5nLmNvbHVtbnMubGV2ZWwnIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImxvZ0xldmVsSXRlbXNcIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgIDwvY2RzLWRyb3Bkb3duPlxuXG4gICAgPGRpdiBjbGFzcz1cInZhbHRpbW8tbG9nLXNlYXJjaF9fdGltZXN0YW1wXCI+XG4gICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICNhZnRlclRpbWVzdGFtcFxuICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJ0aGVtZVwiXG4gICAgICAgIFtsYWJlbF09XCInbG9nZ2luZy5zZWFyY2guYWZ0ZXJUaW1lc3RhbXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJERC1NTS1ZWVlZXCJcbiAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkRhdGVTZWxlY3RlZCgnYWZ0ZXJUaW1lc3RhbXAnLCAkZXZlbnQpXCJcbiAgICAgID48L2Nkcy1kYXRlLXBpY2tlcj5cblxuICAgICAgPGNkcy1kYXRlLXBpY2tlclxuICAgICAgICAjYmVmb3JlVGltZXN0YW1wXG4gICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgW2xhYmVsXT1cIidsb2dnaW5nLnNlYXJjaC5iZWZvcmVUaW1lc3RhbXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJERC1NTS1ZWVlZXCJcbiAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkRhdGVTZWxlY3RlZCgnYmVmb3JlVGltZXN0YW1wJywgJGV2ZW50KVwiXG4gICAgICA+PC9jZHMtZGF0ZS1waWNrZXI+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cblxuICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPVwicHJvcGVydGllc1wiIGNsYXNzPVwidmFsdGltby1sb2ctc2VhcmNoX19wcm9wZXJ0aWVzXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ2YWx0aW1vLWxvZy1zZWFyY2hfX2xhYmVsXCI+IHt7ICdsb2dnaW5nLnNlYXJjaC5wcm9wZXJ0aWVzJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+XG5cbiAgICBAZm9yIChwcm9wZXJ0eUdyb3VwIG9mIHByb3BlcnRpZXNBcnJheS5jb250cm9sczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInByb3BlcnR5R3JvdXBcIiBjbGFzcz1cInZhbHRpbW8tbG9nLXNlYXJjaF9fcHJvcGVydHlcIj5cbiAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwidGhlbWVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwia2V5XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaW50ZXJmYWNlLmtleScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG5cbiAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwidGhlbWVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidpbnRlcmZhY2UudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjZHNCdXR0b249XCJkYW5nZXItLWdob3N0XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiJGNvdW50ID09PSAxXCJcbiAgICAgICAgICBpY29uT25seT1cInRydWVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVQcm9wZXJ0eVNlYXJjaEZpZWxkKCRpbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZm9ybT5cbiAgICB9XG5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cInByaW1hcnlcIiBzaXplPVwic21cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFkZFByb3BlcnR5U2VhcmNoRmllbGQoKVwiPlxuICAgICAge3sgJ2xvZ2dpbmcuc2VhcmNoLmFkZFByb3BlcnR5JyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cblxuICA8YnV0dG9uIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNsZWFyRmlsdGVyKClcIj5cbiAgICB7eyAnaW50ZXJmYWNlLmNsZWFyJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvZm9ybT5cbiJdfQ==
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2xvZ2dpbmcvc3JjL2xpYi9jb21wb25lbnRzL2xvZy1zZWFyY2gvbG9nLXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2xvZ2dpbmcvc3JjL2xpYi9jb21wb25lbnRzL2xvZy1zZWFyY2gvbG9nLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QixXQUFXLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsWUFBWSxFQUFtQixrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RGLE9BQU8sRUFDTCxZQUFZLEVBRVosZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxVQUFVLEVBRVYsV0FBVyxFQUVYLGdCQUFnQixHQUNqQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBYyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUlMLFFBQVEsR0FDVCxNQUFNLGNBQWMsQ0FBQzs7Ozs7OztBQXFC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LHFmQUNoQixnQkFBZ0I7OzRGQUdQLGtCQUFrQjtrQkFuQjlCLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsVUFBVTt3QkFDVixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLGdCQUFnQjtxQkFDakI7d0lBRzZDLHlCQUF5QjtzQkFBdEUsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ29CLDBCQUEwQjtzQkFBeEUsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBRVosaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNvQixpQkFBaUI7c0JBQTFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUcmFzaENhbjE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q0FSQk9OX1RIRU1FLCBDZHNUaGVtZVNlcnZpY2UsIEN1cnJlbnRDYXJib25UaGVtZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIERhdGVQaWNrZXIsXG4gIERhdGVQaWNrZXJNb2R1bGUsXG4gIERyb3Bkb3duTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBJY29uU2VydmljZSxcbiAgSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxuICBUaW1lUGlja2VyTW9kdWxlLFxufSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCBmbGF0cGlja3IgZnJvbSAnZmxhdHBpY2tyJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBMb2dnaW5nRXZlbnRQcm9wZXJ0eSxcbiAgTG9nZ2luZ0V2ZW50U2VhcmNoRm9ybVZhbHVlLFxuICBMb2dnaW5nRXZlbnRTZWFyY2hSZXF1ZXN0LFxuICBMb2dMZXZlbCxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1sb2ctc2VhcmNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZy1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbG9nLXNlYXJjaC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgRHJvcGRvd25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIERhdGVQaWNrZXJNb2R1bGUsXG4gICAgVGltZVBpY2tlck1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9nU2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdhZnRlclRpbWVzdGFtcCcpIHByaXZhdGUgcmVhZG9ubHkgX2FmdGVyVGltZXN0YW1wRGF0ZVBpY2tlcjogRGF0ZVBpY2tlcjtcbiAgQFZpZXdDaGlsZCgnYmVmb3JlVGltZXN0YW1wJykgcHJpdmF0ZSByZWFkb25seSBfYmVmb3JlVGltZXN0YW1wRGF0ZVBpY2tlcjogRGF0ZVBpY2tlcjtcblxuICBASW5wdXQoKSBwdWJsaWMgaW5pdFNlYXJjaFJlcXVlc3Q6IExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3Q7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoU3VibWl0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3Q+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRoZW1lJDogT2JzZXJ2YWJsZTxDQVJCT05fVEhFTUU+ID0gdGhpcy5jZHNUaGVtZVNlcnZpY2UuY3VycmVudFRoZW1lJC5waXBlKFxuICAgIG1hcCgodGhlbWU6IEN1cnJlbnRDYXJib25UaGVtZSkgPT5cbiAgICAgIHRoZW1lID09PSBDdXJyZW50Q2FyYm9uVGhlbWUuRzEwID8gQ0FSQk9OX1RIRU1FLldISVRFIDogQ0FSQk9OX1RIRU1FLkcxMDBcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIGxpa2VGb3JtYXR0ZWRNZXNzYWdlOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJyksXG4gICAgbGV2ZWw6IHRoaXMuZmIuY29udHJvbDxMaXN0SXRlbT4oe2NvbnRlbnQ6ICcnLCBzZWxlY3RlZDogZmFsc2V9KSxcbiAgICBiZWZvcmVUaW1lc3RhbXA6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnKSxcbiAgICBiZWZvcmVUaW1lOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJyksXG4gICAgYWZ0ZXJUaW1lc3RhbXA6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnKSxcbiAgICBhZnRlclRpbWU6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnKSxcbiAgICBwcm9wZXJ0aWVzOiB0aGlzLmZiLmFycmF5KFtcbiAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBrZXk6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KCcnKSxcbiAgICAgIH0pLFxuICAgIF0pLFxuICB9KTtcblxuICBwdWJsaWMgbG9nTGV2ZWxJdGVtczogUGFydGlhbDxMaXN0SXRlbT5bXSA9IFtcbiAgICB7XG4gICAgICBjb250ZW50OiBMb2dMZXZlbC5FUlJPUixcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbnRlbnQ6IExvZ0xldmVsLldBUk4sXG4gICAgfSxcbiAgICB7XG4gICAgICBjb250ZW50OiBMb2dMZXZlbC5JTkZPLFxuICAgIH0sXG4gICAge1xuICAgICAgY29udGVudDogTG9nTGV2ZWwuREVCVUcsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb250ZW50OiBMb2dMZXZlbC5UUkFDRSxcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIGdldCBwcm9wZXJ0aWVzQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdwcm9wZXJ0aWVzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHNUaGVtZVNlcnZpY2U6IENkc1RoZW1lU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyKFRyYXNoQ2FuMTYpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0SW5pdGlhbEZvcm0oKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3VibWl0RXZlbnQuZW1pdCh0aGlzLm1hcEZvcm1WYWx1ZVRvTG9nU2VhcmNoKCkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBhZnRlclRpbWVzdGFtcENvbnRyb2xWYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldCgnYWZ0ZXJUaW1lc3RhbXAnKT8udmFsdWU7XG4gICAgY29uc3QgYmVmb3JlVGltZXN0YW1wQ29udHJvbFZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdiZWZvcmVUaW1lc3RhbXAnKT8udmFsdWU7XG5cbiAgICBpZiAoISFhZnRlclRpbWVzdGFtcENvbnRyb2xWYWx1ZSkge1xuICAgICAgdGhpcy5fYWZ0ZXJUaW1lc3RhbXBEYXRlUGlja2VyLndyaXRlVmFsdWUoW1xuICAgICAgICBmbGF0cGlja3IuZm9ybWF0RGF0ZShuZXcgRGF0ZShhZnRlclRpbWVzdGFtcENvbnRyb2xWYWx1ZSksICdkLW0tWScpLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgaWYgKCEhYmVmb3JlVGltZXN0YW1wQ29udHJvbFZhbHVlKSB7XG4gICAgICB0aGlzLl9iZWZvcmVUaW1lc3RhbXBEYXRlUGlja2VyLndyaXRlVmFsdWUoW1xuICAgICAgICBmbGF0cGlja3IuZm9ybWF0RGF0ZShuZXcgRGF0ZShiZWZvcmVUaW1lc3RhbXBDb250cm9sVmFsdWUpLCAnZC1tLVknKSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbGVhckZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIHRoaXMuX2FmdGVyVGltZXN0YW1wRGF0ZVBpY2tlci53cml0ZVZhbHVlKFtdKTtcbiAgICB0aGlzLl9iZWZvcmVUaW1lc3RhbXBEYXRlUGlja2VyLndyaXRlVmFsdWUoW10pO1xuICB9XG5cbiAgcHVibGljIG9uRGF0ZVNlbGVjdGVkKGNvbnRyb2w6ICdhZnRlclRpbWVzdGFtcCcgfCAnYmVmb3JlVGltZXN0YW1wJywgZXZlbnQ6IERhdGVbXSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sKT8ucGF0Y2hWYWx1ZShmbGF0cGlja3IuZm9ybWF0RGF0ZShldmVudFswXSwgJ1onKSk7XG4gIH1cblxuICBwdWJsaWMgYWRkUHJvcGVydHlTZWFyY2hGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BlcnRpZXNBcnJheS5wdXNoKFxuICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGtleTogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oJycpLFxuICAgICAgICB2YWx1ZTogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oJycpLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVByb3BlcnR5U2VhcmNoRmllbGQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJvcGVydGllc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdExvZ0l0ZW1zKGZvcm1WYWx1ZTogTG9nZ2luZ0V2ZW50U2VhcmNoRm9ybVZhbHVlKTogdm9pZCB7XG4gICAgaWYgKCFmb3JtVmFsdWUubGV2ZWwpIHJldHVybjtcblxuICAgIHRoaXMubG9nTGV2ZWxJdGVtcyA9IHRoaXMubG9nTGV2ZWxJdGVtcy5tYXAoKGxldmVsSXRlbTogUGFydGlhbDxMaXN0SXRlbT4pID0+ICh7XG4gICAgICAuLi5sZXZlbEl0ZW0sXG4gICAgICBzZWxlY3RlZDogZm9ybVZhbHVlLmxldmVsPy5jb250ZW50ID09PSBsZXZlbEl0ZW0uY29udGVudCxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRQcm9wZXJ0aWVzRm9ybShmb3JtVmFsdWU6IExvZ2dpbmdFdmVudFNlYXJjaEZvcm1WYWx1ZSk6IHZvaWQge1xuICAgIGlmICghZm9ybVZhbHVlLnByb3BlcnRpZXMpIHJldHVybjtcblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZm9ybVZhbHVlLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkUHJvcGVydHlTZWFyY2hGaWVsZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdFRpbWVGb3JtKGZvcm1WYWx1ZTogTG9nZ2luZ0V2ZW50U2VhcmNoRm9ybVZhbHVlKTogdm9pZCB7XG4gICAgY29uc3Qge2JlZm9yZVRpbWVzdGFtcCwgYWZ0ZXJUaW1lc3RhbXB9ID0gZm9ybVZhbHVlO1xuXG4gICAgaWYgKCEhYmVmb3JlVGltZXN0YW1wKSB7XG4gICAgICBjb25zdCB7aG91cnMsIG1pbnV0ZXN9ID0gdGhpcy5jb252ZXJ0VGltZXN0YW1wVG9UaW1lU3RyaW5nKGJlZm9yZVRpbWVzdGFtcCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHtiZWZvcmVUaW1lOiBgJHtob3Vyc306JHttaW51dGVzfWB9LCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cblxuICAgIGlmICghIWFmdGVyVGltZXN0YW1wKSB7XG4gICAgICBjb25zdCB7aG91cnMsIG1pbnV0ZXN9ID0gdGhpcy5jb252ZXJ0VGltZXN0YW1wVG9UaW1lU3RyaW5nKGFmdGVyVGltZXN0YW1wKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoe2FmdGVyVGltZTogYCR7aG91cnN9OiR7bWludXRlc31gfSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUaW1lc3RhbXBUb1RpbWVTdHJpbmcodGltZXN0YW1wOiBzdHJpbmcpOiB7aG91cnM6IHN0cmluZzsgbWludXRlczogc3RyaW5nfSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdXJzOiBgMCR7ZGF0ZS5nZXRIb3VycygpfWAuc2xpY2UoLTIpLFxuICAgICAgbWludXRlczogYDAke2RhdGUuZ2V0TWludXRlcygpfWAuc2xpY2UoLTIpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG1hcEZvcm1WYWx1ZVRvTG9nU2VhcmNoKCk6IExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3Qge1xuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGZvcm1WYWx1ZS5wcm9wZXJ0aWVzLmZpbHRlcihcbiAgICAgIChwcm9wZXJ0eToge2tleTogc3RyaW5nIHwgbnVsbDsgdmFsdWU6IHN0cmluZyB8IG51bGx9KSA9PiAhIXByb3BlcnR5LmtleSAmJiAhIXByb3BlcnR5LnZhbHVlXG4gICAgKSBhcyBMb2dnaW5nRXZlbnRQcm9wZXJ0eVtdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLighIWZvcm1WYWx1ZS5saWtlRm9ybWF0dGVkTWVzc2FnZSAmJiB7XG4gICAgICAgIGxpa2VGb3JtYXR0ZWRNZXNzYWdlOiBmb3JtVmFsdWUubGlrZUZvcm1hdHRlZE1lc3NhZ2UsXG4gICAgICB9KSxcbiAgICAgIC4uLighIWZvcm1WYWx1ZS5sZXZlbD8uY29udGVudCAmJiB7bGV2ZWw6IGZvcm1WYWx1ZS5sZXZlbC5jb250ZW50fSksXG4gICAgICAuLi4oISFmb3JtVmFsdWUuYWZ0ZXJUaW1lc3RhbXAgJiYge1xuICAgICAgICBhZnRlclRpbWVzdGFtcDogdGhpcy5tYXBUaW1lU3RhbXBzKGZvcm1WYWx1ZS5hZnRlclRpbWVzdGFtcCwgZm9ybVZhbHVlLmFmdGVyVGltZSksXG4gICAgICB9KSxcbiAgICAgIC4uLighIWZvcm1WYWx1ZS5iZWZvcmVUaW1lc3RhbXAgJiYge1xuICAgICAgICBiZWZvcmVUaW1lc3RhbXA6IHRoaXMubWFwVGltZVN0YW1wcyhmb3JtVmFsdWUuYmVmb3JlVGltZXN0YW1wLCBmb3JtVmFsdWUuYmVmb3JlVGltZSksXG4gICAgICB9KSxcbiAgICAgIC4uLighIXByb3BlcnRpZXMubGVuZ3RoICYmIHtwcm9wZXJ0aWVzfSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2VhcmNoUmVxdWVzdFRvRm9ybVZhbHVlKFxuICAgIHNlYXJjaFJlcXVlc3Q6IExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3RcbiAgKTogTG9nZ2luZ0V2ZW50U2VhcmNoRm9ybVZhbHVlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKHNlYXJjaFJlcXVlc3QubGlrZUZvcm1hdHRlZE1lc3NhZ2UgJiYge1xuICAgICAgICBsaWtlRm9ybWF0dGVkTWVzc2FnZTogc2VhcmNoUmVxdWVzdC5saWtlRm9ybWF0dGVkTWVzc2FnZSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHNlYXJjaFJlcXVlc3QubGV2ZWwgJiYge1xuICAgICAgICBsZXZlbDoge1xuICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFJlcXVlc3QubGV2ZWwsXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIC4uLihzZWFyY2hSZXF1ZXN0LmFmdGVyVGltZXN0YW1wICYmIHthZnRlclRpbWVzdGFtcDogc2VhcmNoUmVxdWVzdC5hZnRlclRpbWVzdGFtcH0pLFxuICAgICAgLi4uKHNlYXJjaFJlcXVlc3QuYmVmb3JlVGltZXN0YW1wICYmIHtiZWZvcmVUaW1lc3RhbXA6IHNlYXJjaFJlcXVlc3QuYmVmb3JlVGltZXN0YW1wfSksXG4gICAgICAuLi4oc2VhcmNoUmVxdWVzdC5wcm9wZXJ0aWVzICYmIHtwcm9wZXJ0aWVzOiBzZWFyY2hSZXF1ZXN0LnByb3BlcnRpZXN9KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBUaW1lU3RhbXBzKGRhdGU6IHN0cmluZywgdGltZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aW1lKSByZXR1cm4gZGF0ZTtcblxuICAgIGNvbnN0IHRpbWVWYWx1ZTogc3RyaW5nW10gPSB0aW1lLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgZGF0ZU9iamVjdCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIGRhdGVPYmplY3Quc2V0SG91cnMoK3RpbWVWYWx1ZVswXSwgK3RpbWVWYWx1ZVsxXSk7XG5cbiAgICByZXR1cm4gZmxhdHBpY2tyLmZvcm1hdERhdGUoZGF0ZU9iamVjdCwgJ1onKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgbWFwcGVkRm9ybVZhbHVlOiBMb2dnaW5nRXZlbnRTZWFyY2hGb3JtVmFsdWUgPSB0aGlzLm1hcFNlYXJjaFJlcXVlc3RUb0Zvcm1WYWx1ZShcbiAgICAgIHRoaXMuaW5pdFNlYXJjaFJlcXVlc3RcbiAgICApO1xuICAgIHRoaXMuaW5pdExvZ0l0ZW1zKG1hcHBlZEZvcm1WYWx1ZSk7XG4gICAgdGhpcy5pbml0UHJvcGVydGllc0Zvcm0obWFwcGVkRm9ybVZhbHVlKTtcbiAgICB0aGlzLmluaXRUaW1lRm9ybShtYXBwZWRGb3JtVmFsdWUpO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShtYXBwZWRGb3JtVmFsdWUsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxmb3JtXG4gICpuZ0lmPVwidGhlbWUkIHwgYXN5bmMgYXMgdGhlbWVcIlxuICBjbGFzcz1cInZhbHRpbW8tbG9nLXNlYXJjaFwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgKGNsaWNrKT1cIiRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVwiXG4+XG4gIDxzZWN0aW9uIGNsYXNzPVwidmFsdGltby1sb2ctc2VhcmNoX19maWVsZHNcIj5cbiAgICA8Y2RzLXRleHQtbGFiZWwgY2xhc3M9XCJ2YWx0aW1vLWxvZy1zZWFyY2hfX21lc3NhZ2VcIj5cbiAgICAgIHt7ICdsb2dnaW5nLmNvbHVtbnMuZm9ybWF0dGVkTWVzc2FnZScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgPGlucHV0XG4gICAgICAgIGNkc1RleHRcbiAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwidGhlbWVcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsaWtlRm9ybWF0dGVkTWVzc2FnZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInbG9nZ2luZy5jb2x1bW5zLmZvcm1hdHRlZE1lc3NhZ2UnIHwgdHJhbnNsYXRlXCJcbiAgICAgIC8+XG4gICAgPC9jZHMtdGV4dC1sYWJlbD5cblxuICAgIDxjZHMtZHJvcGRvd25cbiAgICAgIGNsYXNzPVwidmFsdGltby1sb2ctc2VhcmNoX19sZXZlbFwiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJsZXZlbFwiXG4gICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJ0aGVtZVwiXG4gICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgW2xhYmVsXT1cIidsb2dnaW5nLmNvbHVtbnMubGV2ZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInbG9nZ2luZy5jb2x1bW5zLmxldmVsJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJsb2dMZXZlbEl0ZW1zXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICA8L2Nkcy1kcm9wZG93bj5cblxuICAgIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLWxvZy1zZWFyY2hfX3RpbWVzdGFtcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZhbHRpbW8tbG9nLXNlYXJjaF9fZGF0ZXRpbWVcIj5cbiAgICAgICAgPGNkcy1kYXRlLXBpY2tlclxuICAgICAgICAgICNhZnRlclRpbWVzdGFtcFxuICAgICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2xvZ2dpbmcuc2VhcmNoLmFmdGVyVGltZXN0YW1wJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC1NTS1ZWVlZXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25EYXRlU2VsZWN0ZWQoJ2FmdGVyVGltZXN0YW1wJywgJGV2ZW50KVwiXG4gICAgICAgID48L2Nkcy1kYXRlLXBpY2tlcj5cblxuICAgICAgICA8Y2RzLXRpbWVwaWNrZXIgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwidGhlbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJhZnRlclRpbWVcIj5cbiAgICAgICAgPC9jZHMtdGltZXBpY2tlcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidmFsdGltby1sb2ctc2VhcmNoX19kYXRldGltZVwiPlxuICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgI2JlZm9yZVRpbWVzdGFtcFxuICAgICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2xvZ2dpbmcuc2VhcmNoLmJlZm9yZVRpbWVzdGFtcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQtTU0tWVlZWVwiXG4gICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uRGF0ZVNlbGVjdGVkKCdiZWZvcmVUaW1lc3RhbXAnLCAkZXZlbnQpXCJcbiAgICAgICAgPjwvY2RzLWRhdGUtcGlja2VyPlxuXG4gICAgICAgIDxjZHMtdGltZXBpY2tlciBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJ0aGVtZVwiIGZvcm1Db250cm9sTmFtZT1cImJlZm9yZVRpbWVcIj5cbiAgICAgICAgPC9jZHMtdGltZXBpY2tlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG5cbiAgPHNlY3Rpb24gZm9ybUFycmF5TmFtZT1cInByb3BlcnRpZXNcIiBjbGFzcz1cInZhbHRpbW8tbG9nLXNlYXJjaF9fcHJvcGVydGllc1wiPlxuICAgIDxzcGFuIGNsYXNzPVwidmFsdGltby1sb2ctc2VhcmNoX19sYWJlbFwiPiB7eyAnbG9nZ2luZy5zZWFyY2gucHJvcGVydGllcycgfCB0cmFuc2xhdGUgfX0gPC9zcGFuPlxuXG4gICAgQGZvciAocHJvcGVydHlHcm91cCBvZiBwcm9wZXJ0aWVzQXJyYXkuY29udHJvbHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJwcm9wZXJ0eUdyb3VwXCIgY2xhc3M9XCJ2YWx0aW1vLWxvZy1zZWFyY2hfX3Byb3BlcnR5XCI+XG4gICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImtleVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2ludGVyZmFjZS5rZXknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuXG4gICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaW50ZXJmYWNlLnZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2RzQnV0dG9uPVwiZGFuZ2VyLS1naG9zdFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiRjb3VudCA9PT0gMVwiXG4gICAgICAgICAgaWNvbk9ubHk9XCJ0cnVlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUHJvcGVydHlTZWFyY2hGaWVsZCgkaW5kZXgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Zvcm0+XG4gICAgfVxuXG4gICAgPGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCIgc2l6ZT1cInNtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRQcm9wZXJ0eVNlYXJjaEZpZWxkKClcIj5cbiAgICAgIHt7ICdsb2dnaW5nLnNlYXJjaC5hZGRQcm9wZXJ0eScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L3NlY3Rpb24+XG5cbiAgPGJ1dHRvbiBjZHNCdXR0b249XCJ0ZXJ0aWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGVhckZpbHRlcigpXCI+XG4gICAge3sgJ2ludGVyZmFjZS5jbGVhcicgfCB0cmFuc2xhdGUgfX1cblxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L2Zvcm0+XG4iXX0=
@@ -61,6 +61,7 @@ export class LoggingListComponent {
61
61
  this.loading$.next(false);
62
62
  }));
63
63
  this.searchRequest$ = new BehaviorSubject({});
64
+ this.isSearchActive$ = this.searchRequest$.pipe(map((searchRequest) => Object.keys(searchRequest).length > 0));
64
65
  this.pagination$ = new BehaviorSubject(DEFAULT_PAGINATION);
65
66
  this.logDetailsOpen$ = new BehaviorSubject(false);
66
67
  this.selectedLogEvent$ = new BehaviorSubject(null);
@@ -110,7 +111,7 @@ export class LoggingListComponent {
110
111
  this.pagination$.next({ ...this.pagination$.getValue(), size, ...(resetPage && { page: 1 }) });
111
112
  }
112
113
  onRowClickedEvent(rowClickEvent) {
113
- const { ctrlClick: _, ...logEvent } = rowClickEvent;
114
+ const { ctrlClick: _1, tags: _2, ...logEvent } = rowClickEvent;
114
115
  this.logDetailsOpen$.next(true);
115
116
  this.selectedLogEvent$.next(logEvent);
116
117
  }
@@ -173,7 +174,7 @@ export class LoggingListComponent {
173
174
  });
174
175
  }
175
176
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoggingListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.IconService }, { token: i3.LoggingApiService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
176
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoggingListComponent, isStandalone: true, selector: "ng-component", providers: [LoggingApiService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"logItems$ | async as logItems\"\n [items]=\"logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"clearSearchButton\"\n [description]=\"'logging.noResults.description' | translate\"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i6.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i6.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i2.OverflowMenuDirective, selector: "[cdsOverflowMenu], [ibmOverflowMenu]", inputs: ["ibmOverflowMenu", "cdsOverflowMenu", "flip", "offset", "wrapperClass", "customPane"], exportAs: ["overflowMenu"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: LogDetailsComponent, selector: "valtimo-log-details", inputs: ["open", "logEvent"], outputs: ["closeModalEvent"] }, { kind: "component", type: LogSearchComponent, selector: "valtimo-log-search", inputs: ["initSearchRequest"], outputs: ["searchSubmitEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
177
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoggingListComponent, isStandalone: true, selector: "ng-component", providers: [LoggingApiService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i6.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i6.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i2.OverflowMenuDirective, selector: "[cdsOverflowMenu], [ibmOverflowMenu]", inputs: ["ibmOverflowMenu", "cdsOverflowMenu", "flip", "offset", "wrapperClass", "customPane"], exportAs: ["overflowMenu"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: LogDetailsComponent, selector: "valtimo-log-details", inputs: ["open", "logEvent"], outputs: ["closeModalEvent"] }, { kind: "component", type: LogSearchComponent, selector: "valtimo-log-search", inputs: ["initSearchRequest"], outputs: ["searchSubmitEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
177
178
  }
178
179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoggingListComponent, decorators: [{
179
180
  type: Component,
@@ -187,6 +188,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
187
188
  IconModule,
188
189
  LogDetailsComponent,
189
190
  LogSearchComponent,
190
- ], providers: [LoggingApiService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"logItems$ | async as logItems\"\n [items]=\"logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"clearSearchButton\"\n [description]=\"'logging.noResults.description' | translate\"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n"] }]
191
+ ], providers: [LoggingApiService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n"] }]
191
192
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.IconService }, { type: i3.LoggingApiService }, { type: i1.Router }] });
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vbG9nZ2luZy9zcmMvbGliL2NvbXBvbmVudHMvbG9nZ2luZy1saXN0L2xvZ2dpbmctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2xvZ2dpbmcvc3JjL2xpYi9jb21wb25lbnRzL2xvZ2dpbmctbGlzdC9sb2dnaW5nLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFFcEYsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsZ0JBQWdCLEVBRWhCLGtCQUFrQixFQUVsQixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixjQUFjLEVBQ2QsVUFBVSxHQUVYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsR0FBRyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGFBQWEsR0FLZCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFP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QUFvQjtrQkFsQmhDLFNBQVM7aUNBR0ksSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFVBQVU7d0JBQ1YsbUJBQW1CO3dCQUNuQixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtGaWx0ZXIxNiwgVHJhc2hDYW4xNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBDQVJCT05fQ09OU1RBTlRTLFxuICBDYXJib25MaXN0SXRlbSxcbiAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgQ29sdW1uQ29uZmlnLFxuICBERUZBVUxUX1BBR0lOQVRJT04sXG4gIFBhZ2luYXRpb24sXG4gIFZpZXdUeXBlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgRGlhbG9nTW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgSWNvbk1vZHVsZSxcbiAgSWNvblNlcnZpY2UsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBMT0dfRUxMSVBTSVNfTElNSVQsXG4gIExPR19MRVZFTF9UQUcsXG4gIExvZ2dpbmdFdmVudCxcbiAgTG9nZ2luZ0V2ZW50UHJvcGVydHksXG4gIExvZ2dpbmdFdmVudFF1ZXJ5UGFyYW1zLFxuICBMb2dnaW5nRXZlbnRTZWFyY2hSZXF1ZXN0LFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtMb2dnaW5nQXBpU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtMb2dEZXRhaWxzQ29tcG9uZW50fSBmcm9tICcuLi9sb2ctZGV0YWlscy9sb2ctZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHtMb2dTZWFyY2hDb21wb25lbnR9IGZyb20gJy4uL2xvZy1zZWFyY2gvbG9nLXNlYXJjaC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2dpbmctbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9sb2dnaW5nLWxpc3QuY29tcG9uZW50LnNjc3MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhcmJvbkxpc3RNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgTG9nRGV0YWlsc0NvbXBvbmVudCxcbiAgICBMb2dTZWFyY2hDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW0xvZ2dpbmdBcGlTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9nZ2luZ0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBsb2dJdGVtcyQ6IE9ic2VydmFibGU8Q2FyYm9uTGlzdEl0ZW0+ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtTWFwLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKHF1ZXJ5UGFyYW1zID0+XG4gICAgICB0aGlzLmxvZ2dpbmdBcGlTZXJ2aWNlLmdldFRlY2huaWNhbExvZ3Moe1xuICAgICAgICAuLi5xdWVyeVBhcmFtc1sncGFyYW1zJ10sXG4gICAgICAgIC4uLighIXF1ZXJ5UGFyYW1zWydwYXJhbXMnXT8ucHJvcGVydGllcyAmJiB7XG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5iYXNlNjRUb09iamVjdChxdWVyeVBhcmFtc1sncGFyYW1zJ10ucHJvcGVydGllcyksXG4gICAgICAgIH0pLFxuICAgICAgfSlcbiAgICApLFxuICAgIG1hcCgobG9nZ2luZ1BhZ2U6IFBhZ2U8TG9nZ2luZ0V2ZW50PikgPT4ge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICBjb2xsZWN0aW9uU2l6ZTogbG9nZ2luZ1BhZ2UudG90YWxFbGVtZW50cyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbG9nZ2luZ1BhZ2UuY29udGVudC5tYXAoKGxvZ0V2ZW50OiBMb2dnaW5nRXZlbnQpID0+ICh7XG4gICAgICAgIC4uLmxvZ0V2ZW50LFxuICAgICAgICB0YWdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29udGVudDogbG9nRXZlbnQubGV2ZWwsXG4gICAgICAgICAgICB0eXBlOiBMT0dfTEVWRUxfVEFHW2xvZ0V2ZW50LmxldmVsXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSkpO1xuICAgIH0pLFxuICAgIHN0YXJ0V2l0aChbXSksXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoUmVxdWVzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3Q+KHt9KTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPihERUZBVUxUX1BBR0lOQVRJT04pO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nRGV0YWlsc09wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZExvZ0V2ZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TG9nZ2luZ0V2ZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IEZJRUxEUzogQ29sdW1uQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAga2V5OiAndGltZXN0YW1wJyxcbiAgICAgIGxhYmVsOiAnbG9nZ2luZy5jb2x1bW5zLnRpbWVzdGFtcCcsXG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuREFURV9USU1FLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbGV2ZWwnLFxuICAgICAgbGFiZWw6ICdsb2dnaW5nLmNvbHVtbnMubGV2ZWwnLFxuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRBR1MsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdmb3JtYXR0ZWRNZXNzYWdlJyxcbiAgICAgIGxhYmVsOiAnbG9nZ2luZy5jb2x1bW5zLmZvcm1hdHRlZE1lc3NhZ2UnLFxuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFWFQsXG4gICAgICB0b29sdGlwQ2hhckxpbWl0OiBMT0dfRUxMSVBTSVNfTElNSVQsXG4gICAgfSxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2luZ0FwaVNlcnZpY2U6IExvZ2dpbmdBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbRmlsdGVyMTYsIFRyYXNoQ2FuMTZdKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEluaXRpYWxQYXJhbXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZU1vZGFsRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2dEZXRhaWxzT3BlbiQubmV4dChmYWxzZSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMb2dFdmVudCQubmV4dChudWxsKTtcbiAgICB9LCBDQVJCT05fQ09OU1RBTlRTLm1vZGFsQW5pbWF0aW9uTXMpO1xuICB9XG5cbiAgcHVibGljIG9uUGFnaW5hdGlvbkNsaWNrZWQocGFnZTogbnVtYmVyLCBsb2dJdGVtczogQ2FyYm9uTGlzdEl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZVBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB0aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCk7XG4gICAgY29uc3Qgc2VhcmNoUmVxdWVzdDogTG9nZ2luZ0V2ZW50U2VhcmNoUmVxdWVzdCA9IHRoaXMuc2VhcmNoUmVxdWVzdCQuZ2V0VmFsdWUoKTtcblxuICAgIGlmICghc2VhcmNoUmVxdWVzdC5iZWZvcmVUaW1lc3RhbXAgJiYgYWN0aXZlUGFnaW5hdGlvbi5wYWdlID09PSAxKVxuICAgICAgdGhpcy5zZWFyY2hSZXF1ZXN0JC5uZXh0KHsuLi5zZWFyY2hSZXF1ZXN0LCBiZWZvcmVUaW1lc3RhbXA6IGxvZ0l0ZW1zWzBdLnRpbWVzdGFtcH0pO1xuXG4gICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5hY3RpdmVQYWdpbmF0aW9uLCBwYWdlfSk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdpbmF0aW9uU2V0KHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHtjb2xsZWN0aW9uU2l6ZSwgcGFnZX0gPSB0aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCk7XG4gICAgY29uc3QgcmVzZXRQYWdlOiBib29sZWFuID0gTWF0aC5jZWlsKCtjb2xsZWN0aW9uU2l6ZSAvIHNpemUpIDw9ICtwYWdlICYmICtjb2xsZWN0aW9uU2l6ZSA+IDA7XG5cbiAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSwgc2l6ZSwgLi4uKHJlc2V0UGFnZSAmJiB7cGFnZTogMX0pfSk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGlja2VkRXZlbnQocm93Q2xpY2tFdmVudDogTG9nZ2luZ0V2ZW50ICYge2N0cmxDbGljazogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICBjb25zdCB7Y3RybENsaWNrOiBfLCAuLi5sb2dFdmVudH0gPSByb3dDbGlja0V2ZW50O1xuICAgIHRoaXMubG9nRGV0YWlsc09wZW4kLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZExvZ0V2ZW50JC5uZXh0KGxvZ0V2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlYXJjaFN1Ym1pdEV2ZW50KHNlYXJjaFJlcXVlc3Q6IExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3QpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFJlcXVlc3QkLm5leHQoc2VhcmNoUmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgb25DbGVhckZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLm9uU2VhcmNoU3VibWl0RXZlbnQoe30pO1xuICB9XG5cbiAgcHJpdmF0ZSBiYXNlNjRUb09iamVjdChiYXNlNjRzdHJpbmc6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXRvYihiYXNlNjRzdHJpbmcpKTtcbiAgfVxuXG4gIHByaXZhdGUgb2JqZWN0VG9CYXNlNjQoanNPYmplY3Q6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJ0b2EoSlNPTi5zdHJpbmdpZnkoanNPYmplY3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblF1ZXJ5UGFyYW1zU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5wYWdpbmF0aW9uJCwgdGhpcy5zZWFyY2hSZXF1ZXN0JF0pLnN1YnNjcmliZShcbiAgICAgICAgKFtwYWdpbmF0aW9uLCBzZWFyY2hSZXF1ZXN0XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtzaXplLCBwYWdlfSA9IHBhZ2luYXRpb247XG5cbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dnaW5nJ10sIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgIHNpemUsXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgLSAxLFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgLi4uc2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAuLi4oISFzZWFyY2hSZXF1ZXN0LnByb3BlcnRpZXM/Lmxlbmd0aCAmJiB7XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLm9iamVjdFRvQmFzZTY0KHNlYXJjaFJlcXVlc3QucHJvcGVydGllcyksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwUXVlcnlQYXJhbXNUb1NlYXJjaFJlcXVlc3QoXG4gICAgcXVlcnlQYXJhbXM6IExvZ2dpbmdFdmVudFF1ZXJ5UGFyYW1zXG4gICk6IExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4oISFxdWVyeVBhcmFtcy5saWtlRm9ybWF0dGVkTWVzc2FnZSAmJiB7XG4gICAgICAgIGxpa2VGb3JtYXR0ZWRNZXNzYWdlOiBxdWVyeVBhcmFtcy5saWtlRm9ybWF0dGVkTWVzc2FnZSxcbiAgICAgIH0pLFxuICAgICAgLi4uKCEhcXVlcnlQYXJhbXMubGV2ZWwgJiYge2xldmVsOiBxdWVyeVBhcmFtcy5sZXZlbH0pLFxuICAgICAgLi4uKCEhcXVlcnlQYXJhbXMuYWZ0ZXJUaW1lc3RhbXAgJiYge2FmdGVyVGltZXN0YW1wOiBxdWVyeVBhcmFtcy5hZnRlclRpbWVzdGFtcH0pLFxuICAgICAgLi4uKCEhcXVlcnlQYXJhbXMuYmVmb3JlVGltZXN0YW1wICYmIHtiZWZvcmVUaW1lc3RhbXA6IHF1ZXJ5UGFyYW1zLmJlZm9yZVRpbWVzdGFtcH0pLFxuICAgICAgLi4uKCEhcXVlcnlQYXJhbXMucHJvcGVydGllcyAmJiB7XG4gICAgICAgIHByb3BlcnRpZXM6IHRoaXMuYmFzZTY0VG9PYmplY3QocXVlcnlQYXJhbXMucHJvcGVydGllcykgYXMgQXJyYXk8TG9nZ2luZ0V2ZW50UHJvcGVydHk+LFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbFBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1NYXBcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAocXVlcnlQYXJhbXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHtzaXplLCBwYWdlLCAuLi5zZWFyY2hSZXF1ZXN0fSA9IHF1ZXJ5UGFyYW1zWydwYXJhbXMnXTtcbiAgICAgICAgICByZXR1cm4ge3NpemUsIHBhZ2UsIHNlYXJjaFJlcXVlc3R9O1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoe3NpemUsIHBhZ2UsIHNlYXJjaFJlcXVlc3R9KSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVxdWVzdCQubmV4dCh0aGlzLm1hcFF1ZXJ5UGFyYW1zVG9TZWFyY2hSZXF1ZXN0KHNlYXJjaFJlcXVlc3QpKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCksXG4gICAgICAgICAgc2l6ZTogK3NpemUsXG4gICAgICAgICAgcGFnZTogKyhwYWdlID8/IDApICsgMSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vcGVuUXVlcnlQYXJhbXNTdWJzY3JpcHRpb24oKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjx2YWx0aW1vLWNhcmJvbi1saXN0XG4gICpuZ0lmPVwibG9nSXRlbXMkIHwgYXN5bmMgYXMgbG9nSXRlbXNcIlxuICBbaXRlbXNdPVwibG9nSXRlbXNcIlxuICBbZmllbGRzXT1cIkZJRUxEU1wiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uJCB8IGFzeW5jXCJcbiAgcGFnaW5hdGlvbklkZW50aWZpZXI9XCJsb2dnaW5nXCJcbiAgKHBhZ2luYXRpb25DbGlja2VkKT1cIm9uUGFnaW5hdGlvbkNsaWNrZWQoJGV2ZW50LCBsb2dJdGVtcylcIlxuICAocGFnaW5hdGlvblNldCk9XCJvblBhZ2luYXRpb25TZXQoJGV2ZW50KVwiXG4gIChyb3dDbGlja2VkKT1cIm9uUm93Q2xpY2tlZEV2ZW50KCRldmVudClcIlxuPlxuICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgW2FjdGlvbl09XCJjbGVhclNlYXJjaEJ1dHRvblwiXG4gICAgW2Rlc2NyaXB0aW9uXT1cIidsb2dnaW5nLm5vUmVzdWx0cy5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgIFt0aXRsZV09XCInbG9nZ2luZy5ub1Jlc3VsdHMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuXG4gIDxidXR0b25cbiAgICBjYXJib25Ub29sYmFyQ29udGVudFxuICAgIFtjZHNPdmVyZmxvd01lbnVdPVwibG9nU2VhcmNoXCJcbiAgICBbY3VzdG9tUGFuZV09XCJ0cnVlXCJcbiAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgW2ZsaXBdPVwidHJ1ZVwiXG4gICAgW29mZnNldF09XCJ7eDogMCwgeTogNDd9XCJcbiAgICBjZHNCdXR0b249XCJnaG9zdFwiXG4gICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgPlxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJmaWx0ZXJcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L3ZhbHRpbW8tY2FyYm9uLWxpc3Q+XG5cbjx2YWx0aW1vLWxvZy1kZXRhaWxzXG4gIFtvcGVuXT1cImxvZ0RldGFpbHNPcGVuJCB8IGFzeW5jXCJcbiAgW2xvZ0V2ZW50XT1cInNlbGVjdGVkTG9nRXZlbnQkIHwgYXN5bmNcIlxuICAoY2xvc2VNb2RhbEV2ZW50KT1cIm9uQ2xvc2VNb2RhbEV2ZW50KClcIlxuPjwvdmFsdGltby1sb2ctZGV0YWlscz5cblxuPG5nLXRlbXBsYXRlICNsb2dTZWFyY2g+XG4gIDx2YWx0aW1vLWxvZy1zZWFyY2hcbiAgICBbaW5pdFNlYXJjaFJlcXVlc3RdPVwic2VhcmNoUmVxdWVzdCQgfCBhc3luY1wiXG4gICAgKHNlYXJjaFN1Ym1pdEV2ZW50KT1cIm9uU2VhcmNoU3VibWl0RXZlbnQoJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tbG9nLXNlYXJjaD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2xlYXJTZWFyY2hCdXR0b24+XG4gIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkNsZWFyRmlsdGVyKClcIj5cbiAgICB7eyAnaW50ZXJmYWNlLmNsZWFyJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vbG9nZ2luZy9zcmMvbGliL2NvbXBvbmVudHMvbG9nZ2luZy1saXN0L2xvZ2dpbmctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2xvZ2dpbmcvc3JjL2xpYi9jb21wb25lbnRzL2xvZ2dpbmctbGlzdC9sb2dnaW5nLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFFcEYsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsZ0JBQWdCLEVBR2hCLGtCQUFrQixFQUVsQixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixjQUFjLEVBQ2QsVUFBVSxHQUVYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsR0FBRyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGFBQWEsR0FLZCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFP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bUdBQXBCLG9CQUFvQiwyREFGcEIsQ0FBQyxpQkFBaUIsQ0FBQywwQkM3RWhDLCt6RUFxRUEsOExERkksWUFBWSx1TEFDWixlQUFlLDJGQUNmLFlBQVksZ01BQ1osZ0JBQWdCLHcxQkFDaEIsWUFBWSxtUUFDWixjQUFjLDhCQUNkLFVBQVUsNk5BQ1YsbUJBQW1CLDRIQUNuQixrQkFBa0I7OzRGQUlULG9CQUFvQjtrQkFsQmhDLFNBQVM7aUNBR0ksSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFVBQVU7d0JBQ1YsbUJBQW1CO3dCQUNuQixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtGaWx0ZXIxNiwgVHJhc2hDYW4xNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBDQVJCT05fQ09OU1RBTlRTLFxuICBDYXJib25MaXN0SXRlbSxcbiAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgQ2FyYm9uVGFnLFxuICBDb2x1bW5Db25maWcsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgUGFnaW5hdGlvbixcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtQYWdlfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtcbiAgQnV0dG9uTW9kdWxlLFxuICBEaWFsb2dNb2R1bGUsXG4gIERyb3Bkb3duTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBJY29uU2VydmljZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3RhcnRXaXRoLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIExPR19FTExJUFNJU19MSU1JVCxcbiAgTE9HX0xFVkVMX1RBRyxcbiAgTG9nZ2luZ0V2ZW50LFxuICBMb2dnaW5nRXZlbnRQcm9wZXJ0eSxcbiAgTG9nZ2luZ0V2ZW50UXVlcnlQYXJhbXMsXG4gIExvZ2dpbmdFdmVudFNlYXJjaFJlcXVlc3QsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0xvZ2dpbmdBcGlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0xvZ0RldGFpbHNDb21wb25lbnR9IGZyb20gJy4uL2xvZy1kZXRhaWxzL2xvZy1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQge0xvZ1NlYXJjaENvbXBvbmVudH0gZnJvbSAnLi4vbG9nLXNlYXJjaC9sb2ctc2VhcmNoLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vbG9nZ2luZy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2xvZ2dpbmctbGlzdC5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRHJvcGRvd25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBMb2dEZXRhaWxzQ29tcG9uZW50LFxuICAgIExvZ1NlYXJjaENvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbTG9nZ2luZ0FwaVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBMb2dnaW5nTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGxvZ0l0ZW1zJDogT2JzZXJ2YWJsZTxDYXJib25MaXN0SXRlbT4gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1NYXAucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAocXVlcnlQYXJhbXMgPT5cbiAgICAgIHRoaXMubG9nZ2luZ0FwaVNlcnZpY2UuZ2V0VGVjaG5pY2FsTG9ncyh7XG4gICAgICAgIC4uLnF1ZXJ5UGFyYW1zWydwYXJhbXMnXSxcbiAgICAgICAgLi4uKCEhcXVlcnlQYXJhbXNbJ3BhcmFtcyddPy5wcm9wZXJ0aWVzICYmIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmJhc2U2NFRvT2JqZWN0KHF1ZXJ5UGFyYW1zWydwYXJhbXMnXS5wcm9wZXJ0aWVzKSxcbiAgICAgICAgfSksXG4gICAgICB9KVxuICAgICksXG4gICAgbWFwKChsb2dnaW5nUGFnZTogUGFnZTxMb2dnaW5nRXZlbnQ+KSA9PiB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoe1xuICAgICAgICAuLi50aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCksXG4gICAgICAgIGNvbGxlY3Rpb25TaXplOiBsb2dnaW5nUGFnZS50b3RhbEVsZW1lbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBsb2dnaW5nUGFnZS5jb250ZW50Lm1hcCgobG9nRXZlbnQ6IExvZ2dpbmdFdmVudCkgPT4gKHtcbiAgICAgICAgLi4ubG9nRXZlbnQsXG4gICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50OiBsb2dFdmVudC5sZXZlbCxcbiAgICAgICAgICAgIHR5cGU6IExPR19MRVZFTF9UQUdbbG9nRXZlbnQubGV2ZWxdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSk7XG4gICAgfSksXG4gICAgc3RhcnRXaXRoKFtdKSxcbiAgICB0YXAoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9KVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWFyY2hSZXF1ZXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TG9nZ2luZ0V2ZW50U2VhcmNoUmVxdWVzdD4oe30pO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNTZWFyY2hBY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zZWFyY2hSZXF1ZXN0JC5waXBlKFxuICAgIG1hcCgoc2VhcmNoUmVxdWVzdDogTG9nZ2luZ0V2ZW50U2VhcmNoUmVxdWVzdCkgPT4gT2JqZWN0LmtleXMoc2VhcmNoUmVxdWVzdCkubGVuZ3RoID4gMClcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPihERUZBVUxUX1BBR0lOQVRJT04pO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nRGV0YWlsc09wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZExvZ0V2ZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TG9nZ2luZ0V2ZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IEZJRUxEUzogQ29sdW1uQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAga2V5OiAndGltZXN0YW1wJyxcbiAgICAgIGxhYmVsOiAnbG9nZ2luZy5jb2x1bW5zLnRpbWVzdGFtcCcsXG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuREFURV9USU1FLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbGV2ZWwnLFxuICAgICAgbGFiZWw6ICdsb2dnaW5nLmNvbHVtbnMubGV2ZWwnLFxuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRBR1MsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdmb3JtYXR0ZWRNZXNzYWdlJyxcbiAgICAgIGxhYmVsOiAnbG9nZ2luZy5jb2x1bW5zLmZvcm1hdHRlZE1lc3NhZ2UnLFxuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFWFQsXG4gICAgICB0b29sdGlwQ2hhckxpbWl0OiBMT0dfRUxMSVBTSVNfTElNSVQsXG4gICAgfSxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2luZ0FwaVNlcnZpY2U6IExvZ2dpbmdBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbRmlsdGVyMTYsIFRyYXNoQ2FuMTZdKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEluaXRpYWxQYXJhbXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZU1vZGFsRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2dEZXRhaWxzT3BlbiQubmV4dChmYWxzZSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMb2dFdmVudCQubmV4dChudWxsKTtcbiAgICB9LCBDQVJCT05fQ09OU1RBTlRTLm1vZGFsQW5pbWF0aW9uTXMpO1xuICB9XG5cbiAgcHVibGljIG9uUGFnaW5hdGlvbkNsaWNrZWQocGFnZTogbnVtYmVyLCBsb2dJdGVtczogQ2FyYm9uTGlzdEl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZVBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB0aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCk7XG4gICAgY29uc3Qgc2VhcmNoUmVxdWVzdDogTG9nZ2luZ0V2ZW50U2VhcmNoUmVxdWVzdCA9IHRoaXMuc2VhcmNoUmVxdWVzdCQuZ2V0VmFsdWUoKTtcblxuICAgIGlmICghc2VhcmNoUmVxdWVzdC5iZWZvcmVUaW1lc3RhbXAgJiYgYWN0aXZlUGFnaW5hdGlvbi5wYWdlID09PSAxKVxuICAgICAgdGhpcy5zZWFyY2hSZXF1ZXN0JC5uZXh0KHsuLi5zZWFyY2hSZXF1ZXN0LCBiZWZvcmVUaW1lc3RhbXA6IGxvZ0l0ZW1zWzBdLnRpbWVzdGFtcH0pO1xuXG4gICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5hY3RpdmVQYWdpbmF0aW9uLCBwYWdlfSk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdpbmF0aW9uU2V0KHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHtjb2xsZWN0aW9uU2l6ZSwgcGFnZX0gPSB0aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCk7XG4gICAgY29uc3QgcmVzZXRQYWdlOiBib29sZWFuID0gTWF0aC5jZWlsKCtjb2xsZWN0aW9uU2l6ZSAvIHNpemUpIDw9ICtwYWdlICYmICtjb2xsZWN0aW9uU2l6ZSA+IDA7XG5cbiAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSwgc2l6ZSwgLi4uKHJlc2V0UGFnZSAmJiB7cGFnZTogMX0pfSk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGlja2VkRXZlbnQoXG4gICAgcm93Q2xpY2tFdmVudDogTG9nZ2luZ0V2ZW50ICYge2N0cmxDbGljazogYm9vbGVhbjsgdGFnczogQ2FyYm9uVGFnW119XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHtjdHJsQ2xpY2s6IF8xLCB0YWdzOiBfMiwgLi4ubG9nRXZlbnR9ID0gcm93Q2xpY2tFdmVudDtcbiAgICB0aGlzLmxvZ0RldGFpbHNPcGVuJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuc2VsZWN0ZWRMb2dFdmVudCQubmV4dChsb2dFdmVudCk7XG4gIH1cblxuICBwdWJsaWMgb25TZWFyY2hTdWJtaXRFdmVudChzZWFyY2hSZXF1ZXN0OiBMb2dnaW5nRXZlbnRTZWFyY2hSZXF1ZXN0KTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hSZXF1ZXN0JC5uZXh0KHNlYXJjaFJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xlYXJGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblNlYXJjaFN1Ym1pdEV2ZW50KHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmFzZTY0VG9PYmplY3QoYmFzZTY0c3RyaW5nOiBzdHJpbmcpOiBvYmplY3Qge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGF0b2IoYmFzZTY0c3RyaW5nKSk7XG4gIH1cblxuICBwcml2YXRlIG9iamVjdFRvQmFzZTY0KGpzT2JqZWN0OiBvYmplY3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBidG9hKEpTT04uc3RyaW5naWZ5KGpzT2JqZWN0KSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucGFnaW5hdGlvbiQsIHRoaXMuc2VhcmNoUmVxdWVzdCRdKS5zdWJzY3JpYmUoXG4gICAgICAgIChbcGFnaW5hdGlvbiwgc2VhcmNoUmVxdWVzdF0pID0+IHtcbiAgICAgICAgICBjb25zdCB7c2l6ZSwgcGFnZX0gPSBwYWdpbmF0aW9uO1xuXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9nZ2luZyddLCB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlIC0gMSxcbiAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgIC4uLnNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgLi4uKCEhc2VhcmNoUmVxdWVzdC5wcm9wZXJ0aWVzPy5sZW5ndGggJiYge1xuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogdGhpcy5vYmplY3RUb0Jhc2U2NChzZWFyY2hSZXF1ZXN0LnByb3BlcnRpZXMpLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1hcFF1ZXJ5UGFyYW1zVG9TZWFyY2hSZXF1ZXN0KFxuICAgIHF1ZXJ5UGFyYW1zOiBMb2dnaW5nRXZlbnRRdWVyeVBhcmFtc1xuICApOiBMb2dnaW5nRXZlbnRTZWFyY2hSZXF1ZXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKCEhcXVlcnlQYXJhbXMubGlrZUZvcm1hdHRlZE1lc3NhZ2UgJiYge1xuICAgICAgICBsaWtlRm9ybWF0dGVkTWVzc2FnZTogcXVlcnlQYXJhbXMubGlrZUZvcm1hdHRlZE1lc3NhZ2UsXG4gICAgICB9KSxcbiAgICAgIC4uLighIXF1ZXJ5UGFyYW1zLmxldmVsICYmIHtsZXZlbDogcXVlcnlQYXJhbXMubGV2ZWx9KSxcbiAgICAgIC4uLighIXF1ZXJ5UGFyYW1zLmFmdGVyVGltZXN0YW1wICYmIHthZnRlclRpbWVzdGFtcDogcXVlcnlQYXJhbXMuYWZ0ZXJUaW1lc3RhbXB9KSxcbiAgICAgIC4uLighIXF1ZXJ5UGFyYW1zLmJlZm9yZVRpbWVzdGFtcCAmJiB7YmVmb3JlVGltZXN0YW1wOiBxdWVyeVBhcmFtcy5iZWZvcmVUaW1lc3RhbXB9KSxcbiAgICAgIC4uLighIXF1ZXJ5UGFyYW1zLnByb3BlcnRpZXMgJiYge1xuICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmJhc2U2NFRvT2JqZWN0KHF1ZXJ5UGFyYW1zLnByb3BlcnRpZXMpIGFzIEFycmF5PExvZ2dpbmdFdmVudFByb3BlcnR5PixcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtTWFwXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHF1ZXJ5UGFyYW1zID0+IHtcbiAgICAgICAgICBjb25zdCB7c2l6ZSwgcGFnZSwgLi4uc2VhcmNoUmVxdWVzdH0gPSBxdWVyeVBhcmFtc1sncGFyYW1zJ107XG4gICAgICAgICAgcmV0dXJuIHtzaXplLCBwYWdlLCBzZWFyY2hSZXF1ZXN0fTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHtzaXplLCBwYWdlLCBzZWFyY2hSZXF1ZXN0fSkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFJlcXVlc3QkLm5leHQodGhpcy5tYXBRdWVyeVBhcmFtc1RvU2VhcmNoUmVxdWVzdChzZWFyY2hSZXF1ZXN0KSk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHNpemU6ICtzaXplLFxuICAgICAgICAgIHBhZ2U6ICsocGFnZSA/PyAwKSArIDEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3BlblF1ZXJ5UGFyYW1zU3Vic2NyaXB0aW9uKCk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48dmFsdGltby1jYXJib24tbGlzdFxuICAqbmdJZj1cIntsb2dJdGVtczogbG9nSXRlbXMkIHwgYXN5bmMsIGlzU2VhcmNoQWN0aXZlOiBpc1NlYXJjaEFjdGl2ZSQgfCBhc3luY30gYXMgb2JzXCJcbiAgW2l0ZW1zXT1cIm9icy5sb2dJdGVtc1wiXG4gIFtmaWVsZHNdPVwiRklFTERTXCJcbiAgW2xvYWRpbmddPVwibG9hZGluZyQgfCBhc3luY1wiXG4gIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb24kIHwgYXN5bmNcIlxuICBwYWdpbmF0aW9uSWRlbnRpZmllcj1cImxvZ2dpbmdcIlxuICAocGFnaW5hdGlvbkNsaWNrZWQpPVwib25QYWdpbmF0aW9uQ2xpY2tlZCgkZXZlbnQsIG9icy5sb2dJdGVtcylcIlxuICAocGFnaW5hdGlvblNldCk9XCJvblBhZ2luYXRpb25TZXQoJGV2ZW50KVwiXG4gIChyb3dDbGlja2VkKT1cIm9uUm93Q2xpY2tlZEV2ZW50KCRldmVudClcIlxuPlxuICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgW2FjdGlvbl09XCJvYnMuaXNTZWFyY2hBY3RpdmUgPyBjbGVhclNlYXJjaEJ1dHRvbiA6IG51bGxcIlxuICAgIFtkZXNjcmlwdGlvbl09XCJcbiAgICAgICdsb2dnaW5nLm5vUmVzdWx0cy4nICsgKG9icy5pc1NlYXJjaEFjdGl2ZSA/ICdzZWFyY2hEZXNjcmlwdGlvbicgOiAnZGVzY3JpcHRpb24nKSB8IHRyYW5zbGF0ZVxuICAgIFwiXG4gICAgW3RpdGxlXT1cIidsb2dnaW5nLm5vUmVzdWx0cy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG5cbiAgPGJ1dHRvblxuICAgIGNhcmJvblRvb2xiYXJDb250ZW50XG4gICAgW2Nkc092ZXJmbG93TWVudV09XCJsb2dTZWFyY2hcIlxuICAgIFtjdXN0b21QYW5lXT1cInRydWVcIlxuICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICBbZmxpcF09XCJ0cnVlXCJcbiAgICBbb2Zmc2V0XT1cInt4OiAwLCB5OiA0N31cIlxuICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICA+XG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImZpbHRlclwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvdmFsdGltby1jYXJib24tbGlzdD5cblxuPHZhbHRpbW8tbG9nLWRldGFpbHNcbiAgW29wZW5dPVwibG9nRGV0YWlsc09wZW4kIHwgYXN5bmNcIlxuICBbbG9nRXZlbnRdPVwic2VsZWN0ZWRMb2dFdmVudCQgfCBhc3luY1wiXG4gIChjbG9zZU1vZGFsRXZlbnQpPVwib25DbG9zZU1vZGFsRXZlbnQoKVwiXG4+PC92YWx0aW1vLWxvZy1kZXRhaWxzPlxuXG48bmctdGVtcGxhdGUgI2xvZ1NlYXJjaD5cbiAgPHZhbHRpbW8tbG9nLXNlYXJjaFxuICAgIFtpbml0U2VhcmNoUmVxdWVzdF09XCJzZWFyY2hSZXF1ZXN0JCB8IGFzeW5jXCJcbiAgICAoc2VhcmNoU3VibWl0RXZlbnQpPVwib25TZWFyY2hTdWJtaXRFdmVudCgkZXZlbnQpXCJcbiAgPjwvdmFsdGltby1sb2ctc2VhcmNoPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjbGVhclNlYXJjaEJ1dHRvbj5cbiAgPGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ2xlYXJGaWx0ZXIoKVwiPlxuICAgIHt7ICdpbnRlcmZhY2UuY2xlYXInIHwgdHJhbnNsYXRlIH19XG5cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwidHJhc2gtY2FuXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -12,12 +12,12 @@ import { TrashCan16, Filter16 } from '@carbon/icons';
12
12
  import * as i1$1 from '@valtimo/components';
13
13
  import { CurrentCarbonTheme, CARBON_THEME, DEFAULT_PAGINATION, ViewType, CARBON_CONSTANTS, CarbonListModule } from '@valtimo/components';
14
14
  import * as i3 from 'carbon-components-angular';
15
- import { ModalModule, ButtonModule, DropdownModule, IconModule, InputModule, DatePickerModule, DialogModule } from 'carbon-components-angular';
15
+ import { ModalModule, ButtonModule, DropdownModule, IconModule, InputModule, DatePickerModule, TimePickerModule, DialogModule } from 'carbon-components-angular';
16
16
  import { map, Subscription, debounceTime, BehaviorSubject, tap, switchMap, startWith, combineLatest, take } from 'rxjs';
17
17
  import * as i4$1 from 'ngx-json-viewer';
18
18
  import { NgxJsonViewerModule } from 'ngx-json-viewer';
19
19
  import * as i2$1 from '@angular/forms';
20
- import { ReactiveFormsModule } from '@angular/forms';
20
+ import { ReactiveFormsModule, FormsModule } from '@angular/forms';
21
21
  import flatpickr from 'flatpickr';
22
22
  import * as i1$2 from '@angular/router';
23
23
  import { RouterModule } from '@angular/router';
@@ -193,7 +193,9 @@ class LogSearchComponent {
193
193
  likeFormattedMessage: this.fb.control(''),
194
194
  level: this.fb.control({ content: '', selected: false }),
195
195
  beforeTimestamp: this.fb.control(''),
196
+ beforeTime: this.fb.control(''),
196
197
  afterTimestamp: this.fb.control(''),
198
+ afterTime: this.fb.control(''),
197
199
  properties: this.fb.array([
198
200
  this.fb.group({
199
201
  key: this.fb.control(''),
@@ -276,6 +278,24 @@ class LogSearchComponent {
276
278
  this.addPropertySearchField();
277
279
  }
278
280
  }
281
+ initTimeForm(formValue) {
282
+ const { beforeTimestamp, afterTimestamp } = formValue;
283
+ if (!!beforeTimestamp) {
284
+ const { hours, minutes } = this.convertTimestampToTimeString(beforeTimestamp);
285
+ this.formGroup.patchValue({ beforeTime: `${hours}:${minutes}` }, { emitEvent: false });
286
+ }
287
+ if (!!afterTimestamp) {
288
+ const { hours, minutes } = this.convertTimestampToTimeString(afterTimestamp);
289
+ this.formGroup.patchValue({ afterTime: `${hours}:${minutes}` }, { emitEvent: false });
290
+ }
291
+ }
292
+ convertTimestampToTimeString(timestamp) {
293
+ const date = new Date(timestamp);
294
+ return {
295
+ hours: `0${date.getHours()}`.slice(-2),
296
+ minutes: `0${date.getMinutes()}`.slice(-2),
297
+ };
298
+ }
279
299
  mapFormValueToLogSearch() {
280
300
  const formValue = this.formGroup.getRawValue();
281
301
  const properties = formValue.properties.filter((property) => !!property.key && !!property.value);
@@ -284,8 +304,12 @@ class LogSearchComponent {
284
304
  likeFormattedMessage: formValue.likeFormattedMessage,
285
305
  }),
286
306
  ...(!!formValue.level?.content && { level: formValue.level.content }),
287
- ...(!!formValue.afterTimestamp && { afterTimestamp: formValue.afterTimestamp }),
288
- ...(!!formValue.beforeTimestamp && { beforeTimestamp: formValue.beforeTimestamp }),
307
+ ...(!!formValue.afterTimestamp && {
308
+ afterTimestamp: this.mapTimeStamps(formValue.afterTimestamp, formValue.afterTime),
309
+ }),
310
+ ...(!!formValue.beforeTimestamp && {
311
+ beforeTimestamp: this.mapTimeStamps(formValue.beforeTimestamp, formValue.beforeTime),
312
+ }),
289
313
  ...(!!properties.length && { properties }),
290
314
  };
291
315
  }
@@ -305,14 +329,23 @@ class LogSearchComponent {
305
329
  ...(searchRequest.properties && { properties: searchRequest.properties }),
306
330
  };
307
331
  }
332
+ mapTimeStamps(date, time) {
333
+ if (!time)
334
+ return date;
335
+ const timeValue = time.split(':');
336
+ const dateObject = new Date(date);
337
+ dateObject.setHours(+timeValue[0], +timeValue[1]);
338
+ return flatpickr.formatDate(dateObject, 'Z');
339
+ }
308
340
  setInitialForm() {
309
341
  const mappedFormValue = this.mapSearchRequestToFormValue(this.initSearchRequest);
310
342
  this.initLogItems(mappedFormValue);
311
343
  this.initPropertiesForm(mappedFormValue);
344
+ this.initTimeForm(mappedFormValue);
312
345
  this.formGroup.patchValue(mappedFormValue, { emitEvent: false });
313
346
  }
314
347
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LogSearchComponent, deps: [{ token: i1$1.CdsThemeService }, { token: i2$1.FormBuilder }, { token: i3.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
315
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: LogSearchComponent, isStandalone: true, selector: "valtimo-log-search", inputs: { initSearchRequest: "initSearchRequest" }, outputs: { searchSubmitEvent: "searchSubmitEvent" }, viewQueries: [{ propertyName: "_afterTimestampDatePicker", first: true, predicate: ["afterTimestamp"], descendants: true }, { propertyName: "_beforeTimestampDatePicker", first: true, predicate: ["beforeTimestamp"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label>\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp{display:flex;gap:16px}.valtimo-log-search__fields{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.valtimo-log-search__properties{display:flex;flex-direction:column;max-width:50%}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$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: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i3.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
348
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: LogSearchComponent, isStandalone: true, selector: "valtimo-log-search", inputs: { initSearchRequest: "initSearchRequest" }, outputs: { searchSubmitEvent: "searchSubmitEvent" }, viewQueries: [{ propertyName: "_afterTimestampDatePicker", first: true, predicate: ["afterTimestamp"], descendants: true }, { propertyName: "_beforeTimestampDatePicker", first: true, predicate: ["beforeTimestamp"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp,.valtimo-log-search__datetime{display:flex;gap:16px}.valtimo-log-search__message{grid-area:message}.valtimo-log-search__level{grid-area:level}.valtimo-log-search__fields{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);grid-template-areas:\"message timestamp\" \"level timestamp\"}.valtimo-log-search__timestamp{grid-area:timestamp;flex-direction:column}.valtimo-log-search__datetime{align-items:flex-end}.valtimo-log-search__properties{display:flex;flex-direction:column}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$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: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i3.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: TimePickerModule }, { kind: "component", type: i3.TimePicker, selector: "cds-timepicker, ibm-timepicker", inputs: ["invalid", "invalidText", "label", "hideLabel", "placeholder", "pattern", "id", "disabled", "value", "maxLength", "skeleton", "theme", "size"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
316
349
  }
317
350
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LogSearchComponent, decorators: [{
318
351
  type: Component,
@@ -324,8 +357,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
324
357
  IconModule,
325
358
  InputModule,
326
359
  ReactiveFormsModule,
360
+ FormsModule,
327
361
  DatePickerModule,
328
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label>\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp{display:flex;gap:16px}.valtimo-log-search__fields{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.valtimo-log-search__properties{display:flex;flex-direction:column;max-width:50%}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n"] }]
362
+ TimePickerModule,
363
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp,.valtimo-log-search__datetime{display:flex;gap:16px}.valtimo-log-search__message{grid-area:message}.valtimo-log-search__level{grid-area:level}.valtimo-log-search__fields{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);grid-template-areas:\"message timestamp\" \"level timestamp\"}.valtimo-log-search__timestamp{grid-area:timestamp;flex-direction:column}.valtimo-log-search__datetime{align-items:flex-end}.valtimo-log-search__properties{display:flex;flex-direction:column}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n"] }]
329
364
  }], ctorParameters: () => [{ type: i1$1.CdsThemeService }, { type: i2$1.FormBuilder }, { type: i3.IconService }], propDecorators: { _afterTimestampDatePicker: [{
330
365
  type: ViewChild,
331
366
  args: ['afterTimestamp']
@@ -383,6 +418,7 @@ class LoggingListComponent {
383
418
  this.loading$.next(false);
384
419
  }));
385
420
  this.searchRequest$ = new BehaviorSubject({});
421
+ this.isSearchActive$ = this.searchRequest$.pipe(map((searchRequest) => Object.keys(searchRequest).length > 0));
386
422
  this.pagination$ = new BehaviorSubject(DEFAULT_PAGINATION);
387
423
  this.logDetailsOpen$ = new BehaviorSubject(false);
388
424
  this.selectedLogEvent$ = new BehaviorSubject(null);
@@ -432,7 +468,7 @@ class LoggingListComponent {
432
468
  this.pagination$.next({ ...this.pagination$.getValue(), size, ...(resetPage && { page: 1 }) });
433
469
  }
434
470
  onRowClickedEvent(rowClickEvent) {
435
- const { ctrlClick: _, ...logEvent } = rowClickEvent;
471
+ const { ctrlClick: _1, tags: _2, ...logEvent } = rowClickEvent;
436
472
  this.logDetailsOpen$.next(true);
437
473
  this.selectedLogEvent$.next(logEvent);
438
474
  }
@@ -495,7 +531,7 @@ class LoggingListComponent {
495
531
  });
496
532
  }
497
533
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoggingListComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i3.IconService }, { token: LoggingApiService }, { token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
498
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoggingListComponent, isStandalone: true, selector: "ng-component", providers: [LoggingApiService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"logItems$ | async as logItems\"\n [items]=\"logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"clearSearchButton\"\n [description]=\"'logging.noResults.description' | translate\"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i1$1.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i1$1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i3.OverflowMenuDirective, selector: "[cdsOverflowMenu], [ibmOverflowMenu]", inputs: ["ibmOverflowMenu", "cdsOverflowMenu", "flip", "offset", "wrapperClass", "customPane"], exportAs: ["overflowMenu"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: LogDetailsComponent, selector: "valtimo-log-details", inputs: ["open", "logEvent"], outputs: ["closeModalEvent"] }, { kind: "component", type: LogSearchComponent, selector: "valtimo-log-search", inputs: ["initSearchRequest"], outputs: ["searchSubmitEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
534
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoggingListComponent, isStandalone: true, selector: "ng-component", providers: [LoggingApiService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i1$1.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i1$1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i3.OverflowMenuDirective, selector: "[cdsOverflowMenu], [ibmOverflowMenu]", inputs: ["ibmOverflowMenu", "cdsOverflowMenu", "flip", "offset", "wrapperClass", "customPane"], exportAs: ["overflowMenu"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: LogDetailsComponent, selector: "valtimo-log-details", inputs: ["open", "logEvent"], outputs: ["closeModalEvent"] }, { kind: "component", type: LogSearchComponent, selector: "valtimo-log-search", inputs: ["initSearchRequest"], outputs: ["searchSubmitEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
499
535
  }
500
536
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoggingListComponent, decorators: [{
501
537
  type: Component,
@@ -509,7 +545,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
509
545
  IconModule,
510
546
  LogDetailsComponent,
511
547
  LogSearchComponent,
512
- ], providers: [LoggingApiService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"logItems$ | async as logItems\"\n [items]=\"logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"clearSearchButton\"\n [description]=\"'logging.noResults.description' | translate\"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n"] }]
548
+ ], providers: [LoggingApiService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n"] }]
513
549
  }], ctorParameters: () => [{ type: i1$2.ActivatedRoute }, { type: i3.IconService }, { type: LoggingApiService }, { type: i1$2.Router }] });
514
550
 
515
551
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"valtimo-logging.mjs","sources":["../../../../projects/valtimo/logging/src/lib/models/logging.model.ts","../../../../projects/valtimo/logging/src/lib/models/index.ts","../../../../projects/valtimo/logging/src/lib/services/logging-api.service.ts","../../../../projects/valtimo/logging/src/lib/services/index.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.html","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.html","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.ts","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.html","../../../../projects/valtimo/logging/src/logging-routing.module.ts","../../../../projects/valtimo/logging/src/logging.module.ts","../../../../projects/valtimo/logging/src/public_api.ts","../../../../projects/valtimo/logging/src/valtimo-logging.ts"],"sourcesContent":["/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface LoggingEvent {\n timestamp: string;\n formattedMessage: string;\n level: string;\n properties: Array<LoggingEventProperty>;\n stacktrace: string;\n}\n\ninterface LoggingEventProperty {\n key: string;\n value: string;\n}\n\ninterface LoggingEventSearchRequest {\n afterTimestamp?: string;\n beforeTimestamp?: string;\n level?: string;\n likeFormattedMessage?: string;\n properties?: Array<LoggingEventProperty>;\n size?: number;\n page?: number;\n}\n\nenum LogLevel {\n DEBUG = 'DEBUG',\n ERROR = 'ERROR',\n INFO = 'INFO',\n TRACE = 'TRACE',\n WARN = 'WARN',\n}\n\nconst LOG_LEVEL_TAG = {\n [LogLevel.DEBUG]: 'teal',\n [LogLevel.ERROR]: 'red',\n [LogLevel.INFO]: 'blue',\n [LogLevel.TRACE]: 'grey',\n [LogLevel.WARN]: 'purple',\n};\n\nconst LOG_ELLIPSIS_LIMIT = 128;\n\nexport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventSearchRequest,\n LogLevel,\n};\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging.model';\nexport * from './search.model';\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService, Page, BaseApiService} from '@valtimo/config';\nimport {Observable} from 'rxjs';\nimport {LoggingEvent, LoggingEventSearchRequest} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggingApiService extends BaseApiService {\n constructor(\n protected readonly configService: ConfigService,\n protected readonly httpClient: HttpClient\n ) {\n super(httpClient, configService);\n }\n\n public getTechnicalLogs(\n searchRequest: LoggingEventSearchRequest\n ): Observable<Page<LoggingEvent>> {\n const {size, page, ...searchBody} = searchRequest;\n const params = new HttpParams({\n fromObject: {size, page} as any,\n });\n\n return this.httpClient.post<Page<LoggingEvent>>(\n this.getApiUrl('management/v1/logging'),\n searchBody,\n {\n params,\n }\n );\n }\n}\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging-api.service';\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ModalModule} from 'carbon-components-angular';\nimport {NgxJsonViewerModule} from 'ngx-json-viewer';\nimport {LoggingEvent} from '../../models';\n\n@Component({\n selector: 'valtimo-log-details',\n templateUrl: './log-details.component.html',\n styleUrl: './log-details.component.scss',\n standalone: true,\n imports: [CommonModule, TranslateModule, ModalModule, NgxJsonViewerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LogDetailsComponent {\n @Input() public open = false;\n @Input() public logEvent: LoggingEvent | null;\n\n @Output() public readonly closeModalEvent = new EventEmitter();\n\n public onCloseSelect(): void {\n this.closeModalEvent.emit();\n }\n}\n","<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <ngx-json-viewer *ngIf=\"logEvent\" [json]=\"logEvent\"></ngx-json-viewer>\n </section>\n</cds-modal>\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {FormArray, FormBuilder, ReactiveFormsModule} from '@angular/forms';\nimport {TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CARBON_THEME, CdsThemeService, CurrentCarbonTheme} from '@valtimo/components';\nimport {\n ButtonModule,\n DatePicker,\n DatePickerModule,\n DropdownModule,\n IconModule,\n IconService,\n InputModule,\n ListItem,\n} from 'carbon-components-angular';\nimport flatpickr from 'flatpickr';\nimport {debounceTime, interval, map, Observable, Subscription} from 'rxjs';\nimport {\n LoggingEventProperty,\n LoggingEventSearchFormValue,\n LoggingEventSearchRequest,\n LogLevel,\n} from '../../models';\n\n@Component({\n selector: 'valtimo-log-search',\n templateUrl: './log-search.component.html',\n styleUrl: './log-search.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n ReactiveFormsModule,\n DatePickerModule,\n ],\n})\nexport class LogSearchComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('afterTimestamp') private readonly _afterTimestampDatePicker: DatePicker;\n @ViewChild('beforeTimestamp') private readonly _beforeTimestampDatePicker: DatePicker;\n\n @Input() public initSearchRequest: LoggingEventSearchRequest;\n @Output() public readonly searchSubmitEvent = new EventEmitter<LoggingEventSearchRequest>();\n\n public readonly theme$: Observable<CARBON_THEME> = this.cdsThemeService.currentTheme$.pipe(\n map((theme: CurrentCarbonTheme) =>\n theme === CurrentCarbonTheme.G10 ? CARBON_THEME.WHITE : CARBON_THEME.G100\n )\n );\n\n public readonly formGroup = this.fb.group({\n likeFormattedMessage: this.fb.control<string>(''),\n level: this.fb.control<ListItem>({content: '', selected: false}),\n beforeTimestamp: this.fb.control<string>(''),\n afterTimestamp: this.fb.control<string>(''),\n properties: this.fb.array([\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n }),\n ]),\n });\n\n public logLevelItems: Partial<ListItem>[] = [\n {\n content: LogLevel.ERROR,\n },\n {\n content: LogLevel.WARN,\n },\n {\n content: LogLevel.INFO,\n },\n {\n content: LogLevel.DEBUG,\n },\n {\n content: LogLevel.TRACE,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n public get propertiesArray(): FormArray {\n return this.formGroup.get('properties') as FormArray;\n }\n\n constructor(\n private readonly cdsThemeService: CdsThemeService,\n private readonly fb: FormBuilder,\n private readonly iconService: IconService\n ) {\n this.iconService.register(TrashCan16);\n }\n\n public ngOnInit(): void {\n this.setInitialForm();\n\n this._subscriptions.add(\n this.formGroup.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.searchSubmitEvent.emit(this.mapFormValueToLogSearch());\n })\n );\n }\n\n public ngAfterViewInit(): void {\n const afterTimestampControlValue = this.formGroup.get('afterTimestamp')?.value;\n const beforeTimestampControlValue = this.formGroup.get('beforeTimestamp')?.value;\n\n if (!!afterTimestampControlValue) {\n this._afterTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(afterTimestampControlValue), 'd-m-Y'),\n ]);\n }\n\n if (!!beforeTimestampControlValue) {\n this._beforeTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(beforeTimestampControlValue), 'd-m-Y'),\n ]);\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onClearFilter(): void {\n this.formGroup.reset();\n this._afterTimestampDatePicker.writeValue([]);\n this._beforeTimestampDatePicker.writeValue([]);\n }\n\n public onDateSelected(control: 'afterTimestamp' | 'beforeTimestamp', event: Date[]): void {\n this.formGroup.get(control)?.patchValue(flatpickr.formatDate(event[0], 'Z'));\n }\n\n public addPropertySearchField(): void {\n this.propertiesArray.push(\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n })\n );\n }\n\n public removePropertySearchField(index: number): void {\n this.propertiesArray.removeAt(index);\n }\n\n private initLogItems(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.level) return;\n\n this.logLevelItems = this.logLevelItems.map((levelItem: Partial<ListItem>) => ({\n ...levelItem,\n selected: formValue.level?.content === levelItem.content,\n }));\n }\n\n private initPropertiesForm(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.properties) return;\n\n for (let i = 1; i < formValue.properties.length; i++) {\n this.addPropertySearchField();\n }\n }\n\n private mapFormValueToLogSearch(): LoggingEventSearchRequest {\n const formValue = this.formGroup.getRawValue();\n const properties = formValue.properties.filter(\n (property: {key: string | null; value: string | null}) => !!property.key && !!property.value\n ) as LoggingEventProperty[];\n\n return {\n ...(!!formValue.likeFormattedMessage && {\n likeFormattedMessage: formValue.likeFormattedMessage,\n }),\n ...(!!formValue.level?.content && {level: formValue.level.content}),\n ...(!!formValue.afterTimestamp && {afterTimestamp: formValue.afterTimestamp}),\n ...(!!formValue.beforeTimestamp && {beforeTimestamp: formValue.beforeTimestamp}),\n ...(!!properties.length && {properties}),\n };\n }\n\n private mapSearchRequestToFormValue(\n searchRequest: LoggingEventSearchRequest\n ): LoggingEventSearchFormValue {\n return {\n ...(searchRequest.likeFormattedMessage && {\n likeFormattedMessage: searchRequest.likeFormattedMessage,\n }),\n ...(searchRequest.level && {\n level: {\n content: searchRequest.level,\n selected: true,\n },\n }),\n ...(searchRequest.afterTimestamp && {afterTimestamp: searchRequest.afterTimestamp}),\n ...(searchRequest.beforeTimestamp && {beforeTimestamp: searchRequest.beforeTimestamp}),\n ...(searchRequest.properties && {properties: searchRequest.properties}),\n };\n }\n\n private setInitialForm(): void {\n const mappedFormValue: LoggingEventSearchFormValue = this.mapSearchRequestToFormValue(\n this.initSearchRequest\n );\n this.initLogItems(mappedFormValue);\n this.initPropertiesForm(mappedFormValue);\n\n this.formGroup.patchValue(mappedFormValue, {emitEvent: false});\n }\n}\n","<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label>\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n","/*\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Filter16, TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CARBON_CONSTANTS,\n CarbonListItem,\n CarbonListModule,\n ColumnConfig,\n DEFAULT_PAGINATION,\n Pagination,\n ViewType,\n} from '@valtimo/components';\nimport {Page} from '@valtimo/config';\nimport {\n ButtonModule,\n DialogModule,\n DropdownModule,\n IconModule,\n IconService,\n} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n startWith,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventQueryParams,\n LoggingEventSearchRequest,\n} from '../../models';\nimport {LoggingApiService} from '../../services';\nimport {LogDetailsComponent} from '../log-details/log-details.component';\nimport {LogSearchComponent} from '../log-search/log-search.component';\n\n@Component({\n templateUrl: './logging-list.component.html',\n styleUrl: './logging-list.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n CarbonListModule,\n DialogModule,\n DropdownModule,\n IconModule,\n LogDetailsComponent,\n LogSearchComponent,\n ],\n providers: [LoggingApiService],\n})\nexport class LoggingListComponent implements OnInit, OnDestroy {\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly logItems$: Observable<CarbonListItem> = this.activatedRoute.queryParamMap.pipe(\n tap(() => this.loading$.next(true)),\n switchMap(queryParams =>\n this.loggingApiService.getTechnicalLogs({\n ...queryParams['params'],\n ...(!!queryParams['params']?.properties && {\n properties: this.base64ToObject(queryParams['params'].properties),\n }),\n })\n ),\n map((loggingPage: Page<LoggingEvent>) => {\n this.pagination$.next({\n ...this.pagination$.getValue(),\n collectionSize: loggingPage.totalElements,\n });\n\n return loggingPage.content.map((logEvent: LoggingEvent) => ({\n ...logEvent,\n tags: [\n {\n content: logEvent.level,\n type: LOG_LEVEL_TAG[logEvent.level],\n },\n ],\n }));\n }),\n startWith([]),\n tap(() => {\n this.loading$.next(false);\n })\n );\n\n public readonly searchRequest$ = new BehaviorSubject<LoggingEventSearchRequest>({});\n public readonly pagination$ = new BehaviorSubject<Pagination>(DEFAULT_PAGINATION);\n public readonly logDetailsOpen$ = new BehaviorSubject<boolean>(false);\n public readonly selectedLogEvent$ = new BehaviorSubject<LoggingEvent | null>(null);\n\n public readonly FIELDS: ColumnConfig[] = [\n {\n key: 'timestamp',\n label: 'logging.columns.timestamp',\n viewType: ViewType.DATE_TIME,\n },\n {\n key: 'level',\n label: 'logging.columns.level',\n viewType: ViewType.TAGS,\n },\n {\n key: 'formattedMessage',\n label: 'logging.columns.formattedMessage',\n viewType: ViewType.TEXT,\n tooltipCharLimit: LOG_ELLIPSIS_LIMIT,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly iconService: IconService,\n private readonly loggingApiService: LoggingApiService,\n private readonly router: Router\n ) {\n this.iconService.registerAll([Filter16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.setInitialParams();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onCloseModalEvent(): void {\n this.logDetailsOpen$.next(false);\n\n setTimeout(() => {\n this.selectedLogEvent$.next(null);\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public onPaginationClicked(page: number, logItems: CarbonListItem[]): void {\n const activePagination: Pagination = this.pagination$.getValue();\n const searchRequest: LoggingEventSearchRequest = this.searchRequest$.getValue();\n\n if (!searchRequest.beforeTimestamp && activePagination.page === 1)\n this.searchRequest$.next({...searchRequest, beforeTimestamp: logItems[0].timestamp});\n\n this.pagination$.next({...activePagination, page});\n }\n\n public onPaginationSet(size: number): void {\n const {collectionSize, page} = this.pagination$.getValue();\n const resetPage: boolean = Math.ceil(+collectionSize / size) <= +page && +collectionSize > 0;\n\n this.pagination$.next({...this.pagination$.getValue(), size, ...(resetPage && {page: 1})});\n }\n\n public onRowClickedEvent(rowClickEvent: LoggingEvent & {ctrlClick: boolean}): void {\n const {ctrlClick: _, ...logEvent} = rowClickEvent;\n this.logDetailsOpen$.next(true);\n this.selectedLogEvent$.next(logEvent);\n }\n\n public onSearchSubmitEvent(searchRequest: LoggingEventSearchRequest): void {\n this.searchRequest$.next(searchRequest);\n }\n\n public onClearFilter(): void {\n this.onSearchSubmitEvent({});\n }\n\n private base64ToObject(base64string: string): object {\n return JSON.parse(atob(base64string));\n }\n\n private objectToBase64(jsObject: object): string {\n return btoa(JSON.stringify(jsObject));\n }\n\n private openQueryParamsSubscription(): void {\n this._subscriptions.add(\n combineLatest([this.pagination$, this.searchRequest$]).subscribe(\n ([pagination, searchRequest]) => {\n const {size, page} = pagination;\n\n this.router.navigate(['/logging'], {\n queryParams: {\n size,\n page: page - 1,\n ...{\n ...searchRequest,\n ...(!!searchRequest.properties?.length && {\n properties: this.objectToBase64(searchRequest.properties),\n }),\n },\n },\n });\n }\n )\n );\n }\n\n private mapQueryParamsToSearchRequest(\n queryParams: LoggingEventQueryParams\n ): LoggingEventSearchRequest {\n return {\n ...(!!queryParams.likeFormattedMessage && {\n likeFormattedMessage: queryParams.likeFormattedMessage,\n }),\n ...(!!queryParams.level && {level: queryParams.level}),\n ...(!!queryParams.afterTimestamp && {afterTimestamp: queryParams.afterTimestamp}),\n ...(!!queryParams.beforeTimestamp && {beforeTimestamp: queryParams.beforeTimestamp}),\n ...(!!queryParams.properties && {\n properties: this.base64ToObject(queryParams.properties) as Array<LoggingEventProperty>,\n }),\n };\n }\n\n private setInitialParams(): void {\n this.activatedRoute.queryParamMap\n .pipe(\n take(1),\n map(queryParams => {\n const {size, page, ...searchRequest} = queryParams['params'];\n return {size, page, searchRequest};\n })\n )\n .subscribe(({size, page, searchRequest}) => {\n this.searchRequest$.next(this.mapQueryParamsToSearchRequest(searchRequest));\n this.pagination$.next({\n ...this.pagination$.getValue(),\n size: +size,\n page: +(page ?? 0) + 1,\n });\n\n this.openQueryParamsSubscription();\n });\n }\n}\n","<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"logItems$ | async as logItems\"\n [items]=\"logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"clearSearchButton\"\n [description]=\"'logging.noResults.description' | translate\"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ROLE_ADMIN} from '@valtimo/config';\nimport {AuthGuardService} from '@valtimo/security';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\n\nconst routes: Routes = [\n {\n path: 'logging',\n component: LoggingListComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Logging', roles: [ROLE_ADMIN]},\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n})\nexport class LoggingRoutingModule {}\n","/*\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {HttpLoaderFactory} from '@valtimo/config';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\nimport {LoggingRoutingModule} from './logging-routing.module';\n\n@NgModule({\n imports: [\n CommonModule,\n LoggingRoutingModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient],\n },\n }),\n LoggingListComponent,\n ],\n})\nexport class LoggingModule {}\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of documenten-api\n */\n\nexport * from './logging.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i4","i1","i3.LoggingApiService","i6"],"mappings":"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"}
1
+ {"version":3,"file":"valtimo-logging.mjs","sources":["../../../../projects/valtimo/logging/src/lib/models/logging.model.ts","../../../../projects/valtimo/logging/src/lib/models/index.ts","../../../../projects/valtimo/logging/src/lib/services/logging-api.service.ts","../../../../projects/valtimo/logging/src/lib/services/index.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.html","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.html","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.ts","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.html","../../../../projects/valtimo/logging/src/logging-routing.module.ts","../../../../projects/valtimo/logging/src/logging.module.ts","../../../../projects/valtimo/logging/src/public_api.ts","../../../../projects/valtimo/logging/src/valtimo-logging.ts"],"sourcesContent":["/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface LoggingEvent {\n timestamp: string;\n formattedMessage: string;\n level: string;\n properties: Array<LoggingEventProperty>;\n stacktrace: string;\n}\n\ninterface LoggingEventProperty {\n key: string;\n value: string;\n}\n\ninterface LoggingEventSearchRequest {\n afterTimestamp?: string;\n beforeTimestamp?: string;\n level?: string;\n likeFormattedMessage?: string;\n properties?: Array<LoggingEventProperty>;\n size?: number;\n page?: number;\n}\n\nenum LogLevel {\n DEBUG = 'DEBUG',\n ERROR = 'ERROR',\n INFO = 'INFO',\n TRACE = 'TRACE',\n WARN = 'WARN',\n}\n\nconst LOG_LEVEL_TAG = {\n [LogLevel.DEBUG]: 'teal',\n [LogLevel.ERROR]: 'red',\n [LogLevel.INFO]: 'blue',\n [LogLevel.TRACE]: 'grey',\n [LogLevel.WARN]: 'purple',\n};\n\nconst LOG_ELLIPSIS_LIMIT = 128;\n\nexport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventSearchRequest,\n LogLevel,\n};\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging.model';\nexport * from './search.model';\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService, Page, BaseApiService} from '@valtimo/config';\nimport {Observable} from 'rxjs';\nimport {LoggingEvent, LoggingEventSearchRequest} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggingApiService extends BaseApiService {\n constructor(\n protected readonly configService: ConfigService,\n protected readonly httpClient: HttpClient\n ) {\n super(httpClient, configService);\n }\n\n public getTechnicalLogs(\n searchRequest: LoggingEventSearchRequest\n ): Observable<Page<LoggingEvent>> {\n const {size, page, ...searchBody} = searchRequest;\n const params = new HttpParams({\n fromObject: {size, page} as any,\n });\n\n return this.httpClient.post<Page<LoggingEvent>>(\n this.getApiUrl('management/v1/logging'),\n searchBody,\n {\n params,\n }\n );\n }\n}\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging-api.service';\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ModalModule} from 'carbon-components-angular';\nimport {NgxJsonViewerModule} from 'ngx-json-viewer';\nimport {LoggingEvent} from '../../models';\n\n@Component({\n selector: 'valtimo-log-details',\n templateUrl: './log-details.component.html',\n styleUrl: './log-details.component.scss',\n standalone: true,\n imports: [CommonModule, TranslateModule, ModalModule, NgxJsonViewerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LogDetailsComponent {\n @Input() public open = false;\n @Input() public logEvent: LoggingEvent | null;\n\n @Output() public readonly closeModalEvent = new EventEmitter();\n\n public onCloseSelect(): void {\n this.closeModalEvent.emit();\n }\n}\n","<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <ngx-json-viewer *ngIf=\"logEvent\" [json]=\"logEvent\"></ngx-json-viewer>\n </section>\n</cds-modal>\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {FormArray, FormBuilder, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CARBON_THEME, CdsThemeService, CurrentCarbonTheme} from '@valtimo/components';\nimport {\n ButtonModule,\n DatePicker,\n DatePickerModule,\n DropdownModule,\n IconModule,\n IconService,\n InputModule,\n ListItem,\n TimePickerModule,\n} from 'carbon-components-angular';\nimport flatpickr from 'flatpickr';\nimport {debounceTime, map, Observable, Subscription} from 'rxjs';\nimport {\n LoggingEventProperty,\n LoggingEventSearchFormValue,\n LoggingEventSearchRequest,\n LogLevel,\n} from '../../models';\n\n@Component({\n selector: 'valtimo-log-search',\n templateUrl: './log-search.component.html',\n styleUrl: './log-search.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n ReactiveFormsModule,\n FormsModule,\n DatePickerModule,\n TimePickerModule,\n ],\n})\nexport class LogSearchComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('afterTimestamp') private readonly _afterTimestampDatePicker: DatePicker;\n @ViewChild('beforeTimestamp') private readonly _beforeTimestampDatePicker: DatePicker;\n\n @Input() public initSearchRequest: LoggingEventSearchRequest;\n @Output() public readonly searchSubmitEvent = new EventEmitter<LoggingEventSearchRequest>();\n\n public readonly theme$: Observable<CARBON_THEME> = this.cdsThemeService.currentTheme$.pipe(\n map((theme: CurrentCarbonTheme) =>\n theme === CurrentCarbonTheme.G10 ? CARBON_THEME.WHITE : CARBON_THEME.G100\n )\n );\n\n public readonly formGroup = this.fb.group({\n likeFormattedMessage: this.fb.control<string>(''),\n level: this.fb.control<ListItem>({content: '', selected: false}),\n beforeTimestamp: this.fb.control<string>(''),\n beforeTime: this.fb.control<string>(''),\n afterTimestamp: this.fb.control<string>(''),\n afterTime: this.fb.control<string>(''),\n properties: this.fb.array([\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n }),\n ]),\n });\n\n public logLevelItems: Partial<ListItem>[] = [\n {\n content: LogLevel.ERROR,\n },\n {\n content: LogLevel.WARN,\n },\n {\n content: LogLevel.INFO,\n },\n {\n content: LogLevel.DEBUG,\n },\n {\n content: LogLevel.TRACE,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n public get propertiesArray(): FormArray {\n return this.formGroup.get('properties') as FormArray;\n }\n\n constructor(\n private readonly cdsThemeService: CdsThemeService,\n private readonly fb: FormBuilder,\n private readonly iconService: IconService\n ) {\n this.iconService.register(TrashCan16);\n }\n\n public ngOnInit(): void {\n this.setInitialForm();\n\n this._subscriptions.add(\n this.formGroup.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.searchSubmitEvent.emit(this.mapFormValueToLogSearch());\n })\n );\n }\n\n public ngAfterViewInit(): void {\n const afterTimestampControlValue = this.formGroup.get('afterTimestamp')?.value;\n const beforeTimestampControlValue = this.formGroup.get('beforeTimestamp')?.value;\n\n if (!!afterTimestampControlValue) {\n this._afterTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(afterTimestampControlValue), 'd-m-Y'),\n ]);\n }\n\n if (!!beforeTimestampControlValue) {\n this._beforeTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(beforeTimestampControlValue), 'd-m-Y'),\n ]);\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onClearFilter(): void {\n this.formGroup.reset();\n this._afterTimestampDatePicker.writeValue([]);\n this._beforeTimestampDatePicker.writeValue([]);\n }\n\n public onDateSelected(control: 'afterTimestamp' | 'beforeTimestamp', event: Date[]): void {\n this.formGroup.get(control)?.patchValue(flatpickr.formatDate(event[0], 'Z'));\n }\n\n public addPropertySearchField(): void {\n this.propertiesArray.push(\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n })\n );\n }\n\n public removePropertySearchField(index: number): void {\n this.propertiesArray.removeAt(index);\n }\n\n private initLogItems(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.level) return;\n\n this.logLevelItems = this.logLevelItems.map((levelItem: Partial<ListItem>) => ({\n ...levelItem,\n selected: formValue.level?.content === levelItem.content,\n }));\n }\n\n private initPropertiesForm(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.properties) return;\n\n for (let i = 1; i < formValue.properties.length; i++) {\n this.addPropertySearchField();\n }\n }\n\n private initTimeForm(formValue: LoggingEventSearchFormValue): void {\n const {beforeTimestamp, afterTimestamp} = formValue;\n\n if (!!beforeTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(beforeTimestamp);\n this.formGroup.patchValue({beforeTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n\n if (!!afterTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(afterTimestamp);\n this.formGroup.patchValue({afterTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n }\n\n private convertTimestampToTimeString(timestamp: string): {hours: string; minutes: string} {\n const date = new Date(timestamp);\n return {\n hours: `0${date.getHours()}`.slice(-2),\n minutes: `0${date.getMinutes()}`.slice(-2),\n };\n }\n\n private mapFormValueToLogSearch(): LoggingEventSearchRequest {\n const formValue = this.formGroup.getRawValue();\n const properties = formValue.properties.filter(\n (property: {key: string | null; value: string | null}) => !!property.key && !!property.value\n ) as LoggingEventProperty[];\n\n return {\n ...(!!formValue.likeFormattedMessage && {\n likeFormattedMessage: formValue.likeFormattedMessage,\n }),\n ...(!!formValue.level?.content && {level: formValue.level.content}),\n ...(!!formValue.afterTimestamp && {\n afterTimestamp: this.mapTimeStamps(formValue.afterTimestamp, formValue.afterTime),\n }),\n ...(!!formValue.beforeTimestamp && {\n beforeTimestamp: this.mapTimeStamps(formValue.beforeTimestamp, formValue.beforeTime),\n }),\n ...(!!properties.length && {properties}),\n };\n }\n\n private mapSearchRequestToFormValue(\n searchRequest: LoggingEventSearchRequest\n ): LoggingEventSearchFormValue {\n return {\n ...(searchRequest.likeFormattedMessage && {\n likeFormattedMessage: searchRequest.likeFormattedMessage,\n }),\n ...(searchRequest.level && {\n level: {\n content: searchRequest.level,\n selected: true,\n },\n }),\n ...(searchRequest.afterTimestamp && {afterTimestamp: searchRequest.afterTimestamp}),\n ...(searchRequest.beforeTimestamp && {beforeTimestamp: searchRequest.beforeTimestamp}),\n ...(searchRequest.properties && {properties: searchRequest.properties}),\n };\n }\n\n private mapTimeStamps(date: string, time: string | null): string {\n if (!time) return date;\n\n const timeValue: string[] = time.split(':');\n const dateObject = new Date(date);\n dateObject.setHours(+timeValue[0], +timeValue[1]);\n\n return flatpickr.formatDate(dateObject, 'Z');\n }\n\n private setInitialForm(): void {\n const mappedFormValue: LoggingEventSearchFormValue = this.mapSearchRequestToFormValue(\n this.initSearchRequest\n );\n this.initLogItems(mappedFormValue);\n this.initPropertiesForm(mappedFormValue);\n this.initTimeForm(mappedFormValue);\n\n this.formGroup.patchValue(mappedFormValue, {emitEvent: false});\n }\n}\n","<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n","/*\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Filter16, TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CARBON_CONSTANTS,\n CarbonListItem,\n CarbonListModule,\n CarbonTag,\n ColumnConfig,\n DEFAULT_PAGINATION,\n Pagination,\n ViewType,\n} from '@valtimo/components';\nimport {Page} from '@valtimo/config';\nimport {\n ButtonModule,\n DialogModule,\n DropdownModule,\n IconModule,\n IconService,\n} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n startWith,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventQueryParams,\n LoggingEventSearchRequest,\n} from '../../models';\nimport {LoggingApiService} from '../../services';\nimport {LogDetailsComponent} from '../log-details/log-details.component';\nimport {LogSearchComponent} from '../log-search/log-search.component';\n\n@Component({\n templateUrl: './logging-list.component.html',\n styleUrl: './logging-list.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n CarbonListModule,\n DialogModule,\n DropdownModule,\n IconModule,\n LogDetailsComponent,\n LogSearchComponent,\n ],\n providers: [LoggingApiService],\n})\nexport class LoggingListComponent implements OnInit, OnDestroy {\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly logItems$: Observable<CarbonListItem> = this.activatedRoute.queryParamMap.pipe(\n tap(() => this.loading$.next(true)),\n switchMap(queryParams =>\n this.loggingApiService.getTechnicalLogs({\n ...queryParams['params'],\n ...(!!queryParams['params']?.properties && {\n properties: this.base64ToObject(queryParams['params'].properties),\n }),\n })\n ),\n map((loggingPage: Page<LoggingEvent>) => {\n this.pagination$.next({\n ...this.pagination$.getValue(),\n collectionSize: loggingPage.totalElements,\n });\n\n return loggingPage.content.map((logEvent: LoggingEvent) => ({\n ...logEvent,\n tags: [\n {\n content: logEvent.level,\n type: LOG_LEVEL_TAG[logEvent.level],\n },\n ],\n }));\n }),\n startWith([]),\n tap(() => {\n this.loading$.next(false);\n })\n );\n\n public readonly searchRequest$ = new BehaviorSubject<LoggingEventSearchRequest>({});\n public readonly isSearchActive$: Observable<boolean> = this.searchRequest$.pipe(\n map((searchRequest: LoggingEventSearchRequest) => Object.keys(searchRequest).length > 0)\n );\n public readonly pagination$ = new BehaviorSubject<Pagination>(DEFAULT_PAGINATION);\n public readonly logDetailsOpen$ = new BehaviorSubject<boolean>(false);\n public readonly selectedLogEvent$ = new BehaviorSubject<LoggingEvent | null>(null);\n\n public readonly FIELDS: ColumnConfig[] = [\n {\n key: 'timestamp',\n label: 'logging.columns.timestamp',\n viewType: ViewType.DATE_TIME,\n },\n {\n key: 'level',\n label: 'logging.columns.level',\n viewType: ViewType.TAGS,\n },\n {\n key: 'formattedMessage',\n label: 'logging.columns.formattedMessage',\n viewType: ViewType.TEXT,\n tooltipCharLimit: LOG_ELLIPSIS_LIMIT,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly iconService: IconService,\n private readonly loggingApiService: LoggingApiService,\n private readonly router: Router\n ) {\n this.iconService.registerAll([Filter16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.setInitialParams();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onCloseModalEvent(): void {\n this.logDetailsOpen$.next(false);\n\n setTimeout(() => {\n this.selectedLogEvent$.next(null);\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public onPaginationClicked(page: number, logItems: CarbonListItem[]): void {\n const activePagination: Pagination = this.pagination$.getValue();\n const searchRequest: LoggingEventSearchRequest = this.searchRequest$.getValue();\n\n if (!searchRequest.beforeTimestamp && activePagination.page === 1)\n this.searchRequest$.next({...searchRequest, beforeTimestamp: logItems[0].timestamp});\n\n this.pagination$.next({...activePagination, page});\n }\n\n public onPaginationSet(size: number): void {\n const {collectionSize, page} = this.pagination$.getValue();\n const resetPage: boolean = Math.ceil(+collectionSize / size) <= +page && +collectionSize > 0;\n\n this.pagination$.next({...this.pagination$.getValue(), size, ...(resetPage && {page: 1})});\n }\n\n public onRowClickedEvent(\n rowClickEvent: LoggingEvent & {ctrlClick: boolean; tags: CarbonTag[]}\n ): void {\n const {ctrlClick: _1, tags: _2, ...logEvent} = rowClickEvent;\n this.logDetailsOpen$.next(true);\n this.selectedLogEvent$.next(logEvent);\n }\n\n public onSearchSubmitEvent(searchRequest: LoggingEventSearchRequest): void {\n this.searchRequest$.next(searchRequest);\n }\n\n public onClearFilter(): void {\n this.onSearchSubmitEvent({});\n }\n\n private base64ToObject(base64string: string): object {\n return JSON.parse(atob(base64string));\n }\n\n private objectToBase64(jsObject: object): string {\n return btoa(JSON.stringify(jsObject));\n }\n\n private openQueryParamsSubscription(): void {\n this._subscriptions.add(\n combineLatest([this.pagination$, this.searchRequest$]).subscribe(\n ([pagination, searchRequest]) => {\n const {size, page} = pagination;\n\n this.router.navigate(['/logging'], {\n queryParams: {\n size,\n page: page - 1,\n ...{\n ...searchRequest,\n ...(!!searchRequest.properties?.length && {\n properties: this.objectToBase64(searchRequest.properties),\n }),\n },\n },\n });\n }\n )\n );\n }\n\n private mapQueryParamsToSearchRequest(\n queryParams: LoggingEventQueryParams\n ): LoggingEventSearchRequest {\n return {\n ...(!!queryParams.likeFormattedMessage && {\n likeFormattedMessage: queryParams.likeFormattedMessage,\n }),\n ...(!!queryParams.level && {level: queryParams.level}),\n ...(!!queryParams.afterTimestamp && {afterTimestamp: queryParams.afterTimestamp}),\n ...(!!queryParams.beforeTimestamp && {beforeTimestamp: queryParams.beforeTimestamp}),\n ...(!!queryParams.properties && {\n properties: this.base64ToObject(queryParams.properties) as Array<LoggingEventProperty>,\n }),\n };\n }\n\n private setInitialParams(): void {\n this.activatedRoute.queryParamMap\n .pipe(\n take(1),\n map(queryParams => {\n const {size, page, ...searchRequest} = queryParams['params'];\n return {size, page, searchRequest};\n })\n )\n .subscribe(({size, page, searchRequest}) => {\n this.searchRequest$.next(this.mapQueryParamsToSearchRequest(searchRequest));\n this.pagination$.next({\n ...this.pagination$.getValue(),\n size: +size,\n page: +(page ?? 0) + 1,\n });\n\n this.openQueryParamsSubscription();\n });\n }\n}\n","<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <button\n carbonToolbarContent\n [cdsOverflowMenu]=\"logSearch\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ROLE_ADMIN} from '@valtimo/config';\nimport {AuthGuardService} from '@valtimo/security';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\n\nconst routes: Routes = [\n {\n path: 'logging',\n component: LoggingListComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Logging', roles: [ROLE_ADMIN]},\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n})\nexport class LoggingRoutingModule {}\n","/*\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {HttpLoaderFactory} from '@valtimo/config';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\nimport {LoggingRoutingModule} from './logging-routing.module';\n\n@NgModule({\n imports: [\n CommonModule,\n LoggingRoutingModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient],\n },\n }),\n LoggingListComponent,\n ],\n})\nexport class LoggingModule {}\n","/*\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of documenten-api\n */\n\nexport * from './logging.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i4","i1","i3.LoggingApiService","i6"],"mappings":"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"}
@@ -18,7 +18,9 @@ export declare class LogSearchComponent implements OnInit, AfterViewInit, OnDest
18
18
  likeFormattedMessage: import("@angular/forms").FormControl<string>;
19
19
  level: import("@angular/forms").FormControl<ListItem>;
20
20
  beforeTimestamp: import("@angular/forms").FormControl<string>;
21
+ beforeTime: import("@angular/forms").FormControl<string>;
21
22
  afterTimestamp: import("@angular/forms").FormControl<string>;
23
+ afterTime: import("@angular/forms").FormControl<string>;
22
24
  properties: FormArray<import("@angular/forms").FormGroup<{
23
25
  key: import("@angular/forms").FormControl<string>;
24
26
  value: import("@angular/forms").FormControl<string>;
@@ -37,8 +39,11 @@ export declare class LogSearchComponent implements OnInit, AfterViewInit, OnDest
37
39
  removePropertySearchField(index: number): void;
38
40
  private initLogItems;
39
41
  private initPropertiesForm;
42
+ private initTimeForm;
43
+ private convertTimestampToTimeString;
40
44
  private mapFormValueToLogSearch;
41
45
  private mapSearchRequestToFormValue;
46
+ private mapTimeStamps;
42
47
  private setInitialForm;
43
48
  static ɵfac: i0.ɵɵFactoryDeclaration<LogSearchComponent, never>;
44
49
  static ɵcmp: i0.ɵɵComponentDeclaration<LogSearchComponent, "valtimo-log-search", never, { "initSearchRequest": { "alias": "initSearchRequest"; "required": false; }; }, { "searchSubmitEvent": "searchSubmitEvent"; }, never, never, true, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"log-search.component.d.ts","sourceRoot":"","sources":["../../../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,aAAa,EAGb,YAAY,EAEZ,SAAS,EACT,MAAM,EAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,SAAS,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAC;AAG3E,OAAO,EAAC,YAAY,EAAE,eAAe,EAAqB,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAML,WAAW,EAEX,QAAQ,EACT,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAA8B,UAAU,EAAe,MAAM,MAAM,CAAC;AAC3E,OAAO,EAGL,yBAAyB,EAE1B,MAAM,cAAc,CAAC;;AAEtB,qBAiBa,kBAAmB,YAAW,MAAM,EAAE,aAAa,EAAE,SAAS;IAmDvE,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW;IApDD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAa;IAEtE,iBAAiB,EAAE,yBAAyB,CAAC;IAC7D,SAA0B,iBAAiB,0CAAiD;IAE5F,SAAgB,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,CAI9C;IAEF,SAAgB,SAAS;;;;;;;;;OAWtB;IAEI,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAgBvC;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IAErD,IAAW,eAAe,IAAI,SAAS,CAEtC;gBAGkB,eAAe,EAAE,eAAe,EAChC,EAAE,EAAE,WAAW,EACf,WAAW,EAAE,WAAW;IAKpC,QAAQ,IAAI,IAAI;IAUhB,eAAe,IAAI,IAAI;IAiBvB,WAAW,IAAI,IAAI;IAInB,aAAa,IAAI,IAAI;IAMrB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAIlF,sBAAsB,IAAI,IAAI;IAS9B,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrD,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,2BAA2B;IAmBnC,OAAO,CAAC,cAAc;yCArKX,kBAAkB;2CAAlB,kBAAkB;CA8K9B"}
1
+ {"version":3,"file":"log-search.component.d.ts","sourceRoot":"","sources":["../../../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,aAAa,EAGb,YAAY,EAEZ,SAAS,EACT,MAAM,EAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,SAAS,EAAE,WAAW,EAAmC,MAAM,gBAAgB,CAAC;AAGxF,OAAO,EAAC,YAAY,EAAE,eAAe,EAAqB,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAML,WAAW,EAEX,QAAQ,EAET,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAoB,UAAU,EAAe,MAAM,MAAM,CAAC;AACjE,OAAO,EAGL,yBAAyB,EAE1B,MAAM,cAAc,CAAC;;AAEtB,qBAmBa,kBAAmB,YAAW,MAAM,EAAE,aAAa,EAAE,SAAS;IAqDvE,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAtDD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAa;IAEtE,iBAAiB,EAAE,yBAAyB,CAAC;IAC7D,SAA0B,iBAAiB,0CAAiD;IAE5F,SAAgB,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,CAI9C;IAEF,SAAgB,SAAS;;;;;;;;;;;OAatB;IAEI,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAgBvC;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IAErD,IAAW,eAAe,IAAI,SAAS,CAEtC;gBAGkB,eAAe,EAAE,eAAe,EAChC,EAAE,EAAE,WAAW,EACf,WAAW,EAAE,WAAW;IAKpC,QAAQ,IAAI,IAAI;IAUhB,eAAe,IAAI,IAAI;IAiBvB,WAAW,IAAI,IAAI;IAInB,aAAa,IAAI,IAAI;IAMrB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAIlF,sBAAsB,IAAI,IAAI;IAS9B,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrD,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,2BAA2B;IAmBnC,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;yCA3MX,kBAAkB;2CAAlB,kBAAkB;CAqN9B"}
@@ -1,6 +1,6 @@
1
1
  import { OnDestroy, OnInit } from '@angular/core';
2
2
  import { ActivatedRoute, Router } from '@angular/router';
3
- import { CarbonListItem, ColumnConfig, Pagination } from '@valtimo/components';
3
+ import { CarbonListItem, CarbonTag, ColumnConfig, Pagination } from '@valtimo/components';
4
4
  import { IconService } from 'carbon-components-angular';
5
5
  import { BehaviorSubject, Observable } from 'rxjs';
6
6
  import { LoggingEvent, LoggingEventSearchRequest } from '../../models';
@@ -14,6 +14,7 @@ export declare class LoggingListComponent implements OnInit, OnDestroy {
14
14
  readonly loading$: BehaviorSubject<boolean>;
15
15
  readonly logItems$: Observable<CarbonListItem>;
16
16
  readonly searchRequest$: BehaviorSubject<LoggingEventSearchRequest>;
17
+ readonly isSearchActive$: Observable<boolean>;
17
18
  readonly pagination$: BehaviorSubject<Pagination>;
18
19
  readonly logDetailsOpen$: BehaviorSubject<boolean>;
19
20
  readonly selectedLogEvent$: BehaviorSubject<LoggingEvent>;
@@ -27,6 +28,7 @@ export declare class LoggingListComponent implements OnInit, OnDestroy {
27
28
  onPaginationSet(size: number): void;
28
29
  onRowClickedEvent(rowClickEvent: LoggingEvent & {
29
30
  ctrlClick: boolean;
31
+ tags: CarbonTag[];
30
32
  }): void;
31
33
  onSearchSubmitEvent(searchRequest: LoggingEventSearchRequest): void;
32
34
  onClearFilter(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"logging-list.component.d.ts","sourceRoot":"","sources":["../../../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAqC,SAAS,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AACpF,OAAO,EAAC,cAAc,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EAEL,cAAc,EAEd,YAAY,EAEZ,UAAU,EAEX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAKL,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,eAAe,EAGf,UAAU,EAMX,MAAM,MAAM,CAAC;AACd,OAAO,EAGL,YAAY,EAGZ,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;;AAIjD,qBAkBa,oBAAqB,YAAW,MAAM,EAAE,SAAS;IA6D1D,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IA/DzB,SAAgB,QAAQ,2BAAsC;IAC9D,SAAgB,SAAS,EAAE,UAAU,CAAC,cAAc,CAAC,CA8BnD;IAEF,SAAgB,cAAc,6CAAsD;IACpF,SAAgB,WAAW,8BAAuD;IAClF,SAAgB,eAAe,2BAAuC;IACtE,SAAgB,iBAAiB,gCAAkD;IAEnF,SAAgB,MAAM,EAAE,YAAY,EAAE,CAiBpC;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;gBAGlC,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM;IAK1B,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAQzB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,iBAAiB,CAAC,aAAa,EAAE,YAAY,GAAG;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;IAM3E,mBAAmB,CAAC,aAAa,EAAE,yBAAyB,GAAG,IAAI;IAInE,aAAa,IAAI,IAAI;IAI5B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,2BAA2B;IAuBnC,OAAO,CAAC,6BAA6B;IAgBrC,OAAO,CAAC,gBAAgB;yCAnKb,oBAAoB;2CAApB,oBAAoB;CAuLhC"}
1
+ {"version":3,"file":"logging-list.component.d.ts","sourceRoot":"","sources":["../../../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAqC,SAAS,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AACpF,OAAO,EAAC,cAAc,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EAEL,cAAc,EAEd,SAAS,EACT,YAAY,EAEZ,UAAU,EAEX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAKL,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,eAAe,EAGf,UAAU,EAMX,MAAM,MAAM,CAAC;AACd,OAAO,EAGL,YAAY,EAGZ,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;;AAIjD,qBAkBa,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAgE1D,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAlEzB,SAAgB,QAAQ,2BAAsC;IAC9D,SAAgB,SAAS,EAAE,UAAU,CAAC,cAAc,CAAC,CA8BnD;IAEF,SAAgB,cAAc,6CAAsD;IACpF,SAAgB,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,CAElD;IACF,SAAgB,WAAW,8BAAuD;IAClF,SAAgB,eAAe,2BAAuC;IACtE,SAAgB,iBAAiB,gCAAkD;IAEnF,SAAgB,MAAM,EAAE,YAAY,EAAE,CAiBpC;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;gBAGlC,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM;IAK1B,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAQzB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,iBAAiB,CACtB,aAAa,EAAE,YAAY,GAAG;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,SAAS,EAAE,CAAA;KAAC,GACpE,IAAI;IAMA,mBAAmB,CAAC,aAAa,EAAE,yBAAyB,GAAG,IAAI;IAInE,aAAa,IAAI,IAAI;IAI5B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,2BAA2B;IAuBnC,OAAO,CAAC,6BAA6B;IAgBrC,OAAO,CAAC,gBAAgB;yCAxKb,oBAAoB;2CAApB,oBAAoB;CA4LhC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@valtimo/logging",
3
3
  "license": "EUPL-1.2",
4
- "version": "12.5.1",
4
+ "version": "12.6.0",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^17.2.2",
7
7
  "@angular/core": "^17.2.2"