{"version":3,"file":"verben-ng-ui-src-lib-theme-switcher.mjs","sources":["../../../projects/verben-ng-ui/src/lib/theme-switcher/theme-switcher.directive.ts","../../../projects/verben-ng-ui/src/lib/theme-switcher/theme-switcher.module.ts","../../../projects/verben-ng-ui/src/lib/theme-switcher/verben-ng-ui-src-lib-theme-switcher.ts"],"sourcesContent":["import { Directive, ElementRef, Input, Renderer2, HostListener } from '@angular/core';\n\n@Directive({\n  selector: '[appThemeSwitcher]'\n})\nexport class ThemeSwitcherDirective {\n  @Input() switchColor: string = 'black'; // Custom color for dark mode\n  @Input() switchClass: string = ''; // Additional classes provided by the user\n\n  private isDarkMode: boolean = false;\n  private originalColor: string = ''; // Store the original color of the element\n\n  constructor(private el: ElementRef, private renderer: Renderer2) {\n    this.loadTheme();\n    this.storeOriginalColor(); // Store the computed color of the element\n  }\n\n  @HostListener('click') onClick() {\n    this.toggleTheme();\n  }\n\n  private toggleTheme(): void {\n    const themeClass = 'dark';\n\n    if (this.isDarkMode) {\n      // Switch to light mode for the whole page\n      this.renderer.removeClass(document.documentElement, themeClass);\n      this.applyElementStyles(this.originalColor); // Reset the element's original color\n      localStorage.setItem('theme', 'light');\n    } else {\n      // Switch to dark mode for the whole page\n      this.renderer.addClass(document.documentElement, themeClass);\n      this.applyElementStyles(this.switchColor); // Apply dark mode color for the element\n      localStorage.setItem('theme', 'dark');\n    }\n\n    this.isDarkMode = !this.isDarkMode; // Toggle the mode state\n  }\n\n  private applyElementStyles(color: string): void {\n    // Apply inline color to the element\n    this.el.nativeElement.style.color = color;\n\n    // Apply user-provided custom class if available\n    if (this.switchClass) {\n      this.renderer.addClass(this.el.nativeElement, this.switchClass);\n    }\n  }\n\n  private storeOriginalColor(): void {\n    // Get the computed style of the element to find its original color\n    const computedStyle = window.getComputedStyle(this.el.nativeElement);\n    this.originalColor = computedStyle.color;\n  }\n\n  private loadTheme(): void {\n    const savedTheme = localStorage.getItem('theme');\n\n    if (savedTheme === 'dark') {\n      // If dark mode was previously set, apply it to the page and element\n      this.renderer.addClass(document.documentElement, 'dark');\n      this.isDarkMode = true;\n      this.applyElementStyles(this.switchColor);\n    } else {\n      // Apply the original color if the light theme is active\n      this.isDarkMode = false;\n      this.applyElementStyles(this.originalColor);\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { ThemeSwitcherDirective } from './theme-switcher.directive';\n\n@NgModule({\n  declarations: [ThemeSwitcherDirective],\n  exports: [ThemeSwitcherDirective]\n})\nexport class ThemeSwitcherModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}