{"version":3,"file":"ui-vts-theme-services.mjs","sources":["../../src/services/theme-storage.service.ts","../../src/services/tokens.ts","../../src/services/theme.service.ts","../../src/services/theme.module.ts","../../src/services/ui-vts-theme-services.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class VtsThemeStorageService {\n  setBool(key: string, value: boolean) {\n    localStorage.setItem(key, String(value));\n  }\n\n  getBool(key: string): boolean {\n    return localStorage.getItem(key) === 'true';\n  }\n\n  setObject<T>(key: string, value: T) {\n    localStorage.setItem(key, JSON.stringify(value));\n  }\n\n  getObject<T>(key: string): T {\n    const v = localStorage.getItem(key)\n    return v ? JSON.parse(v) : null\n  }\n}\n","import { InjectionToken } from \"@angular/core\";\r\nimport { VtsThemeConfig } from \"./types\";\r\n\r\nexport const VTS_THEME_CONFIG = new InjectionToken<VtsThemeConfig>(\r\n    'Config for theme switcher'\r\n)","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { VtsThemeStorageService } from './theme-storage.service';\nimport { VTS_THEME_CONFIG } from './tokens';\nimport { VtsTheme, VtsThemeConfig, VtsThemeItem } from './types';\n\nexport const THEME_KEY = 'vts-theme'\n\n@Injectable()\nexport class VtsThemeService implements OnDestroy {\n  readonly theme$ = new BehaviorSubject<VtsTheme | null>(null)\n  readonly allTheme$ = new BehaviorSubject<VtsThemeItem[]>([])\n \n  private _theme: VtsTheme | null = null\n  set theme(value: VtsTheme | null) {\n    this._theme = value\n    this.theme$.next(this._theme)\n  }\n  get theme() {\n    return this._theme\n  }\n\n  private _allTheme: VtsThemeItem[] = []\n  set allTheme(value: VtsThemeItem[]) {\n    this._allTheme = value\n    this.allTheme$.next(this._allTheme)\n  }\n  get allTheme() {\n    return this._allTheme\n  }\n\n  constructor(\n    @Inject(VTS_THEME_CONFIG) private config: VtsThemeConfig,\n    @Inject(DOCUMENT) private document: Document, \n    private storage: VtsThemeStorageService) {\n    this.init()\n  }\n\n  ngOnDestroy(): void {\n    this.theme$.complete()\n    this.allTheme$.complete()\n  }\n\n  setTheme(theme: VtsTheme) {\n    if (this.allTheme.filter(i => i.theme === theme).length) {\n      this._theme = theme\n      this.loadTheme()\n    } else {\n      throw new Error(`Unable to find theme ${theme}!`)\n    }\n  }\n\n  loadTheme() {\n    if (!this.document)\n      return\n    const url = this._allTheme.filter(i => i.theme === this._theme)?.[0]?.url\n    if (!url)\n      throw new Error(`Unable to find theme ${this._theme}!`)\n    const script = this.document.createElement('link');\n    script.type = 'text/css';\n    script.rel = 'stylesheet';\n    script.id = `vts-theme-${this._theme}`;\n    script.href = `${url}`;\n    script.onload = () => {\n      // Emit new theme loaded\n      this.theme = this._theme\n      this.storage.setObject(THEME_KEY, this._theme)\n      this.document.body.setAttribute('vts-theme', this._theme!)\n      this._allTheme.map(i => i.theme).filter(i => i !== this._theme).forEach((i) => {\n        const dom = this.document.getElementById(`vts-theme-${i}`)\n        if (dom)\n          dom.remove()\n      })\n    };\n    this.document.body.append(script)\n  }\n\n  init() {\n    const valid: string[] = []\n    const themes: VtsThemeItem[] = this.config.themes.filter(i => {\n      if (valid.includes(i.theme))\n        return false\n      if (!!i.url) {\n        valid.push(i.theme)\n        return true\n      }\n      return false\n    })\n    if (!themes.length)\n      throw new Error(\"No theme provided or invalid data was provided!\")\n    this.allTheme = themes\n    const cache = this.storage.getObject<VtsTheme>(THEME_KEY)\n    this._theme = themes.some(i => i.theme === cache) ? cache : (this.config.defaultTheme || themes[0].theme)\n    this.loadTheme()\n  }\n}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { VtsThemeStorageService } from './theme-storage.service';\nimport { VtsThemeService } from './theme.service';\nimport { VTS_THEME_CONFIG } from './tokens';\nimport { VtsThemeConfig } from './types';\n\n@NgModule({})\nexport class VtsThemeModule { \n  static forRoot(config: VtsThemeConfig): ModuleWithProviders<VtsThemeModule> {\n    return {\n      ngModule: VtsThemeModule,\n      providers: [\n        {\n          provide: VTS_THEME_CONFIG,\n          useValue: config\n        },\n        VtsThemeStorageService,\n        VtsThemeService,\n        { \n          provide: APP_INITIALIZER, \n          useFactory: (_service: VtsThemeService) => () => {}, \n          deps: [VtsThemeService], \n          multi: true \n        }\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.VtsThemeStorageService"],"mappings":"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"}