Examples use the React Native
Calendar; most props are shared with the dom renderer, and the
dom vs native comparison lists what differs per renderer.mode="week", day, 3days, and custom all render the time grid: one
column per day, hours down the side, events as positioned boxes, and an all-day
lane on top. week pages by the calendar week (set weekStartsOn: 0 = Sunday,
1 = Monday, and so on); day and 3days page by their column count; custom renders any slice you
choose.
The hour axis
minHour/maxHour— clamp the visible window (e.g. 7–20) instead of the full day.hourHeight— initial pixels per hour.- Zooming rescales it between
minHourHeightandmaxHourHeight: pinch on native, Ctrl/⌘ + wheel on the web. timeslots— sub-hour divider lines per hour (e.g.2for half-hours).ampm— 12-hour labels;hourComponentreplaces the label entirely.hideHours— collapse the hour gutter (the grid lines stay).showWeekNumber/weekNumberPrefix— ISO week number in the header gutter.hiddenDays— weekdays (0=Sunday…6=Saturday) dropped from the view, e.g.[0, 6]for a Monday–Friday business week. Count-based views keep their column count by skipping hidden days.
The all-day lane
All-day events (flaggedallDay, or spanning midnight-to-midnight) leave the
timed columns and stack in a lane above the grid. Turn it off with
showAllDayEventCell={false}.
Now line and business hours
The red current-time line follows the wall clock (showNowIndicator, on by
default). businessHours shades the closed hours per day; return null for a
fully closed day (see Theming for the shade colour).
To put your own content in the closed region (a label, an icon, a striped
pattern), add renderBusinessHours. The grid keeps positioning each band and
calls you with { date, start, end } (fractional hours, clamped to the visible
window); the themed tint is dropped so your output owns the look. The band is
decorative: it stays non-interactive and hidden from assistive tech, so return
visuals, not buttons or announced text:
Interaction
Tap handlers:onPressCell / onLongPressCell (empty grid space),
onPressEvent / onLongPressEvent, and onPressDateHeader (the day-column
headers). Drag-to-move, resize, and drag-to-create are covered in
Dragging & creating; keyboard and screen-reader support in
Accessibility.
Style parts of the grid with per-slot classes, or recolour it
via the theme.
Custom header (React Native)
ThreeCalendar props customize the area above the grid; all are native-only
(the dom renderer styles its header through the header / columnHeader*
slots instead).
renderTimeGridHeader={(days: Date[]) => ReactNode}replaces the built-in day-header row: the week-number gutter and the tappable weekday/date buttons disappear, and your element renders full-width in their place.daysis the visible page’s dates in column order. The all-day lane and the grid itself stay. To line your columns up with the grid’s, leave a leading spacer as wide as the hour gutter (hourColumnWidth, default 56, or 0 withhideHours).headerComponent={<YourToolbar />}inserts an element, unchanged, between the day-header row and the grid. It takes no arguments and replaces nothing; the built-in header stays above it, and it doesn’t scroll with the hours. Use it for a filter row, an avatar strip, or your own toolbar.renderHeaderForMonthView={(weekDays: Date[]) => ReactNode}is the month-grid equivalent ofrenderTimeGridHeader: it replaces the weekday-label header; returnnullto hide it.