sb-element
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.1. It is a component library constructed around the SCSS library [Sb-Theming](https://github.com/SeverinBuchser/SbTheming) and supports [Angular Schematics]
65 lines • 8.13 kB
JavaScript
import { DOCUMENT } from "@angular/common";
import { Inject, Injectable } from '@angular/core';
import { BehaviorSubject } from "rxjs";
import * as i0 from "@angular/core";
export class ThemesConfig extends Array {
}
export class SbThemeService extends BehaviorSubject {
constructor(themesConfig, document) {
super('dark');
this.themesConfig = themesConfig;
this.document = document;
this.createNewLinkElement(themesConfig[0]);
}
findThemeByName(themeName) {
return (themeConfig) => {
return themeName == themeConfig.name;
};
}
commit(themeName) {
const themeConfig = this.themesConfig.find(this.findThemeByName(themeName));
if (themeConfig) {
this.updateLinkElement(themeConfig);
this.next(this._themeConfig.name);
}
else
throw new Error(`Theme ${themeName} does not exist!`);
}
get() { return this._themeConfig.name; }
createNewLinkElement(themeConfig) {
this.createLinkElement(themeConfig);
this._themeConfig = themeConfig;
}
updateLinkElement(themeConfig) {
this.removeLinkElement(this._themeConfig);
this.createNewLinkElement(themeConfig);
}
createLinkElement(themeConfig) {
const link = this.document.createElement('link');
link.id = `sb-theme-${themeConfig.name}`;
link.setAttribute('rel', 'stylesheet');
link.setAttribute('href', themeConfig.href);
this.document.head.appendChild(link);
}
removeLinkElement(themeConfig) {
const link = this.document.getElementById(`sb-theme-${themeConfig.name}`);
if (link) {
this.document.head.removeChild(link);
}
}
}
SbThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbThemeService, deps: [{ token: ThemesConfig }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
SbThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbThemeService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: SbThemeService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return [{ type: ThemesConfig, decorators: [{
type: Inject,
args: [ThemesConfig]
}] }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NiLWVsZW1lbnQvc3JjL2xpYi9jb3JlL3N0eWxlL3RoZW1lL3RoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRXZDLE1BQU0sT0FBTyxZQUFhLFNBQVEsS0FBa0I7Q0FBRztBQVV2RCxNQUFNLE9BQU8sY0FBZSxTQUFRLGVBQXVCO0lBSXpELFlBQ2dDLFlBQTBCLEVBQzlCLFFBQWtCO1FBRTVDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUhnQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUM5QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQWlCO1FBQ3ZDLE9BQU8sQ0FBQyxXQUF3QixFQUFXLEVBQUU7WUFDM0MsT0FBTyxTQUFTLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztRQUN2QyxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQWlCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7O1lBQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLFNBQVMsa0JBQWtCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sR0FBRyxLQUFhLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDO0lBRTlDLG9CQUFvQixDQUFDLFdBQXdCO1FBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsV0FBd0I7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFdBQXdCO1FBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsWUFBWSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8saUJBQWlCLENBQUMsV0FBd0I7UUFDaEQsTUFBTSxJQUFJLEdBQXVCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDOzsyR0FuRFUsY0FBYyxrQkFLZixZQUFZLGFBQ1osUUFBUTsrR0FOUCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjswREFNK0MsWUFBWTswQkFBdkQsTUFBTTsyQkFBQyxZQUFZOzhCQUNnQixRQUFROzBCQUEzQyxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcblxuZXhwb3J0IGNsYXNzIFRoZW1lc0NvbmZpZyBleHRlbmRzIEFycmF5PFRoZW1lQ29uZmlnPiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xuICBocmVmOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNiVGhlbWVTZXJ2aWNlIGV4dGVuZHMgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ge1xuXG4gIHByaXZhdGUgX3RoZW1lQ29uZmlnITogVGhlbWVDb25maWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChUaGVtZXNDb25maWcpIHByaXZhdGUgdGhlbWVzQ29uZmlnOiBUaGVtZXNDb25maWcsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gICAgc3VwZXIoJ2RhcmsnKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0xpbmtFbGVtZW50KHRoZW1lc0NvbmZpZ1swXSlcbiAgfVxuXG4gIHByaXZhdGUgZmluZFRoZW1lQnlOYW1lKHRoZW1lTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICh0aGVtZUNvbmZpZzogVGhlbWVDb25maWcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiB0aGVtZU5hbWUgPT0gdGhlbWVDb25maWcubmFtZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY29tbWl0KHRoZW1lTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGhlbWVDb25maWcgPSB0aGlzLnRoZW1lc0NvbmZpZy5maW5kKHRoaXMuZmluZFRoZW1lQnlOYW1lKHRoZW1lTmFtZSkpO1xuICAgIGlmICh0aGVtZUNvbmZpZykge1xuICAgICAgdGhpcy51cGRhdGVMaW5rRWxlbWVudCh0aGVtZUNvbmZpZyk7XG4gICAgICB0aGlzLm5leHQodGhpcy5fdGhlbWVDb25maWcubmFtZSk7XG4gICAgfSBlbHNlIHRocm93IG5ldyBFcnJvcihgVGhlbWUgJHt0aGVtZU5hbWV9IGRvZXMgbm90IGV4aXN0IWApO1xuICB9XG5cbiAgcHVibGljIGdldCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fdGhlbWVDb25maWcubmFtZSB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXdMaW5rRWxlbWVudCh0aGVtZUNvbmZpZzogVGhlbWVDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUxpbmtFbGVtZW50KHRoZW1lQ29uZmlnKTtcbiAgICB0aGlzLl90aGVtZUNvbmZpZyA9IHRoZW1lQ29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5rRWxlbWVudCh0aGVtZUNvbmZpZzogVGhlbWVDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUxpbmtFbGVtZW50KHRoaXMuX3RoZW1lQ29uZmlnKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0xpbmtFbGVtZW50KHRoZW1lQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGlua0VsZW1lbnQodGhlbWVDb25maWc6IFRoZW1lQ29uZmlnKSB7XG4gICAgY29uc3QgbGluayA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgIGxpbmsuaWQgPSBgc2ItdGhlbWUtJHt0aGVtZUNvbmZpZy5uYW1lfWA7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdzdHlsZXNoZWV0Jyk7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB0aGVtZUNvbmZpZy5ocmVmKTtcbiAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpbmtFbGVtZW50KHRoZW1lQ29uZmlnOiBUaGVtZUNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGxpbms6IEhUTUxFbGVtZW50IHwgbnVsbCA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNiLXRoZW1lLSR7dGhlbWVDb25maWcubmFtZX1gKTtcbiAgICBpZiAobGluaykge1xuICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGxpbmspO1xuICAgIH1cbiAgfVxufVxuIl19