Skip to content
THE COMPONENT LIBRARY
Skip to content

Component reference

Scheduler

Review and create events in a weekly schedule.

Preview

Live preview

Changes apply to this preview only.

Oct 19 – 25, 2026

Use arrow keys to navigate dates and times, Home and End to reach row boundaries, Control Home and Control End for the whole grid. Enter activates a slot. F2 explores actions inside a cell; Escape returns to the cell.

Time
Mon19
Tue20
Wed21
Thu22
Fri23
Sat24
Sun25
All day
8 AM
9 AM
10 AM
11 AM
12 PM
1 PM
2 PM
3 PM
4 PM
5 PM
6 PM

Design review

Tue, Oct 20, 10:00 AM – Tue, Oct 20, 11:30 AM

Timed eventdesign-review

The event button carries its weekday, date and time range as an accessible label. Overlapping events share the day column without covering each other.

Create from a slot

Click an empty hour to receive a slot payload.

No slot selected. The handler receives the local date, the slot start and its end.

Width adapts to the available space

More examples

Different configurations and compositions using the real Pimolu API. Each preview runs independently and follows the site appearance.

A focused workday

A short agenda with one event and a compact working-hours window.

Open preview

Keyboard navigation

Tab enters one cell. Arrow keys move across days and hours; Home/End reach row edges. F2 enters cell actions and Escape returns to the cell.

Open preview

Read-only schedule

Cells remain keyboard navigable even without an add-event handler.

Open preview

Usage

Keep event ids stable and decide timezone, overlap and persistence rules in the application.

API reference

Generated from the public TypeScript declarations. Native HTML attributes are inherited where the component extends them; this reference includes Pimolu props and selected common native attributes.

PimoluSchedulerEvent

Type source
PimoluSchedulerEvent public API
NameTypeDefaultDescription
idRequiredstring—Stable identifier, also used as the React key.
titleRequiredstring—Visible event title.
startRequiredDate—Start instant. Events spanning several days are split per day.
endRequiredDate—End instant. Ignored for all-day events.
colorstring | undefined—Optional accent colour used for the event background and border.
allDayboolean | undefined—All-day events are rendered in a dedicated row above the time grid.
idRequired

string

No default extracted.

Stable identifier, also used as the React key.

titleRequired

string

No default extracted.

Visible event title.

startRequired

Date

No default extracted.

Start instant. Events spanning several days are split per day.

endRequired

Date

No default extracted.

End instant. Ignored for all-day events.

color

string | undefined

No default extracted.

Optional accent colour used for the event background and border.

allDay

boolean | undefined

No default extracted.

All-day events are rendered in a dedicated row above the time grid.

PimoluSchedulerSlot

Type source
PimoluSchedulerSlot public API
NameTypeDefaultDescription
dateRequiredDate—The clicked day, at local midnight.
startRequiredDate—Start of the slot (whole hour).
endRequiredDate—End of the slot (start + one hour).
dateRequired

Date

No default extracted.

The clicked day, at local midnight.

startRequired

Date

No default extracted.

Start of the slot (whole hour).

endRequired

Date

No default extracted.

End of the slot (start + one hour).

PimoluSchedulerProps

Type source
PimoluSchedulerProps public API
NameTypeDefaultDescription
eventsRequiredreadonly PimoluSchedulerEvent[]—Events to display. Events outside the visible days are ignored.
dateDate | undefined—Controlled anchor date. The visible week/day is derived from it.
defaultDateDate | undefinedtodayInitial anchor date when uncontrolled. Defaults to today.
onDateChange((date: Date) => void) | undefined—Called with the next anchor date after navigation, or when "Today" is pressed.
viewPimoluSchedulerView | undefined—Controlled view.
defaultViewPimoluSchedulerView | undefined"week"Initial view when uncontrolled. Defaults to "week".
onViewChange((view: PimoluSchedulerView) => void) | undefined—Called when the Week/Day toggle changes.
weekStartsOn0 | 1 | undefined0First day of the week: 0 = Sunday, 1 = Monday. Defaults to 0.
minTimenumber | undefined0First visible hour, as minutes from midnight. Defaults to 0. Values are rounded down to the previous hour.
maxTimenumber | undefined1440Last visible hour, as minutes from midnight. Defaults to 1440. Values are rounded up to the next hour.
localestring | undefined"en-US"BCP 47 locale used for all date and time labels. Defaults to "en-US".
showCurrentTimeboolean | undefinedtrueShows a line for the current time on today's column. Defaults to true.
hourHeightnumber | undefined64Height of one hour row, in pixels. Defaults to 64.
onEventClick((event: PimoluSchedulerEvent) => void) | undefined—Called when an event button is activated.
onSlotClick((slot: PimoluSchedulerSlot) => void) | undefined—Called when an empty time slot is activated.
classNamestring | undefined—Class applied to the outer scheduler.
aria-labelstring | undefined"Schedule"Accessible name of the time grid. Defaults to "Schedule".
eventsRequired

readonly PimoluSchedulerEvent[]

No default extracted.

Events to display. Events outside the visible days are ignored.

date

Date | undefined

No default extracted.

Controlled anchor date. The visible week/day is derived from it.

defaultDate

Date | undefined

Default: today

Initial anchor date when uncontrolled. Defaults to today.

onDateChange

((date: Date) => void) | undefined

No default extracted.

Called with the next anchor date after navigation, or when "Today" is pressed.

view

PimoluSchedulerView | undefined

No default extracted.

Controlled view.

defaultView

PimoluSchedulerView | undefined

Default: "week"

Initial view when uncontrolled. Defaults to "week".

onViewChange

((view: PimoluSchedulerView) => void) | undefined

No default extracted.

Called when the Week/Day toggle changes.

weekStartsOn

0 | 1 | undefined

Default: 0

First day of the week: 0 = Sunday, 1 = Monday. Defaults to 0.

minTime

number | undefined

Default: 0

First visible hour, as minutes from midnight. Defaults to 0. Values are rounded down to the previous hour.

maxTime

number | undefined

Default: 1440

Last visible hour, as minutes from midnight. Defaults to 1440. Values are rounded up to the next hour.

locale

string | undefined

Default: "en-US"

BCP 47 locale used for all date and time labels. Defaults to "en-US".

showCurrentTime

boolean | undefined

Default: true

Shows a line for the current time on today's column. Defaults to true.

hourHeight

number | undefined

Default: 64

Height of one hour row, in pixels. Defaults to 64.

onEventClick

((event: PimoluSchedulerEvent) => void) | undefined

No default extracted.

Called when an event button is activated.

onSlotClick

((slot: PimoluSchedulerSlot) => void) | undefined

No default extracted.

Called when an empty time slot is activated.

className

string | undefined

No default extracted.

Class applied to the outer scheduler.

aria-label

string | undefined

Default: "Schedule"

Accessible name of the time grid. Defaults to "Schedule".

Accessibility

  • The grid has one Tab entry. Arrows navigate dates and hours (including RTL), Home/End reach row edges, Control+Home/End reach grid edges. Enter activates a slot; F2 enters cell actions and Escape returns to the cell. Timed event buttons remain reachable separately.
  • Check event focus, date controls and keyboard alternatives to pointer-only scheduling.
Read the accessibility guide →