UNPKG

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
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