UNPKG

react-day-picker

Version:

Customizable Date Picker for React

71 lines 3.02 kB
import { DayFlag } from "../UI.js"; var FocusTargetPriority; (function (FocusTargetPriority) { FocusTargetPriority[FocusTargetPriority["Today"] = 0] = "Today"; FocusTargetPriority[FocusTargetPriority["Selected"] = 1] = "Selected"; FocusTargetPriority[FocusTargetPriority["LastFocused"] = 2] = "LastFocused"; FocusTargetPriority[FocusTargetPriority["FocusedModifier"] = 3] = "FocusedModifier"; })(FocusTargetPriority || (FocusTargetPriority = {})); /** * Determines if a day is focusable based on its modifiers. * * A day is considered focusable if it is not disabled, hidden, or outside the * displayed month. * * @param modifiers The modifiers applied to the day. * @returns `true` if the day is focusable, otherwise `false`. */ function isFocusableDay(modifiers) { return (!modifiers[DayFlag.disabled] && !modifiers[DayFlag.hidden] && !modifiers[DayFlag.outside]); } /** * Calculates the focus target day based on priority. * * This function determines the day that should receive focus in the calendar, * prioritizing days with specific modifiers (e.g., "focused", "today") or * selection states. * * @param days The array of `CalendarDay` objects to evaluate. * @param getModifiers A function to retrieve the modifiers for a given day. * @param isSelected A function to determine if a day is selected. * @param lastFocused The last focused day, if any. * @returns The `CalendarDay` that should receive focus, or `undefined` if no * focusable day is found. */ export function calculateFocusTarget(days, getModifiers, isSelected, lastFocused) { let focusTarget; let foundFocusTargetPriority = -1; for (const day of days) { const modifiers = getModifiers(day); if (isFocusableDay(modifiers)) { if (modifiers[DayFlag.focused] && foundFocusTargetPriority < FocusTargetPriority.FocusedModifier) { focusTarget = day; foundFocusTargetPriority = FocusTargetPriority.FocusedModifier; } else if (lastFocused?.isEqualTo(day) && foundFocusTargetPriority < FocusTargetPriority.LastFocused) { focusTarget = day; foundFocusTargetPriority = FocusTargetPriority.LastFocused; } else if (isSelected(day.date) && foundFocusTargetPriority < FocusTargetPriority.Selected) { focusTarget = day; foundFocusTargetPriority = FocusTargetPriority.Selected; } else if (modifiers[DayFlag.today] && foundFocusTargetPriority < FocusTargetPriority.Today) { focusTarget = day; foundFocusTargetPriority = FocusTargetPriority.Today; } } } if (!focusTarget) { // Return the first day that is focusable focusTarget = days.find((day) => isFocusableDay(getModifiers(day))); } return focusTarget; } //# sourceMappingURL=calculateFocusTarget.js.map