{"version":3,"file":"ngx-daterangepicker-material.mjs","sources":["../../src/daterangepicker/daterangepicker.config.ts","../../src/daterangepicker/locale.service.ts","../../src/daterangepicker/daterangepicker.component.ts","../../src/daterangepicker/daterangepicker.component.html","../../src/daterangepicker/daterangepicker.directive.ts","../../src/daterangepicker/daterangepicker.module.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport dayjs from 'dayjs/esm';\nimport localeData from 'dayjs/esm/plugin/localeData';\ndayjs.extend(localeData);\n\nexport const LOCALE_CONFIG = new InjectionToken<LocaleConfig>('daterangepicker.config');\n/**\n *  LocaleConfig Interface\n */\nexport interface LocaleConfig {\n  direction?: string;\n  separator?: string;\n  weekLabel?: string;\n  applyLabel?: string;\n  cancelLabel?: string;\n  clearLabel?: string;\n  customRangeLabel?: string;\n  daysOfWeek?: string[];\n  monthNames?: string[];\n  firstDay?: number;\n  format?: string;\n  displayFormat?: string;\n  locale?: any;\n}\n/**\n *  DefaultLocaleConfig\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const DefaultLocaleConfig: LocaleConfig = {\n  direction: 'ltr',\n  separator: ' - ',\n  weekLabel: 'W',\n  applyLabel: 'Apply',\n  cancelLabel: 'Cancel',\n  clearLabel: 'Clear',\n  customRangeLabel: 'Custom range',\n  daysOfWeek: dayjs.weekdaysMin(),\n  monthNames: dayjs.monthsShort(),\n  firstDay: dayjs.localeData().firstDayOfWeek()\n};\n","import { Injectable, Inject } from '@angular/core';\nimport { LOCALE_CONFIG, DefaultLocaleConfig, LocaleConfig } from './daterangepicker.config';\n\n@Injectable()\nexport class LocaleService {\n  constructor(@Inject(LOCALE_CONFIG) private configHolder: LocaleConfig) {}\n\n  get config() {\n    if (!this.configHolder) {\n      return DefaultLocaleConfig;\n    }\n    return { ...DefaultLocaleConfig, ...this.configHolder };\n  }\n\n  configWithLocale(locale) {\n    if (!this.configHolder && !locale) {\n      return DefaultLocaleConfig;\n    }\n    return {\n      ...DefaultLocaleConfig,\n      ...{ daysOfWeek: locale.weekdaysMin, monthNames: locale.monthsShort, firstDay: locale.weekStart },\n      ...this.configHolder\n    };\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport dayjs, { Dayjs } from 'dayjs/esm';\nimport { LocaleConfig } from './daterangepicker.config';\nimport { LocaleService } from './locale.service';\n\nimport localeData from 'dayjs/esm/plugin/localeData';\nimport LocalizedFormat from 'dayjs/esm/plugin/localizedFormat';\nimport isoWeek from 'dayjs/esm/plugin/isoWeek';\nimport week from 'dayjs/esm/plugin/weekOfYear';\nimport customParseFormat from 'dayjs/esm/plugin/customParseFormat';\nimport utc from 'dayjs/esm/plugin/utc';\n\ndayjs.extend(localeData);\ndayjs.extend(LocalizedFormat);\ndayjs.extend(isoWeek);\ndayjs.extend(week);\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\n\nexport enum SideEnum {\n  left = 'left',\n  right = 'right'\n}\n\nexport interface DateRanges {\n  [index: string]: [Dayjs, Dayjs];\n}\n\nexport interface DateRange {\n  label: string;\n  dates: [Dayjs, Dayjs];\n}\n\nexport interface ChosenDate {\n  chosenLabel: string;\n  startDate: Dayjs;\n  endDate: Dayjs;\n}\n\nexport interface TimePeriod {\n  [index: string]: Dayjs;\n\n  startDate: Dayjs;\n  endDate: Dayjs;\n}\n\nexport interface StartDate {\n  startDate: Dayjs;\n}\n\nexport interface EndDate {\n  endDate: Dayjs;\n}\n\ninterface TimePickerVariables {\n  secondsLabel: string[];\n  selectedMinute: number;\n  selectedSecond: number;\n  hours: number[];\n  seconds: number[];\n  disabledHours: number[];\n  disabledMinutes: number[];\n  minutes: number[];\n  minutesLabel: string[];\n  selectedHour: number;\n  disabledSeconds: number[];\n  amDisabled?: boolean;\n  pmDisabled?: boolean;\n  ampmModel?: string;\n  selected: Dayjs;\n}\n\ninterface TimePickerVariablesHolder {\n  [index: string]: TimePickerVariables;\n}\n\ninterface CalendarRowClasses {\n  [index: number]: string;\n\n  classList: string;\n}\n\ninterface CalendarClasses {\n  [index: number]: CalendarRowClasses;\n}\n\ninterface Dropdowns {\n  inMaxYear: boolean;\n  yearArrays: number[];\n  maxYear: number;\n  minYear: number;\n  currentMonth: number;\n  inMinYear: boolean;\n  monthArrays: number[];\n  currentYear: number;\n}\n\ntype CalendarArrayWithProps<T> = T[] & { firstDay?: Dayjs; lastDay?: Dayjs };\n\ninterface CalendarVariables {\n  calRows: number[];\n  calCols: number[];\n  calendar: CalendarArrayWithProps<Dayjs[]>;\n  minDate: dayjs.Dayjs;\n  year: number;\n  classes: CalendarClasses;\n  lastMonth: number;\n  minute: number;\n  second: number;\n  daysInMonth: number;\n  dayOfWeek: number;\n  month: number;\n  hour: number;\n  firstDay: dayjs.Dayjs;\n  lastYear: number;\n  lastDay: dayjs.Dayjs;\n  maxDate: dayjs.Dayjs;\n  daysInLastMonth: number;\n  dropdowns?: Dropdowns;\n}\n\ninterface CalendarVariableHolder {\n  [index: string]: CalendarVariables;\n}\n\ninterface VisibleCalendar {\n  month: Dayjs;\n  calendar: CalendarArrayWithProps<Dayjs[]>;\n}\n\n@Component({\n  selector: 'ngx-daterangepicker-material',\n  styleUrls: ['./daterangepicker.component.scss'],\n  templateUrl: './daterangepicker.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DaterangepickerComponent),\n      multi: true\n    }\n  ]\n})\nexport class DaterangepickerComponent implements OnInit, OnChanges {\n  @Input()\n  startDate = dayjs().utc(true).startOf('day');\n\n  @Input()\n  endDate = dayjs().utc(true).endOf('day');\n\n  @Input()\n  dateLimit: number = null;\n\n  // general\n  @Input()\n  autoApply = false;\n\n  @Input()\n  singleDatePicker = false;\n\n  @Input()\n  showDropdowns = false;\n\n  @Input()\n  showWeekNumbers = false;\n\n  @Input()\n  showISOWeekNumbers = false;\n\n  @Input()\n  linkedCalendars = false;\n\n  @Input()\n  autoUpdateInput = true;\n\n  @Input()\n  alwaysShowCalendars = false;\n\n  @Input()\n  maxSpan = false;\n\n  @Input()\n  lockStartDate = false;\n\n  // timepicker variables\n  @Input()\n  timePicker = false;\n\n  @Input()\n  timePicker24Hour = false;\n\n  @Input()\n  timePickerIncrement = 1;\n\n  @Input()\n  timePickerSeconds = false;\n\n  // end of timepicker variables\n  @Input()\n  showClearButton = false;\n\n  @Input()\n  firstMonthDayClass: string = null;\n\n  @Input()\n  lastMonthDayClass: string = null;\n\n  @Input()\n  emptyWeekRowClass: string = null;\n\n  @Input()\n  emptyWeekColumnClass: string = null;\n\n  @Input()\n  firstDayOfNextMonthClass: string = null;\n\n  @Input()\n  lastDayOfPreviousMonthClass: string = null;\n\n  @Input()\n  showCustomRangeLabel: boolean;\n\n  @Input()\n  showCancel = false;\n\n  @Input()\n  keepCalendarOpeningWithRange = false;\n\n  @Input()\n  showRangeLabelOnInput = false;\n\n  @Input()\n  customRangeDirection = false;\n\n  @Input() drops: string;\n  @Input() opens: string;\n  @Input() closeOnAutoApply = true;\n  @Output() choosedDate: EventEmitter<ChosenDate>;\n  @Output() rangeClicked: EventEmitter<DateRange>;\n  @Output() datesUpdated: EventEmitter<TimePeriod>;\n  @Output() startDateChanged: EventEmitter<StartDate>;\n  @Output() endDateChanged: EventEmitter<EndDate>;\n  @Output() cancelClicked: EventEmitter<void>;\n  @Output() clearClicked: EventEmitter<void>;\n  @ViewChild('pickerContainer', { static: true }) pickerContainer: ElementRef;\n\n  public chosenLabel: string;\n\n  public calendarVariables: CalendarVariableHolder = {};\n  // tooltiptext = []; // for storing tooltiptext\n  public timepickerVariables: TimePickerVariablesHolder = {};\n  daterangepicker: { start: FormControl; end: FormControl } = { start: new FormControl(), end: new FormControl() };\n\n  public applyBtn: { disabled: boolean } = { disabled: false };\n\n  // used in template for compile time support of enum values.\n  public sideEnum = SideEnum;\n  public chosenRange: string;\n\n  public rangesArray: Array<string> = [];\n  // some state information\n\n  public isShown = false;\n  public inline = true;\n  leftCalendar: VisibleCalendar = { month: null, calendar: [] };\n  rightCalendar: VisibleCalendar = { month: null, calendar: [] };\n  public showCalInRanges = false;\n  nowHoveredDate = null;\n  pickingDate = false;\n  // options: any = {}; // should get some opt from user\n  // protected\n\n  protected minDateHolder: dayjs.Dayjs;\n  protected maxDateHolder: dayjs.Dayjs;\n  protected localeHolder: LocaleConfig = {};\n  protected rangesHolder: DateRanges = {};\n  private cachedVersion: { start: Dayjs; end: Dayjs } = { start: null, end: null };\n\n  constructor(private el: ElementRef, private ref: ChangeDetectorRef, private localeHolderService: LocaleService) {\n    this.choosedDate = new EventEmitter();\n    this.rangeClicked = new EventEmitter();\n    this.datesUpdated = new EventEmitter();\n    this.startDateChanged = new EventEmitter();\n    this.endDateChanged = new EventEmitter();\n    this.cancelClicked = new EventEmitter();\n    this.clearClicked = new EventEmitter();\n  }\n\n  // accessors\n  get minDate(): dayjs.Dayjs {\n    return this.minDateHolder;\n  }\n\n  @Input()\n  set minDate(value: dayjs.Dayjs | string) {\n    if (dayjs.isDayjs(value)) {\n      this.minDateHolder = value;\n    } else if (typeof value === 'string') {\n      this.minDateHolder = dayjs(value).utc(true);\n    } else {\n      this.minDateHolder = null;\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  get locale(): LocaleConfig {\n    return this.localeHolder;\n  }\n\n  @Input() set locale(value: LocaleConfig) {\n    this.localeHolder = { ...this.localeHolderService.config, ...value };\n    if (value.locale) {\n      this.localeHolder = this.localeHolderService.configWithLocale(value.locale);\n    }\n  }\n\n  // custom ranges\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  get ranges(): DateRanges {\n    return this.rangesHolder;\n  }\n\n  @Input() set ranges(value: DateRanges) {\n    this.rangesHolder = value;\n    this.renderRanges();\n  }\n\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  get maxDate(): dayjs.Dayjs {\n    return this.maxDateHolder;\n  }\n\n  @Input()\n  set maxDate(value: dayjs.Dayjs | string) {\n    if (dayjs.isDayjs(value)) {\n      this.maxDateHolder = value;\n    } else if (typeof value === 'string') {\n      this.maxDateHolder = dayjs(value).utc(true);\n    } else {\n      this.maxDateHolder = null;\n    }\n  }\n\n  @Input()\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  isInvalidDate(date: Dayjs): boolean {\n    return false;\n  }\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n\n  @Input()\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  isCustomDate(date: Dayjs): boolean {\n    return false;\n  }\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n\n  @Input()\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  isTooltipDate(date: Dayjs): string | boolean | null {\n    return null;\n  }\n\n  /**\n   * handle click on all element in the component, useful for outside of click\n   *\n   * @param e event\n   */\n  @HostListener('click', ['$event'])\n  handleInternalClick(e: MouseEvent): void {\n    return e.stopPropagation();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ((changes.startDate || changes.endDate) && this.inline) {\n      this.updateView();\n    }\n  }\n\n  ngOnInit(): void {\n    this.buildLocale();\n    const daysOfWeek = [...this.locale.daysOfWeek];\n    this.locale.firstDay = this.locale.firstDay % 7;\n    if (this.locale.firstDay !== 0) {\n      let iterator = this.locale.firstDay;\n\n      while (iterator > 0) {\n        daysOfWeek.push(daysOfWeek.shift());\n        iterator--;\n      }\n    }\n    this.locale.daysOfWeek = daysOfWeek;\n    if (this.inline) {\n      this.cachedVersion.start = this.startDate.clone();\n      this.cachedVersion.end = this.endDate.clone();\n    }\n\n    if (this.startDate && this.timePicker) {\n      this.setStartDate(this.startDate);\n      this.renderTimePicker(SideEnum.left);\n    }\n\n    if (this.endDate && this.timePicker) {\n      this.setEndDate(this.endDate);\n      this.renderTimePicker(SideEnum.right);\n    }\n\n    this.updateMonthsInView();\n    this.renderCalendar(SideEnum.left);\n    this.renderCalendar(SideEnum.right);\n    this.renderRanges();\n  }\n\n  renderRanges(): void {\n    this.rangesArray = [];\n    let start;\n    let end;\n    if (typeof this.ranges === 'object') {\n      for (const range in this.ranges) {\n        if (this.ranges[range]) {\n          if (typeof this.ranges[range][0] === 'string') {\n            start = dayjs(this.ranges[range][0], this.locale.format).utc(true);\n          } else {\n            start = dayjs(this.ranges[range][0]).utc(true);\n          }\n          if (typeof this.ranges[range][1] === 'string') {\n            end = dayjs(this.ranges[range][1], this.locale.format).utc(true);\n          } else {\n            end = dayjs(this.ranges[range][1]).utc(true);\n          }\n          // If the start or end date exceed those allowed by the minDate or maxSpan\n          // options, shorten the range to the allowable period.\n          if (this.minDate && start.isBefore(this.minDate)) {\n            start = this.minDate.clone();\n          }\n          let maxDate = this.maxDate;\n          if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate)) {\n            maxDate = start.clone().add(this.maxSpan);\n          }\n          if (maxDate && end.isAfter(maxDate)) {\n            end = maxDate.clone();\n          }\n          // If the end of the range is before the minimum or the start of the range is\n          // after the maximum, don't display this range option at all.\n          if (\n            (this.minDate && end.isBefore(this.minDate, this.timePicker ? 'minute' : 'day')) ||\n            (maxDate && start.isAfter(maxDate, this.timePicker ? 'minute' : 'day'))\n          ) {\n            continue;\n          }\n          // Support unicode chars in the range names.\n          const elem = document.createElement('textarea');\n          elem.innerHTML = range;\n          const rangeHtml = elem.value;\n          this.ranges[rangeHtml] = [start, end];\n        }\n      }\n      for (const range in this.ranges) {\n        if (this.ranges[range]) {\n          this.rangesArray.push(range);\n        }\n      }\n      if (this.showCustomRangeLabel) {\n        this.rangesArray.push(this.locale.customRangeLabel);\n      }\n      this.showCalInRanges = !this.rangesArray.length || this.alwaysShowCalendars;\n      if (!this.timePicker) {\n        this.startDate = this.startDate.startOf('day');\n        this.endDate = this.endDate.endOf('day');\n      }\n    }\n  }\n\n  renderTimePicker(side: SideEnum): void {\n    let selected: Dayjs;\n    let minDate: Dayjs;\n    const maxDate = this.maxDate;\n    if (side === SideEnum.left) {\n      selected = this.startDate.clone();\n      minDate = this.minDate;\n    } else if (side === SideEnum.right && this.endDate) {\n      selected = this.endDate.clone();\n      minDate = this.startDate;\n    } else if (side === SideEnum.right && !this.endDate) {\n      // don't have an end date, use the start date then put the selected time for the right side as the time\n      selected = this.getDateWithTime(this.startDate, SideEnum.right);\n      if (selected.isBefore(this.startDate)) {\n        selected = this.startDate.clone(); // set it back to the start date the time was backwards\n      }\n      minDate = this.startDate;\n    }\n    const start = this.timePicker24Hour ? 0 : 1;\n    const end = this.timePicker24Hour ? 23 : 12;\n    this.timepickerVariables[side] = {\n      hours: [],\n      minutes: [],\n      minutesLabel: [],\n      seconds: [],\n      secondsLabel: [],\n      disabledHours: [],\n      disabledMinutes: [],\n      disabledSeconds: [],\n      selectedHour: 0,\n      selectedMinute: 0,\n      selectedSecond: 0,\n      selected\n    };\n    // generate hours\n    for (let i = start; i <= end; i++) {\n      let iIn24 = i;\n      if (!this.timePicker24Hour) {\n        iIn24 = selected.hour() >= 12 ? (i === 12 ? 12 : i + 12) : i === 12 ? 0 : i;\n      }\n\n      const time = selected.clone().hour(iIn24);\n      let disabled = false;\n      if (minDate && time.minute(59).isBefore(minDate)) {\n        disabled = true;\n      }\n      if (maxDate && time.minute(0).isAfter(maxDate)) {\n        disabled = true;\n      }\n\n      this.timepickerVariables[side].hours.push(i);\n      if (iIn24 === selected.hour() && !disabled) {\n        this.timepickerVariables[side].selectedHour = i;\n      } else if (disabled) {\n        this.timepickerVariables[side].disabledHours.push(i);\n      }\n    }\n\n    // generate minutes\n    for (let i = 0; i < 60; i += this.timePickerIncrement) {\n      const padded = i < 10 ? `0${i}` : `${i}`;\n      const time = selected.clone().minute(i);\n\n      let disabled = false;\n      if (minDate && time.second(59).isBefore(minDate)) {\n        disabled = true;\n      }\n      if (maxDate && time.second(0).isAfter(maxDate)) {\n        disabled = true;\n      }\n      this.timepickerVariables[side].minutes.push(i);\n      this.timepickerVariables[side].minutesLabel.push(padded);\n      if (selected.minute() === i && !disabled) {\n        this.timepickerVariables[side].selectedMinute = i;\n      } else if (disabled) {\n        this.timepickerVariables[side].disabledMinutes.push(i);\n      }\n    }\n    // generate seconds\n    if (this.timePickerSeconds) {\n      for (let i = 0; i < 60; i++) {\n        const padded = i < 10 ? `0${i}` : `${i}`;\n        const time = selected.clone().second(i);\n\n        let disabled = false;\n        if (minDate && time.isBefore(minDate)) {\n          disabled = true;\n        }\n        if (maxDate && time.isAfter(maxDate)) {\n          disabled = true;\n        }\n\n        this.timepickerVariables[side].seconds.push(i);\n        this.timepickerVariables[side].secondsLabel.push(padded);\n        if (selected.second() === i && !disabled) {\n          this.timepickerVariables[side].selectedSecond = i;\n        } else if (disabled) {\n          this.timepickerVariables[side].disabledSeconds.push(i);\n        }\n      }\n    }\n    // generate AM/PM\n    if (!this.timePicker24Hour) {\n      if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate)) {\n        this.timepickerVariables[side].amDisabled = true;\n      }\n\n      if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate)) {\n        this.timepickerVariables[side].pmDisabled = true;\n      }\n      if (selected.hour() >= 12) {\n        this.timepickerVariables[side].ampmModel = 'PM';\n      } else {\n        this.timepickerVariables[side].ampmModel = 'AM';\n      }\n    }\n    this.timepickerVariables[side].selected = selected;\n  }\n\n  renderCalendar(side: SideEnum): void {\n    // side enum\n    const mainCalendar: VisibleCalendar = side === SideEnum.left ? this.leftCalendar : this.rightCalendar;\n    const month: number = mainCalendar.month.month();\n    const year: number = mainCalendar.month.year();\n    const hour: number = mainCalendar.month.hour();\n    const minute: number = mainCalendar.month.minute();\n    const second: number = mainCalendar.month.second();\n    const daysInMonth: number = dayjs(new Date(year, month)).utc(true).daysInMonth();\n    const firstDay: Dayjs = dayjs(new Date(year, month, 1)).utc(true);\n    const lastDay: Dayjs = dayjs(new Date(year, month, daysInMonth)).utc(true);\n    const lastMonth: number = dayjs(firstDay).utc(true).subtract(1, 'month').month();\n    const lastYear: number = dayjs(firstDay).utc(true).subtract(1, 'month').year();\n    const daysInLastMonth: number = dayjs(new Date(lastYear, lastMonth)).utc(true).daysInMonth();\n    const dayOfWeek: number = firstDay.day();\n    // initialize 6 rows x 7 columns array for the calendar\n    const calendar: CalendarArrayWithProps<Dayjs[]> = [];\n    calendar.firstDay = firstDay;\n    calendar.lastDay = lastDay;\n\n    for (let i = 0; i < 6; i++) {\n      calendar[i] = [];\n    }\n\n    // populate the calendar with date objects\n    let startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\n    if (startDay > daysInLastMonth) {\n      startDay -= 7;\n    }\n\n    if (dayOfWeek === this.locale.firstDay) {\n      startDay = daysInLastMonth - 6;\n    }\n\n    let curDate = dayjs(new Date(lastYear, lastMonth, startDay, 12, minute, second)).utc(true);\n\n    for (let i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = dayjs(curDate).utc(true).add(24, 'hours')) {\n      if (i > 0 && col % 7 === 0) {\n        col = 0;\n        row++;\n      }\n      calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\n      curDate = curDate.hour(12);\n\n      if (\n        this.minDate &&\n        calendar[row][col].format('YYYY-MM-DD') === this.minDate.format('YYYY-MM-DD') &&\n        calendar[row][col].isBefore(this.minDate) &&\n        side === 'left'\n      ) {\n        calendar[row][col] = this.minDate.clone();\n      }\n\n      if (\n        this.maxDate &&\n        calendar[row][col].format('YYYY-MM-DD') === this.maxDate.format('YYYY-MM-DD') &&\n        calendar[row][col].isAfter(this.maxDate) &&\n        side === 'right'\n      ) {\n        calendar[row][col] = this.maxDate.clone();\n      }\n    }\n\n    // make the calendar object available to hoverDate/clickDate\n    if (side === SideEnum.left) {\n      this.leftCalendar.calendar = calendar;\n    } else {\n      this.rightCalendar.calendar = calendar;\n    }\n    //\n    // Display the calendar\n    //\n    let minDate = side === 'left' ? this.minDate : this.startDate;\n    let maxDate = this.maxDate;\n    // adjust maxDate to reflect the dateLimit setting in order to\n    // grey out end dates beyond the dateLimit\n    if (this.endDate === null && this.dateLimit) {\n      const maxLimit = this.startDate.clone().add(this.dateLimit, 'day').endOf('day');\n      if (!maxDate || maxLimit.isBefore(maxDate)) {\n        maxDate = maxLimit;\n      }\n\n      if (this.customRangeDirection) {\n        minDate = this.minDate;\n        const minLimit = this.startDate.clone().subtract(this.dateLimit, 'day').endOf('day');\n        if (!minDate || minLimit.isAfter(minDate)) {\n          minDate = minLimit;\n        }\n      }\n    }\n\n    this.calendarVariables[side] = {\n      month,\n      year,\n      hour,\n      minute,\n      second,\n      daysInMonth,\n      firstDay,\n      lastDay,\n      lastMonth,\n      lastYear,\n      daysInLastMonth,\n      dayOfWeek,\n      // other vars\n      calRows: Array.from(Array(6).keys()),\n      calCols: Array.from(Array(7).keys()),\n      classes: {},\n      minDate,\n      maxDate,\n      calendar\n    };\n    if (this.showDropdowns) {\n      const currentMonth: number = calendar[1][1].month();\n      const currentYear: number = calendar[1][1].year();\n      const realCurrentYear: number = dayjs().utc(true).year();\n      const maxYear: number = (maxDate && maxDate.year()) || realCurrentYear + 5;\n      const minYear: number = (minDate && minDate.year()) || realCurrentYear - 50;\n      const inMinYear: boolean = currentYear === minYear;\n      const inMaxYear: boolean = currentYear === maxYear;\n      const years: number[] = [];\n      for (let y = minYear; y <= maxYear; y++) {\n        years.push(y);\n      }\n      this.calendarVariables[side].dropdowns = {\n        currentMonth,\n        currentYear,\n        maxYear,\n        minYear,\n        inMinYear,\n        inMaxYear,\n        monthArrays: Array.from(Array(12).keys()),\n        yearArrays: years\n      };\n    }\n\n    this.buildCells(calendar, side);\n  }\n\n  setStartDate(startDate: string | Dayjs): void {\n    if (typeof startDate === 'string') {\n      this.startDate = dayjs(startDate, this.locale.format).utc(true);\n    }\n\n    if (typeof startDate === 'object') {\n      this.pickingDate = true;\n      this.startDate = dayjs(startDate).utc(true);\n    }\n    if (!this.timePicker) {\n      this.pickingDate = true;\n      this.startDate = this.startDate.startOf('day');\n    }\n\n    if (this.timePicker && this.timePickerIncrement) {\n      this.startDate = this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n    }\n\n    if (this.minDate && this.startDate.isBefore(this.minDate)) {\n      this.startDate = this.minDate.clone();\n      if (this.timePicker && this.timePickerIncrement) {\n        this.startDate = this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n      }\n    }\n\n    if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\n      this.startDate = this.maxDate.clone();\n      if (this.timePicker && this.timePickerIncrement) {\n        this.startDate = this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n      }\n    }\n\n    if (!this.isShown) {\n      this.updateElement();\n    }\n    this.startDateChanged.emit({ startDate: this.startDate });\n    this.updateMonthsInView();\n  }\n\n  setEndDate(endDate: string | Dayjs): void {\n    if (typeof endDate === 'string') {\n      this.endDate = dayjs(endDate, this.locale.format).utc(true);\n    }\n\n    if (typeof endDate === 'object') {\n      this.pickingDate = false;\n      this.endDate = dayjs(endDate).utc(true);\n    }\n    if (!this.timePicker) {\n      this.pickingDate = false;\n      this.endDate = this.endDate.add(1, 'd').startOf('day').subtract(1, 'second');\n    }\n\n    if (this.timePicker && this.timePickerIncrement) {\n      this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n    }\n\n    if (this.endDate.isBefore(this.startDate)) {\n      this.endDate = this.startDate.clone();\n    }\n\n    if (this.maxDate && this.endDate.isAfter(this.maxDate)) {\n      this.endDate = this.maxDate.clone();\n    }\n\n    if (this.dateLimit && this.startDate.clone().add(this.dateLimit, 'day').isBefore(this.endDate)) {\n      this.endDate = this.startDate.clone().add(this.dateLimit, 'day');\n    }\n\n    if (!this.isShown) {\n      // this.updateElement();\n    }\n    this.endDateChanged.emit({ endDate: this.endDate });\n    this.updateMonthsInView();\n  }\n\n  updateView(): void {\n    if (this.timePicker) {\n      this.renderTimePicker(SideEnum.left);\n      this.renderTimePicker(SideEnum.right);\n    }\n    this.updateMonthsInView();\n    this.updateCalendars();\n  }\n\n  updateMonthsInView(): void {\n    if (this.endDate) {\n      // if both dates are visible already, do nothing\n      if (\n        !this.singleDatePicker &&\n        this.leftCalendar.month &&\n        this.rightCalendar.month &&\n        ((this.startDate && this.leftCalendar && this.startDate.format('YYYY-MM') === this.leftCalendar.month.format('YYYY-MM')) ||\n          (this.startDate && this.rightCalendar && this.startDate.format('YYYY-MM') === this.rightCalendar.month.format('YYYY-MM'))) &&\n        (this.endDate.format('YYYY-MM') === this.leftCalendar.month.format('YYYY-MM') ||\n          this.endDate.format('YYYY-MM') === this.rightCalendar.month.format('YYYY-MM'))\n      ) {\n        return;\n      }\n      if (this.startDate) {\n        this.leftCalendar.month = this.startDate.clone().date(2);\n        if (!this.linkedCalendars && (this.endDate.month() !== this.startDate.month() || this.endDate.year() !== this.startDate.year())) {\n          this.rightCalendar.month = this.endDate.clone().date(2);\n        } else {\n          this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n        }\n      }\n    } else {\n      if (\n        this.leftCalendar.month.format('YYYY-MM') !== this.startDate.format('YYYY-MM') &&\n        this.rightCalendar.month.format('YYYY-MM') !== this.startDate.format('YYYY-MM')\n      ) {\n        this.leftCalendar.month = this.startDate.clone().date(2);\n        this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n      }\n    }\n    if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\n      this.rightCalendar.month = this.maxDate.clone().date(2);\n      this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');\n    }\n  }\n\n  /**\n   *  This is responsible for updating the calendars\n   */\n  updateCalendars(): void {\n    this.renderCalendar(SideEnum.left);\n    this.renderCalendar(SideEnum.right);\n\n    if (this.endDate === null) {\n      return;\n    }\n    this.calculateChosenLabel();\n  }\n\n  updateElement(): void {\n    const format = this.locale.displayFormat ? this.locale.displayFormat : this.locale.format;\n    if (!this.singleDatePicker && this.autoUpdateInput) {\n      if (this.startDate && this.endDate) {\n        // if we use ranges and should show range label on input\n        if (\n          this.rangesArray.length &&\n          this.showRangeLabelOnInput === true &&\n          this.chosenRange &&\n          this.locale.customRangeLabel !== this.chosenRange\n        ) {\n          this.chosenLabel = this.chosenRange;\n        } else {\n          this.chosenLabel = this.startDate.format(format) + this.locale.separator + this.endDate.format(format);\n        }\n      }\n    } else if (this.autoUpdateInput) {\n      this.chosenLabel = this.startDate.format(format);\n    }\n  }\n\n  remove(): void {\n    this.isShown = false;\n  }\n\n  /**\n   * this should calculate the label\n   */\n  calculateChosenLabel(): void {\n    if (!this.locale || !this.locale.separator) {\n      this.buildLocale();\n    }\n    let customRange = true;\n    let i = 0;\n    if (this.rangesArray.length > 0) {\n      for (const range in this.ranges) {\n        if (this.ranges[range]) {\n          if (this.timePicker) {\n            const format = this.timePickerSeconds ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm';\n            // ignore times when comparing dates if time picker seconds is not enabled\n            if (\n              this.startDate.format(format) === this.ranges[range][0].format(format) &&\n              this.endDate.format(format) === this.ranges[range][1].format(format)\n            ) {\n              customRange = false;\n              this.chosenRange = this.rangesArray[i];\n              break;\n            }\n          } else {\n            // ignore times when comparing dates if time picker is not enabled\n            if (\n              this.startDate.format('YYYY-MM-DD') === this.ranges[range][0].format('YYYY-MM-DD') &&\n              this.endDate.format('YYYY-MM-DD') === this.ranges[range][1].format('YYYY-MM-DD')\n            ) {\n              customRange = false;\n              this.chosenRange = this.rangesArray[i];\n              break;\n            }\n          }\n          i++;\n        }\n      }\n      if (customRange) {\n        if (this.showCustomRangeLabel) {\n          this.chosenRange = this.locale.customRangeLabel;\n        } else {\n          this.chosenRange = null;\n        }\n        // if custom label: show calendar\n        this.showCalInRanges = true;\n      }\n    }\n\n    this.updateElement();\n  }\n\n  clickApply(e?: MouseEvent): void {\n    if (!this.singleDatePicker && this.startDate && !this.endDate) {\n      this.endDate = this.getDateWithTime(this.startDate, SideEnum.right);\n\n      this.calculateChosenLabel();\n    }\n    if (this.isInvalidDate && this.startDate && this.endDate) {\n      // get if there are invalid date between range\n\n      let d = this.startDate.clone();\n      while (d.isBefore(this.endDate)) {\n        if (this.isInvalidDate(d)) {\n          this.endDate = d.subtract(1, 'days');\n          this.calculateChosenLabel();\n          break;\n        }\n        d = d.add(1, 'days');\n      }\n    }\n    if (this.chosenLabel) {\n      this.choosedDate.emit({ chosenLabel: this.chosenLabel, startDate: this.startDate, endDate: this.endDate });\n    }\n\n    this.datesUpdated.emit({ startDate: this.startDate, endDate: this.endDate });\n    if (e || (this.closeOnAutoApply && !e)) {\n      this.hide();\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  clickCancel(e: MouseEvent): void {\n    this.startDate = this.cachedVersion.start;\n    this.endDate = this.cachedVersion.end;\n    if (this.inline) {\n      this.updateView();\n    }\n    this.cancelClicked.emit();\n    this.hide();\n  }\n\n  /**\n   * called when month is changed\n   *\n   * @param monthEvent get value in event.target.value\n   * @param side left or right\n   */\n  monthChanged(monthEvent: Event, side: SideEnum): void {\n    const year = this.calendarVariables[side].dropdowns.currentYear;\n    const month = parseInt((monthEvent.target as HTMLSelectElement).value, 10);\n    this.monthOrYearChanged(month, year, side);\n  }\n\n  /**\n   * called when year is changed\n   *\n   * @param yearEvent get value in event.target.value\n   * @param side left or right\n   */\n  yearChanged(yearEvent: Event, side: SideEnum): void {\n    const month = this.calendarVariables[side].dropdowns.currentMonth;\n    const year = parseInt((yearEvent.target as HTMLSelectElement).value, 10);\n    this.monthOrYearChanged(month, year, side);\n  }\n\n  /**\n   * called when time is changed\n   *\n   * @param timeEvent  an event\n   * @param side left or right\n   */\n  timeChanged(timeEvent: Event, side: SideEnum): void {\n    let hour = parseInt(String(this.timepickerVariables[side].selectedHour), 10);\n    const minute = parseInt(String(this.timepickerVariables[side].selectedMinute), 10);\n    const second = this.timePickerSeconds ? parseInt(String(this.timepickerVariables[side].selectedSecond), 10) : 0;\n\n    if (!this.timePicker24Hour) {\n      const ampm = this.timepickerVariables[side].ampmModel;\n      if (ampm === 'PM' && hour < 12) {\n        hour += 12;\n      }\n      if (ampm === 'AM' && hour === 12) {\n        hour = 0;\n      }\n    }\n\n    if (side === SideEnum.left) {\n      let start = this.startDate.clone();\n      start = start.hour(hour);\n      start = start.minute(minute);\n      start = start.second(second);\n      this.setStartDate(start);\n      if (this.singleDatePicker) {\n        this.endDate = this.startDate.clone();\n      } else if (this.endDate && this.endDate.format('YYYY-MM-DD') === start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\n        this.setEndDate(start.clone());\n      } else if (!this.endDate && this.timePicker) {\n        const startClone = this.getDateWithTime(start, SideEnum.right);\n\n        if (startClone.isBefore(start)) {\n          this.timepickerVariables[SideEnum.right].selectedHour = hour;\n          this.timepickerVariables[SideEnum.right].selectedMinute = minute;\n          this.timepickerVariables[SideEnum.right].selectedSecond = second;\n        }\n      }\n    } else if (this.endDate) {\n      let end = this.endDate.clone();\n      end = end.hour(hour);\n      end = end.minute(minute);\n      end = end.second(second);\n      this.setEndDate(end);\n    }\n\n    // update the calendars so all clickable dates reflect the new time component\n    this.updateCalendars();\n\n    // re-render the time pickers because changing one selection can affect what's enabled in another\n    this.renderTimePicker(SideEnum.left);\n    this.renderTimePicker(SideEnum.right);\n\n    if (this.autoApply) {\n      this.clickApply();\n    }\n  }\n\n  /**\n   *  call when month or year changed\n   *\n   * @param month month number 0 -11\n   * @param year year eg: 1995\n   * @param side left or right\n   */\n  monthOrYearChanged(month: number, year: number, side: SideEnum): void {\n    const isLeft = side === SideEnum.left;\n    let newMonth = month;\n    let newYear = year;\n\n    if (!isLeft) {\n      if (newYear < this.startDate.year() || (newYear === this.startDate.year() && newMonth < this.startDate.month())) {\n        newMonth = this.startDate.month();\n        newYear = this.startDate.year();\n      }\n    }\n\n    if (this.minDate) {\n      if (newYear < this.minDate.year() || (newYear === this.minDate.year() && newMonth < this.minDate.month())) {\n        newMonth = this.minDate.month();\n        newYear = this.minDate.year();\n      }\n    }\n\n    if (this.maxDate) {\n      if (newYear > this.maxDate.year() || (newYear === this.maxDate.year() && newMonth > this.maxDate.month())) {\n        newMonth = this.maxDate.month();\n        newYear = this.maxDate.year();\n      }\n    }\n    this.calendarVariables[side].dropdowns.currentYear = newYear;\n    this.calendarVariables[side].dropdowns.currentMonth = newMonth;\n    if (isLeft) {\n      this.leftCalendar.month = this.leftCalendar.month.month(newMonth).year(newYear);\n      if (this.linkedCalendars) {\n        this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\n      }\n    } else {\n      this.rightCalendar.month = this.rightCalendar.month.month(newMonth).year(newYear);\n      if (this.linkedCalendars) {\n        this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\n      }\n    }\n    this.updateCalendars();\n  }\n\n  /**\n   * Click on previous month\n   *\n   * @param side left or right calendar\n   */\n  clickPrev(side: SideEnum): void {\n    if (side === SideEnum.left) {\n      this.leftCalendar.month = this.leftCalendar.month.subtract(1, 'month');\n      if (this.linkedCalendars) {\n        this.rightCalendar.month = this.rightCalendar.month.subtract(1, 'month');\n      }\n    } else {\n      this.rightCalendar.month = this.rightCalendar.month.subtract(1, 'month');\n    }\n    this.updateCalendars();\n  }\n\n  /**\n   * Click on next month\n   *\n   * @param side left or right calendar\n   */\n  clickNext = (side: SideEnum) => {\n    if (side === SideEnum.left) {\n      this.leftCalendar.month = this.leftCalendar.month.add(1, 'month');\n    } else {\n      this.rightCalendar.month = this.rightCalendar.month.add(1, 'month');\n      if (this.linkedCalendars) {\n        this.leftCalendar.month = this.leftCalendar.month.add(1, 'month');\n      }\n    }\n    this.updateCalendars();\n  };\n\n  /**\n   * When hovering a date\n   *\n   * @param e event: get value by e.target.value\n   * @param side left or right\n   * @param row row position of the current date clicked\n   * @param col col position of the current date clicked\n   */\n  hoverDate(e: Event, side: SideEnum, row: number, col: number): void {\n    const leftCalDate = this.calendarVariables.left.calendar[row][col];\n    const rightCalDate = this.calendarVariables.right.calendar[row][col];\n    if (this.pickingDate) {\n      this.nowHoveredDate = side === SideEnum.left ? leftCalDate : rightCalDate;\n      this.renderCalendar(SideEnum.left);\n      this.renderCalendar(SideEnum.right);\n    }\n    // const tooltip = side === SideEnum.left ? this.tooltiptext[leftCalDate] : this.tooltiptext[rightCalDate];\n    // if (tooltip.length > 0) {\n    //   (e.target as HTMLTableCellElement).setAttribute('title', tooltip);\n    // }\n  }\n\n  /**\n   * When selecting a date\n   *\n   * @param e event: get value by e.target.value\n   * @param side left or right\n   * @param row row position of the current date clicked\n   * @param col col position of the current date clicked\n   */\n  clickDate(e: Event, side: SideEnum, row: number, col: number): void {\n    if ((e.target as HTMLTableCellElement).tagName === 'TD') {\n      if (!(e.target as HTMLTableCellElement).classList.contains('available')) {\n        return;\n      }\n    } else if ((e.target as HTMLSpanElement).tagName === 'SPAN') {\n      if (!(e.target as HTMLSpanElement).parentElement.classList.contains('available')) {\n        return;\n      }\n    }\n    if (this.rangesArray.length) {\n      this.chosenRange = this.locale.customRangeLabel;\n    }\n\n    let date = side === SideEnum.left ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n    if ((this.endDate || (date.isBefore(this.startDate, 'day') && this.customRangeDirection === false)) && this.lockStartDate === false) {\n      // picking start\n      if (this.timePicker) {\n        date = this.getDateWithTime(date, SideEnum.left);\n      }\n      this.endDate = null;\n      this.setStartDate(date.clone());\n    } else if (!this.endDate && date.isBefore(this.startDate) && this.customRangeDirection === false) {\n      // special case: clicking the same date for start/end,\n      // but the time of the end date is before the start date\n      this.setEndDate(this.startDate.clone());\n    } else {\n      // picking end\n      if (this.timePicker) {\n        date = this.getDateWithTime(date, SideEnum.right);\n      }\n      if (date.isBefore(this.startDate, 'day') === true && this.customRangeDirection === true) {\n        this.setEndDate(this.startDate);\n        this.setStartDate(date.clone());\n      } else {\n        this.setEndDate(date.clone());\n      }\n\n      if (this.autoApply) {\n        this.calculateChosenLabel();\n      }\n    }\n\n    if (this.singleDatePicker) {\n      this.setEndDate(this.startDate);\n      this.updateElement();\n      if (this.autoApply) {\n        this.clickApply();\n      }\n    }\n\n    this.updateView();\n\n    if (this.autoApply && this.startDate && this.endDate) {\n      this.clickApply();\n    }\n\n    // This is to cancel the blur event handler if the mouse was in one of the inputs\n    e.stopPropagation();\n  }\n\n  /**\n   *  Click on the custom range\n   *\n   * @param e: Event\n   * @param label\n   */\n  clickRange(e: MouseEvent, label: string): void {\n    this.chosenRange = label;\n    if (label === this.locale.customRangeLabel) {\n      this.isShown = true; // show calendars\n      this.showCalInRanges = true;\n    } else {\n      const dates = this.ranges[label];\n      console.log('1 ', dates);\n      this.startDate = dates[0].clone();\n      this.endDate = dates[1].clone();\n      if (this.showRangeLabelOnInput && label !== this.locale.customRangeLabel) {\n        this.chosenLabel = label;\n      } else {\n        this.calculateChosenLabel();\n      }\n      this.showCalInRanges = !this.rangesArray.length || this.alwaysShowCalendars;\n\n      if (!this.timePicker) {\n        this.startDate = this.startDate.startOf('day');\n        this.endDate = this.endDate.endOf('day');\n      }\n\n      if (!this.alwaysShowCalendars) {\n        this.isShown = false; // hide calendars\n      }\n      this.rangeClicked.emit({ label, dates });\n      if (!this.keepCalendarOpeningWithRange || this.autoApply) {\n        this.clickApply();\n      } else {\n        if (!this.alwaysShowCalendars) {\n          return this.clickApply();\n        }\n        if (this.maxDate && this.maxDate.isSame(dates[0], 'month')) {\n          this.rightCalendar.month = this.rightCalendar.month.month(dates[0].month());\n          this.rightCalendar.month = this.rightCalendar.month.year(dates[0].year());\n          this.leftCalendar.month = this.leftCalendar.month.month(dates[0].month() - 1);\n          this.leftCalendar.month = this.leftCalendar.month.year(dates[1].year());\n        } else {\n          this.leftCalendar.month = this.leftCalendar.month.month(dates[0].month());\n          this.leftCalendar.month = this.leftCalendar.month.year(dates[0].year());\n          // get the right calendar value\n          const nextMonth = !this.linkedCalendars ? dates[1].clone() : dates[0].clone().add(1, 'month');\n          this.rightCalendar.month = this.rightCalendar.month.month(nextMonth.month());\n          this.rightCalendar.month = this.rightCalendar.month.year(nextMonth.year());\n        }\n        this.updateCalendars();\n        if (this.timePicker) {\n          this.renderTimePicker(SideEnum.left);\n          this.renderTimePicker(SideEnum.right);\n        }\n      }\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  show(e?: Event): void {\n    if (this.isShown) {\n      return;\n    }\n    this.cachedVersion.start = this.startDate.clone();\n    this.cachedVersion.end = this.endDate.clone();\n    this.isShown = true;\n    this.updateView();\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  hide(e?: Event): void {\n    if (!this.isShown) {\n      return;\n    }\n    // incomplete date selection, revert to last values\n    if (!this.endDate) {\n      if (this.cachedVersion.start) {\n        this.startDate = this.cachedVersion.start.clone();\n      }\n      if (this.cachedVersion.end) {\n        this.endDate = this.cachedVersion.end.clone();\n      }\n    }\n\n    // if a new date range was selected, invoke the user callback function\n    if (!this.startDate.isSame(this.cachedVersion.start) || !this.endDate.isSame(this.cachedVersion.end)) {\n      // this.callback(this.startDate, this.endDate, this.chosenLabel);\n    }\n\n    // if picker is attached to a text input, update it\n    this.updateElement();\n    this.isShown = false;\n    this.ref.detectChanges();\n  }\n\n  /**\n   * update the locale options\n   *\n   * @param locale\n   */\n  updateLocale(locale: LocaleConfig): void {\n    for (const key in locale) {\n      if (Object.prototype.hasOwnProperty.call(locale, key)) {\n        this.locale[key] = locale[key];\n        if (key === 'customRangeLabel') {\n          this.renderRanges();\n        }\n      }\n    }\n  }\n\n  /**\n   *  clear the daterange picker\n   */\n  clear(): void {\n    this.startDate = dayjs().utc(true).startOf('day');\n    this.endDate = dayjs().utc(true).endOf('day');\n    this.choosedDate.emit({ chosenLabel: '', startDate: null, endDate: null });\n    this.datesUpdated.emit({ startDate: null, endDate: null });\n    this.clearClicked.emit();\n    this.hide();\n  }\n\n  /**\n   * Find out if the selected range should be disabled if it doesn't\n   * fit into minDate and maxDate limitations.\n   */\n  disableRange(range: string): boolean {\n    if (range === this.locale.customRangeLabel) {\n      return false;\n    }\n    const rangeMarkers = this.ranges[range];\n    const areBothBefore = rangeMarkers.every((date) => {\n      if (!this.minDate) {\n        return false;\n      }\n      return date.isBefore(this.minDate);\n    });\n\n    const areBothAfter = rangeMarkers.every((date) => {\n      if (!this.maxDate) {\n        return false;\n      }\n      return date.isAfter(this.maxDate);\n    });\n    return areBothBefore || areBothAfter;\n  }\n\n  /**\n   *\n   * @param date the date to add time\n   * @param side left or right\n   */\n  private getDateWithTime(date, side: SideEnum): dayjs.Dayjs {\n    let hour = parseInt(String(this.timepickerVariables[side].selectedHour), 10);\n    if (!this.timePicker24Hour) {\n      const ampm = this.timepickerVariables[side].ampmModel;\n      if (ampm === 'PM' && hour < 12) {\n        hour += 12;\n      }\n      if (ampm === 'AM' && hour === 12) {\n        hour = 0;\n      }\n    }\n    const minute = parseInt(String(this.timepickerVariables[side].selectedMinute), 10);\n    const second = this.timePickerSeconds ? parseInt(String(this.timepickerVariables[side].selectedSecond), 10) : 0;\n    return date.clone().hour(hour).minute(minute).second(second);\n  }\n\n  /**\n   *  build the locale config\n   */\n  private buildLocale() {\n    this.locale = { ...this.localeHolderService.config, ...this.locale };\n    if (!this.locale.format) {\n      if (this.timePicker) {\n        this.locale.format = dayjs.localeData().longDateFormat('lll');\n      } else {\n        this.locale.format = dayjs.localeData().longDateFormat('L');\n      }\n    }\n  }\n\n  private buildCells(calendar, side: SideEnum) {\n    for (let row = 0; row < 6; row++) {\n      this.calendarVariables[side].classes[row] = { classList: '' };\n      const rowClasses = [];\n      if (\n        this.emptyWeekRowClass &&\n        Array.from(Array(7).keys()).some((i) => calendar[row][i].month() !== this.calendarVariables[side].month)\n      ) {\n        rowClasses.push(this.emptyWeekRowClass);\n      }\n      for (let col = 0; col < 7; col++) {\n        const classes = [];\n        // empty week row class\n        if (this.emptyWeekColumnClass) {\n          if (calendar[row][col].month() !== this.calendarVariables[side].month) {\n            classes.push(this.emptyWeekColumnClass);\n          }\n        }\n        // highlight today's date\n        if (calendar[row][col].isSame(dayjs().utc(true), 'day')) {\n          classes.push('today');\n        }\n        // highlight weekends\n        if (calendar[row][col].isoWeekday() > 5) {\n          classes.push('weekend');\n        }\n        // grey out the dates in other months displayed at beginning and end of this calendar\n        if (calendar[row][col].month() !== calendar[1][1].month()) {\n          classes.push('off');\n\n          // mark the last day of the previous month in this calendar\n          if (\n            this.lastDayOfPreviousMonthClass &&\n            (calendar[row][col].month() < calendar[1][1].month() || calendar[1][1].month() === 0) &&\n            calendar[row][col].date() === this.calendarVariables[side].daysInLastMonth\n          ) {\n            classes.push(this.lastDayOfPreviousMonthClass);\n          }\n\n          // mark the first day of the next month in this calendar\n          if (\n            this.firstDayOfNextMonthClass &&\n            (calendar[row][col].month() > calendar[1][1].month() || calendar[row][col].month() === 0) &&\n            calendar[row][col].date() === 1\n          ) {\n            classes.push(this.firstDayOfNextMonthClass);\n          }\n        }\n        // mark the first day of the current month with a custom class\n        if (\n          this.firstMonthDayClass &&\n          calendar[row][col].month() === calendar[1][1].month() &&\n          calendar[row][col].date() === calendar.firstDay.date()\n        ) {\n          classes.push(this.firstMonthDayClass);\n        }\n        // mark the last day of the current month with a custom class\n        if (\n          this.lastMonthDayClass &&\n          calendar[row][col].month() === calendar[1][1].month() &&\n          calendar[row][col].date() === calendar.lastDay.date()\n        ) {\n          classes.push(this.lastMonthDayClass);\n        }\n        // don't allow selection of dates before the minimum date\n        if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day')) {\n          classes.push('off', 'disabled');\n        }\n        // don't allow selection of dates after the maximum date\n        if (this.calendarVariables[side].maxDate && calendar[row][col].isAfter(this.calendarVariables[side].maxDate, 'day')) {\n          classes.push('off', 'disabled');\n        }\n        // don't allow selection of date if a custom function decides it's invalid\n        if (this.isInvalidDate(calendar[row][col])) {\n          classes.push('off', 'disabled', 'invalid');\n        }\n        // highlight the currently selected start date\n        if (this.startDate && calendar[row][col].format('YYYY-MM-DD') === this.startDate.format('YYYY-MM-DD')) {\n          classes.push('active', 'start-date');\n        }\n        // highlight the currently selected end date\n        if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') === this.endDate.format('YYYY-MM-DD')) {\n          classes.push('active', 'end-date');\n        }\n        // highlight dates in-between the selected dates\n        if (\n          ((this.nowHoveredDate != null && this.pickingDate) || this.endDate != null) &&\n          calendar[row][col] > this.startDate &&\n          (calendar[row][col] < this.endDate || (calendar[row][col] < this.nowHoveredDate && this.pickingDate)) &&\n          !classes.find((el) => el === 'off')\n        ) {\n          classes.push('in-range');\n        }\n        // apply custom classes for this date\n        const isCustom = this.isCustomDate(calendar[row][col]);\n        if (isCustom !== false) {\n          if (typeof isCustom === 'string') {\n            classes.push(isCustom);\n          } else {\n            Array.prototype.push.apply(classes, isCustom);\n          }\n        }\n        // apply custom tooltip for this date\n        // const isTooltip = this.isTooltipDate(calendar[row][col]);\n        // if (isTooltip) {\n        //   if (typeof isTooltip === 'string') {\n        //     this.tooltiptext[calendar[row][col]] = isTooltip; // setting tooltiptext for custom date\n        //   } else {\n        //     this.tooltiptext[calendar[row][col]] = 'Put the tooltip as the returned value of isTooltipDate';\n        //   }\n        // } else {\n        //   this.tooltiptext[calendar[row][col]] = '';\n        // }\n        // store classes var\n        let cname = '';\n        let disabled = false;\n        for (const className of classes) {\n          cname += className + ' ';\n          if (className === 'disabled') {\n            disabled = true;\n          }\n        }\n        if (!disabled) {\n          cname += 'available';\n        }\n        this.calendarVariables[side].classes[row][col] = cname.replace(/^\\s+|\\s+$/g, '');\n      }\n      this.calendarVariables[side].classes[row].classList = rowClasses.join(' ');\n    }\n  }\n}\n","<div\n    class=\"md-drppicker\"\n    #pickerContainer\n    [ngClass]=\"{\n        ltr: locale.direction === 'ltr',\n        rtl: this.locale.direction === 'rtl',\n        shown: isShown || inline,\n        hidden: !isShown && !inline,\n        inline: inline,\n        double: !singleDatePicker && showCalInRanges,\n        'show-ranges': rangesArray.length\n    }\"\n    [class]=\"'drops-' + drops + '-' + opens\">\n    <ng-container *ngIf=\"rangesArray.length\">\n        <div class=\"ranges\">\n            <ul>\n                <li *ngFor=\"let range of rangesArray\">\n                    <button\n                        type=\"button\"\n                        (click)=\"clickRange($event, range)\"\n                        [disabled]=\"disableRange(range)\"\n                        [ngClass]=\"{ active: range === chosenRange }\">\n                        {{ range }}\n                    </button>\n                </li>\n            </ul>\n        </div>\n    </ng-container>\n    <div class=\"calendar\" [ngClass]=\"{ right: singleDatePicker, left: !singleDatePicker }\" *ngIf=\"showCalInRanges\">\n        <div class=\"calendar-table\">\n            <table class=\"table-condensed\" *ngIf=\"calendarVariables\">\n                <thead>\n                    <tr>\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\"></th>\n                        <ng-container\n                            *ngIf=\"\n                                !calendarVariables.left.minDate ||\n                                (calendarVariables.left.minDate.isBefore(calendarVariables.left.calendar.firstDay) &&\n                                    (!this.linkedCalendars || true))\n                            \">\n                            <th (click)=\"clickPrev(sideEnum.left)\" class=\"prev available\"></th>\n                        </ng-container>\n                        <ng-container\n                            *ngIf=\"\n                                !(\n                                    !calendarVariables.left.minDate ||\n                                    (calendarVariables.left.minDate.isBefore(calendarVariables.left.calendar.firstDay) &&\n                                        (!this.linkedCalendars || true))\n                                )\n                            \">\n                            <th></th>\n                        </ng-container>\n                        <th colspan=\"5\" class=\"month drp-animate\">\n                            <ng-container *ngIf=\"showDropdowns && calendarVariables.left.dropdowns\">\n                                <div class=\"dropdowns\">\n                                    {{ this.locale.monthNames[calendarVariables?.left?.calendar[1][1].month()] }}\n                                    <select class=\"monthselect\" (change)=\"monthChanged($event, sideEnum.left)\">\n                                        <option\n                                            [disabled]=\"\n                                                (calendarVariables.left.dropdowns.inMinYear &&\n                                                    m < calendarVariables.left.minDate.month()) ||\n                                                (calendarVariables.left.dropdowns.inMaxYear && m > calendarVariables.left.maxDate.month())\n                                            \"\n                                            *ngFor=\"let m of calendarVariables.left.dropdowns.monthArrays\"\n                                            [value]=\"m\"\n                                            [selected]=\"calendarVariables.left.dropdowns.currentMonth === m\">\n                                            {{ locale.monthNames[m] }}\n                                        </option>\n                                    </select>\n                                </div>\n                                <div class=\"dropdowns\">\n                                    {{ calendarVariables?.left?.calendar[1][1].format(' YYYY') }}\n                                    <select class=\"yearselect\" (change)=\"yearChanged($event, sideEnum.left)\">\n                                        <option\n                                            *ngFor=\"let y of calendarVariables.left.dropdowns.yearArrays\"\n                                            [selected]=\"y === calendarVariables.left.dropdowns.currentYear\">\n                                            {{ y }}\n                                        </option>\n                                    </select>\n                                </div>\n                            </ng-container>\n                            <ng-container *ngIf=\"!showDropdowns || !calendarVariables.left.dropdowns\">\n                                {{ this.locale.monthNames[calendarVariables?.left?.calendar[1][1].month()] }}\n                                {{ calendarVariables?.left?.calendar[1][1].format(' YYYY') }}\n                            </ng-container>\n                        </th>\n                        <ng-container\n                            *ngIf=\"\n                                (!calendarVariables.left.maxDate ||\n                                    calendarVariables.left.maxDate.isAfter(calendarVariables.left.calendar.lastDay)) &&\n                                (!linkedCalendars || singleDatePicker)\n                            \">\n                            <th class=\"next available\" (click)=\"clickNext(sideEnum.left)\"></th>\n                        </ng-container>\n                        <ng-container\n                            *ngIf=\"\n                                !(\n                                    (!calendarVariables.left.maxDate ||\n                                        calendarVariables.left.maxDate.isAfter(calendarVariables.left.calendar.lastDay)) &&\n                                    (!linkedCalendars || singleDatePicker)\n                                )\n                            \">\n                            <th></th>\n                        </ng-container>\n                    </tr>\n                    <tr class=\"week-days\">\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\" class=\"week\">\n                            <span>{{ this.locale.weekLabel }}</span>\n                        </th>\n                        <th *ngFor=\"let dayofweek of locale.daysOfWeek\">\n                            <span>{{ dayofweek }}</span>\n                        </th>\n                    </tr>\n                </thead>\n                <tbody class=\"drp-animate\">\n                    <tr *ngFor=\"let row of calendarVariables.left.calRows\" [class]=\"calendarVariables.left.classes[row].classList\">\n                        <!-- add week number -->\n                        <td class=\"week\" *ngIf=\"showWeekNumbers\">\n                            <span>{{ calendarVariables.left.calendar[row][0].week() }}</span>\n                        </td>\n                        <td class=\"week\" *ngIf=\"showISOWeekNumbers\">\n                            <span>{{ calendarVariables.left.calendar[row][0].isoWeek() }}</span>\n                        </td>\n                        <!-- cal -->\n                        <td\n                            *ngFor=\"let col of calendarVariables.left.calCols\"\n                            [class]=\"calendarVariables.left.classes[row][col]\"\n                            (click)=\"clickDate($event, sideEnum.left, row, col)\"\n                            (mouseenter)=\"hoverDate($event, sideEnum.left, row, col)\">\n                            <span>{{ calendarVariables.left.calendar[row][col].date() }}</span>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div class=\"calendar-time\" *ngIf=\"timePicker\">\n            <div class=\"select\">\n                <select\n                    class=\"hourselect select-item\"\n                    [disabled]=\"!startDate\"\n                    [(ngModel)]=\"timepickerVariables.left.selectedHour\"\n                    (ngModelChange)=\"timeChanged($event, sideEnum.left)\">\n                    <option\n                        *ngFor=\"let i of timepickerVariables.left.hours\"\n                        [value]=\"i\"\n                        [disabled]=\"timepickerVariables.left.disabledHours.indexOf(i) > -1\">\n                        {{ i }}\n                    </option>\n                </select>\n            </div>\n            <div class=\"select\">\n                <select\n                    class=\"select-item minuteselect\"\n                    [disabled]=\"!startDate\"\n                    [(ngModel)]=\"timepickerVariables.left.selectedMinute\"\n                    (ngModelChange)=\"timeChanged($event, sideEnum.left)\">\n                    <option\n                        *ngFor=\"let i of timepickerVariables.left.minutes; let index = index\"\n                        [value]=\"i\"\n                        [disabled]=\"timepickerVariables.left.disabledMinutes.indexOf(i) > -1\">\n                        {{ timepickerVariables.left.minutesLabel[index] }}\n                    </option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select\n                    class=\"select-item secondselect\"\n                    *ngIf=\"timePickerSeconds\"\n                    [disabled]=\"!startDate\"\n                    [(ngModel)]=\"timepickerVariables.left.selectedSecond\"\n                    (ngModelChange)=\"timeChanged($event, sideEnum.left)\">\n                    <option\n                        *ngFor=\"let i of timepickerVariables.left.seconds; let index = index\"\n                        [value]=\"i\"\n                        [disabled]=\"timepickerVariables.left.disabledSeconds.indexOf(i) > -1\">\n                        {{ timepickerVariables.left.secondsLabel[index] }}\n                    </option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select\n                    class=\"select-item ampmselect\"\n                    *ngIf=\"!timePicker24Hour\"\n                    [(ngModel)]=\"timepickerVariables.left.ampmModel\"\n                    (ngModelChange)=\"timeChanged($event, sideEnum.left)\">\n                    <option value=\"AM\" [disabled]=\"timepickerVariables.left.amDisabled\">AM</option>\n                    <option value=\"PM\" [disabled]=\"timepickerVariables.left.pmDisabled\">PM</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n        </div>\n    </div>\n    <div class=\"calendar right\" *ngIf=\"showCalInRanges && !singleDatePicker\">\n        <div class=\"calendar-table\">\n            <table class=\"table-condensed\" *ngIf=\"calendarVariables\">\n                <thead>\n                    <tr>\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\"></th>\n                        <ng-container\n                            *ngIf=\"\n                                (!calendarVariables.right.minDate ||\n                                    calendarVariables.right.minDate.isBefore(calendarVariables.right.calendar.firstDay)) &&\n                                !this.linkedCalendars\n                            \">\n                            <th (click)=\"clickPrev(sideEnum.right)\" class=\"prev available\"></th>\n                        </ng-container>\n                        <ng-container\n                            *ngIf=\"\n                                !(\n                                    (!calendarVariables.right.minDate ||\n                                        calendarVariables.right.minDate.isBefore(calendarVariables.right.calendar.firstDay)) &&\n                                    !this.linkedCalendars\n                                )\n                            \">\n                            <th></th>\n                        </ng-container>\n                        <th colspan=\"5\" class=\"month\">\n                            <ng-container *ngIf=\"showDropdowns && calendarVariables.right.dropdowns\">\n                                <div class=\"dropdowns\">\n                                    {{ this.locale.monthNames[calendarVariables?.right?.calendar[1][1].month()] }}\n                                    <select class=\"monthselect\" (change)=\"monthChanged($event, sideEnum.right)\">\n                                        <option\n                                            [disabled]=\"\n                                                (calendarVariables.right.dropdowns.inMinYear &&\n                                                    calendarVariables.right.minDate &&\n                                                    m < calendarVariables.right.minDate.month()) ||\n                                                (calendarVariables.right.dropdowns.inMaxYear &&\n                                                    calendarVariables.right.maxDate &&\n                                                    m > calendarVariables.right.maxDate.month())\n                                            \"\n                                            *ngFor=\"let m of calendarVariables.right.dropdowns.monthArrays\"\n                                            [value]=\"m\"\n                                            [selected]=\"calendarVariables.right.dropdowns.currentMonth === m\">\n                                            {{ locale.monthNames[m] }}\n                                        </option>\n                                    </select>\n                                </div>\n                                <div class=\"dropdowns\">\n                                    {{ calendarVariables?.right?.calendar[1][1].format(' YYYY') }}\n                                    <select class=\"yearselect\" (change)=\"yearChanged($event, sideEnum.right)\">\n                                        <option\n                                            *ngFor=\"let y of calendarVariables.right.dropdowns.yearArrays\"\n                                            [selected]=\"y === calendarVariables.right.dropdowns.currentYear\">\n                                            {{ y }}\n                                        </option>\n                                    </select>\n                                </div>\n                            </ng-container>\n                            <ng-container *ngIf=\"!showDropdowns || !calendarVariables.right.dropdowns\">\n                                {{ this.locale.monthNames[calendarVariables?.right?.calendar[1][1].month()] }}\n                                {{ calendarVariables?.right?.calendar[1][1].format(' YYYY') }}\n                            </ng-container>\n                        </th>\n                        <ng-container\n                            *ngIf=\"\n                                !calendarVariables.right.maxDate ||\n                                (calendarVariables.right.maxDate.isAfter(calendarVariables.right.calendar.lastDay) &&\n                                    (!linkedCalendars || singleDatePicker || true))\n                            \">\n                            <th class=\"next available\" (click)=\"clickNext(sideEnum.right)\"></th>\n                        </ng-container>\n                        <ng-container\n                            *ngIf=\"\n                                !(\n                                    !calendarVariables.right.maxDate ||\n                                    (calendarVariables.right.maxDate.isAfter(calendarVariables.right.calendar.lastDay) &&\n                                        (!linkedCalendars || singleDatePicker || true))\n                                )\n                            \">\n                            <th></th>\n                        </ng-container>\n                    </tr>\n\n                    <tr class=\"week-days\">\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\" class=\"week\">\n                            <span>{{ this.locale.weekLabel }}</span>\n                        </th>\n                        <th *ngFor=\"let dayofweek of locale.daysOfWeek\">\n                            <span>{{ dayofweek }}</span>\n                        </th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr *ngFor=\"let row of calendarVariables.right.calRows\" [class]=\"calendarVariables.right.classes[row].classList\">\n                        <td class=\"week\" *ngIf=\"showWeekNumbers\">\n                            <span>{{ calendarVariables.right.calendar[row][0].week() }}</span>\n                        </td>\n                        <td class=\"week\" *ngIf=\"showISOWeekNumbers\">\n                            <span>{{ calendarVariables.right.calendar[row][0].isoWeek() }}</span>\n                        </td>\n                        <td\n                            *ngFor=\"let col of calendarVariables.right.calCols\"\n                            [class]=\"calendarVariables.right.classes[row][col]\"\n                            (click)=\"clickDate($event, sideEnum.right, row, col)\"\n                            (mouseenter)=\"hoverDate($event, sideEnum.right, row, col)\">\n                            <span>{{ calendarVariables.right.calendar[row][col].date() }}</span>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div class=\"calendar-time\" *ngIf=\"timePicker\">\n            <div class=\"select\">\n                <select\n                    class=\"select-item hourselect\"\n                    [disabled]=\"!startDate\"\n                    [(ngModel)]=\"timepickerVariables.right.selectedHour\"\n                    (ngModelChange)=\"timeChanged($event, sideEnum.right)\">\n                    <option\n                        *ngFor=\"let i of timepickerVariables.right.hours\"\n                        [value]=\"i\"\n                        [disabled]=\"timepickerVariables.right.disabledHours.indexOf(i) > -1\">\n                        {{ i }}\n                    </option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select\n                    class=\"select-item minuteselect\"\n                    [disabled]=\"!startDate\"\n                    [(ngModel)]=\"timepickerVariables.right.selectedMinute\"\n                    (ngModelChange)=\"timeChanged($event, sideEnum.right)\">\n                    <option\n                        *ngFor=\"let i of timepickerVariables.right.minutes; let index = index\"\n                        [value]=\"i\"\n                        [disabled]=\"timepickerVariables.right.disabledMinutes.indexOf(i) > -1\">\n                        {{ timepickerVariables.right.minutesLabel[index] }}\n                    </option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select\n                    *ngIf=\"timePickerSeconds\"\n                    class=\"select-item secondselect\"\n                    [disabled]=\"!startDate\"\n                    [(ngModel)]=\"timepickerVariables.right.selectedSecond\"\n                    (ngModelChange)=\"timeChanged($event, sideEnum.right)\">\n                    <option\n                        *ngFor=\"let i of timepickerVariables.right.seconds; let index = index\"\n                        [value]=\"i\"\n                        [disabled]=\"timepickerVariables.right.disabledSeconds.indexOf(i) > -1\">\n                        {{ timepickerVariables.right.secondsLabel[index] }}\n                    </option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select\n                    *ngIf=\"!timePicker24Hour\"\n                    class=\"select-item ampmselect\"\n                    [(ngModel)]=\"timepickerVariables.right.ampmModel\"\n                    (ngModelChange)=\"timeChanged($event, sideEnum.right)\">\n                    <option value=\"AM\" [disabled]=\"timepickerVariables.right.amDisabled\">AM</option>\n                    <option value=\"PM\" [disabled]=\"timepickerVariables.right.pmDisabled\">PM</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n        </div>\n    </div>\n    <div class=\"buttons\" *ngIf=\"!autoApply && (!rangesArray.length || (showCalInRanges && !singleDatePicker))\">\n        <div class=\"buttons_input\">\n            <button *ngIf=\"showClearButton\" class=\"btn btn-default clear\" type=\"button\" (click)=\"clear()\" [title]=\"locale.clearLabel\">\n                {{ locale.clearLabel }}\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"30\" viewBox=\"0 -5 24 24\">\n                    <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" />\n                </svg>\n            </button>\n            <button class=\"btn btn-default\" *ngIf=\"showCancel\" type=\"button\" (click)=\"clickCancel($event)\">{{ locale.cancelLabel }}</button>\n            <button class=\"btn\" [disabled]=\"applyBtn.disabled\" type=\"button\" (click)=\"clickApply($event)\">{{ locale.applyLabel }}</button>\n        </div>\n    </div>\n</div>\n","import {\n  Directive,\n  ViewContainerRef,\n  ElementRef,\n  HostListener,\n  forwardRef,\n  ChangeDetectorRef,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n  Input,\n  DoCheck,\n  KeyValueDiffer,\n  KeyValueDiffers,\n  Output,\n  EventEmitter,\n  Renderer2,\n  HostBinding\n} from '@angular/core';\nimport { ChosenDate, DateRange, DaterangepickerComponent, DateRanges, EndDate, StartDate, TimePeriod } from './daterangepicker.component';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport dayjs from 'dayjs/esm';\nimport { LocaleConfig } from './daterangepicker.config';\nimport { LocaleService } from './locale.service';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'input[ngxDaterangepickerMd]',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DaterangepickerDirective),\n      multi: true\n    }\n  ]\n})\n// eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\nexport class DaterangepickerDirective implements OnInit, OnChanges, DoCheck {\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix,@angular-eslint/no-output-native,@angular-eslint/no-output-rename\n  @Output('change') onChange: EventEmitter<TimePeriod | null> = new EventEmitter();\n  // eslint-disable-next-line @angular-eslint/no-output-rename\n  @Output('rangeClicked') rangeClicked: EventEmitter<DateRange> = new EventEmitter();\n  // eslint-disable-next-line @angular-eslint/no-output-rename\n  @Output('datesUpdated') datesUpdated: EventEmitter<TimePeriod> = new EventEmitter();\n  @Output() startDateChanged: EventEmitter<StartDate> = new EventEmitter();\n  @Output() endDateChanged: EventEmitter<EndDate> = new EventEmitter();\n  @Output() clearClicked: EventEmitter<void> = new EventEmitter();\n\n  @Input()\n  minDate: dayjs.Dayjs;\n\n  @Input()\n  maxDate: dayjs.Dayjs;\n\n  @Input()\n  autoApply: boolean;\n\n  @Input()\n  alwaysShowCalendars: boolean;\n\n  @Input()\n  showCustomRangeLabel: boolean;\n\n  @Input()\n  linkedCalendars: boolean;\n\n  @Input()\n  dateLimit: number = null;\n\n  @Input()\n  singleDatePicker: boolean;\n\n  @Input()\n  showWeekNumbers: boolean;\n\n  @Input()\n  showISOWeekNumbers: boolean;\n\n  @Input()\n  showDropdowns: boolean;\n\n  @Input()\n  isInvalidDate: (Dayjs) => boolean;\n\n  @Input()\n  isCustomDate: (Dayjs) => string | boolean;\n\n  @Input()\n  isTooltipDate: (Dayjs) => string | boolean | null;\n\n  @Input()\n  showClearButton: boolean;\n\n  @Input()\n  customRangeDirection: boolean;\n\n  @Input()\n  ranges: DateRanges;\n\n  @Input()\n  opens: string;\n\n  @Input()\n  drops: string;\n\n  @Input()\n  firstMonthDayClass: string;\n\n  @Input()\n  lastMonthDayClass: string;\n\n  @Input()\n  emptyWeekRowClass: string;\n\n  @Input()\n  emptyWeekColumnClass: string;\n\n  @Input()\n  firstDayOfNextMonthClass: string;\n\n  @Input()\n  lastDayOfPreviousMonthClass: string;\n\n  @Input()\n  keepCalendarOpeningWithRange: boolean;\n\n  @Input()\n  showRangeLabelOnInput: boolean;\n\n  @Input()\n  showCancel = false;\n\n  @Input()\n  lockStartDate = false;\n\n  // timepicker variables\n  @Input()\n  timePicker = false;\n\n  @Input()\n  timePicker24Hour = false;\n\n  @Input()\n  timePickerIncrement = 1;\n\n  @Input()\n  timePickerSeconds = false;\n\n  @Input() closeOnAutoApply = true;\n  @Input()\n  private endKeyHolder: string;\n\n  public picker: DaterangepickerComponent;\n  private startKeyHolder: string;\n  private notForChangesProperty: Array<string> = ['locale', 'endKey', 'startKey'];\n  private onChangeFn = Function.prototype;\n  private onTouched = Function.prototype;\n  private validatorChange = Function.prototype;\n  private disabledHolder: boolean;\n  private valueHolder: TimePeriod | null;\n  private localeDiffer: KeyValueDiffer<string, any>;\n  private localeHolder: LocaleConfig = {};\n\n  constructor(\n    public viewContainerRef: ViewContainerRef,\n    public ref: ChangeDetectorRef,\n    private el: ElementRef,\n    private renderer: Renderer2,\n    private differs: KeyValueDiffers,\n    private localeHolderService: LocaleService,\n    private elementRef: ElementRef\n  ) {\n    this.endKey = 'endDate';\n    this.startKey = 'startDate';\n    this.drops = 'down';\n    this.opens = 'auto';\n    viewContainerRef.clear();\n    const componentRef = viewContainerRef.createComponent(DaterangepickerComponent);\n    this.picker = componentRef.instance as DaterangepickerComponent;\n    this.picker.inline = false; // set inline to false for all directive usage\n  }\n\n  @HostBinding('disabled') get disabled(): boolean {\n    return this.disabledHolder;\n  }\n\n  @Input() set startKey(value: string) {\n    if (value !== null) {\n      this.startKeyHolder = value;\n    } else {\n      this.startKeyHolder = 'startDate';\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  get locale(): LocaleConfig {\n    return this.localeHolder;\n  }\n\n  @Input() set locale(value: LocaleConfig) {\n    this.localeHolder = { ...this.localeHolderService.config, ...value };\n  }\n\n  @Input() set endKey(value: string) {\n    if (value !== null) {\n      this.endKeyHolder = value;\n    } else {\n      this.endKeyHolder = 'endDate';\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  get value(): TimePeriod | null {\n    return this.valueHolder || null;\n  }\n\n  set value(val: TimePeriod | null) {\n    this.valueHolder = val;\n    this.onChangeFn(val);\n    this.ref.markForCheck();\n  }\n\n  /**\n   * For click outside the calendar's container\n   *\n   * @param event event object\n   */\n  @HostListener('document:click', ['$event'])\n  outsideClick(event: Event): void {\n    if (!event.target) {\n      return;\n    }\n\n    if ((event.target as HTMLElement).classList.contains('ngx-daterangepicker-action')) {\n      return;\n    }\n\n    if (!this.elementRef.nativeElement.contains(event.target)) {\n      this.hide();\n    }\n  }\n\n  @HostListener('keyup.esc', ['$event'])\n  hide(e?: Event): void {\n    this.picker.hide(e);\n  }\n\n  @HostListener('blur')\n  onBlur(): void {\n    this.onTouched();\n  }\n\n  @HostListener('keyup', ['$event'])\n  inputChanged(e: KeyboardEvent): void {\n    if ((e.target as HTMLElement).tagName.toLowerCase() !== 'input') {\n      return;\n    }\n    if (!(e.target as HTMLInputElement).value.length) {\n      return;\n    }\n    const dateString = (e.target as HTMLInputElement).value.split(this.picker.locale.separator);\n    let start = null;\n    let end = null;\n    if (dateString.length === 2) {\n      start = dayjs(dateString[0], this.picker.locale.format);\n      end = dayjs(dateString[1], this.picker.locale.format);\n    }\n    if (this.singleDatePicker || start === null || end === null) {\n      start = dayjs((e.target as HTMLInputElement).value, this.picker.locale.format);\n      end = start;\n    }\n    if (!start.isValid() || !end.isValid()) {\n      return;\n    }\n    this.picker.setStartDate(start);\n    this.picker.setEndDate(end);\n    this.picker.updateView();\n  }\n\n  @HostListener('click', ['$event'])\n  open(event?: Event): void {\n    if (this.disabled) {\n      return;\n    }\n    this.picker.show(event);\n    setTimeout(() => {\n      this.setPosition();\n    });\n  }\n\n  // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\n  ngOnInit(): void {\n    this.picker.startDateChanged.asObservable().subscribe((itemChanged: StartDate) => {\n      this.startDateChanged.emit(itemChanged);\n    });\n    this.picker.endDateChanged.asObservable().subscribe((itemChanged: EndDate) => {\n      this.endDateChanged.emit(itemChanged);\n    });\n    this.picker.rangeClicked.asObservable().subscribe((range: DateRange) => {\n      this.rangeClicked.emit(range);\n    });\n    this.picker.datesUpdated.asObservable().subscribe((range: TimePeriod) => {\n      this.datesUpdated.emit(range);\n    });\n    this.picker.clearClicked.asObservable().subscribe(() => {\n      this.clearClicked.emit();\n    });\n    this.picker.choosedDate.asObservable().subscribe((change: ChosenDate) => {\n      if (change) {\n        const value = {\n          [this.startKeyHolder]: change.startDate,\n          [this.endKeyHolder]: change.endDate\n        };\n        this.value = value as TimePeriod;\n        this.onChange.emit(value as TimePeriod);\n        if (typeof change.chosenLabel === 'string') {\n          this.el.nativeElement.value = change.chosenLabel;\n        }\n      }\n    });\n    this.picker.firstMonthDayClass = this.firstMonthDayClass;\n    this.picker.lastMonthDayClass = this.lastMonthDayClass;\n    this.picker.emptyWeekRowClass = this.emptyWeekRowClass;\n    this.picker.emptyWeekColumnClass = this.emptyWeekColumnClass;\n    this.picker.firstDayOfNextMonthClass = this.firstDayOfNextMonthClass;\n    this.picker.lastDayOfPreviousMonthClass = this.lastDayOfPreviousMonthClass;\n    this.picker.drops = this.drops;\n    this.picker.opens = this.opens;\n    this.localeDiffer = this.differs.find(this.locale).create();\n    this.picker.closeOnAutoApply = this.closeOnAutoApply;\n  }\n\n  // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\n  ngOnChanges(changes: SimpleChanges): void {\n    for (const change in changes) {\n      if (Object.prototype.hasOwnProperty.call(changes, change)) {\n        if (this.notForChangesProperty.indexOf(change) === -1) {\n          this.picker[change] = changes[change].currentValue;\n        }\n      }\n    }\n  }\n\n  // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\n  ngDoCheck(): void {\n    if (this.localeDiffer) {\n      const changes = this.localeDiffer.diff(this.locale);\n      if (changes) {\n        this.picker.updateLocale(this.locale);\n      }\n    }\n  }\n\n  toggle(e?: Event): void {\n    if (this.picker.isShown) {\n      this.hide(e);\n    } else {\n      this.open(e);\n    }\n  }\n\n  clear(): void {\n    this.picker.clear();\n  }\n\n  writeValue(value: TimePeriod): void {\n    this.setValue(value);\n  }\n\n  registerOnChange(fn: () => TimePeriod | null): void {\n    this.onChangeFn = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(state: boolean): void {\n    this.disabledHolder = state;\n  }\n\n  /**\n   * Set position of the calendar\n   */\n  setPosition(): void {\n    let style;\n    let containerTop;\n    const container = this.picker.pickerContainer.nativeElement;\n    const element = this.el.nativeElement;\n    if (this.drops && this.drops === 'up') {\n      containerTop = element.offsetTop - container.clientHeight + 'px';\n    } else {\n      containerTop = 'auto';\n    }\n    if (this.opens === 'left') {\n      style = {\n        top: containerTop,\n        left: element.offsetLeft - container.clientWidth + element.clientWidth + 'px',\n        right: 'auto'\n      };\n    } else if (this.opens === 'center') {\n      style = {\n        top: containerTop,\n        left: element.offsetLeft + element.clientWidth / 2 - container.clientWidth / 2 + 'px',\n        right: 'auto'\n      };\n    } else if (this.opens === 'right') {\n      style = {\n        top: containerTop,\n        left: element.offsetLeft + 'px',\n        right: 'auto'\n      };\n    } else {\n      const position = element.offsetLeft + element.clientWidth / 2 - container.clientWidth / 2;\n      if (position < 0) {\n        style = {\n          top: containerTop,\n          left: element.offsetLeft + 'px',\n          right: 'auto'\n        };\n      } else {\n        style = {\n          top: containerTop,\n          left: position + 'px',\n          right: 'auto'\n        };\n      }\n    }\n    if (style) {\n      this.renderer.setStyle(container, 'top', style.top);\n      this.renderer.setStyle(container, 'left', style.left);\n      this.renderer.setStyle(container, 'right', style.right);\n    }\n  }\n\n  private setValue(val: TimePeriod) {\n    if (val) {\n      this.value = val;\n      if (val[this.startKeyHolder]) {\n        this.picker.setStartDate(val[this.startKeyHolder]);\n      }\n      if (val[this.endKeyHolder]) {\n        this.picker.setEndDate(val[this.endKeyHolder]);\n      }\n      this.picker.calculateChosenLabel();\n      if (this.picker.chosenLabel) {\n        this.el.nativeElement.value = this.picker.chosenLabel;\n      }\n    } else {\n      this.picker.clear();\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { DaterangepickerComponent } from './daterangepicker.component';\nimport { DaterangepickerDirective } from './daterangepicker.directive';\nimport { LocaleConfig, LOCALE_CONFIG } from './daterangepicker.config';\nimport { LocaleService } from './locale.service';\n\n@NgModule({\n  declarations: [DaterangepickerComponent, DaterangepickerDirective],\n  imports: [CommonModule, FormsModule, ReactiveFormsModule],\n  providers: [],\n  exports: [DaterangepickerComponent, DaterangepickerDirective]\n})\nexport class NgxDaterangepickerMd {\n  constructor() {}\n\n  static forRoot(config: LocaleConfig = {}): ModuleWithProviders<NgxDaterangepickerMd> {\n    return {\n      ngModule: NgxDaterangepickerMd,\n      providers: [\n        { provide: LOCALE_CONFIG, useValue: config },\n        { provide: LocaleService, useClass: LocaleService, deps: [LOCALE_CONFIG] }\n      ]\n    };\n  }\n}\n"],"names":["i1.LocaleService"],"mappings":"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"}