UNPKG

@hxui/angular

Version:

This README includes the steps that are necessary to import the HxUi-angular into a project or to contribute with development.

248 lines (247 loc) 19.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Component, HostBinding, Input } from '@angular/core'; import { TabsetConfig } from './tabset.config'; var TabsetComponent = /** @class */ (function () { function TabsetComponent(config) { this.clazn = true; this.tabs = []; this.classMap = {}; Object.assign(this, config); } Object.defineProperty(TabsetComponent.prototype, "vertical", { get: /** * if true tabs will be placed vertically * @return {?} */ function () { return this._vertical; }, set: /** * @param {?} value * @return {?} */ function (value) { this._vertical = value; this.setClassMap(); }, enumerable: true, configurable: true }); Object.defineProperty(TabsetComponent.prototype, "justified", { get: /** * if true tabs fill the container and have a consistent width * @return {?} */ function () { return this._justified; }, set: /** * @param {?} value * @return {?} */ function (value) { this._justified = value; this.setClassMap(); }, enumerable: true, configurable: true }); Object.defineProperty(TabsetComponent.prototype, "hasInfo", { get: /** * @return {?} */ function () { return this._hasInfo; }, set: /** * @param {?} value * @return {?} */ function (value) { this._hasInfo = value; this.setClassMap(); }, enumerable: true, configurable: true }); Object.defineProperty(TabsetComponent.prototype, "type", { get: /** * navigation context class: 'tabs' or 'pills' * @return {?} */ function () { return this._type; }, set: /** * @param {?} value * @return {?} */ function (value) { this._type = value; this.setClassMap(); }, enumerable: true, configurable: true }); /** * @return {?} */ TabsetComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.isDestroyed = true; }; /** * @param {?} tab * @return {?} */ TabsetComponent.prototype.addTab = /** * @param {?} tab * @return {?} */ function (tab) { this.tabs.push(tab); tab.active = this.tabs.length === 1 && tab.active !== false; }; /** * @param {?} tab * @param {?=} options * @return {?} */ TabsetComponent.prototype.removeTab = /** * @param {?} tab * @param {?=} options * @return {?} */ function (tab, options) { if (options === void 0) { options = { reselect: true, emit: true }; } var /** @type {?} */ index = this.tabs.indexOf(tab); if (index === -1 || this.isDestroyed) { return; } // Select a new tab if the tab to be removed is selected and not destroyed if (options.reselect && tab.active && this.hasAvailableTabs(index)) { var /** @type {?} */ newActiveIndex = this.getClosestTabIndex(index); this.tabs[newActiveIndex].active = true; } if (options.emit) { tab.removed.emit(tab); } this.tabs.splice(index, 1); if (tab.elementRef.nativeElement && tab.elementRef.nativeElement.remove) { tab.elementRef.nativeElement.remove(); } }; /** * @param {?} index * @return {?} */ TabsetComponent.prototype.getClosestTabIndex = /** * @param {?} index * @return {?} */ function (index) { var /** @type {?} */ tabsLength = this.tabs.length; if (!tabsLength) { return -1; } for (var /** @type {?} */ step = 1; step <= tabsLength; step += 1) { var /** @type {?} */ prevIndex = index - step; var /** @type {?} */ nextIndex = index + step; if (this.tabs[prevIndex] && !this.tabs[prevIndex].disabled) { return prevIndex; } if (this.tabs[nextIndex] && !this.tabs[nextIndex].disabled) { return nextIndex; } } return -1; }; /** * @param {?} index * @return {?} */ TabsetComponent.prototype.hasAvailableTabs = /** * @param {?} index * @return {?} */ function (index) { var /** @type {?} */ tabsLength = this.tabs.length; if (!tabsLength) { return false; } for (var /** @type {?} */ i = 0; i < tabsLength; i += 1) { if (!this.tabs[i].disabled && i !== index) { return true; } } return false; }; /** * @return {?} */ TabsetComponent.prototype.setClassMap = /** * @return {?} */ function () { this.classMap = (_a = { 'is-vertical': this.vertical, 'is-justified': this.justified, 'has-info': this.hasInfo }, _a["hx-nav-" + this.type] = true, _a); var _a; }; TabsetComponent.decorators = [ { type: Component, args: [{ selector: 'hx-tabset', template: "\n <ul class=\"hx-nav\" [ngClass]=\"classMap\" (click)=\"$event.preventDefault()\">\n <li *ngFor=\"let tabz of tabs\" [ngClass]=\"['hx-nav-item', tabz.customClass || '']\"\n [class.is-active]=\"tabz.active\" [class.is-disabled]=\"tabz.disabled\">\n <a href=\"javascript:void(0);\" class=\"hx-nav-link\"\n [class.is-active]=\"tabz.active\" [class.is-disabled]=\"tabz.disabled\"\n (click)=\"tabz.active = true\">\n <span [ngTransclude]=\"tabz.headingRef\">{{tabz.heading}}</span>\n <span *ngIf=\"tabz.removable\">\n <span (click)=\"$event.preventDefault(); removeTab(tabz);\" class=\"icon close-outline is-small\"></span>\n </span>\n </a>\n </li>\n </ul>\n <div class=\"hx-tab-content\">\n <ng-content></ng-content>\n </div>\n " },] }, ]; /** @nocollapse */ TabsetComponent.ctorParameters = function () { return [ { type: TabsetConfig, }, ]; }; TabsetComponent.propDecorators = { "vertical": [{ type: Input },], "justified": [{ type: Input },], "hasInfo": [{ type: Input },], "type": [{ type: Input },], "clazn": [{ type: HostBinding, args: ['class.hx-tab-container',] },], }; return TabsetComponent; }()); export { TabsetComponent }; function TabsetComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabsetComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabsetComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabsetComponent.propDecorators; /** @type {?} */ TabsetComponent.prototype.clazn; /** @type {?} */ TabsetComponent.prototype.tabs; /** @type {?} */ TabsetComponent.prototype.classMap; /** @type {?} */ TabsetComponent.prototype.isDestroyed; /** @type {?} */ TabsetComponent.prototype._vertical; /** @type {?} */ TabsetComponent.prototype._justified; /** @type {?} */ TabsetComponent.prototype._hasInfo; /** @type {?} */ TabsetComponent.prototype._type; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoeHVpL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvdGFicy90YWJzZXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs2QkEwRTFCLE1BQW9CO3FCQVhlLElBQUk7b0JBRTVCLEVBQUU7d0JBQ1QsRUFBRTtRQVN2QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzs7MEJBakRuQixxQ0FBUTs7Ozs7O1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDOzs7Ozs7a0JBRUosS0FBYztZQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Ozs7OzBCQUtWLHNDQUFTOzs7Ozs7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Ozs7OztrQkFFSixLQUFjO1lBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7Ozs7MEJBSVYsb0NBQU87Ozs7O1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7a0JBRUosS0FBYztZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Ozs7OzBCQUtWLGlDQUFJOzs7Ozs7WUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7O2tCQUVKLEtBQWE7WUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFB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QU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2Q7UUFFRCxHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztLQUNkOzs7O0lBRVMscUNBQVc7OztJQUFyQjtRQUNFLElBQUksQ0FBQyxRQUFRO2dCQUNYLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDNUIsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87O1lBQ3hCLEdBQUMsWUFBVSxJQUFJLENBQUMsSUFBTSxJQUFHLElBQUk7ZUFDOUIsQ0FBQzs7S0FDSDs7Z0JBaEpGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLHMxQkFpQlQ7aUJBQ0Y7Ozs7Z0JBdEJRLFlBQVk7Ozs2QkF5QmxCLEtBQUs7OEJBVUwsS0FBSzs0QkFTTCxLQUFLO3lCQVVMLEtBQUs7MEJBU0wsV0FBVyxTQUFDLHdCQUF3Qjs7MEJBbEV2Qzs7U0EwQmEsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFRhYkRpcmVjdGl2ZSB9IGZyb20gJy4vdGFiLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRhYnNldENvbmZpZyB9IGZyb20gJy4vdGFic2V0LmNvbmZpZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2h4LXRhYnNldCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDx1bCBjbGFzcz1cImh4LW5hdlwiIFtuZ0NsYXNzXT1cImNsYXNzTWFwXCIgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XHJcbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCB0YWJ6IG9mIHRhYnNcIiBbbmdDbGFzc109XCJbJ2h4LW5hdi1pdGVtJywgdGFiei5jdXN0b21DbGFzcyB8fCAnJ11cIlxyXG4gICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJ0YWJ6LmFjdGl2ZVwiIFtjbGFzcy5pcy1kaXNhYmxlZF09XCJ0YWJ6LmRpc2FibGVkXCI+XHJcbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIGNsYXNzPVwiaHgtbmF2LWxpbmtcIlxyXG4gICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cInRhYnouYWN0aXZlXCIgW2NsYXNzLmlzLWRpc2FibGVkXT1cInRhYnouZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidGFiei5hY3RpdmUgPSB0cnVlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtuZ1RyYW5zY2x1ZGVdPVwidGFiei5oZWFkaW5nUmVmXCI+e3t0YWJ6LmhlYWRpbmd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWJ6LnJlbW92YWJsZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgcmVtb3ZlVGFiKHRhYnopO1wiIGNsYXNzPVwiaWNvbiBjbG9zZS1vdXRsaW5lIGlzLXNtYWxsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaHgtdGFiLWNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFic2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAvKiogaWYgdHJ1ZSB0YWJzIHdpbGwgYmUgcGxhY2VkIHZlcnRpY2FsbHkgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgdmVydGljYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmVydGljYWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdmVydGljYWwodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3ZlcnRpY2FsID0gdmFsdWU7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgfVxyXG5cclxuICAvKiogaWYgdHJ1ZSB0YWJzIGZpbGwgdGhlIGNvbnRhaW5lciBhbmQgaGF2ZSBhIGNvbnNpc3RlbnQgd2lkdGggKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQganVzdGlmaWVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2p1c3RpZmllZDtcclxuICB9XHJcbiAgcHVibGljIHNldCBqdXN0aWZpZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2p1c3RpZmllZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGhhc0luZm8oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faGFzSW5mbztcclxuICB9XHJcbiAgcHVibGljIHNldCBoYXNJbmZvKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9oYXNJbmZvID0gdmFsdWU7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgfVxyXG5cclxuICAvKiogbmF2aWdhdGlvbiBjb250ZXh0IGNsYXNzOiAndGFicycgb3IgJ3BpbGxzJyAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcclxuICB9XHJcbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3R5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaHgtdGFiLWNvbnRhaW5lcicpIHB1YmxpYyBjbGF6biA9IHRydWU7XHJcblxyXG4gIHB1YmxpYyB0YWJzOiBUYWJEaXJlY3RpdmVbXSA9IFtdO1xyXG4gIHB1YmxpYyBjbGFzc01hcDogYW55ID0ge307XHJcblxyXG4gIHByb3RlY3RlZCBpc0Rlc3Ryb3llZDogYm9vbGVhbjtcclxuICBwcm90ZWN0ZWQgX3ZlcnRpY2FsOiBib29sZWFuO1xyXG4gIHByb3RlY3RlZCBfanVzdGlmaWVkOiBib29sZWFuO1xyXG4gIHByb3RlY3RlZCBfaGFzSW5mbzogYm9vbGVhbjtcclxuICBwcm90ZWN0ZWQgX3R5cGU6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogVGFic2V0Q29uZmlnKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRUYWIodGFiOiBUYWJEaXJlY3RpdmUpOiB2b2lkIHtcclxuICAgIHRoaXMudGFicy5wdXNoKHRhYik7XHJcbiAgICB0YWIuYWN0aXZlID0gdGhpcy50YWJzLmxlbmd0aCA9PT0gMSAmJiB0YWIuYWN0aXZlICE9PSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVUYWIodGFiOiBUYWJEaXJlY3RpdmUsIG9wdGlvbnMgPSB7cmVzZWxlY3Q6IHRydWUsIGVtaXQ6IHRydWV9KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHRhYik7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xIHx8IHRoaXMuaXNEZXN0cm95ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gU2VsZWN0IGEgbmV3IHRhYiBpZiB0aGUgdGFiIHRvIGJlIHJlbW92ZWQgaXMgc2VsZWN0ZWQgYW5kIG5vdCBkZXN0cm95ZWRcclxuICAgIGlmIChvcHRpb25zLnJlc2VsZWN0ICYmIHRhYi5hY3RpdmUgJiYgdGhpcy5oYXNBdmFpbGFibGVUYWJzKGluZGV4KSkge1xyXG4gICAgICBjb25zdCBuZXdBY3RpdmVJbmRleCA9IHRoaXMuZ2V0Q2xvc2VzdFRhYkluZGV4KGluZGV4KTtcclxuICAgICAgdGhpcy50YWJzW25ld0FjdGl2ZUluZGV4XS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuZW1pdCkge1xyXG4gICAgICB0YWIucmVtb3ZlZC5lbWl0KHRhYik7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGlmICh0YWIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ICYmIHRhYi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlKSB7XHJcbiAgICAgIHRhYi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0Q2xvc2VzdFRhYkluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgdGFic0xlbmd0aCA9IHRoaXMudGFicy5sZW5ndGg7XHJcbiAgICBpZiAoIXRhYnNMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHN0ZXAgPSAxOyBzdGVwIDw9IHRhYnNMZW5ndGg7IHN0ZXAgKz0gMSkge1xyXG4gICAgICBjb25zdCBwcmV2SW5kZXggPSBpbmRleCAtIHN0ZXA7XHJcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgc3RlcDtcclxuICAgICAgaWYgKHRoaXMudGFic1twcmV2SW5kZXhdICYmICF0aGlzLnRhYnNbcHJldkluZGV4XS5kaXNhYmxlZCkge1xyXG4gICAgICAgIHJldHVybiBwcmV2SW5kZXg7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudGFic1tuZXh0SW5kZXhdICYmICF0aGlzLnRhYnNbbmV4dEluZGV4XS5kaXNhYmxlZCkge1xyXG4gICAgICAgIHJldHVybiBuZXh0SW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBoYXNBdmFpbGFibGVUYWJzKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRhYnNMZW5ndGggPSB0aGlzLnRhYnMubGVuZ3RoO1xyXG4gICAgaWYgKCF0YWJzTGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnNMZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICBpZiAoIXRoaXMudGFic1tpXS5kaXNhYmxlZCAmJiBpICE9PSBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0Q2xhc3NNYXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsYXNzTWFwID0ge1xyXG4gICAgICAnaXMtdmVydGljYWwnOiB0aGlzLnZlcnRpY2FsLFxyXG4gICAgICAnaXMtanVzdGlmaWVkJzogdGhpcy5qdXN0aWZpZWQsXHJcbiAgICAgICdoYXMtaW5mbyc6IHRoaXMuaGFzSW5mbyxcclxuICAgICAgW2BoeC1uYXYtJHt0aGlzLnR5cGV9YF06IHRydWVcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==