UNPKG

ngx-mat-cdk

Version:

Extra Components for Angular Material including Filters,Drag Drop File, MatSelect Mobile Version

182 lines 21.3 kB
import { Component, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core'; import { animate, state, style, transition, trigger } from '@angular/animations'; export class NgxWindowComponent { constructor() { this.style = {}; this.panelWidth = '100%'; this.panelHeight = '250px'; this.hasAngle = false; this.afterOpenPanel = new EventEmitter(); this.afterClosePanel = new EventEmitter(); this.directionOpenPanel = DirectionDropDownOpenPanel.top; this.isOpen = false; this._loading = true; this._animateLoading = true; } ngOnInit() { this.addScrollEvent(); } toggle() { if (this.isOpen) { this.closePanel(); } else { this.openPanel(); } } onResize() { if (this.elWindow) { this.setPosition(); } } scrollEvenFunc(ev) { if (this.elWindow) { this.setPosition(); } } removeScrollEvent() { document.removeEventListener('scroll', this.scrollEvent); } addScrollEvent() { this.scrollEvent = this.scrollEvenFunc.bind(this); document.addEventListener('scroll', this.scrollEvent, true); } onKeydown(event) { // const target = event.target as HTMLElement; if (event.keyCode === 27) { this.closePanel(); } } onClick(event) { const target = event.target; if ((this.targetEl && this.targetEl.contains(target)) || (this.elWindow && this.elWindow.nativeElement.contains(target))) { return; } else { this.closePanel(); } } openPanel() { this._loading = true; this._animateLoading = true; this.isOpen = true; setTimeout(() => { if (this.targetEl) { } else if (window.event) { this.targetEl = window.event.target; } else { return; } this.setPosition(); this.appendToContainer(); this.afterOpenPanel.emit(); this._loading = false; this._animateLoading = false; setTimeout(() => { }, 500); }, 5); } closePanel() { this.isOpen = false; this.style = {}; this.afterClosePanel.emit(); } appendToContainer() { window.document.documentElement.appendChild(this.elWindow.nativeElement); } getCoords(el) { if (el) { const boundingCoords = el.getBoundingClientRect(); const coords = { left: boundingCoords.left + window.pageXOffset, right: boundingCoords.right + window.pageXOffset, top: boundingCoords.top + window.pageYOffset, bottom: boundingCoords.bottom + window.pageYOffset }; return coords; } return null; } setPosition() { const coords = this.getCoords(this.targetEl); if (!coords) { return; } const offsetTop = this.hasAngle ? 9 : 0; this.style['left'] = `${coords.left}px`; this.style['top'] = `${coords.top + this.targetEl.clientHeight + offsetTop}px`; if (this.panelWidth === '100%') { this.style['width'] = `${this.targetEl.clientWidth}px`; } else { this.panelWidth = typeof (this.panelWidth) === 'number' ? `${this.panelWidth}px` : this.panelWidth; this.style['width'] = this.panelWidth; } if (!this.elWindow) { return; } // const panelHeight = this.elWindow.nativeElement.clientHeight; // if ( // coords.bottom + panelHeight > // window.document.documentElement.clientHeight // ) { // this.directionOpenPanel = DirectionDropDownOpenPanel.bottom; // this.style['top'] = `${coords.top - panelHeight - 3 - offsetTop}px`; // } else { this.directionOpenPanel = DirectionDropDownOpenPanel.top; // } } ngOnDestroy() { this.removeScrollEvent(); } get DirectionOpenPanel() { return DirectionDropDownOpenPanel; } } NgxWindowComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-window', template: "<!--<div [@animateWin]=\"_animateLoading?'hide':'show'\">-->\r\n<div [style.visibility]=\"_loading? 'hidden': ''\" [ngStyle]=\"style\"\r\n *ngIf=\"isOpen\" #elWindow class=\"ngx-window box-shadow-dep-4\">\r\n <div *ngIf=\"hasAngle\" class=\"ngx-window-angle\"\r\n [class.angly-top]=\"directionOpenPanel === DirectionOpenPanel.top\"\r\n [class.angly-bottom]=\"directionOpenPanel === DirectionOpenPanel.bottom\"\r\n >\r\n\r\n </div>\r\n\r\n <div [style.height.px]=\"panelHeight\"\r\n [style.height]=\"panelHeight\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n<!--</div>-->\r\n\r\n", encapsulation: ViewEncapsulation.None, animations: [ trigger('animateWin', [ state('hide', style({ marginTop: '10px', opacity: 0 })), state('show', style({ marginTop: 0, opacity: 1 })), transition('hide=>show', [ animate('0.5s ease-out') ]), transition('show=>hide', [ animate('0.3s ease-out') ]) ]) ], styles: [".ngx-window{top:0;width:0;z-index:1001}.ngx-window,.ngx-window-angle{background-color:#fff;position:absolute}.ngx-window-angle{height:18px;left:6px;transform:rotate(45deg);width:18px}.ngx-window-angle.angle-bottom{bottom:-6px}.ngx-window-angle.angle-top{top:-6px}.ngx-container-window{position:absolute}"] },] } ]; NgxWindowComponent.ctorParameters = () => []; NgxWindowComponent.propDecorators = { elWindow: [{ type: ViewChild, args: ['elWindow',] }], panelWidth: [{ type: Input }], panelHeight: [{ type: Input }], targetEl: [{ type: Input }], hasAngle: [{ type: Input }], afterOpenPanel: [{ type: Output }], afterClosePanel: [{ type: Output }], onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }], onKeydown: [{ type: HostListener, args: ['window:keydown', ['$event'],] }], onClick: [{ type: HostListener, args: ['window:click', ['$event'],] }] }; export var DirectionDropDownOpenPanel; (function (DirectionDropDownOpenPanel) { DirectionDropDownOpenPanel[DirectionDropDownOpenPanel["top"] = 0] = "top"; DirectionDropDownOpenPanel[DirectionDropDownOpenPanel["bottom"] = 1] = "bottom"; })(DirectionDropDownOpenPanel || (DirectionDropDownOpenPanel = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXdpbmRvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvQWxpcmV6YSBNb2hhbW1hZGkvc291cmNlL3JlcG9zL015TGlicmFyeS9Bbmd1bGFyLkxpYnJhcnkvbGlicy9wcm9qZWN0cy9uZ3gtbWF0LWNkay9zcmMvIiwic291cmNlcyI6WyJsaWIvbmd4LXdpbmRvdy9uZ3gtd2luZG93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxPQUFPLEVBQWEsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUEyQjFGLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0I7UUFHQSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRUYsZUFBVSxHQUFRLE1BQU0sQ0FBQztRQUN6QixnQkFBVyxHQUFRLE9BQU8sQ0FBQztRQUUzQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6QyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFcEQsdUJBQWtCLEdBQStCLDBCQUEwQixDQUFDLEdBQUcsQ0FBQztRQUNoRixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixvQkFBZSxHQUFHLElBQUksQ0FBQztJQWR2QixDQUFDO0lBaUJELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7YUFBTTtZQUNMLElBQUks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QkFNRSxTQUFTLFNBQUMsVUFBVTt5QkFDcEIsS0FBSzswQkFDTCxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSzs2QkFDTCxNQUFNOzhCQUNOLE1BQU07dUJBb0JOLFlBQVksU0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7d0JBc0J4QyxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7c0JBUXpDLFlBQVksU0FBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBcUcxQyxNQUFNLENBQU4sSUFBWSwwQkFHWDtBQUhELFdBQVksMEJBQTBCO0lBQ3BDLHlFQUFHLENBQUE7SUFDSCwrRUFBTSxDQUFBO0FBQ1IsQ0FBQyxFQUhXLDBCQUEwQixLQUExQiwwQkFBMEIsUUFHckMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7YW5pbWF0ZSwgYW5pbWF0aW9uLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtd2luZG93JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LXdpbmRvdy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LXdpbmRvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignYW5pbWF0ZVdpbicsIFtcclxuICAgICAgc3RhdGUoJ2hpZGUnLCBzdHlsZSh7XHJcbiAgICAgICAgbWFyZ2luVG9wOiAnMTBweCcsXHJcbiAgICAgICAgb3BhY2l0eTogMFxyXG4gICAgICB9KSksXHJcbiAgICAgIHN0YXRlKCdzaG93Jywgc3R5bGUoe1xyXG4gICAgICAgIG1hcmdpblRvcDogMCxcclxuICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignaGlkZT0+c2hvdycsIFtcclxuICAgICAgICBhbmltYXRlKCcwLjVzIGVhc2Utb3V0JylcclxuICAgICAgXSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ3Nob3c9PmhpZGUnLCBbXHJcbiAgICAgICAgYW5pbWF0ZSgnMC4zcyBlYXNlLW91dCcpXHJcbiAgICAgIF0pXHJcblxyXG4gICAgXSlcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hXaW5kb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBzdHlsZSA9IHt9O1xyXG4gIEBWaWV3Q2hpbGQoJ2VsV2luZG93JykgZWxXaW5kb3c6IEVsZW1lbnRSZWY7XHJcbiAgQElucHV0KCkgcGFuZWxXaWR0aDogYW55ID0gJzEwMCUnO1xyXG4gIEBJbnB1dCgpIHBhbmVsSGVpZ2h0OiBhbnkgPSAnMjUwcHgnO1xyXG4gIEBJbnB1dCgpIHRhcmdldEVsOiBIVE1MRWxlbWVudDtcclxuICBASW5wdXQoKSBoYXNBbmdsZSA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBhZnRlck9wZW5QYW5lbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlckNsb3NlUGFuZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgZGlyZWN0aW9uT3BlblBhbmVsOiBEaXJlY3Rpb25Ecm9wRG93bk9wZW5QYW5lbCA9IERpcmVjdGlvbkRyb3BEb3duT3BlblBhbmVsLnRvcDtcclxuICBpc09wZW4gPSBmYWxzZTtcclxuICBfbG9hZGluZyA9IHRydWU7XHJcbiAgX2FuaW1hdGVMb2FkaW5nID0gdHJ1ZTtcclxuICBzY3JvbGxFdmVudDtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFkZFNjcm9sbEV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5lbFdpbmRvdykge1xyXG4gICAgICB0aGlzLnNldFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzY3JvbGxFdmVuRnVuYyhldjogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVsV2luZG93KSB7XHJcbiAgICAgIHRoaXMuc2V0UG9zaXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVNjcm9sbEV2ZW50KCk6IHZvaWQge1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxFdmVudCk7XHJcbiAgfVxyXG5cclxuICBhZGRTY3JvbGxFdmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2Nyb2xsRXZlbnQgPSB0aGlzLnNjcm9sbEV2ZW5GdW5jLmJpbmQodGhpcyk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEV2ZW50LCB0cnVlKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAyNykge1xyXG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCh0aGlzLnRhcmdldEVsICYmIHRoaXMudGFyZ2V0RWwuY29udGFpbnModGFyZ2V0KSkgfHwgKHRoaXMuZWxXaW5kb3cgJiYgdGhpcy5lbFdpbmRvdy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblBhbmVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9hbmltYXRlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMudGFyZ2V0RWwpIHtcclxuICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnRhcmdldEVsID0gd2luZG93LmV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLmFwcGVuZFRvQ29udGFpbmVyKCk7XHJcbiAgICAgIHRoaXMuYWZ0ZXJPcGVuUGFuZWwuZW1pdCgpO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX2FuaW1hdGVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB9LCA1MDApO1xyXG4gICAgfSwgNSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVBhbmVsKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuc3R5bGUgPSB7fTtcclxuICAgIHRoaXMuYWZ0ZXJDbG9zZVBhbmVsLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwZW5kVG9Db250YWluZXIoKTogdm9pZCB7XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxXaW5kb3cubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvb3JkcyhlbDogSFRNTEVsZW1lbnQpOiBDb29yZHMge1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIGNvbnN0IGJvdW5kaW5nQ29vcmRzID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGNvbnN0IGNvb3JkczogQ29vcmRzID0ge1xyXG4gICAgICAgIGxlZnQ6IGJvdW5kaW5nQ29vcmRzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsXHJcbiAgICAgICAgcmlnaHQ6IGJvdW5kaW5nQ29vcmRzLnJpZ2h0ICsgd2luZG93LnBhZ2VYT2Zmc2V0LFxyXG4gICAgICAgIHRvcDogYm91bmRpbmdDb29yZHMudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0LFxyXG4gICAgICAgIGJvdHRvbTogYm91bmRpbmdDb29yZHMuYm90dG9tICsgd2luZG93LnBhZ2VZT2Zmc2V0XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBjb29yZHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHNldFBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29vcmRzID0gdGhpcy5nZXRDb29yZHModGhpcy50YXJnZXRFbCk7XHJcbiAgICBpZiAoIWNvb3Jkcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBvZmZzZXRUb3AgPSB0aGlzLmhhc0FuZ2xlID8gOSA6IDA7XHJcbiAgICB0aGlzLnN0eWxlWydsZWZ0J10gPSBgJHtjb29yZHMubGVmdH1weGA7XHJcbiAgICB0aGlzLnN0eWxlWyd0b3AnXSA9IGAke2Nvb3Jkcy50b3AgKyB0aGlzLnRhcmdldEVsLmNsaWVudEhlaWdodCArIG9mZnNldFRvcH1weGA7XHJcbiAgICBpZiAodGhpcy5wYW5lbFdpZHRoID09PSAnMTAwJScpIHtcclxuICAgICAgdGhpcy5zdHlsZVsnd2lkdGgnXSA9IGAke3RoaXMudGFyZ2V0RWwuY2xpZW50V2lkdGh9cHhgO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYW5lbFdpZHRoID0gdHlwZW9mICh0aGlzLnBhbmVsV2lkdGgpID09PSAnbnVtYmVyJyA/IGAke3RoaXMucGFuZWxXaWR0aH1weGAgOiB0aGlzLnBhbmVsV2lkdGg7XHJcbiAgICAgIHRoaXMuc3R5bGVbJ3dpZHRoJ10gPSB0aGlzLnBhbmVsV2lkdGg7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZWxXaW5kb3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc3QgcGFuZWxIZWlnaHQgPSB0aGlzLmVsV2luZG93Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICBjb29yZHMuYm90dG9tICsgcGFuZWxIZWlnaHQgPlxyXG4gICAgLy8gICB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHRoaXMuZGlyZWN0aW9uT3BlblBhbmVsID0gRGlyZWN0aW9uRHJvcERvd25PcGVuUGFuZWwuYm90dG9tO1xyXG4gICAgLy8gICB0aGlzLnN0eWxlWyd0b3AnXSA9IGAke2Nvb3Jkcy50b3AgLSBwYW5lbEhlaWdodCAtIDMgLSBvZmZzZXRUb3B9cHhgO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIHRoaXMuZGlyZWN0aW9uT3BlblBhbmVsID0gRGlyZWN0aW9uRHJvcERvd25PcGVuUGFuZWwudG9wO1xyXG5cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVTY3JvbGxFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IERpcmVjdGlvbk9wZW5QYW5lbCgpIHtcclxuICAgIHJldHVybiBEaXJlY3Rpb25Ecm9wRG93bk9wZW5QYW5lbDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29vcmRzIHtcclxuICBsZWZ0OiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxuICB0b3A6IG51bWJlcjtcclxuICBib3R0b206IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRGlyZWN0aW9uRHJvcERvd25PcGVuUGFuZWwge1xyXG4gIHRvcCxcclxuICBib3R0b21cclxufVxyXG4iXX0=