Inert and clearly seen (never faded to invisible). The trigger is non-interactive.
Range mode (range) swaps value/onChange for value: { start: Date | null; end: Date | null }
and a matching onChange; the two endpoints get the accent fill and the days between get the
in-range tint. (The former standalone DateRangePicker was merged into this range mode;
recover its preset-rail / dual-month demo from git history if that richer surface is revived.)
Parameter
Type
Default
Description
state *
DatePickerState
n/a
From rememberDatePickerState(...). Holds selectedDateMillis + the displayed month.
initialSelectedDateMillis
Long?
null
Pre-selected day (UTC midnight millis). Passed to rememberDatePickerState.
selectableDates
SelectableDates
all dates
Gates min/max and per-day enablement (isSelectableDate / isSelectableYear).
title
(@Composable -> Unit)?
default
Header slot above the grid. Pass null to drop the supporting headline.
headline
(@Composable -> Unit)?
default
The large selected-date readout under the title.
showModeToggle
Boolean
true
Shows the calendar/text-input toggle in the header.
colors
DatePickerColors
NockerlTheme
Selection fill, today marker, and headers, bound to the cyan accent tokens.
SwiftUI exposes the calendar as the standard DatePicker with the .graphical
style. State is the bound selection; bounds come from the in: range. There is
no separate range component; model a range as two DatePickers.
Style
Type
Default
Description
selection *
Binding<Date>
n/a
Two-way bound selected date. Binding<Date?> via the optional initializer for an empty state.
in
ClosedRange / PartialRangeFrom<Date>
n/a
Selectable bounds, e.g. Date()... (no past) or start...end (min…max).
displayedComponents
DatePickerComponents
.date
Use .date for the calendar grid (omit .hourAndMinute, which is the time picker).
.datePickerStyle
DatePickerStyle
.automatic
Set to .graphical for the month-grid calendar shown here.
.tint
Color
accentColor
Selection-fill color. Set to NockerlTheme.accent (brand cyan).
Cross-platform drift (tracked for reconciliation)
No shipped custom calendar. Neither Android nor Voice draws its own month grid.
Android stores dueDate as an ISO string and only formats it; Voice formats a chart
axis. Kotlin/Swift above document the stock Material 3 / SwiftUI pickers; the web
island is designed originally from the laws (recessed field-trigger, lifted calendar card,
cyan selected fill, today ring, in-range tint).
Range: web ships range as a mode of DatePicker (the standalone DateRangePicker was
merged in); SwiftUI has no range picker (model it as two DatePickers); Material 3 has
DateRangePicker but the apps don’t use it yet.
Week start(resolved): weekStartsOndefaults to the
device locale, with an explicit prop override. The Nockerl web demo (Monday-first) and the
stock pickers converge on that shared default + prop.