@alfresco/adf-content-services
Version:
Alfresco ADF content services
244 lines • 60 kB
JavaScript
/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, DestroyRef, ElementRef, inject, ViewChild, ViewEncapsulation } from '@angular/core';
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
import { FileSizeOperator } from './file-size-operator.enum';
import { FileSizeUnit } from './file-size-unit.enum';
import { ReplaySubject, Subject } from 'rxjs';
import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { CommonModule } from '@angular/common';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatSelectModule } from '@angular/material/select';
import { SearchChipAutocompleteInputComponent } from '../search-chip-autocomplete-input';
import { map } from 'rxjs/operators';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@ngx-translate/core";
import * as i3 from "@angular/common";
import * as i4 from "@angular/material/form-field";
import * as i5 from "@angular/material/select";
import * as i6 from "@angular/material/core";
export class SearchPropertiesComponent {
get form() {
return this._form;
}
get fileSizeOperators() {
return this._fileSizeOperators;
}
get fileSizeUnits() {
return this._fileSizeUnits;
}
get fileSizeOperatorsMaxWidth() {
return this._fileSizeOperatorsMaxWidth;
}
get reset$() {
return this._reset$;
}
get selectedExtensions() {
return this.parseToAutocompleteOptions(this._selectedExtensions);
}
set selectedExtensions(extensions) {
this._selectedExtensions = this.parseFromAutocompleteOptions(extensions);
}
constructor(formBuilder, translateService) {
this.formBuilder = formBuilder;
this.translateService = translateService;
this.displayValue$ = new ReplaySubject(1);
this.autocompleteOptions = [];
this.preselectedOptions = [];
this._form = this.formBuilder.nonNullable.group({
fileSizeOperator: FileSizeOperator.AT_LEAST,
fileSize: undefined,
fileSizeUnit: FileSizeUnit.KB
});
this._fileSizeOperators = Object.keys(FileSizeOperator).map((key) => FileSizeOperator[key]);
this._fileSizeUnits = [FileSizeUnit.KB, FileSizeUnit.MB, FileSizeUnit.GB];
this.canvas = document.createElement('canvas');
this._reset$ = new Subject();
this.destroyRef = inject(DestroyRef);
this.filterExtensions = (extensions, filterValue) => {
const filterValueLowerCase = this.getExtensionWithoutDot(filterValue).toLowerCase();
const extensionWithDot = filterValue.startsWith('.');
return extensions.filter((option) => {
const optionLowerCase = option.value.toLowerCase();
return extensionWithDot && filterValueLowerCase
? optionLowerCase.startsWith(filterValueLowerCase)
: optionLowerCase.includes(filterValue);
});
};
}
ngOnInit() {
if (this.settings) {
if (!this.settings.fileExtensions) {
this.settings.fileExtensions = [];
}
this.autocompleteOptions = this.parseToAutocompleteOptions(this.settings.fileExtensions);
[this.sizeField, this.nameField] = this.settings.field.split(',');
}
if (this.startValue) {
this.setValue(this.startValue);
}
this.context.populateFilters
.asObservable()
.pipe(map((filtersQueries) => filtersQueries[this.id]), takeUntilDestroyed(this.destroyRef))
.subscribe((filterQuery) => {
if (filterQuery) {
filterQuery.fileSizeCondition.fileSizeUnit = this.fileSizeUnits.find((fileSizeUnit) => fileSizeUnit.bytes === filterQuery.fileSizeCondition.fileSizeUnit.bytes);
this.form.patchValue(filterQuery.fileSizeCondition);
this.form.updateValueAndValidity();
this._selectedExtensions = filterQuery.fileExtensions ?? [];
this.preselectedOptions = this.parseToAutocompleteOptions(this._selectedExtensions);
this.submitValues(false);
}
else {
this.reset(false);
}
this.context.filterLoaded.next();
});
}
ngAfterViewChecked() {
if (this.fileSizeOperatorSelectElement?.nativeElement.clientWidth && !this._fileSizeOperatorsMaxWidth) {
setTimeout(() => {
const extraFreeSpace = 20;
this._fileSizeOperatorsMaxWidth =
Math.max(...this._fileSizeOperators.map((operator) => this.getOperatorNameWidth(operator, this.getCanvasFont(this.fileSizeOperatorSelectElement.nativeElement)))) +
this.fileSizeOperatorSelectElement.nativeElement.querySelector('.mat-mdc-select-arrow-wrapper').clientWidth +
extraFreeSpace;
});
}
}
narrowDownAllowedCharacters(event) {
const value = event.target.value;
if (!event.target.value) {
return;
}
if (event.data !== ',' && event.data !== '.') {
event.target.value = value.replace(/[^0-9.,]/g, '');
}
}
clearNumberFieldWhenInvalid(event) {
if (!event.target.validity.valid) {
this.form.controls.fileSize.setValue(undefined);
}
}
preventIncorrectNumberCharacters(event) {
return event.key !== '-' && event.key !== 'e' && event.key !== '+';
}
compareFileExtensions(extension1, extension2) {
return extension1.value.toUpperCase() === extension2.value.toUpperCase();
}
getExtensionWithoutDot(extension) {
const extensionSplitByDot = extension.split('.');
return extensionSplitByDot[extensionSplitByDot.length - 1];
}
reset(updateContext = true) {
this.form.reset();
if (this.id && this.context) {
this.context.queryFragments[this.id] = '';
this.context.filterRawParams[this.id] = undefined;
if (updateContext) {
this.context.update();
}
}
this.reset$.next();
this.displayValue$.next('');
}
submitValues(updateContext = true) {
if (this.context?.filterRawParams) {
this.context.filterRawParams[this.id] = {
fileExtensions: this._selectedExtensions,
fileSizeCondition: this.form.value
};
}
if (this.settings && this.context) {
this.updateSettingsAndContext(updateContext);
}
}
hasValidValue() {
return true;
}
getCurrentValue() {
return {
fileSizeCondition: this.form.getRawValue(),
fileExtensions: this._selectedExtensions
};
}
setValue(searchProperties) {
this.form.patchValue(searchProperties.fileSizeCondition);
this.selectedExtensions = this.parseToAutocompleteOptions(searchProperties.fileExtensions ?? []);
this.submitValues();
}
updateSettingsAndContext(updateContext = true) {
let query = '';
let displayedValue = '';
if (this.form.value.fileSize !== undefined && this.form.value.fileSize !== null) {
displayedValue = `${this.translateService.instant(this.form.value.fileSizeOperator)} ${this.form.value.fileSize} ${this.translateService.instant(this.form.value.fileSizeUnit.abbreviation)}`;
const size = this.form.value.fileSize * this.form.value.fileSizeUnit.bytes;
switch (this.form.value.fileSizeOperator) {
case FileSizeOperator.AT_MOST:
query = `${this.sizeField}:[0 TO ${size}]`;
break;
case FileSizeOperator.AT_LEAST:
query = `${this.sizeField}:[${size} TO MAX]`;
break;
default:
query = `${this.sizeField}:[${size} TO ${size}]`;
}
}
if (this._selectedExtensions?.length) {
if (query) {
query += ' AND ';
displayedValue += ', ';
}
query += `${this.nameField}:("*.${this._selectedExtensions.join('" OR "*.')}")`;
displayedValue += this._selectedExtensions.join(', ');
}
this.displayValue$.next(displayedValue);
this.context.queryFragments[this.id] = query;
if (updateContext) {
this.context.update();
}
}
parseToAutocompleteOptions(array) {
return array.map((value) => ({ value }));
}
parseFromAutocompleteOptions(array) {
return array.flatMap((option) => option.value);
}
getOperatorNameWidth(operator, font) {
const context = this.canvas.getContext('2d');
context.font = font;
return context.measureText(this.translateService.instant(operator)).width;
}
getCssStyle(element, property) {
return window.getComputedStyle(element, null).getPropertyValue(property);
}
getCanvasFont(el) {
return `${this.getCssStyle(el, 'font-weight')} ${this.getCssStyle(el, 'font-size')} ${this.getCssStyle(el, 'font-family')}`;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchPropertiesComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: SearchPropertiesComponent, isStandalone: true, selector: "adf-search-properties", viewQueries: [{ propertyName: "fileSizeOperatorSelectElement", first: true, predicate: ["fileSizeOperatorSelect"], descendants: true, read: ElementRef }], ngImport: i0, template: "<form [formGroup]=\"form\" class=\"adf-search-properties-form\">\n <div class=\"adf-search-properties-file-size-container\">\n <label\n for=\"adf-search-properties-file-size\"\n class=\"adf-search-properties-file-size-label\">\n {{ 'SEARCH.SEARCH_PROPERTIES.FILE_SIZE' | translate }}\n </label>\n <mat-form-field\n [style.width.px]=\"fileSizeOperatorsMaxWidth\"\n subscriptSizing=\"dynamic\"\n class=\"adf-search-properties-file-size-operator\">\n <mat-select\n data-automation-id=\"adf-search-properties-file-size-operator-select\"\n [formControl]=\"form.controls.fileSizeOperator\"\n #fileSizeOperatorSelect>\n <mat-option\n *ngFor=\"let fileSizeOperator of fileSizeOperators\"\n [value]=\"fileSizeOperator\">\n {{ fileSizeOperator | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <input\n [formControl]=\"form.controls.fileSize\"\n type=\"number\"\n min=\"0\"\n step=\"any\"\n (input)=\"narrowDownAllowedCharacters($event)\"\n (keydown)=\"preventIncorrectNumberCharacters($event)\"\n id=\"adf-search-properties-file-size\"\n [placeholder]=\"'SEARCH.SEARCH_PROPERTIES.FILE_SIZE_PLACEHOLDER' | translate\"\n (blur)=\"clearNumberFieldWhenInvalid($event)\"\n data-automation-id=\"adf-search-properties-file-size-input\" />\n <mat-form-field class=\"adf-search-properties-file-size-unit\" subscriptSizing=\"dynamic\">\n <mat-select\n [formControl]=\"form.controls.fileSizeUnit\"\n data-automation-id=\"adf-search-properties-file-size-unit-select\">\n <mat-option\n *ngFor=\"let fileSizeUnit of fileSizeUnits\"\n [value]=\"fileSizeUnit\">\n {{ fileSizeUnit.abbreviation | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <p class=\"adf-search-properties-file-type-label\">{{ 'SEARCH.SEARCH_PROPERTIES.FILE_TYPE' | translate }}</p>\n <adf-search-chip-autocomplete-input\n [autocompleteOptions]=\"autocompleteOptions\"\n [preselectedOptions]=\"preselectedOptions\"\n (optionsChanged)=\"selectedExtensions = $event\"\n [onReset$]=\"reset$\"\n [allowOnlyPredefinedValues]=\"false\"\n [compareOption]=\"compareFileExtensions\"\n [formatChipValue]=\"getExtensionWithoutDot\"\n [filter]=\"filterExtensions\"\n placeholder=\"SEARCH.SEARCH_PROPERTIES.FILE_TYPE\" />\n</form>\n", styles: ["adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .adf-search-properties-file-size-label{margin-top:4px;display:block}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:9px;padding-bottom:9px;display:inline-block}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-form-field-infix{height:37.5px;min-height:37.5px;display:inline-block}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-select-trigger{height:17.5px}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-select-arrow-wrapper{width:16px}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mdc-line-ripple:before{display:none}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-select-arrow{margin-left:5px}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-form-field{margin-bottom:18px}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input{display:block}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-text-field--outlined-start,adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-text-field--outlined-end{border-top:1px solid var(--adf-theme-mat-grey-color-a400);border-bottom:1px solid var(--adf-theme-mat-grey-color-a400)}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-text-field--outlined-start{border-left:1px solid var(--adf-theme-mat-grey-color-a400)}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-text-field--outlined-end{border-right:1px solid var(--adf-theme-mat-grey-color-a400)}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mat-focused .mdc-text-field--outlined{outline:2px auto -webkit-focus-ring-color}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mat-form-field-appearance-outline .mdc-text-field--outlined-thick .mdc-text-field--outlined-start,adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mat-form-field-appearance-outline .mdc-text-field--outlined-thick .mdc-text-field--outlined-end{border-width:1px}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-notched-outline__leading{border-color:var(--adf-theme-foreground-text-color-027)}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-notched-outline__trailing{border-color:var(--adf-theme-foreground-text-color-027)}adf-search-properties input,adf-search-properties .mat-form-field-infix.mat-form-field-infix{height:25px;border:1px solid var(--adf-theme-mat-grey-color-a400);border-radius:5px;margin-top:5px;padding:5px;font-size:14px;color:var(--adf-theme-foreground-text-color);margin-left:8px;margin-right:8px}adf-search-properties .adf-search-properties-file-size-operator .mat-mdc-form-field-infix,adf-search-properties .adf-search-properties-file-size-unit .mat-mdc-form-field-infix{border:1px solid var(--adf-theme-mat-grey-color-a400);border-radius:5px;padding:9px}adf-search-properties .adf-search-properties-file-size-operator.mat-focused .mat-mdc-form-field-infix,adf-search-properties .adf-search-properties-file-size-unit.mat-focused .mat-mdc-form-field-infix{outline:2px auto -webkit-focus-ring-color}adf-search-properties .adf-search-properties-file-size-unit{width:78px}adf-search-properties .adf-search-properties-file-type-label{margin-top:10px;margin-bottom:6px}.adf-search-filter-chip-menu-panel-properties{max-width:unset}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: SearchChipAutocompleteInputComponent, selector: "adf-search-chip-autocomplete-input", inputs: ["autocompleteOptions", "preselectedOptions", "onReset$", "allowOnlyPredefinedValues", "placeholder", "compareOption", "formatChipValue", "filter"], outputs: ["optionsChanged", "inputChanged"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchPropertiesComponent, decorators: [{
type: Component,
args: [{ selector: 'adf-search-properties', standalone: true, imports: [CommonModule, ReactiveFormsModule, TranslateModule, MatFormFieldModule, MatSelectModule, SearchChipAutocompleteInputComponent], encapsulation: ViewEncapsulation.None, template: "<form [formGroup]=\"form\" class=\"adf-search-properties-form\">\n <div class=\"adf-search-properties-file-size-container\">\n <label\n for=\"adf-search-properties-file-size\"\n class=\"adf-search-properties-file-size-label\">\n {{ 'SEARCH.SEARCH_PROPERTIES.FILE_SIZE' | translate }}\n </label>\n <mat-form-field\n [style.width.px]=\"fileSizeOperatorsMaxWidth\"\n subscriptSizing=\"dynamic\"\n class=\"adf-search-properties-file-size-operator\">\n <mat-select\n data-automation-id=\"adf-search-properties-file-size-operator-select\"\n [formControl]=\"form.controls.fileSizeOperator\"\n #fileSizeOperatorSelect>\n <mat-option\n *ngFor=\"let fileSizeOperator of fileSizeOperators\"\n [value]=\"fileSizeOperator\">\n {{ fileSizeOperator | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <input\n [formControl]=\"form.controls.fileSize\"\n type=\"number\"\n min=\"0\"\n step=\"any\"\n (input)=\"narrowDownAllowedCharacters($event)\"\n (keydown)=\"preventIncorrectNumberCharacters($event)\"\n id=\"adf-search-properties-file-size\"\n [placeholder]=\"'SEARCH.SEARCH_PROPERTIES.FILE_SIZE_PLACEHOLDER' | translate\"\n (blur)=\"clearNumberFieldWhenInvalid($event)\"\n data-automation-id=\"adf-search-properties-file-size-input\" />\n <mat-form-field class=\"adf-search-properties-file-size-unit\" subscriptSizing=\"dynamic\">\n <mat-select\n [formControl]=\"form.controls.fileSizeUnit\"\n data-automation-id=\"adf-search-properties-file-size-unit-select\">\n <mat-option\n *ngFor=\"let fileSizeUnit of fileSizeUnits\"\n [value]=\"fileSizeUnit\">\n {{ fileSizeUnit.abbreviation | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <p class=\"adf-search-properties-file-type-label\">{{ 'SEARCH.SEARCH_PROPERTIES.FILE_TYPE' | translate }}</p>\n <adf-search-chip-autocomplete-input\n [autocompleteOptions]=\"autocompleteOptions\"\n [preselectedOptions]=\"preselectedOptions\"\n (optionsChanged)=\"selectedExtensions = $event\"\n [onReset$]=\"reset$\"\n [allowOnlyPredefinedValues]=\"false\"\n [compareOption]=\"compareFileExtensions\"\n [formatChipValue]=\"getExtensionWithoutDot\"\n [filter]=\"filterExtensions\"\n placeholder=\"SEARCH.SEARCH_PROPERTIES.FILE_TYPE\" />\n</form>\n", styles: ["adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .adf-search-properties-file-size-label{margin-top:4px;display:block}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:9px;padding-bottom:9px;display:inline-block}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-form-field-infix{height:37.5px;min-height:37.5px;display:inline-block}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-select-trigger{height:17.5px}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-select-arrow-wrapper{width:16px}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mdc-line-ripple:before{display:none}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-select-arrow{margin-left:5px}adf-search-properties .adf-search-properties-form .adf-search-properties-file-size-container .mat-mdc-form-field{margin-bottom:18px}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input{display:block}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-text-field--outlined-start,adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-text-field--outlined-end{border-top:1px solid var(--adf-theme-mat-grey-color-a400);border-bottom:1px solid var(--adf-theme-mat-grey-color-a400)}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-text-field--outlined-start{border-left:1px solid var(--adf-theme-mat-grey-color-a400)}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-text-field--outlined-end{border-right:1px solid var(--adf-theme-mat-grey-color-a400)}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mat-focused .mdc-text-field--outlined{outline:2px auto -webkit-focus-ring-color}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mat-form-field-appearance-outline .mdc-text-field--outlined-thick .mdc-text-field--outlined-start,adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mat-form-field-appearance-outline .mdc-text-field--outlined-thick .mdc-text-field--outlined-end{border-width:1px}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-notched-outline__leading{border-color:var(--adf-theme-foreground-text-color-027)}adf-search-properties .adf-search-properties-form adf-search-chip-autocomplete-input .mdc-notched-outline__trailing{border-color:var(--adf-theme-foreground-text-color-027)}adf-search-properties input,adf-search-properties .mat-form-field-infix.mat-form-field-infix{height:25px;border:1px solid var(--adf-theme-mat-grey-color-a400);border-radius:5px;margin-top:5px;padding:5px;font-size:14px;color:var(--adf-theme-foreground-text-color);margin-left:8px;margin-right:8px}adf-search-properties .adf-search-properties-file-size-operator .mat-mdc-form-field-infix,adf-search-properties .adf-search-properties-file-size-unit .mat-mdc-form-field-infix{border:1px solid var(--adf-theme-mat-grey-color-a400);border-radius:5px;padding:9px}adf-search-properties .adf-search-properties-file-size-operator.mat-focused .mat-mdc-form-field-infix,adf-search-properties .adf-search-properties-file-size-unit.mat-focused .mat-mdc-form-field-infix{outline:2px auto -webkit-focus-ring-color}adf-search-properties .adf-search-properties-file-size-unit{width:78px}adf-search-properties .adf-search-properties-file-type-label{margin-top:10px;margin-bottom:6px}.adf-search-filter-chip-menu-panel-properties{max-width:unset}\n"] }]
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.TranslateService }], propDecorators: { fileSizeOperatorSelectElement: [{
type: ViewChild,
args: ['fileSizeOperatorSelect', { read: ElementRef }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXByb3BlcnRpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9zZWFyY2gvY29tcG9uZW50cy9zZWFyY2gtcHJvcGVydGllcy9zZWFyY2gtcHJvcGVydGllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3NlYXJjaC9jb21wb25lbnRzL3NlYXJjaC1wcm9wZXJ0aWVzL3NlYXJjaC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBb0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pGLE9B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LGVBQWUsRUFBRSxvQ0FBb0MsQ0FBQyxpQkFHekgsaUJBQWlCLENBQUMsSUFBSTsrR0EwQnJDLDZCQUE2QjtzQkFENUIsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENvbXBvbmVudCwgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsZVNpemVDb25kaXRpb24gfSBmcm9tICcuL2ZpbGUtc2l6ZS1jb25kaXRpb24nO1xuaW1wb3J0IHsgRmlsZVNpemVPcGVyYXRvciB9IGZyb20gJy4vZmlsZS1zaXplLW9wZXJhdG9yLmVudW0nO1xuaW1wb3J0IHsgRmlsZVNpemVVbml0IH0gZnJvbSAnLi9maWxlLXNpemUtdW5pdC5lbnVtJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlYXJjaFdpZGdldFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NlYXJjaC13aWRnZXQtc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlYXJjaFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWFyY2gtcXVlcnktYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnRpZXMgfSBmcm9tICcuL3NlYXJjaC1wcm9wZXJ0aWVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU2VhcmNoV2lkZ2V0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NlYXJjaC13aWRnZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZU9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hdXRvY29tcGxldGUtb3B0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgU2VhcmNoQ2hpcEF1dG9jb21wbGV0ZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWNoaXAtYXV0b2NvbXBsZXRlLWlucHV0JztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtc2VhcmNoLXByb3BlcnRpZXMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBNYXRGb3JtRmllbGRNb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgU2VhcmNoQ2hpcEF1dG9jb21wbGV0ZUlucHV0Q29tcG9uZW50XSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NlYXJjaC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hQcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBTZWFyY2hXaWRnZXQge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2V0dGluZ3M/OiBTZWFyY2hXaWRnZXRTZXR0aW5ncztcbiAgICBjb250ZXh0PzogU2VhcmNoUXVlcnlCdWlsZGVyU2VydmljZTtcbiAgICBzdGFydFZhbHVlOiBTZWFyY2hQcm9wZXJ0aWVzO1xuICAgIGRpc3BsYXlWYWx1ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KDEpO1xuICAgIGF1dG9jb21wbGV0ZU9wdGlvbnM6IEF1dG9jb21wbGV0ZU9wdGlvbltdID0gW107XG4gICAgcHJlc2VsZWN0ZWRPcHRpb25zOiBBdXRvY29tcGxldGVPcHRpb25bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIubm9uTnVsbGFibGUuZ3JvdXA8RmlsZVNpemVDb25kaXRpb24+KHtcbiAgICAgICAgZmlsZVNpemVPcGVyYXRvcjogRmlsZVNpemVPcGVyYXRvci5BVF9MRUFTVCxcbiAgICAgICAgZmlsZVNpemU6IHVuZGVmaW5lZCxcbiAgICAgICAgZmlsZVNpemVVbml0OiBGaWxlU2l6ZVVuaXQuS0JcbiAgICB9KTtcbiAgICBwcml2YXRlIF9maWxlU2l6ZU9wZXJhdG9ycyA9IE9iamVjdC5rZXlzKEZpbGVTaXplT3BlcmF0b3IpLm1hcDxzdHJpbmc+KChrZXkpID0+IEZpbGVTaXplT3BlcmF0b3Jba2V5XSk7XG4gICAgcHJpdmF0ZSBfZmlsZVNpemVVbml0cyA9IFtGaWxlU2l6ZVVuaXQuS0IsIEZpbGVTaXplVW5pdC5NQiwgRmlsZVNpemVVbml0LkdCXTtcbiAgICBwcml2YXRlIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIHByaXZhdGUgX2ZpbGVTaXplT3BlcmF0b3JzTWF4V2lkdGg6IG51bWJlcjtcbiAgICBwcml2YXRlIF9zZWxlY3RlZEV4dGVuc2lvbnM6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgX3Jlc2V0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBzaXplRmllbGQ6IHN0cmluZztcbiAgICBwcml2YXRlIG5hbWVGaWVsZDogc3RyaW5nO1xuXG4gICAgQFZpZXdDaGlsZCgnZmlsZVNpemVPcGVyYXRvclNlbGVjdCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGZpbGVTaXplT3BlcmF0b3JTZWxlY3RFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgZ2V0IGZvcm0oKTogU2VhcmNoUHJvcGVydGllc0NvbXBvbmVudFsnX2Zvcm0nXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtO1xuICAgIH1cblxuICAgIGdldCBmaWxlU2l6ZU9wZXJhdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlU2l6ZU9wZXJhdG9ycztcbiAgICB9XG5cbiAgICBnZXQgZmlsZVNpemVVbml0cygpOiBGaWxlU2l6ZVVuaXRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlU2l6ZVVuaXRzO1xuICAgIH1cblxuICAgIGdldCBmaWxlU2l6ZU9wZXJhdG9yc01heFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlU2l6ZU9wZXJhdG9yc01heFdpZHRoO1xuICAgIH1cblxuICAgIGdldCByZXNldCQoKTogU3ViamVjdDx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNldCQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkRXh0ZW5zaW9ucygpOiBBdXRvY29tcGxldGVPcHRpb25bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVG9BdXRvY29tcGxldGVPcHRpb25zKHRoaXMuX3NlbGVjdGVkRXh0ZW5zaW9ucyk7XG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdGVkRXh0ZW5zaW9ucyhleHRlbnNpb25zOiBBdXRvY29tcGxldGVPcHRpb25bXSkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEV4dGVuc2lvbnMgPSB0aGlzLnBhcnNlRnJvbUF1dG9jb21wbGV0ZU9wdGlvbnMoZXh0ZW5zaW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmZpbGVFeHRlbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5maWxlRXh0ZW5zaW9ucyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5wYXJzZVRvQXV0b2NvbXBsZXRlT3B0aW9ucyh0aGlzLnNldHRpbmdzLmZpbGVFeHRlbnNpb25zKTtcbiAgICAgICAgICAgIFt0aGlzLnNpemVGaWVsZCwgdGhpcy5uYW1lRmllbGRdID0gdGhpcy5zZXR0aW5ncy5maWVsZC5zcGxpdCgnLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5zdGFydFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQucG9wdWxhdGVGaWx0ZXJzXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoZmlsdGVyc1F1ZXJpZXMpID0+IGZpbHRlcnNRdWVyaWVzW3RoaXMuaWRdKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZmlsdGVyUXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUXVlcnkuZmlsZVNpemVDb25kaXRpb24uZmlsZVNpemVVbml0ID0gdGhpcy5maWxlU2l6ZVVuaXRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmlsZVNpemVVbml0KSA9PiBmaWxlU2l6ZVVuaXQuYnl0ZXMgPT09IGZpbHRlclF1ZXJ5LmZpbGVTaXplQ29uZGl0aW9uLmZpbGVTaXplVW5pdC5ieXRlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShmaWx0ZXJRdWVyeS5maWxlU2l6ZUNvbmRpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRXh0ZW5zaW9ucyA9IGZpbHRlclF1ZXJ5LmZpbGVFeHRlbnNpb25zID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXNlbGVjdGVkT3B0aW9ucyA9IHRoaXMucGFyc2VUb0F1dG9jb21wbGV0ZU9wdGlvbnModGhpcy5fc2VsZWN0ZWRFeHRlbnNpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRWYWx1ZXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsdGVyTG9hZGVkLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZVNpemVPcGVyYXRvclNlbGVjdEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggJiYgIXRoaXMuX2ZpbGVTaXplT3BlcmF0b3JzTWF4V2lkdGgpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhRnJlZVNwYWNlID0gMjA7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZVNpemVPcGVyYXRvcnNNYXhXaWR0aCA9XG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZmlsZVNpemVPcGVyYXRvcnMubWFwKChvcGVyYXRvcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wZXJhdG9yTmFtZVdpZHRoKG9wZXJhdG9yLCB0aGlzLmdldENhbnZhc0ZvbnQodGhpcy5maWxlU2l6ZU9wZXJhdG9yU2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZVNpemVPcGVyYXRvclNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LW1kYy1zZWxlY3QtYXJyb3ctd3JhcHBlcicpLmNsaWVudFdpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFGcmVlU3BhY2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5hcnJvd0Rvd25BbGxvd2VkQ2hhcmFjdGVycyhldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICBpZiAoIShldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGV2ZW50IGFzIElucHV0RXZlbnQpLmRhdGEgIT09ICcsJyAmJiAoZXZlbnQgYXMgSW5wdXRFdmVudCkuZGF0YSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gdmFsdWUucmVwbGFjZSgvW14wLTkuLF0vZywgJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJOdW1iZXJGaWVsZFdoZW5JbnZhbGlkKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGlmICghKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWxpZGl0eS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmZpbGVTaXplLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2ZW50SW5jb3JyZWN0TnVtYmVyQ2hhcmFjdGVycyhldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQua2V5ICE9PSAnLScgJiYgZXZlbnQua2V5ICE9PSAnZScgJiYgZXZlbnQua2V5ICE9PSAnKyc7XG4gICAgfVxuXG4gICAgY29tcGFyZUZpbGVFeHRlbnNpb25zKGV4dGVuc2lvbjE6IEF1dG9jb21wbGV0ZU9wdGlvbiwgZXh0ZW5zaW9uMjogQXV0b2NvbXBsZXRlT3B0aW9uKTog