Theming
Kaal provides two approaches to theming: themeOverrides prop (recommended for web and flexible theming) and KaalProvider (for native apps using react-native-unistyles).
themeOverrides (Recommended)
The themeOverrides prop lets you customize colors directly on the component without any provider setup. This is the recommended approach for:
- Web applications (Next.js, Expo Web)
- Integrating with your existing design system
- Quick customization without theme providers
Live Example - Light/Dark Mode Toggle
Integrating with Your Design System
The themeOverrides approach makes it easy to integrate Kaal with your existing design system. Here's an example of how you might integrate with a theme from your app:
import { DatePicker, TimePicker, type TimeValue } from '@dreamstack-us/kaal';
import { useTheme } from 'your-theme-library'; // e.g., unistyles, styled-components, etc.
function ScheduleModal() {
const { theme } = useTheme();
const [date, setDate] = useState(new Date());
const [time, setTime] = useState<TimeValue>({ hours: 9, minutes: 0 });
return (
<View>
<DatePicker
value={date}
onChange={setDate}
weekStartsOn={0}
themeOverrides={{
primaryColor: theme.colors.primary,
cellSelectedColor: theme.colors.primary,
cellTodayColor: theme.colors.primaryMuted,
textColor: theme.colors.text,
textSelectedColor: theme.colors.textOnPrimary,
textDisabledColor: theme.colors.textTertiary,
backgroundColor: theme.colors.surface,
borderRadius: theme.borderRadius.lg,
}}
/>
<TimePicker
value={time}
onChange={setTime}
minuteInterval={15}
themeOverrides={{
primaryColor: theme.colors.primary,
wheelContainerBackground: theme.colors.surface,
wheelTextColor: theme.colors.text,
backgroundColor: theme.colors.surface,
}}
/>
</View>
);
}
Brand Colors Example
Customize the pickers to match your brand:
Week Start Configuration
Use weekStartsOn to set the first day of the week:
// Sunday first (US, most of the Americas, Japan)
<DatePicker weekStartsOn={0} ... />
// Monday first (Europe, most of Asia, Australia)
<DatePicker weekStartsOn={1} ... />
KaalProvider (Alternative)
For native apps using react-native-unistyles, you can also use the theme provider approach:
import { KaalProvider } from '@dreamstack-us/kaal';
import { kaalNativeTheme } from '@dreamstack-us/kaal-themes';
export default function App() {
return (
<KaalProvider theme={kaalNativeTheme}>
{/* Your app */}
</KaalProvider>
);
}
Built-in Themes
import {
kaalNativeTheme, // Cross-platform native look
kaalIOSTheme, // iOS-specific styling
kaalMaterialTheme, // Material Design 3
} from '@dreamstack-us/kaal-themes';
Next Steps
- Basic DatePicker - Get started with date selection
- TimePicker iOS - iOS-style wheel picker
- DatePicker API - Full API reference