UNPKG

fundamental-ngx

Version:

SAP Fiori Fundamentals, implemented in Angular

226 lines 17.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Type, TemplateRef, ViewContainerRef, ViewChild, ComponentFactoryResolver, ChangeDetectorRef, HostListener, Optional } from '@angular/core'; import { ModalRef } from './modal-utils/modal-ref'; import { modalFadeNgIf } from './modal-utils/modal-animations'; import { AbstractFdNgxClass } from '../utils/abstract-fd-ngx-class'; import focusTrap from 'focus-trap'; var ModalComponent = /** @class */ (function (_super) { tslib_1.__extends(ModalComponent, _super); function ModalComponent(elRef, componentFactoryResolver, cdRef, modalRef) { var _this = _super.call(this, elRef) || this; _this.elRef = elRef; _this.componentFactoryResolver = componentFactoryResolver; _this.cdRef = cdRef; _this.modalRef = modalRef; _this.escKeyCloseable = true; _this.focusTrapped = true; _this.ariaLabelledBy = null; _this.ariaLabel = null; _this.ariaDescribedBy = null; _this.backdropClickCloseable = true; _this.hasBackdrop = true; _this.modalPanelClass = ''; return _this; } /** * @return {?} */ ModalComponent.prototype.ngOnInit = /** * @return {?} */ function () { this._setProperties(); }; /** * @return {?} */ ModalComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.focusTrap) { this.focusTrap.deactivate(); } }; /** * @return {?} */ ModalComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { if (this.childComponentType) { if (this.childComponentType instanceof Type) { this.loadFromComponent(this.childComponentType); } else if (this.childComponentType instanceof TemplateRef) { this.loadFromTemplate(this.childComponentType); } } if (this.focusTrapped) { try { this.focusTrap = focusTrap(this.elRef.nativeElement, { clickOutsideDeactivates: this.backdropClickCloseable && this.hasBackdrop, escapeDeactivates: false, initialFocus: this.elRef.nativeElement }); this.focusTrap.activate(); } catch (e) { console.warn('Attempted to focus trap the modal, but no tabbable elements were found.'); } } this.cdRef.detectChanges(); }; /** * @param {?} event * @return {?} */ ModalComponent.prototype.closeModalEsc = /** * @param {?} event * @return {?} */ function (event) { if (this.escKeyCloseable && event.key === 'Escape') { this.modalRef.dismiss('escape'); } }; /** * @private * @param {?} content * @return {?} */ ModalComponent.prototype.loadFromComponent = /** * @private * @param {?} content * @return {?} */ function (content) { this.containerRef.clear(); /** @type {?} */ var componentFactory = this.componentFactoryResolver.resolveComponentFactory(content); this.componentRef = this.containerRef.createComponent(componentFactory); }; /** * @private * @param {?} content * @return {?} */ ModalComponent.prototype.loadFromTemplate = /** * @private * @param {?} content * @return {?} */ function (content) { this.containerRef.clear(); /** @type {?} */ var context = { $implicit: this.modalRef }; this.componentRef = this.containerRef.createEmbeddedView(content, context); }; /** * @return {?} */ ModalComponent.prototype._setProperties = /** * @return {?} */ function () { if (this.modalPanelClass) { this._addClassToElement(this.modalPanelClass); } }; ModalComponent.decorators = [ { type: Component, args: [{ selector: 'fd-modal', template: "<div class=\"fd-modal__content\" role=\"document\">\n <ng-content select=\"fd-modal-header\"></ng-content>\n <ng-content select=\"fd-modal-body\"></ng-content>\n <ng-content select=\"fd-modal-footer\"></ng-content>\n <ng-container #vc></ng-container>\n <ng-content></ng-content>\n</div>\n", host: { 'role': 'dialog', '[class.fd-modal]': 'true', '[attr.aria-labelledby]': 'ariaLabelledBy', '[attr.aria-label]': 'ariaLabel', '[attr.aria-describedby]': 'ariaDescribedBy', '[attr.aria-modal]': 'true', '[attr.id]': 'id', 'tabindex': '-1', '[@modal-fade]': '' }, animations: [ modalFadeNgIf ], styles: [":host{max-width:none;z-index:1000}:host:focus{outline:0}:host .fd-modal__content{height:100%;width:100%;min-height:inherit;min-width:inherit;max-height:inherit;max-width:inherit;display:flex;flex-direction:column}"] }] } ]; /** @nocollapse */ ModalComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: ComponentFactoryResolver }, { type: ChangeDetectorRef }, { type: ModalRef, decorators: [{ type: Optional }] } ]; }; ModalComponent.propDecorators = { containerRef: [{ type: ViewChild, args: ['vc', { read: ViewContainerRef },] }], closeModalEsc: [{ type: HostListener, args: ['keyup', ['$event'],] }] }; return ModalComponent; }(AbstractFdNgxClass)); export { ModalComponent }; if (false) { /** @type {?} */ ModalComponent.prototype.containerRef; /** @type {?} */ ModalComponent.prototype.id; /** @type {?} */ ModalComponent.prototype.escKeyCloseable; /** @type {?} */ ModalComponent.prototype.focusTrapped; /** @type {?} */ ModalComponent.prototype.ariaLabelledBy; /** @type {?} */ ModalComponent.prototype.ariaLabel; /** @type {?} */ ModalComponent.prototype.ariaDescribedBy; /** @type {?} */ ModalComponent.prototype.childComponentType; /** @type {?} */ ModalComponent.prototype.backdropClickCloseable; /** @type {?} */ ModalComponent.prototype.hasBackdrop; /** @type {?} */ ModalComponent.prototype.modalPanelClass; /** * @type {?} * @private */ ModalComponent.prototype.componentRef; /** * @type {?} * @private */ ModalComponent.prototype.focusTrap; /** * @type {?} * @private */ ModalComponent.prototype.elRef; /** * @type {?} * @private */ ModalComponent.prototype.componentFactoryResolver; /** * @type {?} * @private */ ModalComponent.prototype.cdRef; /** * @type {?} * @private */ ModalComponent.prototype.modalRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnVuZGFtZW50YWwtbmd4LyIsInNvdXJjZXMiOlsibGliL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUdWLElBQUksRUFDSixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx3QkFBd0IsRUFHeEIsaUJBQWlCLEVBQUUsWUFBWSxFQUFhLFFBQVEsRUFDdkQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFbkM7SUFtQm9DLDBDQUFrQjtJQTZCbEQsd0JBQW9CLEtBQWlCLEVBQ2pCLHdCQUFrRCxFQUNsRCxLQUF3QixFQUNaLFFBQWtCO1FBSGxELFlBSUksa0JBQU0sS0FBSyxDQUFDLFNBQ2Y7UUFMbUIsV0FBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQiw4QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELFdBQUssR0FBTCxLQUFLLENBQW1CO1FBQ1osY0FBUSxHQUFSLFFBQVEsQ0FBVTtRQXpCbEQscUJBQWUsR0FBWSxJQUFJLENBQUM7UUFFaEMsa0JBQVksR0FBWSxJQUFJLENBQUM7UUFFN0Isb0JBQWMsR0FBVyxJQUFJLENBQUM7UUFFOUIsZUFBUyxHQUFXLElBQUksQ0FBQztRQUV6QixxQkFBZSxHQUFXLElBQUksQ0FBQztRQUkvQiw0QkFBc0IsR0FBWSxJQUFJLENBQUM7UUFFdkMsaUJBQVcsR0FBYSxJQUFJLENBQUM7UUFFN0IscUJBQWUsR0FBVyxFQUFFLENBQUM7O0lBVzdCLENBQUM7Ozs7SUFFRCxpQ0FBUTs7O0lBQVI7UUFDSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7OztJQUVELG9DQUFXOzs7SUFBWDtRQUNJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQy9CO0lBQ0wsQ0FBQzs7OztJQUVELHdDQUFlOzs7SUFBZjtRQUNJLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLGtCQUFrQixZQUFZLElBQUksRUFBRTtnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ25EO2lCQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixZQUFZLFdBQVcsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ2xEO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSTtnQkFDQSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtvQkFDakQsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxXQUFXO29CQUN4RSxpQkFBaUIsRUFBRSxLQUFLO29CQUN4QixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2lCQUN6QyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUM3QjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMseUVBQXlFLENBQUMsQ0FBQzthQUMzRjtTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDOzs7OztJQUdELHNDQUFhOzs7O0lBRGIsVUFDYyxLQUFvQjtRQUM5QixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDOzs7Ozs7SUFFTywwQ0FBaUI7Ozs7O0lBQXpCLFVBQTBCLE9BQWtCO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7O1lBQ3BCLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUM7UUFDdkYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Ozs7OztJQUVPLHlDQUFnQjs7Ozs7SUFBeEIsVUFBeUIsT0FBeUI7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7WUFDcEIsT0FBTyxHQUFHO1lBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRSxDQUFDOzs7O0lBRUQsdUNBQWM7OztJQUFkO1FBQ0ksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDOztnQkFqSEosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxVQUFVO29CQUVwQiwyVEFBcUM7b0JBQ3JDLElBQUksRUFBRTt3QkFDRixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsa0JBQWtCLEVBQUUsTUFBTTt3QkFDMUIsd0JBQXdCLEVBQUUsZ0JBQWdCO3dCQUMxQyxtQkFBbUIsRUFBRSxXQUFXO3dCQUNoQyx5QkFBeUIsRUFBRSxpQkFBaUI7d0JBQzVDLG1CQUFtQixFQUFFLE1BQU07d0JBQzNCLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsZUFBZSxFQUFFLEVBQUU7cUJBQ3RCO29CQUNELFVBQVUsRUFBRTt3QkFDUixhQUFhO3FCQUNoQjs7aUJBQ0o7Ozs7Z0JBbkNHLFVBQVU7Z0JBT1Ysd0JBQXdCO2dCQUd4QixpQkFBaUI7Z0JBRVosUUFBUSx1QkF3REEsUUFBUTs7OytCQTlCcEIsU0FBUyxTQUFDLElBQUksRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBQztnQ0FtRXhDLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBMEJyQyxxQkFBQztDQUFBLEFBbEhELENBbUJvQyxrQkFBa0IsR0ErRnJEO1NBL0ZZLGNBQWM7OztJQUV2QixzQ0FDK0I7O0lBRS9CLDRCQUFXOztJQUVYLHlDQUFnQzs7SUFFaEMsc0NBQTZCOztJQUU3Qix3Q0FBOEI7O0lBRTlCLG1DQUF5Qjs7SUFFekIseUNBQStCOztJQUUvQiw0Q0FBaUQ7O0lBRWpELGdEQUF1Qzs7SUFFdkMscUNBQTZCOztJQUU3Qix5Q0FBNkI7Ozs7O0lBRTdCLHNDQUErRDs7Ozs7SUFFL0QsbUNBQXVCOzs7OztJQUVYLCtCQUF5Qjs7Ozs7SUFDekIsa0RBQTBEOzs7OztJQUMxRCwrQkFBZ0M7Ozs7O0lBQ2hDLGtDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25Jbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVHlwZSxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXV0aWxzL21vZGFsLXJlZic7XG5pbXBvcnQgeyBtb2RhbEZhZGVOZ0lmIH0gZnJvbSAnLi9tb2RhbC11dGlscy9tb2RhbC1hbmltYXRpb25zJztcbmltcG9ydCB7IEFic3RyYWN0RmROZ3hDbGFzcyB9IGZyb20gJy4uL3V0aWxzL2Fic3RyYWN0LWZkLW5neC1jbGFzcyc7XG5pbXBvcnQgZm9jdXNUcmFwIGZyb20gJ2ZvY3VzLXRyYXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLW1vZGFsJyxcbiAgICBzdHlsZVVybHM6IFsnbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ3JvbGUnOiAnZGlhbG9nJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1tb2RhbF0nOiAndHJ1ZScsXG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsbGVkYnldJzogJ2FyaWFMYWJlbGxlZEJ5JyxcbiAgICAgICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogJ2FyaWFMYWJlbCcsXG4gICAgICAgICdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdhcmlhRGVzY3JpYmVkQnknLFxuICAgICAgICAnW2F0dHIuYXJpYS1tb2RhbF0nOiAndHJ1ZScsXG4gICAgICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICAgICAndGFiaW5kZXgnOiAnLTEnLFxuICAgICAgICAnW0Btb2RhbC1mYWRlXSc6ICcnXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIG1vZGFsRmFkZU5nSWZcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGZE5neENsYXNzIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZCgndmMnLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZn0pXG4gICAgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgaWQ6IHN0cmluZztcblxuICAgIGVzY0tleUNsb3NlYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBmb2N1c1RyYXBwZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG5cbiAgICBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG5cbiAgICBhcmlhRGVzY3JpYmVkQnk6IHN0cmluZyA9IG51bGw7XG5cbiAgICBjaGlsZENvbXBvbmVudFR5cGU6IFRlbXBsYXRlUmVmPGFueT4gfCBUeXBlPGFueT47XG5cbiAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGhhc0JhY2tkcm9wOiBib29sZWFuICA9IHRydWU7XG5cbiAgICBtb2RhbFBhbmVsQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgRW1iZWRkZWRWaWV3UmVmPGFueT47XG5cbiAgICBwcml2YXRlIGZvY3VzVHJhcDogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbW9kYWxSZWY6IE1vZGFsUmVmKSB7XG4gICAgICAgIHN1cGVyKGVsUmVmKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0UHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb2N1c1RyYXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZENvbXBvbmVudFR5cGUgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRnJvbUNvbXBvbmVudCh0aGlzLmNoaWxkQ29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGcm9tVGVtcGxhdGUodGhpcy5jaGlsZENvbXBvbmVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvY3VzVHJhcHBlZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IGZvY3VzVHJhcCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6IHRoaXMuYmFja2Ryb3BDbGlja0Nsb3NlYWJsZSAmJiB0aGlzLmhhc0JhY2tkcm9wLFxuICAgICAgICAgICAgICAgICAgICBlc2NhcGVEZWFjdGl2YXRlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGb2N1czogdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0F0dGVtcHRlZCB0byBmb2N1cyB0cmFwIHRoZSBtb2RhbCwgYnV0IG5vIHRhYmJhYmxlIGVsZW1lbnRzIHdlcmUgZm91bmQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIGNsb3NlTW9kYWxFc2MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXNjS2V5Q2xvc2VhYmxlICYmIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxSZWYuZGlzbWlzcygnZXNjYXBlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRGcm9tQ29tcG9uZW50KGNvbnRlbnQ6IFR5cGU8YW55Pik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29udGVudCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEZyb21UZW1wbGF0ZShjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMubW9kYWxSZWZcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGVudCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3NldFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGFsUGFuZWxDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5fYWRkQ2xhc3NUb0VsZW1lbnQodGhpcy5tb2RhbFBhbmVsQ2xhc3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19