{"version":3,"file":"ngx-color-scheme.mjs","sources":["../../../projects/ngx-color-scheme/src/lib/color-scheme-options.ts","../../../projects/ngx-color-scheme/src/lib/default-options.ts","../../../projects/ngx-color-scheme/src/lib/color-scheme.service.ts","../../../projects/ngx-color-scheme/src/public-api.ts","../../../projects/ngx-color-scheme/src/ngx-color-scheme.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\n/**\n * InjectionToken to override default options\n *\n * @example\n *\n * providers: [\n *   {\n *     provide: COLOR_SCHEME_OPTIONS,\n *     useValue: {\n *       colorSchemeClass: 'my-color-scheme',\n *       lightModeClass: 'my-light-mode',\n *     },\n *   },\n * ]\n */\nexport const COLOR_SCHEME_OPTIONS = new InjectionToken<Partial<ColorSchemeOptions>>(\n  'COLOR_SCHEME_OPTIONS',\n)\n\nexport interface ColorSchemeOptions {\n  darkModeClass: string\n  lightModeClass: string\n  preloadingClass: string\n  storageKey: string\n  element?: HTMLElement\n}\n","import { ColorSchemeOptions } from './color-scheme-options'\n\n/**\n * Default options used in ColorSchemeService\n */\nexport const defaultOptions: ColorSchemeOptions = {\n  darkModeClass: 'dark-mode',\n  lightModeClass: 'light-mode',\n  preloadingClass: 'color-scheme-preloading',\n  storageKey: 'colorScheme',\n}\n","import { Inject, Injectable, Optional, signal } from '@angular/core'\nimport { COLOR_SCHEME_OPTIONS, ColorSchemeOptions } from './color-scheme-options'\nimport { defaultOptions } from './default-options'\n\n@Injectable()\nexport class ColorSchemeService {\n  public $isDarkMode = signal<boolean>(false)\n\n  private _options!: ColorSchemeOptions\n\n  constructor(\n    @Optional()\n    @Inject(COLOR_SCHEME_OPTIONS)\n    private providedOptions: ColorSchemeOptions | null,\n  ) {}\n\n  init() {\n    this._options = { ...defaultOptions, ...(this.providedOptions || {}) }\n\n    const storageColor = localStorage.getItem(this._options.storageKey)\n    const isDarkMode = storageColor\n      ? storageColor === this._options.darkModeClass\n      : window?.matchMedia\n        ? window.matchMedia('(prefers-color-scheme: dark)').matches\n        : false\n\n    isDarkMode ? this.activateDarkMode() : this.activateLightMode()\n\n    this.removePreloadingClass()\n  }\n\n  toggleColorScheme() {\n    this.$isDarkMode() ? this.activateLightMode() : this.activateDarkMode()\n  }\n\n  activateDarkMode() {\n    this.$isDarkMode.set(true)\n\n    const { darkModeClass, lightModeClass } = this._options\n    const element = this._options.element || document.body\n\n    element.classList.remove(lightModeClass)\n    element.classList.add(darkModeClass)\n\n    localStorage.setItem(this._options.storageKey, darkModeClass)\n\n    this.afterChange(true)\n  }\n\n  activateLightMode() {\n    this.$isDarkMode.set(false)\n\n    const { darkModeClass, lightModeClass } = this._options\n    const element = this._options.element || document.body\n\n    element.classList.remove(darkModeClass)\n    element.classList.add(lightModeClass)\n\n    localStorage.setItem(this._options.storageKey, lightModeClass)\n\n    this.afterChange(false)\n  }\n\n  afterChange(isDarkMode: boolean) {\n    // Meant to be overridden\n  }\n\n  private removePreloadingClass(): void {\n    // defer to next tick\n    setTimeout(() => {\n      const element = this._options.element || document.body\n      element.classList.remove(this._options.preloadingClass)\n    })\n  }\n}\n","/*\n * Public API Surface of ngx-color-scheme\n */\n\nexport * from './lib/color-scheme-options'\nexport * from './lib/color-scheme.service'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}