{"version":3,"file":"utils.mjs","sources":["../../../../../../../packages/components/calendar/src/utils.ts"],"sourcesContent":["import { createNamespace } from '@xzx-design/utils'\n\nconst [name, bem, t] = createNamespace('calendar')\n\nexport { name, bem, t }\n\nexport const formatMonthTitle = (date: Date) =>\n  t('monthTitle', date.getFullYear(), date.getMonth() + 1)\n\nexport function compareMonth(date1: Date, date2: Date) {\n  const year1 = date1.getFullYear()\n  const year2 = date2.getFullYear()\n\n  if (year1 === year2) {\n    const month1 = date1.getMonth()\n    const month2 = date2.getMonth()\n    return month1 === month2 ? 0 : month1 > month2 ? 1 : -1\n  }\n\n  return year1 > year2 ? 1 : -1\n}\n\nexport function compareDay(day1: Date, day2: Date) {\n  const compareMonthResult = compareMonth(day1, day2)\n\n  if (compareMonthResult === 0) {\n    const date1 = day1.getDate()\n    const date2 = day2.getDate()\n    return date1 === date2 ? 0 : date1 > date2 ? 1 : -1\n  }\n\n  return compareMonthResult\n}\n\nexport const cloneDate = (date: Date) => new Date(date)\n\nexport const cloneDates = (dates: Date | Date[]) =>\n  Array.isArray(dates) ? dates.map(cloneDate) : cloneDate(dates)\n\nexport function getDayByOffset(date: Date, offset: number) {\n  const cloned = cloneDate(date)\n  cloned.setDate(cloned.getDate() + offset)\n  return cloned\n}\n\nexport function getMonthByOffset(date: Date, offset: number) {\n  const cloned = cloneDate(date)\n  cloned.setMonth(cloned.getMonth() + offset)\n\n  if (cloned.getDate() !== date.getDate()) {\n    cloned.setDate(0)\n  }\n\n  return cloned\n}\n\nexport function getYearByOffset(date: Date, offset: number) {\n  const cloned = cloneDate(date)\n  cloned.setFullYear(cloned.getFullYear() + offset)\n\n  if (cloned.getDate() !== date.getDate()) {\n    cloned.setDate(0)\n  }\n\n  return cloned\n}\n\nexport const getPrevDay = (date: Date) => getDayByOffset(date, -1)\nexport const getNextDay = (date: Date) => getDayByOffset(date, 1)\nexport const getPrevMonth = (date: Date) => getMonthByOffset(date, -1)\nexport const getNextMonth = (date: Date) => getMonthByOffset(date, 1)\nexport const getPrevYear = (date: Date) => getYearByOffset(date, -1)\nexport const getNextYear = (date: Date) => getYearByOffset(date, 1)\nexport const getToday = () => {\n  const today = new Date()\n  today.setHours(0, 0, 0, 0)\n  return today\n}\n\nexport function calcDateNum(date: [Date, Date]) {\n  const day1 = date[0].getTime()\n  const day2 = date[1].getTime()\n  return (day2 - day1) / (1000 * 60 * 60 * 24) + 1\n}\n\n/**\n * Checks if the given date is in the last row of its month in a calendar view\n * @param date The date to check\n * @param offset The offset of the first day of the month\n * @returns boolean indicating whether the date is in the last row\n */\nexport function isLastRowInMonth(date: Date, offset = 0) {\n  const lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0)\n  const currentPos = offset + date.getDate() - 1\n  const lastDayPos = offset + lastDay.getDate() - 1\n\n  return Math.floor(currentPos / 7) === Math.floor(lastDayPos / 7)\n}\n"],"names":[],"mappings":"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"}