Package-level declarations

Types

Link copied to clipboard

Defaults for Agenda.

Link copied to clipboard

State holder for Agenda.

Link copied to clipboard
class AgendaStrings(val todayPrefix: String, val allDayLabel: String, val noEventsLabel: String)

Localized strings for Agenda. AgendaDefaults.strings resolves them from the current locale's resources; callers can override any of them.

Link copied to clipboard
class CalendarDayColors(val containerColor: Color, val contentColor: Color, val todayContentColor: Color, val todayIndicatorColor: Color, val selectedContainerColor: Color, val selectedContentColor: Color, val inRangeContainerColor: Color, val inRangeContentColor: Color, val outDateContentColor: Color, val unavailableContainerColor: Color, val unavailableContentColor: Color, val labelColor: Color, val holidayLabelColor: Color = labelColor, val focusedBorderColor: Color = todayIndicatorColor, val hoverContainerColor: Color = contentColor.copy(alpha = 0.08f))

Colors used by DefaultDay.

Link copied to clipboard
class CalendarDayShapes(val dayShape: Shape, val selectedShape: Shape, val inRangeShape: Shape, val todayIndicator: TodayIndicator, val focusedBorderWidth: Dp = 2.dp)

Shapes and today-marker style used by DefaultDay.

Link copied to clipboard
class CalendarDayStrings(val rangeStart: String, val rangeEnd: String, val inRange: String, val today: String, val unavailable: String)

State descriptions DefaultDay reports to accessibility services (e.g. TalkBack announces "July 9, 2026, Range start, Today"). Applicable states are joined with ", ".

Link copied to clipboard
Link copied to clipboard

How dense a DefaultDay cell is laid out when rendered with a CalendarStyle.

Link copied to clipboard

Snapshot-state wrapper around the core SelectionEngine.

Link copied to clipboard
Link copied to clipboard
class CalendarStyle(val colors: CalendarDayColors, val shapes: CalendarDayShapes, val density: CalendarDensity = CalendarDensity.Comfortable, val cellBorderWidth: Dp = 0.dp, val cellBorderColor: Color = Color.Transparent, val selectedElevation: Dp = 0.dp)

A coordinated look for DefaultDay: colors, shapes and density plus an optional cell border and selected-day elevation.

Link copied to clipboard
Link copied to clipboard

Defaults for the date picker dialogs.

Link copied to clipboard

Which face of a picker dialog is showing.

Link copied to clipboard
class DatePickerStrings(val title: String, val rangeTitle: String, val headlinePlaceholder: String, val rangeStartPlaceholder: String, val rangeEndPlaceholder: String, val inputLabel: String, val rangeStartInputLabel: String, val rangeEndInputLabel: String, val invalidFormatError: String, val outOfRangeError: String, val disabledDateError: String, val invalidRangeError: String, val switchToInputDescription: String, val switchToPickerDescription: String, val previousMonthDescription: String, val nextMonthDescription: String, val closeDescription: String)

Strings for the date picker dialogs. DatePickerDefaults.strings resolves them from the current locale's resources; callers can override any of them.

Link copied to clipboard
class DateRangePreset(val label: String, val range: ClosedRange<LocalDate>)

A quick-pick chip for OrreryDateRangePickerDialog: tapping it selects range (validated like taps, so it is ignored when it breaks the state's bounds, minDays/maxDays or disabled dates). Build the standard set with DatePickerDefaults.rangePresets.

Link copied to clipboard
Link copied to clipboard
class DateTimePickerStrings(val title: String, val next: String, val back: String, val timeTitle: String, val switchToClock: String, val switchToKeyboard: String)

Strings for OrreryDateTimePickerDialog's two steps and buttons. DatePickerDefaults.dateTimeStrings resolves them from the current locale's resources; callers can override any of them.

Link copied to clipboard
fun interface DayDecorator

Custom drawing stacked into DefaultDay's cell. Implementations draw with plain DrawScope commands — no extra composables per cell. layer picks whether drawing happens behind the day number (the default) or over it (e.g. strikethrough). Within a layer, decorators draw in list order.

Link copied to clipboard

Prebuilt DayDecorators. All are data-driven via per-date lookups returning null/empty/false for undecorated days. Factories reading Material theme defaults are @Composable — call them in composition (once, outside dayContent, ideally remembered) and pass the resulting list to DefaultDay.

Link copied to clipboard

Draw layer for a DayDecorator: behind or over the day content.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
class HeatmapStrings(val legendLess: String, val legendMore: String, val dayDescription: String, val dayDescriptionEmpty: String, val summaryActiveDays: String, val summaryStreak: String)

Strings for the heatmap composables. HeatmapDefaults.strings resolves them from the current locale's resources; callers can override any of them. The day-description templates receive the formatted date, the level, and the max level in that order.

Link copied to clipboard
class MonthPickerStrings(val title: String, val headlinePlaceholder: String)

Strings for OrreryMonthPickerDialog. DatePickerDefaults.monthPickerStrings resolves them from the current locale's resources; callers can override any of them.

Link copied to clipboard

State for OrreryDatePickerDialog: the selected date, the display mode, and the visible month. Writes to selectedDate are validated like clicks (bounds and disabled dates); invalid writes are ignored.

Link copied to clipboard

State for OrreryDateRangePickerDialog: the selected range, the display mode, and the visible month. Writes to setSelection are validated like clicks (bounds, disabled dates, and range length); an end before the start is dropped, other invalid writes are ignored.

Link copied to clipboard

State for OrreryDateTimePickerDialog: the date (through dateState, with its bounds and disabled dates), the time of day and the visible step. Writes outside 0..23 to hour or 0..59 to minute are ignored. selectedDateTime is a LocalDateTime; attach a TimeZone yourself.

Link copied to clipboard

State for OrreryMonthPickerDialog: the selected month within range. selectedMonth is null until the user (or select) picks one; months outside range are ignored.

Link copied to clipboard
class ScheduleColors(val gridLineColor: Color, val halfHourLineColor: Color, val hourLabelColor: Color, val headerContentColor: Color, val todayHeaderColor: Color, val nowIndicatorColor: Color, val defaultEventContainerColor: Color, val defaultEventContentColor: Color, val defaultEventAccentColor: Color)

Colors used by DaySchedule, WeekSchedule and the ScheduleDefaults slots.

Link copied to clipboard

Defaults for DaySchedule and WeekSchedule.

Link copied to clipboard
class ScheduleDimensions(val timeGutterWidth: Dp, val tileCornerRadius: Dp, val tileAccentBarWidth: Dp, val tileHorizontalGap: Dp, val tileVerticalGap: Dp, val nowLineStrokeWidth: Dp, val nowDotRadius: Dp, val allDayChipHeight: Dp, val maxVisibleAllDayRows: Int)

Sizes used by DaySchedule, WeekSchedule and the ScheduleDefaults slots.

Link copied to clipboard

State holder for DaySchedule and WeekSchedule: the horizontally paged date window, the shared vertical scroll of the 24-hour grid, and the zoomable hourHeight.

Link copied to clipboard
class ScheduleStrings(val allDayLabel: String, val nowLabel: String)

Localized strings for DaySchedule and WeekSchedule. ScheduleDefaults.strings resolves them from the current locale's resources.

Link copied to clipboard
sealed interface TodayIndicator

How today's date is marked when it is not selected.

Link copied to clipboard

State holder for WeekCalendar.

Link copied to clipboard

State holder for YearCalendar.

Functions

Link copied to clipboard
fun <T> Agenda(events: (LocalDate) -> List<CalendarEvent<T>>, state: AgendaState = rememberAgendaState(), modifier: Modifier = Modifier, today: LocalDate = currentDate(), showEmptyDays: Boolean = false, stickyDayHeaders: Boolean = true, onEventClick: (CalendarEvent<T>) -> Unit? = null, strings: AgendaStrings = AgendaDefaults.strings(), dayHeader: @Composable (LocalDate, Boolean) -> Unit = { date, isToday -> AgendaDefaults.DayHeader(date = date, isToday = isToday, strings = strings) }, eventContent: @Composable (CalendarEvent<T>) -> Unit = { event -> AgendaDefaults.EventRow( event = event, onClick = onEventClick?.let { cb -> { cb(event) } }, strings = strings, ) }, emptyDayContent: @Composable (LocalDate) -> Unit = { AgendaDefaults.EmptyDay(strings = strings) }, emptyRangeContent: @Composable () -> Unit = { AgendaDefaults.EmptyRange(strings = strings) })

Vertically scrolling chronological agenda list of CalendarEvents grouped by date across state's range.

Link copied to clipboard
fun CalendarNavHeader(state: CalendarState, modifier: Modifier = Modifier, onTitleClick: () -> Unit? = null, previousMonthContentDescription: String = orreryString(OrreryString.PreviousMonth), nextMonthContentDescription: String = orreryString(OrreryString.NextMonth), showTodayButton: Boolean = false, today: YearMonth = currentYearMonth(), todayLabel: String = orreryString(OrreryString.Today), title: @Composable (YearMonth) -> Unit = { month -> NavHeaderTitle(month, showDropdown = onTitleClick != null) })

Month navigation header: previous/next buttons around an animated month/year title. Place it above a HorizontalCalendar sharing the same CalendarState; buttons disable at the state's month range bounds. When onTitleClick is set the title becomes clickable and shows a dropdown affordance — the hook for hosting MonthYearPicker.

Link copied to clipboard
fun CollapsibleCalendarScaffold(calendarState: CalendarState, weekState: WeekCalendarState, modifier: Modifier = Modifier, state: CollapsibleCalendarState = rememberCollapsibleCalendarState(), dayHeight: Dp = 48.dp, gesturesEnabled: Boolean = true, weekHeader: @Composable ColumnScope.(List<DayOfWeek>) -> Unit? = { CalendarDefaults.WeekHeader(it) }, dayContent: @Composable BoxScope.(CalendarDay) -> Unit, content: @Composable () -> Unit)

Replaces the original CalendarLayout: a month calendar that collapses into a week row as the content below is scrolled up, and expands back when the content is scrolled down at its top. Programmatic control via CollapsibleCalendarState.expand/CollapsibleCalendarState.collapse.

Link copied to clipboard
expect fun currentDate(): LocalDate

Today in the system time zone.

actual fun currentDate(): LocalDate

Today in the system time zone.

actual fun currentDate(): LocalDate

Today in the system time zone.

actual fun currentDate(): LocalDate

Today in the system time zone.

Link copied to clipboard
expect fun currentYearMonth(): YearMonth

The month containing currentDate.

actual fun currentYearMonth(): YearMonth

The month containing currentDate.

actual fun currentYearMonth(): YearMonth

The month containing currentDate.

actual fun currentYearMonth(): YearMonth

The month containing currentDate.

Link copied to clipboard
fun <T> DaySchedule(events: (LocalDate) -> List<CalendarEvent<T>>, modifier: Modifier = Modifier, state: ScheduleState = rememberScheduleState(), today: LocalDate = currentDate(), currentTime: LocalTime? = null, userScrollEnabled: Boolean = true, zoomGesturesEnabled: Boolean = true, showHalfHourLines: Boolean = false, minEventDurationMinutes: Int = 15, colors: ScheduleColors = ScheduleDefaults.colors(), dimensions: ScheduleDimensions = ScheduleDefaults.dimensions(), strings: ScheduleStrings = ScheduleDefaults.strings(), onEventClick: (CalendarEvent<T>) -> Unit? = null, onEmptySlotClick: (LocalDate, LocalTime) -> Unit? = null, dayHeader: @Composable (LocalDate, Boolean) -> Unit? = { date, isToday -> ScheduleDefaults.DayHeader(date, isToday, colors) }, allDayEventContent: @Composable (CalendarEvent<T>) -> Unit = { event -> ScheduleDefaults.AllDayEventChip(event, colors, dimensions, onClick = onEventClick?.let { cb -> { cb(event) } }) }, hourLabel: @Composable (Int) -> Unit = { hour -> ScheduleDefaults.HourLabel(hour, colors) }, nowIndicator: @Composable () -> Unit = { ScheduleDefaults.NowIndicator(colors, dimensions, contentDescription = strings.nowLabel) }, eventContent: @Composable BoxScope.(PositionedEvent<T>) -> Unit = { positioned -> ScheduleDefaults.EventTile( positioned = positioned, colors = colors, dimensions = dimensions, onClick = onEventClick?.let { cb -> { cb(positioned.event) } }, ) })

Horizontally paged single-day 24-hour schedule view with an optional all-day banner. Swiping moves one day; state holds the visible date, the shared vertical scroll and the zoomable hour height.

Link copied to clipboard
fun DefaultDay(day: CalendarDay, style: CalendarStyle, modifier: Modifier = Modifier, selectionState: CalendarSelectionState? = null, today: LocalDate = currentDate(), info: DayInfo? = null, enabled: Boolean = true, showOutDates: Boolean = true, animateSelection: Boolean = true, hapticsEnabled: Boolean = true, decorators: List<DayDecorator> = emptyList(), strings: CalendarDayStrings = CalendarDefaults.dayStrings(), onClick: (CalendarDay) -> Unit? = null)

DefaultDay rendered with a CalendarStyle: CalendarStyle.colors, CalendarStyle.shapes and CalendarStyle.selectedElevation replace the separate parameters of the other overload.

fun DefaultDay(day: CalendarDay, modifier: Modifier = Modifier, selectionState: CalendarSelectionState? = null, today: LocalDate = currentDate(), colors: CalendarDayColors = CalendarDefaults.dayColors(), shapes: CalendarDayShapes = CalendarDefaults.dayShapes(), info: DayInfo? = null, enabled: Boolean = true, showOutDates: Boolean = true, animateSelection: Boolean = true, selectedElevation: Dp = 0.dp, hapticsEnabled: Boolean = true, decorators: List<DayDecorator> = emptyList(), strings: CalendarDayStrings = CalendarDefaults.dayStrings(), onClick: (CalendarDay) -> Unit? = null)

Batteries-included day cell: selection fill, in-range band, today indicator, optional secondary label, and stackable decorators for custom drawing (event dots, progress, markers, heatmaps).

Link copied to clipboard
fun ERROR CLASS: Symbol not found for YearMonth.displayName(locale: Locale = Locale.getDefault()): String

Localized month + year title, e.g. "July 2026".

fun ERROR CLASS: Symbol not found for DayOfWeek.displayName(narrow: Boolean = false, locale: Locale = Locale.getDefault()): String

Localized weekday name, short ("Mon") or narrow ("M").

fun ERROR CLASS: Symbol not found for Month.displayName(short: Boolean = false, locale: Locale = Locale.getDefault()): String

Localized standalone month name, e.g. "July" or "Jul".

Link copied to clipboard
fun firstDayOfWeekFromLocale(locale: Locale = Locale.getDefault()): ERROR CLASS: Symbol not found for DayOfWeek

Locale-preferred first day of week (e.g. Sunday for en-US, Monday for de-DE).

Link copied to clipboard
fun HeatmapCalendar(intensity: (LocalDate) -> Float?, state: HeatmapCalendarState = rememberHeatmapCalendarState(), modifier: Modifier = Modifier, onDayClick: (LocalDate) -> Unit? = null, colorScale: (Float) -> Color = HeatmapDefaults.colorScale(), emptyCellColor: Color = HeatmapDefaults.emptyCellColor(), cellSize: Dp = 12.dp, cellSpacing: Dp = 2.dp, cellShape: Shape = RoundedCornerShape(2.dp), showMonthLabels: Boolean = true, showWeekdayLabels: Boolean = true, showLegend: Boolean = true, summary: @Composable (HeatmapSummary) -> Unit? = { HeatmapDefaults.Summary(it) }, strings: HeatmapStrings = HeatmapDefaults.strings())

GitHub-style contribution graph: one column per week, seven tile rows, horizontally scrollable across the state's date range. intensity returns a 0..1 heat value per day, or null for no data. Cells are clickable only when onDayClick is set; a clickable cell draws a 2.dp onSurface focus ring just outside its tile while it has keyboard / D-pad focus. Accessibility descriptions bucket intensity into five levels regardless of colorScale.

Link copied to clipboard
fun HeatmapMonth(yearMonth: YearMonth, intensity: (LocalDate) -> Float?, modifier: Modifier = Modifier, onDayClick: (LocalDate) -> Unit? = null, colorScale: (Float) -> Color = HeatmapDefaults.colorScale(), emptyCellColor: Color = HeatmapDefaults.emptyCellColor(), cellShape: Shape = RoundedCornerShape(4.dp), showDayNumbers: Boolean = false, showWeekdayHeader: Boolean = true, firstDayOfWeek: DayOfWeek = PlatformDateFormat.firstDayOfWeek(), strings: HeatmapStrings = HeatmapDefaults.strings())

Static month grid of heat tiles over monthGrid. Cells divide the available width equally; leading/trailing out-dates render blank. Accessibility descriptions bucket intensity into five levels regardless of colorScale.

Link copied to clipboard
fun HorizontalCalendar(state: CalendarState = rememberCalendarState(), modifier: Modifier = Modifier, userScrollEnabled: Boolean = true, keyboardNavigation: Boolean = true, showWeekNumbers: Boolean = false, weekNumber: @Composable (CalendarWeek) -> Unit = { CalendarDefaults.WeekNumber(it) }, animateHeight: Boolean = true, dragSelection: CalendarSelectionState? = null, hapticsEnabled: Boolean = true, weekHeader: @Composable ColumnScope.(List<DayOfWeek>) -> Unit? = { CalendarDefaults.WeekHeader(it, leadingSpacer = showWeekNumbers) }, monthHeader: @Composable ColumnScope.(CalendarMonth) -> Unit? = null, dayContent: @Composable BoxScope.(CalendarDay) -> Unit)

Horizontally paged month calendar (one month per page, snap paging).

Link copied to clipboard
fun CalendarDefaults.MiniMonth(yearMonth: YearMonth, modifier: Modifier = Modifier, firstDayOfWeek: DayOfWeek = DayOfWeek.MONDAY, today: LocalDate = currentDate(), selection: Selection? = null, dayInfo: (LocalDate) -> DayInfo?? = null)

Default mini-month cell for YearCalendar. today is drawn on a filled primary circle with onPrimary text; dates in selection (the single date, multi dates, and a range from start to end) sit on a subtle primaryContainer pill; day numbers whose dayInfo reports DayInfo.isHoliday use the primary color.

Link copied to clipboard
fun MonthYearPicker(current: YearMonth, range: ClosedRange<YearMonth>, onSelect: (YearMonth) -> Unit, modifier: Modifier = Modifier)

Month/year jump picker: a year grid drilling into a 3x4 month grid; months outside range are disabled. Tapping the year grid's title zooms out to a decade grid for fast far jumps. Selecting a month fires onSelect — the host decides what to do (typically scroll a calendar and dismiss). Host it in a dialog, dropdown, or swap it with the calendar in-place. For calendars with unbounded state, pass a finite window here — e.g. a hundred years around currentYearMonth.

Link copied to clipboard
fun OrreryDatePickerDialog(onDismissRequest: () -> Unit, confirmButton: @Composable () -> Unit, state: OrreryDatePickerState = rememberOrreryDatePickerState(), modifier: Modifier = Modifier, dismissButton: @Composable () -> Unit? = null, colors: CalendarDayColors = CalendarDefaults.dayColors(), shapes: CalendarDayShapes = CalendarDefaults.dayShapes(), today: LocalDate = currentDate(), strings: DatePickerStrings = DatePickerDefaults.strings())

Material-3-shaped date picker dialog over Orrery's calendar. Selection lives in state; read state.selectedDate in your confirm button. The headline toggles between calendar picking and locale-formatted text input. Strings localize via strings.

Link copied to clipboard
fun OrreryDateRangePickerDialog(onDismissRequest: () -> Unit, confirmButton: @Composable () -> Unit, state: OrreryDateRangePickerState = rememberOrreryDateRangePickerState(), modifier: Modifier = Modifier, colors: CalendarDayColors = CalendarDefaults.dayColors(), shapes: CalendarDayShapes = CalendarDefaults.dayShapes(), today: LocalDate = currentDate(), strings: DatePickerStrings = DatePickerDefaults.strings(), presets: List<DateRangePreset> = emptyList())

Full-screen Material-3-shaped date range picker dialog over Orrery's calendar. Selection lives in state; read state.selectedStartDate / state.selectedEndDate in your confirm button. The headline toggles between calendar picking and locale-formatted text input for both endpoints. There is no dismiss-button slot — the close glyph in the top bar dismisses. Strings localize via strings.

Link copied to clipboard
fun OrreryDateTimePickerDialog(onDismissRequest: () -> Unit, confirmButton: @Composable () -> Unit, state: OrreryDateTimePickerState = rememberOrreryDateTimePickerState(), modifier: Modifier = Modifier, dismissButton: @Composable () -> Unit? = null, colors: CalendarDayColors = CalendarDefaults.dayColors(), shapes: CalendarDayShapes = CalendarDefaults.dayShapes(), today: LocalDate = currentDate(), strings: DateTimePickerStrings = DatePickerDefaults.dateTimeStrings(), dateStrings: DatePickerStrings = DatePickerDefaults.strings())

Material-3-shaped dialog that picks a date, then a time of day, in one surface: the Date step is the OrreryDatePickerDialog body (calendar or text input); Next opens the Time step, a Material 3 TimePicker dial with a toggle to TimeInput. The headline shows both parts, with the active step's part on a secondaryContainer pill; tap either to jump to its step. Steps slide and fade into each other, and on short windows the body scrolls so the button row stays visible. Read state.selectedDateTime in confirmButton, which shows on the Time step. dateStrings localizes the date step.

Link copied to clipboard
fun OrreryMonthPickerDialog(onDismissRequest: () -> Unit, confirmButton: @Composable () -> Unit, state: OrreryMonthPickerState = rememberOrreryMonthPickerState(), modifier: Modifier = Modifier, dismissButton: @Composable () -> Unit? = null, today: LocalDate = currentDate(), strings: MonthPickerStrings = DatePickerDefaults.monthPickerStrings())

Material-3-shaped dialog for picking a month and year without a day, for example a card expiry date. It opens on the month grid of the selected month's year (or today's), clamped to the state's range; tapping the year zooms out to the year grid, then to decades. Tapping a month selects it and keeps the dialog open; read state.selectedMonth in your confirm button.

Link copied to clipboard
fun rememberAgendaState(startDate: LocalDate = currentDate().minus(365, DateTimeUnit.DAY), endDate: LocalDate = currentDate().plus(365, DateTimeUnit.DAY), initialVisibleDate: LocalDate = currentDate()): AgendaState

Remembers saveable AgendaState. Defaults to a 2-year window around currentDate, initially positioned at currentDate.

Link copied to clipboard
fun rememberAnimatedDayValues(values: Map<LocalDate, Float>, animationSpec: AnimationSpec<Float> = tween(durationMillis = 300)): (LocalDate) -> Float?

Animates per-day values toward their targets and returns a lookup for data-driven decorators (progressRing, progressBar, heatmap). New dates animate from 0; changed dates ease to the new target; removed dates disappear immediately. The lookup reads snapshot state, so decorators redraw automatically while animating.

Link copied to clipboard
fun rememberCalendarSelectionState(mode: SelectionMode = SelectionMode.Single(), initialSelection: Selection = Selection.Empty, bounds: ClosedRange<LocalDate>? = null, disabled: DisabledDates = DisabledDates.None, onEvent: (SelectionEvent) -> Unit = {}): CalendarSelectionState

Creates and remembers a CalendarSelectionState that survives configuration changes; changing mode or bounds resets it.

Link copied to clipboard
fun rememberCalendarState(startMonth: YearMonth? = null, endMonth: YearMonth? = null, firstVisibleMonth: YearMonth = currentYearMonth(), firstDayOfWeek: DayOfWeek = PlatformDateFormat.firstDayOfWeek(), outDateStyle: OutDateStyle = OutDateStyle.EndOfRow): CalendarState

Remembers saveable CalendarState. Null startMonth/endMonth (the defaults) leave that side unbounded — the calendar scrolls indefinitely.

Link copied to clipboard
fun rememberHeatmapCalendarState(startDate: LocalDate = currentDate().minus(364, DateTimeUnit.DAY), endDate: LocalDate = currentDate(), firstVisibleDate: LocalDate = endDate, firstDayOfWeek: DayOfWeek = PlatformDateFormat.firstDayOfWeek()): HeatmapCalendarState

Remembers saveable HeatmapCalendarState. Defaults to the trailing 365 days ending today, scrolled to the range end (most recent data first).

Link copied to clipboard
fun rememberOrreryDatePickerState(initialDate: LocalDate? = null, initialDisplayedMonth: YearMonth = initialDate?.let { YearMonth(it.year, it.month) } ?: currentYearMonth(), yearRange: IntRange = 1971..2055, initialDisplayMode: DatePickerDisplayMode = DatePickerDisplayMode.Picker, disabledDates: DisabledDates = DisabledDates.None, firstDayOfWeek: DayOfWeek = PlatformDateFormat.firstDayOfWeek()): OrreryDatePickerState
Link copied to clipboard
fun rememberOrreryDateRangePickerState(initialStartDate: LocalDate? = null, initialEndDate: LocalDate? = null, initialDisplayedMonth: YearMonth = initialStartDate?.let { YearMonth(it.year, it.month) } ?: currentYearMonth(), yearRange: IntRange = 1971..2055, initialDisplayMode: DatePickerDisplayMode = DatePickerDisplayMode.Picker, minDays: Int? = null, maxDays: Int? = null, disabledDates: DisabledDates = DisabledDates.None, firstDayOfWeek: DayOfWeek = PlatformDateFormat.firstDayOfWeek()): OrreryDateRangePickerState
Link copied to clipboard
fun rememberOrreryDateTimePickerState(initialDateTime: LocalDateTime? = null, bounds: ClosedRange<LocalDate>? = null, disabled: DisabledDates = DisabledDates.None, is24Hour: Boolean = systemUses24HourClock()): OrreryDateTimePickerState

Remembers saveable OrreryDateTimePickerState for OrreryDateTimePickerDialog. bounds and disabled restrict the date only. is24Hour defaults to the device's clock: the "Use 24-hour format" setting on Android, the current locale's clock on Desktop, iOS and Web.

Link copied to clipboard
fun rememberOrreryMonthPickerState(initialSelectedMonth: YearMonth? = null, range: ClosedRange<YearMonth> = DatePickerDefaults.monthRange()): OrreryMonthPickerState

Remembers saveable OrreryMonthPickerState for OrreryMonthPickerDialog. For a card-expiry field pass range = thisMonth..thisMonth.plus(20, DateTimeUnit.YEAR).

Link copied to clipboard
fun rememberScheduleState(startDate: LocalDate? = null, endDate: LocalDate? = null, firstVisibleDate: LocalDate = currentDate(), firstDayOfWeek: DayOfWeek = PlatformDateFormat.firstDayOfWeek(), initialHourHeight: Dp = 60.dp, minHourHeight: Dp = 36.dp, maxHourHeight: Dp = 160.dp, initialScrollTime: LocalTime = LocalTime(8, 0)): ScheduleState

Remembers saveable ScheduleState. Null startDate/endDate (the defaults) leave that side unbounded. The time grid initially shows initialScrollTime at the top of the viewport.

Link copied to clipboard
fun rememberWeekCalendarState(startDate: LocalDate? = null, endDate: LocalDate? = null, firstVisibleDate: LocalDate = currentDate(), firstDayOfWeek: DayOfWeek = PlatformDateFormat.firstDayOfWeek()): WeekCalendarState

Remembers saveable WeekCalendarState. Null startDate/endDate (the defaults) leave that side unbounded — the week strip scrolls indefinitely.

Link copied to clipboard
fun rememberYearCalendarState(startYear: Int = 1971, endYear: Int = 2055, firstVisibleYear: Int = currentYearMonth().year): YearCalendarState
Link copied to clipboard

Emits every selection change, deduplicated; collect outside composition.

Link copied to clipboard
fun VerticalCalendar(state: CalendarState = rememberCalendarState(), modifier: Modifier = Modifier, userScrollEnabled: Boolean = true, showWeekNumbers: Boolean = false, weekNumber: @Composable (CalendarWeek) -> Unit = { CalendarDefaults.WeekNumber(it) }, stickyMonthHeaders: Boolean = false, dragSelection: CalendarSelectionState? = null, hapticsEnabled: Boolean = true, weekHeader: @Composable ColumnScope.(List<DayOfWeek>) -> Unit? = { CalendarDefaults.WeekHeader(it, leadingSpacer = showWeekNumbers) }, monthHeader: @Composable ColumnScope.(CalendarMonth) -> Unit? = { CalendarDefaults.MonthTitle(it) }, dayContent: @Composable BoxScope.(CalendarDay) -> Unit)

Continuously scrolling vertical month list.

Link copied to clipboard
fun CalendarState.visibleMonths(): Flow<YearMonth>

Emits the first visible month, deduplicated; collect outside composition.

Link copied to clipboard

Emits the first visible week, deduplicated; collect outside composition.

Link copied to clipboard
fun WeekCalendar(state: WeekCalendarState, modifier: Modifier = Modifier, userScrollEnabled: Boolean = true, keyboardNavigation: Boolean = true, weekHeader: @Composable ColumnScope.(List<DayOfWeek>) -> Unit? = { CalendarDefaults.WeekHeader(it) }, dayContent: @Composable BoxScope.(CalendarDay) -> Unit)

Horizontally paged single-week calendar.

Link copied to clipboard
fun <T> WeekSchedule(events: (LocalDate) -> List<CalendarEvent<T>>, modifier: Modifier = Modifier, state: ScheduleState = rememberScheduleState(), daysPerPage: Int = 7, today: LocalDate = currentDate(), currentTime: LocalTime? = null, userScrollEnabled: Boolean = true, zoomGesturesEnabled: Boolean = true, showHalfHourLines: Boolean = false, minEventDurationMinutes: Int = 15, colors: ScheduleColors = ScheduleDefaults.colors(), dimensions: ScheduleDimensions = ScheduleDefaults.dimensions(), strings: ScheduleStrings = ScheduleDefaults.strings(), onEventClick: (CalendarEvent<T>) -> Unit? = null, onEmptySlotClick: (LocalDate, LocalTime) -> Unit? = null, dayHeader: @Composable (LocalDate, Boolean) -> Unit? = { date, isToday -> ScheduleDefaults.DayHeader(date, isToday, colors) }, allDayEventContent: @Composable (CalendarEvent<T>) -> Unit = { event -> ScheduleDefaults.AllDayEventChip(event, colors, dimensions, onClick = onEventClick?.let { cb -> { cb(event) } }) }, hourLabel: @Composable (Int) -> Unit = { hour -> ScheduleDefaults.HourLabel(hour, colors) }, nowIndicator: @Composable () -> Unit = { ScheduleDefaults.NowIndicator(colors, dimensions, contentDescription = strings.nowLabel) }, eventContent: @Composable BoxScope.(PositionedEvent<T>) -> Unit = { positioned -> ScheduleDefaults.EventTile( positioned = positioned, colors = colors, dimensions = dimensions, onClick = onEventClick?.let { cb -> { cb(positioned.event) } }, ) })

Horizontally paged multi-day (default 7-day week) 24-hour schedule view. Swiping moves a whole page of daysPerPage days. Seven-day pages start on ScheduleState.firstDayOfWeek; other sizes are counted from the range start. All-day events show as chips in each covered day's column.

Link copied to clipboard
fun YearCalendar(state: YearCalendarState = rememberYearCalendarState(), modifier: Modifier = Modifier, userScrollEnabled: Boolean = true, columns: Int = 3, onMonthClick: (YearMonth) -> Unit, monthContent: @Composable BoxScope.(YearMonth) -> Unit = { CalendarDefaults.MiniMonth(it) })

Year overview: one year per page, months in a columns-wide grid. A mini-month cell draws a 2.dp primary focus ring inside its bounds while it has keyboard / D-pad focus.