ngxsmk-datepicker 1.4.12 → 1.4.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/README.md
CHANGED
|
@@ -42,6 +42,7 @@ This library has been optimized for maximum performance:
|
|
|
42
42
|
- **Predefined Date Ranges**: Offers quick selection of common ranges (e.g., "Last 7 Days")
|
|
43
43
|
- **Advanced Localization (i18n)**: Automatically handles month/weekday names and week start days based on the browser's locale
|
|
44
44
|
- **Previous Month Context**: Shows last few days of previous month for better date selection context
|
|
45
|
+
- **Smart Initial View**: Automatically shows minDate's month when minDate is in the future
|
|
45
46
|
- **Custom Styling**: All component elements are prefixed with `ngxsmk-` and themeable via CSS custom properties
|
|
46
47
|
- **Zero Dependencies**: The component is standalone and lightweight
|
|
47
48
|
|
|
@@ -104,6 +105,23 @@ export class AppComponent {
|
|
|
104
105
|
</ngxsmk-datepicker>
|
|
105
106
|
```
|
|
106
107
|
|
|
108
|
+
### 3. Smart Initial View with Future minDate
|
|
109
|
+
|
|
110
|
+
When you set a `minDate` that is in the future, the datepicker will automatically open to that month:
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// Example: Current date is 10/21/2025, but you want to restrict selection to December 2025
|
|
114
|
+
const futureMinDate = new Date(2025, 11, 15); // December 15, 2025
|
|
115
|
+
const futureMaxDate = new Date(2025, 11, 21); // December 21, 2025
|
|
116
|
+
|
|
117
|
+
// The datepicker will automatically show December 2025 when opened
|
|
118
|
+
<ngxsmk-datepicker
|
|
119
|
+
[minDate]="futureMinDate"
|
|
120
|
+
[maxDate]="futureMaxDate"
|
|
121
|
+
[mode]="'single'">
|
|
122
|
+
</ngxsmk-datepicker>
|
|
123
|
+
```
|
|
124
|
+
|
|
107
125
|
## ⚙️ API Reference
|
|
108
126
|
|
|
109
127
|
### Inputs
|
|
@@ -115,7 +133,7 @@ export class AppComponent {
|
|
|
115
133
|
| `locale` | `string` | `navigator.language` | Sets the locale for language and regional formatting |
|
|
116
134
|
| `theme` | `'light' \| 'dark'` | `'light'` | The color theme |
|
|
117
135
|
| `showRanges` | `boolean` | `true` | If true, displays the predefined ranges panel when in 'range' mode |
|
|
118
|
-
| `minDate` | `DateInput` | `null` | The earliest selectable date |
|
|
136
|
+
| `minDate` | `DateInput` | `null` | The earliest selectable date. When set to a future date, the calendar will automatically open to that month |
|
|
119
137
|
| `maxDate` | `DateInput` | `null` | The latest selectable date |
|
|
120
138
|
| `isInvalidDate` | `(date: Date) => boolean` | `() => false` | A function to programmatically disable specific dates |
|
|
121
139
|
| `ranges` | `DateRange` | `null` | An object of predefined date ranges |
|
|
@@ -226,7 +244,12 @@ We welcome and appreciate contributions from the community! Please see our [Cont
|
|
|
226
244
|
|
|
227
245
|
## 📄 Changelog
|
|
228
246
|
|
|
229
|
-
### v1.4.
|
|
247
|
+
### v1.4.13 (Latest)
|
|
248
|
+
- 🎯 **Smart Initial View**: Datepicker now automatically opens to minDate's month when minDate is set to a future date
|
|
249
|
+
- 🚀 **Enhanced UX**: No more scrolling through months to reach future date ranges
|
|
250
|
+
- 📅 **Intelligent Defaults**: Automatically centers the calendar view on the earliest available date
|
|
251
|
+
|
|
252
|
+
### v1.4.12
|
|
230
253
|
- ⚡ **Instant Navigation**: Removed all animations for lightning-fast arrow navigation
|
|
231
254
|
- 🚫 **Smart Back Arrow**: Automatically disables back arrow when minDate is set
|
|
232
255
|
- 🎯 **Better UX**: Prevents navigation to invalid date ranges
|
|
@@ -519,7 +519,7 @@ class NgxsmkDatepickerComponent {
|
|
|
519
519
|
if (this._internalValue) {
|
|
520
520
|
this.initializeValue(this._internalValue);
|
|
521
521
|
}
|
|
522
|
-
else
|
|
522
|
+
else {
|
|
523
523
|
this.initializeValue(null);
|
|
524
524
|
}
|
|
525
525
|
this.generateCalendar();
|
|
@@ -549,6 +549,22 @@ class NgxsmkDatepickerComponent {
|
|
|
549
549
|
this.generateCalendar();
|
|
550
550
|
}
|
|
551
551
|
}
|
|
552
|
+
// Handle minDate changes - if minDate is set and is in the future,
|
|
553
|
+
// and we don't have a current value, update the view to show minDate's month
|
|
554
|
+
if (changes['minDate'] && !this._internalValue) {
|
|
555
|
+
if (this._minDate) {
|
|
556
|
+
const today = new Date();
|
|
557
|
+
const minDateOnly = getStartOfDay(this._minDate);
|
|
558
|
+
const todayOnly = getStartOfDay(today);
|
|
559
|
+
// If minDate is in the future, update the view to show minDate's month
|
|
560
|
+
if (minDateOnly.getTime() > todayOnly.getTime()) {
|
|
561
|
+
this.currentDate = new Date(this._minDate);
|
|
562
|
+
this._currentMonth = this.currentDate.getMonth();
|
|
563
|
+
this._currentYear = this.currentDate.getFullYear();
|
|
564
|
+
this.generateCalendar();
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
552
568
|
}
|
|
553
569
|
get24Hour(displayHour, isPm) {
|
|
554
570
|
return get24Hour(displayHour, isPm);
|
|
@@ -584,7 +600,22 @@ class NgxsmkDatepickerComponent {
|
|
|
584
600
|
initialDate = this.selectedDates.length > 0 ? this.selectedDates[this.selectedDates.length - 1] : null;
|
|
585
601
|
}
|
|
586
602
|
}
|
|
587
|
-
|
|
603
|
+
// Determine the initial view date
|
|
604
|
+
let viewCenterDate = initialDate || this._startAtDate;
|
|
605
|
+
// If no specific date is set and minDate is in the future, use minDate's month
|
|
606
|
+
if (!viewCenterDate && this._minDate) {
|
|
607
|
+
const today = new Date();
|
|
608
|
+
const minDateOnly = getStartOfDay(this._minDate);
|
|
609
|
+
const todayOnly = getStartOfDay(today);
|
|
610
|
+
// If minDate is in the future, use minDate as the initial view
|
|
611
|
+
if (minDateOnly.getTime() > todayOnly.getTime()) {
|
|
612
|
+
viewCenterDate = this._minDate;
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
// Fallback to current date if no other date is determined
|
|
616
|
+
if (!viewCenterDate) {
|
|
617
|
+
viewCenterDate = new Date();
|
|
618
|
+
}
|
|
588
619
|
if (viewCenterDate) {
|
|
589
620
|
this.currentDate = new Date(viewCenterDate);
|
|
590
621
|
this._currentMonth = viewCenterDate.getMonth();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngxsmk-datepicker.mjs","sources":["../../../projects/ngxsmk-datepicker/src/lib/utils/date.utils.ts","../../../projects/ngxsmk-datepicker/src/lib/utils/calendar.utils.ts","../../../projects/ngxsmk-datepicker/src/lib/components/custom-select.component.ts","../../../projects/ngxsmk-datepicker/src/lib/utils/performance.utils.ts","../../../projects/ngxsmk-datepicker/src/lib/ngxsmk-datepicker.ts","../../../projects/ngxsmk-datepicker/src/public-api.ts","../../../projects/ngxsmk-datepicker/src/ngxsmk-datepicker.ts"],"sourcesContent":["/**\r\n * Date utility functions for ngxsmk-datepicker\r\n * Extracted to improve tree-shaking and reduce bundle size\r\n */\r\n\r\nexport function getStartOfDay(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);\r\n}\r\n\r\nexport function getEndOfDay(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59, 999);\r\n}\r\n\r\nexport function addMonths(d: Date, months: number): Date {\r\n const newDate = new Date(d);\r\n newDate.setMonth(d.getMonth() + months);\r\n return newDate;\r\n}\r\n\r\nexport function subtractDays(d: Date, days: number): Date {\r\n const newDate = new Date(d);\r\n newDate.setDate(d.getDate() - days);\r\n return newDate;\r\n}\r\n\r\nexport function getStartOfMonth(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), 1);\r\n}\r\n\r\nexport function getEndOfMonth(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth() + 1, 0);\r\n}\r\n\r\nexport function isSameDay(d1: Date | null, d2: Date | null): boolean {\r\n if (!d1 || !d2) return false;\r\n return (\r\n d1.getFullYear() === d2.getFullYear() &&\r\n d1.getMonth() === d2.getMonth() &&\r\n d1.getDate() === d2.getDate()\r\n );\r\n}\r\n\r\nexport function normalizeDate(date: DateInput | null): Date | null {\r\n if (!date) return null;\r\n const d = (date instanceof Date) ? new Date(date.getTime()) : new Date((date as any).toDate ? (date as any).toDate() : date as any);\r\n if (isNaN(d.getTime())) return null;\r\n return d;\r\n}\r\n\r\nexport type DateInput = Date | string | { toDate: () => Date; _isAMomentObject?: boolean; $d?: Date };\r\n\r\n\r\n","/**\r\n * Calendar utility functions for ngxsmk-datepicker\r\n * Optimized for performance and tree-shaking\r\n */\r\n\r\nimport { DateInput, normalizeDate } from './date.utils';\r\n\r\nexport interface HolidayProvider {\r\n /**\r\n * Returns true if the given date is a holiday.\r\n * The date passed will be at the start of the day (00:00:00).\r\n */\r\n isHoliday(date: Date): boolean;\r\n \r\n /**\r\n * Optional: Returns a label or reason for the holiday.\r\n */\r\n getHolidayLabel?(date: Date): string | null;\r\n}\r\n\r\nexport interface DateRange {\r\n [key: string]: [DateInput, DateInput];\r\n}\r\n\r\nexport type DatepickerValue = Date | { start: Date, end: Date } | Date[] | null;\r\n\r\n/**\r\n * Generate month options for dropdown\r\n */\r\nexport function generateMonthOptions(locale: string, year: number): { label: string; value: number }[] {\r\n return Array.from({length: 12}).map((_, i) => ({\r\n label: new Date(year, i, 1).toLocaleDateString(locale, {month: 'long'}),\r\n value: i,\r\n }));\r\n}\r\n\r\n/**\r\n * Generate year options for dropdown\r\n */\r\nexport function generateYearOptions(currentYear: number, range: number = 10): { label: string; value: number }[] {\r\n const startYear = currentYear - range;\r\n const endYear = currentYear + range;\r\n const options: { label: string; value: number }[] = [];\r\n \r\n for (let i = startYear; i <= endYear; i++) {\r\n options.push({label: `${i}`, value: i});\r\n }\r\n \r\n return options;\r\n}\r\n\r\n/**\r\n * Generate time options for hour/minute dropdowns\r\n */\r\nexport function generateTimeOptions(minuteInterval: number = 1): {\r\n hourOptions: { label: string; value: number }[];\r\n minuteOptions: { label: string; value: number }[];\r\n} {\r\n const hourOptions = Array.from({length: 12}).map((_, i) => ({\r\n label: (i + 1).toString().padStart(2, '0'),\r\n value: i + 1,\r\n }));\r\n\r\n const minuteOptions: { label: string; value: number }[] = [];\r\n for (let i = 0; i < 60; i += minuteInterval) {\r\n minuteOptions.push({\r\n label: i.toString().padStart(2, '0'),\r\n value: i,\r\n });\r\n }\r\n\r\n return { hourOptions, minuteOptions };\r\n}\r\n\r\n/**\r\n * Generate week days for calendar header\r\n */\r\nexport function generateWeekDays(locale: string, firstDayOfWeek: number = 0): string[] {\r\n const day = new Date(2024, 0, 7 + firstDayOfWeek);\r\n return Array.from({length: 7}).map(() => {\r\n const weekDay = new Date(day).toLocaleDateString(locale, {weekday: 'short'});\r\n day.setDate(day.getDate() + 1);\r\n return weekDay;\r\n });\r\n}\r\n\r\n/**\r\n * Get first day of week for locale\r\n */\r\nexport function getFirstDayOfWeek(locale: string): number {\r\n try {\r\n return ((new Intl.Locale(locale) as any).weekInfo?.firstDay || 0) % 7;\r\n } catch (e) {\r\n return 0;\r\n }\r\n}\r\n\r\n/**\r\n * Convert 12-hour to 24-hour format\r\n */\r\nexport function get24Hour(displayHour: number, isPm: boolean): number {\r\n if (isPm) { return displayHour === 12 ? 12 : displayHour + 12; }\r\n return displayHour === 12 ? 0 : displayHour;\r\n}\r\n\r\n/**\r\n * Convert 24-hour to 12-hour format\r\n */\r\nexport function update12HourState(fullHour: number): { isPm: boolean; displayHour: number } {\r\n return {\r\n isPm: fullHour >= 12,\r\n displayHour: fullHour % 12 || 12\r\n };\r\n}\r\n\r\n/**\r\n * Process date ranges input\r\n */\r\nexport function processDateRanges(ranges: DateRange | null): { [key: string]: [Date, Date] } | null {\r\n if (!ranges) return null;\r\n \r\n return Object.entries(ranges).reduce((acc, [key, dates]) => {\r\n const start = normalizeDate(dates[0]);\r\n const end = normalizeDate(dates[1]);\r\n if (start && end) acc[key] = [start, end];\r\n return acc;\r\n }, {} as { [key: string]: [Date, Date] });\r\n}\r\n\r\n\r\n","import { Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ngxsmk-custom-select',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: `\r\n <div class=\"ngxsmk-select-container\" (click)=\"toggleDropdown()\">\r\n <button type=\"button\" class=\"ngxsmk-select-display\" [disabled]=\"disabled\">\r\n <span>{{ displayValue }}</span>\r\n <svg class=\"ngxsmk-arrow-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\"\r\n d=\"M112 184l144 144 144-144\"/>\r\n </svg>\r\n </button>\r\n @if (isOpen) {\r\n <div class=\"ngxsmk-options-panel\">\r\n <ul>\r\n @for (option of options; track option.value) {\r\n <li [class.selected]=\"option.value === value\" (click)=\"selectOption(option); $event.stopPropagation()\">\r\n {{ option.label }}\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n `,\r\n styles: [`\r\n :host { position: relative; display: inline-block; }\r\n .ngxsmk-select-container { cursor: pointer; }\r\n .ngxsmk-select-display {\r\n display: flex; align-items: center; justify-content: space-between;\r\n width: var(--custom-select-width, 115px); background: var(--datepicker-background, #fff);\r\n border: 1px solid var(--datepicker-border-color, #ccc); color: var(--datepicker-text-color, #333);\r\n border-radius: 4px; padding: 4px 8px; font-size: 14px; text-align: left; height: 30px;\r\n }\r\n .ngxsmk-select-display:disabled {\r\n background-color: var(--datepicker-hover-background, #f0f0f0);\r\n cursor: not-allowed;\r\n opacity: 0.7;\r\n }\r\n .ngxsmk-arrow-icon { width: 12px; height: 12px; margin-left: 8px; }\r\n .ngxsmk-options-panel {\r\n position: absolute; top: 110%; left: 0; width: 100%;\r\n background: var(--datepicker-background, #fff); border: 1px solid var(--datepicker-border-color, #ccc);\r\n color: var(--datepicker-text-color, #333); border-radius: 4px;\r\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); max-height: 200px; overflow-y: auto; z-index: 9999;\r\n }\r\n .ngxsmk-options-panel ul { list-style: none; padding: 4px; margin: 0; }\r\n .ngxsmk-options-panel li { padding: 8px 12px; border-radius: 4px; cursor: pointer; }\r\n .ngxsmk-options-panel li:hover { background-color: var(--datepicker-hover-background, #f0f0f0); }\r\n .ngxsmk-options-panel li.selected {\r\n background-color: var(--datepicker-primary-color, #3880ff); color: var(--datepicker-primary-contrast, #fff);\r\n }\r\n `],\r\n})\r\nexport class CustomSelectComponent {\r\n @Input() options: { label: string; value: any }[] = [];\r\n @Input() value: any;\r\n @Input() disabled: boolean = false;\r\n @Output() valueChange = new EventEmitter<any>();\r\n public isOpen = false;\r\n\r\n private readonly elementRef: ElementRef = inject(ElementRef);\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (!this.elementRef.nativeElement.contains(event.target)) this.isOpen = false;\r\n }\r\n\r\n get displayValue(): string {\r\n const selectedOption = this.options.find((opt) => opt.value === this.value);\r\n return selectedOption ? selectedOption.label : '';\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (this.disabled) return;\r\n this.isOpen = !this.isOpen;\r\n }\r\n\r\n selectOption(option: { label: string; value: any }): void {\r\n this.value = option.value;\r\n this.valueChange.emit(this.value);\r\n this.isOpen = false;\r\n }\r\n}\r\n\r\n\r\n","/**\r\n * Performance utilities for ngxsmk-datepicker\r\n * Optimized for better runtime performance\r\n */\r\n\r\n/**\r\n * Memoization decorator for expensive computations\r\n */\r\nexport function memoize<T extends (...args: any[]) => any>(\r\n fn: T,\r\n keyGenerator?: (...args: Parameters<T>) => string\r\n): T {\r\n const cache = new Map<string, ReturnType<T>>();\r\n \r\n return ((...args: Parameters<T>) => {\r\n const key = keyGenerator ? keyGenerator(...args) : JSON.stringify(args);\r\n \r\n if (cache.has(key)) {\r\n return cache.get(key)!;\r\n }\r\n \r\n const result = fn(...args);\r\n cache.set(key, result);\r\n return result;\r\n }) as T;\r\n}\r\n\r\n/**\r\n * Debounce function for performance optimization\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number\r\n): (...args: Parameters<T>) => void {\r\n let timeout: number | null = null;\r\n \r\n return (...args: Parameters<T>) => {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n \r\n timeout = window.setTimeout(() => {\r\n func(...args);\r\n }, wait);\r\n };\r\n}\r\n\r\n/**\r\n * Throttle function for performance optimization\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n func: T,\r\n limit: number\r\n): (...args: Parameters<T>) => void {\r\n let inThrottle: boolean = false;\r\n \r\n return (...args: Parameters<T>) => {\r\n if (!inThrottle) {\r\n func(...args);\r\n inThrottle = true;\r\n window.setTimeout(() => (inThrottle = false), limit);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Create a shallow comparison function for objects\r\n */\r\nexport function shallowEqual<T extends Record<string, any>>(a: T, b: T): boolean {\r\n const keysA = Object.keys(a);\r\n const keysB = Object.keys(b);\r\n \r\n if (keysA.length !== keysB.length) {\r\n return false;\r\n }\r\n \r\n for (const key of keysA) {\r\n if (a[key] !== b[key]) {\r\n return false;\r\n }\r\n }\r\n \r\n return true;\r\n}\r\n\r\n/**\r\n * Optimized date comparison for calendar rendering\r\n */\r\nexport function createDateComparator() {\r\n const cache = new Map<string, boolean>();\r\n \r\n return (date1: Date | null, date2: Date | null): boolean => {\r\n if (!date1 || !date2) return date1 === date2;\r\n \r\n const key = `${date1.getTime()}-${date2.getTime()}`;\r\n if (cache.has(key)) {\r\n return cache.get(key)!;\r\n }\r\n \r\n const result = (\r\n date1.getFullYear() === date2.getFullYear() &&\r\n date1.getMonth() === date2.getMonth() &&\r\n date1.getDate() === date2.getDate()\r\n );\r\n \r\n cache.set(key, result);\r\n return result;\r\n };\r\n}\r\n\r\n/**\r\n * Optimized array filtering with caching\r\n */\r\nexport function createFilteredArray<T>(\r\n source: T[],\r\n filterFn: (item: T) => boolean,\r\n cacheKey?: string\r\n): T[] {\r\n const cache = new Map<string, T[]>();\r\n const key = cacheKey || JSON.stringify(source);\r\n \r\n if (cache.has(key)) {\r\n return cache.get(key)!;\r\n }\r\n \r\n const result = source.filter(filterFn);\r\n cache.set(key, result);\r\n return result;\r\n}\r\n\r\n\r\n","import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy,\n OnDestroy,\n} from '@angular/core';\nimport {CommonModule, DatePipe} from '@angular/common';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {\n getStartOfDay,\n addMonths,\n normalizeDate,\n DateInput,\n} from './utils/date.utils';\nimport {\n HolidayProvider,\n DateRange,\n DatepickerValue,\n generateMonthOptions,\n generateYearOptions,\n generateTimeOptions,\n generateWeekDays,\n getFirstDayOfWeek,\n get24Hour,\n update12HourState,\n processDateRanges,\n} from './utils/calendar.utils';\nimport { CustomSelectComponent } from './components/custom-select.component';\nimport { createDateComparator } from './utils/performance.utils';\n\n\n@Component({\n selector: 'ngxsmk-datepicker',\n standalone: true,\n imports: [CommonModule, FormsModule, CustomSelectComponent, DatePipe, ReactiveFormsModule],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxsmkDatepickerComponent),\n multi: true\n }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./styles/datepicker.css'],\n template: `\n <div class=\"ngxsmk-datepicker-wrapper\" [class.ngxsmk-inline-mode]=\"isInlineMode\">\n @if (!isInlineMode) {\n <div class=\"ngxsmk-input-group\" (click)=\"toggleCalendar()\" [class.disabled]=\"disabled\">\n <input type=\"text\" \n [value]=\"displayValue\" \n [placeholder]=\"placeholder\" \n readonly \n [disabled]=\"disabled\"\n class=\"ngxsmk-display-input\">\n <button type=\"button\" class=\"ngxsmk-clear-button\" (click)=\"clearValue($event)\" [disabled]=\"disabled\" *ngIf=\"displayValue\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"32\" d=\"M368 368L144 144M368 144L144 368\"/></svg>\n </button>\n </div>\n }\n\n @if (isCalendarVisible) {\n <div class=\"ngxsmk-popover-container\" [class.ngxsmk-inline-container]=\"isInlineMode\">\n <div class=\"ngxsmk-datepicker-container\">\n @if (showRanges && rangesArray.length > 0 && mode === 'range') {\n <div class=\"ngxsmk-ranges-container\">\n <ul>\n @for (range of rangesArray; track range.key) {\n <li (click)=\"selectRange(range.value)\" [class.disabled]=\"disabled\">{{ range.key }}</li>\n }\n </ul>\n </div>\n }\n <div class=\"ngxsmk-calendar-container\">\n <div class=\"ngxsmk-header\">\n <div class=\"ngxsmk-month-year-selects\">\n <ngxsmk-custom-select class=\"month-select\" [options]=\"monthOptions\"\n [(value)]=\"currentMonth\" [disabled]=\"disabled\"></ngxsmk-custom-select>\n <ngxsmk-custom-select class=\"year-select\" [options]=\"yearOptions\" [(value)]=\"currentYear\" [disabled]=\"disabled\"></ngxsmk-custom-select>\n </div>\n <div class=\"ngxsmk-nav-buttons\">\n <button type=\"button\" class=\"ngxsmk-nav-button\" (click)=\"changeMonth(-1)\" [disabled]=\"disabled || isBackArrowDisabled\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\"\n d=\"M328 112L184 256l144 144\"/>\n </svg>\n </button>\n <button type=\"button\" class=\"ngxsmk-nav-button\" (click)=\"changeMonth(1)\" [disabled]=\"disabled\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\"\n d=\"M184 112l144 144-144 144\"/>\n </svg>\n </button>\n </div>\n </div>\n <div class=\"ngxsmk-days-grid-wrapper\">\n <div class=\"ngxsmk-days-grid\">\n @for (day of weekDays; track day) {\n <div class=\"ngxsmk-day-name\">{{ day }}</div>\n }\n @for (day of daysInMonth; track $index) {\n <div class=\"ngxsmk-day-cell\"\n [class.empty]=\"!isCurrentMonth(day)\" [class.disabled]=\"isDateDisabled(day)\" \n [class.today]=\"isSameDay(day, today)\"\n [class.holiday]=\"isHoliday(day)\"\n [class.selected]=\"mode === 'single' && isSameDay(day, selectedDate)\"\n [class.multiple-selected]=\"mode === 'multiple' && isMultipleSelected(day)\"\n [class.start-date]=\"mode === 'range' && isSameDay(day, startDate)\"\n [class.end-date]=\"mode === 'range' && isSameDay(day, endDate)\"\n [class.in-range]=\"mode === 'range' && isInRange(day)\"\n [class.preview-range]=\"isPreviewInRange(day)\"\n (click)=\"onDateClick(day)\" (mouseenter)=\"onDateHover(day)\">\n @if (day) {\n <div class=\"ngxsmk-day-number\" [attr.title]=\"getHolidayLabel(day)\">{{ day | date : 'd' }}</div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (showTime) {\n <div class=\"ngxsmk-time-selection\">\n <span class=\"ngxsmk-time-label\">Time:</span>\n <ngxsmk-custom-select\n class=\"hour-select\"\n [options]=\"hourOptions\"\n [(value)]=\"currentDisplayHour\"\n (valueChange)=\"onTimeChange()\"\n [disabled]=\"disabled\"\n ></ngxsmk-custom-select>\n <span class=\"ngxsmk-time-separator\">:</span>\n <ngxsmk-custom-select\n class=\"minute-select\"\n [options]=\"minuteOptions\"\n [(value)]=\"currentMinute\"\n (valueChange)=\"onTimeChange()\"\n [disabled]=\"disabled\"\n ></ngxsmk-custom-select>\n <ngxsmk-custom-select\n class=\"ampm-select\"\n [options]=\"ampmOptions\"\n [(value)]=\"isPm\"\n (valueChange)=\"onTimeChange()\"\n [disabled]=\"disabled\"\n ></ngxsmk-custom-select>\n </div>\n }\n \n <div class=\"ngxsmk-footer\" *ngIf=\"!isInlineMode\">\n <button type=\"button\" class=\"ngxsmk-clear-button-footer\" (click)=\"clearValue($event)\" [disabled]=\"disabled\">\n Clear\n </button>\n <button type=\"button\" class=\"ngxsmk-close-button\" (click)=\"isCalendarOpen = false\" [disabled]=\"disabled\">\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class NgxsmkDatepickerComponent implements OnInit, OnChanges, OnDestroy, ControlValueAccessor {\n @Input() mode: 'single' | 'range' | 'multiple' = 'single';\n @Input() isInvalidDate: (date: Date) => boolean = () => false;\n @Input() showRanges: boolean = true;\n @Input() showTime: boolean = false;\n @Input() minuteInterval: number = 1;\n \n // NEW: Holiday Provider Inputs\n @Input() holidayProvider: HolidayProvider | null = null;\n @Input() disableHolidays: boolean = false;\n \n // Popover/Input Mode\n @Input() placeholder: string = 'Select Date';\n @Input() inline: boolean | 'always' | 'auto' = false;\n public isCalendarOpen: boolean = false;\n\n public _internalValue: DatepickerValue = null;\n\n private _startAtDate: Date | null = null;\n @Input() set startAt(value: DateInput | null) { this._startAtDate = this._normalizeDate(value); }\n\n private _locale: string = 'en-US';\n @Input() set locale(value: string) { this._locale = value; }\n get locale(): string { return this._locale; }\n\n @Input() theme: 'light' | 'dark' = 'light';\n @HostBinding('class.dark-theme') get isDarkMode() { return this.theme === 'dark'; }\n\n private onChange = (_: any) => {};\n private onTouched = () => {};\n public disabled = false;\n @Input() set disabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n @Output() valueChange = new EventEmitter<DatepickerValue>();\n @Output() action = new EventEmitter<{ type: string; payload?: any }>();\n\n private _minDate: Date | null = null;\n @Input() set minDate(value: DateInput | null) { this._minDate = this._normalizeDate(value); }\n\n private _maxDate: Date | null = null;\n @Input() set maxDate(value: DateInput | null) { this._maxDate = this._normalizeDate(value); }\n\n private _ranges: { [key: string]: [Date, Date] } | null = null;\n @Input() set ranges(value: DateRange | null) {\n this._ranges = processDateRanges(value);\n this.updateRangesArray();\n }\n\n public currentDate: Date = new Date();\n public daysInMonth: (Date | null)[] = [];\n public weekDays: string[] = [];\n public readonly today: Date = getStartOfDay(new Date());\n public selectedDate: Date | null = null;\n public selectedDates: Date[] = [];\n public startDate: Date | null = null;\n public endDate: Date | null = null;\n public hoveredDate: Date | null = null;\n public rangesArray: { key: string; value: [Date, Date] }[] = [];\n\n private _currentMonth: number = this.currentDate.getMonth();\n private _currentYear: number = this.currentDate.getFullYear();\n\n public monthOptions: { label: string; value: number }[] = [];\n public yearOptions: { label: string; value: number }[] = [];\n private firstDayOfWeek: number = 0;\n\n public currentHour: number = 0;\n public currentMinute: number = 0;\n public currentDisplayHour: number = 12;\n public isPm: boolean = false;\n\n public hourOptions: { label: string; value: number }[] = [];\n public minuteOptions: { label: string; value: number }[] = [];\n public ampmOptions: { label: string; value: boolean }[] = [\n {label: 'AM', value: false},\n {label: 'PM', value: true}\n ];\n\n // Animation state properties\n \n private readonly elementRef: ElementRef = inject(ElementRef);\n private readonly dateComparator = createDateComparator();\n \n get isInlineMode(): boolean {\n return this.inline === true || this.inline === 'always' || \n (this.inline === 'auto' && typeof window !== 'undefined' && window.matchMedia('(min-width: 768px)').matches);\n }\n\n get isCalendarVisible(): boolean {\n return this.isInlineMode || this.isCalendarOpen;\n }\n \n get displayValue(): string {\n if (this.mode === 'single' && this.selectedDate) {\n return this.selectedDate.toLocaleString(this.locale, { \n year: 'numeric', month: 'short', day: '2-digit', \n hour: this.showTime ? '2-digit' : undefined, \n minute: this.showTime ? '2-digit' : undefined \n });\n } else if (this.mode === 'range' && this.startDate && this.endDate) {\n const start = this.startDate.toLocaleString(this.locale, { year: 'numeric', month: 'short', day: '2-digit' });\n const end = this.endDate.toLocaleString(this.locale, { year: 'numeric', month: 'short', day: '2-digit' });\n return `${start} - ${end}`;\n } else if (this.mode === 'multiple' && this.selectedDates.length > 0) {\n return `${this.selectedDates.length} dates selected`;\n }\n return '';\n }\n\n get isBackArrowDisabled(): boolean {\n if (!this._minDate) return false;\n \n // Get the first day of the current month\n const firstDayOfCurrentMonth = new Date(this.currentYear, this.currentMonth, 1);\n \n // Check if the first day of current month is before or equal to minDate\n return firstDayOfCurrentMonth <= this._minDate;\n }\n \n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isInlineMode && this.isCalendarOpen && !this.elementRef.nativeElement.contains(event.target)) {\n this.isCalendarOpen = false;\n }\n }\n\n\n writeValue(val: DatepickerValue): void {\n this._internalValue = val;\n this.initializeValue(val);\n this.generateCalendar();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private emitValue(val: DatepickerValue) {\n this._internalValue = val;\n this.valueChange.emit(val);\n this.onChange(val);\n this.onTouched();\n \n // Auto-close popover when a selection is complete\n if (!this.isInlineMode && val !== null) {\n if (this.mode === 'single' || (this.mode === 'range' && this.startDate && this.endDate)) {\n this.isCalendarOpen = false;\n }\n }\n }\n \n public toggleCalendar(): void {\n if (this.disabled || this.isInlineMode) return;\n this.isCalendarOpen = !this.isCalendarOpen;\n }\n \n public clearValue(event?: MouseEvent): void {\n if (event) event.stopPropagation();\n if (this.disabled) return;\n \n this.selectedDate = null;\n this.selectedDates = [];\n this.startDate = null;\n this.endDate = null;\n this.hoveredDate = null;\n this.isCalendarOpen = false;\n \n this.emitValue(null);\n this.action.emit({type: 'clear', payload: null});\n \n // Reset view to today after clearing\n this.currentDate = new Date();\n this._currentMonth = this.currentDate.getMonth();\n this._currentYear = this.currentDate.getFullYear();\n this.generateCalendar();\n }\n\n get currentMonth(): number { return this._currentMonth; }\n\n set currentMonth(month: number) {\n if (this.disabled) return;\n if (this._currentMonth !== month) {\n this._currentMonth = month;\n this.currentDate.setMonth(month);\n this.generateCalendar();\n }\n }\n\n get currentYear(): number { return this._currentYear; }\n\n set currentYear(year: number) {\n if (this.disabled) return;\n if (this._currentYear !== year) {\n this._currentYear = year;\n this.currentDate.setFullYear(year);\n this.generateCalendar();\n }\n }\n\n ngOnInit(): void {\n if (this._locale === 'en-US' && typeof navigator !== 'undefined') {\n this._locale = navigator.language;\n }\n\n this.today.setHours(0, 0, 0, 0);\n this.generateLocaleData();\n this.generateTimeOptions();\n\n if (this.showTime && !this._internalValue) {\n const now = new Date();\n this.currentHour = now.getHours();\n this.currentMinute = Math.floor(now.getMinutes() / this.minuteInterval) * this.minuteInterval;\n\n if (this.currentMinute === 60) {\n this.currentMinute = 0;\n this.currentHour = (this.currentHour + 1) % 24;\n }\n this.update12HourState(this.currentHour);\n }\n\n if (this._internalValue) {\n this.initializeValue(this._internalValue);\n } else if (this._startAtDate) {\n this.initializeValue(null);\n }\n this.generateCalendar();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['locale']) {\n this.generateLocaleData();\n this.generateCalendar();\n }\n\n if (changes['minuteInterval']) {\n this.generateTimeOptions();\n this.currentMinute = Math.floor(this.currentMinute / this.minuteInterval) * this.minuteInterval;\n this.onTimeChange();\n }\n\n if (changes['value'] && changes['value'].currentValue !== changes['value'].previousValue) {\n this.writeValue(changes['value'].currentValue);\n }\n \n // Rerun calendar generation if provider changes to refresh disabled states\n if (changes['holidayProvider'] || changes['disableHolidays']) {\n this.generateCalendar();\n }\n\n if (changes['startAt']) {\n if (!this._internalValue && this._startAtDate) {\n this.currentDate = new Date(this._startAtDate);\n this._currentMonth = this.currentDate.getMonth();\n this._currentYear = this.currentDate.getFullYear();\n this.generateCalendar();\n }\n }\n }\n\n private get24Hour(displayHour: number, isPm: boolean): number {\n return get24Hour(displayHour, isPm);\n }\n\n private update12HourState(fullHour: number): void {\n const state = update12HourState(fullHour);\n this.isPm = state.isPm;\n this.currentDisplayHour = state.displayHour;\n }\n\n private applyCurrentTime(date: Date): Date {\n this.currentHour = this.get24Hour(this.currentDisplayHour, this.isPm);\n date.setHours(this.currentHour, this.currentMinute, 0, 0);\n return date;\n }\n\n private initializeValue(value: DatepickerValue): void {\n let initialDate: Date | null = null;\n\n this.selectedDate = null;\n this.startDate = null;\n this.endDate = null;\n this.selectedDates = [];\n\n if (value) {\n if (this.mode === 'single' && value instanceof Date) {\n this.selectedDate = this._normalizeDate(value);\n initialDate = this.selectedDate;\n } else if (this.mode === 'range' && typeof value === 'object' && 'start' in value && 'end' in value) {\n this.startDate = this._normalizeDate((value as {start: Date, end: Date}).start);\n this.endDate = this._normalizeDate((value as {start: Date, end: Date}).end);\n initialDate = this.startDate;\n } else if (this.mode === 'multiple' && Array.isArray(value)) {\n this.selectedDates = (value as Date[]).map(d => this._normalizeDate(d)).filter((d): d is Date => d !== null);\n initialDate = this.selectedDates.length > 0 ? this.selectedDates[this.selectedDates.length - 1]! : null;\n }\n }\n\n const viewCenterDate = initialDate || this._startAtDate || new Date();\n\n if (viewCenterDate) {\n this.currentDate = new Date(viewCenterDate);\n this._currentMonth = viewCenterDate.getMonth();\n this._currentYear = viewCenterDate.getFullYear();\n this.currentHour = viewCenterDate.getHours();\n this.currentMinute = viewCenterDate.getMinutes();\n this.update12HourState(this.currentHour);\n this.currentMinute = Math.floor(this.currentMinute / this.minuteInterval) * this.minuteInterval;\n }\n }\n\n private _normalizeDate(date: DateInput | null): Date | null {\n return normalizeDate(date);\n }\n\n private generateTimeOptions(): void {\n const { hourOptions, minuteOptions } = generateTimeOptions(this.minuteInterval);\n this.hourOptions = hourOptions;\n this.minuteOptions = minuteOptions;\n }\n\n private generateLocaleData(): void {\n const year = new Date().getFullYear();\n this.monthOptions = generateMonthOptions(this.locale, year);\n this.firstDayOfWeek = getFirstDayOfWeek(this.locale);\n this.weekDays = generateWeekDays(this.locale, this.firstDayOfWeek);\n }\n\n private updateRangesArray(): void {\n this.rangesArray = this._ranges ? Object.entries(this._ranges).map(([key, value]) => ({key, value})) : [];\n }\n\n public selectRange(range: [Date, Date]): void {\n if (this.disabled) return;\n this.startDate = this.applyCurrentTime(range[0]);\n this.endDate = this.applyCurrentTime(range[1]);\n\n if (this.startDate && this.endDate) {\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\n }\n\n this.currentDate = new Date(this.startDate);\n this.initializeValue({start: this.startDate, end: this.endDate});\n this.generateCalendar();\n this.action.emit({type: 'rangeSelected', payload: {start: this.startDate, end: this.endDate, key: this.rangesArray.find(r => r.value === range)?.key}});\n }\n \n // NEW: Check if a date is a holiday\n public isHoliday(date: Date | null): boolean {\n if (!date || !this.holidayProvider) return false;\n const dateOnly = getStartOfDay(date);\n return this.holidayProvider.isHoliday(dateOnly);\n }\n \n // NEW: Get holiday label\n public getHolidayLabel(date: Date | null): string | null {\n if (!date || !this.holidayProvider || !this.isHoliday(date)) return null;\n return this.holidayProvider.getHolidayLabel ? this.holidayProvider.getHolidayLabel(getStartOfDay(date)) : 'Holiday';\n }\n\n public isDateDisabled(date: Date | null): boolean {\n if (!date) return false;\n\n const dateOnly = getStartOfDay(date);\n\n // 1. Check holiday provider for disabling\n if (this.holidayProvider && this.disableHolidays && this.holidayProvider.isHoliday(dateOnly)) {\n return true;\n }\n\n // 2. Check min/max date\n if (this._minDate) {\n const minDateOnly = getStartOfDay(this._minDate);\n if (dateOnly.getTime() < minDateOnly.getTime()) return true;\n }\n if (this._maxDate) {\n const maxDateOnly = getStartOfDay(this._maxDate);\n if (dateOnly.getTime() > maxDateOnly.getTime()) return true;\n }\n \n // 3. Check custom invalid date function\n return this.isInvalidDate(date);\n }\n\n public isMultipleSelected(d: Date | null): boolean {\n if (!d || this.mode !== 'multiple') return false;\n const dTime = getStartOfDay(d).getTime();\n return this.selectedDates.some(selected => getStartOfDay(selected).getTime() === dTime);\n }\n\n public onTimeChange(): void {\n if (this.disabled) return;\n if (this.mode === 'single' && this.selectedDate) {\n this.selectedDate = this.applyCurrentTime(this.selectedDate);\n this.emitValue(this.selectedDate);\n } else if (this.mode === 'range' && this.startDate && this.endDate) {\n this.startDate = this.applyCurrentTime(this.startDate);\n this.endDate = this.applyCurrentTime(this.endDate);\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\n } else if (this.mode === 'range' && this.startDate && !this.endDate) {\n this.startDate = this.applyCurrentTime(this.startDate);\n } else if (this.mode === 'multiple') {\n this.selectedDates = this.selectedDates.map(date => {\n const newDate = getStartOfDay(date);\n return this.applyCurrentTime(newDate);\n });\n this.emitValue([...this.selectedDates]);\n }\n\n this.action.emit({type: 'timeChanged', payload: {hour: this.currentHour, minute: this.currentMinute}});\n }\n\n public onDateClick(day: Date | null): void {\n if (!day || this.disabled) return;\n \n // Only check isDateDisabled for current month days\n if (this.isCurrentMonth(day) && this.isDateDisabled(day)) return;\n\n const dateToToggle = getStartOfDay(day);\n\n if (this.mode === 'single') {\n this.selectedDate = this.applyCurrentTime(day);\n this.emitValue(this.selectedDate);\n } else if (this.mode === 'range') {\n if (!this.startDate || (this.startDate && this.endDate)) {\n this.startDate = this.applyCurrentTime(day);\n this.endDate = null;\n } else if (day >= this.startDate) {\n this.endDate = this.applyCurrentTime(day);\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\n } else {\n this.startDate = this.applyCurrentTime(day);\n this.endDate = null;\n }\n this.hoveredDate = null;\n } else if (this.mode === 'multiple') {\n const existingIndex = this.selectedDates.findIndex(d => this.isSameDay(d, dateToToggle));\n\n if (existingIndex > -1) {\n this.selectedDates.splice(existingIndex, 1);\n } else {\n const dateWithTime = this.applyCurrentTime(dateToToggle);\n this.selectedDates.push(dateWithTime);\n this.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n }\n this.emitValue([...this.selectedDates]);\n }\n\n const dateToSync = this.mode === 'single' ? this.selectedDate :\n this.mode === 'range' ? this.startDate :\n this.mode === 'multiple' && this.selectedDates.length > 0 ? this.selectedDates[this.selectedDates.length - 1] : null;\n\n if (dateToSync) {\n this.update12HourState(dateToSync.getHours());\n this.currentMinute = dateToSync.getMinutes();\n }\n\n this.action.emit({\n type: 'dateSelected',\n payload: {\n mode: this.mode,\n value: this._internalValue,\n date: day\n }\n });\n }\n\n public onDateHover(day: Date | null): void {\n if (this.mode === 'range' && this.startDate && !this.endDate && day) {\n this.hoveredDate = day;\n }\n }\n\n public isPreviewInRange(day: Date | null): boolean {\n if (this.mode !== 'range' || !this.startDate || this.endDate || !this.hoveredDate || !day) return false;\n const start = getStartOfDay(this.startDate).getTime();\n const end = getStartOfDay(this.hoveredDate).getTime();\n const time = getStartOfDay(day).getTime();\n return time > Math.min(start, end) && time < Math.max(start, end);\n }\n\n public generateCalendar(): void {\n this.daysInMonth = [];\n const year = this.currentDate.getFullYear();\n const month = this.currentDate.getMonth();\n this._currentMonth = month;\n this._currentYear = year;\n this.generateDropdownOptions();\n const firstDayOfMonth = new Date(year, month, 1);\n const lastDayOfMonth = new Date(year, month + 1, 0);\n const startDayOfWeek = firstDayOfMonth.getDay();\n const emptyCellCount = (startDayOfWeek - this.firstDayOfWeek + 7) % 7;\n\n // Add previous month's days instead of null values\n const previousMonth = month === 0 ? 11 : month - 1;\n const previousYear = month === 0 ? year - 1 : year;\n const lastDayOfPreviousMonth = new Date(previousYear, previousMonth + 1, 0);\n \n for (let i = 0; i < emptyCellCount; i++) {\n const dayNumber = lastDayOfPreviousMonth.getDate() - emptyCellCount + i + 1;\n this.daysInMonth.push(this._normalizeDate(new Date(previousYear, previousMonth, dayNumber)));\n }\n for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {\n this.daysInMonth.push(this._normalizeDate(new Date(year, month, i)));\n }\n\n\n this.action.emit({\n type: 'calendarGenerated',\n payload: {\n month: month,\n year: year,\n days: this.daysInMonth.filter(d => d !== null)\n }\n });\n }\n\n private generateDropdownOptions(): void {\n this.yearOptions = generateYearOptions(this._currentYear);\n }\n\n public changeMonth(delta: number): void {\n if (this.disabled) return;\n\n // Check if going back is disabled due to minDate constraint\n if (delta < 0 && this.isBackArrowDisabled) return;\n\n const newDate = addMonths(this.currentDate, delta);\n\n // Update the data immediately (no animation)\n this.currentDate = newDate;\n this._currentMonth = newDate.getMonth();\n this._currentYear = newDate.getFullYear();\n\n // Generate new calendar view\n this.generateCalendar();\n\n this.action.emit({type: 'monthChanged', payload: { delta: delta }});\n }\n\n public isSameDay(d1: Date | null, d2: Date | null): boolean {\n return this.dateComparator(d1, d2);\n }\n\n public isCurrentMonth(day: Date | null): boolean {\n if (!day) return false;\n return day.getMonth() === this._currentMonth && day.getFullYear() === this._currentYear;\n }\n\n public isInRange(d: Date | null): boolean {\n if (!d || !this.startDate || !this.endDate) return false;\n\n const dTime = getStartOfDay(d).getTime();\n const startDayTime = getStartOfDay(this.startDate).getTime();\n const endDayTime = getStartOfDay(this.endDate).getTime();\n\n const startTime = Math.min(startDayTime, endDayTime);\n const endTime = Math.max(startDayTime, endDayTime);\n\n return dTime > startTime && dTime < endTime;\n }\n\n ngOnDestroy(): void {\n // Clean up any subscriptions or timers if needed\n // Currently no cleanup required, but method is here for future optimizations\n }\n}","/*\n * Public API Surface of ngxsmk-datepicker\n */\n\nexport * from './lib/ngxsmk-datepicker';\nexport * from './lib/components/custom-select.component';\nexport * from './lib/utils/date.utils';\nexport * from './lib/utils/calendar.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngxsmk-datepicker.mjs","sources":["../../../projects/ngxsmk-datepicker/src/lib/utils/date.utils.ts","../../../projects/ngxsmk-datepicker/src/lib/utils/calendar.utils.ts","../../../projects/ngxsmk-datepicker/src/lib/components/custom-select.component.ts","../../../projects/ngxsmk-datepicker/src/lib/utils/performance.utils.ts","../../../projects/ngxsmk-datepicker/src/lib/ngxsmk-datepicker.ts","../../../projects/ngxsmk-datepicker/src/public-api.ts","../../../projects/ngxsmk-datepicker/src/ngxsmk-datepicker.ts"],"sourcesContent":["/**\r\n * Date utility functions for ngxsmk-datepicker\r\n * Extracted to improve tree-shaking and reduce bundle size\r\n */\r\n\r\nexport function getStartOfDay(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);\r\n}\r\n\r\nexport function getEndOfDay(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59, 999);\r\n}\r\n\r\nexport function addMonths(d: Date, months: number): Date {\r\n const newDate = new Date(d);\r\n newDate.setMonth(d.getMonth() + months);\r\n return newDate;\r\n}\r\n\r\nexport function subtractDays(d: Date, days: number): Date {\r\n const newDate = new Date(d);\r\n newDate.setDate(d.getDate() - days);\r\n return newDate;\r\n}\r\n\r\nexport function getStartOfMonth(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), 1);\r\n}\r\n\r\nexport function getEndOfMonth(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth() + 1, 0);\r\n}\r\n\r\nexport function isSameDay(d1: Date | null, d2: Date | null): boolean {\r\n if (!d1 || !d2) return false;\r\n return (\r\n d1.getFullYear() === d2.getFullYear() &&\r\n d1.getMonth() === d2.getMonth() &&\r\n d1.getDate() === d2.getDate()\r\n );\r\n}\r\n\r\nexport function normalizeDate(date: DateInput | null): Date | null {\r\n if (!date) return null;\r\n const d = (date instanceof Date) ? new Date(date.getTime()) : new Date((date as any).toDate ? (date as any).toDate() : date as any);\r\n if (isNaN(d.getTime())) return null;\r\n return d;\r\n}\r\n\r\nexport type DateInput = Date | string | { toDate: () => Date; _isAMomentObject?: boolean; $d?: Date };\r\n\r\n\r\n","/**\r\n * Calendar utility functions for ngxsmk-datepicker\r\n * Optimized for performance and tree-shaking\r\n */\r\n\r\nimport { DateInput, normalizeDate } from './date.utils';\r\n\r\nexport interface HolidayProvider {\r\n /**\r\n * Returns true if the given date is a holiday.\r\n * The date passed will be at the start of the day (00:00:00).\r\n */\r\n isHoliday(date: Date): boolean;\r\n \r\n /**\r\n * Optional: Returns a label or reason for the holiday.\r\n */\r\n getHolidayLabel?(date: Date): string | null;\r\n}\r\n\r\nexport interface DateRange {\r\n [key: string]: [DateInput, DateInput];\r\n}\r\n\r\nexport type DatepickerValue = Date | { start: Date, end: Date } | Date[] | null;\r\n\r\n/**\r\n * Generate month options for dropdown\r\n */\r\nexport function generateMonthOptions(locale: string, year: number): { label: string; value: number }[] {\r\n return Array.from({length: 12}).map((_, i) => ({\r\n label: new Date(year, i, 1).toLocaleDateString(locale, {month: 'long'}),\r\n value: i,\r\n }));\r\n}\r\n\r\n/**\r\n * Generate year options for dropdown\r\n */\r\nexport function generateYearOptions(currentYear: number, range: number = 10): { label: string; value: number }[] {\r\n const startYear = currentYear - range;\r\n const endYear = currentYear + range;\r\n const options: { label: string; value: number }[] = [];\r\n \r\n for (let i = startYear; i <= endYear; i++) {\r\n options.push({label: `${i}`, value: i});\r\n }\r\n \r\n return options;\r\n}\r\n\r\n/**\r\n * Generate time options for hour/minute dropdowns\r\n */\r\nexport function generateTimeOptions(minuteInterval: number = 1): {\r\n hourOptions: { label: string; value: number }[];\r\n minuteOptions: { label: string; value: number }[];\r\n} {\r\n const hourOptions = Array.from({length: 12}).map((_, i) => ({\r\n label: (i + 1).toString().padStart(2, '0'),\r\n value: i + 1,\r\n }));\r\n\r\n const minuteOptions: { label: string; value: number }[] = [];\r\n for (let i = 0; i < 60; i += minuteInterval) {\r\n minuteOptions.push({\r\n label: i.toString().padStart(2, '0'),\r\n value: i,\r\n });\r\n }\r\n\r\n return { hourOptions, minuteOptions };\r\n}\r\n\r\n/**\r\n * Generate week days for calendar header\r\n */\r\nexport function generateWeekDays(locale: string, firstDayOfWeek: number = 0): string[] {\r\n const day = new Date(2024, 0, 7 + firstDayOfWeek);\r\n return Array.from({length: 7}).map(() => {\r\n const weekDay = new Date(day).toLocaleDateString(locale, {weekday: 'short'});\r\n day.setDate(day.getDate() + 1);\r\n return weekDay;\r\n });\r\n}\r\n\r\n/**\r\n * Get first day of week for locale\r\n */\r\nexport function getFirstDayOfWeek(locale: string): number {\r\n try {\r\n return ((new Intl.Locale(locale) as any).weekInfo?.firstDay || 0) % 7;\r\n } catch (e) {\r\n return 0;\r\n }\r\n}\r\n\r\n/**\r\n * Convert 12-hour to 24-hour format\r\n */\r\nexport function get24Hour(displayHour: number, isPm: boolean): number {\r\n if (isPm) { return displayHour === 12 ? 12 : displayHour + 12; }\r\n return displayHour === 12 ? 0 : displayHour;\r\n}\r\n\r\n/**\r\n * Convert 24-hour to 12-hour format\r\n */\r\nexport function update12HourState(fullHour: number): { isPm: boolean; displayHour: number } {\r\n return {\r\n isPm: fullHour >= 12,\r\n displayHour: fullHour % 12 || 12\r\n };\r\n}\r\n\r\n/**\r\n * Process date ranges input\r\n */\r\nexport function processDateRanges(ranges: DateRange | null): { [key: string]: [Date, Date] } | null {\r\n if (!ranges) return null;\r\n \r\n return Object.entries(ranges).reduce((acc, [key, dates]) => {\r\n const start = normalizeDate(dates[0]);\r\n const end = normalizeDate(dates[1]);\r\n if (start && end) acc[key] = [start, end];\r\n return acc;\r\n }, {} as { [key: string]: [Date, Date] });\r\n}\r\n\r\n\r\n","import { Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ngxsmk-custom-select',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: `\r\n <div class=\"ngxsmk-select-container\" (click)=\"toggleDropdown()\">\r\n <button type=\"button\" class=\"ngxsmk-select-display\" [disabled]=\"disabled\">\r\n <span>{{ displayValue }}</span>\r\n <svg class=\"ngxsmk-arrow-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\"\r\n d=\"M112 184l144 144 144-144\"/>\r\n </svg>\r\n </button>\r\n @if (isOpen) {\r\n <div class=\"ngxsmk-options-panel\">\r\n <ul>\r\n @for (option of options; track option.value) {\r\n <li [class.selected]=\"option.value === value\" (click)=\"selectOption(option); $event.stopPropagation()\">\r\n {{ option.label }}\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n `,\r\n styles: [`\r\n :host { position: relative; display: inline-block; }\r\n .ngxsmk-select-container { cursor: pointer; }\r\n .ngxsmk-select-display {\r\n display: flex; align-items: center; justify-content: space-between;\r\n width: var(--custom-select-width, 115px); background: var(--datepicker-background, #fff);\r\n border: 1px solid var(--datepicker-border-color, #ccc); color: var(--datepicker-text-color, #333);\r\n border-radius: 4px; padding: 4px 8px; font-size: 14px; text-align: left; height: 30px;\r\n }\r\n .ngxsmk-select-display:disabled {\r\n background-color: var(--datepicker-hover-background, #f0f0f0);\r\n cursor: not-allowed;\r\n opacity: 0.7;\r\n }\r\n .ngxsmk-arrow-icon { width: 12px; height: 12px; margin-left: 8px; }\r\n .ngxsmk-options-panel {\r\n position: absolute; top: 110%; left: 0; width: 100%;\r\n background: var(--datepicker-background, #fff); border: 1px solid var(--datepicker-border-color, #ccc);\r\n color: var(--datepicker-text-color, #333); border-radius: 4px;\r\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); max-height: 200px; overflow-y: auto; z-index: 9999;\r\n }\r\n .ngxsmk-options-panel ul { list-style: none; padding: 4px; margin: 0; }\r\n .ngxsmk-options-panel li { padding: 8px 12px; border-radius: 4px; cursor: pointer; }\r\n .ngxsmk-options-panel li:hover { background-color: var(--datepicker-hover-background, #f0f0f0); }\r\n .ngxsmk-options-panel li.selected {\r\n background-color: var(--datepicker-primary-color, #3880ff); color: var(--datepicker-primary-contrast, #fff);\r\n }\r\n `],\r\n})\r\nexport class CustomSelectComponent {\r\n @Input() options: { label: string; value: any }[] = [];\r\n @Input() value: any;\r\n @Input() disabled: boolean = false;\r\n @Output() valueChange = new EventEmitter<any>();\r\n public isOpen = false;\r\n\r\n private readonly elementRef: ElementRef = inject(ElementRef);\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (!this.elementRef.nativeElement.contains(event.target)) this.isOpen = false;\r\n }\r\n\r\n get displayValue(): string {\r\n const selectedOption = this.options.find((opt) => opt.value === this.value);\r\n return selectedOption ? selectedOption.label : '';\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (this.disabled) return;\r\n this.isOpen = !this.isOpen;\r\n }\r\n\r\n selectOption(option: { label: string; value: any }): void {\r\n this.value = option.value;\r\n this.valueChange.emit(this.value);\r\n this.isOpen = false;\r\n }\r\n}\r\n\r\n\r\n","/**\r\n * Performance utilities for ngxsmk-datepicker\r\n * Optimized for better runtime performance\r\n */\r\n\r\n/**\r\n * Memoization decorator for expensive computations\r\n */\r\nexport function memoize<T extends (...args: any[]) => any>(\r\n fn: T,\r\n keyGenerator?: (...args: Parameters<T>) => string\r\n): T {\r\n const cache = new Map<string, ReturnType<T>>();\r\n \r\n return ((...args: Parameters<T>) => {\r\n const key = keyGenerator ? keyGenerator(...args) : JSON.stringify(args);\r\n \r\n if (cache.has(key)) {\r\n return cache.get(key)!;\r\n }\r\n \r\n const result = fn(...args);\r\n cache.set(key, result);\r\n return result;\r\n }) as T;\r\n}\r\n\r\n/**\r\n * Debounce function for performance optimization\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number\r\n): (...args: Parameters<T>) => void {\r\n let timeout: number | null = null;\r\n \r\n return (...args: Parameters<T>) => {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n \r\n timeout = window.setTimeout(() => {\r\n func(...args);\r\n }, wait);\r\n };\r\n}\r\n\r\n/**\r\n * Throttle function for performance optimization\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n func: T,\r\n limit: number\r\n): (...args: Parameters<T>) => void {\r\n let inThrottle: boolean = false;\r\n \r\n return (...args: Parameters<T>) => {\r\n if (!inThrottle) {\r\n func(...args);\r\n inThrottle = true;\r\n window.setTimeout(() => (inThrottle = false), limit);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Create a shallow comparison function for objects\r\n */\r\nexport function shallowEqual<T extends Record<string, any>>(a: T, b: T): boolean {\r\n const keysA = Object.keys(a);\r\n const keysB = Object.keys(b);\r\n \r\n if (keysA.length !== keysB.length) {\r\n return false;\r\n }\r\n \r\n for (const key of keysA) {\r\n if (a[key] !== b[key]) {\r\n return false;\r\n }\r\n }\r\n \r\n return true;\r\n}\r\n\r\n/**\r\n * Optimized date comparison for calendar rendering\r\n */\r\nexport function createDateComparator() {\r\n const cache = new Map<string, boolean>();\r\n \r\n return (date1: Date | null, date2: Date | null): boolean => {\r\n if (!date1 || !date2) return date1 === date2;\r\n \r\n const key = `${date1.getTime()}-${date2.getTime()}`;\r\n if (cache.has(key)) {\r\n return cache.get(key)!;\r\n }\r\n \r\n const result = (\r\n date1.getFullYear() === date2.getFullYear() &&\r\n date1.getMonth() === date2.getMonth() &&\r\n date1.getDate() === date2.getDate()\r\n );\r\n \r\n cache.set(key, result);\r\n return result;\r\n };\r\n}\r\n\r\n/**\r\n * Optimized array filtering with caching\r\n */\r\nexport function createFilteredArray<T>(\r\n source: T[],\r\n filterFn: (item: T) => boolean,\r\n cacheKey?: string\r\n): T[] {\r\n const cache = new Map<string, T[]>();\r\n const key = cacheKey || JSON.stringify(source);\r\n \r\n if (cache.has(key)) {\r\n return cache.get(key)!;\r\n }\r\n \r\n const result = source.filter(filterFn);\r\n cache.set(key, result);\r\n return result;\r\n}\r\n\r\n\r\n","import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy,\n OnDestroy,\n} from '@angular/core';\nimport {CommonModule, DatePipe} from '@angular/common';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {\n getStartOfDay,\n addMonths,\n normalizeDate,\n DateInput,\n} from './utils/date.utils';\nimport {\n HolidayProvider,\n DateRange,\n DatepickerValue,\n generateMonthOptions,\n generateYearOptions,\n generateTimeOptions,\n generateWeekDays,\n getFirstDayOfWeek,\n get24Hour,\n update12HourState,\n processDateRanges,\n} from './utils/calendar.utils';\nimport { CustomSelectComponent } from './components/custom-select.component';\nimport { createDateComparator } from './utils/performance.utils';\n\n\n@Component({\n selector: 'ngxsmk-datepicker',\n standalone: true,\n imports: [CommonModule, FormsModule, CustomSelectComponent, DatePipe, ReactiveFormsModule],\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxsmkDatepickerComponent),\n multi: true\n }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./styles/datepicker.css'],\n template: `\n <div class=\"ngxsmk-datepicker-wrapper\" [class.ngxsmk-inline-mode]=\"isInlineMode\">\n @if (!isInlineMode) {\n <div class=\"ngxsmk-input-group\" (click)=\"toggleCalendar()\" [class.disabled]=\"disabled\">\n <input type=\"text\" \n [value]=\"displayValue\" \n [placeholder]=\"placeholder\" \n readonly \n [disabled]=\"disabled\"\n class=\"ngxsmk-display-input\">\n <button type=\"button\" class=\"ngxsmk-clear-button\" (click)=\"clearValue($event)\" [disabled]=\"disabled\" *ngIf=\"displayValue\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"32\" d=\"M368 368L144 144M368 144L144 368\"/></svg>\n </button>\n </div>\n }\n\n @if (isCalendarVisible) {\n <div class=\"ngxsmk-popover-container\" [class.ngxsmk-inline-container]=\"isInlineMode\">\n <div class=\"ngxsmk-datepicker-container\">\n @if (showRanges && rangesArray.length > 0 && mode === 'range') {\n <div class=\"ngxsmk-ranges-container\">\n <ul>\n @for (range of rangesArray; track range.key) {\n <li (click)=\"selectRange(range.value)\" [class.disabled]=\"disabled\">{{ range.key }}</li>\n }\n </ul>\n </div>\n }\n <div class=\"ngxsmk-calendar-container\">\n <div class=\"ngxsmk-header\">\n <div class=\"ngxsmk-month-year-selects\">\n <ngxsmk-custom-select class=\"month-select\" [options]=\"monthOptions\"\n [(value)]=\"currentMonth\" [disabled]=\"disabled\"></ngxsmk-custom-select>\n <ngxsmk-custom-select class=\"year-select\" [options]=\"yearOptions\" [(value)]=\"currentYear\" [disabled]=\"disabled\"></ngxsmk-custom-select>\n </div>\n <div class=\"ngxsmk-nav-buttons\">\n <button type=\"button\" class=\"ngxsmk-nav-button\" (click)=\"changeMonth(-1)\" [disabled]=\"disabled || isBackArrowDisabled\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\"\n d=\"M328 112L184 256l144 144\"/>\n </svg>\n </button>\n <button type=\"button\" class=\"ngxsmk-nav-button\" (click)=\"changeMonth(1)\" [disabled]=\"disabled\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"48\"\n d=\"M184 112l144 144-144 144\"/>\n </svg>\n </button>\n </div>\n </div>\n <div class=\"ngxsmk-days-grid-wrapper\">\n <div class=\"ngxsmk-days-grid\">\n @for (day of weekDays; track day) {\n <div class=\"ngxsmk-day-name\">{{ day }}</div>\n }\n @for (day of daysInMonth; track $index) {\n <div class=\"ngxsmk-day-cell\"\n [class.empty]=\"!isCurrentMonth(day)\" [class.disabled]=\"isDateDisabled(day)\" \n [class.today]=\"isSameDay(day, today)\"\n [class.holiday]=\"isHoliday(day)\"\n [class.selected]=\"mode === 'single' && isSameDay(day, selectedDate)\"\n [class.multiple-selected]=\"mode === 'multiple' && isMultipleSelected(day)\"\n [class.start-date]=\"mode === 'range' && isSameDay(day, startDate)\"\n [class.end-date]=\"mode === 'range' && isSameDay(day, endDate)\"\n [class.in-range]=\"mode === 'range' && isInRange(day)\"\n [class.preview-range]=\"isPreviewInRange(day)\"\n (click)=\"onDateClick(day)\" (mouseenter)=\"onDateHover(day)\">\n @if (day) {\n <div class=\"ngxsmk-day-number\" [attr.title]=\"getHolidayLabel(day)\">{{ day | date : 'd' }}</div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (showTime) {\n <div class=\"ngxsmk-time-selection\">\n <span class=\"ngxsmk-time-label\">Time:</span>\n <ngxsmk-custom-select\n class=\"hour-select\"\n [options]=\"hourOptions\"\n [(value)]=\"currentDisplayHour\"\n (valueChange)=\"onTimeChange()\"\n [disabled]=\"disabled\"\n ></ngxsmk-custom-select>\n <span class=\"ngxsmk-time-separator\">:</span>\n <ngxsmk-custom-select\n class=\"minute-select\"\n [options]=\"minuteOptions\"\n [(value)]=\"currentMinute\"\n (valueChange)=\"onTimeChange()\"\n [disabled]=\"disabled\"\n ></ngxsmk-custom-select>\n <ngxsmk-custom-select\n class=\"ampm-select\"\n [options]=\"ampmOptions\"\n [(value)]=\"isPm\"\n (valueChange)=\"onTimeChange()\"\n [disabled]=\"disabled\"\n ></ngxsmk-custom-select>\n </div>\n }\n \n <div class=\"ngxsmk-footer\" *ngIf=\"!isInlineMode\">\n <button type=\"button\" class=\"ngxsmk-clear-button-footer\" (click)=\"clearValue($event)\" [disabled]=\"disabled\">\n Clear\n </button>\n <button type=\"button\" class=\"ngxsmk-close-button\" (click)=\"isCalendarOpen = false\" [disabled]=\"disabled\">\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class NgxsmkDatepickerComponent implements OnInit, OnChanges, OnDestroy, ControlValueAccessor {\n @Input() mode: 'single' | 'range' | 'multiple' = 'single';\n @Input() isInvalidDate: (date: Date) => boolean = () => false;\n @Input() showRanges: boolean = true;\n @Input() showTime: boolean = false;\n @Input() minuteInterval: number = 1;\n \n // NEW: Holiday Provider Inputs\n @Input() holidayProvider: HolidayProvider | null = null;\n @Input() disableHolidays: boolean = false;\n \n // Popover/Input Mode\n @Input() placeholder: string = 'Select Date';\n @Input() inline: boolean | 'always' | 'auto' = false;\n public isCalendarOpen: boolean = false;\n\n public _internalValue: DatepickerValue = null;\n\n private _startAtDate: Date | null = null;\n @Input() set startAt(value: DateInput | null) { this._startAtDate = this._normalizeDate(value); }\n\n private _locale: string = 'en-US';\n @Input() set locale(value: string) { this._locale = value; }\n get locale(): string { return this._locale; }\n\n @Input() theme: 'light' | 'dark' = 'light';\n @HostBinding('class.dark-theme') get isDarkMode() { return this.theme === 'dark'; }\n\n private onChange = (_: any) => {};\n private onTouched = () => {};\n public disabled = false;\n @Input() set disabledState(isDisabled: boolean) { this.disabled = isDisabled; }\n\n @Output() valueChange = new EventEmitter<DatepickerValue>();\n @Output() action = new EventEmitter<{ type: string; payload?: any }>();\n\n private _minDate: Date | null = null;\n @Input() set minDate(value: DateInput | null) { this._minDate = this._normalizeDate(value); }\n\n private _maxDate: Date | null = null;\n @Input() set maxDate(value: DateInput | null) { this._maxDate = this._normalizeDate(value); }\n\n private _ranges: { [key: string]: [Date, Date] } | null = null;\n @Input() set ranges(value: DateRange | null) {\n this._ranges = processDateRanges(value);\n this.updateRangesArray();\n }\n\n public currentDate: Date = new Date();\n public daysInMonth: (Date | null)[] = [];\n public weekDays: string[] = [];\n public readonly today: Date = getStartOfDay(new Date());\n public selectedDate: Date | null = null;\n public selectedDates: Date[] = [];\n public startDate: Date | null = null;\n public endDate: Date | null = null;\n public hoveredDate: Date | null = null;\n public rangesArray: { key: string; value: [Date, Date] }[] = [];\n\n private _currentMonth: number = this.currentDate.getMonth();\n private _currentYear: number = this.currentDate.getFullYear();\n\n public monthOptions: { label: string; value: number }[] = [];\n public yearOptions: { label: string; value: number }[] = [];\n private firstDayOfWeek: number = 0;\n\n public currentHour: number = 0;\n public currentMinute: number = 0;\n public currentDisplayHour: number = 12;\n public isPm: boolean = false;\n\n public hourOptions: { label: string; value: number }[] = [];\n public minuteOptions: { label: string; value: number }[] = [];\n public ampmOptions: { label: string; value: boolean }[] = [\n {label: 'AM', value: false},\n {label: 'PM', value: true}\n ];\n\n // Animation state properties\n \n private readonly elementRef: ElementRef = inject(ElementRef);\n private readonly dateComparator = createDateComparator();\n \n get isInlineMode(): boolean {\n return this.inline === true || this.inline === 'always' || \n (this.inline === 'auto' && typeof window !== 'undefined' && window.matchMedia('(min-width: 768px)').matches);\n }\n\n get isCalendarVisible(): boolean {\n return this.isInlineMode || this.isCalendarOpen;\n }\n \n get displayValue(): string {\n if (this.mode === 'single' && this.selectedDate) {\n return this.selectedDate.toLocaleString(this.locale, { \n year: 'numeric', month: 'short', day: '2-digit', \n hour: this.showTime ? '2-digit' : undefined, \n minute: this.showTime ? '2-digit' : undefined \n });\n } else if (this.mode === 'range' && this.startDate && this.endDate) {\n const start = this.startDate.toLocaleString(this.locale, { year: 'numeric', month: 'short', day: '2-digit' });\n const end = this.endDate.toLocaleString(this.locale, { year: 'numeric', month: 'short', day: '2-digit' });\n return `${start} - ${end}`;\n } else if (this.mode === 'multiple' && this.selectedDates.length > 0) {\n return `${this.selectedDates.length} dates selected`;\n }\n return '';\n }\n\n get isBackArrowDisabled(): boolean {\n if (!this._minDate) return false;\n \n // Get the first day of the current month\n const firstDayOfCurrentMonth = new Date(this.currentYear, this.currentMonth, 1);\n \n // Check if the first day of current month is before or equal to minDate\n return firstDayOfCurrentMonth <= this._minDate;\n }\n \n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isInlineMode && this.isCalendarOpen && !this.elementRef.nativeElement.contains(event.target)) {\n this.isCalendarOpen = false;\n }\n }\n\n\n writeValue(val: DatepickerValue): void {\n this._internalValue = val;\n this.initializeValue(val);\n this.generateCalendar();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private emitValue(val: DatepickerValue) {\n this._internalValue = val;\n this.valueChange.emit(val);\n this.onChange(val);\n this.onTouched();\n \n // Auto-close popover when a selection is complete\n if (!this.isInlineMode && val !== null) {\n if (this.mode === 'single' || (this.mode === 'range' && this.startDate && this.endDate)) {\n this.isCalendarOpen = false;\n }\n }\n }\n \n public toggleCalendar(): void {\n if (this.disabled || this.isInlineMode) return;\n this.isCalendarOpen = !this.isCalendarOpen;\n }\n \n public clearValue(event?: MouseEvent): void {\n if (event) event.stopPropagation();\n if (this.disabled) return;\n \n this.selectedDate = null;\n this.selectedDates = [];\n this.startDate = null;\n this.endDate = null;\n this.hoveredDate = null;\n this.isCalendarOpen = false;\n \n this.emitValue(null);\n this.action.emit({type: 'clear', payload: null});\n \n // Reset view to today after clearing\n this.currentDate = new Date();\n this._currentMonth = this.currentDate.getMonth();\n this._currentYear = this.currentDate.getFullYear();\n this.generateCalendar();\n }\n\n get currentMonth(): number { return this._currentMonth; }\n\n set currentMonth(month: number) {\n if (this.disabled) return;\n if (this._currentMonth !== month) {\n this._currentMonth = month;\n this.currentDate.setMonth(month);\n this.generateCalendar();\n }\n }\n\n get currentYear(): number { return this._currentYear; }\n\n set currentYear(year: number) {\n if (this.disabled) return;\n if (this._currentYear !== year) {\n this._currentYear = year;\n this.currentDate.setFullYear(year);\n this.generateCalendar();\n }\n }\n\n ngOnInit(): void {\n if (this._locale === 'en-US' && typeof navigator !== 'undefined') {\n this._locale = navigator.language;\n }\n\n this.today.setHours(0, 0, 0, 0);\n this.generateLocaleData();\n this.generateTimeOptions();\n\n if (this.showTime && !this._internalValue) {\n const now = new Date();\n this.currentHour = now.getHours();\n this.currentMinute = Math.floor(now.getMinutes() / this.minuteInterval) * this.minuteInterval;\n\n if (this.currentMinute === 60) {\n this.currentMinute = 0;\n this.currentHour = (this.currentHour + 1) % 24;\n }\n this.update12HourState(this.currentHour);\n }\n\n if (this._internalValue) {\n this.initializeValue(this._internalValue);\n } else {\n this.initializeValue(null);\n }\n this.generateCalendar();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['locale']) {\n this.generateLocaleData();\n this.generateCalendar();\n }\n\n if (changes['minuteInterval']) {\n this.generateTimeOptions();\n this.currentMinute = Math.floor(this.currentMinute / this.minuteInterval) * this.minuteInterval;\n this.onTimeChange();\n }\n\n if (changes['value'] && changes['value'].currentValue !== changes['value'].previousValue) {\n this.writeValue(changes['value'].currentValue);\n }\n \n // Rerun calendar generation if provider changes to refresh disabled states\n if (changes['holidayProvider'] || changes['disableHolidays']) {\n this.generateCalendar();\n }\n\n if (changes['startAt']) {\n if (!this._internalValue && this._startAtDate) {\n this.currentDate = new Date(this._startAtDate);\n this._currentMonth = this.currentDate.getMonth();\n this._currentYear = this.currentDate.getFullYear();\n this.generateCalendar();\n }\n }\n\n // Handle minDate changes - if minDate is set and is in the future, \n // and we don't have a current value, update the view to show minDate's month\n if (changes['minDate'] && !this._internalValue) {\n if (this._minDate) {\n const today = new Date();\n const minDateOnly = getStartOfDay(this._minDate);\n const todayOnly = getStartOfDay(today);\n \n // If minDate is in the future, update the view to show minDate's month\n if (minDateOnly.getTime() > todayOnly.getTime()) {\n this.currentDate = new Date(this._minDate);\n this._currentMonth = this.currentDate.getMonth();\n this._currentYear = this.currentDate.getFullYear();\n this.generateCalendar();\n }\n }\n }\n }\n\n private get24Hour(displayHour: number, isPm: boolean): number {\n return get24Hour(displayHour, isPm);\n }\n\n private update12HourState(fullHour: number): void {\n const state = update12HourState(fullHour);\n this.isPm = state.isPm;\n this.currentDisplayHour = state.displayHour;\n }\n\n private applyCurrentTime(date: Date): Date {\n this.currentHour = this.get24Hour(this.currentDisplayHour, this.isPm);\n date.setHours(this.currentHour, this.currentMinute, 0, 0);\n return date;\n }\n\n private initializeValue(value: DatepickerValue): void {\n let initialDate: Date | null = null;\n\n this.selectedDate = null;\n this.startDate = null;\n this.endDate = null;\n this.selectedDates = [];\n\n if (value) {\n if (this.mode === 'single' && value instanceof Date) {\n this.selectedDate = this._normalizeDate(value);\n initialDate = this.selectedDate;\n } else if (this.mode === 'range' && typeof value === 'object' && 'start' in value && 'end' in value) {\n this.startDate = this._normalizeDate((value as {start: Date, end: Date}).start);\n this.endDate = this._normalizeDate((value as {start: Date, end: Date}).end);\n initialDate = this.startDate;\n } else if (this.mode === 'multiple' && Array.isArray(value)) {\n this.selectedDates = (value as Date[]).map(d => this._normalizeDate(d)).filter((d): d is Date => d !== null);\n initialDate = this.selectedDates.length > 0 ? this.selectedDates[this.selectedDates.length - 1]! : null;\n }\n }\n\n // Determine the initial view date\n let viewCenterDate = initialDate || this._startAtDate;\n \n // If no specific date is set and minDate is in the future, use minDate's month\n if (!viewCenterDate && this._minDate) {\n const today = new Date();\n const minDateOnly = getStartOfDay(this._minDate);\n const todayOnly = getStartOfDay(today);\n \n // If minDate is in the future, use minDate as the initial view\n if (minDateOnly.getTime() > todayOnly.getTime()) {\n viewCenterDate = this._minDate;\n }\n }\n \n // Fallback to current date if no other date is determined\n if (!viewCenterDate) {\n viewCenterDate = new Date();\n }\n\n if (viewCenterDate) {\n this.currentDate = new Date(viewCenterDate);\n this._currentMonth = viewCenterDate.getMonth();\n this._currentYear = viewCenterDate.getFullYear();\n this.currentHour = viewCenterDate.getHours();\n this.currentMinute = viewCenterDate.getMinutes();\n this.update12HourState(this.currentHour);\n this.currentMinute = Math.floor(this.currentMinute / this.minuteInterval) * this.minuteInterval;\n }\n }\n\n private _normalizeDate(date: DateInput | null): Date | null {\n return normalizeDate(date);\n }\n\n private generateTimeOptions(): void {\n const { hourOptions, minuteOptions } = generateTimeOptions(this.minuteInterval);\n this.hourOptions = hourOptions;\n this.minuteOptions = minuteOptions;\n }\n\n private generateLocaleData(): void {\n const year = new Date().getFullYear();\n this.monthOptions = generateMonthOptions(this.locale, year);\n this.firstDayOfWeek = getFirstDayOfWeek(this.locale);\n this.weekDays = generateWeekDays(this.locale, this.firstDayOfWeek);\n }\n\n private updateRangesArray(): void {\n this.rangesArray = this._ranges ? Object.entries(this._ranges).map(([key, value]) => ({key, value})) : [];\n }\n\n public selectRange(range: [Date, Date]): void {\n if (this.disabled) return;\n this.startDate = this.applyCurrentTime(range[0]);\n this.endDate = this.applyCurrentTime(range[1]);\n\n if (this.startDate && this.endDate) {\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\n }\n\n this.currentDate = new Date(this.startDate);\n this.initializeValue({start: this.startDate, end: this.endDate});\n this.generateCalendar();\n this.action.emit({type: 'rangeSelected', payload: {start: this.startDate, end: this.endDate, key: this.rangesArray.find(r => r.value === range)?.key}});\n }\n \n // NEW: Check if a date is a holiday\n public isHoliday(date: Date | null): boolean {\n if (!date || !this.holidayProvider) return false;\n const dateOnly = getStartOfDay(date);\n return this.holidayProvider.isHoliday(dateOnly);\n }\n \n // NEW: Get holiday label\n public getHolidayLabel(date: Date | null): string | null {\n if (!date || !this.holidayProvider || !this.isHoliday(date)) return null;\n return this.holidayProvider.getHolidayLabel ? this.holidayProvider.getHolidayLabel(getStartOfDay(date)) : 'Holiday';\n }\n\n public isDateDisabled(date: Date | null): boolean {\n if (!date) return false;\n\n const dateOnly = getStartOfDay(date);\n\n // 1. Check holiday provider for disabling\n if (this.holidayProvider && this.disableHolidays && this.holidayProvider.isHoliday(dateOnly)) {\n return true;\n }\n\n // 2. Check min/max date\n if (this._minDate) {\n const minDateOnly = getStartOfDay(this._minDate);\n if (dateOnly.getTime() < minDateOnly.getTime()) return true;\n }\n if (this._maxDate) {\n const maxDateOnly = getStartOfDay(this._maxDate);\n if (dateOnly.getTime() > maxDateOnly.getTime()) return true;\n }\n \n // 3. Check custom invalid date function\n return this.isInvalidDate(date);\n }\n\n public isMultipleSelected(d: Date | null): boolean {\n if (!d || this.mode !== 'multiple') return false;\n const dTime = getStartOfDay(d).getTime();\n return this.selectedDates.some(selected => getStartOfDay(selected).getTime() === dTime);\n }\n\n public onTimeChange(): void {\n if (this.disabled) return;\n if (this.mode === 'single' && this.selectedDate) {\n this.selectedDate = this.applyCurrentTime(this.selectedDate);\n this.emitValue(this.selectedDate);\n } else if (this.mode === 'range' && this.startDate && this.endDate) {\n this.startDate = this.applyCurrentTime(this.startDate);\n this.endDate = this.applyCurrentTime(this.endDate);\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\n } else if (this.mode === 'range' && this.startDate && !this.endDate) {\n this.startDate = this.applyCurrentTime(this.startDate);\n } else if (this.mode === 'multiple') {\n this.selectedDates = this.selectedDates.map(date => {\n const newDate = getStartOfDay(date);\n return this.applyCurrentTime(newDate);\n });\n this.emitValue([...this.selectedDates]);\n }\n\n this.action.emit({type: 'timeChanged', payload: {hour: this.currentHour, minute: this.currentMinute}});\n }\n\n public onDateClick(day: Date | null): void {\n if (!day || this.disabled) return;\n \n // Only check isDateDisabled for current month days\n if (this.isCurrentMonth(day) && this.isDateDisabled(day)) return;\n\n const dateToToggle = getStartOfDay(day);\n\n if (this.mode === 'single') {\n this.selectedDate = this.applyCurrentTime(day);\n this.emitValue(this.selectedDate);\n } else if (this.mode === 'range') {\n if (!this.startDate || (this.startDate && this.endDate)) {\n this.startDate = this.applyCurrentTime(day);\n this.endDate = null;\n } else if (day >= this.startDate) {\n this.endDate = this.applyCurrentTime(day);\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\n } else {\n this.startDate = this.applyCurrentTime(day);\n this.endDate = null;\n }\n this.hoveredDate = null;\n } else if (this.mode === 'multiple') {\n const existingIndex = this.selectedDates.findIndex(d => this.isSameDay(d, dateToToggle));\n\n if (existingIndex > -1) {\n this.selectedDates.splice(existingIndex, 1);\n } else {\n const dateWithTime = this.applyCurrentTime(dateToToggle);\n this.selectedDates.push(dateWithTime);\n this.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n }\n this.emitValue([...this.selectedDates]);\n }\n\n const dateToSync = this.mode === 'single' ? this.selectedDate :\n this.mode === 'range' ? this.startDate :\n this.mode === 'multiple' && this.selectedDates.length > 0 ? this.selectedDates[this.selectedDates.length - 1] : null;\n\n if (dateToSync) {\n this.update12HourState(dateToSync.getHours());\n this.currentMinute = dateToSync.getMinutes();\n }\n\n this.action.emit({\n type: 'dateSelected',\n payload: {\n mode: this.mode,\n value: this._internalValue,\n date: day\n }\n });\n }\n\n public onDateHover(day: Date | null): void {\n if (this.mode === 'range' && this.startDate && !this.endDate && day) {\n this.hoveredDate = day;\n }\n }\n\n public isPreviewInRange(day: Date | null): boolean {\n if (this.mode !== 'range' || !this.startDate || this.endDate || !this.hoveredDate || !day) return false;\n const start = getStartOfDay(this.startDate).getTime();\n const end = getStartOfDay(this.hoveredDate).getTime();\n const time = getStartOfDay(day).getTime();\n return time > Math.min(start, end) && time < Math.max(start, end);\n }\n\n public generateCalendar(): void {\n this.daysInMonth = [];\n const year = this.currentDate.getFullYear();\n const month = this.currentDate.getMonth();\n this._currentMonth = month;\n this._currentYear = year;\n this.generateDropdownOptions();\n const firstDayOfMonth = new Date(year, month, 1);\n const lastDayOfMonth = new Date(year, month + 1, 0);\n const startDayOfWeek = firstDayOfMonth.getDay();\n const emptyCellCount = (startDayOfWeek - this.firstDayOfWeek + 7) % 7;\n\n // Add previous month's days instead of null values\n const previousMonth = month === 0 ? 11 : month - 1;\n const previousYear = month === 0 ? year - 1 : year;\n const lastDayOfPreviousMonth = new Date(previousYear, previousMonth + 1, 0);\n \n for (let i = 0; i < emptyCellCount; i++) {\n const dayNumber = lastDayOfPreviousMonth.getDate() - emptyCellCount + i + 1;\n this.daysInMonth.push(this._normalizeDate(new Date(previousYear, previousMonth, dayNumber)));\n }\n for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {\n this.daysInMonth.push(this._normalizeDate(new Date(year, month, i)));\n }\n\n\n this.action.emit({\n type: 'calendarGenerated',\n payload: {\n month: month,\n year: year,\n days: this.daysInMonth.filter(d => d !== null)\n }\n });\n }\n\n private generateDropdownOptions(): void {\n this.yearOptions = generateYearOptions(this._currentYear);\n }\n\n public changeMonth(delta: number): void {\n if (this.disabled) return;\n\n // Check if going back is disabled due to minDate constraint\n if (delta < 0 && this.isBackArrowDisabled) return;\n\n const newDate = addMonths(this.currentDate, delta);\n\n // Update the data immediately (no animation)\n this.currentDate = newDate;\n this._currentMonth = newDate.getMonth();\n this._currentYear = newDate.getFullYear();\n\n // Generate new calendar view\n this.generateCalendar();\n\n this.action.emit({type: 'monthChanged', payload: { delta: delta }});\n }\n\n public isSameDay(d1: Date | null, d2: Date | null): boolean {\n return this.dateComparator(d1, d2);\n }\n\n public isCurrentMonth(day: Date | null): boolean {\n if (!day) return false;\n return day.getMonth() === this._currentMonth && day.getFullYear() === this._currentYear;\n }\n\n public isInRange(d: Date | null): boolean {\n if (!d || !this.startDate || !this.endDate) return false;\n\n const dTime = getStartOfDay(d).getTime();\n const startDayTime = getStartOfDay(this.startDate).getTime();\n const endDayTime = getStartOfDay(this.endDate).getTime();\n\n const startTime = Math.min(startDayTime, endDayTime);\n const endTime = Math.max(startDayTime, endDayTime);\n\n return dTime > startTime && dTime < endTime;\n }\n\n ngOnDestroy(): void {\n // Clean up any subscriptions or timers if needed\n // Currently no cleanup required, but method is here for future optimizations\n }\n}","/*\n * Public API Surface of ngxsmk-datepicker\n */\n\nexport * from './lib/ngxsmk-datepicker';\nexport * from './lib/components/custom-select.component';\nexport * from './lib/utils/date.utils';\nexport * from './lib/utils/calendar.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|