{"version":3,"file":"ngx-datetime-range-picker.mjs","sources":["../../src/lib/ngx-datetime-range-picker.constants.ts","../../src/lib/ngx-datetime-range-picker.utils.ts","../../src/lib/interfaces/index.ts","../../src/lib/ngx-datetime-range-picker.service.ts","../../src/lib/pipes/objNgFor.pipe.ts","../../src/lib/ngx-datetime-range-picker.component.ts","../../src/lib/ngx-datetime-range-picker.component.html","../../src/lib/material/material.module.ts","../../src/lib/ngx-datetime-range-picker.module.ts","../../src/public_api.ts","../../src/ngx-datetime-range-picker.ts"],"sourcesContent":["import { ActiveItemSide, DateSide, AriaLabelsOptions, Options, Settings, State } from \"./interfaces\";\n\ndeclare let require: any;\nconst moment = require(\"moment\");\nconst USA_MST_TZ_CODE = \"MST\";\nconst USA_TZ_CODE = \"PST\";\nconst EU_TZ_CODE = \"CET\";\n\nfunction getLocalTimezone(): string {\n  const tz: string = /\\((.*)\\)/.exec(new Date().toString())[1];\n\n  if (tz === \"Central Europe Standard Time\") {\n    return EU_TZ_CODE;\n  } else {\n    return USA_MST_TZ_CODE;\n  }\n}\n\nexport const DEFAULT_DATE_FORMAT = \"YYYY-MM-DD\";\n\nexport const NgxDatetimeRangePickerConstants = {\n  DEFAULT: {\n    OPTIONS: <Options>{\n      dateArray: [],\n      startDate: moment().format(\"YYYY-MM-DD\") as string,\n      endDate: moment().format(\"YYYY-MM-DD\") as string,\n      minDate: moment()\n        .subtract(2, \"year\")\n        .startOf(\"year\")\n        .format(\"YYYY-MM-DD\") as string,\n      maxDate: moment().format(\"YYYY-MM-DD\") as string,\n      startTime: \"00:00\",\n      endTime: \"23:59\"\n    },\n    SETTINGS: <Settings>{\n      type: \"daily\",\n      modelKeys: [\"daily\", \"weekly\", \"monthly\", \"quarterly\", \"yearly\"],\n      showTimezoneSelect: false,\n      useLocalTimezone: false,\n      timePicker: false,\n      inputClass: \"m1drp\",\n      inputDateFormat: null,\n      viewDateFormat: DEFAULT_DATE_FORMAT,\n      outputDateFormat: DEFAULT_DATE_FORMAT,\n      singleDatePicker: false,\n      componentDisabled: false,\n      placeholder: \"Select Date\",\n      showRowNumber: false,\n      availableRanges: {},\n      showRanges: true,\n      disableWeekends: false,\n      disableWeekdays: false,\n      retailCalendar: false,\n      displayBeginDate: false,\n      displayEndDate: false,\n      ariaLabels: {\n        inputField: \"Date Range Input Field\"\n      } as AriaLabelsOptions\n    },\n    STATE: <State>{\n      activeEndDate: null,\n      activeItem: {\n        left: {} as ActiveItemSide,\n        right: {} as ActiveItemSide\n      },\n      activeRange: null,\n      activeStartDate: null,\n      calendarAvailable: {\n        left: false,\n        right: false\n      },\n      customRange: false,\n      dates: {\n        left: {} as DateSide,\n        right: {} as DateSide\n      },\n      dateTitleText: {\n        left: \"\",\n        right: \"\"\n      },\n      frequencyColumnHeader: null,\n      isCalendarVisible: false,\n      isValidFilter: false,\n      isUserModelChange: true,\n      localTimezone: getLocalTimezone(),\n      selectedDateText: \"\",\n      selectedHour: {\n        left: \"\",\n        right: \"\"\n      },\n      selectedMeridian: {\n        left: \"\",\n        right: \"\"\n      },\n      selectedMinute: {\n        left: \"\",\n        right: \"\"\n      },\n      selectedMonth: {\n        left: \"\",\n        right: \"\"\n      },\n      selectedTimezone: undefined, // Since \"useLocalTimezone: false\" by default;\n      selectedYear: {\n        left: \"\",\n        right: \"\"\n      },\n      sides: [],\n      timeItems: [\"hour\", \"minute\"],\n      times: {\n        left: \"\",\n        right: \"\"\n      },\n      timeZones: [USA_TZ_CODE, EU_TZ_CODE],\n      todayTime: \"\",\n      weekDayOptions: [\"su\", \"mo\", \"tu\", \"we\", \"th\", \"fr\", \"sa\"]\n    },\n    TIME_FORMAT: \"HH:mm\",\n    RANGES: {\n      daily: [\n        { label: \"Last 7 Days\", count: 6 },\n        { label: \"Last 30 Days\", count: 29 },\n        { label: \"Last 90 Days\", count: 89 }\n      ],\n      weekly: [\n        { label: \"Last 4 Weeks\", count: 3 },\n        { label: \"Last 13 Weeks\", count: 12 },\n        { label: \"Last 26 Weeks\", count: 25 }\n      ],\n      monthly: [\n        { label: \"Last 3 Months\", count: 2 },\n        { label: \"Last 6 Months\", count: 5 },\n        { label: \"Last 9 Months\", count: 8 }\n      ],\n      quarterly: [\n        { label: \"Last 2 Quarters\", count: 1 },\n        { label: \"Last 4 Quarters\", count: 3 }\n      ],\n      yearly: [{ label: \"Last Year\", count: 1 }]\n    }\n  },\n  CONSTANT: {\n    MONTHS_AVAILABLE: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    TIMES_AVAILABLE: [\"hour\", \"minute\"],\n    MOMENT_CONVERSION_MAP: {\n      daily: \"day\",\n      weekly: \"week\",\n      monthly: \"month\",\n      quarterly: \"quarter\",\n      yearly: \"year\"\n    },\n    USA_MST_TZ_CODE,\n    USA_TZ_CODE,\n    EU_TZ_CODE,\n    OFFSETS: {\n      [USA_TZ_CODE]: {\n        SO: -7,\n        WO: -8\n      },\n      [EU_TZ_CODE]: {\n        SO: 1,\n        WO: 0\n      }\n    },\n    TZ_NAMES: {\n      [USA_MST_TZ_CODE]: \"America/Phoenix\",\n      [USA_TZ_CODE]: \"America/Los_Angeles\",\n      [EU_TZ_CODE]: \"Europe/Berlin\"\n    }\n  }\n};\n","export const getNotAvailableText = (): string => {\n  return \"N/A\";\n};\n\n/**\n *\n * @param value the value to be cloned\n * @note will not work for objects containing functions\n */\nexport const cloneDeep = (value: object | string | number): object | string | number => {\n  if (value) {\n    return JSON.parse(JSON.stringify(value));\n  }\n};\n\nexport const isEmpty = (value: object): boolean => {\n  if (value) {\n    return Object.keys(value).length <= 0;\n  }\n};\n\nexport const mergeDeep = (...objects): object => {\n  const isObject = (obj) => obj && typeof obj === \"object\";\n\n  return objects.reduce((prev, obj) => {\n    Object.keys(obj).forEach((key) => {\n      const pVal = prev[key];\n      const oVal = obj[key];\n\n      if (Array.isArray(pVal) && Array.isArray(oVal)) {\n        prev[key] = pVal.concat(...oVal);\n      } else if (isObject(pVal) && isObject(oVal)) {\n        prev[key] = mergeDeep(pVal, oVal);\n      } else {\n        prev[key] = oVal;\n      }\n    });\n\n    return prev;\n  }, {});\n};\n\nexport const isNil = (value) => {\n  return value == null || value === undefined;\n};\n","const tuple = <T extends string[]>(...args: T) => args;\nexport const CalendarTypes = tuple(\"daily\", \"weekly\", \"monthly\", \"quarterly\", \"yearly\");\nexport type CalendarType = typeof CalendarTypes[number];\n\nexport interface AriaLabelsOptions {\n  inputField?: string;\n}\n\nexport interface DateSide {\n  label: string;\n  months: string[];\n  years: string[];\n  itemRows: DateRow[];\n}\n\nexport interface TimeSide {\n  hour: any[];\n  minute: any[];\n  meridian: any[];\n}\n\nexport interface DateCharacteristics {\n  available?: boolean;\n  inRange?: boolean;\n  active?: boolean;\n  today?: boolean;\n  date?: string;\n}\n\nexport interface ActiveItemSide extends DateCharacteristics {\n  rowItemText?: string;\n  firstDay?: string;\n  lastDay?: string;\n  formattedDateString?: string;\n}\n\nexport interface CalendarSides {\n  left?: DateSide | TimeSide | ActiveItemSide | string | boolean;\n  right?: DateSide | TimeSide | ActiveItemSide | string | boolean;\n}\n\nexport interface DateTimeRangeChangeOutput {\n  activeRange: string;\n  startDate: string | number;\n  endDate: string | number;\n  startTime?: string;\n  endTime?: string;\n}\n\nexport type DateTimeRangeModelChangeOutput = { [key in CalendarType]?: DateTimeRangeChangeOutput };\n\nexport interface Options {\n  dateArray?: any[];\n  startDate?: string | number;\n  endDate?: string | number;\n  minDate?: string | number;\n  maxDate?: string | number;\n  startTime?: string;\n  endTime?: string;\n  minTime?: string;\n  maxTime?: string;\n}\n\nexport interface State {\n  activeEndDate: string;\n  activeItem: CalendarSides;\n  activeRange: string;\n  activeStartDate: string;\n  calendarAvailable: CalendarSides;\n  customRange: boolean;\n  dates: CalendarSides;\n  dateTitleText: CalendarSides;\n  frequencyColumnHeader: string;\n  isCalendarVisible: boolean;\n  isValidFilter: boolean;\n  isUserModelChange: boolean;\n  localTimezone: string;\n  selectedDateText: string;\n  selectedHour: CalendarSides;\n  selectedMeridian: CalendarSides;\n  selectedMinute: CalendarSides;\n  selectedMonth: CalendarSides;\n  selectedTimezone: string;\n  selectedYear: CalendarSides;\n  sides: string[];\n  timeItems: string[];\n  times: CalendarSides;\n  timeZones: string[];\n  todayTime: string;\n  weekDayOptions: string[];\n}\n\nexport interface Settings {\n  type?: string;\n  modelKeys?: string[];\n  useLocalTimezone?: boolean;\n  showTimezoneSelect?: boolean;\n  timePicker?: boolean;\n  timezoneSupport?: boolean;\n  defaultTimezone?: string;\n  inputClass?: string;\n  inputDateFormat?: string;\n  viewDateFormat?: string;\n  outputDateFormat?: string;\n  singleDatePicker?: boolean;\n  componentDisabled?: boolean;\n  label?: string;\n  placeholder?: string;\n  showRowNumber?: boolean;\n  availableRanges?: Record<string, any>;\n  showRanges?: boolean;\n  disableWeekends?: boolean;\n  disableWeekdays?: boolean;\n  retailCalendar?: boolean;\n  displayBeginDate?: boolean;\n  displayEndDate?: boolean;\n  ariaLabels?: AriaLabelsOptions;\n}\n\nexport interface Config extends Options, Settings {\n  selectedTimezone?: string;\n}\n\nexport interface DateRow {\n  rowNumber: string;\n  rowNumberText: string;\n  items: ActiveItemSide[];\n}\n\nexport interface RowVariables {\n  rowNumber: string;\n  columns: number;\n}\n\nexport interface RowItemVariables {\n  itemCount: number;\n  currentItemDate: string;\n  rowItemText: string;\n  firstDay: string;\n  lastDay: string;\n}\n\nexport interface RowOptions {\n  type: string;\n  monthStartWeekNumber: number;\n  dateRows: number;\n  year: string;\n  itemCount: number;\n}\n\nexport interface RowItemOptions {\n  type: string;\n  monthStartWeekNumber: number;\n  dateRows: number;\n  rowNumber: string;\n  yearStartDate: string;\n  year: number;\n  rowItem: number;\n  columns: number;\n}\n\nexport type DateRangeModel = { [key in CalendarType]?: Options };\n","import { Injectable } from \"@angular/core\";\nimport {\n  DEFAULT_DATE_FORMAT,\n  NgxDatetimeRangePickerConstants as Constants\n} from \"./ngx-datetime-range-picker.constants\";\nimport { getNotAvailableText, cloneDeep, isNil } from \"./ngx-datetime-range-picker.utils\";\nimport {\n  Options,\n  Settings,\n  CalendarSides,\n  State,\n  RowItemVariables,\n  RowItemOptions,\n  DateCharacteristics,\n  Config,\n  RowOptions,\n  CalendarTypes,\n  RowVariables,\n  CalendarType\n} from \"./interfaces\";\nimport { Moment } from \"moment\";\n\ndeclare let require: any;\nconst moment = require(\"moment\");\n\nconst DEFAULT_TIME_FORMAT = Constants.DEFAULT.TIME_FORMAT;\nconst MONTHS_AVAILABLE = Constants.CONSTANT.MONTHS_AVAILABLE;\nconst TZ_NAMES = Constants.CONSTANT.TZ_NAMES;\nconst DEFAULT_RANGES = Constants.DEFAULT.RANGES;\nconst MOMENT_CONVERSION_MAP = Constants.CONSTANT.MOMENT_CONVERSION_MAP;\n\n@Injectable({\n  providedIn: \"root\"\n})\nexport class NgxDatetimeRangePickerService {\n  getDefaultOptions(): Options {\n    return cloneDeep(Constants.DEFAULT.OPTIONS) as Options;\n  }\n\n  getDefaultSettings(): Settings {\n    return cloneDeep(Constants.DEFAULT.SETTINGS) as Settings;\n  }\n\n  getDefaultState(): State {\n    return cloneDeep(Constants.DEFAULT.STATE) as State;\n  }\n\n  checkSettingsValidity(settings: Settings) {\n    if (settings.type && !CalendarTypes.includes(settings.type as CalendarType)) {\n      const errMsg = `${settings.type} is an invalid calendar type. It should one of ${[...CalendarTypes]}`;\n      throw new Error(errMsg);\n    }\n  }\n\n  formatDateToDefaultFormat(date: string | number, format: string): string {\n    let formattedDate = null;\n    if (!date) {\n      return;\n    }\n\n    if (!isNaN(Number(date))) {\n      formattedDate = moment(date).format(DEFAULT_DATE_FORMAT);\n    } else {\n      formattedDate = moment(date, format).format(DEFAULT_DATE_FORMAT);\n    }\n\n    return formattedDate;\n  }\n\n  formatTimeToDefaultFormat(time: string) {\n    let formattedTime = null;\n    if (!time) {\n      return;\n    }\n\n    if (time.indexOf(\":\") > -1) {\n      if (time.indexOf(\"AM\") > -1 || time.indexOf(\"PM\") > -1) {\n        formattedTime = moment(time, \"h:mm A\").format(DEFAULT_TIME_FORMAT);\n      } else {\n        formattedTime = time;\n      }\n    } else {\n      console.warn(\n        `WARN_NGX_DATETIME_RANGE_PICKER:\n            The provided time is not in correct format.\n            Format: HH:mm or hh:mm A\n        `\n      );\n    }\n    return formattedTime;\n  }\n\n  getCalendarRowNumberText(type, number) {\n    return (() => {\n      switch (type) {\n        case \"daily\":\n          return `W${number}`;\n        case \"weekly\":\n          return \"\";\n        case \"monthly\":\n          return `Q${number}`;\n        case \"quarterly\":\n          return `${number}`;\n        case \"yearly\":\n          return \"\";\n      }\n    })();\n  }\n\n  createDefaultRanges(config: Config): object {\n    const ranges = {};\n    const type: string = config.type;\n    const maxDate: string = cloneDeep(config.maxDate) as string;\n\n    DEFAULT_RANGES[type].forEach((rangeInfo: { label: string; count: number }) => {\n      ranges[rangeInfo.label] = {\n        startDate: moment(maxDate, DEFAULT_DATE_FORMAT)\n          .subtract(rangeInfo.count, MOMENT_CONVERSION_MAP[type])\n          .format(DEFAULT_DATE_FORMAT),\n        endDate: maxDate\n      };\n    });\n\n    ranges[\"Custom Range\"] = { startDate: null, endDate: null };\n    return ranges;\n  }\n\n  getSanitizedDateArray(config: Config): string[] {\n    const sanitizedDateArray: string[] = [];\n    const type = config.type;\n    const dateArray = config.dateArray;\n    const inputDateFormat = config.inputDateFormat;\n\n    // dateArray can have nulls\n    dateArray.forEach((date) => {\n      if (!date) {\n        return;\n      }\n\n      let format: string = null;\n\n      if (isNaN(Number(date))) {\n        if (inputDateFormat) {\n          format = inputDateFormat;\n        } else {\n          format = moment(date)._f; // moment does not support this\n        }\n      }\n\n      if (inputDateFormat !== moment(date)._f) {\n        console.warn(\n          `ERR_NGX_DATETIME_RANGE_PICKER:\n              inputDateFormat !== dateFormat in dateArray.\n              Converted dates might not be as expected\n            `\n        );\n      }\n\n      const value: Moment = format ? moment(date, format) : moment(date);\n\n      if (value) {\n        const formattedDate = value.endOf(MOMENT_CONVERSION_MAP[type as string]).format(DEFAULT_DATE_FORMAT);\n        sanitizedDateArray.push(formattedDate);\n      } else {\n        console.warn(\n          `ERR_NGX_DATETIME_RANGE_PICKER:\n              dateArray values are in unknown format.\n              Pass the format or pass the dates in known format\n            `\n        );\n      }\n    });\n\n    return [...new Set(sanitizedDateArray)];\n  }\n\n  getNumberOfWeeks(date): number {\n    if (!date) {\n      return;\n    }\n\n    const monthStart: number = moment(date, DEFAULT_DATE_FORMAT)\n      .startOf(\"month\")\n      .day();\n    const monthEnd: number = Number(\n      moment(date, DEFAULT_DATE_FORMAT)\n        .endOf(\"month\")\n        .format(\"D\")\n    );\n    return Math.ceil((monthStart + monthEnd) / 7);\n  }\n\n  getYearlyWeekCount(year: string): number {\n    if (!year) {\n      return;\n    }\n\n    const yearStartDate: string = moment(year, \"YYYY\")\n      .startOf(\"year\")\n      .format(DEFAULT_DATE_FORMAT);\n    const yearEndDate: string = moment(year, \"YYYY\")\n      .endOf(\"year\")\n      .format(DEFAULT_DATE_FORMAT);\n    const yearEndWeekEndDate: string = moment(yearEndDate, DEFAULT_DATE_FORMAT)\n      .startOf(\"week\")\n      .format(DEFAULT_DATE_FORMAT);\n    const yearStartWeekEndDate: string = moment(yearStartDate, DEFAULT_DATE_FORMAT)\n      .endOf(\"week\")\n      .format(DEFAULT_DATE_FORMAT);\n\n    const yearStartWeekNumber: number = this.getWeekNumber(yearStartWeekEndDate) as number;\n    const yearEndWeekNumber: number = this.getWeekNumber(yearEndWeekEndDate) as number;\n\n    return yearEndWeekNumber - yearStartWeekNumber + 1;\n  }\n\n  getMonthsAvailable(minDate, maxDate, selectedYear): string[] {\n    const months: string[] = [];\n\n    if (!minDate || !maxDate || !selectedYear) {\n      return;\n    }\n\n    minDate = moment(minDate, DEFAULT_DATE_FORMAT).startOf(\"month\");\n    maxDate = moment(maxDate, DEFAULT_DATE_FORMAT).startOf(\"month\");\n\n    let minDatems: number = moment(minDate, DEFAULT_DATE_FORMAT).valueOf();\n    let maxDatems: number = moment(maxDate, DEFAULT_DATE_FORMAT).valueOf();\n    const yearStartms: number = moment()\n      .year(selectedYear)\n      .startOf(\"year\")\n      .valueOf();\n    const yearEndms: number = moment()\n      .year(selectedYear)\n      .endOf(\"year\")\n      .valueOf();\n\n    if (minDatems < yearStartms) {\n      minDatems = yearStartms;\n    }\n    if (maxDatems > yearEndms) {\n      maxDatems = yearEndms;\n    }\n\n    let minDateMonthNumber: number = moment(minDatems).month();\n    const diff: number = moment(maxDatems).diff(moment(minDatems), \"months\");\n    const maxMonths: number = diff < MONTHS_AVAILABLE.length ? diff : MONTHS_AVAILABLE.length;\n\n    for (let i = 0; i <= maxMonths; i++) {\n      if (minDateMonthNumber >= MONTHS_AVAILABLE.length) {\n        months.push(MONTHS_AVAILABLE[minDateMonthNumber - MONTHS_AVAILABLE.length]);\n      } else {\n        months.push(MONTHS_AVAILABLE[minDateMonthNumber]);\n      }\n      minDateMonthNumber++;\n    }\n\n    return months;\n  }\n\n  getYearsAvailable(config: Config): string[] {\n    const minDate: string | number = config ? config.minDate : \"\";\n    const maxDate: string | number = config ? config.maxDate : \"\";\n    const years: string[] = [];\n\n    if (minDate && maxDate) {\n      const minYear: number = Number(this.getSelectedYear(minDate));\n      const maxYear: number = Number(this.getSelectedYear(maxDate));\n      const diff = maxYear - minYear;\n\n      for (let i = 0; i <= diff; i++) {\n        years.push(`${minYear + i}`);\n      }\n    }\n    return years.reverse();\n  }\n\n  isDateAvailable(\n    date: number,\n    minDate: number,\n    maxDate: number,\n    startDate: number,\n    endDate: number,\n    monthStartDate: number,\n    monthEndDate: number,\n    config: Config\n  ): boolean {\n    let available = false;\n    const type: string = config.type;\n    const disableWeekends: boolean = config.disableWeekends;\n    const disableWeekdays: boolean = config.disableWeekdays;\n\n    if (type === \"daily\") {\n      minDate = minDate > monthStartDate ? minDate : monthStartDate;\n      maxDate = maxDate < monthEndDate ? maxDate : monthEndDate;\n    }\n\n    if (date >= minDate && date <= maxDate) {\n      available = true;\n\n      if (available) {\n        if (disableWeekends) {\n          available = !this.isWeekend(date);\n        }\n        if (disableWeekdays) {\n          available = !this.isWeekday(date);\n        }\n        if (config.dateArray.length) {\n          available = this.isInDateArray(date, config.dateArray, DEFAULT_DATE_FORMAT);\n        }\n      }\n    }\n    return available;\n  }\n\n  isDateInRange(\n    date: number,\n    minDate: number,\n    maxDate: number,\n    startDate: number,\n    endDate: number,\n    monthStartDate: number,\n    monthEndDate: number,\n    available: boolean,\n    config: Config\n  ): boolean {\n    let inRange = false;\n    const type: string = config.type;\n    const singleDatePicker: boolean = config.singleDatePicker;\n\n    if (!singleDatePicker) {\n      if (type === \"daily\") {\n        minDate = monthStartDate;\n        maxDate = monthEndDate;\n      }\n      if (date >= startDate && date <= endDate && date >= minDate && date <= maxDate) {\n        if (available) {\n          inRange = true;\n        }\n      }\n    }\n    return inRange;\n  }\n\n  isDateActive(date: number, startDate: number, endDate: number, side: string): boolean {\n    return (date === startDate && side === \"left\") || (date === endDate && side === \"right\");\n  }\n\n  isDateToday(dateMs: number, config): boolean {\n    const todayDate: string = moment().format(DEFAULT_DATE_FORMAT);\n    const type: string = config.type;\n    const { firstDay, lastDay } = this.getFirstLastDay(todayDate, type);\n    const firstDayMs: number = moment(firstDay, DEFAULT_DATE_FORMAT).valueOf();\n    const lastDayMs: number = moment(lastDay, DEFAULT_DATE_FORMAT).valueOf();\n    return dateMs >= firstDayMs && dateMs <= lastDayMs;\n  }\n\n  isWeekday(date: number, format?: string): boolean {\n    return !this.isWeekend(date, format);\n  }\n\n  isWeekend(date: number, format?: string): boolean {\n    if (!format) {\n      format = null;\n    }\n    const day = moment(date, format).day();\n    return day === 0 || day === 6;\n  }\n\n  isInDateArray(date: number, dateArray: any[], format?: string): boolean {\n    if (!format) {\n      format = null;\n    }\n    return dateArray.find((d) => moment(d, format).valueOf() === date) !== undefined;\n  }\n\n  getCalendarRowVariables(options: RowOptions): RowVariables {\n    const variables: RowVariables = {\n      rowNumber: \"\",\n      columns: 0\n    };\n    const type: string = options.type;\n    const monthStartWeekNumber: number = options.monthStartWeekNumber;\n    const dateRows: number = options.dateRows;\n    const year = `${options.year}`;\n\n    if (type === \"daily\") {\n      variables.rowNumber = `${monthStartWeekNumber + dateRows}`;\n      variables.columns = 6;\n    } else if (type === \"weekly\") {\n      variables.rowNumber = ``;\n      variables.columns = 6;\n    } else if (type === \"monthly\") {\n      variables.rowNumber = `${dateRows + 1}`;\n      variables.columns = 2;\n    } else if (type === \"quarterly\") {\n      variables.rowNumber = year.charAt(dateRows);\n      variables.columns = 0;\n    } else if (type === \"yearly\") {\n      variables.rowNumber = \"\";\n      variables.columns = 0;\n    }\n\n    return variables;\n  }\n\n  getCalendarRowItemVariables(options: RowItemOptions): RowItemVariables {\n    const { type, monthStartWeekNumber, yearStartDate, year, rowItem, dateRows, columns } = options;\n\n    const itemCount: number = rowItem + dateRows * columns + dateRows;\n    let currentItemDate = \"\";\n    let rowItemText = \"\";\n\n    if (type === \"daily\") {\n      if (!isNil(monthStartWeekNumber) && !isNil(dateRows) && !isNil(year)) {\n        const yearStartDateDaily = moment()\n          .year(year)\n          .startOf(\"year\")\n          .format(DEFAULT_DATE_FORMAT);\n        currentItemDate = moment(yearStartDateDaily, DEFAULT_DATE_FORMAT)\n          .add(monthStartWeekNumber + dateRows - 1, \"week\")\n          .startOf(\"week\")\n          .add(rowItem, \"day\")\n          .format(DEFAULT_DATE_FORMAT);\n        rowItemText = moment(currentItemDate, DEFAULT_DATE_FORMAT).format(\"D\");\n      }\n    } else if (type === \"weekly\") {\n      if (!isNil(yearStartDate) && !isNil(itemCount)) {\n        currentItemDate = moment(yearStartDate, DEFAULT_DATE_FORMAT)\n          .add(itemCount, \"week\")\n          .endOf(\"week\")\n          .format(DEFAULT_DATE_FORMAT);\n        const weekNumber: any = itemCount + 1;\n        rowItemText = `W${weekNumber}`;\n      }\n    } else if (type === \"monthly\") {\n      if (!isNil(itemCount) && !isNil(year)) {\n        currentItemDate = moment()\n          .year(year)\n          .month(itemCount)\n          .endOf(\"month\")\n          .format(DEFAULT_DATE_FORMAT);\n        rowItemText = moment(currentItemDate, DEFAULT_DATE_FORMAT).format(\"MMM\");\n      }\n    } else if (type === \"quarterly\") {\n      if (!isNil(itemCount) && !isNil(year)) {\n        currentItemDate = moment()\n          .year(year)\n          .quarter(itemCount + 1)\n          .endOf(\"quarter\")\n          .format(DEFAULT_DATE_FORMAT);\n        rowItemText = `Quarter ${itemCount + 1}`;\n      }\n    }\n\n    const { firstDay, lastDay } = this.getFirstLastDay(currentItemDate, type);\n\n    return {\n      itemCount,\n      currentItemDate,\n      rowItemText,\n      firstDay,\n      lastDay\n    };\n  }\n\n  isRowIemValid(options: RowOptions): boolean {\n    let valid = false;\n    const type: string = options.type;\n    const year: string = options.year;\n    const itemCount: number = options.itemCount;\n    const validWeekCount: number = this.getYearlyWeekCount(year);\n\n    if (type === \"daily\") {\n      valid = true;\n    } else if (type === \"weekly\") {\n      if (itemCount < validWeekCount) {\n        valid = true;\n      }\n    } else if (type === \"monthly\") {\n      valid = true;\n    } else if (type === \"quarterly\") {\n      valid = true;\n    }\n\n    return valid;\n  }\n\n  formatStartDate(config: Config, returnFormat: string): string {\n    const startDate: string | number = config ? config.startDate : null;\n    const type: string = config ? config.type : \"\";\n    let formattedStartDate: string = null;\n\n    if (startDate) {\n      formattedStartDate = moment(startDate, DEFAULT_DATE_FORMAT)\n        .startOf(MOMENT_CONVERSION_MAP[type])\n        .format(returnFormat);\n    }\n\n    return formattedStartDate;\n  }\n\n  getSelectedYear(date: string | number): number {\n    return moment(date, DEFAULT_DATE_FORMAT).format(\"YYYY\");\n  }\n\n  getFirstLastDay(date: string, type: string): { firstDay: string; lastDay: string } {\n    let firstDay = \"\";\n    let lastDay = \"\";\n\n    if (type === \"daily\") {\n      firstDay = lastDay = date;\n    } else if (type === \"weekly\") {\n      firstDay = moment(date, DEFAULT_DATE_FORMAT)\n        .startOf(\"week\")\n        .format(DEFAULT_DATE_FORMAT);\n      lastDay = moment(date, DEFAULT_DATE_FORMAT)\n        .endOf(\"week\")\n        .format(DEFAULT_DATE_FORMAT);\n    } else if (type === \"monthly\") {\n      firstDay = moment(date, DEFAULT_DATE_FORMAT)\n        .startOf(\"month\")\n        .format(DEFAULT_DATE_FORMAT);\n      lastDay = moment(date, DEFAULT_DATE_FORMAT)\n        .endOf(\"month\")\n        .format(DEFAULT_DATE_FORMAT);\n    } else if (type === \"quarterly\") {\n      firstDay = moment(date, DEFAULT_DATE_FORMAT)\n        .startOf(\"quarter\")\n        .format(DEFAULT_DATE_FORMAT);\n      lastDay = moment(date, DEFAULT_DATE_FORMAT)\n        .endOf(\"quarter\")\n        .format(DEFAULT_DATE_FORMAT);\n    } else if (type === \"yearly\") {\n      firstDay = moment(date, DEFAULT_DATE_FORMAT)\n        .startOf(\"year\")\n        .format(DEFAULT_DATE_FORMAT);\n      lastDay = moment(date, DEFAULT_DATE_FORMAT)\n        .endOf(\"year\")\n        .format(DEFAULT_DATE_FORMAT);\n    }\n\n    return { firstDay, lastDay };\n  }\n\n  getZoneDate(tz: string, format: string, date?: string): Moment {\n    let _date: number = moment().valueOf();\n\n    if (date) {\n      _date = moment(date, format)\n        .startOf(\"day\")\n        .valueOf();\n    }\n\n    const today = new Date(_date).toLocaleString(\"en-US\", {\n      timeZone: TZ_NAMES[tz]\n    });\n\n    return moment(today, \"MM/DD/YYYY, hh:mm:ss A\");\n  }\n\n  getZoneToday(tz: string, viewDateFormat: string): string {\n    const today: Moment = this.getZoneDate(tz, viewDateFormat);\n    return moment(today).format(`${viewDateFormat}  hh:mm A`);\n  }\n\n  formatToZoneDate(tz: string, format: string, date: string): string {\n    const formattedDate: Moment = this.getZoneDate(tz, format, date);\n    return moment(formattedDate).format(`${format}`);\n  }\n\n  convertToViewTimeItem(item: string | number): string {\n    let stringified_item = item + \"\";\n    if (stringified_item.length === 1) {\n      stringified_item = `0${stringified_item}`;\n    }\n    return stringified_item;\n  }\n\n  getWeekNumber(date: string): string | number {\n    if (date) {\n      const year: number = moment(date, \"YYYY-MM-DD\").year();\n      const month: number = moment(date, \"YYYY-MM-DD\").month();\n      const day: number = Number(moment(date, \"YYYY-MM-DD\").format(\"D\"));\n\n      const yearStartms: Date = new Date(year, 0, 1);\n      const datems: Date = new Date(year, month, day);\n      return Math.ceil(((datems.getTime() - yearStartms.getTime()) / 86400000 + yearStartms.getDay() + 1) / 7);\n    } else {\n      console.warn(`\n        WARN_NGX_DATETIME_RANGE_PICKER | getWeekNumber:\n        Invalid date\n      `);\n      return getNotAvailableText();\n    }\n  }\n\n  iterateOverDateObj(dates: CalendarSides, func) {\n    for (const side in dates) {\n      if (side) {\n        const sideDates = dates[side];\n        sideDates.itemRows.forEach((rows) => {\n          rows.items.forEach((rowItem) => {\n            func(rowItem);\n          });\n        });\n      }\n    }\n  }\n\n  getCalendarColspan(type: string): number {\n    if (type === \"daily\") {\n      return 6;\n    } else if (type === \"weekly\") {\n      return 8;\n    } else if (type === \"monthly\") {\n      return 3;\n    } else if (type === \"quarterly\") {\n      return 1;\n    } else if (type === \"yearly\") {\n      return 1;\n    }\n  }\n\n  getCalendarRowItemColspan(type: string): number {\n    if (type === \"monthly\") {\n      return 3;\n    } else if (type === \"quarterly\") {\n      return 6;\n    } else if (type === \"yearly\") {\n      return 6;\n    }\n  }\n\n  getDateCharacteristics(config: Config, state: State, date: string, month: string, side: string): DateCharacteristics {\n    const currentDate: number = moment(date, DEFAULT_DATE_FORMAT)\n      .startOf(\"day\")\n      .valueOf();\n\n    let _date: string = this.formatDateToDefaultFormat(config.minDate, DEFAULT_DATE_FORMAT);\n    const minDate: number = moment(_date, DEFAULT_DATE_FORMAT)\n      .startOf(\"day\")\n      .valueOf();\n\n    _date = this.formatDateToDefaultFormat(config.maxDate, DEFAULT_DATE_FORMAT);\n    const maxDate: number = moment(_date, DEFAULT_DATE_FORMAT)\n      .startOf(\"day\")\n      .valueOf();\n\n    _date = this.formatDateToDefaultFormat(config.startDate, DEFAULT_DATE_FORMAT);\n    const startDate: number = moment(_date, DEFAULT_DATE_FORMAT)\n      .startOf(\"day\")\n      .valueOf();\n\n    _date = this.formatDateToDefaultFormat(config.endDate, DEFAULT_DATE_FORMAT);\n    const endDate: number = moment(_date, DEFAULT_DATE_FORMAT)\n      .startOf(\"day\")\n      .valueOf();\n\n    const currentMonthStartDate: number = moment(month, \"MMM YYYY\")\n      .startOf(\"month\")\n      .startOf(\"day\")\n      .valueOf();\n    const currentMonthEndDate: number = moment(month, \"MMM YYYY\")\n      .endOf(\"month\")\n      .startOf(\"day\")\n      .valueOf();\n\n    const available: boolean = this.isDateAvailable(\n      currentDate,\n      minDate,\n      maxDate,\n      startDate,\n      endDate,\n      currentMonthStartDate,\n      currentMonthEndDate,\n      config\n    );\n    const inRange: boolean = this.isDateInRange(\n      currentDate,\n      minDate,\n      maxDate,\n      startDate,\n      endDate,\n      currentMonthStartDate,\n      currentMonthEndDate,\n      available,\n      config\n    );\n    const active: boolean = this.isDateActive(currentDate, startDate, endDate, side);\n    const today: boolean = this.isDateToday(currentDate, config);\n\n    // Active\n    if (currentDate === startDate && side === \"left\") {\n      state.activeStartDate = date;\n    } else if (currentDate === endDate && side === \"right\") {\n      state.activeEndDate = date;\n    }\n\n    return { available, inRange, active, today };\n  }\n\n  getLabelProps(\n    state: State,\n    calendarType: string,\n    side: string\n  ): { label: string; labelFormat: string; type: string } {\n    let label: string, labelFormat: string, type: string;\n\n    if (calendarType === \"daily\") {\n      label = `${state.selectedMonth[side]} ${state.selectedYear[side]}`;\n      labelFormat = \"MMM YYYY\";\n      type = \"month\";\n    } else {\n      label = `${state.selectedYear[side]}`;\n      labelFormat = \"YYYY\";\n      type = \"year\";\n    }\n\n    return { label, labelFormat, type };\n  }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n/**\n * Iterate over {key: value}\n * Returns the keys of the object\n * Usage:\n *    let objKey of obj | ObjNgFor\n * Example:\n *    let obj = {a: 1, b: 2};\n *    *ngFor=\"let key of obj | ObjNgFor\"\n *    {{keys}}: {{obj[key]}}\n */\n\n@Pipe({\n  name: \"ObjNgFor\",\n  pure: false,\n  standalone: false\n})\nexport class ObjNgFor implements PipeTransform {\n  public transform(value: any): any {\n    return Object.keys(value); // .map(key => value[key]);\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n  Renderer2\n} from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport {\n  DEFAULT_DATE_FORMAT,\n  NgxDatetimeRangePickerConstants as Constants\n} from \"./ngx-datetime-range-picker.constants\";\nimport { NgxDatetimeRangePickerService } from \"./ngx-datetime-range-picker.service\";\nimport { cloneDeep, isEmpty, mergeDeep, isNil } from \"./ngx-datetime-range-picker.utils\";\nimport {\n  Options,\n  Settings,\n  State,\n  RowItemVariables,\n  RowOptions,\n  RowItemOptions,\n  DateSide,\n  ActiveItemSide,\n  DateCharacteristics,\n  DateRangeModel,\n  Config,\n  TimeSide,\n  DateRow,\n  RowVariables,\n  DateTimeRangeChangeOutput,\n  DateTimeRangeModelChangeOutput\n} from \"./interfaces\";\n\ndeclare let require: any;\nconst moment = require(\"moment\");\n\nenum InputFocusBlur {\n  focus = 1,\n  blur = 2\n}\n\nconst DEFAULT_TIME_FORMAT = Constants.DEFAULT.TIME_FORMAT;\nconst USA_TZ_CODE = Constants.CONSTANT.USA_TZ_CODE;\n\n@Component({\n  selector: \"ngx-datetime-range-picker\",\n  templateUrl: \"./ngx-datetime-range-picker.component.html\",\n  styleUrls: [\"./ngx-datetime-range-picker.component.scss\"],\n  encapsulation: ViewEncapsulation.None,\n  standalone: false\n})\nexport class NgxDatetimeRangePickerComponent implements OnChanges {\n  @Input() options: Options;\n  @Input() settings: Settings;\n  @Input() optionService: Observable<any>;\n  @Input() dateRangeModel: Options | DateRangeModel;\n  @Input() canBeEmpty = false;\n  @Output() dateRangeModelChange: EventEmitter<Options | DateRangeModel> = new EventEmitter<Options | DateRangeModel>();\n  @Output() dateRangeChanged: EventEmitter<Options> = new EventEmitter<Options>();\n  @Output() inputFocusBlur: EventEmitter<object> = new EventEmitter<object>();\n  @Output() selectedDate: EventEmitter<Options> = new EventEmitter<Options>();\n  @ViewChild(\"filterInputBox\", { static: false }) filterInputBox: any;\n\n  state: State;\n\n  config: Config;\n\n  constructor(public element: ElementRef, private renderer: Renderer2, private service: NgxDatetimeRangePickerService) {\n    this.state = this.service.getDefaultState();\n    this.options = this.service.getDefaultOptions();\n    this.settings = this.service.getDefaultSettings();\n    this.config = Object.assign(this.options, this.settings);\n\n    this.state.todayTime = this.service.getZoneToday(this.state.selectedTimezone, this.config.viewDateFormat);\n\n    this.renderer.listen(\"document\", \"click\", (event: MouseEvent) => {\n      if (\n        this.state.isCalendarVisible &&\n        <HTMLElement>event.target &&\n        !(<HTMLElement>event.target).parentElement.getElementsByClassName(\"ngx-datetime-range-picker-select-panel\")\n          .length &&\n        !(<HTMLElement>event.target).closest(\".mat-mdc-option\") &&\n        this.element.nativeElement !== event.target &&\n        !this.element.nativeElement.contains(event.target)\n      ) {\n        this.onCalendarClose();\n      }\n    });\n  }\n\n  public ngOnChanges(changes: SimpleChanges) {\n    const { canBeEmpty, settings, dateRangeModel, optionService, options } = changes;\n\n    if (canBeEmpty) {\n      this.canBeEmpty = canBeEmpty.currentValue;\n    }\n\n    if (settings) {\n      this.service.checkSettingsValidity(settings.currentValue as Settings);\n      this.settings = mergeDeep(this.settings, settings.currentValue);\n    }\n\n    if (dateRangeModel) {\n      this.dateRangeModel = dateRangeModel.currentValue;\n    }\n\n    if (dateRangeModel && !dateRangeModel.firstChange) {\n      const previousValue = dateRangeModel.previousValue[this.config.type];\n      const currentValue = dateRangeModel.currentValue[this.config.type];\n      if (\n        previousValue &&\n        currentValue &&\n        previousValue.startDate === currentValue.startDate &&\n        previousValue.endDate === currentValue.endDate\n      ) {\n        return;\n      }\n    }\n\n    if (optionService && optionService.currentValue) {\n      optionService.currentValue.subscribe(\n        (dateOptions: any) => {\n          if (typeof dateOptions === \"object\" && !Array.isArray(dateOptions)) {\n            this.options = dateOptions.plain ? dateOptions.plain() : dateOptions;\n          }\n        },\n        (err) => {\n          console.error(`ERR_NGX_DATETIME_RANGE_PICKER:\n            Filter Call Failure:\n            ${err}\n          `);\n        },\n        () => {\n          this.init();\n        }\n      );\n    }\n\n    if (options) {\n      this.options = options ? options.currentValue : this.options;\n    }\n\n    if (!optionService) {\n      this.init();\n    }\n  }\n\n  // Events\n  onDateRangeInputChange() {\n    this.dateRangeSelected();\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.config.componentDisabled = disabled;\n  }\n\n  onComponentClick(): void {\n    this.state.isCalendarVisible = !this.state.isCalendarVisible;\n  }\n\n  onFocusInput(event: MouseEvent | FocusEvent): void {\n    this.inputFocusBlur.emit({\n      reason: InputFocusBlur.focus,\n      value: (<HTMLInputElement>event.target).value\n    });\n  }\n\n  onBlurInput(event: MouseEvent | FocusEvent): void {\n    const value = (<HTMLInputElement>event.target).value;\n    this.state.selectedDateText = value;\n    this.inputFocusBlur.emit({\n      reason: InputFocusBlur.blur,\n      value\n    });\n  }\n\n  onCalendarClose(): void {\n    if (this.config.startDate && this.config.endDate) {\n      if (this.filterInputBox) {\n        this.filterInputBox.nativeElement.classList.remove(\"empty-filter\");\n      }\n      this.state.isCalendarVisible = false;\n    } else {\n      // this.filterInputBox.nativeElement.classList.add('empty-filter');\n    }\n  }\n\n  isPrevAvailable(side): boolean {\n    const { label, labelFormat, type } = this.service.getLabelProps(this.state, this.config.type, side);\n\n    return (\n      moment(label, labelFormat)\n        .startOf(type)\n        .valueOf() >\n      moment(this.config.minDate, DEFAULT_DATE_FORMAT)\n        .startOf(type)\n        .valueOf()\n    );\n  }\n\n  isNextAvailable(side): boolean {\n    const { label, labelFormat, type } = this.service.getLabelProps(this.state, this.config.type, side);\n\n    return (\n      moment(label, labelFormat)\n        .endOf(type)\n        .valueOf() <\n      moment(this.config.maxDate, DEFAULT_DATE_FORMAT)\n        .endOf(type)\n        .valueOf()\n    );\n  }\n\n  getCalendarColspan() {\n    return this.service.getCalendarColspan(this.config.type);\n  }\n\n  getCalendarRowItemColspan() {\n    return this.service.getCalendarRowItemColspan(this.config.type);\n  }\n\n  onClickPrevious(side: string) {\n    const { label, labelFormat, type } = this.service.getLabelProps(this.state, this.config.type, side);\n    const startDate = moment(label, labelFormat)\n      .subtract(1, type)\n      .startOf(type)\n      .format(DEFAULT_DATE_FORMAT);\n\n    this.state.dates[side] = this.generateCalendar(startDate, side);\n  }\n\n  onClickNext(side: string) {\n    const { label, labelFormat, type } = this.service.getLabelProps(this.state, this.config.type, side);\n    const endDate = moment(label, labelFormat)\n      .add(1, type)\n      .endOf(type)\n      .format(DEFAULT_DATE_FORMAT);\n\n    this.state.dates[side] = this.generateCalendar(endDate, side);\n  }\n\n  onCellClick(item: DateCharacteristics, itemCell, side: string) {\n    const date: number = moment(item.date, DEFAULT_DATE_FORMAT).valueOf();\n    const startDate: number = moment(this.config.startDate, DEFAULT_DATE_FORMAT).valueOf();\n    const endDate: number = moment(this.config.endDate, DEFAULT_DATE_FORMAT).valueOf();\n    const minDate: number = moment(this.config.minDate, DEFAULT_DATE_FORMAT).valueOf();\n    const maxDate: number = moment(this.config.maxDate, DEFAULT_DATE_FORMAT).valueOf();\n\n    if (!item.available) {\n      if (date < minDate || date > maxDate) {\n        return;\n      }\n      this.state.dates[side] = this.generateCalendar(item.date, side);\n    }\n\n    if (endDate || date < startDate) {\n      this.config.endDate = null;\n      this.config.startDate = item.date;\n      this.state.activeItem.left = item;\n      // eslint-disable-next-line no-dupe-else-if\n    } else if (!endDate && date < startDate) {\n      this.config.endDate = cloneDeep(this.config.startDate) as string;\n      this.state.activeItem.right = item;\n    } else {\n      this.config.endDate = item.date;\n      this.state.activeItem.right = item;\n    }\n\n    if (this.config.singleDatePicker) {\n      this.config.endDate = cloneDeep(this.config.startDate) as string;\n      this.state.activeItem.right = this.state.activeItem.left = item;\n    }\n\n    this.doApply();\n  }\n\n  onCellMouseEnter(item: DateCharacteristics, itemCell, side: string) {\n    if (!item.available) {\n      return;\n    }\n\n    const date: number = moment(item.date, DEFAULT_DATE_FORMAT).valueOf();\n    const startDate: number = moment(this.config.startDate, DEFAULT_DATE_FORMAT).valueOf();\n    const endDate: number = moment(this.config.endDate, DEFAULT_DATE_FORMAT).valueOf();\n    const hoverItemText: string = itemCell ? itemCell.innerText : \"\";\n    let hoverItemFirstDate: string = itemCell ? itemCell.getAttribute(\"firstDay\") : \"\";\n    let hoverItemLastDate: string = itemCell ? itemCell.getAttribute(\"lastDay\") : \"\";\n\n    hoverItemFirstDate = moment(hoverItemFirstDate, DEFAULT_DATE_FORMAT).format(this.config.viewDateFormat);\n    hoverItemLastDate = moment(hoverItemLastDate, DEFAULT_DATE_FORMAT).format(this.config.viewDateFormat);\n\n    let activeItemInputFieldText = `${hoverItemText} (${hoverItemFirstDate} - ${hoverItemLastDate})`;\n\n    if (this.config.type === \"daily\") {\n      activeItemInputFieldText = `${hoverItemLastDate}`;\n    }\n\n    if (!endDate) {\n      const func = (rowItem) => {\n        if (rowItem.available) {\n          const hoverItemDate = rowItem.date ? moment(rowItem.date, DEFAULT_DATE_FORMAT).valueOf() : rowItem.date;\n          if ((hoverItemDate > startDate && hoverItemDate < date) || date === hoverItemDate) {\n            rowItem.inRange = true;\n            this.state.dateTitleText.right = activeItemInputFieldText;\n          }\n        }\n      };\n\n      this.service.iterateOverDateObj(this.state.dates, func.bind(this));\n    } else {\n      // if (this.config.singleDatePicker) {\n      //   this.state.dateTitleText.right = activeItemInputFieldText;\n      // } else {\n      //   this.state.dateTitleText.left = activeItemInputFieldText;\n      // }\n      this.state.dateTitleText[side] = activeItemInputFieldText;\n    }\n  }\n\n  onCellMouseLeave() {\n    if (!this.config.endDate) {\n      const func = (rowItem) => {\n        rowItem.inRange = false;\n      };\n      this.service.iterateOverDateObj(this.state.dates, func.bind(this));\n    } else {\n      this.updateActiveItemInputField();\n    }\n  }\n\n  onRangeClick(rangeLabel: string, dateRangeModel: Options) {\n    this.state.activeRange = rangeLabel;\n    if (rangeLabel === \"Custom Range\") {\n      this.state.customRange = true;\n    } else {\n      this.state.customRange = false;\n      this.config.startDate = dateRangeModel.startDate;\n      this.config.endDate = dateRangeModel.endDate;\n      if (this.config.timePicker) {\n        this.state.times = {};\n      }\n      this.setActiveItemOnRangeClick();\n    }\n  }\n\n  updateCalendar() {\n    this.state.sides.length = 0;\n    this.state.dates = {};\n    // takes 223 milliSeconds\n    // Order is important left - right\n    if (!this.config.singleDatePicker) {\n      this.state.sides.push(\"left\");\n      this.state.dates.left = this.generateCalendar(this.config.startDate, \"left\");\n      if (this.config.timePicker) {\n        this.state.times.left = this.generateTimePicker(this.config.startTime, \"left\");\n      }\n    }\n    this.state.sides.push(\"right\");\n    this.state.dates.right = this.generateCalendar(this.config.endDate, \"right\");\n    if (this.config.timePicker) {\n      this.state.times.right = this.generateTimePicker(this.config.endTime, \"right\");\n    }\n  }\n\n  onCalendarLabelChange(label: string, side: string, type: string) {\n    this.state.isCalendarVisible = true;\n    if (type === \"month\") {\n      this.state.selectedMonth[side] = label;\n    } else if (type === \"year\") {\n      this.state.selectedYear[side] = label;\n    }\n\n    if (this.config.type !== \"daily\") {\n      this.state.selectedMonth[side] = \"Jun\";\n    }\n\n    if (this.config.type !== \"yearly\") {\n      const selectedMonth = `${this.state.selectedMonth[side]} ${this.state.selectedYear[side]}`;\n      const date: string = moment(selectedMonth, \"MMM YYYY\")\n        .startOf(\"month\")\n        .format(DEFAULT_DATE_FORMAT);\n      this.state.dates[side] = this.generateCalendar(date, side);\n    } else {\n      if (this.state.selectedYear.left <= this.state.selectedYear.right && side === \"right\") {\n        this.config.startDate = moment(this.state.selectedYear.left, \"YYYY\")\n          .startOf(\"year\")\n          .format(DEFAULT_DATE_FORMAT);\n        this.config.endDate = moment(this.state.selectedYear.right, \"YYYY\")\n          .endOf(\"year\")\n          .format(DEFAULT_DATE_FORMAT);\n\n        this.doApply();\n      }\n      const config = {\n        startDate: moment(this.state.selectedYear.left, \"YYYY\")\n          .startOf(\"year\")\n          .format(DEFAULT_DATE_FORMAT),\n        type: \"yearly\"\n      };\n      const startDate: string = this.service.formatStartDate(config, this.config.viewDateFormat);\n      const endDate: string = this.config.endDate\n        ? moment(this.config.endDate, DEFAULT_DATE_FORMAT).format(this.config.viewDateFormat)\n        : \"\";\n      this.state.dateTitleText.left = `${startDate}`;\n      this.state.dateTitleText.right = `${endDate}`;\n    }\n  }\n\n  onTimeLabelChange(timeItem: string, side: string, item: string) {\n    let time = null;\n    if (side === \"left\") {\n      time = this.config.startTime.split(\":\");\n      if (timeItem === \"hour\") {\n        this.config.startTime = `${item}:${time[1]}`;\n      } else {\n        this.config.startTime = `${time[0]}:${item}`;\n      }\n\n      const startDateEpoch: number = moment(this.config.startDate, DEFAULT_DATE_FORMAT).valueOf();\n      const endDateEpoch: number = moment(this.config.endDate, DEFAULT_DATE_FORMAT).valueOf();\n      if (startDateEpoch === endDateEpoch) {\n        this.state.times.right = this.generateTimePicker(this.config.startTime, \"right\");\n      }\n    } else {\n      time = this.config.endTime.split(\":\");\n      if (timeItem === \"hour\") {\n        this.config.endTime = `${item}:${time[1]}`;\n      } else {\n        this.config.endTime = `${time[0]}:${item}`;\n      }\n    }\n\n    if (timeItem === \"hour\") {\n      this.state.selectedHour[side] = this.service.convertToViewTimeItem(item);\n    } else {\n      this.state.selectedMinute[side] = this.service.convertToViewTimeItem(item);\n    }\n  }\n\n  onTimeApply() {\n    this.dateRangeSelected();\n    this.updateInputField();\n  }\n\n  // Helpers\n  init() {\n    this.state.isValidFilter = false;\n    if (!this.config) {\n      this.config = Object.assign(this.service.getDefaultOptions(), this.service.getDefaultSettings());\n    }\n    this.initialize();\n    this.parseOptions();\n    this.updateInputField();\n  }\n\n  initialize() {\n    this.state = this.service.getDefaultState();\n  }\n\n  parseOptions() {\n    if (this.options !== undefined) {\n      Object.keys(this.options).forEach((k) => {\n        if (!isNil(this.options[k])) {\n          this.config[k] = this.options[k];\n        } else {\n          console.warn(`WARN_NGX_DATETIME_RANGE_PICKER:\n            'options.${k}' is undefined or null. Setting default value.\n          `);\n        }\n      });\n    }\n    if (this.settings !== undefined) {\n      Object.keys(this.settings).forEach((k) => {\n        if (!isNil(this.settings[k])) {\n          this.config[k] = this.settings[k];\n        } else {\n          console.warn(`WARN_NGX_DATETIME_RANGE_PICKER:\n            'settings.${k}' is undefined or null. Setting default value.\n          `);\n        }\n      });\n    }\n\n    // check if inputDateFormat is provided\n    if (!this.config.inputDateFormat) {\n      console.warn(`WARN_NGX_DATETIME_RANGE_PICKER:\n        'inputDateFormat' is required to convert dates.\n        'inputDateFormat' not provided. Setting it to YYYY-MM-DD.\n      `);\n      this.config.inputDateFormat = DEFAULT_DATE_FORMAT;\n    }\n\n    if (this.config.type === \"weekly\" || this.config.type === \"yearly\") {\n      this.config.showRowNumber = false;\n    }\n    if (this.config.singleDatePicker) {\n      this.config.startDate = cloneDeep(this.config.endDate) as string;\n    }\n\n    this.selectTimeZone();\n    this.parseOptionsToDefaultDateFormat();\n    this.processDateRangeModel();\n    this.sanitizeDates();\n    this.processRanges();\n    this.doDateRangeModelChange();\n    this.updateCalendar();\n  }\n\n  selectTimeZone() {\n    if (this.config.timezoneSupport) {\n      if (!this.config.defaultTimezone) {\n        this.config.defaultTimezone = USA_TZ_CODE;\n      }\n      this.state.selectedTimezone = this.config.defaultTimezone;\n    }\n\n    if (this.config.useLocalTimezone) {\n      this.state.selectedTimezone = this.state.localTimezone;\n    }\n    this.onTimezoneChange(this.state.selectedTimezone);\n  }\n\n  parseOptionsToDefaultDateFormat() {\n    this.config.minDate = this.service.formatDateToDefaultFormat(this.config.minDate, this.config.inputDateFormat);\n    this.config.maxDate = this.service.formatDateToDefaultFormat(this.config.maxDate, this.config.inputDateFormat);\n    this.config.startDate = this.service.formatDateToDefaultFormat(this.config.startDate, this.config.inputDateFormat);\n    this.config.endDate = this.service.formatDateToDefaultFormat(this.config.endDate, this.config.inputDateFormat);\n\n    if (this.config.timePicker) {\n      this.config.minTime = this.service.formatTimeToDefaultFormat(this.config.minTime);\n      this.config.maxTime = this.service.formatTimeToDefaultFormat(this.config.maxTime);\n      this.config.startTime = this.service.formatTimeToDefaultFormat(this.config.startTime);\n      this.config.endTime = this.service.formatTimeToDefaultFormat(this.config.endTime);\n    }\n  }\n\n  /**\n   * @desc sets startDate, endDate\n   */\n  processDateRangeModel() {\n    if (undefined === this.dateRangeModel || isEmpty(this.dateRangeModel)) {\n      return;\n    }\n\n    if (!this.dateRangeModel[this.config.type]) {\n      const _optionsKeys: string[] = Object.keys(this.service.getDefaultOptions());\n      const _model = {};\n      Object.keys(this.dateRangeModel).forEach((key: string) => {\n        if (_optionsKeys.includes(key)) {\n          _model[key] = this.dateRangeModel[key];\n          delete this.dateRangeModel[key];\n        }\n      });\n      this.dateRangeModel[this.config.type] = _model;\n      if (!this.dateRangeModel[this.config.type]) {\n        return;\n      }\n    }\n\n    this.config.dateArray = this.dateRangeModel[this.config.type].dateArray || this.config.dateArray;\n\n    this.handleDateArray();\n\n    if (this.config.dateArray.length) {\n      if (!this.dateRangeModel[this.config.type].minDate) {\n        this.dateRangeModel[this.config.type].minDate = this.config.dateArray[0] || this.config.minDate;\n      }\n      if (!this.dateRangeModel[this.config.type].maxDate) {\n        this.dateRangeModel[this.config.type].maxDate =\n          this.config.dateArray[this.config.dateArray.length - 1] || this.config.maxDate;\n      }\n      if (!this.dateRangeModel[this.config.type].startDate) {\n        this.dateRangeModel[this.config.type].startDate = this.config.dateArray[0] || this.config.startDate;\n      }\n      if (!this.dateRangeModel[this.config.type].endDate) {\n        this.dateRangeModel[this.config.type].endDate =\n          this.config.dateArray[this.config.dateArray.length - 1] || this.config.endDate;\n      }\n    }\n\n    const dateRangeMinDate = this.dateRangeModel[this.config.type].minDate || this.config.minDate;\n    const dateRangeMaxDate = this.dateRangeModel[this.config.type].maxDate || this.config.maxDate;\n    const dateRangeStartDate = this.dateRangeModel[this.config.type].startDate || this.config.startDate;\n    const dateRangeEndDate = this.dateRangeModel[this.config.type].endDate || this.config.endDate;\n\n    this.config.minDate = this.service.formatDateToDefaultFormat(dateRangeMinDate, this.config.inputDateFormat);\n    this.config.maxDate = this.service.formatDateToDefaultFormat(dateRangeMaxDate, this.config.inputDateFormat);\n    this.config.startDate = this.service.formatDateToDefaultFormat(dateRangeStartDate, this.config.inputDateFormat);\n    this.config.endDate = this.service.formatDateToDefaultFormat(dateRangeEndDate, this.config.inputDateFormat);\n\n    if (this.config.timePicker) {\n      const dateRangeMinTime = this.dateRangeModel[this.config.type].minTime || this.config.minTime;\n      const dateRangeMaxTime = this.dateRangeModel[this.config.type].maxTime || this.config.maxTime;\n      const dateRangeStartTime = this.dateRangeModel[this.config.type].startTime || this.config.startTime;\n      const dateRangeEndTime = this.dateRangeModel[this.config.type].endTime || this.config.endTime;\n\n      this.config.minTime = this.service.formatTimeToDefaultFormat(dateRangeMinTime);\n      this.config.maxTime = this.service.formatTimeToDefaultFormat(dateRangeMaxTime);\n      this.config.startTime = this.service.formatTimeToDefaultFormat(dateRangeStartTime);\n      this.config.endTime = this.service.formatTimeToDefaultFormat(dateRangeEndTime);\n    }\n  }\n\n  /**\n   * @desc sets minDate, maxDate, startDate, endDate if not passed\n   */\n  handleDateArray() {\n    if (this.config.dateArray && this.config.dateArray.length) {\n      // converts all the dates to DEFAULT_DATE_FORMAT\n      this.config.dateArray = this.service.getSanitizedDateArray(this.config);\n\n      // sort in asc order\n      this.config.dateArray = this.config.dateArray.sort((date1, date2) => {\n        const value1: number = moment(date1, DEFAULT_DATE_FORMAT).valueOf();\n        const value2: number = moment(date2, DEFAULT_DATE_FORMAT).valueOf();\n        return value1 - value2;\n      });\n    }\n  }\n\n  sanitizeDates() {\n    const subtractWeekCount = 0;\n    const setDate = (type: string) => {\n      this.config.minDate = moment(this.config.minDate, DEFAULT_DATE_FORMAT)\n        .endOf(type)\n        .format(DEFAULT_DATE_FORMAT);\n      this.config.maxDate =\n        type === \"week\"\n          ? moment(this.config.maxDate, DEFAULT_DATE_FORMAT)\n              .subtract(subtractWeekCount, \"week\")\n              .endOf(type)\n              .format(DEFAULT_DATE_FORMAT)\n          : moment(this.config.maxDate, DEFAULT_DATE_FORMAT)\n              .endOf(type)\n              .format(DEFAULT_DATE_FORMAT);\n      this.config.startDate = moment(this.config.startDate, DEFAULT_DATE_FORMAT)\n        .endOf(type)\n        .format(DEFAULT_DATE_FORMAT);\n      this.config.endDate =\n        type === \"week\"\n          ? moment(this.config.endDate, DEFAULT_DATE_FORMAT)\n              .subtract(subtractWeekCount, \"week\")\n              .endOf(type)\n              .format(DEFAULT_DATE_FORMAT)\n          : moment(this.config.endDate, DEFAULT_DATE_FORMAT)\n              .endOf(type)\n              .format(DEFAULT_DATE_FORMAT);\n    };\n\n    if (this.config.type === \"weekly\") {\n      setDate.bind(this)(\"week\");\n    } else if (this.config.type === \"monthly\") {\n      setDate.bind(this)(\"month\");\n    } else if (this.config.type === \"quarterly\") {\n      setDate.bind(this)(\"quarter\");\n    } else if (this.config.type === \"yearly\") {\n      setDate.bind(this)(\"year\");\n    }\n\n    if (\n      moment(this.config.startDate, DEFAULT_DATE_FORMAT).valueOf() <\n      moment(this.config.minDate, DEFAULT_DATE_FORMAT).valueOf()\n    ) {\n      this.config.minDate = this.config.startDate;\n    }\n\n    if (\n      moment(this.config.endDate, DEFAULT_DATE_FORMAT).valueOf() >\n      moment(this.config.maxDate, DEFAULT_DATE_FORMAT).valueOf()\n    ) {\n      this.config.maxDate = this.config.endDate;\n    }\n  }\n\n  processRanges() {\n    if (this.config.showRanges && !this.config.singleDatePicker) {\n      this.config.availableRanges = this.service.createDefaultRanges(this.config);\n      this.selectActiveRange();\n    } else {\n      this.state.activeRange = \"Custom Range\";\n      this.onRangeClick(this.state.activeRange, null);\n    }\n  }\n\n  selectActiveRange() {\n    for (const range in this.config.availableRanges) {\n      if (range) {\n        const rangeModel = this.config.availableRanges[range];\n        if (this.config.startDate === rangeModel.startDate && this.config.endDate === rangeModel.endDate) {\n          this.state.activeRange = range;\n          this.updateActiveItem();\n        }\n      }\n    }\n\n    if (!this.state.activeRange) {\n      this.state.activeRange = \"Custom Range\";\n      this.onRangeClick(this.state.activeRange, null);\n    }\n  }\n\n  generateCalendar(date: string | number, side: string): DateSide {\n    this.state.selectedMonth[side] = moment(date, DEFAULT_DATE_FORMAT).format(\"MMM\");\n    this.state.selectedYear[side] = this.service.getSelectedYear(date);\n    const calendarLabel = `${this.state.selectedMonth[side]} ${this.state.selectedYear[side]}`;\n\n    const dates: DateSide = {\n      label: calendarLabel,\n      months: this.service.getMonthsAvailable(this.config.minDate, this.config.maxDate, this.state.selectedYear[side]),\n      years: this.service.getYearsAvailable(this.config),\n      itemRows: [] as DateRow[]\n    };\n\n    this.state.weekDayOptions = [\"\"];\n\n    if (this.config.type !== \"yearly\") {\n      // moment returns wrong week number\n      const monthStartWeekNumber: number = moment(date, DEFAULT_DATE_FORMAT)\n        .year(this.state.selectedYear[side])\n        .startOf(\"month\")\n        .week(); // previousMonthLastWeek\n      const yearStartDate = moment(this.state.selectedYear[side], \"YYYY\")\n        .startOf(\"year\")\n        .format(DEFAULT_DATE_FORMAT);\n      let numberOfRows = 1;\n\n      if (this.config.type === \"daily\") {\n        numberOfRows = this.service.getNumberOfWeeks(date);\n        this.state.weekDayOptions = [\"su\", \"mo\", \"tu\", \"we\", \"th\", \"fr\", \"sa\"];\n      } else if (this.config.type === \"weekly\") {\n        numberOfRows = 8;\n        this.state.weekDayOptions = [\"\", \"\", \"\", \"\", \"\", \"\", \"\"];\n      } else if (this.config.type === \"monthly\") {\n        numberOfRows = 4;\n        this.state.weekDayOptions = [\"\", \"\", \"\"];\n      } else if (this.config.type === \"quarterly\") {\n        numberOfRows = 4;\n        this.state.weekDayOptions = [\"\"];\n      }\n\n      for (let dateRows = 0; dateRows < numberOfRows; dateRows++) {\n        const dateRowObj: DateRow = {\n          rowNumber: null as string,\n          rowNumberText: null as string,\n          items: [] as DateCharacteristics[]\n        };\n\n        const rowOptions: RowOptions = {\n          type: this.config.type,\n          monthStartWeekNumber: monthStartWeekNumber,\n          dateRows: dateRows,\n          year: this.state.selectedYear[side],\n          itemCount: null\n        };\n\n        const { rowNumber, columns }: RowVariables = this.service.getCalendarRowVariables(rowOptions);\n\n        dateRowObj.rowNumber = rowNumber;\n        dateRowObj.rowNumberText = this.service.getCalendarRowNumberText(this.config.type, rowNumber);\n\n        for (let rowItem = 0; rowItem <= columns; rowItem++) {\n          const rowItemOptions: RowItemOptions = {\n            type: this.config.type,\n            monthStartWeekNumber,\n            dateRows,\n            rowNumber,\n            yearStartDate,\n            year: this.state.selectedYear[side],\n            rowItem,\n            columns\n          };\n\n          const {\n            currentItemDate,\n            rowItemText,\n            firstDay,\n            lastDay,\n            itemCount\n          }: RowItemVariables = this.service.getCalendarRowItemVariables(rowItemOptions);\n\n          rowOptions.itemCount = itemCount;\n\n          const { available, inRange, active, today }: DateCharacteristics = this.service.getDateCharacteristics(\n            this.config,\n            this.state,\n            currentItemDate,\n            calendarLabel,\n            side\n          );\n\n          const itemObj: ActiveItemSide = {\n            date: currentItemDate,\n            rowItemText,\n            firstDay,\n            lastDay,\n            available,\n            inRange,\n            active,\n            today,\n            formattedDateString: moment(currentItemDate, DEFAULT_DATE_FORMAT).format(this.config.viewDateFormat)\n          };\n          if (this.service.isRowIemValid(rowOptions)) {\n            if (active) {\n              this.state.activeItem[side] = itemObj;\n            }\n            dateRowObj.items.push(itemObj);\n          }\n        }\n        dates.itemRows.push(dateRowObj);\n      }\n    }\n\n    this.state.calendarAvailable[side] = true;\n\n    // generate month/year select\n    setTimeout(() => {\n      const options = {\n        side,\n        onChange: this.onCalendarLabelChange.bind(this),\n        type: \"month\",\n        items: dates[\"months\"],\n        selected: this.state.selectedMonth[side]\n      };\n      this.printSelect(options);\n\n      options.type = \"year\";\n      options.items = dates[\"years\"];\n      options.selected = this.state.selectedYear[side];\n      this.printSelect(options);\n    });\n    return dates;\n  }\n\n  generateTimePicker(time: string, side: string): TimeSide {\n    const timeObject: TimeSide = {\n      hour: [],\n      minute: [],\n      meridian: []\n    };\n\n    let startHour = 0;\n    const endHour = 23;\n    let startMinute = 0;\n    const endMinute = 59;\n    let selectedHour = side === \"left\" ? startHour : endHour;\n    let selectedMinute = side === \"left\" ? startMinute : endMinute;\n    const startDateEpoch = moment(this.config.startDate, DEFAULT_DATE_FORMAT).valueOf();\n    const endDateEpoch = moment(this.config.endDate, DEFAULT_DATE_FORMAT).valueOf();\n\n    if (time) {\n      selectedHour = moment(time, DEFAULT_TIME_FORMAT).format(\"H\");\n      selectedMinute = moment(time, DEFAULT_TIME_FORMAT).format(\"m\");\n\n      if (side === \"right\" && startDateEpoch === endDateEpoch) {\n        startHour = selectedHour;\n        startMinute = selectedMinute;\n      }\n    }\n\n    // let dateOptions = {\n    //   timeZone: TZ_NAMES[this.state.selectedTimezone],\n    //   timeZoneName: 'short',\n    //   hour12: false\n    // }\n    // let startDateObj = new Date(`Jan 1 1970 ${startHour}:${startMinute}:00 GMT-0700 (Mountain Standard Time)`);\n    // let endDateObj = new Date(`Jan 1 1970 ${endHour}:${endMinute}:00 GMT-0700 (Mountain Standard Time)`);\n    // startTime = startDateObj.toLocaleTimeString('en-US', dateOptions);\n    // endTime = endDateObj.toLocaleTimeString('en-US', dateOptions);\n\n    // startHour = moment(startTime, 'HH:mm:ss').format('H');\n    // endHour = moment(endTime, 'HH:mm:ss').format('H');\n    // startMinute = moment(startTime, 'HH:mm:ss').format('m');\n    // endMinute = moment(endTime, 'HH:mm:ss').format('m');\n\n    for (let h = startHour; h <= 23; h++) {\n      const stringified_h = this.service.convertToViewTimeItem(h);\n      timeObject.hour.push(stringified_h);\n    }\n    for (let m = startMinute; m <= 59; m++) {\n      const stringified_m = this.service.convertToViewTimeItem(m);\n      timeObject.minute.push(stringified_m);\n    }\n\n    this.state.selectedHour[side] = this.service.convertToViewTimeItem(selectedHour);\n    this.state.selectedMinute[side] = this.service.convertToViewTimeItem(selectedMinute);\n\n    if (side === \"left\") {\n      this.config.startTime = `${this.state.selectedHour[side]}:${this.state.selectedMinute[side]}`;\n    } else if (side === \"right\") {\n      this.config.endTime = `${this.state.selectedHour[side]}:${this.state.selectedMinute[side]}`;\n    }\n\n    // generate hour/minute select\n    setTimeout(() => {\n      const options = {\n        side,\n        onChange: this.onTimeLabelChange.bind(this),\n        type: \"hour\",\n        items: timeObject[\"hour\"],\n        selected: this.state.selectedHour[side]\n      };\n      this.printSelect(options);\n\n      options.type = \"minute\";\n      options.items = timeObject[\"minute\"];\n      options.selected = this.state.selectedMinute[side];\n      this.printSelect(options);\n    });\n    return timeObject;\n  }\n\n  updateInputField() {\n    const startDate = this.service.formatStartDate(this.config, this.config.viewDateFormat);\n    const endDate = this.config.endDate\n      ? moment(this.config.endDate, DEFAULT_DATE_FORMAT).format(this.config.viewDateFormat)\n      : \"\";\n\n    if (this.config.singleDatePicker) {\n      let startDateText = startDate;\n      let endDataText = endDate;\n      let dateText = \"\";\n\n      if (this.config.timePicker) {\n        startDateText = `${startDate} ${this.config.startTime}`;\n        endDataText = `${endDate} ${this.config.endTime}`;\n      }\n      if (this.config.displayBeginDate) {\n        dateText = `${startDateText}`;\n      } else if (this.config.displayEndDate) {\n        dateText = `${endDataText}`;\n      } else {\n        dateText = `${startDateText} - ${endDataText}`;\n      }\n\n      this.state.selectedDateText = dateText;\n    } else {\n      let startDateText = startDate;\n      let endDataText = endDate;\n\n      if (this.config.timePicker) {\n        startDateText = `${startDate} ${this.config.startTime}`;\n        endDataText = `${endDate} ${this.config.endTime}`;\n      }\n\n      this.state.selectedDateText = `${startDateText} - ${endDataText}`;\n    }\n\n    if (this.canBeEmpty || this.state.selectedDateText.indexOf(\"nvalid\") < 0) {\n      this.state.isValidFilter = true;\n    }\n\n    if (this.config.type === \"yearly\") {\n      this.state.dateTitleText.left = `${startDate}`;\n      this.state.dateTitleText.right = `${endDate}`;\n    } else {\n      this.updateActiveItemInputField();\n    }\n  }\n\n  updateActiveItemInputField() {\n    if (!this.config.singleDatePicker) {\n      this.updateSide(\"left\");\n    }\n    this.updateSide(\"right\");\n  }\n\n  updateSide(side: string) {\n    let itemFirstDate = this.state.activeItem[side].firstDay;\n    let itemLastDate = this.state.activeItem[side].lastDay;\n    const itemText = this.state.activeItem[side].rowItemText;\n    itemFirstDate = moment(itemFirstDate, DEFAULT_DATE_FORMAT).format(this.config.viewDateFormat);\n    itemLastDate = moment(itemLastDate, DEFAULT_DATE_FORMAT).format(this.config.viewDateFormat);\n    if (this.config.type !== \"daily\") {\n      this.state.dateTitleText[side] = `${itemText} (${itemFirstDate} - ${itemLastDate})`;\n    } else {\n      this.state.dateTitleText[side] = `${itemFirstDate}`;\n    }\n  }\n\n  dateRangeSelected() {\n    const dateRangeModel: DateTimeRangeChangeOutput = this.getNgxDatetimeRangeChangeOutput();\n    this.state.isCalendarVisible = false;\n    if (this.filterInputBox) {\n      this.filterInputBox.nativeElement.classList.remove(\"empty-filter\");\n    }\n    this.doDateRangeModelChange();\n    this.dateRangeChanged.emit(dateRangeModel);\n  }\n\n  doDateRangeModelChange() {\n    const dateRangeModel: DateTimeRangeModelChangeOutput = this.getDateRangeModel(this.config.inputDateFormat);\n    this.dateRangeModelChange.emit(dateRangeModel);\n  }\n\n  getDateRangeModel(format?: string): DateTimeRangeModelChangeOutput {\n    let dRModel: DateTimeRangeModelChangeOutput = {};\n    if (undefined !== this.dateRangeModel && !isEmpty(this.dateRangeModel)) {\n      dRModel = cloneDeep(this.dateRangeModel) as Record<string, any>;\n    }\n    dRModel[this.config.type] = this.getNgxDatetimeRangeChangeOutput(format);\n    return dRModel;\n  }\n\n  getNgxDatetimeRangeChangeOutput(format?: string): DateTimeRangeChangeOutput {\n    let dateRangeChangeOutput: DateTimeRangeChangeOutput;\n    let outputDateFormat: string = this.config.outputDateFormat;\n    if (undefined !== format) {\n      outputDateFormat = format;\n    }\n    let startDate = this.service.formatStartDate(this.config, outputDateFormat);\n    let endDate = moment(this.config.endDate, DEFAULT_DATE_FORMAT).format(outputDateFormat);\n\n    if (this.config.selectedTimezone) {\n      startDate = this.service.formatToZoneDate(this.config.selectedTimezone, outputDateFormat, startDate);\n      endDate = this.service.formatToZoneDate(this.config.selectedTimezone, outputDateFormat, endDate);\n    }\n\n    dateRangeChangeOutput = {\n      activeRange: this.state.activeRange,\n      startDate,\n      endDate\n    };\n\n    if (this.config.timePicker) {\n      const startTime = this.config.startTime;\n      const endTime = this.config.endTime;\n\n      dateRangeChangeOutput = {\n        activeRange: this.state.activeRange,\n        startDate,\n        endDate,\n        startTime,\n        endTime\n      };\n    }\n\n    return dateRangeChangeOutput;\n  }\n\n  doApply() {\n    const startDate = this.config.startDate;\n    const endDate = this.config.endDate;\n\n    this.state.activeStartDate = startDate as string;\n    this.state.activeEndDate = endDate as string;\n\n    if (this.config.startDate && this.config.endDate) {\n      if (!this.config.timePicker) {\n        this.dateRangeSelected();\n      } else {\n        if (this.config.timePicker) {\n          this.state.sides.forEach((side) => {\n            this.state.times[side] = this.generateTimePicker(null, side);\n          });\n        }\n      }\n    }\n\n    let outputStartDate = startDate ? moment(startDate, DEFAULT_DATE_FORMAT).valueOf() : null;\n    let outputEndDate = endDate ? moment(endDate, DEFAULT_DATE_FORMAT).valueOf() : null;\n    if (this.config.outputDateFormat) {\n      outputStartDate = startDate ? moment(startDate, DEFAULT_DATE_FORMAT).format(this.config.outputDateFormat) : null;\n      outputEndDate = endDate ? moment(endDate, DEFAULT_DATE_FORMAT).format(this.config.outputDateFormat) : null;\n    }\n    this.selectedDate.emit({\n      startDate: outputStartDate,\n      endDate: outputEndDate\n    });\n\n    this.updateInputField();\n  }\n\n  onTimezoneChange(tz: string) {\n    this.state.selectedTimezone = tz;\n    this.state.todayTime = this.service.getZoneToday(this.state.selectedTimezone, this.config.viewDateFormat);\n\n    this.parseOptionsToDefaultDateFormat();\n    this.state.sides.forEach((side) => {\n      let date = this.config.startDate;\n      let time = this.config.startTime;\n      if (side === \"right\") {\n        date = this.config.endDate;\n        time = this.config.endTime;\n      }\n      this.state.dates[side] = this.generateCalendar(date, side);\n      if (this.config.timePicker) {\n        this.state.times[side] = this.generateTimePicker(time, side);\n      }\n    });\n  }\n\n  getSelectedTimeItemText(item: string, side: string) {\n    if (item === \"hour\") {\n      return this.state.selectedHour[side];\n    } else if (item === \"minute\") {\n      return this.state.selectedMinute[side];\n    }\n  }\n\n  setActiveItemOnRangeClick() {\n    this.updateActiveItem();\n    this.doApply();\n  }\n\n  updateActiveItem() {\n    const startDate: ActiveItemSide = this.service.getFirstLastDay(this.config.startDate as string, this.config.type);\n    const endDate: ActiveItemSide = this.service.getFirstLastDay(this.config.endDate as string, this.config.type);\n\n    if (this.config.type === \"weekly\") {\n      startDate.rowItemText = `W${this.service.getWeekNumber(startDate.firstDay)}`;\n      endDate.rowItemText = `W${this.service.getWeekNumber(endDate.firstDay)}`;\n    } else if (this.config.type === \"monthly\") {\n      startDate.rowItemText = `${moment(startDate.firstDay, DEFAULT_DATE_FORMAT).format(\"MMM\")}`;\n      endDate.rowItemText = `${moment(endDate.firstDay, DEFAULT_DATE_FORMAT).format(\"MMM\")}`;\n    } else if (this.config.type === \"quarterly\") {\n      startDate.rowItemText = `Quarter ${moment(startDate.firstDay, DEFAULT_DATE_FORMAT).quarter()}`;\n      endDate.rowItemText = `Quarter ${moment(endDate.firstDay, DEFAULT_DATE_FORMAT).quarter()}`;\n    }\n\n    Object.assign(this.state.activeItem.left, startDate);\n    Object.assign(this.state.activeItem.right, endDate);\n\n    // this.doApply();\n  }\n\n  /* ------------------------------------------ */\n  printSelect(options: {\n    type: string;\n    side: string;\n    items: string[];\n    selected: string;\n    onChange: (e: Event, side: string, type: string) => void;\n  }) {\n    let optionHTML = \"\";\n    options.items.forEach((item) => {\n      optionHTML += `\n        <option\n          class=\"dropdown-item\"\n          value=${item}\n          selected=${options.selected === item}\n        >\n          ${item}\n        </option>\n      `;\n    });\n\n    const selectEl = `\n      <select\n        class=\"${options.type}-select ngx-datetime-range-picker-select-panel ${options.type}-select-panel\">\n        ${optionHTML}\n      </select>\n    `;\n\n    const selectContainerEl = document.getElementById(`${options.type}Select`);\n    if (selectContainerEl) {\n      selectContainerEl.innerHTML = selectEl;\n      selectContainerEl.getElementsByTagName(\"select\")[0].addEventListener(\"change\", (e) => {\n        options.onChange(e, options.side, options.type);\n      });\n    }\n  }\n}\n","<div class=\"ngx-datetime-range-picker\">\n  <div class=\"date-input\">\n    <mat-form-field subscriptSizing=\"dynamic\" class=\"full-width\">\n      <span matPrefix class=\"date-input-icon-container\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20\" viewBox=\"0 -960 960 960\" width=\"20\">\n          <path\n            d=\"M216-96q-29.7 0-50.85-21.5Q144-139 144-168v-528q0-29 21.15-50.5T216-768h72v-96h72v96h240v-96h72v96h72q29.7 0 50.85 21.5Q816-725 816-696v528q0 29-21.15 50.5T744-96H216Zm0-72h528v-360H216v360Zm0-432h528v-96H216v96Zm0 0v-96 96Zm264.211 216Q465-384 454.5-394.289q-10.5-10.29-10.5-25.5Q444-435 454.289-445.5q10.29-10.5 25.5-10.5Q495-456 505.5-445.711q10.5 10.29 10.5 25.5Q516-405 505.711-394.5q-10.29 10.5-25.5 10.5Zm-156 0Q309-384 298.5-394.289q-10.5-10.29-10.5-25.5Q288-435 298.289-445.5q10.29-10.5 25.5-10.5Q339-456 349.5-445.711q10.5 10.29 10.5 25.5Q360-405 349.711-394.5q-10.29 10.5-25.5 10.5Zm312 0Q621-384 610.5-394.289q-10.5-10.29-10.5-25.5Q600-435 610.289-445.5q10.29-10.5 25.5-10.5Q651-456 661.5-445.711q10.5 10.29 10.5 25.5Q672-405 661.711-394.5q-10.29 10.5-25.5 10.5Zm-156 144Q465-240 454.5-250.289q-10.5-10.29-10.5-25.5Q444-291 454.289-301.5q10.29-10.5 25.5-10.5Q495-312 505.5-301.711q10.5 10.29 10.5 25.5Q516-261 505.711-250.5q-10.29 10.5-25.5 10.5Zm-156 0Q309-240 298.5-250.289q-10.5-10.29-10.5-25.5Q288-291 298.289-301.5q10.29-10.5 25.5-10.5Q339-312 349.5-301.711q10.5 10.29 10.5 25.5Q360-261 349.711-250.5q-10.29 10.5-25.5 10.5Zm312 0Q621-240 610.5-250.289q-10.5-10.29-10.5-25.5Q600-291 610.289-301.5q10.29-10.5 25.5-10.5Q651-312 661.5-301.711q10.5 10.29 10.5 25.5Q672-261 661.711-250.5q-10.29 10.5-25.5 10.5Z\"\n          />\n        </svg>\n      </span>\n\n      <mat-label\n        >{{ config.label }}\n        <span matPrefix *ngIf=\"state.selectedTimezone\" class=\"timezone-info active-timezone\">\n          ({{ state.selectedTimezone }})\n        </span>\n      </mat-label>\n      <input\n        matInput\n        #filterInputBox\n        type=\"text\"\n        [ngClass]=\"{\n          'config.inputClass': 'config.inputClass'\n        }\"\n        class=\"dateSelect\"\n        [attr.aria-label]=\"config.ariaLabels.inputField\"\n        (click)=\"onComponentClick()\"\n        placeholder=\"{{ config.placeholder }}\"\n        [ngModel]=\"state.selectedDateText\"\n        (ngModelChange)=\"onDateRangeInputChange()\"\n        (keyup)=\"onCalendarClose()\"\n        (focus)=\"onFocusInput($event)\"\n        (blur)=\"onBlurInput($event)\"\n        [value]=\"state.selectedDateText\"\n        [disabled]=\"config.componentDisabled\"\n        autocomplete=\"off\"\n        spellcheck=\"false\"\n        autocorrect=\"off\"\n        readonly\n      />\n    </mat-form-field>\n  </div>\n  <div *ngIf=\"state.isCalendarVisible\" class=\"calendar-view\">\n    <div class=\"date-select\">\n      <div class=\"date-pick-container\">\n        <div *ngIf=\"config.timezoneSupport\" class=\"list-inline timezone-select\">\n          <div class=\"timeZones\">\n            <div\n              *ngFor=\"let tz of state.timeZones; let last = last\"\n              class=\"timezone\"\n              [ngClass]=\"{\n                code: true,\n                'border-separator': !last,\n                'active-timezone': state.selectedTimezone == tz\n              }\"\n              (click)=\"onTimezoneChange(tz)\"\n            >\n              {{ tz }}\n            </div>\n          </div>\n          <div class=\"currentTime\">\n            <span class=\"today-text\">Today</span>: <span class=\"active-timezone\">{{ state.todayTime }}</span>\n          </div>\n        </div>\n        <ul class=\"list-inline calendar-container\">\n          <li *ngFor=\"let side of state.sides; let lastSide = last\" class=\"calendar\" [ngClass]=\"side\">\n            <div class=\"dateTitleInput\">\n              <mat-form-field subscriptSizing=\"dynamic\" class=\"full-width\">\n                <input matInput type=\"text\" class=\"dateSelect\" [ngModel]=\"state.dateTitleText[side]\" readonly />\n              </mat-form-field>\n            </div>\n            <div class=\"calendar-table\">\n              <div *ngIf=\"!state.calendarAvailable[side]\" class=\"calendar-loading\">\n                <!-- <m-loading></m-loading> -->\n              </div>\n              <div\n                *ngIf=\"state.calendarAvailable[side]\"\n                class=\"calendar-side-container\"\n                style=\"min-width: 250px; position: relative;\"\n              >\n                <div class=\"calendar-label-container\">\n                  <div class=\"prev\">\n                    <div\n                      [ngClass]=\"{\n                        disabled: !isPrevAvailable(side),\n                        available: isPrevAvailable(side)\n                      }\"\n                      (click)=\"onClickPrevious(side)\"\n                    >\n                      <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        height=\"24\"\n                        viewBox=\"0 -960 960 960\"\n                        width=\"24\"\n                        [attr.fill]=\"isPrevAvailable(side) ? null : '#e6e6e6'\"\n                      >\n                        <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\n                      </svg>\n                    </div>\n                  </div>\n                  <div [attr.colspan]=\"getCalendarColspan()\" class=\"calendar-label\">\n                    <div class=\"date-dropdown-container\" style=\"position: relative;\">\n                      <div *ngIf=\"config.type == 'daily'\" class=\"date-dropdown\">\n                        <mat-form-field subscriptSizing=\"dynamic\">\n                          <mat-select\n                            class=\"month-select\"\n                            panelClass=\"ngx-datetime-range-picker-select-panel month-select-panel\"\n                            [value]=\"state.selectedMonth[side]\"\n                            (selectionChange)=\"onCalendarLabelChange($event.value, side, 'month')\"\n                          >\n                            <mat-option\n                              class=\"dropdown-item\"\n                              *ngFor=\"let month of state.dates[side]['months']\"\n                              [value]=\"month\"\n                            >\n                              {{ month }}\n                            </mat-option>\n                          </mat-select>\n                        </mat-form-field>\n                      </div>\n                      <div class=\"date-dropdown\">\n                        <mat-form-field subscriptSizing=\"dynamic\">\n                          <mat-select\n                            class=\"year-select\"\n                            panelClass=\"ngx-datetime-range-picker-select-panel year-select-panel\"\n                            [value]=\"state.selectedYear[side]\"\n                            (selectionChange)=\"onCalendarLabelChange($event.value, side, 'year')\"\n                          >\n                            <mat-option\n                              class=\"dropdown-item\"\n                              *ngFor=\"let year of state.dates[side]['years']\"\n                              [value]=\"year\"\n                            >\n                              {{ year }}\n                            </mat-option>\n                          </mat-select>\n                        </mat-form-field>\n                      </div>\n                    </div>\n                  </div>\n                  <div class=\"next\">\n                    <div\n                      [ngClass]=\"{\n                        disabled: !isNextAvailable(side),\n                        available: isNextAvailable(side)\n                      }\"\n                      (click)=\"onClickNext(side)\"\n                    >\n                      <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        height=\"24\"\n                        viewBox=\"0 -960 960 960\"\n                        width=\"24\"\n                        [attr.fill]=\"isNextAvailable(side) ? null : '#e6e6e6'\"\n                      >\n                        <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\n                      </svg>\n                    </div>\n                  </div>\n                </div>\n                <table role=\"grid\">\n                  <thead>\n                    <tr>\n                      <th *ngIf=\"config.showRowNumber\" scope=\"col\" class=\"rowNumber\"></th>\n                      <th *ngFor=\"let day of state.weekDayOptions\" scope=\"col\" class=\"calendar-week-day capitalize\">\n                        {{ day }}\n                      </th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    <tr *ngFor=\"let row of state.dates[side]['itemRows']\" role=\"row\">\n                      <td *ngIf=\"config.showRowNumber && row.rowNumberText\" class=\"rowNumber\">\n                        {{ row.rowNumberText }}\n                      </td>\n                      <td\n                        #itemCell\n                        *ngFor=\"let item of row.items\"\n                        role=\"gridcell\"\n                        [attr.firstDay]=\"item.firstDay\"\n                        [attr.lastDay]=\"item.lastDay\"\n                        [ngClass]=\"{\n                          available: item.available,\n                          left: side == 'left',\n                          right: side == 'right',\n                          'in-range':\n                            item.inRange ||\n                            (state.activeStartDate == item.date && side == 'left') ||\n                            (state.activeEndDate == item.date && side == 'right'),\n                          active:\n                            (state.activeStartDate == item.date && side == 'left') ||\n                            (state.activeEndDate == item.date && side == 'right'),\n                          today: item.today,\n                          singleDatePicker: config.singleDatePicker,\n                        }\"\n                        (click)=\"onCellClick(item, itemCell, side)\"\n                        (mouseover)=\"onCellMouseEnter(item, itemCell, side)\"\n                        (mouseleave)=\"onCellMouseLeave()\"\n                      >\n                        <button\n                          role=\"button\"\n                          tabindex=\"0\"\n                          [attr.disabled]=\"item.available ? null : true\"\n                          [attr.aria-pressed]=\"\n                            item.inRange ||\n                            (state.activeStartDate == item.date && side == 'left') ||\n                            (state.activeEndDate == item.date && side == 'right')\n                          \"\n                          [attr.aria-label]=\"item.formattedDateString\"\n                        >\n                          {{ item.rowItemText }}\n                        </button>\n                      </td>\n                    </tr>\n                  </tbody>\n                </table>\n              </div>\n            </div>\n            <div *ngIf=\"config.timePicker\" class=\"time-picker-container\">\n              <div class=\"time-select\">\n                <div class=\"clock-icon-container\">\n                  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20\" viewBox=\"0 -960 960 960\" width=\"20\">\n                    <path\n                      d=\"m614-310 51-51-149-149v-210h-72v240l170 170ZM480-96q-79.376 0-149.188-30Q261-156 208.5-208.5T126-330.958q-30-69.959-30-149.5Q96-560 126-630t82.5-122q52.5-52 122.458-82 69.959-30 149.5-30 79.542 0 149.548 30.24 70.007 30.24 121.792 82.08 51.786 51.84 81.994 121.92T864-480q0 79.376-30 149.188Q804-261 752-208.5T629.869-126Q559.738-96 480-96Zm0-384Zm.477 312q129.477 0 220.5-91.5T792-480.477q0-129.477-91.023-220.5T480.477-792Q351-792 259.5-700.977t-91.5 220.5Q168-351 259.5-259.5T480.477-168Z\"\n                    />\n                  </svg>\n                </div>\n                <div *ngFor=\"let timeItem of state.timeItems\" class=\"d-inline-block time-item-container\">\n                  <mat-form-field subscriptSizing=\"dynamic\">\n                    <mat-select\n                      class=\"timeItem-select\"\n                      panelClass=\"ngx-datetime-range-picker-select-panel timeItem-select-panel\"\n                      [value]=\"getSelectedTimeItemText(timeItem, side)\"\n                      (selectionChange)=\"onTimeLabelChange(timeItem, side, $event.value)\"\n                    >\n                      <mat-option class=\"dropdown-item\" *ngFor=\"let item of state.times[side][timeItem]\" [value]=\"item\">\n                        {{ item }}\n                      </mat-option>\n                    </mat-select>\n                  </mat-form-field>\n                </div>\n              </div>\n            </div>\n          </li>\n        </ul>\n      </div>\n      <div *ngIf=\"(!config.singleDatePicker && config.showRanges) || config.timePicker\" class=\"ranges\">\n        <button\n          mat-button\n          *ngFor=\"let range of config.availableRanges | ObjNgFor\"\n          class=\"calendar-range\"\n          [ngClass]=\"{ 'active-range': range == state.activeRange }\"\n          (click)=\"onRangeClick(range, config.availableRanges[range])\"\n        >\n          {{ range }}\n        </button>\n        <div\n          *ngIf=\"config.timePicker && state.customRange\"\n          class=\"range-select-button-container\"\n          [ngClass]=\"{\n            'range-select-button-bottom': (config.availableRanges | json) != '{}'\n          }\"\n        >\n          <button mat-button class=\"range-select-button range-select-apply-button\" (click)=\"onTimeApply()\">\n            Apply\n          </button>\n          <button mat-button class=\"range-select-button range-select-cancel-button\" (click)=\"onTimeApply()\">\n            Cancel\n          </button>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatSelectModule } from \"@angular/material/select\";\n\nconst modules = [MatFormFieldModule, MatButtonModule, MatInputModule, MatIconModule, MatSelectModule];\n@NgModule({\n  imports: modules,\n  exports: modules\n})\nexport class MaterialModule {}\n","import { NgModule, ModuleWithProviders, Optional, SkipSelf } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MaterialModule } from \"./material/material.module\";\nimport { provideHttpClient, withInterceptorsFromDi } from \"@angular/common/http\";\nimport { NgxDatetimeRangePickerComponent } from \"./ngx-datetime-range-picker.component\";\nimport { ObjNgFor } from \"./pipes/objNgFor.pipe\";\nimport { NgxDatetimeRangePickerService } from \"./ngx-datetime-range-picker.service\";\n\n@NgModule({\n  declarations: [ObjNgFor, NgxDatetimeRangePickerComponent],\n  exports: [NgxDatetimeRangePickerComponent, MaterialModule],\n  imports: [CommonModule, FormsModule, MaterialModule],\n  providers: [provideHttpClient(withInterceptorsFromDi())]\n})\nexport class NgxDatetimeRangePickerModule {\n  constructor(@Optional() @SkipSelf() parentModule: NgxDatetimeRangePickerModule) {\n    if (parentModule) {\n      throw new Error(`ERR_NGX_DATETIME_RANGE_PICKER:\n        NgxDatetimeRangePickerModule is already loaded. Import it in the AppModule only`);\n    }\n  }\n\n  public static forRoot(): ModuleWithProviders<NgxDatetimeRangePickerModule> {\n    return {\n      ngModule: NgxDatetimeRangePickerModule,\n      providers: [NgxDatetimeRangePickerService]\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-datetime-range-picker\n */\n\nexport * from \"./lib/ngx-datetime-range-picker.service\";\nexport * from \"./lib/ngx-datetime-range-picker.component\";\nexport * from \"./lib/ngx-datetime-range-picker.module\";\nexport * from \"./lib/material/material.module\";\nexport * from \"./lib/interfaces\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["moment","USA_TZ_CODE","DEFAULT_TIME_FORMAT","Constants","i1.NgxDatetimeRangePickerService","i9.ObjNgFor"],"mappings":"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"}