What's New
Stay up to date with the latest features and improvements
Version 4.2.0 Released!
March 18, 2026 - Wheel mode, compact-wheel, clear button, landscape fixes, and more
What's new:
- Wheel mode - Scroll-spinner interface replacing the analog clock face. Enable via
ui.mode: 'wheel' - Compact-wheel mode - Headerless wheel picker without the hour/minute inputs header. Enable via
ui.mode: 'compact-wheel' - Popover placement - Use
wheel.placementto open compact-wheel as a popover anchored to the input ('auto','top','bottom') - Hide disabled options - Set
wheel.hideDisabled: trueto completely remove disabled values instead of dimming them - Auto-commit on scroll - Set
wheel.commitOnScroll: trueto auto-confirm time at scroll end without pressing OK - Clear button - Reset time selection with a dedicated button, enabled by default via
ui.clearButton - clearBehavior options - Control whether clearing empties the input value with
clearBehavior.clearInput - onClear callback & event - New callback and EventEmitter event with
previousValuepayload - New exported types -
ClearEventData,ClearBehaviorOptions,WheelScrollStartEventData,WheelScrollEndEventData - Persist on outside click - Set
wheel.ignoreOutsideClick: trueto keep the picker open when clicking outside its area (wheel and compact-wheel modes) - Race condition fix - Rapidly clicking the input before the modal fully opened no longer causes the picker to get stuck invisible in the DOM or permanently blocks the input
- Range landscape fix - From/To tabs now properly positioned in landscape orientation
- Timezone landscape fix - Timezone picker layout corrected in landscape orientation with CSS Grid
- AM/PM border theming - Landscape border color now uses theme variable instead of hardcoded black
Version 4.1.0
January 31, 2026 - New features and UX improvements
What's new:
- Range Plugin - New! Select time ranges with start/end pickers, duration calculation, and validation
- Timezone Plugin - New! Timezone selector with searchable dropdown and UTC offset display
- Plugin architecture - Tree-shakeable plugins for smaller core bundle size
- Smooth hour snapping - Fluid hour dragging with animation (new default)
What's New in v4.0.0
Version 4.0.0 brought major improvements in architecture, TypeScript support, and developer experience.
Grouped Options Architecture
Options are now organized into logical groups for better clarity and maintainability.
Old API (v3.x)
const picker = new TimepickerUI(input, {clockType: '12h',theme: 'dark',mobile: true,animation: true,incrementMinutes: 5,okLabel: 'Confirm',cancelLabel: 'Close'});
New API (v4.0.0)
const picker = new TimepickerUI(input, {clock: {type: '12h',incrementMinutes: 5},ui: {theme: 'dark',mobile: true,animation: true},labels: {ok: 'Confirm',cancel: 'Close'}});
Five Main Groups
- clock: Time format, increments, disabled times, auto-switch behavior
- ui: Theme, animations, mobile mode, backdrop, icons
- labels: All text labels (OK, Cancel, AM/PM, etc.)
- behavior: Focus trap, delays, input focus after close
- callbacks: All event handlers in one place
Enhanced TypeScript Support
Complete type safety with strict interfaces and better IntelliSense.
- Fully typed options with detailed documentation
- Typed event payloads for all callbacks
- Better autocomplete in modern IDEs
- Strict mode compatible (no any, no unknown)
New Features
Keyboard Navigation
Use Arrow Up/Down keys to increment/decrement hour and minute values with live clockface updates.
- • Works in both 12h and 24h modes
- • Proper wrap-around (59→00, 12→01)
- • Smooth clock hand animations
Improved Accessibility
Dynamic tabindex management ensures hidden elements are not focusable.
Glassmorphic Theme
New theme with backdrop-filter blur effect for modern glass UI.
Architecture Improvements
- Composition over Inheritance: No class hierarchies, only explicit composition
- Manager Pattern: Independent, testable managers for each concern
- SSR Safety: Full compatibility with Next.js, Nuxt, Remix, and other SSR frameworks
- Pure State Container: Centralized state with no side effects
- Event-Driven: Clean event system for all interactions
Breaking Changes
v4.0.0 introduces breaking changes in the options structure. See the migration guide below.
clockType: '12h'clock: { type: '12h' }Migration Guide
Option Mapping
| v3.x | v4.0.0 |
|---|---|
clockType | clock.type |
theme | ui.theme |
mobile | ui.mobile |
animation | ui.animation |
okLabel | labels.ok |
cancelLabel | labels.cancel |
incrementMinutes | clock.incrementMinutes |
focusTrap | behavior.focusTrap |
Complete Migration Example
// v3.xconst picker = new TimepickerUI(input, {clockType: '24h',theme: 'dark',mobile: true,animation: true,incrementMinutes: 15,okLabel: 'Confirm',cancelLabel: 'Close',focusTrap: true});// v4.0.0const picker = new TimepickerUI(input, {clock: {type: '24h',incrementMinutes: 15},ui: {theme: 'dark',mobile: true,animation: true},labels: {ok: 'Confirm',cancel: 'Close'},behavior: {focusTrap: true}});
Ready to upgrade?
Check out the full documentation to explore all new features and options.