@hxui/angular
Version:
* * *
198 lines (195 loc) • 19.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Component, Input, Output, ViewChild, EventEmitter } from '@angular/core';
import { FilterType } from './filters-type.enum';
import { DropdownDirective } from '../dropdown/dropdown.directive';
import { animate, state, style, transition, trigger } from '@angular/animations';
export class FiltersCollapsedComponent {
constructor() {
this.FilterType = FilterType;
this.activePane = 'left';
this.data = [];
this.onFilter = new EventEmitter();
this.onSearchFilter = new EventEmitter();
}
/**
* @return {?}
*/
ngOnInit() {
}
/**
* @param {?} filter
* @return {?}
*/
clearSearch(filter) {
filter.value = '';
this.onSearchFilter.emit({ filter: filter, value: filter.value });
}
/**
* @param {?} filter
* @return {?}
*/
changeFilterSelection(filter) {
this.selectedFilter = filter;
this.activePane = 'right';
}
/**
* @param {?} option
* @return {?}
*/
selectFilterOption(option) {
this.onFilter.emit({ filter: this.selectedFilter, option: option });
this.back();
}
/**
* @param {?} filter
* @return {?}
*/
searchFilter(filter) {
this.onSearchFilter.emit({ filter: filter });
}
/**
* @return {?}
*/
back() {
this.activePane = 'left';
}
/**
* @param {?} $event
* @return {?}
*/
onSlideDone($event) {
if ($event.toState === 'left') {
this.selectedFilter = null;
}
}
/**
* @return {?}
*/
totalActiveFilters() {
/** @type {?} */
let count = 0;
this.data.forEach((filter, index) => {
if (!filter.isDefaultOptionActive()) {
count++;
}
});
return count;
}
/**
* Used for track by and boost performance
* @param {?} index
* @param {?} action
* @return {?}
*/
trackByFn(index, action) {
return index;
}
}
FiltersCollapsedComponent.decorators = [
{ type: Component, args: [{
selector: 'hxa-filters-collapsed',
template: `<div class="hx-dropdown ml-1 collapsedFilter" #dropdown="hx-dropdown" hxaDropdown [autoClose]="false" >
<button id="collapsedFilterTrigger" type="button" class="hx-button hx-button-dropdown" hxaDropdownToggle>
<span>{{(totalActiveFilters() > 0)? 'Filtered ('+totalActiveFilters()+')' : 'Filters' }}</span>
<span class="hx-icon-control"><i class="icon icon-caret-down"></i></span>
</button>
<div class="hx-dropdown-menu has-limited-width collapsedFilter__menu panes" *hxaDropdownMenu>
<ul class="panes__inner" []="activePane" (.done)="onSlideDone($event)">
<li id="filterSelections" class="panes__item">
<ng-container *ngFor="let filter of data;trackBy: trackByFn;let lastItem = last;">
<div class="hx-dropdown-header itemHeader">{{filter.label}}</div>
<!-- single select -->
<ng-container *ngIf="filter.type === FilterType.SingleSelect">
<ul class="hx-list-group">
<li>
<a [id]="filter?.id + '-trigger'" (click)="changeFilterSelection(filter)" title="{{filter.selected?.label}}">
<div class="hx-list-action" *ngIf="filter.selected?.icon">
<i class="{{filter.selected?.icon}}"></i>
</div>
<div class="hx-list-content pl-1 is-text-ellipsed is-text-weight-bolder">{{filter.selected?.label}}</div>
<div class="hx-list-action">
<i class="icon icon-angle-right"></i>
</div>
</a>
</li>
</ul>
</ng-container>
<!-- search filter -->
<div *ngIf="filter.type === FilterType.Search" class="pl-3 pr-4">
<div [id]="filter.id" class="hx-input-group">
<i class="hx-icon icon-search mt-1"></i>
<div class="hx-input-control my-0">
<input class="hx-input"
type="search"
(input)="searchFilter(filter)"
[(ngModel)]="filter.value">
<label class="hx-label"></label>
<div class="hx-help"></div>
</div>
<div class="hx-input-actions" *ngIf="filter.value">
<div class="hx-button-group">
<button class="hx-button is-flat" (click)="clearSearch(filter)"><span class="hx-icon-control"><i class="icon icon-close-empty"></i></span></button>
</div>
</div>
</div>
</div>
</ng-container>
</li>
<li id="filterOptions" class="panes__item">
<div class="hx-toolbar is-xsmall">
<button id="paneBack" class="hx-button is-flat" (click)="back()"><i class="hx-icon icon-arrow-left"></i></button>
<span>{{selectedFilter?.label}}</span>
</div>
<ul [id]="selectedFilter?.id + '-options'" class="hx-list-group options">
<li class="options__item" *ngFor="let option of selectedFilter?.options;trackBy: trackByFn">
<a hxaDropdownItem (click)="selectFilterOption(option)" title="{{option?.label}}">
<div class="hx-list-action" *ngIf="option?.icon">
<i class="{{option?.icon}}"></i>
</div>
<div class="hx-list-content pl-1 is-text-ellipsed">{{option?.label}}</div>
</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
`,
styles: [`.collapsedFilter__menu.panes{width:15rem;overflow:hidden}.collapsedFilter__menu.panes .panes__inner{display:flex;list-style:none;padding:0;margin-top:0}.collapsedFilter__menu.panes .panes__item{min-width:15rem;max-width:15rem}.collapsedFilter__menu.panes .panes__item>ul{max-height:20rem;overflow-y:auto;overflow-x:hidden}.collapsedFilter__menu.panes .panes__item>ul>li:last-child:not(:first-child) a{border-bottom:none}`],
animations: [
trigger('slide', [
state('left', style({ transform: 'translateX(0)' })),
state('right', style({ transform: 'translateX(-100%)' })),
transition('* => *', animate(200))
])
]
},] },
];
/** @nocollapse */
FiltersCollapsedComponent.ctorParameters = () => [];
FiltersCollapsedComponent.propDecorators = {
dropdown: [{ type: ViewChild, args: ['dropdown',] }],
data: [{ type: Input }],
onFilter: [{ type: Output }],
onSearchFilter: [{ type: Output }]
};
if (false) {
/** @type {?} */
FiltersCollapsedComponent.prototype.dropdown;
/** @type {?} */
FiltersCollapsedComponent.prototype.FilterType;
/** @type {?} */
FiltersCollapsedComponent.prototype.activePane;
/** @type {?} */
FiltersCollapsedComponent.prototype.selectedFilter;
/** @type {?} */
FiltersCollapsedComponent.prototype.data;
/** @type {?} */
FiltersCollapsedComponent.prototype.onFilter;
/** @type {?} */
FiltersCollapsedComponent.prototype.onSearchFilter;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy1jb2xsYXBzZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGh4dWkvYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9maWx0ZXJzL2ZpbHRlcnMtY29sbGFwc2VkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFxRi9FLE1BQU0sT0FBTyx5QkFBeUI7SUFhcEM7UUFUQSxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFHWCxTQUFJLEdBQW1CLEVBQUUsQ0FBQztRQUV6QixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFOUIsQ0FBQzs7OztJQUVqQixRQUFRO0lBQ1IsQ0FBQzs7Ozs7SUFFRCxXQUFXLENBQUMsTUFBb0I7UUFDOUIsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDOzs7OztJQUVELHFCQUFxQixDQUFDLE1BQW9CO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBQzVCLENBQUM7Ozs7O0lBRUQsa0JBQWtCLENBQUUsTUFBcUI7UUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDOzs7OztJQUVELFlBQVksQ0FBQyxNQUFvQjtRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Ozs7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDM0IsQ0FBQzs7Ozs7SUFFRCxXQUFXLENBQUMsTUFBTTtRQUNoQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7OztJQUVELGtCQUFrQjs7WUFDWixLQUFLLEdBQUcsQ0FBQztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBb0IsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUU7Z0JBQ25DLEtBQUssRUFBRSxDQUFDO2FBQ1Q7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7OztJQU1ELFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUNyQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OztZQWhKRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxRVg7Z0JBQ0MsTUFBTSxFQUFFLENBQUMsc2FBQXNhLENBQUM7Z0JBQ2hiLFVBQVUsRUFBRTtvQkFDVixPQUFPLENBQUMsT0FBTyxFQUFFO3dCQUNmLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7d0JBQ3BELEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQzt3QkFDekQsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ25DLENBQUM7aUJBQ0Y7YUFDSDs7Ozs7dUJBR0UsU0FBUyxTQUFDLFVBQVU7bUJBTXBCLEtBQUs7dUJBRUwsTUFBTTs2QkFDTixNQUFNOzs7O0lBVFAsNkNBQW1EOztJQUVuRCwrQ0FBd0I7O0lBQ3hCLCtDQUFvQjs7SUFDcEIsbURBQTZCOztJQUU3Qix5Q0FBbUM7O0lBRW5DLDZDQUF3Qzs7SUFDeEMsbURBQThDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0ZpbHRlclR5cGV9IGZyb20gJy4vZmlsdGVycy10eXBlLmVudW0nO1xyXG5pbXBvcnQge0ZpbHRlcnNNb2RlbH0gZnJvbSAnLi9maWx0ZXJzLm1vZGVsJztcclxuaW1wb3J0IHtJRmlsdGVyT3B0aW9uLCBJRmlsdGVyc0NvbmZpZ30gZnJvbSAnLi9maWx0ZXJzLWNvbmZpZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0Ryb3Bkb3duRGlyZWN0aXZlfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcblxyXG50eXBlIFBhbmVUeXBlID0gJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaHhhLWZpbHRlcnMtY29sbGFwc2VkJyxcclxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJoeC1kcm9wZG93biAgbWwtMSBjb2xsYXBzZWRGaWx0ZXJcIiAjZHJvcGRvd249XCJoeC1kcm9wZG93blwiICBoeGFEcm9wZG93biAgW2F1dG9DbG9zZV09XCJmYWxzZVwiID5cclxuICA8YnV0dG9uIGlkPVwiY29sbGFwc2VkRmlsdGVyVHJpZ2dlclwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImh4LWJ1dHRvbiBoeC1idXR0b24tZHJvcGRvd25cIiBoeGFEcm9wZG93blRvZ2dsZT5cclxuICAgIDxzcGFuPnt7KHRvdGFsQWN0aXZlRmlsdGVycygpID4gMCk/ICdGaWx0ZXJlZCAoJyt0b3RhbEFjdGl2ZUZpbHRlcnMoKSsnKScgOiAnRmlsdGVycycgfX08L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cImh4LWljb24tY29udHJvbFwiPjxpIGNsYXNzPVwiaWNvbiBpY29uLWNhcmV0LWRvd25cIj48L2k+PC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxkaXYgY2xhc3M9XCJoeC1kcm9wZG93bi1tZW51IGhhcy1saW1pdGVkLXdpZHRoIGNvbGxhcHNlZEZpbHRlcl9fbWVudSBwYW5lc1wiICpoeGFEcm9wZG93bk1lbnU+XHJcbiAgICA8dWwgY2xhc3M9XCJwYW5lc19faW5uZXJcIiBbQHNsaWRlXT1cImFjdGl2ZVBhbmVcIiAoQHNsaWRlLmRvbmUpPVwib25TbGlkZURvbmUoJGV2ZW50KVwiPlxyXG4gICAgICA8bGkgaWQ9XCJmaWx0ZXJTZWxlY3Rpb25zXCIgY2xhc3M9XCJwYW5lc19faXRlbVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBkYXRhO3RyYWNrQnk6IHRyYWNrQnlGbjtsZXQgbGFzdEl0ZW0gPSBsYXN0O1wiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoeC1kcm9wZG93bi1oZWFkZXIgaXRlbUhlYWRlclwiPnt7ZmlsdGVyLmxhYmVsfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIHNpbmdsZSBzZWxlY3QgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09IEZpbHRlclR5cGUuU2luZ2xlU2VsZWN0XCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImh4LWxpc3QtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICA8YSBbaWRdPVwiZmlsdGVyPy5pZCArICctdHJpZ2dlcidcIiAoY2xpY2spPVwiY2hhbmdlRmlsdGVyU2VsZWN0aW9uKGZpbHRlcilcIiB0aXRsZT1cInt7ZmlsdGVyLnNlbGVjdGVkPy5sYWJlbH19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoeC1saXN0LWFjdGlvblwiICpuZ0lmPVwiZmlsdGVyLnNlbGVjdGVkPy5pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e2ZpbHRlci5zZWxlY3RlZD8uaWNvbn19XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImh4LWxpc3QtY29udGVudCBwbC0xIGlzLXRleHQtZWxsaXBzZWQgaXMtdGV4dC13ZWlnaHQtYm9sZGVyXCI+e3tmaWx0ZXIuc2VsZWN0ZWQ/LmxhYmVsfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImh4LWxpc3QtYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIGljb24tYW5nbGUtcmlnaHRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8IS0tIHNlYXJjaCBmaWx0ZXIgLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09IEZpbHRlclR5cGUuU2VhcmNoXCIgY2xhc3M9XCJwbC0zIHByLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBbaWRdPVwiZmlsdGVyLmlkXCIgIGNsYXNzPVwiaHgtaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImh4LWljb24gaWNvbi1zZWFyY2ggbXQtMVwiPjwvaT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHgtaW5wdXQtY29udHJvbCBteS0wXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJoeC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInNlYXJjaEZpbHRlcihmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaHgtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImh4LWhlbHBcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHgtaW5wdXQtYWN0aW9uc1wiICpuZ0lmPVwiZmlsdGVyLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHgtYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJoeC1idXR0b24gaXMtZmxhdFwiIChjbGljayk9XCJjbGVhclNlYXJjaChmaWx0ZXIpXCI+PHNwYW4gY2xhc3M9XCJoeC1pY29uLWNvbnRyb2xcIj48aSBjbGFzcz1cImljb24gaWNvbi1jbG9zZS1lbXB0eVwiPjwvaT48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpIGlkPVwiZmlsdGVyT3B0aW9uc1wiIGNsYXNzPVwicGFuZXNfX2l0ZW1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaHgtdG9vbGJhciBpcy14c21hbGxcIj5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJwYW5lQmFja1wiIGNsYXNzPVwiaHgtYnV0dG9uIGlzLWZsYXRcIiAoY2xpY2spPVwiYmFjaygpXCI+PGkgY2xhc3M9XCJoeC1pY29uIGljb24tYXJyb3ctbGVmdFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgIDxzcGFuPnt7c2VsZWN0ZWRGaWx0ZXI/LmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsIFtpZF09XCJzZWxlY3RlZEZpbHRlcj8uaWQgKyAnLW9wdGlvbnMnXCIgY2xhc3M9XCJoeC1saXN0LWdyb3VwIG9wdGlvbnNcIj5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm9wdGlvbnNfX2l0ZW1cIiAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RlZEZpbHRlcj8ub3B0aW9uczt0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgICAgICAgICAgPGEgaHhhRHJvcGRvd25JdGVtIChjbGljayk9XCJzZWxlY3RGaWx0ZXJPcHRpb24ob3B0aW9uKVwiIHRpdGxlPVwie3tvcHRpb24/LmxhYmVsfX1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaHgtbGlzdC1hY3Rpb25cIiAqbmdJZj1cIm9wdGlvbj8uaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e29wdGlvbj8uaWNvbn19XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoeC1saXN0LWNvbnRlbnQgcGwtMSBpcy10ZXh0LWVsbGlwc2VkXCI+e3tvcHRpb24/LmxhYmVsfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbmAsXHJcbiAgc3R5bGVzOiBbYC5jb2xsYXBzZWRGaWx0ZXJfX21lbnUucGFuZXN7d2lkdGg6MTVyZW07b3ZlcmZsb3c6aGlkZGVufS5jb2xsYXBzZWRGaWx0ZXJfX21lbnUucGFuZXMgLnBhbmVzX19pbm5lcntkaXNwbGF5OmZsZXg7bGlzdC1zdHlsZTpub25lO3BhZGRpbmc6MDttYXJnaW4tdG9wOjB9LmNvbGxhcHNlZEZpbHRlcl9fbWVudS5wYW5lcyAucGFuZXNfX2l0ZW17bWluLXdpZHRoOjE1cmVtO21heC13aWR0aDoxNXJlbX0uY29sbGFwc2VkRmlsdGVyX19tZW51LnBhbmVzIC5wYW5lc19faXRlbT51bHttYXgtaGVpZ2h0OjIwcmVtO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0uY29sbGFwc2VkRmlsdGVyX19tZW51LnBhbmVzIC5wYW5lc19faXRlbT51bD5saTpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIGF7Ym9yZGVyLWJvdHRvbTpub25lfWBdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3NsaWRlJywgW1xyXG4gICAgICBzdGF0ZSgnbGVmdCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScgfSkpLFxyXG4gICAgICBzdGF0ZSgncmlnaHQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTEwMCUpJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gKicsIGFuaW1hdGUoMjAwKSlcclxuICAgIF0pXHJcbiAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb2xsYXBzZWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duOiBEcm9wZG93bkRpcmVjdGl2ZTtcclxuXHJcbiAgRmlsdGVyVHlwZSA9IEZpbHRlclR5cGU7XHJcbiAgYWN0aXZlUGFuZSA9ICdsZWZ0JztcclxuICBzZWxlY3RlZEZpbHRlcjogRmlsdGVyc01vZGVsO1xyXG5cclxuICBASW5wdXQoKSBkYXRhOiBGaWx0ZXJzTW9kZWxbXSA9IFtdO1xyXG5cclxuICBAT3V0cHV0KCkgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcblxyXG4gIGNsZWFyU2VhcmNoKGZpbHRlcjogRmlsdGVyc01vZGVsKSB7XHJcbiAgICBmaWx0ZXIudmFsdWUgPSAnJztcclxuICAgIHRoaXMub25TZWFyY2hGaWx0ZXIuZW1pdCh7ZmlsdGVyOiBmaWx0ZXIsIHZhbHVlOiBmaWx0ZXIudmFsdWV9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUZpbHRlclNlbGVjdGlvbihmaWx0ZXI6IEZpbHRlcnNNb2RlbCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlciA9IGZpbHRlcjtcclxuICAgIHRoaXMuYWN0aXZlUGFuZSA9ICdyaWdodCc7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaWx0ZXJPcHRpb24oIG9wdGlvbjogSUZpbHRlck9wdGlvbikge1xyXG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHtmaWx0ZXI6IHRoaXMuc2VsZWN0ZWRGaWx0ZXIsIG9wdGlvbjogb3B0aW9ufSk7XHJcbiAgICB0aGlzLmJhY2soKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEZpbHRlcihmaWx0ZXI6IEZpbHRlcnNNb2RlbCkge1xyXG4gICAgdGhpcy5vblNlYXJjaEZpbHRlci5lbWl0KHtmaWx0ZXI6IGZpbHRlcn0pO1xyXG4gIH1cclxuXHJcbiAgYmFjaygpIHtcclxuICAgIHRoaXMuYWN0aXZlUGFuZSA9ICdsZWZ0JztcclxuICB9XHJcblxyXG4gIG9uU2xpZGVEb25lKCRldmVudCkge1xyXG4gICAgaWYgKCRldmVudC50b1N0YXRlID09PSAnbGVmdCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b3RhbEFjdGl2ZUZpbHRlcnMoKTogbnVtYmVyIHtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZmlsdGVyOiBGaWx0ZXJzTW9kZWwsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICBpZiAoIWZpbHRlci5pc0RlZmF1bHRPcHRpb25BY3RpdmUoKSkge1xyXG4gICAgICAgICAgY291bnQrKztcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIGZvciB0cmFjayBieSBhbmQgYm9vc3QgcGVyZm9ybWFuY2VcclxuICAgKi9cclxuICB0cmFja0J5Rm4oaW5kZXgsIGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxufVxyXG4iXX0=