UNPKG

@uplink-protocol/calendar-controller

Version:

Flexible calendar and time picker API supporting both calendar, date-picker, and time-picker integrations for any JavaScript framework or library

241 lines (197 loc) 10.1 kB
# Changelog All notable changes to the `@uplink-protocol/calendar-controller` package will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.3.0] - 2025-06-26 ### Added - **TimeController - Complete Time Picker Solution** - Introduced `TimeControllerClass` with comprehensive time selection functionality - Service-oriented architecture with 10 specialized time services: - `TimeService` - Core time operations and utilities - `TimeFormattingService` - Time formatting and localization - `TimeSelectionService` - Time selection logic and range handling - `TimeViewStateService` - Reactive bindings and UI state management - `TimeEventManagerService` - Event handling and emission - `TimeNavigationService` - Time navigation and focus management - `TimeConstraintsService` - Time validation and constraints - `TimeGeneratorService` - Time view generation - `TimeConfigurationService` - Configuration processing - `TimeValidationService` - Time validation logic - **Comprehensive Time Features** - Single time selection and time range selection modes - 12-hour and 24-hour format support with automatic AM/PM handling - Configurable time segments (hours, minutes, seconds, milliseconds) - Step-based time navigation (1, 5, 10, 15, 30 minute/second steps) - Advanced time constraints (min/max times, disabled times/hours/minutes/seconds) - Accessibility-focused segment navigation and keyboard support - **Rich Time Configuration Options** - Initial time selection and range selection - Customizable time format options and locale-specific formatting - Flexible time display options (show/hide seconds, milliseconds) - Comprehensive constraint system for business rules - Event-driven architecture with 6 time-specific events - **Internationalization & Accessibility** - Full internationalization support with `Intl.DateTimeFormat` integration - Locale-aware time formatting and cultural time preferences - Complete accessibility support with ARIA-compliant focus management - Keyboard navigation between time segments - **Developer Experience** - Factory function `TimeController(options)` for easy instantiation - TypeScript-first with comprehensive type definitions - Reactive bindings for modern UI frameworks (React, Vue, Angular) - Extensive method library (40+ time manipulation methods) - Comprehensive test coverage with 23 test suites ### Enhanced - **Package Exports** - Added time controller exports to main index.ts - Updated TypeScript type definitions to include time types - Enhanced package keywords to include time-picker related terms - **Documentation** - Time controller capabilities documented in Examples/Time/ - Advanced time examples and demos included - Comprehensive time controller guide available ## [0.2.3] - 2025-06-26 ### Fixed - **Intl-Based Locale Formatting** - Fixed `getLocaleDefaultFormatOptions()` to use native `Intl.DateTimeFormat` for better locale detection - Enhanced cultural pattern recognition for date formatting preferences - Better support for unknown locales with automatic format option resolution - Maintains existing behavior while leveraging browser's native internationalization capabilities - Fixed all locale formatting default tests to pass with new Intl-based implementation - Ensured consistent behavior across different locale configurations ## [0.2.2] - 2025-06-25 ### Added - **Intelligent Locale-Based Date Formatting** - Enhanced `setLocale()` method to automatically apply appropriate format defaults for different locales - Added `getLocaleDefaultFormatOptions()` private method with comprehensive locale-specific formatting rules - Supports 15+ locales with culturally appropriate formatting (e.g., long month names for European locales, numeric formatting for English/Asian locales) - Language-only locale fallbacks (e.g., "de" falls back to "de-DE" defaults) - Unknown locale fallback to "en-US" formatting - **Enhanced Date Format Management** - `setDateFormatOptions()` now accepts `null` to reset to locale-appropriate defaults - Improved persistence of custom format options across locale changes - Better integration between `getFormattedDate()` and locale-specific formatting - **Comprehensive Test Coverage** - Added 33 new tests in `locale-formatting-defaults.test.ts` - Validates correct format options for all supported locales - Tests real-world formatting output against browser `Intl.DateTimeFormat` - Verifies format option persistence and reset behavior - Edge case testing for unknown locales and case-insensitive handling ### Enhanced - **Localization Service Integration** - Improved fallback logic in `DateFormattingService` when no format options are specified - Enhanced `getFormattedDate()` to use locale-default formatting when no explicit options are set - Better coordination between localization and date formatting services ### Technical - **Developer Experience** - Comprehensive locale formatting validation tests - Improved TypeScript type definitions for date formatting - Enhanced documentation for internationalization features ## [0.2.1] - 2025-06-02 ### Fixed - **Example Fixes** - Fixed function scope issue in disabled-weekdays example where button handlers were not accessible from global scope - Functions `presetWeekends`, `presetWeekdays`, `applyDisabledDays`, and `clearDisabledDays` are now properly exposed to window object - Resolved "ReferenceError: function is not defined" errors in example HTML onclick handlers ## [0.2.0] - 2025-06-01 ### Added - **Accessibility Improvements** - Complete arrow key navigation support (up/down/left/right) - Advanced focus handling with `moveFocus*()` methods including: - `moveFocusRight()`, `moveFocusLeft()`, `moveFocusUp()`, `moveFocusDown()` - `moveFocusToStartOfMonth()`, `moveFocusToEndOfMonth()` - `moveFocusToPreviousMonth()`, `moveFocusToNextMonth()` - `moveFocusToPreviousYear()`, `moveFocusToNextYear()` - Screen reader support with accessible date labels and state descriptions - `getAccessibleDateLabel()` and `getDateStateDescription()` methods - `selectFocusedDate()` for keyboard-driven date selection - **Service-Oriented Architecture** - Modular service design for better maintainability - Calendar Generator Service for optimized calendar generation - Navigation Service with constraint validation - Accessibility Manager for comprehensive accessibility support - Calendar State Service for centralized state management - Configuration Service for streamlined configuration - Constraint Service for advanced date validation - **Multi-View Support** - Enhanced `generateMonthView()` with week number support - `generateCalendarMonths()` for year-level navigation - `generateCalendarYears()` for decade-level navigation - `getWeekNumber()` method for week number calculation - **Developer Experience** - Rich event system with comprehensive state change notifications - Batched binding updates for improved performance - `updateAllBindings()` with selective update options ### Changed - **Performance Optimizations** - Batched binding updates using `executeBatchedBindingUpdates()` - On-demand calendar data generation - Improved memory management and state handling - **Enhanced Method Signatures** - `selectDate()` now supports multiple parameter formats - Improved constraint validation across navigation methods - Better error handling and edge case management ### Fixed - Focus management during month/year navigation - Date constraint validation edge cases - Range selection state consistency - Disabled date handling in range selection - Binding updates in test environments - Memory leaks in event handling ### Technical Improvements - Enhanced TypeScript type definitions - Better integration with @uplink-protocol/core ^0.0.11 - Improved test environment compatibility - More robust service initialization and dependency injection ## [0.1.6] - 2025-05-22 ### Fixed - General bug fixes and improvements ## [0.1.5] - 2025-05-22 ### Fixed - General bug fixes and improvements ## [0.1.4] - 2025-05-22 ### Fixed - General bug fixes and improvements ## [0.1.3] - 2025-05-22 ### Fixed - General bug fixes and improvements ## [0.1.2] - 2025-05-22 ### Fixed - General bug fixes and improvements ## [0.1.1] - 2025-05-21 ### Fixed - Fixed issue in `selectDate` method where the date object was incorrectly created using mixed values from current date and parameters ## [0.1.0] - 2025-05-20 ### Added - Initial release of the calendar controller - Core calendar API functionality - Calendar generation service - Date selection and validation services - Configuration service - Constraints service - Date formatting utilities - Navigation service - View state management - Event management system - TypeScript type definitions - Documentation with TypeDoc - Example implementations: - Calendar view - Date picker component - Internationalization - Month view functionality for easier month selection - Year view with configurable year ranges - Year range navigation methods (nextYearRange, prevYearRange, goToYearRange) - New interfaces: CalendarMonth, CalendarYear, YearRange - Methods to select specific months and years (selectMonth, selectYear) - Ability to customize year range size - Updated documentation for new view modes ### Features - Framework-agnostic implementation - Configurable date constraints - Multiple date selection modes - Localization support - Customizable calendar grid generation - Date range selections - Event system for state changes - Internationalization