Components
- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Autocomplete
- Avatar
- Badge
- Bar List
- Breadcrumb
- Button
- Button Group
- Calendar
- Card
- Carousel
- Checkbox
- Checkbox Group
- Circular Progress
- Collapsible
- Combobox
- Command
- Context Menu
- Currency Input
- Data Table
- Date Picker
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Menubar
- Meter
- Multi Combobox
- Native Select
- Navigation Menu
- Number Field
- Pagination
- Phone Input
- Popover
- Progress
- Progress List
- Prompt
- Radio Group
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Stat
- Switch
- Table
- Tabs
- Textarea
- Toggle
- Toggle Group
- Tooltip
- Typography
Loading...
"use client";
import { ChevronDownIcon } from "blode-icons-react";
import { format } from "date-fns";
import { useState } from "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 [date, setDate] = useState<Date>();
return (
<Popover>
<PopoverTrigger
render={
<Button
className="w-[212px] justify-between text-left data-[empty=true]:text-placeholder-foreground"
data-empty={!date}
size="input"
variant="input"
/>
}
>
{date ? format(date, "PPP") : <span>Pick a date</span>}
<ChevronDownIcon data-icon="inline-end" />
</PopoverTrigger>
<PopoverContent align="start" className="w-auto p-0">
<Calendar
defaultMonth={date}
mode="single"
onSelect={setDate}
selected={date}
/>
</PopoverContent>
</Popover>
);
}Installation
The Date Picker is built using a composition of the <Popover /> and the <Calendar /> components.
See installation instructions for the Popover and the Calendar components.
Usage
"use client";
import React from "react";
import { format } from "date-fns";
import { Calendar1Icon } from "blode-icons-react";
import { cn } from "@/lib/utils";
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
export function DatePickerDemo() {
const [date, setDate] = React.useState<Date>();
return (
<Popover>
<PopoverTrigger asChild>
<Button
size="input"
variant="input"
className={cn(
"w-[280px] justify-start text-left",
!date && "text-placeholder-foreground",
)}
>
<Calendar1Icon className="mr-2 h-4 w-4" />
{date ? format(date, "PPP") : <span>Pick a date</span>}
</Button>
</PopoverTrigger>
<PopoverContent className="w-auto p-0">
<Calendar
mode="single"
selected={date}
onSelect={setDate}
initialFocus
/>
</PopoverContent>
</Popover>
);
}See the React DayPicker documentation for more information.
Examples
Date Picker
Loading...
"use client";
import { ChevronDownIcon } from "blode-icons-react";
import { format } from "date-fns";
import { useState } from "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 [date, setDate] = useState<Date>();
return (
<Popover>
<PopoverTrigger
render={
<Button
className="w-[212px] justify-between text-left data-[empty=true]:text-placeholder-foreground"
data-empty={!date}
size="input"
variant="input"
/>
}
>
{date ? format(date, "PPP") : <span>Pick a date</span>}
<ChevronDownIcon data-icon="inline-end" />
</PopoverTrigger>
<PopoverContent align="start" className="w-auto p-0">
<Calendar
defaultMonth={date}
mode="single"
onSelect={setDate}
selected={date}
/>
</PopoverContent>
</Popover>
);
}Date Range Picker
Loading...
"use client";
import { CalendarIcon } from "blode-icons-react";
import { addDays, format } from "date-fns";
import { useState } from "react";
import type { DateRange } from "react-day-picker";
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import { Field, FieldLabel } from "@/components/ui/field";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
export function DatePickerWithRange() {
const [date, setDate] = useState<DateRange | undefined>({
from: new Date(new Date().getFullYear(), 0, 20),
to: addDays(new Date(new Date().getFullYear(), 0, 20), 20),
});
return (
<Field className="mx-auto w-60">
<FieldLabel htmlFor="date-picker-range">Date Picker Range</FieldLabel>
<Popover>
<PopoverTrigger
render={
<Button
className="justify-start"
id="date-picker-range"
size="input"
variant="input"
/>
}
>
<CalendarIcon data-icon="inline-start" />
{date?.from ? (
date.to ? (
<>
{format(date.from, "LLL dd, y")} -{" "}
{format(date.to, "LLL dd, y")}
</>
) : (
format(date.from, "LLL dd, y")
)
) : (
<span>Pick a date</span>
)}
</PopoverTrigger>
<PopoverContent align="start" className="w-auto p-0">
<Calendar
defaultMonth={date?.from}
mode="range"
numberOfMonths={2}
onSelect={setDate}
selected={date}
/>
</PopoverContent>
</Popover>
</Field>
);
}With Presets
Loading...
"use client";
import { CalendarIcon } from "blode-icons-react";
import { addDays, format } from "date-fns";
import { useState } from "react";
import { cn } from "@/lib/utils";
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
export function DatePickerWithPresets() {
const [date, setDate] = useState<Date>();
return (
<Popover>
<PopoverTrigger asChild>
<Button
className={cn(
"w-[240px] justify-start text-left",
!date && "text-placeholder-foreground"
)}
size="input"
variant="input"
>
<CalendarIcon />
{date ? format(date, "PPP") : <span>Pick a date</span>}
</Button>
</PopoverTrigger>
<PopoverContent
align="start"
className="flex w-auto flex-col space-y-2 p-2"
>
<Select
onValueChange={(value) =>
setDate(addDays(new Date(), Number.parseInt(value, 10)))
}
>
<SelectTrigger>
<SelectValue placeholder="Select" />
</SelectTrigger>
<SelectContent position="popper">
<SelectItem value="0">Today</SelectItem>
<SelectItem value="1">Tomorrow</SelectItem>
<SelectItem value="3">In 3 days</SelectItem>
<SelectItem value="7">In a week</SelectItem>
</SelectContent>
</Select>
<div className="rounded-md border">
<Calendar mode="single" onSelect={setDate} selected={date} />
</div>
</PopoverContent>
</Popover>
);
}