UNPKG

@hxui/angular

Version:

* * *

198 lines (195 loc) 19.4 kB
/** * @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" [@slide]="activePane" (@slide.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=