Date Picker
A date picker component with range and presets.
"use client";
import { Calendar as CalendarIcon } from "@mynaui/icons-react";
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";
const formatDate = (date: Date) =>
date.toLocaleDateString("en-US", { dateStyle: "long" });
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 ? formatDate(date) : <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 * 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";
const formatDate = (date: Date) =>
date.toLocaleDateString("en-US", {
month: "short",
day: "2-digit",
year: "numeric",
});
export default function DateRangePicker() {
const [date, setDate] = React.useState<DateRange | undefined>({
from: new Date(2026, 1, 14),
to: new Date(2026, 2, 12),
});
return (
<Popover>
<PopoverTrigger asChild>
<Button
variant="outline"
className={cn(
"w-full justify-between font-normal",
!date && "text-muted-foreground"
)}
>
{date?.from ? (
date.to ? (
<>
{formatDate(date.from)} —{" "}
{formatDate(date.to)}
</>
) : (
formatDate(date.from)
)
) : (
<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 * 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";
const formatDate = (date: Date) =>
date.toLocaleDateString("en-US", { dateStyle: "long" });
const addDays = (date: Date, days: number) =>
new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);
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 ? formatDate(date) : <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>
);
}