{"version":3,"file":"ng-date-carousel-picker.mjs","sources":["../../../../libs/ng-date-carousel-picker/src/lib/utils/generate-random-string.util.ts","../../../../libs/ng-date-carousel-picker/src/lib/utils/is-range.util.ts","../../../../libs/ng-date-carousel-picker/src/lib/services/date.service.ts","../../../../libs/ng-date-carousel-picker/src/lib/services/picker.service.ts","../../../../libs/ng-date-carousel-picker/src/lib/services/calendar.service.ts","../../../../libs/ng-date-carousel-picker/src/lib/tokens/dcp-date-locale.token.ts","../../../../libs/ng-date-carousel-picker/src/lib/services/internalization.service.ts","../../../../libs/ng-date-carousel-picker/src/lib/services/options.service.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/month-name/month-name.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/month-name/month-name.component.html","../../../../libs/ng-date-carousel-picker/src/lib/models/constants/day-width.constant.ts","../../../../libs/ng-date-carousel-picker/src/lib/models/constants/days-gap.constant.ts","../../../../libs/ng-date-carousel-picker/src/lib/models/constants/months-gap.constant.ts","../../../../libs/ng-date-carousel-picker/src/lib/models/constants/default-options.constant.ts","../../../../libs/ng-date-carousel-picker/src/lib/models/constants/month-width.constant.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/month-names-track/month-names-track.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/month-names-track/month-names-track.component.html","../../../../libs/ng-date-carousel-picker/src/lib/components/day/day.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/day/day.component.html","../../../../libs/ng-date-carousel-picker/src/lib/components/month/month.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/month/month.component.html","../../../../libs/ng-date-carousel-picker/src/lib/components/selection/selection.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/selection/selection.component.html","../../../../libs/ng-date-carousel-picker/src/lib/components/days-track/days-track.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/days-track/days-track.component.html","../../../../libs/ng-date-carousel-picker/src/lib/components/calendar-day/calendar-day.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/calendar-day/calendar-day.component.html","../../../../libs/ng-date-carousel-picker/src/lib/components/calendar-month/calendar-month.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/calendar-month/calendar-month.component.html","../../../../libs/ng-date-carousel-picker/src/lib/components/calendar-months-track/calendar-months-track.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/calendar-months-track/calendar-months-track.component.html","../../../../libs/ng-date-carousel-picker/src/lib/pipes/day-range-format.pipe.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/calendar/calendar.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/calendar/calendar.component.html","../../../../libs/ng-date-carousel-picker/src/lib/components/ng-date-carousel-picker/providers/popover-config.provider.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/ng-date-carousel-picker/ng-date-carousel-picker.component.ts","../../../../libs/ng-date-carousel-picker/src/lib/components/ng-date-carousel-picker/ng-date-carousel-picker.component.html","../../../../libs/ng-date-carousel-picker/src/ng-date-carousel-picker.ts"],"sourcesContent":["export const generateRandomString = (length: number = 15): string => {\r\n  const characters: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n  const charactersLength: number = characters.length;\r\n  let result: string = '';\r\n\r\n  const randomValues: Uint32Array = new Uint32Array(length);\r\n\r\n  window.crypto.getRandomValues(randomValues);\r\n  randomValues.forEach((value: number) => (result += characters.charAt(value % charactersLength)));\r\n  return result;\r\n};\r\n","import { IRange } from '../models/interfaces';\r\n\r\n/** Type Guard for `IRange` */\r\nexport function isRange(obj: object): obj is IRange {\r\n  /* eslint-disable-next-line no-prototype-builtins */\r\n  return Object.keys(obj).length === 2 && obj.hasOwnProperty('start') && obj.hasOwnProperty('end');\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { IDay, IDayDate, IRange, IRangeDayIds, IRangeItem } from '../models/interfaces';\r\nimport { MonthOrder } from '../models/types';\r\n\r\n/** Basic service for dates */\r\n@Injectable()\r\nexport abstract class DateService {\r\n  /** Dates of days (linear structure, each day has its own Date object) */\r\n  protected readonly dayDates: IDayDate[] = [];\r\n\r\n  protected selectedDay: IDay | null = null;\r\n\r\n  /** Range Change Subscription */\r\n  protected readonly rangeChanged$: Subject<IRange | IRangeItem> = new Subject<IRange | IRangeItem>();\r\n\r\n  /** Range Change Subscription (public) */\r\n  public readonly rangeChangedObs$: Observable<IRange | IRangeItem> = this.rangeChanged$.asObservable();\r\n\r\n  /** Change Subscription */\r\n  protected readonly changed$: Subject<IRange | IRangeItem | null> = new Subject<IRange | IRangeItem | null>();\r\n\r\n  /** Change Subscription (public) */\r\n  public readonly changedObs$: Observable<IRange | IRangeItem | null> = this.changed$.asObservable();\r\n\r\n  /** Subscription to change selected days */\r\n  protected readonly dayIdsChanged$: Subject<IRangeDayIds | string> = new Subject<IRangeDayIds | string>();\r\n\r\n  /** Subscription to change selected days (public) */\r\n  public readonly dayIdsChangedObs$: Observable<IRangeDayIds | string> = this.dayIdsChanged$.asObservable();\r\n\r\n  protected abstract selectDay(day: IDay): void;\r\n  protected abstract selectRange(secondDay: IDay): void;\r\n  public abstract selectDate(day: IDay): void;\r\n\r\n  /** Getting Ids of days in the middle of a range */\r\n  protected getInRangeDayIds(startDayId: string, endDayId: string): string[] {\r\n    const result: string[] = [];\r\n\r\n    let isInRange: boolean = false;\r\n    for (const dayDate of this.dayDates) {\r\n      if (dayDate.dayId === startDayId) {\r\n        isInRange = true;\r\n        continue;\r\n      }\r\n\r\n      if (dayDate.dayId === endDayId) {\r\n        isInRange = false;\r\n        continue;\r\n      }\r\n\r\n      if (isInRange) {\r\n        result.push(dayDate.dayId);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  protected getRangeItem(day: IDay): IRangeItem {\r\n    const dayDate: IDayDate = <IDayDate>this.dayDates.find((item: IDayDate) => item.dayId === day.id);\r\n\r\n    return {\r\n      day: day.order,\r\n      weekday: day.weekdayOrder,\r\n      month: <MonthOrder>dayDate.date.getMonth(),\r\n      year: dayDate.date.getFullYear(),\r\n      timestamp: +dayDate.date,\r\n    };\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IDayDate, IDay, IMonth, IRangeDayIds, IRangeItem } from '../models/interfaces';\r\nimport { DayOrder, MonthOrder, WeekdayOrder } from '../models/types';\r\nimport { generateRandomString } from '../utils';\r\nimport { DateService } from './date.service';\r\n\r\n@Injectable()\r\nexport class PickerService extends DateService {\r\n  /** Months (nested structure, each month contains its own days)*/\r\n  private readonly months: IMonth[] = [];\r\n\r\n  /** Filling months */\r\n  private init(startDate: Date, endDate: Date): void {\r\n    const startDateCounter: Date = new Date(startDate.getTime());\r\n\r\n    while (+startDateCounter < +endDate) {\r\n      const day: IDay = {\r\n        id: generateRandomString(),\r\n        order: <DayOrder>startDateCounter.getDate(),\r\n        weekdayOrder: <WeekdayOrder>startDateCounter.getDay(),\r\n      };\r\n      this.dayDates.push({\r\n        dayId: day.id,\r\n        date: new Date(new Date(startDateCounter).setHours(0, 0, 0, 0)),\r\n      });\r\n\r\n      const currentMonthOrder: MonthOrder = <MonthOrder>startDateCounter.getMonth();\r\n      const existedMonth: IMonth | undefined = this.months.find((month: IMonth) => month.order === currentMonthOrder);\r\n\r\n      if (!existedMonth) {\r\n        this.months.push({\r\n          id: generateRandomString(),\r\n          order: currentMonthOrder,\r\n          days: [day],\r\n        });\r\n      } else {\r\n        existedMonth.days.push(day);\r\n      }\r\n\r\n      startDateCounter.setDate(startDateCounter.getDate() + 1);\r\n    }\r\n  }\r\n\r\n  /** Select one day */\r\n  protected selectDay(day: IDay): void {\r\n    this.selectedDay = day;\r\n    this.dayIdsChanged$.next(this.selectedDay.id);\r\n\r\n    const item: IRangeItem = this.getRangeItem(this.selectedDay);\r\n    this.rangeChanged$.next(item);\r\n    this.changed$.next(item);\r\n  }\r\n\r\n  /** Range selection */\r\n  protected selectRange(secondDay: IDay): void {\r\n    let startItem!: IRangeItem;\r\n    let endItem!: IRangeItem;\r\n    let inRangeDayIds: string[] = [];\r\n    let rangeDayIds!: IRangeDayIds;\r\n\r\n    const firstDayDate: IDayDate = <IDayDate>(\r\n      this.dayDates.find((item: IDayDate) => item.dayId === (<IDay>this.selectedDay).id)\r\n    );\r\n    const secondDayDate: IDayDate = <IDayDate>this.dayDates.find((item: IDayDate) => item.dayId === secondDay.id);\r\n\r\n    // If the second selected day is later than the first\r\n    if (+secondDayDate.date > +firstDayDate.date) {\r\n      startItem = this.getRangeItem(<IDay>this.selectedDay);\r\n      endItem = this.getRangeItem(secondDay);\r\n      inRangeDayIds = this.getInRangeDayIds(firstDayDate.dayId, secondDayDate.dayId);\r\n      rangeDayIds = {\r\n        startId: firstDayDate.dayId,\r\n        inRangeIds: inRangeDayIds,\r\n        endId: secondDayDate.dayId,\r\n      };\r\n    } else {\r\n      startItem = this.getRangeItem(secondDay);\r\n      endItem = this.getRangeItem(<IDay>this.selectedDay);\r\n      inRangeDayIds = this.getInRangeDayIds(secondDayDate.dayId, firstDayDate.dayId);\r\n      rangeDayIds = {\r\n        startId: secondDayDate.dayId,\r\n        inRangeIds: inRangeDayIds,\r\n        endId: firstDayDate.dayId,\r\n      };\r\n    }\r\n\r\n    this.rangeChanged$.next({\r\n      start: startItem,\r\n      end: endItem,\r\n    });\r\n    this.changed$.next({\r\n      start: startItem,\r\n      end: endItem,\r\n    });\r\n\r\n    this.dayIdsChanged$.next(rangeDayIds);\r\n    this.selectedDay = null;\r\n  }\r\n\r\n  public selectDate(day: IDay): void {\r\n    if (this.selectedDay?.id === day.id) {\r\n      this.selectedDay = null;\r\n      this.changed$.next(this.selectedDay);\r\n      return;\r\n    }\r\n\r\n    if (this.selectedDay) {\r\n      this.selectRange(day);\r\n    } else {\r\n      this.selectDay(day);\r\n    }\r\n  }\r\n\r\n  public getMonths(startDate: Date, endDate: Date): IMonth[] {\r\n    if (this.months.length) {\r\n      return this.months;\r\n    }\r\n\r\n    this.init(startDate, endDate);\r\n    return this.months;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IDateIndexes, IDay, IDayDate, IMonth, IRange, IRangeDayIds, IRangeItem, IYear } from '../models/interfaces';\r\nimport { DayOrder, MonthOrder, WeekdayOrder } from '../models/types';\r\nimport { generateRandomString } from '../utils';\r\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { DateService } from './date.service';\r\n\r\n@Injectable()\r\nexport class CalendarService extends DateService {\r\n  /** Max year number (relatively current) */\r\n  private readonly yearLimit: number = 2;\r\n\r\n  private readonly years: IYear[] = [];\r\n\r\n  /** Change subscription (internal) */\r\n  private readonly changedInner$: Subject<IRange | IRangeItem | null> = new Subject<IRange | IRangeItem | null>();\r\n\r\n  /** Change subscription */\r\n  public readonly changedInnerObs$: Observable<IRange | IRangeItem | null> = this.changedInner$.asObservable();\r\n\r\n  /** Subscription to change date indexes for a calendar */\r\n  private readonly dateIndexes$: BehaviorSubject<IDateIndexes> = new BehaviorSubject<IDateIndexes>({\r\n    monthIndex: 0,\r\n    yearIndex: 0,\r\n  });\r\n\r\n  /** Subscription to change date indexes for the calendar (public) */\r\n  public readonly dateIndexesObs$: Observable<IDateIndexes> = this.dateIndexes$.asObservable();\r\n\r\n  /** Filling in years */\r\n  private init(): void {\r\n    const now: Date = new Date();\r\n    const nowCounter: Date = new Date(new Date().setDate(1));\r\n    const nowNYears: Date = new Date(\r\n      new Date(\r\n        new Date(\r\n          new Date(new Date().setFullYear(now.getFullYear() + <number>(<number>this.yearLimit + 1))).setMonth(0),\r\n        ),\r\n      ).setDate(1),\r\n    );\r\n\r\n    while (+nowCounter < +nowNYears) {\r\n      const day: IDay = {\r\n        id: generateRandomString(),\r\n        order: <DayOrder>nowCounter.getDate(),\r\n        weekdayOrder: <WeekdayOrder>nowCounter.getDay(),\r\n      };\r\n      this.dayDates.push({\r\n        dayId: day.id,\r\n        date: new Date(new Date(nowCounter).setHours(0, 0, 0, 0)),\r\n      });\r\n\r\n      const currentYearNum: number = nowCounter.getFullYear();\r\n      const currentMonthOrder: MonthOrder = <MonthOrder>nowCounter.getMonth();\r\n      const existedYear: IYear | undefined = this.years.find((year: IYear) => year.num === currentYearNum);\r\n\r\n      if (!existedYear) {\r\n        this.years.push({\r\n          id: generateRandomString(),\r\n          num: currentYearNum,\r\n          months: [\r\n            {\r\n              id: generateRandomString(),\r\n              order: currentMonthOrder,\r\n              days: [day],\r\n            },\r\n          ],\r\n        });\r\n      } else {\r\n        const existedMonth: IMonth | undefined = existedYear.months.find(\r\n          (month: IMonth) => month.order === currentMonthOrder,\r\n        );\r\n\r\n        if (!existedMonth) {\r\n          existedYear.months.push({\r\n            id: generateRandomString(),\r\n            order: currentMonthOrder,\r\n            days: [day],\r\n          });\r\n        } else {\r\n          existedMonth.days.push(day);\r\n        }\r\n      }\r\n\r\n      nowCounter.setDate(nowCounter.getDate() + 1);\r\n    }\r\n  }\r\n\r\n  /** Select one day */\r\n  protected selectDay(day: IDay): void {\r\n    this.selectedDay = day;\r\n    this.dayIdsChanged$.next(this.selectedDay.id);\r\n\r\n    const item: IRangeItem = this.getRangeItem(this.selectedDay);\r\n    this.changedInner$.next(item);\r\n  }\r\n\r\n  /** Range selection */\r\n  protected selectRange(secondDay: IDay): void {\r\n    let startItem!: IRangeItem;\r\n    let endItem!: IRangeItem;\r\n    let inRangeDayIds: string[] = [];\r\n    let rangeDayIds!: IRangeDayIds;\r\n\r\n    const firstDayDate: IDayDate = <IDayDate>(\r\n      this.dayDates.find((item: IDayDate) => item.dayId === (<IDay>this.selectedDay).id)\r\n    );\r\n    const secondDayDate: IDayDate = <IDayDate>this.dayDates.find((item: IDayDate) => item.dayId === secondDay.id);\r\n\r\n    // If the second selected day is later than the first\r\n    if (+secondDayDate.date > +firstDayDate.date) {\r\n      startItem = this.getRangeItem(<IDay>this.selectedDay);\r\n      endItem = this.getRangeItem(secondDay);\r\n      inRangeDayIds = this.getInRangeDayIds(firstDayDate.dayId, secondDayDate.dayId);\r\n      rangeDayIds = {\r\n        startId: firstDayDate.dayId,\r\n        inRangeIds: inRangeDayIds,\r\n        endId: secondDayDate.dayId,\r\n      };\r\n    } else {\r\n      startItem = this.getRangeItem(secondDay);\r\n      endItem = this.getRangeItem(<IDay>this.selectedDay);\r\n      inRangeDayIds = this.getInRangeDayIds(secondDayDate.dayId, firstDayDate.dayId);\r\n      rangeDayIds = {\r\n        startId: secondDayDate.dayId,\r\n        inRangeIds: inRangeDayIds,\r\n        endId: firstDayDate.dayId,\r\n      };\r\n    }\r\n\r\n    this.changedInner$.next({\r\n      start: startItem,\r\n      end: endItem,\r\n    });\r\n\r\n    this.dayIdsChanged$.next(rangeDayIds);\r\n    this.selectedDay = null;\r\n  }\r\n\r\n  /** Getting a Date object by day Id */\r\n  public getDateByDayId(dayId: string): Date {\r\n    const dayDate: IDayDate = <IDayDate>this.dayDates.find((date: IDayDate) => date.dayId === dayId);\r\n    return dayDate.date;\r\n  }\r\n\r\n  public selectDate(day: IDay): void {\r\n    if (this.selectedDay?.id === day.id) {\r\n      this.selectedDay = null;\r\n      this.changedInner$.next(this.selectedDay);\r\n      return;\r\n    }\r\n\r\n    if (this.selectedDay) {\r\n      this.selectRange(day);\r\n    } else {\r\n      this.selectDay(day);\r\n    }\r\n  }\r\n\r\n  public changeDateIndexes(indexes: IDateIndexes): void {\r\n    this.dateIndexes$.next(indexes);\r\n  }\r\n\r\n  /** Change the selected date or date range */\r\n  public change(value: IRange | IRangeItem): void {\r\n    this.changed$.next(value);\r\n  }\r\n\r\n  public getYears(): IYear[] {\r\n    if (this.years.length) {\r\n      return this.years;\r\n    }\r\n\r\n    this.init();\r\n    return this.years;\r\n  }\r\n}\r\n","import { InjectionToken, LOCALE_ID, inject } from '@angular/core';\r\n\r\n/** Token for locale */\r\nexport const DCP_DATE_LOCALE = new InjectionToken<string>('DCP_DATE_LOCALE', {\r\n  providedIn: 'root',\r\n  factory: DCP_DATE_LOCALE_FACTORY,\r\n});\r\n\r\nfunction DCP_DATE_LOCALE_FACTORY(): string {\r\n  return inject(LOCALE_ID);\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { DCP_DATE_LOCALE } from '../tokens';\r\nimport { DayOrder, MonthOrder } from '../models/types';\r\n\r\n@Injectable()\r\nexport class InternalizationService {\r\n  /** Mock year for generation */\r\n  private readonly yearForGeneration: number = 2017;\r\n\r\n  /** Mock month for generation */\r\n  private readonly monthForGeneration: MonthOrder = 0;\r\n\r\n  /** Mock date for generation */\r\n  private readonly dateForGeneration: DayOrder = 1;\r\n\r\n  private readonly locale: string = inject(DCP_DATE_LOCALE);\r\n\r\n  monthNames: string[] = [];\r\n  weekdays: string[] = [];\r\n  capitalizedWeekdays: string[] = [];\r\n  capitalizedMonthNames: string[] = [];\r\n\r\n  constructor() {\r\n    this.setMonthNames();\r\n    this.setWeekdays();\r\n    this.capitalizedMonthNames = this.monthNames.map(\r\n      (monthName: string) => monthName[0].toUpperCase() + monthName.slice(1),\r\n    );\r\n    this.capitalizedWeekdays = this.weekdays.map((weekday: string) => weekday[0].toUpperCase() + weekday.slice(1));\r\n  }\r\n\r\n  /**\r\n   * Taken from\r\n   * https://github.com/angular/components/blob/83b6ebcfc0dc8802c1f6d394ee6070204cc9b3f5/src/material/core/datetime/native-date-adapter.ts#L252\r\n   */\r\n  private formatIntlDateTime(dateTime: Intl.DateTimeFormat, date: Date): string {\r\n    const newDate: Date = new Date();\r\n    newDate.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\r\n    newDate.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\r\n    return dateTime.format(newDate);\r\n  }\r\n\r\n  /**\r\n   * Taken from\r\n   * https://github.com/angular/components/blob/83b6ebcfc0dc8802c1f6d394ee6070204cc9b3f5/src/material/core/datetime/native-date-adapter.ts#L21\r\n   */\r\n  private range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n    const valuesArray = Array(length);\r\n    for (let i = 0; i < length; i++) {\r\n      valuesArray[i] = valueFunction(i);\r\n    }\r\n    return valuesArray;\r\n  }\r\n\r\n  /**\r\n   * Similar to\r\n   * https://github.com/angular/components/blob/83b6ebcfc0dc8802c1f6d394ee6070204cc9b3f5/src/material/core/datetime/native-date-adapter.ts#L71\r\n   */\r\n  private setMonthNames(): void {\r\n    const dateTime: Intl.DateTimeFormat = new Intl.DateTimeFormat(this.locale, { month: 'long', timeZone: 'utc' });\r\n    const valueFunction: (index: number) => string = (month: number) =>\r\n      this.formatIntlDateTime(dateTime, new Date(this.yearForGeneration, month, this.dateForGeneration));\r\n    this.monthNames = this.range<string>(12, valueFunction);\r\n  }\r\n\r\n  /**\r\n   * Similar to\r\n   * https://github.com/angular/components/blob/83b6ebcfc0dc8802c1f6d394ee6070204cc9b3f5/src/material/core/datetime/native-date-adapter.ts#L81\r\n   */\r\n  private setWeekdays(): void {\r\n    const dateTime: Intl.DateTimeFormat = new Intl.DateTimeFormat(this.locale, { weekday: 'short', timeZone: 'utc' });\r\n    const valueFunction: (index: number) => string = (day: number) =>\r\n      this.formatIntlDateTime(dateTime, new Date(this.yearForGeneration, this.monthForGeneration, day + 1));\r\n    this.weekdays = this.range(7, valueFunction);\r\n  }\r\n\r\n  public format(date: Date): string {\r\n    return Intl.DateTimeFormat(this.locale).format(date);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IPickerOptions } from '../models/interfaces';\r\n\r\n@Injectable()\r\nexport class OptionsService {\r\n  private options!: IPickerOptions;\r\n\r\n  public getOptions(): IPickerOptions {\r\n    return this.options;\r\n  }\r\n\r\n  public setOptions(options: IPickerOptions): void {\r\n    this.options = options;\r\n  }\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  Input,\r\n  OnInit,\r\n  ViewChild,\r\n  inject,\r\n} from '@angular/core';\r\nimport { IMonth } from '../../models/interfaces';\r\nimport { InternalizationService } from '../../services';\r\n\r\n@Component({\r\n  selector: 'dcp-month-name',\r\n  templateUrl: './month-name.component.html',\r\n  styleUrls: ['./month-name.component.scss'],\r\n  providers: [InternalizationService],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MonthNameComponent implements OnInit {\r\n  private readonly internalizationService: InternalizationService = inject(InternalizationService);\r\n\r\n  @Input({ required: true }) public month!: IMonth;\r\n\r\n  @Input({ required: true })\r\n  @HostBinding('class.active')\r\n  public isActive: boolean = false;\r\n\r\n  public name: string = '';\r\n\r\n  @ViewChild('name_ref') public readonly nameRef!: ElementRef<HTMLParagraphElement>;\r\n\r\n  public ngOnInit(): void {\r\n    this.name = this.internalizationService.capitalizedMonthNames[this.month.order];\r\n  }\r\n}\r\n","<div #name_ref class=\"month-name\">{{ name }}</div>","export const DAY_WIDTH: number = 42;\r\n","/** Distance between days */\r\nexport const DAYS_GAP: number = 10;\r\n","/** Distance between months */\r\nexport const MONTHS_GAP: number = 30;\r\n","import { IPickerOptions } from '../interfaces';\r\n\r\nconst now: Date = new Date();\r\n\r\nexport const DEFAULT_OPTIONS: IPickerOptions = {\r\n  scrollShift: 150,\r\n  startDate: now,\r\n  endDate: new Date(new Date().setMonth(now.getMonth() + 3)),\r\n  showCalendar: true,\r\n  firstDayOfWeekIndex: 1,\r\n  weekendIndexes: [0, 6],\r\n};\r\n","export const MONTH_WIDTH: number = 272;\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  OnInit,\r\n  QueryList,\r\n  Renderer2,\r\n  ViewChild,\r\n  ViewChildren,\r\n  inject,\r\n} from '@angular/core';\r\nimport { IMonth } from '../../models/interfaces';\r\nimport { MonthNameComponent } from '../month-name/month-name.component';\r\nimport { NgFor, NgForOf } from '@angular/common';\r\nimport { DEFAULT_OPTIONS, DAY_WIDTH, DAYS_GAP, MONTHS_GAP } from '../../models/constants';\r\nimport { IntRange } from '../../models/types';\r\nimport { OptionsService } from '../../services';\r\n\r\n@Component({\r\n  selector: 'dcp-month-names-track',\r\n  templateUrl: './month-names-track.component.html',\r\n  styleUrls: ['./month-names-track.component.scss'],\r\n  imports: [NgFor, NgForOf, MonthNameComponent],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MonthNamesTrackComponent implements OnInit, AfterViewInit {\r\n  private scrollShift: IntRange<42, 300> = DEFAULT_OPTIONS['scrollShift'];\r\n\r\n  /** Distance between month names */\r\n  private readonly distanceBeetweenNames: number = MONTHS_GAP;\r\n\r\n  /**\r\n   * The left indentation for month names is equal to the width of the control button (for this there is, for example,\r\n   * sass variable `$control-button-width`) minus padding on one side\r\n   * (which the `month-names-track` class has), i.e. = 62 -5\r\n   */\r\n  private readonly namesOffsetLeft: number = 57;\r\n\r\n  @ViewChild('scroller') private readonly scrollerRef!: ElementRef<HTMLDivElement>;\r\n\r\n  @ViewChildren(MonthNameComponent) private readonly namesComponents!: QueryList<MonthNameComponent>;\r\n\r\n  /** Active month name index */\r\n  public activeNameIndex: number = 0;\r\n\r\n  @Input({ required: true }) public months: IMonth[] = [];\r\n\r\n  private readonly optionsService: OptionsService = inject(OptionsService);\r\n  private readonly renderer: Renderer2 = inject(Renderer2);\r\n  private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  public ngOnInit(): void {\r\n    this.scrollShift = this.optionsService.getOptions().scrollShift;\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    this.setNamesOffset();\r\n  }\r\n\r\n  private getMonthComponentWidth(dayNumber: number): number {\r\n    return DAY_WIDTH * dayNumber + DAYS_GAP * (dayNumber - 1);\r\n  }\r\n\r\n  /** Setting the initial `left` property for month name components */\r\n  private setNamesOffset(): void {\r\n    // The first one is set to the initial value `namesOffsetLeft`\r\n    let leftOffset: number = this.namesOffsetLeft;\r\n    this.setNameComponentLeft(this.activeNameIndex, leftOffset);\r\n\r\n    // For subsequent months, the width of all previous months is calculated and the distance between the names is added\r\n    for (let i = 1; i < this.months.length; ++i) {\r\n      const month: IMonth = this.months[i - 1];\r\n      const monthWidth: number = this.getMonthComponentWidth(month.days.length);\r\n      leftOffset += monthWidth + this.distanceBeetweenNames;\r\n      this.setNameComponentLeft(i, leftOffset);\r\n    }\r\n  }\r\n\r\n  /** Getting the distance between the current month name component and the previous one */\r\n  private getDistanceBeetweenActiveAndPreviousName(): number {\r\n    const activeMonthComponent: MonthNameComponent = <MonthNameComponent>this.namesComponents.get(this.activeNameIndex);\r\n\r\n    const activeNameElem: HTMLParagraphElement = activeMonthComponent.nameRef.nativeElement;\r\n    const prevNameElem: HTMLParagraphElement = this.getPreviousNameElement();\r\n\r\n    const activeNameElemRect: DOMRect = activeNameElem.getBoundingClientRect();\r\n    const prevNameElemRect: DOMRect = prevNameElem.getBoundingClientRect();\r\n\r\n    return activeNameElemRect.left - (prevNameElemRect.left + prevNameElem.clientWidth);\r\n  }\r\n\r\n  /** Getting the distance between the current month name component and the next one */\r\n  private getDistanceBeetweenActiveAndNextName(): number {\r\n    const activeMonthComponent: MonthNameComponent = <MonthNameComponent>this.namesComponents.get(this.activeNameIndex);\r\n    const nextMonthComponent: MonthNameComponent = <MonthNameComponent>(\r\n      this.namesComponents.get(this.activeNameIndex + 1)\r\n    );\r\n\r\n    const activeNameElem: HTMLParagraphElement = activeMonthComponent.nameRef.nativeElement;\r\n    const nextNameElem: HTMLParagraphElement = nextMonthComponent.nameRef.nativeElement;\r\n\r\n    const activeNameElemRect: DOMRect = activeNameElem.getBoundingClientRect();\r\n    const nextNameElemRect: DOMRect = nextNameElem.getBoundingClientRect();\r\n\r\n    return nextNameElemRect.left - (activeNameElemRect.left + activeNameElem.clientWidth);\r\n  }\r\n\r\n  /** Getting the width of the active month name */\r\n  private getActiveNameComponentWidth(): number {\r\n    const activeMonthComponent: MonthNameComponent = <MonthNameComponent>this.namesComponents.get(this.activeNameIndex);\r\n    return activeMonthComponent.nameRef.nativeElement.clientWidth;\r\n  }\r\n\r\n  /** Getting the previous (relatively active) month name element */\r\n  private getPreviousNameElement(): HTMLParagraphElement {\r\n    const prevMonthComponent: MonthNameComponent = <MonthNameComponent>(\r\n      this.namesComponents.get(this.activeNameIndex - 1)\r\n    );\r\n    const prevNameElem: HTMLParagraphElement = prevMonthComponent.nameRef.nativeElement;\r\n    return prevNameElem;\r\n  }\r\n\r\n  /** Getting the month component's indentation from the left edge of the first month */\r\n  private getMonthComponentLeftOffset(index: number): number {\r\n    let offset: number = 0;\r\n    for (let i = 0; i <= index; ++i) {\r\n      const month: IMonth = this.months[i];\r\n      offset += this.getMonthComponentWidth(month.days.length);\r\n      offset += this.distanceBeetweenNames;\r\n    }\r\n    return offset;\r\n  }\r\n\r\n  /** Setting the `left` property for the month name component */\r\n  public setNameComponentLeft(index: number, value: number): void {\r\n    const nameComponent: MonthNameComponent = <MonthNameComponent>this.namesComponents.get(index);\r\n    this.renderer.setStyle(nameComponent.nameRef.nativeElement, 'left', `${value}px`);\r\n  }\r\n\r\n  /** Setting the initial `left` property for the active month name component */\r\n  public setNameComponentStartLeft(): void {\r\n    /**\r\n     * When setting the active month name to an initial value, it may turn out that\r\n     * the active element is now not the first (this happens when the first month has few days and the scroll exceeds\r\n     * the entire width of the month), then you need to \"fix\" from the active month to the first (not inclusive) name\r\n     * at first.\r\n     * Theoretically, in this case `activeNameIndex` <= 1.\r\n     * It might also be worth doing the same check when scrolling to the right, but taking into account the limitation on `scrollShift`\r\n     * in the config, the option in which the scroll is larger than the width of the last month (which is filled completely) is almost\r\n     * impossible\r\n     */\r\n    /* eslint-disable for-direction */\r\n    for (let i = this.activeNameIndex; i > 0; --i) {\r\n      this.attachActiveNameAtStart();\r\n      --this.activeNameIndex;\r\n      this.cdr.detectChanges();\r\n    }\r\n    this.setNameComponentLeft(this.activeNameIndex, this.namesOffsetLeft);\r\n  }\r\n\r\n  /** Setting the initial `left` property for the active month name component */\r\n  public setNameComponentEndLeft(endShift: number): void {\r\n    this.setNameComponentLeft(this.activeNameIndex, endShift + this.namesOffsetLeft);\r\n  }\r\n\r\n  /** Setting the `left` property for the active month name component */\r\n  public setActiveNameComponentLeft(value: number): void {\r\n    this.setNameComponentLeft(this.activeNameIndex, value);\r\n  }\r\n\r\n  /** Setting the `left` property for the scroller */\r\n  public setScrollerLeft(value: number): void {\r\n    this.renderer.setStyle(this.scrollerRef.nativeElement, 'left', `${value}px`);\r\n  }\r\n\r\n  private isFirstNameActive(): boolean {\r\n    return this.activeNameIndex === 0;\r\n  }\r\n\r\n  private isLastNameActive(): boolean {\r\n    return this.activeNameIndex === this.months.length - 1;\r\n  }\r\n\r\n  /** Is there enough space between month names for scrolling */\r\n  private isDistanceBeetweenNamesEnough(distanceBetweenMonthNames: number): boolean {\r\n    /** It is still necessary to subtract the distance between the names from the actual distance */\r\n    return distanceBetweenMonthNames - this.distanceBeetweenNames > this.scrollShift;\r\n  }\r\n\r\n  /** \"Pinning\" the active name at the beginning of its month */\r\n  private attachActiveNameAtStart(): void {\r\n    /**\r\n     * To \"pin\" an active name at the beginning of its month,\r\n     * you need to get the indentation from the left edge of the previous month\r\n     */\r\n    const monthComponentOffset: number = this.getMonthComponentLeftOffset(this.activeNameIndex - 1);\r\n    this.setActiveNameComponentLeft(this.namesOffsetLeft + monthComponentOffset);\r\n  }\r\n\r\n  /** \"Pinning\" the active name at the end of its month*/\r\n  private attachActiveNameAtEnd(): void {\r\n    /**\r\n     * To \"pin\" an active name at the beginning of its month,\r\n     * you need to get the indent from the left edge of the previous month, subtract\r\n     * `distanceBeetweenNames` and subtract the width of the active month name\r\n     */\r\n    const monthOffset: number = this.getMonthComponentLeftOffset(this.activeNameIndex);\r\n    const activeNameComponentWidth: number = this.getActiveNameComponentWidth();\r\n\r\n    this.setActiveNameComponentLeft(\r\n      this.namesOffsetLeft + monthOffset - this.distanceBeetweenNames - activeNameComponentWidth,\r\n    );\r\n  }\r\n\r\n  /** Is there a transition to the previous month */\r\n  private isGoingMovingToPreviousName(newLeftValue: number): boolean {\r\n    const monthComponentOffset: number = this.getMonthComponentLeftOffset(this.activeNameIndex - 1);\r\n    const prevNameElem: HTMLParagraphElement = this.getPreviousNameElement();\r\n\r\n    /**\r\n     * If the new scroll value (newLeftValue) is always negative, so in fact, how much\r\n     * scrolled equal to `-newLeftValue`) less than the indent of the previous month from which\r\n     * took away `distanceBeetweenNames` (this will be the actual distance from the month) and\r\n     * the width of the previous month name, which means there has been a transition to the previous month\r\n     */\r\n    return -newLeftValue <= monthComponentOffset - this.distanceBeetweenNames - prevNameElem.clientWidth;\r\n  }\r\n\r\n  /** Is there a transition to the next month */\r\n  private isGoingMovingToNextName(newLeftValue: number): boolean {\r\n    const monthComponentOffset: number = this.getMonthComponentLeftOffset(this.activeNameIndex);\r\n\r\n    /**\r\n     * If the new scroll value (newLeftValue) is always negative, so in fact, how much\r\n     * scrolled equal to `-newLeftValue`) greater than the previous month's indent\r\n     * it means there has been a transition to the next month\r\n     */\r\n    return -newLeftValue >= monthComponentOffset;\r\n  }\r\n\r\n  public scrollLeft(newLeftValue: number): void {\r\n    this.setScrollerLeft(newLeftValue);\r\n\r\n    if (this.isFirstNameActive()) {\r\n      /** The first element does not need to be checked in any way, as it has no other month names on the left */\r\n      this.setActiveNameComponentLeft(-newLeftValue + this.namesOffsetLeft);\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    const distanceBetweenMonthNames: number = this.getDistanceBeetweenActiveAndPreviousName();\r\n\r\n    if (this.isDistanceBeetweenNamesEnough(distanceBetweenMonthNames)) {\r\n      /** If the distance between the month names is greater than what needs to be scrolled, then just scroll */\r\n      this.setActiveNameComponentLeft(-newLeftValue + this.namesOffsetLeft);\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    /**\r\n     * If the distance between the month names is less than what needs to be scrolled, then\r\n     * it is necessary to \"pin\" the active name at the beginning of its month\r\n     */\r\n    this.attachActiveNameAtStart();\r\n\r\n    if (this.isGoingMovingToPreviousName(newLeftValue)) {\r\n      /** If there is a transition to the previous month, you need to change the index of the active title and scroll through it */\r\n      --this.activeNameIndex;\r\n      this.setActiveNameComponentLeft(-newLeftValue + this.namesOffsetLeft);\r\n    }\r\n\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  public scrollRight(newLeftValue: number): void {\r\n    this.setScrollerLeft(newLeftValue);\r\n\r\n    if (this.isLastNameActive()) {\r\n      /** The first element does not need to be checked in any way, as it has no other month names on the right */\r\n      this.setActiveNameComponentLeft(-newLeftValue + this.namesOffsetLeft);\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    const distanceBetweenMonthNames: number = this.getDistanceBeetweenActiveAndNextName();\r\n\r\n    if (this.isDistanceBeetweenNamesEnough(distanceBetweenMonthNames)) {\r\n      /** If the distance between the month names is greater than what needs to be scrolled, then just scroll */\r\n      this.setActiveNameComponentLeft(-newLeftValue + this.namesOffsetLeft);\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    /**\r\n     * If the distance between the month names is less than what needs to be scrolled, then\r\n     * it is necessary to \"pin\" the active name at the end of its month\r\n     */\r\n    this.attachActiveNameAtEnd();\r\n\r\n    if (this.isGoingMovingToNextName(newLeftValue)) {\r\n      /** If there is a transition to the next month, you need to change the index of the active title and scroll through it */\r\n      ++this.activeNameIndex;\r\n      this.setActiveNameComponentLeft(-newLeftValue + this.namesOffsetLeft);\r\n    }\r\n\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  public trackByMonthId(index: number, month: IMonth): string {\r\n    return month.id;\r\n  }\r\n}\r\n","<div class=\"month-names-track\">\r\n  <div class=\"viewport\">\r\n    <div #scroller class=\"scroller\">\r\n      <dcp-month-name\r\n        *ngFor=\"let month of months; let i = index; trackBy:trackByMonthId\"\r\n        [month]=\"month\"\r\n        [isActive]=\"i === activeNameIndex\"\r\n      ></dcp-month-name>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, OnInit, inject } from '@angular/core';\r\nimport { IDay } from '../../models/interfaces';\r\nimport { InternalizationService, OptionsService, PickerService } from '../../services';\r\n\r\n@Component({\r\n  selector: 'dcp-day',\r\n  templateUrl: './day.component.html',\r\n  styleUrls: ['./day.component.scss'],\r\n  standalone: true,\r\n  providers: [InternalizationService],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DayComponent implements OnInit {\r\n  @Input({ required: true }) public day!: IDay;\r\n\r\n  public weekday: string = '';\r\n\r\n  private readonly pickerService: PickerService = inject(PickerService);\r\n  private readonly internalizationService: InternalizationService = inject(InternalizationService);\r\n  private readonly optionsService: OptionsService = inject(OptionsService);\r\n\r\n  public ngOnInit(): void {\r\n    this.weekday = this.internalizationService.capitalizedWeekdays[this.day.weekdayOrder];\r\n  }\r\n\r\n  @HostBinding('class.selected') public selected: boolean = false;\r\n\r\n  /** Is it in the range */\r\n  @HostBinding('class.in_range') public inRange: boolean = false;\r\n\r\n  /** Select a day */\r\n  public select(): void {\r\n    this.selected = !this.selected;\r\n    this.pickerService.selectDate(this.day);\r\n  }\r\n\r\n  public isWeekend(): boolean {\r\n    return this.optionsService.getOptions().weekendIndexes.includes(this.day.weekdayOrder);\r\n  }\r\n}\r\n","<button type=\"button\" class=\"day\" (click)=\"select()\">\r\n  <p class=\"day__order\">{{ day.order }}</p>\r\n  <span class=\"day__weekday\" [class.weekend]=\"isWeekend()\">{{ weekday }}</span>\r\n</button>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  Input,\r\n  QueryList,\r\n  SkipSelf,\r\n  ViewChildren,\r\n  inject,\r\n} from '@angular/core';\r\nimport { NgForOf } from '@angular/common';\r\nimport { IDay, IMonth, IRangeDayIds } from '../../models/interfaces';\r\nimport { DayComponent } from '../day/day.component';\r\n\r\n@Component({\r\n  selector: 'dcp-month',\r\n  templateUrl: './month.component.html',\r\n  styleUrls: ['./month.component.scss'],\r\n  imports: [NgForOf, DayComponent],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MonthComponent {\r\n  @ViewChildren(DayComponent) public readonly dayComponents!: QueryList<DayComponent>;\r\n\r\n  @Input({ required: true }) public month!: IMonth;\r\n\r\n  /**\r\n   * To update the states of days, it is the parent ChangeDetectorRef that is used\r\n   * due to the specifics of HostBinding, described here https://github.com/angular/angular/issues/22560\r\n   */\r\n  @SkipSelf() private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  /** Update selection status for one day */\r\n  updateDaySelection(selectedDayId: string): void {\r\n    for (const dayComponent of this.dayComponents) {\r\n      dayComponent.selected = dayComponent.day.id === selectedDayId;\r\n      dayComponent.inRange = false;\r\n      this.cdr.detectChanges();\r\n    }\r\n  }\r\n\r\n  /** Update in range status for all days */\r\n  updateDayRangeSelection(data: IRangeDayIds): void {\r\n    for (const dayComponent of this.dayComponents) {\r\n      dayComponent.inRange = data.inRangeIds.includes(dayComponent.day.id);\r\n      this.cdr.detectChanges();\r\n    }\r\n  }\r\n\r\n  public trackByDayId(index: number, day: IDay): string {\r\n    return day.id;\r\n  }\r\n}\r\n","<div class=\"month\">\r\n  <div class=\"month__days\">\r\n    <dcp-day *ngFor=\"let day of month.days; trackBy:trackByDayId\" [day]=\"day\"></dcp-day>\r\n  </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, ElementRef, Renderer2, ViewChild, inject } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'dcp-selection',\r\n  templateUrl: './selection.component.html',\r\n  styleUrls: ['./selection.component.scss'],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectionComponent {\r\n  @ViewChild('selection') private readonly selectionRef!: ElementRef<HTMLDivElement>;\r\n\r\n  @ViewChild('left_half') private readonly leftHalfRef!: ElementRef<HTMLDivElement>;\r\n  @ViewChild('right_half') private readonly rightHalfRef!: ElementRef<HTMLDivElement>;\r\n  @ViewChild('right_half_wrapper') private readonly rightHalfWrapperRef!: ElementRef<HTMLDivElement>;\r\n\r\n  private readonly renderer: Renderer2 = inject(Renderer2);\r\n\r\n  /** Setting the width of a selection component */\r\n  private setSelectionWidth(value: number): void {\r\n    this.renderer.setStyle(this.selectionRef.nativeElement, 'width', `${value}px`);\r\n    this.renderer.setStyle(this.selectionRef.nativeElement, 'max-width', `${value}px`);\r\n  }\r\n\r\n  /** Setting the left offset of a selection component */\r\n  public setSelectionLeft(value: number): void {\r\n    this.renderer.setStyle(this.selectionRef.nativeElement, 'left', `${value}px`);\r\n  }\r\n\r\n  public select(width: number): void {\r\n    this.renderer.setStyle(this.leftHalfRef.nativeElement, 'left', `${width / 2}px`);\r\n    this.renderer.setStyle(this.leftHalfRef.nativeElement, 'max-width', `${width / 2}px`);\r\n    this.renderer.setStyle(this.leftHalfRef.nativeElement, 'opacity', 1);\r\n\r\n    this.renderer.setStyle(this.rightHalfRef.nativeElement, 'max-width', `${width / 2}px`);\r\n    this.renderer.setStyle(this.rightHalfRef.nativeElement, 'opacity', 1);\r\n    this.renderer.setStyle(this.rightHalfWrapperRef.nativeElement, 'max-width', `${width / 2}px`);\r\n\r\n    this.setSelectionWidth(width);\r\n  }\r\n\r\n  public unselect(): void {\r\n    this.renderer.setStyle(this.leftHalfRef.nativeElement, 'left', '0px');\r\n    this.renderer.setStyle(this.leftHalfRef.nativeElement, 'max-width', '0px');\r\n    this.renderer.setStyle(this.leftHalfRef.nativeElement, 'opacity', 0);\r\n\r\n    this.renderer.setStyle(this.rightHalfRef.nativeElement, 'max-width', '0px');\r\n    this.renderer.setStyle(this.rightHalfRef.nativeElement, 'opacity', 0);\r\n    this.renderer.setStyle(this.rightHalfWrapperRef.nativeElement, 'max-width', '0px');\r\n\r\n    this.setSelectionWidth(0);\r\n  }\r\n}\r\n","<div #selection class=\"selection\">\r\n  <div #left_half class=\"left__half\"></div>\r\n  <div #right_half_wrapper class=\"right__half-wrapper\">\r\n    <div #right_half class=\"right__half\"></div>\r\n  </div>\r\n</div>","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  OnInit,\r\n  QueryList,\r\n  Renderer2,\r\n  ViewChild,\r\n  ViewChildren,\r\n  inject,\r\n} from '@angular/core';\r\nimport { NgClass, NgForOf } from '@angular/common';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { IMonth, IRangeDayIds } from '../../models/interfaces';\r\nimport { PickerService } from '../../services';\r\nimport { MonthComponent } from '../month/month.component';\r\nimport { DayComponent } from '../day/day.component';\r\nimport { SelectionComponent } from '../selection/selection.component';\r\nimport { DAY_WIDTH, DAYS_GAP, MONTHS_GAP } from '../../models/constants';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n  selector: 'dcp-days-track',\r\n  templateUrl: './days-track.component.html',\r\n  styleUrls: ['./days-track.component.scss'],\r\n  imports: [NgClass, NgForOf, MonthComponent, SelectionComponent],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DaysTrackComponent implements OnInit {\r\n  @ViewChild('scroller') private readonly scrollerRef!: ElementRef<HTMLDivElement>;\r\n  @ViewChild('viewport') private readonly viewportRef!: ElementRef<HTMLDivElement>;\r\n\r\n  @ViewChildren(MonthComponent) private readonly monthComponents!: QueryList<MonthComponent>;\r\n  @ViewChild(SelectionComponent) private readonly selectionComponent!: SelectionComponent;\r\n\r\n  @Input({ required: true }) public months: IMonth[] = [];\r\n\r\n  /** Is the track at the very beginning */\r\n  @Input({ required: true }) public inStart: boolean = true;\r\n\r\n  /** Is the track at the very end */\r\n  @Input({ required: true }) public inEnd: boolean = false;\r\n\r\n  private readonly pickerService: PickerService = inject(PickerService);\r\n  private readonly renderer: Renderer2 = inject(Renderer2);\r\n\r\n  public ngOnInit(): void {\r\n    this.pickerService.dayIdsChangedObs$.pipe(untilDestroyed(this)).subscribe((data: IRangeDayIds | string) => {\r\n      if (typeof data === 'string') {\r\n        this.monthComponents.forEach((item: MonthComponent) => item.updateDaySelection(data));\r\n        this.selectionComponent.unselect();\r\n      } else {\r\n        this.monthComponents.forEach((item: MonthComponent) => item.updateDayRangeSelection(data));\r\n        const selectionLeft: number = this.getSelectionLeft(data.startId);\r\n        const selectionWidth: number = this.getSelectionWidth(data.startId, data.endId);\r\n        this.selectionComponent.setSelectionLeft(selectionLeft);\r\n        this.selectionComponent.select(selectionWidth);\r\n      }\r\n    });\r\n  }\r\n\r\n  /** Getting the left offset for a selection component */\r\n  private getSelectionLeft(startDayId: string): number {\r\n    let offset: number = 0;\r\n    for (let i = 0; i < this.monthComponents.length; ++i) {\r\n      const monthComponent: MonthComponent = <MonthComponent>this.monthComponents.get(i);\r\n\r\n      for (let p = 0; p < monthComponent.dayComponents.length; ++p) {\r\n        const dayComponent: DayComponent = <DayComponent>monthComponent.dayComponents.get(p);\r\n\r\n        if (dayComponent.day.id === startDayId) {\r\n          /**\r\n           * It is necessary to add another \"half\" of the day so that the range is not with\r\n           * from the very beginning of the first day, and from its middle\r\n           */\r\n          return offset + DAY_WIDTH / 2;\r\n        }\r\n\r\n        // For non-last days, add another distance between days\r\n        offset += p === monthComponent.dayComponents.length - 1 ? DAY_WIDTH : DAY_WIDTH + DAYS_GAP;\r\n      }\r\n\r\n      // For non-last days, add the distance between months\r\n      offset += i === this.monthComponents.length - 1 ? 0 : MONTHS_GAP;\r\n    }\r\n\r\n    /**\r\n     * It's theoretically impossible to get to here, because it's in a loop\r\n     * we will definitely find the starting day of the range\r\n     */\r\n    return offset;\r\n  }\r\n\r\n  /** Getting the width of a range selection component */\r\n  private getSelectionWidth(startDayId: string, endDayId: string): number {\r\n    let width: number = 0;\r\n    let inRange: boolean = false;\r\n    for (let i = 0; i < this.monthComponents.length; ++i) {\r\n      const monthComponent: MonthComponent = <MonthComponent>this.monthComponents.get(i);\r\n\r\n      for (let p = 0; p < monthComponent.dayComponents.length; ++p) {\r\n        const dayComponent: DayComponent = <DayComponent>monthComponent.dayComponents.get(p);\r\n\r\n        if (dayComponent.day.id === startDayId) {\r\n          inRange = true;\r\n        }\r\n\r\n        if (dayComponent.day.id === endDayId) {\r\n          width += DAY_WIDTH;\r\n          inRange = false;\r\n          continue;\r\n        }\r\n\r\n        if (inRange) {\r\n          // For non-last days, add another distance between days\r\n          width += p === monthComponent.dayComponents.length - 1 ? DAY_WIDTH : DAY_WIDTH + DAYS_GAP;\r\n        }\r\n      }\r\n\r\n      if (inRange) {\r\n        // For non-recent months, add the distance between months\r\n        width += i === this.monthComponents.length - 1 ? 0 : MONTHS_GAP;\r\n      }\r\n    }\r\n\r\n    /**\r\n     * It is necessary to subtract another \"half' of a day on each side,\r\n     * so that the range at the beginning and end is from the middle of the day\r\n     */\r\n    return width - DAY_WIDTH;\r\n  }\r\n\r\n  /** Getting `scrollWidth` from the scroller */\r\n  public getScrollerScrollWidth(): number {\r\n    const scrollerElem: HTMLDivElement = this.scrollerRef.nativeElement;\r\n    return scrollerElem.scrollWidth;\r\n  }\r\n\r\n  public getViewportWidth(): number {\r\n    const viewportElem: HTMLDivElement = this.viewportRef.nativeElement;\r\n    return viewportElem.clientWidth;\r\n  }\r\n\r\n  /** Getting the `left` property from the scroller */\r\n  public getScrollerLeft(): number {\r\n    return parseInt(getComputedStyle(this.scrollerRef.nativeElement).getPropertyValue('left'));\r\n  }\r\n\r\n  /** Setting the `left` property for the scroller */\r\n  public setScrollerLeft(value: number): void {\r\n    this.renderer.setStyle(this.scrollerRef.nativeElement, 'left', `${value}px`);\r\n  }\r\n\r\n  public trackByMonthId(index: number, month: IMonth): string {\r\n    return month.id;\r\n  }\r\n}\r\n","<div class=\"days-track\">\r\n  <div\r\n    #viewport\r\n    class=\"viewport\"\r\n    [ngClass]=\"{\r\n      viewport_left: inStart && !inEnd,\r\n      viewport_right: !inStart && inEnd,\r\n      viewport_middle: !inStart && !inEnd\r\n    }\"\r\n  >\r\n    <div #scroller class=\"scroller\">\r\n      <dcp-month\r\n        *ngFor=\"let month of months; let i = index; trackBy:trackByMonthId\" \r\n        [month]=\"month\"\r\n      ></dcp-month>\r\n\r\n      <dcp-selection></dcp-selection>\r\n    </div>\r\n  </div>\r\n</div>","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  Input,\r\n  OnInit,\r\n  Renderer2,\r\n  inject,\r\n} from '@angular/core';\r\nimport { IDay } from '../../models/interfaces';\r\nimport { WeekdayOrder } from '../../models/types';\r\nimport { CalendarService, OptionsService } from '../../services';\r\n\r\n@Component({\r\n  selector: 'dcp-calendar-day',\r\n  templateUrl: './calendar-day.component.html',\r\n  styleUrls: ['./calendar-day.component.scss'],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CalendarDayComponent implements OnInit {\r\n  @Input({ required: true }) public day!: IDay;\r\n\r\n  @HostBinding('class.disabled') public disabled: boolean = false;\r\n\r\n  /** Is it at the beginning of the week */\r\n  @HostBinding('class.in_week_start') public inWeekStart: boolean = false;\r\n\r\n  /** Is it at the end of the week */\r\n  @HostBinding('class.in_week_end') public inWeekEnd: boolean = false;\r\n\r\n  @HostBinding('class.selected') public selected: boolean = false;\r\n\r\n  /** Is it at the beginning of the range */\r\n  @HostBinding('class.in_range_middle') public inRangeMiddle: boolean = false;\r\n\r\n  /** Is it in the middle of the range */\r\n  @HostBinding('class.in_range_start') public inRangeStart: boolean = false;\r\n\r\n  /** Is at the end of the range */\r\n  @HostBinding('class.in_range_end') public inRangeEnd: boolean = false;\r\n\r\n  private readonly calendarService: CalendarService = inject(CalendarService);\r\n  private readonly optionsService: OptionsService = inject(OptionsService);\r\n  private readonly elementRef: ElementRef<Element> = inject(ElementRef);\r\n  private readonly renderer: Renderer2 = inject(Renderer2);\r\n\r\n  public ngOnInit(): void {\r\n    if (this.optionsService.getOptions().firstDayOfWeekIndex === 1) {\r\n      // 0 is for Sunday, 1 is for Monday\r\n      this.inWeekStart = this.day.weekdayOrder === 1;\r\n      this.inWeekEnd = this.day.weekdayOrder === 0;\r\n    } else {\r\n      this.inWeekStart = this.day.weekdayOrder === 0;\r\n      this.inWeekEnd = this.day.weekdayOrder === 6;\r\n    }\r\n\r\n    const nowDay: Date = new Date(new Date().setHours(0, 0, 0, 0));\r\n    const date: Date = this.calendarService.getDateByDayId(this.day.id);\r\n    this.disabled = +date < +nowDay;\r\n  }\r\n\r\n  /** Getting the `grid-column-start` property depending on the day of the week */\r\n  private getGridColumnStart(): WeekdayOrder | 7 {\r\n    if (this.optionsService.getOptions().firstDayOfWeekIndex === 1) {\r\n      // 0 is for Sunday\r\n      return this.day.weekdayOrder === 0 ? 7 : this.day.weekdayOrder;\r\n    }\r\n    return this.day.weekdayOrder === 6 ? 0 : <WeekdayOrder | 7>(this.day.weekdayOrder + 1);\r\n  }\r\n\r\n  /** Setting the `grid-column-start` property depending on the day of the week */\r\n  public setGridColumnStart(): void {\r\n    const columnStart: number = this.getGridColumnStart();\r\n    this.renderer.setStyle(this.elementRef.nativeElement, 'grid-column-start', columnStart);\r\n  }\r\n\r\n  /** Select a day */\r\n  public select(): void {\r\n    this.selected = !this.selected;\r\n    this.calendarService.selectDate(this.day);\r\n  }\r\n}\r\n","<div class=\"substrates\">\r\n  <div class=\"substrates__left\"></div>\r\n\r\n  <button type=\"button\" class=\"day\" [disabled]=\"disabled\" [class.selected]=\"selected\" (click)=\"select()\">\r\n    {{ day.order }}\r\n  </button>\r\n\r\n  <div class=\"substrates__right\"></div>\r\n</div>\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  Input,\r\n  QueryList,\r\n  SkipSelf,\r\n  ViewChildren,\r\n  inject,\r\n} from '@angular/core';\r\nimport { NgForOf } from '@angular/common';\r\nimport { IDay, IMonth, IRangeDayIds } from '../../models/interfaces';\r\nimport { CalendarDayComponent } from '../calendar-day/calendar-day.component';\r\n\r\n@Component({\r\n  selector: 'dcp-calendar-month',\r\n  templateUrl: './calendar-month.component.html',\r\n  styleUrls: ['./calendar-month.component.scss'],\r\n  imports: [NgForOf, CalendarDayComponent],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CalendarMonthComponent implements AfterViewInit {\r\n  @ViewChildren(CalendarDayComponent) private readonly dayComponents!: QueryList<CalendarDayComponent>;\r\n\r\n  @Input({ required: true }) public month!: IMonth;\r\n\r\n  /**\r\n   * To update the states of days, it is the parent ChangeDetectorRef that is used\r\n   * due to the specifics of HostBinding, described here https://github.com/angular/angular/issues/22560\r\n   */\r\n  @SkipSelf() private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  public ngAfterViewInit(): void {\r\n    this.setFirstDayGridColumnStart();\r\n  }\r\n\r\n  /** Setting the value of `grid-column-start` for the first day of the month */\r\n  private setFirstDayGridColumnStart(): void {\r\n    const firstMonthDay: CalendarDayComponent = <CalendarDayComponent>this.dayComponents.get(0);\r\n    firstMonthDay.setGridColumnStart();\r\n  }\r\n\r\n  /** Updating states of being in a range of days */\r\n  public updateDaysRangeState(rangeIds: IRangeDayIds): void {\r\n    for (const calendarDay of this.dayComponents) {\r\n      calendarDay.inRangeStart = calendarDay.day.id === rangeIds.startId;\r\n      calendarDay.inRangeMiddle = rangeIds.inRangeIds.includes(calendarDay.day.id);\r\n      calendarDay.inRangeEnd = calendarDay.day.id === rangeIds.endId;\r\n      this.cdr.detectChanges();\r\n    }\r\n  }\r\n\r\n  /** Update selection status for one day */\r\n  public updateDaySelection(selectedDayId: string): void {\r\n    for (const calendarDay of this.dayComponents) {\r\n      calendarDay.selected = calendarDay.day.id === selectedDayId;\r\n      calendarDay.inRangeStart = false;\r\n      calendarDay.inRangeMiddle = false;\r\n      calendarDay.inRangeEnd = false;\r\n      this.cdr.detectChanges();\r\n    }\r\n  }\r\n\r\n  public trackByDayId(index: number, day: IDay): string {\r\n    return day.id;\r\n  }\r\n}\r\n","<div class=\"month\">\r\n  <dcp-calendar-day \r\n    *ngFor=\"let day of month.days; trackBy:trackByDayId\" \r\n    [day]=\"day\"\r\n  ></dcp-calendar-day>\r\n</div>","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  OnInit,\r\n  QueryList,\r\n  Renderer2,\r\n  ViewChild,\r\n  ViewChildren,\r\n  inject,\r\n} from '@angular/core';\r\nimport { NgForOf } from '@angular/common';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { IDateIndexes, IMonth, IRangeDayIds, IYear } from '../../models/interfaces';\r\nimport { MONTH_WIDTH } from '../../models/constants';\r\nimport { MonthOrder } from '../../models/types';\r\nimport { CalendarService } from '../../services';\r\nimport { CalendarMonthComponent } from '../calendar-month/calendar-month.component';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n  selector: 'dcp-calendar-months-track',\r\n  templateUrl: './calendar-months-track.component.html',\r\n  styleUrls: ['./calendar-months-track.component.scss'],\r\n  imports: [NgForOf, CalendarMonthComponent],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CalendarMonthsTrackComponent implements OnInit, AfterViewInit {\r\n  @ViewChildren(CalendarMonthComponent) private readonly monthComponents!: QueryList<CalendarMonthComponent>;\r\n\r\n  @ViewChild('scroller') private readonly scrollerRef!: ElementRef<HTMLDivElement>;\r\n\r\n  private currentYearIndex: number = 0;\r\n  private currentMonthIndex: MonthOrder = 0;\r\n\r\n  @Input({ required: true }) public years: IYear[] = [];\r\n\r\n  private readonly calendarService: CalendarService = inject(CalendarService);\r\n  private readonly renderer: Renderer2 = inject(Renderer2);\r\n\r\n  ngOnInit(): void {\r\n    this.calendarService.dayIdsChangedObs$.pipe(untilDestroyed(this)).subscribe((data: IRangeDayIds | string) => {\r\n      if (typeof data === 'string') {\r\n        this.updateDaySelection(data);\r\n      } else {\r\n        this.updateDaysRangeState(data);\r\n      }\r\n    });\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    this.calendarService.dateIndexesObs$.pipe(untilDestroyed(this)).subscribe((indexes: IDateIndexes) => {\r\n      this.currentMonthIndex = indexes.monthIndex;\r\n      this.currentYearIndex = indexes.yearIndex;\r\n\r\n      const scrolledMonthNumber: number = this.getScrolledMonthNumber();\r\n      const newLeftValue: number = -(MONTH_WIDTH * scrolledMonthNumber);\r\n      this.setScrollerLeft(newLeftValue);\r\n    });\r\n  }\r\n\r\n  /** Getting the number of scrolled months */\r\n  private getScrolledMonthNumber(): number {\r\n    let result: number = 0;\r\n\r\n    for (let i = 0; i < this.years.length; ++i) {\r\n      if (i > this.currentYearIndex) {\r\n        break;\r\n      }\r\n\r\n      for (let p = 0; p < this.years[i].months.length; ++p) {\r\n        if (i === this.currentYearIndex && p >= this.currentMonthIndex) {\r\n          break;\r\n        }\r\n\r\n        ++result;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /** Updating the states of being in the range of days of months */\r\n  private updateDaysRangeState(rangeIds: IRangeDayIds): void {\r\n    for (const monthComponent of this.monthComponents) {\r\n      monthComponent.updateDaysRangeState(rangeIds);\r\n    }\r\n  }\r\n\r\n  /** Update selection status for one day */\r\n  private updateDaySelection(selectedDayId: string): void {\r\n    for (const monthComponent of this.monthComponents) {\r\n      monthComponent.updateDaySelection(selectedDayId);\r\n    }\r\n  }\r\n\r\n  /** Setting the `left` property for the scroller */\r\n  public setScrollerLeft(value: number): void {\r\n    this.renderer.setStyle(this.scrollerRef.nativeElement, 'left', `${value}px`);\r\n  }\r\n\r\n  public trackById(index: number, item: IYear | IMonth): string {\r\n    return item.id;\r\n  }\r\n}\r\n","<div class=\"month-track\">\r\n  <div class=\"viewport\">\r\n    <div #scroller class=\"scroller\">\r\n      <ng-container *ngFor=\"let year of years; trackBy: trackById\">\r\n        <dcp-calendar-month \r\n          *ngFor=\"let month of year.months; trackBy: trackById\"\r\n          [month]=\"month\"\r\n        ></dcp-calendar-month>\r\n      </ng-container>\r\n    </div>\r\n  </div>\r\n</div>","import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { IRange, IRangeItem } from '../models/interfaces';\r\nimport { isRange } from '../utils';\r\nimport { InternalizationService } from '../services';\r\n\r\n/** Pipe for formatting one date or range of dates */\r\n@Pipe({\r\n  name: 'dcpDayRangeFormat',\r\n  standalone: true,\r\n})\r\nexport class DayRangeFormatPipe implements PipeTransform {\r\n  private readonly internalizationService: InternalizationService = inject(InternalizationService);\r\n\r\n  transform(value: IRange | IRangeItem): string {\r\n    if (isRange(value)) {\r\n      const startDate: Date = new Date(value.start.year, value.start.month, value.start.day);\r\n      const endDate: Date = new Date(value.end.year, value.end.month, value.end.day);\r\n\r\n      const startFormattedDate: string = this.internalizationService.format(startDate);\r\n      const endFormattedDate: string = this.internalizationService.format(endDate);\r\n\r\n      return `${startFormattedDate} - ${endFormattedDate}`;\r\n    }\r\n    const date: Date = new Date(value.year, value.month, value.day);\r\n    return this.internalizationService.format(date);\r\n  }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\r\nimport { NgForOf, NgIf } from '@angular/common';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { PopoverClose } from '@ngx-popovers/popover';\r\nimport { CalendarService, InternalizationService, OptionsService } from '../../services';\r\nimport { IDateIndexes, IMonth, IRange, IRangeItem, IYear } from '../../models/interfaces';\r\nimport { MonthOrder, WeekdayOrder } from '../../models/types';\r\nimport { CalendarMonthsTrackComponent } from '../calendar-months-track/calendar-months-track.component';\r\nimport { DayRangeFormatPipe } from '../../pipes';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n  selector: 'dcp-calendar',\r\n  templateUrl: './calendar.component.html',\r\n  styleUrls: ['./calendar.component.scss'],\r\n  imports: [NgIf, NgForOf, DayRangeFormatPipe, CalendarMonthsTrackComponent, PopoverClose],\r\n  standalone: true,\r\n  providers: [InternalizationService],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CalendarComponent implements OnInit {\r\n  public years: IYear[] = [];\r\n\r\n  public weekdays: string[] = [];\r\n\r\n  public currentMonth!: IMonth;\r\n  public currentMonthIndex: MonthOrder = 0;\r\n  public currentMonthName: string = '';\r\n\r\n  /** Current year index */\r\n  public currentYearIndex: number = 0;\r\n\r\n  /** Current year number */\r\n  public currentYearNum: number = 0;\r\n\r\n  /** Information about the selected date or date range */\r\n  public dateInfo: IRange | IRangeItem | null = null;\r\n\r\n  public isLeftControlDisabled: boolean = true;\r\n  public isRightControlDisabled: boolean = false;\r\n\r\n  private readonly calendarService: CalendarService = inject(CalendarService);\r\n  private readonly optionsService: OptionsService = inject(OptionsService);\r\n  private readonly internalizationService: InternalizationService = inject(InternalizationService);\r\n  private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  public ngOnInit(): void {\r\n    this.years = this.calendarService.getYears();\r\n    this.initWeekdays();\r\n\r\n    this.calendarService.dateIndexesObs$.pipe(untilDestroyed(this)).subscribe((indexes: IDateIndexes) => {\r\n      this.currentMonthIndex = indexes.monthIndex;\r\n      this.currentYearIndex = indexes.yearIndex;\r\n\r\n      this.isLeftControlDisabled = this.currentYearIndex === 0 && this.currentMonthIndex === 0;\r\n      this.isRightControlDisabled =\r\n        this.currentYearIndex === this.years.length - 1 &&\r\n        this.currentMonthIndex === this.years[this.currentYearIndex].months.length - 1;\r\n\r\n      this.setCurrentMonthYear();\r\n    });\r\n\r\n    this.calendarService.changedInnerObs$.pipe(untilDestroyed(this)).subscribe((data: IRange | IRangeItem | null) => {\r\n      this.dateInfo = data;\r\n      this.cdr.detectChanges();\r\n    });\r\n  }\r\n\r\n  private initWeekdays(): void {\r\n    for (let i = 1; i < 7; ++i) {\r\n      const weekday: string = this.internalizationService.capitalizedWeekdays[i];\r\n      this.weekdays.push(weekday);\r\n    }\r\n    const firstWeekday: string = this.internalizationService.capitalizedWeekdays[0];\r\n\r\n    if (this.optionsService.getOptions().firstDayOfWeekIndex === 1) {\r\n      this.weekdays.push(firstWeekday);\r\n    } else {\r\n      this.weekdays.unshift(firstWeekday);\r\n    }\r\n  }\r\n\r\n  /** Setting the current month, its name and year number */\r\n  private setCurrentMonthYear(): void {\r\n    this.currentMonth = this.years[this.currentYearIndex].months[this.currentMonthIndex];\r\n\r\n    const monthName: string = this.internalizationService.capitalizedMonthNames[this.currentMonth.order];\r\n    this.currentMonthName = monthName;\r\n\r\n    this.currentYearNum = this.years[this.currentYearIndex].num;\r\n  }\r\n\r\n  /** Setting next month */\r\n  public setNextMonth(): void {\r\n    if (this.currentMonth.order === 11) {\r\n      this.calendarService.changeDateIndexes({\r\n        monthIndex: 0,\r\n        yearIndex: this.currentYearIndex + 1,\r\n      });\r\n    } else {\r\n      this.calendarService.changeDateIndexes({\r\n        monthIndex: <MonthOrder>(this.currentMonthIndex + 1),\r\n        yearIndex: this.currentYearIndex,\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Setting previous month */\r\n  public setPrevMonth(): void {\r\n    if (this.currentMonth.order === 0) {\r\n      const newMonthIndex: MonthOrder = <MonthOrder>(this.years[this.currentYearIndex - 1].months.length - 1);\r\n      this.calendarService.changeDateIndexes({\r\n        monthIndex: newMonthIndex,\r\n        yearIndex: this.currentYearIndex - 1,\r\n      });\r\n    } else {\r\n      this.calendarService.changeDateIndexes({\r\n        monthIndex: <MonthOrder>(this.currentMonthIndex - 1),\r\n        yearIndex: this.currentYearIndex,\r\n      });\r\n    }\r\n  }\r\n\r\n  /** Select one date or range */\r\n  public select(): void {\r\n    this.calendarService.change(<IRange | IRangeItem>this.dateInfo);\r\n  }\r\n\r\n  public trackByIndex(index: number): number {\r\n    return index;\r\n  }\r\n\r\n  public isWeekend(index: number): boolean {\r\n    if (this.optionsService.getOptions().firstDayOfWeekIndex === 1) {\r\n      const weekday: string = <string>this.weekdays.find((_, ind) => ind === index);\r\n      // factIndex is not index in `weekends` property\r\n      const factIndex: WeekdayOrder = <WeekdayOrder>(\r\n        this.internalizationService.capitalizedWeekdays.findIndex((item: string) => item === weekday)\r\n      );\r\n      return this.optionsService.getOptions().weekendIndexes.includes(factIndex);\r\n    }\r\n    return this.optionsService.getOptions().weekendIndexes.includes(<WeekdayOrder>index);\r\n  }\r\n}\r\n","<div class=\"calendar\">\r\n  <div class=\"calendar__header\">\r\n    <button\r\n      class=\"control\"\r\n      type=\"button\"\r\n      [disabled]=\"isLeftControlDisabled\"\r\n      [class.control_disabled]=\"isLeftControlDisabled\"\r\n      (click)=\"setPrevMonth()\"\r\n    >\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\" d=\"M328 112L184 256l144 144\"/></svg>\r\n    </button>\r\n\r\n    <div class=\"calendar__date\">\r\n      <span class=\"month\">{{ currentMonthName }}</span>\r\n      <span class=\"year\">{{ currentYearNum }}</span>\r\n    </div>\r\n\r\n    <button\r\n      class=\"control\"\r\n      type=\"button\"\r\n      [disabled]=\"isRightControlDisabled\"\r\n      [class.control_disabled]=\"isRightControlDisabled\"\r\n      (click)=\"setNextMonth()\"\r\n    >\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\" d=\"M184 112l144 144-144 144\"/></svg>\r\n    </button>\r\n  </div>\r\n\r\n  <div class=\"calendar__content\">\r\n    <div class=\"weekdays\">\r\n      <div \r\n        *ngFor=\"let weekday of weekdays; let i = index; trackBy:trackByIndex\" \r\n        class=\"weekday\" \r\n        [class.weekend]=\"isWeekend(i)\"\r\n      >{{ weekday }}</div>\r\n    </div>\r\n\r\n    <dcp-calendar-months-track \r\n      [years]=\"years\"\r\n    ></dcp-calendar-months-track>\r\n  </div>\r\n\r\n  <button *ngIf=\"!!dateInfo; else close_button\" ngx-popover-close class=\"select-button\" type=\"button\" (click)=\"select()\">\r\n    {{ dateInfo | dcpDayRangeFormat }}\r\n  </button>\r\n\r\n  <ng-template #close_button>\r\n    <button ngx-popover-close class=\"close-button\" type=\"button\" expand=\"block\" color=\"medium\">\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"32\" d=\"M368 368L144 144M368 144L144 368\"/></svg>\r\n    </button>\r\n  </ng-template>\r\n</div>","import { Provider } from '@angular/core';\r\nimport { flip, offset, shift } from '@ngx-popovers/core';\r\nimport { NGX_POPOVER_CONFIG, NgxPopoverConfig } from '@ngx-popovers/popover';\r\n\r\nexport const PopoverConfigProvider: Provider = {\r\n  provide: NGX_POPOVER_CONFIG,\r\n  useValue: new NgxPopoverConfig({\r\n    placement: 'bottom-end',\r\n    autoUpdate: true,\r\n    arrow: false,\r\n    closeOnClickedOutside: true,\r\n    middleware: [flip(), shift(), offset(5)],\r\n  }),\r\n};\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  OnInit,\r\n  inject,\r\n  ViewChild,\r\n  Output,\r\n  EventEmitter,\r\n  Input,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\nimport { PopoverComponent, PopoverTemplate } from '@ngx-popovers/popover';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { CalendarService, OptionsService, PickerService } from '../../services';\r\nimport { IMonth, IPickerOptions, IRange, IRangeItem } from '../../models/interfaces';\r\nimport { MonthNamesTrackComponent } from '../month-names-track/month-names-track.component';\r\nimport { DaysTrackComponent } from '../days-track/days-track.component';\r\nimport { CalendarComponent } from '../calendar/calendar.component';\r\nimport { DEFAULT_OPTIONS } from '../../models/constants';\r\nimport { FirstDayOfWeek, IntRange, RightControl, WeekdayOrder } from '../../models/types';\r\nimport { PopoverConfigProvider } from './providers';\r\n\r\n@UntilDestroy()\r\n@Component({\r\n  /* eslint-disable-next-line @angular-eslint/component-selector */\r\n  selector: 'ng-date-carousel-picker',\r\n  templateUrl: './ng-date-carousel-picker.component.html',\r\n  styleUrls: ['./ng-date-carousel-picker.component.scss'],\r\n  imports: [NgIf, MonthNamesTrackComponent, DaysTrackComponent, CalendarComponent, PopoverComponent, PopoverTemplate],\r\n  providers: [PickerService, CalendarService, OptionsService, PopoverConfigProvider],\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  /** Used to allow styling via css variables */\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NgDateCarouselPickerComponent implements OnInit, IPickerOptions {\r\n  /** Distance (in px) which scrolls with button click. By default is `150`. */\r\n  @Input({ required: false }) public scrollShift: IntRange<42, 300> = DEFAULT_OPTIONS['scrollShift'];\r\n\r\n  /** Date of period beginning. By default is current date. */\r\n  @Input({ required: false }) public startDate: Date = DEFAULT_OPTIONS['startDate'];\r\n\r\n  /** Date of period end. By default is exactly 3 months more than current date. */\r\n  @Input({ required: false }) public endDate: Date = DEFAULT_OPTIONS['endDate'];\r\n\r\n  /** Need to show calendar instead of scroll button in the end of period. By default is `true`. */\r\n  @Input({ required: false }) public showCalendar: boolean = DEFAULT_OPTIONS['showCalendar'];\r\n\r\n  /** Order (number) for first day of the week, `0` is for Sunday, `1` is for Monday. By default is `1`. */\r\n  @Input({ required: false }) public firstDayOfWeekIndex: FirstDayOfWeek = DEFAULT_OPTIONS['firstDayOfWeekIndex'];\r\n\r\n  /** Numbers for weekend days. By default `[0, 6]`. */\r\n  @Input({ required: false }) public weekendIndexes: [WeekdayOrder, WeekdayOrder] = DEFAULT_OPTIONS['weekendIndexes'];\r\n\r\n  @ViewChild(MonthNamesTrackComponent) private readonly monthNamesTrackComponent!: MonthNamesTrackComponent;\r\n  @ViewChild(DaysTrackComponent) private readonly daysTrackComponent!: DaysTrackComponent;\r\n\r\n  @Output() private readonly changed: EventEmitter<IRange | IRangeItem | null> = new EventEmitter<\r\n    IRange | IRangeItem | null\r\n  >();\r\n\r\n  public months: IMonth[] = [];\r\n\r\n  public isLeftControlDisabled: boolean = true;\r\n  public isRightControlDisabled: boolean = false;\r\n\r\n  public rightControlType: RightControl = 'scroll-button';\r\n\r\n  private readonly pickerService: PickerService = inject(PickerService);\r\n  private readonly calendarService: CalendarService = inject(CalendarService);\r\n  private readonly optionsService: OptionsService = inject(OptionsService);\r\n\r\n  public ngOnInit(): void {\r\n    if (this.startDate >= this.endDate) {\r\n      throw new Error(`'startDate' (${this.startDate}) can't be more or equal than 'endDate' (${this.endDate})`);\r\n    }\r\n\r\n    if (this.monthDiff(this.startDate, this.endDate) < 1) {\r\n      throw new Error(\r\n        `Between 'startDate' (${this.startDate}) and 'endDate' (${this.endDate}) must be at least one month`,\r\n      );\r\n    }\r\n\r\n    this.optionsService.setOptions({\r\n      scrollShift: this.scrollShift,\r\n      startDate: this.startDate,\r\n      endDate: this.endDate,\r\n      showCalendar: this.showCalendar,\r\n      firstDayOfWeekIndex: this.firstDayOfWeekIndex,\r\n      weekendIndexes: this.weekendIndexes,\r\n    });\r\n\r\n    this.months = this.pickerService.getMonths(this.startDate, this.endDate);\r\n\r\n    this.pickerService.changedObs$\r\n      .pipe(untilDestroyed(this))\r\n      .subscribe((data: IRange | IRangeItem | null) => this.changed.emit(data));\r\n\r\n    this.calendarService.changedObs$\r\n      .pipe(untilDestroyed(this))\r\n      .subscribe((data: IRange | IRangeItem | null) => this.changed.emit(data));\r\n  }\r\n\r\n  /**\r\n   * Taken from\r\n   * https://stackoverflow.com/questions/2536379/difference-in-months-between-two-dates-in-javascript\r\n   */\r\n  private monthDiff(date1: Date, date2: Date): number {\r\n    let monthsNumber = (date2.getFullYear() - date1.getFullYear()) * 12;\r\n    monthsNumber -= date1.getMonth();\r\n    monthsNumber += date2.getMonth();\r\n    return monthsNumber <= 0 ? 0 : monthsNumber;\r\n  }\r\n\r\n  /** Does it go beyond the left border of the viewport */\r\n  private isGoingBeyondViewportLeftBorder(currentDaysScrollerLeft: number): boolean {\r\n    /**\r\n     * The scroller is positioned relative to the left edge of the viewport, its initial value is `left`\r\n     * is equal to 0, with further scrolling to the right the property value decreases and becomes negative,\r\n     * accordingly, if at some point in time the value is greater than 0, this indicates\r\n     * about going beyond the left border of the viewport\r\n     */\r\n    return currentDaysScrollerLeft + this.scrollShift >= 0;\r\n  }\r\n\r\n  /** Does it go beyond the right border of the viewport */\r\n  private isGoingBeyondViewportRightBorder(currentDaysScrollerLeft: number): boolean {\r\n    const daysViewportWidth: number = this.daysTrackComponent.getViewportWidth();\r\n    const daysScrollerScrollWidth: number = this.daysTrackComponent.getScrollerScrollWidth();\r\n\r\n    /**\r\n     * The scroller is positioned relative to the left edge of the viewport, its initial value is `left`\r\n     * is equal to 0, with further scrolling to the right the property value decreases and becomes negative,\r\n     * therefore, in fact, how much scrolling is equal to `-currentDaysScrollerLeft`, if you add the width of the viewport to this\r\n     * and the scroll value and it will prevail over the entire scrollable width of the scroller, this indicates\r\n     * going beyond the right border of the viewport\r\n     */\r\n    return -currentDaysScrollerLeft + daysViewportWidth + this.scrollShift >= daysScrollerScrollWidth;\r\n  }\r\n\r\n  public scrollLeft(): void {\r\n    const currentDaysScrollerLeft: number = this.daysTrackComponent.getScrollerLeft();\r\n\r\n    if (this.isGoingBeyondViewportLeftBorder(currentDaysScrollerLeft)) {\r\n      this.daysTrackComponent.setScrollerLeft(0);\r\n      this.monthNamesTrackComponent.setScrollerLeft(0);\r\n      this.isLeftControlDisabled = true;\r\n\r\n      this.monthNamesTrackComponent.setNameComponentStartLeft();\r\n    } else {\r\n      const newLeftValue: number = currentDaysScrollerLeft + this.scrollShift;\r\n      this.daysTrackComponent.setScrollerLeft(newLeftValue);\r\n      this.rightControlType = 'scroll-button';\r\n      this.isRightControlDisabled = false;\r\n\r\n      this.monthNamesTrackComponent.scrollLeft(newLeftValue);\r\n    }\r\n  }\r\n\r\n  public scrollRight(): void {\r\n    const currentDaysScrollerLeft: number = this.daysTrackComponent.getScrollerLeft();\r\n\r\n    if (this.isGoingBeyondViewportRightBorder(currentDaysScrollerLeft)) {\r\n      const daysViewportWidth: number = this.daysTrackComponent.getViewportWidth();\r\n      const daysScrollerScrollWidth: number = this.daysTrackComponent.getScrollerScrollWidth();\r\n\r\n      const newLeftValue: number = daysScrollerScrollWidth - daysViewportWidth;\r\n      this.daysTrackComponent.setScrollerLeft(-newLeftValue);\r\n      this.monthNamesTrackComponent.setScrollerLeft(-newLeftValue);\r\n\r\n      this.isRightControlDisabled = true;\r\n      this.rightControlType = 'calendar-button';\r\n\r\n      this.monthNamesTrackComponent.setNameComponentEndLeft(newLeftValue);\r\n    } else {\r\n      const newLeftValue: number = currentDaysScrollerLeft - this.scrollShift;\r\n      this.daysTrackComponent.setScrollerLeft(newLeftValue);\r\n      this.isLeftControlDisabled = false;\r\n\r\n      this.monthNamesTrackComponent.scrollRight(newLeftValue);\r\n    }\r\n  }\r\n}\r\n","<div class=\"range-date-picker\">\r\n  <dcp-month-names-track [months]=\"months\"></dcp-month-names-track>\r\n\r\n  <div class=\"picker\">\r\n    <button\r\n      class=\"control\"\r\n      type=\"button\"\r\n      [disabled]=\"isLeftControlDisabled\"\r\n      [class.control_disabled]=\"isLeftControlDisabled\"\r\n      (click)=\"scrollLeft()\"\r\n    >\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\" d=\"M328 112L184 256l144 144\"/></svg>\r\n    </button>\r\n\r\n    <dcp-days-track\r\n      [months]=\"months\"\r\n      [inStart]=\"isLeftControlDisabled\"\r\n      [inEnd]=\"showCalendar ? rightControlType === 'calendar-button' : isRightControlDisabled\"\r\n    ></dcp-days-track>\r\n\r\n    <button\r\n      *ngIf=\"!showCalendar; else calendar_template\"\r\n      class=\"control\"\r\n      type=\"button\"\r\n      [disabled]=\"isRightControlDisabled\"\r\n      [class.control_disabled]=\"isRightControlDisabled\"\r\n      (click)=\"scrollRight()\"\r\n    >\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\" d=\"M184 112l144 144-144 144\"/></svg>\r\n    </button>\r\n\r\n    <ng-template #calendar_template>\r\n      <button\r\n        *ngIf=\"rightControlType === 'scroll-button'; else calendar_button\"\r\n        class=\"control\"\r\n        type=\"button\"\r\n        (click)=\"scrollRight()\"\r\n      >\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\" d=\"M184 112l144 144-144 144\"/></svg>\r\n      </button>\r\n\r\n      <ng-template #calendar_button>\r\n        <ngx-popover>\r\n          <button\r\n            class=\"control control-calendar\"\r\n            type=\"button\"\r\n          >\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><rect fill=\"none\" stroke=\"currentColor\" stroke-linejoin=\"round\" stroke-width=\"32\" x=\"48\" y=\"80\" width=\"416\" height=\"384\" rx=\"48\"/><circle fill=\"currentColor\" cx=\"296\" cy=\"232\" r=\"24\"/><circle fill=\"currentColor\" cx=\"376\" cy=\"232\" r=\"24\"/><circle fill=\"currentColor\" cx=\"296\" cy=\"312\" r=\"24\"/><circle fill=\"currentColor\" cx=\"376\" cy=\"312\" r=\"24\"/><circle fill=\"currentColor\" cx=\"136\" cy=\"312\" r=\"24\"/><circle fill=\"currentColor\" cx=\"216\" cy=\"312\" r=\"24\"/><circle fill=\"currentColor\" cx=\"136\" cy=\"392\" r=\"24\"/><circle fill=\"currentColor\" cx=\"216\" cy=\"392\" r=\"24\"/><circle fill=\"currentColor\" cx=\"296\" cy=\"392\" r=\"24\"/><path fill=\"none\" stroke=\"currentColor\" stroke-linejoin=\"round\" stroke-width=\"32\" stroke-linecap=\"round\" d=\"M128 48v32M384 48v32\"/><path fill=\"none\" stroke=\"currentColor\" stroke-linejoin=\"round\" stroke-width=\"32\" d=\"M464 160H48\"/></svg>\r\n          </button>\r\n\r\n          <ng-template ngx-popover-template>\r\n            <dcp-calendar></dcp-calendar>\r\n          </ng-template>\r\n        </ngx-popover>\r\n      </ng-template>\r\n    </ng-template>\r\n  </div>\r\n</div>\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}