react-d-calendar
Version:
A fully customizable, accessible, and responsive React calendar component
143 lines (142 loc) • 4.6 kB
TypeScript
import React from 'react';
export interface DayInfo {
date: Date;
isCurrentMonth: boolean;
}
export interface Event {
date: Date;
title?: string;
type?: string;
color?: string;
[key: string]: any;
}
export interface CalendarProps {
date?: Date;
activeStartDate?: Date;
defaultActiveStartDate?: Date;
value?: Date | [Date, Date];
defaultValue?: Date | [Date, Date];
defaultView?: 'day' | 'month' | 'year' | 'decade';
disableDate?: (date: Date) => boolean;
disableYear?: (year: number) => boolean;
onActiveStartDateChange?: ({ activeStartDate }: {
activeStartDate: Date;
}) => void;
onChange?: (value: Date | [Date, Date]) => void;
onClickMonth?: (date: Date) => void;
onClickWeekNumber?: (week: number, date: Date) => void;
onDrillDown?: () => void;
onDrillUp?: () => void;
onViewChange?: ({ view }: {
view: 'day' | 'month' | 'year' | 'decade';
}) => void;
onRangeHover?: ({ start, end }: {
start: Date;
end: Date | null;
}) => void;
tileClassName?: ({ date }: {
date: Date;
}) => string;
tileContent?: ({ date, view, event }: {
date: Date;
view: string;
event?: Event;
}) => React.ReactNode;
tileDisabled?: ({ date }: {
date: Date;
}) => boolean;
customTileContent?: ({ date, view, event }: {
date: Date;
view: string;
event?: Event;
}) => React.ReactNode;
formatDay?: (date: Date, locale: string) => string;
formatLongDate?: (date: Date, locale: string) => string;
formatMonth?: (date: Date, locale: string) => string;
formatMonthYear?: (date: Date, locale: string) => string;
formatShortWeekday?: (date: Date, locale: string) => string;
formatWeekday?: (date: Date, locale: string) => string;
formatYear?: (date: Date, locale: string) => string;
className?: string;
style?: React.CSSProperties;
locale?: string;
calendarType?: 'gregorian';
maxDate?: Date;
minDate?: Date;
maxDetail?: 'day' | 'month' | 'year';
minDetail?: 'day' | 'month' | 'year';
selectionMode?: 'single' | 'range';
rangeStart?: Date;
rangeLimit?: number | null;
showDoubleView?: boolean;
showFixedNumberOfWeeks?: boolean;
showNavigation?: boolean;
showNeighboringMonth?: boolean;
showWeekNumbers?: boolean;
showNeighboringDecade?: boolean;
weekStartDay?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
navigationAriaLabel?: string;
navigationAriaLive?: string;
navigationLabel?: ({ date, view, locale }: {
date: Date;
view: string;
locale: string;
}) => string;
next2AriaLabel?: string;
next2Label?: React.ReactNode;
nextAriaLabel?: string;
nextLabel?: React.ReactNode;
prev2AriaLabel?: string;
prev2Label?: React.ReactNode;
prevAriaLabel?: string;
prevLabel?: React.ReactNode;
events?: Event[];
theme?: string;
weekdayFormat?: 'short' | 'full' | 'minimal';
dateFormat?: 'mm/dd/yyyy' | 'dd/mm/yyyy' | 'yyyy-mm-dd' | 'mm-dd-yyyy' | 'dd-mm-yyyy';
monthFormat?: 'long' | 'short' | 'numeric';
includeTime?: boolean;
inputRef?: React.RefObject<HTMLElement>;
renderHeader?: ({ date, onChange, view }: {
date: Date;
onChange: (date: Date) => void;
view: string;
}) => React.ReactNode;
renderMonthView?: ({ date, onDateSelect }: {
date: Date;
onDateSelect: (date: Date) => void;
}) => React.ReactNode;
renderYearView?: ({ date, onMonthSelect }: {
date: Date;
onMonthSelect: (date: Date) => void;
}) => React.ReactNode;
renderDayView?: ({ date, onDateSelect }: {
date: Date;
onDateSelect: (date: Date) => void;
}) => React.ReactNode;
customTheme?: {
[key: string]: string;
};
dayViewClassName?: string;
monthViewClassName?: string;
yearViewClassName?: string;
styleOverrides?: {
calendar?: React.CSSProperties;
header?: React.CSSProperties;
container?: React.CSSProperties;
backButton?: React.CSSProperties;
footer?: React.CSSProperties;
};
holidayDates?: Date[];
renderCustomFooter?: ({ selectedValue, activeDate }: {
selectedValue: Date | [Date, Date] | null;
activeDate: Date;
}) => React.ReactNode;
disabledViews?: string[];
onClickEvent?: (event: Event) => void;
renderEvent?: ({ event, date }: {
event: Event;
date: Date;
}) => React.ReactNode;
selectOnEventClick?: boolean;
}