ngxsmk-datepicker 1.3.5 → 1.3.7
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 +207 -123
- package/fesm2022/ngxsmk-datepicker.mjs +756 -266
- package/fesm2022/ngxsmk-datepicker.mjs.map +1 -1
- package/index.d.ts +149 -33
- package/package.json +11 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngxsmk-datepicker.mjs","sources":["../../../projects/ngxsmk-datepicker/src/lib/ngxsmk-datepicker.ts","../../../projects/ngxsmk-datepicker/src/public-api.ts","../../../projects/ngxsmk-datepicker/src/ngxsmk-datepicker.ts"],"sourcesContent":["import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FormsModule} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-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\">\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-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 @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 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\nexport type DateInput = Date | string | { toDate: () => Date; _isAMomentObject?: boolean; $d?: Date };\r\n\r\nexport interface DateRange {\r\n [key: string]: [DateInput, DateInput];\r\n}\r\n\r\n@Component({\r\n selector: 'ngxsmk-datepicker',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, CustomSelectComponent],\r\n template: `\r\n <div class=\"ngxsmk-datepicker-container\">\r\n @if (showRanges && rangesArray.length > 0 && mode === 'range') {\r\n <div class=\"ngxsmk-ranges-container\">\r\n <ul>\r\n @for (range of rangesArray; track range.key) {\r\n <li (click)=\"selectRange(range.value)\">{{ range.key }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n <div class=\"ngxsmk-calendar-container\">\r\n <div class=\"ngxsmk-header\">\r\n <div class=\"ngxsmk-month-year-selects\">\r\n <app-custom-select class=\"month-select\" [options]=\"monthOptions\"\r\n [(value)]=\"currentMonth\"></app-custom-select>\r\n <app-custom-select class=\"year-select\" [options]=\"yearOptions\" [(value)]=\"currentYear\"></app-custom-select>\r\n </div>\r\n <div class=\"ngxsmk-nav-buttons\">\r\n <button type=\"button\" class=\"ngxsmk-nav-button\" (click)=\"changeMonth(-1)\">\r\n <svg 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=\"M328 112L184 256l144 144\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" class=\"ngxsmk-nav-button\" (click)=\"changeMonth(1)\">\r\n <svg 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=\"M184 112l144 144-144 144\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"ngxsmk-days-grid-wrapper\">\r\n <div class=\"ngxsmk-days-grid\">\r\n @for (day of weekDays; track day) {\r\n <div class=\"ngxsmk-day-name\">{{ day }}</div>\r\n }\r\n @for (day of daysInMonth; track $index) {\r\n <div class=\"ngxsmk-day-cell\"\r\n [class.empty]=\"!day\" [class.disabled]=\"isDateDisabled(day)\" [class.today]=\"isSameDay(day, today)\"\r\n [class.selected]=\"mode === 'single' && isSameDay(day, selectedDate)\"\r\n [class.start-date]=\"mode === 'range' && isSameDay(day, startDate)\"\r\n [class.end-date]=\"mode === 'range' && isSameDay(day, endDate)\"\r\n [class.in-range]=\"mode === 'range' && isInRange(day)\"\r\n [class.preview-range]=\"isPreviewInRange(day)\"\r\n (click)=\"onDateClick(day)\" (mouseenter)=\"onDateHover(day)\">\r\n @if (day) {\r\n <div class=\"ngxsmk-day-number\">{{ day | date : 'd' }}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showTime) {\r\n <div class=\"ngxsmk-time-selection\">\r\n <span class=\"ngxsmk-time-label\">Time:</span>\r\n <app-custom-select\r\n class=\"hour-select\"\r\n [options]=\"hourOptions\"\r\n [(value)]=\"currentDisplayHour\"\r\n (valueChange)=\"onTimeChange()\"\r\n ></app-custom-select>\r\n <span class=\"ngxsmk-time-separator\">:</span>\r\n <app-custom-select\r\n class=\"minute-select\"\r\n [options]=\"minuteOptions\"\r\n [(value)]=\"currentMinute\"\r\n (valueChange)=\"onTimeChange()\"\r\n ></app-custom-select>\r\n <app-custom-select\r\n class=\"ampm-select\"\r\n [options]=\"ampmOptions\"\r\n [(value)]=\"isPm\"\r\n (valueChange)=\"onTimeChange()\"\r\n ></app-custom-select>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n :host {\r\n --datepicker-primary-color: #6d28d9; --datepicker-primary-contrast: #ffffff;\r\n --datepicker-range-background: #f5f3ff; --datepicker-background: #ffffff;\r\n --datepicker-text-color: #222428; --datepicker-subtle-text-color: #9ca3af;\r\n --datepicker-border-color: #e9e9e9; --datepicker-hover-background: #f0f0f0;\r\n }\r\n :host(.dark-theme) {\r\n --datepicker-range-background: rgba(139, 92, 246, 0.2); --datepicker-background: #1f2937;\r\n --datepicker-text-color: #d1d5db; --datepicker-subtle-text-color: #6b7280;\r\n --datepicker-border-color: #4b5563; --datepicker-hover-background: #374151;\r\n }\r\n\r\n /* --- MOBILE-FIRST STYLES (Default) --- */\r\n .ngxsmk-datepicker-container { display: flex; flex-direction: column; }\r\n .ngxsmk-calendar-container {\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n border-radius: 10px; padding: 12px; background: var(--datepicker-background);\r\n box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); /* Add shadow for mobile */\r\n width: 100%; /* Take full width on mobile */\r\n }\r\n .ngxsmk-ranges-container {\r\n width: 100%; /* Take full width on mobile */\r\n padding: 12px;\r\n border-right: none;\r\n border-bottom: 1px solid var(--datepicker-border-color); /* Add bottom border on mobile */\r\n background: var(--datepicker-hover-background); /* Highlight ranges area */\r\n border-radius: 10px 10px 0 0;\r\n }\r\n .ngxsmk-ranges-container ul {\r\n display: flex;\r\n flex-wrap: wrap; /* Allow wrapping for many ranges */\r\n justify-content: center;\r\n gap: 8px; /* Space between range buttons */\r\n list-style: none; padding: 0; margin: 0;\r\n }\r\n .ngxsmk-ranges-container li {\r\n padding: 6px 10px;\r\n margin-bottom: 0; /* Remove vertical margin from list item */\r\n font-size: 0.85rem; /* Smaller font on mobile */\r\n border: 1px solid var(--datepicker-border-color);\r\n transition: background-color 0.15s ease;\r\n }\r\n .ngxsmk-header {\r\n display: flex; justify-content: space-between; align-items: center;\r\n margin-bottom: 8px; position: relative; z-index: 2; gap: 4px;\r\n }\r\n .ngxsmk-month-year-selects { display: flex; gap: 4px; }\r\n .ngxsmk-month-year-selects app-custom-select.month-select { --custom-select-width: 100px; }\r\n .ngxsmk-month-year-selects app-custom-select.year-select { --custom-select-width: 75px; }\r\n .ngxsmk-nav-buttons { display: flex; }\r\n .ngxsmk-nav-button {\r\n padding: 6px; /* Smaller padding */\r\n }\r\n .ngxsmk-nav-button svg { width: 16px; height: 16px; /* Smaller icon */ }\r\n .ngxsmk-days-grid {\r\n display: grid; grid-template-columns: repeat(7, 1fr); text-align: center; gap: 0;\r\n }\r\n .ngxsmk-day-name {\r\n font-size: 0.75rem; /* Smaller font for day names */\r\n padding: 6px 0;\r\n }\r\n .ngxsmk-day-cell { height: 32px; /* Smaller cell height */ }\r\n .ngxsmk-day-number {\r\n width: 30px; height: 30px; /* Smaller day number circle */\r\n font-size: 0.9rem;\r\n }\r\n .ngxsmk-time-selection {\r\n display: flex;\r\n align-content: center;\r\n gap: 5px;\r\n flex-wrap: wrap;\r\n margin-top: 12px; padding-top: 8px;\r\n }\r\n .ngxsmk-time-selection app-custom-select { --custom-select-width: 55px; height: 28px; }\r\n .ngxsmk-time-selection app-custom-select.ampm-select { --custom-select-width: 65px; }\r\n .ngxsmk-time-separator { font-size: 1rem; }\r\n\r\n\r\n /* --- DESKTOP/TABLET STYLES (Min-width 600px) --- */\r\n @media (min-width: 600px) {\r\n .ngxsmk-datepicker-container { display: flex; flex-direction: row; }\r\n .ngxsmk-calendar-container {\r\n padding: 16px;\r\n box-shadow: none; /* Remove redundant shadow on desktop */\r\n width: auto;\r\n }\r\n .ngxsmk-ranges-container {\r\n width: 180px;\r\n padding: 16px;\r\n border-right: 1px solid var(--datepicker-border-color);\r\n border-bottom: none;\r\n background: var(--datepicker-background);\r\n border-radius: 10px 0 0 10px;\r\n }\r\n .ngxsmk-ranges-container ul {\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n gap: 0;\r\n }\r\n .ngxsmk-ranges-container li {\r\n padding: 10px;\r\n margin-bottom: 8px;\r\n border: none;\r\n font-size: 1rem;\r\n }\r\n .ngxsmk-header { margin-bottom: 12px; gap: 5px; }\r\n .ngxsmk-month-year-selects app-custom-select.month-select { --custom-select-width: 120px; }\r\n .ngxsmk-month-year-selects app-custom-select.year-select { --custom-select-width: 90px; }\r\n .ngxsmk-nav-button { padding: 8px; }\r\n .ngxsmk-nav-button svg { width: 18px; height: 18px; }\r\n .ngxsmk-day-name { font-size: 0.8rem; padding: 8px 0; }\r\n .ngxsmk-day-cell { height: 38px; }\r\n .ngxsmk-day-number { width: 36px; height: 36px; font-size: 1rem; }\r\n .ngxsmk-time-selection { margin-top: 16px; padding-top: 12px; }\r\n .ngxsmk-time-selection app-custom-select { --custom-select-width: 60px; height: 30px; }\r\n .ngxsmk-time-selection app-custom-select.ampm-select { --custom-select-width: 70px; }\r\n }\r\n\r\n /* Common Styles (for clarity, kept below the responsive adjustments) */\r\n .ngxsmk-nav-button:hover { background-color: var(--datepicker-hover-background); }\r\n .ngxsmk-nav-button {\r\n background: none; border: none; cursor: pointer; border-radius: 50%;\r\n display: inline-flex; align-items: center; justify-content: center; color: var(--datepicker-text-color);\r\n }\r\n .ngxsmk-day-cell {\r\n position: relative; display: flex; justify-content: center;\r\n align-items: center; cursor: pointer; border-radius: 0;\r\n }\r\n .ngxsmk-day-number {\r\n display: flex; justify-content: center;\r\n align-items: center; border-radius: 50%; color: var(--datepicker-text-color);\r\n position: relative; z-index: 1;\r\n }\r\n .ngxsmk-day-cell:not(.disabled):hover .ngxsmk-day-number {\r\n background-color: var(--datepicker-hover-background); color: var(--datepicker-primary-color);\r\n }\r\n .ngxsmk-day-cell.start-date .ngxsmk-day-number,\r\n .ngxsmk-day-cell.end-date .ngxsmk-day-number,\r\n .ngxsmk-day-cell.selected .ngxsmk-day-number {\r\n background-color: var(--datepicker-primary-color); color: var(--datepicker-primary-contrast);\r\n }\r\n .ngxsmk-day-cell.in-range, .ngxsmk-day-cell.start-date,\r\n .ngxsmk-day-cell.end-date, .ngxsmk-day-cell.preview-range {\r\n background-color: var(--datepicker-range-background);\r\n }\r\n .ngxsmk-day-cell.start-date { border-top-left-radius: 100%; border-bottom-left-radius: 100%; }\r\n .ngxsmk-day-cell.end-date { border-top-right-radius: 100%; border-bottom-right-radius: 100%; }\r\n .ngxsmk-day-cell.start-date.end-date { border-radius: 50px; }\r\n .ngxsmk-day-cell.disabled {\r\n background-color: transparent !important; color: #4b5563;\r\n cursor: not-allowed; pointer-events: none; opacity: 0.5;\r\n }\r\n .ngxsmk-day-cell.today .ngxsmk-day-number { border: 1px solid var(--datepicker-primary-color); }\r\n .ngxsmk-ranges-container li:hover { background-color: var(--datepicker-hover-background); }\r\n .ngxsmk-time-label { font-size: 0.9rem; color: var(--datepicker-subtle-text-color); margin-right: 4px; }\r\n .ngxsmk-time-separator { font-weight: 600; color: var(--datepicker-text-color); }\r\n `],\r\n})\r\nexport class NgxsmkDatepickerComponent implements OnInit, OnChanges {\r\n @Input() mode: 'single' | 'range' = 'single';\r\n @Input() isInvalidDate: (date: Date) => boolean = () => false;\r\n @Input() showRanges: boolean = true;\r\n @Input() showTime: boolean = false;\r\n @Input() minuteInterval: number = 1;\r\n @Input() value: Date | { start: Date, end: Date } | null = null;\r\n\r\n private _startAtDate: Date | null = null;\r\n @Input() set startAt(value: DateInput | null) { this._startAtDate = this._normalizeDate(value); }\r\n\r\n private _locale: string = 'en-US';\r\n @Input() set locale(value: string) { this._locale = value; }\r\n get locale(): string { return this._locale; }\r\n\r\n @Input() theme: 'light' | 'dark' = 'light';\r\n @HostBinding('class.dark-theme') get isDarkMode() { return this.theme === 'dark'; }\r\n @Output() valueChange = new EventEmitter<Date | { start: Date; end: Date }>();\r\n\r\n private _minDate: Date | null = null;\r\n @Input() set minDate(value: DateInput | null) { this._minDate = this._normalizeDate(value); }\r\n\r\n private _maxDate: Date | null = null;\r\n @Input() set maxDate(value: DateInput | null) { this._maxDate = this._normalizeDate(value); }\r\n\r\n private _ranges: { [key: string]: [Date, Date] } | null = null;\r\n @Input() set ranges(value: DateRange | null) {\r\n if (!value) {\r\n this._ranges = null;\r\n } else {\r\n this._ranges = Object.entries(value).reduce((acc, [key, dates]) => {\r\n const start = this._normalizeDate(dates[0]);\r\n const end = this._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 this.updateRangesArray();\r\n }\r\n\r\n public currentDate: Date = new Date();\r\n public daysInMonth: (Date | null)[] = [];\r\n public weekDays: string[] = [];\r\n public readonly today: Date = new Date();\r\n public selectedDate: Date | null = null;\r\n public startDate: Date | null = null;\r\n public endDate: Date | null = null;\r\n public hoveredDate: Date | null = null;\r\n public rangesArray: { key: string; value: [Date, Date] }[] = [];\r\n\r\n private _currentMonth: number = this.currentDate.getMonth();\r\n private _currentYear: number = this.currentDate.getFullYear();\r\n\r\n public monthOptions: { label: string; value: number }[] = [];\r\n public yearOptions: { label: string; value: number }[] = [];\r\n private firstDayOfWeek: number = 0;\r\n\r\n public currentHour: number = 0;\r\n public currentMinute: number = 0;\r\n public currentDisplayHour: number = 12;\r\n public isPm: boolean = false;\r\n\r\n public hourOptions: { label: string; value: number }[] = [];\r\n public minuteOptions: { label: string; value: number }[] = [];\r\n public ampmOptions: { label: string; value: boolean }[] = [\r\n {label: 'AM', value: false},\r\n {label: 'PM', value: true}\r\n ];\r\n\r\n get currentMonth(): number { return this._currentMonth; }\r\n\r\n set currentMonth(month: number) {\r\n if (this._currentMonth !== month) {\r\n this._currentMonth = month;\r\n this.currentDate.setMonth(month);\r\n this.generateCalendar();\r\n }\r\n }\r\n\r\n get currentYear(): number { return this._currentYear; }\r\n\r\n set currentYear(year: number) {\r\n if (this._currentYear !== year) {\r\n this._currentYear = year;\r\n this.currentDate.setFullYear(year);\r\n this.generateCalendar();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this._locale === 'en-US') {\r\n this._locale = navigator.language;\r\n }\r\n\r\n this.today.setHours(0, 0, 0, 0);\r\n this.generateLocaleData();\r\n this.generateTimeOptions();\r\n\r\n if (this.showTime && !this.value) {\r\n const now = new Date();\r\n this.currentHour = now.getHours();\r\n this.currentMinute = Math.floor(now.getMinutes() / this.minuteInterval) * this.minuteInterval;\r\n\r\n if (this.currentMinute === 60) {\r\n this.currentMinute = 0;\r\n this.currentHour = (this.currentHour + 1) % 24;\r\n }\r\n this.update12HourState(this.currentHour);\r\n }\r\n\r\n if (this.value) {\r\n this.initializeValue(this.value);\r\n } else if (this._startAtDate) {\r\n this.initializeValue(null);\r\n }\r\n this.generateCalendar();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['locale']) {\r\n this.generateLocaleData();\r\n this.generateCalendar();\r\n }\r\n\r\n if (changes['minuteInterval']) {\r\n this.generateTimeOptions();\r\n this.currentMinute = Math.floor(this.currentMinute / this.minuteInterval) * this.minuteInterval;\r\n this.onTimeChange();\r\n }\r\n\r\n if (changes['value'] && changes['value'].currentValue !== changes['value'].previousValue) {\r\n this.initializeValue(changes['value'].currentValue);\r\n this.generateCalendar();\r\n }\r\n\r\n if (changes['startAt']) {\r\n if (!this.value && this._startAtDate) {\r\n this.currentDate = new Date(this._startAtDate);\r\n this._currentMonth = this.currentDate.getMonth();\r\n this._currentYear = this.currentDate.getFullYear();\r\n this.generateCalendar();\r\n }\r\n }\r\n }\r\n\r\n private 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 private update12HourState(fullHour: number): void {\r\n this.isPm = fullHour >= 12;\r\n this.currentDisplayHour = fullHour % 12 || 12;\r\n }\r\n\r\n private applyCurrentTime(date: Date): Date {\r\n this.currentHour = this.get24Hour(this.currentDisplayHour, this.isPm);\r\n date.setHours(this.currentHour, this.currentMinute, 0, 0);\r\n return date;\r\n }\r\n\r\n private initializeValue(value: Date | { start: Date, end: Date } | null): void {\r\n\r\n let initialDate: Date | null = null;\r\n\r\n if (value) {\r\n if (this.mode === 'single' && value instanceof Date) {\r\n this.selectedDate = this._normalizeDate(value);\r\n initialDate = this.selectedDate;\r\n } else if (this.mode === 'range' && typeof value === 'object' && 'start' in value && 'end' in value) {\r\n this.startDate = this._normalizeDate(value.start);\r\n this.endDate = this._normalizeDate(value.end);\r\n initialDate = this.startDate;\r\n }\r\n } else {\r\n this.selectedDate = null;\r\n this.startDate = null;\r\n this.endDate = null;\r\n }\r\n\r\n const viewCenterDate = initialDate || this._startAtDate || new Date();\r\n\r\n if (viewCenterDate) {\r\n this.currentDate = new Date(viewCenterDate);\r\n this._currentMonth = viewCenterDate.getMonth();\r\n this._currentYear = viewCenterDate.getFullYear();\r\n this.currentHour = viewCenterDate.getHours();\r\n this.currentMinute = viewCenterDate.getMinutes();\r\n this.update12HourState(this.currentHour);\r\n this.currentMinute = Math.floor(this.currentMinute / this.minuteInterval) * this.minuteInterval;\r\n }\r\n }\r\n\r\n private _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);\r\n if (isNaN(d.getTime())) return null;\r\n return d;\r\n }\r\n\r\n private generateTimeOptions(): void {\r\n this.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 this.minuteOptions = [];\r\n for (let i = 0; i < 60; i += this.minuteInterval) {\r\n this.minuteOptions.push({\r\n label: i.toString().padStart(2, '0'),\r\n value: i,\r\n });\r\n }\r\n }\r\n\r\n private generateLocaleData(): void {\r\n const year = new Date().getFullYear();\r\n this.monthOptions = Array.from({length: 12}).map((_, i) => ({\r\n label: new Date(year, i, 1).toLocaleDateString(this.locale, {month: 'long'}),\r\n value: i,\r\n }));\r\n\r\n try {\r\n this.firstDayOfWeek = ((new Intl.Locale(this.locale) as any).weekInfo?.firstDay || 0) % 7;\r\n } catch (e) {\r\n this.firstDayOfWeek = 0;\r\n }\r\n\r\n const day = new Date(year, 0, 7 + this.firstDayOfWeek);\r\n this.weekDays = Array.from({length: 7}).map(() => {\r\n const weekDay = new Date(day).toLocaleDateString(this.locale, {weekday: 'short'});\r\n day.setDate(day.getDate() + 1);\r\n return weekDay;\r\n });\r\n }\r\n\r\n private updateRangesArray(): void {\r\n this.rangesArray = this._ranges ? Object.entries(this._ranges).map(([key, value]) => ({key, value})) : [];\r\n }\r\n\r\n public selectRange(range: [Date, Date]): void {\r\n this.startDate = this.applyCurrentTime(range[0]);\r\n this.endDate = this.applyCurrentTime(range[1]);\r\n\r\n if (this.startDate && this.endDate) {\r\n this.valueChange.emit({start: this.startDate as Date, end: this.endDate as Date});\r\n }\r\n\r\n this.currentDate = new Date(this.startDate);\r\n this.initializeValue({start: this.startDate, end: this.endDate});\r\n this.generateCalendar();\r\n }\r\n\r\n public isDateDisabled(date: Date | null): boolean {\r\n if (!date) return false;\r\n const dateOnly = new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n\r\n if (this._minDate) {\r\n const minDateOnly = new Date(this._minDate.getFullYear(), this._minDate.getMonth(), this._minDate.getDate());\r\n if (dateOnly < minDateOnly) return true;\r\n }\r\n if (this._maxDate) {\r\n const maxDateOnly = new Date(this._maxDate.getFullYear(), this._maxDate.getMonth(), this._maxDate.getDate());\r\n if (dateOnly > maxDateOnly) return true;\r\n }\r\n return this.isInvalidDate(date);\r\n }\r\n\r\n public onTimeChange(): void {\r\n if (this.mode === 'single' && this.selectedDate) {\r\n this.selectedDate = this.applyCurrentTime(this.selectedDate);\r\n this.valueChange.emit(this.selectedDate);\r\n } else if (this.mode === 'range' && this.startDate && this.endDate) {\r\n this.startDate = this.applyCurrentTime(this.startDate);\r\n this.endDate = this.applyCurrentTime(this.endDate);\r\n this.valueChange.emit({start: this.startDate as Date, end: this.endDate as Date});\r\n } else if (this.mode === 'range' && this.startDate && !this.endDate) {\r\n this.startDate = this.applyCurrentTime(this.startDate);\r\n }\r\n }\r\n\r\n public onDateClick(day: Date | null): void {\r\n if (!day || this.isDateDisabled(day)) return;\r\n\r\n if (this.mode === 'single') {\r\n this.selectedDate = this.applyCurrentTime(day);\r\n this.valueChange.emit(this.selectedDate);\r\n } else {\r\n if (!this.startDate || (this.startDate && this.endDate)) {\r\n this.startDate = this.applyCurrentTime(day);\r\n this.endDate = null;\r\n } else if (day >= this.startDate) {\r\n this.endDate = this.applyCurrentTime(day);\r\n this.valueChange.emit({start: this.startDate as Date, end: this.endDate as Date});\r\n } else {\r\n this.startDate = this.applyCurrentTime(day);\r\n this.endDate = null;\r\n }\r\n this.hoveredDate = null;\r\n }\r\n\r\n if (this.mode === 'single' && this.selectedDate) {\r\n this.update12HourState(this.selectedDate.getHours());\r\n this.currentMinute = this.selectedDate.getMinutes();\r\n } else if (this.mode === 'range' && this.startDate) {\r\n this.update12HourState(this.startDate.getHours());\r\n this.currentMinute = this.startDate.getMinutes();\r\n }\r\n }\r\n\r\n public onDateHover(day: Date | null): void {\r\n if (this.mode === 'range' && this.startDate && !this.endDate && day) {\r\n this.hoveredDate = day;\r\n }\r\n }\r\n\r\n public isPreviewInRange(day: Date | null): boolean {\r\n if (this.mode !== 'range' || !this.startDate || this.endDate || !this.hoveredDate || !day) return false;\r\n const start = this.startDate.getTime();\r\n const end = this.hoveredDate.getTime();\r\n const time = day.getTime();\r\n return time > Math.min(start, end) && time < Math.max(start, end);\r\n }\r\n\r\n public generateCalendar(): void {\r\n this.daysInMonth = [];\r\n const year = this.currentDate.getFullYear();\r\n const month = this.currentDate.getMonth();\r\n this._currentMonth = month;\r\n this._currentYear = year;\r\n this.generateDropdownOptions();\r\n const firstDayOfMonth = new Date(year, month, 1);\r\n const lastDayOfMonth = new Date(year, month + 1, 0);\r\n const startDayOfWeek = firstDayOfMonth.getDay();\r\n const emptyCellCount = (startDayOfWeek - this.firstDayOfWeek + 7) % 7;\r\n\r\n for (let i = 0; i < emptyCellCount; i++) {\r\n this.daysInMonth.push(null);\r\n }\r\n for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {\r\n this.daysInMonth.push(this._normalizeDate(new Date(year, month, i)));\r\n }\r\n }\r\n\r\n private generateDropdownOptions(): void {\r\n const startYear = this._currentYear - 10;\r\n const endYear = this._currentYear + 10;\r\n this.yearOptions = [];\r\n for (let i = startYear; i <= endYear; i++) {\r\n this.yearOptions.push({label: `${i}`, value: i});\r\n }\r\n }\r\n\r\n public changeMonth(delta: number): void {\r\n this.currentDate.setMonth(this.currentDate.getMonth() + delta);\r\n this.generateCalendar();\r\n }\r\n\r\n public 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\n public isInRange(d: Date | null): boolean {\r\n if (!d || !this.startDate || !this.endDate) return false;\r\n\r\n const dTime = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\r\n const startDayTime = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate()).getTime();\r\n const endDayTime = new Date(this.endDate.getFullYear(), this.endDate.getMonth(), this.endDate.getDate()).getTime();\r\n\r\n const startTime = Math.min(startDayTime, endDayTime);\r\n const endTime = Math.max(startDayTime, endDayTime);\r\n\r\n return dTime > startTime && dTime < endTime;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngxsmk-datepicker\r\n */\r\n\r\nexport * from './lib/ngxsmk-datepicker';\r\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 {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n HostListener,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n ChangeDetectionStrategy,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport {CommonModule, DatePipe} from '@angular/common';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport {\r\n getStartOfDay,\r\n addMonths,\r\n normalizeDate,\r\n DateInput,\r\n} from './utils/date.utils';\r\nimport {\r\n HolidayProvider,\r\n DateRange,\r\n DatepickerValue,\r\n generateMonthOptions,\r\n generateYearOptions,\r\n generateTimeOptions,\r\n generateWeekDays,\r\n getFirstDayOfWeek,\r\n get24Hour,\r\n update12HourState,\r\n processDateRanges,\r\n} from './utils/calendar.utils';\r\nimport { CustomSelectComponent } from './components/custom-select.component';\r\nimport { createDateComparator } from './utils/performance.utils';\r\n\r\n\r\n@Component({\r\n selector: 'ngxsmk-datepicker',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, CustomSelectComponent, DatePipe, ReactiveFormsModule],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxsmkDatepickerComponent),\r\n multi: true\r\n }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./styles/datepicker.css'],\r\n template: `\r\n <div class=\"ngxsmk-datepicker-wrapper\" [class.ngxsmk-inline-mode]=\"isInlineMode\">\r\n @if (!isInlineMode) {\r\n <div class=\"ngxsmk-input-group\" (click)=\"toggleCalendar()\" [class.disabled]=\"disabled\">\r\n <input type=\"text\" \r\n [value]=\"displayValue\" \r\n [placeholder]=\"placeholder\" \r\n readonly \r\n [disabled]=\"disabled\"\r\n class=\"ngxsmk-display-input\">\r\n <button type=\"button\" class=\"ngxsmk-clear-button\" (click)=\"clearValue($event)\" [disabled]=\"disabled\" *ngIf=\"displayValue\">\r\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>\r\n </button>\r\n </div>\r\n }\r\n\r\n @if (isCalendarVisible) {\r\n <div class=\"ngxsmk-popover-container\" [class.ngxsmk-inline-container]=\"isInlineMode\">\r\n <div class=\"ngxsmk-datepicker-container\">\r\n @if (showRanges && rangesArray.length > 0 && mode === 'range') {\r\n <div class=\"ngxsmk-ranges-container\">\r\n <ul>\r\n @for (range of rangesArray; track range.key) {\r\n <li (click)=\"selectRange(range.value)\" [class.disabled]=\"disabled\">{{ range.key }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n <div class=\"ngxsmk-calendar-container\">\r\n <div class=\"ngxsmk-header\">\r\n <div class=\"ngxsmk-month-year-selects\">\r\n <ngxsmk-custom-select class=\"month-select\" [options]=\"monthOptions\"\r\n [(value)]=\"currentMonth\" [disabled]=\"disabled\"></ngxsmk-custom-select>\r\n <ngxsmk-custom-select class=\"year-select\" [options]=\"yearOptions\" [(value)]=\"currentYear\" [disabled]=\"disabled\"></ngxsmk-custom-select>\r\n </div>\r\n <div class=\"ngxsmk-nav-buttons\">\r\n <button type=\"button\" class=\"ngxsmk-nav-button\" (click)=\"changeMonth(-1)\" [disabled]=\"disabled\">\r\n <svg 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=\"M328 112L184 256l144 144\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" class=\"ngxsmk-nav-button\" (click)=\"changeMonth(1)\" [disabled]=\"disabled\">\r\n <svg 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=\"M184 112l144 144-144 144\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"ngxsmk-days-grid-wrapper\">\r\n <div class=\"ngxsmk-days-grid\"\r\n [class.animate-forward]=\"animateForward\" \r\n [class.animate-backward]=\"animateBackward\">\r\n @for (day of weekDays; track day) {\r\n <div class=\"ngxsmk-day-name\">{{ day }}</div>\r\n }\r\n @for (day of daysInMonth; track $index) {\r\n <div class=\"ngxsmk-day-cell\"\r\n [class.empty]=\"!day\" [class.disabled]=\"isDateDisabled(day)\" \r\n [class.today]=\"isSameDay(day, today)\"\r\n [class.holiday]=\"isHoliday(day)\"\r\n [class.selected]=\"mode === 'single' && isSameDay(day, selectedDate)\"\r\n [class.multiple-selected]=\"mode === 'multiple' && isMultipleSelected(day)\"\r\n [class.start-date]=\"mode === 'range' && isSameDay(day, startDate)\"\r\n [class.end-date]=\"mode === 'range' && isSameDay(day, endDate)\"\r\n [class.in-range]=\"mode === 'range' && isInRange(day)\"\r\n [class.preview-range]=\"isPreviewInRange(day)\"\r\n (click)=\"onDateClick(day)\" (mouseenter)=\"onDateHover(day)\">\r\n @if (day) {\r\n <div class=\"ngxsmk-day-number\" [attr.title]=\"getHolidayLabel(day)\">{{ day | date : 'd' }}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showTime) {\r\n <div class=\"ngxsmk-time-selection\">\r\n <span class=\"ngxsmk-time-label\">Time:</span>\r\n <ngxsmk-custom-select\r\n class=\"hour-select\"\r\n [options]=\"hourOptions\"\r\n [(value)]=\"currentDisplayHour\"\r\n (valueChange)=\"onTimeChange()\"\r\n [disabled]=\"disabled\"\r\n ></ngxsmk-custom-select>\r\n <span class=\"ngxsmk-time-separator\">:</span>\r\n <ngxsmk-custom-select\r\n class=\"minute-select\"\r\n [options]=\"minuteOptions\"\r\n [(value)]=\"currentMinute\"\r\n (valueChange)=\"onTimeChange()\"\r\n [disabled]=\"disabled\"\r\n ></ngxsmk-custom-select>\r\n <ngxsmk-custom-select\r\n class=\"ampm-select\"\r\n [options]=\"ampmOptions\"\r\n [(value)]=\"isPm\"\r\n (valueChange)=\"onTimeChange()\"\r\n [disabled]=\"disabled\"\r\n ></ngxsmk-custom-select>\r\n </div>\r\n }\r\n \r\n <div class=\"ngxsmk-footer\" *ngIf=\"!isInlineMode\">\r\n <button type=\"button\" class=\"ngxsmk-clear-button-footer\" (click)=\"clearValue($event)\" [disabled]=\"disabled\">\r\n Clear\r\n </button>\r\n <button type=\"button\" class=\"ngxsmk-close-button\" (click)=\"isCalendarOpen = false\" [disabled]=\"disabled\">\r\n Close\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n `,\r\n})\r\nexport class NgxsmkDatepickerComponent implements OnInit, OnChanges, OnDestroy, ControlValueAccessor {\r\n @Input() mode: 'single' | 'range' | 'multiple' = 'single';\r\n @Input() isInvalidDate: (date: Date) => boolean = () => false;\r\n @Input() showRanges: boolean = true;\r\n @Input() showTime: boolean = false;\r\n @Input() minuteInterval: number = 1;\r\n \r\n // NEW: Holiday Provider Inputs\r\n @Input() holidayProvider: HolidayProvider | null = null;\r\n @Input() disableHolidays: boolean = false;\r\n \r\n // Popover/Input Mode\r\n @Input() placeholder: string = 'Select Date';\r\n @Input() inline: boolean | 'always' | 'auto' = false;\r\n public isCalendarOpen: boolean = false;\r\n\r\n public _internalValue: DatepickerValue = null;\r\n\r\n private _startAtDate: Date | null = null;\r\n @Input() set startAt(value: DateInput | null) { this._startAtDate = this._normalizeDate(value); }\r\n\r\n private _locale: string = 'en-US';\r\n @Input() set locale(value: string) { this._locale = value; }\r\n get locale(): string { return this._locale; }\r\n\r\n @Input() theme: 'light' | 'dark' = 'light';\r\n @HostBinding('class.dark-theme') get isDarkMode() { return this.theme === 'dark'; }\r\n\r\n private onChange = (_: any) => {};\r\n private onTouched = () => {};\r\n public disabled = false;\r\n @Input() set disabledState(isDisabled: boolean) { this.disabled = isDisabled; }\r\n\r\n @Output() valueChange = new EventEmitter<DatepickerValue>();\r\n @Output() action = new EventEmitter<{ type: string; payload?: any }>();\r\n\r\n private _minDate: Date | null = null;\r\n @Input() set minDate(value: DateInput | null) { this._minDate = this._normalizeDate(value); }\r\n\r\n private _maxDate: Date | null = null;\r\n @Input() set maxDate(value: DateInput | null) { this._maxDate = this._normalizeDate(value); }\r\n\r\n private _ranges: { [key: string]: [Date, Date] } | null = null;\r\n @Input() set ranges(value: DateRange | null) {\r\n this._ranges = processDateRanges(value);\r\n this.updateRangesArray();\r\n }\r\n\r\n public currentDate: Date = new Date();\r\n public daysInMonth: (Date | null)[] = [];\r\n public weekDays: string[] = [];\r\n public readonly today: Date = getStartOfDay(new Date());\r\n public selectedDate: Date | null = null;\r\n public selectedDates: Date[] = [];\r\n public startDate: Date | null = null;\r\n public endDate: Date | null = null;\r\n public hoveredDate: Date | null = null;\r\n public rangesArray: { key: string; value: [Date, Date] }[] = [];\r\n\r\n private _currentMonth: number = this.currentDate.getMonth();\r\n private _currentYear: number = this.currentDate.getFullYear();\r\n\r\n public monthOptions: { label: string; value: number }[] = [];\r\n public yearOptions: { label: string; value: number }[] = [];\r\n private firstDayOfWeek: number = 0;\r\n\r\n public currentHour: number = 0;\r\n public currentMinute: number = 0;\r\n public currentDisplayHour: number = 12;\r\n public isPm: boolean = false;\r\n\r\n public hourOptions: { label: string; value: number }[] = [];\r\n public minuteOptions: { label: string; value: number }[] = [];\r\n public ampmOptions: { label: string; value: boolean }[] = [\r\n {label: 'AM', value: false},\r\n {label: 'PM', value: true}\r\n ];\r\n\r\n // Animation state properties\r\n public animateForward: boolean = false;\r\n public animateBackward: boolean = false;\r\n \r\n private readonly elementRef: ElementRef = inject(ElementRef);\r\n private readonly dateComparator = createDateComparator();\r\n \r\n get isInlineMode(): boolean {\r\n return this.inline === true || this.inline === 'always' || \r\n (this.inline === 'auto' && typeof window !== 'undefined' && window.matchMedia('(min-width: 768px)').matches);\r\n }\r\n\r\n get isCalendarVisible(): boolean {\r\n return this.isInlineMode || this.isCalendarOpen;\r\n }\r\n \r\n get displayValue(): string {\r\n if (this.mode === 'single' && this.selectedDate) {\r\n return this.selectedDate.toLocaleString(this.locale, { \r\n year: 'numeric', month: 'short', day: '2-digit', \r\n hour: this.showTime ? '2-digit' : undefined, \r\n minute: this.showTime ? '2-digit' : undefined \r\n });\r\n } else if (this.mode === 'range' && this.startDate && this.endDate) {\r\n const start = this.startDate.toLocaleString(this.locale, { year: 'numeric', month: 'short', day: '2-digit' });\r\n const end = this.endDate.toLocaleString(this.locale, { year: 'numeric', month: 'short', day: '2-digit' });\r\n return `${start} - ${end}`;\r\n } else if (this.mode === 'multiple' && this.selectedDates.length > 0) {\r\n return `${this.selectedDates.length} dates selected`;\r\n }\r\n return '';\r\n }\r\n \r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (!this.isInlineMode && this.isCalendarOpen && !this.elementRef.nativeElement.contains(event.target)) {\r\n this.isCalendarOpen = false;\r\n }\r\n }\r\n\r\n\r\n writeValue(val: DatepickerValue): void {\r\n this._internalValue = val;\r\n this.initializeValue(val);\r\n this.generateCalendar();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n private emitValue(val: DatepickerValue) {\r\n this._internalValue = val;\r\n this.valueChange.emit(val);\r\n this.onChange(val);\r\n this.onTouched();\r\n \r\n // Auto-close popover when a selection is complete\r\n if (!this.isInlineMode && val !== null) {\r\n if (this.mode === 'single' || (this.mode === 'range' && this.startDate && this.endDate)) {\r\n this.isCalendarOpen = false;\r\n }\r\n }\r\n }\r\n \r\n public toggleCalendar(): void {\r\n if (this.disabled || this.isInlineMode) return;\r\n this.isCalendarOpen = !this.isCalendarOpen;\r\n }\r\n \r\n public clearValue(event?: MouseEvent): void {\r\n if (event) event.stopPropagation();\r\n if (this.disabled) return;\r\n \r\n this.selectedDate = null;\r\n this.selectedDates = [];\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.hoveredDate = null;\r\n this.isCalendarOpen = false;\r\n \r\n this.emitValue(null);\r\n this.action.emit({type: 'clear', payload: null});\r\n \r\n // Reset view to today after clearing\r\n this.currentDate = new Date();\r\n this._currentMonth = this.currentDate.getMonth();\r\n this._currentYear = this.currentDate.getFullYear();\r\n this.generateCalendar();\r\n }\r\n\r\n get currentMonth(): number { return this._currentMonth; }\r\n\r\n set currentMonth(month: number) {\r\n if (this.disabled) return;\r\n if (this._currentMonth !== month) {\r\n this._currentMonth = month;\r\n this.currentDate.setMonth(month);\r\n this.generateCalendar(true);\r\n }\r\n }\r\n\r\n get currentYear(): number { return this._currentYear; }\r\n\r\n set currentYear(year: number) {\r\n if (this.disabled) return;\r\n if (this._currentYear !== year) {\r\n this._currentYear = year;\r\n this.currentDate.setFullYear(year);\r\n this.generateCalendar(true);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this._locale === 'en-US' && typeof navigator !== 'undefined') {\r\n this._locale = navigator.language;\r\n }\r\n\r\n this.today.setHours(0, 0, 0, 0);\r\n this.generateLocaleData();\r\n this.generateTimeOptions();\r\n\r\n if (this.showTime && !this._internalValue) {\r\n const now = new Date();\r\n this.currentHour = now.getHours();\r\n this.currentMinute = Math.floor(now.getMinutes() / this.minuteInterval) * this.minuteInterval;\r\n\r\n if (this.currentMinute === 60) {\r\n this.currentMinute = 0;\r\n this.currentHour = (this.currentHour + 1) % 24;\r\n }\r\n this.update12HourState(this.currentHour);\r\n }\r\n\r\n if (this._internalValue) {\r\n this.initializeValue(this._internalValue);\r\n } else if (this._startAtDate) {\r\n this.initializeValue(null);\r\n }\r\n this.generateCalendar();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['locale']) {\r\n this.generateLocaleData();\r\n this.generateCalendar();\r\n }\r\n\r\n if (changes['minuteInterval']) {\r\n this.generateTimeOptions();\r\n this.currentMinute = Math.floor(this.currentMinute / this.minuteInterval) * this.minuteInterval;\r\n this.onTimeChange();\r\n }\r\n\r\n if (changes['value'] && changes['value'].currentValue !== changes['value'].previousValue) {\r\n this.writeValue(changes['value'].currentValue);\r\n }\r\n \r\n // Rerun calendar generation if provider changes to refresh disabled states\r\n if (changes['holidayProvider'] || changes['disableHolidays']) {\r\n this.generateCalendar();\r\n }\r\n\r\n if (changes['startAt']) {\r\n if (!this._internalValue && this._startAtDate) {\r\n this.currentDate = new Date(this._startAtDate);\r\n this._currentMonth = this.currentDate.getMonth();\r\n this._currentYear = this.currentDate.getFullYear();\r\n this.generateCalendar();\r\n }\r\n }\r\n }\r\n\r\n private get24Hour(displayHour: number, isPm: boolean): number {\r\n return get24Hour(displayHour, isPm);\r\n }\r\n\r\n private update12HourState(fullHour: number): void {\r\n const state = update12HourState(fullHour);\r\n this.isPm = state.isPm;\r\n this.currentDisplayHour = state.displayHour;\r\n }\r\n\r\n private applyCurrentTime(date: Date): Date {\r\n this.currentHour = this.get24Hour(this.currentDisplayHour, this.isPm);\r\n date.setHours(this.currentHour, this.currentMinute, 0, 0);\r\n return date;\r\n }\r\n\r\n private initializeValue(value: DatepickerValue): void {\r\n let initialDate: Date | null = null;\r\n\r\n this.selectedDate = null;\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.selectedDates = [];\r\n\r\n if (value) {\r\n if (this.mode === 'single' && value instanceof Date) {\r\n this.selectedDate = this._normalizeDate(value);\r\n initialDate = this.selectedDate;\r\n } else if (this.mode === 'range' && typeof value === 'object' && 'start' in value && 'end' in value) {\r\n this.startDate = this._normalizeDate((value as {start: Date, end: Date}).start);\r\n this.endDate = this._normalizeDate((value as {start: Date, end: Date}).end);\r\n initialDate = this.startDate;\r\n } else if (this.mode === 'multiple' && Array.isArray(value)) {\r\n this.selectedDates = (value as Date[]).map(d => this._normalizeDate(d)).filter((d): d is Date => d !== null);\r\n initialDate = this.selectedDates.length > 0 ? this.selectedDates[this.selectedDates.length - 1]! : null;\r\n }\r\n }\r\n\r\n const viewCenterDate = initialDate || this._startAtDate || new Date();\r\n\r\n if (viewCenterDate) {\r\n this.currentDate = new Date(viewCenterDate);\r\n this._currentMonth = viewCenterDate.getMonth();\r\n this._currentYear = viewCenterDate.getFullYear();\r\n this.currentHour = viewCenterDate.getHours();\r\n this.currentMinute = viewCenterDate.getMinutes();\r\n this.update12HourState(this.currentHour);\r\n this.currentMinute = Math.floor(this.currentMinute / this.minuteInterval) * this.minuteInterval;\r\n }\r\n }\r\n\r\n private _normalizeDate(date: DateInput | null): Date | null {\r\n return normalizeDate(date);\r\n }\r\n\r\n private generateTimeOptions(): void {\r\n const { hourOptions, minuteOptions } = generateTimeOptions(this.minuteInterval);\r\n this.hourOptions = hourOptions;\r\n this.minuteOptions = minuteOptions;\r\n }\r\n\r\n private generateLocaleData(): void {\r\n const year = new Date().getFullYear();\r\n this.monthOptions = generateMonthOptions(this.locale, year);\r\n this.firstDayOfWeek = getFirstDayOfWeek(this.locale);\r\n this.weekDays = generateWeekDays(this.locale, this.firstDayOfWeek);\r\n }\r\n\r\n private updateRangesArray(): void {\r\n this.rangesArray = this._ranges ? Object.entries(this._ranges).map(([key, value]) => ({key, value})) : [];\r\n }\r\n\r\n public selectRange(range: [Date, Date]): void {\r\n if (this.disabled) return;\r\n this.startDate = this.applyCurrentTime(range[0]);\r\n this.endDate = this.applyCurrentTime(range[1]);\r\n\r\n if (this.startDate && this.endDate) {\r\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\r\n }\r\n\r\n this.currentDate = new Date(this.startDate);\r\n this.initializeValue({start: this.startDate, end: this.endDate});\r\n this.generateCalendar();\r\n this.action.emit({type: 'rangeSelected', payload: {start: this.startDate, end: this.endDate, key: this.rangesArray.find(r => r.value === range)?.key}});\r\n }\r\n \r\n // NEW: Check if a date is a holiday\r\n public isHoliday(date: Date | null): boolean {\r\n if (!date || !this.holidayProvider) return false;\r\n const dateOnly = getStartOfDay(date);\r\n return this.holidayProvider.isHoliday(dateOnly);\r\n }\r\n \r\n // NEW: Get holiday label\r\n public getHolidayLabel(date: Date | null): string | null {\r\n if (!date || !this.holidayProvider || !this.isHoliday(date)) return null;\r\n return this.holidayProvider.getHolidayLabel ? this.holidayProvider.getHolidayLabel(getStartOfDay(date)) : 'Holiday';\r\n }\r\n\r\n public isDateDisabled(date: Date | null): boolean {\r\n if (!date) return false;\r\n\r\n const dateOnly = getStartOfDay(date);\r\n\r\n // 1. Check holiday provider for disabling\r\n if (this.holidayProvider && this.disableHolidays && this.holidayProvider.isHoliday(dateOnly)) {\r\n return true;\r\n }\r\n\r\n // 2. Check min/max date\r\n if (this._minDate) {\r\n const minDateOnly = getStartOfDay(this._minDate);\r\n if (dateOnly.getTime() < minDateOnly.getTime()) return true;\r\n }\r\n if (this._maxDate) {\r\n const maxDateOnly = getStartOfDay(this._maxDate);\r\n if (dateOnly.getTime() > maxDateOnly.getTime()) return true;\r\n }\r\n \r\n // 3. Check custom invalid date function\r\n return this.isInvalidDate(date);\r\n }\r\n\r\n public isMultipleSelected(d: Date | null): boolean {\r\n if (!d || this.mode !== 'multiple') return false;\r\n const dTime = getStartOfDay(d).getTime();\r\n return this.selectedDates.some(selected => getStartOfDay(selected).getTime() === dTime);\r\n }\r\n\r\n public onTimeChange(): void {\r\n if (this.disabled) return;\r\n if (this.mode === 'single' && this.selectedDate) {\r\n this.selectedDate = this.applyCurrentTime(this.selectedDate);\r\n this.emitValue(this.selectedDate);\r\n } else if (this.mode === 'range' && this.startDate && this.endDate) {\r\n this.startDate = this.applyCurrentTime(this.startDate);\r\n this.endDate = this.applyCurrentTime(this.endDate);\r\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\r\n } else if (this.mode === 'range' && this.startDate && !this.endDate) {\r\n this.startDate = this.applyCurrentTime(this.startDate);\r\n } else if (this.mode === 'multiple') {\r\n this.selectedDates = this.selectedDates.map(date => {\r\n const newDate = getStartOfDay(date);\r\n return this.applyCurrentTime(newDate);\r\n });\r\n this.emitValue([...this.selectedDates]);\r\n }\r\n\r\n this.action.emit({type: 'timeChanged', payload: {hour: this.currentHour, minute: this.currentMinute}});\r\n }\r\n\r\n public onDateClick(day: Date | null): void {\r\n if (!day || this.isDateDisabled(day) || this.disabled) return;\r\n\r\n const dateToToggle = getStartOfDay(day);\r\n\r\n if (this.mode === 'single') {\r\n this.selectedDate = this.applyCurrentTime(day);\r\n this.emitValue(this.selectedDate);\r\n } else if (this.mode === 'range') {\r\n if (!this.startDate || (this.startDate && this.endDate)) {\r\n this.startDate = this.applyCurrentTime(day);\r\n this.endDate = null;\r\n } else if (day >= this.startDate) {\r\n this.endDate = this.applyCurrentTime(day);\r\n this.emitValue({start: this.startDate as Date, end: this.endDate as Date});\r\n } else {\r\n this.startDate = this.applyCurrentTime(day);\r\n this.endDate = null;\r\n }\r\n this.hoveredDate = null;\r\n } else if (this.mode === 'multiple') {\r\n const existingIndex = this.selectedDates.findIndex(d => this.isSameDay(d, dateToToggle));\r\n\r\n if (existingIndex > -1) {\r\n this.selectedDates.splice(existingIndex, 1);\r\n } else {\r\n const dateWithTime = this.applyCurrentTime(dateToToggle);\r\n this.selectedDates.push(dateWithTime);\r\n this.selectedDates.sort((a, b) => a.getTime() - b.getTime());\r\n }\r\n this.emitValue([...this.selectedDates]);\r\n }\r\n\r\n const dateToSync = this.mode === 'single' ? this.selectedDate :\r\n this.mode === 'range' ? this.startDate :\r\n this.mode === 'multiple' && this.selectedDates.length > 0 ? this.selectedDates[this.selectedDates.length - 1] : null;\r\n\r\n if (dateToSync) {\r\n this.update12HourState(dateToSync.getHours());\r\n this.currentMinute = dateToSync.getMinutes();\r\n }\r\n\r\n this.action.emit({\r\n type: 'dateSelected',\r\n payload: {\r\n mode: this.mode,\r\n value: this._internalValue,\r\n date: day\r\n }\r\n });\r\n }\r\n\r\n public onDateHover(day: Date | null): void {\r\n if (this.mode === 'range' && this.startDate && !this.endDate && day) {\r\n this.hoveredDate = day;\r\n }\r\n }\r\n\r\n public isPreviewInRange(day: Date | null): boolean {\r\n if (this.mode !== 'range' || !this.startDate || this.endDate || !this.hoveredDate || !day) return false;\r\n const start = getStartOfDay(this.startDate).getTime();\r\n const end = getStartOfDay(this.hoveredDate).getTime();\r\n const time = getStartOfDay(day).getTime();\r\n return time > Math.min(start, end) && time < Math.max(start, end);\r\n }\r\n\r\n public generateCalendar(resetAnimation: boolean = true): void {\r\n this.daysInMonth = [];\r\n const year = this.currentDate.getFullYear();\r\n const month = this.currentDate.getMonth();\r\n this._currentMonth = month;\r\n this._currentYear = year;\r\n this.generateDropdownOptions();\r\n const firstDayOfMonth = new Date(year, month, 1);\r\n const lastDayOfMonth = new Date(year, month + 1, 0);\r\n const startDayOfWeek = firstDayOfMonth.getDay();\r\n const emptyCellCount = (startDayOfWeek - this.firstDayOfWeek + 7) % 7;\r\n\r\n for (let i = 0; i < emptyCellCount; i++) {\r\n this.daysInMonth.push(null);\r\n }\r\n for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {\r\n this.daysInMonth.push(this._normalizeDate(new Date(year, month, i)));\r\n }\r\n\r\n if (resetAnimation) {\r\n this.animateForward = false;\r\n this.animateBackward = false;\r\n }\r\n\r\n this.action.emit({\r\n type: 'calendarGenerated',\r\n payload: {\r\n month: month,\r\n year: year,\r\n days: this.daysInMonth.filter(d => d !== null)\r\n }\r\n });\r\n }\r\n\r\n private generateDropdownOptions(): void {\r\n this.yearOptions = generateYearOptions(this._currentYear);\r\n }\r\n\r\n public changeMonth(delta: number): void {\r\n if (this.disabled) return;\r\n\r\n // 1. Set the animation class (triggers slide-out)\r\n if (delta > 0) {\r\n this.animateForward = true;\r\n this.animateBackward = false;\r\n } else {\r\n this.animateBackward = true;\r\n this.animateForward = false;\r\n }\r\n\r\n const newDate = addMonths(this.currentDate, delta);\r\n\r\n // 2. Wait for the slide-out transition to complete (300ms)\r\n setTimeout(() => {\r\n // 3. Update the data\r\n this.currentDate = newDate;\r\n this._currentMonth = newDate.getMonth();\r\n this._currentYear = newDate.getFullYear();\r\n\r\n // Generate new calendar view but tell it *not* to reset animation flags yet.\r\n this.generateCalendar(false);\r\n\r\n // 4. Reset the animation flags to false (triggers slide-in of the new content)\r\n this.animateForward = false;\r\n this.animateBackward = false;\r\n\r\n }, 300); // Wait time should match the CSS transition duration (0.3s)\r\n\r\n this.action.emit({type: 'monthChanged', payload: { delta: delta }});\r\n }\r\n\r\n public isSameDay(d1: Date | null, d2: Date | null): boolean {\r\n return this.dateComparator(d1, d2);\r\n }\r\n\r\n public isInRange(d: Date | null): boolean {\r\n if (!d || !this.startDate || !this.endDate) return false;\r\n\r\n const dTime = getStartOfDay(d).getTime();\r\n const startDayTime = getStartOfDay(this.startDate).getTime();\r\n const endDayTime = getStartOfDay(this.endDate).getTime();\r\n\r\n const startTime = Math.min(startDayTime, endDayTime);\r\n const endTime = Math.max(startDayTime, endDayTime);\r\n\r\n return dTime > startTime && dTime < endTime;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Clean up any subscriptions or timers if needed\r\n // Currently no cleanup required, but method is here for future optimizations\r\n }\r\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":";;;;;;AAAA;;;AAGG;AAEG,SAAU,aAAa,CAAC,CAAO,EAAA;IACnC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzE;AAEM,SAAU,WAAW,CAAC,CAAO,EAAA;IACjC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC9E;AAEM,SAAU,SAAS,CAAC,CAAO,EAAE,MAAc,EAAA;AAC/C,IAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC;AACvC,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,YAAY,CAAC,CAAO,EAAE,IAAY,EAAA;AAChD,IAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACnC,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,eAAe,CAAC,CAAO,EAAA;AACrC,IAAA,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnD;AAEM,SAAU,aAAa,CAAC,CAAO,EAAA;AACnC,IAAA,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACvD;AAEM,SAAU,SAAS,CAAC,EAAe,EAAE,EAAe,EAAA;AACxD,IAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;AAAE,QAAA,OAAO,KAAK;IAC5B,QACE,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE;AACrC,QAAA,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE;QAC/B,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE;AAEjC;AAEM,SAAU,aAAa,CAAC,IAAsB,EAAA;AAClD,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AACtB,IAAA,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,IAAI,CAAE,IAAY,CAAC,MAAM,GAAI,IAAY,CAAC,MAAM,EAAE,GAAG,IAAW,CAAC;AACnI,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAAE,QAAA,OAAO,IAAI;AACnC,IAAA,OAAO,CAAC;AACV;;AC/CA;;;AAGG;AAuBH;;AAEG;AACG,SAAU,oBAAoB,CAAC,MAAc,EAAE,IAAY,EAAA;IAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;QAC7C,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC;AACvE,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC,CAAC;AACL;AAEA;;AAEG;SACa,mBAAmB,CAAC,WAAmB,EAAE,QAAgB,EAAE,EAAA;AACzE,IAAA,MAAM,SAAS,GAAG,WAAW,GAAG,KAAK;AACrC,IAAA,MAAM,OAAO,GAAG,WAAW,GAAG,KAAK;IACnC,MAAM,OAAO,GAAuC,EAAE;AAEtD,IAAA,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,OAAO,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,CAAA,EAAG,CAAC,CAAA,CAAE,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;IACzC;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,cAAA,GAAyB,CAAC,EAAA;IAI5D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;AAC1D,QAAA,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC1C,KAAK,EAAE,CAAC,GAAG,CAAC;AACb,KAAA,CAAC,CAAC;IAEH,MAAM,aAAa,GAAuC,EAAE;AAC5D,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,cAAc,EAAE;QAC3C,aAAa,CAAC,IAAI,CAAC;YACjB,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACpC,YAAA,KAAK,EAAE,CAAC;AACT,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE;AACvC;AAEA;;AAEG;SACa,gBAAgB,CAAC,MAAc,EAAE,iBAAyB,CAAC,EAAA;AACzE,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC;AACjD,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC,GAAG,CAAC,MAAK;AACtC,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC;QAC5E,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9B,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,MAAc,EAAA;AAC9C,IAAA,IAAI;AACF,QAAA,OAAO,CAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAS,CAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC;IACvE;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC;IACV;AACF;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,WAAmB,EAAE,IAAa,EAAA;IAC1D,IAAI,IAAI,EAAE;AAAE,QAAA,OAAO,WAAW,KAAK,EAAE,GAAG,EAAE,GAAG,WAAW,GAAG,EAAE;IAAE;IAC/D,OAAO,WAAW,KAAK,EAAE,GAAG,CAAC,GAAG,WAAW;AAC7C;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,QAAgB,EAAA;IAChD,OAAO;QACL,IAAI,EAAE,QAAQ,IAAI,EAAE;AACpB,QAAA,WAAW,EAAE,QAAQ,GAAG,EAAE,IAAI;KAC/B;AACH;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,MAAwB,EAAA;AACxD,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;QACzD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,GAAG;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;AACzC,QAAA,OAAO,GAAG;IACZ,CAAC,EAAE,EAAqC,CAAC;AAC3C;;MCrEa,qBAAqB,CAAA;AAvDlC,IAAA,WAAA,GAAA;QAwDW,IAAA,CAAA,OAAO,GAAoC,EAAE;QAE7C,IAAA,CAAA,QAAQ,GAAY,KAAK;AACxB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAO;QACxC,IAAA,CAAA,MAAM,GAAG,KAAK;AAEJ,QAAA,IAAA,CAAA,UAAU,GAAe,MAAM,CAAC,UAAU,CAAC;AAsB7D,IAAA;AAnBC,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IAChF;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;QAC3E,OAAO,cAAc,GAAG,cAAc,CAAC,KAAK,GAAG,EAAE;IACnD;IAEA,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;IAC5B;AAEA,IAAA,YAAY,CAAC,MAAqC,EAAA;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;8GA5BW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnDtB,CAAA;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,owCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtBS,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAoDX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAvDjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cACpB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb,CAAA;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,owCAAA,CAAA,EAAA;8BA+BQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAMD,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;ACnE5C;;;AAGG;AAEH;;AAEG;AACG,SAAU,OAAO,CACrB,EAAK,EACL,YAAiD,EAAA;AAEjD,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB;AAE9C,IAAA,QAAQ,CAAC,GAAG,IAAmB,KAAI;QACjC,MAAM,GAAG,GAAG,YAAY,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAEvE,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE;QACxB;AAEA,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;AAC1B,QAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACtB,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEA;;AAEG;AACG,SAAU,QAAQ,CACtB,IAAO,EACP,IAAY,EAAA;IAEZ,IAAI,OAAO,GAAkB,IAAI;AAEjC,IAAA,OAAO,CAAC,GAAG,IAAmB,KAAI;QAChC,IAAI,OAAO,EAAE;YACX,YAAY,CAAC,OAAO,CAAC;QACvB;AAEA,QAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC;QACf,CAAC,EAAE,IAAI,CAAC;AACV,IAAA,CAAC;AACH;AAEA;;AAEG;AACG,SAAU,QAAQ,CACtB,IAAO,EACP,KAAa,EAAA;IAEb,IAAI,UAAU,GAAY,KAAK;AAE/B,IAAA,OAAO,CAAC,GAAG,IAAmB,KAAI;QAChC,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,UAAU,GAAG,IAAI;AACjB,YAAA,MAAM,CAAC,UAAU,CAAC,OAAO,UAAU,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC;QACtD;AACF,IAAA,CAAC;AACH;AAEA;;AAEG;AACG,SAAU,YAAY,CAAgC,CAAI,EAAE,CAAI,EAAA;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AACjC,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;QACvB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;SACa,oBAAoB,GAAA;AAClC,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB;AAExC,IAAA,OAAO,CAAC,KAAkB,EAAE,KAAkB,KAAa;AACzD,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,KAAK,KAAK;AAE5C,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,KAAK,CAAC,OAAO,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,EAAE,EAAE;AACnD,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE;QACxB;QAEA,MAAM,MAAM,IACV,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;AAC3C,YAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;YACrC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CACpC;AAED,QAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACtB,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEA;;AAEG;SACa,mBAAmB,CACjC,MAAW,EACX,QAA8B,EAC9B,QAAiB,EAAA;AAEjB,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAe;IACpC,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAE9C,IAAA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE;IACxB;IAEA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,IAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACtB,IAAA,OAAO,MAAM;AACf;;MCiDa,yBAAyB,CAAA;AAnItC,IAAA,WAAA,GAAA;QAoIW,IAAA,CAAA,IAAI,GAAoC,QAAQ;AAChD,QAAA,IAAA,CAAA,aAAa,GAA4B,MAAM,KAAK;QACpD,IAAA,CAAA,UAAU,GAAY,IAAI;QAC1B,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,cAAc,GAAW,CAAC;;QAG1B,IAAA,CAAA,eAAe,GAA2B,IAAI;QAC9C,IAAA,CAAA,eAAe,GAAY,KAAK;;QAGhC,IAAA,CAAA,WAAW,GAAW,aAAa;QACnC,IAAA,CAAA,MAAM,GAAgC,KAAK;QAC7C,IAAA,CAAA,cAAc,GAAY,KAAK;QAE/B,IAAA,CAAA,cAAc,GAAoB,IAAI;QAErC,IAAA,CAAA,YAAY,GAAgB,IAAI;QAGhC,IAAA,CAAA,OAAO,GAAW,OAAO;QAIxB,IAAA,CAAA,KAAK,GAAqB,OAAO;AAGlC,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAM,KAAI,EAAE,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,EAAE,CAAC;QACrB,IAAA,CAAA,QAAQ,GAAG,KAAK;AAGb,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAmB;AACjD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAmC;QAE9D,IAAA,CAAA,QAAQ,GAAgB,IAAI;QAG5B,IAAA,CAAA,QAAQ,GAAgB,IAAI;QAG5B,IAAA,CAAA,OAAO,GAA2C,IAAI;AAMvD,QAAA,IAAA,CAAA,WAAW,GAAS,IAAI,IAAI,EAAE;QAC9B,IAAA,CAAA,WAAW,GAAoB,EAAE;QACjC,IAAA,CAAA,QAAQ,GAAa,EAAE;AACd,QAAA,IAAA,CAAA,KAAK,GAAS,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC;QAChD,IAAA,CAAA,YAAY,GAAgB,IAAI;QAChC,IAAA,CAAA,aAAa,GAAW,EAAE;QAC1B,IAAA,CAAA,SAAS,GAAgB,IAAI;QAC7B,IAAA,CAAA,OAAO,GAAgB,IAAI;QAC3B,IAAA,CAAA,WAAW,GAAgB,IAAI;QAC/B,IAAA,CAAA,WAAW,GAA2C,EAAE;AAEvD,QAAA,IAAA,CAAA,aAAa,GAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AACnD,QAAA,IAAA,CAAA,YAAY,GAAW,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAEtD,IAAA,CAAA,YAAY,GAAuC,EAAE;QACrD,IAAA,CAAA,WAAW,GAAuC,EAAE;QACnD,IAAA,CAAA,cAAc,GAAW,CAAC;QAE3B,IAAA,CAAA,WAAW,GAAW,CAAC;QACvB,IAAA,CAAA,aAAa,GAAW,CAAC;QACzB,IAAA,CAAA,kBAAkB,GAAW,EAAE;QAC/B,IAAA,CAAA,IAAI,GAAY,KAAK;QAErB,IAAA,CAAA,WAAW,GAAuC,EAAE;QACpD,IAAA,CAAA,aAAa,GAAuC,EAAE;AACtD,QAAA,IAAA,CAAA,WAAW,GAAwC;AACxD,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC;AAC3B,YAAA,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;SAC1B;;QAGM,IAAA,CAAA,cAAc,GAAY,KAAK;QAC/B,IAAA,CAAA,eAAe,GAAY,KAAK;AAEtB,QAAA,IAAA,CAAA,UAAU,GAAe,MAAM,CAAC,UAAU,CAAC;QAC3C,IAAA,CAAA,cAAc,GAAG,oBAAoB,EAAE;AAsezD,IAAA;AAtiBC,IAAA,IAAa,OAAO,CAAC,KAAuB,EAAA,EAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAGhG,IAAa,MAAM,CAAC,KAAa,EAAA,EAAI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;IAC3D,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IAG5C,IAAqC,UAAU,GAAA,EAAK,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IAKlF,IAAa,aAAa,CAAC,UAAmB,EAAA,EAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;AAM9E,IAAA,IAAa,OAAO,CAAC,KAAuB,EAAA,EAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AAG5F,IAAA,IAAa,OAAO,CAAC,KAAuB,EAAA,EAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAG5F,IAAa,MAAM,CAAC,KAAuB,EAAA;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAuCA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;aAC/C,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;IACrH;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc;IACjD;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;YAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE;gBACnD,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS;gBAC/C,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS;gBAC3C,MAAM,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG;AACrC,aAAA,CAAC;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YAClE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YAC7G,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AACzG,YAAA,OAAO,CAAA,EAAG,KAAK,CAAA,GAAA,EAAM,GAAG,EAAE;QAC5B;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,YAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,iBAAiB;QACtD;AACA,QAAA,OAAO,EAAE;IACX;AAGA,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACtG,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC7B;IACF;AAGA,IAAA,UAAU,CAAC,GAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;AAEQ,IAAA,SAAS,CAAC,GAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,IAAI,CAAC,SAAS,EAAE;;QAGhB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE;YACtC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;AACvF,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC7B;QACF;IACF;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;YAAE;AACxC,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;IAC5C;AAEO,IAAA,UAAU,CAAC,KAAkB,EAAA;AAClC,QAAA,IAAI,KAAK;YAAE,KAAK,CAAC,eAAe,EAAE;QAClC,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAE3B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;;AAGhD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAClD,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,IAAI,YAAY,KAAa,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,YAAY,CAAC,KAAa,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B;IACF;IAEA,IAAI,WAAW,KAAa,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;IAEtD,IAAI,WAAW,CAAC,IAAY,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B;IACF;IAEA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;AAChE,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ;QACnC;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,mBAAmB,EAAE;QAE1B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACzC,YAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,QAAQ,EAAE;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc;AAE7F,YAAA,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,EAAE;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE;YAChD;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1C;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;QAC3C;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5B;QACA,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,gBAAgB,EAAE;QACzB;AAEA,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE;YAC7B,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc;YAC/F,IAAI,CAAC,YAAY,EAAE;QACrB;AAEA,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE;YACxF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC;QAChD;;QAGA,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,EAAE;YAC1D,IAAI,CAAC,gBAAgB,EAAE;QAC3B;AAEA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC9C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;gBAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;gBAClD,IAAI,CAAC,gBAAgB,EAAE;YACzB;QACF;IACF;IAEQ,SAAS,CAAC,WAAmB,EAAE,IAAa,EAAA;AAClD,QAAA,OAAO,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC;IACrC;AAEQ,IAAA,iBAAiB,CAAC,QAAgB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,WAAW;IAC7C;AAEQ,IAAA,gBAAgB,CAAC,IAAU,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC;AACrE,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,eAAe,CAAC,KAAsB,EAAA;QAC5C,IAAI,WAAW,GAAgB,IAAI;AAEnC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QAEvB,IAAI,KAAK,EAAE;YACT,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI,EAAE;gBACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC9C,gBAAA,WAAW,GAAG,IAAI,CAAC,YAAY;YACjC;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;gBACnG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAE,KAAkC,CAAC,KAAK,CAAC;gBAC/E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAE,KAAkC,CAAC,GAAG,CAAC;AAC3E,gBAAA,WAAW,GAAG,IAAI,CAAC,SAAS;YAC9B;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC3D,gBAAA,IAAI,CAAC,aAAa,GAAI,KAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAgB,CAAC,KAAK,IAAI,CAAC;gBAC5G,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,IAAI;YACzG;QACF;QAEA,MAAM,cAAc,GAAG,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE;QAErE,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC;AAC3C,YAAA,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,QAAQ,EAAE;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,WAAW,EAAE;AAChD,YAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE;AAC5C,YAAA,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,UAAU,EAAE;AAChD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACxC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc;QACjG;IACF;AAEQ,IAAA,cAAc,CAAC,IAAsB,EAAA;AAC3C,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC;IAC5B;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/E,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;IACpC;IAEQ,kBAAkB,GAAA;QACxB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;IACpE;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC,CAAC,GAAG,EAAE;IAC3G;AAEO,IAAA,WAAW,CAAC,KAAmB,EAAA;QACpC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE9C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,SAAiB,EAAE,GAAG,EAAE,IAAI,CAAC,OAAe,EAAC,CAAC;QAC5E;QAEA,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,GAAG,EAAC,EAAC,CAAC;IACzJ;;AAGO,IAAA,SAAS,CAAC,IAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,KAAK;AAChD,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;QACpC,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC;IACjD;;AAGO,IAAA,eAAe,CAAC,IAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;QACxE,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS;IACrH;AAEO,IAAA,cAAc,CAAC,IAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;AAEvB,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;;AAGpC,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAC5F,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;YAChD,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,IAAI;QAC7D;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;YAChD,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,IAAI;QAC7D;;AAGA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC;AAEO,IAAA,kBAAkB,CAAC,CAAc,EAAA;AACtC,QAAA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,KAAK;QAChD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;QACxC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC;IACzF;IAEO,YAAY,GAAA;QACjB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;YAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5D,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;QACnC;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YAClE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;YACtD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;AAClD,YAAA,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,SAAiB,EAAE,GAAG,EAAE,IAAI,CAAC,OAAe,EAAC,CAAC;QAC5E;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACnE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;QACxD;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;YACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,IAAG;AACjD,gBAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;AACnC,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACvC,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC;QAEA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAC,EAAC,CAAC;IACxG;AAEO,IAAA,WAAW,CAAC,GAAgB,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEvD,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC;AAEvC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;QACnC;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;gBACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC3C,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB;AAAO,iBAAA,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACzC,gBAAA,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,SAAiB,EAAE,GAAG,EAAE,IAAI,CAAC,OAAe,EAAC,CAAC;YAC5E;iBAAO;gBACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC3C,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB;AACA,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;YACnC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAExF,YAAA,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YAC7C;iBAAO;gBACL,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACxD,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;gBACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9D;YACA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,YAAY;YAC3D,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,SAAS;AACpC,gBAAA,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;QAExH,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC7C,YAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,UAAU,EAAE;QAC9C;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,OAAO,EAAE;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,cAAc;AAC1B,gBAAA,IAAI,EAAE;AACP;AACF,SAAA,CAAC;IACJ;AAEO,IAAA,WAAW,CAAC,GAAgB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE;AACnE,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG;QACxB;IACF;AAEO,IAAA,gBAAgB,CAAC,GAAgB,EAAA;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK;QACvG,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;QACrD,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;QACrD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;QACzC,OAAO,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;IACnE;IAEO,gBAAgB,CAAC,iBAA0B,IAAI,EAAA;AACpD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,uBAAuB,EAAE;QAC9B,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAChD,QAAA,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,EAAE;AAC/C,QAAA,MAAM,cAAc,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC;AAErE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;YAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE;QAEA,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC9B;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,OAAO,EAAE;AACP,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;AAC9C;AACF,SAAA,CAAC;IACJ;IAEQ,uBAAuB,GAAA;QAC7B,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;IAC3D;AAEO,IAAA,WAAW,CAAC,KAAa,EAAA;QAC9B,IAAI,IAAI,CAAC,QAAQ;YAAE;;AAGnB,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC7B;QAEA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;;QAGlD,UAAU,CAAC,MAAK;;AAEd,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE;AACvC,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE;;AAGzC,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;AAG5B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAE9B,QAAA,CAAC,EAAE,GAAG,CAAC,CAAC;AAER,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAC,CAAC;IACrE;IAEO,SAAS,CAAC,EAAe,EAAE,EAAe,EAAA;QAC/C,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;IACpC;AAEO,IAAA,SAAS,CAAC,CAAc,EAAA;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAExD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;QACxC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;QAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;QAExD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;AAElD,QAAA,OAAO,KAAK,GAAG,SAAS,IAAI,KAAK,GAAG,OAAO;IAC7C;IAEA,WAAW,GAAA;;;IAGX;8GAxjBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,0oBA/HzB,CAAC;AACV,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAGQ,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsHT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kqQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA9HS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,oIAAY,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAgI9E,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAnIrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,mBAAmB,CAAC,aAC/E,CAAC;AACV,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE;AACR,yBAAA,CAAC,EAAA,eAAA,EACe,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAErC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsHT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kqQAAA,CAAA,EAAA;8BAGQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAMY,OAAO,EAAA,CAAA;sBAAnB;gBAGY,MAAM,EAAA,CAAA;sBAAlB;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBACoC,UAAU,EAAA,CAAA;sBAA9C,WAAW;uBAAC,kBAAkB;gBAKlB,aAAa,EAAA,CAAA;sBAAzB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBACS,MAAM,EAAA,CAAA;sBAAf;gBAGY,OAAO,EAAA,CAAA;sBAAnB;gBAGY,OAAO,EAAA,CAAA;sBAAnB;gBAGY,MAAM,EAAA,CAAA;sBAAlB;gBAqED,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AChS5C;;AAEG;;ACFH;;AAEG;;;;"}
|
package/index.d.ts
CHANGED
|
@@ -1,43 +1,113 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { OnInit, OnChanges, OnDestroy, EventEmitter, SimpleChanges } from '@angular/core';
|
|
3
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
selectOption(option: {
|
|
17
|
-
label: string;
|
|
18
|
-
value: any;
|
|
19
|
-
}): void;
|
|
20
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CustomSelectComponent, never>;
|
|
21
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CustomSelectComponent, "app-custom-select", never, { "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
22
|
-
}
|
|
5
|
+
/**
|
|
6
|
+
* Date utility functions for ngxsmk-datepicker
|
|
7
|
+
* Extracted to improve tree-shaking and reduce bundle size
|
|
8
|
+
*/
|
|
9
|
+
declare function getStartOfDay(d: Date): Date;
|
|
10
|
+
declare function getEndOfDay(d: Date): Date;
|
|
11
|
+
declare function addMonths(d: Date, months: number): Date;
|
|
12
|
+
declare function subtractDays(d: Date, days: number): Date;
|
|
13
|
+
declare function getStartOfMonth(d: Date): Date;
|
|
14
|
+
declare function getEndOfMonth(d: Date): Date;
|
|
15
|
+
declare function isSameDay(d1: Date | null, d2: Date | null): boolean;
|
|
16
|
+
declare function normalizeDate(date: DateInput | null): Date | null;
|
|
23
17
|
type DateInput = Date | string | {
|
|
24
18
|
toDate: () => Date;
|
|
25
19
|
_isAMomentObject?: boolean;
|
|
26
20
|
$d?: Date;
|
|
27
21
|
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Calendar utility functions for ngxsmk-datepicker
|
|
25
|
+
* Optimized for performance and tree-shaking
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
interface HolidayProvider {
|
|
29
|
+
/**
|
|
30
|
+
* Returns true if the given date is a holiday.
|
|
31
|
+
* The date passed will be at the start of the day (00:00:00).
|
|
32
|
+
*/
|
|
33
|
+
isHoliday(date: Date): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Optional: Returns a label or reason for the holiday.
|
|
36
|
+
*/
|
|
37
|
+
getHolidayLabel?(date: Date): string | null;
|
|
38
|
+
}
|
|
28
39
|
interface DateRange {
|
|
29
40
|
[key: string]: [DateInput, DateInput];
|
|
30
41
|
}
|
|
31
|
-
|
|
32
|
-
|
|
42
|
+
type DatepickerValue = Date | {
|
|
43
|
+
start: Date;
|
|
44
|
+
end: Date;
|
|
45
|
+
} | Date[] | null;
|
|
46
|
+
/**
|
|
47
|
+
* Generate month options for dropdown
|
|
48
|
+
*/
|
|
49
|
+
declare function generateMonthOptions(locale: string, year: number): {
|
|
50
|
+
label: string;
|
|
51
|
+
value: number;
|
|
52
|
+
}[];
|
|
53
|
+
/**
|
|
54
|
+
* Generate year options for dropdown
|
|
55
|
+
*/
|
|
56
|
+
declare function generateYearOptions(currentYear: number, range?: number): {
|
|
57
|
+
label: string;
|
|
58
|
+
value: number;
|
|
59
|
+
}[];
|
|
60
|
+
/**
|
|
61
|
+
* Generate time options for hour/minute dropdowns
|
|
62
|
+
*/
|
|
63
|
+
declare function generateTimeOptions(minuteInterval?: number): {
|
|
64
|
+
hourOptions: {
|
|
65
|
+
label: string;
|
|
66
|
+
value: number;
|
|
67
|
+
}[];
|
|
68
|
+
minuteOptions: {
|
|
69
|
+
label: string;
|
|
70
|
+
value: number;
|
|
71
|
+
}[];
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Generate week days for calendar header
|
|
75
|
+
*/
|
|
76
|
+
declare function generateWeekDays(locale: string, firstDayOfWeek?: number): string[];
|
|
77
|
+
/**
|
|
78
|
+
* Get first day of week for locale
|
|
79
|
+
*/
|
|
80
|
+
declare function getFirstDayOfWeek(locale: string): number;
|
|
81
|
+
/**
|
|
82
|
+
* Convert 12-hour to 24-hour format
|
|
83
|
+
*/
|
|
84
|
+
declare function get24Hour(displayHour: number, isPm: boolean): number;
|
|
85
|
+
/**
|
|
86
|
+
* Convert 24-hour to 12-hour format
|
|
87
|
+
*/
|
|
88
|
+
declare function update12HourState(fullHour: number): {
|
|
89
|
+
isPm: boolean;
|
|
90
|
+
displayHour: number;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Process date ranges input
|
|
94
|
+
*/
|
|
95
|
+
declare function processDateRanges(ranges: DateRange | null): {
|
|
96
|
+
[key: string]: [Date, Date];
|
|
97
|
+
} | null;
|
|
98
|
+
|
|
99
|
+
declare class NgxsmkDatepickerComponent implements OnInit, OnChanges, OnDestroy, ControlValueAccessor {
|
|
100
|
+
mode: 'single' | 'range' | 'multiple';
|
|
33
101
|
isInvalidDate: (date: Date) => boolean;
|
|
34
102
|
showRanges: boolean;
|
|
35
103
|
showTime: boolean;
|
|
36
104
|
minuteInterval: number;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
105
|
+
holidayProvider: HolidayProvider | null;
|
|
106
|
+
disableHolidays: boolean;
|
|
107
|
+
placeholder: string;
|
|
108
|
+
inline: boolean | 'always' | 'auto';
|
|
109
|
+
isCalendarOpen: boolean;
|
|
110
|
+
_internalValue: DatepickerValue;
|
|
41
111
|
private _startAtDate;
|
|
42
112
|
set startAt(value: DateInput | null);
|
|
43
113
|
private _locale;
|
|
@@ -45,9 +115,14 @@ declare class NgxsmkDatepickerComponent implements OnInit, OnChanges {
|
|
|
45
115
|
get locale(): string;
|
|
46
116
|
theme: 'light' | 'dark';
|
|
47
117
|
get isDarkMode(): boolean;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
118
|
+
private onChange;
|
|
119
|
+
private onTouched;
|
|
120
|
+
disabled: boolean;
|
|
121
|
+
set disabledState(isDisabled: boolean);
|
|
122
|
+
valueChange: EventEmitter<DatepickerValue>;
|
|
123
|
+
action: EventEmitter<{
|
|
124
|
+
type: string;
|
|
125
|
+
payload?: any;
|
|
51
126
|
}>;
|
|
52
127
|
private _minDate;
|
|
53
128
|
set minDate(value: DateInput | null);
|
|
@@ -60,6 +135,7 @@ declare class NgxsmkDatepickerComponent implements OnInit, OnChanges {
|
|
|
60
135
|
weekDays: string[];
|
|
61
136
|
readonly today: Date;
|
|
62
137
|
selectedDate: Date | null;
|
|
138
|
+
selectedDates: Date[];
|
|
63
139
|
startDate: Date | null;
|
|
64
140
|
endDate: Date | null;
|
|
65
141
|
hoveredDate: Date | null;
|
|
@@ -94,6 +170,21 @@ declare class NgxsmkDatepickerComponent implements OnInit, OnChanges {
|
|
|
94
170
|
label: string;
|
|
95
171
|
value: boolean;
|
|
96
172
|
}[];
|
|
173
|
+
animateForward: boolean;
|
|
174
|
+
animateBackward: boolean;
|
|
175
|
+
private readonly elementRef;
|
|
176
|
+
private readonly dateComparator;
|
|
177
|
+
get isInlineMode(): boolean;
|
|
178
|
+
get isCalendarVisible(): boolean;
|
|
179
|
+
get displayValue(): string;
|
|
180
|
+
onDocumentClick(event: MouseEvent): void;
|
|
181
|
+
writeValue(val: DatepickerValue): void;
|
|
182
|
+
registerOnChange(fn: any): void;
|
|
183
|
+
registerOnTouched(fn: any): void;
|
|
184
|
+
setDisabledState(isDisabled: boolean): void;
|
|
185
|
+
private emitValue;
|
|
186
|
+
toggleCalendar(): void;
|
|
187
|
+
clearValue(event?: MouseEvent): void;
|
|
97
188
|
get currentMonth(): number;
|
|
98
189
|
set currentMonth(month: number);
|
|
99
190
|
get currentYear(): number;
|
|
@@ -109,19 +200,44 @@ declare class NgxsmkDatepickerComponent implements OnInit, OnChanges {
|
|
|
109
200
|
private generateLocaleData;
|
|
110
201
|
private updateRangesArray;
|
|
111
202
|
selectRange(range: [Date, Date]): void;
|
|
203
|
+
isHoliday(date: Date | null): boolean;
|
|
204
|
+
getHolidayLabel(date: Date | null): string | null;
|
|
112
205
|
isDateDisabled(date: Date | null): boolean;
|
|
206
|
+
isMultipleSelected(d: Date | null): boolean;
|
|
113
207
|
onTimeChange(): void;
|
|
114
208
|
onDateClick(day: Date | null): void;
|
|
115
209
|
onDateHover(day: Date | null): void;
|
|
116
210
|
isPreviewInRange(day: Date | null): boolean;
|
|
117
|
-
generateCalendar(): void;
|
|
211
|
+
generateCalendar(resetAnimation?: boolean): void;
|
|
118
212
|
private generateDropdownOptions;
|
|
119
213
|
changeMonth(delta: number): void;
|
|
120
214
|
isSameDay(d1: Date | null, d2: Date | null): boolean;
|
|
121
215
|
isInRange(d: Date | null): boolean;
|
|
216
|
+
ngOnDestroy(): void;
|
|
122
217
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxsmkDatepickerComponent, never>;
|
|
123
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxsmkDatepickerComponent, "ngxsmk-datepicker", never, { "mode": { "alias": "mode"; "required": false; }; "isInvalidDate": { "alias": "isInvalidDate"; "required": false; }; "showRanges": { "alias": "showRanges"; "required": false; }; "showTime": { "alias": "showTime"; "required": false; }; "minuteInterval": { "alias": "minuteInterval"; "required": false; }; "
|
|
218
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxsmkDatepickerComponent, "ngxsmk-datepicker", never, { "mode": { "alias": "mode"; "required": false; }; "isInvalidDate": { "alias": "isInvalidDate"; "required": false; }; "showRanges": { "alias": "showRanges"; "required": false; }; "showTime": { "alias": "showTime"; "required": false; }; "minuteInterval": { "alias": "minuteInterval"; "required": false; }; "holidayProvider": { "alias": "holidayProvider"; "required": false; }; "disableHolidays": { "alias": "disableHolidays"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "startAt": { "alias": "startAt"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "disabledState": { "alias": "disabledState"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "ranges": { "alias": "ranges"; "required": false; }; }, { "valueChange": "valueChange"; "action": "action"; }, never, never, true, never>;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
declare class CustomSelectComponent {
|
|
222
|
+
options: {
|
|
223
|
+
label: string;
|
|
224
|
+
value: any;
|
|
225
|
+
}[];
|
|
226
|
+
value: any;
|
|
227
|
+
disabled: boolean;
|
|
228
|
+
valueChange: EventEmitter<any>;
|
|
229
|
+
isOpen: boolean;
|
|
230
|
+
private readonly elementRef;
|
|
231
|
+
onDocumentClick(event: MouseEvent): void;
|
|
232
|
+
get displayValue(): string;
|
|
233
|
+
toggleDropdown(): void;
|
|
234
|
+
selectOption(option: {
|
|
235
|
+
label: string;
|
|
236
|
+
value: any;
|
|
237
|
+
}): void;
|
|
238
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CustomSelectComponent, never>;
|
|
239
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CustomSelectComponent, "ngxsmk-custom-select", never, { "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
124
240
|
}
|
|
125
241
|
|
|
126
|
-
export { CustomSelectComponent, NgxsmkDatepickerComponent };
|
|
127
|
-
export type { DateInput, DateRange };
|
|
242
|
+
export { CustomSelectComponent, NgxsmkDatepickerComponent, addMonths, generateMonthOptions, generateTimeOptions, generateWeekDays, generateYearOptions, get24Hour, getEndOfDay, getEndOfMonth, getFirstDayOfWeek, getStartOfDay, getStartOfMonth, isSameDay, normalizeDate, processDateRanges, subtractDays, update12HourState };
|
|
243
|
+
export type { DateInput, DateRange, DatepickerValue, HolidayProvider };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngxsmk-datepicker",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.7",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">=17.0.0",
|
|
6
6
|
"@angular/core": ">=17.0.0",
|
|
@@ -43,12 +43,19 @@
|
|
|
43
43
|
"localization"
|
|
44
44
|
],
|
|
45
45
|
"exports": {
|
|
46
|
-
"./package.json": {
|
|
47
|
-
"default": "./package.json"
|
|
48
|
-
},
|
|
49
46
|
".": {
|
|
47
|
+
"import": "./fesm2022/ngxsmk-datepicker.mjs",
|
|
48
|
+
"require": "./fesm2020/ngxsmk-datepicker.mjs",
|
|
50
49
|
"types": "./index.d.ts",
|
|
51
50
|
"default": "./fesm2022/ngxsmk-datepicker.mjs"
|
|
51
|
+
},
|
|
52
|
+
"./package.json": {
|
|
53
|
+
"default": "./package.json"
|
|
52
54
|
}
|
|
55
|
+
},
|
|
56
|
+
"optimization": {
|
|
57
|
+
"treeShaking": true,
|
|
58
|
+
"sideEffects": false,
|
|
59
|
+
"usedExports": true
|
|
53
60
|
}
|
|
54
61
|
}
|