Package-level declarations
Types
Defaults for Agenda.
State holder for Agenda.
Localized strings for Agenda. AgendaDefaults.strings resolves them from the current locale's resources; callers can override any of them.
Colors used by DefaultDay.
Shapes and today-marker style used by DefaultDay.
State descriptions DefaultDay reports to accessibility services (e.g. TalkBack announces "July 9, 2026, Range start, Today"). Applicable states are joined with ", ".
How dense a DefaultDay cell is laid out when rendered with a CalendarStyle.
Snapshot-state wrapper around the core SelectionEngine.
State holder for HorizontalCalendar and VerticalCalendar.
A coordinated look for DefaultDay: colors, shapes and density plus an optional cell border and selected-day elevation.
Expand/collapse state for CollapsibleCalendarScaffold.
Defaults for the date picker dialogs.
Which face of a picker dialog is showing.
Strings for the date picker dialogs. DatePickerDefaults.strings resolves them from the current locale's resources; callers can override any of them.
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.
Which step of OrreryDateTimePickerDialog is showing.
Strings for OrreryDateTimePickerDialog's two steps and buttons. DatePickerDefaults.dateTimeStrings resolves them from the current locale's resources; callers can override any of them.
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.
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.
Draw layer for a DayDecorator: behind or over the day content.
State holder for HeatmapCalendar.
Defaults for HeatmapCalendar and HeatmapMonth.
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.
Strings for OrreryMonthPickerDialog. DatePickerDefaults.monthPickerStrings resolves them from the current locale's resources; callers can override any of them.
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.
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.
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.
State for OrreryMonthPickerDialog: the selected month within range. selectedMonth is null until the user (or select) picks one; months outside range are ignored.
Colors used by DaySchedule, WeekSchedule and the ScheduleDefaults slots.
Defaults for DaySchedule and WeekSchedule.
Sizes used by DaySchedule, WeekSchedule and the ScheduleDefaults slots.
State holder for DaySchedule and WeekSchedule: the horizontally paged date window, the shared vertical scroll of the 24-hour grid, and the zoomable hourHeight.
Localized strings for DaySchedule and WeekSchedule. ScheduleDefaults.strings resolves them from the current locale's resources.
How today's date is marked when it is not selected.
State holder for WeekCalendar.
State holder for YearCalendar.
Functions
Vertically scrolling chronological agenda list of CalendarEvents grouped by date across state's range.
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.
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.
Today in the system time zone.
Today in the system time zone.
Today in the system time zone.
Today in the system time zone.
The month containing currentDate.
The month containing currentDate.
The month containing currentDate.
The month containing currentDate.
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.
DefaultDay rendered with a CalendarStyle: CalendarStyle.colors, CalendarStyle.shapes and CalendarStyle.selectedElevation replace the separate parameters of the other overload.
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).
Localized month + year title, e.g. "July 2026".
Localized weekday name, short ("Mon") or narrow ("M").
Localized standalone month name, e.g. "July" or "Jul".
Locale-preferred first day of week (e.g. Sunday for en-US, Monday for de-DE).
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.
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.
Horizontally paged month calendar (one month per page, snap paging).
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.
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.
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.
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.
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.
Remembers saveable AgendaState. Defaults to a 2-year window around currentDate, initially positioned at currentDate.
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.
Creates and remembers a CalendarSelectionState that survives configuration changes; changing mode or bounds resets it.
Remembers saveable CalendarState. Null startMonth/endMonth (the defaults) leave that side unbounded — the calendar scrolls indefinitely.
Remembers saveable HeatmapCalendarState. Defaults to the trailing 365 days ending today, scrolled to the range end (most recent data first).
Remembers saveable OrreryDatePickerState for OrreryDatePickerDialog.
Remembers saveable OrreryDateRangePickerState for OrreryDateRangePickerDialog.
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.
Remembers saveable OrreryMonthPickerState for OrreryMonthPickerDialog. For a card-expiry field pass range = thisMonth..thisMonth.plus(20, DateTimeUnit.YEAR).
Remembers saveable ScheduleState. Null startDate/endDate (the defaults) leave that side unbounded. The time grid initially shows initialScrollTime at the top of the viewport.
Remembers saveable WeekCalendarState. Null startDate/endDate (the defaults) leave that side unbounded — the week strip scrolls indefinitely.
Emits every selection change, deduplicated; collect outside composition.
Continuously scrolling vertical month list.
Emits the first visible month, deduplicated; collect outside composition.
Emits the first visible week, deduplicated; collect outside composition.
Horizontally paged single-week calendar.
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.
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.