UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

234 lines 16.4 kB
/** * @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==