{"version":3,"file":"camp2gether-c2g-ui-theme-switcher.mjs","sources":["../../../projects/c2g-ui/theme-switcher/theme-switcher.component.ts","../../../projects/c2g-ui/theme-switcher/camp2gether-c2g-ui-theme-switcher.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonComponent, PopupComponent } from '@camp2gether/c2g-ui';\nimport { ThemeService, ThemeMode, SeasonalTheme } from '@camp2gether/c2g-ui/theme';\n\n@Component({\n  selector: 'c2g-theme-switcher',\n  standalone: true,\n  imports: [MatIconModule, TranslateModule, ButtonComponent, PopupComponent],\n  template: `\n    <c2g-popup align=\"end\">\n      <c2g-button\n        trigger\n        variant=\"icon\"\n        [icon]=\"themeIcon()\"\n        [iconOnly]=\"true\"\n        [bordered]=\"false\"\n        iconSize=\"1.5rem\"\n        [ariaLabel]=\"'theme.switcher.tooltip' | translate\"\n      ></c2g-button>\n\n      <div panel class=\"theme-menu\">\n        @for (option of themeOptions; track option.value) {\n          <button\n            class=\"theme-menu__item\"\n            [class.theme-menu__item--active]=\"currentTheme() === option.value\"\n            (click)=\"selectTheme(option.value)\"\n          >\n            <mat-icon>{{ option.value === 'season' ? seasonIcon() : option.icon }}</mat-icon>\n            <span>{{ option.label | translate }}</span>\n            @if (currentTheme() === option.value) {\n              <mat-icon class=\"theme-menu__check\">check</mat-icon>\n            }\n          </button>\n        }\n      </div>\n    </c2g-popup>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: [`\n    .theme-menu {\n      padding: var(--c2g-space-1, 0.25rem) 0;\n    }\n\n    .theme-menu__item {\n      display: flex;\n      align-items: center;\n      gap: var(--c2g-space-2, 0.5rem);\n      width: 100%;\n      padding: var(--c2g-space-2, 0.5rem) var(--c2g-space-4, 1rem);\n      border: none;\n      background: transparent;\n      color: var(--c2g-color-text-primary);\n      font-size: var(--c2g-font-size-sm, 0.875rem);\n      font-family: var(--c2g-font-family-base, sans-serif);\n      cursor: pointer;\n      text-align: left;\n      transition: background 120ms ease;\n\n      &:hover {\n        background: var(--c2g-color-bg-secondary, #efe9e0);\n      }\n\n      &--active {\n        background: var(--c2g-color-primary-container, #ffede6);\n        color: var(--c2g-color-on-primary-container, #4a1800);\n      }\n    }\n\n    .theme-menu__check {\n      margin-left: auto;\n      color: var(--c2g-color-primary, #ff6b35);\n      font-size: 1rem;\n      width: 1rem;\n      height: 1rem;\n    }\n  `]\n})\nexport class ThemeSwitcherComponent {\n  protected readonly themeService = inject(ThemeService);\n\n  // Use signals for reactive updates\n  protected readonly currentTheme = this.themeService.currentTheme;\n  \n  private static readonly SEASON_ICONS: Record<SeasonalTheme, string> = {\n    spring: 'local_florist',\n    summer: 'wb_sunny',\n    autumn: 'energy_savings_leaf',\n    winter: 'ac_unit',\n  };\n\n  protected readonly seasonIcon = computed(() =>\n    ThemeSwitcherComponent.SEASON_ICONS[this.themeService.currentSeason()]\n  );\n\n  protected readonly themeIcon = computed(() => {\n    const current = this.currentTheme();\n    if (current === 'season') return this.seasonIcon();\n    const option = this.themeOptions.find(opt => opt.value === current);\n    return option?.icon ?? 'brightness_auto';\n  });\n\n  protected readonly themeOptions = [\n    { value: 'light'         as ThemeMode, label: 'theme.options.light',        icon: 'light_mode' },\n    { value: 'dark'          as ThemeMode, label: 'theme.options.dark',         icon: 'dark_mode' },\n    { value: 'auto'          as ThemeMode, label: 'theme.options.auto',         icon: 'brightness_auto' },\n    { value: 'season'        as ThemeMode, label: 'theme.options.season',       icon: 'calendar_month' },\n    { value: 'high-contrast' as ThemeMode, label: 'theme.options.highContrast', icon: 'contrast' },\n  ];\n\n  protected selectTheme(theme: ThemeMode): void {\n    this.themeService.setTheme(theme);\n  }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}