npx gluestack-ui@alpha add calendarimport {
Calendar,
CalendarHeader,
CalendarHeaderPrevButton,
CalendarHeaderNextButton,
CalendarHeaderTitle,
CalendarHeaderMonthSelect,
CalendarHeaderYearSelect,
CalendarWeekDaysHeader,
CalendarWeekDay,
CalendarBody,
CalendarGrid,
CalendarWeek,
CalendarDay,
CalendarDayText,
CalendarDayIndicator,
CalendarWeekNumber,
CalendarFooter,
} from '@/components/ui/calendar';
export default () => (
<Calendar>
<CalendarHeader>
<CalendarHeaderPrevButton />
<CalendarHeaderMonthSelect />
<CalendarHeaderYearSelect />
<CalendarHeaderTitle />
<CalendarHeaderNextButton />
</CalendarHeader>
<CalendarWeekDaysHeader>
<CalendarWeekDay />
</CalendarWeekDaysHeader>
<CalendarBody>
<CalendarGrid>
<CalendarWeek>
<CalendarWeekNumber />
<CalendarDay>
<CalendarDayText />
<CalendarDayIndicator />
</CalendarDay>
</CalendarWeek>
</CalendarGrid>
</CalendarBody>
<CalendarFooter />
</Calendar>
);
| Prop | Type | Default | Description |
|---|---|---|---|
mode | 'single' | 'multiple' | 'range' | 'single' | Selection mode for the calendar. |
value | Date | Date[] | { from: Date; to?: Date } | - | Controlled value of the calendar. |
defaultValue | Date | Date[] | { from: Date; to?: Date } | - | Default value for uncontrolled calendar. |
onValueChange | (value) => void | - | Callback when selection changes. |
minDate | Date | - | Minimum selectable date. |
maxDate | Date | - | Maximum selectable date. |
disabledDates | Date[] | (date: Date) => boolean | - | Disabled dates or function to check disabled dates. |
initialMonth | Date | - | Initial month to display. |
numberOfMonths | number | 1 | Number of months to display. |
showWeekNumbers | boolean | false | Show ISO week numbers. |
showOutsideDays | boolean | true | Show days from adjacent months. |
firstDayOfWeek | 0-6 | 0 | First day of week (0=Sunday). |
fixedWeeks | boolean | false | Always show 6 weeks. |
markers | CalendarMarkers | - | Event markers for specific dates. |
enableMonthYearPicker | boolean | false | Enable month/year dropdown selectors. |
minYear | number | - | Minimum year in year picker. |
maxYear | number | - | Maximum year in year picker. |
locale | string | 'en-US' | Locale for date formatting. |
isDisabled | boolean | false | Disable entire calendar. |
isReadOnly | boolean | false | Read-only mode. |
onMonthChange | (month: Date) => void | - | Called when month changes. |
onDayPress | (date: Date) => void | - | Called when day is pressed. |
onDayLongPress | (date: Date) => void | - | Called when day is long-pressed. |
| Type | Description |
|---|---|
dot | Single colored dot below the date. |
multi-dot | Multiple colored dots below the date. |
period | Highlighted period/background for the date. |
const markers = {
'2024-01-15': {
type: 'dot',
color: 'hsl(var(--primary))', // Primary color
},
'2024-01-20': {
type: 'multi-dot',
dots: [
{ color: 'hsl(var(--primary))', key: '1' },
{ color: 'hsl(var(--destructive))', key: '2' },
],
},
'2024-01-25': {
type: 'period',
color: 'hsl(var(--secondary))', // Secondary color
},
};
<Calendar className="bg-card border border-border">
<CalendarHeader className="bg-accent rounded-t-lg">
<CalendarHeaderTitle className="text-accent-foreground font-bold" />
</CalendarHeader>
<CalendarBody className="bg-background">
<CalendarGrid />
</CalendarBody>
</Calendar>