UNPKG

ardhrizk-ngx-daterangepicker-bootstrap

Version:

Date Range Picker - Forced to Angular 16 and Bootstrap 5

1 lines 156 kB
{"version":3,"file":"ngx-daterangepicker-bootstrap.mjs","sources":["../../../projects/ngx-daterangepicker-bootstrap/src/lib/ngx-daterangepicker-locale.config.ts","../../../projects/ngx-daterangepicker-bootstrap/src/lib/ngx-daterangepicker-locale.service.ts","../../../projects/ngx-daterangepicker-bootstrap/src/lib/ngx-daterangepicker-bootstrap.component.ts","../../../projects/ngx-daterangepicker-bootstrap/src/lib/ngx-daterangepicker-bootstrap.component.html","../../../projects/ngx-daterangepicker-bootstrap/src/lib/ngx-daterangepicker-bootstrap.directive.ts","../../../projects/ngx-daterangepicker-bootstrap/src/lib/ngx-daterangepicker-bootstrap.module.ts","../../../projects/ngx-daterangepicker-bootstrap/src/public-api.ts","../../../projects/ngx-daterangepicker-bootstrap/src/ngx-daterangepicker-bootstrap.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport dayjs from 'dayjs';\nimport localeData from 'dayjs/plugin/localeData';\n\ndayjs.extend(localeData);\n\nexport const LOCALE_CONFIG = new InjectionToken<LocaleConfig>('daterangepicker.config');\n\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  startDate?: string;\n  endDate?: string;\n}\n\n/**\n *  DefaultLocaleConfig\n */\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 {Inject, Injectable} from '@angular/core';\nimport {DefaultLocaleConfig, LOCALE_CONFIG, LocaleConfig} from \"./ngx-daterangepicker-locale.config\";\n\n@Injectable()\nexport class NgxDaterangepickerLocaleService {\n\n  constructor(@Inject(LOCALE_CONFIG) private _config: LocaleConfig) {\n  }\n\n  get config() {\n    if (!this._config) {\n      return DefaultLocaleConfig;\n    }\n    return {...DefaultLocaleConfig, ...this._config};\n  }\n\n}\n","import {\n  ChangeDetectorRef,\n  Component, ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnChanges,\n  OnInit,\n  Output, SimpleChanges,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from \"@angular/forms\";\nimport {LocaleConfig} from \"./ngx-daterangepicker-locale.config\";\nimport {NgxDaterangepickerLocaleService} from \"./ngx-daterangepicker-locale.service\";\nimport dayjs, {Dayjs} from \"dayjs\";\nimport localeData from \"dayjs/plugin/localeData\";\nimport LocalizedFormat from 'dayjs/plugin/localizedFormat';\nimport isoWeek from 'dayjs/plugin/isoWeek';\nimport week from 'dayjs/plugin/weekOfYear';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\ndayjs.extend(localeData);\ndayjs.extend(LocalizedFormat);\ndayjs.extend(isoWeek);\ndayjs.extend(week);\ndayjs.extend(customParseFormat);\n\nexport enum SideEnum {\n  left = 'left',\n  right = 'right'\n}\n\n@Component({\n  selector: 'ngx-daterangepicker-bootstrap',\n  styleUrls: ['./ngx-daterangepicker-bootstrap.component.scss'],\n  templateUrl: './ngx-daterangepicker-bootstrap.component.html',\n  host: {\n    '(click)': 'handleInternalClick($event)'\n  },\n  encapsulation: ViewEncapsulation.None,\n  providers: [{\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => NgxDaterangepickerBootstrapComponent),\n    multi: true\n  }]\n})\nexport class NgxDaterangepickerBootstrapComponent implements OnInit, OnChanges {\n\n  public $event: any;\n  public chosenLabel?: string;\n  public calendarVariables: { left: any, right: any } = {left: {}, right: {}};\n  public timepickerVariables: { left: any, right: any } = {left: {}, right: {}};\n  public applyBtn: { disabled: boolean } = {disabled: false};\n  public sideEnum = SideEnum; // used in template for compile time support of enum values.\n  public chosenRange?: string | null;\n  public rangesArray: Array<any> = [];\n  public isShown: Boolean = false;\n  public inline = true;\n  public showCalInRanges: Boolean = false;\n  private tooltiptext: any = [];  // for storing tooltiptext\n  private leftCalendar: any = {};\n  private rightCalendar: any = {};\n  private nowHoveredDate: null = null;\n  private pickingDate: Boolean = false;\n  private _old: { start: any, end: any } = {start: null, end: null};\n  private _minDate?: dayjs.Dayjs | null;\n  private _maxDate?: dayjs.Dayjs | null;\n  private _locale: LocaleConfig = {};\n  private _ranges: any = {};\n\n  @Input() startDate: Dayjs | undefined | null = dayjs().startOf('day');\n  @Input() endDate: Dayjs | undefined | null = dayjs().endOf('day');\n  @Input() dateLimit: number | null = null;\n  @Input() autoApply: Boolean = false;\n  @Input() singleDatePicker: Boolean = false;\n  @Input() showDropdowns: Boolean = false;\n  @Input() showWeekNumbers: Boolean = false;\n  @Input() showISOWeekNumbers: Boolean = false;\n  @Input() linkedCalendars: Boolean = false;\n  @Input() autoUpdateInput: Boolean = true;\n  @Input() alwaysShowCalendars: Boolean = false;\n  @Input() maxSpan: Boolean = false;\n  @Input() lockStartDate: Boolean = false;\n  @Input() timePicker: Boolean = false;\n  @Input() timePicker24Hour: Boolean = false;\n  @Input() timePickerIncrement = 1;\n  @Input() timePickerSeconds: Boolean = false;\n  @Input() showClearButton: Boolean = false;\n  @Input() firstMonthDayClass: string | null | undefined = null;\n  @Input() lastMonthDayClass: string | null | undefined = null;\n  @Input() emptyWeekRowClass: string | null | undefined = null;\n  @Input() emptyWeekColumnClass: string | null | undefined = null;\n  @Input() firstDayOfNextMonthClass: string | null | undefined = null;\n  @Input() lastDayOfPreviousMonthClass: string | null | undefined = null;\n  @Input() showCustomRangeLabel?: boolean;\n  @Input() showCancel = false;\n  @Input() keepCalendarOpeningWithRange = false;\n  @Input() showRangeLabelOnInput = false;\n  @Input() customRangeDirection = false;\n  @Input() drops?: string;\n  @Input() opens?: string;\n  @Input() closeOnAutoApply = true;\n\n  @Input() set minDate(value: dayjs.Dayjs | string) { // accessors\n    if (dayjs.isDayjs(value)) {\n      this._minDate = value;\n    } else {\n      this._minDate = dayjs(value);\n    }\n  }\n\n  @Input() set maxDate(value: dayjs.Dayjs | string) {\n    if (dayjs.isDayjs(value)) {\n      this._maxDate = value;\n    } else {\n      this._maxDate = dayjs(value);\n    }\n  }\n\n  @Input() set locale(value) {\n    this._locale = {...this._localeService.config, ...value};\n  }\n\n  @Input() set ranges(value) { // custom ranges\n    this._ranges = value;\n    this.renderRanges();\n  }\n\n  @Output() choosedDate: EventEmitter<Object>;\n  @Output() rangeClicked: EventEmitter<Object>;\n  @Output() datesUpdated: EventEmitter<Object>;\n  @Output() startDateChanged: EventEmitter<Object>;\n  @Output() endDateChanged: EventEmitter<Object>;\n  @Output() cancelClicked: EventEmitter<Object>;\n  @Output() clearClicked: EventEmitter<void>;\n  @ViewChild('pickerContainer', {static: true}) pickerContainer?: ElementRef;\n\n  getMinDate(): dayjs.Dayjs | null | undefined {\n    return this._minDate;\n  }\n\n  getMaxDate(): dayjs.Dayjs | null | undefined {\n    return this._maxDate;\n  }\n\n  get locale(): any {\n    return this._locale;\n  }\n\n  get ranges(): any {\n    return this._ranges;\n  }\n\n  constructor(private el: ElementRef,\n              private _ref: ChangeDetectorRef,\n              private _localeService: NgxDaterangepickerLocaleService) {\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  ngOnChanges(changes: SimpleChanges): void {\n    if ((changes['startDate'] || changes['endDate']) && this.inline) {\n      this.updateView();\n    }\n  }\n\n  ngOnInit() {\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      while (iterator > 0) {\n        daysOfWeek.push(daysOfWeek.shift());\n        iterator--;\n      }\n    }\n    this.locale.daysOfWeek = daysOfWeek;\n    if (this.inline) {\n      this.applyBtn.disabled = true;\n      this._old.start = this.startDate?.clone();\n      this._old.end = this.endDate?.clone();\n    }\n    if (this.startDate && this.timePicker) {\n      this.setStartDate(this.startDate);\n      this.renderTimePicker(SideEnum.left);\n    }\n    if (this.endDate && this.timePicker) {\n      this.setEndDate(this.endDate);\n      this.renderTimePicker(SideEnum.right);\n    }\n    this.updateMonthsInView();\n    this.renderCalendar(SideEnum.left);\n    this.renderCalendar(SideEnum.right);\n    this.renderRanges();\n  }\n\n  renderRanges() {\n    this.rangesArray = [];\n    let start: any, end: any;\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);\n          } else {\n            start = dayjs(this.ranges[range][0]);\n          }\n          if (typeof this.ranges[range][1] === 'string') {\n            end = dayjs(this.ranges[range][1], this.locale.format);\n          } else {\n            end = dayjs(this.ranges[range][1]);\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.getMinDate() && start.isBefore(this.getMinDate())) {\n            start = this.getMinDate()?.clone();\n          }\n          let maxDate = this.getMaxDate();\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 ((this.getMinDate() && end.isBefore(this.getMinDate(), this.timePicker ? 'minute' : 'day'))\n            || (maxDate && start.isAfter(maxDate, this.timePicker ? 'minute' : 'day'))) {\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\n  renderTimePicker(side: SideEnum) {\n    let selected: any, minDate: any;\n    const maxDate = this.getMaxDate();\n    if (side === SideEnum.left) {\n      selected = this.startDate?.clone();\n      minDate = this.getMinDate();\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    };\n    // generate hours\n    for (let i = start; i <= end; i++) {\n      let i_in_24 = i;\n      if (!this.timePicker24Hour) {\n        i_in_24 = selected.hour() >= 12 ? (i === 12 ? 12 : i + 12) : (i === 12 ? 0 : i);\n      }\n      const time = selected.clone().hour(i_in_24);\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      this.timepickerVariables[side].hours.push(i);\n      if (i_in_24 === selected.hour() && !disabled) {\n        this.timepickerVariables[side].selectedHour = i;\n      } else if (disabled) {\n        this.timepickerVariables[side].disabledHours.push(i);\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        let disabled = false;\n        if (minDate && time.isBefore(minDate)) {\n          disabled = true;\n        }\n        if (maxDate && time.isAfter(maxDate)) {\n          disabled = true;\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      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) { // side enum\n    const mainCalendar: any = (side === SideEnum.left) ? this.leftCalendar : this.rightCalendar;\n    const month = mainCalendar.month.month();\n    const year = mainCalendar.month.year();\n    const hour = mainCalendar.month.hour();\n    const minute = mainCalendar.month.minute();\n    const second = mainCalendar.month.second();\n    const daysInMonth = dayjs(new Date(year, month)).daysInMonth();\n    const firstDay = dayjs(new Date(year, month, 1));\n    const lastDay = dayjs(new Date(year, month, daysInMonth));\n    const lastMonth = dayjs(firstDay).subtract(1, 'month').month();\n    const lastYear = dayjs(firstDay).subtract(1, 'month').year();\n    const daysInLastMonth = dayjs(new Date(lastYear, lastMonth)).daysInMonth();\n    const dayOfWeek = firstDay.day();\n    // initialize a 6 rows x 7 columns array for the calendar\n    const calendar: any = [];\n    calendar.firstDay = firstDay;\n    calendar.lastDay = lastDay;\n    for (let i = 0; i < 6; i++) calendar[i] = [];\n    // populate the calendar with date objects\n    let startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\n    if (startDay > daysInLastMonth) startDay -= 7;\n    if (dayOfWeek === this.locale.firstDay) startDay = daysInLastMonth - 6;\n    let curDate = dayjs(new Date(lastYear, lastMonth, startDay, 12, minute, second));\n    for (let i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = dayjs(curDate).add(24, 'hour')) {\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      if (this.getMinDate() && calendar[row][col].format('YYYY-MM-DD') === this.getMinDate()?.format('YYYY-MM-DD') &&\n        calendar[row][col].isBefore(this.getMinDate()) && side === 'left') {\n        calendar[row][col] = this.getMinDate()?.clone();\n      }\n      if (this.getMaxDate() && calendar[row][col].format('YYYY-MM-DD') === this.getMaxDate()?.format('YYYY-MM-DD') &&\n        calendar[row][col].isAfter(this.getMaxDate()) && side === 'right') {\n        calendar[row][col] = this.getMaxDate()?.clone();\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.getMinDate() : this.startDate;\n    let maxDate = this.getMaxDate();\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)) maxDate = maxLimit;\n      if (this.customRangeDirection) {\n        minDate = this.getMinDate();\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    this.calendarVariables[side] = {\n      month: month,\n      year: year,\n      hour: hour,\n      minute: minute,\n      second: second,\n      daysInMonth: daysInMonth,\n      firstDay: firstDay,\n      lastDay: lastDay,\n      lastMonth: lastMonth,\n      lastYear: lastYear,\n      daysInLastMonth: daysInLastMonth,\n      dayOfWeek: dayOfWeek,\n      // other vars\n      calRows: Array.from(Array(6).keys()),\n      calCols: Array.from(Array(7).keys()),\n      classes: {},\n      minDate: minDate,\n      maxDate: maxDate,\n      calendar: calendar\n    };\n    if (this.showDropdowns) {\n      const currentMonth = calendar[1][1].month();\n      const currentYear = calendar[1][1].year();\n      const realCurrentYear = dayjs().year();\n      const maxYear = (maxDate && maxDate.year()) || (realCurrentYear + 5);\n      const minYear = (minDate && minDate.year()) || (realCurrentYear - 50);\n      const inMinYear = currentYear === minYear;\n      const inMaxYear = currentYear === maxYear;\n      const years = [];\n      for (let y = minYear; y <= maxYear; y++) years.push(y);\n      this.calendarVariables[side].dropdowns = {\n        currentMonth: currentMonth,\n        currentYear: currentYear,\n        maxYear: maxYear,\n        minYear: minYear,\n        inMinYear: inMinYear,\n        inMaxYear: inMaxYear,\n        monthArrays: Array.from(Array(12).keys()),\n        yearArrays: years\n      };\n    }\n    this._buildCells(calendar, side);\n  }\n\n  setStartDate(startDate: any) {\n    if (typeof startDate === 'string') this.startDate = dayjs(startDate, this.locale.format);\n    if (typeof startDate === 'object') {\n      this.pickingDate = true;\n      this.startDate = dayjs(startDate);\n    }\n    if (!this.timePicker) {\n      this.pickingDate = true;\n      this.startDate = this.startDate?.startOf('day');\n    }\n    if (this.timePicker && this.timePickerIncrement) {\n      this.startDate = this.startDate?.minute(\n        Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement\n      );\n    }\n    if (this.getMinDate() && this.startDate?.isBefore(this.getMinDate())) {\n      this.startDate = this.getMinDate()?.clone();\n      if (this.timePicker && this.timePickerIncrement) {\n        this.startDate = this.startDate?.minute(\n          Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement\n        );\n      }\n    }\n    if (this.getMaxDate() && this.startDate?.isAfter(this.getMaxDate())) {\n      this.startDate = this.getMaxDate()?.clone();\n      if (this.timePicker && this.timePickerIncrement) {\n        this.startDate = this.startDate?.minute(\n          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: any) {\n    if (typeof endDate === 'string') {\n      this.endDate = dayjs(endDate, this.locale.format);\n    }\n    if (typeof endDate === 'object') {\n      this.pickingDate = false;\n      this.endDate = dayjs(endDate);\n    }\n    if (!this.timePicker) {\n      this.pickingDate = false;\n      this.endDate = this.endDate?.add(1, 'd').startOf('day').subtract(1, 'second');\n    }\n    if (this.timePicker && this.timePickerIncrement) {\n      this.endDate?.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n    }\n    if (this.endDate?.isBefore(this.startDate)) {\n      this.endDate = this.startDate?.clone();\n    }\n    if (this.getMaxDate() && this.endDate?.isAfter(this.getMaxDate())) {\n      this.endDate = this.getMaxDate()?.clone();\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    if (!this.isShown) {\n      // this.updateElement();\n    }\n    this.endDateChanged.emit({endDate: this.endDate});\n    this.updateMonthsInView();\n  }\n\n  @Input()\n  isInvalidDate(date: any): any {\n    return false;\n  }\n\n  @Input()\n  isCustomDate(date: any): any {\n    return false;\n  }\n\n  @Input()\n  isTooltipDate(date: any): any {\n    return null;\n  }\n\n  updateView() {\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() {\n    if (this.endDate) {\n      // if both dates are visible already, do nothing\n      if (!this.singleDatePicker && this.leftCalendar.month && 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        &&\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() ||\n          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 (this.leftCalendar.month.format('YYYY-MM') !== this.startDate?.format('YYYY-MM') &&\n        this.rightCalendar.month.format('YYYY-MM') !== this.startDate?.format('YYYY-MM')) {\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.getMaxDate() && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > <Dayjs>this.getMaxDate()) {\n      this.rightCalendar.month = this.getMaxDate()?.clone().date(2);\n      this.leftCalendar.month = this.getMaxDate()?.clone().date(2).subtract(1, 'month');\n    }\n  }\n\n  /**\n   *  This is responsible for updating the calendars\n   */\n  updateCalendars() {\n    this.renderCalendar(SideEnum.left);\n    this.renderCalendar(SideEnum.right);\n    if (this.endDate === null) {\n      return;\n    }\n    this.calculateChosenLabel();\n  }\n\n  updateElement() {\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 (this.rangesArray.length && this.showRangeLabelOnInput && this.chosenRange &&\n          this.locale.customRangeLabel !== this.chosenRange) {\n          this.chosenLabel = this.chosenRange;\n        } else {\n          this.chosenLabel = this.startDate.format(format) +\n            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() {\n    this.isShown = false;\n  }\n\n  /**\n   * this should calculate the label\n   */\n  calculateChosenLabel() {\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 (this.startDate?.format(format) === this.ranges[range][0].format(format)\n              && this.endDate?.format(format) === this.ranges[range][1].format(format)) {\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 (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              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    this.updateElement();\n  }\n\n  clickApply(e?: any) {\n    if (this.inline) this.applyBtn.disabled = true;\n    if (!this.singleDatePicker && this.startDate && !this.endDate) {\n      this.endDate = this._getDateWithTime(this.startDate, SideEnum.right);\n      this.calculateChosenLabel();\n    }\n    if (this.startDate && this.endDate) {\n      // get if there are invalid date between range\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    this.datesUpdated.emit({startDate: this.startDate, endDate: this.endDate, label: this.chosenRange});\n    if (e || (this.closeOnAutoApply && !e)) {\n      this.hide();\n    }\n  }\n\n  clickCancel(e: any) {\n    this.startDate = this._old.start;\n    this.endDate = this._old.end;\n    if (this.inline) {\n      this.updateView();\n    }\n    this.cancelClicked.emit();\n    this.hide();\n    this.clearIncompleteDateSelection();\n  }\n\n  /**\n   * called when month is changed\n   * @param monthEvent get value in event.target.value\n   * @param side left or right\n   */\n  monthChanged(monthEvent: any, side: SideEnum) {\n    const year = this.calendarVariables[side].dropdowns.currentYear;\n    const month = parseInt(monthEvent.target.value, 10);\n    this.monthOrYearChanged(month, year, side);\n  }\n\n  /**\n   * called when year is changed\n   * @param yearEvent get value in event.target.value\n   * @param side left or right\n   */\n  yearChanged(yearEvent: any, side: SideEnum) {\n    const month = this.calendarVariables[side].dropdowns.currentMonth;\n    const year = parseInt(yearEvent.target.value, 10);\n    this.monthOrYearChanged(month, year, side);\n  }\n\n  /**\n   * called when time is changed\n   * @param timeEvent  an event\n   * @param side left or right\n   */\n  timeChanged(timeEvent: any, side: SideEnum) {\n    let hour = parseInt(this.timepickerVariables[side].selectedHour, 10);\n    const minute = parseInt(this.timepickerVariables[side].selectedMinute, 10);\n    const second = this.timePickerSeconds ? parseInt(this.timepickerVariables[side].selectedSecond, 10) : 0;\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    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        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    // update the calendars so all clickable dates reflect the new time component\n    this.updateCalendars();\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    if (this.autoApply) {\n      this.clickApply();\n    }\n  }\n\n  /**\n   *  call when month or year changed\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) {\n    const isLeft = side === SideEnum.left;\n    if (!isLeft) {\n      if (year < this.startDate!.year() || (year === this.startDate!.year() && month < this.startDate!.month())) {\n        month = this.startDate!.month();\n        year = this.startDate!.year();\n      }\n    }\n    if (this.getMinDate()) {\n      if (year < this.getMinDate()!.year() || (year === this.getMinDate()!.year() && month < this.getMinDate()!.month())) {\n        month = this.getMinDate()!.month();\n        year = this.getMinDate()!.year();\n      }\n    }\n    if (this.getMaxDate()) {\n      if (year > this.getMaxDate()!.year() || (year === this.getMaxDate()!.year() && month > this.getMaxDate()!.month())) {\n        month = this.getMaxDate()!.month();\n        year = this.getMaxDate()!.year();\n      }\n    }\n    this.calendarVariables[side].dropdowns.currentYear = year;\n    this.calendarVariables[side].dropdowns.currentMonth = month;\n    if (isLeft) {\n      this.leftCalendar.month = this.leftCalendar.month.month(month).year(year);\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(month).year(year);\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   * @param side left or right calendar\n   */\n  clickPrev(side: SideEnum) {\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   * @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   * @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: any, side: SideEnum, row: number, col: number) {\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: any = side === SideEnum.left ? this.tooltiptext[leftCalDate] : this.tooltiptext[rightCalDate];\n    if (tooltip.length > 0) {\n      e.target.setAttribute('title', tooltip);\n    }\n  }\n\n  /**\n   * When selecting a date\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: any, side: SideEnum, row: number, col: number) {\n    if (e.target.tagName === 'TD') {\n      if (!e.target.classList.contains('available')) return;\n    } else if (e.target.tagName === 'SPAN') {\n      if (!e.target.parentElement.classList.contains('available')) return;\n    }\n    if (this.rangesArray.length) {\n      this.chosenRange = this.locale.customRangeLabel;\n    }\n    let date = side === SideEnum.left ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n    if ((this.endDate || (date.isBefore(this.startDate, 'day') && !this.customRangeDirection)) && !this.lockStartDate) { // picking start\n      this.applyBtn.disabled = true;\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) {\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 { // picking end\n      this.applyBtn.disabled = false;\n      if (this.timePicker) {\n        date = this._getDateWithTime(date, SideEnum.right);\n      }\n      if (date.isBefore(this.startDate, 'day') === true && this.customRangeDirection) {\n        this.setEndDate(this.startDate);\n        this.setStartDate(date.clone());\n      } else {\n        this.setEndDate(date.clone());\n      }\n      if (this.autoApply) {\n        this.calculateChosenLabel();\n      }\n    }\n    if (this.singleDatePicker) {\n      this.applyBtn.disabled = false;\n      this.setEndDate(this.startDate);\n      this.updateElement();\n      if (this.autoApply) {\n        this.clickApply();\n      }\n    }\n    this.updateView();\n    if (this.autoApply && this.startDate && this.endDate) {\n      this.clickApply();\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   * @param e: Event\n   * @param label\n   */\n  clickRange(e: any, label: any) {\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      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      if (!this.timePicker) {\n        this.startDate = this.startDate?.startOf('day');\n        this.endDate = this.endDate?.endOf('day');\n      }\n      if (!this.alwaysShowCalendars) {\n        this.isShown = false; // hide calendars\n      }\n      this.rangeClicked.emit({label: label, dates: dates});\n      if (!this.keepCalendarOpeningWithRange || this.autoApply) {\n        this.clickApply();\n      } else {\n        if (!this.alwaysShowCalendars) {\n          return this.clickApply();\n        }\n        if (this.getMaxDate() && this.getMaxDate()?.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 next year\n          const nextMonth = 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  show(e?: any) {\n    if (this.isShown) return;\n    this._old.start = this.startDate?.clone();\n    this._old.end = this.endDate?.clone();\n    this.isShown = true;\n    this.applyBtn.disabled = true;\n    this.updateView();\n  }\n\n  hide(e?: any) {\n    if (!this.isShown) return;\n    // incomplete date selection, revert to last values\n    if (!this.endDate) {\n      if (this._old.start) this.startDate = this._old.start.clone();\n      if (this._old.end) this.endDate = this._old.end.clone();\n      this.clearIncompleteDateSelection();\n    }\n    // if a new date range was selected, invoke the user callback function\n    if (!this.startDate?.isSame(this._old.start) || !this.endDate?.isSame(this._old.end)) {\n      // this.callback(this.startDate, this.endDate, this.chosenLabel);\n    }\n    // if picker is attached to a text input, update it\n    this.updateElement();\n    this.isShown = false;\n    this.applyBtn.disabled = true;\n    this._ref.detectChanges();\n  }\n\n  clearIncompleteDateSelection() {\n    this.nowHoveredDate = null;\n    this.pickingDate = false;\n  }\n\n  /**\n   * handle click on all element in the component, useful for outside of click\n   * @param e event\n   */\n  handleInternalClick(e: any) {\n    e.stopPropagation();\n  }\n\n  /**\n   * update the locale options\n   * @param locale\n   */\n  updateLocale(locale: any) {\n    for (const key in locale) {\n      if (locale.hasOwnProperty(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() {\n    this.startDate = dayjs().startOf('day');\n    this.endDate = dayjs().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: any) {\n    if (range === this.locale.customRangeLabel) {\n      return false;\n    }\n    const rangeMarkers = this.ranges[range];\n    const areBothBefore = rangeMarkers.every((date: any) => {\n      if (!this.getMinDate()) {\n        return false;\n      }\n      return date.isBefore(this.getMinDate());\n    });\n    const areBothAfter = rangeMarkers.every((date: any) => {\n      if (!this.getMaxDate()) {\n        return false;\n      }\n      return date.isAfter(this.getMaxDate());\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: any, side: SideEnum): dayjs.Dayjs {\n    let hour = parseInt(this.timepickerVariables[side].selectedHour, 10);\n    if (!this.timePicker24Hour) {\n      const ampm = this.timepickerVariables[side].ampmModel;\n      if (ampm === 'PM' && hour < 12) hour += 12;\n      if (ampm === 'AM' && hour === 12) hour = 0;\n    }\n    const minute = parseInt(this.timepickerVariables[side].selectedMinute, 10);\n    const second = this.timePickerSeconds ? parseInt(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._localeService.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: any, side: SideEnum) {\n    for (let row = 0; row < 6; row++) {\n      this.calendarVariables[side].classes[row] = {};\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(new Date(), 'day')) classes.push('today');\n        // highlight weekends\n        if (calendar[row][col].isoWeekday() > 5) classes.push('weekend');\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          // mark the last day of the previous month in this calendar\n          if (\n            this.lastDayOfPreviousMonthClass && (calendar[row][col].month() < calendar[1][1].month() ||\n              calendar[1][1].month() === 0) && calendar[row][col].date() === this.calendarVariables[side].daysInLastMonth\n          ) {\n            classes.push(this.lastDayOfPreviousMonthClass);\n          }\n          // mark the first day of the next month in this calendar\n          if (\n            this.firstDayOfNextMonthClass && (calendar[row][col].month() > calendar[1][1].month() ||\n              calendar[row][col].month() === 0) && 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 && 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 && calendar[row][col].month() === calendar[1][1].month() &&\n          calendar[row][col].date() === calendar.lastDay.date()) {\n          classes.push(this.lastMonthDayClass);\n        }\n        // don't allow selection of dates before the minimum date\n        if (this.getMinDate() && calendar[row][col].isBefore(this.getMinDate(), '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          (\n            (this.nowHoveredDate != null && this.pickingDate) || this.endDate != null\n          ) &&\n          (\n            calendar[row][col] > <Dayjs>this.startDate &&\n            (\n              calendar[row][col] < <Dayjs>this.endDate || (calendar[row][col] < <any>this.nowHoveredDate && this.pickingDate)\n            )\n          ) &&\n          (\n            !classes.find(el => el === 'off')\n          )\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 = '', disabled = false;\n        for (let i = 0; i < classes.length; i++) {\n          cname += classes[i] + ' ';\n          if (classes[i] === '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}\n","<div class='card daterangepicker'\n     #pickerContainer\n     [class]=\"drops + ' ' + opens\"\n     [ngClass]=\"{\n    'show-ranges': rangesArray.length,\n    'shown': isShown || inline,\n    'hidden': !isShown && !inline,\n    'double': !singleDatePicker && showCalInRanges,\n    'inline': inline,\n    'ltr': locale.direction === 'ltr',\n    'rtl': this.locale.direction === 'rtl'\n    }\">\n\n  <div class=\"card-body p-2\">\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}\">{{range}}</button>\n          </li>\n        </ul>\n      </div>\n    </ng-container>\n    <div class='calendar' [ngClass]='{right: singleDatePicker, left: !singleDatePicker}'\n         *ngIf='showCalInRanges'>\n      <table class='table-condensed calendar-table' *ngIf='calendarVariables'>\n        <thead>\n        <tr>\n          <th *ngIf='showWeekNumbers || showISOWeekNumbers'></th>\n          <ng-container\n            *ngIf='!calendarVariables.left.minDate || calendarVariables.left.minDate.isBefore(calendarVariables.left.calendar.firstDay) && (!this.linkedCalendars || true)'>\n            <th (click)='clickPrev(sideEnum.left)' class='prev available'>\n            </th>\n          </ng-container>\n          <ng-container\n            *ngIf='!(!calendarVariables.left.minDate || calendarVariables.left.minDate.isBefore(calendarVariables.left.calendar.firstDay) && (!this.linkedCalendars || true))'>\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]='(calendarVariables.left.dropdowns.inMinYear && m < calendarVariables.left.minDate.month()) || (calendarVariables.left.dropdowns.inMaxYear && m > calendarVariables.left.maxDate.month())'\n                    *ngFor='let m of calendarVariables.left.dropdowns.monthArrays' [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 *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()]}}  {{ calendarVariables.left.calendar[1][1].format(\" YYYY\")}}\n            </ng-container>\n          </th>\n          <ng-container\n            *ngIf='(!calendarVariables.left.maxDate || calendarVariables.left.maxDate.isAfter(calendarVariables.left.calendar.lastDay)) && (!linkedCalendars || singleDatePicker )'>\n            <th class='next available' (click)='clickNext(sideEnum.left)'>\n            </th>\n          </ng-container>\n          <ng-container\n            *ngIf='!((!calendarVariables.left.maxDate || calendarVariables.left.maxDate.isAfter(calendarVariables.left.calendar.lastDay)) && (!linkedCalendars || singleDatePicker ))'>\n            <th></th>\n          </ng-container>\n        </tr>\n        <tr class='week-days'>\n          <th *ngIf='showWeekNumbers || showISOWeekNumbers' class='week'><span>{{this.locale.weekLabel}}</span></th>\n          <th *ngFor='let dayofweek of locale.daysOfWeek'><span>{{dayofweek}}</span></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 *ngFor='let col of calendarVariables.left.calCols' [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 class='calendar-time' *ngIf='timePicker'>\n        <div class='select'>\n          <select class='hourselect select-item' [disabled]='!startDate'\n                  [(ngModel)]='timepickerVariables.left.selectedHour'\n                  (ngModelChange)='timeChanged($event, sideEnum.left)'>\n            <option *ngFor='let i of timepickerVariables.left.hours'\n                    [value]='i'\n                    [disabled]='timepickerVariables.left.disabledHours.indexOf(i) > -1'>{{i}}</option>\n          </select>\n        </div>\n        :\n        <div class='select'>\n          <select class='select-item minuteselect' [disabled]='!startDate'\n                  [(ngModel)]='timepickerVariables.left.selectedMinute'\n                  (ngModelChange)='timeChanged($event, sideEnum.left)'>\n            <option *ngFor='let i of timepickerVariables.left.minutes; let index = index;'\n                    [value]='i'\n                    [disabled]='timepickerVariables.left.disabledMinutes.indexOf(i) > -1'>{{timepickerVariables.left.minutesLabel[index]}}</option>\n          </select>\n          <span class='select-highlight'></span>\n          <span class='select-bar'></span>\n        </div>\n        :\n        <div class='select'>\n          <select class='select-item secondselect' *ngIf='timePickerSeconds' [disabled]='!startDate'\n                  [(ngModel)]='timepickerVariables.left.selectedSecond'\n                  (ngModelChange)='timeChanged($event, sideEnum.left)'>\n            <option *ngFor='let i of timepickerVariables.left.seconds; let index = index;'\n                    [value]='i'\n                    [disabled]='timepickerVariables.left.disabledSeconds.indexOf(i) > -1'>{{timepickerVariables.left.secondsLabel[index]}}</option>\n          </select>\n          <span class='select-highlight'></span>\n          <span class='select-bar'></span>\n        </div>\n        <div class='select' *ngIf='!timePicker24Hour'>\n          <select class='select-item ampmselect'\n                  [(ngModel)]='timepickerVariables.left.ampmModel' (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      <table class='table-condensed calendar-table' *ngIf='calendarVariables'>\n        <thead>\n        <tr>\n          <th *ngIf='showWeekNumbers || showISOWeekNumbers'></th>\n          <ng-container\n            *ngIf='(!calendarVariables.right.minDate || calendarVariables.right.minDate.isBefore(calendarVariables.right.calendar.firstDay)) && (!this.linkedCalendars)'>\n            <th (click)='clickPrev(sideEnum.right)' class='prev available'>\n            </th>\n          </ng-container>\n          <ng-container\n            *ngIf='!((!calendarVariables.right.minDate || calendarVariables.right.minDate.isBefore(calendarVariables.right.calendar.firstDay)) && (!this.linkedCalendars))'>\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]='(calendarVariables.right.dropdowns.inMinYear && calendarVariables.right.minDate && m < calendarVariables.right.minDate.month()) || (calendarVariables.right.dropdowns.inMaxYear && calendarVariables.right.maxDate && m > calendarVariables.right.maxDate.month())'\n                    *ngFor='let m of calendarVariables.right.dropdowns.monthArrays' [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 *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()]}}  {{ calendarVariables.right.calendar[1][1].format(\" YYYY\")}}\n            </ng-container>\n          </th>\n          <ng-container\n            *ngIf='!calendarVariables.right.maxDate || calendarVariables.right.maxDate.isAfter(calendarVariables.right.calendar.lastDay) && (!linkedCalendars || singleDatePicker || true)'>\n            <th class='next available' (click)='clickNext(sideEnum.right)'>\n            </th>\n          </ng-container>\n          <ng-container\n            *ngIf='!(!calendarVariables.right.maxDate || calendarVariables.right.maxDate.isAfter(calendarVariables.right.calendar.lastDay) && (!linkedCalendars || singleDatePicker || true))'>\n            <th></th>\n          </ng-container>\n        </tr>\n\n        <tr class='week-days'>\n          <th *ngIf='showWeekNumbers || showISOWeekNumbers' class='week'><span>{{this.locale.weekLabel}}</span></th>\n          <th *ngFor='let dayofweek of locale.daysOfWeek'><span>{{dayofweek}}</span></th>\n        </tr>\n        </thead>\n        <tbody>\n        <tr *ngFor='let row of calendarVariables.right.calRows'\n            [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 *ngFor='let col of calendarVariables.right.calCols' [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 class='calendar-time' *ngIf='timePicker'>\n        <div class='select'>\n          <select class='select-item hourselect' [disabled]='!startDate'\n                  [(ngModel)]='timepickerVariables.right.selectedHour'\n                  (ngModelChange)='timeChanged($event, sideEnum.right)'>\n            <option *ngFor='let i of timepickerVariables.right.hours'\n                    [value]='i'\n                    [disabled]='timepickerVariables.right.disabledHours.indexOf(i) > -1'>{{i}}</option>\n          </select>\n          <span class='select-highlight'></span>\n          <span class='select-bar'></span>\n        </div>\n        :\n        <div class='select'>\n          <select class='select-item minuteselect' [disabled]='!startDate'\n                  [(ngModel)]='timepickerVariables.right.selectedMinute'\n                  (ngModelChange)='timeChanged($event, sideEnum.right)'>\n            <option *ngFor='let i of timepickerVariables.right.minutes; let index = index;'\n                    [value]='i'\n                    [disabled]='timepickerVariables.right.disabledMinutes.indexOf(i) > -1'>{{timepickerVariables.right.minutesLabel[index]}}</option>\n          </select>\n          <span class='select-highlight'></span>\n          <span class='select-bar'></span>\n        </div>\n        :\n        <div class='select'>\n          <select *ngIf='timePickerSeconds' class='select-item secondselect' [disabled]='!startDate'\n                  [(ngModel)]='timepickerVariables.right.selectedSecond'\n                  (ngModelChange)='timeChanged($event, sideEnum.right)'>\n            <option *ngFor='let i of timepickerVariables.right.seconds; let index = index;'\n                    [value]='i'\n                    [disabled]='timepickerVariables.right.disabledSeconds.indexOf(i) > -1'>{{timepickerVariables.right.secondsLabel[index]}}</option>\n          </select>\n          <span class='select-highlight'></span>\n          <span class='select-bar'></span>\n        </div>\n        <div class='select' *ngIf='!timePicker24Hour'>\n          <select 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>\n  <div class=\"card-footer\" *ngIf='!autoApply && ( !rangesArray.length || (showCalInRanges && !singleDatePicker))'>\n    <span style=\"display: inline-block; padding: 7px;\">{{chosenLabel}}</span>\n    <button class='btn btn-primary float-end'\n            [disabled]='applyBtn.disabled'\n            type='button'\n            (click)='clickApply($event)'>\n      {{locale.applyLabel}}\n    </button>\n    <button class='btn btn-secondary me-2 float-end'\n            *ngIf='showCancel'\n            type='button'\n            (click)='clickCancel($event)'>\n      {{locale.cancelLabel}}\n    </button>\n    <button *ngIf='showClearButton'\n            class='btn btn-outline-dark me-2 float-end'\n            type='button' (click)='clear()'\n            [title]='locale.clearLabel'>\n      {{locale.clearLabel}}\n    </button>\n  </div>\n</div>\n","import {\n  AfterViewChecked,\n  AfterViewInit,\n  ApplicationRef,\n  ChangeDetectorRef,\n  ComponentRef,\n  Directive,\n  ElementRef,\n  EmbeddedViewRef,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  HostListener,\n  Injector,\n  Input,\n  KeyValueDiffer,\n  KeyValueDiffers,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  reflectComponentType,\n  Renderer2,\n  SimpleChanges,\n  ViewContainerRef\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from \"@angular/forms\";\nimport dayjs from 'dayjs';\nimport {NgxDaterangepickerBootstrapComponent} from \"./ngx-daterangepicker-bootstrap.component\";\nimport {LocaleConfig} from \"./ngx-daterangepicker-locale.config\";\nimport {NgxDaterangepickerLocaleService} from \"./ngx-daterangepicker-locale.service\";\n\n@Directive({\n  selector: 'input[ngxDaterangepickerBootstrap]',\n  host: {\n    '(click)': 'open()',\n    '(keyup.esc)': 'hide()',\n    '(blur)': 'onBlur()',\n    '(keyup)': 'inputChanged($event)'\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => NgxDaterangepickerBootstrapDirective), multi: true\n    }\n  ]\n})\nexport class NgxDaterangepickerBootstrapDirective implements OnInit, OnDestroy, OnChanges, AfterViewInit, AfterViewChecked {\n\n  public $event: any;\n  public daterangepicker: NgxDaterangepickerBootstrapComponent | any;\n  private daterangepickerRef: ComponentRef<any>;\n  private readonly daterangepickerElement: HTMLElement;\n  private localeDiffer?: KeyValueDiffer<string, any>;\n  private firstMonthDayClass?: string;\n  private _onChange = Function.prototype;\n  private _onTouched = Function.prototype;\n  private _disabled?: boolean;\n  private _value: any;\n  private _startKey!: string;\n  private _endKey!: string;\n  private _locale: LocaleConfig = {};\n  private _resizeObserver?: ResizeObserver;\n\n  @Input() minDate?: dayjs.Dayjs;\n  @Input() maxDate?: dayjs.Dayjs;\n  @Input() autoApply?: boolean;\n  @Input() alwaysShowCalendars?: boolean;\n  @Input() showCustomRangeLabel?: boolean;\n  @Input() linkedCalendars?: boolean;\n  @Input() dateLimit: number | null = null;\n  @Input() singleDatePicker?: boolean;\n  @Input() showWeekNumbers?: boolean;\n  @Input() showISOWeekNumbers?: boolean;\n  @Input() showDropdowns?: boolean;\n  @Input() isInvalidDate?: Function;\n  @Input() isCustomDate?: Function;\n  @Input() isTooltipDate?: Function;\n  @Input() showClearButton?: boolean;\n  @Input() customRangeDirection?: boolean;\n  @Input() ranges: any;\n  @Input() opens: string;\n  @Input() drops: string;\n  @Input() lastMonthDayClass?: string;\n  @Input() emptyWeekRowClass?: string;\n  @Input() emptyWeekColumnClass?: string;\n  @Input() firstDayOfNextMonthClass?: string;\n  @Input() lastDayOfPreviousMonthClass?: string;\n  @Input() keepCalendarOpeningWithRange?: boolean;\n  @Input() showRangeLabelOnInput?: boolean;\n  @Input() showCancel: Boolean = false;\n  @Input() lockStartDate: Boolean = false;\n  @Input() closeOnAutoApply = true;\n  @Input() timePicker: Boolean = false;\n  @Input() timePicker24Hour: Boolean = false;\n  @Input() timePickerIncrement: Number = 1;\n  @Input() timePickerSeconds: Boolean = false;\n  @Input() formlyCustomField: Boolean = false; // if you use ngx-formly and create custom field this library\n\n  @Input() set startKey(value: any) {\n    if (value !== null) {\n      this._startKey = value;\n    } else {\n      this._startKey = 'startDate';\n    }\n  }\n\n  @Input() set endKey(value: any) {\n    if (value !== null) {\n      this._endKey = value;\n    } else {\n      this._endKey = 'endDate';\n    }\n  }\n\n  @Input() set locale(value) {\n    this._locale = {...this._localeService.config, ...value};\n  }\n\n  @HostBinding('disabled') get disabled() {\n    return this._disabled;\n  }\n\n  get locale(): any {\n    return this._locale;\n  }\n\n  @Output() change: EventEmitter<Object> = new EventEmitter();\n  @Output() rangeClicked: EventEmitter<Object> = new EventEmitter();\n  @Output() datesUpdated: EventEmitter<Object> = new EventEmitter();\n  @Output() startDateChanged: EventEmitter<Object> = new EventEmitter();\n  @Output() endDateChanged: EventEmitter<Object> = new EventEmitter();\n  @Output() clearClicked: EventEmitter<void> = new EventEmitter();\n\n  notForChangesProperty: Array<string> = [\n    'locale',\n    'endKey',\n    'startKey'\n  ];\n\n  get value() {\n    return this._value || null;\n  }\n\n  set value(val) {\n    this._value = val;\n    this._onChange(val);\n    this._changeDetectorRef.markForCheck();\n  }\n\n  constructor(private viewContainerRef: ViewContainerRef,\n              private injector: Injector,\n              private applicationRef: ApplicationRef,\n              private differs: KeyValueDiffers,\n              private elementRef: ElementRef,\n              private _changeDetectorRef: ChangeDetectorRef,\n              private _el: ElementRef,\n              private _renderer: Renderer2,\n              private _localeService: NgxDaterangepickerLocaleService) {\n    this.endKey = 'endDate';\n    this.startKey = 'startDate';\n    this.drops = 'down';\n    this.opens = 'right';\n    viewContainerRef.clear();\n    this.daterangepickerRef = this.viewContainerRef.createComponent(NgxDaterangepickerBootstrapComponent, {injector: this.injector});\n    this.daterangepickerElement = (this.daterangepickerRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n    CSS.supports('display', 'contents') // unwrap or hide daterangepickerElement from DOM body, to fix clickOutside\n      ? this.daterangepickerElement.classList.add('unwrap', 'on')\n      : this.daterangepickerElement.classList.add('unwrap', 'off');\n    document.body.appendChild(this.daterangepickerElement); // add daterangepickerElement to DOM body, to fix position top left issues\n    this.daterangepicker = (<NgxDaterangepickerBootstrapComponent>this.daterangepickerRef.instance);\n    this.daterangepicker.inline = false; // set inline to false for all directive usage\n  }\n\n  ngOnInit() {\n    this.daterangepicker.rangeClicked.asObservable().subscribe((range: any) => {\n      this.rangeClicked.emit(range);\n    });\n    this.daterangepicker.datesUpdated.asObservable().subscribe((range: any) => {\n      this.datesUpdated.emit(range);\n    });\n    this.daterangepicker.startDateChanged.asObservable().subscribe((itemChanged: any) => {\n      this.startDateChanged.emit(itemChanged);\n    });\n    this.daterangepicker.endDateChanged.asObservable().subscribe((itemChanged: any) => {\n      this.endDateChanged.emit(itemChanged);\n    });\n    this.daterangepicker.clearClicked.asObservable().subscribe(() => {\n      this.clearClicked.emit();\n    });\n    this.daterangepicker.choosedDate.asObservable().subscribe((change: any) => {\n      if (change) {\n        const value = {} as any;\n        value[this._startKey] = change.startDate;\n        value[this._endKey] = change.endDate;\n        this.value = value;\n        this.change.emit(value);\n        if (typeof change.chosenLabel === 'string') {\n          this._el.nativeElement.value = change.chosenLabel;\n        }\n      }\n    });\n    this.pickerResizeObserver();\n    this.daterangepicker.firstMonthDayClass = this.firstMonthDayClass;\n    this.daterangepicker.lastMonthDayClass = this.lastMonthDayClass;\n    this.daterangepicker.emptyWeekRowClass = this.emptyWeekRowClass;\n    this.daterangepicker.emptyWeekColumnClass = this.emptyWeekColumnClass;\n    this.daterangepicker.firstDayOfNextMonthClass = this.firstDayOfNextMonthClass;\n    this.daterangepicker.lastDayOfPreviousMonthClass = this.lastDayOfPreviousMonthClass;\n    this.daterangepicker.drops = this.drops;\n    this.daterangepicker.opens = this.opens;\n    this.localeDiffer = this.differs.find(this.locale).create();\n    this.daterangepicker.closeOnAutoApply = this.closeOnAutoApply;\n    if (this.localeDiffer) {\n      const changes = this.localeDiffer.diff(this.locale);\n      if (changes) {\n        this.daterangepicker.updateLocale(this.locale);\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._resizeObserver?.unobserve(this.daterangepicker.pickerContainer.nativeElement);\n    const reflectComponent = reflectComponentType(NgxDaterangepickerBootstrapComponent);\n    const selector = document.querySelector(reflectComponent!.selector);\n    if (selector !== null) document.body.removeChild(selector);\n    this.applicationRef.detachView(this.daterangepickerRef.hostView);\n    this.daterangepickerRef.destroy();\n  }\n\n  ngAfterViewInit(): void {\n    if (this.formlyCustomField) this.writeValue(this.locale); // If you use ngx-formly custom field, remove [(ngModel)]\n    // from the input and set [formlyCustomField]='true' instead, to avoid Expression has changed after it was checked.\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    for (const change in changes) {\n      if (changes.hasOwnProperty(change)) {\n        if (this.notForChangesProperty.indexOf(change) === -1) {\n          this.daterangepicker[change] = changes[change].currentValue;\n        }\n      }\n    }\n  }\n\n  onBlur() {\n    this._onTouched();\n  }\n\n  open(event?: any) {\n    if (this.disabled) return;\n    this.daterangepicker.show(event);\n    if (this.daterangepicker.isShown) this.setPosition();\n  }\n\n  hide(e?: any) {\n    this.daterangepicker.hide(e);\n  }\n\n  toggle(e?: any) {\n    this.daterangepicker.isShown ? this.hide(e) : this.open(e);\n  }\n\n  clear() {\n    this.daterangepicker.clear();\n  }\n\n  writeValue(value: any) {\n    this.setValue(value);\n  }\n\n  registerOnChange(fn: any) {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: any) {\n    this._onTouched = fn;\n  }\n\n  setDisabledState(state: boolean): void {\n    this._disabled = state;\n  }\n\n  private setValue(val: any) {\n    if (val) {\n      this.value = val;\n      if (val[this._startKey]) {\n        this.daterangepicker.setStartDate(val[this._startKey]);\n      }\n      if (val[this._endKey]) {\n        this.daterangepicker.setEndDate(val[this._endKey]);\n      }\n      this.daterangepicker.calculateChosenLabel();\n      if (this.daterangepicker.chosenLabel) {\n        this._el.nativeElement.value = this.daterangepicker.chosenLabel;\n      }\n    } else {\n      this.daterangepicker.clear();\n    }\n  }\n\n  ngAfterViewChecked() {\n    if (this.daterangepicker.isShown) this.setPosition();\n  }\n\n  @HostListener('window:resize', ['$event'])\n  onWindowResize() {\n    if (this.daterangepicker.isShown) this.setPosition();\n  }\n\n  pickerResizeObserver() {\n    this._resizeObserver = new ResizeObserver(() => {\n      // if (this.daterangepicker.isShown) this.setPosition();\n    });\n    this._resizeObserver.observe(this.daterangepicker.pickerContainer.nativeElement);\n  }\n\n  /**\n   * Set position of the calendar, this works as expected only if you add daterangepickerElement to DOM body\n   */\n  setPosition() {\n    const pickerContainer = this.daterangepicker.pickerContainer.nativeElement;\n    const inputOffset = this.getOffset(this._el.nativeElement);\n    let containerTop;\n    let containerBottom;\n    if (this.drops && this.drops === 'down') {\n      containerTop = inputOffset.top + inputOffset.height + 'px';\n      containerBottom = 'auto'\n    }\n    if (this.drops && this.drops === 'up') {\n      containerTop = 'auto'\n      containerBottom = window.innerHeight - inputOffset.top + 'px';\n    }\n    let style;\n    if (this.opens === 'right') {\n      style = {\n        top: containerTop,\n        right: 'auto',\n        bottom: containerBottom,\n        left: inputOffset.left + 'px',\n      };\n    }\n    if (this.opens === 'center') {\n      style = {\n        top: containerTop,\n        right: 'auto',\n        bottom: containerBottom,\n        left: inputOffset.left + (inputOffset.width - pickerContainer.offsetWidth) / 2 + 'px',\n      };\n    }\n    if (this.opens === 'left') {\n      style = {\n        top: containerTop,\n        right: window.innerWidth - (inputOffset.left + inputOffset.width) + 'px',\n        bottom: containerBottom,\n        left: 'auto',\n      };\n    }\n    if (style) {\n      /* inset: top right bottom left */\n      this._renderer.setStyle(pickerContainer, 'top', style.top);\n      this._renderer.setStyle(pickerContainer, 'right', style.right);\n      this._renderer.setStyle(pickerContainer, 'bottom', style.bottom);\n      this._renderer.setStyle(pickerContainer, 'left', style.left);\n    }\n  }\n\n  getOffset(element: any) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + window.scrollY,\n      left: rect.left + window.scrollX,\n      height: rect.height,\n      width: rect.width,\n    };\n  }\n\n  inputChanged(e: any) {\n    if (e.target.tagName.toLowerCase() !== 'input') return;\n    if (!e.target.value.length) return;\n    const dateString = e.target.value.split(this.daterangepicker.locale.separator);\n    let start = null, end = null;\n    if (dateString.length === 2) {\n      start = dayjs(dateString[0], this.daterangepicker.locale.format);\n      end = dayjs(dateString[1], this.daterangepicker.locale.format);\n    }\n    if (this.singleDatePicker || start === null || end === null) {\n      start = dayjs(e.target.value, this.daterangepicker.locale.format);\n      end = start;\n    }\n    if (!start.isValid() || !end.isValid()) return;\n    this.daterangepicker.setStartDate(start);\n    this.daterangepicker.setEndDate(end);\n    this.daterangepicker.updateView();\n  }\n\n  /**\n   * For click outside of the calendar's container\n   * @param event event object\n   */\n  @HostListener('document:click', ['$event'])\n  outsideClick(event: any): void {\n    if (!event.target || event.target.classList.contains('ngx-daterangepicker-action')) return;\n    if (!this.elementRef.nativeElement.contains(event.target)) this.hide();\n  }\n\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {NgxDaterangepickerBootstrapComponent} from './ngx-daterangepicker-bootstrap.component';\nimport {NgxDaterangepickerBootstrapDirective} from \"./ngx-daterangepicker-bootstrap.directive\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {LOCALE_CONFIG, LocaleConfig} from \"./ngx-daterangepicker-locale.config\";\nimport {NgxDaterangepickerLocaleService} from \"./ngx-daterangepicker-locale.service\";\n\n\n@NgModule({\n  declarations: [\n    NgxDaterangepickerBootstrapComponent,\n    NgxDaterangepickerBootstrapDirective\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule\n  ],\n  exports: [\n    NgxDaterangepickerBootstrapComponent,\n    NgxDaterangepickerBootstrapDirective\n  ],\n  entryComponents: [\n    NgxDaterangepickerBootstrapComponent\n  ]\n})\nexport class NgxDaterangepickerBootstrapModule {\n\n  constructor() {\n  }\n\n  static forRoot(config: LocaleConfig = {}): ModuleWithProviders<NgxDaterangepickerBootstrapModule> {\n    return {\n      ngModule: NgxDaterangepickerBootstrapModule,\n      providers: [\n        {provide: LOCALE_CONFIG, useValue: config},\n        {provide: NgxDaterangepickerLocaleService, useClass: NgxDaterangepickerLocaleService, deps: [LOCALE_CONFIG]}\n      ]\n    };\n  }\n\n}\n","/*\n * Public API Surface of ngx-daterangepicker-bootstrap\n */\n\nexport * from './lib/ngx-daterangepicker-bootstrap.component';\nexport * from './lib/ngx-daterangepicker-bootstrap.module';\nexport * from './lib/ngx-daterangepicker-bootstrap.directive';\nexport * from './lib/ngx-daterangepicker-locale.service';\nexport * from './lib/ngx-daterangepicker-locale.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxDaterangepickerLocaleService"],"mappings":"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"}