{"version":3,"file":"tableau-ui-angular-theme.mjs","sources":["../../../projects/component-library/theme/src/theme.service.ts","../../../projects/component-library/theme/src/tableau-ui-angular-theme.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport type { ThemeConfig } from './theme.config';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport type { Observable } from 'rxjs';\nimport { BehaviorSubject, combineLatest, map } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ThemeService {\n  private readonly themeKey = 'theme-config';\n  private readonly defaultTheme: ThemeConfig = {\n    fontSize: '12px',\n    mode: 'auto',\n  };\n\n  private readonly _theme$ = new BehaviorSubject<ThemeConfig>(this.getInitialTheme());\n  public get theme$(): Observable<ThemeConfig> {\n    return this._theme$;\n  }\n  private readonly autoColor$ = new BehaviorSubject<'dark' | 'light'>(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');\n  readonly $theme = toSignal(this._theme$, {\n    initialValue: this._theme$.value,\n  });\n\n  readonly appliedThemeMode$ = combineLatest([this._theme$, this.autoColor$]).pipe(\n    map(([theme, autoColor]) => {\n      return this.getAppliedThemeMode(theme, autoColor);\n    }),\n  );\n  readonly $appliedThemeMode = toSignal(this.appliedThemeMode$, { initialValue: this.getAppliedThemeMode(this._theme$.value, this.autoColor$.value) });\n\n  private getAppliedThemeMode(theme: ThemeConfig, autoColor: 'dark' | 'light'): 'dark' | 'light' {\n    return theme.mode === 'auto' ? autoColor : theme.mode;\n  }\n  initialize() {\n    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {\n      if (e.matches) {\n        this.autoColor$.next('dark');\n      } else {\n        this.autoColor$.next('light');\n      }\n    });\n\n    this._theme$.subscribe(theme => {\n      localStorage.setItem(this.themeKey, JSON.stringify(theme));\n      document.documentElement.style.setProperty('--twc-font-size', theme.fontSize);\n    });\n\n    combineLatest([this._theme$, this.autoColor$]).subscribe(([theme, autoColor]) => {\n      const color = theme.mode === 'auto' ? autoColor : theme.mode;\n      switch (color) {\n        case 'dark':\n          {\n            if (!document.body.classList.contains('dark-mode')) {\n              document.body.classList.add('dark-mode');\n            }\n            document.body.style.colorScheme = 'dark';\n          }\n          break;\n        case 'light':\n          {\n            if (document.body.classList.contains('dark-mode')) {\n              document.body.classList.remove('dark-mode');\n            }\n            document.body.style.colorScheme = 'light';\n          }\n          break;\n      }\n      const { fontSize } = theme;\n      document.documentElement.style.setProperty('--twc-font-size-body', fontSize);\n    });\n  }\n\n  setColorMode(mode: 'auto' | 'dark' | 'light') {\n    const theme = this._theme$.value;\n    theme.mode = mode;\n    this._theme$.next(theme);\n  }\n  setFontSize(fontSize: string) {\n    const theme = this._theme$.value;\n    theme.fontSize = fontSize;\n    this._theme$.next(theme);\n  }\n  reset() {\n    this._theme$.next(this.defaultTheme);\n  }\n\n  private getInitialTheme(): ThemeConfig {\n    const storedTheme = localStorage.getItem(this.themeKey);\n    if (storedTheme !== null) {\n      const t = JSON.parse(storedTheme) as Partial<ThemeConfig>;\n      t.fontSize = t.fontSize ?? '12px';\n      t.mode = t.mode ?? 'auto';\n      return t as ThemeConfig;\n    } else {\n      return this.defaultTheme;\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}