{"version":3,"sources":["../src/calendar-utils.ts"],"sourcesContent":["import type { Dayjs } from \"dayjs\"\nimport type { MutableRefObject, RefObject } from \"react\"\nimport { isActiveElement } from \"@yamada-ui/utils\"\nimport dayjs from \"dayjs\"\n\nexport type MaybeDate = Date | Dayjs\n\nexport const getFirstOfWeek = (\n  date: Date,\n  firstDayOfWeek: \"monday\" | \"sunday\",\n): Date => {\n  const value = new Date(date)\n  const day = value.getDay() || 7\n  const sunday = firstDayOfWeek === \"sunday\"\n\n  const clampToFirstDay = sunday ? day : day - 1\n\n  if ((sunday && day !== 0) || day !== 1) value.setHours(-24 * clampToFirstDay)\n\n  return value\n}\n\nexport const getLastOfWeek = (\n  date: Date,\n  firstDayOfWeek: \"monday\" | \"sunday\",\n): Date => {\n  const value = new Date(date)\n  const day = value.getDay()\n  const sunday = firstDayOfWeek === \"sunday\"\n\n  const clampToLastDay = 7 - (sunday ? day + 1 : day)\n\n  if ((sunday && day !== 6) || day !== 0)\n    value.setDate(value.getDate() + clampToLastDay)\n\n  return value\n}\n\nexport const getWeekdays = (\n  locale: string,\n  firstDayOfWeek: \"monday\" | \"sunday\",\n  format = \"dd\",\n): string[] => {\n  let weekdays: string[] = []\n\n  const date = getFirstOfWeek(new Date(), firstDayOfWeek)\n\n  for (let i = 0; i < 7; i += 1) {\n    const weekday = dayjs(date).locale(locale).format(format)\n\n    weekdays = [...weekdays, weekday]\n\n    date.setDate(date.getDate() + 1)\n  }\n\n  return weekdays\n}\n\nexport const getMonthDays = (\n  date: Date,\n  firstDayOfWeek: \"monday\" | \"sunday\",\n): Date[][] => {\n  const currentMonth = date.getMonth()\n  const firstOfMonth = new Date(date.getFullYear(), currentMonth, 1)\n  const lastOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)\n  const endDate = getLastOfWeek(lastOfMonth, firstDayOfWeek)\n  const firstDate = getFirstOfWeek(firstOfMonth, firstDayOfWeek)\n\n  const weeks: Date[][] = []\n\n  while (firstDate <= endDate) {\n    const days: Date[] = []\n\n    for (let i = 0; i < 7; i += 1) {\n      days.push(new Date(firstDate))\n\n      firstDate.setDate(firstDate.getDate() + 1)\n    }\n\n    weeks.push(days)\n  }\n\n  return weeks\n}\n\nexport const getRangeYears = (year: number): number[] => {\n  const rounded = year - 6\n\n  let rangeYears: number[] = []\n\n  for (let i = 0; i < 12; i += 1) {\n    const rangeYear = rounded + i\n\n    rangeYears = [...rangeYears, rangeYear]\n  }\n\n  return rangeYears\n}\n\nexport const getRangeMonths = (locale: string, format: string): string[] => {\n  const rounded = new Date(1993, 0, 1)\n\n  let rangeMonths: string[] = []\n\n  for (let i = 0; i < 12; i += 1) {\n    const rangeMonth = dayjs(rounded).locale(locale).format(format)\n\n    rangeMonths = [...rangeMonths, rangeMonth]\n\n    rounded.setMonth(rounded.getMonth() + 1)\n  }\n\n  return rangeMonths\n}\n\nexport const getFormattedLabel = (\n  dateOrYear: Date | number | undefined,\n  locale: string,\n  format: string,\n): string => {\n  if (dateOrYear == null || dateOrYear === -1) {\n    return \"\"\n  } else if (dateOrYear instanceof Date) {\n    return dayjs(dateOrYear).locale(locale).format(format)\n  } else {\n    return dayjs(new Date(dateOrYear, 1, 1))\n      .locale(locale)\n      .format(format)\n  }\n}\n\nexport const isSameMonth = (\n  date: Date | undefined,\n  comparison: Date | undefined,\n): boolean =>\n  date?.getFullYear() === comparison?.getFullYear() &&\n  date?.getMonth() === comparison?.getMonth()\n\nexport const isSameDate = (\n  date: Date | undefined,\n  comparison: Date | undefined,\n) => isSameMonth(date, comparison) && date?.getDate() === comparison?.getDate()\n\nexport const getRangeDates = (\n  startDate: Date | undefined,\n  endDate: Date | undefined,\n) => {\n  const dates: Date[] = []\n\n  if (!startDate || !endDate) {\n    if (startDate) dates.push(startDate)\n    if (endDate) dates.push(endDate)\n  } else {\n    const resolvedStartDate = dayjs(startDate).startOf(\"day\")\n    const resolvedEndDate = dayjs(endDate).startOf(\"day\")\n\n    const n = Math.abs(resolvedStartDate.diff(resolvedEndDate, \"day\"))\n\n    let date = resolvedStartDate\n\n    for (let i = 0; i <= n; i++) {\n      dates.push(date.add(i, \"day\").toDate())\n    }\n  }\n\n  return dates\n}\n\nexport const isAfterMonth = (value: Date, date: Date | undefined) =>\n  date instanceof Date && dayjs(value).startOf(\"month\").isAfter(date)\n\nexport const isBeforeMonth = (value: Date, date: Date | undefined) =>\n  date instanceof Date && dayjs(value).startOf(\"month\").isBefore(date)\n\nexport const isInRange = (date: Date, minDate?: Date, maxDate?: Date) => {\n  const hasMinDate = minDate instanceof Date\n  const hasMaxDate = maxDate instanceof Date\n\n  if (!hasMaxDate && !hasMinDate) return true\n\n  const minInRange = hasMinDate ? isSomeAfterDate(date, minDate) : true\n  const maxInRange = hasMaxDate ? isSomeBeforeDate(date, maxDate) : true\n\n  return maxInRange && minInRange\n}\n\nexport const isMonthInRange = ({\n  date,\n  maxDate,\n  minDate,\n}: {\n  date: Date\n  maxDate?: Date\n  minDate?: Date\n}) => {\n  const hasMinDate = minDate instanceof Date\n  const hasMaxDate = maxDate instanceof Date\n\n  if (!hasMaxDate && !hasMinDate) return true\n\n  const firstOfMonth = dayjs(date).startOf(\"month\")\n  const lastOfMonth = dayjs(date).endOf(\"month\")\n\n  const minInRange = hasMinDate ? lastOfMonth.isAfter(minDate) : true\n  const maxInRange = hasMaxDate ? firstOfMonth.isBefore(maxDate) : true\n\n  return maxInRange && minInRange\n}\n\nexport const isIncludeDates = (date: Date, dates: Date[]) =>\n  dates.some((d) => dayjs(d).isSame(date, \"day\"))\n\nexport const sortDates = (dates: Date[], type: \"asc\" | \"desc\" = \"asc\") => {\n  if (type === \"asc\") {\n    return dates.sort((a, b) => (dayjs(a).isAfter(b, \"day\") ? 1 : -1))\n  } else {\n    return dates.sort((a, b) => (dayjs(a).isBefore(b, \"day\") ? 1 : -1))\n  }\n}\n\nexport const isSomeAfterDate = (\n  value: MaybeDate,\n  date: MaybeDate | undefined,\n) =>\n  (date instanceof Date || date instanceof dayjs) &&\n  (dayjs(value).isSame(date) || isAfterDate(value, date))\n\nexport const isSomeBeforeDate = (\n  value: MaybeDate,\n  date: MaybeDate | undefined,\n) =>\n  (date instanceof Date || date instanceof dayjs) &&\n  (dayjs(value).isSame(date) || isBeforeDate(value, date))\n\nexport const isAfterDate = (value: MaybeDate, date: MaybeDate | undefined) =>\n  (date instanceof Date || date instanceof dayjs) &&\n  dayjs(date).isBefore(value, \"day\")\n\nexport const isBeforeDate = (value: MaybeDate, date: MaybeDate | undefined) =>\n  (date instanceof Date || date instanceof dayjs) &&\n  dayjs(date).isAfter(value, \"day\")\n\nexport const onShouldFocus = <T = any>(\n  refs: MutableRefObject<Map<T, RefObject<HTMLButtonElement>>>,\n  validateFunc: (value: T) => boolean,\n  isFirst = true,\n): void => {\n  let targetValue: T | undefined\n  let targetEl: HTMLButtonElement | null | undefined\n\n  for (const value of refs.current.keys()) {\n    const selected = validateFunc(value)\n\n    if (selected) targetValue = value\n  }\n\n  if (typeof targetValue === \"number\") {\n    const ref = refs.current.get(targetValue)\n\n    targetEl = ref?.current\n  } else {\n    const values = [...refs.current.values()]\n    const firstRef = values[0]\n    const lastRef = values[values.length - 1]\n\n    targetEl = isFirst ? firstRef?.current : lastRef?.current\n  }\n\n  if (targetEl) {\n    targetEl.focus()\n    targetEl.tabIndex = 0\n  }\n}\n\nexport const getFocused = <T = any>(\n  refs: MutableRefObject<Map<T, RefObject<HTMLButtonElement>>>,\n): T | undefined => {\n  for (const [value, ref] of refs.current.entries()) {\n    const focused = ref.current ? isActiveElement(ref.current) : false\n\n    if (focused) return value\n  }\n}\n\nexport const getRangeFirstDay = (\n  refs: MutableRefObject<Map<string, RefObject<HTMLButtonElement>>>,\n) => {\n  const days = [...refs.current.keys()]\n\n  return days[0]\n}\n\nexport const getRangeLastDay = (\n  refs: MutableRefObject<Map<string, RefObject<HTMLButtonElement>>>,\n) => {\n  const days = [...refs.current.keys()]\n\n  return days[days.length - 1]\n}\n\nexport const disableAllTabIndex = <T = any>(\n  refs: MutableRefObject<Map<T, RefObject<HTMLButtonElement>>>,\n): void => {\n  for (const ref of refs.current.values()) {\n    if (ref.current) ref.current.tabIndex = -1\n  }\n}\n\nexport const isDisabledDate = ({\n  disableOutsideDays,\n  endDate,\n  excludeDate,\n  maxDate,\n  maxTrulySelectStartDate,\n  maybeEndDate,\n  maybeStartDate,\n  minDate,\n  minTrulySelectStartDate,\n  outside,\n  startDate,\n  value,\n}: {\n  disableOutsideDays: boolean\n  outside: boolean\n  value: Date\n  endDate?: Date\n  excludeDate?: (date: Date) => boolean\n  maxDate?: Date\n  maxTrulySelectStartDate?: Date\n  maybeEndDate?: Date\n  maybeStartDate?: Date\n  minDate?: Date\n  minTrulySelectStartDate?: Date\n  startDate?: Date\n}) =>\n  isAfterDate(value, maxDate) ||\n  isBeforeDate(value, minDate) ||\n  (isAfterDate(value, maybeStartDate) &&\n    isBeforeDate(value, maxTrulySelectStartDate) &&\n    !endDate) ||\n  (isBeforeDate(value, maybeEndDate) &&\n    isAfterDate(value, minTrulySelectStartDate) &&\n    !startDate) ||\n  !!excludeDate?.(value) ||\n  (!!disableOutsideDays && !!outside)\n"],"mappings":"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","names":[]}