ngxsmk-datepicker 2.0.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,1010 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [2.1.0] - 2026-02-05
9
+
10
+ ### Fixed
11
+
12
+ - **Package Configuration**: Corrected TypeScript declaration paths in package.json
13
+ - Updated `types` and `typings` fields to point to `types/ngxsmk-datepicker.d.ts` instead of non-existent `index.d.ts`
14
+ - Simplified `exports` field to match v2.0.9 format, removing unnecessary module export configurations
15
+ - Removed disallowed `esm2022` property from package.json
16
+ - Ensures proper TypeScript module resolution in consuming applications
17
+
18
+ ### Changed
19
+
20
+ - **Package Distribution**: Streamlined package exports configuration for better compatibility
21
+ - Aligned exports structure with stable v2.0.9 format
22
+ - Removed redundant module resolution entries for cleaner package.json
23
+
24
+ ### Important Notice
25
+
26
+ ⚠️ **Versions 2.0.10 and 2.0.11 have been unpublished from npm** due to critical package configuration issues that prevented proper TypeScript module resolution. All users should upgrade to v2.1.0 or later.
27
+
28
+ ## [2.0.11] - 2026-02-05 [BROKEN - UNPUBLISHED]
29
+
30
+ **⚠️ This version has been unpublished from npm due to incorrect package configuration. Use v2.1.0 instead.**
31
+
32
+ ### Fixed
33
+
34
+ - **TypeScript Type Declarations**: Attempted to fix "Could not find a declaration file for module 'ngxsmk-datepicker'" error
35
+ - Added proper `exports` field in package.json with correct type declaration path
36
+ - Configured exports to point to `index.d.ts` for TypeScript module resolution
37
+ - **Note**: This fix was incomplete and the version has been replaced by v2.1.0
38
+
39
+ ## [2.0.10] - 2026-02-05 [BROKEN - UNPUBLISHED]
40
+
41
+ **⚠️ This version has been unpublished from npm due to incorrect package configuration. Use v2.1.0 instead.**
42
+
43
+ ### Fixed
44
+
45
+ - **Infinite Recursion in Date Utilities**: Fixed `RangeError: Maximum call stack size exceeded` in `getEndOfDay()` function
46
+ - Refactored recursive logic to use direct date manipulation
47
+ - Replaced recursive `addMonths` calls with iterative approach
48
+ - Improves performance and eliminates stack overflow risk
49
+ - **Timezone Test Edge Cases**: Fixed date component preservation in timezone conversion tests
50
+ - Updated timezone tests to use `Date.UTC()` for consistent cross-environment behavior
51
+ - Ensures test reliability across different system timezones with non-integer offsets (UTC+5:30, etc.)
52
+
53
+ ### Optimized
54
+
55
+ - **Build and Release**: Removed unnecessary generated files from distribution
56
+ - Cleaned up coverage reports and build artifacts
57
+ - Streamlined demo app output
58
+
59
+ ## [2.0.9] - 2026-01-31
60
+
61
+ ### Optimized
62
+
63
+ - **Stylesheet Architecture**: Comprehensive optimization of CSS assets
64
+ - Replaced redundant mobile stylesheets with a unified "Responsive Overrides" system
65
+ - Removed deprecated keyframes and duplicate selectors
66
+ - Enhanced commenting standards with industrial/professional documentation style
67
+ - Reduced CSS bundle size by eliminating unused styles
68
+
69
+ ### Fixed
70
+
71
+ - **Sticky Header Overlap**: Resolved critical z-index stacking issue where sticky headers would overlap the datepicker popup
72
+ - Implemented aggressive z-index boost (`2147483647`) for the host component when active
73
+ - Ensures datepicker always floats above application navigation bars and modal backdrops
74
+ - **Mobile Dropup Positioning**: Fixed footer clipping issues on mobile devices
75
+ - Time selection dropdowns now intelligently open upwards ("dropup") on screens < 992px
76
+ - Prevents dropdown options from being cut off by the bottom of the viewport or sticky footers
77
+ - Improved touch interactions for time selection on mobile
78
+
79
+ ## [2.0.8] - 2026-01-31
80
+
81
+ ### Added
82
+
83
+ - **Ionic Integration**: Added automatic support for Ionic CSS variables
84
+ - Datepicker now automatically inherits Ionic app theme colors (primary, background, text)
85
+ - No additional configuration required for native look and feel in Ionic apps
86
+ - Documented integration steps in README
87
+
88
+ ### Optimized
89
+
90
+ - **Change Detection**: Optimized internal change detection strategy
91
+ - Removed redundant `ChangeDetectorRef` calls in favor of Signal-based updates
92
+ - Improved compatibility with Zoneless Angular applications
93
+ - Cleaner and more efficient state management
94
+
95
+ ### Fixed
96
+
97
+ - **Mobile Page Jump**: Fixed issue where selecting a date would cause the page to jump to the top on some mobile browsers (Firefox Android)
98
+ - Added `{ preventScroll: true }` to focus restoration logic
99
+ - **Dropdown Scrolling**: Fixed UX issue in month/year dropdowns
100
+ - Dropdowns now automatically scroll to the currently selected option when opened
101
+ - Improved mobile scrolling behavior within dropdowns by removing conflicting close logic
102
+
103
+ ### Changed
104
+
105
+ - **Version Update**: Updated to version 2.0.8
106
+
107
+ ## [2.0.7] - 2026-01-26
108
+
109
+ - **Version Update**: Updated to version 2.0.7
110
+
111
+ ## [2.0.6] - 2026-01-15
112
+
113
+ ### Enhanced
114
+
115
+ - **Range Picker Reselection**: Improved comprehensive range reselection behavior
116
+ - Clicking the start date when a complete range is selected now clears only the end date
117
+ - Clicking the end date when a complete range is selected now clears the start date and sets the end date as the new start date
118
+ - **NEW**: Clicking any date within the selected range now clears the end date and sets the clicked date as the new start date
119
+ - Allows users to easily redefine date ranges from any point (start, end, or within the range)
120
+ - Example scenarios:
121
+ - Range: Jan 10 - Jan 20, Click Jan 10 → Result: Jan 10 (can select new end)
122
+ - Range: Jan 10 - Jan 20, Click Jan 20 → Result: Jan 20 (can select new end)
123
+ - Range: Jan 26 - Jan 30, Click Jan 27 → Result: Jan 27 (can select new end)
124
+ - Improves usability by providing intuitive range adjustment from any direction
125
+
126
+ ### Changed
127
+
128
+ - **Code Cleanup**: Removed unnecessary inline comments from range selection logic for cleaner, more maintainable code
129
+ - **Version Update**: Updated to version 2.0.6
130
+
131
+ ## [2.0.5] - 2026-01-15
132
+
133
+ ### Enhanced
134
+
135
+ - **Range Picker Reselection**: Improved user experience when reselecting date ranges
136
+ - Clicking the start date again after selecting a complete range now clears only the end date
137
+ - Allows users to easily redefine the end date without clearing the entire selection
138
+ - The start date remains selected, and users can immediately choose a new end date
139
+ - Example: After selecting Jan 19 (start) → Jan 21 (end), clicking Jan 19 again keeps Jan 19 selected and clears Jan 21
140
+ - Improves usability by reducing clicks needed to adjust date ranges
141
+
142
+ ### Fixed
143
+
144
+ - **Range Mode Value Emission**: Fixed issue where clicking the start date again after a complete range was selected would update the visual state but not emit the value change
145
+ - The datepicker now properly emits a partial range value (`{ start: Date, end: null }`) when the end date is cleared
146
+ - Parent components and form bindings now correctly reflect the cleared end date state
147
+ - Resolves inconsistency between visual calendar state and bound values
148
+
149
+ ### Patch Changes
150
+
151
+ - **Version Update**: Updated to version 2.0.5
152
+ - **Documentation**: Added comprehensive "Form Validation" section to README to explain `readonly` input behavior and provide solutions for native browser validation (e.g., using `allowTyping="true"`).
153
+
154
+ ## [2.0.4] - 2026-01-14
155
+
156
+ ### Patch Changes
157
+
158
+ - **Version Update**: Updated to version 2.0.4
159
+ - **Validation Fix**: Fixed issue where `[field]` validation messages were not triggering because the `touched` state was not being synced to the field. Added `markAsTouched` support to `FieldSyncService` and updated `NgxsmkDatepickerComponent` to mark the field as touched on blur and value selection.
160
+
161
+ ## [2.0.3] - 2026-01-14
162
+
163
+ ### Patch Changes
164
+
165
+ - **Version Update**: Updated to version 2.0.3
166
+ - **Code Cleanup**: Removed unnecessary comments from `field-sync.service.ts` to improve code readability and maintainability.
167
+ - **Bug Fixed**: Verified fixes for issues #136, #112, #84, and #71.
168
+ - **TypeScript Compatibility**: Fixed `SignalFormField` and `SignalFormFieldConfig` types to be fully compatible with Angular 21+ `FieldTree<string | Date | null, string>` structure. The types now accept `WritableSignal<string | Date | null>` from Angular's Signal Forms, resolving TypeScript compilation errors when using `[field]` binding.
169
+
170
+ ## [2.0.2] - 2026-01-14
171
+
172
+ ### Patch Changes
173
+
174
+ - **Version Update**: Updated to version 2.0.2
175
+ - **Documentation**: Updated all documentation to reflect new version
176
+
177
+ ## [2.0.1] - 2026-01-14
178
+
179
+ ### Patch Changes
180
+
181
+ - **Version Update**: Updated to version 2.0.1
182
+ - **Bug Fixes**: Minor bug fixes and improvements
183
+ - **Documentation**: Updated all documentation to reflect new version
184
+
185
+ ## [2.0.0] - 2026-01-14
186
+
187
+ ### Major Changes
188
+
189
+ - **Version Update**: Updated to version 2.0.0
190
+ - **Breaking Changes**:
191
+ - Updated minimum Angular version requirement to 17.0.0
192
+ - Improved Signal Forms integration
193
+ - Enhanced timezone handling
194
+ - **Documentation**: Updated all documentation to reflect new version
195
+
196
+ ## [1.9.29] - 2026-01-13
197
+
198
+ ### Added
199
+
200
+ - **Angular Signal Forms Validation Support**: Full support for schema-based validation with Angular 21+ Signal Forms
201
+ - Automatically detects and responds to validation errors from the field's `errors()` signal
202
+ - Recognizes `required` validation from schema (e.g., `required(p.dateDue)`)
203
+ - Updates component's `errorState` based on field's `invalid()` signal
204
+ - Reactive updates when validation state changes
205
+ - Resolves [#136](https://github.com/NGXSMK/ngxsmk-datepicker/issues/136) - "datepicker doesn't recognise 'required' attribute in schema"
206
+ - **Validation Error Types**: Added `ValidationError` interface to support Angular Signal Forms error structure
207
+ - **Error State Callback**: Added `onErrorStateChanged` callback to `FieldSyncCallbacks` for validation state tracking
208
+ - **Comprehensive Documentation**: Added `docs/SIGNAL_FORMS_VALIDATION.md` with usage examples, API reference, and migration guide
209
+ - **Test Coverage**: Added comprehensive test suite in `signal-forms-validation.spec.ts` for validation scenarios
210
+ - **Input Attributes Support**: Added support for standard input attributes on the datepicker input element
211
+ - `inputId`: Custom ID support (defaults to component unique ID)
212
+ - `name`: Form name attribute support
213
+ - `autocomplete`: Autocomplete attribute support (defaults to 'off')
214
+ - `aria-invalid`: Accessibility support for invalid state visibility
215
+ - **Keyboard Shortcuts Help Dialog**: Added a built-in help dialog for keyboard shortcuts, accessible via `?` or `Shift + /`.
216
+ - **New Shortcut**: Added `?` keyboard shortcut to toggle the help dialog.
217
+
218
+ ### Enhanced
219
+
220
+ - **Field Sync Service**: Enhanced with new helper methods
221
+ - `readFieldErrors()`: Reads validation errors from field's `errors` signal
222
+ - `readRequiredState()`: Checks for required validation in errors or direct property (prioritizes schema validation)
223
+ - `hasValidationErrors()`: Determines if field has any validation errors
224
+ - **Backward Compatibility**: Maintains full compatibility with:
225
+ - Direct `required` attribute: `<ngxsmk-datepicker required>`
226
+ - Reactive Forms: `<ngxsmk-datepicker [formControl]="dateControl">`
227
+ - Template-driven forms: `<ngxsmk-datepicker [(ngModel)]="date">`
228
+ - Direct `required` property on field: `field.required = true`
229
+
230
+ ### Fixed
231
+
232
+ - **Header Layout**: Fixed CSS issue where the datepicker header width was not spanning the full container width, ensuring consistent layout across all screen sizes.
233
+ - **Angular Signal Forms Schema Validation**: Fixed issue where `required` attribute from schema was not properly reflected on the input and form validation
234
+ - **Month Navigation**: Fixed a critical bug where navigating to the next month would skip a month (e.g., Jan -> Mar) if the current date was the 31st (due to JS Date overflow). Navigation now correctly calculates from the start of the month.
235
+ - **Signal Forms Integration**: Critical fix for `[field]` binding where Signal fields (passed as functions) were being ignored, preventing validation metadata (like `.required`) from being read.
236
+ - **Range Navigation**: Fixed usability issue where selecting an end date in a different month would unexpectedly reset the calendar view back to the start date's month, causing confusion.
237
+ - **Field Sync Service**: Updated `readRequiredState` and `readDisabledState` to correctly process function-type fields (Signals).
238
+
239
+ ### Changed
240
+
241
+ - **Version Update**: Updated to version 1.9.29
242
+
243
+ ## [1.9.27] - 2026-01-10
244
+
245
+ ### Refactored
246
+
247
+ - **Modern Control Flow**: Fully migrated all standalone components (`NgxsmkDatepickerComponent`, `CalendarHeaderComponent`, `CalendarMonthViewComponent`, `CalendarYearViewComponent`, `TimeSelectionComponent`, `CustomSelectComponent`) to modern Angular `@if` and `@for` block syntax.
248
+ - **Optimized Imports**: Replaced monolithic `CommonModule` with individual directive and pipe imports (`NgClass`, `NgTemplateOutlet`, `DatePipe`) in all standalone components. This improves tree-shaking and resolves resolution conflicts in some environments.
249
+
250
+ ### Fixed
251
+
252
+ - **Module Resolution**: Resolved "Value could not be determined statically" error when importing standalone library components into traditional NgModules in some monorepo configurations.
253
+ - **Build Process**: Fixed library compilation error (`TS6133`) caused by unused `CommonModule` after migration to modern control flow.
254
+ - **Monorepo Compatibility**: Improved Angular core dependency resolution for example applications to prevent "duplicate symbol" and "exported symbol not found" errors during development.
255
+
256
+ ### Maintenance
257
+
258
+ - **Git**: Added `/examples` directory to `.gitignore` to prevent committing experimental test applications.
259
+
260
+ ### Changed
261
+
262
+ - **Version Update**: Updated to version 1.9.27
263
+
264
+ ## [1.9.26] - 2026-01-09
265
+
266
+ > ⚠️ **DO NOT USE**: This version contains broken styles. Please use v1.9.27 or v1.9.25 instead.
267
+
268
+ ### Refactored
269
+
270
+ - **Core Architecture**: Major refactoring of `NgxsmkDatepickerComponent` to address "God Component" issues
271
+ - Split monolithic component into dedicated sub-components: `CalendarMonthViewComponent`, `CalendarYearViewComponent`
272
+ - Integrated `CalendarHeaderComponent` and `TimeSelectionComponent` to handle specific functional areas
273
+ - Removed 1000+ lines of inline template code, significantly improving maintainability and readability
274
+ - Improved strict template type checking support
275
+ - **No breaking changes** to the public API
276
+
277
+ ### Fixed
278
+
279
+ - **Ionic Integration**: Fixed issue where `ionic-integration.css` was not exported in the package bundle
280
+ - Moved styles to allow correct exporting via package logic
281
+ - Ensures `@import 'ngxsmk-datepicker/styles/ionic-integration.css'` works as documented
282
+ - Resolves [#123](https://github.com/NGXSMK/ngxsmk-datepicker/issues/123)
283
+
284
+ ### Fixed (Mobile UI)
285
+
286
+ - **Mobile View Styles**: Enhanced mobile UI styles for both Angular and Ionic projects
287
+ - Added proper positioning and animations for `bottom-sheet` and `fullscreen` mobile modes
288
+ - Fixed missing styles in core `datepicker.css` that prevented `mobileModalStyle` from working correctly
289
+ - Improved gesture handling and transition animations for mobile devices
290
+
291
+ ### Changed
292
+
293
+ - **Version Update**: Updated to version 1.9.26
294
+
295
+ ## [1.9.25] - 2026-01-06
296
+
297
+ ### Fixed
298
+
299
+ - **IDE Support**: Fixed "This component requires inline template type-checking" error by including all source files in tsconfig
300
+ - Ensures accurate template type checking in VS Code and other IDEs
301
+ - **NPM Package**: Fixed issue where `README.md` was missing from the npm package
302
+ - Updated build scripts to ensure `README.md` is correctly included in the distribution
303
+ - Ensures proper documentation rendering on npmjs.com
304
+
305
+ ### Changed
306
+
307
+ - **Version Update**: Updated to version 1.9.25
308
+
309
+ ## [1.9.23] - 2025-12-15
310
+
311
+ ### Fixed
312
+
313
+ - **Signal Forms Dirty State Tracking (Issue #112)**: Fixed issue where Angular Signal Forms were not being marked as dirty when date values changed through the `[field]` binding
314
+ - Improved `updateFieldFromInternal()` method to always prefer `setValue()` and `updateValue()` methods over direct signal mutation
315
+ - Added dev mode warnings when falling back to direct signal mutation, which may bypass dirty state tracking
316
+ - Enhanced error handling to track which update method succeeded and provide better diagnostics
317
+ - The datepicker now properly marks forms as dirty when using `[field]` binding with Angular 21+ Signal Forms
318
+ - Added comprehensive test coverage for Signal Forms dirty state tracking
319
+ - Updated documentation with detailed guidance on proper usage patterns and troubleshooting
320
+ - Resolves [#112](https://github.com/NGXSMK/ngxsmk-datepicker/issues/112)
321
+
322
+ - **CSS Variables Theming (Issue #84)**: Fixed issue where CSS variables theming was not working when variables were defined in the global `:root` selector
323
+ - Enhanced CSS selector from `:root` to `:root, :root > body` for higher specificity
324
+ - Added `!important` flags to inline styles to ensure they override existing styles
325
+ - ThemeBuilderService now properly overrides global stylesheet variables
326
+ - Updated documentation to explain the fix and provide guidance
327
+ - Resolves [#84](https://github.com/NGXSMK/ngxsmk-datepicker/issues/84)
328
+
329
+ ### Changed
330
+
331
+ - **Version Update**: Updated to version 1.9.23
332
+
333
+ ## [1.9.22] - 2025-12-14
334
+
335
+ ### Fixed
336
+
337
+ - **Form Control Value Initialization**: Fixed issue where datepicker was not properly updating the displayed month when initialized with form control values
338
+ - Added `_updateMemoSignals()` call in `writeValue()` method to ensure month/year signals are properly updated
339
+ - Added `scheduleChangeDetection()` to trigger UI updates when form control values are set
340
+ - Ensures datepicker correctly displays the month from form control values instead of defaulting to current month
341
+ - Resolves issue where demo app datepickers were showing December instead of the correct month from form control values
342
+ - Fixes calendar month display when using Reactive Forms with initial values
343
+
344
+ - **Locale Week Start Detection**: Fixed `getFirstDayOfWeek()` function to properly return 1 for en-GB locale
345
+ - Added fallback logic for locales where `Intl.Locale.weekInfo` is not available (older browsers/environments)
346
+ - Implemented locale-based mapping for common locales (en-GB, en-AU, en-NZ, and most European locales return 1 for Monday)
347
+ - Now correctly returns Monday (1) for en-GB and other European locales
348
+ - Maintains backward compatibility with en-US and other locales that use Sunday (0) as first day
349
+ - All calendar utils tests now passing (19/19 tests)
350
+
351
+ ### Changed
352
+
353
+ - **Version Update**: Updated to version 1.9.22
354
+
355
+ ## [1.9.21] - 2025-12-10
356
+
357
+ ### Added
358
+
359
+ - **Mobile-Specific Features**: Comprehensive mobile optimization and native integration
360
+ - Native date picker integration with `useNativePicker` input for automatic native picker on mobile devices
361
+ - Bottom sheet modal style with swipe-to-dismiss gesture support
362
+ - Mobile-optimized time picker with enhanced touch interactions
363
+ - Enhanced gesture support: double-tap on today to select, swipe up/down for year navigation
364
+ - Haptic feedback support with `enableHapticFeedback` input (light, medium, heavy vibrations)
365
+ - Mobile keyboard optimizations for better input experience
366
+ - Mobile-specific animations and transitions
367
+ - Auto-detection of mobile devices with `autoDetectMobile` input
368
+ - Mobile modal styles: `bottom-sheet`, `center`, and `fullscreen` options
369
+
370
+ - **Advanced Selection Modes**: Extended selection capabilities beyond single/range/multiple
371
+ - Week selection mode: Select entire weeks with configurable week start day
372
+ - Month selection mode: Select entire months with start/end dates
373
+ - Quarter selection mode: Select quarters (Q1, Q2, Q3, Q4) with proper date ranges
374
+ - Year selection mode: Select entire years with January 1st to December 31st ranges
375
+ - All new modes work seamlessly with existing validation, constraints, and formatting
376
+
377
+ - **Enhanced Time Selection**: Improved time picker functionality
378
+ - Seconds selection with `showSeconds` input and `secondInterval` configuration
379
+ - `currentSecond` property for programmatic second control
380
+ - Infrastructure for time range selection (future enhancement)
381
+
382
+ - **Code Refactoring**: Improved maintainability and performance
383
+ - `CalendarGenerationService`: Extracted calendar generation logic for better separation of concerns
384
+ - `DisplayFormattingService`: Centralized display formatting logic with support for all selection modes
385
+ - `DateValidationService`: Extracted date validation logic for reusable validation across components
386
+ - Reduced main component size and complexity
387
+ - Improved code organization and testability
388
+
389
+ - **Accessibility Enhancements**: Improved screen reader and keyboard navigation
390
+ - Enhanced ARIA live region announcements with debouncing and queue management
391
+ - Improved focus trap management with proper focus return on close
392
+ - Better screen reader support for all new selection modes
393
+ - High contrast mode styling improvements
394
+
395
+ - **Performance Optimizations**: Infrastructure for better performance
396
+ - Virtual scrolling infrastructure for year/decade views (ready for future implementation)
397
+ - Lazy loading calendar months with intelligent caching (up to 24 months)
398
+ - Calendar month cache with automatic size management
399
+ - Preloading of adjacent months for smoother navigation
400
+
401
+ - **Test Coverage**: Comprehensive test suite updates
402
+ - New service tests: `CalendarGenerationService`, `DisplayFormattingService`, `DateValidationService`
403
+ - Updated comprehensive component tests with new selection modes
404
+ - Updated utility function tests for week/month/quarter/year helpers
405
+ - Updated E2E tests for mobile features and new selection modes
406
+ - All 414 tests passing with improved coverage
407
+
408
+ ### Changed
409
+
410
+ - **Version Update**: Updated to version 1.9.21
411
+ - **Hooks Interface**: Extended hooks interface to support new selection modes (`week`, `month`, `quarter`, `year`)
412
+ - **Type Definitions**: Updated `DatepickerValue` type to explicitly handle range mode with `[Date, Date | null]`
413
+ - **Service Architecture**: Refactored component to use new services for better maintainability
414
+
415
+ ### Fixed
416
+
417
+ - **Angular 21 Signal Forms Integration (Issue #80)**: Fixed broken `[field]` input binding with Angular 21 Signal Forms
418
+ - Improved signal detection in `readFieldValue()` to handle Angular 21's `FieldTree<Date, string>` structure
419
+ - Enhanced effect setup to properly track Signal Forms dependencies when `field.value` is a function returning a signal
420
+ - Fixed `updateFieldFromInternal()` to handle cases where `field.value` is a function that returns a writable signal
421
+ - Now correctly handles Angular 21 Signal Forms where `field.value` is a function that returns the actual signal
422
+ - Resolves [#80](https://github.com/NGXSMK/ngxsmk-datepicker/issues/80)
423
+ - **Build Issues**: Fixed TypeScript compilation errors related to strict null checks
424
+ - **Test Failures**: Fixed async timing issues in AriaLiveService tests
425
+ - **Calendar Generation**: Fixed structural issues in calendar generation method
426
+ - **Type Safety**: Improved type safety with explicit null checks and proper type definitions
427
+
428
+ ### Migration Notes
429
+
430
+ - This is a patch version update
431
+ - No breaking changes from v1.9.20
432
+ - All changes are backward compatible
433
+ - Compatible with Angular 17-22
434
+ - New features are opt-in and don't affect existing implementations
435
+ - Mobile features automatically detect mobile devices but can be disabled with `autoDetectMobile="false"`
436
+ - New selection modes extend existing `mode` input with additional options
437
+
438
+ ## [1.9.20] - 2025-12-06
439
+
440
+ ### Fixed
441
+
442
+ - **Test Environment Compatibility (Issue #71)**: Fixed `TypeError: window.matchMedia is not a function` error in test environments (jsdom/Vitest)
443
+ - Added try-catch block around `window.matchMedia` call in `applyAnimationConfig()` method
444
+ - Component now gracefully handles missing `matchMedia` API in test environments
445
+ - Prevents test failures when running with Vitest and jsdom
446
+ - Added comprehensive test coverage for `matchMedia` compatibility scenarios
447
+
448
+ ### Changed
449
+
450
+ - **Version Update**: Updated to version 1.9.20
451
+
452
+ ### Migration Notes
453
+
454
+ - This is a patch version update
455
+ - No breaking changes from v1.9.19
456
+ - All changes are backward compatible
457
+ - Compatible with Angular 17-22
458
+ - Fixes test compatibility issues with Vitest and jsdom environments
459
+
460
+ ## [1.9.19] - 2025-01-15
461
+
462
+ ### Added
463
+
464
+ - **Comprehensive Responsive Layout Redesign**: Complete redesign of demo project layout for all screen sizes
465
+ - Redesigned navbar for all breakpoints (320px-374px, 375px-479px, 480px-599px, 600px-767px, 768px-1023px, 1024px+)
466
+ - Enhanced sidebar navigation with mobile drawer, tablet collapsible, and desktop fixed layouts
467
+ - Responsive hero section with adaptive typography and button layouts
468
+ - Feature grid responsive design (1 column → 2 columns → 3 columns → 4 columns)
469
+ - Optimized content sections with responsive padding, typography, and spacing
470
+ - Improved example demo containers, code blocks, mobile preview containers, and result boxes
471
+ - Better touch targets and visual hierarchy across all breakpoints
472
+
473
+ ### Changed
474
+
475
+ - **Version Update**: Updated to version 1.9.19
476
+ - **Meta Tag Update**: Replaced deprecated `apple-mobile-web-app-capable` with `mobile-web-app-capable`
477
+ - **Code Cleanup**: Removed unnecessary comments from SCSS files for cleaner codebase
478
+
479
+ ### Migration Notes
480
+
481
+ - This is a patch version update
482
+ - No breaking changes from v1.9.18
483
+ - All changes are backward compatible
484
+ - Compatible with Angular 17-22
485
+ - Demo project layout improvements are automatic and require no code changes
486
+
487
+ ## [1.9.18] - 2025-11-22
488
+
489
+ ### Fixed
490
+
491
+ - **Mobile Touch Event Handling**: Improved touch listener attachment when calendar opens on mobile devices
492
+ - Touch listeners now properly attach when calendar first opens, eliminating the need to navigate months first
493
+ - Added retry mechanism with multiple attempts to ensure listeners are attached even on slower mobile devices
494
+ - Improved timing with double `requestAnimationFrame` calls and multiple retry strategies
495
+ - Enhanced mobile rendering timing to handle DOM delays
496
+
497
+ ### Changed
498
+
499
+ - **Version Update**: Updated to version 1.9.18
500
+
501
+ ### Migration Notes
502
+
503
+ - This is a patch version update
504
+ - No breaking changes from v1.9.17
505
+ - All changes are backward compatible
506
+ - Compatible with Angular 17-22
507
+ - Improved mobile experience with better touch event handling
508
+
509
+ ## [1.9.17] - 2025-11-21
510
+
511
+ ### Added
512
+
513
+ - **Calendar Button Visibility Control**: Added `showCalendarButton` input property to show/hide the calendar icon button
514
+ - Defaults to `true` for backward compatibility
515
+ - When set to `false`, users can still open the calendar by clicking the input field
516
+ - Useful for custom UI designs or when using `allowTyping` with custom calendar triggers
517
+ - **Calendar Button Styling**: Added `calendarBtn` to `DatepickerClasses` for custom styling of the calendar button
518
+
519
+ ### Changed
520
+
521
+ - **Version Update**: Updated to version 1.9.17
522
+ - **Type Compatibility**: Updated `SignalFormField` type to be fully compatible with Angular 21's `FieldTree<Date, string>` types
523
+
524
+ ### Migration Notes
525
+
526
+ - This is a patch version update
527
+ - No breaking changes from v1.9.16
528
+ - All changes are backward compatible
529
+ - Compatible with Angular 17-22
530
+ - The calendar button is visible by default (`showCalendarButton="true"`), existing behavior unchanged
531
+
532
+ ## [1.9.16] - 2025-11-20
533
+
534
+ ### Fixed
535
+
536
+ - **Range Mode Previous Month Selection**: Fixed issue where users could not select dates from previous months in range mode when starting with `{ start: null, end: null }`
537
+ - Added memo cache invalidation before calendar generation when clicking dates from previous/next months in range mode
538
+ - Fixed issue where clicking dates from previous months would navigate but memoized functions would use stale month/year values
539
+ - Now properly invalidates memo cache in single, range, and multiple modes when navigating to different months via date clicks
540
+ - Users can now select dates from previous months in range mode without issues, allowing proper range selection across month boundaries
541
+
542
+ ### Changed
543
+
544
+ - **Version Update**: Updated to version 1.9.16
545
+ - **Angular 21 Support**: Updated dependencies and peer dependencies to support Angular 21 (officially released)
546
+ - Updated devDependencies to Angular 21.0.0
547
+ - Updated peer dependencies to support Angular 17-22 (`>=17.0.0 <24.0.0`)
548
+ - Full compatibility with Angular 21 including Signal Forms support
549
+ - **Signal Forms**: Full support for Angular 21 Signal Forms with `[field]` input binding (experimental feature)
550
+ - **Zoneless by Default**: Compatible with Angular 21 applications that don't include Zone.js by default
551
+ - **Vitest Compatible**: Works with Angular 21's new default Vitest test runner (library tests use Karma/Jasmine, but library is compatible with Vitest-based apps)
552
+ - **Angular Aria Compatible**: Built-in ARIA support works alongside Angular Aria components (uses custom AriaLiveService for screen reader announcements)
553
+
554
+ ### Migration Notes
555
+
556
+ - This is a patch version update with bug fixes and Angular 21 support
557
+ - No breaking changes from v1.9.15
558
+ - All fixes are backward compatible
559
+ - Compatible with Angular 17-22 (including officially released Angular 21)
560
+
561
+ ## [1.9.15] - 2025-11-20
562
+
563
+ ### Fixed
564
+
565
+ - **Moment Object Binding with ngModel**: Fixed issue where Moment.js objects passed via `[(ngModel)]` were not binding correctly with the datepicker
566
+ - Updated `writeValue()` method to normalize Moment.js objects before passing to `initializeValue()`
567
+ - Ensures Moment.js objects (including those with `utcOffset()` applied) are properly converted to Date objects when binding with template-driven forms
568
+ - Now correctly handles `moment(response.Date).utcOffset(timezone)` when setting via ngModel
569
+ - **Date Clicks After Month Navigation**: Fixed issue where dates became unclickable after navigating backward or forward months
570
+ - Updated `isDateDisabledMemo` getter to properly invalidate cached memoized function when month/year changes
571
+ - Added month/year change detection to ensure disabled date cache is refreshed after navigation
572
+ - Dates in previous/next months are now properly clickable without needing to close and reopen the datepicker
573
+ - **Range Mode Previous Month Selection**: Fixed issue where users could not select dates from previous months in range mode when starting with `{ start: null, end: null }`
574
+ - Added memo cache invalidation before calendar generation when clicking dates from previous/next months in range mode
575
+ - Fixed issue where clicking dates from previous months would navigate but memoized functions would use stale month/year values
576
+ - Now properly invalidates memo cache in single, range, and multiple modes when navigating to different months via date clicks
577
+ - Users can now select dates from previous months in range mode without issues, allowing proper range selection across month boundaries
578
+
579
+ ### Changed
580
+
581
+ - **Version Update**: Updated to version 1.9.15
582
+
583
+ ### Migration Notes
584
+
585
+ - This is a patch version update with bug fixes only
586
+ - No breaking changes from v1.9.14
587
+ - All fixes are backward compatible
588
+ - Compatible with Angular 17 and up versions
589
+
590
+ ## [1.9.14] - 2025-11-20
591
+
592
+ ### Fixed
593
+
594
+ - **Date Picker Selection Issue**: Fixed issue where date picker was not working properly when selecting dates, especially in range mode
595
+ - Added proper change detection scheduling when setting start date in range mode
596
+ - Added memo cache invalidation to ensure UI updates correctly reflect selected dates
597
+ - Fixed UI not updating when only start date is selected in range mode
598
+ - Dates now properly show as selected and calendar updates correctly in all selection modes
599
+ - **Moment.js Timezone Offset Preservation**: Fixed issue where Moment.js objects with timezone offsets (e.g., `moment().utcOffset('-0600')`) were not preserving the timezone offset when converted to Date objects
600
+ - Added `momentToDate()` method that detects and preserves timezone offsets from Moment.js objects
601
+ - Uses moment's `format('YYYY-MM-DDTHH:mm:ss.SSSZ')` to preserve offset information
602
+ - Now correctly handles `moment().utcOffset('-0600')` without requiring `toDate()` which loses timezone information
603
+ - Works for single dates, range values, and array of dates
604
+
605
+ ### Changed
606
+
607
+ - **Version Update**: Updated to version 1.9.14
608
+
609
+ ### Migration Notes
610
+
611
+ - This is a patch version update with bug fixes only
612
+ - No breaking changes from v1.9.13
613
+ - All fixes are backward compatible
614
+
615
+ ## [1.9.13] - 2025-11-19
616
+
617
+ ### Fixed
618
+
619
+ - **valueChange Event Bug**: Fixed issue where `(valueChange)` event was emitting `null` instead of the date value for range mode when using template-driven forms with `[(ngModel)]`
620
+ - Changed `emitValue` method to use `_normalizeValue()` instead of `_normalizeDate()` to properly handle range objects `{ start: Date, end: Date }`
621
+ - Now correctly emits date values for all modes (single, range, multiple)
622
+ - **Range Mode Date Selection**: Fixed issue where dates became disabled/unclickable after navigating to previous or next months in range mode
623
+ - Updated `changeMonth()` method to properly update month/year signals when navigating
624
+ - Fixed `onDateClick()` for all modes (single, range, multiple) to update signals when clicking dates in different months
625
+ - Fixed `onYearClick()`, `onYearSelectChange()`, and `onDecadeClick()` to update signals
626
+ - Ensures memoized `isDateDisabledMemo` function uses correct month/year values after navigation
627
+ - Dates in previous/next months are now properly selectable without needing to close and reopen the datepicker
628
+ - **Moment.js Object Handling**: Fixed issue where Moment.js objects in range values and arrays were not being properly normalized
629
+ - Enhanced `_normalizeValue()` method to explicitly detect and convert Moment.js objects in range objects (`{ start, end }`)
630
+ - Enhanced array value normalization to properly handle Moment.js objects in multiple date selections
631
+ - Ensures Moment.js objects are correctly converted to Date objects before emission in `valueChange` event
632
+
633
+ ### Changed
634
+
635
+ - **Version Update**: Updated to version 1.9.13
636
+
637
+ ### Migration Notes
638
+
639
+ - This is a patch version update with bug fixes only
640
+ - No breaking changes from v1.9.12
641
+ - All fixes are backward compatible
642
+
643
+ ## [1.9.12] - 2025-11-19
644
+
645
+ ### Added
646
+
647
+ - **SEO Optimization**: Comprehensive search engine optimization improvements
648
+ - Enhanced meta tags with expanded keywords, geo-location, and Apple mobile web app tags
649
+ - Complete Open Graph implementation for social media sharing (Facebook, LinkedIn)
650
+ - Enhanced Twitter Card metadata with additional labels and image alt text
651
+ - Multi-locale Open Graph support (en_US, es_ES, fr_FR, de_DE)
652
+ - Structured data (Schema.org) with SoftwareApplication, WebPage, and HowTo schemas
653
+ - robots.txt file with proper crawl directives and sitemap reference
654
+ - sitemap.xml with all important pages, priorities, and change frequencies
655
+ - SEO documentation guide (docs/SEO.md) with best practices and monitoring recommendations
656
+ - **Package Keywords Expansion**: Expanded npm package keywords from 14 to 38 keywords
657
+ - Added keywords for features (signal-forms, SSR, zoneless, accessibility)
658
+ - Added keywords for use cases (date-picker, time-picker, holiday-calendar)
659
+ - Added keywords for qualities (lightweight, customizable, open-source, MIT)
660
+ - Improved discoverability on npm and search engines
661
+ - **README SEO Enhancements**: Added downloads badge and expanded SEO keywords section
662
+ - More comprehensive keyword coverage for better search visibility
663
+ - Enhanced description with additional relevant terms
664
+
665
+ ### Changed
666
+
667
+ - **Version Update**: Updated to version 1.9.12
668
+ - **Multi-Calendar Spacing**: Increased gap between multiple calendars from 16px to 32px for better visual separation
669
+ - Applied to horizontal, vertical, and auto layouts
670
+ - Improved spacing consistency across all multi-calendar configurations
671
+ - **Multi-Calendar Container Sizing**: Enhanced container width handling for multi-calendar layouts
672
+ - Changed from fixed `width: 100%` to `width: fit-content` for better content fitting
673
+ - Increased max-width from 1200px to 1400px to accommodate more calendars
674
+ - Containers now properly expand to fit all calendars without overlapping
675
+ - **Demo App Select Inputs**: Enhanced styling for all select inputs in the demo application
676
+ - Custom dropdown arrow icons with theme-aware colors
677
+ - Improved hover and focus states with smooth transitions
678
+ - Better visual consistency with the overall design system
679
+ - Full dark theme support
680
+ - **Build Configuration**: Updated angular.json to include SEO files in build output
681
+ - robots.txt and sitemap.xml now properly copied to build root
682
+ - Files accessible at site root for search engine crawlers
683
+
684
+ ### Removed
685
+
686
+ - **Demo App Sections**: Removed "2 Calendars Side-by-Side" and "3 Calendars Side-by-Side" demo sections
687
+ - Cleaned up unused TypeScript variables (`multiCalendarRange2`, `multiCalendarSingle3`)
688
+
689
+ ### Fixed
690
+
691
+ - **Multi-Calendar Overlapping**: Fixed issue where multiple calendars would overlap when displayed side-by-side
692
+ - Added proper `box-sizing: border-box` to calendar months
693
+ - Reduced container padding for multi-calendar layouts to provide more space
694
+ - Ensured containers expand to fit content with proper gap spacing
695
+ - **Test Suite**: Fixed TypeScript compilation error in issue-33.spec.ts
696
+ - Fixed undefined `dayNumbers` variable in test assertion
697
+ - Added proper day number collection for debugging when test fails
698
+ - Improved test error messages with actual day numbers found
699
+
700
+ ### Migration Notes
701
+
702
+ - This is a minor version update with backward compatibility
703
+ - No breaking changes from v1.9.11
704
+ - SEO improvements are automatic and require no code changes
705
+ - See [MIGRATION.md](MIGRATION.md) for detailed migration guide
706
+ - See [docs/SEO.md](projects/ngxsmk-datepicker/docs/SEO.md) for SEO best practices
707
+
708
+ ## [1.9.11] - 2025-11-17
709
+
710
+ ### Fixed
711
+
712
+ - **Moment.js Integration with Custom Formats**: Fixed critical issue where Moment.js objects with custom date formats would not populate correctly
713
+ - Added `isMomentObject()` helper method to safely detect Moment.js instances
714
+ - Enhanced `_normalizeValue()` method to handle Moment.js objects directly by extracting native Date using `.toDate()`
715
+ - Improved `parseCustomDateString()` method to use bracket notation for TypeScript compatibility with dynamic object properties
716
+ - Added comprehensive support for format tokens: YYYY, YY, MM, M, DD, D, hh, h, HH, H, mm, m, ss, s, a, A
717
+ - Resolves issue where `moment(this.date).utcOffset(timezone).format('MM/DD/YYYY hh:mm a')` with `displayFormat="MM/DD/YYYY hh:mm a"` would not populate correctly
718
+ - Maintains full backward compatibility with Date objects, strings, and all other supported formats
719
+
720
+ ### Improved
721
+
722
+ - **Custom Format Parser**: Enhanced format token parsing with better TypeScript compatibility
723
+ - **Moment.js Detection**: More robust detection of Moment.js objects across different versions
724
+ - **Demo Application**: Added working Moment.js integration example with interactive controls
725
+
726
+ ## [1.9.10] - 2025-11-15
727
+
728
+ ### Changed
729
+
730
+ - **Version Update**: Updated to version 1.9.10
731
+
732
+ ### Fixed
733
+
734
+ - **Async Database Value Loading**: Enhanced datepicker to properly handle database values that load asynchronously after component initialization
735
+ - Added fallback sync mechanism in `ngAfterViewInit` to catch async database loads
736
+ - Added delayed sync checks in `ngOnInit`, `ngOnChanges`, and `ngAfterViewInit` to handle field value changes that occur after component initialization
737
+ - Added sync on calendar open, focus events, and touch events to ensure values are populated
738
+ - Extended interval sync duration to 30 seconds (from 10 seconds) with 100ms check intervals
739
+ - Ensures datepicker properly displays database values even when they load after the component is rendered
740
+ - **TypeScript Compilation Error**: Fixed `EffectRef` type error when using Angular 17+ `effect()` API
741
+ - Changed `_fieldEffectDestroy: (() => void) | null` to `_fieldEffectRef: EffectRef | null`
742
+ - Updated effect cleanup to use `effectRef.destroy()` instead of function call
743
+ - Added proper `EffectRef` import from `@angular/core`
744
+ - **Test Configuration**: Fixed test configuration for Angular 17+ compatibility
745
+ - Updated karma configuration to work with `@angular/build:karma` builder
746
+ - Simplified karma.conf.js to remove deprecated plugins
747
+ - Updated test script to target correct project
748
+
749
+ ### Improved
750
+
751
+ - **Async Value Handling**: Improved handling of field values that change asynchronously
752
+ - **Effect Management**: Proper effect lifecycle management with `EffectRef` for correct cleanup
753
+ - **Code Cleanup**: Removed unnecessary comments for cleaner codebase
754
+ - **Test Reliability**: Enhanced test configuration for better reliability across Angular versions
755
+
756
+ ## [1.9.9] - 2025-11-15
757
+
758
+ ### Changed
759
+
760
+ - **Version Update**: Updated to version 1.9.9
761
+
762
+ ### Fixed
763
+
764
+ - **Database Value Population**: Fixed critical issue where datepicker would not populate with values from database when using `[field]` input binding
765
+ - Added `_normalizeValue()` helper method to properly handle all value types (Date objects, strings, range objects, arrays)
766
+ - Updated field effect and related methods to use `_normalizeValue()` instead of `_normalizeDate()` which only handled single dates
767
+ - Fixed issue where string dates from database (common scenario) were not being parsed and displayed correctly
768
+ - Now properly handles Date objects, string dates, range objects `{start: Date, end: Date}`, and arrays of dates
769
+
770
+ ### Improved
771
+
772
+ - **Value Normalization**: Improved value normalization to handle all DatepickerValue types consistently
773
+ - **Database Integration**: Enhanced compatibility with database values in various formats (strings, Date objects, etc.)
774
+
775
+ ## [1.9.8] - 2025-11-14
776
+
777
+ ### Changed
778
+
779
+ - **Version Update**: Updated to version 1.9.8
780
+
781
+ ### Fixed
782
+
783
+ - **Date Selection Reset Issue**: Fixed critical bug where selected dates would reset to today's date when using `[field]` input binding
784
+ - Fixed `applyCurrentTime` to create a new Date object instead of mutating the original, preventing reference issues
785
+ - Added `_isUpdatingFromInternal` flag to prevent field effect from resetting the value when updating internally
786
+ - This ensures selected dates are properly stored in the form field instead of being reset to today
787
+
788
+ ### Improved
789
+
790
+ - **Date Mutation Prevention**: Improved date handling to prevent unintended mutations of date objects
791
+ - **Field Update Stability**: Enhanced field binding stability to prevent value resets during internal updates
792
+
793
+ ## [1.9.7] - 2025-11-14
794
+
795
+ ### Changed
796
+
797
+ - **Version Update**: Updated to version 1.9.7
798
+
799
+ ### Fixed
800
+
801
+ - **Calendar Population**: Fixed critical issue where datepicker calendar would not populate with dates when opened, especially when multiple datepickers were present in the same form
802
+ - **Calendar Generation**: Ensured `generateCalendar()` is called when opening the datepicker via click, touch, or programmatic methods
803
+
804
+ ### Improved
805
+
806
+ - **Calendar Initialization**: Improved calendar initialization to ensure dates are always generated before the calendar becomes visible
807
+
808
+ ## [1.9.6] - 2025-11-14
809
+
810
+ ### Changed
811
+
812
+ - **Version Update**: Updated to version 1.9.6
813
+
814
+ ### Fixed
815
+
816
+ - **Multiple Datepicker Management**: Fixed issue where multiple datepickers in the same form would open in the same centered location
817
+ - **Outside Click Detection**: Improved click detection to properly close datepicker when clicking outside the popover and input field
818
+ - **Auto-close Other Datepickers**: When opening a datepicker, all other open datepickers in the same form are now automatically closed
819
+ - **Mobile Datepicker Opening**: Fixed issue where datepicker modal would not open on mobile screens
820
+ - **Datepicker Closing on Mobile**: Fixed issue where datepicker would open and immediately disappear on mobile devices
821
+ - **Select Box Cursor**: Added pointer cursor to all select boxes (month, year, hour, minute, AM/PM) in the datepicker
822
+
823
+ ### Improved
824
+
825
+ - **Document Click Handler**: Enhanced document click handler to check if clicks are inside the popover container, not just the input group
826
+ - **Touch Event Handling**: Improved touch event handling to prevent premature closing on mobile devices
827
+ - **Instance Management**: Added static instance registry to track all datepicker instances for better coordination
828
+
829
+ ## [1.9.5] - 2025-11-14
830
+
831
+ ### Changed
832
+
833
+ - **Version Update**: Updated to version 1.9.5
834
+
835
+ ### Fixed
836
+
837
+ - **Angular 21+ Signal Forms Type Compatibility**: Fixed TypeScript compilation error with Angular 21+ Signal Forms
838
+ - Fixed `Type '() => string' is not assignable to type 'never'` error when using `[field]` input
839
+ - Updated `SignalFormField` type definition to be compatible with Angular 21's `FieldTree<Date, string>` types
840
+ - Maintains backward compatibility with Angular 17-20 where field input is optional
841
+ - Resolves [#33](https://github.com/NGXSMK/ngxsmk-datepicker/issues/33)
842
+
843
+ ## [1.9.4] - 2025-11-14
844
+
845
+ ### Changed
846
+
847
+ - **Version Update**: Updated to version 1.9.4
848
+
849
+ ### Added
850
+
851
+ - **Custom Date Format**: New `[displayFormat]` input property to display dates in custom formats
852
+ - Supports format strings like "MM/DD/YYYY hh:mm A"
853
+ - Works with date adapters (date-fns, dayjs, luxon) or built-in simple formatter
854
+ - Supports common format tokens: YYYY, MM, DD, hh, mm, A, etc.
855
+ - Resolves [#31](https://github.com/NGXSMK/ngxsmk-datepicker/issues/31)
856
+
857
+ ### Fixed
858
+
859
+ - **Time Selection Dropdowns**: Fixed visibility issues with time selection dropdowns
860
+ - Dropdowns now properly display and are not clipped by parent containers
861
+ - Improved z-index handling for time selection dropdowns
862
+ - Removed unnecessary scrollbars from datepicker wrapper
863
+ - Fixed overflow and positioning issues in time selection context
864
+ - Resolves [#32](https://github.com/NGXSMK/ngxsmk-datepicker/issues/32)
865
+ - **Angular 21+ Signal Forms Type Compatibility**: Fixed TypeScript compilation error with Angular 21+ Signal Forms
866
+ - Fixed `Type '() => string' is not assignable to type 'never'` error when using `[field]` input
867
+ - Updated `SignalFormField` type definition to be compatible with Angular 21's `FieldTree<Date, string>` types
868
+ - Maintains backward compatibility with Angular 17-20 where field input is optional
869
+ - Resolves [#33](https://github.com/NGXSMK/ngxsmk-datepicker/issues/33)
870
+
871
+ ## [1.9.3] - 2025-11-13
872
+
873
+ ### Changed
874
+
875
+ - **Version Update**: Updated to version 1.9.3
876
+
877
+ ### Added
878
+
879
+ - **Time-Only Picker**: New `[timeOnly]` input property to display only time selection without calendar
880
+ - Hides calendar grid and shows only time controls (hour, minute, AM/PM)
881
+ - Automatically enables `showTime` when `timeOnly` is true
882
+ - Perfect for time selection scenarios where date is not needed
883
+ - Value is still a Date object using today's date with selected time
884
+ - Placeholder automatically changes to "Select Time" in time-only mode
885
+ - Resolves [#29](https://github.com/NGXSMK/ngxsmk-datepicker/issues/29)
886
+ - **Modern Demo App UI**: Complete redesign of the demo application
887
+ - Modern navbar with glassmorphism effects, search functionality, and improved theme toggle
888
+ - Redesigned sidebar with gradient backgrounds, smooth animations, and visual indicators
889
+ - Enhanced icon sizes and better visual hierarchy
890
+ - Improved responsive design with better mobile experience
891
+ - Automatic system theme detection (dark/light mode preference)
892
+ - Gradient accents, shadows, and modern design patterns throughout
893
+
894
+ ### Fixed
895
+
896
+ - **Test Suite**: Fixed 25+ failing tests across multiple test files
897
+ - **Date Utils Tests**: Fixed `normalizeDate` comparison to use `.toEqual()` instead of `.toBe()` and corrected invalid date handling
898
+ - **Calendar Utils Tests**: Updated `generateMonthOptions` to include required year parameter, fixed `generateTimeOptions` to match new return type (object with `hourOptions`/`minuteOptions`), fixed `generateDecadeGrid` expectations, updated `processDateRanges` to match new return type (object instead of array)
899
+ - **Timezone Utils Tests**: Updated `formatDateWithTimezone` calls to match new signature (locale, options, timezone)
900
+ - **Edge Cases Tests**: Fixed `update12HourState` to check component properties instead of return value, changed `previewEndDate` to `hoveredDate`, fixed date validation and normalization expectations, corrected `applyCurrentTime` to use `currentDisplayHour` and `isPm`, fixed touch event mocks, added change detection for calendar toggle, corrected `isDateDisabled` null handling
901
+ - **Adapters Tests**: Fixed date normalization expectations to match actual behavior
902
+ - **Performance Utils Tests**: Changed array comparison to use `.toEqual()` instead of `.toBe()` for cached results
903
+ - **RTL Tests**: Fixed RTL detection from locale and document direction by properly setting document direction in tests
904
+ - **Touch Gestures Tests**: Fixed swipe handling by creating proper array-like TouchList mock that supports both `item()` and `[0]` indexing
905
+ - **Calendar Views Tests**: Fixed time slider tests to initialize dates and sliders correctly, fixed timeline generation test to call `generateTimeline()` directly
906
+ - **Recurring Dates Utils Tests**: Fixed pattern matching test to use correct date (Jan 6 is Monday, not Jan 8)
907
+ - All 353 tests now pass successfully
908
+
909
+ ## [1.9.2] - 2025-11-12
910
+
911
+ ### Changed
912
+
913
+ - **Bundle Optimization**: Optimized bundle size with improved TypeScript compiler settings
914
+ - Main bundle: ~127KB (source maps excluded from published package)
915
+ - Enhanced tree-shaking with optimized imports and compiler options
916
+ - Added `importsNotUsedAsValues: "remove"` for smaller output
917
+ - Disabled `preserveConstEnums` for better inlining
918
+ - **Build Process**:
919
+ - Source maps automatically removed from production builds (saves ~127KB)
920
+ - Improved build scripts with better error handling
921
+ - Enhanced bundle analysis that excludes source maps
922
+ - **Package Configuration**:
923
+ - Fixed package.json exports to eliminate build warnings
924
+ - Optimized `files` array to exclude unnecessary files
925
+ - Updated exports field for better module resolution
926
+ - **Test Configuration**:
927
+ - Added Zone.js polyfills to library test configuration
928
+ - Updated test commands to explicitly target library project
929
+ - Improved test reliability across Angular versions
930
+
931
+ ### Fixed
932
+
933
+ - Test suite configuration - added missing Zone.js polyfills for library tests
934
+ - Bundle analysis now correctly excludes source maps from size calculations
935
+ - Build warnings from conflicting export conditions resolved
936
+ - Source map removal script made more resilient for build environments
937
+
938
+ ## [1.9.1] - 2025-11-11
939
+
940
+ ### Fixed
941
+
942
+ - Minor bug fixes and improvements
943
+
944
+ ## [1.9.0] - 2025-11-10
945
+
946
+ ### Added
947
+
948
+ - Extension Points & Hooks system for customization
949
+ - Enhanced keyboard shortcuts (Y, N, W keys)
950
+ - Modern UI/UX with improved animations and responsiveness
951
+ - API documentation with TypeDoc
952
+ - Semantic release automation
953
+ - Animation performance optimizations with GPU acceleration
954
+ - Global search functionality in documentation
955
+ - Mobile playground for responsive testing
956
+
957
+ ### Changed
958
+
959
+ - Optimized animations using `transform3d` for hardware acceleration
960
+ - Reduced animation durations from 0.2s to 0.15s
961
+ - Improved transition performance with specific property targeting
962
+ - Updated documentation structure
963
+ - Enhanced mobile responsiveness
964
+
965
+ ### Fixed
966
+
967
+ - Animation performance issues
968
+ - Mobile responsive layout
969
+ - Sidebar scrollbar styling
970
+ - TypeScript warnings
971
+
972
+ ## [1.8.0] - 2025-11-09
973
+
974
+ ### Added
975
+
976
+ - Signal Forms support with `[field]` input for Angular 21+
977
+ - SSR compatibility with platform checks
978
+ - Zoneless support (works without Zone.js)
979
+ - Immediate value initialization when `[value]` is set programmatically
980
+ - Comprehensive documentation for Signals, Signal Forms, and SSR
981
+ - GitHub Pages deployment automation
982
+
983
+ ### Changed
984
+
985
+ - Updated peer dependencies to support Angular 17-22 (`>=17.0.0 <24.0.0`)
986
+ - Added `@angular/forms` as peer dependency
987
+ - Made `zone.js` optional peer dependency
988
+ - Enhanced `exports` field in package.json with proper types
989
+ - Optimized imports for better tree-shaking
990
+
991
+ ### Fixed
992
+
993
+ - Issue #13: Programmatic value setting now works correctly
994
+ - SSR compatibility: All browser APIs properly guarded
995
+ - Value input setter now initializes immediately
996
+
997
+ ## [1.7.0] - Previous Release
998
+
999
+ _Previous changelog entries..._
1000
+
1001
+ ---
1002
+
1003
+ ## Types of Changes
1004
+
1005
+ - **Added** for new features
1006
+ - **Changed** for changes in existing functionality
1007
+ - **Deprecated** for soon-to-be removed features
1008
+ - **Removed** for now removed features
1009
+ - **Fixed** for any bug fixes
1010
+ - **Security** for vulnerability fixes