{"version":3,"file":"felixdulfer-ngx-mat-period-picker.mjs","sources":["../../../projects/ngx-mat-period-picker/src/lib/config/locale.config.ts","../../../projects/ngx-mat-period-picker/src/lib/services/locale.service.ts","../../../projects/ngx-mat-period-picker/src/lib/services/month-label.service.ts","../../../projects/ngx-mat-period-picker/src/lib/components/year-month-picker.component.ts","../../../projects/ngx-mat-period-picker/src/lib/services/display-format.service.ts","../../../projects/ngx-mat-period-picker/src/lib/components/year-month-field.component.ts","../../../projects/ngx-mat-period-picker/src/lib/components/period-picker.component.ts","../../../projects/ngx-mat-period-picker/src/lib/config/ngx-mat-period-picker.config.ts","../../../projects/ngx-mat-period-picker/src/public-api.ts","../../../projects/ngx-mat-period-picker/src/felixdulfer-ngx-mat-period-picker.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { LocaleConfig } from '../types';\n\n/**\n * Injection token for configuring the locale globally.\n * Use this in your app.config.ts or module providers to set the locale.\n *\n * @example\n * ```typescript\n * import { provideLocaleConfig } from 'ngx-mat-period-picker';\n *\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideLocaleConfig({\n *       locale: 'de-DE',\n *       useConfiguredLocale: true\n *     })\n *   ]\n * });\n * ```\n */\nexport const LOCALE_CONFIG = new InjectionToken<LocaleConfig>('ngx-mat-period-picker.locale-config');\n\n/**\n * Provider function to configure the locale globally.\n *\n * @param config The locale configuration\n * @returns Provider configuration for the locale\n *\n * @example\n * ```typescript\n * import { provideLocaleConfig } from 'ngx-mat-period-picker';\n *\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideLocaleConfig({\n *       locale: 'de-DE',\n *       useConfiguredLocale: true\n *     })\n *   ]\n * });\n * ```\n */\nexport function provideLocaleConfig(config: LocaleConfig) {\n  return {\n    provide: LOCALE_CONFIG,\n    useValue: config,\n  };\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LocaleConfig } from '../types';\nimport { LOCALE_CONFIG } from '../config/locale.config';\nimport { LOCALE_ID } from '@angular/core';\n\n/**\n * Service that provides locale configuration for the ngx-mat-period-picker library.\n * This service can be configured globally through dependency injection.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class LocaleService {\n  private readonly defaultConfig: Required<LocaleConfig>;\n\n  private config: Required<LocaleConfig>;\n\n  constructor() {\n    // Get the default locale from Angular's locale system\n    const angularLocale = inject(LOCALE_ID, { optional: true });\n    const localizeLocale = (globalThis as any).$localize?.locale;\n\n    // Use Angular's LOCALE_ID, then $localize.locale, then fallback to 'en-US'\n    const defaultLocale = angularLocale || localizeLocale || 'en-US';\n\n    this.defaultConfig = {\n      locale: defaultLocale,\n      useConfiguredLocale: true,\n    };\n\n    // Try to get the configured locale from the injection token\n    const injectedConfig = inject(LOCALE_CONFIG, { optional: true });\n\n    if (injectedConfig) {\n      // Merge injected config with defaults, but only override locale if explicitly provided\n      this.config = {\n        ...this.defaultConfig,\n        ...injectedConfig,\n        locale: injectedConfig.locale ?? this.defaultConfig.locale,\n      };\n    } else {\n      this.config = this.defaultConfig;\n    }\n  }\n\n  /**\n   * Set the locale configuration\n   * @param config The locale configuration to use\n   */\n  setLocaleConfig(config: Partial<LocaleConfig>): void {\n    this.config = { ...this.defaultConfig, ...config };\n  }\n\n  /**\n   * Get the current locale configuration\n   * @returns The current locale configuration\n   */\n  getLocaleConfig(): LocaleConfig {\n    return { ...this.config };\n  }\n\n  /**\n   * Get the current locale string\n   * @returns The current locale string\n   */\n  getLocale(): string {\n    return this.config.locale;\n  }\n\n  /**\n   * Check if the configured locale should be used\n   * @returns True if the configured locale should be used, false to fall back to browser default\n   */\n  shouldUseConfiguredLocale(): boolean {\n    return this.config.useConfiguredLocale;\n  }\n\n  /**\n   * Get the effective locale for date formatting\n   * @returns The locale to use for date formatting, or undefined for browser default\n   */\n  getEffectiveLocale(): string | undefined {\n    return this.shouldUseConfiguredLocale() ? this.getLocale() : undefined;\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LocaleService } from './locale.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MonthLabelService {\n  private localeService = inject(LocaleService);\n\n  /**\n   * Get short month names for the picker component\n   * @returns Array of short month names (e.g., ['Jan', 'Feb', ...])\n   */\n  getShortMonthLabels(): string[] {\n    return Array.from({ length: 12 }, (_, i) => {\n      const date = new Date(2000, i, 1);\n      return date.toLocaleDateString(this.localeService.getEffectiveLocale(), { month: 'short' });\n    });\n  }\n\n  /**\n   * Get a specific short month label by month number (1-12)\n   * @param monthNumber Month number (1-12)\n   * @returns Short month name\n   */\n  getShortMonthLabel(monthNumber: number): string {\n    if (monthNumber < 1 || monthNumber > 12) {\n      throw new Error('Month number must be between 1 and 12');\n    }\n    const date = new Date(2000, monthNumber - 1, 1);\n    return date.toLocaleDateString(this.localeService.getEffectiveLocale(), { month: 'short' });\n  }\n}\n","import {\n  Component,\n  forwardRef,\n  input,\n  output,\n  signal,\n  inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { CommonModule } from '@angular/common';\nimport { YearMonth } from '../types';\nimport { MonthLabelService } from '../services/month-label.service';\n\n@Component({\n  selector: 'ngx-mat-year-month-picker-dialog',\n  standalone: true,\n  template: `\n    <mat-card class=\"ymp-card\">\n      @if (showPresentToggle()) {\n        <div class=\"ymp-present-toggle\">\n          <mat-slide-toggle\n            [checked]=\"presentValue()\"\n            (change)=\"togglePresent($event.checked)\"\n            [disabled]=\"disabled()\"\n          >\n            {{ presentLabel() }}\n          </mat-slide-toggle>\n        </div>\n      }\n      <div class=\"ymp-header\">\n        <button\n          matIconButton\n          (click)=\"prevRange()\"\n          [disabled]=\"!canGoPrev() || presentValue()\"\n        >\n          <mat-icon>chevron_left</mat-icon>\n        </button>\n        <span class=\"ymp-range\" [class.ymp-range-disabled]=\"presentValue()\">{{\n          rangeLabel\n        }}</span>\n        <button\n          matIconButton\n          (click)=\"nextRange()\"\n          [disabled]=\"!canGoNext() || presentValue()\"\n        >\n          <mat-icon>chevron_right</mat-icon>\n        </button>\n      </div>\n      <mat-divider />\n      <div class=\"ymp-years\">\n        @for (year of years; track year) {\n          <button\n            [matButton]=\"\n              presentValue()\n                ? 'text'\n                : valueSignal()?.year === year\n                  ? 'outlined'\n                  : 'text'\n            \"\n            [disabled]=\"disabled() || presentValue()\"\n            (click)=\"selectYear(year)\"\n            class=\"ymp-button\"\n          >\n            {{ year }}\n          </button>\n        }\n      </div>\n      <mat-divider />\n      <div class=\"ymp-months\">\n        @for (month of months; let i = $index; track month) {\n          <button\n            [matButton]=\"\n              presentValue()\n                ? 'text'\n                : valueSignal()?.month === i + 1\n                  ? 'outlined'\n                  : 'text'\n            \"\n            [disabled]=\"valueSignal()?.year == null || presentValue()\"\n            (click)=\"selectMonth(i + 1)\"\n            class=\"ymp-button\"\n          >\n            {{ month }}\n          </button>\n        }\n      </div>\n      <mat-divider />\n      <div class=\"ymp-actions\">\n        @if (hasValue()) {\n          <button matButton=\"text\" (click)=\"clear()\" [disabled]=\"disabled()\">\n            {{ clearLabel() }}\n          </button>\n        } @else {\n          <div></div>\n        }\n        <button\n          matButton=\"filled\"\n          (click)=\"ok()\"\n          [disabled]=\"disabled() || !hasValidSelection()\"\n        >\n          {{ okLabel() }}\n        </button>\n      </div>\n    </mat-card>\n  `,\n  styles: [\n    `\n      .ymp-card {\n        padding: 16px;\n        max-width: 320px;\n        margin: 0 auto;\n        background: var(\n          --mat-year-month-picker-card-background-color,\n          var(--mat-sys-surface-container-high)\n        );\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n        animation: slideInOut 200ms cubic-bezier(0.25, 0.8, 0.25, 1) forwards;\n      }\n\n      @keyframes slideInOut {\n        from {\n          transform: scale(0.8);\n          opacity: 0;\n        }\n        to {\n          transform: scale(1);\n          opacity: 1;\n        }\n      }\n      .ymp-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        margin-bottom: 8px;\n      }\n      .ymp-range {\n        font-weight: 600;\n        font-size: var(--mat-sys-title-small-size);\n        letter-spacing: 1px;\n      }\n\n      .ymp-range-disabled {\n        opacity: 0.5;\n      }\n      .ymp-years,\n      .ymp-months {\n        display: grid;\n        gap: 4px;\n        margin: 8px 0;\n      }\n      .ymp-years {\n        grid-template-columns: repeat(4, 1fr);\n      }\n      .ymp-months {\n        grid-template-columns: repeat(4, 1fr);\n      }\n\n      .mdc-button.ymp-button {\n        --mat-button-outlined-horizontal-padding: 6px;\n        --mat-button-filled-horizontal-padding: 6px;\n        --mat-button-text-horizontal-padding: 6px;\n      }\n\n      .ymp-present-toggle {\n        padding: 8px 0 16px 0;\n        display: flex;\n        justify-content: center;\n      }\n\n      .ymp-present-toggle .mat-slide-toggle {\n        transform: scale(0.8);\n        margin: 0;\n      }\n\n      .ymp-actions {\n        display: flex;\n        justify-content: space-between;\n        padding: 8px 0 0 0;\n        gap: 8px;\n      }\n    `,\n  ],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => YearMonthPickerComponent),\n      multi: true,\n    },\n  ],\n  imports: [\n    CommonModule,\n    MatButtonModule,\n    MatCardModule,\n    MatIconModule,\n    MatDividerModule,\n    MatSlideToggleModule,\n  ],\n})\nexport class YearMonthPickerComponent implements ControlValueAccessor {\n  minYear = input<number | undefined>();\n  maxYear = input<number | undefined>();\n  disabled = input<boolean>(false);\n  baseYear = input<number | undefined>();\n  private _showPresentToggle = signal<boolean>(false);\n  showPresentToggle = this._showPresentToggle.asReadonly();\n\n  // Present label as a signal for dynamic configuration\n  private _presentLabel = signal<string>('Present');\n  presentLabel = this._presentLabel.asReadonly();\n\n  // Button labels as signals for dynamic configuration\n  private _okLabel = signal<string>('OK');\n  okLabel = this._okLabel.asReadonly();\n\n  private _clearLabel = signal<string>('Clear');\n  clearLabel = this._clearLabel.asReadonly();\n\n  yearsPerPage = 12;\n  currentStartYear = 2000;\n  private _baseYear: number | undefined = undefined;\n  private _presentValue = signal<boolean>(false);\n  presentValue = this._presentValue.asReadonly();\n\n  // Event outputs\n  cancelClicked = output<void>();\n  okClicked = output<void>();\n  presentValueChange = output<boolean>();\n\n  valueSignal = signal<YearMonth | null>(null);\n  originalValue: YearMonth | null = null;\n\n  private monthLabelService = inject(MonthLabelService);\n  constructor() {\n    // Initialize currentStartYear based on baseYear or current year\n    this.initializeCurrentStartYear();\n  }\n\n  /**\n   * Initializes currentStartYear based on baseYear input or current year\n   */\n  private initializeCurrentStartYear(): void {\n    const targetYear = this._baseYear || this.baseYear() || new Date().getFullYear();\n    this.setCurrentStartYearForYear(targetYear);\n  }\n\n  get months(): string[] {\n    return this.monthLabelService.getShortMonthLabels();\n  }\n\n  get years(): number[] {\n    const years: number[] = [];\n    for (let i = 0; i < this.yearsPerPage; i++) {\n      years.push(this.currentStartYear + i);\n    }\n    return years;\n  }\n\n  get rangeLabel(): string {\n    return `${this.currentStartYear} - ${this.currentStartYear + this.yearsPerPage - 1}`;\n  }\n\n  canGoPrev(): boolean {\n    return this.currentStartYear > (this.minYear() || 1900);\n  }\n\n  canGoNext(): boolean {\n    const maxYear = this.maxYear() || 2100;\n    return this.currentStartYear + this.yearsPerPage <= maxYear;\n  }\n\n  prevRange() {\n    if (this.canGoPrev()) {\n      this.currentStartYear -= this.yearsPerPage;\n    }\n  }\n\n  nextRange() {\n    if (this.canGoNext()) {\n      this.currentStartYear += this.yearsPerPage;\n    }\n  }\n\n  writeValue(_value: YearMonth | null): void {\n    this.valueSignal.set(_value);\n    this.originalValue = _value;\n\n    // If a year is selected/pre-filled, set the currentStartYear to show the interval containing that year\n    if (_value?.year) {\n      this.setCurrentStartYearForYear(_value.year);\n    } else {\n      // If no value is provided, initialize based on baseYear or current year\n      this.initializeCurrentStartYear();\n    }\n  }\n\n  /**\n   * Sets the currentStartYear to show the interval containing the specified year\n   */\n  private setCurrentStartYearForYear(year: number): void {\n    // Calculate which interval this year belongs to\n    // We want to find the start year of the interval that contains the target year\n    // For example: year 2030 should be in interval 2028-2039, so currentStartYear should be 2028\n    const minYear = this.minYear() || 1900;\n\n    // Find the interval that contains the target year\n    // We want the year to be within the interval [startYear, startYear + yearsPerPage - 1]\n    // Let's find the correct interval by checking which interval contains the year\n    let newStartYear = minYear;\n\n    // Find the interval that contains the target year\n    while (newStartYear + this.yearsPerPage <= year) {\n      newStartYear += this.yearsPerPage;\n    }\n\n    // Ensure the new start year is within valid bounds\n    const maxYear = this.maxYear() || 2100;\n    if (newStartYear + this.yearsPerPage <= maxYear) {\n      this.currentStartYear = newStartYear;\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\n  private onChange: (_value: YearMonth | null) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\n  registerOnChange(fn: (_value: YearMonth | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  selectYear(year: number) {\n    if (this.presentValue()) return;\n\n    const currentValue = this.valueSignal();\n\n    // If clicking the same year, deselect it\n    if (currentValue?.year === year) {\n      this.valueSignal.set(null);\n    } else {\n      this.valueSignal.set({ year, month: null });\n      // Set the current interval to show the selected year\n      this.setCurrentStartYearForYear(year);\n    }\n\n    this.onChange(this.valueSignal());\n    this.onTouched();\n  }\n\n  selectMonth(month: number) {\n    if (this.presentValue()) return;\n\n    const currentValue = this.valueSignal();\n    if (currentValue?.year) {\n      // If clicking the same month, deselect it\n      if (currentValue.month === month) {\n        this.valueSignal.set({ year: currentValue.year, month: null });\n      } else {\n        this.valueSignal.set({ ...currentValue, month });\n      }\n\n      this.onChange(this.valueSignal());\n      this.onTouched();\n    }\n  }\n\n  getCurrentValue(): YearMonth | null {\n    return this.valueSignal();\n  }\n\n  togglePresent(checked: boolean): void {\n    this._presentValue.set(checked);\n    this.presentValueChange.emit(checked);\n\n    if (checked) {\n      // Clear the value when present is selected\n      this.valueSignal.set(null);\n      this.onChange(null);\n      this.onTouched();\n    }\n  }\n\n  setPresentValue(value: boolean): void {\n    this._presentValue.set(value);\n  }\n\n  setShowPresentToggle(show: boolean): void {\n    this._showPresentToggle.set(show);\n  }\n\n  setBaseYear(year: number | undefined): void {\n    // Update the baseYear and reinitialize if needed\n    this._baseYear = year;\n    this.initializeCurrentStartYear();\n  }\n\n  setPresentLabel(label: string): void {\n    this._presentLabel.set(label);\n  }\n\n  setOkLabel(label: string): void {\n    this._okLabel.set(label);\n  }\n\n  setClearLabel(label: string): void {\n    this._clearLabel.set(label);\n  }\n\n  hasValidSelection(): boolean {\n    const value = this.valueSignal();\n    return !!(value && value.year) || this.presentValue();\n  }\n\n  hasValue(): boolean {\n    const value = this.valueSignal();\n    return !!(value && value.year) || this.presentValue();\n  }\n\n  hasChanges(): boolean {\n    const currentValue = this.valueSignal();\n    const original = this.originalValue;\n\n    if (!currentValue && !original) return false;\n    if (!currentValue || !original) return true;\n\n    return (\n      currentValue.year !== original.year ||\n      currentValue.month !== original.month\n    );\n  }\n\n  clear(): void {\n    this.valueSignal.set(null);\n    this._presentValue.set(false);\n    this.presentValueChange.emit(false);\n    this.onChange(null);\n    this.onTouched();\n    this.cancelClicked.emit();\n  }\n\n  ok(): void {\n    const currentValue = this.valueSignal();\n    if ((currentValue && currentValue.year) || this.presentValue()) {\n      this.okClicked.emit();\n    }\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { YearMonth } from '../types';\nimport { LocaleService } from './locale.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DisplayFormatService {\n  private localeService = inject(LocaleService);\n\n  /**\n   * Format YearMonth value for display in text fields\n   * @param value YearMonth value or null\n   * @returns Formatted string for display\n   */\n  formatYearMonth(value: YearMonth | null): string {\n    if (!value) return '';\n    if (!value.year) return '';\n    if (!value.month) return `${value.year}`;\n\n    const date = new Date(value.year, value.month - 1, 1);\n    return date.toLocaleDateString(this.localeService.getEffectiveLocale(), {\n      year: 'numeric',\n      month: 'long',\n    });\n  }\n\n  /**\n   * Format a specific year and month for display\n   * @param year Year number\n   * @param month Month number (1-12)\n   */\n  formatYearMonthDisplay(year: number, month: number): string {\n    if (month < 1 || month > 12) {\n      throw new Error('Month number must be between 1 and 12');\n    }\n\n    const date = new Date(year, month - 1, 1);\n    return date.toLocaleDateString(this.localeService.getEffectiveLocale(), {\n      year: 'numeric',\n      month: 'long',\n    });\n  }\n\n  /**\n   * Format year only for display\n   * @param year Year number\n   * @returns Formatted year string\n   */\n  formatYearDisplay(year: number): string {\n    return year.toString();\n  }\n}\n","import {\n  Component,\n  forwardRef,\n  ViewChild,\n  ElementRef,\n  input,\n  output,\n  signal,\n  inject,\n  computed,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { YearMonthPickerComponent } from './year-month-picker.component';\nimport { YearMonth } from '../types';\nimport { DisplayFormatService } from '../services/display-format.service';\n\n@Component({\n  selector: 'ngx-mat-year-month-picker',\n  standalone: true,\n  template: `\n    <mat-form-field\n      appearance=\"outline\"\n      class=\"year-month-field\"\n      [class.full-width]=\"computedFullWidth()\"\n      [style.width]=\"!computedFullWidth() ? (typeof width() === 'number' ? width() + 'px' : width()) : '100%'\"\n      #fieldRef\n      (click)=\"openPicker($event)\"\n    >\n      <mat-label>{{ label() }}</mat-label>\n      <input\n        matInput\n        [value]=\"getDisplayValue(valueSignal())\"\n        [placeholder]=\"placeholder()\"\n        readonly\n      />\n      <mat-icon matSuffix class=\"calendar-icon\" aria-hidden=\"true\"\n        >calendar_today</mat-icon\n      >\n    </mat-form-field>\n  `,\n  styles: [\n    `\n      .year-month-field {\n        min-width: 200px;\n      }\n\n      .year-month-field.full-width {\n        width: 100% !important;\n        min-width: unset;\n      }\n\n      .calendar-icon {\n        pointer-events: none;\n      }\n    `,\n  ],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => YearMonthFieldComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, MatFormFieldModule, MatInputModule, MatIconModule],\n})\nexport class YearMonthFieldComponent implements ControlValueAccessor {\n  @ViewChild('fieldRef', { static: true }) fieldRef!: ElementRef;\n\n  label = input<string>('Select Year/Month');\n  placeholder = input<string>('Click to select');\n  minYear = input<number | undefined>();\n  maxYear = input<number | undefined>();\n  baseYear = input<number | undefined>();\n  disabled = input<boolean>(false);\n  presentLabel = input<string>('Present');\n  presentValue = input<boolean>(false);\n  showPresentToggle = input<boolean>(false);\n  presentValueChange = output<boolean>();\n\n  // Button labels for translation\n  okLabel = input<string>('OK');\n  clearLabel = input<string>('Clear');\n\n  // Width configuration\n  width = input<string | number>('200px');\n  fullWidth = input<boolean>(true);\n\n  // Computed fullWidth that automatically becomes false when width is set\n  computedFullWidth = computed(() => {\n    const widthValue = this.width();\n    return widthValue === '200px' ? this.fullWidth() : false;\n  });\n\n  valueSignal = signal<YearMonth | null>(null);\n  private overlayRef: OverlayRef | null = null;\n\n  private overlay = inject(Overlay);\n  private displayFormatService = inject(DisplayFormatService);\n\n  getDisplayValue(value: YearMonth | null): string {\n    // If present is true, show \"Present\" instead of the value\n    if (this.presentValue()) {\n      return this.presentLabel();\n    }\n    return this.displayFormatService.formatYearMonth(value);\n  }\n\n  openPicker(event: MouseEvent): void {\n    if (this.disabled()) return;\n\n    this.closePicker();\n\n    // Get the clicked mat-form-field element\n    const formFieldElement = event.currentTarget as HTMLElement;\n\n    // Safety check for null currentTarget (e.g., in tests)\n    if (!formFieldElement) {\n      return;\n    }\n\n    // Find the text field wrapper within the form field for more precise positioning\n    const textFieldWrapper = formFieldElement.querySelector('.mat-mdc-text-field-wrapper');\n    const targetElement = textFieldWrapper || formFieldElement;\n\n    // Create overlay positioned relative to the text field wrapper\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(targetElement)\n      .withPositions([\n        {\n          originX: 'start',\n          originY: 'bottom',\n          overlayX: 'start',\n          overlayY: 'top',\n          offsetY: 8,\n        },\n        {\n          originX: 'start',\n          originY: 'top',\n          overlayX: 'start',\n          overlayY: 'bottom',\n          offsetY: -8,\n        },\n      ]);\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n      hasBackdrop: true,\n      backdropClass: 'cdk-overlay-transparent-backdrop',\n    });\n\n    // Create picker component\n    const pickerPortal = new ComponentPortal(YearMonthPickerComponent);\n    const pickerRef = this.overlayRef.attach(pickerPortal);\n\n    // Set the current value and present state\n    pickerRef.instance.writeValue(this.valueSignal());\n    pickerRef.instance.setPresentLabel(this.presentLabel());\n    pickerRef.instance.setPresentValue(this.presentValue());\n    pickerRef.instance.setShowPresentToggle(this.showPresentToggle());\n\n    // Set button labels for translation\n    pickerRef.instance.setOkLabel(this.okLabel());\n    pickerRef.instance.setClearLabel(this.clearLabel());\n\n    // Set the baseYear if provided\n    if (this.baseYear() !== undefined) {\n      pickerRef.instance.setBaseYear(this.baseYear());\n    }\n\n    // Subscribe to onChange to handle value updates\n    pickerRef.instance.registerOnChange((value: YearMonth | null) => {\n      // Only update if the value has actually changed\n      const currentValue = this.valueSignal();\n      if (JSON.stringify(currentValue) !== JSON.stringify(value)) {\n        // Update the internal value signal\n        this.valueSignal.set(value);\n        // Call onChange and onTouched when value changes\n        this.onChange(value);\n        this.onTouched();\n      }\n      // Don't auto-close - let user manually close with OK button\n    });\n\n    // Subscribe to present value changes\n    pickerRef.instance.presentValueChange.subscribe((checked: boolean) => {\n      this.presentValueChange.emit(checked);\n      this.onTouched();\n\n      // Clear the value when present is selected, but don't close the popup\n      if (checked) {\n        // Clear the value when present is selected\n        this.valueSignal.set(null);\n        this.onChange(null);\n      }\n    });\n\n    // Subscribe to cancel button\n    pickerRef.instance.cancelClicked.subscribe(() => {\n      this.closePicker();\n    });\n\n    // Subscribe to ok button\n    pickerRef.instance.okClicked.subscribe(() => {\n      const currentValue = pickerRef.instance.getCurrentValue();\n      if (currentValue && currentValue.year) {\n        // Only update if the value has actually changed\n        const existingValue = this.valueSignal();\n        if (JSON.stringify(existingValue) !== JSON.stringify(currentValue)) {\n          this.valueSignal.set(currentValue);\n          this.onChange(currentValue);\n          this.onTouched();\n        }\n      }\n      this.closePicker();\n    });\n\n    // Close on backdrop click\n    this.overlayRef.backdropClick().subscribe(() => {\n      this.closePicker();\n    });\n\n    // Close on ESC key\n    this.overlayRef.keydownEvents().subscribe((event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        this.closePicker();\n      }\n    });\n  }\n\n  private closePicker(): void {\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n    }\n  }\n\n  writeValue(value: YearMonth | null): void {\n    this.valueSignal.set(value);\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  private onChange: (value: YearMonth | null) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  registerOnChange(\n    // eslint-disable-next-line no-unused-vars\n    fn: (value: YearMonth | null) => void,\n  ): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\n  setDisabledState(isDisabled: boolean): void {\n    // Handle disabled state if needed\n  }\n}\n","import {\n  Component,\n  forwardRef,\n  input,\n  signal,\n  computed,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  NG_VALUE_ACCESSOR,\n  FormGroup,\n  FormControl,\n  FormsModule,\n} from '@angular/forms';\nimport { YearMonthFieldComponent } from './year-month-field.component';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { Period } from '../types';\n\n@Component({\n  selector: 'ngx-mat-period-picker',\n  standalone: true,\n  template: `\n    <div\n      class=\"period-picker-container\"\n      [class.full-width]=\"computedFullWidth()\"\n      [style.width]=\"\n        !computedFullWidth()\n          ? typeof width() === 'number'\n            ? width() + 'px'\n            : width()\n          : '100%'\n      \"\n      [formGroup]=\"form\"\n    >\n      <div class=\"period-fields\">\n        <ngx-mat-year-month-picker\n          formControlName=\"start\"\n          [label]=\"startLabel()\"\n          [placeholder]=\"startPlaceholder()\"\n          [presentLabel]=\"presentLabel()\"\n          [presentValue]=\"false\"\n          [showPresentToggle]=\"false\"\n          [baseYear]=\"baseYearStart()\"\n          [width]=\"fieldWidth()\"\n          [fullWidth]=\"fieldFullWidth()\"\n          [okLabel]=\"okLabel()\"\n          [clearLabel]=\"clearLabel()\"\n        />\n\n        <ngx-mat-year-month-picker\n          formControlName=\"end\"\n          [label]=\"endLabel()\"\n          [placeholder]=\"\n            form.get('present')?.value ? presentPlaceholder() : endPlaceholder()\n          \"\n          [presentLabel]=\"presentLabel()\"\n          [presentValue]=\"form.get('present')?.value\"\n          [baseYear]=\"baseYearEnd()\"\n          [showPresentToggle]=\"showPresentToggle()\"\n          [width]=\"fieldWidth()\"\n          [fullWidth]=\"fieldFullWidth()\"\n          [okLabel]=\"okLabel()\"\n          [clearLabel]=\"clearLabel()\"\n          (presentValueChange)=\"onPresentValueChange($event)\"\n        />\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      .period-picker-container {\n        display: flex;\n        flex-direction: column;\n        gap: 1rem;\n      }\n\n      .period-picker-container.full-width {\n        width: 100% !important;\n      }\n\n      .period-fields {\n        display: flex;\n        gap: 1rem;\n        flex-wrap: wrap;\n      }\n\n      .period-fields > * {\n        flex: 1;\n        min-width: 100px;\n      }\n\n      @media (max-width: 768px) {\n        .period-fields > * {\n          flex: 1 1 100%;\n        }\n      }\n    `,\n  ],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => PeriodPickerComponent),\n      multi: true,\n    },\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    YearMonthFieldComponent,\n  ],\n})\nexport class PeriodPickerComponent implements ControlValueAccessor {\n  startLabel = input<string>('Start Period');\n  endLabel = input<string>('End Period');\n  presentLabel = input<string>('Present');\n  startPlaceholder = input<string>('Select start period');\n  endPlaceholder = input<string>('Select end period');\n  presentPlaceholder = input<string>('Present');\n  okLabel = input<string>('OK');\n  clearLabel = input<string>('Clear');\n\n  baseYearStart = input<number | undefined>();\n  baseYearEnd = input<number | undefined>();\n  showPresentToggle = input<boolean>(true);\n\n  // Width and layout configuration\n  width = input<string | number>('auto');\n  fullWidth = input<boolean>(true);\n  fieldWidth = input<string | number>('200px');\n  fieldFullWidth = input<boolean>(true);\n\n  // Computed fullWidth that automatically becomes false when width is set\n  computedFullWidth = computed(() => {\n    const widthValue = this.width();\n    return widthValue === 'auto' ? this.fullWidth() : false;\n  });\n\n  form: FormGroup;\n  private valueSignal = signal<Period | null>(null);\n\n  constructor() {\n    this.form = new FormGroup({\n      start: new FormControl(null),\n      end: new FormControl(null),\n      present: new FormControl(false),\n    });\n\n    // Single subscription to form value changes to avoid multiple triggers\n    this.form.valueChanges.subscribe(() => {\n      const formValue = this.form.value;\n      const newValue = {\n        start: formValue.start,\n        end: formValue.present ? null : formValue.end,\n        isPresent: formValue.present,\n      };\n\n      // Only emit if the value has actually changed\n      const currentValue = this.valueSignal();\n      if (JSON.stringify(currentValue) !== JSON.stringify(newValue)) {\n        this.valueSignal.set(newValue);\n        this.onChange(newValue);\n        this.onTouched();\n      }\n    });\n\n    // Subscribe to present changes and enable/disable end control\n    this.form.get('present')!.valueChanges.subscribe((present: boolean) => {\n      const endControl = this.form.get('end');\n      if (present) {\n        endControl?.disable({ emitEvent: false });\n        endControl?.setValue(null, { emitEvent: false });\n      } else {\n        endControl?.enable({ emitEvent: false });\n      }\n    });\n  }\n\n  writeValue(value: Period | null): void {\n    if (value) {\n      this.form.patchValue(\n        {\n          start: value.start,\n          end: value.isPresent ? null : value.end,\n          present: value.isPresent,\n        },\n        { emitEvent: false },\n      );\n    } else {\n      this.form.reset(\n        { start: null, end: null, present: false },\n        { emitEvent: false },\n      );\n    }\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  private onChange: (value: Period | null) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  // eslint-disable-next-line no-unused-vars\n  registerOnChange(fn: (value: Period | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (isDisabled) {\n      this.form.disable({ emitEvent: false });\n    } else {\n      this.form.enable({ emitEvent: false });\n    }\n  }\n\n  onPresentValueChange(present: boolean) {\n    this.form.get('present')?.setValue(present, { emitEvent: false });\n    // The form.valueChanges subscription will handle the change emission\n  }\n}\n","import { provideLocaleConfig } from './locale.config';\nimport { LocaleConfig } from '../types';\n\n/**\n * Main configuration provider for ngx-mat-period-picker.\n * This provides a convenient way to configure all aspects of the library.\n *\n * @param config Configuration object for the library\n * @returns Array of providers for the library configuration\n *\n * @example\n * ```typescript\n * import { provideNgxMatPeriodPicker } from 'ngx-mat-period-picker';\n *\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideNgxMatPeriodPicker({\n *       locale: 'de-DE',\n *       useConfiguredLocale: true\n *     })\n *   ]\n * });\n * ```\n */\nexport function provideNgxMatPeriodPicker(config: {\n  locale?: string;\n  useConfiguredLocale?: boolean;\n} = {}) {\n  const localeConfig: Partial<LocaleConfig> = {\n    useConfiguredLocale: config.useConfiguredLocale !== false,\n  };\n\n  // Only set locale if explicitly provided, otherwise let the service use Angular's default\n  if (config.locale) {\n    localeConfig.locale = config.locale;\n  }\n\n  return [\n    provideLocaleConfig(localeConfig as LocaleConfig),\n  ];\n}\n","/*\n * Public API Surface of ngx-mat-period-picker\n */\n\nexport * from './lib/components';\nexport * from './lib/types';\nexport * from './lib/services';\nexport * from './lib/config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}