@rb-mwindh/ngx-theme-manager
Version:
Angular component to switch between different theming stylesheets
66 lines • 5.27 kB
JavaScript
import { Injectable } from '@angular/core';
import { distinctUntilChanged, share, Subject, tap } from 'rxjs';
import * as i0 from "@angular/core";
/**
* A service to track the currently active theme.
*
* @internal
* @group Services
*/
export class ThemeTrackingService {
constructor() {
/**
* The subject that emits the next value set through {@link currentTheme}.
*
* @private
*/
this.#currentTheme$ = new Subject();
/**
* A private property to hold the current theme value.
*
* @private
*/
this.#currentTheme = null;
/**
* The observable that emits the current theme, shared among subscribers.
* This observable prevents emitting the same value twice in a row.
* It also updates the private #currentTheme property.
*/
this.currentTheme$ = this.#currentTheme$.pipe(distinctUntilChanged(), tap((theme) => (this.#currentTheme = theme)), share());
}
/**
* The subject that emits the next value set through {@link currentTheme}.
*
* @private
*/
#currentTheme$;
/**
* A private property to hold the current theme value.
*
* @private
*/
#currentTheme;
/**
* Set the current theme.
*
* @param {string | null} arg
*/
set currentTheme(arg) {
this.#currentTheme$.next(arg);
}
/**
* Get the current theme.
*
* @returns {string | null} The current theme
*/
get currentTheme() {
return this.#currentTheme;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: ThemeTrackingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: ThemeTrackingService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: ThemeTrackingService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtdHJhY2tpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aGVtZS1tYW5hZ2VyL3NyYy9saWIvaW50ZXJuYWwvdGhlbWUtdHJhY2tpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFakU7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBRGpDO1FBRUU7Ozs7V0FJRztRQUNNLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUM7UUFFdkQ7Ozs7V0FJRztRQUNILGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUVwQzs7OztXQUlHO1FBQ00sa0JBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDL0Msb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFDNUMsS0FBSyxFQUFFLENBQ1IsQ0FBQztLQW1CSDtJQTFDQzs7OztPQUlHO0lBQ00sY0FBYyxDQUFnQztJQUV2RDs7OztPQUlHO0lBQ0gsYUFBYSxDQUF1QjtJQWFwQzs7OztPQUlHO0lBQ0gsSUFBSSxZQUFZLENBQUMsR0FBa0I7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQzs4R0ExQ1Usb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FEUCxNQUFNOzsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzaGFyZSwgU3ViamVjdCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIHRvIHRyYWNrIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRoZW1lLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQGdyb3VwIFNlcnZpY2VzXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVGhlbWVUcmFja2luZ1NlcnZpY2Uge1xuICAvKipcbiAgICogVGhlIHN1YmplY3QgdGhhdCBlbWl0cyB0aGUgbmV4dCB2YWx1ZSBzZXQgdGhyb3VnaCB7QGxpbmsgY3VycmVudFRoZW1lfS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlYWRvbmx5ICNjdXJyZW50VGhlbWUkID0gbmV3IFN1YmplY3Q8c3RyaW5nIHwgbnVsbD4oKTtcblxuICAvKipcbiAgICogQSBwcml2YXRlIHByb3BlcnR5IHRvIGhvbGQgdGhlIGN1cnJlbnQgdGhlbWUgdmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAjY3VycmVudFRoZW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgY3VycmVudCB0aGVtZSwgc2hhcmVkIGFtb25nIHN1YnNjcmliZXJzLlxuICAgKiBUaGlzIG9ic2VydmFibGUgcHJldmVudHMgZW1pdHRpbmcgdGhlIHNhbWUgdmFsdWUgdHdpY2UgaW4gYSByb3cuXG4gICAqIEl0IGFsc28gdXBkYXRlcyB0aGUgcHJpdmF0ZSAjY3VycmVudFRoZW1lIHByb3BlcnR5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFRoZW1lJCA9IHRoaXMuI2N1cnJlbnRUaGVtZSQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHRhcCgodGhlbWUpID0+ICh0aGlzLiNjdXJyZW50VGhlbWUgPSB0aGVtZSkpLFxuICAgIHNoYXJlKCksXG4gICk7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB0aGVtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBhcmdcbiAgICovXG4gIHNldCBjdXJyZW50VGhlbWUoYXJnOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy4jY3VycmVudFRoZW1lJC5uZXh0KGFyZyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHRoZW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gVGhlIGN1cnJlbnQgdGhlbWVcbiAgICovXG4gIGdldCBjdXJyZW50VGhlbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRUaGVtZTtcbiAgfVxufVxuIl19