ng-devui
Version:
DevUI components based on Angular
140 lines • 19.3 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { CdkConnectedOverlay, CdkOverlayOrigin, ScrollStrategyOptions, } from '@angular/cdk/overlay';
import { Component, ElementRef, Host, Input, ViewChild, ViewEncapsulation } from '@angular/core';
import { AppendToBodyDirectionsConfig, DevConfigService, WithConfig, fadeInOut, } from 'ng-devui/utils';
import { DropDownDirective } from './dropdown.directive';
import * as i0 from "@angular/core";
import * as i1 from "./dropdown.directive";
import * as i2 from "@angular/cdk/overlay";
import * as i3 from "ng-devui/utils";
export class DropDownAppendToBodyComponent {
constructor(dropDown, scrollStrategyOption, devConfigService) {
this.dropDown = dropDown;
this.scrollStrategyOption = scrollStrategyOption;
this.devConfigService = devConfigService;
this.appendToBodyDirections = ['rightDown', 'leftDown', 'rightUp', 'leftUp'];
this.menuPosition = 'bottom';
this.dropDown.appendToBody = true;
this.scrollStrategy = this.scrollStrategyOption.reposition();
}
ngOnChanges(changes) {
const { alignOrigin, appendToBodyDirections, appendToBodyScrollStrategy } = changes;
const globalScrollStrategy = this.devConfigService.getConfigForApi('appendToBodyScrollStrategy');
if (appendToBodyDirections) {
this.setPositions();
}
if (alignOrigin) {
this.setOrigin();
}
if (this.appendToBodyScrollStrategy && (appendToBodyScrollStrategy || globalScrollStrategy)) {
const func = this.scrollStrategyOption[this.appendToBodyScrollStrategy];
this.scrollStrategy = func();
}
}
ngOnInit() {
this.setPositions();
this.setOrigin();
}
setOrigin() {
if (this.alignOrigin) {
this.origin = new CdkOverlayOrigin(this.alignOrigin);
}
else {
this.origin = undefined;
}
}
setPositions() {
if (this.appendToBodyDirections && this.appendToBodyDirections.length > 0) {
this.positions = this.appendToBodyDirections
.map((position) => {
if (typeof position === 'string') {
return AppendToBodyDirectionsConfig[position];
}
else {
return position;
}
})
.filter((position) => position !== undefined);
}
else {
this.positions = undefined;
}
}
reposition() {
if (this.overlay && this.overlay.overlayRef) {
setTimeout(() => {
this.setPositions();
this.overlay.overlayRef.updatePosition();
}, 0);
}
}
onPositionChange(position) {
switch (position.connectionPair.overlayY) {
case 'top':
case 'center':
this.menuPosition = 'bottom';
break;
case 'bottom':
this.menuPosition = 'top';
break;
default:
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropDownAppendToBodyComponent, deps: [{ token: i1.DropDownDirective, host: true }, { token: i2.ScrollStrategyOptions }, { token: i3.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DropDownAppendToBodyComponent, selector: "[dDropDown][appendToBody]", inputs: { alignOrigin: "alignOrigin", appendToBodyDirections: "appendToBodyDirections", appendToBodyScrollStrategy: "appendToBodyScrollStrategy" }, viewQueries: [{ propertyName: "dropDownWrapper", first: true, predicate: ["dropDownWrapper"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true, static: true }], exportAs: ["d-dropdown-append-to-body"], usesOnChanges: true, ngImport: i0, template: `
<ng-content></ng-content>
<ng-template
cdk-connected-overlay
[cdkConnectedOverlayOrigin]="origin || dropDown.cdkConnectedOverlayOrigin"
[cdkConnectedOverlayOpen]="dropDown.isOpen"
[cdkConnectedOverlayPositions]="positions"
[cdkConnectedOverlayScrollStrategy]="scrollStrategy"
(backdropClick)="dropDown.isOpen = false"
(detach)="dropDown.isOpen && (dropDown.isOpen = false)"
(positionChange)="onPositionChange($event)"
>
<div []="dropDown.startAnimation ? menuPosition : 'void'" #dropDownWrapper [@.disabled]="!dropDown.showAnimation">
<ng-content select="[dDropDownMenu]"></ng-content>
</div>
</ng-template>
`, isInline: true, styles: [".cdk-overlay-pane>div>.devui-dropdown-menu{position:relative;top:0;left:0;border:none}.devui-dropdown span.icon-chevron-down{display:inline-block;vertical-align:text-top}.devui-dropdown span.icon-chevron-down2{display:inline-block;vertical-align:middle}.devui-dropdown-animation span.icon-chevron-down,.devui-dropdown-animation span.icon-chevron-down-2{transition:transform var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-dropdown.open span.icon-chevron-down,.devui-dropdown.open span.icon-chevron-down-2{transform:rotate(180deg)}\n"], dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }], animations: [fadeInOut], encapsulation: i0.ViewEncapsulation.None }); }
}
__decorate([
WithConfig(),
__metadata("design:type", String)
], DropDownAppendToBodyComponent.prototype, "appendToBodyScrollStrategy", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropDownAppendToBodyComponent, decorators: [{
type: Component,
args: [{ selector: '[dDropDown][appendToBody]', exportAs: 'd-dropdown-append-to-body', template: `
<ng-content></ng-content>
<ng-template
cdk-connected-overlay
[cdkConnectedOverlayOrigin]="origin || dropDown.cdkConnectedOverlayOrigin"
[cdkConnectedOverlayOpen]="dropDown.isOpen"
[cdkConnectedOverlayPositions]="positions"
[cdkConnectedOverlayScrollStrategy]="scrollStrategy"
(backdropClick)="dropDown.isOpen = false"
(detach)="dropDown.isOpen && (dropDown.isOpen = false)"
(positionChange)="onPositionChange($event)"
>
<div []="dropDown.startAnimation ? menuPosition : 'void'" #dropDownWrapper [@.disabled]="!dropDown.showAnimation">
<ng-content select="[dDropDownMenu]"></ng-content>
</div>
</ng-template>
`, encapsulation: ViewEncapsulation.None, animations: [fadeInOut], preserveWhitespaces: false, styles: [".cdk-overlay-pane>div>.devui-dropdown-menu{position:relative;top:0;left:0;border:none}.devui-dropdown span.icon-chevron-down{display:inline-block;vertical-align:text-top}.devui-dropdown span.icon-chevron-down2{display:inline-block;vertical-align:middle}.devui-dropdown-animation span.icon-chevron-down,.devui-dropdown-animation span.icon-chevron-down-2{transition:transform var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-dropdown.open span.icon-chevron-down,.devui-dropdown.open span.icon-chevron-down-2{transform:rotate(180deg)}\n"] }]
}], ctorParameters: () => [{ type: i1.DropDownDirective, decorators: [{
type: Host
}] }, { type: i2.ScrollStrategyOptions }, { type: i3.DevConfigService }], propDecorators: { dropDownWrapper: [{
type: ViewChild,
args: ['dropDownWrapper']
}], overlay: [{
type: ViewChild,
args: [CdkConnectedOverlay, { static: true }]
}], alignOrigin: [{
type: Input
}], appendToBodyDirections: [{
type: Input
}], appendToBodyScrollStrategy: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUloQixxQkFBcUIsR0FFdEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFvQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUVMLDRCQUE0QixFQUU1QixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFNBQVMsR0FDVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQTRCekQsTUFBTSxPQUFPLDZCQUE2QjtJQVd4QyxZQUNpQixRQUEyQixFQUNsQyxvQkFBMkMsRUFDM0MsZ0JBQWtDO1FBRjNCLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBQ2xDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBdUI7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVZuQywyQkFBc0IsR0FBcUQsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVuSSxpQkFBWSxHQUEwQixRQUFRLENBQUM7UUFVN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxHQUFHLE9BQU8sQ0FBQztR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MkIsWUFDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQlQsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixDQUFDLFNBQVMsQ0FBQyx1QkFDRixLQUFLOzswQkFjdkIsSUFBSTs0R0FYdUIsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ3NCLE9BQU87c0JBQXhELFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUN2QyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDaUIsMEJBQTBCO3NCQUFoRCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDZGtDb25uZWN0ZWRPdmVybGF5LFxyXG4gIENka092ZXJsYXlPcmlnaW4sXHJcbiAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLFxyXG4gIENvbm5lY3RlZFBvc2l0aW9uLFxyXG4gIFNjcm9sbFN0cmF0ZWd5LFxyXG4gIFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyxcclxuICBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFwcGVuZFRvQm9keURpcmVjdGlvbixcclxuICBBcHBlbmRUb0JvZHlEaXJlY3Rpb25zQ29uZmlnLFxyXG4gIEFwcGVuZFRvQm9keVNjcm9sbFN0cmF0ZWd5VHlwZSxcclxuICBEZXZDb25maWdTZXJ2aWNlLFxyXG4gIFdpdGhDb25maWcsXHJcbiAgZmFkZUluT3V0LFxyXG59IGZyb20gJ25nLWRldnVpL3V0aWxzJztcclxuaW1wb3J0IHsgRHJvcERvd25EaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Bkb3duLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciovXHJcbiAgc2VsZWN0b3I6ICdbZERyb3BEb3duXVthcHBlbmRUb0JvZHldJyxcclxuICBleHBvcnRBczogJ2QtZHJvcGRvd24tYXBwZW5kLXRvLWJvZHknLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgY2RrLWNvbm5lY3RlZC1vdmVybGF5XHJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm9yaWdpbiB8fCBkcm9wRG93bi5jZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXCJcclxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cImRyb3BEb3duLmlzT3BlblwiXHJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cInBvc2l0aW9uc1wiXHJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3ldPVwic2Nyb2xsU3RyYXRlZ3lcIlxyXG4gICAgICAoYmFja2Ryb3BDbGljayk9XCJkcm9wRG93bi5pc09wZW4gPSBmYWxzZVwiXHJcbiAgICAgIChkZXRhY2gpPVwiZHJvcERvd24uaXNPcGVuICYmIChkcm9wRG93bi5pc09wZW4gPSBmYWxzZSlcIlxyXG4gICAgICAocG9zaXRpb25DaGFuZ2UpPVwib25Qb3NpdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgPGRpdiBbQGZhZGVJbk91dF09XCJkcm9wRG93bi5zdGFydEFuaW1hdGlvbiA/IG1lbnVQb3NpdGlvbiA6ICd2b2lkJ1wiICNkcm9wRG93bldyYXBwZXIgW0AuZGlzYWJsZWRdPVwiIWRyb3BEb3duLnNob3dBbmltYXRpb25cIj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZERyb3BEb3duTWVudV1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogWydkcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgYW5pbWF0aW9uczogW2ZhZGVJbk91dF0sXHJcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wRG93bkFwcGVuZFRvQm9keUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkKCdkcm9wRG93bldyYXBwZXInKSBkcm9wRG93bldyYXBwZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5LCB7IHN0YXRpYzogdHJ1ZSB9KSBvdmVybGF5OiBDZGtDb25uZWN0ZWRPdmVybGF5O1xyXG4gIEBJbnB1dCgpIGFsaWduT3JpZ2luOiBFbGVtZW50UmVmPGFueT47XHJcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5RGlyZWN0aW9uczogQXJyYXk8QXBwZW5kVG9Cb2R5RGlyZWN0aW9uIHwgQ29ubmVjdGVkUG9zaXRpb24+ID0gWydyaWdodERvd24nLCAnbGVmdERvd24nLCAncmlnaHRVcCcsICdsZWZ0VXAnXTtcclxuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIGFwcGVuZFRvQm9keVNjcm9sbFN0cmF0ZWd5OiBBcHBlbmRUb0JvZHlTY3JvbGxTdHJhdGVneVR5cGU7XHJcbiAgbWVudVBvc2l0aW9uOiBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MgPSAnYm90dG9tJztcclxuICBvcmlnaW46IENka092ZXJsYXlPcmlnaW47XHJcbiAgcG9zaXRpb25zO1xyXG4gIHNjcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASG9zdCgpIHB1YmxpYyBkcm9wRG93bjogRHJvcERvd25EaXJlY3RpdmUsXHJcbiAgICBwcml2YXRlIHNjcm9sbFN0cmF0ZWd5T3B0aW9uOiBTY3JvbGxTdHJhdGVneU9wdGlvbnMsXHJcbiAgICBwcml2YXRlIGRldkNvbmZpZ1NlcnZpY2U6IERldkNvbmZpZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZHJvcERvd24uYXBwZW5kVG9Cb2R5ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLnNjcm9sbFN0cmF0ZWd5T3B0aW9uLnJlcG9zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IHsgYWxpZ25PcmlnaW4sIGFwcGVuZFRvQm9keURpcmVjdGlvbnMsIGFwcGVuZFRvQm9keVNjcm9sbFN0cmF0ZWd5IH0gPSBjaGFuZ2VzO1xyXG4gICAgY29uc3QgZ2xvYmFsU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLmRldkNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnRm9yQXBpKCdhcHBlbmRUb0JvZHlTY3JvbGxTdHJhdGVneScpO1xyXG4gICAgaWYgKGFwcGVuZFRvQm9keURpcmVjdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZXRQb3NpdGlvbnMoKTtcclxuICAgIH1cclxuICAgIGlmIChhbGlnbk9yaWdpbikge1xyXG4gICAgICB0aGlzLnNldE9yaWdpbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5U2Nyb2xsU3RyYXRlZ3kgJiYgKGFwcGVuZFRvQm9keVNjcm9sbFN0cmF0ZWd5IHx8IGdsb2JhbFNjcm9sbFN0cmF0ZWd5KSkge1xyXG4gICAgICBjb25zdCBmdW5jID0gdGhpcy5zY3JvbGxTdHJhdGVneU9wdGlvblt0aGlzLmFwcGVuZFRvQm9keVNjcm9sbFN0cmF0ZWd5XTtcclxuICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneSA9IGZ1bmMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRQb3NpdGlvbnMoKTtcclxuICAgIHRoaXMuc2V0T3JpZ2luKCk7XHJcbiAgfVxyXG5cclxuICBzZXRPcmlnaW4oKSB7XHJcbiAgICBpZiAodGhpcy5hbGlnbk9yaWdpbikge1xyXG4gICAgICB0aGlzLm9yaWdpbiA9IG5ldyBDZGtPdmVybGF5T3JpZ2luKHRoaXMuYWxpZ25PcmlnaW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcmlnaW4gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldFBvc2l0aW9ucygpIHtcclxuICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keURpcmVjdGlvbnMgJiYgdGhpcy5hcHBlbmRUb0JvZHlEaXJlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSB0aGlzLmFwcGVuZFRvQm9keURpcmVjdGlvbnNcclxuICAgICAgICAubWFwKChwb3NpdGlvbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBwb3NpdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFwcGVuZFRvQm9keURpcmVjdGlvbnNDb25maWdbcG9zaXRpb25dO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZpbHRlcigocG9zaXRpb24pID0+IHBvc2l0aW9uICE9PSB1bmRlZmluZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb3NpdGlvbnMgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheSAmJiB0aGlzLm92ZXJsYXkub3ZlcmxheVJlZikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFBvc2l0aW9ucygpO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Qb3NpdGlvbkNoYW5nZShwb3NpdGlvbjogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKSB7XHJcbiAgICBzd2l0Y2ggKHBvc2l0aW9uLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlZKSB7XHJcbiAgICBjYXNlICd0b3AnOlxyXG4gICAgY2FzZSAnY2VudGVyJzpcclxuICAgICAgdGhpcy5tZW51UG9zaXRpb24gPSAnYm90dG9tJztcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICB0aGlzLm1lbnVQb3NpdGlvbiA9ICd0b3AnO1xyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQ6XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==