Tema Geçersiz Kılma

Tailwind v3 paketi, tüm stillendirme için somut Tailwind yardımcı sınıflarını (ör. sky-500, slate-100) kullanır. Paketten dışa aktarılan tema nesnesini geçersiz kılarak görünümü özelleştirebilirsiniz.

Varsayılan Tema

Tema, her biri bir bileşen parçası için sınıf adı dizeleri içeren bir dizi dışa aktarılmış nesne olarak tanımlanır. İşte varsayılan renk paletine bir genel bakış:

RolLight SınıfıDark Sınıfı
Birincilsky-500sky-500
Birincil metinsky-500sky-400
Arka planwhiteslate-950
Yüzey üzerine gelmeslate-100slate-800
Metinslate-900slate-50
Sessiz metinslate-500slate-400
Kenarlıkslate-200slate-800
Aralık arka planısky-50sky-950/50
Tehlikered-500red-600

Tema Nesne Yapısı

Tema, birden çok adlandırılmış dışa aktarıma bölünmüştür:

import {
rootClassNames,
triggerClassNames,
headerClassNames,
gridClassNames,
dayClassNames,
footerClassNames,
contentClassNames,
rangeClassNames,
dateTimeClassNames,
timePanelClassNames,
} from "react-date-range-picker-tailwind3";

Her nesne, tam Tailwind sınıf dizelerine eşlenen anahtarlar içerir. Örneğin:

// dayClassNames
{
day: "flex items-center justify-center w-9 h-9 mx-[1px] rounded-md transition-colors cursor-pointer hover:bg-slate-100 dark:hover:bg-slate-800 ...",
today: "font-bold text-sky-500 dark:text-sky-400",
selected: "bg-sky-500 dark:bg-sky-500 text-white font-semibold ...",
inRange: "bg-sky-50 dark:bg-sky-950/50 text-slate-900 dark:text-slate-50 rounded-none mx-0 ...",
rangeStart: "bg-sky-500 dark:bg-sky-500 text-white rounded-r-none mx-0 ...",
rangeEnd: "bg-sky-500 dark:bg-sky-500 text-white rounded-l-none mx-0 ...",
// ...
}

Bileşik Bileşenlerle Geçersiz Kılma

Temayı özelleştirmenin en basit yolu Bileşik Bileşen API’sini kullanmaktır. Her parça, varsayılanlarla twMerge kullanılarak birleştirilen bir className prop’u kabul eder, böylece çakışan yardımcı programlar doğru şekilde çözülür.

Birincil Rengi Değiştir

Seçili gün ve ilgili durumlar için sky’ı violet ile değiştirin:

import { DatePicker } from "react-date-range-picker-tailwind3";
function VioletPicker() {
const [value, setValue] = useState<Date | null>(null);
return (
<DatePicker.Root value={value} onChange={setValue}>
<DatePicker.Trigger className="hover:border-violet-500/50 focus-visible:ring-violet-500 focus-visible:border-violet-500" />
<DatePicker.Content>
<DatePicker.Header>
<DatePicker.PrevButton className="focus-visible:ring-violet-500" />
<DatePicker.Title />
<DatePicker.NextButton className="focus-visible:ring-violet-500" />
</DatePicker.Header>
<DatePicker.Grid
dayClassName="hover:bg-violet-50 dark:hover:bg-violet-950/50 focus-visible:ring-violet-500"
dayTodayClassName="text-violet-500 dark:text-violet-400"
daySelectedClassName="bg-violet-500 dark:bg-violet-500 hover:bg-violet-500/90"
dayInRangeClassName="bg-violet-50 dark:bg-violet-950/50 hover:bg-violet-100"
dayRangeStartClassName="bg-violet-500 dark:bg-violet-500 hover:bg-violet-500/90"
dayRangeEndClassName="bg-violet-500 dark:bg-violet-500 hover:bg-violet-500/90"
dayFocusedClassName="ring-violet-500"
/>
<DatePicker.Footer>
<DatePicker.ClearButton />
<DatePicker.CancelButton />
<DatePicker.ConfirmButton className="bg-violet-500 hover:bg-violet-500/90 focus-visible:ring-violet-500" />
</DatePicker.Footer>
</DatePicker.Content>
</DatePicker.Root>
);
}

Özel Arka Plan

<DatePicker.Root value={value} onChange={setValue}>
<DatePicker.Trigger className="bg-slate-50 dark:bg-slate-900" />
<DatePicker.Content className="bg-slate-50 dark:bg-slate-900">{/* ... */}</DatePicker.Content>
</DatePicker.Root>

Özel Bir Tema Nesnesi Oluşturma

Uygulama genelinde yeniden markalama için, özel sınıflarınızı tüm parçalara uygulayan bir sarmalayıcı bileşen oluşturun:

components/MyDatePicker.tsx
import { DatePicker } from "react-date-range-picker-tailwind3";
const myTheme = {
trigger: "hover:border-emerald-500/50 focus-visible:ring-emerald-500",
dayToday: "text-emerald-500 dark:text-emerald-400",
daySelected: "bg-emerald-500 dark:bg-emerald-500 hover:bg-emerald-500/90",
dayInRange: "bg-emerald-50 dark:bg-emerald-950/50 hover:bg-emerald-100",
dayRangeStart: "bg-emerald-500 dark:bg-emerald-500 hover:bg-emerald-500/90",
dayRangeEnd: "bg-emerald-500 dark:bg-emerald-500 hover:bg-emerald-500/90",
confirmButton: "bg-emerald-500 hover:bg-emerald-500/90 focus-visible:ring-emerald-500",
focusRing: "focus-visible:ring-emerald-500",
};
export function MyDatePicker(props) {
return (
<DatePicker.Root {...props}>
<DatePicker.Trigger className={myTheme.trigger} />
<DatePicker.Content>
<DatePicker.Header>
<DatePicker.PrevButton className={myTheme.focusRing} />
<DatePicker.Title />
<DatePicker.NextButton className={myTheme.focusRing} />
</DatePicker.Header>
<DatePicker.Grid
dayTodayClassName={myTheme.dayToday}
daySelectedClassName={myTheme.daySelected}
dayInRangeClassName={myTheme.dayInRange}
dayRangeStartClassName={myTheme.dayRangeStart}
dayRangeEndClassName={myTheme.dayRangeEnd}
dayFocusedClassName={myTheme.focusRing}
/>
<DatePicker.Footer>
<DatePicker.ClearButton />
<DatePicker.CancelButton />
<DatePicker.ConfirmButton className={myTheme.confirmButton} />
</DatePicker.Footer>
</DatePicker.Content>
</DatePicker.Root>
);
}

Uygulamanız boyunca kullanın:

<MyDatePicker value={date} onChange={setDate} />

Grid Günü Sınıfı Prop’ları

Grid bileşeni, güne ilişkin className prop’larını her bir Day hücresine iletir. Mevcut geçersiz kılmalar şunlardır:

PropVarsayılan Sınıf DeseniAçıklama
dayClassNameTemel gün stilleriTüm gün hücreleri için temel sınıflar
dayTodayClassNametext-sky-500Bugün göstergesi
daySelectedClassNamebg-sky-500 text-whiteSeçili gün
dayDisabledClassNameopacity-50Devre dışı bırakılmış günler
dayOutsideClassNametext-slate-500/50Ay dışındaki günler
dayHighlightedClassNameafter:bg-amber-500Vurgulama noktası
dayInRangeClassNamebg-sky-50Aralık içindeki günler
dayRangeStartClassNamebg-sky-500 rounded-r-noneAralık başlangıç günü
dayRangeEndClassNamebg-sky-500 rounded-l-noneAralık bitiş günü
dayRangeSingleClassNamebg-sky-500Tek günlük aralık
dayHoverRangeClassNamebg-sky-50/50Üzerine gelme önizleme aralığı
dayHoverTargetClassNamebg-sky-100Üzerine gelme bitiş noktası
dayFocusedClassNamering-sky-500Klavye odak halkası
dayEmptyClassNameinvisibleBoş hücre yer tutucusu

Tailwind Content Yolu

Özel renk sınıflarıyla geçersiz kılma yaparken, bunların Tailwind content yollarınıza dahil edildiğinden emin olun. Bileşen dosyalarınızda tanımlanan sınıflar varsayılan olarak taranır, ancak bunları ayrı bir yapılandırma dosyasında tanımlarsanız, o yolu da ekleyin:

tailwind.config.js
module.exports = {
content: [
"./src/**/*.{js,ts,jsx,tsx}",
"./node_modules/react-date-range-picker-tailwind3/dist/**/*.{js,mjs}",
// Tema yapılandırmanız ayrı bir dosyadaysa onu ekleyin
"./src/config/date-picker-theme.ts",
],
};
💡 Tip

Somut renk sınıfları yerine anlamsal belirteç tabanlı tema oluşturma (shadcn/ui gibi) istiyorsanız, CSS değişken tabanlı anlamsal belirteçler kullanan Tailwind v4 paketini kullanmayı düşünün.