ngxsmk-datepicker 2.2.12 → 2.2.13

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/MIGRATION.md ADDED
@@ -0,0 +1,1775 @@
1
+ # Migration Guide
2
+
3
+ This document provides migration instructions for upgrading between major versions of ngxsmk-datepicker.
4
+
5
+ **Last updated:** May 6, 2026 - **Current stable:** v2.2.13
6
+
7
+ ## Table of Contents
8
+
9
+ - [v2.2.7 → v2.2.11](#v227---v228)
10
+ - [v2.2.6 → v2.2.7](#v226---v227)
11
+ - [v2.2.3 → v2.2.6](#v223---v226)
12
+ - [v2.2.0 → v2.2.3](#v220---v223)
13
+ - [v2.1.8 → v2.2.0](#v218---v219)
14
+ - [v2.1.7 → v2.1.8](#v217---v218)
15
+ - [v2.1.6 → v2.1.7](#v216---v217)
16
+ - [v2.1.5 → v2.1.6](#v215---v216)
17
+ - [v2.1.4 → v2.1.5](#v214---v215)
18
+ - [v2.1.3 → v2.1.4](#v213---v214)
19
+ - [v2.1.2 → v2.1.3](#v212---v213)
20
+ - [v2.1.1 → v2.1.2](#v211---v212)
21
+ - [v2.0.11 → v2.1.1](#v2011---v211)
22
+ - [v2.0.6 → v2.0.7](#v206---v207)
23
+ - [v2.0.5 → v2.0.6](#v205---v206)
24
+ - [v2.0.4 → v2.0.5](#v204---v205)
25
+ - [v2.0.3 → v2.0.4](#v203---v204)
26
+ - [v2.0.2 → v2.0.3](#v202---v203)
27
+ - [v2.0.1 → v2.0.2](#v201---v202)
28
+ - [v2.0.0 → v2.0.1](#v200---v201)
29
+ - [v1.9.30 → v2.0.0](#v1930---v200)
30
+ - [v1.9.29 → v1.9.30](#v1929---v1930)
31
+ - [v1.9.27 → v1.9.28](#v1927---v1928)
32
+ - [v1.9.26 → v1.9.27](#v1926---v1927)
33
+ - [v1.9.25 → v1.9.26](#v1925---v1926)
34
+ - [v1.9.23 → v1.9.25](#v1923---v1925)
35
+ - [v1.9.22 → v1.9.23](#v1922---v1923)
36
+ - [v1.9.21 → v1.9.22](#v1921---v1922)
37
+ - [v1.9.20 → v1.9.21](#v1920---v1921)
38
+ - [v1.9.19 → v1.9.20](#v1919---v1920)
39
+ - [v1.9.18 → v1.9.19](#v1918---v1919)
40
+ - [v1.9.17 → v1.9.18](#v1917---v1918)
41
+ - [v1.9.16 → v1.9.17](#v1916---v1917)
42
+ - [v1.9.15 → v1.9.16](#v1915---v1916)
43
+ - [v1.9.14 → v1.9.15](#v1914---v1915)
44
+ - [v1.9.13 → v1.9.14](#v1913---v1914)
45
+ - [v1.9.12 → v1.9.13](#v1912---v1913)
46
+ - [v1.9.11 → v1.9.12](#v1911---v1912)
47
+ - [v1.9.10 → v1.9.11](#v1910---v1911)
48
+ - [v1.9.9 → v1.9.10](#v199---v1910)
49
+ - [v1.9.8 → v1.9.9](#v198---v199)
50
+ - [v1.9.7 → v1.9.8](#v197---v198)
51
+ - [v1.9.6 → v1.9.7](#v196---v197)
52
+ - [v1.9.5 → v1.9.6](#v195---v196)
53
+ - [v1.9.4 → v1.9.5](#v194---v195)
54
+ - [v1.9.3 → v1.9.4](#v193---v194)
55
+ - [v1.9.2 → v1.9.3](#v192---v193)
56
+ - [v1.9.1 → v1.9.2](#v191---v192)
57
+ - [v1.9.0 → v1.9.1](#v190---v191)
58
+ - [v1.8.0 → v1.9.0](#v180---v190)
59
+ - [v1.7.0 → v1.8.0](#v170---v180)
60
+
61
+ ## npm: skip v2.2.12
62
+
63
+ The **`2.2.12`** package on the registry is missing **`fesm2022/`** and **`types/`**. Stay on **`2.2.11`** or upgrade to **`2.2.13`** (or newer) once published ([#230](https://github.com/NGXSMK/ngxsmk-datepicker/issues/230)).
64
+
65
+ ```bash
66
+ npm install ngxsmk-datepicker@2.2.13
67
+ ```
68
+
69
+ ## v2.2.7 → v2.2.11
70
+
71
+ ### Changes
72
+
73
+ - **npm package**: The `2.2.7` tarball on the registry omitted `fesm2022/` and `types/`. **2.2.11** republishes the same library with a complete build. No API or feature changes versus the intended 2.2.7 release.
74
+
75
+ ### Migration Steps
76
+
77
+ No breaking changes.
78
+
79
+ ```bash
80
+ npm install ngxsmk-datepicker@2.2.13
81
+ ```
82
+
83
+ ## v2.2.6 → v2.2.7
84
+
85
+ ### Changes
86
+
87
+ - **Publishing**: npm releases again ship compiled Angular library output (`fesm2022/`, `types/`).
88
+ - **Range mode**: Optional `[allowSameDay]="true"` to complete a range when start and end are the same calendar day.
89
+
90
+ ### Migration Steps
91
+
92
+ No breaking changes. Use **2.2.11** on npm (the `2.2.7` npm package was incomplete; 2.2.11 matches the intended 2.2.7 release).
93
+
94
+ ```bash
95
+ npm install ngxsmk-datepicker@2.2.13
96
+ ```
97
+
98
+ ## v2.2.3 → v2.2.6
99
+
100
+ ### Changes
101
+
102
+ - **Timezone Support**: Added full support for IANA timezones in "Today" calculation. The component now correctly identifies "Today" based on the configured `timezone` input rather than just browser local time.
103
+ - **Date Validation**: Fixed an issue where "Today" could become unselectable if `minDate` was set to the current time later in the day. `minDate` validation now correctly normalizes to the start of the day.
104
+ - **Keyboard Shortcuts**: Updated `selectToday` shortcut to use the timezone-aware `today` value.
105
+
106
+ ### Migration Steps
107
+
108
+ No migration steps required.
109
+
110
+ ```bash
111
+ npm install ngxsmk-datepicker@2.2.6
112
+ ```
113
+
114
+ ## v2.2.0 → v2.2.3
115
+
116
+ ### Changes
117
+
118
+ - **Code Quality**: Refactored static Material support methods to reduce cognitive complexity and nesting depth (ESLint `S3776`, `S2004`).
119
+ - **Improved Coverage**: Increased function coverage to ~68.2% through new internal test suites.
120
+ - **Stability**: Fixed regression in touch/swipe event stubs and Material Form Field integration state.
121
+ - **Maintenance**: Marked `_allInstances` as `readonly` and removed redundant `demo` script.
122
+
123
+ ### Migration Steps
124
+
125
+ No migration steps required.
126
+
127
+ ```bash
128
+ npm install ngxsmk-datepicker@2.2.3
129
+ ```
130
+
131
+ ## v2.1.8 → v2.2.0
132
+
133
+ ### Changes
134
+
135
+ - **Header Select Synchronization**: Migrated header components to `ViewEncapsulation.None` and consolidated styles into `_header.scss`.
136
+ - **Improved Dropdown Layout**: Professional `space-between` layout for Month/Year selectors.
137
+ - **Enhanced Visibility**: High-contrast text for non-selected dropdown options.
138
+ - **Web Component Support**: New capability to compile/export as a Universal Custom Web Component for React, Vue, & Vanilla JS.
139
+ - **Performance**: Reduced calendar opening timers for faster feedback (150ms mobile / 60ms desktop).
140
+
141
+ ### Migration Steps
142
+
143
+ No migration steps required.
144
+
145
+ ```bash
146
+ npm install ngxsmk-datepicker@2.2.0
147
+ ```
148
+
149
+ ## v2.1.7 → v2.1.8
150
+
151
+ ### Changes
152
+
153
+ - **Fixed**: **appendToBody** popover positioning (Issue #206).
154
+ - **Fixed**: Datepicker in modal positioning fixes.
155
+ - **Changed**: Reduced loading/opening delays and CSS cleanup.
156
+
157
+ ### Migration Steps
158
+
159
+ No migration steps required.
160
+
161
+ ```bash
162
+ npm install ngxsmk-datepicker@2.1.8
163
+ ```
164
+
165
+ ## v2.1.6 → v2.1.7
166
+
167
+ ### Changes
168
+
169
+ - **Version Update**: Updated to version 2.1.7.
170
+ - **Fixed**: Resolved `No provider for DatePipe` runtime error. The library is now fully self-contained regarding `DatePipe` usage.
171
+ - No breaking changes.
172
+
173
+ ### Migration Steps
174
+
175
+ No migration steps required. If you previously added `DatePipe` to your `app.config.ts` or `AppModule` providers solely for this library, you can now safely remove it.
176
+
177
+ ```bash
178
+ npm install ngxsmk-datepicker@2.1.7
179
+ ```
180
+
181
+ ## v2.1.5 → v2.1.6
182
+
183
+ ### Changes
184
+
185
+ - **Version Update**: Updated to version 2.1.6.
186
+ - No breaking changes.
187
+
188
+ ### Migration Steps
189
+
190
+ No migration steps required.
191
+
192
+ ```bash
193
+ npm install ngxsmk-datepicker@2.1.6
194
+ ```
195
+
196
+ ## v2.1.4 → v2.1.5
197
+
198
+ ### Changes
199
+
200
+ - **Version Update**: Updated to version 2.1.5.
201
+ - **New**: User-facing validation messages (i18n) for invalid date, date before min, date after max; calendar loading state (visual + a11y); installation options doc and demo page updates; demo light/dark theme fix; optional issue-reproduction app. Service refactors (calendar generation, parsing) are internal.
202
+ - No breaking changes.
203
+
204
+ ### Migration Steps
205
+
206
+ No migration steps required.
207
+
208
+ ```bash
209
+ npm install ngxsmk-datepicker@2.1.5
210
+ ```
211
+
212
+ ## v2.1.3 → v2.1.4
213
+
214
+ ### Changes
215
+
216
+ - **Version Update**: Updated to version 2.1.4.
217
+ - **Improved Calendar Grid**: Calendar now always generates exactly 42 days (6 full weeks), providing layout stability during month navigation.
218
+ - **Enhanced Playground**: New options for `minDate`, `maxDate`, and `weekStart` constraints.
219
+ - No breaking changes.
220
+
221
+ ### Migration Steps
222
+
223
+ No migration steps required.
224
+
225
+ ```bash
226
+ npm install ngxsmk-datepicker@2.1.4
227
+ ```
228
+
229
+ ## v2.1.2 → v2.1.3
230
+
231
+ ### Changes
232
+
233
+ - **Version Update**: Updated to version 2.1.3.
234
+ - **Bug Fix**: Fixed inline datepicker width issue where it was constrained by container styles in some contexts. The inline mode now correctly fit its content.
235
+ - No breaking changes.
236
+
237
+ ### Migration Steps
238
+
239
+ No migration steps required.
240
+
241
+ ```bash
242
+ npm install ngxsmk-datepicker@2.1.3
243
+ ```
244
+
245
+
246
+ ## v2.1.1 → v2.1.2
247
+
248
+ ### Changes
249
+
250
+ - **Version Update**: Updated to version 2.1.2.
251
+ - **Circular Dependency Fix**: Resolved `RuntimeError: NG0200` when using forms by removing `NG_VALUE_ACCESSOR` from providers. This might require verifying your form integration if you were relying on side-effects of the previous implementation.
252
+ - **UI Refresh**: Implemented a "border detox" and refined aesthetics.
253
+ - **Removed Feature**: The range duration header (which displayed "X Days" during range selection) has been removed.
254
+ - **Mobile Stabilization**: Critical fixes for mobile browsers.
255
+
256
+ No migration steps required.
257
+
258
+ ```bash
259
+ npm install ngxsmk-datepicker@latest
260
+ ```
261
+
262
+
263
+ ## v2.0.11 → v2.1.1
264
+
265
+ ### ⚠️ CRITICAL NOTICE
266
+
267
+ **Versions 2.0.10 and 2.0.11 are broken and should NOT be used.**
268
+
269
+ These versions have critical package configuration issues that prevent proper TypeScript module resolution. If you have installed either of these versions, please upgrade to v2.1.1 immediately.
270
+
271
+ ### Changes
272
+
273
+ - **Package Fixes**: Corrected TypeScript declaration paths and package configuration
274
+ - Fixed `types` and `typings` fields to point to the correct location: `types/ngxsmk-datepicker.d.ts`
275
+ - Simplified exports configuration to match stable v2.0.9 format
276
+ - Removed disallowed `esm2022` property from package.json
277
+ - **No Breaking Changes**: This is a minor version update with package configuration improvements
278
+ - **Recommended Update**: All v2.0.x users should update to v2.1.1 for proper TypeScript support
279
+ - **Skip 2.0.10 & 2.0.11**: These versions have been unpublished from npm due to broken package configuration
280
+
281
+ ### Migration Steps
282
+
283
+ Update your package.json to use the new version:
284
+
285
+ ```bash
286
+ npm install ngxsmk-datepicker@2.1.1
287
+ ```
288
+
289
+ **No code changes required.** This update only fixes package configuration issues that were preventing proper TypeScript declaration file resolution.
290
+
291
+ ### What's Fixed
292
+
293
+ If you were experiencing the following error:
294
+
295
+ ```
296
+ Could not find a declaration file for module 'ngxsmk-datepicker'
297
+ ```
298
+
299
+ This is now resolved in v2.1.1. The package now correctly points to its TypeScript declaration files.
300
+
301
+ ## v2.0.7 → v2.0.8
302
+
303
+ ### Changes
304
+
305
+ - **Version Update**: Updated to version 2.0.8
306
+ - **Ionic Integration**: Added automatic CSS variable support for seamless theming in Ionic apps
307
+ - **Optimized Change Detection**: Switched to Signal-based updates for better performance
308
+ - **Mobile UX Fixes**: Fixed page jumping on date selection and improved dropdown scrolling
309
+ - No breaking changes.
310
+
311
+ ### Migration Steps
312
+
313
+ No migration steps required. This is a patch version update:
314
+
315
+ ```bash
316
+ npm install ngxsmk-datepicker@2.0.8
317
+ ```
318
+
319
+ ## v2.0.6 → v2.0.7
320
+
321
+ ### Changes
322
+
323
+ - **Version Update**: Updated to version 2.0.7
324
+ - No breaking changes.
325
+
326
+ ### Migration Steps
327
+
328
+ No migration steps required. This is a patch version update:
329
+
330
+ ```bash
331
+ npm install ngxsmk-datepicker@2.0.7
332
+ ```
333
+
334
+ ## v2.0.5 → v2.0.6
335
+
336
+ ### Changes
337
+
338
+ - **Enhanced Range Picker Reselection**: Improved comprehensive range reselection behavior
339
+ - Clicking the start date when a complete range is selected now clears only the end date
340
+ - 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
341
+ - **NEW**: Clicking any date within the selected range now clears the end date and sets the clicked date as the new start date
342
+ - Allows users to easily redefine date ranges from any point (start, end, or within the range)
343
+ - **Code Cleanup**: Removed unnecessary inline comments from range selection logic for cleaner, more maintainable code
344
+ - No breaking changes.
345
+
346
+ ### Migration Steps
347
+
348
+ No migration steps required. This is a patch version update:
349
+
350
+ ```bash
351
+ npm install ngxsmk-datepicker@2.0.6
352
+ ```
353
+
354
+ ## v2.0.4 -> v2.0.5
355
+
356
+ ### Changes
357
+
358
+ - **Documentation**: Added "Form Validation" section to clarify `readonly` input behavior and `allowTyping` workaround.
359
+ - General updates and improvements.
360
+ - No breaking changes.
361
+
362
+ ## v2.0.3 → v2.0.4
363
+
364
+ ### Changes
365
+
366
+ - Bug fix: Fixed `touched` state sync for Signal Forms validation.
367
+ - No breaking changes.
368
+
369
+ ## v2.0.2 → v2.0.3
370
+
371
+ ### Changes
372
+
373
+ - Bug fixes: #136, #112, #84, #71 verified.
374
+ - Code cleanup in `field-sync.service.ts`.
375
+ - No breaking changes.
376
+
377
+ ## v2.0.1 → v2.0.2
378
+
379
+ ### Changes
380
+
381
+ - Documentation updates to reflect new version
382
+
383
+ ## v2.0.0 → v2.0.1
384
+
385
+ ### Changes
386
+
387
+ - Bug fixes and improvements
388
+
389
+ ## v1.9.30 → v2.0.0
390
+
391
+ ### Overview
392
+
393
+ v2.0.0 is a major version update representing significant architectural improvements, enhanced features, and modernization of the codebase. While maintaining backward compatibility for most features, some breaking changes are necessary for improved performance, type safety, and Angular alignment.
394
+
395
+ ### Breaking Changes
396
+
397
+ #### 1. Angular Version Requirement
398
+
399
+ **Change**: Minimum Angular version updated to 17.0.0+
400
+
401
+ **Reason**: To leverage modern Angular features (signals, standalone components, built-in control flow)
402
+
403
+ **Migration**:
404
+
405
+ ```bash
406
+ # Update Angular to v17+
407
+ ng update @angular/core@17 @angular/cli@17
408
+
409
+ # Then update ngxsmk-datepicker
410
+ npm install ngxsmk-datepicker@2.0.0
411
+ ```
412
+
413
+ #### 2. Signal Forms Integration
414
+
415
+ **Change**: Enhanced Signal Forms API with stricter typing
416
+
417
+ **Before** (v1.x):
418
+
419
+ ```typescript
420
+ // Signal form field with loose typing
421
+ [field] = "mySignalFormField";
422
+ ```
423
+
424
+ **After** (v2.0):
425
+
426
+ ```typescript
427
+ // Import SignalFormFieldConfig for type safety
428
+ import { SignalFormFieldConfig } from "ngxsmk-datepicker";
429
+
430
+ // Signal form field with strict typing
431
+ [field] = "mySignalFormField"; // Now with proper type inference
432
+ ```
433
+
434
+ **Migration**: No code changes required, but TypeScript will now catch type errors earlier.
435
+
436
+ #### 3. Timezone Utilities API
437
+
438
+ **Change**: Improved timezone utility function signatures for type safety
439
+
440
+ **Before** (v1.x):
441
+
442
+ ```typescript
443
+ // Loose parameter types
444
+ formatDateWithTimezone(date, locale, options, timezone);
445
+ ```
446
+
447
+ **After** (v2.0):
448
+
449
+ ```typescript
450
+ // Strict parameter types with proper interfaces
451
+ formatDateWithTimezone(
452
+ date: Date,
453
+ locale: string,
454
+ options: Intl.DateTimeFormatOptions,
455
+ timezone?: string
456
+ ): string;
457
+ ```
458
+
459
+ **Migration**: Ensure you're passing correctly typed parameters to timezone utilities.
460
+
461
+ #### 4. Deprecated Properties Removed
462
+
463
+ **Change**: Removed properties deprecated in v1.9.x
464
+
465
+ **Removed**:
466
+
467
+ - `numberOfMonths` (use `calendarCount` instead - deprecated since v1.9.12)
468
+
469
+ **Migration**:
470
+
471
+ ```typescript
472
+ // Before (v1.x)
473
+ <ngxsmk-datepicker [numberOfMonths]="2"></ngxsmk-datepicker>
474
+
475
+ // After (v2.0)
476
+ <ngxsmk-datepicker [calendarCount]="2"></ngxsmk-datepicker>
477
+ ```
478
+
479
+ #### 5. Service Extraction
480
+
481
+ **Change**: Internal architecture refactored - services extracted from main component
482
+
483
+ **Impact**: If you were extending or monkey-patching internal component methods, this may break.
484
+
485
+ **Affected Internal Services**:
486
+
487
+ - `CalendarGenerationService` - Calendar generation logic
488
+ - `DatepickerParsingService` - Date parsing and formatting
489
+ - `TouchGestureHandlerService` - Touch gesture handling
490
+ - `PopoverPositioningService` - Popover positioning
491
+
492
+ **Migration**: Use public APIs instead of internal methods. If you need access to these services, inject them:
493
+
494
+ ```typescript
495
+ import { CalendarGenerationService } from 'ngxsmk-datepicker';
496
+
497
+ constructor(private calendarService: CalendarGenerationService) {}
498
+ ```
499
+
500
+ ### New Features
501
+
502
+ #### 1. Enhanced Time Selection
503
+
504
+ ```typescript
505
+ // Time range mode
506
+ <ngxsmk-datepicker
507
+ [timeRangeMode]="true"
508
+ [showTime]="true"
509
+ ></ngxsmk-datepicker>
510
+
511
+ // Seconds support (already available, now documented)
512
+ <ngxsmk-datepicker
513
+ [showSeconds]="true"
514
+ [secondInterval]="5"
515
+ ></ngxsmk-datepicker>
516
+
517
+ // Step configuration
518
+ <ngxsmk-datepicker
519
+ [minuteInterval]="15"
520
+ [secondInterval]="30"
521
+ ></ngxsmk-datepicker>
522
+ ```
523
+
524
+ #### 2. Internationalization Improvements
525
+
526
+ ```typescript
527
+ // Custom date format patterns
528
+ import { CustomDateFormatService } from "ngxsmk-datepicker";
529
+
530
+ customFormat.format(date, "YYYY-MM-DD HH:mm:ss", "en-US");
531
+
532
+ // Locale-aware number formatting
533
+ import { formatLocaleNumber } from "ngxsmk-datepicker";
534
+
535
+ formatLocaleNumber(42, "de-DE"); // "42"
536
+ ```
537
+
538
+ #### 3. Animation API
539
+
540
+ ```typescript
541
+ // Configure animations
542
+ <ngxsmk-datepicker
543
+ [animationConfig]="{
544
+ duration: 200,
545
+ easing: 'ease-in-out',
546
+ enabled: true
547
+ }"
548
+ ></ngxsmk-datepicker>
549
+
550
+ // Respects prefers-reduced-motion automatically
551
+ ```
552
+
553
+ #### 4. Multi-Calendar Sync Scrolling
554
+
555
+ ```typescript
556
+ // Synchronized scrolling for multi-calendar layouts
557
+ <ngxsmk-datepicker
558
+ [calendarCount]="2"
559
+ [syncScroll]="true"
560
+ [monthGap]="1"
561
+ ></ngxsmk-datepicker>
562
+ ```
563
+
564
+ ### Performance Improvements
565
+
566
+ #### 1. Virtual Scrolling
567
+
568
+ Year and decade views now use virtual scrolling for better performance with large date ranges:
569
+
570
+ ```typescript
571
+ // Automatically enabled for year/decade views
572
+ // Handles 100+ years efficiently
573
+ <ngxsmk-datepicker [currentView]="'year'"></ngxsmk-datepicker>
574
+ ```
575
+
576
+ #### 2. Signal-Based Reactivity
577
+
578
+ Change detection is now automatic and more efficient:
579
+
580
+ ```typescript
581
+ // Automatically optimized - no manual change detection needed
582
+ component.selectedDate.set(new Date());
583
+ ```
584
+
585
+ #### 3. Lazy Loading
586
+
587
+ Multi-month calendars are now lazily rendered:
588
+
589
+ ```typescript
590
+ // Only visible calendars + buffer are rendered
591
+ <ngxsmk-datepicker [calendarCount]="12"></ngxsmk-datepicker>
592
+ ```
593
+
594
+ ### Testing Infrastructure
595
+
596
+ New testing utilities are available:
597
+
598
+ ```typescript
599
+ // Accessibility testing
600
+ import { runAccessibilityScan } from "ngxsmk-datepicker/testing";
601
+
602
+ // Performance benchmarking
603
+ import { measureSync, benchmark } from "ngxsmk-datepicker/testing";
604
+
605
+ // Visual regression testing
606
+ import { captureElementScreenshot, compareImageData } from "ngxsmk-datepicker/testing";
607
+ ```
608
+
609
+ ### Documentation Updates
610
+
611
+ - ✅ Complete API reference with JSDoc
612
+ - ✅ Enhanced accessibility guide
613
+ - ✅ Performance testing guide
614
+ - ✅ Visual regression testing guide
615
+ - ✅ Improvement report
616
+
617
+ ### Migration Steps
618
+
619
+ 1. **Update Angular** (if needed):
620
+
621
+ ```bash
622
+ ng update @angular/core@17 @angular/cli@17
623
+ ```
624
+
625
+ 2. **Update ngxsmk-datepicker**:
626
+
627
+ ```bash
628
+ npm install ngxsmk-datepicker@2.0.0
629
+ ```
630
+
631
+ 3. **Replace deprecated properties**:
632
+
633
+ ```typescript
634
+ // Replace numberOfMonths with calendarCount
635
+ [numberOfMonths]="2" → [calendarCount]="2"
636
+ ```
637
+
638
+ 4. **Update imports** (if using internal services):
639
+
640
+ ```typescript
641
+ // Use public APIs instead of internal methods
642
+ import { CalendarGenerationService } from "ngxsmk-datepicker";
643
+ ```
644
+
645
+ 5. **Test thoroughly**:
646
+ - Test all date selection modes
647
+ - Test time selection
648
+ - Test keyboard navigation
649
+ - Test mobile interactions
650
+ - Run accessibility tests
651
+
652
+ 6. **Verify bundle size**:
653
+ ```bash
654
+ ng build --prod
655
+ # Check bundle analyzer if needed
656
+ ```
657
+
658
+ ### Rollback Instructions
659
+
660
+ If you encounter issues, you can rollback to v1.9.30:
661
+
662
+ ```bash
663
+ npm install ngxsmk-datepicker@1.9.30
664
+ ```
665
+
666
+ ### Support
667
+
668
+ For migration issues or questions:
669
+
670
+ - Check the [README](README.md) for updated examples
671
+ - Review [IMPROVEMENT_REPORT.md](IMPROVEMENT_REPORT.md) for architectural changes
672
+ - Open an issue on GitHub with migration questions
673
+
674
+ ---
675
+
676
+ ## v1.9.29 → v1.9.30
677
+
678
+ ### Installation
679
+
680
+ Update to the latest version:
681
+
682
+ ```bash
683
+ npm install ngxsmk-datepicker@2.0.0
684
+ ```
685
+
686
+ ### Changes
687
+
688
+ - **Signal Form Resolution**: Improved the way signal-based form fields are resolved. The datepicker now correctly handles signals that have field properties attached directly to the signal function.
689
+ - **Improved Validation**: Enhanced detection of `required` state from Signal Forms schema.
690
+ - **Public API**: Exported `SignalFormFieldConfig` for better type safety.
691
+
692
+ ### Breaking Changes
693
+
694
+ None in v2.0.0.
695
+
696
+ ### v1.9.30
697
+
698
+ None in v1.9.30.
699
+
700
+ ### Migration Steps
701
+
702
+ If you are using custom types for Signal Form fields, you can now use the officially exported `SignalFormFieldConfig` interface.
703
+
704
+ ## v1.9.27 → v1.9.28
705
+
706
+ ### Installation
707
+
708
+ Update to the latest version:
709
+
710
+ ```bash
711
+ npm install ngxsmk-datepicker@1.9.28
712
+ ```
713
+
714
+ ### Changes
715
+
716
+ - **Input Attributes**: New `inputId`, `name`, and `autocomplete` inputs are available.
717
+ - **Improved Validation**: The `required` attribute is now correctly reflected on the internal input element when set via form schema.
718
+
719
+ ### Breaking Changes
720
+
721
+ None in v1.9.28.
722
+
723
+ ### Migration Steps
724
+
725
+ No code changes required. The new features are additive.
726
+
727
+ ## v1.9.26 → v1.9.27
728
+
729
+ ### Installation
730
+
731
+ Update to the latest version:
732
+
733
+ ```bash
734
+ npm install ngxsmk-datepicker@1.9.27
735
+ ```
736
+
737
+ ### Changes
738
+
739
+ - **Modern Control Flow**: Components migrated to Angular's built-in `@if` and `@for` blocks.
740
+ - **Improved Resolution**: Resolved static analysis and module resolution issues in monorepos.
741
+
742
+ ### Breaking Changes
743
+
744
+ None in v1.9.27.
745
+
746
+ ### Migration Steps
747
+
748
+ No code changes required. The changes are focused on internal library architecture and build compatibility.
749
+
750
+ ## v1.9.25 → v1.9.26
751
+
752
+ > ⚠️ **Warning**: Version `1.9.26` has broken styles. It is highly recommended to skip this version and upgrade directly to `1.9.27`.
753
+
754
+ ### Installation
755
+
756
+ Update to the latest version:
757
+
758
+ ```bash
759
+ npm install ngxsmk-datepicker@1.9.26
760
+ ```
761
+
762
+ ### Changes
763
+
764
+ - **Core Architecture**: Major internal refactoring to improve maintainability and performance.
765
+ - **Ionic Integration**: Fixed localized style exporting issues.
766
+
767
+ ### Breaking Changes
768
+
769
+ None in v1.9.26.
770
+
771
+ ### Migration Steps
772
+
773
+ No code changes required. The refactoring is internal and maintains full backward compatibility.
774
+
775
+ ## v1.9.23 → v1.9.25
776
+
777
+ ### Installation
778
+
779
+ ```bash
780
+ npm install ngxsmk-datepicker@1.9.25
781
+ ```
782
+
783
+ ### Changes
784
+
785
+ - **Strict Mode**: Improved support for strict template type checking in IDEs.
786
+ - **NPM Package**: Fixed missing README in package distribution.
787
+
788
+ ### Breaking Changes
789
+
790
+ None in v1.9.25.
791
+
792
+ ## v1.9.22 → v1.9.23
793
+
794
+ ### Installation
795
+
796
+ ```bash
797
+ npm install ngxsmk-datepicker@1.9.23
798
+ ```
799
+
800
+ ### Changes
801
+
802
+ - **Signal Forms**: Fixed dirty state tracking for `[field]` binding.
803
+ - **CSS Variables**: Improved theming specificity for global variables.
804
+
805
+ ### Breaking Changes
806
+
807
+ None in v1.9.23.
808
+
809
+ ## v1.9.21 → v1.9.22
810
+
811
+ ### Installation
812
+
813
+ Update to the latest version:
814
+
815
+ ```bash
816
+ npm install ngxsmk-datepicker@1.9.22
817
+ ```
818
+
819
+ ### Changes
820
+
821
+ - **Version Update**: Updated to version 1.9.22
822
+ - **Stable Release**: Version 1.9.22 is the current stable version
823
+
824
+ ### Bug Fixes
825
+
826
+ - **Form Control Value Initialization**: Fixed issue where datepicker was not properly updating the displayed month when initialized with form control values
827
+ - The datepicker now correctly displays the month from form control values instead of defaulting to the current month
828
+ - Added proper signal updates and change detection in `writeValue()` method
829
+ - This fix ensures that when using Reactive Forms with initial date values, the calendar opens to the correct month
830
+ - Example: If a form control has a value of January 2026, the calendar will now open showing January instead of the current month
831
+
832
+ - **Locale Week Start Detection**: Fixed `getFirstDayOfWeek()` function to properly return 1 for en-GB locale and other European locales
833
+ - Added fallback logic for locales where `Intl.Locale.weekInfo` is not available (older browsers/environments)
834
+ - Now correctly returns Monday (1) for en-GB, en-AU, en-NZ, and most European locales
835
+ - Maintains backward compatibility with en-US and other locales that use Sunday (0) as first day
836
+ - All calendar utils tests now passing
837
+
838
+ ### Breaking Changes
839
+
840
+ None in v1.9.22.
841
+
842
+ ### Deprecations
843
+
844
+ None in v1.9.22.
845
+
846
+ ## v1.9.20 → v1.9.21
847
+
848
+ ### Installation
849
+
850
+ Update to the latest version:
851
+
852
+ ```bash
853
+ npm install ngxsmk-datepicker@latest
854
+ ```
855
+
856
+ ### New Features
857
+
858
+ #### Mobile-Specific Features
859
+
860
+ Version 1.9.21 introduces comprehensive mobile optimization:
861
+
862
+ ```typescript
863
+ // Enable native picker on mobile devices (automatic detection)
864
+ <ngxsmk-datepicker
865
+ [useNativePicker]="true"
866
+ [autoDetectMobile]="true"
867
+ [mobileModalStyle]="'bottom-sheet'"
868
+ [enableHapticFeedback]="true">
869
+ </ngxsmk-datepicker>
870
+ ```
871
+
872
+ **New Inputs:**
873
+
874
+ - `useNativePicker`: Enable native date picker on mobile devices
875
+ - `autoDetectMobile`: Automatically detect mobile devices (default: `true`)
876
+ - `mobileModalStyle`: Choose modal style (`'bottom-sheet'`, `'center'`, `'fullscreen'`)
877
+ - `enableHapticFeedback`: Enable haptic feedback for interactions
878
+
879
+ #### Advanced Selection Modes
880
+
881
+ New selection modes extend the existing `mode` input:
882
+
883
+ ```typescript
884
+ // Week selection
885
+ <ngxsmk-datepicker mode="week"></ngxsmk-datepicker>
886
+
887
+ // Month selection
888
+ <ngxsmk-datepicker mode="month"></ngxsmk-datepicker>
889
+
890
+ // Quarter selection
891
+ <ngxsmk-datepicker mode="quarter"></ngxsmk-datepicker>
892
+
893
+ // Year selection
894
+ <ngxsmk-datepicker mode="year"></ngxsmk-datepicker>
895
+ ```
896
+
897
+ #### Enhanced Time Selection
898
+
899
+ Seconds selection is now available:
900
+
901
+ ```typescript
902
+ <ngxsmk-datepicker
903
+ [showTime]="true"
904
+ [showSeconds]="true"
905
+ [secondInterval]="1">
906
+ </ngxsmk-datepicker>
907
+ ```
908
+
909
+ **New Inputs:**
910
+
911
+ - `showSeconds`: Show seconds selector in time picker
912
+ - `secondInterval`: Interval for seconds selection (default: `1`)
913
+
914
+ ### Migration Steps
915
+
916
+ No migration steps required. This is a patch version with new features that are opt-in:
917
+
918
+ 1. **Existing code continues to work**: All existing implementations remain unchanged
919
+ 2. **New features are opt-in**: Mobile features and new selection modes require explicit configuration
920
+ 3. **Backward compatible**: All changes maintain full backward compatibility
921
+
922
+ ### Breaking Changes
923
+
924
+ None. This version is fully backward compatible.
925
+
926
+ ### Compatibility
927
+
928
+ - Angular 17-22
929
+ - All existing features continue to work
930
+ - New features are additive only
931
+
932
+ ## v1.9.15 → v1.9.16
933
+
934
+ ### Fixed
935
+
936
+ - **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 }`
937
+ - Added memo cache invalidation before calendar generation when clicking dates from previous/next months in range mode
938
+ - Fixed issue where clicking dates from previous months would navigate but memoized functions would use stale month/year values
939
+ - Now properly invalidates memo cache in single, range, and multiple modes when navigating to different months via date clicks
940
+ - Users can now select dates from previous months in range mode without issues, allowing proper range selection across month boundaries
941
+
942
+ ### Changed
943
+
944
+ - **Version Update**: Updated to version 1.9.16
945
+ - **Stable Release**: Version 1.9.16 is the current stable version
946
+
947
+ ### Migration Steps
948
+
949
+ No migration steps required. This is a patch version with bug fixes only. Simply update your package version:
950
+
951
+ ```bash
952
+ npm install ngxsmk-datepicker@1.9.16
953
+ ```
954
+
955
+ ### Breaking Changes
956
+
957
+ None in v1.9.16.
958
+
959
+ ### Deprecations
960
+
961
+ None in v1.9.16.
962
+
963
+ ### Notes
964
+
965
+ - This version maintains full backward compatibility with v1.9.15. All existing code will continue to work without modifications.
966
+ - The fix ensures that range mode date pickers work correctly when users click on dates from previous months, especially when starting with null initial values.
967
+
968
+ ## v1.9.20 → v1.9.21
969
+
970
+ ### Changed
971
+
972
+ - **Version Update**: Updated to version 1.9.21
973
+ - **Stable Release**: Version 1.9.21 is the current stable version
974
+
975
+ ### Installation
976
+
977
+ ```bash
978
+ npm install ngxsmk-datepicker@1.9.21
979
+ ```
980
+
981
+ ### Breaking Changes
982
+
983
+ None in v1.9.21.
984
+
985
+ ### Deprecations
986
+
987
+ None in v1.9.21.
988
+
989
+ ### Migration Steps
990
+
991
+ - This version maintains full backward compatibility with v1.9.20. All existing code will continue to work without modifications.
992
+ - No code changes required.
993
+
994
+ ## v1.9.19 → v1.9.20
995
+
996
+ ### Fixed
997
+
998
+ - **Test Environment Compatibility (Issue #71)**: Fixed `TypeError: window.matchMedia is not a function` error in test environments (jsdom/Vitest)
999
+ - Added error handling for `window.matchMedia` in `applyAnimationConfig()` method
1000
+ - Component now gracefully handles missing `matchMedia` API in test environments
1001
+ - Prevents test failures when running with Vitest and jsdom
1002
+ - Added comprehensive test coverage for `matchMedia` compatibility scenarios
1003
+
1004
+ ### Changed
1005
+
1006
+ - **Version Update**: Updated to version 1.9.20
1007
+ - **Stable Release**: Version 1.9.20 is the current stable version
1008
+
1009
+ ### Installation
1010
+
1011
+ ```bash
1012
+ npm install ngxsmk-datepicker@1.9.20
1013
+ ```
1014
+
1015
+ ### Breaking Changes
1016
+
1017
+ None in v1.9.20.
1018
+
1019
+ ### Deprecations
1020
+
1021
+ None in v1.9.20.
1022
+
1023
+ ### Migration Steps
1024
+
1025
+ - This version maintains full backward compatibility with v1.9.19. All existing code will continue to work without modifications.
1026
+ - No code changes required.
1027
+ - Fixes test compatibility issues with Vitest and jsdom environments.
1028
+
1029
+ ## v1.9.18 → v1.9.19
1030
+
1031
+ ### Added
1032
+
1033
+ - **Comprehensive Responsive Layout Redesign**: Complete redesign of demo project layout for all screen sizes
1034
+ - Redesigned navbar for all breakpoints (320px-374px, 375px-479px, 480px-599px, 600px-767px, 768px-1023px, 1024px+)
1035
+ - Enhanced sidebar navigation with mobile drawer, tablet collapsible, and desktop fixed layouts
1036
+ - Responsive hero section with adaptive typography and button layouts
1037
+ - Feature grid responsive design (1 column → 2 columns → 3 columns → 4 columns)
1038
+ - Optimized content sections with responsive padding, typography, and spacing
1039
+
1040
+ ### Changed
1041
+
1042
+ - **Version Update**: Updated to version 1.9.19
1043
+ - **Stable Release**: Version 1.9.19 is the current stable version
1044
+ - **Meta Tag Update**: Replaced deprecated `apple-mobile-web-app-capable` with `mobile-web-app-capable`
1045
+ - **Code Cleanup**: Removed unnecessary comments from SCSS files for cleaner codebase
1046
+
1047
+ ### Installation
1048
+
1049
+ ```bash
1050
+ npm install ngxsmk-datepicker@1.9.19
1051
+ ```
1052
+
1053
+ ### Breaking Changes
1054
+
1055
+ None in v1.9.19.
1056
+
1057
+ ### Deprecations
1058
+
1059
+ None in v1.9.19.
1060
+
1061
+ ### Migration Steps
1062
+
1063
+ - This version maintains full backward compatibility with v1.9.18. All existing code will continue to work without modifications.
1064
+ - No code changes required.
1065
+ - Demo project layout improvements are automatic and require no code changes.
1066
+
1067
+ ## v1.9.17 → v1.9.18
1068
+
1069
+ ### Fixed
1070
+
1071
+ - **Mobile Touch Event Handling**: Improved touch listener attachment when calendar opens on mobile devices
1072
+ - Touch listeners now properly attach when calendar first opens, eliminating the need to navigate months first
1073
+ - Added retry mechanism with multiple attempts to ensure listeners are attached even on slower mobile devices
1074
+ - Improved timing with double `requestAnimationFrame` calls and multiple retry strategies
1075
+
1076
+ ### Changed
1077
+
1078
+ - **Version Update**: Updated to version 1.9.18
1079
+ - **Stable Release**: Version 1.9.18 is the current stable version
1080
+
1081
+ ### Installation
1082
+
1083
+ ```bash
1084
+ npm install ngxsmk-datepicker@1.9.18
1085
+ ```
1086
+
1087
+ ### Breaking Changes
1088
+
1089
+ None in v1.9.18.
1090
+
1091
+ ### Deprecations
1092
+
1093
+ None in v1.9.18.
1094
+
1095
+ ### Migration Steps
1096
+
1097
+ - This version maintains full backward compatibility with v1.9.17. All existing code will continue to work without modifications.
1098
+ - No code changes required.
1099
+
1100
+ ## v1.9.16 → v1.9.17
1101
+
1102
+ ### Changed
1103
+
1104
+ - **Version Update**: Updated to version 1.9.17
1105
+ - **Stable Release**: Version 1.9.17 is the current stable version
1106
+
1107
+ ### Migration Steps
1108
+
1109
+ No migration steps required. This is a patch version update. Simply update your package version:
1110
+
1111
+ ```bash
1112
+ npm install ngxsmk-datepicker@1.9.17
1113
+ ```
1114
+
1115
+ ### Breaking Changes
1116
+
1117
+ None in v1.9.17.
1118
+
1119
+ ### Deprecations
1120
+
1121
+ None in v1.9.17.
1122
+
1123
+ ### Notes
1124
+
1125
+ - This version maintains full backward compatibility with v1.9.16. All existing code will continue to work without modifications.
1126
+ - This is a patch version update with no code changes required.
1127
+
1128
+ ## v1.9.14 → v1.9.15
1129
+
1130
+ ### Fixed
1131
+
1132
+ - **Moment Object Binding with ngModel**: Fixed issue where Moment.js objects passed via `[(ngModel)]` were not binding correctly with the datepicker
1133
+ - Updated `writeValue()` method to normalize Moment.js objects before passing to `initializeValue()`
1134
+ - Ensures Moment.js objects (including those with `utcOffset()` applied) are properly converted to Date objects when binding with template-driven forms
1135
+ - Now correctly handles `moment(response.Date).utcOffset(timezone)` when setting via ngModel
1136
+ - **Date Clicks After Month Navigation**: Fixed issue where dates became unclickable after navigating backward or forward months
1137
+ - Updated `isDateDisabledMemo` getter to properly invalidate cached memoized function when month/year changes
1138
+ - Added month/year change detection to ensure disabled date cache is refreshed after navigation
1139
+ - Dates in previous/next months are now properly clickable without needing to close and reopen the datepicker
1140
+
1141
+ ### Changed
1142
+
1143
+ - **Version Update**: Updated to version 1.9.15
1144
+ - **Stable Release**: Version 1.9.15 is the current stable version
1145
+
1146
+ ### Migration Steps
1147
+
1148
+ No migration steps required. This is a patch version with bug fixes only. Simply update your package version:
1149
+
1150
+ ```bash
1151
+ npm install ngxsmk-datepicker@1.9.15
1152
+ ```
1153
+
1154
+ All fixes are backward compatible and require no code changes. This version is compatible with Angular 17 and up versions.
1155
+
1156
+ ## v1.9.13 → v1.9.14
1157
+
1158
+ ### Fixed
1159
+
1160
+ - **Date Picker Selection Issue**: Fixed issue where date picker was not working properly when selecting dates, especially in range mode
1161
+ - Added proper change detection scheduling when setting start date in range mode
1162
+ - Added memo cache invalidation to ensure UI updates correctly reflect selected dates
1163
+ - Fixed UI not updating when only start date is selected in range mode
1164
+ - **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
1165
+ - Added `momentToDate()` method that detects and preserves timezone offsets from Moment.js objects
1166
+ - Now correctly handles `moment().utcOffset('-0600')` without requiring `toDate()` which loses timezone information
1167
+
1168
+ ### Changed
1169
+
1170
+ - **Version Update**: Updated to version 1.9.14
1171
+ - **Stable Release**: Version 1.9.14 is the current stable version
1172
+
1173
+ ### Migration Steps
1174
+
1175
+ No migration steps required. This is a patch version with bug fixes only. Simply update your package version:
1176
+
1177
+ ```bash
1178
+ npm install ngxsmk-datepicker@1.9.14
1179
+ ```
1180
+
1181
+ All fixes are backward compatible and require no code changes.
1182
+
1183
+ ## v1.9.12 → v1.9.13
1184
+
1185
+ ### Fixed
1186
+
1187
+ - **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)]`
1188
+ - **Range Mode Date Selection**: Fixed issue where dates became disabled/unclickable after navigating to previous or next months in range mode
1189
+ - **Moment.js Object Handling**: Fixed issue where Moment.js objects in range values and arrays were not being properly normalized and converted to Date objects
1190
+
1191
+ ### Changed
1192
+
1193
+ - **Version Update**: Updated to version 1.9.13
1194
+ - **Stable Release**: Version 1.9.13 is the current stable version
1195
+
1196
+ ### Migration Steps
1197
+
1198
+ No migration steps required. This is a patch version with bug fixes only. Simply update your package version:
1199
+
1200
+ ```bash
1201
+ npm install ngxsmk-datepicker@1.9.13
1202
+ ```
1203
+
1204
+ All fixes are backward compatible and require no code changes.
1205
+
1206
+ ## v1.9.11 → v1.9.12
1207
+
1208
+ ### Changed
1209
+
1210
+ - **Version Update**: Updated to version 1.9.12
1211
+ - **Stable Release**: Version 1.9.12 is the current stable version
1212
+
1213
+ ### Migration Steps
1214
+
1215
+ No code changes required. This is a minor version update with backward compatibility:
1216
+
1217
+ 1. Update package version:
1218
+
1219
+ ```bash
1220
+ npm install ngxsmk-datepicker@^1.9.12
1221
+ ```
1222
+
1223
+ 2. Rebuild your application:
1224
+
1225
+ ```bash
1226
+ npm run build
1227
+ ```
1228
+
1229
+ 3. Run tests to ensure everything works:
1230
+ ```bash
1231
+ npm test
1232
+ ```
1233
+
1234
+ **Note**: This version maintains full backward compatibility with v1.9.11. All existing code will continue to work without modifications.
1235
+
1236
+ ## v1.9.10 → v1.9.11
1237
+
1238
+ ### Fixed
1239
+
1240
+ - **Moment.js Integration**: Fixed critical issue where Moment.js objects with custom date formats would not populate correctly
1241
+ - Added support for Moment.js objects via `.toDate()` method
1242
+ - Enhanced format token parsing (YYYY, YY, MM, M, DD, D, hh, h, HH, H, mm, m, ss, s, a, A)
1243
+ - Improved TypeScript compatibility with dynamic object properties
1244
+
1245
+ ### Migration Steps
1246
+
1247
+ No code changes required. This is a bug fix release:
1248
+
1249
+ 1. Update package version:
1250
+
1251
+ ```bash
1252
+ npm install ngxsmk-datepicker@^1.9.11
1253
+ ```
1254
+
1255
+ 2. If you're using Moment.js with custom formats, the datepicker will now properly handle Moment.js objects.
1256
+
1257
+ ## v1.9.9 → v1.9.10
1258
+
1259
+ ### Fixed
1260
+
1261
+ - **Async Database Value Loading**: Enhanced datepicker to properly handle database values that load asynchronously
1262
+ - Added fallback sync mechanisms for async database loads
1263
+ - Extended sync duration to 30 seconds with 100ms check intervals
1264
+ - **TypeScript Compilation Error**: Fixed `EffectRef` type error when using Angular 17+ `effect()` API
1265
+ - **Test Configuration**: Fixed test configuration for Angular 17+ compatibility
1266
+
1267
+ ### Migration Steps
1268
+
1269
+ No code changes required. This is a bug fix release:
1270
+
1271
+ 1. Update package version:
1272
+
1273
+ ```bash
1274
+ npm install ngxsmk-datepicker@^1.9.10
1275
+ ```
1276
+
1277
+ 2. If you're experiencing issues with database values not populating, this version should resolve them.
1278
+
1279
+ ## v1.9.8 → v1.9.9
1280
+
1281
+ ### Fixed
1282
+
1283
+ - **Database Value Population**: Fixed critical issue where datepicker would not populate with values from database when using `[field]` input binding
1284
+ - Now properly handles Date objects, string dates, range objects, and arrays of dates
1285
+
1286
+ ### Migration Steps
1287
+
1288
+ No code changes required. This is a bug fix release:
1289
+
1290
+ 1. Update package version:
1291
+ ```bash
1292
+ npm install ngxsmk-datepicker@^1.9.9
1293
+ ```
1294
+
1295
+ ## v1.9.7 → v1.9.8
1296
+
1297
+ ### Fixed
1298
+
1299
+ - **Date Selection Reset Issue**: Fixed critical bug where selected dates would reset to today's date when using `[field]` input binding
1300
+ - Fixed date mutation issues
1301
+ - Added internal update flag to prevent value resets
1302
+
1303
+ ### Migration Steps
1304
+
1305
+ No code changes required. This is a bug fix release:
1306
+
1307
+ 1. Update package version:
1308
+ ```bash
1309
+ npm install ngxsmk-datepicker@^1.9.8
1310
+ ```
1311
+
1312
+ ## v1.9.6 → v1.9.7
1313
+
1314
+ ### Fixed
1315
+
1316
+ - **Calendar Population**: Fixed critical issue where datepicker calendar would not populate with dates when opened
1317
+ - Fixed issue when multiple datepickers were present in the same form
1318
+
1319
+ ### Migration Steps
1320
+
1321
+ No code changes required. This is a bug fix release:
1322
+
1323
+ 1. Update package version:
1324
+ ```bash
1325
+ npm install ngxsmk-datepicker@^1.9.7
1326
+ ```
1327
+
1328
+ ## v1.9.5 → v1.9.6
1329
+
1330
+ ### Fixed
1331
+
1332
+ - **Multiple Datepicker Management**: Fixed issue where multiple datepickers in the same form would open in the same centered location
1333
+ - **Outside Click Detection**: Improved click detection to properly close datepicker
1334
+ - **Auto-close Other Datepickers**: When opening a datepicker, all other open datepickers are now automatically closed
1335
+ - **Mobile Datepicker**: Fixed issues with mobile datepicker opening and closing
1336
+ - **Select Box Cursor**: Added pointer cursor to all select boxes
1337
+
1338
+ ### Migration Steps
1339
+
1340
+ No code changes required. This is a bug fix release:
1341
+
1342
+ 1. Update package version:
1343
+ ```bash
1344
+ npm install ngxsmk-datepicker@^1.9.6
1345
+ ```
1346
+
1347
+ ## v1.9.4 → v1.9.5
1348
+
1349
+ ### Fixed
1350
+
1351
+ - **Angular 21+ Signal Forms Type Compatibility**: Fixed TypeScript compilation error with Angular 21+ Signal Forms
1352
+ - Fixed `Type '() => string' is not assignable to type 'never'` error when using `[field]` input
1353
+ - Updated `SignalFormField` type definition to be compatible with Angular 21's `FieldTree<Date, string>` types
1354
+ - Maintains backward compatibility with Angular 17-20
1355
+
1356
+ ### Migration Steps
1357
+
1358
+ No code changes required. This is a bug fix release:
1359
+
1360
+ 1. Update package version:
1361
+
1362
+ ```bash
1363
+ npm install ngxsmk-datepicker@^1.9.5
1364
+ ```
1365
+
1366
+ 2. If you were experiencing TypeScript errors with Signal Forms in Angular 21+, they should now be resolved.
1367
+
1368
+ ## v1.9.3 → v1.9.4
1369
+
1370
+ ### Added
1371
+
1372
+ - **Custom Date Format**: New `[displayFormat]` input property to display dates in custom formats
1373
+ - Supports format strings like "MM/DD/YYYY hh:mm A"
1374
+ - Works with date adapters (date-fns, dayjs, luxon) or built-in simple formatter
1375
+ - Supports common format tokens: YYYY, MM, DD, hh, mm, A, etc.
1376
+
1377
+ ### Fixed
1378
+
1379
+ - **Time Selection Dropdowns**: Fixed visibility issues with time selection dropdowns
1380
+ - Dropdowns now properly display and are not clipped by parent containers
1381
+ - Improved z-index handling for time selection dropdowns
1382
+
1383
+ ### Migration Steps
1384
+
1385
+ 1. Update package version:
1386
+
1387
+ ```bash
1388
+ npm install ngxsmk-datepicker@^1.9.4
1389
+ ```
1390
+
1391
+ 2. **Optional**: Use the new `[displayFormat]` input for custom date formatting:
1392
+ ```html
1393
+ <ngxsmk-datepicker [displayFormat]="'MM/DD/YYYY hh:mm A'" mode="single"> </ngxsmk-datepicker>
1394
+ ```
1395
+
1396
+ ## v1.9.2 → v1.9.3
1397
+
1398
+ ### Added
1399
+
1400
+ - **Time-Only Picker**: New `[timeOnly]` input property to display only time selection without calendar
1401
+ - Hides calendar grid and shows only time controls (hour, minute, AM/PM)
1402
+ - Automatically enables `showTime` when `timeOnly` is true
1403
+ - Perfect for time selection scenarios where date is not needed
1404
+
1405
+ ### Fixed
1406
+
1407
+ - **Test Suite**: Fixed 25+ failing tests across multiple test files
1408
+ - All 353 tests now pass successfully
1409
+
1410
+ ### Migration Steps
1411
+
1412
+ 1. Update package version:
1413
+
1414
+ ```bash
1415
+ npm install ngxsmk-datepicker@^1.9.3
1416
+ ```
1417
+
1418
+ 2. **Optional**: Use the new `[timeOnly]` input for time-only selection:
1419
+ ```html
1420
+ <ngxsmk-datepicker [timeOnly]="true" placeholder="Select Time"> </ngxsmk-datepicker>
1421
+ ```
1422
+
1423
+ ## v1.9.1 → v1.9.2
1424
+
1425
+ ### Changed
1426
+
1427
+ - **Bundle Optimization**: Optimized bundle size with improved TypeScript compiler settings
1428
+ - Main bundle: ~127KB (source maps excluded from published package)
1429
+ - Enhanced tree-shaking with optimized imports and compiler options
1430
+ - Source maps automatically removed from production builds
1431
+
1432
+ ### Fixed
1433
+
1434
+ - Test suite configuration improvements
1435
+ - Bundle analysis now correctly excludes source maps
1436
+ - Build warnings from conflicting export conditions resolved
1437
+
1438
+ ### Migration Steps
1439
+
1440
+ No code changes required. This is a transparent update with optimizations:
1441
+
1442
+ 1. Update package version:
1443
+
1444
+ ```bash
1445
+ npm install ngxsmk-datepicker@^1.9.2
1446
+ ```
1447
+
1448
+ 2. Rebuild your application to benefit from bundle optimizations:
1449
+ ```bash
1450
+ npm run build
1451
+ ```
1452
+
1453
+ ## v1.9.0 → v1.9.1
1454
+
1455
+ ### New Features
1456
+
1457
+ _No new features in v1.9.1._
1458
+
1459
+ ### Changes
1460
+
1461
+ #### Bundle Optimization
1462
+
1463
+ The library bundle has been further optimized for production:
1464
+
1465
+ - **Bundle Size**: Main bundle is now ~127KB (source maps excluded from published package)
1466
+ - **TypeScript Compiler**: Enhanced settings for better tree-shaking
1467
+ - Added `importsNotUsedAsValues: "remove"` for smaller output
1468
+ - Disabled `preserveConstEnums` for better inlining
1469
+ - **Source Maps**: Automatically removed from production builds (saves ~127KB)
1470
+ - **Package Configuration**: Fixed exports to eliminate build warnings
1471
+
1472
+ **For Developers:**
1473
+
1474
+ - Use `npm run build:optimized` for production builds
1475
+ - Use `npm run build:analyze` to check bundle size
1476
+ - Source maps are automatically excluded from the published package
1477
+
1478
+ #### Build Process Improvements
1479
+
1480
+ - Source maps are now automatically removed from production builds
1481
+ - Improved build scripts with better error handling
1482
+ - Enhanced bundle analysis that correctly excludes source maps
1483
+
1484
+ #### Package Configuration
1485
+
1486
+ - Fixed `package.json` exports to eliminate build warnings
1487
+ - Optimized `files` array to exclude unnecessary files
1488
+ - Updated exports field for better module resolution
1489
+
1490
+ #### Test Configuration
1491
+
1492
+ - Added Zone.js polyfills to library test configuration
1493
+ - Updated test commands to explicitly target library project
1494
+ - Improved test reliability across Angular versions
1495
+
1496
+ ### Breaking Changes
1497
+
1498
+ None in v1.9.1.
1499
+
1500
+ ### Deprecations
1501
+
1502
+ None in v1.9.1.
1503
+
1504
+ ### Migration Steps
1505
+
1506
+ No code changes required. This is a transparent update with optimizations and bug fixes:
1507
+
1508
+ 1. Update package version:
1509
+
1510
+ ```bash
1511
+ npm install ngxsmk-datepicker@^1.9.1
1512
+ ```
1513
+
1514
+ 2. Rebuild your application:
1515
+
1516
+ ```bash
1517
+ npm run build
1518
+ ```
1519
+
1520
+ 3. Verify bundle size improvements (optional):
1521
+ - Check your application's bundle size
1522
+ - You should see improved tree-shaking benefits
1523
+
1524
+ 4. Run tests to ensure everything works:
1525
+ ```bash
1526
+ npm test
1527
+ ```
1528
+
1529
+ **Note**: If you're a library developer using ngxsmk-datepicker as a dependency, you may notice:
1530
+
1531
+ - Smaller bundle sizes in your application
1532
+ - Fewer build warnings related to package exports
1533
+ - Improved test reliability if you're running tests with Zone.js
1534
+
1535
+ ## v1.8.0 → v1.9.0
1536
+
1537
+ ### New Features
1538
+
1539
+ #### Extension Points & Hooks
1540
+
1541
+ Added comprehensive hook system for customization.
1542
+
1543
+ **New Input:**
1544
+
1545
+ ```typescript
1546
+ hooks: DatepickerHooks | null = null;
1547
+ ```
1548
+
1549
+ **Usage:**
1550
+
1551
+ ```typescript
1552
+ const myHooks: DatepickerHooks = {
1553
+ getDayCellClasses: (date, isSelected, isDisabled, isToday, isHoliday) => {
1554
+ return isHoliday ? ["custom-holiday"] : [];
1555
+ },
1556
+ validateDate: (date, currentValue, mode) => {
1557
+ return date.getDay() !== 0; // Disable Sundays
1558
+ },
1559
+ };
1560
+ ```
1561
+
1562
+ ```html
1563
+ <ngxsmk-datepicker [hooks]="myHooks"></ngxsmk-datepicker>
1564
+ ```
1565
+
1566
+ #### Enhanced Keyboard Shortcuts
1567
+
1568
+ New keyboard shortcuts:
1569
+
1570
+ - `Y`: Select yesterday
1571
+ - `N`: Select tomorrow
1572
+ - `W`: Select next week
1573
+
1574
+ #### Animation Optimizations
1575
+
1576
+ All animations now use GPU acceleration for better performance. No code changes required.
1577
+
1578
+ #### Bundle Optimization
1579
+
1580
+ The library bundle has been optimized for production:
1581
+
1582
+ - **Bundle Size**: Main bundle is now ~127KB (source maps excluded from published package)
1583
+ - **Tree-Shaking**: Enhanced with optimized TypeScript compiler settings
1584
+ - **Source Maps**: Automatically removed from production builds (saves ~127KB)
1585
+ - **No Breaking Changes**: All optimizations are transparent to end users
1586
+
1587
+ **For Developers:**
1588
+
1589
+ - Use `npm run build:optimized` for production builds
1590
+ - Use `npm run build:analyze` to check bundle size
1591
+ - Source maps are automatically excluded from the published package
1592
+
1593
+ ### Breaking Changes
1594
+
1595
+ None in v1.9.0.
1596
+
1597
+ ### Deprecations
1598
+
1599
+ None in v1.9.0.
1600
+
1601
+ ## v1.7.0 → v1.8.0
1602
+
1603
+ ### New Features
1604
+
1605
+ #### Signal Forms Support
1606
+
1607
+ Added `[field]` input for Angular 21+ Signal Forms integration.
1608
+
1609
+ **Before:**
1610
+
1611
+ ```typescript
1612
+ // Using Reactive Forms
1613
+ dateControl = new FormControl<DatepickerValue>(null);
1614
+ ```
1615
+
1616
+ ```html
1617
+ <ngxsmk-datepicker formControlName="date"></ngxsmk-datepicker>
1618
+ ```
1619
+
1620
+ **After (Optional - Reactive Forms still work):**
1621
+
1622
+ ```typescript
1623
+ // Using Signal Forms
1624
+ localObject = signal({ date: null as DatepickerValue });
1625
+ myForm = form(
1626
+ this.localObject,
1627
+ objectSchema({
1628
+ date: objectSchema<DatepickerValue>(),
1629
+ }),
1630
+ );
1631
+ ```
1632
+
1633
+ ```html
1634
+ <ngxsmk-datepicker [field]="myForm.date"></ngxsmk-datepicker>
1635
+ ```
1636
+
1637
+ #### SSR Optimizations
1638
+
1639
+ The datepicker is now fully SSR-compatible. No code changes required, but ensure you're using the latest version for SSR applications.
1640
+
1641
+ #### Improved Value Input
1642
+
1643
+ The `[value]` input now initializes immediately when set programmatically.
1644
+
1645
+ **Before:**
1646
+
1647
+ ```typescript
1648
+ // Value might not initialize immediately
1649
+ component.value = new Date();
1650
+ ```
1651
+
1652
+ **After:**
1653
+
1654
+ ```typescript
1655
+ // Value initializes immediately
1656
+ component.value = new Date();
1657
+ ```
1658
+
1659
+ ### Breaking Changes
1660
+
1661
+ None in v1.8.0.
1662
+
1663
+ ### Deprecations
1664
+
1665
+ None in v1.8.0.
1666
+
1667
+ ## v1.9.0 → v2.0.0
1668
+
1669
+ ### Planned Breaking Changes
1670
+
1671
+ _This section will be updated when v2.0.0 is released._
1672
+
1673
+ ### Migration Steps
1674
+
1675
+ 1. Update package version:
1676
+
1677
+ ```bash
1678
+ npm install ngxsmk-datepicker@^2.0.0
1679
+ ```
1680
+
1681
+ 2. Review breaking changes below
1682
+ 3. Update your code according to migration steps
1683
+ 4. Run tests
1684
+ 5. Update any custom styles if CSS classes changed
1685
+
1686
+ ## General Migration Tips
1687
+
1688
+ ### 1. Read the Changelog
1689
+
1690
+ Always check `CHANGELOG.md` for detailed changes in each version.
1691
+
1692
+ ### 2. Test Thoroughly
1693
+
1694
+ After upgrading:
1695
+
1696
+ - Test all datepicker instances in your app
1697
+ - Verify form integration still works
1698
+ - Check SSR compatibility if applicable
1699
+ - Test keyboard navigation
1700
+ - Verify accessibility features
1701
+
1702
+ ### 3. Update Dependencies
1703
+
1704
+ Ensure your Angular version is compatible:
1705
+
1706
+ - Check the compatibility table in README.md
1707
+ - Update Angular if needed
1708
+
1709
+ ### 4. Check TypeScript Errors
1710
+
1711
+ New versions may have stricter types:
1712
+
1713
+ ```bash
1714
+ npm run build
1715
+ # Fix any TypeScript errors
1716
+ ```
1717
+
1718
+ ### 5. Review CSS Changes
1719
+
1720
+ If you've customized styles:
1721
+
1722
+ - Check if CSS class names changed
1723
+ - Review CSS custom properties
1724
+ - Update selectors if needed
1725
+
1726
+ ## Getting Help
1727
+
1728
+ If you encounter issues during migration:
1729
+
1730
+ 1. Check existing GitHub issues
1731
+ 2. Review the documentation
1732
+ 3. Open a new issue with:
1733
+ - Your current version
1734
+ - Target version
1735
+ - Error messages
1736
+ - Code examples
1737
+
1738
+ ## Version Compatibility
1739
+
1740
+ | ngxsmk-datepicker | Angular | Node.js |
1741
+ | ----------------- | ------- | ------- |
1742
+ | 1.9.17+ | 17-22 | 18+ |
1743
+ | 1.9.16 | 17-22 | 18+ |
1744
+ | 1.9.15 | 17-22 | 18+ |
1745
+ | 1.9.14 | 17-22 | 18+ |
1746
+ | 1.9.11 | 17-22 | 18+ |
1747
+ | 1.9.10 | 17-22 | 18+ |
1748
+ | 1.9.9 | 17-22 | 18+ |
1749
+ | 1.9.8 | 17-22 | 18+ |
1750
+ | 1.9.7 | 17-22 | 18+ |
1751
+ | 1.9.6 | 17-22 | 18+ |
1752
+ | 1.9.5 | 17-22 | 18+ |
1753
+ | 1.9.4 | 17-22 | 18+ |
1754
+ | 1.9.3 | 17-22 | 18+ |
1755
+ | 1.9.2 | 17-22 | 18+ |
1756
+ | 1.9.1 | 17-22 | 18+ |
1757
+ | 1.9.0 | 17-22 | 18+ |
1758
+ | 1.8.0 | 17-22 | 18+ |
1759
+ | 1.7.0 | 17-20 | 18+ |
1760
+
1761
+ ## Deprecation Timeline
1762
+
1763
+ When APIs are deprecated:
1764
+
1765
+ 1. **Deprecation Notice**: API marked with `@deprecated` JSDoc
1766
+ 2. **Warning Period**: Deprecated API remains functional for at least one major version
1767
+ 3. **Removal**: Deprecated API removed in next major version
1768
+
1769
+ Example:
1770
+
1771
+ - v1.8.0: API deprecated
1772
+ - v1.9.0: Still works with deprecation warning
1773
+ - v1.9.1: Still works with deprecation warning
1774
+ - v2.0.0: Removed
1775
+