Theme studio

Design a theme, preview it live, then export it. Saved in this browser.

Quick picks #10b981
Generated scale
50100200300400500600700800900
Some text is below AA

CalendarMonthCell

  • Stable
  • WCAG 2.2 evidence
  • RTL

One day of a month view with its events: the date, the day's CalendarEvents and an optional "+2 more" line. Its State (Default, Today, Selected, Weekend, Outside) comes from isToday, isSelected, isOutsideMonth and the date itself, never from colour alone: Today is a filled circle plus aria-current, Selected is a fill plus aria-selected, Outside is dimmed and inert (WCAG 1.4.1, 4.1.2). The cell has role="gridcell" and is named by its full date, formatted with Intl.DateTimeFormat in the provider's locale (1.3.1). Render it inside an element with role="row" inside role="grid" (or pass another role). The events and the date button are real focusable controls in the tab order; the arrow-key movement between the cells of a grid belongs to the container that lays the grid out, as CalendarMonth does for date pickers. Consumer duties: the grid, its row and column order (the first day of the week follows the locale), time zones, and the keyboard movement across cells if the grid should have it.

import { CalendarMonthCell } from "@nexera-ui/react";
Loading example…
12
examples
9
props
5
live controls
1
platform
7
WCAG criteria
1
block uses it

Try every prop. Copy the code.

Change the props and the code updates. Check light and dark, LTR and RTL, and phone width.

Loading…
children
isToday
isSelected
isOutsideMonth
isWeekend
Generated code
import { CalendarMonthCell } from "@nexera-ui/react";

<CalendarMonthCell />

Examples 11

The same examples as Storybook, rendered live. Open Code to copy one.

Today

Figma State=Today: the date in a brand circle, announced as "today" and exposed with aria-current.

Loading example…

Selected

Figma State=Selected: the nav/active-bg fill and aria-selected; the "+2 more" line is off in Figma.

Loading example…

Weekend

Figma State=Weekend: the page fill, derived from the date (a Saturday).

Loading example…

Outside

Figma State=Outside: a day of the next or previous month, dimmed and inert (aria-disabled).

Loading example…

Pressable

onDatePress makes the number a button named by the full date, and onMorePress makes the overflow line a button.

Loading example…

Month view

A month grid assembled from the cells (October 2026, Monday first, six weeks): today on the 14th, a selected day you can change with the date button, outside days, and events. The arrow-key movement between cells belongs to the grid container; here Tab walks the buttons.

Loading example…

Many events

A busy day: the cell grows with its events instead of clipping them, and each long title truncates with the whole name kept.

Loading example…

Right to left

Right-to-left (Arabic): the date circle and the events start at the right edge, and the digits are Arabic.

Loading example…

Narrow container

The cell never overflows a narrow column: the events truncate and a cell with many events grows instead of clipping them.

Loading example…

Full calendar week

Loading example…

Full calendar month

Loading example…

Props 9

Press "Try it" on a card to load that prop into the playground.

9 props shown

date*Nexera
DateValue

The day of the cell (an @internationalized/date CalendarDate, for example parseDate("2026-10-15")). The visible number is this date formatted for the locale, with its digits, and the cell is named by the full date ("Thursday, October 15, 2026").

Default –
childrenNexera
ReactNode

The events of the day: CalendarEvents in the compact layout. Each is its own focusable button or link.

Default –
moreNexera
ReactNode

Text of the overflow line. Shown when provided. Plain text unless onMorePress is set. Write what is hidden ("+2 more events"): it is read with the full date after it.

Default –
onMorePressNexera
((event: PressEvent) => void)

Makes the more line a button and is called when it is pressed (for example to open the day).

Default –
onDatePressNexera
((event: PressEvent) => void)

Makes the day number a button and is called when it is pressed (for example to open the day view). It is named by the full date.

Default –
isTodayNexera
boolean

The cell holds today's date: a filled brand circle around the number, and aria-current="date". Not derived from the clock on purpose (it depends on the viewer's time zone and a server render would freeze it): pass isToday(date, getLocalTimeZone()) from @internationalized/date.

Default false
isSelectedNexera
boolean

The cell is the selected day: nav/active-bg fill and aria-selected="true". When set (to true or false) every cell of the grid reports its selection; leave it out in a grid that has none.

Default –
isOutsideMonthNexera
boolean

The day belongs to the previous or next month: the cell takes the page fill and a dimmed number. An outside cell without events and without a pressable date is inert and gets aria-disabled="true".

Default false
isWeekendNexera
boolean

The day is a weekend day: bg/page fill. Derived from date and the locale (Saturday and Sunday in en-US, Friday and Saturday in ar-EG); pass it to follow your own work week.

Default derived from `date` and the provider locale

* Required. React Aria props shown are the ones most apps use; the component accepts the rest of its React Aria props too.

Accessible by default.

Built on React Aria, and covered by the WCAG 2.2 evidence generated on every build.

WCAG 2.2 evidence

3 direct · 4 supporting
  • 1.3.1Info and RelationshipsLevel A · tested directly
  • 1.4.1Use of ColorLevel A · supporting test
  • 1.4.4Resize TextLevel AA · supporting test
  • 1.4.10ReflowLevel AA · supporting test
  • 1.4.12Text SpacingLevel AA · supporting test
  • 2.1.1KeyboardLevel A · tested directly
  • 4.1.2Name, Role, ValueLevel A · tested directly

Fits any width.

Nexera components respond to the space they are given. Drag the corner of the frame, or pick a width.

0 px · drag the corner

Styling hooks

Pass className to add Tailwind classes (merged last). State is exposed as data attributes, so you can style it with variants like data-pressed:.

  • data-hovered
  • data-pressed
Usage
<CalendarMonthCell className="data-hovered:opacity-90 shadow-sm" />

Used in blocks

Related components