{"version":3,"file":"rxap-ngx-theme.mjs","sources":["../../../../../packages/angular/theme/src/lib/compute-color-palette.ts","../../../../../packages/angular/theme/src/lib/observe-current-theme-density.ts","../../../../../packages/angular/theme/src/lib/theme.service.ts","../../../../../packages/angular/theme/src/lib/provide.ts","../../../../../packages/angular/theme/src/index.ts","../../../../../packages/angular/theme/src/rxap-ngx-theme.ts"],"sourcesContent":["import {\n  ColorInput,\n  Numberify,\n  RGBA,\n  TinyColor,\n} from '@ctrl/tinycolor';\n\nexport interface ColorPalette {\n  50: string;\n  100: string;\n  200: string;\n  300: string;\n  400: string;\n  500: string;\n  600: string;\n  700: string;\n  800: string;\n  900: string;\n  A100: string;\n  A200: string;\n  A400: string;\n  A700: string;\n}\n\nexport enum ColorPaletteAlgorithm {\n  CONSTANTIN = 'constantin',\n  BUCKNER = 'buckner',\n}\n\nexport function ComputeColorPalette(\n  color: ColorInput,\n  colorPalette: Partial<ColorPalette> = {},\n  algorithm?: ColorPaletteAlgorithm | string,\n): ColorPalette {\n  colorPalette = { ...colorPalette };\n\n  const baseLight = new TinyColor('#ffffff');\n  const baseDark = multiply(new TinyColor(color).toRgb(), new TinyColor(color).toRgb());\n  const baseTriad = new TinyColor(color).tetrad();\n\n  switch (algorithm) {\n\n    case ColorPaletteAlgorithm.CONSTANTIN:\n      colorPalette[50] ??= baseLight.mix(color, 12).toHexString();\n      colorPalette[100] ??= baseLight.mix(color, 30).toHexString();\n      colorPalette[200] ??= baseLight.mix(color, 50).toHexString();\n      colorPalette[300] ??= baseLight.mix(color, 70).toHexString();\n      colorPalette[400] ??= baseLight.mix(color, 85).toHexString();\n      colorPalette[500] ??= baseLight.mix(color, 100).toHexString();\n      colorPalette[600] ??= baseDark.mix(color, 87).toHexString();\n      colorPalette[700] ??= baseDark.mix(color, 70).toHexString();\n      colorPalette[800] ??= baseDark.mix(color, 54).toHexString();\n      colorPalette[900] ??= baseDark.mix(color, 25).toHexString();\n      colorPalette.A100 ??= baseDark.mix(baseTriad[4], 15).saturate(80).lighten(65).toHexString();\n      colorPalette.A200 ??= baseDark.mix(baseTriad[4], 15).saturate(80).lighten(55).toHexString();\n      colorPalette.A400 ??= baseDark.mix(baseTriad[4], 15).saturate(100).lighten(45).toHexString();\n      colorPalette.A700 ??= baseDark.mix(baseTriad[4], 15).saturate(100).lighten(40).toHexString();\n      break;\n\n    case ColorPaletteAlgorithm.BUCKNER:\n      colorPalette[50] ??= baseLight.mix(color, 12).toHexString();\n      colorPalette[100] ??= baseLight.mix(color, 30).toHexString();\n      colorPalette[200] ??= baseLight.mix(color, 50).toHexString();\n      colorPalette[300] ??= baseLight.mix(color, 70).toHexString();\n      colorPalette[400] ??= baseLight.mix(color, 85).toHexString();\n      colorPalette[500] ??= baseLight.mix(color, 100).toHexString();\n      colorPalette[600] ??= baseDark.mix(color, 87).toHexString();\n      colorPalette[700] ??= baseDark.mix(color, 70).toHexString();\n      colorPalette[800] ??= baseDark.mix(color, 54).toHexString();\n      colorPalette[900] ??= baseDark.mix(color, 25).toHexString();\n      colorPalette.A100 ??= baseDark.mix(baseTriad[3], 15).saturate(80).lighten(48).toHexString();\n      colorPalette.A200 ??= baseDark.mix(baseTriad[3], 15).saturate(80).lighten(36).toHexString();\n      colorPalette.A400 ??= baseDark.mix(baseTriad[3], 15).saturate(100).lighten(31).toHexString();\n      colorPalette.A700 ??= baseDark.mix(baseTriad[3], 15).saturate(100).lighten(28).toHexString();\n      break;\n\n    default:\n      colorPalette[50] ??= new TinyColor(color).lighten(52).toHexString();\n      colorPalette[100] ??= new TinyColor(color).lighten(37).toHexString();\n      colorPalette[200] ??= new TinyColor(color).lighten(26).toHexString();\n      colorPalette[300] ??= new TinyColor(color).lighten(12).toHexString();\n      colorPalette[400] ??= new TinyColor(color).lighten(6).toHexString();\n      colorPalette[500] ??= new TinyColor(color).toHexString();\n      colorPalette[600] ??= new TinyColor(color).darken(6).toHexString();\n      colorPalette[700] ??= new TinyColor(color).darken(12).toHexString();\n      colorPalette[800] ??= new TinyColor(color).darken(18).toHexString();\n      colorPalette[900] ??= new TinyColor(color).darken(24).toHexString();\n      colorPalette.A100 ??= new TinyColor(color).lighten(50).saturate(30).toHexString();\n      colorPalette.A200 ??= new TinyColor(color).lighten(30).saturate(30).toHexString();\n      colorPalette.A400 ??= new TinyColor(color).lighten(10).saturate(15).toHexString();\n      colorPalette.A700 ??= new TinyColor(color).lighten(5).saturate(5).toHexString();\n      break;\n\n  }\n\n  return colorPalette as ColorPalette;\n}\n\nfunction multiply(rgb1: Numberify<RGBA>, rgb2: Numberify<RGBA>) {\n  rgb1.b = Math.floor(rgb1.b * rgb2.b / 255);\n  rgb1.g = Math.floor(rgb1.g * rgb2.g / 255);\n  rgb1.r = Math.floor(rgb1.r * rgb2.r / 255);\n  return new TinyColor('rgb ' + rgb1.r + ' ' + rgb1.g + ' ' + rgb1.b);\n}\n","import { ThemeDensity } from '@rxap/utilities';\nimport { Observable } from 'rxjs';\n\nexport function ObserveCurrentThemeDensity(): Observable<ThemeDensity> {\n  return new Observable((subscriber) => {\n\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n          const classList = (mutation.target as HTMLElement).classList;\n          const matchingClasses = Array.from(classList).filter((className) =>\n            /density-\\d/.test(className),\n          );\n          if (matchingClasses.length > 0) {\n            const match = matchingClasses[0].match(/density-(\\d)/);\n            if (match) {\n              subscriber.next(Number(match[1]) * -1 as ThemeDensity);\n            }\n          } else {\n            subscriber.next(0);\n          }\n        }\n      });\n    });\n\n    subscriber.add(() => observer.disconnect());\n\n    observer.observe(document.body, {\n      attributes: true,\n      attributeFilter: [ 'class' ],\n    });\n\n  });\n}\n","import { MediaMatcher } from '@angular/cdk/layout';\nimport {\n  inject,\n  Injectable,\n  isDevMode,\n  signal,\n  WritableSignal,\n} from '@angular/core';\nimport { ConfigService } from '@rxap/config';\nimport {\n  PubSubService,\n  RXAP_TOPICS,\n} from '@rxap/ngx-pub-sub';\nimport { isDefined } from '@rxap/rxjs';\nimport { ThemeDensity } from '@rxap/utilities';\nimport {\n  debounceTime,\n  map,\n  Subscription,\n  tap,\n} from 'rxjs';\nimport {\n  ColorPalette,\n  ComputeColorPalette,\n} from './compute-color-palette';\n\nexport interface ColorPaletteConfigWithName extends ColorPaletteConfig {\n  name?: string;\n}\n\nexport interface ThemeConfig {\n  primaryColor?: ColorPaletteConfigWithName;\n  accentColor?: ColorPaletteConfigWithName;\n  warnColor?: ColorPaletteConfigWithName;\n  density?: ThemeDensity;\n  typography?: string;\n}\n\nexport interface ColorPaletteConfig {\n  algorithm?: string;\n  base?: string;\n  color?: Partial<ColorPalette>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n\n  public readonly config = inject(ConfigService);\n  public readonly pubSub = inject(PubSubService);\n\n  public readonly darkMode: WritableSignal<boolean>;\n  public readonly themeName: WritableSignal<string>;\n  public readonly density: WritableSignal<ThemeDensity>;\n  public readonly typography: WritableSignal<string>;\n\n  protected readonly darkModeMediaQuery: MediaQueryList;\n\n  protected syncSubscription?: Subscription;\n\n  constructor(private readonly mediaMatcher: MediaMatcher) {\n    this.darkModeMediaQuery = this.mediaMatcher.matchMedia('(prefers-color-scheme: dark)');\n    this.darkMode = signal(this.darkModeMediaQuery.matches);\n    this.themeName = signal(this.getTheme());\n    this.density = signal(this.getDensity());\n    this.typography = signal(this.getTypography());\n    this.darkModeMediaQuery.addEventListener('change', (event) => {\n      this.setDarkTheme(event.matches, true);\n    });\n  }\n\n  public restore() {\n    if (isDevMode()) {\n      console.log('Restore theme settings from local storage');\n    }\n    // region restore dark mode\n    let darkMode = this.restoreDarkMode();\n    // if the dark/light mode is not restored from the local storage\n    if (darkMode === null) {\n      // set the dark mode based on the media query\n      darkMode = this.darkModeMediaQuery.matches;\n      this.setDarkTheme(darkMode, true);\n    }\n    // endregion\n\n    this.restoreThemeName();\n    this.restoreDensity();\n    this.restoreTypography();\n\n    this.restoreFromPubSub();\n  }\n\n  protected restoreFromPubSub() {\n    if (this.syncSubscription) {\n      return;\n    }\n    this.syncSubscription = new Subscription();\n    this.syncSubscription.add(this.pubSub.subscribe<ThemeDensity>(RXAP_TOPICS.theme.density.restore).pipe(\n      debounceTime(1000),\n      map(event => event.data),\n      isDefined(),\n      tap(data => this.setDensity(data, false, false))\n    ).subscribe());\n    this.syncSubscription.add(this.pubSub.subscribe<string>(RXAP_TOPICS.theme.preset.restore).pipe(\n      debounceTime(1000),\n      map(event => event.data),\n      isDefined(),\n      tap(data => this.setTheme(data, false, false))\n    ).subscribe());\n    this.syncSubscription.add(this.pubSub.subscribe<string>(RXAP_TOPICS.theme.typography.restore).pipe(\n      debounceTime(1000),\n      map(event => event.data),\n      isDefined(),\n      tap(data => this.setTypography(data, false, false))\n    ).subscribe());\n    this.syncSubscription.add(this.pubSub.subscribe<boolean>(RXAP_TOPICS.theme.darkMode.restore).pipe(\n      debounceTime(1000),\n      map(event => event.data),\n      isDefined(),\n      tap(data => this.setDarkTheme(data, false, false))\n    ).subscribe());\n  }\n\n  private get darkModeLocalStorageKey() {\n    return (\n             window as any\n           )?.['__rxap__']?.['ngx']?.['theme']?.['darkMode']?.['key'] ?? `rxap-dark-mode`;\n  }\n\n  private get themeNameLocalStorageKey() {\n    return (\n             window as any\n           )?.['__rxap__']?.['ngx']?.['theme']?.['name']?.['key'] ?? `rxap-theme-name`;\n  }\n\n  private get densityLocalStorageKey() {\n    return (\n             window as any\n           )?.['__rxap__']?.['ngx']?.['theme']?.['density']?.['key'] ?? `rxap-theme-density`;\n  }\n\n  private get typographyLocalStorageKey() {\n    return (\n             window as any\n           )?.['__rxap__']?.['ngx']?.['theme']?.['typography']?.['key'] ?? `rxap-theme-typography`;\n  }\n\n  // region restore\n\n  public restoreDarkMode() {\n    let darkMode: boolean | null = null;\n    const darkModeCached = localStorage.getItem(this.darkModeLocalStorageKey);\n    if (darkModeCached === 'true') {\n      darkMode = true;\n    }\n    if (darkModeCached === 'false') {\n      darkMode = false;\n    }\n    if (darkMode !== null) {\n      this.setDarkTheme(darkMode, true);\n    }\n    return darkMode;\n  }\n\n  public restoreThemeName() {\n    const themeName = localStorage.getItem(this.themeNameLocalStorageKey);\n    if (themeName) {\n      this.setTheme(themeName, true);\n    }\n    return themeName;\n  }\n\n  public restoreTypography() {\n    const typography = localStorage.getItem(this.typographyLocalStorageKey);\n    if (typography) {\n      this.setTypography(typography, true);\n    }\n    return typography;\n  }\n\n  public restoreDensity() {\n    const density = localStorage.getItem('rxap-theme-density');\n    if (density) {\n      const value = Number(density) as ThemeDensity;\n      if (value <= 0 && value >= -3) {\n        this.setDensity(Number(density) as ThemeDensity, true);\n        return value;\n      }\n    }\n    return null;\n  }\n\n  // endregion\n\n  public toggleDarkTheme(): void {\n    this.setDarkTheme(!this.darkMode());\n  }\n\n  // region set theme configuration state\n\n  public setDarkTheme(darkMode: boolean, silent = false, publish = true): void {\n    this.applyDarkMode(darkMode);\n    if (this.darkMode() !== darkMode) {\n      this.darkMode.set(darkMode);\n      if (!silent) {\n        localStorage.setItem(this.darkModeLocalStorageKey, String(darkMode));\n        if (publish) {\n          this.pubSub.publish(RXAP_TOPICS.theme.darkMode.changed, darkMode);\n        }\n      }\n    }\n  }\n\n  public setDensity(density: ThemeDensity, silent = false, publish = true): void {\n    this.applyDensity(density);\n    if (this.density() !== density) {\n      this.density.set(density);\n      if (!silent) {\n        localStorage.setItem(this.densityLocalStorageKey, String(density));\n        if (publish) {\n          this.pubSub.publish(RXAP_TOPICS.theme.density.changed, density);\n        }\n      }\n    }\n  }\n\n  public setTypography(typography: string, silent = false, publish = true): void {\n    this.applyTypography(typography);\n    if (this.typography() !== typography) {\n      this.typography.set(typography);\n      if (!silent) {\n        localStorage.setItem(this.typographyLocalStorageKey, typography);\n        if (publish) {\n          this.pubSub.publish(RXAP_TOPICS.theme.typography.changed, typography);\n        }\n      }\n    }\n  }\n\n  public setTheme(themeName: string, silent = false, publish = true) {\n    this.applyTheme(themeName);\n    this.density.set(this.getDensity());\n    this.typography.set(this.getTypography());\n    if (this.themeName() !== themeName) {\n      this.themeName.set(themeName);\n      if (!silent) {\n        localStorage.setItem(this.themeNameLocalStorageKey, themeName);\n        if (publish) {\n          this.pubSub.publish(RXAP_TOPICS.theme.preset.changed, themeName);\n        }\n      }\n    }\n  }\n\n  // endregion\n\n  // region apply theme configuration state\n\n  public applyDarkMode(darkMode: boolean): void {\n    if (darkMode) {\n      // region deprecated\n      document.body.classList.add('dark-theme');\n      localStorage.removeItem('rxap-light-theme');\n      // endregion\n      document.body.classList.add('dark');\n    } else {\n      // region deprecated\n      document.body.classList.remove('dark-theme');\n      localStorage.setItem('rxap-light-theme', 'true');\n      // endregion\n      document.body.classList.remove('dark');\n    }\n  }\n\n  public applyDensity(density: ThemeDensity): void {\n    document.body.classList.remove('density-0', 'density-1', 'density-2', 'density-3');\n    if (density < 0) {\n      document.body.classList.add(`density${ density }`);\n    }\n  }\n\n  public applyTypography(typography: string): void {\n    document.body.style.setProperty('--font-family', `var(--font-family-${ typography })`);\n  }\n\n  public applyTheme(themeName: string): void {\n    if (themeName === 'default') {\n      this.resetToDefaultTheme();\n      return;\n    }\n\n    const theme = this.getThemeConfig(themeName);\n\n    if (theme.primaryColor?.color) {\n      this.setCssColorVariables('primary', theme.primaryColor.color);\n    }\n\n    if (theme.accentColor?.color) {\n      this.setCssColorVariables('accent', theme.accentColor.color);\n    }\n\n    if (theme.warnColor?.color) {\n      this.setCssColorVariables('warn', theme.warnColor.color);\n    }\n\n    if (theme.density !== undefined) {\n      this.applyDensity(theme.density);\n    }\n\n    if (theme.typography) {\n      this.applyTypography(theme.typography);\n    }\n\n    document.body.style.setProperty(`--theme-name`, themeName);\n  }\n\n  // endregion\n\n  // region get theme configuration state\n\n  public getDensity(): ThemeDensity {\n    let density = 0;\n    document.body.classList.forEach((className) => {\n      const match = className.match(/density-([123])/);\n      if (match) {\n        density = Number(match[1]) * -1;\n      }\n    });\n    return density as ThemeDensity;\n  }\n\n  public getTypography(): string {\n    const variable = document.body.style.getPropertyValue('--font-family');\n    const match = variable.match(/var\\(--font-family-(.*)\\)/);\n    if (match) {\n      return match[1];\n    }\n    return 'default';\n  }\n\n  public getTheme() {\n    return document.body.style.getPropertyValue('--theme-name') || 'default';\n  }\n\n  // endregion\n\n  // region get available\n\n  public getAvailableColorPalettes(): string[] | null {\n    const colorPalettesConfigs: Record<string, unknown> | boolean = this.config.get('colorPalettes', false);\n    if (!colorPalettesConfigs) {\n      return null;\n    }\n    const availableColorPalettes: string[] = Object.keys(colorPalettesConfigs);\n    availableColorPalettes.unshift('default');\n    return availableColorPalettes;\n  }\n\n  public getAvailableThemes(): string[] | null {\n    const themeConfigs: Record<string, unknown> | boolean = this.config.get('themes', false);\n    if (!themeConfigs) {\n      return null;\n    }\n    const availableThemes: string[] = Object.keys(themeConfigs);\n    availableThemes.unshift('default');\n    return availableThemes;\n  }\n\n  public getAvailableTypographies(): string[] | null {\n    const availableTypographies = this.config.get('typographies', false);\n    if (!availableTypographies) {\n      return null;\n    }\n    return Array\n      .from(document.styleSheets)\n      .filter(sheet => sheet.href === null || sheet.href.startsWith(window.location.origin))\n      .flatMap(sheet => Array.from(sheet.cssRules || []))\n      .filter((rule: any) => rule.selectorText === ':root')\n      .flatMap((rule: any) => Array.from(rule.style))\n      .filter((prop: any) => prop.startsWith('--'))\n      .filter((prop: any) => prop.startsWith('--font-family-'))\n      .map((prop: any) => prop.replace('--font-family-', ''))\n      .sort();\n  }\n\n  // endregion\n\n  public getColorPalette(colorPaletteName: string): Partial<ColorPalette> {\n    const colorPaletteConfig = this.config.getOrThrow<ColorPaletteConfig>(`colorPalettes.${ colorPaletteName }`);\n    return this.coerceColorPalette(colorPaletteConfig);\n  }\n\n  // region utility\n\n  private coerceColorPalette(colorPaletteConfig: ColorPaletteConfig): Partial<ColorPalette> {\n    let colorPalette: Partial<ColorPalette> = {};\n\n    if (colorPaletteConfig.color) {\n      if (Object.keys(colorPaletteConfig.color).length !== 14) {\n        // the color palette is not complete\n        if (colorPaletteConfig.base) {\n          colorPalette =\n            ComputeColorPalette(colorPaletteConfig.base, colorPaletteConfig.color, colorPaletteConfig.algorithm);\n        }\n      }\n      colorPalette = colorPaletteConfig.color;\n    } else if (colorPaletteConfig.base) {\n      colorPalette = ComputeColorPalette(colorPaletteConfig.base, {}, colorPaletteConfig.algorithm);\n    }\n\n    if (Object.keys(colorPalette).length === 0) {\n      throw new Error('FATAL: The color palette has neither a base nor a color property');\n    }\n\n    return colorPalette;\n  }\n\n  private getThemeConfig(themeName: string): ThemeConfig {\n    const themeConfig = this.config.getOrThrow<ThemeConfig>(`themes.${ themeName }`);\n\n    if (themeConfig.accentColor) {\n      themeConfig.accentColor.color = this.coerceColorPalette(themeConfig.accentColor);\n    }\n\n    if (themeConfig.primaryColor) {\n      themeConfig.primaryColor.color = this.coerceColorPalette(themeConfig.primaryColor);\n    }\n\n    if (themeConfig.warnColor) {\n      themeConfig.warnColor.color = this.coerceColorPalette(themeConfig.warnColor);\n    }\n\n    return themeConfig;\n  }\n\n  private setCssColorVariables(name: string, colorPalette: Partial<ColorPalette>): void {\n    this.clearCssColorVariables(name);\n    for (const [ index, color ] of Object.entries(colorPalette)) {\n      document.body.style.setProperty(`--${ name }-${ index }`, color);\n    }\n  }\n\n  private clearCssColorVariables(name: string): void {\n    document.body.style.removeProperty(`--${ name }-50`);\n    for (let index = 100; index <= 900; index += 100) {\n      document.body.style.removeProperty(`--${ name }-${ index }`);\n    }\n    document.body.style.removeProperty(`--${ name }-a100`);\n    document.body.style.removeProperty(`--${ name }-a200`);\n    document.body.style.removeProperty(`--${ name }-a400`);\n    document.body.style.removeProperty(`--${ name }-a700`);\n  }\n\n  private resetToDefaultTheme() {\n    this.clearCssColorVariables('primary');\n    this.clearCssColorVariables('accent');\n    this.clearCssColorVariables('warn');\n    this.setDensity(0);\n    this.setTypography('default');\n    document.body.style.removeProperty(`--theme-name`);\n    localStorage.removeItem(this.themeNameLocalStorageKey);\n    localStorage.removeItem(this.densityLocalStorageKey);\n    localStorage.removeItem(this.typographyLocalStorageKey);\n  }\n\n  // endregion\n\n}\n","import {\n  inject,\n  provideAppInitializer,\n} from '@angular/core';\nimport { ThemeService } from './theme.service';\n\nexport function provideTheme() {\n  return [\n    provideAppInitializer(() => {\n        const initializerFn = ((themeService: ThemeService) => () => themeService.restore())(inject(ThemeService));\n        return initializerFn();\n      })\n  ];\n}\n","// region \nexport * from './lib/compute-color-palette';\nexport * from './lib/observe-current-theme-density';\nexport * from './lib/provide';\nexport * from './lib/theme.service';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}