Time Picker

The TimePicker compound API lets you build a custom time selection UI with a trigger, time panel, and footer actions.

import { useState } from "react";
import { TimePicker } from "react-date-range-picker-tailwind3";
function CompoundTimePicker() {
const [value, setValue] = useState<Date | null>(null);
return (
<TimePicker.Root value={value} onChange={setValue}>
<TimePicker.Trigger>
{({ displayValue, isOpen, onToggle, triggerRef }) => (
<button
ref={triggerRef as React.Ref<HTMLButtonElement>}
onClick={onToggle}
style={{
display: "inline-flex",
alignItems: "center",
gap: 8,
padding: "8px 12px",
border: "1px solid #d1d5db",
borderRadius: 6,
background: isOpen ? "#eff6ff" : "#fff",
cursor: "pointer",
fontSize: 14,
}}
>
<span style={{ fontSize: 18 }}>{"\uD83D\uDD52"}</span>
<span>{displayValue || "Select time"}</span>
</button>
)}
</TimePicker.Trigger>
<TimePicker.Content>
<TimePicker.TimePanel target="single" />
<TimePicker.Footer>
<TimePicker.ClearButton />
<TimePicker.CancelButton />
<TimePicker.ConfirmButton />
</TimePicker.Footer>
</TimePicker.Content>
</TimePicker.Root>
);
}

12-Hour Format

Configure 12-hour format with time:

import { useState } from "react";
import { TimePicker } from "react-date-range-picker-tailwind3";
function CompoundTimePickerTwelveHour() {
const [value, setValue] = useState<Date | null>(null);
return (
<TimePicker.Root
value={value}
onChange={setValue}
time={{ hourFormat: "12", precision: "minute" }}
>
<TimePicker.Trigger>
{({ displayValue, isOpen, onToggle, triggerRef }) => (
<button
ref={triggerRef as React.Ref<HTMLButtonElement>}
onClick={onToggle}
style={{
display: "inline-flex",
alignItems: "center",
gap: 8,
padding: "8px 12px",
border: `1px solid ${isOpen ? "#3b82f6" : "#d1d5db"}`,
borderRadius: 6,
background: isOpen ? "#eff6ff" : "#fff",
cursor: "pointer",
fontSize: 14,
}}
>
<span style={{ fontSize: 18 }}>{"\uD83D\uDD52"}</span>
<span>{displayValue || "Pick a time (12h)"}</span>
</button>
)}
</TimePicker.Trigger>
<TimePicker.Content>
<TimePicker.TimePanel target="single" />
<TimePicker.Footer>
<TimePicker.ClearButton />
<TimePicker.CancelButton />
<TimePicker.ConfirmButton />
</TimePicker.Footer>
</TimePicker.Content>
</TimePicker.Root>
);
}