UNPKG

ng-material-date-range-picker

Version:
1 lines 58.6 kB
{"version":3,"file":"ng-material-date-range-picker.mjs","sources":["../../../projects/ng-date-picker/src/lib/constant/date-filter-enum.ts","../../../projects/ng-date-picker/src/lib/data/default-date-options.ts","../../../projects/ng-date-picker/src/lib/model/calendar-view-data.ts","../../../projects/ng-date-picker/src/lib/calendar/calendar.component.ts","../../../projects/ng-date-picker/src/lib/calendar/calendar.component.html","../../../projects/ng-date-picker/src/lib/ng-date-picker.component.ts","../../../projects/ng-date-picker/src/lib/ng-date-picker.component.html","../../../projects/ng-date-picker/src/lib/model/select-date-option.ts","../../../projects/ng-date-picker/src/lib/ng-date-picker.module.ts","../../../projects/ng-date-picker/src/public-api.ts","../../../projects/ng-date-picker/src/ng-material-date-range-picker.ts"],"sourcesContent":["/**\r\n * @(#)date-filter-enum.ts Sept 08, 2023\r\n *\r\n * @author Aakash Kumar\r\n */\r\nexport enum DEFAULT_DATE_OPTION_ENUM {\r\n  DATE_DIFF = 1,\r\n  LAST_MONTH = 2,\r\n  THIS_MONTH = 3,\r\n  YEAR_TO_DATE = 4,\r\n  CUSTOM = 5,\r\n  MONTH_TO_DATE = 6,\r\n  WEEK_TO_DATE = 7,\r\n}\r\n","/**\r\n * @(#)default-date-options.ts Sept 08, 2023\r\n *\r\n * @author Aakash Kumar\r\n */\r\nimport { DEFAULT_DATE_OPTION_ENUM } from '../constant/date-filter-enum';\r\nimport { ISelectDateOption } from '../model/select-date-option';\r\n\r\nexport const DEFAULT_DATE_OPTIONS: ISelectDateOption[] = <ISelectDateOption[]>[\r\n  {\r\n    optionLabel: 'Today',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.DATE_DIFF,\r\n    dateDiff: 0,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n  {\r\n    optionLabel: 'Yesterday',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.DATE_DIFF,\r\n    dateDiff: -1,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n  {\r\n    optionLabel: 'Last 7 Days',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.DATE_DIFF,\r\n    dateDiff: -7,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n  {\r\n    optionLabel: 'Last 30 Days',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.DATE_DIFF,\r\n    dateDiff: -30,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n  {\r\n    optionLabel: 'Last Month',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.LAST_MONTH,\r\n    dateDiff: 0,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n  {\r\n    optionLabel: 'This Month',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.THIS_MONTH,\r\n    dateDiff: 0,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n  {\r\n    optionLabel: 'Month To Date',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.MONTH_TO_DATE,\r\n    dateDiff: 0,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n  {\r\n    optionLabel: 'Week To Date',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.WEEK_TO_DATE,\r\n    dateDiff: 0,\r\n    isSelected: false,\r\n    isVisible: false,\r\n  },\r\n  {\r\n    optionLabel: 'Year To Date',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.YEAR_TO_DATE,\r\n    dateDiff: 0,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n  {\r\n    optionLabel: 'Custom Range',\r\n    optionKey: DEFAULT_DATE_OPTION_ENUM.CUSTOM,\r\n    dateDiff: 0,\r\n    isSelected: false,\r\n    isVisible: true,\r\n  },\r\n];\r\n","import { DateRange } from '@angular/material/datepicker';\r\n\r\nexport class CalendarViewData {\r\n  startDate!: Date;\r\n  minDate!: Date;\r\n  selectedDates!: DateRange<Date>;\r\n}\r\n","/**\r\n * @(#)calendar.component.scss Sept 07, 2023\r\n\r\n * @author Aakash Kumar\r\n */\r\n\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  OnInit,\r\n  Renderer2,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { DateRange, MatCalendar } from '@angular/material/datepicker';\r\nimport { CalendarViewData } from './../model/calendar-view-data';\r\n\r\n@Component({\r\n  selector: 'lib-calendar',\r\n  templateUrl: './calendar.component.html',\r\n  styleUrls: ['./calendar.component.css'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CalendarComponent implements OnInit, AfterViewInit {\r\n  firstCalendarViewData!: CalendarViewData;\r\n  secondCalendarViewData!: CalendarViewData;\r\n  @Input() selectedDates!: DateRange<Date> | null;\r\n  @Input() minDate!: Date;\r\n  @Input() maxDate!: Date;\r\n  private isAllowHoverEvent: boolean = false;\r\n\r\n  @ViewChild('firstCalendarView') firstCalendarView!: MatCalendar<Date>;\r\n  @ViewChild('secondCalendarView') secondCalendarView!: MatCalendar<Date>;\r\n\r\n  constructor(\r\n    private cdref: ChangeDetectorRef,\r\n    private el: ElementRef,\r\n    private renderer: Renderer2\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.initFirstCalendar();\r\n    this.initSecondCalendar();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.addFirstCalendarButtonEvents();\r\n    this.attachHoverEventOnFirstViewDates();\r\n    this.attachHoverEventOnSecondViewDates();\r\n    this.addSecondCalendarButtonEvents();\r\n  }\r\n\r\n  /**\r\n   * This method gets all eligible cells on second view for hover event.\r\n   */\r\n  attachHoverEventOnSecondViewDates() {\r\n    const nodes = this.el.nativeElement.querySelectorAll(\r\n      '#secondCalendarView .mat-calendar-body-cell'\r\n    );\r\n    setTimeout(() => this.addHoverEvents(nodes), 200);\r\n  }\r\n\r\n  /**\r\n   * This method handles second calendar view month selection.\r\n   *\r\n   * @param event Date\r\n   */\r\n  secondViewMonthSelected(event: Date) {\r\n    this.removeDefaultFocus(this);\r\n    setTimeout(() => {\r\n      this.attachHoverEventOnSecondViewDates();\r\n    }, 300);\r\n  }\r\n\r\n  /**\r\n   * This method handles first calendar view month selection.\r\n   *\r\n   * @param event Date\r\n   */\r\n  monthSelected(event: Date) {\r\n    this.secondCalendarView._goToDateInView(event, 'year');\r\n    setTimeout(() => this.handleFirstCalendarNextEvent(this, true), 1);\r\n  }\r\n\r\n  /**\r\n   * This method updates the date selection range.\r\n   *\r\n   * @param date Date\r\n   */\r\n  updateDateRangeSelection(date: Date | null): void {\r\n    const selectedDates = this.selectedDates;\r\n    if (\r\n      !selectedDates ||\r\n      (selectedDates.start && selectedDates.end) ||\r\n      (selectedDates.start && date && selectedDates.start > date)\r\n    ) {\r\n      this.selectedDates = new DateRange<Date>(date, null);\r\n      this.isAllowHoverEvent = true;\r\n    } else {\r\n      this.isAllowHoverEvent = false;\r\n      this.selectedDates = new DateRange<Date>(selectedDates.start, date);\r\n    }\r\n    this.cdref.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * This method handles First calendar prev button event.\r\n   * @param classRef CalendarComponent\r\n   */\r\n  private handleFirstCalDatePrevEvent(classRef: CalendarComponent): void {\r\n    const leftDateCalender = classRef.firstCalendarView;\r\n    if (leftDateCalender.currentView.toLocaleLowerCase() === 'month') {\r\n      const date: Date = new Date(leftDateCalender['_clampedActiveDate']);\r\n      classRef.secondCalendarView.minDate =\r\n        classRef.getFirstDateOfNextMonth(date);\r\n      classRef.cdref.markForCheck();\r\n    }\r\n    classRef.attachHoverEventOnFirstViewDates();\r\n  }\r\n\r\n  /**\r\n   * This method gets all eligible cells on first view for hover event.\r\n   */\r\n  private attachHoverEventOnFirstViewDates() {\r\n    const nodes = this.el.nativeElement.querySelectorAll(\r\n      '#firstCalendarView .mat-calendar-body-cell'\r\n    );\r\n    setTimeout(() => this.addHoverEvents(nodes), 200);\r\n  }\r\n\r\n  /**\r\n   * This method handle the next button event.\r\n   *\r\n   * @param classRef CalendarComponent\r\n   * @param isForced boolean\r\n   */\r\n  private handleFirstCalendarNextEvent(\r\n    classRef: CalendarComponent,\r\n    isForced = false\r\n  ): void {\r\n    const firstCalendar = classRef.firstCalendarView;\r\n    if (firstCalendar.currentView.toLocaleLowerCase() === 'month' || isForced) {\r\n      const date: Date = new Date(firstCalendar['_clampedActiveDate']);\r\n      const nextMonthDate = classRef.getFirstDateOfNextMonth(date);\r\n      classRef.secondCalendarView.minDate = nextMonthDate;\r\n      classRef.secondCalendarView._goToDateInView(nextMonthDate, 'month');\r\n      classRef.removeDefaultFocus(classRef);\r\n      classRef.cdref.markForCheck();\r\n    }\r\n    setTimeout(() => {\r\n      classRef.attachHoverEventOnFirstViewDates();\r\n      classRef.attachHoverEventOnSecondViewDates();\r\n    }, 300);\r\n  }\r\n\r\n  /**\r\n   * This method remove active focus on second view.\r\n   *\r\n   * @param classRef CalendarComponent\r\n   */\r\n  removeDefaultFocus(classRef: CalendarComponent): void {\r\n    setTimeout(() => {\r\n      const btn: HTMLButtonElement[] =\r\n        classRef.el.nativeElement.querySelectorAll(\r\n          '#secondCalendarView button.mat-calendar-body-active'\r\n        );\r\n      if (btn?.length) {\r\n        btn[0].blur();\r\n      }\r\n    }, 1);\r\n  }\r\n\r\n  /**\r\n   * This method attaches next and prev events on buttons.\r\n   *\r\n   */\r\n  private addFirstCalendarButtonEvents(): void {\r\n    const monthPrevBtn = this.el.nativeElement.querySelectorAll(\r\n      '#firstCalendarView .mat-calendar-previous-button'\r\n    );\r\n    const monthNextBtn = this.el.nativeElement.querySelectorAll(\r\n      '#firstCalendarView .mat-calendar-next-button'\r\n    );\r\n    this.attachClickEvent(monthPrevBtn, this.handleFirstCalDatePrevEvent);\r\n    this.attachClickEvent(monthNextBtn, this.handleFirstCalendarNextEvent);\r\n  }\r\n\r\n  /**\r\n   * This method attaches next and prev events on buttons.\r\n   *\r\n   */\r\n  private addSecondCalendarButtonEvents(): void {\r\n    const monthPrevBtn: any[] = this.el.nativeElement.querySelectorAll(\r\n      '#secondCalendarView .mat-calendar-previous-button'\r\n    );\r\n    const monthNextBtn: any[] = this.el.nativeElement.querySelectorAll(\r\n      '#secondCalendarView .mat-calendar-next-button'\r\n    );\r\n    if (!monthPrevBtn || !monthNextBtn) {\r\n      return;\r\n    }\r\n    this.attachSecondViewClickEvent(monthPrevBtn);\r\n    this.attachSecondViewClickEvent(monthNextBtn);\r\n  }\r\n\r\n  /**\r\n   * This method attach click event of next and prev button on second view.\r\n   *\r\n   */\r\n  private attachSecondViewClickEvent(nodes: any): void {\r\n    Array.from(nodes).forEach((button) => {\r\n      this.renderer.listen(button, 'click', () => {\r\n        this.attachHoverEventOnSecondViewDates();\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * This method will update the range selection on mouse hover event.\r\n   *\r\n   * @param date Date\r\n   */\r\n  private updateSelectionOnMouseHover(date: Date): void {\r\n    const selectedDates = this.selectedDates;\r\n    if (selectedDates?.start && date && selectedDates.start < date) {\r\n      const dateRange: DateRange<Date> = new DateRange<Date>(\r\n        selectedDates.start,\r\n        date\r\n      );\r\n      this.firstCalendarView.selected = dateRange;\r\n      this.secondCalendarView.selected = dateRange;\r\n      this.firstCalendarView['_changeDetectorRef'].markForCheck();\r\n      this.secondCalendarView['_changeDetectorRef'].markForCheck();\r\n      this.isAllowHoverEvent = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * This method attach hover event on specified nodes.\r\n   *\r\n   * @param nodes any\r\n   */\r\n  private addHoverEvents(nodes: any): void {\r\n    if (!nodes) {\r\n      return;\r\n    }\r\n    Array.from(nodes).forEach((button) => {\r\n      this.renderer.listen(button, 'mouseover', (event) => {\r\n        if (this.isAllowHoverEvent) {\r\n          const date = new Date(event.target['ariaLabel']);\r\n          this.updateSelectionOnMouseHover(date);\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * This method attach the next and prev events on specified nodes.\r\n   *\r\n   * @param nodes any\r\n   * @param handler Function\r\n   */\r\n  private attachClickEvent(nodes: any, handler: Function): void {\r\n    if (!nodes) {\r\n      return;\r\n    }\r\n    Array.from(nodes).forEach((button) => {\r\n      this.renderer.listen(button, 'click', () => {\r\n        handler(this);\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * This method initialize data for first calendar view.\r\n   */\r\n  private initFirstCalendar(): void {\r\n    this.firstCalendarViewData = new CalendarViewData();\r\n    this.firstCalendarViewData.startDate = new Date();\r\n  }\r\n\r\n  /**\r\n   * This method initialize data for second calendar view.\r\n   */\r\n  private initSecondCalendar(): void {\r\n    const currDate = new Date();\r\n    this.secondCalendarViewData = new CalendarViewData();\r\n    this.secondCalendarViewData.minDate =\r\n      this.getFirstDateOfNextMonth(currDate);\r\n    currDate.setMonth(currDate.getMonth() + 1);\r\n    this.secondCalendarViewData.startDate = this.selectedDates?.end\r\n      ? this.selectedDates.end\r\n      : currDate;\r\n  }\r\n\r\n  /**\r\n   * This method returns the next months first date.\r\n   *\r\n   * @param currDate Date\r\n   * @returns Date\r\n   */\r\n  private getFirstDateOfNextMonth(currDate: Date): Date {\r\n    return new Date(currDate.getFullYear(), currDate.getMonth() + 1, 1);\r\n  }\r\n}\r\n","<!--**\r\n * @(#)calendar.component.html Sept 07, 2023\r\n\r\n * @author Aakash Kumar\r\n *-->\r\n<div class=\"calendar-container\">\r\n  <div class=\"first-view\">\r\n    <mat-calendar id=\"firstCalendarView\" #firstCalendarView [startAt]=\"firstCalendarViewData.startDate\"\r\n      [selected]=\"selectedDates\" (selectedChange)=\"updateDateRangeSelection($event)\"\r\n      (monthSelected)=\"monthSelected($event)\" [minDate]=\"minDate\" [maxDate]=\"maxDate\"></mat-calendar>\r\n  </div>\r\n  <div class=\"second-view\">\r\n    <mat-calendar id=\"secondCalendarView\" #secondCalendarView [startAt]=\"secondCalendarViewData.startDate\"\r\n      [minDate]=\"secondCalendarViewData.minDate\" [maxDate]=\"maxDate\" [selected]=\"selectedDates\"\r\n      (selectedChange)=\"updateDateRangeSelection($event)\"\r\n      (monthSelected)=\" secondViewMonthSelected($event)\"></mat-calendar>\r\n  </div>\r\n</div>\r\n","/**\r\n * @(#)ng-date-picker.component.ts Sept 05, 2023\r\n *\r\n * @author Aakash Kumar\r\n */\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n} from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\nimport { DateRange } from '@angular/material/datepicker';\r\nimport { DEFAULT_DATE_OPTION_ENUM } from './constant/date-filter-enum';\r\nimport { DEFAULT_DATE_OPTIONS } from './data/default-date-options';\r\nimport { ISelectDateOption } from './model/select-date-option';\r\nimport { SelectedDateEvent } from '../public-api';\r\n\r\n@Component({\r\n  selector: 'ng-date-range-picker',\r\n  templateUrl: './ng-date-picker.component.html',\r\n  styleUrls: ['./ng-date-picker.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgDatePickerComponent implements OnInit, AfterViewInit {\r\n  isDateOptionList: boolean = false;\r\n  isCustomRange: boolean = false;\r\n  @Input() inputLabel: string = 'Date Range';\r\n  @Input() staticOptionId = 'static-options';\r\n  @Input() dynamicOptionId = 'dynamic-options';\r\n  @Input() calendarId: string = 'custom-calendar';\r\n  @Input() enableDefaultOptions: boolean = true;\r\n  @Input() selectedDates!: DateRange<Date> | null;\r\n  @Input() dateFormat: string = 'dd/MM/yyyy';\r\n  @Input() isShowStaticDefaultOptions: boolean = false;\r\n  @Input() hideDefaultOptions: boolean = false;\r\n  @Input() cdkConnectedOverlayOffsetX = 0;\r\n  @Input() cdkConnectedOverlayOffsetY = 0;\r\n  @Input() listCdkConnectedOverlayOffsetY = 0;\r\n  @Input() listCdkConnectedOverlayOffsetX = 0;\r\n  @Input() selectedOptionIndex = 3;\r\n  @Input() displaySelectedLabel = false;\r\n  @Input() cdkConnectedOverlayPush = true;\r\n  @Input() cdkConnectedOverlayPositions = [];\r\n\r\n  // default min date is current date - 10 years.\r\n  @Input() minDate = new Date(\r\n    new Date().setFullYear(new Date().getFullYear() - 10)\r\n  );\r\n\r\n  // default max date is current date - 10 years.\r\n  @Input() maxDate = new Date(\r\n    new Date().setFullYear(new Date().getFullYear() + 10)\r\n  );\r\n\r\n  @Output() onDateSelectionChanged: EventEmitter<SelectedDateEvent>;\r\n  @Output() dateListOptions: EventEmitter<ISelectDateOption[]>;\r\n\r\n  private _dateDropDownOptions: ISelectDateOption[] = [];\r\n\r\n  constructor(private cdref: ChangeDetectorRef, private el: ElementRef) {\r\n    this.onDateSelectionChanged = new EventEmitter<SelectedDateEvent>();\r\n    this.dateListOptions = new EventEmitter<ISelectDateOption[]>();\r\n  }\r\n\r\n  @Input()\r\n  set dateDropDownOptions(defaultDateList: ISelectDateOption[]) {\r\n    if (this.enableDefaultOptions) {\r\n      this._dateDropDownOptions =\r\n        this.getClone<ISelectDateOption[]>(DEFAULT_DATE_OPTIONS).concat(\r\n          defaultDateList\r\n        );\r\n    } else {\r\n      this._dateDropDownOptions = defaultDateList;\r\n    }\r\n  }\r\n\r\n  get dateDropDownOptions(): ISelectDateOption[] {\r\n    return this._dateDropDownOptions ?? [];\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!this._dateDropDownOptions.length && this.enableDefaultOptions) {\r\n      this._dateDropDownOptions =\r\n        this.getClone<ISelectDateOption[]>(DEFAULT_DATE_OPTIONS);\r\n      this._dateDropDownOptions[this.selectedOptionIndex].isSelected = true;\r\n    }\r\n    this.dateListOptions.emit(this.dateDropDownOptions);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.updateDefaultDatesValues();\r\n  }\r\n\r\n  /**\r\n   * This method toggles the visibility of default date option's List.\r\n   */\r\n  toggleDateOptionSelectionList(event?: MouseEvent): void {\r\n    if (event) {\r\n      event.preventDefault();\r\n      event.stopImmediatePropagation();\r\n    }\r\n    const selectedOption = this.dateDropDownOptions.filter(\r\n      (option) => option.isSelected\r\n    );\r\n    if (\r\n      selectedOption.length &&\r\n      selectedOption[0].optionKey === DEFAULT_DATE_OPTION_ENUM.CUSTOM\r\n    ) {\r\n      this.toggleCustomDateRangeView();\r\n    } else {\r\n      this.isDateOptionList = !this.isDateOptionList;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * This method updates the date range on button click.\r\n   *\r\n   * @param input HTMLInputElement\r\n   * @param selectedDates DateRange<Date>\r\n   */\r\n  updateCustomRange(\r\n    input: HTMLInputElement,\r\n    selectedDates: DateRange<Date> | null\r\n  ): void {\r\n    this.updateSelectedDates(\r\n      input,\r\n      selectedDates?.start ?? new Date(),\r\n      selectedDates?.end ?? new Date(),\r\n      null\r\n    );\r\n    if (this.isCustomRange) {\r\n      this.resetOptionSelection();\r\n      this.selectCustomOption();\r\n      this.isCustomRange = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * This method update the date on specified option.\r\n   *\r\n   * @param option ISelectDateOption\r\n   * @param input HTMLInputElement\r\n   */\r\n  updateSelection(option: ISelectDateOption, input: HTMLInputElement): void {\r\n    this.isDateOptionList = false;\r\n    if (option.optionKey !== DEFAULT_DATE_OPTION_ENUM.CUSTOM) {\r\n      this.isCustomRange = false;\r\n      this.resetOptionSelection(option);\r\n      this.updateDateOnOptionSelect(option, input);\r\n    } else {\r\n      this.isCustomRange = true;\r\n    }\r\n    this.cdref.markForCheck();\r\n  }\r\n\r\n  // This method sets custom option as selected.\r\n  selectCustomOption(): void {\r\n    const customOption = this.dateDropDownOptions.filter(\r\n      (option) => option.optionKey === DEFAULT_DATE_OPTION_ENUM.CUSTOM\r\n    );\r\n    customOption[0].isSelected = true;\r\n  }\r\n\r\n  /**\r\n   * This method toggles the custom date range selection view.\r\n   */\r\n  toggleCustomDateRangeView(): void {\r\n    this.isCustomRange = !this.isCustomRange;\r\n  }\r\n\r\n  /**\r\n   * Clears the selected dates and resets date-related properties.\r\n   *\r\n   * @param event - The mouse event that triggered the clear action.\r\n   */\r\n  clearSelection(event: MouseEvent): void {\r\n    event.stopImmediatePropagation();\r\n    const currentDate = new Date();\r\n    const year = currentDate.getFullYear();\r\n    this.minDate = new Date(currentDate.setFullYear(year - 10));\r\n    this.maxDate = new Date(currentDate.setFullYear(year + 10));\r\n    this.selectedDates = null;\r\n    this.resetOptionSelection();\r\n\r\n    const dateInputField =\r\n      this.el.nativeElement.querySelector('#date-input-field');\r\n    if (dateInputField) {\r\n      dateInputField.value = '';\r\n    }\r\n    this.cdref.markForCheck();\r\n    const selectedDateEventData: SelectedDateEvent = {\r\n      range: null,\r\n      selectedOption: null,\r\n    };\r\n    this.onDateSelectionChanged.emit(selectedDateEventData);\r\n  }\r\n\r\n  /**\r\n   * This method sets clicked element as selected.\r\n   * @param option ISelectDateOption\r\n   */\r\n  private resetOptionSelection(option?: ISelectDateOption): void {\r\n    this.dateDropDownOptions.forEach((option) => (option.isSelected = false));\r\n    if (option) {\r\n      option.isSelected = true;\r\n    }\r\n    this.cdref.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Updates the selected dates based on the given option and input element.\r\n   *\r\n   * @param option - The date option selected by the user.\r\n   * @param input - The HTML input element to update.\r\n   */\r\n  private updateDateOnOptionSelect(\r\n    option: ISelectDateOption,\r\n    input: HTMLInputElement\r\n  ): void {\r\n    const currDate = new Date();\r\n    let startDate: Date = new Date();\r\n    let lastDate: Date = new Date();\r\n\r\n    // If there is a callback function, use it to get the date range\r\n    if (option.callBackFunction) {\r\n      const dateRange: DateRange<Date> = option.callBackFunction();\r\n      if (dateRange?.start && dateRange?.end) {\r\n        this.updateSelectedDates(input, dateRange.start, dateRange.end, option);\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Determine the date range based on the option key\r\n    switch (option.optionKey) {\r\n      case DEFAULT_DATE_OPTION_ENUM.DATE_DIFF:\r\n        startDate.setDate(startDate.getDate() + option.dateDiff);\r\n        break;\r\n\r\n      case DEFAULT_DATE_OPTION_ENUM.LAST_MONTH:\r\n        currDate.setMonth(currDate.getMonth() - 1);\r\n        startDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);\r\n        lastDate = new Date(\r\n          currDate.getFullYear(),\r\n          currDate.getMonth(),\r\n          this.getDaysInMonth(currDate)\r\n        );\r\n        break;\r\n\r\n      case DEFAULT_DATE_OPTION_ENUM.THIS_MONTH:\r\n        startDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);\r\n        lastDate = new Date(\r\n          currDate.getFullYear(),\r\n          currDate.getMonth(),\r\n          this.getDaysInMonth(currDate)\r\n        );\r\n        break;\r\n\r\n      case DEFAULT_DATE_OPTION_ENUM.YEAR_TO_DATE:\r\n        startDate = new Date(currDate.getFullYear(), 0, 1);\r\n        break;\r\n\r\n      case DEFAULT_DATE_OPTION_ENUM.MONTH_TO_DATE:\r\n        startDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n\r\n    // Update the selected dates\r\n    this.updateSelectedDates(input, startDate, lastDate, option);\r\n  }\r\n\r\n  /**\r\n   * This method updates dates on selection.\r\n   *\r\n   * @param input HTMLInputElement\r\n   * @param startDate Date\r\n   * @param endDate Date\r\n   */\r\n  private updateSelectedDates(\r\n    input: HTMLInputElement,\r\n    startDate: Date,\r\n    endDate: Date,\r\n    option: ISelectDateOption | null\r\n  ): void {\r\n    this.selectedDates = new DateRange<Date>(startDate, endDate);\r\n    input.value =\r\n      this.displaySelectedLabel && option\r\n        ? option.optionLabel\r\n        : this.getDateString(startDate) + ' - ' + this.getDateString(endDate);\r\n    const selectedOption = this.dateDropDownOptions.filter(\r\n      (option) => option.isSelected\r\n    )[0];\r\n    const selectedDateEventData: SelectedDateEvent = {\r\n      range: new DateRange<Date>(new Date(startDate), new Date(endDate)),\r\n      selectedOption: selectedOption,\r\n    };\r\n    this.onDateSelectionChanged.emit(selectedDateEventData);\r\n    this.cdref.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * This method converts the given date into specified string format.\r\n   *\r\n   * @param date Date\r\n   * @returns formatted date.\r\n   */\r\n  private getDateString(date: Date): string {\r\n    const datePipe = new DatePipe('en');\r\n    return datePipe.transform(date, this.dateFormat) ?? '';\r\n  }\r\n\r\n  /**\r\n   * This method return the number of days in moth on specified date.\r\n   *\r\n   * @param date Date\r\n   * @returns number\r\n   */\r\n  private getDaysInMonth(date: Date): number {\r\n    return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n  }\r\n\r\n  /**\r\n   * This method clone the data.\r\n   *\r\n   * @param data T\r\n   * @returns T\r\n   */\r\n  private getClone<T>(data: T): T {\r\n    return JSON.parse(JSON.stringify(data));\r\n  }\r\n\r\n  /**\r\n   * This method update the default date values on init.\r\n   */\r\n  private updateDefaultDatesValues(): void {\r\n    const input: HTMLInputElement =\r\n      this.el.nativeElement.querySelector('#date-input-field');\r\n    if (\r\n      this.selectedDates &&\r\n      this.selectedDates.start &&\r\n      this.selectedDates.end\r\n    ) {\r\n      const customOption: ISelectDateOption[] =\r\n        this._dateDropDownOptions.filter(\r\n          (option) => option.optionKey === DEFAULT_DATE_OPTION_ENUM.CUSTOM\r\n        );\r\n      customOption[0].isSelected = true;\r\n      input.value =\r\n        this.getDateString(this.selectedDates.start) +\r\n        ' - ' +\r\n        this.getDateString(this.selectedDates.end);\r\n    } else {\r\n      const selectedOptions: ISelectDateOption[] =\r\n        this._dateDropDownOptions.filter((option) => option.isSelected);\r\n      if (\r\n        selectedOptions.length &&\r\n        selectedOptions[0].optionKey !== DEFAULT_DATE_OPTION_ENUM.CUSTOM\r\n      ) {\r\n        this.updatedFromListValueSelection(selectedOptions[0], input);\r\n      }\r\n    }\r\n    this.cdref.detectChanges();\r\n  }\r\n\r\n  /**\r\n   * This method updates the date values based on default option selection.\r\n   *\r\n   * @param selectedOption ISelectDateOption\r\n   * @param input HTMLInputElement\r\n   */\r\n  private updatedFromListValueSelection(\r\n    selectedOption: ISelectDateOption,\r\n    input: HTMLInputElement\r\n  ): void {\r\n    // This will update value if option is selected from provided custom list.\r\n    if (selectedOption['callBackFunction']) {\r\n      const dateRange: DateRange<Date> = selectedOption.callBackFunction();\r\n      if (dateRange?.start && dateRange?.end) {\r\n        this.updateSelectedDates(\r\n          input,\r\n          dateRange.start,\r\n          dateRange.end,\r\n          selectedOption\r\n        );\r\n      }\r\n    } else {\r\n      // This will update value if option is selected from default list.\r\n      this.updateDateOnOptionSelect(selectedOption, input);\r\n    }\r\n  }\r\n}\r\n","<!--**\r\n * @(#)ng-date-picker.component.html Sept 05, 2023\r\n\r\n * @author Aakash Kumar\r\n *-->\r\n<div class=\"date-picker-main\" cdkOverlayOrigin #trigger>\r\n  <mat-form-field class=\"w-full\" [class]=\"{'display-hidden':isShowStaticDefaultOptions}\" (click)=\"toggleDateOptionSelectionList($event)\">\r\n    <mat-label (click)=\"toggleDateOptionSelectionList($event)\">{{inputLabel}}</mat-label>\r\n    <input matInput readonly=\"readonly\" #dateInput class=\"cursor-pointer\" id=\"date-input-field\">\r\n    <button mat-icon-button matSuffix class=\"cursor-pointer pe-0 ps-0\" matTooltip=\"Clear\" *ngIf=\"!!dateInput.value\"\r\n      (click)=\"clearSelection($event)\"><mat-icon>clear</mat-icon></button>\r\n    <button mat-icon-button matSuffix class=\"cursor-pointer\"> <mat-icon>date_range</mat-icon></button>\r\n  </mat-form-field>\r\n\r\n  @if(dateDropDownOptions && dateDropDownOptions.length && isShowStaticDefaultOptions) {\r\n  <mat-action-list class=\"w-full custom-ckd-container range-input\" [id]=\"staticOptionId\">\r\n    @for (option of dateDropDownOptions; track option.optionKey) {\r\n    @if (option.isVisible) {\r\n    <mat-list-item [activated]=\"option.isSelected\" (click)=\"updateSelection(option, dateInput)\">{{option.optionLabel}}</mat-list-item>\r\n    }\r\n    }\r\n  </mat-action-list>\r\n  }\r\n\r\n  <ng-template cdkConnectedOverlay [cdkConnectedOverlayHasBackdrop]=\"false\" [cdkConnectedOverlayOrigin]=\"trigger\"\r\n    [cdkConnectedOverlayOpen]=\"isDateOptionList\" [cdkConnectedOverlayPush]=\"cdkConnectedOverlayPush\"\r\n    [cdkConnectedOverlayOffsetX]=\"listCdkConnectedOverlayOffsetX\" [cdkConnectedOverlayOffsetY]=\"listCdkConnectedOverlayOffsetY\"\r\n    (overlayOutsideClick)=\"!isShowStaticDefaultOptions && toggleDateOptionSelectionList()\">\r\n\r\n    @if(dateDropDownOptions && dateDropDownOptions.length && !isShowStaticDefaultOptions) {\r\n    <mat-action-list [id]=\"dynamicOptionId\" class=\"w-full custom-ckd-container range-input\">\r\n      @for (option of dateDropDownOptions; track option.optionKey) {\r\n      @if (option.isVisible) {\r\n      <mat-list-item [activated]=\"option.isSelected\" (click)=\"updateSelection(option, dateInput)\">{{option.optionLabel}}</mat-list-item>\r\n      }\r\n      }\r\n    </mat-action-list>\r\n    }\r\n  </ng-template>\r\n\r\n  <ng-template cdkConnectedOverlay [cdkConnectedOverlayHasBackdrop]=\"false\" [cdkConnectedOverlayOrigin]=\"trigger\"\r\n    [cdkConnectedOverlayOpen]=\"isCustomRange\" [cdkConnectedOverlayPush]=\"cdkConnectedOverlayPush\"\r\n    [cdkConnectedOverlayPositions]=\"cdkConnectedOverlayPositions\" [cdkConnectedOverlayOffsetX]=\"cdkConnectedOverlayOffsetX\"\r\n    [cdkConnectedOverlayOffsetY]=\"cdkConnectedOverlayOffsetY\" (overlayOutsideClick)=\"toggleCustomDateRangeView()\">\r\n    <div class=\"custom-ckd-container custom-calendar-container\" [class]=\"{'without-default-opt':hideDefaultOptions}\">\r\n      <div class=\"row-1\">\r\n        <div class=\"pt-custom br-right column-1\" *ngIf=\"!hideDefaultOptions\">\r\n          <mat-action-list>\r\n            @for (option of dateDropDownOptions; track option.optionKey) {\r\n            @if(option.isVisible) {\r\n            <mat-list-item (click)=\"updateSelection(option, dateInput)\"\r\n              [activated]=\"option.isSelected\">{{option.optionLabel}}</mat-list-item>\r\n            }\r\n            }\r\n          </mat-action-list>\r\n        </div>\r\n        <div class=\"mt-2 column-2\"><lib-calendar [selectedDates]=\"selectedDates\" #calendar [minDate]=\"minDate\"\r\n            [maxDate]=\"maxDate\"></lib-calendar></div>\r\n      </div>\r\n      <div class=\"row-2 br-top\">\r\n        <div class=\"text-end my-2 w-full\">\r\n          <div class=\"footer-content\">\r\n            <span id=\"range-label-text\">\r\n              {{calendar?.selectedDates?.start | date: dateFormat}}\r\n              @if (calendar?.selectedDates?.end) {\r\n              <span> - {{calendar.selectedDates?.end | date:\r\n                dateFormat}} </span>\r\n              }\r\n            </span>\r\n            <div class=\"d-inline buttons\">\r\n              <button mat-button mat-raised-button class=\"p-3 mx-2\" (click)=\"isCustomRange=false;\">Cancel</button>\r\n              <button mat-button mat-raised-button color=\"primary\" class=\"ms-2 p-3\"\r\n                [class.disabled]=\"!(calendar?.selectedDates?.start && calendar?.selectedDates?.end)\"\r\n                (click)=\"updateCustomRange(dateInput,calendar.selectedDates);\">&nbsp;Apply&nbsp;</button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </ng-template>\r\n</div>\r\n","import { DateRange } from '@angular/material/datepicker';\r\nimport { DEFAULT_DATE_OPTION_ENUM } from '../constant/date-filter-enum';\r\n\r\n/**\r\n * @(#)select-date-option.ts Sept 08, 2023\r\n *\r\n * @author Aakash Kumar\r\n */\r\nexport interface ISelectDateOption {\r\n  // Label displayed in drop-down list for selection.\r\n  optionLabel: string;\r\n\r\n  // Used to check normal date or special date.\r\n  optionKey: DEFAULT_DATE_OPTION_ENUM;\r\n\r\n  // Actual date difference.\r\n  // positive number indicates date forward from today.\r\n  // negative number indicates date backward from today.\r\n  dateDiff: number;\r\n\r\n  // boolean value used to show active or inactive selection.\r\n  isSelected: boolean;\r\n\r\n  // boolean value used to show or hide label in list.\r\n  isVisible: boolean;\r\n  callBackFunction: () => DateRange<Date>;\r\n}\r\n\r\nexport class SelectDateOption implements ISelectDateOption {\r\n  optionLabel = '';\r\n  optionKey = DEFAULT_DATE_OPTION_ENUM.DATE_DIFF;\r\n  dateDiff = 0;\r\n  isSelected = false;\r\n  isVisible = false;\r\n  callBackFunction!: () =>  DateRange<Date>;\r\n}\r\n","/**\r\n * @(#)ng-date-picker.module.ts Sept 05, 2023\r\n *\r\n * @author Aakash Kumar\r\n */\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { CalendarComponent } from './calendar/calendar.component';\r\nimport { NgDatePickerComponent } from './ng-date-picker.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n  declarations: [NgDatePickerComponent, CalendarComponent],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    MatDatepickerModule,\r\n    MatNativeDateModule,\r\n    MatInputModule,\r\n    MatAutocompleteModule,\r\n    OverlayModule,\r\n    MatIconModule,\r\n    MatButtonModule,\r\n    MatListModule,\r\n    MatFormFieldModule,\r\n    MatTooltipModule,\r\n  ],\r\n  exports: [NgDatePickerComponent],\r\n})\r\nexport class NgDatePickerModule {}\r\n","/**\r\n * @(#)public-api.ts Sept 05, 2023\r\n *\r\n * @author Aakash Kumar\r\n */\r\n\r\n// Public API Surface of ng-date-picker\r\nexport * from './lib/ng-date-picker.component';\r\nexport * from './lib/model/select-date-option';\r\nexport * from './lib/ng-date-picker.module';\r\nexport * from './lib/constant/date-filter-enum';\r\nexport * from './lib/model/date-selection-event-data';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i9.CalendarComponent"],"mappings":"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"}