{"version":3,"file":"calendar.js","sources":["../../src/date/calendar.ts"],"sourcesContent":["/*\n * Implementation ported from from from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/calendar/create.ts\n*/\n\nimport type { DateValue } from '@internationalized/date'\nimport type { Grid } from './types'\nimport type { DateRange } from '@/shared'\nimport { endOfMonth, endOfYear, startOfMonth, startOfYear } from '@internationalized/date'\nimport { getDaysInMonth, getLastFirstDayOfWeek, getNextLastDayOfWeek } from './comparators'\nimport { chunk } from './utils'\n\nexport type WeekDayFormat = 'narrow' | 'short' | 'long'\n\nexport type CreateSelectProps = {\n /**\n * The date object representing the date (usually the first day of the month/year).\n */\n dateObj: DateValue\n}\n\nexport type CreateMonthProps = {\n /**\n * The date object representing the month's date (usually the first day of the month).\n */\n dateObj: DateValue\n\n /**\n * The day of the week to start the calendar on (0 for Sunday, 1 for Monday, etc.).\n */\n weekStartsOn: number\n\n /**\n * Whether to always render 6 weeks in the calendar, even if the month doesn't\n * span 6 weeks.\n */\n fixedWeeks: boolean\n\n /**\n * The locale to use when creating the calendar month.\n */\n locale: string\n}\n\n/**\n * Retrieves an array of date values representing the days between\n * the provided start and end dates.\n */\nexport function getDaysBetween(start: DateValue, end: DateValue) {\n const days: DateValue[] = []\n let dCurrent = start.add({ days: 1 })\n const dEnd = end\n while (dCurrent.compare(dEnd) < 0) {\n days.push(dCurrent)\n dCurrent = dCurrent.add({ days: 1 })\n }\n return days\n}\n\nexport function createMonth(props: CreateMonthProps): Grid {\n const { dateObj, weekStartsOn, fixedWeeks, locale } = props\n const daysInMonth = getDaysInMonth(dateObj)\n\n const datesArray = Array.from({ length: daysInMonth }, (_, i) => dateObj.set({ day: i + 1 }))\n\n const firstDayOfMonth = startOfMonth(dateObj)\n const lastDayOfMonth = endOfMonth(dateObj)\n\n const lastSunday = getLastFirstDayOfWeek(firstDayOfMonth, weekStartsOn, locale)\n const nextSaturday = getNextLastDayOfWeek(lastDayOfMonth, weekStartsOn, locale)\n\n const lastMonthDays = getDaysBetween(lastSunday.subtract({ days: 1 }), firstDayOfMonth)\n const nextMonthDays = getDaysBetween(lastDayOfMonth, nextSaturday.add({ days: 1 }))\n\n const totalDays = lastMonthDays.length + datesArray.length + nextMonthDays.length\n\n if (fixedWeeks && totalDays < 42) {\n const extraDays = 42 - totalDays\n\n let startFrom = nextMonthDays[nextMonthDays.length - 1]\n\n if (!startFrom)\n startFrom = endOfMonth(dateObj)\n\n const extraDaysArray = Array.from({ length: extraDays }, (_, i) => {\n const incr = i + 1\n return startFrom.add({ days: incr })\n })\n nextMonthDays.push(...extraDaysArray)\n }\n\n const allDays = lastMonthDays.concat(datesArray, nextMonthDays)\n\n const weeks = chunk(allDays, 7)\n\n return {\n value: dateObj,\n cells: allDays,\n rows: weeks,\n }\n}\n\ntype SetMonthProps = CreateMonthProps & {\n numberOfMonths: number | undefined\n currentMonths?: Grid[]\n}\n\ntype SetYearProps = CreateSelectProps & {\n numberOfMonths?: number\n pagedNavigation?: boolean\n}\n\ntype SetDecadeProps = CreateSelectProps & {\n startIndex?: number\n endIndex: number\n}\n\nexport function startOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return startOfYear(dateObj.subtract({ years: dateObj.year - Math.floor(dateObj.year / 10) * 10 }).set({ day: 1, month: 1 }))\n}\n\nexport function endOfDecade(dateObj: DateValue) {\n // round to the lowest nearest 10 when building the decade\n return endOfYear(dateObj.add({ years: Math.ceil((dateObj.year + 1) / 10) * 10 - dateObj.year - 1 }).set({ day: 35, month: 12 }))\n}\n\nexport function createDecade(props: SetDecadeProps): DateValue[] {\n const { dateObj, startIndex, endIndex } = props\n\n const decadeArray = Array.from({ length: Math.abs(startIndex ?? 0) + endIndex }, (_, i) =>\n i <= Math.abs((startIndex ?? 0))\n ? dateObj.subtract({ years: i }).set({ day: 1, month: 1 })\n : dateObj.add({ years: i - endIndex }).set({ day: 1, month: 1 }))\n\n decadeArray.sort((a: DateValue, b: DateValue) => a.year - b.year)\n\n return decadeArray\n}\n\nexport function createYear(props: SetYearProps): DateValue[] {\n const { dateObj, numberOfMonths = 1, pagedNavigation = false } = props\n\n if (numberOfMonths && pagedNavigation) {\n const monthsArray = Array.from({ length: Math.floor(12 / numberOfMonths) }, (_, i) => startOfMonth(dateObj.set({ month: i * numberOfMonths + 1 })))\n\n return monthsArray\n }\n\n const monthsArray = Array.from({ length: 12 }, (_, i) => startOfMonth(dateObj.set({ month: i + 1 })))\n return monthsArray\n}\n\nexport function createMonths(props: SetMonthProps) {\n const { numberOfMonths, dateObj, ...monthProps } = props\n\n const months: Grid[] = []\n\n if (!numberOfMonths || numberOfMonths === 1) {\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n return months\n }\n\n months.push(\n createMonth({\n ...monthProps,\n dateObj,\n }),\n )\n\n // Create all the months, starting with the current month\n for (let i = 1; i < numberOfMonths; i++) {\n const nextMonth = dateObj.add({ months: i })\n months.push(\n createMonth({\n ...monthProps,\n dateObj: nextMonth,\n }),\n )\n }\n\n return months\n}\n\nexport function createYearRange({ start, end }: DateRange): DateValue[] {\n const years: DateValue[] = []\n\n if (!start || !end)\n return years\n\n let current = startOfYear(start)\n\n while (current.compare(end) <= 0) {\n years.push(current)\n // Move to the first day of the next year\n current = startOfYear(current.add({ years: 1 }))\n }\n\n return years\n}\n\nexport function createDateRange({ start, end }: DateRange): DateValue[] {\n const dates: DateValue[] = []\n\n if (!start || !end)\n return dates\n\n let current = start\n\n while (current.compare(end) <= 0) {\n dates.push(current)\n current = current.add({ days: 1 })\n }\n\n return dates\n}\n"],"names":["monthsArray"],"mappings":";;;;AA+CgB,SAAA,cAAA,CAAe,OAAkB,GAAgB,EAAA;AAC/D,EAAA,MAAM,OAAoB,EAAC;AAC3B,EAAA,IAAI,WAAW,KAAM,CAAA,GAAA,CAAI,EAAE,IAAA,EAAM,GAAG,CAAA;AACpC,EAAA,MAAM,IAAO,GAAA,GAAA;AACb,EAAA,OAAO,QAAS,CAAA,OAAA,CAAQ,IAAI,CAAA,GAAI,CAAG,EAAA;AACjC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,IAAA,QAAA,GAAW,QAAS,CAAA,GAAA,CAAI,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA;AAErC,EAAO,OAAA,IAAA;AACT;AAEO,SAAS,YAAY,KAA0C,EAAA;AACpE,EAAA,MAAM,EAAE,OAAA,EAAS,YAAc,EAAA,UAAA,EAAY,QAAW,GAAA,KAAA;AACtD,EAAM,MAAA,WAAA,GAAc,eAAe,OAAO,CAAA;AAE1C,EAAA,MAAM,aAAa,KAAM,CAAA,IAAA,CAAK,EAAE,MAAA,EAAQ,aAAe,EAAA,CAAC,CAAG,EAAA,CAAA,KAAM,QAAQ,GAAI,CAAA,EAAE,KAAK,CAAI,GAAA,CAAA,EAAG,CAAC,CAAA;AAE5F,EAAM,MAAA,eAAA,GAAkB,aAAa,OAAO,CAAA;AAC5C,EAAM,MAAA,cAAA,GAAiB,WAAW,OAAO,CAAA;AAEzC,EAAA,MAAM,UAAa,GAAA,qBAAA,CAAsB,eAAiB,EAAA,YAAA,EAAc,MAAM,CAAA;AAC9E,EAAA,MAAM,YAAe,GAAA,oBAAA,CAAqB,cAAgB,EAAA,YAAA,EAAc,MAAM,CAAA;AAE9E,EAAM,MAAA,aAAA,GAAgB,eAAe,UAAW,CAAA,QAAA,CAAS,EAAE,IAAM,EAAA,CAAA,EAAG,CAAA,EAAG,eAAe,CAAA;AACtF,EAAM,MAAA,aAAA,GAAgB,eAAe,cAAgB,EAAA,YAAA,CAAa,IAAI,EAAE,IAAA,EAAM,CAAE,EAAC,CAAC,CAAA;AAElF,EAAA,MAAM,SAAY,GAAA,aAAA,CAAc,MAAS,GAAA,UAAA,CAAW,SAAS,aAAc,CAAA,MAAA;AAE3E,EAAI,IAAA,UAAA,IAAc,YAAY,EAAI,EAAA;AAChC,IAAA,MAAM,YAAY,EAAK,GAAA,SAAA;AAEvB,IAAA,IAAI,SAAY,GAAA,aAAA,CAAc,aAAc,CAAA,MAAA,GAAS,CAAC,CAAA;AAEtD,IAAA,IAAI,CAAC,SAAA;AACH,MAAA,SAAA,GAAY,WAAW,OAAO,CAAA;AAEhC,IAAM,MAAA,cAAA,GAAiB,MAAM,IAAK,CAAA,EAAE,QAAQ,SAAU,EAAA,EAAG,CAAC,CAAA,EAAG,CAAM,KAAA;AACjE,MAAA,MAAM,OAAO,CAAI,GAAA,CAAA;AACjB,MAAA,OAAO,SAAU,CAAA,GAAA,CAAI,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,KACpC,CAAA;AACD,IAAc,aAAA,CAAA,IAAA,CAAK,GAAG,cAAc,CAAA;AAAA;AAGtC,EAAA,MAAM,OAAU,GAAA,aAAA,CAAc,MAAO,CAAA,UAAA,EAAY,aAAa,CAAA;AAE9D,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,EAAS,CAAC,CAAA;AAE9B,EAAO,OAAA;AAAA,IACL,KAAO,EAAA,OAAA;AAAA,IACP,KAAO,EAAA,OAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AACF;AAiBO,SAAS,cAAc,OAAoB,EAAA;AAEhD,EAAO,OAAA,WAAA,CAAY,QAAQ,QAAS,CAAA,EAAE,OAAO,OAAQ,CAAA,IAAA,GAAO,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,GAAO,EAAE,CAAI,GAAA,EAAA,EAAI,CAAA,CAAE,GAAI,CAAA,EAAE,KAAK,CAAG,EAAA,KAAA,EAAO,CAAE,EAAC,CAAC,CAAA;AAC7H;AAEO,SAAS,YAAY,OAAoB,EAAA;AAE9C,EAAO,OAAA,SAAA,CAAU,OAAQ,CAAA,GAAA,CAAI,EAAE,KAAA,EAAO,KAAK,IAAM,CAAA,CAAA,OAAA,CAAQ,IAAO,GAAA,CAAA,IAAK,EAAE,CAAA,GAAI,KAAK,OAAQ,CAAA,IAAA,GAAO,CAAE,EAAC,CAAE,CAAA,GAAA,CAAI,EAAE,GAAA,EAAK,EAAI,EAAA,KAAA,EAAO,EAAG,EAAC,CAAC,CAAA;AACjI;AAEO,SAAS,aAAa,KAAoC,EAAA;AAC/D,EAAA,MAAM,EAAE,OAAA,EAAS,UAAY,EAAA,QAAA,EAAa,GAAA,KAAA;AAE1C,EAAM,MAAA,WAAA,GAAc,MAAM,IAAK,CAAA,EAAE,QAAQ,IAAK,CAAA,GAAA,CAAI,UAAc,IAAA,CAAC,CAAI,GAAA,QAAA,IAAY,CAAC,CAAA,EAAG,CACnF,KAAA,CAAA,IAAK,IAAK,CAAA,GAAA,CAAK,cAAc,CAAE,CAAA,GAC3B,OAAQ,CAAA,QAAA,CAAS,EAAE,KAAA,EAAO,GAAG,CAAA,CAAE,GAAI,CAAA,EAAE,GAAK,EAAA,CAAA,EAAG,OAAO,CAAE,EAAC,CACvD,GAAA,OAAA,CAAQ,GAAI,CAAA,EAAE,OAAO,CAAI,GAAA,QAAA,EAAU,CAAA,CAAE,GAAI,CAAA,EAAE,KAAK,CAAG,EAAA,KAAA,EAAO,CAAE,EAAC,CAAC,CAAA;AAEpE,EAAA,WAAA,CAAY,KAAK,CAAC,CAAA,EAAc,MAAiB,CAAE,CAAA,IAAA,GAAO,EAAE,IAAI,CAAA;AAEhE,EAAO,OAAA,WAAA;AACT;AAEO,SAAS,WAAW,KAAkC,EAAA;AAC3D,EAAA,MAAM,EAAE,OAAS,EAAA,cAAA,GAAiB,CAAG,EAAA,eAAA,GAAkB,OAAU,GAAA,KAAA;AAEjE,EAAA,IAAI,kBAAkB,eAAiB,EAAA;AACrC,IAAMA,MAAAA,YAAAA,GAAc,KAAM,CAAA,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAK,KAAM,CAAA,EAAA,GAAK,cAAc,CAAA,EAAK,EAAA,CAAC,GAAG,CAAM,KAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,CAAI,EAAE,KAAA,EAAO,IAAI,cAAiB,GAAA,CAAA,EAAG,CAAC,CAAC,CAAA;AAElJ,IAAOA,OAAAA,YAAAA;AAAA;AAGT,EAAA,MAAM,cAAc,KAAM,CAAA,IAAA,CAAK,EAAE,MAAQ,EAAA,EAAA,IAAM,CAAC,CAAA,EAAG,MAAM,YAAa,CAAA,OAAA,CAAQ,IAAI,EAAE,KAAA,EAAO,IAAI,CAAE,EAAC,CAAC,CAAC,CAAA;AACpG,EAAO,OAAA,WAAA;AACT;AAEO,SAAS,aAAa,KAAsB,EAAA;AACjD,EAAA,MAAM,EAAE,cAAA,EAAgB,OAAS,EAAA,GAAG,YAAe,GAAA,KAAA;AAEnD,EAAA,MAAM,SAA4B,EAAC;AAEnC,EAAI,IAAA,CAAC,cAAkB,IAAA,cAAA,KAAmB,CAAG,EAAA;AAC3C,IAAO,MAAA,CAAA,IAAA;AAAA,MACL,WAAY,CAAA;AAAA,QACV,GAAG,UAAA;AAAA,QACH;AAAA,OACD;AAAA,KACH;AACA,IAAO,OAAA,MAAA;AAAA;AAGT,EAAO,MAAA,CAAA,IAAA;AAAA,IACL,WAAY,CAAA;AAAA,MACV,GAAG,UAAA;AAAA,MACH;AAAA,KACD;AAAA,GACH;AAGA,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,EAAgB,CAAK,EAAA,EAAA;AACvC,IAAA,MAAM,YAAY,OAAQ,CAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,GAAG,CAAA;AAC3C,IAAO,MAAA,CAAA,IAAA;AAAA,MACL,WAAY,CAAA;AAAA,QACV,GAAG,UAAA;AAAA,QACH,OAAS,EAAA;AAAA,OACV;AAAA,KACH;AAAA;AAGF,EAAO,OAAA,MAAA;AACT;AAEO,SAAS,eAAgB,CAAA,EAAE,KAAO,EAAA,GAAA,EAA+B,EAAA;AACtE,EAAA,MAAM,QAAqB,EAAC;AAE5B,EAAI,IAAA,CAAC,SAAS,CAAC,GAAA;AACb,IAAO,OAAA,KAAA;AAET,EAAI,IAAA,OAAA,GAAU,YAAY,KAAK,CAAA;AAE/B,EAAA,OAAO,OAAQ,CAAA,OAAA,CAAQ,GAAG,CAAA,IAAK,CAAG,EAAA;AAChC,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAElB,IAAA,OAAA,GAAU,YAAY,OAAQ,CAAA,GAAA,CAAI,EAAE,KAAO,EAAA,CAAA,EAAG,CAAC,CAAA;AAAA;AAGjD,EAAO,OAAA,KAAA;AACT;AAEO,SAAS,eAAgB,CAAA,EAAE,KAAO,EAAA,GAAA,EAA+B,EAAA;AACtE,EAAA,MAAM,QAAqB,EAAC;AAE5B,EAAI,IAAA,CAAC,SAAS,CAAC,GAAA;AACb,IAAO,OAAA,KAAA;AAET,EAAA,IAAI,OAAU,GAAA,KAAA;AAEd,EAAA,OAAO,OAAQ,CAAA,OAAA,CAAQ,GAAG,CAAA,IAAK,CAAG,EAAA;AAChC,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,IAAA,OAAA,GAAU,OAAQ,CAAA,GAAA,CAAI,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA;AAGnC,EAAO,OAAA,KAAA;AACT;;;;"}