색상
래퍼 요소에서 CSS 사용자 지정 속성(custom properties)을 재정의하여 런타임에 색상 테마를 전환하세요. Tailwind v4 패키지는 시맨틱 토큰에서 모든 색상을 읽으므로, 기본 CSS 변수를 변경하면 전체 피커의 브랜드 색상이 즉시 변경됩니다.
Tailwind v4 패키지는 시맨틱 토큰에 oklch 형식을 사용합니다. --color-primary와 --color-primary-foreground를 재정의하여 피커의 브랜드를 변경하세요:
import { useState } from "react";import { DatePicker } from "react-date-range-picker-tailwind4";
const themes = { default: {}, purple: { "--color-primary": "oklch(0.541 0.281 293.009)", "--color-primary-foreground": "oklch(1 0 0)", }, rose: { "--color-primary": "oklch(0.586 0.237 17.584)", "--color-primary-foreground": "oklch(1 0 0)", }, emerald: { "--color-primary": "oklch(0.696 0.17 162.48)", "--color-primary-foreground": "oklch(1 0 0)", },} as const;
type ThemeName = keyof typeof themes;
function CompoundColorTheme() { const [value, setValue] = useState<Date | null>(null); const [theme, setTheme] = useState<ThemeName>("default");
return ( <div> <div style={{ display: "flex", gap: 8, marginBottom: 12 }}> {(Object.keys(themes) as ThemeName[]).map((name) => ( <button key={name} onClick={() => setTheme(name)} style={{ padding: "4px 12px", borderRadius: 4, border: `1px solid ${theme === name ? "#3b82f6" : "#d1d5db"}`, background: theme === name ? "#eff6ff" : "#fff", cursor: "pointer", fontSize: 13, textTransform: "capitalize", }} > {name} </button> ))} </div> <DatePicker.Root value={value} onChange={setValue} inline style={themes[theme] as React.CSSProperties} > <DatePicker.Content> <DatePicker.Header> <DatePicker.PrevButton /> <DatePicker.Title /> <DatePicker.NextButton /> </DatePicker.Header> <DatePicker.Grid /> </DatePicker.Content> </DatePicker.Root> </div> );}March 2026
Su
Mo
Tu
We
Th
Fr
Sa
팝업 모드
이 기법은 팝업 피커에서도 동일하게 작동합니다:
import { useState } from "react";import { DatePicker } from "react-date-range-picker-tailwind4";
const themes = { default: {}, purple: { "--color-primary": "oklch(0.541 0.281 293.009)", "--color-primary-foreground": "oklch(1 0 0)", }, rose: { "--color-primary": "oklch(0.586 0.237 17.584)", "--color-primary-foreground": "oklch(1 0 0)", }, emerald: { "--color-primary": "oklch(0.696 0.17 162.48)", "--color-primary-foreground": "oklch(1 0 0)", },} as const;
type ThemeName = keyof typeof themes;
function CompoundColorThemePopup() { const [value, setValue] = useState<Date | null>(null); const [theme, setTheme] = useState<ThemeName>("default");
return ( <div> <div style={{ display: "flex", gap: 8, marginBottom: 16 }}> {(Object.keys(themes) as ThemeName[]).map((name) => ( <button key={name} onClick={() => setTheme(name)} style={{ padding: "4px 12px", borderRadius: 4, border: `1px solid ${theme === name ? "#3b82f6" : "#d1d5db"}`, background: theme === name ? "#eff6ff" : "#fff", cursor: "pointer", fontSize: 13, textTransform: "capitalize", }} > {name} </button> ))} </div> <DatePicker.Root value={value} onChange={setValue} style={themes[theme] as React.CSSProperties} > <DatePicker.Trigger /> <DatePicker.Content> <DatePicker.Header> <DatePicker.PrevButton /> <DatePicker.Title /> <DatePicker.NextButton /> </DatePicker.Header> <DatePicker.Grid /> <DatePicker.Footer> <DatePicker.ClearButton /> <DatePicker.CancelButton /> <DatePicker.ConfirmButton /> </DatePicker.Footer> </DatePicker.Content> </DatePicker.Root> </div> );}