Bridge UI

Calendar

Standalone calendar with date, month, and year panels for single, multiple, and range selection.

Introduction

Calendar is a standalone date picker surface with date, month, and year panels. It renders inline (not in a popover) and supports single, multiple, and range selection out of the box.

Calendar is the building block behind the popover-based pickers—DateField and DatePicker wrap it with a text input and overlay. Reach for Calendar directly when you want the grid visible at all times, such as in a sidebar, dashboard widget, or a custom scheduling layout.

Import

import { Calendar } from "@bridge-ui/vue/Components/Calendar";
import { Calendar } from "@bridge-ui/react/Components/Calendar";

Basic usage

Bind the selection with value/onChange in React or v-model in Vue. For uncontrolled usage with an initial value, use defaultValue in React or default-value in Vue. Use viewDate (React) / view-date (Vue) to control which month is initially displayed.

SunMonTueWedThuFriSat
SunMonTueWedThuFriSat

Range selection

Enable range to select a start/end pair. The bound value becomes a two-item tuple [start, end]; hovering a candidate end date previews the in-between fill before the second date is committed.

For a form field built on top of range selection, see DateRangeField. For a dual-month layout with two date panels side by side, see CalendarRange.

SunMonTueWedThuFriSat
SunMonTueWedThuFriSat

Multiple selection

Enable multiple to allow selecting any number of individual dates. The bound value becomes an array of dates; clicking a selected date removes it from the array.

SunMonTueWedThuFriSat
SunMonTueWedThuFriSat

Bounds and disabled dates

Restrict the selectable range with minDate and maxDate, and block individual dates with disableDates. Out-of-range and disabled tiles render with muted, non-interactive styling. Pair with disableMonths and disableYears to block entire months or years from the month/year panels.

SunMonTueWedThuFriSat
SunMonTueWedThuFriSat

Colors

Use the color prop to change the accent used for selected tiles across the date, month, and year panels. Available colors: primary (default), secondary, success, info, warning, error, and dark.

Primary

SunMonTueWedThuFriSat

Success

SunMonTueWedThuFriSat

Error

SunMonTueWedThuFriSat

Primary

SunMonTueWedThuFriSat

Success

SunMonTueWedThuFriSat

Error

SunMonTueWedThuFriSat

Building blocks

Calendar composes three smaller, independently usable panels—swap them in when you only need one grid instead of the full month/year-switching chrome:

  • CalendarDate — the weekday header and day grid. Supports the same range/multiple selection modes as Calendar.
  • CalendarMonth — a 12-tile month grid (011) for a given year.
  • CalendarYear — a paginated year grid (pageSize years per page, default 15).

CalendarDate

SunMonTueWedThuFriSat

CalendarMonth

CalendarYear

CalendarDate

SunMonTueWedThuFriSat

CalendarMonth

CalendarYear

DateField, DateRangeField, DatePicker, CalendarRange

Accessibility

  • The active panel (date, month, or year) exposes a header with a live text label (month/year or year-page range) and previous/next/today navigation buttons.
  • Day, month, and year tiles are rendered as buttons, so they receive keyboard focus and can be activated with Enter or Space.
  • Disabled and out-of-range tiles are marked non-interactive and skipped by pointer and keyboard activation alike.
  • When embedding Calendar without a visible page heading nearby, add aria-label (via customProps.root) so assistive technology has context for the grid.

Anatomy

Calendar renders a header and a single body panel that swaps between date, month, and year grids:

Calendar (root)
├── Header
│   ├── Year selector — current year label, switches to the year panel
│   ├── Month selector — current month label, switches to the month panel
│   └── Nav — previous, today, and next buttons (date panel)
└── Body — active panel
    ├── CalendarDate — weekday row + day tiles (default view)
    ├── CalendarMonth — month tiles (when the month selector is active)
    └── CalendarYear — year tiles (when the year selector is active)

API

Prop Type Default Description
v-model DatePickerModel Two-way binding for the selection model (single, multiple, or range).
default-value DatePickerModel null Initial value for uncontrolled usage (without v-model).
Prop Type Default Description
value DatePickerModel Controlled selection model. Use with onChange.
defaultValue DatePickerModel null Initial value for uncontrolled usage.
onChange (value: DatePickerModel) => void Called when the selection model changes.

Calendar-specific

Prop Type Default Description
classes CalendarClasses Classes for root, header, body, selector, and navButton.
color CalendarColor "primary" Accent color for selected tiles.
customProps CalendarCustomProps Extra props for internal parts (root, header, navButton, todayButton, selector, etc.).
defaultView / default-view CalendarView "date" Uncontrolled initial panel ("date", "month", or "year").
disabled boolean false Disables the whole calendar.
disableDates / disable-dates Date[] Dates that cannot be selected.
disableMonths / disable-months number[] Month indexes (011) that cannot be selected.
disableYears / disable-years number[] Years that cannot be selected.
hideMonths / hide-months boolean false Hides the month selector and month panel.
hideOutsideDays / hide-outside-days boolean false Hides days that fall outside the displayed month.
hideWeekdays / hide-weekdays boolean false Hides weekday labels on the date panel.
hideYears / hide-years boolean false Hides the year selector and year panel.
maxDate / max-date Date Latest selectable date.
minDate / min-date Date Earliest selectable date.
multiple boolean false Allows selecting multiple dates.
previewDate / preview-date Date | null Controlled range-preview hover date.
range boolean false Selects a start/end date range.
readOnly / read-only boolean false Prevents selection while keeping tiles visible.
rounded CalendarRounded "md" Border radius of tiles and chrome.
slots CalendarDateSlots Named slots forwarded to CalendarDate (day).
startOfWeek / start-of-week StartOfWeek 0 First day of the week (0 = Sunday).
timeZone / time-zone string IANA time zone.
tokens CalendarTokens Token overrides.
view CalendarView Controlled panel view. Pair with onViewChange (React) or @view-change (Vue).
viewDate / view-date Date Controlled displayed month. Pair with onViewDateChange (React) or @view-date-change (Vue).

Events

Event Payload Description
@preview-date-change date: Date | null Emitted when the range-preview hover date changes.
@view-change view: CalendarView Emitted when the active panel view changes.
@view-date-change date: Date Emitted when the displayed month changes.
Prop Payload Description
onPreviewDateChange (date: Date | null) => void Called when the range-preview hover date changes.
onViewChange (view: CalendarView) => void Called when the active panel view changes.
onViewDateChange (date: Date) => void Called when the displayed month changes.

CalendarMonth and CalendarYear

When used standalone, CalendarMonth and CalendarYear bind a plain number instead of a DatePickerModel:

Component Binding Extra props
CalendarMonth value/onChange (React) or v-model (Vue) — number (011) year — year context used to bound months by minDate/maxDate.
CalendarYear value/onChange (React) or v-model (Vue) — number pageSize (default 15) and startYear control paging.

Both share the color, rounded, disabled, readOnly, minDate/maxDate, and disableMonths/disableYears props with Calendar.