Date Picker

A date picker component.

date-picker-demo.tsx
import * as React from "react"
import dayjs from "dayjs"
import { CalendarIcon, ChevronsUpDownIcon } from "lucide-react"
 
import { Button } from "@/components/ui/button"
import { Calendar } from "@/components/ui/calendar"
import {
	Popover,
	PopoverContent,
	PopoverTrigger,
} from "@/components/ui/popover"
 
export function DatePickerDemo() {
	const [open, setOpen] = React.useState(false)
	const [value, setValue] = React.useState<Date | undefined>(undefined)
 
	return (
		<Popover open={open} onOpenChange={setOpen}>
			<PopoverTrigger
				render={(props) => (
					<Button
						{...props}
						variant="outline"
						className="w-[250px] justify-between"
					>
						<div className="flex items-center">
							<CalendarIcon className="mr-2 size-4" />
							{value ? (
								<span>{dayjs(value).format("DD MMMM YYYY")}</span>
							) : (
								<span>Select a date</span>
							)}
						</div>
						<ChevronsUpDownIcon className="ml-2 size-4 shrink-0 opacity-50" />
					</Button>
				)}
			/>
			<PopoverContent className=" p-0" sideOffset={4} arrow={false}>
				<Calendar
					className="border-0"
					mode="single"
					showOutsideDays
					selected={value}
					onSelect={setValue}
				/>
			</PopoverContent>
		</Popover>
	)
}

Installation

The date picker component is a composition of the Calendar and Popover components.

Follow installation instructions for the Calendar and Popover components.

Usage

Imports
import { Calendar } from "@/components/ui/calendar"
import {
	Popover,
	PopoverContent,
	PopoverTrigger,
} from "@/components/ui/popover"
Anatomy
<Popover>
	<PopoverTrigger />
	<PopoverContent>
		<Calendar />
	</PopoverContent>
</Popover>