Jenga Date Picker
A single-date picker: a month title with previous/next buttons above a paging JengaCalendar. Every visible string comes from the caller (monthTitle, dayOfWeekLabel and the button descriptions), so it follows the app's locale.
Parameters
the selected date, or null for none.
called with a tapped date.
the title for a month (e.g. "March 2026").
the column label for a day of the week (e.g. "Mo").
accessibility label for the previous-month button.
accessibility label for the next-month button.
the Modifier for the picker.
the earliest and latest dates that can be picked; days outside it are disabled and the month buttons stop at its first and last month. With no selected date the picker opens on the month nearest today inside the range.
the calendar state; by default it spans dateRange, or ten years either side of the selected date (or today), and opens on the selected month.
whether a date can be picked.
the date marked as today.
accessibility label for a day cell; the ISO date by default.
the color set; defaults to JengaCalendarDefaults.colors.
when set, the month title becomes a button that swaps the days for a grid of years; this is its accessibility label for the shown month (e.g. "Choose year, October 2008"). Picking a year returns to the days on the same month in that year, without selecting a day.
Samples
var date by remember {
mutableStateOf<LocalDate?>(
value = null,
)
}
JengaDatePicker(
selectedDate = date,
onSelectedDateChange = { date = it },
monthTitle = { "${it.month.name} ${it.year}" },
dayOfWeekLabel = {
it.name.take(
n = 2,
)
},
previousMonthContentDescription = "Previous month",
nextMonthContentDescription = "Next month",
)