Free
Pro

Calendar

The Ply calendar is a signal-driven month grid for a single date or a range. Copy it in with the CLI; keyboard arrows move between days. Pair it with the Pro datepicker overlay when you need an input that opens a popover instead of an inline grid.

When to use

  • Scheduling UIs that should show a full month without an overlay.
  • Range selection (check-in / check-out) on the same grid.

When not to use

  • A compact field that opens a popup — use datepicker (Pro) or date-range-picker.
  • Time of day only — use time-picker, or datepicker / date-range-picker with showTime.

Install with npx ply-ui-cli add calendar.

free

View source

Need a compact field that opens this grid in an overlay? That is Pro datepicker (and date-range-picker). Set showTime on either field for a datetime. Time of day only is time-picker.

Single Date Selection

Default mode allowing selection of a single date.

October 2026

S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
Selected Date: Wednesday, October 28, 2026

Date Range Selection

Set mode="range" to enable selecting a start and end date.

October 2026

S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
Start: Oct 28, 2026
End: Nov 4, 2026

Keyboard & accessibility

Role
Grid with column headers. The focused day is the only tab stop in the grid (roving tabindex).
Focus
Month buttons are in tab order. Arrow keys move day focus without leaving the grid.

Shortcuts

  • Arrow keysMove the focused day
  • HomeFirst day of the month
  • EndLast day of the month
  • PageUpPrevious month
  • PageDownNext month
  • EnterSelect the focused day

Site-wide VPAT-style notes live on the accessibility report.

Installation

Run the following command to add this component to your project:

bash
npx ply-ui-cli add calendar

API Reference

For AI agents

Copy a prompt with the registry name, CLI install, and import — or add the Ply MCP server.

bash
npx -y ply-ui-mcp

Ply provides standalone components. Import the exact elements you want to use into your component.

typescript (Example)
// Install: npx ply-ui-cli add calendar
// Paths are relative to aliases.components (default: src/app/components)
import { CalendarComponent, CalendarDate } from './calendar/calendar.component';

@Component({
  selector: 'app-your-component',
  imports: [
    CalendarComponent
  ],
  template: `...`
})
export class YourComponent {}

API for calendar — generated from JSDoc in the library source.

API reference for calendar
APIMemberTypeDefaultDescription
CalendarDatedateDate — —
CalendarDateisTodayboolean — —
CalendarDateisCurrentMonthboolean — —
CalendarDateisSelectedboolean — —
CalendarDateisInRangeboolean — —
CalendarDateisRangeStartboolean — —
CalendarDateisRangeEndboolean — —
ply-calendarclassstring''Additional CSS classes to merge into the host element.
ply-calendarpanelIdunknown`ply-calendar-grid-${++calendarIdCounter}`ID for the calendar grid, used by combobox aria-controls on date pickers.
ply-calendarmode'single' | 'range''single'The selection mode. 'single' allows picking one day, 'range' allows picking start and end dates.
ply-calendarselectedDateDate | nullnullThe currently selected date (only used in 'single' mode).
ply-calendarrangeStartDate | nullnullThe start date of the selected range (only used in 'range' mode).
ply-calendarrangeEndDate | nullnullThe end date of the selected range (only used in 'range' mode).
ply-calendar(dateSelected)Date — Emits the selected Date when mode is 'single' and a day is clicked.
ply-calendar(rangeSelected){ start: Date | null; end: Date | null; } — Emits an object containing start and end Dates when mode is 'range' and a day is clicked.