Overview
The @kuzenbo/date package provides comprehensive date and time components powered by date-fns. Build calendars, date pickers, time pickers, and more with full timezone support and internationalization.
This package is currently in preview and not yet published to npm. The API may change before the stable release.
Installation
Once published, install with:
npm install @kuzenbo/date @kuzenbo/core @kuzenbo/theme react react-dom
Components
Calendar Full-featured calendar with month/year navigation
DatePicker Date selection with dropdown calendar
DatePickerInput Text input with date picker overlay
DateTimePicker Combined date and time selection
DateInput Controlled date text input
TimePicker Time selection component
TimeInput Text input for time values
MonthPicker Month selection component
YearPicker Year selection component
MiniCalendar Compact calendar display
Hooks
useDatesState Manage date selection state
useDatesInput Handle date input interactions
useUncontrolledDates Uncontrolled date state management
useDatesContext Access date provider context
Basic Usage
Date Picker
import { DatePicker } from '@kuzenbo/date' ;
import { useState } from 'react' ;
export function DatePickerDemo () {
const [ date , setDate ] = useState < Date | null >( null );
return (
< DatePicker
value = { date }
onChange = { setDate }
placeholder = "Select a date"
/>
);
}
Date Range Picker
import { DatePickerInput } from '@kuzenbo/date' ;
import { useState } from 'react' ;
export function DateRangePicker () {
const [ range , setRange ] = useState <[ Date | null , Date | null ]>([ null , null ]);
return (
< DatePickerInput
selectionMode = "range"
value = { range }
onChange = { setRange }
placeholder = "Select date range"
/>
);
}
Calendar
import { Calendar } from '@kuzenbo/date' ;
import { useState } from 'react' ;
export function CalendarDemo () {
const [ selected , setSelected ] = useState < Date >( new Date ());
return (
< Calendar
value = { selected }
onChange = { setSelected }
firstDayOfWeek = { 1 } // Monday
/>
);
}
Date Time Picker
import { DateTimePicker } from '@kuzenbo/date' ;
import { useState } from 'react' ;
export function DateTimeDemo () {
const [ dateTime , setDateTime ] = useState < Date >( new Date ());
return (
< DateTimePicker
value = { dateTime }
onChange = { setDateTime }
withTime
/>
);
}
Time Picker
import { TimePicker } from '@kuzenbo/date' ;
import { useState } from 'react' ;
export function TimePickerDemo () {
const [ time , setTime ] = useState < string >( '12:00' );
return (
< TimePicker
value = { time }
onChange = { setTime }
format = "24h"
/>
);
}
Selection Modes
Support for different date selection patterns:
import { DatePicker } from '@kuzenbo/date' ;
// Single date
< DatePicker selectionMode = "single" />
// Multiple dates
< DatePicker selectionMode = "multiple" />
// Date range
< DatePicker selectionMode = "range" />
Custom date display formats:
import { DatePickerInput } from '@kuzenbo/date' ;
< DatePickerInput
value = { date }
onChange = { setDate }
format = "MM/dd/yyyy"
valueFormatter = { ( date ) => format ( date , 'PPP' ) }
/>
Locale Support
Internationalization with date-fns locales:
import { DatesProvider } from '@kuzenbo/date' ;
import { es } from 'date-fns/locale' ;
export function App ({ children }) {
return (
< DatesProvider locale = { es } >
{ children }
</ DatesProvider >
);
}
Timezone Support
Handle timezones with date-fns-tz:
import { DateTimePicker } from '@kuzenbo/date' ;
import { formatInTimeZone } from '@date-fns/tz' ;
export function TimezonePicker () {
return (
< DateTimePicker
withTime
timezone = "America/New_York"
valueFormatter = { ( date ) =>
formatInTimeZone ( date , 'America/New_York' , 'PPpp zzz' )
}
/>
);
}
Date Constraints
Restrict selectable dates:
import { DatePicker } from '@kuzenbo/date' ;
import { addDays , subDays } from 'date-fns' ;
const today = new Date ();
< DatePicker
minDate = { subDays ( today , 30 ) }
maxDate = { addDays ( today , 30 ) }
excludeDate = { ( date ) => date . getDay () === 0 || date . getDay () === 6 }
/>
Custom Date Adapter
Use a custom date library:
import { createDateAdapter } from '@kuzenbo/date' ;
import { format , parse } from 'date-fns' ;
const customAdapter = createDateAdapter ({
parse : ( value , formatStr ) => parse ( value , formatStr , new Date ()),
format : ( date , formatStr ) => format ( date , formatStr ),
// ... other adapter methods
});
< DatesProvider adapter = { customAdapter } >
{ children }
</ DatesProvider >
Dependencies
date-fns - Date manipulation library
@date-fns/tz - Timezone support
@date-fns/utc - UTC utilities
@kuzenbo/core - Core components
@hugeicons/react - Icons
tailwind-variants - Styling
Peer Dependencies
{
"@kuzenbo/core" : "^0.0.7" ,
"@kuzenbo/theme" : "^0.0.7" ,
"react" : "^19.0.0" ,
"react-dom" : "^19.0.0"
}
TypeScript
Fully typed date components:
import { DatePicker } from '@kuzenbo/date' ;
import type { DatePickerProps , DateValue } from '@kuzenbo/date' ;
const MyDatePicker : React . FC <{ onChange : ( date : DateValue ) => void }> = ({
onChange ,
}) => {
return < DatePicker onChange = { onChange } /> ;
};
Next Steps
Core Components Explore other UI components