theme-lib
Version:
This is a simple example Angular Library published to npm.
302 lines • 18.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/*
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { Inject, Injectable } from '@angular/core';
import { ReplaySubject, Subject } from 'rxjs';
import { map, filter, pairwise, distinctUntilChanged, startWith, share } from 'rxjs/operators';
import { NB_THEME_OPTIONS } from '../theme.options';
import { NbJSThemesRegistry } from './js-themes-registry.service';
import { NbMediaBreakpointsService } from './breakpoints.service';
/*
* Main Nebular service. Includes various helper methods.
*/
var NbThemeService = /** @class */ (function () {
function NbThemeService(options, breakpointService, jsThemesRegistry) {
this.options = options;
this.breakpointService = breakpointService;
this.jsThemesRegistry = jsThemesRegistry;
this.themeChanges$ = new ReplaySubject(1);
this.appendLayoutClass$ = new Subject();
this.removeLayoutClass$ = new Subject();
this.changeWindowWidth$ = new ReplaySubject(2);
if (options && options.name) {
this.changeTheme(options.name);
}
}
/*
* Change current application theme
* @param {string} name
*/
/*
* Change current application theme
* @param {string} name
*/
/**
* @param {?} name
* @return {?}
*/
NbThemeService.prototype.changeTheme = /*
* Change current application theme
* @param {string} name
*/
/**
* @param {?} name
* @return {?}
*/
function (name) {
this.themeChanges$.next({ name: name, previous: this.currentTheme });
this.currentTheme = name;
};
/**
* @param {?} width
* @return {?}
*/
NbThemeService.prototype.changeWindowWidth = /**
* @param {?} width
* @return {?}
*/
function (width) {
this.changeWindowWidth$.next(width);
};
/*
* Returns a theme object with variables (color/paddings/etc) on a theme change.
* Once subscribed - returns current theme.
*
* @returns {Observable<NbJSThemeOptions>}
*/
/*
* Returns a theme object with variables (color/paddings/etc) on a theme change.
* Once subscribed - returns current theme.
*
* @returns {Observable<NbJSThemeOptions>}
*/
/**
* @return {?}
*/
NbThemeService.prototype.getJsTheme = /*
* Returns a theme object with variables (color/paddings/etc) on a theme change.
* Once subscribed - returns current theme.
*
* @returns {Observable<NbJSThemeOptions>}
*/
/**
* @return {?}
*/
function () {
var _this = this;
return this.onThemeChange().pipe(map(function (theme) {
return _this.jsThemesRegistry.get(theme.name);
}));
};
/*
* Triggers media query breakpoint change
* Returns a pair where the first item is previous media breakpoint and the second item is current breakpoit.
* ```ts
* [{ name: 'xs', width: 0 }, { name: 'md', width: 768 }] // change from `xs` to `md`
* ```
* @returns {Observable<[NbMediaBreakpoint, NbMediaBreakpoint]>}
*/
/*
* Triggers media query breakpoint change
* Returns a pair where the first item is previous media breakpoint and the second item is current breakpoit.
* ```ts
* [{ name: 'xs', width: 0 }, { name: 'md', width: 768 }] // change from `xs` to `md`
* ```
* @returns {Observable<[NbMediaBreakpoint, NbMediaBreakpoint]>}
*/
/**
* @return {?}
*/
NbThemeService.prototype.onMediaQueryChange = /*
* Triggers media query breakpoint change
* Returns a pair where the first item is previous media breakpoint and the second item is current breakpoit.
* ```ts
* [{ name: 'xs', width: 0 }, { name: 'md', width: 768 }] // change from `xs` to `md`
* ```
* @returns {Observable<[NbMediaBreakpoint, NbMediaBreakpoint]>}
*/
/**
* @return {?}
*/
function () {
var _this = this;
return this.changeWindowWidth$
.pipe(startWith(undefined), pairwise(), map(function (_a) {
var _b = tslib_1.__read(_a, 2), prevWidth = _b[0], width = _b[1];
return [
_this.breakpointService.getByWidth(prevWidth),
_this.breakpointService.getByWidth(width),
];
}), filter(function (_a) {
var _b = tslib_1.__read(_a, 2), prevPoint = _b[0], point = _b[1];
return prevPoint.name !== point.name;
}), distinctUntilChanged(null, function (params) { return params[0].name + params[1].name; }), share());
};
/*
* Triggered when current theme is changed
* @returns {Observable<any>}
*/
/*
* Triggered when current theme is changed
* @returns {Observable<any>}
*/
/**
* @return {?}
*/
NbThemeService.prototype.onThemeChange = /*
* Triggered when current theme is changed
* @returns {Observable<any>}
*/
/**
* @return {?}
*/
function () {
return this.themeChanges$.pipe(share());
};
/*
* Append a class to nb-layout
* @param {string} className
*/
/*
* Append a class to nb-layout
* @param {string} className
*/
/**
* @param {?} className
* @return {?}
*/
NbThemeService.prototype.appendLayoutClass = /*
* Append a class to nb-layout
* @param {string} className
*/
/**
* @param {?} className
* @return {?}
*/
function (className) {
this.appendLayoutClass$.next(className);
};
/*
* Triggered when a new class is added to nb-layout through `appendLayoutClass` method
* @returns {Observable<any>}
*/
/*
* Triggered when a new class is added to nb-layout through `appendLayoutClass` method
* @returns {Observable<any>}
*/
/**
* @return {?}
*/
NbThemeService.prototype.onAppendLayoutClass = /*
* Triggered when a new class is added to nb-layout through `appendLayoutClass` method
* @returns {Observable<any>}
*/
/**
* @return {?}
*/
function () {
return this.appendLayoutClass$.pipe(share());
};
/*
* Removes a class from nb-layout
* @param {string} className
*/
/*
* Removes a class from nb-layout
* @param {string} className
*/
/**
* @param {?} className
* @return {?}
*/
NbThemeService.prototype.removeLayoutClass = /*
* Removes a class from nb-layout
* @param {string} className
*/
/**
* @param {?} className
* @return {?}
*/
function (className) {
this.removeLayoutClass$.next(className);
};
/*
* Triggered when a class is removed from nb-layout through `removeLayoutClass` method
* @returns {Observable<any>}
*/
/*
* Triggered when a class is removed from nb-layout through `removeLayoutClass` method
* @returns {Observable<any>}
*/
/**
* @return {?}
*/
NbThemeService.prototype.onRemoveLayoutClass = /*
* Triggered when a class is removed from nb-layout through `removeLayoutClass` method
* @returns {Observable<any>}
*/
/**
* @return {?}
*/
function () {
return this.removeLayoutClass$.pipe(share());
};
NbThemeService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NbThemeService.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [NB_THEME_OPTIONS,] }] },
{ type: NbMediaBreakpointsService },
{ type: NbJSThemesRegistry }
]; };
return NbThemeService;
}());
export { NbThemeService };
if (false) {
/** @type {?} */
NbThemeService.prototype.currentTheme;
/**
* @type {?}
* @private
*/
NbThemeService.prototype.themeChanges$;
/**
* @type {?}
* @private
*/
NbThemeService.prototype.appendLayoutClass$;
/**
* @type {?}
* @private
*/
NbThemeService.prototype.removeLayoutClass$;
/**
* @type {?}
* @private
*/
NbThemeService.prototype.changeWindowWidth$;
/**
* @type {?}
* @protected
*/
NbThemeService.prototype.options;
/**
* @type {?}
* @private
*/
NbThemeService.prototype.breakpointService;
/**
* @type {?}
* @private
*/
NbThemeService.prototype.jsThemesRegistry;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFNQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBcUIsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUtyRjtJQVVFLHdCQUFnRCxPQUFZLEVBQ3hDLGlCQUE0QyxFQUM1QyxnQkFBb0M7UUFGUixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ3hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMkI7UUFDNUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQVBoRCxrQkFBYSxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkMsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNuQyx1QkFBa0IsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUt4RCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7Ozs7O0lBQ0gsb0NBQVc7Ozs7Ozs7O0lBQVgsVUFBWSxJQUFZO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFBLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7Ozs7O0lBRUQsMENBQWlCOzs7O0lBQWpCLFVBQWtCLEtBQWE7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7Ozs7Ozs7Ozs7SUFDSCxtQ0FBVTs7Ozs7Ozs7O0lBQVY7UUFBQSxpQkFNQztRQUxDLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLFVBQUMsS0FBVTtZQUNiLE9BQU8sS0FBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HOzs7Ozs7Ozs7Ozs7SUFDSCwyQ0FBa0I7Ozs7Ozs7Ozs7O0lBQWxCO1FBQUEsaUJBaUJDO1FBaEJDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQjthQUMzQixJQUFJLENBQ0gsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUNwQixRQUFRLEVBQUUsRUFDVixHQUFHLENBQUMsVUFBQyxFQUFvQztnQkFBcEMsMEJBQW9DLEVBQW5DLGlCQUFTLEVBQUUsYUFBSztZQUNwQixPQUFPO2dCQUNMLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxLQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUN6QyxDQUFBO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLFVBQUMsRUFBMEQ7Z0JBQTFELDBCQUEwRCxFQUF6RCxpQkFBUyxFQUFFLGFBQUs7WUFDdkIsT0FBTyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkMsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLENBQUMsSUFBSSxFQUFFLFVBQUEsTUFBTSxJQUFJLE9BQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUEvQixDQUErQixDQUFDLEVBQ3JFLEtBQUssRUFBRSxDQUNSLENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7OztJQUNILHNDQUFhOzs7Ozs7O0lBQWI7UUFDRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7Ozs7O0lBQ0gsMENBQWlCOzs7Ozs7OztJQUFqQixVQUFrQixTQUFpQjtRQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7Ozs7Ozs7O0lBQ0gsNENBQW1COzs7Ozs7O0lBQW5CO1FBQ0UsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7Ozs7O0lBQ0gsMENBQWlCOzs7Ozs7OztJQUFqQixVQUFrQixTQUFpQjtRQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7Ozs7Ozs7O0lBQ0gsNENBQW1COzs7Ozs7O0lBQW5CO1FBQ0UsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7Z0JBOUdGLFVBQVU7Ozs7Z0RBVUksTUFBTSxTQUFDLGdCQUFnQjtnQkFmN0IseUJBQXlCO2dCQUR6QixrQkFBa0I7O0lBcUgzQixxQkFBQztDQUFBLEFBL0dELElBK0dDO1NBOUdZLGNBQWM7OztJQUd6QixzQ0FBcUI7Ozs7O0lBQ3JCLHVDQUE2Qzs7Ozs7SUFDN0MsNENBQTJDOzs7OztJQUMzQyw0Q0FBMkM7Ozs7O0lBQzNDLDRDQUEwRDs7Ozs7SUFFOUMsaUNBQWdEOzs7OztJQUNoRCwyQ0FBb0Q7Ozs7O0lBQ3BELDBDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBmaWx0ZXIsIHBhaXJ3aXNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IE5CX1RIRU1FX09QVElPTlMgfSBmcm9tICcuLi90aGVtZS5vcHRpb25zJztcclxuaW1wb3J0IHsgTmJKU1RoZW1lT3B0aW9ucyB9IGZyb20gJy4vanMtdGhlbWVzL3RoZW1lLm9wdGlvbnMnO1xyXG5pbXBvcnQgeyBOYkpTVGhlbWVzUmVnaXN0cnkgfSBmcm9tICcuL2pzLXRoZW1lcy1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmJNZWRpYUJyZWFrcG9pbnRzU2VydmljZSwgTmJNZWRpYUJyZWFrcG9pbnQgfSBmcm9tICcuL2JyZWFrcG9pbnRzLnNlcnZpY2UnO1xyXG5cclxuLypcclxuICogTWFpbiBOZWJ1bGFyIHNlcnZpY2UuIEluY2x1ZGVzIHZhcmlvdXMgaGVscGVyIG1ldGhvZHMuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOYlRoZW1lU2VydmljZSB7XHJcblxyXG4gIC8vIFRPRE86IGJlaGF2aW9yYWwgc3ViamVjdCBoZXJlP1xyXG4gIGN1cnJlbnRUaGVtZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgdGhlbWVDaGFuZ2VzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gIHByaXZhdGUgYXBwZW5kTGF5b3V0Q2xhc3MkID0gbmV3IFN1YmplY3QoKTtcclxuICBwcml2YXRlIHJlbW92ZUxheW91dENsYXNzJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHJpdmF0ZSBjaGFuZ2VXaW5kb3dXaWR0aCQgPSBuZXcgUmVwbGF5U3ViamVjdDxudW1iZXI+KDIpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5CX1RIRU1FX09QVElPTlMpIHByb3RlY3RlZCBvcHRpb25zOiBhbnksXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBicmVha3BvaW50U2VydmljZTogTmJNZWRpYUJyZWFrcG9pbnRzU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGpzVGhlbWVzUmVnaXN0cnk6IE5iSlNUaGVtZXNSZWdpc3RyeSkge1xyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5uYW1lKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlVGhlbWUob3B0aW9ucy5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ2hhbmdlIGN1cnJlbnQgYXBwbGljYXRpb24gdGhlbWVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAqL1xyXG4gIGNoYW5nZVRoZW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50aGVtZUNoYW5nZXMkLm5leHQoeyBuYW1lLCBwcmV2aW91czogdGhpcy5jdXJyZW50VGhlbWUgfSk7XHJcbiAgICB0aGlzLmN1cnJlbnRUaGVtZSA9IG5hbWU7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VXaW5kb3dXaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZVdpbmRvd1dpZHRoJC5uZXh0KHdpZHRoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJucyBhIHRoZW1lIG9iamVjdCB3aXRoIHZhcmlhYmxlcyAoY29sb3IvcGFkZGluZ3MvZXRjKSBvbiBhIHRoZW1lIGNoYW5nZS5cclxuICAgKiBPbmNlIHN1YnNjcmliZWQgLSByZXR1cm5zIGN1cnJlbnQgdGhlbWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxOYkpTVGhlbWVPcHRpb25zPn1cclxuICAgKi9cclxuICBnZXRKc1RoZW1lKCk6IE9ic2VydmFibGU8TmJKU1RoZW1lT3B0aW9ucz4ge1xyXG4gICAgcmV0dXJuIHRoaXMub25UaGVtZUNoYW5nZSgpLnBpcGUoXHJcbiAgICAgIG1hcCgodGhlbWU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmpzVGhlbWVzUmVnaXN0cnkuZ2V0KHRoZW1lLm5hbWUpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFRyaWdnZXJzIG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnQgY2hhbmdlXHJcbiAgICogUmV0dXJucyBhIHBhaXIgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgcHJldmlvdXMgbWVkaWEgYnJlYWtwb2ludCBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIGN1cnJlbnQgYnJlYWtwb2l0LlxyXG4gICAqIGBgYHRzXHJcbiAgICogIFt7IG5hbWU6ICd4cycsIHdpZHRoOiAwIH0sIHsgbmFtZTogJ21kJywgd2lkdGg6IDc2OCB9XSAvLyBjaGFuZ2UgZnJvbSBgeHNgIHRvIGBtZGBcclxuICAgKiBgYGBcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxbTmJNZWRpYUJyZWFrcG9pbnQsIE5iTWVkaWFCcmVha3BvaW50XT59XHJcbiAgICovXHJcbiAgb25NZWRpYVF1ZXJ5Q2hhbmdlKCk6IE9ic2VydmFibGU8TmJNZWRpYUJyZWFrcG9pbnRbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlV2luZG93V2lkdGgkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxyXG4gICAgICAgIHBhaXJ3aXNlKCksXHJcbiAgICAgICAgbWFwKChbcHJldldpZHRoLCB3aWR0aF06IFtudW1iZXIsIG51bWJlcl0pID0+IHtcclxuICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRoaXMuYnJlYWtwb2ludFNlcnZpY2UuZ2V0QnlXaWR0aChwcmV2V2lkdGgpLFxyXG4gICAgICAgICAgICB0aGlzLmJyZWFrcG9pbnRTZXJ2aWNlLmdldEJ5V2lkdGgod2lkdGgpLFxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcigoW3ByZXZQb2ludCwgcG9pbnRdOiBbTmJNZWRpYUJyZWFrcG9pbnQsIE5iTWVkaWFCcmVha3BvaW50XSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHByZXZQb2ludC5uYW1lICE9PSBwb2ludC5uYW1lO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKG51bGwsIHBhcmFtcyA9PiBwYXJhbXNbMF0ubmFtZSArIHBhcmFtc1sxXS5uYW1lKSxcclxuICAgICAgICBzaGFyZSgpLFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBUcmlnZ2VyZWQgd2hlbiBjdXJyZW50IHRoZW1lIGlzIGNoYW5nZWRcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxhbnk+fVxyXG4gICAqL1xyXG4gIG9uVGhlbWVDaGFuZ2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnRoZW1lQ2hhbmdlcyQucGlwZShzaGFyZSgpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQXBwZW5kIGEgY2xhc3MgdG8gbmItbGF5b3V0XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxyXG4gICAqL1xyXG4gIGFwcGVuZExheW91dENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFwcGVuZExheW91dENsYXNzJC5uZXh0KGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFRyaWdnZXJlZCB3aGVuIGEgbmV3IGNsYXNzIGlzIGFkZGVkIHRvIG5iLWxheW91dCB0aHJvdWdoIGBhcHBlbmRMYXlvdXRDbGFzc2AgbWV0aG9kXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8YW55Pn1cclxuICAgKi9cclxuICBvbkFwcGVuZExheW91dENsYXNzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRMYXlvdXRDbGFzcyQucGlwZShzaGFyZSgpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogUmVtb3ZlcyBhIGNsYXNzIGZyb20gbmItbGF5b3V0XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxyXG4gICAqL1xyXG4gIHJlbW92ZUxheW91dENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlbW92ZUxheW91dENsYXNzJC5uZXh0KGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFRyaWdnZXJlZCB3aGVuIGEgY2xhc3MgaXMgcmVtb3ZlZCBmcm9tIG5iLWxheW91dCB0aHJvdWdoIGByZW1vdmVMYXlvdXRDbGFzc2AgbWV0aG9kXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8YW55Pn1cclxuICAgKi9cclxuICBvblJlbW92ZUxheW91dENsYXNzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVMYXlvdXRDbGFzcyQucGlwZShzaGFyZSgpKTtcclxuICB9XHJcbn1cclxuIl19