Date Picker
A date picker component with range and presets.
"use client";
import { Calendar as CalendarIcon } from "@mynaui/icons-react";
import { format } from "date-fns";
import * as React from "react";
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { cn } from "@/lib/utils";
export default function Basic() {
const [date, setDate] = React.useState<Date>();
return (
<Popover>
<PopoverTrigger asChild>
<Button
variant="outline"
className={cn(
"w-full justify-between font-normal",
!date && "text-muted-foreground",
)}
>
{date ? format(date, "PPP") : <span>Pick a date</span>}
<CalendarIcon className="size-4" />
</Button>
</PopoverTrigger>
<PopoverContent className="w-auto p-0">
<Calendar mode="single" selected={date} onSelect={setDate} />
</PopoverContent>
</Popover>
);
}
"use client";
import { Calendar as CalendarIcon } from "@mynaui/icons-react";
import { addDays, format } from "date-fns";
import * as React from "react";
type DateRange = {
from: Date | undefined;
to?: Date | undefined;
};
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { cn } from "@/lib/utils";
export default function DateRangePicker() {
const [date, setDate] = React.useState<DateRange | undefined>({
from: new Date(2026, 1, 14),
to: addDays(new Date(2026, 1, 20), 20),
});
return (
<Popover>
<PopoverTrigger asChild>
<Button
variant="outline"
className={cn(
"w-full justify-between font-normal",
!date && "text-muted-foreground"
)}
>
{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>
)}
<CalendarIcon className="size-4" />
</Button>
</PopoverTrigger>
<PopoverContent className="w-auto p-0" align="start">
<Calendar
autoFocus
mode="range"
defaultMonth={date?.from}
selected={date}
onSelect={setDate}
numberOfMonths={2}
/>
</PopoverContent>
</Popover>
);
}
"use client";
import { Calendar as CalendarIcon } from "@mynaui/icons-react";
import { addDays, format } from "date-fns";
import * as React from "react";
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";
import { cn } from "@/lib/utils";
export default function WithPresets() {
const [date, setDate] = React.useState<Date>();
const footer = (
<Select
onValueChange={(value) => setDate(addDays(new Date(), parseInt(value)))}
>
<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>
);
return (
<Popover>
<PopoverTrigger asChild>
<Button
variant={"outline"}
className={cn(
"w-full justify-between font-normal",
!date && "text-muted-foreground",
)}
>
{date ? format(date, "PPP") : <span>Pick a date</span>}
<CalendarIcon className="size-4" />
</Button>
</PopoverTrigger>
<PopoverContent className="w-auto p-0">
<Calendar
mode="single"
selected={date}
onSelect={setDate}
footer={footer}
/>
</PopoverContent>
</Popover>
);
}