A lightweight, zero-dependency datepicker with a powerful plugin architecture. Built for modern web applications.
Try each plugin configuration. Click on input fields to open the datepicker.
Basic datepicker functionality
import { BWDatePicker } from '@bw-ui/datepicker';
import '@bw-ui/datepicker/css';
const picker = new BWDatePicker('#date-input', {
mode: 'popup',
format: 'YYYY-MM-DD',
});
Dark mode & CSS variables
import { ThemingPlugin } from '@bw-ui/datepicker-theming';
picker.use(ThemingPlugin, {
theme: 'dark',
autoDetect: true,
persist: true,
});
Auto-flip & viewport collision
import { PositioningPlugin } from '@bw-ui/datepicker-positioning';
picker.use(PositioningPlugin, {
placement: 'top',
alignment: 'left',
autoFlip: true,
offset: { x: 0, y: 8 },
});
Keyboard nav, ARIA, focus trap
import { AccessibilityPlugin } from '@bw-ui/datepicker-accessibility';
picker.use(AccessibilityPlugin, {
enableKeyboardNav: true,
enableFocusTrap: true,
enableAnnouncer: true,
});
17+ languages, i18n support
import { LocalePlugin } from '@bw-ui/datepicker-locale';
picker.use(LocalePlugin, {
locale: 'fr-FR',
firstDayOfWeek: 1,
});
Touch & swipe gestures
import { MobilePlugin } from '@bw-ui/datepicker-mobile';
picker.use(MobilePlugin, {
enableTouch: true,
enableSwipe: true,
swipeThreshold: 50,
});
Input masking & validation
import { InputHandlerPlugin } from '@bw-ui/datepicker-input-handler';
picker.use(InputHandlerPlugin, {
format: 'DD/MM/YYYY',
enableMask: true,
validateOnBlur: true,
});
Date manipulation utilities
import { DateUtilsPlugin } from '@bw-ui/datepicker-date-utils';
picker.use(DateUtilsPlugin);
const utils = picker.getPlugin('date-utils');
utils.calculator.addDays(new Date(), 7);
Select date ranges with presets
import { RangePlugin } from '@bw-ui/datepicker-range';
picker.use(RangePlugin, {
presets: [
'today',
'last7days',
'thisQuarter',
]
});
Side-by-side month view
import { DualCalendarPlugin } from '@bw-ui/datepicker-dual-calendar';
picker.use(DualCalendarPlugin, {
monthsToShow: 2,
syncNavigation: true,
});
Async data loading & badges
import { DataPlugin } from '@bw-ui/datepicker-data';
picker.use(DataPlugin, {
loader: async (month, year) => {
const res = await fetch(`/api/events?m=${month}&y=${year}`);
return res.json();
},
showBadges: true,
});
All plugins combined
import { BWDatePicker } from '@bw-ui/datepicker';
import { ThemingPlugin } from '@bw-ui/datepicker-theming';
import { PositioningPlugin } from '@bw-ui/datepicker-positioning';
import { AccessibilityPlugin } from '@bw-ui/datepicker-accessibility';
const picker = new BWDatePicker('#date')
.use(ThemingPlugin, { theme: 'dark' })
.use(PositioningPlugin, { autoFlip: true })
.use(AccessibilityPlugin);
Always visible calendar
new BWDatePicker('#calendar', {
mode: 'inline',
});
Centered overlay dialog
new BWDatePicker('#date', {
mode: 'modal',
});
Select multiple dates with validation
import { MultiDatePlugin } from '@bw-ui/datepicker-multidate';
new BWDatePicker('#date')
.use(MultiDatePlugin, {
maxDates: 2,
minDates: 2,
format: 'MM.DD.YYYY',
separator: ' | ',
showClearButton: true,
showCountBadge: true,
});
Install only what you need. Each plugin is a separate package.