@zag-js/date-utils 0.67.0 → 0.68.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +22 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/normalize-year.ts +20 -0
- package/src/parse-date.ts +5 -0
package/dist/index.js
CHANGED
|
@@ -613,6 +613,25 @@ function getPreviousSection(focusedDate, startDate, larger, visibleDuration, loc
|
|
|
613
613
|
|
|
614
614
|
// src/parse-date.ts
|
|
615
615
|
var import_date12 = require("@internationalized/date");
|
|
616
|
+
|
|
617
|
+
// src/normalize-year.ts
|
|
618
|
+
var FUTURE_YEAR_COERCION = 10;
|
|
619
|
+
function normalizeYear(year) {
|
|
620
|
+
if (!year) return;
|
|
621
|
+
if (year.length === 3) {
|
|
622
|
+
return year.padEnd(4, "0");
|
|
623
|
+
}
|
|
624
|
+
if (year.length === 2) {
|
|
625
|
+
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
626
|
+
const currentCentury = Math.floor(currentYear / 100) * 100;
|
|
627
|
+
const twoDigitYear = parseInt(year.slice(-2), 10);
|
|
628
|
+
const fullYear = currentCentury + twoDigitYear;
|
|
629
|
+
return fullYear > currentYear + FUTURE_YEAR_COERCION ? (fullYear - 100).toString() : fullYear.toString();
|
|
630
|
+
}
|
|
631
|
+
return year;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// src/parse-date.ts
|
|
616
635
|
var isValidYear = (year) => year != null && year.length === 4;
|
|
617
636
|
var isValidMonth = (month) => month != null && parseFloat(month) <= 12;
|
|
618
637
|
var isValidDay = (day) => day != null && parseFloat(day) <= 31;
|
|
@@ -626,6 +645,9 @@ function parseDateString(date, locale, timeZone) {
|
|
|
626
645
|
month || (month = (curr.getMonth() + 1).toString());
|
|
627
646
|
day || (day = curr.getDate().toString());
|
|
628
647
|
}
|
|
648
|
+
if (!isValidYear(year)) {
|
|
649
|
+
year = normalizeYear(year);
|
|
650
|
+
}
|
|
629
651
|
if (isValidYear(year) && isValidMonth(month) && isValidDay(day)) {
|
|
630
652
|
return new import_date12.CalendarDate(+year, +month, +day);
|
|
631
653
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/constrain.ts","../src/align.ts","../src/assertion.ts","../src/duration.ts","../src/format-range.ts","../src/format-selected-date.ts","../src/get-day-formatter.ts","../src/get-era-format.ts","../src/format-visible-range.ts","../src/get-month-formatter.ts","../src/get-decade-range.ts","../src/get-month-days.ts","../src/get-start-of-week.ts","../src/get-month-names.ts","../src/get-weekday-formats.ts","../src/get-week-days.ts","../src/get-year-range.ts","../src/mutation.ts","../src/pagination.ts","../src/parse-date.ts","../src/preset.ts"],"sourcesContent":["export * from \"./align\"\nexport * from \"./assertion\"\nexport * from \"./constrain\"\nexport * from \"./duration\"\nexport * from \"./format-range\"\nexport * from \"./format-selected-date\"\nexport * from \"./format-visible-range\"\nexport * from \"./get-day-formatter\"\nexport * from \"./get-decade-range\"\nexport * from \"./get-month-days\"\nexport * from \"./get-month-formatter\"\nexport * from \"./get-month-names\"\nexport * from \"./get-week-days\"\nexport * from \"./get-weekday-formats\"\nexport * from \"./get-year-range\"\nexport * from \"./mutation\"\nexport * from \"./pagination\"\nexport * from \"./parse-date\"\nexport * from \"./preset\"\nexport type { DateAdjustFn, DateGranularity } from \"./types\"\n","import {\n type DateDuration,\n type DateValue,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate,\n} from \"@internationalized/date\"\n\n/* -----------------------------------------------------------------------------\n * Align date to start, end, or center of a duration\n * -----------------------------------------------------------------------------*/\n\nexport function alignCenter(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n const halfDuration: DateDuration = {}\n\n for (let prop in duration) {\n const key = prop as keyof DateDuration\n\n const value = duration[key]\n if (value == null) continue\n\n halfDuration[key] = Math.floor(value / 2)\n\n if (halfDuration[key] > 0 && value % 2 === 0) {\n halfDuration[key]--\n }\n }\n\n const aligned = alignStart(date, duration, locale).subtract(halfDuration)\n\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\nexport function alignStart(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n // align to the start of the largest unit\n let aligned = date\n if (duration.years) {\n aligned = startOfYear(date)\n } else if (duration.months) {\n aligned = startOfMonth(date)\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale)\n }\n\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\nexport function alignEnd(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n let d: DateDuration = { ...duration }\n // subtract 1 from the smallest unit\n if (d.days) {\n d.days--\n } else if (d.weeks) {\n d.weeks--\n } else if (d.months) {\n d.months--\n } else if (d.years) {\n d.years--\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d)\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\n/* -----------------------------------------------------------------------------\n * Constrain a date to a min/max range\n * -----------------------------------------------------------------------------*/\n\nexport function constrainStart(\n date: DateValue,\n aligned: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n if (min && date.compare(min) >= 0) {\n aligned = maxDate(aligned, alignStart(toCalendarDate(min), duration, locale))!\n }\n\n if (max && date.compare(max) <= 0) {\n aligned = minDate(aligned, alignEnd(toCalendarDate(max), duration, locale))!\n }\n\n return aligned\n}\n\nexport function constrainValue(date: DateValue, minValue?: DateValue, maxValue?: DateValue): DateValue {\n if (minValue) {\n date = maxDate(date, toCalendarDate(minValue))!\n }\n if (maxValue) {\n date = minDate(date, toCalendarDate(maxValue))!\n }\n return date\n}\n","import type { DateDuration, DateValue } from \"@internationalized/date\"\nimport { alignCenter, alignEnd, alignStart } from \"./constrain\"\nimport type { DateAlignment } from \"./types\"\n\nexport function alignDate(\n date: DateValue,\n alignment: DateAlignment,\n duration: DateDuration,\n locale: string,\n min?: DateValue | undefined,\n max?: DateValue | undefined,\n) {\n switch (alignment) {\n case \"start\":\n return alignStart(date, duration, locale, min, max)\n case \"end\":\n return alignEnd(date, duration, locale, min, max)\n case \"center\":\n default:\n return alignCenter(date, duration, locale, min, max)\n }\n}\n\nexport function alignStartDate(\n date: DateValue,\n startDate: DateValue,\n endDate: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue | undefined,\n max?: DateValue | undefined,\n) {\n if (date.compare(startDate) < 0) {\n return alignEnd(date, duration, locale, min, max)\n }\n if (date.compare(endDate) > 0) {\n return alignStart(date, duration, locale, min, max)\n }\n return startDate\n}\n","import { type DateValue, isSameDay, isToday } from \"@internationalized/date\"\nimport type { DateAvailableFn } from \"./types\"\n\nexport function isTodayDate(date: DateValue, timeZone: string) {\n return isToday(date, timeZone)\n}\n\nexport function isDateEqual(dateA: DateValue, dateB?: DateValue | null) {\n return dateB != null && isSameDay(dateA, dateB)\n}\n\nexport function isDateInvalid(date: DateValue, minValue?: DateValue | null, maxValue?: DateValue | null) {\n return (minValue != null && date.compare(minValue) < 0) || (maxValue != null && date.compare(maxValue) > 0)\n}\n\nexport function isDateDisabled(\n date: DateValue,\n startDate: DateValue,\n endDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n return isDateOutsideVisibleRange(date, startDate, endDate) || isDateInvalid(date, minValue, maxValue)\n}\n\nexport function isDateUnavailable(\n date: DateValue | null,\n isUnavailable: DateAvailableFn | undefined,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n if (!date) {\n return false\n }\n if (isUnavailable?.(date, locale)) {\n return true\n }\n return isDateInvalid(date, minValue, maxValue)\n}\n\nexport function isDateOutsideVisibleRange(date: DateValue, startDate: DateValue, endDate: DateValue) {\n return date.compare(startDate) < 0 || date.compare(endDate) > 0\n}\n\nexport function isPreviousVisibleRangeInvalid(\n startDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n const prevDate = startDate.subtract({ days: 1 })\n return isSameDay(prevDate, startDate) || isDateInvalid(prevDate, minValue, maxValue)\n}\n\nexport function isNextVisibleRangeInvalid(\n endDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n const nextDate = endDate.add({ days: 1 })\n return isSameDay(nextDate, endDate) || isDateInvalid(nextDate, minValue, maxValue)\n}\n","import type { DateDuration, DateValue } from \"@internationalized/date\"\n\nexport function getUnitDuration(duration: DateDuration) {\n let clone = { ...duration }\n\n for (let key in clone) {\n clone[key as keyof typeof clone] = 1\n }\n\n return clone\n}\n\nexport function getEndDate(startDate: DateValue, duration: DateDuration) {\n let clone = { ...duration }\n\n if (clone.days) {\n clone.days--\n } else {\n clone.days = -1\n }\n\n return startDate.add(clone)\n}\n","import type { DateValue, DateFormatter } from \"@internationalized/date\"\n\nexport function formatRange(\n startDate: DateValue,\n endDate: DateValue,\n formatter: DateFormatter,\n toString: (start: string, end: string) => string,\n timeZone: string,\n) {\n let parts = formatter.formatRangeToParts(startDate.toDate(timeZone), endDate.toDate(timeZone))\n\n let separatorIndex = -1\n\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i]\n if (part.source === \"shared\" && part.type === \"literal\") {\n separatorIndex = i\n } else if (part.source === \"endRange\") {\n break\n }\n }\n\n let start = \"\"\n let end = \"\"\n\n for (let i = 0; i < parts.length; i++) {\n if (i < separatorIndex) {\n start += parts[i].value\n } else if (i > separatorIndex) {\n end += parts[i].value\n }\n }\n\n return toString(start, end)\n}\n","import { type DateValue, isSameDay } from \"@internationalized/date\"\nimport { formatRange } from \"./format-range\"\nimport { getDayFormatter } from \"./get-day-formatter\"\n\nexport function formatSelectedDate(startDate: DateValue, endDate: DateValue | null, locale: string, timeZone: string) {\n let start = startDate\n let end = endDate ?? startDate\n\n let formatter = getDayFormatter(locale, timeZone)\n\n if (isSameDay(start, end)) {\n return formatter.format(start.toDate(timeZone))\n }\n\n return formatRange(start, end, formatter, (start, end) => `${start} – ${end}`, timeZone)\n}\n","import { DateFormatter, toCalendarDateTime, today } from \"@internationalized/date\"\nimport { getEraFormat } from \"./get-era-format\"\n\nexport function getDayFormatter(locale: string, timeZone: string) {\n const date = toCalendarDateTime(today(timeZone))\n return new DateFormatter(locale, {\n weekday: \"long\",\n month: \"long\",\n year: \"numeric\",\n day: \"numeric\",\n era: getEraFormat(date),\n timeZone,\n })\n}\n","import type { DateValue } from \"@internationalized/date\"\n\nexport function getEraFormat(date: DateValue | undefined): \"short\" | undefined {\n return date?.calendar.identifier === \"gregory\" && date.era === \"BC\" ? \"short\" : undefined\n}\n","import { type DateValue, endOfMonth, isSameDay, startOfMonth } from \"@internationalized/date\"\nimport { getDayFormatter } from \"./get-day-formatter\"\nimport { getMonthFormatter } from \"./get-month-formatter\"\n\nexport function formatVisibleRange(startDate: DateValue, endDate: DateValue | null, locale: string, timeZone: string) {\n const start = startDate\n const end = endDate ?? startDate\n\n const dayFormatter = getDayFormatter(locale, timeZone)\n\n if (!isSameDay(start, startOfMonth(start))) {\n return dayFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone))\n }\n\n const monthFormatter = getMonthFormatter(locale, timeZone)\n\n if (isSameDay(end, endOfMonth(start))) {\n return monthFormatter.format(start.toDate(timeZone))\n }\n\n if (isSameDay(end, endOfMonth(end))) {\n return monthFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone))\n }\n\n return \"\"\n}\n","import { today, toCalendarDate, DateFormatter } from \"@internationalized/date\"\nimport { getEraFormat } from \"./get-era-format\"\n\nexport function getMonthFormatter(locale: string, timeZone: string) {\n const date = toCalendarDate(today(timeZone))\n return new DateFormatter(locale, {\n month: \"long\",\n year: \"numeric\",\n era: getEraFormat(date),\n calendar: date?.calendar.identifier,\n timeZone: timeZone,\n })\n}\n","export function getDecadeRange(year: number) {\n const computedYear = year - (year % 10) - 1\n\n const years: number[] = []\n\n for (let i = 0; i < 12; i += 1) {\n const value = computedYear + i\n years.push(value)\n }\n\n return years\n}\n","import { type DateValue, getWeeksInMonth, isSameDay, getDayOfWeek, startOfMonth } from \"@internationalized/date\"\nimport { getStartOfWeek } from \"./get-start-of-week\"\n\nexport function getDaysInWeek(weekIndex: number, from: DateValue, locale: string, firstDayOfWeek?: number) {\n const weekDate = from.add({ weeks: weekIndex })\n const dates: DateValue[] = []\n let date = getStartOfWeek(weekDate, locale, firstDayOfWeek)\n while (dates.length < 7) {\n dates.push(date)\n let nextDate = date.add({ days: 1 })\n if (isSameDay(date, nextDate)) {\n break\n }\n date = nextDate\n }\n return dates\n}\n\nexport function getCustomWeeksInMonth(from: DateValue, locale: string, firstDayOfWeek?: number) {\n if (firstDayOfWeek == null) {\n return getWeeksInMonth(from, locale)\n }\n const paddingDays = (getDayOfWeek(startOfMonth(from), locale) - firstDayOfWeek + 7) % 7\n\n return Math.ceil((paddingDays + from.calendar.getDaysInMonth(from)) / 7)\n}\n\nexport function getMonthDays(from: DateValue, locale: string, numOfWeeks?: number, firstDayOfWeek?: number) {\n const monthWeeks = numOfWeeks ?? getCustomWeeksInMonth(from, locale, firstDayOfWeek)\n\n const weeks = [...new Array(monthWeeks).keys()]\n return weeks.map((week) => getDaysInWeek(week, from, locale, firstDayOfWeek))\n}\n","import { type DateValue, getDayOfWeek, startOfWeek } from \"@internationalized/date\"\n\nexport function getStartOfWeek(date: DateValue, locale: string, firstDayOfWeek?: number) {\n // If firstDayOfWeek is provided, use it; otherwise, use the locale's default\n if (firstDayOfWeek !== undefined) {\n // Adjust the date to the specified first day of the week\n const currentDayOfWeek = getDayOfWeek(date, locale)\n const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7\n return date.subtract({ days: daysToSubtract })\n }\n\n // Use the built-in startOfWeek function for locale-specific behavior\n return startOfWeek(date, locale)\n}\n","export function getMonthNames(locale: string, format: Intl.DateTimeFormatOptions[\"month\"] = \"long\") {\n const date = new Date(2021, 0, 1)\n const monthNames: string[] = []\n for (let i = 0; i < 12; i++) {\n monthNames.push(date.toLocaleString(locale, { month: format }))\n date.setMonth(date.getMonth() + 1)\n }\n return monthNames\n}\n","import { type DateValue, DateFormatter } from \"@internationalized/date\"\n\nexport function getWeekdayFormats(locale: string, timeZone: string) {\n const longFormat = new DateFormatter(locale, { weekday: \"long\", timeZone })\n const shortFormat = new DateFormatter(locale, { weekday: \"short\", timeZone })\n const narrowFormat = new DateFormatter(locale, { weekday: \"narrow\", timeZone })\n return <T extends DateValue | Date>(value: T) => {\n const date = value instanceof Date ? value : value.toDate(timeZone)\n return {\n value,\n short: shortFormat.format(date),\n long: longFormat.format(date),\n narrow: narrowFormat.format(date),\n }\n }\n}\n","import type { DateValue } from \"@internationalized/date\"\nimport { getWeekdayFormats } from \"./get-weekday-formats\"\nimport { getStartOfWeek } from \"./get-start-of-week\"\n\nexport function getWeekDays(date: DateValue, startOfWeekProp: number | undefined, timeZone: string, locale: string) {\n const firstDayOfWeek = getStartOfWeek(date, locale, startOfWeekProp)\n const weeks = [...new Array(7).keys()]\n const format = getWeekdayFormats(locale, timeZone)\n return weeks.map((index) => format(firstDayOfWeek.add({ days: index })))\n}\n","export interface YearsRange {\n from: number\n to: number\n}\n\nexport function getYearsRange(range: YearsRange) {\n const years: number[] = []\n\n for (let year = range.from; year <= range.to; year += 1) {\n years.push(year)\n }\n\n return years\n}\n","import {\n type Calendar,\n type DateValue,\n getLocalTimeZone,\n toCalendar,\n toCalendarDateTime,\n today,\n} from \"@internationalized/date\"\nimport { constrainValue } from \"./constrain\"\nimport type { DateAvailableFn } from \"./types\"\n\nexport function getTodayDate(timeZone?: string) {\n return today(timeZone ?? getLocalTimeZone())\n}\n\nexport function getNextDay(date: DateValue) {\n return date.add({ days: 1 })\n}\n\nexport function getPreviousDay(date: DateValue) {\n return date.subtract({ days: 1 })\n}\n\nexport function setMonth(date: DateValue, month: number) {\n return date.set({ month })\n}\n\nexport function setYear(date: DateValue, year: number) {\n return date.set({ year })\n}\n\nexport function setCalendar(date: DateValue, calendar: Calendar) {\n return toCalendar(toCalendarDateTime(date), calendar)\n}\n\nexport function setDate(\n date: DateValue,\n startDate: DateValue,\n isDateUnavailable: DateAvailableFn,\n locale: string,\n minValue: DateValue,\n maxValue: DateValue,\n) {\n let result: DateValue | undefined\n result = constrainValue(date, minValue, maxValue)\n result = getPreviousAvailableDate(date, startDate, locale, isDateUnavailable)\n return result\n}\n\nexport function getPreviousAvailableDate(\n date: DateValue,\n minValue: DateValue,\n locale: string,\n isDateUnavailable?: DateAvailableFn,\n) {\n if (!isDateUnavailable) {\n return date\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date, locale)) {\n date = date.subtract({ days: 1 })\n }\n\n if (date.compare(minValue) >= 0) {\n return date\n }\n}\n","import {\n type DateDuration,\n type DateValue,\n endOfMonth,\n endOfWeek,\n startOfMonth,\n startOfWeek,\n} from \"@internationalized/date\"\nimport { isDateInvalid } from \"./assertion\"\nimport { alignEnd, alignStart, constrainStart, constrainValue } from \"./constrain\"\nimport { getEndDate, getUnitDuration } from \"./duration\"\n\nexport interface AdjustDateParams {\n startDate: DateValue\n focusedDate: DateValue\n}\n\nexport interface AdjustDateReturn extends AdjustDateParams {\n endDate: DateValue\n}\n\nexport function getAdjustedDateFn(\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n return function getDate(options: AdjustDateParams): AdjustDateReturn {\n const { startDate, focusedDate } = options\n const endDate = getEndDate(startDate, visibleDuration)\n\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n if (isDateInvalid(focusedDate, minValue, maxValue)) {\n return {\n startDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n endDate,\n }\n }\n\n if (focusedDate.compare(startDate) < 0) {\n return {\n startDate: alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue),\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n endDate,\n }\n }\n\n if (focusedDate.compare(endDate) > 0) {\n return {\n startDate: alignStart(focusedDate, visibleDuration, locale, minValue, maxValue),\n endDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n }\n }\n\n return {\n startDate,\n endDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n }\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Get next and previous page (for date range)\n * -----------------------------------------------------------------------------*/\n\nexport function getNextPage(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n const start = startDate.add(visibleDuration)\n\n return adjust({\n focusedDate: focusedDate.add(visibleDuration),\n startDate: alignStart(\n constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),\n visibleDuration,\n locale,\n ),\n })\n}\n\nexport function getPreviousPage(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n let start = startDate.subtract(visibleDuration)\n\n return adjust({\n focusedDate: focusedDate.subtract(visibleDuration),\n startDate: alignStart(\n constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),\n visibleDuration,\n locale,\n ),\n })\n}\n\n/* -----------------------------------------------------------------------------\n * Get the next and previous row (for date range)\n * -----------------------------------------------------------------------------*/\n\nexport function getNextRow(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.add({ weeks: 1 }),\n startDate,\n })\n }\n}\n\nexport function getPreviousRow(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.subtract({ weeks: 1 }),\n startDate,\n })\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Get start and end date for a date section\n * -----------------------------------------------------------------------------*/\n\nexport function getSectionStart(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return adjust({\n focusedDate: startDate,\n startDate,\n })\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: startOfWeek(focusedDate, locale),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: startOfMonth(focusedDate),\n startDate,\n })\n }\n}\n\nexport function getSectionEnd(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n const endDate = getEndDate(startDate, visibleDuration)\n\n if (visibleDuration.days) {\n return adjust({\n focusedDate: endDate,\n startDate,\n })\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n //@ts-expect-error - endOfWeek is loosely typed\n focusedDate: endOfWeek(focusedDate, locale),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: endOfMonth(focusedDate),\n startDate,\n })\n }\n}\n\nexport function getNextSection(\n focusedDate: DateValue,\n startDate: DateValue,\n larger: boolean,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (!larger && !visibleDuration.days) {\n return adjust({\n focusedDate: focusedDate.add(getUnitDuration(visibleDuration)),\n startDate,\n })\n }\n\n if (visibleDuration.days) {\n return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: focusedDate.add({ months: 1 }),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.add({ years: 1 }),\n startDate,\n })\n }\n}\n\nexport function getPreviousSection(\n focusedDate: DateValue,\n startDate: DateValue,\n larger: boolean,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (!larger && !visibleDuration.days) {\n return adjust({\n focusedDate: focusedDate.subtract(getUnitDuration(visibleDuration)),\n startDate,\n })\n }\n\n if (visibleDuration.days) {\n return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: focusedDate.subtract({ months: 1 }),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.subtract({ years: 1 }),\n startDate,\n })\n }\n}\n","import { CalendarDate, DateFormatter, type DateValue } from \"@internationalized/date\"\n\nconst isValidYear = (year: string | null | undefined): year is string => year != null && year.length === 4\nconst isValidMonth = (month: string | null | undefined): month is string => month != null && parseFloat(month) <= 12\nconst isValidDay = (day: string | null | undefined): day is string => day != null && parseFloat(day) <= 31\n\nexport function parseDateString(date: string, locale: string, timeZone: string): DateValue | undefined {\n const regex = createRegex(locale, timeZone)\n\n let { year, month, day } = extract(regex, date) ?? {}\n\n const hasMatch = year != null || month != null || day != null\n\n if (hasMatch) {\n const curr = new Date()\n year ||= curr.getFullYear().toString()\n month ||= (curr.getMonth() + 1).toString()\n day ||= curr.getDate().toString()\n }\n\n if (isValidYear(year) && isValidMonth(month) && isValidDay(day)) {\n return new CalendarDate(+year, +month, +day)\n }\n\n // We should never get here, but just in case\n const time = Date.parse(date)\n if (!isNaN(time)) {\n const date = new Date(time)\n return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate())\n }\n}\n\nfunction createRegex(locale: string, timeZone: string) {\n const formatter = new DateFormatter(locale, { day: \"numeric\", month: \"numeric\", year: \"numeric\", timeZone })\n const parts = formatter.formatToParts(new Date(2000, 11, 25))\n return parts.map(({ type, value }) => (type === \"literal\" ? `${value}?` : `((?!=<${type}>)\\\\d+)?`)).join(\"\")\n}\n\ninterface DateParts {\n year: string | null\n month: string | null\n day: string | null\n}\n\ntype DatePart = keyof DateParts\n\nfunction extract(pattern: string | RegExp, str: string) {\n const matches = str.match(pattern)\n return pattern\n .toString()\n .match(/<(.+?)>/g)\n ?.map((group) => {\n const groupMatches = group.match(/<(.+)>/)\n if (!groupMatches || groupMatches.length <= 0) {\n return null\n }\n return group.match(/<(.+)>/)?.[1]\n })\n .reduce((acc, curr, index) => {\n if (!curr) return acc\n if (matches && matches.length > index) {\n acc[curr as DatePart] = matches[index + 1]\n } else {\n acc[curr as DatePart] = null\n }\n return acc\n }, {} as DateParts)\n}\n","import {\n endOfMonth,\n endOfWeek,\n endOfYear,\n now,\n startOfMonth,\n startOfWeek,\n startOfYear,\n type DateValue,\n} from \"@internationalized/date\"\n\nexport type DateRangePreset =\n | \"thisWeek\"\n | \"lastWeek\"\n | \"thisMonth\"\n | \"lastMonth\"\n | \"thisQuarter\"\n | \"lastQuarter\"\n | \"thisYear\"\n | \"lastYear\"\n | \"last3Days\"\n | \"last7Days\"\n | \"last14Days\"\n | \"last30Days\"\n | \"last90Days\"\n\nexport function getDateRangePreset(preset: DateRangePreset, locale: string, timeZone: string): [DateValue, DateValue] {\n const today = now(timeZone)\n\n switch (preset) {\n case \"thisWeek\":\n return [startOfWeek(today, locale), endOfWeek(today, locale)]\n case \"thisMonth\":\n return [startOfMonth(today), today]\n case \"thisQuarter\":\n return [startOfMonth(today).add({ months: -today.month % 3 }), today]\n case \"thisYear\":\n return [startOfYear(today), today]\n case \"last3Days\":\n return [today.add({ days: -2 }), today]\n case \"last7Days\":\n return [today.add({ days: -6 }), today]\n case \"last14Days\":\n return [today.add({ days: -13 }), today]\n case \"last30Days\":\n return [today.add({ days: -29 }), today]\n case \"last90Days\":\n return [today.add({ days: -89 }), today]\n case \"lastMonth\":\n return [startOfMonth(today.add({ months: -1 })), endOfMonth(today.add({ months: -1 }))]\n case \"lastQuarter\":\n return [\n startOfMonth(today.add({ months: (-today.month % 3) - 3 })),\n endOfMonth(today.add({ months: (-today.month % 3) - 1 })),\n ]\n case \"lastWeek\":\n return [startOfWeek(today, locale).add({ weeks: -1 }), endOfWeek(today, locale).add({ weeks: -1 })]\n case \"lastYear\":\n return [startOfYear(today.add({ years: -1 })), endOfYear(today.add({ years: -1 }))]\n default:\n throw new Error(`Invalid date range preset: ${preset}`)\n }\n}\n"],"mappings":"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","names":["import_date","import_date","import_date","start","end","import_date","import_date","import_date","import_date","import_date","import_date","isDateUnavailable","import_date","import_date","date","import_date","today"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constrain.ts","../src/align.ts","../src/assertion.ts","../src/duration.ts","../src/format-range.ts","../src/format-selected-date.ts","../src/get-day-formatter.ts","../src/get-era-format.ts","../src/format-visible-range.ts","../src/get-month-formatter.ts","../src/get-decade-range.ts","../src/get-month-days.ts","../src/get-start-of-week.ts","../src/get-month-names.ts","../src/get-weekday-formats.ts","../src/get-week-days.ts","../src/get-year-range.ts","../src/mutation.ts","../src/pagination.ts","../src/parse-date.ts","../src/normalize-year.ts","../src/preset.ts"],"sourcesContent":["export * from \"./align\"\nexport * from \"./assertion\"\nexport * from \"./constrain\"\nexport * from \"./duration\"\nexport * from \"./format-range\"\nexport * from \"./format-selected-date\"\nexport * from \"./format-visible-range\"\nexport * from \"./get-day-formatter\"\nexport * from \"./get-decade-range\"\nexport * from \"./get-month-days\"\nexport * from \"./get-month-formatter\"\nexport * from \"./get-month-names\"\nexport * from \"./get-week-days\"\nexport * from \"./get-weekday-formats\"\nexport * from \"./get-year-range\"\nexport * from \"./mutation\"\nexport * from \"./pagination\"\nexport * from \"./parse-date\"\nexport * from \"./preset\"\nexport type { DateAdjustFn, DateGranularity } from \"./types\"\n","import {\n type DateDuration,\n type DateValue,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate,\n} from \"@internationalized/date\"\n\n/* -----------------------------------------------------------------------------\n * Align date to start, end, or center of a duration\n * -----------------------------------------------------------------------------*/\n\nexport function alignCenter(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n const halfDuration: DateDuration = {}\n\n for (let prop in duration) {\n const key = prop as keyof DateDuration\n\n const value = duration[key]\n if (value == null) continue\n\n halfDuration[key] = Math.floor(value / 2)\n\n if (halfDuration[key] > 0 && value % 2 === 0) {\n halfDuration[key]--\n }\n }\n\n const aligned = alignStart(date, duration, locale).subtract(halfDuration)\n\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\nexport function alignStart(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n // align to the start of the largest unit\n let aligned = date\n if (duration.years) {\n aligned = startOfYear(date)\n } else if (duration.months) {\n aligned = startOfMonth(date)\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale)\n }\n\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\nexport function alignEnd(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n let d: DateDuration = { ...duration }\n // subtract 1 from the smallest unit\n if (d.days) {\n d.days--\n } else if (d.weeks) {\n d.weeks--\n } else if (d.months) {\n d.months--\n } else if (d.years) {\n d.years--\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d)\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\n/* -----------------------------------------------------------------------------\n * Constrain a date to a min/max range\n * -----------------------------------------------------------------------------*/\n\nexport function constrainStart(\n date: DateValue,\n aligned: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n if (min && date.compare(min) >= 0) {\n aligned = maxDate(aligned, alignStart(toCalendarDate(min), duration, locale))!\n }\n\n if (max && date.compare(max) <= 0) {\n aligned = minDate(aligned, alignEnd(toCalendarDate(max), duration, locale))!\n }\n\n return aligned\n}\n\nexport function constrainValue(date: DateValue, minValue?: DateValue, maxValue?: DateValue): DateValue {\n if (minValue) {\n date = maxDate(date, toCalendarDate(minValue))!\n }\n if (maxValue) {\n date = minDate(date, toCalendarDate(maxValue))!\n }\n return date\n}\n","import type { DateDuration, DateValue } from \"@internationalized/date\"\nimport { alignCenter, alignEnd, alignStart } from \"./constrain\"\nimport type { DateAlignment } from \"./types\"\n\nexport function alignDate(\n date: DateValue,\n alignment: DateAlignment,\n duration: DateDuration,\n locale: string,\n min?: DateValue | undefined,\n max?: DateValue | undefined,\n) {\n switch (alignment) {\n case \"start\":\n return alignStart(date, duration, locale, min, max)\n case \"end\":\n return alignEnd(date, duration, locale, min, max)\n case \"center\":\n default:\n return alignCenter(date, duration, locale, min, max)\n }\n}\n\nexport function alignStartDate(\n date: DateValue,\n startDate: DateValue,\n endDate: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue | undefined,\n max?: DateValue | undefined,\n) {\n if (date.compare(startDate) < 0) {\n return alignEnd(date, duration, locale, min, max)\n }\n if (date.compare(endDate) > 0) {\n return alignStart(date, duration, locale, min, max)\n }\n return startDate\n}\n","import { type DateValue, isSameDay, isToday } from \"@internationalized/date\"\nimport type { DateAvailableFn } from \"./types\"\n\nexport function isTodayDate(date: DateValue, timeZone: string) {\n return isToday(date, timeZone)\n}\n\nexport function isDateEqual(dateA: DateValue, dateB?: DateValue | null) {\n return dateB != null && isSameDay(dateA, dateB)\n}\n\nexport function isDateInvalid(date: DateValue, minValue?: DateValue | null, maxValue?: DateValue | null) {\n return (minValue != null && date.compare(minValue) < 0) || (maxValue != null && date.compare(maxValue) > 0)\n}\n\nexport function isDateDisabled(\n date: DateValue,\n startDate: DateValue,\n endDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n return isDateOutsideVisibleRange(date, startDate, endDate) || isDateInvalid(date, minValue, maxValue)\n}\n\nexport function isDateUnavailable(\n date: DateValue | null,\n isUnavailable: DateAvailableFn | undefined,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n if (!date) {\n return false\n }\n if (isUnavailable?.(date, locale)) {\n return true\n }\n return isDateInvalid(date, minValue, maxValue)\n}\n\nexport function isDateOutsideVisibleRange(date: DateValue, startDate: DateValue, endDate: DateValue) {\n return date.compare(startDate) < 0 || date.compare(endDate) > 0\n}\n\nexport function isPreviousVisibleRangeInvalid(\n startDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n const prevDate = startDate.subtract({ days: 1 })\n return isSameDay(prevDate, startDate) || isDateInvalid(prevDate, minValue, maxValue)\n}\n\nexport function isNextVisibleRangeInvalid(\n endDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n const nextDate = endDate.add({ days: 1 })\n return isSameDay(nextDate, endDate) || isDateInvalid(nextDate, minValue, maxValue)\n}\n","import type { DateDuration, DateValue } from \"@internationalized/date\"\n\nexport function getUnitDuration(duration: DateDuration) {\n let clone = { ...duration }\n\n for (let key in clone) {\n clone[key as keyof typeof clone] = 1\n }\n\n return clone\n}\n\nexport function getEndDate(startDate: DateValue, duration: DateDuration) {\n let clone = { ...duration }\n\n if (clone.days) {\n clone.days--\n } else {\n clone.days = -1\n }\n\n return startDate.add(clone)\n}\n","import type { DateValue, DateFormatter } from \"@internationalized/date\"\n\nexport function formatRange(\n startDate: DateValue,\n endDate: DateValue,\n formatter: DateFormatter,\n toString: (start: string, end: string) => string,\n timeZone: string,\n) {\n let parts = formatter.formatRangeToParts(startDate.toDate(timeZone), endDate.toDate(timeZone))\n\n let separatorIndex = -1\n\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i]\n if (part.source === \"shared\" && part.type === \"literal\") {\n separatorIndex = i\n } else if (part.source === \"endRange\") {\n break\n }\n }\n\n let start = \"\"\n let end = \"\"\n\n for (let i = 0; i < parts.length; i++) {\n if (i < separatorIndex) {\n start += parts[i].value\n } else if (i > separatorIndex) {\n end += parts[i].value\n }\n }\n\n return toString(start, end)\n}\n","import { type DateValue, isSameDay } from \"@internationalized/date\"\nimport { formatRange } from \"./format-range\"\nimport { getDayFormatter } from \"./get-day-formatter\"\n\nexport function formatSelectedDate(startDate: DateValue, endDate: DateValue | null, locale: string, timeZone: string) {\n let start = startDate\n let end = endDate ?? startDate\n\n let formatter = getDayFormatter(locale, timeZone)\n\n if (isSameDay(start, end)) {\n return formatter.format(start.toDate(timeZone))\n }\n\n return formatRange(start, end, formatter, (start, end) => `${start} – ${end}`, timeZone)\n}\n","import { DateFormatter, toCalendarDateTime, today } from \"@internationalized/date\"\nimport { getEraFormat } from \"./get-era-format\"\n\nexport function getDayFormatter(locale: string, timeZone: string) {\n const date = toCalendarDateTime(today(timeZone))\n return new DateFormatter(locale, {\n weekday: \"long\",\n month: \"long\",\n year: \"numeric\",\n day: \"numeric\",\n era: getEraFormat(date),\n timeZone,\n })\n}\n","import type { DateValue } from \"@internationalized/date\"\n\nexport function getEraFormat(date: DateValue | undefined): \"short\" | undefined {\n return date?.calendar.identifier === \"gregory\" && date.era === \"BC\" ? \"short\" : undefined\n}\n","import { type DateValue, endOfMonth, isSameDay, startOfMonth } from \"@internationalized/date\"\nimport { getDayFormatter } from \"./get-day-formatter\"\nimport { getMonthFormatter } from \"./get-month-formatter\"\n\nexport function formatVisibleRange(startDate: DateValue, endDate: DateValue | null, locale: string, timeZone: string) {\n const start = startDate\n const end = endDate ?? startDate\n\n const dayFormatter = getDayFormatter(locale, timeZone)\n\n if (!isSameDay(start, startOfMonth(start))) {\n return dayFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone))\n }\n\n const monthFormatter = getMonthFormatter(locale, timeZone)\n\n if (isSameDay(end, endOfMonth(start))) {\n return monthFormatter.format(start.toDate(timeZone))\n }\n\n if (isSameDay(end, endOfMonth(end))) {\n return monthFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone))\n }\n\n return \"\"\n}\n","import { today, toCalendarDate, DateFormatter } from \"@internationalized/date\"\nimport { getEraFormat } from \"./get-era-format\"\n\nexport function getMonthFormatter(locale: string, timeZone: string) {\n const date = toCalendarDate(today(timeZone))\n return new DateFormatter(locale, {\n month: \"long\",\n year: \"numeric\",\n era: getEraFormat(date),\n calendar: date?.calendar.identifier,\n timeZone: timeZone,\n })\n}\n","export function getDecadeRange(year: number) {\n const computedYear = year - (year % 10) - 1\n\n const years: number[] = []\n\n for (let i = 0; i < 12; i += 1) {\n const value = computedYear + i\n years.push(value)\n }\n\n return years\n}\n","import { type DateValue, getWeeksInMonth, isSameDay, getDayOfWeek, startOfMonth } from \"@internationalized/date\"\nimport { getStartOfWeek } from \"./get-start-of-week\"\n\nexport function getDaysInWeek(weekIndex: number, from: DateValue, locale: string, firstDayOfWeek?: number) {\n const weekDate = from.add({ weeks: weekIndex })\n const dates: DateValue[] = []\n let date = getStartOfWeek(weekDate, locale, firstDayOfWeek)\n while (dates.length < 7) {\n dates.push(date)\n let nextDate = date.add({ days: 1 })\n if (isSameDay(date, nextDate)) {\n break\n }\n date = nextDate\n }\n return dates\n}\n\nexport function getCustomWeeksInMonth(from: DateValue, locale: string, firstDayOfWeek?: number) {\n if (firstDayOfWeek == null) {\n return getWeeksInMonth(from, locale)\n }\n const paddingDays = (getDayOfWeek(startOfMonth(from), locale) - firstDayOfWeek + 7) % 7\n\n return Math.ceil((paddingDays + from.calendar.getDaysInMonth(from)) / 7)\n}\n\nexport function getMonthDays(from: DateValue, locale: string, numOfWeeks?: number, firstDayOfWeek?: number) {\n const monthWeeks = numOfWeeks ?? getCustomWeeksInMonth(from, locale, firstDayOfWeek)\n\n const weeks = [...new Array(monthWeeks).keys()]\n return weeks.map((week) => getDaysInWeek(week, from, locale, firstDayOfWeek))\n}\n","import { type DateValue, getDayOfWeek, startOfWeek } from \"@internationalized/date\"\n\nexport function getStartOfWeek(date: DateValue, locale: string, firstDayOfWeek?: number) {\n // If firstDayOfWeek is provided, use it; otherwise, use the locale's default\n if (firstDayOfWeek !== undefined) {\n // Adjust the date to the specified first day of the week\n const currentDayOfWeek = getDayOfWeek(date, locale)\n const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7\n return date.subtract({ days: daysToSubtract })\n }\n\n // Use the built-in startOfWeek function for locale-specific behavior\n return startOfWeek(date, locale)\n}\n","export function getMonthNames(locale: string, format: Intl.DateTimeFormatOptions[\"month\"] = \"long\") {\n const date = new Date(2021, 0, 1)\n const monthNames: string[] = []\n for (let i = 0; i < 12; i++) {\n monthNames.push(date.toLocaleString(locale, { month: format }))\n date.setMonth(date.getMonth() + 1)\n }\n return monthNames\n}\n","import { type DateValue, DateFormatter } from \"@internationalized/date\"\n\nexport function getWeekdayFormats(locale: string, timeZone: string) {\n const longFormat = new DateFormatter(locale, { weekday: \"long\", timeZone })\n const shortFormat = new DateFormatter(locale, { weekday: \"short\", timeZone })\n const narrowFormat = new DateFormatter(locale, { weekday: \"narrow\", timeZone })\n return <T extends DateValue | Date>(value: T) => {\n const date = value instanceof Date ? value : value.toDate(timeZone)\n return {\n value,\n short: shortFormat.format(date),\n long: longFormat.format(date),\n narrow: narrowFormat.format(date),\n }\n }\n}\n","import type { DateValue } from \"@internationalized/date\"\nimport { getWeekdayFormats } from \"./get-weekday-formats\"\nimport { getStartOfWeek } from \"./get-start-of-week\"\n\nexport function getWeekDays(date: DateValue, startOfWeekProp: number | undefined, timeZone: string, locale: string) {\n const firstDayOfWeek = getStartOfWeek(date, locale, startOfWeekProp)\n const weeks = [...new Array(7).keys()]\n const format = getWeekdayFormats(locale, timeZone)\n return weeks.map((index) => format(firstDayOfWeek.add({ days: index })))\n}\n","export interface YearsRange {\n from: number\n to: number\n}\n\nexport function getYearsRange(range: YearsRange) {\n const years: number[] = []\n\n for (let year = range.from; year <= range.to; year += 1) {\n years.push(year)\n }\n\n return years\n}\n","import {\n type Calendar,\n type DateValue,\n getLocalTimeZone,\n toCalendar,\n toCalendarDateTime,\n today,\n} from \"@internationalized/date\"\nimport { constrainValue } from \"./constrain\"\nimport type { DateAvailableFn } from \"./types\"\n\nexport function getTodayDate(timeZone?: string) {\n return today(timeZone ?? getLocalTimeZone())\n}\n\nexport function getNextDay(date: DateValue) {\n return date.add({ days: 1 })\n}\n\nexport function getPreviousDay(date: DateValue) {\n return date.subtract({ days: 1 })\n}\n\nexport function setMonth(date: DateValue, month: number) {\n return date.set({ month })\n}\n\nexport function setYear(date: DateValue, year: number) {\n return date.set({ year })\n}\n\nexport function setCalendar(date: DateValue, calendar: Calendar) {\n return toCalendar(toCalendarDateTime(date), calendar)\n}\n\nexport function setDate(\n date: DateValue,\n startDate: DateValue,\n isDateUnavailable: DateAvailableFn,\n locale: string,\n minValue: DateValue,\n maxValue: DateValue,\n) {\n let result: DateValue | undefined\n result = constrainValue(date, minValue, maxValue)\n result = getPreviousAvailableDate(date, startDate, locale, isDateUnavailable)\n return result\n}\n\nexport function getPreviousAvailableDate(\n date: DateValue,\n minValue: DateValue,\n locale: string,\n isDateUnavailable?: DateAvailableFn,\n) {\n if (!isDateUnavailable) {\n return date\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date, locale)) {\n date = date.subtract({ days: 1 })\n }\n\n if (date.compare(minValue) >= 0) {\n return date\n }\n}\n","import {\n type DateDuration,\n type DateValue,\n endOfMonth,\n endOfWeek,\n startOfMonth,\n startOfWeek,\n} from \"@internationalized/date\"\nimport { isDateInvalid } from \"./assertion\"\nimport { alignEnd, alignStart, constrainStart, constrainValue } from \"./constrain\"\nimport { getEndDate, getUnitDuration } from \"./duration\"\n\nexport interface AdjustDateParams {\n startDate: DateValue\n focusedDate: DateValue\n}\n\nexport interface AdjustDateReturn extends AdjustDateParams {\n endDate: DateValue\n}\n\nexport function getAdjustedDateFn(\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n return function getDate(options: AdjustDateParams): AdjustDateReturn {\n const { startDate, focusedDate } = options\n const endDate = getEndDate(startDate, visibleDuration)\n\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n if (isDateInvalid(focusedDate, minValue, maxValue)) {\n return {\n startDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n endDate,\n }\n }\n\n if (focusedDate.compare(startDate) < 0) {\n return {\n startDate: alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue),\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n endDate,\n }\n }\n\n if (focusedDate.compare(endDate) > 0) {\n return {\n startDate: alignStart(focusedDate, visibleDuration, locale, minValue, maxValue),\n endDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n }\n }\n\n return {\n startDate,\n endDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n }\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Get next and previous page (for date range)\n * -----------------------------------------------------------------------------*/\n\nexport function getNextPage(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n const start = startDate.add(visibleDuration)\n\n return adjust({\n focusedDate: focusedDate.add(visibleDuration),\n startDate: alignStart(\n constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),\n visibleDuration,\n locale,\n ),\n })\n}\n\nexport function getPreviousPage(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n let start = startDate.subtract(visibleDuration)\n\n return adjust({\n focusedDate: focusedDate.subtract(visibleDuration),\n startDate: alignStart(\n constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),\n visibleDuration,\n locale,\n ),\n })\n}\n\n/* -----------------------------------------------------------------------------\n * Get the next and previous row (for date range)\n * -----------------------------------------------------------------------------*/\n\nexport function getNextRow(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.add({ weeks: 1 }),\n startDate,\n })\n }\n}\n\nexport function getPreviousRow(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.subtract({ weeks: 1 }),\n startDate,\n })\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Get start and end date for a date section\n * -----------------------------------------------------------------------------*/\n\nexport function getSectionStart(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return adjust({\n focusedDate: startDate,\n startDate,\n })\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: startOfWeek(focusedDate, locale),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: startOfMonth(focusedDate),\n startDate,\n })\n }\n}\n\nexport function getSectionEnd(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n const endDate = getEndDate(startDate, visibleDuration)\n\n if (visibleDuration.days) {\n return adjust({\n focusedDate: endDate,\n startDate,\n })\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n //@ts-expect-error - endOfWeek is loosely typed\n focusedDate: endOfWeek(focusedDate, locale),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: endOfMonth(focusedDate),\n startDate,\n })\n }\n}\n\nexport function getNextSection(\n focusedDate: DateValue,\n startDate: DateValue,\n larger: boolean,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (!larger && !visibleDuration.days) {\n return adjust({\n focusedDate: focusedDate.add(getUnitDuration(visibleDuration)),\n startDate,\n })\n }\n\n if (visibleDuration.days) {\n return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: focusedDate.add({ months: 1 }),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.add({ years: 1 }),\n startDate,\n })\n }\n}\n\nexport function getPreviousSection(\n focusedDate: DateValue,\n startDate: DateValue,\n larger: boolean,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (!larger && !visibleDuration.days) {\n return adjust({\n focusedDate: focusedDate.subtract(getUnitDuration(visibleDuration)),\n startDate,\n })\n }\n\n if (visibleDuration.days) {\n return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: focusedDate.subtract({ months: 1 }),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.subtract({ years: 1 }),\n startDate,\n })\n }\n}\n","import { CalendarDate, DateFormatter, type DateValue } from \"@internationalized/date\"\nimport { normalizeYear } from \"./normalize-year\"\n\nconst isValidYear = (year: string | null | undefined): year is string => year != null && year.length === 4\nconst isValidMonth = (month: string | null | undefined): month is string => month != null && parseFloat(month) <= 12\nconst isValidDay = (day: string | null | undefined): day is string => day != null && parseFloat(day) <= 31\n\nexport function parseDateString(date: string, locale: string, timeZone: string): DateValue | undefined {\n const regex = createRegex(locale, timeZone)\n\n let { year, month, day } = extract(regex, date) ?? {}\n\n const hasMatch = year != null || month != null || day != null\n\n if (hasMatch) {\n const curr = new Date()\n year ||= curr.getFullYear().toString()\n month ||= (curr.getMonth() + 1).toString()\n day ||= curr.getDate().toString()\n }\n\n if (!isValidYear(year)) {\n year = normalizeYear(year)\n }\n\n if (isValidYear(year) && isValidMonth(month) && isValidDay(day)) {\n return new CalendarDate(+year, +month, +day)\n }\n\n // We should never get here, but just in case\n const time = Date.parse(date)\n if (!isNaN(time)) {\n const date = new Date(time)\n return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate())\n }\n}\n\nfunction createRegex(locale: string, timeZone: string) {\n const formatter = new DateFormatter(locale, { day: \"numeric\", month: \"numeric\", year: \"numeric\", timeZone })\n const parts = formatter.formatToParts(new Date(2000, 11, 25))\n return parts.map(({ type, value }) => (type === \"literal\" ? `${value}?` : `((?!=<${type}>)\\\\d+)?`)).join(\"\")\n}\n\ninterface DateParts {\n year: string | null\n month: string | null\n day: string | null\n}\n\ntype DatePart = keyof DateParts\n\nfunction extract(pattern: string | RegExp, str: string) {\n const matches = str.match(pattern)\n return pattern\n .toString()\n .match(/<(.+?)>/g)\n ?.map((group) => {\n const groupMatches = group.match(/<(.+)>/)\n if (!groupMatches || groupMatches.length <= 0) {\n return null\n }\n return group.match(/<(.+)>/)?.[1]\n })\n .reduce((acc, curr, index) => {\n if (!curr) return acc\n if (matches && matches.length > index) {\n acc[curr as DatePart] = matches[index + 1]\n } else {\n acc[curr as DatePart] = null\n }\n return acc\n }, {} as DateParts)\n}\n","const FUTURE_YEAR_COERCION = 10\n\nexport function normalizeYear(year: string | null | undefined) {\n if (!year) return\n\n if (year.length === 3) {\n return year.padEnd(4, \"0\")\n }\n\n if (year.length === 2) {\n const currentYear = new Date().getFullYear()\n const currentCentury = Math.floor(currentYear / 100) * 100\n const twoDigitYear = parseInt(year.slice(-2), 10)\n\n const fullYear = currentCentury + twoDigitYear\n return fullYear > currentYear + FUTURE_YEAR_COERCION ? (fullYear - 100).toString() : fullYear.toString()\n }\n\n return year\n}\n","import {\n endOfMonth,\n endOfWeek,\n endOfYear,\n now,\n startOfMonth,\n startOfWeek,\n startOfYear,\n type DateValue,\n} from \"@internationalized/date\"\n\nexport type DateRangePreset =\n | \"thisWeek\"\n | \"lastWeek\"\n | \"thisMonth\"\n | \"lastMonth\"\n | \"thisQuarter\"\n | \"lastQuarter\"\n | \"thisYear\"\n | \"lastYear\"\n | \"last3Days\"\n | \"last7Days\"\n | \"last14Days\"\n | \"last30Days\"\n | \"last90Days\"\n\nexport function getDateRangePreset(preset: DateRangePreset, locale: string, timeZone: string): [DateValue, DateValue] {\n const today = now(timeZone)\n\n switch (preset) {\n case \"thisWeek\":\n return [startOfWeek(today, locale), endOfWeek(today, locale)]\n case \"thisMonth\":\n return [startOfMonth(today), today]\n case \"thisQuarter\":\n return [startOfMonth(today).add({ months: -today.month % 3 }), today]\n case \"thisYear\":\n return [startOfYear(today), today]\n case \"last3Days\":\n return [today.add({ days: -2 }), today]\n case \"last7Days\":\n return [today.add({ days: -6 }), today]\n case \"last14Days\":\n return [today.add({ days: -13 }), today]\n case \"last30Days\":\n return [today.add({ days: -29 }), today]\n case \"last90Days\":\n return [today.add({ days: -89 }), today]\n case \"lastMonth\":\n return [startOfMonth(today.add({ months: -1 })), endOfMonth(today.add({ months: -1 }))]\n case \"lastQuarter\":\n return [\n startOfMonth(today.add({ months: (-today.month % 3) - 3 })),\n endOfMonth(today.add({ months: (-today.month % 3) - 1 })),\n ]\n case \"lastWeek\":\n return [startOfWeek(today, locale).add({ weeks: -1 }), endOfWeek(today, locale).add({ weeks: -1 })]\n case \"lastYear\":\n return [startOfYear(today.add({ years: -1 })), endOfYear(today.add({ years: -1 }))]\n default:\n throw new Error(`Invalid date range preset: ${preset}`)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBASO;AAMA,SAAS,YACd,MACA,UACA,QACA,KACA,KACW;AACX,QAAM,eAA6B,CAAC;AAEpC,WAAS,QAAQ,UAAU;AACzB,UAAM,MAAM;AAEZ,UAAM,QAAQ,SAAS,GAAG;AAC1B,QAAI,SAAS,KAAM;AAEnB,iBAAa,GAAG,IAAI,KAAK,MAAM,QAAQ,CAAC;AAExC,QAAI,aAAa,GAAG,IAAI,KAAK,QAAQ,MAAM,GAAG;AAC5C,mBAAa,GAAG;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,UAAU,WAAW,MAAM,UAAU,MAAM,EAAE,SAAS,YAAY;AAExE,SAAO,eAAe,MAAM,SAAS,UAAU,QAAQ,KAAK,GAAG;AACjE;AAEO,SAAS,WACd,MACA,UACA,QACA,KACA,KACW;AAEX,MAAI,UAAU;AACd,MAAI,SAAS,OAAO;AAClB,kBAAU,yBAAY,IAAI;AAAA,EAC5B,WAAW,SAAS,QAAQ;AAC1B,kBAAU,0BAAa,IAAI;AAAA,EAC7B,WAAW,SAAS,OAAO;AACzB,kBAAU,yBAAY,MAAM,MAAM;AAAA,EACpC;AAEA,SAAO,eAAe,MAAM,SAAS,UAAU,QAAQ,KAAK,GAAG;AACjE;AAEO,SAAS,SACd,MACA,UACA,QACA,KACA,KACW;AACX,MAAI,IAAkB,EAAE,GAAG,SAAS;AAEpC,MAAI,EAAE,MAAM;AACV,MAAE;AAAA,EACJ,WAAW,EAAE,OAAO;AAClB,MAAE;AAAA,EACJ,WAAW,EAAE,QAAQ;AACnB,MAAE;AAAA,EACJ,WAAW,EAAE,OAAO;AAClB,MAAE;AAAA,EACJ;AAEA,MAAI,UAAU,WAAW,MAAM,UAAU,MAAM,EAAE,SAAS,CAAC;AAC3D,SAAO,eAAe,MAAM,SAAS,UAAU,QAAQ,KAAK,GAAG;AACjE;AAMO,SAAS,eACd,MACA,SACA,UACA,QACA,KACA,KACW;AACX,MAAI,OAAO,KAAK,QAAQ,GAAG,KAAK,GAAG;AACjC,kBAAU,qBAAQ,SAAS,eAAW,4BAAe,GAAG,GAAG,UAAU,MAAM,CAAC;AAAA,EAC9E;AAEA,MAAI,OAAO,KAAK,QAAQ,GAAG,KAAK,GAAG;AACjC,kBAAU,qBAAQ,SAAS,aAAS,4BAAe,GAAG,GAAG,UAAU,MAAM,CAAC;AAAA,EAC5E;AAEA,SAAO;AACT;AAEO,SAAS,eAAe,MAAiB,UAAsB,UAAiC;AACrG,MAAI,UAAU;AACZ,eAAO,qBAAQ,UAAM,4BAAe,QAAQ,CAAC;AAAA,EAC/C;AACA,MAAI,UAAU;AACZ,eAAO,qBAAQ,UAAM,4BAAe,QAAQ,CAAC;AAAA,EAC/C;AACA,SAAO;AACT;;;AChHO,SAAS,UACd,MACA,WACA,UACA,QACA,KACA,KACA;AACA,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,aAAO,WAAW,MAAM,UAAU,QAAQ,KAAK,GAAG;AAAA,IACpD,KAAK;AACH,aAAO,SAAS,MAAM,UAAU,QAAQ,KAAK,GAAG;AAAA,IAClD,KAAK;AAAA,IACL;AACE,aAAO,YAAY,MAAM,UAAU,QAAQ,KAAK,GAAG;AAAA,EACvD;AACF;AAEO,SAAS,eACd,MACA,WACA,SACA,UACA,QACA,KACA,KACA;AACA,MAAI,KAAK,QAAQ,SAAS,IAAI,GAAG;AAC/B,WAAO,SAAS,MAAM,UAAU,QAAQ,KAAK,GAAG;AAAA,EAClD;AACA,MAAI,KAAK,QAAQ,OAAO,IAAI,GAAG;AAC7B,WAAO,WAAW,MAAM,UAAU,QAAQ,KAAK,GAAG;AAAA,EACpD;AACA,SAAO;AACT;;;ACvCA,IAAAA,eAAmD;AAG5C,SAAS,YAAY,MAAiB,UAAkB;AAC7D,aAAO,sBAAQ,MAAM,QAAQ;AAC/B;AAEO,SAAS,YAAY,OAAkB,OAA0B;AACtE,SAAO,SAAS,YAAQ,wBAAU,OAAO,KAAK;AAChD;AAEO,SAAS,cAAc,MAAiB,UAA6B,UAA6B;AACvG,SAAQ,YAAY,QAAQ,KAAK,QAAQ,QAAQ,IAAI,KAAO,YAAY,QAAQ,KAAK,QAAQ,QAAQ,IAAI;AAC3G;AAEO,SAAS,eACd,MACA,WACA,SACA,UACA,UACA;AACA,SAAO,0BAA0B,MAAM,WAAW,OAAO,KAAK,cAAc,MAAM,UAAU,QAAQ;AACtG;AAEO,SAAS,kBACd,MACA,eACA,QACA,UACA,UACA;AACA,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB,MAAM,MAAM,GAAG;AACjC,WAAO;AAAA,EACT;AACA,SAAO,cAAc,MAAM,UAAU,QAAQ;AAC/C;AAEO,SAAS,0BAA0B,MAAiB,WAAsB,SAAoB;AACnG,SAAO,KAAK,QAAQ,SAAS,IAAI,KAAK,KAAK,QAAQ,OAAO,IAAI;AAChE;AAEO,SAAS,8BACd,WACA,UACA,UACA;AACA,QAAM,WAAW,UAAU,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/C,aAAO,wBAAU,UAAU,SAAS,KAAK,cAAc,UAAU,UAAU,QAAQ;AACrF;AAEO,SAAS,0BACd,SACA,UACA,UACA;AACA,QAAM,WAAW,QAAQ,IAAI,EAAE,MAAM,EAAE,CAAC;AACxC,aAAO,wBAAU,UAAU,OAAO,KAAK,cAAc,UAAU,UAAU,QAAQ;AACnF;;;AC3DO,SAAS,gBAAgB,UAAwB;AACtD,MAAI,QAAQ,EAAE,GAAG,SAAS;AAE1B,WAAS,OAAO,OAAO;AACrB,UAAM,GAAyB,IAAI;AAAA,EACrC;AAEA,SAAO;AACT;AAEO,SAAS,WAAW,WAAsB,UAAwB;AACvE,MAAI,QAAQ,EAAE,GAAG,SAAS;AAE1B,MAAI,MAAM,MAAM;AACd,UAAM;AAAA,EACR,OAAO;AACL,UAAM,OAAO;AAAA,EACf;AAEA,SAAO,UAAU,IAAI,KAAK;AAC5B;;;ACpBO,SAAS,YACd,WACA,SACA,WACA,UACA,UACA;AACA,MAAI,QAAQ,UAAU,mBAAmB,UAAU,OAAO,QAAQ,GAAG,QAAQ,OAAO,QAAQ,CAAC;AAE7F,MAAI,iBAAiB;AAErB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QAAI,OAAO,MAAM,CAAC;AAClB,QAAI,KAAK,WAAW,YAAY,KAAK,SAAS,WAAW;AACvD,uBAAiB;AAAA,IACnB,WAAW,KAAK,WAAW,YAAY;AACrC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ;AACZ,MAAI,MAAM;AAEV,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QAAI,IAAI,gBAAgB;AACtB,eAAS,MAAM,CAAC,EAAE;AAAA,IACpB,WAAW,IAAI,gBAAgB;AAC7B,aAAO,MAAM,CAAC,EAAE;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,SAAS,OAAO,GAAG;AAC5B;;;AClCA,IAAAC,eAA0C;;;ACA1C,IAAAC,eAAyD;;;ACElD,SAAS,aAAa,MAAkD;AAC7E,SAAO,MAAM,SAAS,eAAe,aAAa,KAAK,QAAQ,OAAO,UAAU;AAClF;;;ADDO,SAAS,gBAAgB,QAAgB,UAAkB;AAChE,QAAM,WAAO,qCAAmB,oBAAM,QAAQ,CAAC;AAC/C,SAAO,IAAI,2BAAc,QAAQ;AAAA,IAC/B,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK,aAAa,IAAI;AAAA,IACtB;AAAA,EACF,CAAC;AACH;;;ADTO,SAAS,mBAAmB,WAAsB,SAA2B,QAAgB,UAAkB;AACpH,MAAI,QAAQ;AACZ,MAAI,MAAM,WAAW;AAErB,MAAI,YAAY,gBAAgB,QAAQ,QAAQ;AAEhD,UAAI,wBAAU,OAAO,GAAG,GAAG;AACzB,WAAO,UAAU,OAAO,MAAM,OAAO,QAAQ,CAAC;AAAA,EAChD;AAEA,SAAO,YAAY,OAAO,KAAK,WAAW,CAACC,QAAOC,SAAQ,GAAGD,MAAK,WAAMC,IAAG,IAAI,QAAQ;AACzF;;;AGfA,IAAAC,eAAoE;;;ACApE,IAAAC,eAAqD;AAG9C,SAAS,kBAAkB,QAAgB,UAAkB;AAClE,QAAM,WAAO,iCAAe,oBAAM,QAAQ,CAAC;AAC3C,SAAO,IAAI,2BAAc,QAAQ;AAAA,IAC/B,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK,aAAa,IAAI;AAAA,IACtB,UAAU,MAAM,SAAS;AAAA,IACzB;AAAA,EACF,CAAC;AACH;;;ADRO,SAAS,mBAAmB,WAAsB,SAA2B,QAAgB,UAAkB;AACpH,QAAM,QAAQ;AACd,QAAM,MAAM,WAAW;AAEvB,QAAM,eAAe,gBAAgB,QAAQ,QAAQ;AAErD,MAAI,KAAC,wBAAU,WAAO,2BAAa,KAAK,CAAC,GAAG;AAC1C,WAAO,aAAa,YAAY,MAAM,OAAO,QAAQ,GAAG,IAAI,OAAO,QAAQ,CAAC;AAAA,EAC9E;AAEA,QAAM,iBAAiB,kBAAkB,QAAQ,QAAQ;AAEzD,UAAI,wBAAU,SAAK,yBAAW,KAAK,CAAC,GAAG;AACrC,WAAO,eAAe,OAAO,MAAM,OAAO,QAAQ,CAAC;AAAA,EACrD;AAEA,UAAI,wBAAU,SAAK,yBAAW,GAAG,CAAC,GAAG;AACnC,WAAO,eAAe,YAAY,MAAM,OAAO,QAAQ,GAAG,IAAI,OAAO,QAAQ,CAAC;AAAA,EAChF;AAEA,SAAO;AACT;;;AEzBO,SAAS,eAAe,MAAc;AAC3C,QAAM,eAAe,OAAQ,OAAO,KAAM;AAE1C,QAAM,QAAkB,CAAC;AAEzB,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC9B,UAAM,QAAQ,eAAe;AAC7B,UAAM,KAAK,KAAK;AAAA,EAClB;AAEA,SAAO;AACT;;;ACXA,IAAAC,eAAuF;;;ACAvF,IAAAC,eAA0D;AAEnD,SAAS,eAAe,MAAiB,QAAgB,gBAAyB;AAEvF,MAAI,mBAAmB,QAAW;AAEhC,UAAM,uBAAmB,2BAAa,MAAM,MAAM;AAClD,UAAM,kBAAkB,mBAAmB,iBAAiB,KAAK;AACjE,WAAO,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAAA,EAC/C;AAGA,aAAO,0BAAY,MAAM,MAAM;AACjC;;;ADVO,SAAS,cAAc,WAAmB,MAAiB,QAAgB,gBAAyB;AACzG,QAAM,WAAW,KAAK,IAAI,EAAE,OAAO,UAAU,CAAC;AAC9C,QAAM,QAAqB,CAAC;AAC5B,MAAI,OAAO,eAAe,UAAU,QAAQ,cAAc;AAC1D,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,KAAK,IAAI;AACf,QAAI,WAAW,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC;AACnC,YAAI,wBAAU,MAAM,QAAQ,GAAG;AAC7B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB,MAAiB,QAAgB,gBAAyB;AAC9F,MAAI,kBAAkB,MAAM;AAC1B,eAAO,8BAAgB,MAAM,MAAM;AAAA,EACrC;AACA,QAAM,mBAAe,+BAAa,2BAAa,IAAI,GAAG,MAAM,IAAI,iBAAiB,KAAK;AAEtF,SAAO,KAAK,MAAM,cAAc,KAAK,SAAS,eAAe,IAAI,KAAK,CAAC;AACzE;AAEO,SAAS,aAAa,MAAiB,QAAgB,YAAqB,gBAAyB;AAC1G,QAAM,aAAa,cAAc,sBAAsB,MAAM,QAAQ,cAAc;AAEnF,QAAM,QAAQ,CAAC,GAAG,IAAI,MAAM,UAAU,EAAE,KAAK,CAAC;AAC9C,SAAO,MAAM,IAAI,CAAC,SAAS,cAAc,MAAM,MAAM,QAAQ,cAAc,CAAC;AAC9E;;;AEhCO,SAAS,cAAc,QAAgB,SAA8C,QAAQ;AAClG,QAAM,OAAO,IAAI,KAAK,MAAM,GAAG,CAAC;AAChC,QAAM,aAAuB,CAAC;AAC9B,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,eAAW,KAAK,KAAK,eAAe,QAAQ,EAAE,OAAO,OAAO,CAAC,CAAC;AAC9D,SAAK,SAAS,KAAK,SAAS,IAAI,CAAC;AAAA,EACnC;AACA,SAAO;AACT;;;ACRA,IAAAC,eAA8C;AAEvC,SAAS,kBAAkB,QAAgB,UAAkB;AAClE,QAAM,aAAa,IAAI,2BAAc,QAAQ,EAAE,SAAS,QAAQ,SAAS,CAAC;AAC1E,QAAM,cAAc,IAAI,2BAAc,QAAQ,EAAE,SAAS,SAAS,SAAS,CAAC;AAC5E,QAAM,eAAe,IAAI,2BAAc,QAAQ,EAAE,SAAS,UAAU,SAAS,CAAC;AAC9E,SAAO,CAA6B,UAAa;AAC/C,UAAM,OAAO,iBAAiB,OAAO,QAAQ,MAAM,OAAO,QAAQ;AAClE,WAAO;AAAA,MACL;AAAA,MACA,OAAO,YAAY,OAAO,IAAI;AAAA,MAC9B,MAAM,WAAW,OAAO,IAAI;AAAA,MAC5B,QAAQ,aAAa,OAAO,IAAI;AAAA,IAClC;AAAA,EACF;AACF;;;ACXO,SAAS,YAAY,MAAiB,iBAAqC,UAAkB,QAAgB;AAClH,QAAM,iBAAiB,eAAe,MAAM,QAAQ,eAAe;AACnE,QAAM,QAAQ,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC;AACrC,QAAM,SAAS,kBAAkB,QAAQ,QAAQ;AACjD,SAAO,MAAM,IAAI,CAAC,UAAU,OAAO,eAAe,IAAI,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AACzE;;;ACJO,SAAS,cAAc,OAAmB;AAC/C,QAAM,QAAkB,CAAC;AAEzB,WAAS,OAAO,MAAM,MAAM,QAAQ,MAAM,IAAI,QAAQ,GAAG;AACvD,UAAM,KAAK,IAAI;AAAA,EACjB;AAEA,SAAO;AACT;;;ACbA,IAAAC,gBAOO;AAIA,SAAS,aAAa,UAAmB;AAC9C,aAAO,qBAAM,gBAAY,gCAAiB,CAAC;AAC7C;AAEO,SAAS,WAAW,MAAiB;AAC1C,SAAO,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7B;AAEO,SAAS,eAAe,MAAiB;AAC9C,SAAO,KAAK,SAAS,EAAE,MAAM,EAAE,CAAC;AAClC;AAEO,SAAS,SAAS,MAAiB,OAAe;AACvD,SAAO,KAAK,IAAI,EAAE,MAAM,CAAC;AAC3B;AAEO,SAAS,QAAQ,MAAiB,MAAc;AACrD,SAAO,KAAK,IAAI,EAAE,KAAK,CAAC;AAC1B;AAEO,SAAS,YAAY,MAAiB,UAAoB;AAC/D,aAAO,8BAAW,kCAAmB,IAAI,GAAG,QAAQ;AACtD;AAEO,SAAS,QACd,MACA,WACAC,oBACA,QACA,UACA,UACA;AACA,MAAI;AACJ,WAAS,eAAe,MAAM,UAAU,QAAQ;AAChD,WAAS,yBAAyB,MAAM,WAAW,QAAQA,kBAAiB;AAC5E,SAAO;AACT;AAEO,SAAS,yBACd,MACA,UACA,QACAA,oBACA;AACA,MAAI,CAACA,oBAAmB;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,QAAQ,QAAQ,KAAK,KAAKA,mBAAkB,MAAM,MAAM,GAAG;AACrE,WAAO,KAAK,SAAS,EAAE,MAAM,EAAE,CAAC;AAAA,EAClC;AAEA,MAAI,KAAK,QAAQ,QAAQ,KAAK,GAAG;AAC/B,WAAO;AAAA,EACT;AACF;;;AClEA,IAAAC,gBAOO;AAcA,SAAS,kBACd,iBACA,QACA,UACA,UACA;AACA,SAAO,SAAS,QAAQ,SAA6C;AACnE,UAAM,EAAE,WAAW,YAAY,IAAI;AACnC,UAAM,UAAU,WAAW,WAAW,eAAe;AAGrD,QAAI,cAAc,aAAa,UAAU,QAAQ,GAAG;AAClD,aAAO;AAAA,QACL;AAAA,QACA,aAAa,eAAe,aAAa,UAAU,QAAQ;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAEA,QAAI,YAAY,QAAQ,SAAS,IAAI,GAAG;AACtC,aAAO;AAAA,QACL,WAAW,SAAS,aAAa,iBAAiB,QAAQ,UAAU,QAAQ;AAAA,QAC5E,aAAa,eAAe,aAAa,UAAU,QAAQ;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAEA,QAAI,YAAY,QAAQ,OAAO,IAAI,GAAG;AACpC,aAAO;AAAA,QACL,WAAW,WAAW,aAAa,iBAAiB,QAAQ,UAAU,QAAQ;AAAA,QAC9E;AAAA,QACA,aAAa,eAAe,aAAa,UAAU,QAAQ;AAAA,MAC7D;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,aAAa,eAAe,aAAa,UAAU,QAAQ;AAAA,IAC7D;AAAA,EACF;AACF;AAMO,SAAS,YACd,aACA,WACA,iBACA,QACA,UACA,UACA;AACA,QAAM,SAAS,kBAAkB,iBAAiB,QAAQ,UAAU,QAAQ;AAC5E,QAAM,QAAQ,UAAU,IAAI,eAAe;AAE3C,SAAO,OAAO;AAAA,IACZ,aAAa,YAAY,IAAI,eAAe;AAAA,IAC5C,WAAW;AAAA,MACT,eAAe,aAAa,OAAO,iBAAiB,QAAQ,UAAU,QAAQ;AAAA,MAC9E;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,gBACd,aACA,WACA,iBACA,QACA,UACA,UACA;AACA,QAAM,SAAS,kBAAkB,iBAAiB,QAAQ,UAAU,QAAQ;AAC5E,MAAI,QAAQ,UAAU,SAAS,eAAe;AAE9C,SAAO,OAAO;AAAA,IACZ,aAAa,YAAY,SAAS,eAAe;AAAA,IACjD,WAAW;AAAA,MACT,eAAe,aAAa,OAAO,iBAAiB,QAAQ,UAAU,QAAQ;AAAA,MAC9E;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAMO,SAAS,WACd,aACA,WACA,iBACA,QACA,UACA,UACA;AACA,QAAM,SAAS,kBAAkB,iBAAiB,QAAQ,UAAU,QAAQ;AAE5E,MAAI,gBAAgB,MAAM;AACxB,WAAO,YAAY,aAAa,WAAW,iBAAiB,QAAQ,UAAU,QAAQ;AAAA,EACxF;AAEA,MAAI,gBAAgB,SAAS,gBAAgB,UAAU,gBAAgB,OAAO;AAC5E,WAAO,OAAO;AAAA,MACZ,aAAa,YAAY,IAAI,EAAE,OAAO,EAAE,CAAC;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,SAAS,eACd,aACA,WACA,iBACA,QACA,UACA,UACA;AACA,QAAM,SAAS,kBAAkB,iBAAiB,QAAQ,UAAU,QAAQ;AAE5E,MAAI,gBAAgB,MAAM;AACxB,WAAO,gBAAgB,aAAa,WAAW,iBAAiB,QAAQ,UAAU,QAAQ;AAAA,EAC5F;AAEA,MAAI,gBAAgB,SAAS,gBAAgB,UAAU,gBAAgB,OAAO;AAC5E,WAAO,OAAO;AAAA,MACZ,aAAa,YAAY,SAAS,EAAE,OAAO,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAMO,SAAS,gBACd,aACA,WACA,iBACA,QACA,UACA,UACA;AACA,QAAM,SAAS,kBAAkB,iBAAiB,QAAQ,UAAU,QAAQ;AAE5E,MAAI,gBAAgB,MAAM;AACxB,WAAO,OAAO;AAAA,MACZ,aAAa;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,OAAO;AACzB,WAAO,OAAO;AAAA,MACZ,iBAAa,2BAAY,aAAa,MAAM;AAAA,MAC5C;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,UAAU,gBAAgB,OAAO;AACnD,WAAO,OAAO;AAAA,MACZ,iBAAa,4BAAa,WAAW;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,SAAS,cACd,aACA,WACA,iBACA,QACA,UACA,UACA;AACA,QAAM,SAAS,kBAAkB,iBAAiB,QAAQ,UAAU,QAAQ;AAC5E,QAAM,UAAU,WAAW,WAAW,eAAe;AAErD,MAAI,gBAAgB,MAAM;AACxB,WAAO,OAAO;AAAA,MACZ,aAAa;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,OAAO;AACzB,WAAO,OAAO;AAAA;AAAA,MAEZ,iBAAa,yBAAU,aAAa,MAAM;AAAA,MAC1C;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,UAAU,gBAAgB,OAAO;AACnD,WAAO,OAAO;AAAA,MACZ,iBAAa,0BAAW,WAAW;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,SAAS,eACd,aACA,WACA,QACA,iBACA,QACA,UACA,UACA;AACA,QAAM,SAAS,kBAAkB,iBAAiB,QAAQ,UAAU,QAAQ;AAE5E,MAAI,CAAC,UAAU,CAAC,gBAAgB,MAAM;AACpC,WAAO,OAAO;AAAA,MACZ,aAAa,YAAY,IAAI,gBAAgB,eAAe,CAAC;AAAA,MAC7D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,MAAM;AACxB,WAAO,YAAY,aAAa,WAAW,iBAAiB,QAAQ,UAAU,QAAQ;AAAA,EACxF;AAEA,MAAI,gBAAgB,OAAO;AACzB,WAAO,OAAO;AAAA,MACZ,aAAa,YAAY,IAAI,EAAE,QAAQ,EAAE,CAAC;AAAA,MAC1C;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,UAAU,gBAAgB,OAAO;AACnD,WAAO,OAAO;AAAA,MACZ,aAAa,YAAY,IAAI,EAAE,OAAO,EAAE,CAAC;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,SAAS,mBACd,aACA,WACA,QACA,iBACA,QACA,UACA,UACA;AACA,QAAM,SAAS,kBAAkB,iBAAiB,QAAQ,UAAU,QAAQ;AAE5E,MAAI,CAAC,UAAU,CAAC,gBAAgB,MAAM;AACpC,WAAO,OAAO;AAAA,MACZ,aAAa,YAAY,SAAS,gBAAgB,eAAe,CAAC;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,MAAM;AACxB,WAAO,gBAAgB,aAAa,WAAW,iBAAiB,QAAQ,UAAU,QAAQ;AAAA,EAC5F;AAEA,MAAI,gBAAgB,OAAO;AACzB,WAAO,OAAO;AAAA,MACZ,aAAa,YAAY,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,MAC/C;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,UAAU,gBAAgB,OAAO;AACnD,WAAO,OAAO;AAAA,MACZ,aAAa,YAAY,SAAS,EAAE,OAAO,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC5SA,IAAAC,gBAA4D;;;ACA5D,IAAM,uBAAuB;AAEtB,SAAS,cAAc,MAAiC;AAC7D,MAAI,CAAC,KAAM;AAEX,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO,KAAK,OAAO,GAAG,GAAG;AAAA,EAC3B;AAEA,MAAI,KAAK,WAAW,GAAG;AACrB,UAAM,eAAc,oBAAI,KAAK,GAAE,YAAY;AAC3C,UAAM,iBAAiB,KAAK,MAAM,cAAc,GAAG,IAAI;AACvD,UAAM,eAAe,SAAS,KAAK,MAAM,EAAE,GAAG,EAAE;AAEhD,UAAM,WAAW,iBAAiB;AAClC,WAAO,WAAW,cAAc,wBAAwB,WAAW,KAAK,SAAS,IAAI,SAAS,SAAS;AAAA,EACzG;AAEA,SAAO;AACT;;;ADhBA,IAAM,cAAc,CAAC,SAAoD,QAAQ,QAAQ,KAAK,WAAW;AACzG,IAAM,eAAe,CAAC,UAAsD,SAAS,QAAQ,WAAW,KAAK,KAAK;AAClH,IAAM,aAAa,CAAC,QAAkD,OAAO,QAAQ,WAAW,GAAG,KAAK;AAEjG,SAAS,gBAAgB,MAAc,QAAgB,UAAyC;AACrG,QAAM,QAAQ,YAAY,QAAQ,QAAQ;AAE1C,MAAI,EAAE,MAAM,OAAO,IAAI,IAAI,QAAQ,OAAO,IAAI,KAAK,CAAC;AAEpD,QAAM,WAAW,QAAQ,QAAQ,SAAS,QAAQ,OAAO;AAEzD,MAAI,UAAU;AACZ,UAAM,OAAO,oBAAI,KAAK;AACtB,oBAAS,KAAK,YAAY,EAAE,SAAS;AACrC,uBAAW,KAAK,SAAS,IAAI,GAAG,SAAS;AACzC,kBAAQ,KAAK,QAAQ,EAAE,SAAS;AAAA,EAClC;AAEA,MAAI,CAAC,YAAY,IAAI,GAAG;AACtB,WAAO,cAAc,IAAI;AAAA,EAC3B;AAEA,MAAI,YAAY,IAAI,KAAK,aAAa,KAAK,KAAK,WAAW,GAAG,GAAG;AAC/D,WAAO,IAAI,2BAAa,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;AAAA,EAC7C;AAGA,QAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,MAAI,CAAC,MAAM,IAAI,GAAG;AAChB,UAAMC,QAAO,IAAI,KAAK,IAAI;AAC1B,WAAO,IAAI,2BAAaA,MAAK,YAAY,GAAGA,MAAK,SAAS,IAAI,GAAGA,MAAK,QAAQ,CAAC;AAAA,EACjF;AACF;AAEA,SAAS,YAAY,QAAgB,UAAkB;AACrD,QAAM,YAAY,IAAI,4BAAc,QAAQ,EAAE,KAAK,WAAW,OAAO,WAAW,MAAM,WAAW,SAAS,CAAC;AAC3G,QAAM,QAAQ,UAAU,cAAc,IAAI,KAAK,KAAM,IAAI,EAAE,CAAC;AAC5D,SAAO,MAAM,IAAI,CAAC,EAAE,MAAM,MAAM,MAAO,SAAS,YAAY,GAAG,KAAK,MAAM,SAAS,IAAI,UAAW,EAAE,KAAK,EAAE;AAC7G;AAUA,SAAS,QAAQ,SAA0B,KAAa;AACtD,QAAM,UAAU,IAAI,MAAM,OAAO;AACjC,SAAO,QACJ,SAAS,EACT,MAAM,UAAU,GACf,IAAI,CAAC,UAAU;AACf,UAAM,eAAe,MAAM,MAAM,QAAQ;AACzC,QAAI,CAAC,gBAAgB,aAAa,UAAU,GAAG;AAC7C,aAAO;AAAA,IACT;AACA,WAAO,MAAM,MAAM,QAAQ,IAAI,CAAC;AAAA,EAClC,CAAC,EACA,OAAO,CAAC,KAAK,MAAM,UAAU;AAC5B,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI,WAAW,QAAQ,SAAS,OAAO;AACrC,UAAI,IAAgB,IAAI,QAAQ,QAAQ,CAAC;AAAA,IAC3C,OAAO;AACL,UAAI,IAAgB,IAAI;AAAA,IAC1B;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAc;AACtB;;;AExEA,IAAAC,gBASO;AAiBA,SAAS,mBAAmB,QAAyB,QAAgB,UAA0C;AACpH,QAAMC,aAAQ,mBAAI,QAAQ;AAE1B,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,KAAC,2BAAYA,QAAO,MAAM,OAAG,yBAAUA,QAAO,MAAM,CAAC;AAAA,IAC9D,KAAK;AACH,aAAO,KAAC,4BAAaA,MAAK,GAAGA,MAAK;AAAA,IACpC,KAAK;AACH,aAAO,KAAC,4BAAaA,MAAK,EAAE,IAAI,EAAE,QAAQ,CAACA,OAAM,QAAQ,EAAE,CAAC,GAAGA,MAAK;AAAA,IACtE,KAAK;AACH,aAAO,KAAC,2BAAYA,MAAK,GAAGA,MAAK;AAAA,IACnC,KAAK;AACH,aAAO,CAACA,OAAM,IAAI,EAAE,MAAM,GAAG,CAAC,GAAGA,MAAK;AAAA,IACxC,KAAK;AACH,aAAO,CAACA,OAAM,IAAI,EAAE,MAAM,GAAG,CAAC,GAAGA,MAAK;AAAA,IACxC,KAAK;AACH,aAAO,CAACA,OAAM,IAAI,EAAE,MAAM,IAAI,CAAC,GAAGA,MAAK;AAAA,IACzC,KAAK;AACH,aAAO,CAACA,OAAM,IAAI,EAAE,MAAM,IAAI,CAAC,GAAGA,MAAK;AAAA,IACzC,KAAK;AACH,aAAO,CAACA,OAAM,IAAI,EAAE,MAAM,IAAI,CAAC,GAAGA,MAAK;AAAA,IACzC,KAAK;AACH,aAAO,KAAC,4BAAaA,OAAM,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC,OAAG,0BAAWA,OAAM,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAAA,IACxF,KAAK;AACH,aAAO;AAAA,YACL,4BAAaA,OAAM,IAAI,EAAE,QAAS,CAACA,OAAM,QAAQ,IAAK,EAAE,CAAC,CAAC;AAAA,YAC1D,0BAAWA,OAAM,IAAI,EAAE,QAAS,CAACA,OAAM,QAAQ,IAAK,EAAE,CAAC,CAAC;AAAA,MAC1D;AAAA,IACF,KAAK;AACH,aAAO,KAAC,2BAAYA,QAAO,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,OAAG,yBAAUA,QAAO,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,IACpG,KAAK;AACH,aAAO,KAAC,2BAAYA,OAAM,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,OAAG,yBAAUA,OAAM,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AAAA,IACpF;AACE,YAAM,IAAI,MAAM,8BAA8B,MAAM,EAAE;AAAA,EAC1D;AACF;","names":["import_date","import_date","import_date","start","end","import_date","import_date","import_date","import_date","import_date","import_date","isDateUnavailable","import_date","import_date","date","import_date","today"]}
|
package/dist/index.mjs
CHANGED
|
@@ -556,6 +556,25 @@ function getPreviousSection(focusedDate, startDate, larger, visibleDuration, loc
|
|
|
556
556
|
|
|
557
557
|
// src/parse-date.ts
|
|
558
558
|
import { CalendarDate, DateFormatter as DateFormatter4 } from "@internationalized/date";
|
|
559
|
+
|
|
560
|
+
// src/normalize-year.ts
|
|
561
|
+
var FUTURE_YEAR_COERCION = 10;
|
|
562
|
+
function normalizeYear(year) {
|
|
563
|
+
if (!year) return;
|
|
564
|
+
if (year.length === 3) {
|
|
565
|
+
return year.padEnd(4, "0");
|
|
566
|
+
}
|
|
567
|
+
if (year.length === 2) {
|
|
568
|
+
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
569
|
+
const currentCentury = Math.floor(currentYear / 100) * 100;
|
|
570
|
+
const twoDigitYear = parseInt(year.slice(-2), 10);
|
|
571
|
+
const fullYear = currentCentury + twoDigitYear;
|
|
572
|
+
return fullYear > currentYear + FUTURE_YEAR_COERCION ? (fullYear - 100).toString() : fullYear.toString();
|
|
573
|
+
}
|
|
574
|
+
return year;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
// src/parse-date.ts
|
|
559
578
|
var isValidYear = (year) => year != null && year.length === 4;
|
|
560
579
|
var isValidMonth = (month) => month != null && parseFloat(month) <= 12;
|
|
561
580
|
var isValidDay = (day) => day != null && parseFloat(day) <= 31;
|
|
@@ -569,6 +588,9 @@ function parseDateString(date, locale, timeZone) {
|
|
|
569
588
|
month || (month = (curr.getMonth() + 1).toString());
|
|
570
589
|
day || (day = curr.getDate().toString());
|
|
571
590
|
}
|
|
591
|
+
if (!isValidYear(year)) {
|
|
592
|
+
year = normalizeYear(year);
|
|
593
|
+
}
|
|
572
594
|
if (isValidYear(year) && isValidMonth(month) && isValidDay(day)) {
|
|
573
595
|
return new CalendarDate(+year, +month, +day);
|
|
574
596
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constrain.ts","../src/align.ts","../src/assertion.ts","../src/duration.ts","../src/format-range.ts","../src/format-selected-date.ts","../src/get-day-formatter.ts","../src/get-era-format.ts","../src/format-visible-range.ts","../src/get-month-formatter.ts","../src/get-decade-range.ts","../src/get-month-days.ts","../src/get-start-of-week.ts","../src/get-month-names.ts","../src/get-weekday-formats.ts","../src/get-week-days.ts","../src/get-year-range.ts","../src/mutation.ts","../src/pagination.ts","../src/parse-date.ts","../src/preset.ts"],"sourcesContent":["import {\n type DateDuration,\n type DateValue,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate,\n} from \"@internationalized/date\"\n\n/* -----------------------------------------------------------------------------\n * Align date to start, end, or center of a duration\n * -----------------------------------------------------------------------------*/\n\nexport function alignCenter(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n const halfDuration: DateDuration = {}\n\n for (let prop in duration) {\n const key = prop as keyof DateDuration\n\n const value = duration[key]\n if (value == null) continue\n\n halfDuration[key] = Math.floor(value / 2)\n\n if (halfDuration[key] > 0 && value % 2 === 0) {\n halfDuration[key]--\n }\n }\n\n const aligned = alignStart(date, duration, locale).subtract(halfDuration)\n\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\nexport function alignStart(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n // align to the start of the largest unit\n let aligned = date\n if (duration.years) {\n aligned = startOfYear(date)\n } else if (duration.months) {\n aligned = startOfMonth(date)\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale)\n }\n\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\nexport function alignEnd(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n let d: DateDuration = { ...duration }\n // subtract 1 from the smallest unit\n if (d.days) {\n d.days--\n } else if (d.weeks) {\n d.weeks--\n } else if (d.months) {\n d.months--\n } else if (d.years) {\n d.years--\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d)\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\n/* -----------------------------------------------------------------------------\n * Constrain a date to a min/max range\n * -----------------------------------------------------------------------------*/\n\nexport function constrainStart(\n date: DateValue,\n aligned: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n if (min && date.compare(min) >= 0) {\n aligned = maxDate(aligned, alignStart(toCalendarDate(min), duration, locale))!\n }\n\n if (max && date.compare(max) <= 0) {\n aligned = minDate(aligned, alignEnd(toCalendarDate(max), duration, locale))!\n }\n\n return aligned\n}\n\nexport function constrainValue(date: DateValue, minValue?: DateValue, maxValue?: DateValue): DateValue {\n if (minValue) {\n date = maxDate(date, toCalendarDate(minValue))!\n }\n if (maxValue) {\n date = minDate(date, toCalendarDate(maxValue))!\n }\n return date\n}\n","import type { DateDuration, DateValue } from \"@internationalized/date\"\nimport { alignCenter, alignEnd, alignStart } from \"./constrain\"\nimport type { DateAlignment } from \"./types\"\n\nexport function alignDate(\n date: DateValue,\n alignment: DateAlignment,\n duration: DateDuration,\n locale: string,\n min?: DateValue | undefined,\n max?: DateValue | undefined,\n) {\n switch (alignment) {\n case \"start\":\n return alignStart(date, duration, locale, min, max)\n case \"end\":\n return alignEnd(date, duration, locale, min, max)\n case \"center\":\n default:\n return alignCenter(date, duration, locale, min, max)\n }\n}\n\nexport function alignStartDate(\n date: DateValue,\n startDate: DateValue,\n endDate: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue | undefined,\n max?: DateValue | undefined,\n) {\n if (date.compare(startDate) < 0) {\n return alignEnd(date, duration, locale, min, max)\n }\n if (date.compare(endDate) > 0) {\n return alignStart(date, duration, locale, min, max)\n }\n return startDate\n}\n","import { type DateValue, isSameDay, isToday } from \"@internationalized/date\"\nimport type { DateAvailableFn } from \"./types\"\n\nexport function isTodayDate(date: DateValue, timeZone: string) {\n return isToday(date, timeZone)\n}\n\nexport function isDateEqual(dateA: DateValue, dateB?: DateValue | null) {\n return dateB != null && isSameDay(dateA, dateB)\n}\n\nexport function isDateInvalid(date: DateValue, minValue?: DateValue | null, maxValue?: DateValue | null) {\n return (minValue != null && date.compare(minValue) < 0) || (maxValue != null && date.compare(maxValue) > 0)\n}\n\nexport function isDateDisabled(\n date: DateValue,\n startDate: DateValue,\n endDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n return isDateOutsideVisibleRange(date, startDate, endDate) || isDateInvalid(date, minValue, maxValue)\n}\n\nexport function isDateUnavailable(\n date: DateValue | null,\n isUnavailable: DateAvailableFn | undefined,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n if (!date) {\n return false\n }\n if (isUnavailable?.(date, locale)) {\n return true\n }\n return isDateInvalid(date, minValue, maxValue)\n}\n\nexport function isDateOutsideVisibleRange(date: DateValue, startDate: DateValue, endDate: DateValue) {\n return date.compare(startDate) < 0 || date.compare(endDate) > 0\n}\n\nexport function isPreviousVisibleRangeInvalid(\n startDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n const prevDate = startDate.subtract({ days: 1 })\n return isSameDay(prevDate, startDate) || isDateInvalid(prevDate, minValue, maxValue)\n}\n\nexport function isNextVisibleRangeInvalid(\n endDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n const nextDate = endDate.add({ days: 1 })\n return isSameDay(nextDate, endDate) || isDateInvalid(nextDate, minValue, maxValue)\n}\n","import type { DateDuration, DateValue } from \"@internationalized/date\"\n\nexport function getUnitDuration(duration: DateDuration) {\n let clone = { ...duration }\n\n for (let key in clone) {\n clone[key as keyof typeof clone] = 1\n }\n\n return clone\n}\n\nexport function getEndDate(startDate: DateValue, duration: DateDuration) {\n let clone = { ...duration }\n\n if (clone.days) {\n clone.days--\n } else {\n clone.days = -1\n }\n\n return startDate.add(clone)\n}\n","import type { DateValue, DateFormatter } from \"@internationalized/date\"\n\nexport function formatRange(\n startDate: DateValue,\n endDate: DateValue,\n formatter: DateFormatter,\n toString: (start: string, end: string) => string,\n timeZone: string,\n) {\n let parts = formatter.formatRangeToParts(startDate.toDate(timeZone), endDate.toDate(timeZone))\n\n let separatorIndex = -1\n\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i]\n if (part.source === \"shared\" && part.type === \"literal\") {\n separatorIndex = i\n } else if (part.source === \"endRange\") {\n break\n }\n }\n\n let start = \"\"\n let end = \"\"\n\n for (let i = 0; i < parts.length; i++) {\n if (i < separatorIndex) {\n start += parts[i].value\n } else if (i > separatorIndex) {\n end += parts[i].value\n }\n }\n\n return toString(start, end)\n}\n","import { type DateValue, isSameDay } from \"@internationalized/date\"\nimport { formatRange } from \"./format-range\"\nimport { getDayFormatter } from \"./get-day-formatter\"\n\nexport function formatSelectedDate(startDate: DateValue, endDate: DateValue | null, locale: string, timeZone: string) {\n let start = startDate\n let end = endDate ?? startDate\n\n let formatter = getDayFormatter(locale, timeZone)\n\n if (isSameDay(start, end)) {\n return formatter.format(start.toDate(timeZone))\n }\n\n return formatRange(start, end, formatter, (start, end) => `${start} – ${end}`, timeZone)\n}\n","import { DateFormatter, toCalendarDateTime, today } from \"@internationalized/date\"\nimport { getEraFormat } from \"./get-era-format\"\n\nexport function getDayFormatter(locale: string, timeZone: string) {\n const date = toCalendarDateTime(today(timeZone))\n return new DateFormatter(locale, {\n weekday: \"long\",\n month: \"long\",\n year: \"numeric\",\n day: \"numeric\",\n era: getEraFormat(date),\n timeZone,\n })\n}\n","import type { DateValue } from \"@internationalized/date\"\n\nexport function getEraFormat(date: DateValue | undefined): \"short\" | undefined {\n return date?.calendar.identifier === \"gregory\" && date.era === \"BC\" ? \"short\" : undefined\n}\n","import { type DateValue, endOfMonth, isSameDay, startOfMonth } from \"@internationalized/date\"\nimport { getDayFormatter } from \"./get-day-formatter\"\nimport { getMonthFormatter } from \"./get-month-formatter\"\n\nexport function formatVisibleRange(startDate: DateValue, endDate: DateValue | null, locale: string, timeZone: string) {\n const start = startDate\n const end = endDate ?? startDate\n\n const dayFormatter = getDayFormatter(locale, timeZone)\n\n if (!isSameDay(start, startOfMonth(start))) {\n return dayFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone))\n }\n\n const monthFormatter = getMonthFormatter(locale, timeZone)\n\n if (isSameDay(end, endOfMonth(start))) {\n return monthFormatter.format(start.toDate(timeZone))\n }\n\n if (isSameDay(end, endOfMonth(end))) {\n return monthFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone))\n }\n\n return \"\"\n}\n","import { today, toCalendarDate, DateFormatter } from \"@internationalized/date\"\nimport { getEraFormat } from \"./get-era-format\"\n\nexport function getMonthFormatter(locale: string, timeZone: string) {\n const date = toCalendarDate(today(timeZone))\n return new DateFormatter(locale, {\n month: \"long\",\n year: \"numeric\",\n era: getEraFormat(date),\n calendar: date?.calendar.identifier,\n timeZone: timeZone,\n })\n}\n","export function getDecadeRange(year: number) {\n const computedYear = year - (year % 10) - 1\n\n const years: number[] = []\n\n for (let i = 0; i < 12; i += 1) {\n const value = computedYear + i\n years.push(value)\n }\n\n return years\n}\n","import { type DateValue, getWeeksInMonth, isSameDay, getDayOfWeek, startOfMonth } from \"@internationalized/date\"\nimport { getStartOfWeek } from \"./get-start-of-week\"\n\nexport function getDaysInWeek(weekIndex: number, from: DateValue, locale: string, firstDayOfWeek?: number) {\n const weekDate = from.add({ weeks: weekIndex })\n const dates: DateValue[] = []\n let date = getStartOfWeek(weekDate, locale, firstDayOfWeek)\n while (dates.length < 7) {\n dates.push(date)\n let nextDate = date.add({ days: 1 })\n if (isSameDay(date, nextDate)) {\n break\n }\n date = nextDate\n }\n return dates\n}\n\nexport function getCustomWeeksInMonth(from: DateValue, locale: string, firstDayOfWeek?: number) {\n if (firstDayOfWeek == null) {\n return getWeeksInMonth(from, locale)\n }\n const paddingDays = (getDayOfWeek(startOfMonth(from), locale) - firstDayOfWeek + 7) % 7\n\n return Math.ceil((paddingDays + from.calendar.getDaysInMonth(from)) / 7)\n}\n\nexport function getMonthDays(from: DateValue, locale: string, numOfWeeks?: number, firstDayOfWeek?: number) {\n const monthWeeks = numOfWeeks ?? getCustomWeeksInMonth(from, locale, firstDayOfWeek)\n\n const weeks = [...new Array(monthWeeks).keys()]\n return weeks.map((week) => getDaysInWeek(week, from, locale, firstDayOfWeek))\n}\n","import { type DateValue, getDayOfWeek, startOfWeek } from \"@internationalized/date\"\n\nexport function getStartOfWeek(date: DateValue, locale: string, firstDayOfWeek?: number) {\n // If firstDayOfWeek is provided, use it; otherwise, use the locale's default\n if (firstDayOfWeek !== undefined) {\n // Adjust the date to the specified first day of the week\n const currentDayOfWeek = getDayOfWeek(date, locale)\n const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7\n return date.subtract({ days: daysToSubtract })\n }\n\n // Use the built-in startOfWeek function for locale-specific behavior\n return startOfWeek(date, locale)\n}\n","export function getMonthNames(locale: string, format: Intl.DateTimeFormatOptions[\"month\"] = \"long\") {\n const date = new Date(2021, 0, 1)\n const monthNames: string[] = []\n for (let i = 0; i < 12; i++) {\n monthNames.push(date.toLocaleString(locale, { month: format }))\n date.setMonth(date.getMonth() + 1)\n }\n return monthNames\n}\n","import { type DateValue, DateFormatter } from \"@internationalized/date\"\n\nexport function getWeekdayFormats(locale: string, timeZone: string) {\n const longFormat = new DateFormatter(locale, { weekday: \"long\", timeZone })\n const shortFormat = new DateFormatter(locale, { weekday: \"short\", timeZone })\n const narrowFormat = new DateFormatter(locale, { weekday: \"narrow\", timeZone })\n return <T extends DateValue | Date>(value: T) => {\n const date = value instanceof Date ? value : value.toDate(timeZone)\n return {\n value,\n short: shortFormat.format(date),\n long: longFormat.format(date),\n narrow: narrowFormat.format(date),\n }\n }\n}\n","import type { DateValue } from \"@internationalized/date\"\nimport { getWeekdayFormats } from \"./get-weekday-formats\"\nimport { getStartOfWeek } from \"./get-start-of-week\"\n\nexport function getWeekDays(date: DateValue, startOfWeekProp: number | undefined, timeZone: string, locale: string) {\n const firstDayOfWeek = getStartOfWeek(date, locale, startOfWeekProp)\n const weeks = [...new Array(7).keys()]\n const format = getWeekdayFormats(locale, timeZone)\n return weeks.map((index) => format(firstDayOfWeek.add({ days: index })))\n}\n","export interface YearsRange {\n from: number\n to: number\n}\n\nexport function getYearsRange(range: YearsRange) {\n const years: number[] = []\n\n for (let year = range.from; year <= range.to; year += 1) {\n years.push(year)\n }\n\n return years\n}\n","import {\n type Calendar,\n type DateValue,\n getLocalTimeZone,\n toCalendar,\n toCalendarDateTime,\n today,\n} from \"@internationalized/date\"\nimport { constrainValue } from \"./constrain\"\nimport type { DateAvailableFn } from \"./types\"\n\nexport function getTodayDate(timeZone?: string) {\n return today(timeZone ?? getLocalTimeZone())\n}\n\nexport function getNextDay(date: DateValue) {\n return date.add({ days: 1 })\n}\n\nexport function getPreviousDay(date: DateValue) {\n return date.subtract({ days: 1 })\n}\n\nexport function setMonth(date: DateValue, month: number) {\n return date.set({ month })\n}\n\nexport function setYear(date: DateValue, year: number) {\n return date.set({ year })\n}\n\nexport function setCalendar(date: DateValue, calendar: Calendar) {\n return toCalendar(toCalendarDateTime(date), calendar)\n}\n\nexport function setDate(\n date: DateValue,\n startDate: DateValue,\n isDateUnavailable: DateAvailableFn,\n locale: string,\n minValue: DateValue,\n maxValue: DateValue,\n) {\n let result: DateValue | undefined\n result = constrainValue(date, minValue, maxValue)\n result = getPreviousAvailableDate(date, startDate, locale, isDateUnavailable)\n return result\n}\n\nexport function getPreviousAvailableDate(\n date: DateValue,\n minValue: DateValue,\n locale: string,\n isDateUnavailable?: DateAvailableFn,\n) {\n if (!isDateUnavailable) {\n return date\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date, locale)) {\n date = date.subtract({ days: 1 })\n }\n\n if (date.compare(minValue) >= 0) {\n return date\n }\n}\n","import {\n type DateDuration,\n type DateValue,\n endOfMonth,\n endOfWeek,\n startOfMonth,\n startOfWeek,\n} from \"@internationalized/date\"\nimport { isDateInvalid } from \"./assertion\"\nimport { alignEnd, alignStart, constrainStart, constrainValue } from \"./constrain\"\nimport { getEndDate, getUnitDuration } from \"./duration\"\n\nexport interface AdjustDateParams {\n startDate: DateValue\n focusedDate: DateValue\n}\n\nexport interface AdjustDateReturn extends AdjustDateParams {\n endDate: DateValue\n}\n\nexport function getAdjustedDateFn(\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n return function getDate(options: AdjustDateParams): AdjustDateReturn {\n const { startDate, focusedDate } = options\n const endDate = getEndDate(startDate, visibleDuration)\n\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n if (isDateInvalid(focusedDate, minValue, maxValue)) {\n return {\n startDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n endDate,\n }\n }\n\n if (focusedDate.compare(startDate) < 0) {\n return {\n startDate: alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue),\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n endDate,\n }\n }\n\n if (focusedDate.compare(endDate) > 0) {\n return {\n startDate: alignStart(focusedDate, visibleDuration, locale, minValue, maxValue),\n endDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n }\n }\n\n return {\n startDate,\n endDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n }\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Get next and previous page (for date range)\n * -----------------------------------------------------------------------------*/\n\nexport function getNextPage(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n const start = startDate.add(visibleDuration)\n\n return adjust({\n focusedDate: focusedDate.add(visibleDuration),\n startDate: alignStart(\n constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),\n visibleDuration,\n locale,\n ),\n })\n}\n\nexport function getPreviousPage(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n let start = startDate.subtract(visibleDuration)\n\n return adjust({\n focusedDate: focusedDate.subtract(visibleDuration),\n startDate: alignStart(\n constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),\n visibleDuration,\n locale,\n ),\n })\n}\n\n/* -----------------------------------------------------------------------------\n * Get the next and previous row (for date range)\n * -----------------------------------------------------------------------------*/\n\nexport function getNextRow(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.add({ weeks: 1 }),\n startDate,\n })\n }\n}\n\nexport function getPreviousRow(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.subtract({ weeks: 1 }),\n startDate,\n })\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Get start and end date for a date section\n * -----------------------------------------------------------------------------*/\n\nexport function getSectionStart(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return adjust({\n focusedDate: startDate,\n startDate,\n })\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: startOfWeek(focusedDate, locale),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: startOfMonth(focusedDate),\n startDate,\n })\n }\n}\n\nexport function getSectionEnd(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n const endDate = getEndDate(startDate, visibleDuration)\n\n if (visibleDuration.days) {\n return adjust({\n focusedDate: endDate,\n startDate,\n })\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n //@ts-expect-error - endOfWeek is loosely typed\n focusedDate: endOfWeek(focusedDate, locale),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: endOfMonth(focusedDate),\n startDate,\n })\n }\n}\n\nexport function getNextSection(\n focusedDate: DateValue,\n startDate: DateValue,\n larger: boolean,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (!larger && !visibleDuration.days) {\n return adjust({\n focusedDate: focusedDate.add(getUnitDuration(visibleDuration)),\n startDate,\n })\n }\n\n if (visibleDuration.days) {\n return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: focusedDate.add({ months: 1 }),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.add({ years: 1 }),\n startDate,\n })\n }\n}\n\nexport function getPreviousSection(\n focusedDate: DateValue,\n startDate: DateValue,\n larger: boolean,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (!larger && !visibleDuration.days) {\n return adjust({\n focusedDate: focusedDate.subtract(getUnitDuration(visibleDuration)),\n startDate,\n })\n }\n\n if (visibleDuration.days) {\n return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: focusedDate.subtract({ months: 1 }),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.subtract({ years: 1 }),\n startDate,\n })\n }\n}\n","import { CalendarDate, DateFormatter, type DateValue } from \"@internationalized/date\"\n\nconst isValidYear = (year: string | null | undefined): year is string => year != null && year.length === 4\nconst isValidMonth = (month: string | null | undefined): month is string => month != null && parseFloat(month) <= 12\nconst isValidDay = (day: string | null | undefined): day is string => day != null && parseFloat(day) <= 31\n\nexport function parseDateString(date: string, locale: string, timeZone: string): DateValue | undefined {\n const regex = createRegex(locale, timeZone)\n\n let { year, month, day } = extract(regex, date) ?? {}\n\n const hasMatch = year != null || month != null || day != null\n\n if (hasMatch) {\n const curr = new Date()\n year ||= curr.getFullYear().toString()\n month ||= (curr.getMonth() + 1).toString()\n day ||= curr.getDate().toString()\n }\n\n if (isValidYear(year) && isValidMonth(month) && isValidDay(day)) {\n return new CalendarDate(+year, +month, +day)\n }\n\n // We should never get here, but just in case\n const time = Date.parse(date)\n if (!isNaN(time)) {\n const date = new Date(time)\n return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate())\n }\n}\n\nfunction createRegex(locale: string, timeZone: string) {\n const formatter = new DateFormatter(locale, { day: \"numeric\", month: \"numeric\", year: \"numeric\", timeZone })\n const parts = formatter.formatToParts(new Date(2000, 11, 25))\n return parts.map(({ type, value }) => (type === \"literal\" ? `${value}?` : `((?!=<${type}>)\\\\d+)?`)).join(\"\")\n}\n\ninterface DateParts {\n year: string | null\n month: string | null\n day: string | null\n}\n\ntype DatePart = keyof DateParts\n\nfunction extract(pattern: string | RegExp, str: string) {\n const matches = str.match(pattern)\n return pattern\n .toString()\n .match(/<(.+?)>/g)\n ?.map((group) => {\n const groupMatches = group.match(/<(.+)>/)\n if (!groupMatches || groupMatches.length <= 0) {\n return null\n }\n return group.match(/<(.+)>/)?.[1]\n })\n .reduce((acc, curr, index) => {\n if (!curr) return acc\n if (matches && matches.length > index) {\n acc[curr as DatePart] = matches[index + 1]\n } else {\n acc[curr as DatePart] = null\n }\n return acc\n }, {} as DateParts)\n}\n","import {\n endOfMonth,\n endOfWeek,\n endOfYear,\n now,\n startOfMonth,\n startOfWeek,\n startOfYear,\n type DateValue,\n} from \"@internationalized/date\"\n\nexport type DateRangePreset =\n | \"thisWeek\"\n | \"lastWeek\"\n | \"thisMonth\"\n | \"lastMonth\"\n | \"thisQuarter\"\n | \"lastQuarter\"\n | \"thisYear\"\n | \"lastYear\"\n | \"last3Days\"\n | \"last7Days\"\n | \"last14Days\"\n | \"last30Days\"\n | \"last90Days\"\n\nexport function getDateRangePreset(preset: DateRangePreset, locale: string, timeZone: string): [DateValue, DateValue] {\n const today = now(timeZone)\n\n switch (preset) {\n case \"thisWeek\":\n return [startOfWeek(today, locale), endOfWeek(today, locale)]\n case \"thisMonth\":\n return [startOfMonth(today), today]\n case \"thisQuarter\":\n return [startOfMonth(today).add({ months: -today.month % 3 }), today]\n case \"thisYear\":\n return [startOfYear(today), today]\n case \"last3Days\":\n return [today.add({ days: -2 }), today]\n case \"last7Days\":\n return [today.add({ days: -6 }), today]\n case \"last14Days\":\n return [today.add({ days: -13 }), today]\n case \"last30Days\":\n return [today.add({ days: -29 }), today]\n case \"last90Days\":\n return [today.add({ days: -89 }), today]\n case \"lastMonth\":\n return [startOfMonth(today.add({ months: -1 })), endOfMonth(today.add({ months: -1 }))]\n case \"lastQuarter\":\n return [\n startOfMonth(today.add({ months: (-today.month % 3) - 3 })),\n endOfMonth(today.add({ months: (-today.month % 3) - 1 })),\n ]\n case \"lastWeek\":\n return [startOfWeek(today, locale).add({ weeks: -1 }), endOfWeek(today, locale).add({ weeks: -1 })]\n case \"lastYear\":\n return [startOfYear(today.add({ years: -1 })), endOfYear(today.add({ years: -1 }))]\n default:\n throw new Error(`Invalid date range preset: ${preset}`)\n }\n}\n"],"mappings":"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","names":["isSameDay","isSameDay","start","end","isSameDay","startOfMonth","today","toCalendarDate","DateFormatter","toCalendarDate","today","DateFormatter","isSameDay","startOfMonth","isSameDay","getDayOfWeek","startOfMonth","startOfWeek","isSameDay","getDayOfWeek","startOfMonth","DateFormatter","toCalendarDateTime","today","today","toCalendarDateTime","isDateUnavailable","endOfMonth","startOfMonth","startOfWeek","startOfWeek","startOfMonth","endOfMonth","DateFormatter","date","endOfMonth","endOfWeek","startOfMonth","startOfWeek","startOfYear","today"]}
|
|
1
|
+
{"version":3,"sources":["../src/constrain.ts","../src/align.ts","../src/assertion.ts","../src/duration.ts","../src/format-range.ts","../src/format-selected-date.ts","../src/get-day-formatter.ts","../src/get-era-format.ts","../src/format-visible-range.ts","../src/get-month-formatter.ts","../src/get-decade-range.ts","../src/get-month-days.ts","../src/get-start-of-week.ts","../src/get-month-names.ts","../src/get-weekday-formats.ts","../src/get-week-days.ts","../src/get-year-range.ts","../src/mutation.ts","../src/pagination.ts","../src/parse-date.ts","../src/normalize-year.ts","../src/preset.ts"],"sourcesContent":["import {\n type DateDuration,\n type DateValue,\n maxDate,\n minDate,\n startOfMonth,\n startOfWeek,\n startOfYear,\n toCalendarDate,\n} from \"@internationalized/date\"\n\n/* -----------------------------------------------------------------------------\n * Align date to start, end, or center of a duration\n * -----------------------------------------------------------------------------*/\n\nexport function alignCenter(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n const halfDuration: DateDuration = {}\n\n for (let prop in duration) {\n const key = prop as keyof DateDuration\n\n const value = duration[key]\n if (value == null) continue\n\n halfDuration[key] = Math.floor(value / 2)\n\n if (halfDuration[key] > 0 && value % 2 === 0) {\n halfDuration[key]--\n }\n }\n\n const aligned = alignStart(date, duration, locale).subtract(halfDuration)\n\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\nexport function alignStart(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n // align to the start of the largest unit\n let aligned = date\n if (duration.years) {\n aligned = startOfYear(date)\n } else if (duration.months) {\n aligned = startOfMonth(date)\n } else if (duration.weeks) {\n aligned = startOfWeek(date, locale)\n }\n\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\nexport function alignEnd(\n date: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n let d: DateDuration = { ...duration }\n // subtract 1 from the smallest unit\n if (d.days) {\n d.days--\n } else if (d.weeks) {\n d.weeks--\n } else if (d.months) {\n d.months--\n } else if (d.years) {\n d.years--\n }\n\n let aligned = alignStart(date, duration, locale).subtract(d)\n return constrainStart(date, aligned, duration, locale, min, max)\n}\n\n/* -----------------------------------------------------------------------------\n * Constrain a date to a min/max range\n * -----------------------------------------------------------------------------*/\n\nexport function constrainStart(\n date: DateValue,\n aligned: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue,\n max?: DateValue,\n): DateValue {\n if (min && date.compare(min) >= 0) {\n aligned = maxDate(aligned, alignStart(toCalendarDate(min), duration, locale))!\n }\n\n if (max && date.compare(max) <= 0) {\n aligned = minDate(aligned, alignEnd(toCalendarDate(max), duration, locale))!\n }\n\n return aligned\n}\n\nexport function constrainValue(date: DateValue, minValue?: DateValue, maxValue?: DateValue): DateValue {\n if (minValue) {\n date = maxDate(date, toCalendarDate(minValue))!\n }\n if (maxValue) {\n date = minDate(date, toCalendarDate(maxValue))!\n }\n return date\n}\n","import type { DateDuration, DateValue } from \"@internationalized/date\"\nimport { alignCenter, alignEnd, alignStart } from \"./constrain\"\nimport type { DateAlignment } from \"./types\"\n\nexport function alignDate(\n date: DateValue,\n alignment: DateAlignment,\n duration: DateDuration,\n locale: string,\n min?: DateValue | undefined,\n max?: DateValue | undefined,\n) {\n switch (alignment) {\n case \"start\":\n return alignStart(date, duration, locale, min, max)\n case \"end\":\n return alignEnd(date, duration, locale, min, max)\n case \"center\":\n default:\n return alignCenter(date, duration, locale, min, max)\n }\n}\n\nexport function alignStartDate(\n date: DateValue,\n startDate: DateValue,\n endDate: DateValue,\n duration: DateDuration,\n locale: string,\n min?: DateValue | undefined,\n max?: DateValue | undefined,\n) {\n if (date.compare(startDate) < 0) {\n return alignEnd(date, duration, locale, min, max)\n }\n if (date.compare(endDate) > 0) {\n return alignStart(date, duration, locale, min, max)\n }\n return startDate\n}\n","import { type DateValue, isSameDay, isToday } from \"@internationalized/date\"\nimport type { DateAvailableFn } from \"./types\"\n\nexport function isTodayDate(date: DateValue, timeZone: string) {\n return isToday(date, timeZone)\n}\n\nexport function isDateEqual(dateA: DateValue, dateB?: DateValue | null) {\n return dateB != null && isSameDay(dateA, dateB)\n}\n\nexport function isDateInvalid(date: DateValue, minValue?: DateValue | null, maxValue?: DateValue | null) {\n return (minValue != null && date.compare(minValue) < 0) || (maxValue != null && date.compare(maxValue) > 0)\n}\n\nexport function isDateDisabled(\n date: DateValue,\n startDate: DateValue,\n endDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n return isDateOutsideVisibleRange(date, startDate, endDate) || isDateInvalid(date, minValue, maxValue)\n}\n\nexport function isDateUnavailable(\n date: DateValue | null,\n isUnavailable: DateAvailableFn | undefined,\n locale: string,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n if (!date) {\n return false\n }\n if (isUnavailable?.(date, locale)) {\n return true\n }\n return isDateInvalid(date, minValue, maxValue)\n}\n\nexport function isDateOutsideVisibleRange(date: DateValue, startDate: DateValue, endDate: DateValue) {\n return date.compare(startDate) < 0 || date.compare(endDate) > 0\n}\n\nexport function isPreviousVisibleRangeInvalid(\n startDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n const prevDate = startDate.subtract({ days: 1 })\n return isSameDay(prevDate, startDate) || isDateInvalid(prevDate, minValue, maxValue)\n}\n\nexport function isNextVisibleRangeInvalid(\n endDate: DateValue,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n) {\n const nextDate = endDate.add({ days: 1 })\n return isSameDay(nextDate, endDate) || isDateInvalid(nextDate, minValue, maxValue)\n}\n","import type { DateDuration, DateValue } from \"@internationalized/date\"\n\nexport function getUnitDuration(duration: DateDuration) {\n let clone = { ...duration }\n\n for (let key in clone) {\n clone[key as keyof typeof clone] = 1\n }\n\n return clone\n}\n\nexport function getEndDate(startDate: DateValue, duration: DateDuration) {\n let clone = { ...duration }\n\n if (clone.days) {\n clone.days--\n } else {\n clone.days = -1\n }\n\n return startDate.add(clone)\n}\n","import type { DateValue, DateFormatter } from \"@internationalized/date\"\n\nexport function formatRange(\n startDate: DateValue,\n endDate: DateValue,\n formatter: DateFormatter,\n toString: (start: string, end: string) => string,\n timeZone: string,\n) {\n let parts = formatter.formatRangeToParts(startDate.toDate(timeZone), endDate.toDate(timeZone))\n\n let separatorIndex = -1\n\n for (let i = 0; i < parts.length; i++) {\n let part = parts[i]\n if (part.source === \"shared\" && part.type === \"literal\") {\n separatorIndex = i\n } else if (part.source === \"endRange\") {\n break\n }\n }\n\n let start = \"\"\n let end = \"\"\n\n for (let i = 0; i < parts.length; i++) {\n if (i < separatorIndex) {\n start += parts[i].value\n } else if (i > separatorIndex) {\n end += parts[i].value\n }\n }\n\n return toString(start, end)\n}\n","import { type DateValue, isSameDay } from \"@internationalized/date\"\nimport { formatRange } from \"./format-range\"\nimport { getDayFormatter } from \"./get-day-formatter\"\n\nexport function formatSelectedDate(startDate: DateValue, endDate: DateValue | null, locale: string, timeZone: string) {\n let start = startDate\n let end = endDate ?? startDate\n\n let formatter = getDayFormatter(locale, timeZone)\n\n if (isSameDay(start, end)) {\n return formatter.format(start.toDate(timeZone))\n }\n\n return formatRange(start, end, formatter, (start, end) => `${start} – ${end}`, timeZone)\n}\n","import { DateFormatter, toCalendarDateTime, today } from \"@internationalized/date\"\nimport { getEraFormat } from \"./get-era-format\"\n\nexport function getDayFormatter(locale: string, timeZone: string) {\n const date = toCalendarDateTime(today(timeZone))\n return new DateFormatter(locale, {\n weekday: \"long\",\n month: \"long\",\n year: \"numeric\",\n day: \"numeric\",\n era: getEraFormat(date),\n timeZone,\n })\n}\n","import type { DateValue } from \"@internationalized/date\"\n\nexport function getEraFormat(date: DateValue | undefined): \"short\" | undefined {\n return date?.calendar.identifier === \"gregory\" && date.era === \"BC\" ? \"short\" : undefined\n}\n","import { type DateValue, endOfMonth, isSameDay, startOfMonth } from \"@internationalized/date\"\nimport { getDayFormatter } from \"./get-day-formatter\"\nimport { getMonthFormatter } from \"./get-month-formatter\"\n\nexport function formatVisibleRange(startDate: DateValue, endDate: DateValue | null, locale: string, timeZone: string) {\n const start = startDate\n const end = endDate ?? startDate\n\n const dayFormatter = getDayFormatter(locale, timeZone)\n\n if (!isSameDay(start, startOfMonth(start))) {\n return dayFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone))\n }\n\n const monthFormatter = getMonthFormatter(locale, timeZone)\n\n if (isSameDay(end, endOfMonth(start))) {\n return monthFormatter.format(start.toDate(timeZone))\n }\n\n if (isSameDay(end, endOfMonth(end))) {\n return monthFormatter.formatRange(start.toDate(timeZone), end.toDate(timeZone))\n }\n\n return \"\"\n}\n","import { today, toCalendarDate, DateFormatter } from \"@internationalized/date\"\nimport { getEraFormat } from \"./get-era-format\"\n\nexport function getMonthFormatter(locale: string, timeZone: string) {\n const date = toCalendarDate(today(timeZone))\n return new DateFormatter(locale, {\n month: \"long\",\n year: \"numeric\",\n era: getEraFormat(date),\n calendar: date?.calendar.identifier,\n timeZone: timeZone,\n })\n}\n","export function getDecadeRange(year: number) {\n const computedYear = year - (year % 10) - 1\n\n const years: number[] = []\n\n for (let i = 0; i < 12; i += 1) {\n const value = computedYear + i\n years.push(value)\n }\n\n return years\n}\n","import { type DateValue, getWeeksInMonth, isSameDay, getDayOfWeek, startOfMonth } from \"@internationalized/date\"\nimport { getStartOfWeek } from \"./get-start-of-week\"\n\nexport function getDaysInWeek(weekIndex: number, from: DateValue, locale: string, firstDayOfWeek?: number) {\n const weekDate = from.add({ weeks: weekIndex })\n const dates: DateValue[] = []\n let date = getStartOfWeek(weekDate, locale, firstDayOfWeek)\n while (dates.length < 7) {\n dates.push(date)\n let nextDate = date.add({ days: 1 })\n if (isSameDay(date, nextDate)) {\n break\n }\n date = nextDate\n }\n return dates\n}\n\nexport function getCustomWeeksInMonth(from: DateValue, locale: string, firstDayOfWeek?: number) {\n if (firstDayOfWeek == null) {\n return getWeeksInMonth(from, locale)\n }\n const paddingDays = (getDayOfWeek(startOfMonth(from), locale) - firstDayOfWeek + 7) % 7\n\n return Math.ceil((paddingDays + from.calendar.getDaysInMonth(from)) / 7)\n}\n\nexport function getMonthDays(from: DateValue, locale: string, numOfWeeks?: number, firstDayOfWeek?: number) {\n const monthWeeks = numOfWeeks ?? getCustomWeeksInMonth(from, locale, firstDayOfWeek)\n\n const weeks = [...new Array(monthWeeks).keys()]\n return weeks.map((week) => getDaysInWeek(week, from, locale, firstDayOfWeek))\n}\n","import { type DateValue, getDayOfWeek, startOfWeek } from \"@internationalized/date\"\n\nexport function getStartOfWeek(date: DateValue, locale: string, firstDayOfWeek?: number) {\n // If firstDayOfWeek is provided, use it; otherwise, use the locale's default\n if (firstDayOfWeek !== undefined) {\n // Adjust the date to the specified first day of the week\n const currentDayOfWeek = getDayOfWeek(date, locale)\n const daysToSubtract = (currentDayOfWeek - firstDayOfWeek + 7) % 7\n return date.subtract({ days: daysToSubtract })\n }\n\n // Use the built-in startOfWeek function for locale-specific behavior\n return startOfWeek(date, locale)\n}\n","export function getMonthNames(locale: string, format: Intl.DateTimeFormatOptions[\"month\"] = \"long\") {\n const date = new Date(2021, 0, 1)\n const monthNames: string[] = []\n for (let i = 0; i < 12; i++) {\n monthNames.push(date.toLocaleString(locale, { month: format }))\n date.setMonth(date.getMonth() + 1)\n }\n return monthNames\n}\n","import { type DateValue, DateFormatter } from \"@internationalized/date\"\n\nexport function getWeekdayFormats(locale: string, timeZone: string) {\n const longFormat = new DateFormatter(locale, { weekday: \"long\", timeZone })\n const shortFormat = new DateFormatter(locale, { weekday: \"short\", timeZone })\n const narrowFormat = new DateFormatter(locale, { weekday: \"narrow\", timeZone })\n return <T extends DateValue | Date>(value: T) => {\n const date = value instanceof Date ? value : value.toDate(timeZone)\n return {\n value,\n short: shortFormat.format(date),\n long: longFormat.format(date),\n narrow: narrowFormat.format(date),\n }\n }\n}\n","import type { DateValue } from \"@internationalized/date\"\nimport { getWeekdayFormats } from \"./get-weekday-formats\"\nimport { getStartOfWeek } from \"./get-start-of-week\"\n\nexport function getWeekDays(date: DateValue, startOfWeekProp: number | undefined, timeZone: string, locale: string) {\n const firstDayOfWeek = getStartOfWeek(date, locale, startOfWeekProp)\n const weeks = [...new Array(7).keys()]\n const format = getWeekdayFormats(locale, timeZone)\n return weeks.map((index) => format(firstDayOfWeek.add({ days: index })))\n}\n","export interface YearsRange {\n from: number\n to: number\n}\n\nexport function getYearsRange(range: YearsRange) {\n const years: number[] = []\n\n for (let year = range.from; year <= range.to; year += 1) {\n years.push(year)\n }\n\n return years\n}\n","import {\n type Calendar,\n type DateValue,\n getLocalTimeZone,\n toCalendar,\n toCalendarDateTime,\n today,\n} from \"@internationalized/date\"\nimport { constrainValue } from \"./constrain\"\nimport type { DateAvailableFn } from \"./types\"\n\nexport function getTodayDate(timeZone?: string) {\n return today(timeZone ?? getLocalTimeZone())\n}\n\nexport function getNextDay(date: DateValue) {\n return date.add({ days: 1 })\n}\n\nexport function getPreviousDay(date: DateValue) {\n return date.subtract({ days: 1 })\n}\n\nexport function setMonth(date: DateValue, month: number) {\n return date.set({ month })\n}\n\nexport function setYear(date: DateValue, year: number) {\n return date.set({ year })\n}\n\nexport function setCalendar(date: DateValue, calendar: Calendar) {\n return toCalendar(toCalendarDateTime(date), calendar)\n}\n\nexport function setDate(\n date: DateValue,\n startDate: DateValue,\n isDateUnavailable: DateAvailableFn,\n locale: string,\n minValue: DateValue,\n maxValue: DateValue,\n) {\n let result: DateValue | undefined\n result = constrainValue(date, minValue, maxValue)\n result = getPreviousAvailableDate(date, startDate, locale, isDateUnavailable)\n return result\n}\n\nexport function getPreviousAvailableDate(\n date: DateValue,\n minValue: DateValue,\n locale: string,\n isDateUnavailable?: DateAvailableFn,\n) {\n if (!isDateUnavailable) {\n return date\n }\n\n while (date.compare(minValue) >= 0 && isDateUnavailable(date, locale)) {\n date = date.subtract({ days: 1 })\n }\n\n if (date.compare(minValue) >= 0) {\n return date\n }\n}\n","import {\n type DateDuration,\n type DateValue,\n endOfMonth,\n endOfWeek,\n startOfMonth,\n startOfWeek,\n} from \"@internationalized/date\"\nimport { isDateInvalid } from \"./assertion\"\nimport { alignEnd, alignStart, constrainStart, constrainValue } from \"./constrain\"\nimport { getEndDate, getUnitDuration } from \"./duration\"\n\nexport interface AdjustDateParams {\n startDate: DateValue\n focusedDate: DateValue\n}\n\nexport interface AdjustDateReturn extends AdjustDateParams {\n endDate: DateValue\n}\n\nexport function getAdjustedDateFn(\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n return function getDate(options: AdjustDateParams): AdjustDateReturn {\n const { startDate, focusedDate } = options\n const endDate = getEndDate(startDate, visibleDuration)\n\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n if (isDateInvalid(focusedDate, minValue, maxValue)) {\n return {\n startDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n endDate,\n }\n }\n\n if (focusedDate.compare(startDate) < 0) {\n return {\n startDate: alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue),\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n endDate,\n }\n }\n\n if (focusedDate.compare(endDate) > 0) {\n return {\n startDate: alignStart(focusedDate, visibleDuration, locale, minValue, maxValue),\n endDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n }\n }\n\n return {\n startDate,\n endDate,\n focusedDate: constrainValue(focusedDate, minValue, maxValue),\n }\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Get next and previous page (for date range)\n * -----------------------------------------------------------------------------*/\n\nexport function getNextPage(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n const start = startDate.add(visibleDuration)\n\n return adjust({\n focusedDate: focusedDate.add(visibleDuration),\n startDate: alignStart(\n constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),\n visibleDuration,\n locale,\n ),\n })\n}\n\nexport function getPreviousPage(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n let start = startDate.subtract(visibleDuration)\n\n return adjust({\n focusedDate: focusedDate.subtract(visibleDuration),\n startDate: alignStart(\n constrainStart(focusedDate, start, visibleDuration, locale, minValue, maxValue),\n visibleDuration,\n locale,\n ),\n })\n}\n\n/* -----------------------------------------------------------------------------\n * Get the next and previous row (for date range)\n * -----------------------------------------------------------------------------*/\n\nexport function getNextRow(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.add({ weeks: 1 }),\n startDate,\n })\n }\n}\n\nexport function getPreviousRow(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.subtract({ weeks: 1 }),\n startDate,\n })\n }\n}\n\n/* -----------------------------------------------------------------------------\n * Get start and end date for a date section\n * -----------------------------------------------------------------------------*/\n\nexport function getSectionStart(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (visibleDuration.days) {\n return adjust({\n focusedDate: startDate,\n startDate,\n })\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: startOfWeek(focusedDate, locale),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: startOfMonth(focusedDate),\n startDate,\n })\n }\n}\n\nexport function getSectionEnd(\n focusedDate: DateValue,\n startDate: DateValue,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n const endDate = getEndDate(startDate, visibleDuration)\n\n if (visibleDuration.days) {\n return adjust({\n focusedDate: endDate,\n startDate,\n })\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n //@ts-expect-error - endOfWeek is loosely typed\n focusedDate: endOfWeek(focusedDate, locale),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: endOfMonth(focusedDate),\n startDate,\n })\n }\n}\n\nexport function getNextSection(\n focusedDate: DateValue,\n startDate: DateValue,\n larger: boolean,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (!larger && !visibleDuration.days) {\n return adjust({\n focusedDate: focusedDate.add(getUnitDuration(visibleDuration)),\n startDate,\n })\n }\n\n if (visibleDuration.days) {\n return getNextPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: focusedDate.add({ months: 1 }),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.add({ years: 1 }),\n startDate,\n })\n }\n}\n\nexport function getPreviousSection(\n focusedDate: DateValue,\n startDate: DateValue,\n larger: boolean,\n visibleDuration: DateDuration,\n locale: string,\n minValue?: DateValue,\n maxValue?: DateValue,\n) {\n const adjust = getAdjustedDateFn(visibleDuration, locale, minValue, maxValue)\n\n if (!larger && !visibleDuration.days) {\n return adjust({\n focusedDate: focusedDate.subtract(getUnitDuration(visibleDuration)),\n startDate,\n })\n }\n\n if (visibleDuration.days) {\n return getPreviousPage(focusedDate, startDate, visibleDuration, locale, minValue, maxValue)\n }\n\n if (visibleDuration.weeks) {\n return adjust({\n focusedDate: focusedDate.subtract({ months: 1 }),\n startDate,\n })\n }\n\n if (visibleDuration.months || visibleDuration.years) {\n return adjust({\n focusedDate: focusedDate.subtract({ years: 1 }),\n startDate,\n })\n }\n}\n","import { CalendarDate, DateFormatter, type DateValue } from \"@internationalized/date\"\nimport { normalizeYear } from \"./normalize-year\"\n\nconst isValidYear = (year: string | null | undefined): year is string => year != null && year.length === 4\nconst isValidMonth = (month: string | null | undefined): month is string => month != null && parseFloat(month) <= 12\nconst isValidDay = (day: string | null | undefined): day is string => day != null && parseFloat(day) <= 31\n\nexport function parseDateString(date: string, locale: string, timeZone: string): DateValue | undefined {\n const regex = createRegex(locale, timeZone)\n\n let { year, month, day } = extract(regex, date) ?? {}\n\n const hasMatch = year != null || month != null || day != null\n\n if (hasMatch) {\n const curr = new Date()\n year ||= curr.getFullYear().toString()\n month ||= (curr.getMonth() + 1).toString()\n day ||= curr.getDate().toString()\n }\n\n if (!isValidYear(year)) {\n year = normalizeYear(year)\n }\n\n if (isValidYear(year) && isValidMonth(month) && isValidDay(day)) {\n return new CalendarDate(+year, +month, +day)\n }\n\n // We should never get here, but just in case\n const time = Date.parse(date)\n if (!isNaN(time)) {\n const date = new Date(time)\n return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate())\n }\n}\n\nfunction createRegex(locale: string, timeZone: string) {\n const formatter = new DateFormatter(locale, { day: \"numeric\", month: \"numeric\", year: \"numeric\", timeZone })\n const parts = formatter.formatToParts(new Date(2000, 11, 25))\n return parts.map(({ type, value }) => (type === \"literal\" ? `${value}?` : `((?!=<${type}>)\\\\d+)?`)).join(\"\")\n}\n\ninterface DateParts {\n year: string | null\n month: string | null\n day: string | null\n}\n\ntype DatePart = keyof DateParts\n\nfunction extract(pattern: string | RegExp, str: string) {\n const matches = str.match(pattern)\n return pattern\n .toString()\n .match(/<(.+?)>/g)\n ?.map((group) => {\n const groupMatches = group.match(/<(.+)>/)\n if (!groupMatches || groupMatches.length <= 0) {\n return null\n }\n return group.match(/<(.+)>/)?.[1]\n })\n .reduce((acc, curr, index) => {\n if (!curr) return acc\n if (matches && matches.length > index) {\n acc[curr as DatePart] = matches[index + 1]\n } else {\n acc[curr as DatePart] = null\n }\n return acc\n }, {} as DateParts)\n}\n","const FUTURE_YEAR_COERCION = 10\n\nexport function normalizeYear(year: string | null | undefined) {\n if (!year) return\n\n if (year.length === 3) {\n return year.padEnd(4, \"0\")\n }\n\n if (year.length === 2) {\n const currentYear = new Date().getFullYear()\n const currentCentury = Math.floor(currentYear / 100) * 100\n const twoDigitYear = parseInt(year.slice(-2), 10)\n\n const fullYear = currentCentury + twoDigitYear\n return fullYear > currentYear + FUTURE_YEAR_COERCION ? (fullYear - 100).toString() : fullYear.toString()\n }\n\n return year\n}\n","import {\n endOfMonth,\n endOfWeek,\n endOfYear,\n now,\n startOfMonth,\n startOfWeek,\n startOfYear,\n type DateValue,\n} from \"@internationalized/date\"\n\nexport type DateRangePreset =\n | \"thisWeek\"\n | \"lastWeek\"\n | \"thisMonth\"\n | \"lastMonth\"\n | \"thisQuarter\"\n | \"lastQuarter\"\n | \"thisYear\"\n | \"lastYear\"\n | \"last3Days\"\n | \"last7Days\"\n | \"last14Days\"\n | \"last30Days\"\n | \"last90Days\"\n\nexport function getDateRangePreset(preset: DateRangePreset, locale: string, timeZone: string): [DateValue, DateValue] {\n const today = now(timeZone)\n\n switch (preset) {\n case \"thisWeek\":\n return [startOfWeek(today, locale), endOfWeek(today, locale)]\n case \"thisMonth\":\n return [startOfMonth(today), today]\n case \"thisQuarter\":\n return [startOfMonth(today).add({ months: -today.month % 3 }), today]\n case \"thisYear\":\n return [startOfYear(today), today]\n case \"last3Days\":\n return [today.add({ days: -2 }), today]\n case \"last7Days\":\n return [today.add({ days: -6 }), today]\n case \"last14Days\":\n return [today.add({ days: -13 }), today]\n case \"last30Days\":\n return [today.add({ days: -29 }), today]\n case \"last90Days\":\n return [today.add({ days: -89 }), today]\n case \"lastMonth\":\n return [startOfMonth(today.add({ months: -1 })), endOfMonth(today.add({ months: -1 }))]\n case \"lastQuarter\":\n return [\n startOfMonth(today.add({ months: (-today.month % 3) - 3 })),\n endOfMonth(today.add({ months: (-today.month % 3) - 1 })),\n ]\n case \"lastWeek\":\n return [startOfWeek(today, locale).add({ weeks: -1 }), endOfWeek(today, locale).add({ weeks: -1 })]\n case \"lastYear\":\n return [startOfYear(today.add({ years: -1 })), endOfYear(today.add({ years: -1 }))]\n default:\n throw new Error(`Invalid date range preset: ${preset}`)\n }\n}\n"],"mappings":"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","names":["isSameDay","isSameDay","start","end","isSameDay","startOfMonth","today","toCalendarDate","DateFormatter","toCalendarDate","today","DateFormatter","isSameDay","startOfMonth","isSameDay","getDayOfWeek","startOfMonth","startOfWeek","isSameDay","getDayOfWeek","startOfMonth","DateFormatter","toCalendarDateTime","today","today","toCalendarDateTime","isDateUnavailable","endOfMonth","startOfMonth","startOfWeek","startOfWeek","startOfMonth","endOfMonth","DateFormatter","date","DateFormatter","endOfMonth","endOfWeek","startOfMonth","startOfWeek","startOfYear","today"]}
|
package/package.json
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const FUTURE_YEAR_COERCION = 10
|
|
2
|
+
|
|
3
|
+
export function normalizeYear(year: string | null | undefined) {
|
|
4
|
+
if (!year) return
|
|
5
|
+
|
|
6
|
+
if (year.length === 3) {
|
|
7
|
+
return year.padEnd(4, "0")
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (year.length === 2) {
|
|
11
|
+
const currentYear = new Date().getFullYear()
|
|
12
|
+
const currentCentury = Math.floor(currentYear / 100) * 100
|
|
13
|
+
const twoDigitYear = parseInt(year.slice(-2), 10)
|
|
14
|
+
|
|
15
|
+
const fullYear = currentCentury + twoDigitYear
|
|
16
|
+
return fullYear > currentYear + FUTURE_YEAR_COERCION ? (fullYear - 100).toString() : fullYear.toString()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return year
|
|
20
|
+
}
|
package/src/parse-date.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CalendarDate, DateFormatter, type DateValue } from "@internationalized/date"
|
|
2
|
+
import { normalizeYear } from "./normalize-year"
|
|
2
3
|
|
|
3
4
|
const isValidYear = (year: string | null | undefined): year is string => year != null && year.length === 4
|
|
4
5
|
const isValidMonth = (month: string | null | undefined): month is string => month != null && parseFloat(month) <= 12
|
|
@@ -18,6 +19,10 @@ export function parseDateString(date: string, locale: string, timeZone: string):
|
|
|
18
19
|
day ||= curr.getDate().toString()
|
|
19
20
|
}
|
|
20
21
|
|
|
22
|
+
if (!isValidYear(year)) {
|
|
23
|
+
year = normalizeYear(year)
|
|
24
|
+
}
|
|
25
|
+
|
|
21
26
|
if (isValidYear(year) && isValidMonth(month) && isValidDay(day)) {
|
|
22
27
|
return new CalendarDate(+year, +month, +day)
|
|
23
28
|
}
|