{"version":3,"file":"index.esm.mjs","sources":["../src/utils/date.ts","../src/utils/excluded.ts","../src/utils/get-calendar-month-params.ts","../src/utils/predicates.ts","../src/utils/config.ts","../src/utils/get-date-range-state.ts","../src/utils/create-calendars.ts","../src/utils/create-weekdays.ts","../src/use-calendars.ts","../src/utils/call-all.ts","../src/utils/create-prop-getter.ts","../src/state-reducer.ts","../src/utils/offset.ts","../src/use-date-picker-offset.ts","../src/utils/get-calendar-start-date.ts","../src/utils/get-current-year-position.ts","../src/utils/create-initial-state.ts","../src/use-date-picker-state.ts","../src/utils/get-multiple-dates.ts","../src/use-days.ts","../src/utils/create-months.ts","../src/use-months.ts","../src/utils/create-time.ts","../src/use-time.ts","../src/utils/create-years.ts","../src/use-years.ts","../src/use-date-picker.ts","../src/date-picker-provider.tsx","../src/date-picker-state-provider.tsx","../src/use-context-hooks.ts"],"sourcesContent":["import type {\n  DPDatePart,\n  DPDateParts,\n  DPLocaleConfig,\n  DPTimeLimit,\n} from '../types';\n\n// Year and Month is a minimum required arguments for creating a date\n// == null is intentional to check also for undefined\nexport const newDate = (Y?: number, M?: number, ...rest: number[]): Date =>\n  !Y || M == null ? new Date() : new Date(Y, M, ...rest);\n\nexport const getDateParts = (d: Date): DPDateParts => ({\n  D: d.getDate(),\n  M: d.getMonth(),\n  Y: d.getFullYear(),\n});\n\n// Days in order sun = 0 ... sat = 6\nexport const getDay = (d: Date): number => d.getDay();\n\n/*\n * We need this function to eliminate time from the comparison.\n * All date that comes to DP should go through this function.\n */\nexport const getCleanDate = (d: Date): Date =>\n  newDate(getDateParts(d).Y, getDateParts(d).M, getDateParts(d).D);\n\nexport const daysInMonth = (d: Date): number =>\n  newDate(getDateParts(d).Y, getDateParts(d).M + 1, 0).getDate();\n\nexport const addToDate = (d: Date, value: number, part: DPDatePart): Date => {\n  const { Y, M, D } = getDateParts(d);\n  // Cover case when offsetDate is 31 and next month doesn't have 31 days\n  // More details here https://github.com/rehookify/datepicker/issues/10\n  const nextDate =\n    part === 'date'\n      ? D + value\n      : part === 'month' && D > daysInMonth(newDate(Y, M + value, 1))\n        ? daysInMonth(newDate(Y, M + value, 1))\n        : D;\n\n  return newDate(\n    Y + (part === 'year' ? value : 0),\n    M + (part === 'month' ? value : 0),\n    nextDate,\n  );\n};\n\nexport const subtractFromDate = (\n  d: Date,\n  value: number,\n  part: DPDatePart,\n): Date => addToDate(d, 0 - value, part);\n\nexport const sortDatesAsc = (a: Date, b: Date): number => +a - +b;\n\nexport const toLocaleDateString = (\n  d: Date,\n  locale?: Intl.LocalesArgument,\n  options?: Intl.DateTimeFormatOptions,\n): string => d.toLocaleDateString(locale, options);\n\nexport const formatMonthName = (\n  d: Date,\n  { locale, monthName }: DPLocaleConfig,\n): string => toLocaleDateString(d, locale, { month: monthName });\n\nexport const formatDate = (\n  d: Date,\n  { locale, options }: DPLocaleConfig,\n): string => toLocaleDateString(d, locale, options);\n\nexport const getTimeDate = (\n  Y: number,\n  M: number,\n  D: number,\n  t?: DPTimeLimit,\n): Date | undefined =>\n  t && t.h != null && t.m != null ? newDate(Y, M, D, t.h, t.m) : undefined;\n\nexport const formatLocaleTime = (\n  d: Date,\n  { locale, hour, minute, second, hour12 }: DPLocaleConfig,\n): string =>\n  d.toLocaleTimeString(locale, {\n    hour,\n    minute,\n    second,\n    hour12,\n  });\n\nconst addLeadingZero = (n: number): string => `${n < 10 ? 0 : ''}${n}`;\n\nconst convertTo12H = (h: number, m: number): string => {\n  const median = h >= 12 ? 'pm' : 'am';\n\n  return `${addLeadingZero(h % 12 || 12)}:${addLeadingZero(m)} ${median}`;\n};\n\nexport const formatTime = (d: Date, { hour12 }: DPLocaleConfig): string => {\n  const h = d.getHours();\n  const m = d.getMinutes();\n\n  return hour12\n    ? convertTo12H(h, m)\n    : `${addLeadingZero(h)}:${addLeadingZero(m)}`;\n};\n\nexport const addAndSortAsc = (dates: Date[], d: Date): Date[] =>\n  dates.concat(d).sort(sortDatesAsc);\n\nexport const sortMinMax = <T>(\n  min: T | undefined,\n  max: T | undefined,\n  sortFunction: (a: T, b: T) => number,\n): (T | undefined)[] => {\n  let [mN, mX] = [min, max];\n  if (min && max) {\n    [mN, mX] = [min, max].sort(sortFunction);\n  }\n\n  return [mN, mX];\n};\n","import type { DPDayInteger, DPExcludeConfig } from '../types';\nimport { getDateParts } from './date';\n\nexport const isExcludedDay = (d: number, eDays?: DPDayInteger[]): boolean =>\n  eDays ? eDays.includes(d as DPDayInteger) : false;\n\nexport const isExcludedDate = (d: Date, dates: Date[] = []): boolean => {\n  const { M, D } = getDateParts(d);\n  return dates.some((date: Date) => {\n    const { M: md, D: dd } = getDateParts(date);\n    return M === md && D === dd;\n  });\n};\n\nexport const isExcluded = (\n  d: Date,\n  { day, date }: DPExcludeConfig = {},\n): boolean => isExcludedDay(d.getDay(), day) || isExcludedDate(d, date);\n","import type { DPCalendarConfig } from '../types';\nimport { daysInMonth, getDay, newDate } from './date';\n\nvar NUMBER_OF_STATIC_CALENDAR_DAYS = 42;\n\nfunction getStartOffset(d: Date, startDay: number): number {\n  return (getDay(d) + 7 - startDay) % 7;\n}\n\nexport function getCalendarMonthParams(\n  month: number,\n  year: number,\n  { mode, startDay }: DPCalendarConfig,\n): {\n  start: number;\n  length: number;\n} {\n  const firstMonthDay = newDate(year, month, 1);\n  const lastDay = daysInMonth(firstMonthDay);\n\n  const startOffset = getStartOffset(firstMonthDay, startDay);\n\n  const length =\n    mode === 'static'\n      ? NUMBER_OF_STATIC_CALENDAR_DAYS\n      : startOffset +\n        lastDay +\n        6 -\n        getStartOffset(newDate(year, month, lastDay), startDay);\n\n  return {\n    start: startOffset,\n    length,\n  };\n}\n","import { getCleanDate, getDateParts } from './date';\n\n// Converting Date to Number is equal of calling Date.getTime\nexport const isSame = (d1: Date, d2: Date): boolean => +d1 === +d2;\n\nexport const isBefore = (d1: Date, d2: Date): boolean => d1 < d2;\n\nexport const isAfter = (d1: Date, d2: Date): boolean => d1 > d2;\n\nexport const isBetween = (start: Date, d: Date, end: Date): boolean =>\n  (isAfter(d, start) && isBefore(d, end)) ||\n  (isBefore(d, start) && isAfter(d, end));\n\nexport const maxDateAndAfter = (\n  maxDate: Date | undefined,\n  date: Date,\n): boolean => !!maxDate && isAfter(date, maxDate);\n\nexport const minDateAndBefore = (\n  minDate: Date | undefined,\n  date: Date,\n): boolean => !!minDate && isBefore(date, minDate);\n\nexport const includeDate = (dates: Date[], d: Date): boolean =>\n  dates.some((date) => isSame(getCleanDate(date), getCleanDate(d)));\n\nexport const isBeforeMinMonth = (month: number, minDate?: Date): boolean =>\n  !!minDate && month < getDateParts(minDate).M;\n\nexport const isBeforeMinYear = (year: number, minDate?: Date): boolean =>\n  !!minDate && year < getDateParts(minDate).Y;\n\nexport const isAfterMaxMonth = (month: number, maxDate?: Date): boolean =>\n  !!maxDate && month > getDateParts(maxDate).M;\n\nexport const isAfterMaxYear = (year: number, maxDate?: Date): boolean =>\n  !!maxDate && year > getDateParts(maxDate).Y;\n\nexport const isSameOrAfterMaxYear = (year: number, maxDate?: Date): boolean =>\n  !!maxDate && year >= getDateParts(maxDate).Y;\n\nexport const isSameOrBeforeMinYear = (year: number, minDate?: Date): boolean =>\n  !!minDate && year <= getDateParts(minDate).Y;\n","import type {\n  DPCalendarConfig,\n  DPConfig,\n  DPDatesConfig,\n  DPDatesMode,\n  DPLocaleConfig,\n  DPTimeConfig,\n  DPUserConfig,\n  DPYearsConfig,\n} from '../types';\nimport { getCleanDate, sortDatesAsc, sortMinMax } from './date';\nimport { includeDate } from './predicates';\n\nvar DEFAULT_CALENDAR_CONFIG: DPCalendarConfig = {\n  mode: 'static',\n  offsets: [0],\n  startDay: 0,\n};\n\nvar DEFAULT_YEARS_CONFIG: DPYearsConfig = {\n  mode: 'decade',\n  /*\n   * The default value for the numberOfYears is 12\n   * it consists of 10 years + 1 year before + 1 year after\n   */\n  numberOfYears: 12,\n  step: 10,\n};\n\nvar DEFAULT_DATES_CONFIG: Pick<\n  DPDatesConfig,\n  'mode' | 'toggle' | 'selectSameDate'\n> = {\n  mode: 'single',\n  toggle: false,\n  selectSameDate: false,\n};\n\nvar DEFAULT_TIME_CONFIG: Pick<DPTimeConfig, 'interval' | 'useLocales'> = {\n  interval: 30,\n  useLocales: false,\n};\n\nvar DEFAULT_LOCALE_CONFIG: DPLocaleConfig = {\n  locale: 'en-GB',\n  day: '2-digit',\n  year: 'numeric',\n  weekday: 'short',\n  monthName: 'long',\n  hour: '2-digit',\n  minute: '2-digit',\n  hour12: undefined,\n  second: undefined,\n};\n\nexport function createConfig({\n  selectedDates = [],\n  onDatesChange,\n  focusDate,\n  offsetDate,\n  onOffsetChange,\n  calendar = {},\n  dates = {},\n  locale,\n  time = {},\n  exclude = {},\n  years,\n}: DPUserConfig): DPConfig {\n  const { minDate, maxDate, ...restDates } = dates;\n  const { offsets = [], ...restCalendarParams } = calendar;\n  const { minTime, maxTime, ...restTime } = time;\n\n  const [minD, maxD] = sortMinMax(minDate, maxDate, sortDatesAsc);\n  const [minT, maxT] = sortMinMax(minTime, maxTime, (a, b) => a.h - b.h);\n\n  const focus =\n    focusDate && includeDate(selectedDates, focusDate) ? focusDate : undefined;\n\n  return {\n    selectedDates,\n    onDatesChange,\n    offsetDate,\n    onOffsetChange,\n    focusDate: focus,\n    calendar: {\n      ...DEFAULT_CALENDAR_CONFIG,\n      ...restCalendarParams,\n      offsets: DEFAULT_CALENDAR_CONFIG.offsets.concat(offsets),\n    },\n    years: { ...DEFAULT_YEARS_CONFIG, ...years },\n    dates: {\n      ...DEFAULT_DATES_CONFIG,\n      ...restDates,\n      minDate: minD && getCleanDate(minD),\n      maxDate: maxD && getCleanDate(maxD),\n    },\n    locale: {\n      ...DEFAULT_LOCALE_CONFIG,\n      ...locale,\n    },\n    time: {\n      ...DEFAULT_TIME_CONFIG,\n      minTime: minT,\n      maxTime: maxT,\n      ...restTime,\n    },\n    exclude,\n  };\n}\n\nexport function isRange(mode: DPDatesMode): boolean {\n  return mode === 'range';\n}\n","import type { DPDatesMode, DPDayRange } from '../types';\nimport { isRange } from './config';\nimport { getCleanDate } from './date';\nimport { isBefore, isBetween, isSame } from './predicates';\n\nconst RANGE_START = 'range-start';\nconst RANGE_END = 'range-end';\nconst WILL_BE_IN_RANGE_START = 'will-be-range-start';\nconst WILL_BE_IN_RANGE_END = 'will-be-range-end';\n\nexport const getDateRangeState = (\n  date: Date,\n  rangeEnd: Date | null,\n  selectedDates: Date[],\n  mode: DPDatesMode,\n): DPDayRange => {\n  if (!isRange(mode) || selectedDates.length === 0) return '';\n  const [start, end] = selectedDates;\n\n  // We have completed range\n  if (start && end) {\n    if (isSame(date, getCleanDate(start))) {\n      return isSame(getCleanDate(start), getCleanDate(end))\n        ? `${RANGE_START} ${RANGE_END}`\n        : RANGE_START;\n    }\n    if (isSame(date, getCleanDate(end))) return RANGE_END;\n    return isBetween(getCleanDate(start), date, getCleanDate(end))\n      ? 'in-range'\n      : '';\n  }\n\n  // We have 1 date and rangeEnd date\n  if (!end && rangeEnd) {\n    if (isBetween(getCleanDate(start), date, rangeEnd))\n      return 'will-be-in-range';\n    // rangeEnd is before start\n    if (isBefore(rangeEnd, getCleanDate(start))) {\n      if (isSame(date, rangeEnd)) return WILL_BE_IN_RANGE_START;\n      return isSame(date, getCleanDate(start)) ? WILL_BE_IN_RANGE_END : '';\n    }\n\n    // rangeEnd is after start;\n    if (isSame(date, getCleanDate(start))) return WILL_BE_IN_RANGE_START;\n    return isSame(date, rangeEnd) ? WILL_BE_IN_RANGE_END : '';\n  }\n\n  return '';\n};\n","import type {\n  DPCalendar,\n  DPConfig,\n  DPDay,\n  DPReducerState,\n  DPState,\n} from '../types';\nimport {\n  addToDate,\n  formatMonthName,\n  getCleanDate,\n  getDateParts,\n  newDate,\n  toLocaleDateString,\n} from './date';\nimport { isExcluded } from './excluded';\nimport { getCalendarMonthParams } from './get-calendar-month-params';\nimport { getDateRangeState } from './get-date-range-state';\nimport {\n  includeDate,\n  isSame,\n  maxDateAndAfter,\n  minDateAndBefore,\n} from './predicates';\n\nconst createCalendar = (\n  offsetDate: Date,\n  calendarStartDate: Date,\n  selectedDates: Date[],\n  { rangeEnd }: DPReducerState,\n  config: DPConfig,\n): DPCalendar => {\n  const {\n    dates: { mode, minDate, maxDate },\n    locale,\n    calendar,\n    exclude,\n  } = config;\n  const { locale: localeStr, day, year } = locale;\n  const { M, Y } = getDateParts(calendarStartDate);\n  const { start, length } = getCalendarMonthParams(M, Y, calendar);\n\n  const days: DPDay[] = Array(length)\n    .fill(0)\n    .map((_, i) => {\n      const $date = newDate(Y, M, i + 1 - start);\n\n      return {\n        $date,\n        active: isSame(offsetDate, $date),\n        day: toLocaleDateString($date, localeStr, { day }),\n        now: isSame(getCleanDate(newDate()), $date),\n        range: getDateRangeState($date, rangeEnd, selectedDates, mode),\n        disabled:\n          minDateAndBefore(minDate, $date) ||\n          maxDateAndAfter(maxDate, $date) ||\n          isExcluded($date, exclude),\n        selected: includeDate(selectedDates, $date),\n        inCurrentMonth: getDateParts($date).M === M,\n      };\n    });\n\n  return {\n    year: toLocaleDateString(calendarStartDate, localeStr, { year }),\n    month: formatMonthName(calendarStartDate, locale),\n    days,\n  };\n};\n\nexport const createCalendars = ({\n  selectedDates,\n  state,\n  config,\n  offsetDate,\n}: DPState): DPCalendar[] => {\n  return config.calendar.offsets.map((offset) =>\n    createCalendar(\n      offsetDate,\n      addToDate(offsetDate, offset, 'month'),\n      selectedDates,\n      state,\n      config,\n    ),\n  );\n};\n","import type { DPCalendar, DPConfig } from '../types';\nimport { toLocaleDateString } from './date';\n\nexport var createWeekdays = (\n  { days }: DPCalendar,\n  { locale: { locale, weekday } }: DPConfig,\n): string[] =>\n  [0, 1, 2, 3, 4, 5, 6].map((day: number) =>\n    toLocaleDateString(days[day].$date, locale, { weekday }),\n  );\n","import { useMemo } from 'react';\n\nimport type { DPUseCalendars } from './types';\nimport { createCalendars } from './utils/create-calendars';\nimport { createWeekdays } from './utils/create-weekdays';\n\nexport const useCalendars: DPUseCalendars = (state) => {\n  const calendars = createCalendars(state);\n\n  return useMemo(\n    () => ({\n      calendars,\n      weekDays: createWeekdays(calendars[0], state.config),\n    }),\n    [calendars, state.config],\n  );\n};\n","export const callAll =\n  <Args extends readonly unknown[]>(\n    ...fns: readonly (((...args: Args) => void) | undefined)[]\n  ) =>\n  (...args: Args): void =>\n    fns.forEach((fn) => fn?.(...args));\n\nexport const skipFirst =\n  <Arg1, Arg2>(fn: (arg: Arg2) => void) =>\n  (_arg1: Arg1, arg2: Arg2) =>\n    fn(arg2);\n\nexport const skipAll =\n  (fn: () => void) =>\n  (..._: unknown[]) => {\n    fn();\n    void _;\n  };\n","import { MouseEvent } from 'react';\n\nimport type { DPPropGetter, DPPropsGetterConfig } from '../types';\n\nexport const createPropGetter = (\n  isDisabled: boolean,\n  action: (evt: MouseEvent<HTMLElement>) => void,\n  props: DPPropsGetterConfig = {},\n  selected = false,\n): DPPropGetter => ({\n  role: 'button',\n  tabIndex: 0,\n  ...(isDisabled\n    ? {\n        disabled: true,\n        'aria-disabled': true,\n      }\n    : {\n        onClick(evt: MouseEvent<HTMLElement>) {\n          action(evt);\n        },\n      }),\n  ...(selected ? { 'aria-selected': true } : {}),\n  ...props,\n});\n","import { Dispatch } from 'react';\n\nimport type {\n  DPReducerAction,\n  DPReducerState,\n  DPSetFocusDate,\n  DPSetOffsetDate,\n  DPSetRangeEndAction,\n  DPSetYearAction,\n} from './types';\n\nvar SET_FOCUS_DATE_ACTION = 'SET_FOCUS_DATE' as const;\nvar SET_OFFSET_DATE_ACTION = 'SET_OFFSET_DATE' as const;\nvar SET_RANGE_END_ACTION = 'SET_RANGE_END' as const;\nvar SET_YEAR_ACTION = 'SET_YEAR' as const;\n\nexport var stateReducer = (\n  state: DPReducerState,\n  action: DPReducerAction,\n): DPReducerState => {\n  switch (action.type) {\n    case SET_FOCUS_DATE_ACTION:\n      return {\n        ...state,\n        focusDate: action.date,\n      };\n    case SET_OFFSET_DATE_ACTION:\n      return {\n        ...state,\n        offsetDate: action.date,\n      };\n    case SET_RANGE_END_ACTION:\n      return {\n        ...state,\n        rangeEnd: action.date,\n      };\n    case SET_YEAR_ACTION:\n      return {\n        ...state,\n        offsetYear: action.year,\n      };\n    default:\n      return state;\n  }\n};\n\nexport var setFocus = (\n  dispatch: Dispatch<DPSetFocusDate>,\n  date: DPReducerState['focusDate'],\n): void => {\n  dispatch({ type: SET_FOCUS_DATE_ACTION, date });\n};\n\nexport var setOffset = (\n  dispatch: Dispatch<DPSetOffsetDate>,\n  date: Date,\n): void => {\n  dispatch({ type: SET_OFFSET_DATE_ACTION, date });\n};\n\nexport var setRangeEnd = (\n  dispatch: Dispatch<DPSetRangeEndAction>,\n  date: DPReducerState['rangeEnd'],\n): void => {\n  dispatch({ type: SET_RANGE_END_ACTION, date });\n};\n\nexport var setYear = (\n  dispatch: Dispatch<DPSetYearAction>,\n  year: number,\n): void => {\n  dispatch({ type: SET_YEAR_ACTION, year });\n};\n","import { setOffset } from '../state-reducer';\nimport { DPOffsetValue, DPState } from '../types';\nimport { addToDate, subtractFromDate } from './date';\nimport { isSame, maxDateAndAfter, minDateAndBefore } from './predicates';\n\nexport const setDPOffset =\n  ({ dispatch, config: { onOffsetChange, offsetDate } }: DPState) =>\n  (d: Date): void => {\n    // Prevent to call reducer action if offsetDate is external\n    if (!onOffsetChange && !offsetDate) setOffset(dispatch, d);\n    if (onOffsetChange) onOffsetChange(d);\n  };\n\nexport const getNextOffsetDate = (\n  d: Date,\n  { days, months, years }: DPOffsetValue,\n): Date => {\n  let nextDate = d;\n  if (days && days !== 0) {\n    nextDate = addToDate(nextDate, days, 'date');\n  }\n  if (months && months !== 0) {\n    nextDate = addToDate(nextDate, months, 'month');\n  }\n  if (years && years !== 0) {\n    nextDate = addToDate(nextDate, years, 'year');\n  }\n  return nextDate;\n};\n\nexport const getEdgedOffsetDate = (\n  offsetDate: Date,\n  { days = 0, months = 0, years = 0 }: DPOffsetValue,\n  dateEdge?: Date,\n): Date => {\n  if (!dateEdge) return offsetDate;\n  if (isSame(offsetDate, dateEdge)) return offsetDate;\n  if (days !== 0) {\n    return calculateNewDateWithOffset(offsetDate, dateEdge, days, 'date');\n  }\n  if (months !== 0) {\n    return calculateNewDateWithOffset(offsetDate, dateEdge, months, 'month');\n  }\n  if (years !== 0) {\n    return calculateNewDateWithOffset(offsetDate, dateEdge, years, 'year');\n  }\n\n  return offsetDate;\n};\n\nexport const calculateNewDateWithOffset = (\n  offsetDate: Date,\n  dateEdge: Date,\n  offsetValue: number,\n  unit: 'date' | 'month' | 'year',\n): Date => {\n  const newDate = addToDate(offsetDate, offsetValue, unit);\n  const isPositiveOffsetValue = offsetValue > 0;\n  if (isPositiveOffsetValue) {\n    const isMaxDateAfterNewDate = maxDateAndAfter(dateEdge, newDate);\n    return isMaxDateAfterNewDate\n      ? subtractFromDate(dateEdge, offsetValue, unit)\n      : offsetDate;\n  }\n  const isMinDateBeforeNewDate = minDateAndBefore(dateEdge, newDate);\n  return isMinDateBeforeNewDate\n    ? subtractFromDate(dateEdge, offsetValue, unit)\n    : offsetDate;\n};\n","import { useCallback } from 'react';\n\nimport {\n  DPOffsetValue,\n  DPPropsGetterConfig,\n  DPUseDatePickerOffsetPropGetters,\n} from './types';\nimport { callAll, skipFirst } from './utils/call-all';\nimport { createPropGetter } from './utils/create-prop-getter';\nimport {\n  getEdgedOffsetDate,\n  getNextOffsetDate,\n  setDPOffset,\n} from './utils/offset';\nimport { maxDateAndAfter, minDateAndBefore } from './utils/predicates';\n\nexport const useDatePickerOffsetPropGetters: DPUseDatePickerOffsetPropGetters =\n  (state) => {\n    const {\n      config: { dates },\n    } = state;\n    const { minDate, maxDate } = dates;\n\n    const addOffset = useCallback(\n      (\n        offsetValue: DPOffsetValue,\n        { disabled, onClick, ...rest }: DPPropsGetterConfig = {},\n      ) => {\n        const offsetDate = getEdgedOffsetDate(\n          state.offsetDate,\n          offsetValue,\n          maxDate,\n        );\n        const nextDate = getNextOffsetDate(offsetDate, offsetValue);\n\n        const isDisabled = !!disabled || maxDateAndAfter(maxDate, nextDate);\n\n        return createPropGetter(\n          isDisabled,\n          (evt) =>\n            callAll(onClick, skipFirst(setDPOffset(state)))(evt, nextDate),\n          rest,\n        );\n      },\n      [maxDate, state],\n    );\n\n    const subtractOffset = useCallback(\n      (\n        { days = 0, months = 0, years = 0 }: DPOffsetValue,\n        { disabled, onClick, ...rest }: DPPropsGetterConfig = {},\n      ) => {\n        const negativeOffsetValue = {\n          days: -days,\n          months: -months,\n          years: -years,\n        };\n\n        const offsetDate = getEdgedOffsetDate(\n          state.offsetDate,\n          negativeOffsetValue,\n          minDate,\n        );\n        const nextDate = getNextOffsetDate(offsetDate, negativeOffsetValue);\n\n        const isDisabled = !!disabled || minDateAndBefore(minDate, nextDate);\n\n        return createPropGetter(\n          isDisabled,\n          (evt) =>\n            callAll(onClick, skipFirst(setDPOffset(state)))(evt, nextDate),\n          rest,\n        );\n      },\n      [minDate, state],\n    );\n\n    const setOffset = useCallback(\n      (d: Date, { disabled, onClick, ...rest }: DPPropsGetterConfig = {}) => {\n        const isDisabled =\n          !!disabled ||\n          minDateAndBefore(minDate, d) ||\n          maxDateAndAfter(maxDate, d);\n\n        return createPropGetter(\n          isDisabled,\n          (evt) => callAll(onClick, skipFirst(setDPOffset(state)))(evt, d),\n          rest,\n        );\n      },\n      [state, maxDate, minDate],\n    );\n\n    return {\n      addOffset,\n      setOffset,\n      subtractOffset,\n    };\n  };\n","import { maxDateAndAfter, minDateAndBefore } from './predicates';\n\nexport const getCalendarStartDate = (\n  minDate: Date | undefined,\n  maxDate: Date | undefined,\n  NOW: Date,\n): Date => {\n  if (maxDateAndAfter(maxDate, NOW)) return maxDate as Date;\n  if (minDateAndBefore(minDate, NOW)) return minDate as Date;\n  return NOW;\n};\n","import type { DPYearsConfig, DPYearsMode } from '../types';\n\n/*\n * Default behavior years collection\n * It get start of the decade -1\n * It really comfortable to navigate through years\n * because you have links to the previous and next decade\n * 2019 2020 2021\n * 2022 2023 2024\n * 2025 2026 2027\n * 2028 2029 2030\n */\nexport const getStartDecadePosition = (year: number): number =>\n  year - (year % 10) - 1;\n\n/*\n * If number of the year is default = 12 and current year is 2022\n * It will show this matrix\n * 2017 2018 2019\n * 2020 2021 2022 👌\n * 2023 2024 2025\n * 2026 2027 2028\n * I think it is nicer to look at the future more ;)\n */\nexport const getFluidYearPosition = (\n  year: number,\n  numberOfYears: number,\n): number => year - (numberOfYears / 2 - (numberOfYears % 2 === 0 ? 1 : 0));\n\n/*\n * It will place offsetYear at the end of the collection\n * 2015 2016 2017\n * 2012 2013 2014\n * 2018 2019 2020\n * 2021 2022 2023\n */\nexport const getStartExactPosition = (\n  year: number,\n  numberOfYears: number,\n): number => year - numberOfYears + 1;\n\nexport const isExactMode = (mode: DPYearsMode): boolean => mode === 'exact';\n\nexport const getCurrentYearPosition = (\n  year: number,\n  { mode, numberOfYears }: DPYearsConfig,\n): number => {\n  if (isExactMode(mode)) return getStartExactPosition(year, numberOfYears);\n  return mode === 'decade'\n    ? getStartDecadePosition(year)\n    : getFluidYearPosition(year, numberOfYears);\n};\n","import type { DPConfig, DPReducerState } from '../types';\nimport { getCleanDate, getDateParts, newDate } from './date';\nimport { getCalendarStartDate } from './get-calendar-start-date';\nimport { getCurrentYearPosition } from './get-current-year-position';\n\nexport const createInitialState = (config: DPConfig): DPReducerState => {\n  const {\n    selectedDates,\n    offsetDate,\n    focusDate,\n    dates: { minDate, maxDate },\n    years,\n  } = config;\n\n  const oDate = offsetDate\n    ? offsetDate\n    : selectedDates.length > 0\n      ? selectedDates[selectedDates.length - 1]\n      : getCalendarStartDate(minDate, maxDate, getCleanDate(newDate()));\n\n  return {\n    focusDate,\n    rangeEnd: null,\n    offsetDate: oDate,\n    offsetYear: getCurrentYearPosition(getDateParts(oDate).Y, years),\n  };\n};\n","import { useReducer } from 'react';\n\nimport { stateReducer } from './state-reducer';\nimport type { DPState, DPUserConfig } from './types';\nimport { createConfig } from './utils/config';\nimport { createInitialState } from './utils/create-initial-state';\n\nexport const useDatePickerState = (config: DPUserConfig): DPState => {\n  const dpConfig = createConfig(config);\n\n  const [state, dispatch] = useReducer(\n    stateReducer,\n    createInitialState(dpConfig),\n  );\n\n  return {\n    dispatch,\n    selectedDates: dpConfig.selectedDates,\n    offsetDate: dpConfig.offsetDate || state.offsetDate,\n    state,\n    config: dpConfig,\n  };\n};\n","import type { DPDatesConfig } from '../types';\nimport { isRange } from './config';\nimport { addAndSortAsc, getCleanDate } from './date';\nimport { includeDate, isSame } from './predicates';\n\nexport const getMultipleDates = (\n  selectedDates: Date[],\n  date: Date,\n  { mode, toggle, limit }: DPDatesConfig,\n): Date[] => {\n  // If toggle is active and we have already selected this date\n  // Then filter it out in all modes\n  if (toggle && includeDate(selectedDates, date))\n    return selectedDates.filter((d) => !isSame(getCleanDate(d), date));\n\n  if (mode === 'multiple')\n    return !limit || selectedDates.length < limit\n      ? addAndSortAsc(selectedDates, date)\n      : selectedDates;\n\n  if (isRange(mode))\n    return selectedDates.length === 2\n      ? [date]\n      : addAndSortAsc(selectedDates, date);\n\n  // mode === 'single'\n  return [date];\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { setFocus, setRangeEnd as setRangeEndAction } from './state-reducer';\nimport type {\n  DPDay,\n  DPPropsGetterConfig,\n  DPUseDays,\n  DPUseDaysPropGetters,\n} from './types';\nimport { callAll, skipFirst } from './utils/call-all';\nimport { isRange } from './utils/config';\nimport { createPropGetter } from './utils/create-prop-getter';\nimport { formatDate, getCleanDate } from './utils/date';\nimport { getMultipleDates } from './utils/get-multiple-dates';\nimport { includeDate, isSame } from './utils/predicates';\n\nexport const useDays: DPUseDays = ({ selectedDates, config: { locale } }) =>\n  useMemo(\n    () => ({\n      selectedDates,\n      formattedDates: selectedDates.map((d: Date) => formatDate(d, locale)),\n    }),\n    [selectedDates, locale],\n  );\n\nexport const useDaysPropGetters: DPUseDaysPropGetters = ({\n  config,\n  selectedDates,\n  dispatch,\n}) => {\n  const {\n    onDatesChange,\n    dates: { mode, toggle, selectSameDate },\n  } = config;\n\n  const dayButton = useCallback(\n    (\n      { $date, selected, disabled, active }: DPDay,\n      { onClick, disabled: disabledProps, ...rest }: DPPropsGetterConfig = {},\n    ) =>\n      createPropGetter(\n        disabled || !!disabledProps,\n        (evt) => {\n          if (selected && !toggle) {\n            selectedDates.forEach((d) => {\n              if (isSame(getCleanDate(d), $date)) setFocus(dispatch, d);\n            });\n\n            // Handle case when user could select same date in range mode\n            if (!isRange(mode) || !selectSameDate) return;\n          }\n          if (isRange(mode) && selectedDates.length === 1) {\n            setRangeEndAction(dispatch, null);\n          }\n          callAll(\n            onClick,\n            skipFirst((d: Date) => {\n              const nextSelectedDates = getMultipleDates(\n                selectedDates,\n                d,\n                config.dates,\n              );\n              setFocus(\n                dispatch,\n                includeDate(nextSelectedDates, d) ? d : undefined,\n              );\n              onDatesChange(nextSelectedDates);\n            }),\n          )(evt, $date);\n        },\n        {\n          ...rest,\n          ...(isRange(mode) &&\n            selectedDates.length === 1 && {\n              onMouseEnter() {\n                setRangeEndAction(dispatch, $date);\n              },\n            }),\n          tabIndex: active ? 0 : -1,\n        },\n        selected,\n      ),\n    [\n      mode,\n      toggle,\n      config.dates,\n      onDatesChange,\n      selectedDates,\n      dispatch,\n      selectSameDate,\n    ],\n  );\n\n  return { dayButton };\n};\n","import type { DPDatesConfig, DPLocaleConfig, DPMonth } from '../types';\nimport { daysInMonth, formatMonthName, getDateParts, newDate } from './date';\nimport {\n  isAfterMaxMonth,\n  isBeforeMinMonth,\n  isSameOrAfterMaxYear,\n  isSameOrBeforeMinYear,\n} from './predicates';\n\nexport var createMonths = (\n  offsetDate: Date,\n  selectedDates: Date[],\n  locale: DPLocaleConfig,\n  { minDate, maxDate }: DPDatesConfig,\n): DPMonth[] => {\n  const { M, Y, D } = getDateParts(offsetDate);\n  const { Y: nY, M: nM } = getDateParts(newDate());\n\n  // 12 is a number of months in the year\n  return Array(12)\n    .fill(0)\n    .map((_, i) => {\n      // Prevent situation when previous month has less days than current March -> February\n      const maxMonthDate = daysInMonth(newDate(Y, i, 1));\n      const $date = newDate(Y, i, D > maxMonthDate ? maxMonthDate : D);\n\n      return {\n        $date,\n        month: formatMonthName($date, locale),\n        selected: selectedDates.some((d) => {\n          const { M: dM, Y: dY } = getDateParts(d);\n          return dY === Y && dM === i;\n        }),\n        active: M === i,\n        now: i === nM && Y === nY,\n        disabled:\n          (isBeforeMinMonth(i, minDate) && isSameOrBeforeMinYear(Y, minDate)) ||\n          (isAfterMaxMonth(i, maxDate) && isSameOrAfterMaxYear(Y, maxDate)),\n      };\n    });\n};\n","import { useCallback, useMemo } from 'react';\n\nimport type {\n  DPMonth,\n  DPPropsGetterConfig,\n  DPUseMonths,\n  DPUseMonthsPropGetters,\n} from './types';\nimport { callAll, skipFirst } from './utils/call-all';\nimport { createMonths } from './utils/create-months';\nimport { createPropGetter } from './utils/create-prop-getter';\nimport { setDPOffset } from './utils/offset';\n\nexport const useMonths: DPUseMonths = ({\n  selectedDates,\n  offsetDate,\n  config: { locale, dates },\n}) =>\n  useMemo(\n    () => ({\n      months: createMonths(offsetDate, selectedDates, locale, dates),\n    }),\n    [dates, locale, offsetDate, selectedDates],\n  );\n\nexport const useMonthsPropGetters: DPUseMonthsPropGetters = (dpState) => {\n  const monthButton = useCallback(\n    (\n      { $date, disabled, selected, active }: DPMonth,\n      { onClick, disabled: disabledProps, ...rest }: DPPropsGetterConfig = {},\n    ) =>\n      createPropGetter(\n        !!disabledProps || disabled,\n        (evt) => callAll(onClick, skipFirst(setDPOffset(dpState)))(evt, $date),\n        {\n          ...rest,\n          tabIndex: active ? 0 : -1,\n        },\n        selected,\n      ),\n    [dpState],\n  );\n\n  return { monthButton };\n};\n","import type { DPConfig, DPTime } from '../types';\nimport {\n  formatLocaleTime,\n  formatTime,\n  getDateParts,\n  getTimeDate,\n  newDate,\n} from './date';\nimport { isSame, maxDateAndAfter, minDateAndBefore } from './predicates';\n\nexport var createTime = (\n  d: Date | undefined,\n  { time, locale }: DPConfig,\n): DPTime[] => {\n  const NOW = newDate();\n  const { interval, minTime, maxTime, useLocales } = time;\n  const { Y, M, D } = getDateParts(d || NOW);\n  // 1440 is a number of minutes in the day 60 * 24\n  const segments = 1440 / interval;\n\n  const minDate = getTimeDate(Y, M, D, minTime);\n  const maxDate = getTimeDate(Y, M, D, maxTime);\n\n  return Array(segments)\n    .fill(0)\n    .map((_, i) => {\n      const $date = newDate(Y, M, D, 0, i * interval);\n      const disabled =\n        !d ||\n        minDateAndBefore(minDate, $date) ||\n        maxDateAndAfter(maxDate, $date);\n\n      return {\n        $date,\n        disabled,\n        now: isSame($date, NOW),\n        selected: d ? isSame(d, $date) : false,\n        time: useLocales\n          ? formatLocaleTime($date, locale)\n          : formatTime($date, locale),\n      };\n    });\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { setFocus } from './state-reducer';\nimport type {\n  DPPropsGetterConfig,\n  DPTime,\n  DPUseTime,\n  DPUseTimePropGetter,\n} from './types';\nimport { callAll, skipFirst } from './utils/call-all';\nimport { createPropGetter } from './utils/create-prop-getter';\nimport { createTime } from './utils/create-time';\nimport { isSame } from './utils/predicates';\n\nexport const useTime: DPUseTime = ({ state: { focusDate }, config }) =>\n  useMemo(\n    () => ({\n      time: createTime(focusDate, config),\n    }),\n    [focusDate, config],\n  );\n\nexport const useTimePropGetter: DPUseTimePropGetter = ({\n  selectedDates,\n  state: { focusDate },\n  config: { onDatesChange },\n  dispatch,\n}) => {\n  const timeButton = useCallback(\n    (\n      { $date, selected, disabled, now }: DPTime,\n      { onClick, disabled: disabledProps, ...rest }: DPPropsGetterConfig = {},\n    ) =>\n      createPropGetter(\n        disabled || !!disabledProps,\n        (evt) => {\n          if (selected) return;\n          callAll(\n            onClick,\n            skipFirst((d: Date) => {\n              const newSelected = selectedDates.map((selected) => {\n                return isSame(focusDate as Date, selected) ? d : selected;\n              });\n              setFocus(dispatch, d);\n              onDatesChange(newSelected);\n            }),\n          )(evt, $date);\n        },\n        {\n          ...rest,\n          tabIndex: selected || now ? 0 : -1,\n        },\n        selected,\n      ),\n    [selectedDates, onDatesChange, dispatch, focusDate],\n  );\n\n  return { timeButton };\n};\n","import type { DPDatesConfig, DPYear, DPYearsConfig } from '../types';\nimport { getDateParts, newDate } from './date';\nimport { isAfterMaxYear, isBeforeMinYear } from './predicates';\n\nexport const createYears = (\n  currentYear: number,\n  offsetDate: Date,\n  selectedDates: Date[],\n  { numberOfYears }: DPYearsConfig,\n  { minDate, maxDate }: DPDatesConfig,\n): DPYear[] => {\n  const { Y, M, D } = getDateParts(offsetDate);\n  const { Y: nY } = getDateParts(newDate());\n\n  return Array(numberOfYears)\n    .fill(0)\n    .map((_, i) => {\n      const year = currentYear + i;\n      const $date = newDate(year, M, D);\n\n      return {\n        $date,\n        active: Y === year,\n        disabled:\n          isBeforeMinYear(year, minDate) || isAfterMaxYear(year, maxDate),\n        now: year === nY,\n        selected: selectedDates.some((d) => getDateParts(d).Y === year),\n        year,\n      };\n    });\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { setYear } from './state-reducer';\nimport type {\n  DPPropsGetterConfig,\n  DPUseYears,\n  DPUseYearsPropGetters,\n  DPYear,\n} from './types';\nimport { callAll, skipAll, skipFirst } from './utils/call-all';\nimport { createPropGetter } from './utils/create-prop-getter';\nimport { createYears } from './utils/create-years';\nimport { getDateParts, newDate } from './utils/date';\nimport { isExactMode } from './utils/get-current-year-position';\nimport { setDPOffset } from './utils/offset';\nimport { isSame, maxDateAndAfter, minDateAndBefore } from './utils/predicates';\n\nexport const useYears: DPUseYears = ({\n  selectedDates,\n  offsetDate,\n  state: { offsetYear },\n  config: { years, dates },\n}) =>\n  useMemo(\n    () => ({\n      years: createYears(offsetYear, offsetDate, selectedDates, years, dates),\n    }),\n    [offsetDate, offsetYear, selectedDates, years, dates],\n  );\n\nexport const useYearsPropGetters: DPUseYearsPropGetters = (dpState) => {\n  const {\n    offsetDate,\n    state: { offsetYear },\n    config: { dates, years: yearsConfig },\n    dispatch,\n  } = dpState;\n  const { minDate, maxDate } = dates;\n  const { step, numberOfYears, mode } = yearsConfig;\n  const { D, M } = getDateParts(offsetDate);\n\n  const yearButton = useCallback(\n    (\n      { $date, disabled, selected, active }: DPYear,\n      { onClick, disabled: disabledProps, ...rest }: DPPropsGetterConfig = {},\n    ) =>\n      createPropGetter(\n        !!disabledProps || disabled,\n        (evt) => callAll(onClick, skipFirst(setDPOffset(dpState)))(evt, $date),\n        {\n          ...rest,\n          tabIndex: active ? 0 : -1,\n        },\n        selected,\n      ),\n    [dpState],\n  );\n\n  const nextYearsButton = useCallback(\n    ({ onClick, disabled, ...rest }: DPPropsGetterConfig = {}) => {\n      const endYearDate = newDate(offsetYear + numberOfYears - 1, M, D);\n      const isDisabled =\n        !!disabled ||\n        maxDateAndAfter(maxDate, endYearDate) ||\n        (isExactMode(mode) && !!maxDate && isSame(maxDate, endYearDate));\n\n      return createPropGetter(\n        isDisabled,\n        (evt) =>\n          callAll(\n            onClick,\n            skipAll(() => setYear(dispatch, offsetYear + step)),\n          )(evt),\n        rest,\n      );\n    },\n    [maxDate, dispatch, offsetYear, step, D, M, numberOfYears, mode],\n  );\n\n  const previousYearsButton = useCallback(\n    ({ onClick, disabled, ...rest }: DPPropsGetterConfig = {}) => {\n      const isDisabled =\n        !!disabled || minDateAndBefore(minDate, newDate(offsetYear, M, D));\n\n      return createPropGetter(\n        isDisabled,\n        (evt) =>\n          callAll(\n            onClick,\n            skipAll(() => setYear(dispatch, offsetYear - step)),\n          )(evt),\n        rest,\n      );\n    },\n    [minDate, dispatch, offsetYear, step, M, D],\n  );\n\n  return {\n    yearButton,\n    nextYearsButton,\n    previousYearsButton,\n  };\n};\n","import type { DPUseDatePicker } from './types';\nimport { useCalendars } from './use-calendars';\nimport { useDatePickerOffsetPropGetters } from './use-date-picker-offset';\nimport { useDatePickerState } from './use-date-picker-state';\nimport { useDays, useDaysPropGetters } from './use-days';\nimport { useMonths, useMonthsPropGetters } from './use-months';\nimport { useTime, useTimePropGetter } from './use-time';\nimport { useYears, useYearsPropGetters } from './use-years';\n\nexport const useDatePicker: DPUseDatePicker = (config) => {\n  const dpState = useDatePickerState(config);\n\n  return {\n    data: {\n      ...useCalendars(dpState),\n      ...useDays(dpState),\n      ...useMonths(dpState),\n      ...useTime(dpState),\n      ...useYears(dpState),\n    },\n    propGetters: {\n      ...useDaysPropGetters(dpState),\n      ...useMonthsPropGetters(dpState),\n      ...useTimePropGetter(dpState),\n      ...useYearsPropGetters(dpState),\n      ...useDatePickerOffsetPropGetters(dpState),\n    },\n  };\n};\n","import React, { createContext, FC, useContext } from 'react';\n\nimport { DatePickerContextValue, DatePickerProviderProps } from './types';\nimport { useDatePicker } from './use-date-picker';\n\nvar DatePickerContext = createContext<DatePickerContextValue>(\n  {} as DatePickerContextValue,\n);\n\nexport var useDatePickerContext = () => useContext(DatePickerContext);\n\nexport var DatePickerProvider: FC<DatePickerProviderProps> = ({\n  children,\n  config,\n}) => {\n  return (\n    <DatePickerContext.Provider value={useDatePicker(config)}>\n      {children}\n    </DatePickerContext.Provider>\n  );\n};\n","import React, { createContext, FC, useContext } from 'react';\n\nimport type { DatePickerProviderProps, DPState } from './types';\nimport { useDatePickerState } from './use-date-picker-state';\n\nvar DatePickerStateContext = createContext<DPState>({} as DPState);\n\nexport var useDatePickerStateContext = () => useContext(DatePickerStateContext);\n\nexport var DatePickerStateProvider: FC<DatePickerProviderProps> = ({\n  children,\n  config,\n}) => {\n  return (\n    <DatePickerStateContext.Provider value={useDatePickerState(config)}>\n      {children}\n    </DatePickerStateContext.Provider>\n  );\n};\n","import { useDatePickerStateContext } from './date-picker-state-provider';\nimport type {\n  DPUseContextCalendars,\n  DPUseContextDatePickerOffsetPropGetters,\n  DPUseContextDays,\n  DPUseContextDaysPropGetters,\n  DPUseContextMonths,\n  DPUseContextMonthsPropGetters,\n  DPUseContextTime,\n  DPUseContextTimePropGetters,\n  DPUseContextYears,\n  DPUseContextYearsPropGetters,\n} from './types';\nimport { useCalendars } from './use-calendars';\nimport { useDatePickerOffsetPropGetters } from './use-date-picker-offset';\nimport { useDays, useDaysPropGetters } from './use-days';\nimport { useMonths, useMonthsPropGetters } from './use-months';\nimport { useTime, useTimePropGetter } from './use-time';\nimport { useYears, useYearsPropGetters } from './use-years';\n\nexport const useContextCalendars: DPUseContextCalendars = () =>\n  useCalendars(useDatePickerStateContext());\n\nexport const useContextDays: DPUseContextDays = () =>\n  useDays(useDatePickerStateContext());\n\nexport const useContextDaysPropGetters: DPUseContextDaysPropGetters = () =>\n  useDaysPropGetters(useDatePickerStateContext());\n\nexport const useContextMonths: DPUseContextMonths = () =>\n  useMonths(useDatePickerStateContext());\n\nexport const useContextMonthsPropGetters: DPUseContextMonthsPropGetters = () =>\n  useMonthsPropGetters(useDatePickerStateContext());\n\nexport const useContextTime: DPUseContextTime = () =>\n  useTime(useDatePickerStateContext());\n\nexport const useContextTimePropGetters: DPUseContextTimePropGetters = () =>\n  useTimePropGetter(useDatePickerStateContext());\n\nexport const useContextYears: DPUseContextYears = () =>\n  useYears(useDatePickerStateContext());\n\nexport const useContextYearsPropGetters: DPUseContextYearsPropGetters = () =>\n  useYearsPropGetters(useDatePickerStateContext());\n\nexport const useContextDatePickerOffsetPropGetters: DPUseContextDatePickerOffsetPropGetters =\n  () => useDatePickerOffsetPropGetters(useDatePickerStateContext());\n"],"names":["setRangeEndAction"],"mappings":"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"}