RangePicker

Designer doc
Generally, Coral RangePicker’s behaviour is like a combination of many other picker libraries. Left and right calendars are detached like Ant Design 3. On the other hand, partial selections are allowed just like React Dates and Material-UI’s.
When reversed dates are selected (e.g. start date after end date), the behaviours are also similar to React Dates and Material-UI’s - resetting either dates and doesn’t close the popup. In Ant Design 4, they completely disable selections for end date before start date.

Example

Basic Usage
View code
Note that the value of RangePicker has type of [Dayjs|null, Dayjs|null]. Do not pass a null, an empty array, or array with other types (e.g. ['', '']). Doing so may cause an unexpected error.
Disabling dates and input
View code
Controlling states from external components
You can also use external components (e.g. Button) to control the states from outside.
View code
Using parseDate and displayDate
You can also pass your custom input parsing and display function. For example, this RangePicker will be able to translate ‘Today’, ‘Yesterday’, and ‘Tomorrow’.
View code
Customizing RangePickerPopup
You can put anything inside the popup by providing your own custom popupElement prop. Inside it, you can always use useRangePickerContext to manage enclosing RangePicker state and create your own custom components.
RangePresets
One of provided addons is RangePresets to achieve something similar to Ant Design’s range presets. This component is not baked into the component itself to ensure popup content flexibility and make it tree shakeable when you don’t really use it.
View code
Custom children
You can also render anything else inside the popup.
View code
Customizing RangePickerInput
Clearable
View code
Disable individual
To achieve similar behaviour like in Ant Design disabled individual input, you can override inputStart or inputEnd prop inside RangePickerInputChildren and disable it. Don’t forget to disable dates and control currentInput prop to avoid broken states.
View code
Customizing RangePicker cells
View code
You can also pass in startOfWeek prop to RangePickerCalendarLeft and RangePickerCalendarRight to control which day to show as the start of the week. By default, Sunday will be shown as the first day.
View code

Accessibility

Similar to DatePicker and Calendar, you can navigate the dates using keyboard Arrow Left, Right, Top, and Down. This navigation will also focus the cell and highlight range accordingly.

Relevant components

References

API

MonthRangePicker
Prop nameTypeDefaultDescription
closePopupOnSelectboolean
currentInputRangeInputs
dateRangeDate
dateFormatstringYYYY/MM
disabledboolean
displayDate(dateValue: Dayjs) => string
highlightRangeDate
initialCurrentInputRangeInputs
initialDateRangeDate
initialHighlightRangeDate
initialIsOpenboolean
initialModeRangeMode[CalendarModes.Month, CalendarModes.Month]
initialValueRangeDate[null, null]
inputElementReactElement<any, string | JSXElementConstructor<any>>
inputValueRangeInputValue
isDateDisabled(date: Dayjs, input: RangeInputs) => boolean
isOpenboolean
modeRangeMode
normalizeDate(dt: RangeDate) => RangeDate
onChange(value: RangeDate) => void
onCurrentInputChange(currentInput: RangeInputs) => void
onDateChange(date: RangeDate) => void
onHighlightChange(highlight: RangeDate) => void
onInputChange(inputValue: RangeInputValue) => void
onIsOpenChange(isOpen: boolean) => void
onModeChange(mode: RangeMode) => void
onSelect(value: RangeDate) => void
parseDate(dateInputValue: string) => Dayjs
popupElementReactElement<any, string | JSXElementConstructor<any>>( <RangePickerPopup> <RangePickerPopupChildren calendarLeft={<MonthRangePickerCalendarLeft />} calendarRight={<MonthRangePickerCalendarRight />} /> </RangePickerPopup> )
todayDayjsdayjs()
valueRangeDate
RangePicker
Prop nameTypeDefaultDescription
closePopupOnSelectbooleantrue
currentInputRangeInputs
dateRangeDate
dateFormatstringYYYY/MM/DD
disabledboolean
displayDate(dateValue: Dayjs) => string(value: Dayjs | null) => (value ? value.format(dateFormat) : '')
highlightRangeDate
initialCurrentInputRangeInputsstart
initialDateRangeDate
initialHighlightRangeDate
initialIsOpenboolean
initialModeRangeMode[CalendarModes.Date, CalendarModes.Date]
initialValueRangeDate[null, null]
inputElementReactElement<any, string | JSXElementConstructor<any>><RangePickerInput />
inputValueRangeInputValue
isDateDisabled(date: Dayjs, input: RangeInputs) => boolean() => false
isOpenboolean
modeRangeMode
normalizeDate(dt: RangeDate) => RangeDate
onChange(value: RangeDate) => void
onCurrentInputChange(currentInput: RangeInputs) => void
onDateChange(date: RangeDate) => void
onHighlightChange(highlight: RangeDate) => void
onInputChange(inputValue: RangeInputValue) => void
onIsOpenChange(isOpen: boolean) => void
onModeChange(mode: RangeMode) => void
onSelect(value: RangeDate) => void
parseDate(dateInputValue: string) => Dayjs(value: string) => dayjs(value, dateFormat)
popupElementReactElement<any, string | JSXElementConstructor<any>><RangePickerPopup />
todayDayjsdayjs()
valueRangeDate
RangePickerPopup
Prop nameTypeDefaultDescription
calendarLeftReactNode<RangePickerCalendarLeft />
calendarRightReactNode<RangePickerCalendarRight />
MonthRangePickerCalendar
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
dateDayjs
dateFooterReactNode
dateHeaderReactNode
dateViewPropsViewProps
immediateboolean
initialDateDayjs
initialModeCalendarModes
modeCalendarModes
monthFooterReactNode
monthHeaderReactNode
monthViewPropsViewProps
onDateChange(date: Dayjs) => void
onModeChange(mode: CalendarModes) => void
onPreviousModeChange(mode: CalendarModes) => void
previousModeCalendarModes
renderDate(props: RenderCalendarDateOptions, defaultCell: ReactElement<CalendarDateCellProps, any>) => ReactNode
renderDay(props: RenderDayOptions, defaultCell: ReactElement<RenderDayOptions, any>) => ReactNode
renderMonth(props: RenderCalendarMonthOptions, defaultCell: ReactElement<CalendarMonthCellProps, any>) => ReactNode(props: RenderCalendarMonthOptions) => <RangePickerMonthCell {...props} />
renderYear(props: RenderCalendarYearOptions, defaultCell: ReactElement<CalendarYearCellProps, any>) => ReactNode
startOfWeekDay
Accepts numbers from 0 (Sunday) to 6 (Saturday).
todayDayjs
yearFooterReactNode
yearHeaderReactNode
yearViewPropsViewProps
MonthRangePickerCalendarLeft
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
dateDayjs
dateFooterReactNode
dateHeaderReactNode
dateViewPropsViewProps
immediateboolean
initialDateDayjs
initialModeCalendarModes
modeCalendarModes
monthFooterReactNode
monthHeaderReactNode
monthViewPropsViewProps
onDateChange(date: Dayjs) => void
onModeChange(mode: CalendarModes) => void
onPreviousModeChange(mode: CalendarModes) => void
previousModeCalendarModes
renderDate(props: RenderCalendarDateOptions, defaultCell: ReactElement<CalendarDateCellProps, any>) => ReactNode
renderDay(props: RenderDayOptions, defaultCell: ReactElement<RenderDayOptions, any>) => ReactNode
renderMonth(props: RenderCalendarMonthOptions, defaultCell: ReactElement<CalendarMonthCellProps, any>) => ReactNode
renderYear(props: RenderCalendarYearOptions, defaultCell: ReactElement<CalendarYearCellProps, any>) => ReactNode(props: RenderMonthRangePickerYearOptions) => <RangePickerYearCellLeft {...props} />
startOfWeekDay
Accepts numbers from 0 (Sunday) to 6 (Saturday).
todayDayjs
yearFooterReactNode
yearHeaderReactNode
yearViewPropsViewProps
MonthRangePickerCalendarRight
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
dateDayjs
dateFooterReactNode
dateHeaderReactNode
dateViewPropsViewProps
immediateboolean
initialDateDayjs
initialModeCalendarModes
modeCalendarModes
monthFooterReactNode
monthHeaderReactNode
monthViewPropsViewProps
onDateChange(date: Dayjs) => void
onModeChange(mode: CalendarModes) => void
onPreviousModeChange(mode: CalendarModes) => void
previousModeCalendarModes
renderDate(props: RenderCalendarDateOptions, defaultCell: ReactElement<CalendarDateCellProps, any>) => ReactNode
renderDay(props: RenderDayOptions, defaultCell: ReactElement<RenderDayOptions, any>) => ReactNode
renderMonth(props: RenderCalendarMonthOptions, defaultCell: ReactElement<CalendarMonthCellProps, any>) => ReactNode
renderYear(props: RenderCalendarYearOptions, defaultCell: ReactElement<CalendarYearCellProps, any>) => ReactNode(props: RenderMonthRangePickerYearOptions) => <RangePickerYearCellRight {...props} />
startOfWeekDay
Accepts numbers from 0 (Sunday) to 6 (Saturday).
todayDayjs
yearFooterReactNode
yearHeaderReactNode
yearViewPropsViewProps
RangePickerCalendarLeft
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
dateDayjs
dateFooterReactNode
dateHeaderReactNode
dateViewPropsViewProps
immediateboolean
initialDateDayjs
initialModeCalendarModes
modeCalendarModes
monthFooterReactNode
monthHeaderReactNode
monthViewPropsViewProps
onDateChange(date: Dayjs) => void
onModeChange(mode: CalendarModes) => void
onPreviousModeChange(mode: CalendarModes) => void
previousModeCalendarModes
renderDate(props: RenderCalendarDateOptions, defaultCell: ReactElement<CalendarDateCellProps, any>) => ReactNode
renderDay(props: RenderDayOptions, defaultCell: ReactElement<RenderDayOptions, any>) => ReactNode
renderMonth(props: RenderCalendarMonthOptions, defaultCell: ReactElement<CalendarMonthCellProps, any>) => ReactNode(props: RenderRangePickerMonthOptions) => <RangePickerMonthCellLeft {...props} />
renderYear(props: RenderCalendarYearOptions, defaultCell: ReactElement<CalendarYearCellProps, any>) => ReactNode(props: RenderRangePickerYearOptions) => <RangePickerYearCellLeft {...props} />
startOfWeekDay
Accepts numbers from 0 (Sunday) to 6 (Saturday).
todayDayjs
yearFooterReactNode
yearHeaderReactNode
yearViewPropsViewProps
RangePickerCalendarRight
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
dateDayjs
dateFooterReactNode
dateHeaderReactNode
dateViewPropsViewProps
immediateboolean
initialDateDayjs
initialModeCalendarModes
modeCalendarModes
monthFooterReactNode
monthHeaderReactNode
monthViewPropsViewProps
onDateChange(date: Dayjs) => void
onModeChange(mode: CalendarModes) => void
onPreviousModeChange(mode: CalendarModes) => void
previousModeCalendarModes
renderDate(props: RenderCalendarDateOptions, defaultCell: ReactElement<CalendarDateCellProps, any>) => ReactNode
renderDay(props: RenderDayOptions, defaultCell: ReactElement<RenderDayOptions, any>) => ReactNode
renderMonth(props: RenderCalendarMonthOptions, defaultCell: ReactElement<CalendarMonthCellProps, any>) => ReactNode(props: RenderRangePickerMonthOptions) => <RangePickerMonthCellRight {...props} />
renderYear(props: RenderCalendarYearOptions, defaultCell: ReactElement<CalendarYearCellProps, any>) => ReactNode(props: RenderRangePickerYearOptions) => <RangePickerYearCellRight {...props} />
startOfWeekDay
Accepts numbers from 0 (Sunday) to 6 (Saturday).
todayDayjs
yearFooterReactNode
yearHeaderReactNode
yearViewPropsViewProps
RangePickerIcon
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
clearableboolean
colorTypeColorTypes
Set color based on theme. If color is specified, that prop is used instead of this.
disabledboolean
Equivalent to button's disabled property.
keyboardClickKeysstring[]
loadingboolean
onBlurFocusEventHandler<HTMLDivElement>
onClickMouseEventHandler<HTMLDivElement>
onKeyDownKeyboardEventHandler<HTMLDivElement>
onKeyUpKeyboardEventHandler<HTMLDivElement>
onMouseDownMouseEventHandler<HTMLDivElement>
onMouseLeaveMouseEventHandler<HTMLDivElement>
onMouseUpMouseEventHandler<HTMLDivElement>
onReleaseEventHandler<SyntheticEvent<HTMLDivElement, Event>>
Callback that's triggered after click i.e. mouseup and keyup of enter or space.
onTouchEndTouchEventHandler<HTMLDivElement>
onTouchStartTouchEventHandler<HTMLDivElement>
radiusstring
sizeIconButtonSizes
tooltipReactNode
tooltipPropsOmit<TooltipProps, "title" | "children">
variantIconButtonVariants
RangePickerInput
Prop nameTypeDefaultDescription
dashReactNode<Dash />
iconReactNode<RangePickerIcon />
inputEndReactNode<RangePickerInputEnd />
inputStartReactNode<RangePickerInputStart />
underlineReactNode<RangePickerInputUnderline />
RangePickerInputEnd
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
disabledboolean
onChange(e: ChangeEvent<HTMLInputElement>) => void
valuestring
RangePickerInputStart
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
disabledboolean
onChange(e: ChangeEvent<HTMLInputElement>) => void
valuestring
RangePickerInputUnderline
Prop nameTypeDefaultDescription
asvoid | WebTarget
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
forwardedAsvoid | WebTarget
themeDefaultTheme
RangePreset
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
colorTypeColorTypes
Set color based on theme. If color is specified, that prop is used instead of this.
disabledboolean
Equivalent to button's disabled property.
keyboardClickKeysstring[]
leftIconReactNode
Element before the label. Equivalent to element on the label with some margin.
loadingboolean
onBlurFocusEventHandler<HTMLDivElement>
onClickMouseEventHandler<HTMLDivElement>
onKeyDownKeyboardEventHandler<HTMLDivElement>
onKeyUpKeyboardEventHandler<HTMLDivElement>
onMouseDownMouseEventHandler<HTMLDivElement>
onMouseLeaveMouseEventHandler<HTMLDivElement>
onMouseUpMouseEventHandler<HTMLDivElement>
onReleaseEventHandler<SyntheticEvent<HTMLDivElement, Event>>
Callback that's triggered after click i.e. mouseup and keyup of enter or space.
onTouchEndTouchEventHandler<HTMLDivElement>
onTouchStartTouchEventHandler<HTMLDivElement>
radiusnumber
rangeRangeDate
rightIconReactNode
Element after the label. Equivalent to element on the label with some margin.
setDateDelaynumber800
sizeButtonSizes
variantButtonVariantstext
Prefers naming it as variant because type is a known button html property.
RangePresets
Prop nameTypeDefaultDescription
asany
Tag or component, but a simple tag (i.e. built-in components, e.g. div, span) is recommended.
cornerboolean
gapnumber
When gap is set to 0, separator will be rendered
rangesObjectOf<RangeDate>
    Example
    Example
    Basic Usage
    Basic Usage
    Disabling dates and input
    Disabling dates and input
    Using parseDate and displayDate
    Using parseDate and displayDate
    Customizing RangePickerPopup
    Customizing RangePickerPopup
    Customizing RangePickerInput
    Customizing RangePickerInput
    Customizing RangePicker cells
    Customizing RangePicker cells
    Accessibility
    Accessibility
    Relevant components
    Relevant components
    References
    References
    API
    API
    MonthRangePicker
    MonthRangePicker
    RangePicker
    RangePicker
    RangePickerPopup
    RangePickerPopup
    MonthRangePickerCalendar
    MonthRangePickerCalendar
    MonthRangePickerCalendarLeft
    MonthRangePickerCalendarLeft
    MonthRangePickerCalendarRight
    MonthRangePickerCalendarRight
    RangePickerCalendarLeft
    RangePickerCalendarLeft
    RangePickerCalendarRight
    RangePickerCalendarRight
    RangePickerIcon
    RangePickerIcon
    RangePickerInput
    RangePickerInput
    RangePickerInputEnd
    RangePickerInputEnd
    RangePickerInputStart
    RangePickerInputStart
    RangePickerInputUnderline
    RangePickerInputUnderline
    RangePreset
    RangePreset
    RangePresets
    RangePresets
Coral is a thoroughly developed design system widely adopted by developers and designers for creating beautiful and user-friendly Sea internal products.

Copyright © 2018-2025 Sea Labs