{"version":3,"file":"usitsdasdesign-dds-ng-datepicker.mjs","sources":["../../src/app/dds/datepicker/typings.ts","../../src/app/dds/datepicker/constants.ts","../../src/app/dds/datepicker/date.utils.ts","../../src/app/dds/datepicker/datepicker.token.ts","../../src/app/dds/datepicker/daypicker/daypicker.component.ts","../../src/app/dds/datepicker/daypicker/daypicker.component.html","../../src/app/dds/datepicker/monthpicker/monthpicker.component.ts","../../src/app/dds/datepicker/monthpicker/monthpicker.component.html","../../src/app/dds/datepicker/yearpicker/yearpicker.component.ts","../../src/app/dds/datepicker/yearpicker/yearpicker.component.html","../../src/app/dds/datepicker/datepicker-inner/datepicker-inner.component.ts","../../src/app/dds/datepicker/datepicker-inner/datepicker-inner.component.html","../../src/app/dds/datepicker/datepicker/datepicker.component.ts","../../src/app/dds/datepicker/datepicker/datepicker.component.html","../../src/app/dds/datepicker/daterangepicker/daterangepicker.component.ts","../../src/app/dds/datepicker/daterangepicker/daterangepicker.component.html","../../src/app/dds/datepicker/datepicker.module.ts","../../src/app/dds/datepicker/usitsdasdesign-dds-ng-datepicker.ts"],"sourcesContent":["import { ErrorState, KeyCodes, LabelPosition, PositionState, Size } from '@usitsdasdesign/dds-ng/shared';\n\nexport interface DatepickerOptions {\n  value?: Date;\n  label?: string;\n  labelPosition?: LabelPosition | string;\n  description?: string;\n  errorMessage?: string;\n  errorState?: string | ErrorState;\n  size?: Size | string;\n  placeholder?: string;\n  format?: string;\n  icon?: string;\n  customClass?: string;\n  openedDate?: Date;\n  disabled?: boolean;\n  isResponsive?: boolean;\n  isInverse?: boolean;\n  isRequired?: boolean;\n  readonly?: boolean;\n  minMode?: DatepickerStates | string;\n  startState?: DatepickerStates | string;\n  minDate?: Date;\n  maxDate?: Date;\n  isUTCFormat?: boolean;\n  isError?: boolean;\n  isManualInput?: boolean;\n  inputByFormatMask?: boolean;\n  disabledDates?: DisabledDates;\n  isClearBtnEnabled?: boolean;\n\n  stickerPosition?: PositionState | string;\n  stickerIndent?: number;\n  stickerShift?: number;\n  stickerMaxHeight?: number | string;\n  stickerCustomClass?: string;\n  stickerIsDisabled?: boolean;\n  stickerIsDynamic?: boolean;\n}\n\nexport interface DaterangepickerOptions {\n  value?: Date[];\n  label?: string;\n  openedDate?: Date;\n  labelPosition?: LabelPosition | string;\n  description?: string;\n  errorMessage?: string;\n  errorState?: string | ErrorState;\n  size?: Size | string;\n  placeholder?: string[];\n  format?: string;\n  icon?: string;\n  customClass?: string;\n  minDate?: Date;\n  maxDate?: Date;\n  isUTCFormat?: boolean;\n  disabled?: boolean;\n  isInverse?: boolean;\n  isResponsive?: boolean;\n  readonly?: boolean;\n  isError?: boolean;\n  isRequired?: boolean;\n  isManualInput?: boolean;\n  inputByFormatMask?: boolean;\n  isStartDateEmitted?: boolean;\n  disabledDates?: DisabledDates;\n  isClearBtnEnabled?: boolean;\n\n  stickerPosition?: PositionState | string;\n  stickerIndent?: number;\n  stickerShift?: number;\n  stickerMaxHeight?: number | string;\n  stickerCustomClass?: string;\n  stickerIsDisabled?: boolean;\n  stickerIsDynamic?: boolean;\n}\n\nexport interface DatepickerItem {\n  value: number;\n  date: Date;\n  isActive?: boolean;\n  isCurrent?: boolean;\n  disabled?: boolean;\n  inRange?: boolean;\n  isOtherMonth?: boolean;\n}\n\nexport interface DisabledDates {\n  before?: Date;\n  after?: Date;\n  days?: number[];\n  daysOfMonth?: number[];\n  dates?: Date[];\n  ranges?: DisabledRanges[];\n}\n\nexport interface DisabledRanges {\n  from: Date;\n  to: Date;\n}\n\nexport interface SelectedDate {\n  year?: number;\n  month?: number;\n  day?: number;\n}\n\nexport interface DaterangepickerInfo {\n  start?: Date;\n  end?: Date;\n}\n\nexport interface DaterangepickerPlaceholder {\n  start?: string;\n  end?: string;\n}\n\nexport interface DaterangepickerHeaderOption {\n  isEndPicker?: boolean;\n  isHeaderBtns?: boolean;\n  directionKeycode?: KeyCodes.ARROW_LEFT | KeyCodes.ARROW_RIGHT;\n}\n\nexport enum DaterangepickerItems {\n  end = 'end',\n  start = 'start',\n}\n\nexport enum DatepickerYearsActions {\n  prev = 'prev',\n  next = 'next',\n}\n\nexport enum DatepickerStates {\n  year = 'year',\n  month = 'month',\n  day = 'day',\n}\n","import { DatepickerStates } from './typings';\n\n// Datepicker\nexport const LOCALE = 'en-US';\nexport const DEFAULT_PLACEHOLDER = 'Choose Date';\nexport const DEFAULT_DATEPICKER_MODE = DatepickerStates.day;\nexport const SHIFT = 0;\nexport const DATEPICKER_WIDTH = 280;\nexport const DATEPICKER_WIDTH_TABLET = 320;\nexport const DATERANGEPICKER_WIDTH = 586;\nexport const DATERANGEPICKER_WIDTH_TABLET = 654;\nexport const HEADER_MONTH_FORMAT = 'MMMM';\nexport const HEADER_YEAR_FORMAT = 'yyyy';\nexport const DATEPICKER_BTN = '.dds-btn';\nexport const BTN_ACTIVE_DATE = '.dds-datepicker__item_active';\nexport const BTN_CURRENT_DATE = '.dds-datepicker__item_current';\nexport const DATERANGEPICKER_POPUP = 'dds-daterangepicker-popup';\nexport const DEFAULT_ICON = 'dds-icon_calendar';\n// Day\nexport const DAYS_COUNT = 42;\nexport const STARTING_DAY = 0;\nexport const DAYS_PER_WEEKS = 7;\nexport const MONTHS_PER_ROW = 4;\nexport const YEARS_PER_ROW = 4;\n// Month\nexport const MONTH_PICKER_FORMAT = 'MMM';\n// Year\nexport const NUMBER_YEARS_OF_CALENDAR = 12;\nexport const YEAR_PICKER_FORMAT = 'yyyy';\n// Rangepicker\nexport const RANGE_MAX_LENGTH = 2;\nexport const RANGE_INDEX = {\n  start: 0,\n  end: 1,\n};\n","import { DatepickerStates, DisabledRanges } from './typings';\n\nexport function parseDateByFormat(value: string, format: string): Date {\n  const separator = new RegExp(/[\\s,.\\/-]+/);\n  const isDay = new RegExp(/d/);\n  const isMonth = new RegExp(/M/);\n  const isYear = new RegExp(/y/);\n\n  const valueArray = value.split(separator);\n  const formatArray = format.split(separator);\n\n  let day, month, year;\n\n  formatArray.forEach((formatItem, index) => {\n    if (isDay.test(formatItem)) day = valueArray[index];\n\n    if (isMonth.test(formatItem)) month = valueArray[index];\n\n    if (isYear.test(formatItem)) year = valueArray[index];\n  });\n\n  const separatorForCreateDate = isNaN(month) ? ' ' : '/';\n\n  return new Date(`${month + separatorForCreateDate + day + separatorForCreateDate + year}`);\n}\n\nexport function getMaskByFormat(format: string): string {\n  const replaceDay = format.replace(/d/g, '0'); // only number\n  const replaceYear = replaceDay.replace(/y/g, '0'); // only number\n  const replaceMonth = replaceYear\n    .replace(/M{5}/, 'S') // S\n    .replace(/M{4}/, 'S*') // September\n    .replace(/M{3}/, 'SSS') // Sep\n    .replace(/M/g, '0'); // 09\n\n  return replaceMonth;\n}\n\nexport function isValidDate(date: Date): boolean {\n  return date instanceof Date && !isNaN(date.getTime());\n}\n\nexport function getPrevDay(date: Date): Date {\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate() - 1);\n}\n\nexport function getNextDay(date: Date): Date {\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);\n}\n\nexport function includeDisabledDays(disabledDays: number[], date: Date): boolean {\n  return disabledDays?.includes(date.getDay());\n}\n\nexport function includeDisabledDaysOfMonth(disabledDaysOfMonth: number[], date: Date): boolean {\n  return disabledDaysOfMonth?.includes(date.getDate());\n}\n\nexport function includeDisabledDates(disabledDates: Date[], date: Date): boolean {\n  return disabledDates?.some((disabledDate) => {\n    const disabledDateZeroTime = disabledDate.setHours(0, 0, 0, 0);\n    const dateZeroTime = date?.setHours(0, 0, 0, 0);\n\n    return disabledDateZeroTime === dateZeroTime;\n  });\n}\n\nexport function includeDisabledRanges(disabledRanges: DisabledRanges[], date: Date): boolean {\n  return disabledRanges?.some((disabledRange) => {\n    const dateFrom = disabledRange.from.setHours(0, 0, 0, 0);\n    const dateTo = disabledRange.to.setHours(0, 0, 0, 0);\n    const dateZeroTime = date?.setHours(0, 0, 0, 0);\n\n    return dateZeroTime >= dateFrom && dateZeroTime <= dateTo;\n  });\n}\n\n// Method to get date with zero time\nexport function getDateWithZeroTime(date: Date): Date {\n  return date ? new Date(date.setHours(0, 0, 0, 0)) : date;\n}\n\n// Method to get date with minimum mode\nexport function getDateWithMinMode(date: Date, minMode: string): Date {\n  if (!date || !minMode) return date;\n\n  switch (minMode) {\n    case DatepickerStates.month:\n      return new Date(date.getFullYear(), date.getMonth(), 1);\n    case DatepickerStates.year:\n      return new Date(date.getFullYear(), 0, 1);\n    default:\n      return date;\n  }\n}\n\n// Method to set the time to a date\nexport function setTimeToDate(date: Date): Date {\n  date.setHours(new Date().getHours());\n  date.setMinutes(new Date().getMinutes());\n  date.setSeconds(new Date().getSeconds());\n\n  return date;\n}\n\n// Method to get the index of the focused item\nexport function getIndexFocusedItem(items: HTMLButtonElement[]): number {\n  let indexFocusedItem = 0;\n\n  items.forEach((item, index) => {\n    if (item === document.activeElement) {\n      indexFocusedItem = index;\n    }\n  });\n\n  return indexFocusedItem;\n}\n\n// Method to compare two dates\nexport function compareDate(date1: Date, date2: Date): number {\n  const compareDate1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n  const compareDate2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n\n  return compareDate1.getTime() - compareDate2.getTime();\n}\n\n/**\n * Compares two dates by year.\n */\nexport function compareYears(date1: Date, date2: Date): number {\n  const compareDate1 = date1.getFullYear();\n  const compareDate2 = date2.getFullYear();\n\n  return compareDate1 - compareDate2;\n}\n\nexport function getNextMonth(date: Date): number {\n  return date.getMonth() + 1;\n}\n\n// Gets the last day and month of the given date.\nexport function getLastDayAndMonthOfDate(date: Date): Date {\n  const lastMonth = 11;\n  const year = date.getFullYear();\n\n  return new Date(year, lastMonth + 1, 0);\n}\n\n// Gets the first day and month of the given date.\nexport function getFirstDayAndMonthOfDate(date: Date): Date {\n  const firstDay = 1;\n  const firstMonth = 0;\n  const year = date.getFullYear();\n\n  return new Date(year, firstMonth, firstDay);\n}\n\n// Checks if the given date is the current date.\nexport function isCurrentDate(date: Date): boolean {\n  return compareYears(date, new Date()) === 0;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const DATEPICKER = new InjectionToken('Datepicker Component');\nexport const DATERANGEPICKER = new InjectionToken('DateRangepicker Component');\nexport const DATEPICKER_INNER = new InjectionToken('DatepickerInner Component');\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Inject,\n  Input,\n  OnChanges,\n  OnInit,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { ButtonModule, ButtonOptions } from '@usitsdasdesign/dds-ng/button';\nimport { DestroyCtor, DestroyMixin } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { ButtonKind, KeyCodes, Size, Themes, WidthState } from '@usitsdasdesign/dds-ng/shared';\nimport { I18nService } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { takeUntil } from 'rxjs/operators';\nimport { DATEPICKER_BTN, DAYS_COUNT, DAYS_PER_WEEKS, RANGE_MAX_LENGTH, STARTING_DAY } from '../constants';\nimport { compareDate, getIndexFocusedItem, includeDisabledDates, includeDisabledDays, includeDisabledDaysOfMonth, includeDisabledRanges } from '../date.utils';\nimport type { DatepickerInnerComponent } from '../datepicker-inner/datepicker-inner.component';\nimport { DATEPICKER_INNER } from '../datepicker.token';\nimport { DatepickerItem, DatepickerStates, DisabledDates } from '../typings';\n\nconst DaypickerBase: DestroyCtor = DestroyMixin();\n\n@Component({\n  selector: 'dds-daypicker',\n  templateUrl: './daypicker.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, ButtonModule],\n})\nexport class DaypickerComponent extends DaypickerBase implements OnInit, OnChanges {\n  // The date that is currently hovered over.\n  @Input() hovered: Date;\n\n  // The dates that are disabled for selection.\n  @Input() disabledDates: DisabledDates;\n\n  // The currently selected date.\n  @Input() value: Date;\n\n  // The names of the days of the week.\n  public daysName: { short: string, long: string }[];\n\n  // The list of dates to be displayed in the date picker.\n  public dayList: DatepickerItem[];\n\n  // A specific date that is disabled.\n  public disabledDate: Date;\n\n  // Options for the buttons in the date picker.\n  public btnOptions: ButtonOptions = {\n    theme: Themes.dark,\n    width: WidthState.full,\n    size: Size.md,\n  };\n\n  // Indicates whether the date picker is in inverse mode.\n  public isInverse: boolean;\n\n  // A reference to the day picker body element.\n  @ViewChild('daypickerBody') daypickerBody: ElementRef;\n\n  constructor(\n    @Inject(DATEPICKER_INNER) private datepickerInner: DatepickerInnerComponent,\n    private cdr: ChangeDetectorRef,\n    private i18n: I18nService\n  ) {\n    super();\n    this.isInverse = datepickerInner.isInverse;\n  }\n\n  // Initializes the component.\n  // Sets up the daysName and dayList properties and subscribes to the date picker status changes.\n  public ngOnInit(): void {\n    this.daysName = this.getDaysName();\n    this.dayList = this.getDates();\n\n    this.datepickerInner.status.pipe(takeUntil(this.destroy)).subscribe(() => {\n      this.dayList = this.getDates();\n      this.cdr.markForCheck();\n    });\n  }\n\n  // Handles changes to the input properties.\n  public ngOnChanges(changes: SimpleChanges) {\n    if (changes.hovered && !changes.hovered.firstChange) {\n      this.hoverOverDay();\n    }\n    if (changes.value) {\n      this.dayList = this.getDates();\n    }\n  }\n\n  // Gets the button kind for a given day.\n  public getButtonKind(day: DatepickerItem): string {\n    return (day.isActive && this.datepickerInner.selectedDate.day) || (day.inRange && !day.isOtherMonth)\n      ? ButtonKind.primaryLoud\n      : ButtonKind.silent;\n  }\n\n  // Selects a day.\n  public selectDay(day: DatepickerItem, event: Event): void {\n    event.stopPropagation();\n    this.datepickerInner.selectDate(DatepickerStates.day, day);\n    this.dayList = this.getDates();\n  }\n\n  // Handles hovering over a day.\n  public hoverOverDay(hoverDay?: DatepickerItem): void {\n    if (hoverDay) {\n      this.datepickerInner.dateHovered.emit(hoverDay.date);\n    }\n\n    if (this.datepickerInner.rangeValue && this.datepickerInner.rangeValue.length < RANGE_MAX_LENGTH) {\n      const dateStart = this.datepickerInner.rangeValue[0];\n      const dateEnd = this.hovered;\n\n      this.dayList.forEach((day) => {\n        day.inRange = day.date.getTime() > dateStart.getTime() && day.date.getTime() < dateEnd?.getTime() && !day.disabled;\n      });\n    }\n  }\n\n  // Handles keydown events.\n  public onKeydown(event: KeyboardEvent): void {\n    const btnElmts = this.daypickerBody.nativeElement.querySelectorAll(DATEPICKER_BTN);\n    const currentItems = [...btnElmts].filter((item) => !item.disabled);\n    const indexFocusedItem = getIndexFocusedItem(currentItems);\n\n    switch (event.keyCode) {\n      case KeyCodes.TAB:\n      case event.shiftKey && KeyCodes.TAB:\n        this.closeOnTabOut();\n        break;\n\n      case KeyCodes.ARROW_LEFT:\n        const indexPrev = indexFocusedItem - 1;\n\n        event.preventDefault();\n        if (this.datepickerInner.isRange) {\n          this.datepickerInner.focusRangeItem(this.daypickerBody, currentItems, indexPrev, this.daypickerBody, KeyCodes.ARROW_LEFT);\n        } else {\n          this.datepickerInner.focusPrevItem(this.daypickerBody, currentItems, indexPrev);\n        }\n        break;\n\n      case KeyCodes.ARROW_UP:\n        const indexPrevWeek = indexFocusedItem - DAYS_PER_WEEKS;\n        const headerBtnElmts = this.datepickerInner.datepickerHeader.nativeElement.querySelectorAll(DATEPICKER_BTN);\n\n        event.preventDefault();\n        if (indexPrevWeek < 0) {\n          this.datepickerInner.focusPrevItem(\n            this.datepickerInner.datepickerHeader,\n            headerBtnElmts,\n            headerBtnElmts.length - 1,\n            this.daypickerBody\n          );\n        } else {\n          this.datepickerInner.focusPrevItem(this.daypickerBody, currentItems, indexPrevWeek);\n        }\n        break;\n\n      case KeyCodes.ARROW_RIGHT:\n        const indexNext = indexFocusedItem + 1;\n\n        event.preventDefault();\n        if (this.datepickerInner.isRange) {\n          this.datepickerInner.focusRangeItem(this.daypickerBody, currentItems, indexNext, this.daypickerBody, KeyCodes.ARROW_RIGHT);\n        } else {\n          this.datepickerInner.focusNextItem(this.daypickerBody, currentItems, indexNext);\n        }\n        break;\n\n      case KeyCodes.ARROW_DOWN:\n        const indexNextWeek = indexFocusedItem + DAYS_PER_WEEKS;\n\n        event.preventDefault();\n        this.datepickerInner.focusNextItem(this.daypickerBody, currentItems, indexNextWeek);\n        break;\n    }\n  }\n\n  // Handles mouse enter event on the date wrapper.\n  public onDateWrapMouseenter(): void {\n    this.datepickerInner.dateWrapMouseenter.emit();\n  }\n\n  // Handles mouse leave event on the date wrapper.\n  public onDateWrapMouseleave(): void {\n    this.datepickerInner.dateWrapMouseleave.emit();\n  }\n\n  // Gets the first day of the calendar.\n  get firstDayOfCalendar(): Date {\n    const activeYear = this.value.getFullYear();\n    const activeMonth = this.value.getMonth();\n    const firstDayOfCalendar = new Date(activeYear, activeMonth, 1);\n    const difference = STARTING_DAY - firstDayOfCalendar.getDay();\n    const numberDayFromPrevMonth = difference > 0 ? DAYS_PER_WEEKS - difference : -difference;\n\n    if (numberDayFromPrevMonth > 0) {\n      firstDayOfCalendar.setDate(-numberDayFromPrevMonth + 1);\n    }\n\n    return firstDayOfCalendar;\n  }\n\n  // Closes the date picker on tab out.\n  private closeOnTabOut(): void {\n    this.datepickerInner.stickerRef.hide();\n  }\n\n  // Retrieves the list of day names based on the current locale.\n  private getDaysName(): { short: string, long: string }[] {\n    const shortFormatter = new Intl.DateTimeFormat(this.i18n.getLocale(), { weekday: 'narrow' });\n    const longFormatter = new Intl.DateTimeFormat(this.i18n.getLocale(), { weekday: 'long' });\n\n    const daysNameList = Array.from({ length: 7 }, (_, i) => {\n      const date = new Date(1970, 0, i + 4);\n      return {\n        short: shortFormatter.format(date),\n        long: longFormatter.format(date)\n      };\n    });\n\n    return daysNameList;\n  }\n\n  // Retrieves the list of dates to be displayed in the date picker.\n  private getDates(): DatepickerItem[] {\n    const dates: DatepickerItem[] = [];\n    let current = this.firstDayOfCalendar;\n    let i = 0;\n    let date: Date;\n\n    while (i < DAYS_COUNT) {\n      date = current;\n      dates[i++] = {\n        date: date,\n        value: date.getDate(),\n        disabled: this.disabled(date),\n        isActive: this.isActiveDay(date) && !this.disabled(date),\n        isCurrent: this.isCurrentDate(date) && !this.disabled(date),\n        inRange: this.isSelectedDate(date) && !this.disabled(date),\n        isOtherMonth: this.isOtherMonth(date),\n      };\n      current = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);\n    }\n\n    return this.checkLastWeekIsOtherMonth(dates);\n  }\n\n  // Checks if a date is the current date.\n  private isCurrentDate(date: Date): boolean {\n    return compareDate(date, new Date()) === 0;\n  }\n\n  // Checks if a date is an active day.\n  private isActiveDay(date: Date): boolean {\n    const rangeValue = this.datepickerInner.rangeValue;\n    const selectedDate = new Date(\n      this.datepickerInner.selectedDate.year,\n      this.datepickerInner.selectedDate.month,\n      this.datepickerInner.selectedDate.day\n    );\n    let result: boolean;\n\n    if (rangeValue && rangeValue.length > 1) {\n      rangeValue.forEach((dateItem) => {\n        if (compareDate(date, dateItem) === 0) {\n          result = true;\n        }\n      });\n    } else {\n      result = compareDate(date, selectedDate) === 0;\n    }\n\n    return result;\n  }\n\n  // Checks if a date is disabled.\n  private disabled(date: Date): boolean {\n    const isMinDate = this.isMinDate(date);\n    const isMaxDate = this.isMaxDate(date);\n    const isIncludeDisabledDays = this.includeDisabledDays(date);\n    const isIncludeDisabledDaysOfMonth = this.includeDisabledDaysOfMonth(date);\n    const isIncludeDisabledDates = this.includeDisabledDates(date);\n    const isIncludeDisabledRanges = this.includeDisabledRanges(date);\n\n    return (\n      isMinDate || isMaxDate || isIncludeDisabledDays || isIncludeDisabledDaysOfMonth || isIncludeDisabledDates || isIncludeDisabledRanges\n    );\n  }\n\n  // Checks if a date is in another month.\n  private isOtherMonth(date: Date): boolean {\n    return this.isDayOfPrevMonth(date) || this.isDayOfNextMonth(date);\n  }\n\n  // Checks if the last week of the dates is in another month.\n  private checkLastWeekIsOtherMonth(dates: DatepickerItem[]): DatepickerItem[] {\n    const datesListLength = dates.length;\n    const lastWeekStartIndex = datesListLength - DAYS_PER_WEEKS;\n    const lastWeekIsOtherMonth = dates.slice(lastWeekStartIndex, datesListLength).every((day) => day.isOtherMonth);\n\n    if (lastWeekIsOtherMonth) {\n      dates.splice(lastWeekStartIndex, DAYS_PER_WEEKS);\n    }\n\n    return dates;\n  }\n\n  // Checks if a date is the minimum date.\n  private isMinDate(date: Date): boolean {\n    return this.datepickerInner.minDate && compareDate(date, this.datepickerInner.minDate) <= 0;\n  }\n\n  // Checks if a date is the maximum date.\n  private isMaxDate(date: Date): boolean {\n    return this.datepickerInner.maxDate && compareDate(date, this.datepickerInner.maxDate) >= 0;\n  }\n\n  // Checks if a date is included in the disabled days.\n  private includeDisabledDays(date: Date): boolean {\n    return includeDisabledDays(this.disabledDates?.days, date);\n  }\n\n  // Checks if a date is included in the disabled days of the month.\n  private includeDisabledDaysOfMonth(date: Date): boolean {\n    return includeDisabledDaysOfMonth(this.disabledDates?.daysOfMonth, date);\n  }\n\n  // Checks if a date is included in the disabled dates.\n  private includeDisabledDates(date: Date): boolean {\n    return includeDisabledDates(this.disabledDates?.dates, date);\n  }\n\n  // Checks if a date is included in the disabled ranges.\n  private includeDisabledRanges(date: Date): boolean {\n    return includeDisabledRanges(this.disabledDates?.ranges, date);\n  }\n\n  // Checks if a date is a day of the previous month.\n  private isDayOfPrevMonth(date: Date): boolean {\n    const activeYear = this.value.getFullYear();\n    const activeMonth = this.value.getMonth();\n\n    return compareDate(date, new Date(activeYear, activeMonth, 1)) < 0;\n  }\n\n  // Checks if a date is a day of the next month.\n  private isDayOfNextMonth(date: Date): boolean {\n    const activeYear = this.value.getFullYear();\n    const activeMonth = this.value.getMonth();\n\n    return compareDate(date, new Date(activeYear, activeMonth + 1, 0)) > 0;\n  }\n\n  // Checks if a date is a selected date.\n  private isSelectedDate(date: Date): boolean {\n    const rangeValue = this.datepickerInner.rangeValue;\n    let result: boolean;\n\n    if (rangeValue && rangeValue.length > 1) {\n      result = date.getTime() > rangeValue[0].getTime() && date.getTime() < rangeValue[1].getTime();\n    }\n\n    return result;\n  }\n}\n","<table class=\"dds-daypicker\"\n       role=\"grid\"\n       [ngClass]=\"{'dds-daypicker_inverse': isInverse}\">\n\n  <thead class=\"dds-daypicker__header\">\n    <tr>\n      @for (dayName of daysName; track dayName) {\n      <th scope=\"col\"\n          [attr.aria-label]=\"dayName?.long\"\n          class=\"dds-daypicker__name\">{{ dayName?.short }}</th>\n      }\n    </tr>\n  </thead>\n\n  <tbody class=\"dds-daypicker__body\"\n         data-qa=\"day-picker\"\n         tabindex=\"0\"\n         (keydown)=\"onKeydown($event)\"\n         (mouseenter)=\"onDateWrapMouseenter()\"\n         (mouseleave)=\"onDateWrapMouseleave()\"\n         #daypickerBody>\n\n    <!-- Iterate over dayList in chunks of 7 -->\n    @for (week of dayList | slice:0:dayList.length; track week; let i = $index) {\n    @if(i % 7 === 0) {\n    <tr>\n      <!-- Create 7 td elements for each tr -->\n      @for (day of dayList.slice(i, i + 7); track day) {\n      <dds-button [theme]=\"btnOptions.theme\"\n                  [kind]=\"getButtonKind(day)\"\n                  [width]=\"btnOptions.width\"\n                  [size]=\"btnOptions.size\"\n                  [disabled]=\"day.disabled\"\n                  [isInverse]=\"isInverse\"\n                  [ngClass]=\"{\n              'dds-datepicker__item_current': day.isCurrent,\n              'dds-datepicker__item_active': day.isActive,\n              'dds-datepicker__item_in-range': day.inRange,\n              'dds-datepicker__item_other-month': day.isOtherMonth\n            }\"\n                  [ariaLabel]=\"day.date | date:'MMMM dd, yyyy'\"\n                  [ariaSelected]=\"day.isActive\"\n                  role=\"gridcell\"\n                  class=\"dds-datepicker__item dds-daypicker__item\"\n                  (clicked)=\"selectDay(day, $event)\"\n                  (mouseenter)=\"hoverOverDay(day)\"\n                  (keyup)=\"hoverOverDay(day)\">\n        {{day.value}}\n      </dds-button>\n      }\n      }\n      }\n  </tbody>\n</table>\n","import { CommonModule, FormStyle, TranslationWidth, getLocaleMonthNames } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { ButtonModule, ButtonOptions } from '@usitsdasdesign/dds-ng/button';\nimport { ButtonKind, KeyCodes, Themes, WidthState } from '@usitsdasdesign/dds-ng/shared';\nimport { I18nModule } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { DATEPICKER_BTN, LOCALE, MONTHS_PER_ROW, MONTH_PICKER_FORMAT } from '../constants';\nimport { compareDate, getIndexFocusedItem } from '../date.utils';\nimport type { DatepickerInnerComponent } from '../datepicker-inner/datepicker-inner.component';\nimport { DATEPICKER_INNER } from '../datepicker.token';\nimport { DatepickerItem, DatepickerStates } from '../typings';\n\n@Component({\n  selector: 'dds-monthpicker',\n  templateUrl: './monthpicker.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    CommonModule,\n    ButtonModule,\n    I18nModule\n  ]\n})\nexport class MonthpickerComponent implements OnInit, OnChanges {\n  // The selected date value.\n  @Input() value: Date;\n\n  // The format used for displaying the month picker.\n  public monthPickerFormat: string = MONTH_PICKER_FORMAT;\n\n  // The list of months to be displayed in the month picker.\n  public monthList: DatepickerItem[];\n\n  // The date that should be disabled in the month picker.\n  public disabledDate: Date;\n\n  // Options for the button appearance in the month picker.\n  public btnOptions: ButtonOptions = {\n    theme: Themes.dark,\n    width: WidthState.full,\n  };\n\n  // Indicates whether the month picker should use the inverse theme.\n  public isInverse: boolean;\n\n  // Reference to the month picker element.\n  @ViewChild('monthpicker') monthpicker: ElementRef;\n\n  constructor(@Inject(DATEPICKER_INNER) private datepickerInner: DatepickerInnerComponent) {\n    this.isInverse = datepickerInner.isInverse;\n  }\n\n  public ngOnInit(): void {\n    this.monthList = this.getMonths();\n  }\n\n  public ngOnChanges(changes: SimpleChanges) {\n    if (changes.value) {\n      this.monthList = this.getMonths();\n    }\n  }\n\n  // Determines the button kind for a given month.\n  public getButtonKind(month: DatepickerItem): string {\n    return month.isActive && this.datepickerInner.selectedDate.month >= 0 ? ButtonKind.primaryLoud : ButtonKind.silent;\n  }\n\n  // Selects a month and updates the month list.\n  public selectMonth(month: DatepickerItem, event: Event) {\n    event.stopPropagation();\n    this.datepickerInner.selectDate(DatepickerStates.month, month);\n    this.monthList = this.getMonths();\n  }\n\n  // Handles keyboard navigation within the month picker.\n  public onKeydown(event: KeyboardEvent): void {\n    const btnElmts = this.monthpicker.nativeElement.querySelectorAll(DATEPICKER_BTN);\n    const currentItems = [...btnElmts].filter((item) => !item.disabled);\n    const indexFocusedItem = getIndexFocusedItem(currentItems);\n\n    switch (event.keyCode) {\n      case KeyCodes.TAB:\n      case event.shiftKey && KeyCodes.TAB:\n        event.preventDefault();\n        this.closeOnTabOut();\n        break;\n\n      case KeyCodes.ARROW_LEFT:\n        const indexPrev = indexFocusedItem - 1;\n\n        event.preventDefault();\n        if (this.datepickerInner.isRange) {\n          this.datepickerInner.focusRangeItem(this.monthpicker, currentItems, indexPrev, this.monthpicker, KeyCodes.ARROW_LEFT);\n        } else {\n          this.datepickerInner.focusPrevItem(this.monthpicker, currentItems, indexPrev);\n        }\n        break;\n\n      case KeyCodes.ARROW_UP:\n        const indexPrevWeek = indexFocusedItem - MONTHS_PER_ROW;\n        const headerBtnElmts = this.datepickerInner.datepickerHeader.nativeElement.querySelectorAll(DATEPICKER_BTN);\n\n        event.preventDefault();\n        if (indexPrevWeek < 0) {\n          this.datepickerInner.focusPrevItem(\n            this.datepickerInner.datepickerHeader,\n            headerBtnElmts,\n            headerBtnElmts.length - 1,\n            this.monthpicker\n          );\n        } else {\n          this.datepickerInner.focusPrevItem(this.monthpicker, currentItems, indexPrevWeek);\n        }\n        break;\n\n      case KeyCodes.ARROW_RIGHT:\n        const indexNext = indexFocusedItem + 1;\n\n        event.preventDefault();\n        if (this.datepickerInner.isRange) {\n          this.datepickerInner.focusRangeItem(this.monthpicker, currentItems, indexNext, this.monthpicker, KeyCodes.ARROW_RIGHT);\n        } else {\n          this.datepickerInner.focusNextItem(this.monthpicker, currentItems, indexNext);\n        }\n        break;\n\n      case KeyCodes.ARROW_DOWN:\n        const indexNextWeek = indexFocusedItem + MONTHS_PER_ROW;\n\n        event.preventDefault();\n        this.datepickerInner.focusNextItem(this.monthpicker, currentItems, indexNextWeek);\n        break;\n    }\n  }\n\n  // Emits an event when the mouse enters the date wrapper.\n  public onDateWrapMouseenter(): void {\n    this.datepickerInner.dateWrapMouseenter.emit();\n  }\n\n  // Emits an event when the mouse leaves the date wrapper.\n  public onDateWrapMouseleave(): void {\n    this.datepickerInner.dateWrapMouseleave.emit();\n  }\n\n  // Generates the list of months to be displayed in the month picker.\n  private getMonths(): DatepickerItem[] {\n    const monthData: DatepickerItem[] = [];\n    const monthNameArray: readonly string[] = getLocaleMonthNames(LOCALE, FormStyle.Standalone, TranslationWidth.Wide);\n    const activeDay = this.value.getDate();\n    const activeYear = this.value.getFullYear();\n    const firstMonth: Date = new Date(activeYear, 0, activeDay);\n\n    let current = firstMonth;\n    let i = 0;\n    let date: Date;\n\n    while (i < monthNameArray.length) {\n      const monthNumber = i;\n\n      date = current;\n      monthData[i++] = {\n        date: date,\n        value: monthNumber,\n        disabled: this.disabled(date),\n        isActive: this.isActiveMonth(date) && !this.disabled(date),\n        isCurrent: this.isCurrentDate(date),\n      };\n\n      const nextMonthForLastDay = date.getMonth() + 2;\n      const lastDayOfNextMonth = new Date(date.getFullYear(), nextMonthForLastDay, 0).getDate();\n      const dayForGenerateMonth = activeDay > lastDayOfNextMonth ? lastDayOfNextMonth : activeDay;\n\n      current = new Date(date.getFullYear(), date.getMonth() + 1, dayForGenerateMonth);\n    }\n\n    return monthData;\n  }\n\n  // Closes the date picker when the tab key is pressed.\n  private closeOnTabOut(): void {\n    this.datepickerInner.stickerRef.hide();\n  }\n\n  // Checks if the given date is the current date.\n  private isCurrentDate(date: Date): boolean {\n    const currentDay = new Date().getDate();\n    const month = date.getMonth();\n    const year = date.getFullYear();\n\n    return compareDate(new Date(year, month, currentDay), new Date()) === 0;\n  }\n\n  // Checks if the given date is the active month.\n  private isActiveMonth(date: Date): boolean {\n    const firstDay = 1;\n    const selectedDate = new Date(this.datepickerInner.selectedDate.year, this.datepickerInner.selectedDate.month, firstDay);\n\n    date = new Date(date.getFullYear(), date.getMonth(), firstDay);\n\n    return compareDate(date, selectedDate) === 0 && !!this.datepickerInner.selectedDate.day;\n  }\n\n  // Checks if the given date is disabled.\n  private disabled(date: Date): boolean {\n    return this.isMinDate(date) || this.isMaxDate(date);\n  }\n\n  // Checks if the given date is before the minimum allowed date.\n  private isMinDate(date: Date): boolean {\n    if (this.datepickerInner.minDate) {\n      const minDate = this.datepickerInner.minDate;\n      const firstDayOfDate = this.getFirstDayOfDate(date);\n      const firstDayOfMinDate = this.getFirstDayOfDate(this.datepickerInner.minDate);\n      const lastDayOfDate = this.getLastDayOfDate(date);\n      const isLastDayOfMonthDisabled = compareDate(lastDayOfDate, minDate) === 0;\n      let result = isLastDayOfMonthDisabled;\n\n      if (!result) {\n        result = compareDate(firstDayOfDate, firstDayOfMinDate) < 0;\n      }\n\n      return result;\n    }\n  }\n\n  // Checks if the given date is after the maximum allowed date.\n  private isMaxDate(date: Date): boolean {\n    if (this.datepickerInner.maxDate) {\n      const maxDate = this.datepickerInner.maxDate;\n      const firstDayOfDate = this.getFirstDayOfDate(date);\n      const firstDayOfMaxDate = this.getFirstDayOfDate(this.datepickerInner.maxDate);\n      const isFirstDayOfMonthDisabled = compareDate(firstDayOfDate, maxDate) === 0;\n      let result = isFirstDayOfMonthDisabled;\n\n      if (!result) {\n        result = compareDate(firstDayOfDate, firstDayOfMaxDate) > 0;\n      }\n\n      return result;\n    }\n  }\n\n  // Gets the first day of the given date's month.\n  private getFirstDayOfDate(date: Date): Date {\n    const month = date.getMonth();\n    const year = date.getFullYear();\n\n    return new Date(year, month, 1);\n  }\n\n  // Gets the last day of the given date's month.\n  private getLastDayOfDate(date: Date): Date {\n    const month = date.getMonth();\n    const year = date.getFullYear();\n\n    return new Date(year, month + 1, 0);\n  }\n}\n","<div class=\"dds-monthpicker\"\n     [ngClass]=\"{'dds-monthpicker_inverse': isInverse}\"\n     role=\"listbox\"\n     data-qa=\"month-picker\"\n     (keydown)=\"onKeydown($event)\"\n     (mouseenter)=\"onDateWrapMouseenter()\"\n     (mouseleave)=\"onDateWrapMouseleave()\"\n     #monthpicker>\n  @for (month of monthList; track month) {\n    <dds-button [theme]=\"btnOptions.theme\"\n                [kind]=\"getButtonKind(month)\"\n                [width]=\"btnOptions.width\"\n                [isInverse]=\"isInverse\"\n                [disabled]=\"month.disabled\"\n                [ngClass]=\"{\n                  'dds-datepicker__item_current': month.isCurrent,\n                  'dds-datepicker__item_active': month.isActive\n                }\"\n                [ariaLabel]=\"month.date | date:'MMMM yyyy'\"\n                [ariaSelected]=\"month.isActive\"\n                role=\"option\"\n                class=\"dds-datepicker__item dds-monthpicker__item\"\n                (clicked)=\"selectMonth(month, $event)\">\n      {{month.date | i18nDate: monthPickerFormat}}\n    </dds-button>\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\nimport { ButtonModule, ButtonOptions } from '@usitsdasdesign/dds-ng/button';\nimport { DestroyCtor, DestroyMixin, I18nCtor, I18nMixin } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { ButtonKind, KeyCodes, Themes, WidthState } from '@usitsdasdesign/dds-ng/shared';\nimport { I18nService, ITranslation } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { takeUntil } from 'rxjs/operators';\nimport { DATEPICKER_BTN, NUMBER_YEARS_OF_CALENDAR, YEARS_PER_ROW, YEAR_PICKER_FORMAT } from '../constants';\nimport { compareDate, compareYears, getFirstDayAndMonthOfDate, getIndexFocusedItem, getLastDayAndMonthOfDate, isCurrentDate } from '../date.utils';\nimport type { DatepickerInnerComponent } from '../datepicker-inner/datepicker-inner.component';\nimport { DATEPICKER_INNER } from '../datepicker.token';\nimport { DatepickerItem, DatepickerStates, DatepickerYearsActions } from '../typings';\n\nconst YearpickerBase: DestroyCtor & I18nCtor = DestroyMixin(I18nMixin());\n@Component({\n  selector: 'dds-yearpicker',\n  templateUrl: './yearpicker.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    CommonModule,\n    ButtonModule\n  ]\n})\nexport class YearpickerComponent extends YearpickerBase implements OnInit {\n  // List of years to be displayed in the year picker.\n  public yearList: DatepickerItem[];\n\n  // Options for the button used in the year picker.\n  public btnOptions: ButtonOptions = {\n    theme: Themes.dark,\n    width: WidthState.full,\n    kind: ButtonKind.silent,\n  };\n\n  // Date to be disabled in the year picker.\n  public disabledDate: Date;\n\n  // Flag to disable the previous year button.\n  public disabledBtnPrev: boolean;\n\n  // Flag to disable the next year button.\n  public disabledBtnNext: boolean;\n\n  // Actions for the year picker.\n  public calendarYearsActions = DatepickerYearsActions;\n\n  // Format for the year picker.\n  public yearPickerFormat = YEAR_PICKER_FORMAT;\n\n  // ARIA label for the previous year button.\n  public prevYearBtnAriaLabel: string;\n\n  // ARIA label for the next year button.\n  public nextYearBtnAriaLabel: string;\n\n  // ARIA label for the year value.\n  public yearValueAriaLabel: string;\n\n  // Flag to indicate if the year picker is in inverse mode.\n  public isInverse: boolean;\n\n  private firstYear: Date;\n\n  @ViewChild('yearpicker') yearpicker: ElementRef;\n\n  constructor(\n    @Inject(DATEPICKER_INNER) private datepickerInner: DatepickerInnerComponent,\n    public i18n: I18nService,\n    public cdr: ChangeDetectorRef\n  ) {\n    super();\n    this.isInverse = datepickerInner.isInverse;\n  }\n\n  // Lifecycle hook that is called after data-bound properties are initialized.\n  public ngOnInit(): void {\n    this.yearList = this.getYears();\n    this.checkDisabledBtn();\n    this.datepickerInner.changeYearAction.pipe(takeUntil(this.destroy)).subscribe((action) => {\n      this.changeYear(action);\n      this.cdr.markForCheck();\n    });\n    super.ngOnInit();\n  }\n\n  // Gets the button kind based on the year.\n  public getButtonKind(year: DatepickerItem): string {\n    return year.isActive && this.datepickerInner.selectedDate.year ? ButtonKind.primaryLoud : ButtonKind.silent;\n  }\n\n  // Changes the year based on the action.\n  public changeYear(action: string): void {\n    const activeMonth = this.datepickerInner.value.getMonth();\n    const activeDay = this.datepickerInner.value.getDate();\n    const firstYearInList: number = this.yearList[0].value;\n    const lastYearInList: number = this.yearList[this.yearList.length - 1].value;\n\n    switch (action) {\n      case DatepickerYearsActions.prev:\n        this.firstYear = new Date(firstYearInList - NUMBER_YEARS_OF_CALENDAR, activeMonth, activeDay);\n        this.yearList = this.getYears();\n        break;\n      case DatepickerYearsActions.next:\n        this.firstYear = new Date(lastYearInList + 1, activeMonth, activeDay);\n        this.yearList = this.getYears();\n        break;\n    }\n\n    this.checkDisabledBtn();\n  }\n\n  // Selects a year.\n  public selectYear(year: DatepickerItem, event: Event) {\n    event.stopPropagation();\n    this.datepickerInner.selectDate(DatepickerStates.year, year);\n    this.yearList = this.getYears();\n  }\n\n  // Gets the ARIA label for the year.\n  public getAriaLabel(year: string): string {\n    return year + ' ' + this.yearValueAriaLabel;\n  }\n\n  // Handles keydown events for the year picker.\n  public onKeydown(event: KeyboardEvent): void {\n    const btnElmts = this.yearpicker.nativeElement.querySelectorAll(DATEPICKER_BTN);\n    const currentItems = [...btnElmts].filter((item) => !item.disabled);\n    const indexFocusedItem = getIndexFocusedItem(currentItems);\n\n    switch (event.keyCode) {\n      case KeyCodes.TAB:\n      case event.shiftKey && KeyCodes.TAB:\n        event.preventDefault();\n        this.closeOnTabOut();\n        break;\n\n      case KeyCodes.ARROW_LEFT:\n        const indexPrev = indexFocusedItem - 1;\n\n        event.preventDefault();\n        if (this.datepickerInner.isRange) {\n          this.datepickerInner.focusRangeItem(this.yearpicker, currentItems, indexPrev, this.yearpicker, KeyCodes.ARROW_LEFT);\n        } else {\n          this.datepickerInner.focusPrevItem(this.yearpicker, currentItems, indexPrev);\n        }\n        break;\n\n      case KeyCodes.ARROW_UP:\n        const indexPrevWeek = indexFocusedItem - YEARS_PER_ROW;\n        const headerBtnElmts = this.datepickerInner.datepickerHeader.nativeElement.querySelectorAll(DATEPICKER_BTN);\n\n        event.preventDefault();\n        if (indexPrevWeek < 0) {\n          this.datepickerInner.focusPrevItem(\n            this.datepickerInner.datepickerHeader,\n            headerBtnElmts,\n            headerBtnElmts.length - 1,\n            this.yearpicker\n          );\n        } else {\n          this.datepickerInner.focusPrevItem(this.yearpicker, currentItems, indexPrevWeek);\n        }\n\n        break;\n\n      case KeyCodes.ARROW_RIGHT:\n        const indexNext = indexFocusedItem + 1;\n\n        event.preventDefault();\n        if (this.datepickerInner.isRange) {\n          this.datepickerInner.focusRangeItem(this.yearpicker, currentItems, indexNext, this.yearpicker, KeyCodes.ARROW_RIGHT);\n        } else {\n          this.datepickerInner.focusNextItem(this.yearpicker, currentItems, indexNext);\n        }\n        break;\n\n      case KeyCodes.ARROW_DOWN:\n        const indexNextWeek = indexFocusedItem + YEARS_PER_ROW;\n\n        event.preventDefault();\n        this.datepickerInner.focusNextItem(this.yearpicker, currentItems, indexNextWeek);\n        break;\n    }\n  }\n\n  // Handles mouse enter event on the date wrap.\n  public onDateWrapMouseenter(): void {\n    this.datepickerInner.dateWrapMouseenter.emit();\n  }\n\n  // Handles mouse leave event on the date wrap.\n  public onDateWrapMouseleave(): void {\n    this.datepickerInner.dateWrapMouseleave.emit();\n  }\n\n  // Gets the list of years to be displayed in the year picker.\n  private getYears(): DatepickerItem[] {\n    const yearData: DatepickerItem[] = [];\n    let current =\n      this.firstYear ||\n      new Date(this.datepickerInner.value.getFullYear() - 4, this.datepickerInner.value.getMonth(), this.datepickerInner.value.getDate());\n    let i = 0;\n    let date: Date;\n\n    while (i < NUMBER_YEARS_OF_CALENDAR) {\n      date = current;\n      yearData[i++] = {\n        date: date,\n        value: current.getFullYear(),\n        isActive: this.isActive(date),\n        disabled: this.disabled(date),\n        isCurrent: isCurrentDate(date),\n      };\n      current = new Date(date.getFullYear() + 1, date.getMonth(), date.getDate());\n    }\n\n    return yearData;\n  }\n\n  // Closes the datepicker on tab out.\n  private closeOnTabOut(): void {\n    this.datepickerInner.stickerRef.hide();\n  }\n\n  // Checks if the given date is active.\n  private isActive(date: Date): boolean {\n    const selectedDate = new Date(\n      this.datepickerInner.selectedDate.year,\n      this.datepickerInner.selectedDate.month,\n      this.datepickerInner.selectedDate.day\n    );\n    return compareYears(date, selectedDate) === 0;\n  }\n\n  // Checks if the given date is disabled.\n  private disabled(date: Date): boolean {\n    return this.isMinDate(date) || this.isMaxDate(date);\n  }\n\n  // Sets the i18n texts for the component.\n  protected setI18nTexts(translation: ITranslation): void {\n    this.prevYearBtnAriaLabel = translation.DATEPICKER.A11Y.PREV_YEAR_BTN_ARIA_LABEL;\n    this.nextYearBtnAriaLabel = translation.DATEPICKER.A11Y.NEXT_YEAR_BTN_ARIA_LABEL;\n    this.yearValueAriaLabel = translation.DATEPICKER.A11Y.YEAR_VALUE_ARIA_LABEL;\n    this.cdr.detectChanges();\n  }\n\n  // Checks if the given date is the minimum date.\n  private isMinDate(date: Date): boolean {\n    if (this.datepickerInner.minDate) {\n      const minDate = this.datepickerInner.minDate;\n      const lastDayAndMonthOfDate = getLastDayAndMonthOfDate(date);\n      const isLastMonthOfYearDisabled = compareDate(lastDayAndMonthOfDate, minDate) === 0;\n\n      return isLastMonthOfYearDisabled || compareYears(date, minDate) < 0;\n    }\n  }\n\n  // Checks if the given date is the maximum date.\n  private isMaxDate(date: Date): boolean {\n    if (this.datepickerInner.maxDate) {\n      const maxDate = this.datepickerInner.maxDate;\n      const firstDayAndMonthOfDate = getFirstDayAndMonthOfDate(date);\n      const isFirstMonthOfYearDisabled = compareDate(firstDayAndMonthOfDate, maxDate) === 0;\n\n      return isFirstMonthOfYearDisabled || compareYears(date, maxDate) > 0;\n    }\n  }\n\n  // Checks if the previous and next buttons should be disabled.\n  private checkDisabledBtn(): void {\n    const firstYearInList: number = this.yearList[0].value;\n    const lastYearInList: number = this.yearList[this.yearList.length - 1].value;\n\n    this.disabledBtnPrev = this.isMinDate(new Date(firstYearInList - 1, 0, 1));\n    this.disabledBtnNext = this.isMaxDate(new Date(lastYearInList + 1, 0, 1));\n  }\n}\n","<div class=\"dds-yearpicker\"\n     [ngClass]=\"{'dds-yearpicker_inverse': isInverse}\"\n     role=\"listbox\"\n     data-qa=\"year-picker\"\n     (keydown)=\"onKeydown($event)\"\n     (mouseenter)=\"onDateWrapMouseenter()\"\n     (mouseleave)=\"onDateWrapMouseleave()\"\n     #yearpicker>\n  @for (year of yearList; track year) {\n    <dds-button [theme]=\"btnOptions.theme\"\n                [kind]=\"getButtonKind(year)\"\n                [width]=\"btnOptions.width\"\n                [isInverse]=\"isInverse\"\n                [disabled]=\"year.disabled\"\n                [ngClass]=\"{\n                  'dds-datepicker__item_current': year.isCurrent,\n                  'dds-datepicker__item_active': year.isActive\n                }\"\n                [ariaLabel]=\"getAriaLabel(year.date | date: 'yyyy')\"\n                [ariaSelected]=\"year.isActive\"\n                role=\"option\"\n                class=\"dds-datepicker__item dds-yearpicker__item\"\n                (clicked)=\"selectYear(year, $event)\">\n      {{year.date | date: yearPickerFormat}}\n    </dds-button>\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Inject,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  Renderer2,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { ButtonModule, ButtonOptions } from '@usitsdasdesign/dds-ng/button';\nimport { DestroyCtor, DestroyMixin, ResponsivenessCtor, ResponsivenessMixin } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { generateId } from '@usitsdasdesign/dds-ng/core/utils';\nimport { AdditionalClass, ButtonKind, Devices, KeyCodes, Size, Themes } from '@usitsdasdesign/dds-ng/shared';\nimport { I18nModule } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { ResizeHandlerService } from '@usitsdasdesign/dds-ng/shared/resize-handler';\nimport { StickerDirective } from '@usitsdasdesign/dds-ng/sticker';\nimport { Subject } from 'rxjs';\nimport {\n  BTN_ACTIVE_DATE,\n  BTN_CURRENT_DATE,\n  DATEPICKER_BTN,\n  DEFAULT_DATEPICKER_MODE,\n  HEADER_MONTH_FORMAT,\n  HEADER_YEAR_FORMAT,\n  RANGE_MAX_LENGTH,\n} from '../constants';\nimport { getIndexFocusedItem, setTimeToDate } from '../date.utils';\nimport { DATEPICKER, DATEPICKER_INNER, DATERANGEPICKER } from '../datepicker.token';\nimport type { DatepickerComponent } from '../datepicker/datepicker.component';\nimport type { DaterangepickerComponent } from '../daterangepicker/daterangepicker.component';\nimport { DaypickerComponent } from '../daypicker/daypicker.component';\nimport { MonthpickerComponent } from '../monthpicker/monthpicker.component';\nimport {\n  DatepickerItem,\n  DatepickerStates,\n  DatepickerYearsActions,\n  DaterangepickerHeaderOption,\n  DisabledDates,\n  SelectedDate,\n} from '../typings';\nimport { YearpickerComponent } from '../yearpicker/yearpicker.component';\n\nconst DatepickerInnerBase: DestroyCtor & ResponsivenessCtor = DestroyMixin(ResponsivenessMixin());\n\n@Component({\n  selector: 'dds-datepicker-inner',\n  templateUrl: './datepicker-inner.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: DATEPICKER_INNER,\n      useExisting: DatepickerInnerComponent,\n    },\n  ],\n  standalone: true,\n  imports: [CommonModule, ButtonModule, DaypickerComponent, MonthpickerComponent, YearpickerComponent, I18nModule],\n})\nexport class DatepickerInnerComponent extends DatepickerInnerBase implements OnInit, AfterViewInit, OnChanges {\n  // Host binding to add a CSS class to the host element\n  @HostBinding('class') class = AdditionalClass.flex;\n\n  // Input properties to receive data from parent component\n  @Input() rangeValue: Date[];\n  @Input() minDate: Date;\n  @Input() maxDate: Date;\n  @Input() startState: DatepickerStates | string;\n  @Input() startDate: Date;\n  @Input() minMode: DatepickerStates | string = DEFAULT_DATEPICKER_MODE;\n  @Input() hovered: Date;\n  @Input() openedDate: Date;\n  @Input() isInverse: boolean;\n  @Input() isRange: boolean;\n  @Input() isRangepickerEnd = false;\n  @Input() stickerRef: StickerDirective;\n  @Input() isResponsive = true;\n  @Input() ariaLabel: string = 'Datepicker navigation';\n  @Input() value: Date;\n  @Input() disabledDates: DisabledDates;\n\n  // Output events to emit data to parent component\n  @Output() afterViewInited = new EventEmitter<DatepickerInnerComponent>();\n  @Output() dateChanged = new EventEmitter<Date>();\n  @Output() dateHovered = new EventEmitter<Date>();\n  @Output() dateWrapMouseenter = new EventEmitter<void>();\n  @Output() dateWrapMouseleave = new EventEmitter<void>();\n  @Output() pickerChanged = new EventEmitter<DaterangepickerHeaderOption>();\n\n  // ViewChild to access DOM elements\n  @ViewChild('datepicker') datepicker: ElementRef;\n  @ViewChild('datepickerHeader') datepickerHeader: ElementRef;\n  @ViewChild('datepickerBody') datepickerBody: ElementRef;\n\n  // Host listener to handle click events\n  @HostListener('click', ['$event'])\n  onClick(event: MouseEvent) {\n    event.stopPropagation();\n  }\n\n  // Public properties\n  public activeState: DatepickerStates | string = DEFAULT_DATEPICKER_MODE;\n  public btnOptions: ButtonOptions = {\n    theme: Themes.dark,\n    kind: ButtonKind.silent,\n  };\n  public headerMonthFormat: string = HEADER_MONTH_FORMAT;\n  public headerYearFormat: string = HEADER_YEAR_FORMAT;\n  public datepickerStates = DatepickerStates;\n  public isMinModeYear: boolean;\n  public selectedDate: SelectedDate = {};\n  public status: Subject<void> = new Subject();\n  public disabledDate: Date;\n  public btnSize: Size;\n  public isFocusEmpty = true;\n  public changeYearAction = new EventEmitter<DatepickerYearsActions>();\n  public tableId = generateId();\n\n  // Getter to determine the button kind for month\n  get monthBtnKind(): ButtonKind {\n    return this.activeState === this.datepickerStates.month ? ButtonKind.primaryLoud : ButtonKind.silent;\n  }\n\n  // Getter to determine the button kind for year\n  get yearBtnKind(): ButtonKind {\n    return this.activeState === this.datepickerStates.year ? ButtonKind.primaryLoud : ButtonKind.silent;\n  }\n\n  constructor(\n    private renderer: Renderer2,\n    public resizeService: ResizeHandlerService,\n    public cdr: ChangeDetectorRef,\n    public el: ElementRef,\n    @Optional() @Inject(DATEPICKER) public datepickerComponent: DatepickerComponent,\n    @Optional() @Inject(DATERANGEPICKER) public daterangepickerComponent: DaterangepickerComponent\n  ) {\n    super();\n  }\n\n  public ngOnInit(): void {\n    this.setDefaultStartState();\n    super.ngOnInit();\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes.value?.currentValue) {\n      this.setSelectedDate();\n    }\n    if (changes.openedDate && !this.value) {\n      this.value = this.value || changes.openedDate.currentValue || new Date();\n    }\n    if (changes.startState) {\n      this.activeState = this.startState;\n    }\n    if (changes.minMode && changes.minMode.currentValue) {\n      this.activeState = this.minMode;\n      this.isMinModeYear = changes.minMode.currentValue === DatepickerStates.year;\n    }\n    if (changes.startDate) {\n      this.value = this.startDate;\n    }\n    if (changes.rangeValue) {\n      this.checkRangeValue(changes.rangeValue.currentValue);\n    }\n    if (changes.value || changes.startDate || changes.rangeValue) {\n      this.status.next();\n      this.checkFirstSelectedEndPicker();\n    }\n  }\n\n  public ngAfterViewInit() {\n    if (!this.isRangepickerEnd) {\n      this.datepicker.nativeElement.focus();\n    }\n\n    if (this.datepickerComponent?.keyboardStatus || (this.daterangepickerComponent?.keyboardStatus && !this.isRangepickerEnd)) {\n      this.focusDate();\n    }\n\n    this.afterViewInited.emit(this);\n  }\n\n  // Method to change the active state of the datepicker\n  public changeState(state: DatepickerStates): void {\n    this.activeState = state;\n    this.focusFirstEl();\n  }\n\n  // Method to change the view date based on the active state\n  public changeViewDate(isNext = false): void {\n    const currentYear = this.value.getFullYear();\n    const currentMonth = this.value.getMonth();\n    const currentDay = this.value.getDate();\n\n    switch (this.activeState) {\n      case DatepickerStates.day:\n        const month = isNext ? currentMonth + 1 : currentMonth - 1;\n        this.value = new Date(currentYear, month, currentDay);\n        break;\n      case DatepickerStates.month:\n        const year = isNext ? currentYear + 1 : currentYear - 1;\n        this.value = new Date(year, currentMonth, currentDay);\n        break;\n      case DatepickerStates.year:\n        this.changeYearAction.emit(isNext ? DatepickerYearsActions.next : DatepickerYearsActions.prev);\n        break;\n    }\n  }\n\n  // Method to select a date based on the active state\n  public selectDate(state: DatepickerStates, data: DatepickerItem): void {\n    switch (state) {\n      case DatepickerStates.year:\n        if (this.minMode === DatepickerStates.year) {\n          // set the first number/month in the calendar\n          this.value = setTimeToDate(new Date(data.value, 0, 1));\n          this.setSelectedDate();\n          this.dateChanged.emit(this.value);\n        } else {\n          this.value = data.date;\n          this.changeState(DatepickerStates.month);\n        }\n        break;\n      case DatepickerStates.month:\n        if (this.minMode === DatepickerStates.month) {\n          // set the first number in the calendar\n          this.value = setTimeToDate(new Date(this.value.getFullYear(), data.value, 1));\n          this.setSelectedDate();\n          this.dateChanged.emit(this.value);\n        } else {\n          this.value = data.date;\n          this.changeState(DatepickerStates.day);\n        }\n        break;\n      case DatepickerStates.day:\n        this.value = setTimeToDate(data.date);\n        this.setSelectedDate();\n        this.dateChanged.emit(this.value);\n        break;\n    }\n  }\n\n  // Method to handle keyboard events\n  public onKeydown(event: KeyboardEvent): void {\n    if (this.isFocusEmpty) {\n      switch (event.keyCode) {\n        case KeyCodes.TAB:\n        case event.shiftKey && KeyCodes.TAB:\n          event.preventDefault();\n          this.closeOnTabOut();\n          break;\n        case KeyCodes.ARROW_UP:\n        case KeyCodes.ARROW_DOWN:\n        case KeyCodes.ARROW_LEFT:\n        case KeyCodes.ARROW_RIGHT:\n          event.preventDefault();\n          this.focusDate();\n          break;\n      }\n    }\n  }\n\n  // Method to handle keyboard events on the header\n  public onHeaderKeydown(event: KeyboardEvent): void {\n    const headerBtnElmts = this.datepickerHeader.nativeElement.querySelectorAll(DATEPICKER_BTN);\n    const indexFocusedItem = getIndexFocusedItem(headerBtnElmts);\n    switch (event.keyCode) {\n      case KeyCodes.TAB:\n      case event.shiftKey && KeyCodes.TAB:\n        event.preventDefault();\n        this.closeOnTabOut();\n        break;\n      case KeyCodes.ARROW_UP:\n        event.preventDefault();\n        break;\n      case KeyCodes.ARROW_DOWN:\n        event.preventDefault();\n        const btnElmts = Array.from(this.datepickerBody.nativeElement.querySelectorAll(DATEPICKER_BTN));\n        const filteredBtns = (btnElmts as HTMLButtonElement[]).filter((btn: HTMLButtonElement) => !btn.disabled);\n\n        this.focusNextItem(this.datepickerBody, filteredBtns, 0, this.datepickerHeader);\n        break;\n      case KeyCodes.ARROW_LEFT:\n        event.preventDefault();\n        const indexPrev = indexFocusedItem - 1;\n\n        if (this.isRange) {\n          this.focusRangeItem(this.datepickerHeader, headerBtnElmts, indexPrev, this.datepickerHeader, KeyCodes.ARROW_LEFT, true);\n        } else {\n          this.focusPrevItem(this.datepickerHeader, headerBtnElmts, indexPrev);\n        }\n        break;\n      case KeyCodes.ARROW_RIGHT:\n        event.preventDefault();\n        const indexNext = indexFocusedItem + 1;\n\n        if (this.isRange) {\n          this.focusRangeItem(this.datepickerHeader, headerBtnElmts, indexNext, this.datepickerHeader, KeyCodes.ARROW_RIGHT, true);\n        } else {\n          this.focusNextItem(this.datepickerHeader, headerBtnElmts, indexNext);\n        }\n        break;\n    }\n  }\n\n  // Method to focus the previous item in the picker\n  public focusPrevItem(picker: ElementRef, items: HTMLButtonElement[], elIndex: number, removeFrom?: ElementRef): void {\n    if (items[elIndex]) {\n      this.setFocus(items[elIndex], picker, removeFrom);\n    } else {\n      this.setFocus(items[items.length - 1], picker, removeFrom);\n    }\n  }\n\n  // Method to focus the next item in the picker\n  public focusNextItem(picker: ElementRef, items: HTMLButtonElement[], elIndex: number, removeFrom?: ElementRef): void {\n    if (items[elIndex]) {\n      this.setFocus(items[elIndex], picker, removeFrom);\n    } else {\n      this.setFocus(items[0], picker, removeFrom);\n    }\n  }\n\n  // Method to focus the range item in the picker\n  public focusRangeItem(\n    picker: ElementRef,\n    items: HTMLButtonElement[],\n    elIndex: number,\n    removeFrom?: ElementRef,\n    keycode?: KeyCodes.ARROW_LEFT | KeyCodes.ARROW_RIGHT,\n    isHeaderBtns = false\n  ): void {\n    if (items[elIndex]) {\n      this.setFocus(items[elIndex], picker, removeFrom);\n    } else {\n      this.pickerChanged.emit({ isEndPicker: this.isRangepickerEnd, isHeaderBtns: isHeaderBtns, directionKeycode: keycode });\n    }\n  }\n\n  // Method to close the datepicker on tab out\n  private closeOnTabOut(): void {\n    this.stickerRef.hide();\n  }\n\n  // Method to set focus on an element\n  private setFocus(el: HTMLButtonElement, picker: ElementRef, removeFrom?: ElementRef): void {\n    if (!el.disabled) {\n      const focusedEl = removeFrom\n        ? removeFrom.nativeElement.querySelector(`.${AdditionalClass.keyboardFocus}`)\n        : picker.nativeElement.querySelector(`.${AdditionalClass.keyboardFocus}`);\n\n      this.focusReset(focusedEl);\n      this.renderer.addClass(el, AdditionalClass.keyboardFocus);\n      el.focus();\n    }\n  }\n\n  // Method to focus the first element in the picker\n  private focusFirstEl(): void {\n    const firstBtn = this.datepickerHeader.nativeElement.querySelector(DATEPICKER_BTN);\n    const focusedEl = this.datepickerHeader.nativeElement.querySelector(`.${AdditionalClass.keyboardFocus}`);\n\n    firstBtn.focus();\n\n    if (!this.isFocusEmpty) {\n      this.focusReset(focusedEl);\n      this.renderer.addClass(firstBtn, AdditionalClass.keyboardFocus);\n    }\n  }\n\n  // Method to focus the date element\n  public focusDate(): void {\n    const selectedEl = this.datepickerBody.nativeElement.querySelector(`${BTN_ACTIVE_DATE} ${DATEPICKER_BTN}`);\n    const firstEl = this.datepickerBody.nativeElement.querySelector(`.dds-daypicker__item ${DATEPICKER_BTN}`);\n    let focusEl = this.datepickerBody.nativeElement.querySelector(`${BTN_CURRENT_DATE} ${DATEPICKER_BTN}`);\n\n    if (selectedEl || !focusEl) {\n      focusEl = selectedEl || firstEl;\n    }\n\n    focusEl.focus();\n    this.renderer.addClass(focusEl, AdditionalClass.keyboardFocus);\n    this.isFocusEmpty = false;\n  }\n\n  // Method to reset the focus on an element\n  private focusReset(focusedEl: HTMLElement): void {\n    if (focusedEl) {\n      this.renderer.removeClass(focusedEl, AdditionalClass.keyboardFocus);\n    }\n  }\n\n  // Method to check the first selected end picker\n  private checkFirstSelectedEndPicker(): void {\n    if (this.rangeValue?.length < RANGE_MAX_LENGTH && this.isRangepickerEnd) {\n      this.selectedDate.day = null;\n    } else if (this.rangeValue) {\n      this.setDefaultStartState();\n      this.selectedDate.day = this.rangeValue[0].getDate();\n    }\n  }\n\n  // Method to check the range value\n  private checkRangeValue(rangeValue: Date[]): void {\n    if (rangeValue) {\n      this.setSelectedDate();\n    } else {\n      this.selectedDate = {};\n    }\n  }\n\n  // Method to set the selected date\n  private setSelectedDate(): void {\n    if (this.datepickerComponent) this.datepickerComponent.isSelected = true;\n    this.selectedDate = {\n      year: this.value?.getFullYear(),\n      month: this.value?.getMonth(),\n      day: this.value?.getDate(),\n    };\n  }\n\n  // Method to set the default start state\n  private setDefaultStartState(): void {\n    this.activeState = this.startState || this.minMode || DEFAULT_DATEPICKER_MODE;\n  }\n\n  // Method to check the device type and set button size accordingly\n  protected checkDevice(device: Devices): void {\n    this.btnSize = device === Devices.desktop ? Size.md : Size.lg;\n\n    this.cdr.detectChanges();\n  }\n}\n","<div class=\"dds-datepicker\"\n     [ngClass]=\"{'dds-datepicker_inverse': isInverse}\"\n     tabindex=\"0\"\n     data-qa=\"datepicker-inner\"\n     (keydown)=\"onKeydown($event)\"\n     #datepicker>\n  <!-- datepicker header -->\n  <div class=\"dds-datepicker__header\"\n       role=\"toolbar\"\n       [attr.aria-label]=\"ariaLabel\"\n       [attr.aria-controls]=\"tableId\"\n       (keydown)=\"onHeaderKeydown($event)\"\n       #datepickerHeader>\n    <dds-button [theme]=\"btnOptions.theme\"\n                kind=\"silent\"\n                [size]=\"btnSize\"\n                [isInverse]=\"isInverse\"\n                icon=\"dds-icon_arrow-left\"\n                ariaLabel=\"previous\"\n                data-qa=\"datepicker-inner-button\"\n                class=\"dds-datepicker__header-btn dds-datepicker__header-btn_prev\"\n                (clicked)=\"changeViewDate()\">\n    </dds-button>\n\n    @if (!isMinModeYear) {\n    <dds-button [theme]=\"btnOptions.theme\"\n                [kind]=\"monthBtnKind\"\n                [size]=\"btnSize\"\n                [isInverse]=\"isInverse\"\n                [disabled]=\"btnOptions.disabled\"\n                [ariaLabel]=\"value | i18nDate: headerMonthFormat\"\n                data-qa=\"datepicker-inner-button\"\n                (clicked)=\"changeState(datepickerStates.month)\">\n      {{value | i18nDate: headerMonthFormat}}\n    </dds-button>\n    }\n\n    <dds-button [theme]=\"btnOptions.theme\"\n                [kind]=\"yearBtnKind\"\n                [size]=\"btnSize\"\n                [isInverse]=\"isInverse\"\n                [disabled]=\"btnOptions.disabled\"\n                [ariaLabel]=\"value | i18nDate: headerYearFormat\"\n                data-qa=\"datepicker-inner-button\"\n                (clicked)=\"changeState(datepickerStates.year)\">\n      {{value | i18nDate: headerYearFormat}}\n    </dds-button>\n\n    <dds-button [theme]=\"btnOptions.theme\"\n                kind=\"silent\"\n                [size]=\"btnSize\"\n                [isInverse]=\"isInverse\"\n                icon=\"dds-icon_arrow-right\"\n                ariaLabel=\"next\"\n                data-qa=\"datepicker-inner-button\"\n                class=\"dds-datepicker__header-btn dds-datepicker__header-btn_next\"\n                (clicked)=\"changeViewDate(true)\">\n    </dds-button>\n  </div>\n  <!-- datepicker header END -->\n\n  <!-- datepicker body -->\n  <div class=\"dds-datepicker__body\"\n       [id]=\"tableId\"\n       #datepickerBody>\n    @switch (activeState) {\n    @case (datepickerStates.day) {\n    <dds-daypicker [hovered]=\"hovered\"\n                   [value]=\"value\"\n                   [disabledDates]=\"disabledDates\"></dds-daypicker>\n    }\n    @case (datepickerStates.month) {\n    <dds-monthpicker [value]=\"value\"></dds-monthpicker>\n    }\n    @case (datepickerStates.year) {\n    <dds-yearpicker></dds-yearpicker>\n    }\n    }\n  </div>\n  <!-- datepicker body END-->\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  Self,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { FormGroupDirective, FormsModule, NgControl, NgForm } from '@angular/forms';\nimport { ButtonModule } from '@usitsdasdesign/dds-ng/button';\nimport {\n  DestroyCtor,\n  DestroyMixin,\n  ErrorStateCtor,\n  ErrorStateMixin,\n  FormAccessorCtor,\n  FormAccessorMixin,\n  I18nCtor,\n  I18nMixin,\n  ResponsivenessCtor,\n  ResponsivenessMixin,\n} from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { coerceBooleanProperty, generateId } from '@usitsdasdesign/dds-ng/core/utils';\nimport { AdditionalClass, Devices, ErrorState, KeyCodes, LabelPosition, PositionState, Size } from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { I18nModule, I18nService, ITranslation } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { ResizeHandlerModule, ResizeHandlerService } from '@usitsdasdesign/dds-ng/shared/resize-handler';\nimport { StickerDirective, StickerModule } from '@usitsdasdesign/dds-ng/sticker';\nimport { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { DATEPICKER_WIDTH, DATEPICKER_WIDTH_TABLET, DEFAULT_DATEPICKER_MODE, DEFAULT_ICON, DEFAULT_PLACEHOLDER, SHIFT } from '../constants';\nimport {\n  getDateWithMinMode,\n  getDateWithZeroTime,\n  getMaskByFormat,\n  getNextDay,\n  getPrevDay,\n  includeDisabledDates,\n  includeDisabledDays,\n  includeDisabledDaysOfMonth,\n  includeDisabledRanges,\n  isValidDate,\n  parseDateByFormat,\n} from '../date.utils';\nimport { DatepickerInnerComponent } from '../datepicker-inner/datepicker-inner.component';\nimport { DATEPICKER } from '../datepicker.token';\nimport { DatepickerStates, DisabledDates } from '../typings';\n\nconst DatepickerBase: DestroyCtor & I18nCtor & ResponsivenessCtor & FormAccessorCtor & ErrorStateCtor = DestroyMixin(\n  I18nMixin(ResponsivenessMixin(FormAccessorMixin(ErrorStateMixin())))\n);\n\n@Component({\n  selector: 'dds-datepicker',\n  templateUrl: './datepicker.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: DATEPICKER,\n      useExisting: DatepickerComponent,\n    },\n    provideNgxMask(),\n  ],\n  standalone: true,\n  imports: [\n    CommonModule,\n    StickerModule,\n    ButtonModule,\n    FocusHandlerModule,\n    ResizeHandlerModule,\n    FormsModule,\n    I18nModule,\n    DatepickerInnerComponent,\n    NgxMaskDirective,\n  ],\n})\nexport class DatepickerComponent extends DatepickerBase implements OnInit, OnChanges {\n  // HostBinding to add disabled class and data-is-empty attribute\n  @HostBinding(`class.${AdditionalClass.disabled}`) @Input() disabled: boolean | undefined;\n  @HostBinding(`attr.data-is-empty`) isEmptyValue: boolean; // WalkMe\n\n  // Input properties for various configurations\n  @Input() label: string | undefined;\n  @Input() description: string | undefined;\n  @Input() errorMessage: string | undefined;\n  @Input() customClass: string | undefined;\n  @Input() placeholder: string | undefined = DEFAULT_PLACEHOLDER;\n  @Input() format: string | undefined = this.ddsConfig.getConfig().dateFormat;\n  @Input() icon: string | undefined = DEFAULT_ICON;\n  @Input() isError: boolean | undefined;\n  @Input() errorState: string | ErrorState | undefined = this.ddsConfig.getConfig().errorState;\n  @Input() minDate: Date | undefined;\n  @Input() maxDate: Date | undefined;\n  @Input() openedDate: Date | undefined;\n  @Input() labelPosition: LabelPosition | string | undefined = this.ddsConfig.getConfig().labelPosition;\n  @Input() size: Size | string | undefined = this.ddsConfig.getConfig().size;\n  @Input() startState: DatepickerStates | string | undefined;\n  @Input() minMode: DatepickerStates | string | undefined = DEFAULT_DATEPICKER_MODE;\n  @Input() isManualInput: boolean | undefined = true;\n  @Input() isResponsive: boolean | undefined = this.ddsConfig.getConfig().isResponsive;\n  @Input() inputByFormatMask: boolean | undefined;\n  @Input() isInverse: boolean | undefined;\n  @Input() readonly: boolean | undefined;\n  @Input() isRequired: boolean | undefined = false;\n  @Input() isUTCFormat: boolean | undefined = false;\n  @Input() disabledDates: DisabledDates | undefined;\n  @Input() isClearBtnEnabled: boolean | undefined = false;\n\n  // Sticker options\n  @Input() stickerPosition: PositionState | string | undefined = this.ddsConfig.getConfig().stickerPosition;\n  @Input() stickerIndent: number | undefined = this.ddsConfig.getConfig().stickerIndent;\n  @Input() stickerShift: number | undefined = SHIFT;\n  @Input() stickerMaxHeight: number | string | undefined;\n  @Input() stickerCustomClass: string | undefined;\n  @Input() stickerIsDisabled: boolean | undefined;\n  @Input() stickerIsDynamic: boolean | undefined = true;\n\n  // Getter and setter for value with validation\n  @Input() get value(): Date {\n    return this._value;\n  }\n  set value(value: Date) {\n    this.validDisabledDate(value).then((validValue) => {\n      this._value = validValue;\n      this.cdr.detectChanges();\n    });\n\n    this.checkIsEmpty();\n  }\n\n  // Output events for date changes and visibility changes\n  @Output() dateChanged = new EventEmitter<Date | string>();\n  @Output() onShown = new EventEmitter<void>();\n  @Output() onHidden = new EventEmitter<void>();\n\n  // ViewChild references for template elements\n  @ViewChild('stickerDir') sticker: StickerDirective;\n  @ViewChild('dateInput') dateInput: ElementRef<HTMLInputElement>;\n  @ViewChild('clearBtn') clearBtn: ElementRef<HTMLButtonElement>;\n  @ViewChild('datepickerBtn') datepickerBtn: ElementRef<HTMLElement>;\n\n  // Public properties for internal state management\n  public stickerIsOutsideClick = true;\n  public stickerWidth: number = DATEPICKER_WIDTH;\n  public calendarOpen: boolean = false;\n  public isSizeLg: boolean;\n  public isSizeSm: boolean;\n  public isExternalLabel: boolean;\n  public keyboardStatus: boolean;\n  public applyBtnText: string;\n  public isInputActive: boolean;\n  public applyBtnSize = Size.lg;\n  public maskForDate: string;\n  public popupAriaLabel: string;\n  public isSelected: boolean;\n  public inputValue: Date;\n  public descId = generateId();\n  public popupId = generateId();\n  public clearBtnAriaLabel: string;\n\n  // Private properties for internal state management\n  private _value: Date;\n  private currentDevice: Devices = Devices.desktop;\n  private selectedDateForMobile: Date;\n  private _minDate: Date;\n  private _maxDate: Date;\n\n  // Getter for calendar button aria label\n  public get calendarBtnAriaLabel(): string {\n    const isNotEmptyINput = this.i18n.joinByValue(`${this.value}`, '{{date}}', this.i18n.getTranslation()?.DATEPICKER.A11Y.CALENDAR_FILLED_BTN_ARIA_LABEL);\n    return !!this.value ? isNotEmptyINput : this.i18n.getTranslation()?.DATEPICKER.A11Y.CALENDAR_BTN_ARIA_LABEL;\n  }\n\n  // Constructor with dependency injection\n  constructor(\n    @Optional() @Self() public ngControl: NgControl,\n    @Optional() public parentForm: NgForm,\n    @Optional() public parentFormGroup: FormGroupDirective,\n    public cdr: ChangeDetectorRef,\n    public resizeService: ResizeHandlerService,\n    public i18n: I18nService,\n    private ddsConfig: DdsConfigService,\n  ) {\n    super();\n\n    if (this.ngControl !== null) {\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  // Lifecycle hook for initialization\n  public ngOnInit(): void {\n    this.checkIsEmpty();\n    this.checkSize(this.size);\n    this.checkLabelPosition(this.labelPosition);\n    if (this.inputByFormatMask) this.setMaskForDate();\n    super.ngOnInit();\n  }\n\n  // Lifecycle hook for changes detection\n  public ngOnChanges(changes: SimpleChanges): void {\n    this.checkSize(changes.size);\n    this.checkLabelPosition(changes.labelPosition);\n\n    if (changes.isUTCFormat && this.value) {\n      this.setDate(this.value);\n    }\n\n    if (changes.isRequired) {\n      this.isRequired = coerceBooleanProperty(changes.isRequired.currentValue);\n    }\n\n    super.ngOnChanges(changes);\n\n    if ((changes.format && this.inputByFormatMask) || (changes.inputByFormatMask && changes.inputByFormatMask.currentValue)) {\n      this.setMaskForDate();\n    }\n\n    if (changes.minDate?.currentValue) {\n      this._minDate = changes.minDate?.currentValue;\n    }\n\n    if (changes.maxDate?.currentValue) {\n      this._maxDate = changes.maxDate?.currentValue;\n    }\n\n    if (changes.disabledDates?.currentValue?.before) {\n      this.minDate = getPrevDay(this.disabledDates.before);\n    } else {\n      this.minDate = this._minDate;\n    }\n\n    if (changes.disabledDates?.currentValue?.after) {\n      this.maxDate = getNextDay(this.disabledDates.after);\n    } else {\n      this.maxDate = this._maxDate;\n    }\n  }\n\n  // Method to write value to the component\n  public writeValue(value: Date): void {\n    this.value = value;\n    this.inputValue = value;\n    super.writeValue(value);\n\n    this.cdr.markForCheck();\n  }\n\n  // Method to set disabled state\n  public setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n\n    this.cdr.markForCheck();\n  }\n\n  // Method to set date value\n  public setDate(date: Date): void {\n    this.value = this.isUTCFormat ? new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()) : date;\n    this.cdr.detectChanges();\n  }\n\n  // Method to toggle datepicker visibility\n  public toggleDatepicker(event: Event): void {\n    if (event) event.stopPropagation();\n\n    if (!this.calendarOpen) this.close();\n  }\n\n  // Method to handle click event\n  public click() {\n    this.keyboardStatus = true;\n  }\n\n  // Method to handle keyup event\n  public onKeyup(event: KeyboardEvent) {\n    if (event.keyCode === KeyCodes.ENTER || event.keyCode === KeyCodes.SPACE) {\n      this.keyboardStatus = true;\n      this.sticker.show();\n    }\n  }\n\n  // Method to handle keydown event\n  public onKeydown(event: KeyboardEvent) {\n    if (event.keyCode === KeyCodes.ENTER || event.keyCode === KeyCodes.SPACE) {\n      event.preventDefault();\n    }\n  }\n\n  // Method to handle popup shown event\n  public popupShown(): void {\n    this.calendarOpen = true;\n    this.onShown.emit();\n  }\n\n  // Method to handle popup hidden event\n  public popupHidden(): void {\n    this.calendarOpen = false;\n    this.keyboardStatus = false;\n    this.onHidden.emit();\n    this.checkError();\n    this.onModelTouched();\n    this.cdr.detectChanges();\n  }\n\n  // Method to handle input focus event\n  public inputFocus(): void {\n    this.isInputActive = true;\n  }\n\n  // Method to handle input blur event\n  public inputBlur(): void {\n    this.onModelTouched();\n    this.isInputActive = false;\n\n    if (this.inputValue || this.inputValue === null) {\n      this._value = null;\n      this.cdr.detectChanges();\n      this.value = this.inputValue;\n    }\n    if (!isValidDate(this.value)) {\n      this.dateInput.nativeElement.value = '';\n    }\n\n    this.cdr.detectChanges();\n\n    if (this.errorState === ErrorState.focusOut) this.checkError();\n  }\n\n  // Method to handle input change event\n  public inputChanged(field: HTMLInputElement): void {\n    this.checkInputDate(field.value);\n    this.cdr.detectChanges();\n  }\n\n  // Method to select date\n  public selectDate(date: Date, fromCalendar = false): void {\n    if (date) {\n      date = getDateWithZeroTime(date);\n\n      this.validDisabledDate(date).then((validValue) => (date = validValue));\n    }\n\n    if (this.currentDevice === Devices.desktop || !fromCalendar) {\n      this.setNEmitDate(date, fromCalendar);\n    }\n\n    this.selectedDateForMobile = date;\n  }\n\n  // Method to apply selected date\n  public applySelectedDate(): void {\n    this.setNEmitDate(this.selectedDateForMobile, true);\n  }\n\n  // Method to close datepicker\n  public close(event?: MouseEvent): void {\n    if (event) {\n      event.stopPropagation();\n    }\n\n    this.sticker.hide();\n  }\n\n  // Method to clear input field\n  public clearField(event: Event): void {\n    event.preventDefault();\n    this.reset();\n    this.removeFocus(this.clearBtn?.nativeElement);\n    if (this.isManualInput) {\n      this.dateInput?.nativeElement.focus();\n    } else {\n      this.datepickerBtn?.nativeElement.focus();\n    }\n  }\n\n  // Method to reset datepicker\n  public reset(): void {\n    this._value = null;\n    this.inputValue = null;\n    this.emitDate(this.value);\n    this.cdr.detectChanges();\n  }\n\n  // Method to check device type\n  protected checkDevice(device: Devices): void {\n    this.currentDevice = device;\n    this.smallDevice = device !== Devices.desktop;\n\n    if (device === Devices.desktop) {\n      this.stickerWidth = DATEPICKER_WIDTH;\n      this.size = this._size;\n    } else {\n      this.stickerWidth = DATEPICKER_WIDTH_TABLET;\n      this.size = Size.lg;\n    }\n\n    this.cdr.detectChanges();\n  }\n\n  // Method to remove focus from element\n  private removeFocus(el: HTMLElement): void {\n    el.classList.remove(AdditionalClass.keyboardFocus);\n  }\n\n  // Method to set and emit date\n  private setNEmitDate(date: Date, fromCalendar = false): void {\n    if (fromCalendar) this.value = date;\n\n    this.inputValue = date;\n    this.emitDate(date);\n\n    if (this.calendarOpen) this.close();\n  }\n\n  // Method to emit date change event\n  private emitDate(value: Date): void {\n    let date: Date = null;\n    if (value) {\n      date = this.isUTCFormat ? new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate())) : value;\n    }\n    this.dateChanged.emit(date);\n    this.onModelChange(date);\n    this.checkError();\n  }\n\n  // Method to check if value is empty\n  private checkIsEmpty(): void {\n    this.isEmptyValue = !this._value;\n  }\n\n  // Method to check label position\n  private checkLabelPosition(labelPosition: unknown): void {\n    if (labelPosition) {\n      this.isExternalLabel = this.labelPosition === LabelPosition.external;\n    }\n  }\n\n  // Method to check size\n  private checkSize(size: unknown): void {\n    if (size) {\n      this.isSizeLg = this.size === Size.lg;\n      this.isSizeSm = this.size === Size.sm;\n      this.cdr.detectChanges();\n    }\n  }\n\n  // Method to set i18n texts\n  protected setI18nTexts(translation: ITranslation): void {\n    this.applyBtnText = translation.DATEPICKER.RESPONSIVE.APPLY_BTN_TEXT;\n    this.popupAriaLabel = translation.DATEPICKER.A11Y.CALENDAR_POPUP_ARIA_LABEL;\n    this.clearBtnAriaLabel = translation.DATEPICKER.A11Y.CLEAR_BTN_ARIA_LABEL;\n    this.cdr.detectChanges();\n  }\n\n  // Method to check input date\n  private checkInputDate(value: string): void {\n    const date = parseDateByFormat(value, this.format);\n\n    if (isValidDate(date)) {\n      this.isSelected = true;\n      this.selectDate(date);\n    } else {\n      this.isSelected = false;\n      this.selectDate(null);\n    }\n  }\n\n  // Method to set mask for date input\n  private setMaskForDate(): void {\n    this.maskForDate = getMaskByFormat(this.format);\n  }\n\n  // Method to check if date exceeds max date\n  private isExceedMaxDate(date: Date): boolean {\n    return this.maxDate && date?.getTime() >= this.maxDate.getTime();\n  }\n\n  // Method to check if date is less than min date\n  private isLessMinDate(date: Date): boolean {\n    return this.minDate && date?.getTime() <= this.minDate.getTime();\n  }\n\n  // Method to check if date is in disabled days\n  private includeDisabledDays(date: Date): boolean {\n    return includeDisabledDays(this.disabledDates?.days, date);\n  }\n\n  // Method to check if date is in disabled days of month\n  private includeDisabledDaysOfMonth(date: Date): boolean {\n    return includeDisabledDaysOfMonth(this.disabledDates?.daysOfMonth, date);\n  }\n\n  // Method to check if date is in disabled dates\n  private includeDisabledDates(date: Date): boolean {\n    return includeDisabledDates(this.disabledDates?.dates, date);\n  }\n\n  // Method to check if date is in disabled ranges\n  private includeDisabledRanges(date: Date): boolean {\n    return includeDisabledRanges(this.disabledDates?.ranges, date);\n  }\n\n  // Method to validate disabled date\n  private async validDisabledDate(date: Date): Promise<Date> {\n    date = getDateWithZeroTime(date);\n    date = getDateWithMinMode(date, this.minMode);\n\n    return this.getEnabledDate(date);\n  }\n\n  // Method to check if date is disabled\n  private checkDisabledDate(date: Date): boolean {\n    return (\n      this.isLessMinDate(date) ||\n      this.isExceedMaxDate(date) ||\n      this.includeDisabledDays(date) ||\n      this.includeDisabledDaysOfMonth(date) ||\n      this.includeDisabledDates(date) ||\n      this.includeDisabledRanges(date)\n    );\n  }\n\n  // Method to get enabled date\n  private getEnabledDate(date: Date, count = 0): Date {\n    const maxCountSearchEnabledData = 30;\n\n    if (count >= maxCountSearchEnabledData) return null;\n\n    return this.checkDisabledDate(date) ? this.getEnabledDate(getPrevDay(date), ++count) : date;\n  }\n}\n","<div [isResponsive]=\"isResponsive\"\n     ddsResize\n     data-qa=\"datepicker\"\n     class=\"dds-datepicker-wrap {{customClass}}\"\n     [ngClass]=\"{'dds-datepicker-wrap_inverse': isInverse}\">\n\n  <div [ngClass]=\"{\n          'dds-select_lg': isSizeLg && isExternalLabel,\n          'dds-select_sm': isSizeSm && isExternalLabel,\n          'dds-select_external': isExternalLabel || !label,\n          'dds-select_disabled': disabled,\n          'dds-select_error': _isError,\n          'dds-select_inverse': isInverse,\n          'show': calendarOpen || isInputActive,\n          'dds-select_readonly': readonly\n        }\"\n       class=\"dds-select\">\n\n    @if ((label && isExternalLabel) || description) {\n    <div class=\"dds-select__text-wrap\">\n      @if (label && isExternalLabel) {\n      <span class=\"dds-select__title\">{{ label }}\n        @if (isRequired) {<span class=\"dds-required\"></span>}\n      </span>\n      }\n\n      @if (description) {<span class=\"dds-select__description\">{{description}}</span>}\n    </div>\n    }\n\n    <div [ngClass]=\"{\n          'dds-datepicker__field_active': calendarOpen || isInputActive,\n          'dds-datepicker__field_manual-input': isManualInput,\n          'dds-datepicker__field_with-clear': isClearBtnEnabled && !!value,\n          'dds-datepicker__field_with-clear_lg': isSizeLg && isExternalLabel && !!value,\n          'dds-datepicker__field_with-clear_sm': isSizeSm && isExternalLabel && !!value\n         }\"\n         class=\"dds-datepicker__field dds-select__field\"\n         ddsFocus\n         [disabled]=\"isManualInput\"\n         #datepickerBtn>\n\n      @if (label && !isExternalLabel) {\n      <span class=\"dds-select__title\">{{ label }}\n        @if (isRequired) {<span class=\"dds-required\"></span>}\n      </span>\n      }\n\n      @if (isManualInput) {\n      <input [placeholder]=\"placeholder\"\n             [ngModel]=\"value | i18nDate: format\"\n             [disabled]=\"disabled\"\n             [ddsFocus]=\"datepickerBtn\"\n             [ngClass]=\"{\n          'dds-datepicker__input_disabled': disabled\n        }\"\n             [mask]=\"maskForDate\"\n             [attr.aria-required]=\"isRequired || _isFormControlRequired\"\n             [attr.aria-describedby]=\"descId\"\n             [required]=\"isRequired\"\n             [readonly]=\"readonly\"\n             type=\"text\"\n             class=\"dds-datepicker__input dds-select__active-item\"\n             (focus)=\"inputFocus()\"\n             (blur)=\"inputBlur()\"\n             (input)=\"inputChanged($any($event).target)\"\n             #dateInput>\n      } @else {\n      <span class=\"dds-datepicker__value dds-select__active-item\"\n            [ngClass]=\"{\n                  'dds-datepicker__value_placeholder': !value\n                }\">\n        {{(value | i18nDate: format) || placeholder}}\n      </span>\n      }\n\n      @if (isClearBtnEnabled) {\n      <button class=\"dds-datepicker__clear dds-select__icon\"\n              [ngClass]=\"{\n                'dds-datepicker__clear_shown': !!value,\n                'dds-datepicker__clear_lg': isSizeLg && isExternalLabel,\n                'dds-datepicker__clear_sm': isSizeSm && isExternalLabel\n              }\"\n              [attr.aria-label]=\"clearBtnAriaLabel\"\n              ddsFocus\n              type=\"button\"\n              [disabled]=\"disabled || readonly\"\n              (click)=\"clearField($event)\"\n              #clearBtn>\n        <span class=\"dds-icon dds-icon_close\"></span>\n      </button>\n      }\n      <button [ddsSticker]=\"datepicker\"\n              [disabled]=\"disabled || readonly\"\n              [stickerPosition]=\"stickerPosition\"\n              [stickerIndent]=\"stickerIndent\"\n              [stickerWidth]=\"stickerWidth\"\n              [stickerIsOutsideClick]=\"stickerIsOutsideClick\"\n              [stickerShift]=\"stickerShift\"\n              [stickerMaxHeight]=\"stickerMaxHeight\"\n              [stickerIsDisabled]=\"stickerIsDisabled\"\n              [stickerIsResponsive]=\"isResponsive\"\n              [stickerCustomClass]=\"stickerCustomClass\"\n              [stickerIsDynamic]=\"stickerIsDynamic\"\n              [stickerEl]=\"datepickerBtn\"\n              [stickerFocusedEl]=\"button\"\n              [attr.aria-label]=\"calendarBtnAriaLabel\"\n              [attr.aria-disabled]=\"disabled\"\n              [attr.aria-invalid]=\"_isError\"\n              aria-haspopup=\"true\"\n              [attr.aria-expanded]=\"calendarOpen\"\n              [attr.aria-controls]=\"popupId\"\n              ddsFocus\n              class=\"dds-datepicker__btn dds-select__icon dds-icon {{icon}}\"\n              (click)=\"click()\"\n              (keyup)=\"onKeyup($event)\"\n              (keydown)=\"onKeydown($event)\"\n              (onShown)=\"popupShown()\"\n              (onHidden)=\"popupHidden()\"\n              #stickerDir=\"dds-sticker\"\n              #button></button>\n    </div>\n\n    @if (_isError && errorMessage) {\n    <span data-qa=\"datepicker-error-message\"\n          class=\"dds-select__error\">{{errorMessage}}</span>\n    }\n\n  </div>\n\n  <span class=\"dds-datepicker__aria-description\"\n        [id]=\"descId\">\n    (date format: {{format}})\n  </span>\n\n  <!-- datepicker -->\n  <ng-template #datepicker>\n    <div [isResponsive]=\"isResponsive\"\n         ddsResize\n         data-qa=\"datepicker-popup\"\n         class=\"dds-datepicker-popup\"\n         [id]=\"popupId\"\n         [attr.aria-label]=\"popupAriaLabel\"\n         role=\"dialog\"\n         aria-modal=\"true\"\n         [ngClass]=\"{'dds-datepicker-popup_inverse': isInverse}\">\n\n      @if (smallDevice) {\n      <div class=\"dds-datepicker-popup__header\">\n        @if (label) {\n        <span data-qa=\"datepicker-popup-label\"\n              class=\"dds-datepicker-popup__label\">{{label}}\n          @if (isRequired) {<span class=\"dds-required\"></span>}\n        </span>\n        }\n\n        <button class=\"dds-datepicker-popup__close dds-icon dds-icon_close\"\n                (click)=\"close($event)\"></button>\n      </div>\n      }\n\n      <div class=\"dds-datepicker-popup__body\">\n        <dds-datepicker-inner [value]=\"value\"\n                              [minDate]=\"minDate\"\n                              [maxDate]=\"maxDate\"\n                              [openedDate]=\"openedDate\"\n                              [startState]=\"startState\"\n                              [minMode]=\"minMode\"\n                              [isResponsive]=\"isResponsive\"\n                              [isInverse]=\"isInverse\"\n                              [stickerRef]=\"stickerDir\"\n                              [disabledDates]=\"disabledDates\"\n                              (dateChanged)=\"selectDate($event, true)\"></dds-datepicker-inner>\n      </div>\n\n      @if (smallDevice) {\n      <div class=\"dds-datepicker-popup__footer\">\n        <dds-button [size]=\"applyBtnSize\"\n                    class=\"dds-datepicker-popup__btn\"\n                    data-qa=\"datepicker-popup-btn\"\n                    (clicked)=\"applySelectedDate()\">{{applyBtnText}}</dds-button>\n      </div>\n      }\n    </div>\n  </ng-template>\n  <!-- datepicker END-->\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  Self,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { FormGroupDirective, FormsModule, NgControl, NgForm } from '@angular/forms';\nimport { ButtonModule } from '@usitsdasdesign/dds-ng/button';\nimport {\n  DestroyCtor,\n  DestroyMixin,\n  ErrorStateCtor,\n  ErrorStateMixin,\n  FormAccessorCtor,\n  FormAccessorMixin,\n  I18nCtor,\n  I18nMixin,\n  ResponsivenessCtor,\n  ResponsivenessMixin,\n} from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { coerceBooleanProperty, generateId } from '@usitsdasdesign/dds-ng/core/utils';\nimport { AdditionalClass, Devices, ErrorState, KeyCodes, LabelPosition, PositionState, Size } from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { I18nModule, I18nService, ITranslation } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport { ResizeHandlerModule, ResizeHandlerService } from '@usitsdasdesign/dds-ng/shared/resize-handler';\nimport { StickerDirective, StickerModule } from '@usitsdasdesign/dds-ng/sticker';\nimport { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { DATEPICKER_BTN, DATERANGEPICKER_POPUP, DEFAULT_DATEPICKER_MODE, DEFAULT_ICON, RANGE_INDEX, SHIFT } from '../constants';\nimport { getMaskByFormat, getNextDay, getNextMonth, getPrevDay, isValidDate, parseDateByFormat } from '../date.utils';\nimport { DatepickerInnerComponent } from '../datepicker-inner/datepicker-inner.component';\nimport { DATERANGEPICKER } from '../datepicker.token';\nimport {\n  DatepickerStates,\n  DaterangepickerHeaderOption,\n  DaterangepickerInfo,\n  DaterangepickerItems,\n  DaterangepickerPlaceholder,\n  DisabledDates,\n} from '../typings';\n\nconst DaterangepickerBase: DestroyCtor & I18nCtor & ResponsivenessCtor & FormAccessorCtor & ErrorStateCtor = DestroyMixin(\n  I18nMixin(ResponsivenessMixin(FormAccessorMixin(ErrorStateMixin())))\n);\n\n@Component({\n  selector: 'dds-daterangepicker',\n  templateUrl: './daterangepicker.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: DATERANGEPICKER,\n      useExisting: DaterangepickerComponent,\n    },\n    provideNgxMask(),\n  ],\n  standalone: true,\n  imports: [\n    CommonModule,\n    StickerModule,\n    ButtonModule,\n    FocusHandlerModule,\n    ResizeHandlerModule,\n    FormsModule,\n    NgxMaskDirective,\n    I18nModule,\n    DatepickerInnerComponent,\n  ],\n})\nexport class DaterangepickerComponent extends DaterangepickerBase implements OnChanges, OnInit {\n  // Host bindings for CSS classes and attributes\n  @HostBinding(`class.${AdditionalClass.disabled}`) @Input() disabled: boolean | undefined;\n  @HostBinding(`attr.data-is-empty`) isEmptyValue: boolean; // WalkMe\n\n  // Input properties for various configurations\n  @Input() label: string | undefined;\n  @Input() description: string | undefined;\n  @Input() errorMessage: string | undefined;\n  @Input() customClass: string | undefined;\n  @Input() isError: boolean | undefined;\n  @Input() errorState: string | ErrorState | undefined = this.ddsConfig.getConfig().errorState;\n  @Input() size: Size | string | undefined = this.ddsConfig.getConfig().size;\n  @Input() labelPosition: LabelPosition | string | undefined = this.ddsConfig.getConfig().labelPosition;\n  @Input() startState: DatepickerStates | string | undefined;\n  @Input() icon: string | undefined = DEFAULT_ICON;\n  @Input() openedDate: Date | undefined;\n  @Input() format: string | undefined = this.ddsConfig.getConfig().dateFormat;\n  @Input() placeholder: string[] | undefined = [this.ddsConfig.getConfig().dateFormat, this.ddsConfig.getConfig().dateFormat];\n  @Input() isResponsive: boolean | undefined = this.ddsConfig.getConfig().isResponsive;\n  @Input() inputByFormatMask: boolean | undefined;\n  @Input() isManualInput: boolean | undefined = true;\n  @Input() minDate: Date | undefined;\n  @Input() maxDate: Date | undefined;\n  @Input() isInverse: boolean | undefined;\n  @Input() readonly: boolean | undefined;\n  @Input() isRequired: boolean | undefined = false;\n  @Input() isUTCFormat: boolean | undefined = false;\n  @Input() isStartDateEmitted: boolean | undefined = false;\n  @Input() disabledDates: DisabledDates | undefined;\n  @Input() isClearBtnEnabled: boolean | undefined = false;\n\n  // Sticker options\n  @Input() stickerPosition: PositionState | string | undefined = this.ddsConfig.getConfig().stickerPosition;\n  @Input() stickerIndent: number | undefined = this.ddsConfig.getConfig().stickerIndent;\n  @Input() stickerShift: number | undefined = SHIFT;\n  @Input() stickerMaxHeight: number | string | undefined;\n  @Input() stickerCustomClass: string | undefined = DATERANGEPICKER_POPUP;\n  @Input() stickerIsDisabled: boolean | undefined;\n  @Input() stickerIsDynamic: boolean | undefined = true;\n\n  // Getter and setter for value property\n  @Input() get value(): Date[] {\n    return this._value;\n  }\n  set value(value: Date[]) {\n    this._value = value;\n    this.setRangeValue();\n    if (value && value[1] instanceof Date) {\n      this.checkDateOnMonth();\n      this.rangeValue.end = value[1];\n    }\n    this.checkIsEmpty();\n  }\n\n  // Output events\n  @Output() dateChanged = new EventEmitter<Date[]>();\n  @Output() onShown = new EventEmitter<void>();\n  @Output() onHidden = new EventEmitter<void>();\n\n  // ViewChild references\n  @ViewChild('stickerDir') sticker: StickerDirective;\n  @ViewChild('daterangepickerBtn') daterangepickerBtn: ElementRef<HTMLElement>;\n  @ViewChild('startInput') startInput: ElementRef<HTMLInputElement>;\n  @ViewChild('endInput') endInput: ElementRef<HTMLInputElement>;\n  @ViewChild('clearBtn') clearBtn: ElementRef<HTMLButtonElement>;\n\n  // Public properties\n  public rangePlaceholder: DaterangepickerPlaceholder;\n  public rangeStartMaxDate: Date;\n  public rangeEndMinDate: Date;\n  public rangeEndHoveredDate: Date;\n  public rangeValueArray: Date[];\n  public isSizeLg: boolean;\n  public isSizeSm: boolean;\n  public isExternalLabel: boolean;\n  public rangeStartDate: DaterangepickerInfo = {};\n  public rangeValue: DaterangepickerInfo = {};\n  public isCalendarOpen: boolean = false;\n  public stickerIsOutsideClick = true;\n  public isRangepicker = true;\n  public minMode: DatepickerStates = DEFAULT_DATEPICKER_MODE;\n  public keyboardStatus: boolean;\n  public applyBtnText: string;\n  public isInputActive: boolean;\n  public maskForDate: string;\n  public applyBtnSize = Size.lg;\n  public daterangepickerItems = DaterangepickerItems;\n  public popupAriaLabel: string;\n  public popupStartAriaLabel: string;\n  public popupEndAriaLabel: string;\n  public rangeFieldValue: DaterangepickerInfo = {};\n  public descId = generateId();\n  public popupId = generateId();\n  public labelledById = generateId();\n  public clearBtnAriaLabel: string;\n\n  // Private properties\n  private _value: Date[];\n  private currentDevice: Devices = Devices.desktop;\n  private innerStart: DatepickerInnerComponent;\n  private innerEnd: DatepickerInnerComponent;\n  private dateBeforeApply: Date[];\n  private isMobileApply: boolean;\n  private isDateHovered: boolean;\n  private _minDate: Date;\n  private _maxDate: Date;\n\n  // Getter for backdrop value\n  get backdropValue(): string {\n    if (this.startInput) {\n      const inputEl = this.startInput.nativeElement;\n      const value = inputEl.value;\n\n      return value.length ? value : this.rangePlaceholder?.start;\n    }\n  }\n\n  // Getter to check if input is active\n  get checkActiveInput(): boolean {\n    return (this.isCalendarOpen || this.isInputActive) && this.isDateHovered;\n  }\n\n  // Getter for calendar button aria label\n  public get calendarBtnAriaLabel(): string {\n    const isNotEmptyINput = this.i18n.joinByValue(`${this.value}`, '{{date}}', this.i18n.getTranslation()?.DATERANGEPICKER.A11Y.CALENDAR_FILLED_BTN_ARIA_LABEL);\n    return !!this.value ? isNotEmptyINput : this.i18n.getTranslation()?.DATERANGEPICKER.A11Y.CALENDAR_BTN_ARIA_LABEL;\n  }\n\n  constructor(\n    @Optional() @Self() public ngControl: NgControl,\n    @Optional() public parentForm: NgForm,\n    @Optional() public parentFormGroup: FormGroupDirective,\n    public cdr: ChangeDetectorRef,\n    public resizeService: ResizeHandlerService,\n    public i18n: I18nService,\n    private ddsConfig: DdsConfigService\n  ) {\n    super();\n\n    if (this.ngControl !== null) {\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  // Lifecycle hook for detecting changes in input properties\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes.placeholder) {\n      this.setRangePlaceholder();\n    }\n\n    if (changes.isRequired) {\n      this.isRequired = coerceBooleanProperty(changes.isRequired.currentValue);\n    }\n\n    super.ngOnChanges(changes);\n\n    if ((changes.format && this.inputByFormatMask) || (changes.inputByFormatMask && changes.inputByFormatMask.currentValue)) {\n      this.setMaskForDate();\n    }\n\n    if (changes.minDate?.currentValue) {\n      this._minDate = changes.minDate?.currentValue;\n    }\n\n    if (changes.maxDate?.currentValue) {\n      this._maxDate = changes.maxDate?.currentValue;\n    }\n\n    if (changes.disabledDates?.currentValue?.before) {\n      this.minDate = getPrevDay(this.disabledDates.before);\n    } else {\n      this.minDate = this._minDate;\n    }\n\n    if (changes.disabledDates?.currentValue?.after) {\n      this.maxDate = getNextDay(this.disabledDates.after);\n    } else {\n      this.maxDate = this._maxDate;\n    }\n\n    this.checkSize(changes.size);\n    this.checkLabelPosition(changes.labelPosition);\n  }\n\n  // Lifecycle hook for component initialization\n  public ngOnInit(): void {\n    if (!this.value) {\n      this.setRangeStartDate(this.openedDate || new Date());\n    } else {\n      this.setRangeStartView();\n    }\n\n    this.setRangePlaceholder();\n    this.checkIsEmpty();\n    this.checkSize(this.size);\n    this.checkLabelPosition(this.labelPosition);\n    this.rangeFieldValue = this.rangeValue;\n\n    if (this.inputByFormatMask) this.setMaskForDate();\n    super.ngOnInit();\n  }\n\n  // Method to write value to the component\n  public writeValue(value: Date[]): void {\n    this.value = value;\n    this.rangeFieldValue = this.rangeValue;\n\n    if (!value) {\n      this.setRangeStartDate(this.openedDate || new Date());\n    }\n\n    super.writeValue(value);\n    this.cdr.detectChanges();\n  }\n\n  // Method to set the disabled state of the component\n  public setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n\n    this.cdr.detectChanges();\n  }\n\n  // Method to handle click events\n  public click() {\n    this.keyboardStatus = true;\n  }\n\n  // Method to handle keyup events\n  public onKeyup(event: KeyboardEvent) {\n    if (event.keyCode === KeyCodes.ENTER || event.keyCode === KeyCodes.SPACE) {\n      this.keyboardStatus = true;\n      this.sticker.show();\n    }\n  }\n\n  // Method to handle keydown events\n  public onKeydown(event: KeyboardEvent) {\n    if (event.keyCode === KeyCodes.ENTER || event.keyCode === KeyCodes.SPACE) {\n      event.preventDefault();\n    }\n  }\n\n  // Method to handle when the popup is shown\n  public popupShown(): void {\n    this.isCalendarOpen = true;\n    this.onShown.emit();\n    this.dateBeforeApply = this.value;\n    this.isMobileApply = false;\n  }\n\n  // Method to handle when the popup is hidden\n  public popupHidden(): void {\n    this.isCalendarOpen = false;\n    this.keyboardStatus = false;\n    this.onHidden.emit();\n    this.checkError();\n    this.onModelTouched();\n\n    if (this.smallDevice && !this.isMobileApply) {\n      this.value = this.dateBeforeApply;\n      this.rangeFieldValue = this.rangeValue;\n    }\n\n    this.cdr.detectChanges();\n  }\n\n  // Method to handle input focus event\n  public inputFocus(): void {\n    this.isInputActive = true;\n  }\n\n  // Method to handle input blur event\n  public inputBlur(): void {\n    this.onModelTouched();\n    this.isInputActive = false;\n    this.cdr.detectChanges();\n\n    if (this.errorState === ErrorState.focusOut) this.checkError();\n  }\n\n  // Method to handle changes in input fields\n  public inputChanged(field: HTMLInputElement, dateRangeItem: DaterangepickerItems): void {\n    this.checkInputDate(field.value, dateRangeItem);\n    this.cdr.detectChanges();\n  }\n\n  // Method to handle the selection of a date\n  public selectedDate(date: Date): void {\n    if (this.value && (this.value.length > 1 || this.isEndDateLessStartDate(date))) {\n      this.value = null;\n      this.rangeStartMaxDate = null;\n      this.rangeValueArray = [];\n      this.emitDate(this.value);\n    }\n    if (this.value) {\n      this.value.push(date);\n      this.actionsAfterSelectedRange();\n      if (this.currentDevice === Devices.desktop) {\n        this.close();\n      }\n    } else {\n      this.value = [date];\n      this.setRangeStartDate(date);\n      setTimeout(() => this.innerStart.focusDate());\n      if (this.isStartDateEmitted) this.emitDate(this.value);\n      if (this.currentDevice === Devices.desktop) this.rangeFieldValue = this.rangeValue;\n      this.cdr.markForCheck();\n    }\n\n    this.rangeValueArray = this.value;\n  }\n\n  // Method to apply the selected date\n  public applySelectedDate(): void {\n    this.isMobileApply = true;\n    this.emitDate(this.value);\n    this.close();\n  }\n\n  // Method to handle the hovering of a date\n  public hoveredDate(date: Date): void {\n    this.rangeEndHoveredDate = date;\n  }\n\n  // Method to handle mouse enter event on date wrapper\n  public dateWrapMouseenter(): void {\n    this.isDateHovered = true;\n  }\n\n  // Method to handle mouse leave event on date wrapper\n  public dateWrapMouseleave(): void {\n    this.isDateHovered = false;\n  }\n\n  // Method to initialize the start datepicker inner component\n  public afterViewInitedStartInner(innerInstance: DatepickerInnerComponent): void {\n    this.innerStart = innerInstance;\n  }\n\n  // Method to initialize the end datepicker inner component\n  public afterViewInitedEndInner(innerInstance: DatepickerInnerComponent): void {\n    this.innerEnd = innerInstance;\n  }\n\n  // Method to handle changes in the date picker\n  public pickerChanged(option: DaterangepickerHeaderOption): void {\n    const headerStartBtnElmts = this.innerStart.datepickerHeader.nativeElement.querySelectorAll(DATEPICKER_BTN);\n    const headerEndBtnElmts = this.innerEnd.datepickerHeader.nativeElement.querySelectorAll(DATEPICKER_BTN);\n    const bodyStartBtnElmts = this.innerStart.datepickerBody.nativeElement.querySelectorAll(DATEPICKER_BTN);\n    const bodyEndBtnElmts = this.innerEnd.datepickerBody.nativeElement.querySelectorAll(DATEPICKER_BTN);\n\n    // Change focus to header buttons in daterangepicker\n    if (option.isHeaderBtns && option.directionKeycode === KeyCodes.ARROW_RIGHT) {\n      if (option.isEndPicker) {\n        this.innerStart.focusRangeItem(this.innerStart.datepickerHeader, headerStartBtnElmts, 0, this.innerEnd.datepickerHeader);\n      } else {\n        this.innerStart.focusRangeItem(this.innerEnd.datepickerHeader, headerEndBtnElmts, 0, this.innerStart.datepickerHeader);\n      }\n    }\n    if (option.isHeaderBtns && option.directionKeycode === KeyCodes.ARROW_LEFT) {\n      if (option.isEndPicker) {\n        this.innerStart.focusRangeItem(\n          this.innerStart.datepickerHeader,\n          headerStartBtnElmts,\n          headerStartBtnElmts.length - 1,\n          this.innerEnd.datepickerHeader\n        );\n      } else {\n        this.innerStart.focusRangeItem(\n          this.innerEnd.datepickerHeader,\n          headerEndBtnElmts,\n          headerEndBtnElmts.length - 1,\n          this.innerStart.datepickerHeader\n        );\n      }\n    }\n\n    // Change focus to body buttons in daterangepicker\n    if (!option.isHeaderBtns && option.directionKeycode === KeyCodes.ARROW_RIGHT) {\n      if (option.isEndPicker) {\n        this.innerStart.focusRangeItem(this.innerStart.datepickerBody, bodyStartBtnElmts, 0, this.innerEnd.datepickerBody);\n      } else {\n        this.innerStart.focusRangeItem(this.innerEnd.datepickerBody, bodyEndBtnElmts, 0, this.innerStart.datepickerBody);\n      }\n    }\n\n    if (!option.isHeaderBtns && option.directionKeycode === KeyCodes.ARROW_LEFT) {\n      if (option.isEndPicker) {\n        this.innerStart.focusRangeItem(\n          this.innerStart.datepickerBody,\n          bodyStartBtnElmts,\n          bodyStartBtnElmts.length - 1,\n          this.innerEnd.datepickerBody\n        );\n      } else {\n        this.innerStart.focusRangeItem(\n          this.innerEnd.datepickerBody,\n          bodyEndBtnElmts,\n          bodyEndBtnElmts.length - 1,\n          this.innerStart.datepickerBody\n        );\n      }\n    }\n\n    this.innerStart.isFocusEmpty = false;\n    this.innerEnd.isFocusEmpty = false;\n  }\n\n  // Method to close the date picker\n  public close(): void {\n    this.sticker.hide();\n  }\n\n  // Method to handle keydown event on end input\n  public keyDownEndInput(event: KeyboardEvent): void {\n    const inputEl = event.target as HTMLInputElement;\n    const value = inputEl.value;\n\n    if (event.keyCode === KeyCodes.BACKSPACE && !value.length) {\n      this.startInput.nativeElement.focus();\n    }\n  }\n\n  // Checks the current device type and updates the component's state accordingly.\n  protected checkDevice(device: Devices): void {\n    this.currentDevice = device;\n    this.smallDevice = device !== Devices.desktop;\n\n    if (device === Devices.desktop) {\n      this.size = this._size;\n    } else {\n      this.size = Size.lg;\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  // Clears the date range input field and resets the component state.\n  public clearField(event: Event): void {\n    event.stopPropagation();\n\n    this.reset();\n    this.removeFocus(this.clearBtn?.nativeElement);\n    if (this.isManualInput) {\n      this.startInput?.nativeElement.focus();\n    } else {\n      this.daterangepickerBtn?.nativeElement.focus();\n    }\n  }\n\n  public reset(): void {\n    this.value = null;\n    this.rangeStartMaxDate = null;\n    this.emitDate(this.value);\n  }\n\n  private removeFocus(el: HTMLElement): void {\n    el.classList.remove(AdditionalClass.keyboardFocus);\n  }\n\n  private checkIsEmpty(): void {\n    this.isEmptyValue = !Boolean(this._value);\n  }\n\n  private checkLabelPosition(labelPosition: unknown): void {\n    if (labelPosition) {\n      this.isExternalLabel = this.labelPosition === LabelPosition.external;\n    }\n  }\n\n  private checkSize(size: unknown): void {\n    if (size) {\n      this.isSizeLg = this.size === Size.lg;\n      this.isSizeSm = this.size === Size.sm;\n      this.cdr.markForCheck();\n    }\n  }\n\n  // Checks if the start and end dates are in the same month and year.\n  // If they are, it sets the range start date and updates the minimum and maximum dates accordingly.\n  private checkDateOnMonth(): void {\n    const yearStart = this.rangeValue.start.getFullYear();\n    const monthStart = this.rangeValue.start.getMonth();\n    const yearEnd = this.rangeValue.end.getFullYear();\n    const monthEnd = this.rangeValue.end.getMonth();\n\n    if (new Date(yearStart, monthStart, 1).getTime() === new Date(yearEnd, monthEnd, 1).getTime()) {\n      this.setRangeStartDate(this.rangeValue.start);\n      this.rangeEndMinDate = this.rangeValue.end;\n      this.rangeStartMaxDate = null;\n    }\n  }\n\n  private isEndDateLessStartDate(date: Date): boolean {\n    return date.getTime() < this.value[0].getTime();\n  }\n\n  // Sets the range placeholder for the date range picker component.\n  private setRangePlaceholder(): void {\n    this.rangePlaceholder = {\n      start: this.placeholder[0].toString(),\n      end: this.placeholder[1].toString(),\n    };\n    this.cdr.detectChanges();\n  }\n\n  // Sets the range value for the date picker component.\n  private setRangeValue(): void {\n    if (this.value) {\n      this.rangeValue = {\n        start: this.value[0],\n        end: this.value[1],\n      };\n      this.rangeValueArray = this.value;\n      this.rangeStartDate.end = this.rangeValue.end;\n\n      this.setMinMaxDate();\n    } else {\n      this.rangeValue = {};\n      this.rangeValueArray = null;\n      this.setRangeStartDate(this.openedDate || new Date());\n    }\n\n    this.rangeFieldValue = this.rangeValue;\n    this.cdr.detectChanges();\n  }\n\n  // Sets the minimum and maximum dates for the date range picker.\n  private setMinMaxDate(): void {\n    if (this.rangeValue.start) {\n      const yearStart = this.rangeValue.start.getFullYear();\n      const nextMonthStart = getNextMonth(this.rangeValue.start);\n\n      this.rangeEndMinDate = new Date(yearStart, nextMonthStart, 0);\n    }\n\n    if (this.rangeValue.end) {\n      const yearEnd = this.rangeValue.end.getFullYear();\n      const monthEnd = this.rangeValue.end.getMonth();\n\n      this.rangeStartMaxDate = new Date(yearEnd, monthEnd, 1);\n    }\n  }\n\n  // Sets the start date of the range and calculates the end date as the first day of the next month.\n  private setRangeStartDate(date: Date): void {\n    const nextMonthDate = new Date(date.getFullYear(), getNextMonth(date), 1);\n\n    this.rangeStartDate = {\n      start: date,\n      end: nextMonthDate,\n    };\n  }\n\n  // Emits the selected date range.\n  private emitDate(value: Date[]): void {\n    let rangeDates = value ? [...value] : value;\n    if (rangeDates) {\n      rangeDates = rangeDates.map((date) => {\n        const resetDate = new Date(date.setHours(0, 0, 0, 0));\n        const formatedDate = this.isUTCFormat\n          ? new Date(Date.UTC(resetDate.getFullYear(), resetDate.getMonth(), resetDate.getDate()))\n          : resetDate;\n        return formatedDate;\n      });\n    }\n\n    if (this.currentDevice === Devices.desktop || this.isMobileApply) {\n      this.dateChanged.emit(rangeDates);\n      this.rangeFieldValue = this.rangeValue;\n      this.onModelChange(rangeDates);\n      this.checkError();\n    }\n  }\n\n  // Sets the range start view by initializing the `rangeStartDate` object\n  // with the start and end dates from the `value` array.\n  private setRangeStartView(): void {\n    this.rangeStartDate = {\n      start: this.value[0],\n      end: this.value[1],\n    };\n  }\n\n  // Sets the internationalization (i18n) texts for various UI elements.\n  protected setI18nTexts(translation: ITranslation): void {\n    this.applyBtnText = translation.DATERANGEPICKER.RESPONSIVE.APPLY_BTN_TEXT;\n    this.popupAriaLabel = translation.DATERANGEPICKER.A11Y.CALENDAR_POPUP_ARIA_LABEL;\n    this.popupStartAriaLabel = translation.DATERANGEPICKER.A11Y.CALENDAR_START_ARIA_LABEL;\n    this.popupEndAriaLabel = translation.DATERANGEPICKER.A11Y.CALENDAR_END_ARIA_LABEL;\n    this.clearBtnAriaLabel = translation.DATEPICKER.A11Y.CLEAR_BTN_ARIA_LABEL;\n    this.cdr.detectChanges();\n  }\n\n  // Performs a series of actions after a date range has been selected.\n  private actionsAfterSelectedRange(): void {\n    this.setRangeValue();\n    this.checkDateOnMonth();\n    this.emitDate(this.value);\n  }\n\n  // Validates and processes the input date string for a specified date range item.\n  private checkInputDate(value: string, dateRangeItem: DaterangepickerItems): void {\n    const date = parseDateByFormat(value, this.format);\n\n    this.setDateFromInput(date, dateRangeItem);\n\n    if (!isValidDate(date)) this.emitDate(null);\n  }\n\n  private setMaskForDate(): void {\n    this.maskForDate = getMaskByFormat(this.format);\n  }\n\n  // Sets the date from the input based on the specified date range item.\n  private setDateFromInput(date: Date, dateRangeItem: DaterangepickerItems): void {\n    switch (dateRangeItem) {\n      case DaterangepickerItems.start:\n        this.setStartDateFromInput(date);\n        break;\n\n      case DaterangepickerItems.end:\n        this.setEndDateFromInput(date);\n        break;\n    }\n\n    this.rangeValueArray = this.value;\n  }\n\n  // Sets the start date from the provided input date.\n  private setStartDateFromInput(date: Date): void {\n    if (isValidDate(date)) {\n      this.value ? (this.value[RANGE_INDEX.start] = date) : (this.value = [date]);\n      this.setRangeStartDate(date);\n      this.checkStartDate(date);\n      this.emitDate(this.value);\n    } else {\n      this.value = null;\n      this.startInput.nativeElement.value = '';\n    }\n  }\n\n  // Sets the end date from the provided input date.\n  private setEndDateFromInput(date: Date): void {\n    const hasRangeDates = this.value && this.value.length > 1;\n\n    if (isValidDate(date)) {\n      this.value ? (this.value[RANGE_INDEX.end] = date) : (this.value = [getPrevDay(date), date]);\n      this.checkEndDate(date);\n      this.actionsAfterSelectedRange();\n    } else if (hasRangeDates) {\n      this.value.splice(-1, 1);\n      this.endInput.nativeElement.value = '';\n      this.rangeFieldValue.end = null;\n    } else {\n      this.endInput.nativeElement.value = '';\n      this.rangeFieldValue.end = null;\n    }\n  }\n\n  // Checks the provided start date and updates the end date if necessary.\n  private checkStartDate(startDate: Date): void {\n    const hasRangeDates = this.value && this.value.length > 1;\n    const endDate = hasRangeDates ? this.value[RANGE_INDEX.end] : null;\n\n    if (hasRangeDates && this.compareDate(startDate, endDate)) {\n      this.value[RANGE_INDEX.end] = getNextDay(startDate);\n      this.actionsAfterSelectedRange();\n    }\n  }\n\n  // Checks and adjusts the end date if it is before the start date.\n  // If the end date is before the start date, the start date is set to the previous day of the end date.\n  private checkEndDate(endDate: Date): void {\n    const startDate = this.value ? this.value[RANGE_INDEX.start] : null;\n\n    if (startDate && this.compareDate(startDate, endDate)) {\n      this.value[RANGE_INDEX.start] = getPrevDay(endDate);\n    }\n  }\n\n  private compareDate(startDate: Date, endDate: Date): boolean {\n    return startDate.getTime() > endDate.getTime();\n  }\n}\n","<div [isResponsive]=\"isResponsive\"\n     ddsResize\n     data-qa=\"date-range-picker-wrap\"\n     class=\"dds-daterangepicker-wrap {{customClass}}\"\n     [ngClass]=\"{'dds-daterangepicker-wrap_inverse': isInverse}\">\n\n  <div [ngClass]=\"{\n          'dds-select_lg': isSizeLg && isExternalLabel,\n          'dds-select_sm': isSizeSm && isExternalLabel,\n          'dds-select_external': isExternalLabel || !label,\n          'dds-select_disabled': disabled,\n          'dds-select_error': _isError,\n          'dds-select_inverse': isInverse,\n          'show': isCalendarOpen || isInputActive,\n          'dds-select_readonly': readonly\n         }\"\n       class=\"dds-select\">\n    @if ((label && isExternalLabel) || description) {\n    <div class=\"dds-select__text-wrap\">\n      @if (label && isExternalLabel) {\n      <label data-qa=\"date-range-picker-label\"\n             class=\"dds-select__title\">{{ label }}\n        @if (isRequired) {<span class=\"dds-required\"></span>}\n      </label>\n      }\n\n      @if (description) {\n      <span data-qa=\"date-range-picker-desc\"\n            class=\"dds-select__description\">{{description}}</span>\n      }\n    </div>\n    }\n\n    <div [ngClass]=\"{\n           'dds-daterangepicker__field_active': isCalendarOpen || isInputActive,\n           'dds-daterangepicker__field_with-clear': isClearBtnEnabled && !!value,\n           'dds-daterangepicker__field_with-clear_lg': isSizeLg && isExternalLabel && !!value,\n           'dds-daterangepicker__field_with-clear_sm': isSizeSm && isExternalLabel && !!value\n         }\"\n         data-qa=\"date-range-picker-button\"\n         class=\"dds-daterangepicker__field dds-select__field\"\n         ddsFocus\n         [disabled]=\"isManualInput\"\n         #daterangepickerBtn>\n\n      @if (label && !isExternalLabel) {\n      <span data-qa=\"date-range-picker-label\"\n            class=\"dds-select__title\">{{ label }}\n        @if (isRequired) {<span class=\"dds-required\"></span>}\n      </span>\n      }\n\n      <span class=\"dds-daterangepicker__labelledby\"\n            [attr.id]=\"labelledById\">{{label}} {{description}} {{rangeFieldValue?.start | i18nDate: format}} {{rangeFieldValue?.end |\n        i18nDate:\n        format}}</span>\n\n      <div class=\"dds-select__info\">\n        @if (isManualInput) {\n        <div class=\"dds-daterangepicker__info dds-daterangepicker__info_start\">\n          <input [placeholder]=\"rangePlaceholder?.start\"\n                 [ngModel]=\"rangeFieldValue?.start | i18nDate: format\"\n                 [disabled]=\"disabled\"\n                 [ddsFocus]=\"daterangepickerBtn\"\n                 [ngClass]=\"{\n                'dds-daterangepicker__input_active': checkActiveInput && !rangeFieldValue?.start,\n                'dds-daterangepicker__input_disabled': disabled,\n              }\"\n                 [mask]=\"maskForDate\"\n                 [attr.aria-required]=\"isRequired || _isFormControlRequired\"\n                 [attr.aria-describedby]=\"descId\"\n                 [attr.aria-labelledby]=\"labelledById\"\n                 [required]=\"isRequired\"\n                 [readonly]=\"readonly\"\n                 type=\"text\"\n                 class=\"dds-daterangepicker__input dds-select__active-item\"\n                 (focus)=\"inputFocus()\"\n                 (blur)=\"inputBlur()\"\n                 (change)=\"inputChanged($any($event).target, daterangepickerItems.start)\"\n                 #startInput>\n\n          <span class=\"dds-daterangepicker__backdrop dds-select__placeholder\">\n            {{!isInputActive && rangeFieldValue?.start ? (rangeFieldValue?.start | i18nDate: format) : backdropValue}}\n          </span>\n        </div>\n        } @else {\n        <span class=\"dds-daterangepicker__value dds-select__active-item\"\n              [ngClass]=\"{\n            'dds-daterangepicker__value_placeholder': !rangeFieldValue?.start\n          }\">\n          {{(rangeFieldValue?.start | i18nDate: format) || rangePlaceholder?.start}}\n        </span>\n        }\n\n        <span class=\"dds-select__separator\">&mdash;</span>\n\n        @if (isManualInput) {\n        <div class=\"dds-daterangepicker__info dds-daterangepicker__info_end\">\n          <input [placeholder]=\"rangePlaceholder?.end\"\n                 [ngModel]=\"rangeFieldValue?.end | i18nDate: format\"\n                 [disabled]=\"disabled \"\n                 [ddsFocus]=\"daterangepickerBtn\"\n                 [ngClass]=\"{\n               'dds-daterangepicker__input_active': checkActiveInput && !!rangeFieldValue?.start,\n                'dds-daterangepicker__input_disabled': disabled\n              }\"\n                 [mask]=\"maskForDate\"\n                 [attr.aria-required]=\"isRequired || _isFormControlRequired\"\n                 [attr.aria-describedby]=\"descId\"\n                 [attr.aria-labelledby]=\"labelledById\"\n                 [required]=\"isRequired\"\n                 [readonly]=\"readonly\"\n                 type=\"text\"\n                 class=\"dds-daterangepicker__input dds-select__active-item\"\n                 (focus)=\"inputFocus()\"\n                 (blur)=\"inputBlur()\"\n                 (change)=\"inputChanged($any($event).target, daterangepickerItems.end)\"\n                 (keydown)=\"keyDownEndInput($event)\"\n                 #endInput>\n        </div>\n        } @else {\n        <span class=\"dds-daterangepicker__value dds-select__active-item\"\n              [ngClass]=\"{\n            'dds-daterangepicker__value_placeholder': !rangeFieldValue?.end\n          }\">\n          {{(rangeFieldValue?.end | i18nDate: format) || rangePlaceholder?.end}}\n        </span>\n        }\n      </div>\n\n      @if (isClearBtnEnabled) {\n      <button class=\"dds-daterangepicker__clear dds-select__icon\"\n              [ngClass]=\"{\n                'dds-daterangepicker__clear_shown': !!value,\n                'dds-daterangepicker__clear_lg': isSizeLg && isExternalLabel,\n                'dds-daterangepicker__clear_sm': isSizeSm && isExternalLabel\n              }\"\n              [attr.aria-label]=\"clearBtnAriaLabel\"\n              ddsFocus\n              type=\"button\"\n              [disabled]=\"disabled || readonly\"\n              (click)=\"clearField($event)\"\n              #clearBtn>\n        <span class=\"dds-icon dds-icon_close\"></span>\n      </button>\n      }\n      <button [ddsSticker]=\"daterangepicker\"\n              [disabled]=\"disabled || readonly\"\n              [stickerPosition]=\"stickerPosition\"\n              [stickerIndent]=\"stickerIndent\"\n              [stickerIsOutsideClick]=\"stickerIsOutsideClick\"\n              [stickerShift]=\"stickerShift\"\n              [stickerMaxHeight]=\"stickerMaxHeight\"\n              [stickerIsDisabled]=\"stickerIsDisabled\"\n              [stickerIsResponsive]=\"isResponsive\"\n              [stickerCustomClass]=\"stickerCustomClass\"\n              [stickerIsDynamic]=\"stickerIsDynamic\"\n              [stickerEl]=\"daterangepickerBtn\"\n              [stickerFocusedEl]=\"button\"\n              stickerWidth=\"auto\"\n              [attr.aria-label]=\"calendarBtnAriaLabel\"\n              [attr.aria-expanded]=\"isCalendarOpen\"\n              [attr.aria-disabled]=\"disabled\"\n              [attr.aria-invalid]=\"_isError\"\n              aria-haspopup=\"true\"\n              [attr.aria-controls]=\"popupId\"\n              ddsFocus\n              class=\"dds-daterangepicker__btn dds-select__icon dds-icon {{icon}}\"\n              (click)=\"click()\"\n              (keyup)=\"onKeyup($event)\"\n              (keydown)=\"onKeydown($event)\"\n              (onShown)=\"popupShown()\"\n              (onHidden)=\"popupHidden()\"\n              #stickerDir=\"dds-sticker\"\n              #button></button>\n    </div>\n\n    @if (_isError && errorMessage) {\n    <span data-qa=\"date-range-picker-error\"\n          class=\"dds-select__error\">{{errorMessage}}</span>\n    }\n  </div>\n\n  <span class=\"dds-datepicker__aria-description\"\n        [id]=\"descId\">\n    (date format: {{format}})\n  </span>\n\n  <!-- datepicker -->\n  <ng-template #daterangepicker>\n    <div [isResponsive]=\"isResponsive\"\n         [attr.aria-label]=\"popupAriaLabel\"\n         ddsResize\n         data-qa=\"date-range-picker\"\n         [id]=\"popupId\"\n         [attr.aria-label]=\"popupAriaLabel\"\n         role=\"dialog\"\n         aria-modal=\"true\"\n         class=\"dds-daterangepicker\"\n         [ngClass]=\"{'dds-daterangepicker_inverse': isInverse}\">\n\n      @if (smallDevice) {\n      <div class=\"dds-daterangepicker__header\">\n        @if (label) {\n        <span data-qa=\"date-range-picker-label\"\n              class=\"dds-daterangepicker__label\">{{label}}\n          @if (isRequired) {<span class=\"dds-required\"></span>}\n        </span>\n        }\n\n        <button class=\"dds-daterangepicker__close dds-icon dds-icon_close\"\n                data-qa=\"date-range-picker-button\"\n                (click)=\"close()\"></button>\n      </div>\n      }\n\n      <div class=\"dds-daterangepicker__body\">\n        <dds-datepicker-inner [rangeValue]=\"rangeValueArray\"\n                              [startDate]=\"rangeStartDate.start\"\n                              [maxDate]=\"rangeStartMaxDate || maxDate\"\n                              [minDate]=\"minDate\"\n                              [hovered]=\"rangeEndHoveredDate\"\n                              [startState]=\"startState\"\n                              [minMode]=\"minMode\"\n                              [isRange]=\"isRangepicker\"\n                              [stickerRef]=\"stickerDir\"\n                              [isResponsive]=\"isResponsive\"\n                              [isInverse]=\"isInverse\"\n                              [ariaLabel]=\"popupStartAriaLabel\"\n                              [disabledDates]=\"disabledDates\"\n                              class=\"dds-daterangepicker__item dds-daterangepicker__item_start\"\n                              (dateChanged)=\"selectedDate($event)\"\n                              (dateHovered)=\"hoveredDate($event)\"\n                              (pickerChanged)=\"pickerChanged($event)\"\n                              (dateWrapMouseenter)=\"dateWrapMouseenter()\"\n                              (dateWrapMouseleave)=\"dateWrapMouseleave()\"\n                              (afterViewInited)=\"afterViewInitedStartInner($event)\"></dds-datepicker-inner>\n\n        <dds-datepicker-inner [rangeValue]=\"rangeValueArray\"\n                              [startDate]=\"rangeStartDate.end\"\n                              [minDate]=\"minDate\"\n                              [maxDate]=\"maxDate\"\n                              [hovered]=\"rangeEndHoveredDate\"\n                              [startState]=\"startState\"\n                              [minMode]=\"minMode\"\n                              [isRange]=\"isRangepicker\"\n                              [isRangepickerEnd]=\"true\"\n                              [stickerRef]=\"stickerDir\"\n                              [isResponsive]=\"isResponsive\"\n                              [isInverse]=\"isInverse\"\n                              [ariaLabel]=\"popupEndAriaLabel\"\n                              [disabledDates]=\"disabledDates\"\n                              class=\"dds-daterangepicker__item dds-daterangepicker__item_end\"\n                              (dateHovered)=\"hoveredDate($event)\"\n                              (dateChanged)=\"selectedDate($event)\"\n                              (pickerChanged)=\"pickerChanged($event)\"\n                              (dateWrapMouseenter)=\"dateWrapMouseenter()\"\n                              (dateWrapMouseleave)=\"dateWrapMouseleave()\"\n                              (afterViewInited)=\"afterViewInitedEndInner($event)\"></dds-datepicker-inner>\n      </div>\n\n      @if (smallDevice) {\n      <div class=\"dds-daterangepicker__footer\">\n        <dds-button [size]=\"applyBtnSize\"\n                    class=\"dds-daterangepicker__btn\"\n                    (clicked)=\"applySelectedDate()\">{{applyBtnText}}</dds-button>\n      </div>\n      }\n    </div>\n  </ng-template>\n  <!-- datepicker END-->\n</div>\n","import { NgModule } from '@angular/core';\nimport { DatepickerInnerComponent } from './datepicker-inner/datepicker-inner.component';\nimport { DatepickerComponent } from './datepicker/datepicker.component';\nimport { DaterangepickerComponent } from './daterangepicker/daterangepicker.component';\nimport { DaypickerComponent } from './daypicker/daypicker.component';\nimport { MonthpickerComponent } from './monthpicker/monthpicker.component';\nimport { YearpickerComponent } from './yearpicker/yearpicker.component';\n\n@NgModule({\n  declarations: [],\n  imports: [\n    DatepickerInnerComponent,\n    DaypickerComponent,\n    MonthpickerComponent,\n    YearpickerComponent,\n    DatepickerComponent,\n    DaterangepickerComponent,\n  ],\n  exports: [DatepickerComponent, DaterangepickerComponent],\n})\nexport class DatepickerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i4","i2","i7"],"mappings":"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"}