theme-lib
Version:
This is a simple example Angular Library published to npm.
234 lines • 16.4 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 { DEFAULT_THEME } from './js-themes/default.theme';
import { COSMIC_THEME } from './js-themes/cosmic.theme';
import { CORPORATE_THEME } from './js-themes/corporate.theme';
import { NB_BUILT_IN_JS_THEMES, NB_JS_THEMES } from '../theme.options';
/** @type {?} */
export var BUILT_IN_THEMES = [
DEFAULT_THEME,
COSMIC_THEME,
CORPORATE_THEME,
];
/*
* Js Themes registry - provides access to the JS themes' variables.
* Usually shouldn't be used directly, but through the NbThemeService class methods (getJsTheme).
*/
var NbJSThemesRegistry = /** @class */ (function () {
function NbJSThemesRegistry(builtInThemes, newThemes) {
if (newThemes === void 0) { newThemes = []; }
var _this = this;
this.themes = {};
/** @type {?} */
var themes = this.combineByNames(newThemes, builtInThemes);
themes.forEach(function (theme) {
_this.register(theme, theme.name, theme.base);
});
}
/*
* Registers a new JS theme
* @param config any
* @param themeName string
* @param baseTheme string
*/
/*
* Registers a new JS theme
* @param config any
* @param themeName string
* @param baseTheme string
*/
/**
* @param {?} config
* @param {?} themeName
* @param {?} baseTheme
* @return {?}
*/
NbJSThemesRegistry.prototype.register = /*
* Registers a new JS theme
* @param config any
* @param themeName string
* @param baseTheme string
*/
/**
* @param {?} config
* @param {?} themeName
* @param {?} baseTheme
* @return {?}
*/
function (config, themeName, baseTheme) {
/** @type {?} */
var base = this.has(baseTheme) ? this.get(baseTheme) : {};
this.themes[themeName] = this.mergeDeep({}, base, config);
};
/*
* Checks whether the theme is registered
* @param themeName
* @returns boolean
*/
/*
* Checks whether the theme is registered
* @param themeName
* @returns boolean
*/
/**
* @param {?} themeName
* @return {?}
*/
NbJSThemesRegistry.prototype.has = /*
* Checks whether the theme is registered
* @param themeName
* @returns boolean
*/
/**
* @param {?} themeName
* @return {?}
*/
function (themeName) {
return !!this.themes[themeName];
};
/*
* Return a theme
* @param themeName
* @returns NbJSThemeOptions
*/
/*
* Return a theme
* @param themeName
* @returns NbJSThemeOptions
*/
/**
* @param {?} themeName
* @return {?}
*/
NbJSThemesRegistry.prototype.get = /*
* Return a theme
* @param themeName
* @returns NbJSThemeOptions
*/
/**
* @param {?} themeName
* @return {?}
*/
function (themeName) {
if (!this.themes[themeName]) {
throw Error("NbThemeConfig: no theme '" + themeName + "' found registered.");
}
return JSON.parse(JSON.stringify(this.themes[themeName]));
};
/**
* @private
* @param {?} newThemes
* @param {?} oldThemes
* @return {?}
*/
NbJSThemesRegistry.prototype.combineByNames = /**
* @private
* @param {?} newThemes
* @param {?} oldThemes
* @return {?}
*/
function (newThemes, oldThemes) {
var _this = this;
if (newThemes) {
/** @type {?} */
var mergedThemes_1 = [];
newThemes.forEach(function (theme) {
/** @type {?} */
var sameOld = oldThemes.find(function (tm) { return tm.name === theme.name; })
|| (/** @type {?} */ ({}));
/** @type {?} */
var mergedTheme = _this.mergeDeep({}, sameOld, theme);
mergedThemes_1.push(mergedTheme);
});
oldThemes.forEach(function (theme) {
if (!mergedThemes_1.find(function (tm) { return tm.name === theme.name; })) {
mergedThemes_1.push(theme);
}
});
return mergedThemes_1;
}
return oldThemes;
};
/**
* @private
* @param {?} item
* @return {?}
*/
NbJSThemesRegistry.prototype.isObject = /**
* @private
* @param {?} item
* @return {?}
*/
function (item) {
return item && typeof item === 'object' && !Array.isArray(item);
};
// TODO: move to helpers
// TODO: move to helpers
/**
* @private
* @param {?} target
* @param {...?} sources
* @return {?}
*/
NbJSThemesRegistry.prototype.mergeDeep =
// TODO: move to helpers
/**
* @private
* @param {?} target
* @param {...?} sources
* @return {?}
*/
function (target) {
var sources = [];
for (var _i = 1; _i < arguments.length; _i++) {
sources[_i - 1] = arguments[_i];
}
var _a, _b;
if (!sources.length) {
return target;
}
/** @type {?} */
var source = sources.shift();
if (this.isObject(target) && this.isObject(source)) {
for (var key in source) {
if (this.isObject(source[key])) {
if (!target[key]) {
Object.assign(target, (_a = {}, _a[key] = {}, _a));
}
this.mergeDeep(target[key], source[key]);
}
else {
Object.assign(target, (_b = {}, _b[key] = source[key], _b));
}
}
}
return this.mergeDeep.apply(this, tslib_1.__spread([target], sources));
};
NbJSThemesRegistry.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NbJSThemesRegistry.ctorParameters = function () { return [
{ type: Array, decorators: [{ type: Inject, args: [NB_BUILT_IN_JS_THEMES,] }] },
{ type: Array, decorators: [{ type: Inject, args: [NB_JS_THEMES,] }] }
]; };
return NbJSThemesRegistry;
}());
export { NbJSThemesRegistry };
if (false) {
/**
* @type {?}
* @private
*/
NbJSThemesRegistry.prototype.themes;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMtdGhlbWVzLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvanMtdGhlbWVzLXJlZ2lzdHJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFdkUsTUFBTSxLQUFPLGVBQWUsR0FBdUI7SUFDakQsYUFBYTtJQUNiLFlBQVk7SUFDWixlQUFlO0NBQ2hCOzs7OztBQU1EO0lBS0UsNEJBQTJDLGFBQWlDLEVBQzFDLFNBQWtDO1FBQXhELDBCQUFBLEVBQUEsY0FBd0Q7UUFEcEUsaUJBUUM7UUFWTyxXQUFNLEdBQVEsRUFBRSxDQUFDOztZQUtqQixNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO1FBRTVELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFVO1lBQ3hCLEtBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHOzs7Ozs7Ozs7Ozs7O0lBQ0gscUNBQVE7Ozs7Ozs7Ozs7OztJQUFSLFVBQVMsTUFBVyxFQUFFLFNBQWlCLEVBQUUsU0FBaUI7O1lBQ2xELElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNB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LE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLFlBQUksR0FBQyxHQUFHLElBQUcsRUFBRSxNQUFHLENBQUM7cUJBQ3RDO29CQUNELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUMxQztxQkFBTTtvQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sWUFBSSxHQUFDLEdBQUcsSUFBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQUcsQ0FBQztpQkFDL0M7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxPQUFkLElBQUksb0JBQVcsTUFBTSxHQUFLLE9BQU8sR0FBRTtJQUM1QyxDQUFDOztnQkE3RkYsVUFBVTs7Ozs0Q0FLSSxNQUFNLFNBQUMscUJBQXFCOzRDQUM1QixNQUFNLFNBQUMsWUFBWTs7SUF3RmxDLHlCQUFDO0NBQUEsQUE5RkQsSUE4RkM7U0E3Rlksa0JBQWtCOzs7Ozs7SUFFN0Isb0NBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuXHJcbmltcG9ydCB7IE5iSlNUaGVtZU9wdGlvbnMgfSBmcm9tICcuL2pzLXRoZW1lcy90aGVtZS5vcHRpb25zJztcclxuaW1wb3J0IHsgREVGQVVMVF9USEVNRSB9IGZyb20gJy4vanMtdGhlbWVzL2RlZmF1bHQudGhlbWUnO1xyXG5pbXBvcnQgeyBDT1NNSUNfVEhFTUUgfSBmcm9tICcuL2pzLXRoZW1lcy9jb3NtaWMudGhlbWUnO1xyXG5pbXBvcnQgeyBDT1JQT1JBVEVfVEhFTUUgfSBmcm9tICcuL2pzLXRoZW1lcy9jb3Jwb3JhdGUudGhlbWUnO1xyXG5pbXBvcnQgeyBOQl9CVUlMVF9JTl9KU19USEVNRVMsIE5CX0pTX1RIRU1FUyB9IGZyb20gJy4uL3RoZW1lLm9wdGlvbnMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEJVSUxUX0lOX1RIRU1FUzogTmJKU1RoZW1lT3B0aW9uc1tdID0gW1xyXG4gIERFRkFVTFRfVEhFTUUsXHJcbiAgQ09TTUlDX1RIRU1FLFxyXG4gIENPUlBPUkFURV9USEVNRSxcclxuXTtcclxuXHJcbi8qXHJcbiAqIEpzIFRoZW1lcyByZWdpc3RyeSAtIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgSlMgdGhlbWVzJyB2YXJpYWJsZXMuXHJcbiAqIFVzdWFsbHkgc2hvdWxkbid0IGJlIHVzZWQgZGlyZWN0bHksIGJ1dCB0aHJvdWdoIHRoZSBOYlRoZW1lU2VydmljZSBjbGFzcyBtZXRob2RzIChnZXRKc1RoZW1lKS5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5iSlNUaGVtZXNSZWdpc3RyeSB7XHJcblxyXG4gIHByaXZhdGUgdGhlbWVzOiBhbnkgPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChOQl9CVUlMVF9JTl9KU19USEVNRVMpIGJ1aWx0SW5UaGVtZXM6IE5iSlNUaGVtZU9wdGlvbnNbXSxcclxuICAgICAgICAgICAgICBASW5qZWN0KE5CX0pTX1RIRU1FUykgbmV3VGhlbWVzOiBOYkpTVGhlbWVPcHRpb25zW10gPSBbXSkge1xyXG5cclxuICAgIGNvbnN0IHRoZW1lcyA9IHRoaXMuY29tYmluZUJ5TmFtZXMobmV3VGhlbWVzLCBidWlsdEluVGhlbWVzKTtcclxuXHJcbiAgICB0aGVtZXMuZm9yRWFjaCgodGhlbWU6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyKHRoZW1lLCB0aGVtZS5uYW1lLCB0aGVtZS5iYXNlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBSZWdpc3RlcnMgYSBuZXcgSlMgdGhlbWVcclxuICAgKiBAcGFyYW0gY29uZmlnIGFueVxyXG4gICAqIEBwYXJhbSB0aGVtZU5hbWUgc3RyaW5nXHJcbiAgICogQHBhcmFtIGJhc2VUaGVtZSBzdHJpbmdcclxuICAgKi9cclxuICByZWdpc3Rlcihjb25maWc6IGFueSwgdGhlbWVOYW1lOiBzdHJpbmcsIGJhc2VUaGVtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBiYXNlID0gdGhpcy5oYXMoYmFzZVRoZW1lKSA/IHRoaXMuZ2V0KGJhc2VUaGVtZSkgOiB7fTtcclxuICAgIHRoaXMudGhlbWVzW3RoZW1lTmFtZV0gPSB0aGlzLm1lcmdlRGVlcCh7fSwgYmFzZSwgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHRoZW1lIGlzIHJlZ2lzdGVyZWRcclxuICAgKiBAcGFyYW0gdGhlbWVOYW1lXHJcbiAgICogQHJldHVybnMgYm9vbGVhblxyXG4gICAqL1xyXG4gIGhhcyh0aGVtZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy50aGVtZXNbdGhlbWVOYW1lXTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgdGhlbWVcclxuICAgKiBAcGFyYW0gdGhlbWVOYW1lXHJcbiAgICogQHJldHVybnMgTmJKU1RoZW1lT3B0aW9uc1xyXG4gICAqL1xyXG4gIGdldCh0aGVtZU5hbWU6IHN0cmluZyk6IE5iSlNUaGVtZU9wdGlvbnMge1xyXG4gICAgaWYgKCF0aGlzLnRoZW1lc1t0aGVtZU5hbWVdKSB7XHJcbiAgICAgIHRocm93IEVycm9yKGBOYlRoZW1lQ29uZmlnOiBubyB0aGVtZSAnJHt0aGVtZU5hbWV9JyBmb3VuZCByZWdpc3RlcmVkLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50aGVtZXNbdGhlbWVOYW1lXSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21iaW5lQnlOYW1lcyhuZXdUaGVtZXM6IE5iSlNUaGVtZU9wdGlvbnNbXSwgb2xkVGhlbWVzOiBOYkpTVGhlbWVPcHRpb25zW10pOiBOYkpTVGhlbWVPcHRpb25zW10ge1xyXG4gICAgaWYgKG5ld1RoZW1lcykge1xyXG4gICAgICBjb25zdCBtZXJnZWRUaGVtZXM6IE5iSlNUaGVtZU9wdGlvbnNbXSA9IFtdO1xyXG4gICAgICBuZXdUaGVtZXMuZm9yRWFjaCgodGhlbWU6IE5iSlNUaGVtZU9wdGlvbnMpID0+IHtcclxuICAgICAgICBjb25zdCBzYW1lT2xkOiBOYkpTVGhlbWVPcHRpb25zID0gb2xkVGhlbWVzLmZpbmQoKHRtOiBOYkpTVGhlbWVPcHRpb25zKSA9PiB0bS5uYW1lID09PSB0aGVtZS5uYW1lKVxyXG4gICAgICAgICAgfHwgPE5iSlNUaGVtZU9wdGlvbnM+e307XHJcblxyXG4gICAgICAgIGNvbnN0IG1lcmdlZFRoZW1lID0gdGhpcy5tZXJnZURlZXAoe30sIHNhbWVPbGQsIHRoZW1lKTtcclxuICAgICAgICBtZXJnZWRUaGVtZXMucHVzaChtZXJnZWRUaGVtZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgb2xkVGhlbWVzLmZvckVhY2goKHRoZW1lOiBOYkpTVGhlbWVPcHRpb25zKSA9PiB7XHJcbiAgICAgICAgaWYgKCFtZXJnZWRUaGVtZXMuZmluZCgodG06IE5iSlNUaGVtZU9wdGlvbnMpID0+IHRtLm5hbWUgPT09IHRoZW1lLm5hbWUpKSB7XHJcbiAgICAgICAgICBtZXJnZWRUaGVtZXMucHVzaCh0aGVtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIG1lcmdlZFRoZW1lcztcclxuICAgIH1cclxuICAgIHJldHVybiBvbGRUaGVtZXM7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBpc09iamVjdChpdGVtKSB7XHJcbiAgICByZXR1cm4gaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSk7XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiBtb3ZlIHRvIGhlbHBlcnNcclxuICBwcml2YXRlIG1lcmdlRGVlcCh0YXJnZXQsIC4uLnNvdXJjZXMpIHtcclxuICAgIGlmICghc291cmNlcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09iamVjdCh0YXJnZXQpICYmIHRoaXMuaXNPYmplY3Qoc291cmNlKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc09iamVjdChzb3VyY2Vba2V5XSkpIHtcclxuICAgICAgICAgIGlmICghdGFyZ2V0W2tleV0pIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHt9IH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5tZXJnZURlZXAodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHNvdXJjZVtrZXldIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==