Calendar
Tekli, aralık ve çoklu seçim için, kayan aylar, aralık önizlemeleri ve dokunmaya uygun boyutta günler içeren bir tarih ızgarası.
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
pnpm dlx shadcn@latest add https://hextaui.com/r/calendar.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 react-day-picker @base-ui/react @tabler/icons-react class-variance-authority cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/calendar.tsx components/ui/button.tsx lib/motion.ts İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Calendar, react-day-picker'ın <DayPicker /> bileşenini sarar; bu yüzden her DayPicker prop'u daypicker.dev'de belgelendiği gibi çalışır. HextaUI stil, ay geçişleri, aralık önizlemesi ve hydration açısından güvenli bir bugün ekler.
Aralık
mode="range" ile, ilk tıklamadan sonra bir günün üzerine gelmek veya odaklanmak, sonraki tıklamanın seçeceği aralığı önizler. numberOfMonths ayları yan yana gösterir; dar ekranlarda üst üste dizilir.
Aralık sınırları
min ve max aralık uzunluğunu gün olarak sınırlar. excludeDisabled ile, devre dışı bir günü içerecek bir aralık yeniden başlar.
Çoklu
mode="multiple" tek tek günleri açıp kapatır. max kaç günün seçilebileceğini sınırlar.
Ay ve yıl dropdown'ları
captionLayout="dropdown" başlığı yerel select'lerle değiştirir; böylece telefonlar kendi seçicisini alır. Yılları sınırlamak için startMonth ve endMonth ayarlayın.
Sınırlı
Gezinme startMonth ve endMonth değerlerinde durur, disabled ise pencere dışındaki günleri engeller. useToday() sunucu tarafı render sırasında güvenle kullanılabilecek bir bugün verir.
Kontrollü ay
Görünen ayı yönetmek için month ve onMonthChange geçin. Atlamalar gidiş yönünde kayar ve yükseklik 5 ile 6 haftalık satırlar arasında yumuşakça değişir.
Hafta numaraları
showWeekNumber bir hafta sütunu ekler. ISOWeek Pazartesi ile başlayan ISO numaralandırmasını kullanır. showOutsideDays={false} diğer aylardaki günleri gizler.
Sabit bugün
Vurgulanan günü sabitlemek için, testler veya başka bir saat dilimi için today geçin. animate={false} ay geçişlerini kapatır.
Sheet içinde
Bir sheet, popover veya diyalog içinde takvim kendi arka planını bırakır ve yüzeyle kaynaşır.
Sağdan sola
react-day-picker/locale içinden bir locale ve dir="rtl" geçin. Oklar, gezinme ve kayma yönünün hepsi yansıtılır. dir="rtl" olan bir DirectionProvider içinde yön otomatik olarak alınır.
Bir güne odaklanın, sonra bu tuşları kullanın. Görünen ayı aşmak ayı değiştirir.
| Tuş | Action |
|---|---|
| ←→ | Önceki veya sonraki gün. Sağdan sola düzenlerde ters çevrilir. |
| ↑↓ | Önceki veya sonraki haftanın aynı günü. |
| Shift←→ | Önceki veya sonraki ay. |
| Shift↑↓ | Önceki veya sonraki yıl. |
| Page UpPage Down | Önceki veya sonraki ay. |
| ShiftPage UpPage Down | Önceki veya sonraki yıl. |
| Home | Haftanın ilk günü. |
| End | Haftanın son günü. |
| EnterSpace | Odaktaki günü seçer. |
- Ay bir ızgaradır. Her gün tam tarih etiketli bir düğmedir ve seçili günler
aria-selectedayarlar. - Klavyeyle yapılan ay değişiklikleri kaymayı atlar ve yalnızca solar; böylece odak, hareket eden bir ızgaranın altında asla kaymaz.
- Azaltılmış harekette ay değişiklikleri solar ve yükseklik değişimi anlıktır.
- Dokunmatik ekranlarda gün hücreleri 44px'e büyür.
Tüm <DayPicker /> prop'larını kabul eder. Aşağıdaki varsayılanlar DayPicker'dakilerden farklıdır veya HextaUI tarafından eklenmiştir.
| Prop | Tür | Varsayılan |
|---|---|---|
modeMod olmadan günler seçilemez. | "single" | "multiple" | "range" | – |
selectedMod ile eşleşir. | Date | Date[] | DateRange | – |
onSelect | (selected, triggerDate, modifiers, event) => void | – |
requiredSon seçimin kaldırılmasını engeller. | boolean | – |
minBir aralıktaki veya multiple modunda seçilecek en az gün. | number | – |
maxBir aralıktaki veya multiple modunda seçilebilecek en fazla gün. | number | – |
excludeDisabledAralık modu. | boolean | – |
disabled | Matcher | Matcher[] | – |
monthKontrollü ay. | Date | – |
defaultMonth | Date | – |
onMonthChange | (month: Date) => void | – |
startMonth | Date | – |
endMonth | Date | – |
numberOfMonths | number | 1 |
captionLayout | "label" | "dropdown" | "dropdown-months" | "dropdown-years" | "label" |
navLayoutHextaUI varsayılanı. Oklar başlığın iki yanında durur. | "around" | "after" | "around" |
showOutsideDaysHextaUI varsayılanı. | boolean | true |
animateAy kayması ve yükseklik geçişleri. HextaUI varsayılanı. | boolean | true |
buttonVariantÖnceki ve sonraki düğmelerin variant'ı. | Button variant | "ghost" |
showWeekNumber | boolean | false |
ISOWeek | boolean | false |
weekStartsOn | 0 | 1 | 2 | 3 | 4 | 5 | 6 | – |
fixedWeeks | boolean | false |
todayVarsayılan olarak istemcinin bugünüdür; gece yarısı ve hydration boyunca senkron tutulur. | Date | – |
timeZone | string | – |
locale | Partial<DayPickerLocale> | – |
dir | "ltr" | "rtl" | – |
footer | ReactNode | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="calendar" | CSS'te takvim kökünü hedefleyin. |
--cell-size | Gün hücresi boyutu. 36px, dokunmatik ekranlarda 44px. |
--cell-radius | Gün hücrelerinin ve düğmelerinin köşe yarıçapı. |
data-slot="calendar-day" | Gün hücreleri. data-selected, data-disabled, data-outside, data-today, data-hidden ve data-focused taşır. |
data-preview | Gün hücrelerinde: üzerine gelinen aralık önizlemesinin başı, ortası veya sonu. |
data-range-middle | Seçili bir aralığın içindeki gün hücrelerinde. |
Her günün içindeki düğme. Kendinizinkini components={{ DayButton }} ile geçin ve stili korumak için bunu yeniden kullanın.
| Öznitelik | Açıklama |
|---|---|
data-slot="calendar-day-button" | CSS'te gün düğmelerini hedefleyin. |
data-day | 2026-10-03 gibi ISO tarihi. |
data-today | Bugün üzerinde bulunur; dışarıdaki günler hariç. |
data-selected-single | Aralığın dışında seçili. |
data-range-start | Aralığın ilk günü. |
data-range-middle | Aralığın içindeki bir gün. |
data-range-end | Aralığın son günü. |
İstemcide bugünü Date olarak, sunucu tarafı render sırasında undefined döndürür; böylece ondan türetilen sınırlar asla hydration uyuşmazlığına yol açmaz. Gece yarısı güncellenir. useToday kılavuzuna bakın.
- ButtonHer varyant ve boyutta düğmeler; hızlı istekler için spinner'ı atlayan yerleşik yükleme, başarı ve hata akışı.
- MotionHer bileşenin kullandığı yumuşatma eğrileri, süreler ve azaltılmış hareket denetimi; ayrıca boyut dönüşümleri ve kayan vurgular için hook'lar.
- useTodayGece yarısı ve sekme geri geldiğinde güncellenen, hydration uyuşmazlığı oluşturmayan bugünün tarihi.
- 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.
- Date pickerTek tarihler ve aralıklar için takvimi bir popover içinde, telefonlarda ise alt sayfa olarak açan bir düğme.