Date picker
Tek tarihler ve aralıklar için takvimi bir popover içinde, telefonlarda ise alt sayfa olarak açan bir düğme.
pnpm dlx shadcn@latest add https://hextaui.com/r/date-picker.jsonBileşeni, HextaUI tema token'larını ve bileşenin bağımlı olduğu tüm HextaUI bileşenlerini ekler.
Henüz eklemediyseniz tema token'larını global CSS'inize ekleyin.
Bağımlılıkları yükleyin.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cn react-day-pickerAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/date-picker.tsx components/ui/calendar.tsx components/ui/popover.tsx components/ui/sheet.tsx components/ui/button.tsx lib/motion.ts İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
640px'ten dar ekranlarda takvim bir popover yerine alt sheet'te açılır; böylece günler dokunmak için yeterince büyük kalır.
Kontrollü
value ve onValueChange geçin. Temizlenen değerler null'dır. Takvim her zaman seçili tarihin ayında açılır ve bir gün seçmek onu kapatır ve odağı düğmeye geri verir.
Aralık
<DateRangePicker /> büyük ekranlarda iki ay gösterir. İlk tıklama, bir aralık ayarlı olsa bile her zaman yeni bir aralık başlatır; ikinci tıklama onu her iki sırada da bitirir ve seçiciyi kapatır.
Devre dışı günler
calendarProps.disabled olarak herhangi bir react-day-picker eşleştiricisi geçin. Burada yalnızca gelecekteki hafta içi günler seçilebilir.
Ay ve yıl dropdown'ları
Doğum günü gibi uzak tarihler için captionLayout: "dropdown" ile birlikte bir startMonth ve endMonth ayarlayın. Trigger'ı id'sine işaret eden bir <label /> ile etiketleyin.
Bir formda
name ile tek bir tarih 2026-10-14, bir aralık 2026-10-20/2026-10-24 olarak gönderilir. Boş seçiciler boş bir dize gönderir.
Devre dışı
Devre dışı bir trigger yine de bir değer gösterebilir.
Dar kapsayıcı
Trigger asla kapsayıcısından büyümez. Uzun etiketler sarmak yerine kısaltılır.
Sheet içinde
Seçici sheet'in üstünde katmanlanır ve Escape yalnızca seçiciyi kapatır.
Sağdan sola
Trigger etiketi için locale ve takvim için calendarProps içinde dir: "rtl" ile bir react-day-picker locale'i geçin. Ok tuşları yönü izler.
| Tuş | Action |
|---|---|
| EnterSpace | Trigger üzerinde, seçiciyi açar ve seçili güne veya bugüne odaklanır. Bir günde, onu seçer. |
| ←→ | Önceki veya sonraki güne geçer. |
| ↑↓ | Önceki veya sonraki haftanın aynı gününe geçer. |
| Page UpPage Down | Önceki veya sonraki aya geçer. |
| ShiftPage Up | Önceki yıla geçer. Shift Page Down sonrakine geçer. |
| HomeEnd | Haftanın başına veya sonuna geçer. |
| Esc | Seçiciyi kapatır ve odağı trigger'a geri verir. |
- Popover
titleile etiketlenir ve alt sheet onu bir başlık olarak gösterir.placeholderile birlikte çevirin. - Trigger'ın kendine ait görünür bir etiketi yoktur. Onu bir
<label />ile eşleştirin veyaaria-labelgeçin. - Devre dışı günler klavye tarafından atlanır ve kullanılamaz olarak duyurulur.
Her iki seçici de aşağıdaki prop'ları paylaşır ve bir popover veya alt sheet içinde bir <Calendar /> olan bir <Button /> trigger'ı render eder.
| Prop | Tür | Varsayılan |
|---|---|---|
value | Date | null | – |
defaultValue | Date | null | null |
onValueChange | (value: Date | null) => void | – |
placeholder | string | "Pick a date" |
titlePopover'ın erişilebilir adı, sheet'in başlığı. | string | "Select a date" |
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open: boolean) => void | – |
localeTrigger etiketini Intl.DateTimeFormat ile biçimlendirir. Takvimi de çevirmek için calendarProps içinde bir react-day-picker locale'i geçin. | string | "en-US" |
clearableBir değer olduğunda takvimin altına bir Clear düğmesi ekler. | boolean | false |
clearLabel | string | "Clear" |
nameDeğerin formuyla birlikte gönderilmesi için gizli bir girdi render eder. | string | – |
calendarPropsmode, selected, onSelect, required, numberOfMonths ve autoFocus hariç takvime geçirilir. Devre dışı günler, captionLayout, startMonth, endMonth, locale ve dir için kullanın. | CalendarProps | – |
variantTrigger bir Button'dır ve diğer prop'larını da kabul eder. | Button variant | "outline" |
disabled | boolean | false |
classNameVarsayılan olarak w-60 olan trigger'a uygulanır. | string | – |
| Prop | Tür | Varsayılan |
|---|---|---|
value | { from: Date; to?: Date } | null | – |
defaultValue | { from: Date; to?: Date } | null | null |
onValueChangeİkinci gün seçildikten sonra çağrılır. | (value: DateRange | null) => void | – |
placeholder | string | "Pick a date range" |
title | string | "Select dates" |
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open: boolean) => void | – |
localeTrigger etiketini Intl.DateTimeFormat ile biçimlendirir. Takvimi de çevirmek için calendarProps içinde bir react-day-picker locale'i geçin. | string | "en-US" |
clearableBir değer olduğunda takvimin altına bir Clear düğmesi ekler. | boolean | false |
clearLabel | string | "Clear" |
nameDeğerin formuyla birlikte gönderilmesi için gizli bir girdi render eder. | string | – |
calendarPropsmode, selected, onSelect, required, numberOfMonths ve autoFocus hariç takvime geçirilir. Devre dışı günler, captionLayout, startMonth, endMonth, locale ve dir için kullanın. | CalendarProps | – |
variantTrigger bir Button'dır ve diğer prop'larını da kabul eder. | Button variant | "outline" |
disabled | boolean | false |
classNameVarsayılan olarak w-60 olan trigger'a uygulanır. | string | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="date-picker-trigger" | Trigger düğmesi. |
data-empty | Değer yokken trigger üzerinde bulunur. Placeholder'ı soluk metinle gösterir. |
data-popup-open | Seçici açıkken trigger üzerinde bulunur. |
data-slot="date-picker-content" | Takvimi popover veya sheet içine sarar. |
data-slot="date-picker-clear" | Clear düğmesi. |
- ButtonHer varyant ve boyutta düğmeler; hızlı istekler için spinner'ı atlayan yerleşik yükleme, başarı ve hata akışı.
- CalendarTekli, aralık ve çoklu seçim için, kayan aylar, aralık önizlemeleri ve dokunmaya uygun boyutta günler içeren bir tarih ızgarası.
- PopoverBir trigger'a sabitlenen, içeriğiyle birlikte düzgünce yeniden boyutlanan ve trigger'ın yönünü izleyen yüzen bir panel.
- SheetHerhangi bir kenardan kayarak gelen bir panel; kaydırarak kapatma, kaydırma kilidi ve üst üste iç içe geçme desteği vardır.
- Checkboxİşareti çizilerek beliren, belirsiz üst öğeleri, grupları ve hover durumunu paylaşan etiketleri olan bir onay kutusu.
- ComboboxÇipler, gruplar ve asenkron sonuçlar içeren, siz yazdıkça boyutu değişen bir açılır pencerede filtrelenebilir bir select.
Kullanıldığı bloklar
Date picker üzerine kurulan bloklar.