UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

302 lines 18.8 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 { 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFNQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBcUIsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUtyRjtJQVVFLHdCQUFnRCxPQUFZLEVBQ3hDLGlCQUE0QyxFQUM1QyxnQkFBb0M7UUFGUixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ3hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMkI7UUFDNUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQVBoRCxrQkFBYSxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkMsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNuQyx1QkFBa0IsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUt4RCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJ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QUR6QixrQkFBa0I7O0lBcUgzQixxQkFBQztDQUFBLEFBL0dELElBK0dDO1NBOUdZLGNBQWM7OztJQUd6QixzQ0FBcUI7Ozs7O0lBQ3JCLHVDQUE2Qzs7Ozs7SUFDN0MsNENBQTJDOzs7OztJQUMzQyw0Q0FBMkM7Ozs7O0lBQzNDLDRDQUEwRDs7Ozs7SUFFOUMsaUNBQWdEOzs7OztJQUNoRCwyQ0FBb0Q7Ozs7O0lBQ3BELDBDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBmaWx0ZXIsIHBhaXJ3aXNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IE5CX1RIRU1FX09QVElPTlMgfSBmcm9tICcuLi90aGVtZS5vcHRpb25zJztcclxuaW1wb3J0IHsgTmJKU1RoZW1lT3B0aW9ucyB9IGZyb20gJy4vanMtdGhlbWVzL3RoZW1lLm9wdGlvbnMnO1xyXG5pbXBvcnQgeyBOYkpTVGhlbWVzUmVnaXN0cnkgfSBmcm9tICcuL2pzLXRoZW1lcy1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmJNZWRpYUJyZWFrcG9pbnRzU2VydmljZSwgTmJNZWRpYUJyZWFrcG9pbnQgfSBmcm9tICcuL2JyZWFrcG9pbnRzLnNlcnZpY2UnO1xyXG5cclxuLypcclxuICogTWFpbiBOZWJ1bGFyIHNlcnZpY2UuIEluY2x1ZGVzIHZhcmlvdXMgaGVscGVyIG1ldGhvZHMuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOYlRoZW1lU2VydmljZSB7XHJcblxyXG4gIC8vIFRPRE86IGJlaGF2aW9yYWwgc3ViamVjdCBoZXJlP1xyXG4gIGN1cnJlbnRUaGVtZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgdGhlbWVDaGFuZ2VzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gIHByaXZhdGUgYXBwZW5kTGF5b3V0Q2xhc3MkID0gbmV3IFN1YmplY3QoKTtcclxuICBwcml2YXRlIHJlbW92ZUxheW91dENsYXNzJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHJpdmF0ZSBjaGFuZ2VXaW5kb3dXaWR0aCQgPSBuZXcgUmVwbGF5U3ViamVjdDxudW1iZXI+KDIpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5CX1RIRU1FX09QVElPTlMpIHByb3RlY3RlZCBvcHRpb25zOiBhbnksXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBicmVha3BvaW50U2VydmljZTogTmJNZWRpYUJyZWFrcG9pbnRzU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGpzVGhlbWVzUmVnaXN0cnk6IE5iSlNUaGVtZXNSZWdpc3RyeSkge1xyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5uYW1lKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlVGhlbWUob3B0aW9ucy5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ2hhbmdlIGN1cnJlbnQgYXBwbGljYXRpb24gdGhlbWVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAqL1xyXG4gIGNoYW5nZVRoZW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50aGVtZUNoYW5nZXMkLm5leHQoeyBuYW1lLCBwcmV2aW91czogdGhpcy5jdXJyZW50VGhlbWUgfSk7XHJcbiAgICB0aGlzLmN1cnJlbnRUaGVtZSA9IG5hbWU7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VXaW5kb3dXaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZVdpbmRvd1dpZHRoJC5uZXh0KHdpZHRoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJucyBhIHRoZW1lIG9iamVjdCB3aXRoIHZhcmlhYmxlcyAoY29sb3IvcGFkZGluZ3MvZXRjKSBvbiBhIHRoZW1lIGNoYW5nZS5cclxuICAgKiBPbmNlIHN1YnNjcmliZWQgLSByZXR1cm5zIGN1cnJlbnQgdGhlbWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxOYkpTVGhlbWVPcHRpb25zPn1cclxuICAgKi9cclxuICBnZXRKc1RoZW1lKCk6IE9ic2VydmFibGU8TmJKU1RoZW1lT3B0aW9ucz4ge1xyXG4gICAgcmV0dXJuIHRoaXMub25UaGVtZUNoYW5nZSgpLnBpcGUoXHJcbiAgICAgIG1hcCgodGhlbWU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmpzVGhlbWVzUmVnaXN0cnkuZ2V0KHRoZW1lLm5hbWUpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFRyaWdnZXJzIG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnQgY2hhbmdlXHJcbiAgICogUmV0dXJucyBhIHBhaXIgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgcHJldmlvdXMgbWVkaWEgYnJlYWtwb2ludCBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIGN1cnJlbnQgYnJlYWtwb2l0LlxyXG4gICAqIGBgYHRzXHJcbiAgICogIFt7IG5hbWU6ICd4cycsIHdpZHRoOiAwIH0sIHsgbmFtZTogJ21kJywgd2lkdGg6IDc2OCB9XSAvLyBjaGFuZ2UgZnJvbSBgeHNgIHRvIGBtZGBcclxuICAgKiBgYGBcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxbTmJNZWRpYUJyZWFrcG9pbnQsIE5iTWVkaWFCcmVha3BvaW50XT59XHJcbiAgICovXHJcbiAgb25NZWRpYVF1ZXJ5Q2hhbmdlKCk6IE9ic2VydmFibGU8TmJNZWRpYUJyZWFrcG9pbnRbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlV2luZG93V2lkdGgkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxyXG4gICAgICAgIHBhaXJ3aXNlKCksXHJcbiAgICAgICAgbWFwKChbcHJldldpZHRoLCB3aWR0aF06IFtudW1iZXIsIG51bWJlcl0pID0+IHtcclxuICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRoaXMuYnJlYWtwb2ludFNlcnZpY2UuZ2V0QnlXaWR0aChwcmV2V2lkdGgpLFxyXG4gICAgICAgICAgICB0aGlzLmJyZWFrcG9pbnRTZXJ2aWNlLmdldEJ5V2lkdGgod2lkdGgpLFxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcigoW3ByZXZQb2ludCwgcG9pbnRdOiBbTmJNZWRpYUJyZWFrcG9pbnQsIE5iTWVkaWFCcmVha3BvaW50XSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHByZXZQb2ludC5uYW1lICE9PSBwb2ludC5uYW1lO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKG51bGwsIHBhcmFtcyA9PiBwYXJhbXNbMF0ubmFtZSArIHBhcmFtc1sxXS5uYW1lKSxcclxuICAgICAgICBzaGFyZSgpLFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBUcmlnZ2VyZWQgd2hlbiBjdXJyZW50IHRoZW1lIGlzIGNoYW5nZWRcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxhbnk+fVxyXG4gICAqL1xyXG4gIG9uVGhlbWVDaGFuZ2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnRoZW1lQ2hhbmdlcyQucGlwZShzaGFyZSgpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQXBwZW5kIGEgY2xhc3MgdG8gbmItbGF5b3V0XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxyXG4gICAqL1xyXG4gIGFwcGVuZExheW91dENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFwcGVuZExheW91dENsYXNzJC5uZXh0KGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFRyaWdnZXJlZCB3aGVuIGEgbmV3IGNsYXNzIGlzIGFkZGVkIHRvIG5iLWxheW91dCB0aHJvdWdoIGBhcHBlbmRMYXlvdXRDbGFzc2AgbWV0aG9kXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8YW55Pn1cclxuICAgKi9cclxuICBvbkFwcGVuZExheW91dENsYXNzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRMYXlvdXRDbGFzcyQucGlwZShzaGFyZSgpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogUmVtb3ZlcyBhIGNsYXNzIGZyb20gbmItbGF5b3V0XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxyXG4gICAqL1xyXG4gIHJlbW92ZUxheW91dENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlbW92ZUxheW91dENsYXNzJC5uZXh0KGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIFRyaWdnZXJlZCB3aGVuIGEgY2xhc3MgaXMgcmVtb3ZlZCBmcm9tIG5iLWxheW91dCB0aHJvdWdoIGByZW1vdmVMYXlvdXRDbGFzc2AgbWV0aG9kXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8YW55Pn1cclxuICAgKi9cclxuICBvblJlbW92ZUxheW91dENsYXNzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVMYXlvdXRDbGFzcyQucGlwZShzaGFyZSgpKTtcclxuICB9XHJcbn1cclxuIl19