{"version":3,"sources":["../../../../../src/components/Calendar/utils/dateGrid/getDayGrid.ts"],"sourcesContent":["import {\n  addDays,\n  addCivilDays,\n  areDatesEqual,\n  compareDatePart,\n  createDate,\n  getDateRange,\n  getStartDateOfWeek,\n  isDateInRange,\n  matchesCivilDate,\n} from '../dateMath';\nimport { DAYS_IN_WEEK, DEFAULT_WORK_WEEK_DAYS } from '../constants';\nimport type { DayOfWeek } from '../constants';\nimport type { Day, DayGridOptions } from './dateGrid.types';\nimport { getAvailableDates, isRestrictedDate } from './dateAvailability';\n\n/**\n * Generates a grid of days, given the `options`.\n * Returns only visible weeks, including outside-month days needed to complete each row.\n * @param options - parameters to specify date related restrictions for the resulting grid\n * @throws RangeError if the week count is invalid or grid dates cannot be represented.\n */\nexport const getDayGrid = (options: DayGridOptions): Day[][] => {\n  const {\n    selectedDate,\n    dateRangeType,\n    firstDayOfWeek,\n    today,\n    minDate,\n    maxDate,\n    weeksToShow,\n    workWeekDays,\n    daysToSelectInDayView,\n    restrictedDates,\n    markedDays,\n  } = options;\n\n  if (\n    weeksToShow !== undefined &&\n    (!Number.isFinite(weeksToShow) || !Number.isInteger(weeksToShow) || weeksToShow <= 0)\n  ) {\n    throw new RangeError('weeksToShow must be a positive finite integer.');\n  }\n\n  const restrictedDateOptions = { minDate, maxDate, restrictedDates };\n  const effectiveWorkWeekDays: DayOfWeek[] = workWeekDays ?? [...DEFAULT_WORK_WEEK_DAYS];\n\n  const todaysDate = today || new Date();\n\n  const navigatedDate = options.navigatedDate ? options.navigatedDate : todaysDate;\n\n  if (!Number.isFinite(navigatedDate.getTime())) {\n    throw new RangeError('navigatedDate must be valid.');\n  }\n\n  let date;\n  if (weeksToShow && weeksToShow <= 4) {\n    // if showing less than a full month, just use date == navigatedDate\n    date = createDate(navigatedDate.getFullYear(), navigatedDate.getMonth(), navigatedDate.getDate());\n  } else {\n    date = createDate(navigatedDate.getFullYear(), navigatedDate.getMonth(), 1);\n  }\n  const weeks: Day[][] = [];\n\n  date = getStartDateOfWeek(date, firstDayOfWeek);\n\n  if (weeksToShow === 5 && compareDatePart(navigatedDate, addDays(date, weeksToShow * DAYS_IN_WEEK)) >= 0) {\n    date = addDays(date, DAYS_IN_WEEK);\n  }\n\n  let civilDate = {\n    year: date.getFullYear(),\n    month: date.getMonth(),\n    day: date.getDate(),\n  };\n\n  let selectedDates: Date[] = [];\n\n  if (selectedDate) {\n    selectedDates = getAvailableDates(\n      getDateRange(selectedDate, dateRangeType, firstDayOfWeek, effectiveWorkWeekDays, daysToSelectInDayView),\n      restrictedDateOptions,\n    );\n  }\n\n  while (\n    weeksToShow !== undefined\n      ? weeks.length < weeksToShow\n      : !Number.isFinite(civilDate.year) ||\n        civilDate.year < navigatedDate.getFullYear() ||\n        (civilDate.year === navigatedDate.getFullYear() && civilDate.month <= navigatedDate.getMonth())\n  ) {\n    const week: Day[] = [];\n\n    for (let dayIndex = 0; dayIndex < DAYS_IN_WEEK; dayIndex++) {\n      const { year: civilYear, month: civilMonth, day: civilDay } = civilDate;\n      if (!Number.isFinite(civilYear) || !Number.isFinite(civilMonth) || !Number.isFinite(civilDay)) {\n        throw new RangeError('Cannot generate a grid containing an out-of-range date.');\n      }\n      const originalDate = createDate(civilYear, civilMonth, civilDay);\n      if (!Number.isFinite(originalDate.getTime())) {\n        throw new RangeError('Cannot generate a grid containing an out-of-range date.');\n      }\n      const isPlaceholder = !matchesCivilDate(originalDate, civilDate);\n      const dayInfo: Day = {\n        key: `${civilYear}-${civilMonth}-${civilDay}`,\n        date: civilDay.toString(),\n        originalDate: isPlaceholder ? null : originalDate,\n        isPlaceholder,\n        isInMonth: civilYear === navigatedDate.getFullYear() && civilMonth === navigatedDate.getMonth(),\n        isToday: !isPlaceholder && areDatesEqual(todaysDate, originalDate),\n        isSelected: !isPlaceholder && isDateInRange(originalDate, selectedDates),\n        isSingleSelected:\n          !isPlaceholder && !!selectedDate && selectedDates.length === 1 && areDatesEqual(originalDate, selectedDate),\n        isInBounds: !isPlaceholder && !isRestrictedDate(originalDate, restrictedDateOptions),\n        isMarked:\n          (!isPlaceholder && markedDays?.some((markedDay: Date) => areDatesEqual(originalDate, markedDay))) || false,\n      };\n\n      week.push(dayInfo);\n\n      civilDate = addCivilDays(civilDate, 1);\n    }\n\n    weeks.push(week);\n  }\n\n  return weeks;\n};\n"],"names":["getDayGrid","options","selectedDate","dateRangeType","firstDayOfWeek","today","minDate","maxDate","weeksToShow","workWeekDays","daysToSelectInDayView","restrictedDates","markedDays","undefined","Number","isFinite","isInteger","RangeError","restrictedDateOptions","effectiveWorkWeekDays","DEFAULT_WORK_WEEK_DAYS","todaysDate","Date","navigatedDate","getTime","date","createDate","getFullYear","getMonth","getDate","weeks","getStartDateOfWeek","compareDatePart","addDays","DAYS_IN_WEEK","civilDate","year","month","day","selectedDates","getAvailableDates","getDateRange","length","week","dayIndex","civilYear","civilMonth","civilDay","originalDate","isPlaceholder","matchesCivilDate","dayInfo","key","toString","isInMonth","isToday","areDatesEqual","isSelected","isDateInRange","isSingleSelected","isInBounds","isRestrictedDate","isMarked","some","markedDay","push","addCivilDays"],"mappings":"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"}