This component no longer exists. It was in cubby-ui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-10 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
Date-range-picker
cubby-ui/date-range-pickerRemovedComponent
A date-range-picker component.
Live preview
live · rendered by the registry
Rendered by cubby-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://cubby-ui.dev/r/date-range-picker.jsonSource
1import * as React from "react";2import dayjs from "dayjs";3import { Button } from "@/registry/default/button/button";4import { Calendar } from "@/registry/default/calendar/calendar";5import {6 Popover,7 PopoverContent,8 PopoverTrigger,9} from "@/registry/default/popover/popover";10import { cn } from "@/lib/utils";1112import type { DateRange } from "react-day-picker";1314import { HugeiconsIcon } from "@hugeicons/react";15import { Calendar01Icon, UnfoldMoreIcon } from "@hugeicons/core-free-icons";16export interface DateRangePickerProps {17 value?: DateRange;18 onSelect?: (range: DateRange | undefined) => void;19 placeholder?: string;20 className?: string;21 disabled?: boolean;22 format?: string;23 numberOfMonths?: number;24 fixedWeeks?: boolean;25}2627export function DateRangePicker({28 value,29 onSelect,30 placeholder = "Select date range",31 className,32 disabled = false,33 format = "DD MMM YYYY",34 numberOfMonths = 1,35 fixedWeeks = false,36}: DateRangePickerProps) {37 const [open, setOpen] = React.useState(false);38 const [tempRange, setTempRange] = React.useState<DateRange | undefined>(39 undefined,40 );41 const [hoverDate, setHoverDate] = React.useState<Date | undefined>(undefined);42 const previousTempRangeRef = React.useRef<DateRange | undefined>(undefined);4344 React.useEffect(() => {45 if (open) {46 setTempRange(value);47 previousTempRangeRef.current = value;48 setHoverDate(undefined);49 }50 }, [open, value]);5152 const formatDateRange = () => {53 if (!value?.from) return placeholder;54 if (!value.to) return dayjs(value.from).format(format);55 return `${dayjs(value.from).format(format)} - ${dayjs(value.to).format(format)}`;56 };5758 const displayRange = React.useMemo(() => {59 if (tempRange?.from && !tempRange?.to && hoverDate) {60 const start = tempRange.from;61 const end = hoverDate;62 if (start.getTime() <= end.getTime()) {63 return { from: start, to: end };64 } else {65 return { from: end, to: start };66 }67 }68 return tempRange;69 }, [tempRange, hoverDate]);7071 const handleSelect = (range: DateRange | undefined) => {72 const prevRange = previousTempRangeRef.current;7374 setHoverDate(undefined);7576 if (!range?.from) {77 return;78 }7980 if (prevRange?.from && prevRange?.to) {81 if (range?.from && range?.to) {82 if (range.from.getTime() === range.to.getTime()) {83// … truncated
What it pulls in
npm packages
Other registry items
