UNPKG

ng-devui

Version:

DevUI components based on Angular

140 lines 19.3 kB
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 [@fadeInOut]="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 [@fadeInOut]="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==