@brickclay/calendar 0.0.6
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.
Potentially problematic release.
This version of @brickclay/calendar might be problematic. Click here for more details.
- package/README.md +417 -0
- package/assets/calender/calender.svg +19 -0
- package/assets/calender/chevron-down.svg +10 -0
- package/assets/calender/chevron-left.svg +3 -0
- package/assets/calender/chevron-right.svg +3 -0
- package/assets/calender/chevron-up.svg +10 -0
- package/assets/calender/pagination-left-gray.svg +3 -0
- package/assets/calender/pagination-right-gray.svg +10 -0
- package/assets/calender/timer.svg +4 -0
- package/calendar/calendar.module.d.ts +21 -0
- package/calendar/components/custom-calendar/custom-calendar.component.d.ts +173 -0
- package/calendar/components/scheduled-date-picker/scheduled-date-picker.component.d.ts +78 -0
- package/calendar/components/time-picker/time-picker.component.d.ts +48 -0
- package/calendar/services/calendar-manager.service.d.ts +20 -0
- package/fesm2022/brickclay-calendar.mjs +2421 -0
- package/fesm2022/brickclay-calendar.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/calendar.component.d.ts +36 -0
- package/lib/calendar.service.d.ts +6 -0
- package/package.json +26 -0
- package/public-api.d.ts +7 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brickclay-calendar.mjs","sources":["../../../projects/calendar/src/lib/calendar.service.ts","../../../projects/calendar/src/calendar/components/time-picker/time-picker.component.ts","../../../projects/calendar/src/calendar/components/time-picker/time-picker.component.html","../../../projects/calendar/src/calendar/services/calendar-manager.service.ts","../../../projects/calendar/src/calendar/components/custom-calendar/custom-calendar.component.ts","../../../projects/calendar/src/calendar/components/custom-calendar/custom-calendar.component.html","../../../projects/calendar/src/lib/calendar.component.ts","../../../projects/calendar/src/calendar/components/scheduled-date-picker/scheduled-date-picker.component.ts","../../../projects/calendar/src/calendar/components/scheduled-date-picker/scheduled-date-picker.component.html","../../../projects/calendar/src/calendar/calendar.module.ts","../../../projects/calendar/src/public-api.ts","../../../projects/calendar/src/brickclay-calendar.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CalendarService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, AfterViewInit, QueryList, ViewChildren, ElementRef, HostListener, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-time-picker',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.css']\r\n})\r\nexport class TimePickerComponent implements OnInit, OnChanges, AfterViewInit {\r\n @Input() value: string = '1:00 AM'; // Time in format \"H:MM AM/PM\"\r\n @Input() label: string = 'Time';\r\n @Input() placeholder: string = 'Select time';\r\n @Input() position: 'left' | 'right' = 'left';\r\n @Input() pickerId: string = ''; // Unique ID for this picker\r\n @Input() closePicker: number = 0; // Close counter from parent (triggers close when changed)\r\n @Input() timeFormat: 12 | 24 = 12; // Visual mode: 12h or 24h\r\n @Input() showSeconds = false; // Whether to show/edit seconds\r\n @Output() timeChange = new EventEmitter<string>();\r\n @Output() pickerOpened = new EventEmitter<string>(); // Notify parent when opened\r\n @Output() pickerClosed = new EventEmitter<string>(); // Notify parent when closed\r\n\r\n @ViewChildren('timeScroll') timeScrollElements!: QueryList<ElementRef>;\r\n\r\n showPicker = false;\r\n currentHour = 1;\r\n currentMinute = 0;\r\n currentAMPM = 'AM';\r\n currentSecond = 0;\r\n\r\n ngOnInit() {\r\n this.parseTimeValue();\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.showPicker) {\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 100);\r\n }\r\n }\r\n\r\n parseTimeValue() {\r\n const parsed = this.parseTimeStringToComponents(this.value);\r\n this.currentHour = parsed.hour;\r\n this.currentMinute = parsed.minute;\r\n this.currentSecond = parsed.second;\r\n this.currentAMPM = parsed.ampm;\r\n }\r\n\r\n getHours(): number[] {\r\n // 12-hour: 1-12, 24-hour: 0-23\r\n if (this.timeFormat === 24) {\r\n return Array.from({ length: 24 }, (_, i) => i);\r\n }\r\n return Array.from({ length: 12 }, (_, i) => i + 1);\r\n }\r\n\r\n getMinutes(): number[] {\r\n return Array.from({ length: 60 }, (_, i) => i);\r\n }\r\n\r\n getSeconds(): number[] {\r\n return Array.from({ length: 60 }, (_, i) => i);\r\n }\r\n\r\n getAMPMOptions(): string[] {\r\n return ['AM', 'PM'];\r\n }\r\n\r\n parseTimeStringToComponents(timeStr: string): { hour: number; minute: number; second: number; ampm: string } {\r\n // Supports:\r\n // - \"H:MM AM/PM\"\r\n // - \"H:MM:SS AM/PM\"\r\n // - \"HH:MM\" (24h)\r\n // - \"HH:MM:SS\" (24h)\r\n if (!timeStr) {\r\n return {\r\n hour: this.timeFormat === 24 ? 0 : 12,\r\n minute: 0,\r\n second: 0,\r\n ampm: this.timeFormat === 24 ? '' : 'AM'\r\n };\r\n }\r\n\r\n const parts = timeStr.trim().split(' ');\r\n const timePart = parts[0] || (this.timeFormat === 24 ? '00:00' : '12:00');\r\n let ampm = (parts[1] || '').toUpperCase();\r\n\r\n const [hoursStr, minutesStr, secondsStr] = timePart.split(':');\r\n let hour = parseInt(hoursStr || (this.timeFormat === 24 ? '0' : '12'), 10);\r\n const minute = parseInt(minutesStr || '0', 10);\r\n const second = parseInt(secondsStr || '0', 10);\r\n\r\n if (this.timeFormat === 24) {\r\n // In 24-hour mode we ignore AM/PM and keep hour as 0-23\r\n return {\r\n hour: isNaN(hour) ? 0 : Math.min(Math.max(hour, 0), 23),\r\n minute: isNaN(minute) ? 0 : Math.min(Math.max(minute, 0), 59),\r\n second: isNaN(second) ? 0 : Math.min(Math.max(second, 0), 59),\r\n ampm: ''\r\n };\r\n }\r\n\r\n // 12-hour mode: normalize AM/PM and convert 24h inputs if needed\r\n let ampmValue = ampm === 'PM' || ampm === 'AM' ? ampm : '';\r\n if (!ampmValue) {\r\n // No AM/PM provided -> interpret as 24-hour and convert to 12-hour with AM/PM\r\n if (hour >= 12) {\r\n ampmValue = 'PM';\r\n if (hour > 12) hour -= 12;\r\n } else {\r\n ampmValue = 'AM';\r\n if (hour === 0) hour = 12;\r\n }\r\n }\r\n\r\n // Clamp to 1-12 range\r\n if (hour < 1) hour = 1;\r\n if (hour > 12) hour = 12;\r\n\r\n return {\r\n hour,\r\n minute: isNaN(minute) ? 0 : Math.min(Math.max(minute, 0), 59),\r\n second: isNaN(second) ? 0 : Math.min(Math.max(second, 0), 59),\r\n ampm: ampmValue\r\n };\r\n }\r\n\r\n formatTimeFromComponents(hour: number, minute: number, second: number, ampm: string): string {\r\n const hStr = hour.toString().padStart(2, '0');\r\n const minuteStr = minute.toString().padStart(2, '0');\r\n const secondStr = second.toString().padStart(2, '0');\r\n\r\n if (this.timeFormat === 24) {\r\n // \"HH:mm\" or \"HH:mm:ss\"\r\n return this.showSeconds\r\n ? `${hStr}:${minuteStr}:${secondStr}`\r\n : `${hStr}:${minuteStr}`;\r\n }\r\n\r\n // 12-hour: \"H:MM\" or \"H:MM:SS\" with AM/PM\r\n const displayHour = hour; // already 1-12\r\n return this.showSeconds\r\n ? `${displayHour}:${minuteStr}:${secondStr} ${ampm}`\r\n : `${displayHour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n togglePicker() {\r\n if (!this.showPicker) {\r\n this.showPicker = true;\r\n this.parseTimeValue();\r\n this.pickerOpened.emit(this.pickerId);\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 100);\r\n } else {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n }\r\n }\r\n\r\n onHourChange(hour: number) {\r\n this.currentHour = hour;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onMinuteChange(minute: number) {\r\n this.currentMinute = minute;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onSecondChange(second: number) {\r\n this.currentSecond = second;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onAMPMChange(ampm: string) {\r\n this.currentAMPM = ampm;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n updateTime() {\r\n const newTime = this.formatTimeFromComponents(\r\n this.currentHour,\r\n this.currentMinute,\r\n this.currentSecond,\r\n this.currentAMPM\r\n );\r\n this.value = newTime;\r\n this.timeChange.emit(newTime);\r\n }\r\n\r\n scrollToSelectedTimes() {\r\n this.timeScrollElements.forEach((elementRef) => {\r\n const element = elementRef.nativeElement;\r\n const selectedItem = element.querySelector('.time-item.selected');\r\n if (selectedItem) {\r\n const scrollTop = selectedItem.offsetTop - element.offsetHeight / 40 + selectedItem.offsetHeight / 40;\r\n element.scrollTop = scrollTop;\r\n }\r\n });\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.time-picker-wrapper') && this.showPicker) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n }\r\n }\r\n\r\n private previousCloseCounter: number = 0;\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['value'] && changes['value'].currentValue) {\r\n this.parseTimeValue();\r\n }\r\n if (changes['closePicker'] && this.showPicker) {\r\n const newCounter = changes['closePicker'].currentValue;\r\n // If counter increased, close the picker\r\n if (newCounter > this.previousCloseCounter) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n this.previousCloseCounter = newCounter;\r\n }\r\n }\r\n }\r\n\r\n // Basic keyboard support on the input (combobox behavior)\r\n onInputKeydown(event: KeyboardEvent) {\r\n const key = event.key;\r\n\r\n if (key === 'Enter' || key === ' ') {\r\n event.preventDefault();\r\n this.togglePicker();\r\n return;\r\n }\r\n\r\n if (key === 'Escape' && this.showPicker) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n return;\r\n }\r\n\r\n // Simple hour increment/decrement when closed\r\n if (!this.showPicker && (key === 'ArrowUp' || key === 'ArrowDown')) {\r\n event.preventDefault();\r\n if (this.timeFormat === 24) {\r\n if (key === 'ArrowUp') {\r\n this.currentHour = (this.currentHour + 1) % 24;\r\n } else {\r\n this.currentHour = this.currentHour <= 0 ? 23 : this.currentHour - 1;\r\n }\r\n } else {\r\n if (key === 'ArrowUp') {\r\n this.currentHour = this.currentHour >= 12 ? 1 : this.currentHour + 1;\r\n } else {\r\n this.currentHour = this.currentHour <= 1 ? 12 : this.currentHour - 1;\r\n }\r\n }\r\n this.updateTime();\r\n }\r\n }\r\n}\r\n\r\n","<div class=\"time-picker-wrapper\">\r\n <div class=\"time-input-group\">\r\n <label *ngIf=\"label\">{{ label }}</label>\r\n <div class=\"time-input-wrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"time-input\"\r\n [value]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n readonly\r\n (click)=\"togglePicker()\">\r\n <span class=\"time-icon\">\r\n <img src=\"assets/calender/timer.svg\" alt=\"timer\" class=\"timer-icon\">\r\n </span>\r\n <div class=\"custom-time-picker-dropdown\" *ngIf=\"showPicker\">\r\n <div class=\"custom-time-picker\" [ngClass]=\"position === 'left' ? 'left-position' : 'right-position'\">\r\n <!-- Hours Column -->\r\n <div class=\"time-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let h of getHours()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentHour === h\"\r\n (click)=\"onHourChange(h)\">\r\n {{ h.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <!-- Minutes Column -->\r\n <div class=\"time-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let m of getMinutes()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentMinute === m\"\r\n (click)=\"onMinuteChange(m)\">\r\n {{ m.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <!-- AM/PM Column -->\r\n <div class=\"time-column ampm-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let ap of getAMPMOptions()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentAMPM === ap\"\r\n (click)=\"onAMPMChange(ap)\">\r\n {{ ap }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CalendarManagerService {\r\n private calendarInstances: Set<() => void> = new Set();\r\n private closeAllSubject = new Subject<void>();\r\n \r\n closeAll$ = this.closeAllSubject.asObservable();\r\n\r\n /**\r\n * Register a calendar instance with its close function\r\n */\r\n register(closeFn: () => void): () => void {\r\n this.calendarInstances.add(closeFn);\r\n \r\n // Return unregister function\r\n return () => {\r\n this.calendarInstances.delete(closeFn);\r\n };\r\n }\r\n\r\n /**\r\n * Close all calendars except the one being opened\r\n */\r\n closeAllExcept(exceptCloseFn: () => void): void {\r\n this.calendarInstances.forEach(closeFn => {\r\n if (closeFn !== exceptCloseFn) {\r\n closeFn();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Close all calendars\r\n */\r\n closeAll(): void {\r\n this.closeAllSubject.next();\r\n this.calendarInstances.forEach(closeFn => closeFn());\r\n }\r\n}\r\n\r\n\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, HostListener, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CalendarManagerService } from '../../services/calendar-manager.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { TimePickerComponent } from '../time-picker/time-picker.component';\r\nimport moment from 'moment';\r\n\r\nexport interface CalendarRange {\r\n start: Date;\r\n end: Date;\r\n}\r\n\r\nexport interface CalendarSelection {\r\n startDate: Date | null;\r\n endDate: Date | null;\r\n selectedDates?: Date[]; // For multi-date selection\r\n}\r\n\r\n@Component({\r\n selector: 'app-custom-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, TimePickerComponent],\r\n templateUrl: './custom-calendar.component.html',\r\n styleUrls: ['./custom-calendar.component.css']\r\n})\r\nexport class CustomCalendarComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n // Basic Options\r\n @Input() enableTimepicker = false;\r\n @Input() autoApply = false;\r\n @Input() closeOnAutoApply = false;\r\n @Input() showCancel = true;\r\n @Input() linkedCalendars = false;\r\n @Input() singleDatePicker = false;\r\n @Input() showWeekNumbers = false;\r\n @Input() showISOWeekNumbers = false;\r\n @Input() customRangeDirection = false;\r\n @Input() lockStartDate = false;\r\n @Input() position: 'center' | 'left' | 'right' = 'left';\r\n @Input() drop: 'up' | 'down' = 'down';\r\n @Input() dualCalendar = false;\r\n @Input() showRanges = true;\r\n @Input() timeFormat: 12 | 24 = 24;\r\n @Input() enableSeconds = false;\r\n @Input() customRanges?: Record<string, CalendarRange>;\r\n @Input() multiDateSelection = false; // NEW: Enable multi-date selection\r\n @Input() maxDate?: Date; // NEW: Maximum selectable date\r\n @Input() minDate?: Date; // NEW: Minimum selectable date\r\n @Input() placeholder = 'Select date range'; // NEW: Custom placeholder\r\n @Input() opens: 'left' | 'right' | 'center' = 'left'; // NEW: Popup position\r\n @Input() inline = false; // NEW: Always show calendar inline (no popup)\r\n @Input() isDisplayCrossIcon = true; // NEW: Show/Hide clear (X) icon\r\n\r\n @Output() selected = new EventEmitter<CalendarSelection>();\r\n @Output() opened = new EventEmitter<void>();\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /**\r\n * External value passed from parent. If provided, component will select these dates on init / change.\r\n * Accepts { startDate: Date|null, endDate: Date|null, selectedDates?: Date[] }\r\n */\r\n @Input() selectedValue: CalendarSelection | null = null;\r\n /** Optional display format for the input value. Uses moment formatting tokens. */\r\n @Input() displayFormat = 'MM/DD/YYYY';\r\n\r\n show = false;\r\n today = new Date();\r\n month = this.today.getMonth();\r\n year = this.today.getFullYear();\r\n calendar: { day: number, currentMonth: boolean }[][] = [];\r\n leftMonth!: number;\r\n leftYear!: number;\r\n rightMonth!: number;\r\n rightYear!: number;\r\n leftCalendar: { day: number, currentMonth: boolean }[][] = [];\r\n rightCalendar: { day: number, currentMonth: boolean }[][] = [];\r\n startDate: Date | null = null;\r\n endDate: Date | null = null;\r\n selectedDates: Date[] = []; // NEW: For multi-date selection\r\n disableHighlight = false;\r\n hoveredDate: Date | null = null; // For hover preview\r\n\r\n // Track raw input values for minutes to allow free typing\r\n minuteInputValues: { [key: string]: string } = {};\r\n\r\n // Time picker for single calendar (12-hour format: 1-12)\r\n selectedHour = 1;\r\n selectedMinute = 0;\r\n selectedSecond = 0;\r\n selectedAMPM: 'AM' | 'PM' = 'AM';\r\n\r\n // NEW: Separate time pickers for dual calendar (12-hour format: 1-12)\r\n startHour = 1;\r\n startMinute = 0;\r\n startSecond = 0;\r\n startAMPM: 'AM' | 'PM' = 'AM';\r\n endHour = 2;\r\n endMinute = 0;\r\n endSecond = 0;\r\n endAMPM: 'AM' | 'PM' = 'AM';\r\n\r\n // Track open time-picker within this calendar (for single-open behavior)\r\n openTimePickerId: string | null = null;\r\n closePickerCounter: { [key: string]: number } = {};\r\n\r\n defaultRanges: Record<string, CalendarRange> = {};\r\n activeRange: string | null = null; // Track which range is currently active\r\n rangeOrder: string[] = []; // Maintain order of ranges\r\n\r\n private unregisterFn?: () => void;\r\n private closeAllSubscription?: Subscription;\r\n private closeFn?: () => void;\r\n\r\n constructor(private calendarManager: CalendarManagerService) {}\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n // Don't handle click outside if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n const target = event.target as HTMLElement;\r\n if (this.show && !target.closest('.calendar-container')) {\r\n this.close();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.customRanges) {\r\n this.initializeDefaultRanges();\r\n } else {\r\n // If customRanges is provided via @Input, set the order based on the keys\r\n // Maintain the desired order if keys match, otherwise use provided order\r\n const desiredOrder = ['Today', 'Yesterday', 'Last 7 Days', 'Last 30 Days', 'This Month', 'Last Month', 'Custom Range'];\r\n const providedKeys = Object.keys(this.customRanges);\r\n // Check if Custom Range exists, if not add it\r\n if (!this.customRanges['Custom Range']) {\r\n this.customRanges['Custom Range'] = { start: new Date(), end: new Date() };\r\n }\r\n // Build order: first add desired order items that exist, then add any remaining\r\n this.rangeOrder = desiredOrder.filter(key => providedKeys.includes(key) || key === 'Custom Range');\r\n const remaining = providedKeys.filter(key => !this.rangeOrder.includes(key));\r\n this.rangeOrder = [...this.rangeOrder, ...remaining];\r\n }\r\n if (this.dualCalendar) this.initializeDual();\r\n else this.generateCalendar();\r\n\r\n // Initialize time from existing dates if available\r\n if (this.startDate) {\r\n this.initializeTimeFromDate(this.startDate, true);\r\n }\r\n if (this.endDate) {\r\n this.initializeTimeFromDate(this.endDate, false);\r\n }\r\n\r\n // Check if current dates match any predefined range\r\n if (this.startDate && this.endDate) {\r\n this.checkAndSetActiveRange();\r\n }\r\n\r\n // If inline mode, always show calendar\r\n if (this.inline) {\r\n this.show = true;\r\n }\r\n\r\n // Register this calendar instance with the manager service\r\n this.closeFn = () => {\r\n if (this.show && !this.inline) {\r\n this.close();\r\n }\r\n };\r\n this.unregisterFn = this.calendarManager.register(this.closeFn);\r\n\r\n // Subscribe to close all events (skip if inline)\r\n this.closeAllSubscription = this.calendarManager.closeAll$.subscribe(() => {\r\n if (this.show && !this.inline) {\r\n this.close();\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['selectedValue'] && this.selectedValue) {\r\n // Normalize incoming values to Date or null\r\n const s = this.selectedValue;\r\n this.startDate = s.startDate ? new Date(s.startDate) : null;\r\n this.endDate = s.endDate ? new Date(s.endDate) : null;\r\n this.selectedDates = (s.selectedDates || []).map((d) => new Date(d));\r\n\r\n // Update calendar month/year to show the start date (or end date if start missing)\r\n const focusDate = this.startDate ?? this.endDate ?? new Date();\r\n this.month = focusDate.getMonth();\r\n this.year = focusDate.getFullYear();\r\n if (this.dualCalendar) {\r\n this.initializeDual();\r\n } else {\r\n this.generateCalendar();\r\n }\r\n\r\n // Re-evaluate active range if any\r\n this.checkAndSetActiveRange();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // Unregister this calendar instance\r\n if (this.unregisterFn) {\r\n this.unregisterFn();\r\n }\r\n\r\n // Unsubscribe from close all events\r\n if (this.closeAllSubscription) {\r\n this.closeAllSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n checkAndSetActiveRange() {\r\n if (!this.customRanges || !this.startDate || !this.endDate) return;\r\n\r\n // Normalize dates for comparison (ignore time)\r\n const normalizeDate = (date: Date) => {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n };\r\n\r\n const start = normalizeDate(this.startDate);\r\n const end = normalizeDate(this.endDate);\r\n\r\n // Check each range (except Custom Range)\r\n for (const key of this.rangeOrder) {\r\n if (key === 'Custom Range') continue;\r\n const range = this.customRanges![key];\r\n if (range) {\r\n const rangeStart = normalizeDate(range.start);\r\n const rangeEnd = normalizeDate(range.end);\r\n if (start.getTime() === rangeStart.getTime() && end.getTime() === rangeEnd.getTime()) {\r\n this.activeRange = key;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // If no match found, it's a custom range\r\n this.activeRange = 'Custom Range';\r\n }\r\n\r\n initializeDefaultRanges() {\r\n const today = new Date();\r\n this.customRanges = {\r\n 'Today': { start: new Date(today.getFullYear(), today.getMonth(), today.getDate()), end: new Date(today.getFullYear(), today.getMonth(), today.getDate()) },\r\n 'Yesterday': { start: this.addDays(today, -1), end: this.addDays(today, -1) },\r\n 'Last 7 Days': { start: this.addDays(today, -6), end: today },\r\n 'Last 30 Days': { start: this.addDays(today, -29), end: today },\r\n 'This Month': { start: new Date(today.getFullYear(), today.getMonth(), 1), end: today },\r\n 'Last Month': { start: new Date(today.getFullYear(), today.getMonth() - 1, 1), end: new Date(today.getFullYear(), today.getMonth(), 0) },\r\n 'Custom Range': { start: new Date(), end: new Date() }, // Placeholder, won't be used for selection\r\n };\r\n // Set the order of ranges\r\n this.rangeOrder = ['Today', 'Yesterday', 'Last 7 Days', 'Last 30 Days', 'This Month', 'Last Month', 'Custom Range'];\r\n }\r\n\r\n initializeTimeFromDate(date: Date, isStart: boolean) {\r\n // Always use 12-hour format\r\n const hours24 = date.getHours();\r\n const minutes = date.getMinutes();\r\n const seconds = date.getSeconds();\r\n\r\n if (isStart) {\r\n this.startMinute = minutes;\r\n this.startSecond = seconds;\r\n if (hours24 >= 12) {\r\n this.startAMPM = 'PM';\r\n this.startHour = hours24 > 12 ? hours24 - 12 : 12;\r\n } else {\r\n this.startAMPM = 'AM';\r\n this.startHour = hours24 === 0 ? 12 : hours24;\r\n }\r\n } else {\r\n this.endMinute = minutes;\r\n this.endSecond = seconds;\r\n if (hours24 >= 12) {\r\n this.endAMPM = 'PM';\r\n this.endHour = hours24 > 12 ? hours24 - 12 : 12;\r\n } else {\r\n this.endAMPM = 'AM';\r\n this.endHour = hours24 === 0 ? 12 : hours24;\r\n }\r\n }\r\n }\r\n\r\n toggle() {\r\n // Don't toggle if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n const wasOpen = this.show;\r\n this.show = !this.show;\r\n\r\n if (this.show) {\r\n // If opening, close all other calendars first\r\n if (!wasOpen && this.closeFn) {\r\n this.calendarManager.closeAllExcept(this.closeFn);\r\n }\r\n this.disableHighlight = false;\r\n this.opened.emit();\r\n } else {\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n close() {\r\n // Don't close if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n this.show = false;\r\n this.closed.emit();\r\n }\r\n\r\n onDateHover(day: number | null, fromRight = false) {\r\n if (!day || this.singleDatePicker || this.multiDateSelection) {\r\n this.hoveredDate = null;\r\n return;\r\n }\r\n\r\n // Only show hover preview if start date is selected but end date is not\r\n if (!this.startDate || this.endDate) {\r\n this.hoveredDate = null;\r\n return;\r\n }\r\n\r\n if (!this.dualCalendar) {\r\n this.hoveredDate = new Date(this.year, this.month, day);\r\n } else {\r\n this.hoveredDate = fromRight\r\n ? new Date(this.rightYear, this.rightMonth, day)\r\n : new Date(this.leftYear, this.leftMonth, day);\r\n }\r\n }\r\n\r\n onDateLeave() {\r\n this.hoveredDate = null;\r\n }\r\n\r\n selectDate(day: number | null, fromRight = false) {\r\n if (!day) return;\r\n\r\n let selected: Date;\r\n if (!this.dualCalendar) {\r\n selected = new Date(this.year, this.month, day);\r\n } else {\r\n selected = fromRight\r\n ? new Date(this.rightYear, this.rightMonth, day)\r\n : new Date(this.leftYear, this.leftMonth, day);\r\n }\r\n\r\n // Clear hover on selection\r\n this.hoveredDate = null;\r\n\r\n // Check min/max date constraints\r\n if (this.minDate && selected < this.minDate) return;\r\n if (this.maxDate && selected > this.maxDate) return;\r\n\r\n // Multi-date selection mode\r\n if (this.multiDateSelection) {\r\n this.handleMultiDateSelection(selected);\r\n return;\r\n }\r\n\r\n // Apply time if timepicker is enabled (convert 12-hour to 24-hour)\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n // For dual calendar, use separate start/end times\r\n // If no startDate OR endDate exists, we're selecting start date\r\n const isStart = !this.startDate || !!this.endDate;\r\n this.applyTimeToDate(selected, isStart);\r\n } else {\r\n // For single calendar, always use selected time for start\r\n this.applyTimeToDate(selected, true);\r\n }\r\n }\r\n\r\n // Single date picker mode\r\n if (this.singleDatePicker) {\r\n this.startDate = selected;\r\n this.endDate = null;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Apply time immediately if timepicker is enabled\r\n if (this.enableTimepicker) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.autoApply) {\r\n this.apply();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n } else {\r\n // Always emit selection event even if autoApply is false (especially for inline calendars)\r\n this.emitSelection();\r\n }\r\n return;\r\n }\r\n\r\n // Range selection mode\r\n if (!this.startDate || this.endDate) {\r\n this.startDate = selected;\r\n this.endDate = null;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Keep left calendar on the selected month for better UX\r\n if (this.dualCalendar) {\r\n this.leftMonth = selected.getMonth();\r\n this.leftYear = selected.getFullYear();\r\n // Reset right calendar to original position (next month after left) when end date is cleared\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n this.generateDualCalendars();\r\n }\r\n // Don't overwrite time picker values - keep current values and apply them to the date\r\n // Time picker values are already set by user, we just apply them to the selected date\r\n } else {\r\n if (selected < this.startDate && !this.customRangeDirection) {\r\n this.endDate = this.startDate;\r\n this.startDate = selected;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Swap times if needed\r\n if (this.dualCalendar && this.enableTimepicker) {\r\n [this.startHour, this.endHour] = [this.endHour, this.startHour];\r\n [this.startMinute, this.endMinute] = [this.endMinute, this.startMinute];\r\n [this.startSecond, this.endSecond] = [this.endSecond, this.startSecond];\r\n [this.startAMPM, this.endAMPM] = [this.endAMPM, this.startAMPM];\r\n }\r\n // Keep left calendar on the selected month\r\n if (this.dualCalendar) {\r\n this.leftMonth = selected.getMonth();\r\n this.leftYear = selected.getFullYear();\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n } else {\r\n this.endDate = selected;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Only move right calendar if end date is in a different month than start date\r\n if (this.dualCalendar) {\r\n if (this.startDate) {\r\n const startMonth = this.startDate.getMonth();\r\n const startYear = this.startDate.getFullYear();\r\n const endMonth = selected.getMonth();\r\n const endYear = selected.getFullYear();\r\n\r\n // Only move right calendar if end date is in a different month\r\n if (endMonth !== startMonth || endYear !== startYear) {\r\n this.rightMonth = endMonth;\r\n this.rightYear = endYear;\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n // If both dates are in same month, keep right calendar in its current position\r\n } else {\r\n // If no start date, move right calendar to end date month\r\n this.rightMonth = selected.getMonth();\r\n this.rightYear = selected.getFullYear();\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n }\r\n // Don't overwrite time picker values - keep current end time values\r\n // Time picker values are already set by user\r\n }\r\n if (this.autoApply) {\r\n this.apply();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n } else {\r\n // Check if the selection matches a predefined range\r\n this.checkAndSetActiveRange();\r\n // Always emit selection event for inline calendars\r\n if (this.inline) {\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleMultiDateSelection(selected: Date) {\r\n const dateStr = this.getDateString(selected);\r\n const existingIndex = this.selectedDates.findIndex(d => this.getDateString(d) === dateStr);\r\n\r\n if (existingIndex >= 0) {\r\n // Deselect if already selected\r\n this.selectedDates.splice(existingIndex, 1);\r\n } else {\r\n // Add to selection\r\n this.selectedDates.push(new Date(selected));\r\n this.selectedDates.sort((a, b) => a.getTime() - b.getTime());\r\n }\r\n\r\n // Update startDate and endDate for compatibility\r\n if (this.selectedDates.length > 0) {\r\n this.startDate = new Date(this.selectedDates[0]);\r\n this.endDate = new Date(this.selectedDates[this.selectedDates.length - 1]);\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n } else {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.activeRange = null;\r\n }\r\n\r\n // Always emit selection event for inline calendars or when autoApply is true\r\n if (this.autoApply || this.inline) {\r\n this.emitSelection();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n }\r\n }\r\n\r\n getDateString(date: Date): string {\r\n return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\r\n }\r\n\r\n isDateInMultiSelection(year: number, month: number, day: number): boolean {\r\n if (!this.multiDateSelection || this.selectedDates.length === 0) return false;\r\n const cellDate = new Date(year, month, day);\r\n return this.selectedDates.some(d => this.getDateString(d) === this.getDateString(cellDate));\r\n }\r\n\r\n apply() {\r\n // Format minute inputs to 2 digits before applying\r\n this.formatAllMinuteInputs();\r\n\r\n // Apply time to dates\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n // Dual calendar with separate start/end times (always 12-hour format)\r\n if (this.startDate) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.endDate) {\r\n this.applyTimeToDate(this.endDate, false);\r\n }\r\n } else {\r\n // Single calendar with time (always 12-hour format)\r\n if (this.startDate) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.endDate && !this.singleDatePicker) {\r\n this.applyTimeToDate(this.endDate, true);\r\n }\r\n }\r\n }\r\n\r\n // Check if the selection matches a predefined range\r\n this.checkAndSetActiveRange();\r\n\r\n this.emitSelection();\r\n this.disableHighlight = true;\r\n this.close();\r\n }\r\n\r\n cancel() {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.selectedDates = [];\r\n this.close();\r\n }\r\n\r\n clear() {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.selectedDates = [];\r\n this.activeRange = null; // Clear active range\r\n\r\n // Reset right calendar to original position (next month after left) when end date is cleared\r\n if (this.dualCalendar && !this.endDate) {\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n this.generateDualCalendars();\r\n }\r\n\r\n this.emitSelection();\r\n }\r\n\r\n chooseRange(key: string) {\r\n if (!this.customRanges) return;\r\n // Don't allow selecting \"Custom Range\" directly - it's only activated when manually selecting dates\r\n if (key === 'Custom Range') return;\r\n const r = this.customRanges[key];\r\n if (!r) return;\r\n this.startDate = new Date(r.start);\r\n this.endDate = new Date(r.end);\r\n this.selectedDates = [];\r\n this.activeRange = key; // Set active range\r\n\r\n // Navigate calendars to show the selected date range\r\n if (this.dualCalendar) {\r\n // For dual calendar: left always shows start date month\r\n if (this.startDate) {\r\n this.leftMonth = this.startDate.getMonth();\r\n this.leftYear = this.startDate.getFullYear();\r\n }\r\n\r\n // Right calendar logic\r\n if (this.endDate && this.startDate) {\r\n const startMonth = this.startDate.getMonth();\r\n const startYear = this.startDate.getFullYear();\r\n const endMonth = this.endDate.getMonth();\r\n const endYear = this.endDate.getFullYear();\r\n\r\n // Only move right calendar if end date is in a different month than start date\r\n if (endMonth !== startMonth || endYear !== startYear) {\r\n this.rightMonth = endMonth;\r\n this.rightYear = endYear;\r\n } else {\r\n // If both dates are in same month, reset right calendar to default position (next month after left)\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n }\r\n } else if (this.endDate && !this.startDate) {\r\n // If only end date exists, show it in right calendar\r\n this.rightMonth = this.endDate.getMonth();\r\n this.rightYear = this.endDate.getFullYear();\r\n } else {\r\n // If no end date, reset right calendar to default position\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n }\r\n\r\n this.generateDualCalendars();\r\n } else {\r\n // For single calendar: show the start date month (or end date if only end date exists)\r\n if (this.startDate) {\r\n this.month = this.startDate.getMonth();\r\n this.year = this.startDate.getFullYear();\r\n } else if (this.endDate) {\r\n this.month = this.endDate.getMonth();\r\n this.year = this.endDate.getFullYear();\r\n }\r\n this.generateCalendar();\r\n }\r\n\r\n this.emitSelection();\r\n if (this.autoApply || this.closeOnAutoApply) {\r\n this.close();\r\n }\r\n }\r\n\r\n emitSelection() {\r\n const selection: CalendarSelection = {\r\n startDate: this.startDate,\r\n endDate: this.endDate\r\n };\r\n if (this.multiDateSelection) {\r\n selection.selectedDates = [...this.selectedDates];\r\n }\r\n this.selected.emit(selection);\r\n }\r\n\r\n addDays(date: Date, days: number): Date {\r\n const d = new Date(date);\r\n d.setDate(d.getDate() + days);\r\n return d;\r\n }\r\n\r\n generateCalendar() {\r\n this.calendar = this.buildCalendar(this.year, this.month);\r\n }\r\n\r\n nextMonth() {\r\n if (!this.dualCalendar) {\r\n this.month++;\r\n if (this.month > 11) { this.month = 0; this.year++; }\r\n this.generateCalendar();\r\n return;\r\n }\r\n // For dual calendar, this should not be used - use nextLeftMonth or nextRightMonth instead\r\n this.nextLeftMonth();\r\n }\r\n\r\n prevMonth() {\r\n if (!this.dualCalendar) {\r\n this.month--;\r\n if (this.month < 0) { this.month = 11; this.year--; }\r\n this.generateCalendar();\r\n return;\r\n }\r\n // For dual calendar, this should not be used - use prevLeftMonth or prevRightMonth instead\r\n this.prevLeftMonth();\r\n }\r\n\r\n // Independent navigation for left calendar\r\n nextLeftMonth() {\r\n this.leftMonth++;\r\n if (this.leftMonth > 11) { this.leftMonth = 0; this.leftYear++; }\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n\r\n prevLeftMonth() {\r\n this.leftMonth--;\r\n if (this.leftMonth < 0) { this.leftMonth = 11; this.leftYear--; }\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n\r\n // Independent navigation for right calendar\r\n nextRightMonth() {\r\n this.rightMonth++;\r\n if (this.rightMonth > 11) { this.rightMonth = 0; this.rightYear++; }\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n prevRightMonth() {\r\n this.rightMonth--;\r\n if (this.rightMonth < 0) { this.rightMonth = 11; this.rightYear--; }\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n initializeDual() {\r\n this.leftMonth = this.today.getMonth();\r\n this.leftYear = this.today.getFullYear();\r\n // Initialize right calendar to next month, but they can move independently\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) { this.rightMonth = 0; this.rightYear++; }\r\n this.generateDualCalendars();\r\n }\r\n\r\n generateDualCalendars() {\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n buildCalendar(year: number, month: number): { day: number, currentMonth: boolean }[][] {\r\n const firstDay = new Date(year, month, 1).getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n const prevMonthDays = new Date(year, month, 0).getDate();\r\n\r\n const grid: { day: number, currentMonth: boolean }[][] = [];\r\n let row: { day: number, currentMonth: boolean }[] = [];\r\n\r\n // Adjust first day (0 = Sunday, 1 = Monday, etc.)\r\n const adjustedFirstDay = firstDay === 0 ? 6 : firstDay - 1; // Make Monday = 0\r\n\r\n for (let i = adjustedFirstDay - 1; i >= 0; i--) {\r\n row.push({ day: prevMonthDays - i, currentMonth: false });\r\n }\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n row.push({ day: d, currentMonth: true });\r\n if (row.length === 7) { grid.push(row); row = []; }\r\n }\r\n let nextMonthDay = 1;\r\n while (row.length > 0 && row.length < 7) {\r\n row.push({ day: nextMonthDay++, currentMonth: false });\r\n }\r\n if (row.length) grid.push(row);\r\n\r\n // Ensure we always have 6 rows (42 cells total) for consistent layout\r\n while (grid.length < 6) {\r\n const newRow: { day: number, currentMonth: boolean }[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n newRow.push({ day: nextMonthDay++, currentMonth: false });\r\n }\r\n grid.push(newRow);\r\n }\r\n\r\n return grid;\r\n }\r\n\r\n isDateSelected(year: number, month: number, day: number): boolean {\r\n if (this.disableHighlight) return false;\r\n if (!day) return false;\r\n\r\n // Multi-date selection\r\n if (this.multiDateSelection) {\r\n return this.isDateInMultiSelection(year, month, day);\r\n }\r\n\r\n const cellDate = new Date(year, month, day);\r\n\r\n // Check if it's today (highlight today by default if no date selected)\r\n const today = new Date();\r\n const isToday = cellDate.getFullYear() === today.getFullYear() &&\r\n cellDate.getMonth() === today.getMonth() &&\r\n cellDate.getDate() === today.getDate();\r\n\r\n // If no startDate is set and it's today, highlight it\r\n if (!this.startDate && isToday) {\r\n return true;\r\n }\r\n\r\n if (!this.startDate) return false;\r\n\r\n // Check if date is disabled\r\n if (this.minDate && cellDate < this.minDate) return false;\r\n if (this.maxDate && cellDate > this.maxDate) return false;\r\n\r\n const sameDay =\r\n cellDate.getFullYear() === this.startDate.getFullYear() &&\r\n cellDate.getMonth() === this.startDate.getMonth() &&\r\n cellDate.getDate() === this.startDate.getDate();\r\n\r\n if (this.singleDatePicker) return sameDay;\r\n\r\n // For range selection: only highlight start and end dates (not in-between)\r\n if (this.startDate && this.endDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const end = new Date(this.endDate.getFullYear(), this.endDate.getMonth(), this.endDate.getDate());\r\n return cellDate.getTime() === start.getTime() || cellDate.getTime() === end.getTime();\r\n }\r\n\r\n // If only start date is selected and hovering, check if this is start or hovered end\r\n if (this.startDate && !this.endDate && this.hoveredDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const hovered = new Date(this.hoveredDate.getFullYear(), this.hoveredDate.getMonth(), this.hoveredDate.getDate());\r\n // Show both start and hovered date as selected (circular black)\r\n return cellDate.getTime() === start.getTime() || cellDate.getTime() === hovered.getTime();\r\n }\r\n\r\n return sameDay;\r\n }\r\n\r\n isDateInRange(year: number, month: number, day: number): boolean {\r\n if (this.disableHighlight || !day) return false;\r\n if (this.singleDatePicker) return false;\r\n if (this.multiDateSelection) return false;\r\n\r\n const cellDate = new Date(year, month, day);\r\n\r\n // If both start and end are selected, show gray background for dates in between\r\n if (this.startDate && this.endDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const end = new Date(this.endDate.getFullYear(), this.endDate.getMonth(), this.endDate.getDate());\r\n return cellDate > start && cellDate < end;\r\n }\r\n\r\n // If only start is selected and hovering, show preview range\r\n if (this.startDate && !this.endDate && this.hoveredDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const hovered = new Date(this.hoveredDate.getFullYear(), this.hoveredDate.getMonth(), this.hoveredDate.getDate());\r\n\r\n // Determine which is earlier - show gray background for dates between them\r\n const minDate = hovered < start ? hovered : start;\r\n const maxDate = hovered >= start ? hovered : start;\r\n return cellDate > minDate && cellDate < maxDate;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isDateDisabled(year: number, month: number, day: number): boolean {\r\n if (!day) return false;\r\n const cellDate = new Date(year, month, day);\r\n if (this.minDate && cellDate < this.minDate) return true;\r\n if (this.maxDate && cellDate > this.maxDate) return true;\r\n return false;\r\n }\r\n\r\n isToday(year: number, month: number, day: number): boolean {\r\n if (!day) return false;\r\n const today = new Date();\r\n const cellDate = new Date(year, month, day);\r\n return cellDate.getFullYear() === today.getFullYear() &&\r\n cellDate.getMonth() === today.getMonth() &&\r\n cellDate.getDate() === today.getDate();\r\n }\r\n\r\n getDisplayValue(): string {\r\n if (this.multiDateSelection && this.selectedDates.length > 0) {\r\n if (this.selectedDates.length === 1) {\r\n return moment(this.selectedDates[0]).format(this.displayFormat);\r\n }\r\n return `${this.selectedDates.length} dates selected`;\r\n }\r\n\r\n if (!this.startDate) return '';\r\n\r\n // Prefer moment formatting for consistent display\r\n let dateStr = moment(this.startDate).format(this.displayFormat);\r\n\r\n if (this.enableTimepicker && !this.dualCalendar) {\r\n const hr = this.startDate.getHours().toString().padStart(2, '0');\r\n const min = this.startDate.getMinutes().toString().padStart(2, '0');\r\n dateStr += ` ${hr}:${min}`;\r\n if (this.enableSeconds) {\r\n const sec = this.startDate.getSeconds().toString().padStart(2, '0');\r\n dateStr += `:${sec}`;\r\n }\r\n }\r\n\r\n if (this.endDate && !this.singleDatePicker) {\r\n let endStr = moment(this.endDate).format(this.displayFormat);\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n const startHr = this.startDate.getHours().toString().padStart(2, '0');\r\n const startMin = this.startDate.getMinutes().toString().padStart(2, '0');\r\n dateStr += ` ${startHr}:${startMin}`;\r\n if (this.enableSeconds) {\r\n const startSec = this.startDate.getSeconds().toString().padStart(2, '0');\r\n dateStr += `:${startSec}`;\r\n }\r\n }\r\n const endHr = this.endDate.getHours().toString().padStart(2, '0');\r\n const endMin = this.endDate.getMinutes().toString().padStart(2, '0');\r\n endStr += ` ${endHr}:${endMin}`;\r\n if (this.enableSeconds) {\r\n const endSec = this.endDate.getSeconds().toString().padStart(2, '0');\r\n endStr += `:${endSec}`;\r\n }\r\n }\r\n return `${dateStr} - ${endStr}`;\r\n }\r\n return dateStr;\r\n }\r\n\r\n // Time picker helpers\r\n getTimeInputValue(isStart = true): string {\r\n const h = isStart ? this.startHour : this.endHour;\r\n const m = isStart ? this.startMinute : this.endMinute;\r\n return `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}`;\r\n }\r\n\r\n getSingleTimeInputValue(): string {\r\n return `${this.selectedHour.toString().padStart(2, '0')}:${this.selectedMinute.toString().padStart(2, '0')}`;\r\n }\r\n\r\n // NEW: Helper to build display value for TimePickerComponent (single calendar)\r\n getSingleTimePickerDisplay(): string {\r\n const hour = this.selectedHour || 12;\r\n const minuteStr = this.selectedMinute.toString().padStart(2, '0');\r\n const ampm = this.selectedAMPM || 'AM';\r\n return `${hour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n // NEW: Helper to build display value for TimePickerComponent (dual calendar)\r\n getDualTimePickerDisplay(isStart = true): string {\r\n const hour = isStart ? (this.startHour || 12) : (this.endHour || 12);\r\n const minute = isStart ? this.startMinute : this.endMinute;\r\n const ampm = isStart ? (this.startAMPM || 'AM') : (this.endAMPM || 'AM');\r\n const minuteStr = minute.toString().padStart(2, '0');\r\n return `${hour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n // Coordination helpers for embedded TimePickerComponent instances\r\n onTimePickerOpened(pickerId: string) {\r\n // Close previously open picker inside this calendar\r\n if (this.openTimePickerId && this.openTimePickerId !== pickerId) {\r\n if (!this.closePickerCounter[this.openTimePickerId]) {\r\n this.closePickerCounter[this.openTimePickerId] = 0;\r\n }\r\n this.closePickerCounter[this.openTimePickerId]++;\r\n }\r\n this.openTimePickerId = pickerId;\r\n }\r\n\r\n onTimePickerClosed(pickerId: string) {\r\n if (this.openTimePickerId === pickerId) {\r\n this.openTimePickerId = null;\r\n }\r\n }\r\n\r\n shouldClosePicker(pickerId: string): number {\r\n return this.closePickerCounter[pickerId] || 0;\r\n }\r\n\r\n // NEW: Parse \"H:MM AM/PM\" (or \"HH:MM\" 24h) from TimePickerComponent\r\n private parsePickerTimeString(timeStr: string): { hour12: number; minute: number; ampm: 'AM' | 'PM' } {\r\n if (!timeStr) {\r\n return { hour12: 12, minute: 0, ampm: 'AM' };\r\n }\r\n\r\n const parts = timeStr.trim().split(' ');\r\n const timePart = parts[0] || '12:00';\r\n let ampmPart = (parts[1] || '').toUpperCase();\r\n\r\n const [hourStr, minuteStr] = timePart.split(':');\r\n let hour = parseInt(hourStr || '12', 10);\r\n const minute = parseInt(minuteStr || '0', 10);\r\n\r\n if (ampmPart !== 'AM' && ampmPart !== 'PM') {\r\n // Interpret as 24-hour input and convert\r\n if (hour >= 12) {\r\n ampmPart = 'PM';\r\n if (hour > 12) hour -= 12;\r\n } else {\r\n ampmPart = 'AM';\r\n if (hour === 0) hour = 12;\r\n }\r\n }\r\n\r\n // Clamp to 1-12 range just in case\r\n if (hour < 1) hour = 1;\r\n if (hour > 12) hour = 12;\r\n\r\n return { hour12: hour, minute, ampm: ampmPart as 'AM' | 'PM' };\r\n }\r\n\r\n // NEW: Handle TimePickerComponent change for single calendar\r\n onSingleTimePickerChange(time: string) {\r\n const { hour12, minute, ampm } = this.parsePickerTimeString(time);\r\n\r\n this.selectedHour = hour12;\r\n this.selectedMinute = minute;\r\n this.selectedAMPM = ampm;\r\n\r\n if (this.startDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.startDate.setHours(h24, minute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // NEW: Handle TimePickerComponent change for dual calendar\r\n onDualTimePickerChange(time: string, isStart = true) {\r\n const { hour12, minute, ampm } = this.parsePickerTimeString(time);\r\n\r\n if (isStart) {\r\n this.startHour = hour12;\r\n this.startMinute = minute;\r\n this.startAMPM = ampm;\r\n\r\n if (this.startDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.startDate.setHours(h24, minute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = hour12;\r\n this.endMinute = minute;\r\n this.endAMPM = ampm;\r\n\r\n if (this.endDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.endDate.setHours(h24, minute, this.endSecond);\r\n }\r\n }\r\n\r\n this.emitSelection();\r\n }\r\n\r\n onTimeChange(event: any, isStart = true) {\r\n const [h, m] = event.target.value.split(':').map(Number);\r\n if (isStart) {\r\n this.startHour = h;\r\n this.startMinute = m;\r\n if (this.startDate) {\r\n this.startDate.setHours(h, m, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = h;\r\n this.endMinute = m;\r\n if (this.endDate) {\r\n this.endDate.setHours(h, m, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n onSingleTimeChange(event: any) {\r\n const [h, m] = event.target.value.split(':').map(Number);\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n if (this.startDate) {\r\n this.startDate.setHours(h, m, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // Custom time picker controls\r\n incrementHour(isStart = true) {\r\n // 12-hour format: 1-12\r\n if (isStart) {\r\n this.startHour = this.startHour >= 12 ? 1 : this.startHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.startHour === 12) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = this.endHour >= 12 ? 1 : this.endHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.endHour === 12) {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n decrementHour(isStart = true) {\r\n // 12-hour format: 1-12\r\n if (isStart) {\r\n this.startHour = this.startHour <= 1 ? 12 : this.startHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.startHour === 12) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = this.endHour <= 1 ? 12 : this.endHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.endHour === 12) {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n incrementMinute(isStart = true) {\r\n if (isStart) {\r\n this.startMinute = (this.startMinute + 1) % 60;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endMinute = (this.endMinute + 1) % 60;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n decrementMinute(isStart = true) {\r\n if (isStart) {\r\n this.startMinute = this.startMinute <= 0 ? 59 : this.startMinute - 1;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endMinute = this.endMinute <= 0 ? 59 : this.endMinute - 1;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n toggleAMPM(isStart = true) {\r\n if (isStart) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n // Single calendar time picker controls (12-hour format: 1-12)\r\n incrementSingleHour() {\r\n this.selectedHour = this.selectedHour >= 12 ? 1 : this.selectedHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.selectedHour === 12) {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n decrementSingleHour() {\r\n this.selectedHour = this.selectedHour <= 1 ? 12 : this.selectedHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.selectedHour === 12) {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n incrementSingleMinute() {\r\n this.selectedMinute = (this.selectedMinute + 1) % 60;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n decrementSingleMinute() {\r\n this.selectedMinute = this.selectedMinute <= 0 ? 59 : this.selectedMinute - 1;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n toggleSingleAMPM() {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n getMonthName(month: number): string {\r\n const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n return months[month];\r\n }\r\n\r\n // Input handlers for direct hour/minute input (12-hour format only)\r\n onHourInput(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n\r\n // Allow empty input while typing\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n return;\r\n }\r\n\r\n let value = parseInt(inputValue) || 0;\r\n\r\n // Validate: 1-12 for 12-hour format\r\n if (value < 1) value = 1;\r\n if (value > 12) value = 12;\r\n\r\n if (isSingle) {\r\n this.selectedHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = value;\r\n if (this.endDate) {\r\n let h = value;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // Don't format during input, only on blur\r\n event.target.value = value.toString();\r\n }\r\n\r\n onHourBlur(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n // If empty, set to current value\r\n const currentValue = isSingle ? this.selectedHour : (isStart ? this.startHour : this.endHour);\r\n event.target.value = currentValue.toString();\r\n return;\r\n }\r\n\r\n let value = parseInt(inputValue) || 0;\r\n if (value < 1) value = 1;\r\n if (value > 12) value = 12;\r\n\r\n // Format to single digit (no padding for hours in 12-hour format)\r\n event.target.value = value.toString();\r\n\r\n // Update the value\r\n if (isSingle) {\r\n this.selectedHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = value;\r\n if (this.endDate) {\r\n let h = value;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n onMinuteInput(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n\r\n // Remove any non-digit characters\r\n const digitsOnly = inputValue.replace(/\\D/g, '');\r\n\r\n // Store raw input value for display\r\n this.minuteInputValues[key] = digitsOnly;\r\n\r\n // Allow empty input while typing\r\n if (digitsOnly === '' || digitsOnly === null || digitsOnly === undefined) {\r\n return; // Don't modify the input, let user clear it\r\n }\r\n\r\n // Allow typing up to 2 digits without formatting\r\n let value = parseInt(digitsOnly) || 0;\r\n\r\n // If user types more than 2 digits, take only first 2\r\n if (digitsOnly.length > 2) {\r\n value = parseInt(digitsOnly.substring(0, 2));\r\n this.minuteInputValues[key] = digitsOnly.substring(0, 2);\r\n event.target.value = digitsOnly.substring(0, 2);\r\n }\r\n\r\n // If value exceeds 59, clamp it to 59\r\n if (value > 59) {\r\n value = 59;\r\n this.minuteInputValues[key] = '59';\r\n event.target.value = '59';\r\n }\r\n\r\n // Update the internal value silently (don't emit during typing to avoid re-rendering)\r\n if (isSingle) {\r\n this.selectedMinute = value;\r\n } else if (isStart) {\r\n this.startMinute = value;\r\n } else {\r\n this.endMinute = value;\r\n }\r\n\r\n // Don't update dates or emit during typing - wait for blur or apply\r\n }\r\n\r\n onMinuteBlur(event: any, isStart = true, isSingle = false): void {\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n const inputValue = event.target.value;\r\n\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n // If empty, set to current value\r\n const currentValue = isSingle ? this.selectedMinute : (isStart ? this.startMinute : this.endMinute);\r\n event.target.value = currentValue.toString().padStart(2, '0');\r\n delete this.minuteInputValues[key];\r\n return;\r\n }\r\n\r\n const digitsOnly = inputValue.replace(/\\D/g, '');\r\n let value = parseInt(digitsOnly) || 0;\r\n if (value < 0) value = 0;\r\n if (value > 59) value = 59;\r\n\r\n // Format to 2 digits on blur (01-09 becomes 01-09, 10-59 stays as is)\r\n event.target.value = value.toString().padStart(2, '0');\r\n delete this.minuteInputValues[key]; // Clear raw input, use formatted value\r\n\r\n // Update the value\r\n if (isSingle) {\r\n this.selectedMinute = value;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startMinute = value;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endMinute = value;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n // Get display value for hour (always 12-hour format)\r\n getDisplayHour(hour: number): number {\r\n if (hour === 0) return 12;\r\n if (hour > 12) return hour - 12;\r\n return hour;\r\n }\r\n\r\n // Get display value for minute (formatted only when not actively typing)\r\n getMinuteDisplayValue(isStart: boolean, isSingle: boolean): string {\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n // If user is typing (has raw input), show that, otherwise show formatted value\r\n if (this.minuteInputValues[key] !== undefined) {\r\n return this.minuteInputValues[key];\r\n }\r\n // Otherwise return formatted value\r\n const value = isSingle ? this.selectedMinute : (isStart ? this.startMinute : this.endMinute);\r\n return value.toString().padStart(2, '0');\r\n }\r\n\r\n // Helper method to apply time picker values to a date\r\n applyTimeToDate(date: Date, isStart: boolean): void {\r\n if (this.dualCalendar) {\r\n if (isStart) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.startMinute, this.startSecond);\r\n } else {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n } else {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.selectedMinute, this.selectedSecond);\r\n }\r\n }\r\n\r\n // Select all text on focus for easy replacement\r\n onTimeInputFocus(event: any): void {\r\n event.target.select();\r\n }\r\n\r\n // Format all minute inputs to 2 digits (called before Apply)\r\n formatAllMinuteInputs(): void {\r\n // Format minute inputs in the DOM - find all minute inputs and format single digits\r\n const inputs = document.querySelectorAll('.time-input');\r\n inputs.forEach((input: any) => {\r\n const value = parseInt(input.value);\r\n // If it's a valid minute value (0-59) and not already formatted (single digit or 2 digits without leading zero)\r\n if (!isNaN(value) && value >= 0 && value <= 59) {\r\n // Format if it's a single digit (1-9) or if it's 2 digits but the first is not 0\r\n if (input.value.length === 1 || (input.value.length === 2 && !input.value.startsWith('0') && value < 10)) {\r\n input.value = value.toString().padStart(2, '0');\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"calendar-container relative\" [class.open]=\"show\" [class.inline-mode]=\"inline\">\r\n <!-- Input field -->\r\n <div class=\"input-wrapper\" *ngIf=\"!inline\">\r\n <input\r\n type=\"text\"\r\n (click)=\"toggle()\"\r\n readonly\r\n [value]=\"getDisplayValue()\"\r\n [placeholder]=\"placeholder\"\r\n class=\"calendar-input\">\r\n <!-- *ngIf=\"!getDisplayValue()\" -->\r\n <span class=\"calendar-icon\" >\r\n <img src=\"assets/calender/calender.svg\" alt=\"calendar\" class=\"calendar-icon-img\">\r\n </span>\r\n <button class=\"clear-btn\" *ngIf=\"getDisplayValue() && isDisplayCrossIcon\" (click)=\"clear(); $event.stopPropagation()\" title=\"Clear\">×</button>\r\n </div>\r\n\r\n <!-- Calendar Popup / Inline -->\r\n <div class=\"calendar-popup\"\r\n [class.inline-calendar]=\"inline\"\r\n [ngClass]=\"{\r\n 'position-right': !inline && opens === 'right',\r\n 'position-center': !inline && opens === 'center',\r\n 'drop-up': !inline && drop === 'up',\r\n 'has-ranges': showRanges && customRanges,\r\n 'dual-calendar-mode': dualCalendar\r\n }\"\r\n *ngIf=\"inline || show\">\r\n\r\n <!-- RANGES -->\r\n <div class=\"ranges\" *ngIf=\"showRanges && customRanges\">\r\n <button\r\n *ngFor=\"let rangeKey of rangeOrder\"\r\n (click)=\"chooseRange(rangeKey)\"\r\n [class.active]=\"activeRange === rangeKey\"\r\n [class.custom-range]=\"rangeKey === 'Custom Range'\"\r\n class=\"range-btn\"\r\n [disabled]=\"rangeKey === 'Custom Range'\">\r\n {{ rangeKey }}\r\n </button>\r\n </div>\r\n<div class=\"\" [ngClass]=\"showRanges ? 'w-100 flex-grow-1' : ''\">\r\n\r\n\r\n <!-- SINGLE CALENDAR -->\r\n <div *ngIf=\"!dualCalendar\" class=\"calendar-wrapper\">\r\n <div class=\"header\">\r\n <!-- <button (click)=\"prevMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/pagination-left-gray.svg\" alt=\"arrow-left\" class=\"arrow-left\">\r\n </button> -->\r\n <button class=\"nav-btn\" type=\"button\" (click)=\"prevMonth()\" matTooltip=\"Prev month\"\r\n >\r\n <img src=\"assets/calender/chevron-left.svg\" alt=\"prev\" class=\"h-3 w-3\" />\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(month) }} {{ year }}</span>\r\n <!-- <button (click)=\"nextMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/pagination-right-gray.svg\" alt=\"arrow-right\" class=\"arrow-right\">\r\n </button> -->\r\n <button class=\"nav-btn\" type=\"button\" (click)=\"nextMonth()\" matTooltip=\"Next month\"\r\n >\r\n <img src=\"assets/calender/chevron-right.svg\" alt=\"next\" class=\"h-3 w-3\" />\r\n <!--<img src=\"assets/calender/pagination-right-gray.svg\" alt=\"next\" class=\"h-3 w-3\" /> -->\r\n </button>\r\n </div>\r\n\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of calendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(year, month, dayObj.day) && selectDate(dayObj.day)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(year, month, dayObj.day) && onDateHover(dayObj.day, false)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(year, month, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(year, month, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(year, month, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(year, month, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(year, month, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Single Calendar Time Picker -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">Time</div>\r\n <div class=\"timepicker-controls\">\r\n <app-time-picker\r\n pickerId=\"single-time\"\r\n [label]=\"''\"\r\n [value]=\"getSingleTimePickerDisplay()\"\r\n [closePicker]=\"shouldClosePicker('single-time')\"\r\n (timeChange)=\"onSingleTimePickerChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- DUAL CALENDAR -->\r\n <div class=\"dual-calendar\" *ngIf=\"dualCalendar\">\r\n <!-- LEFT CALENDAR -->\r\n <div class=\"calendar-left\">\r\n <div class=\"header\">\r\n <button (click)=\"prevLeftMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/chevron-left.svg\" alt=\"arrow-left\" class=\"arrow-left\">\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(leftMonth) }} {{ leftYear }}</span>\r\n <button (click)=\"nextLeftMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/chevron-right.svg\" alt=\"arrow-right\" class=\"arrow-right\">\r\n </button>\r\n </div>\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of leftCalendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(leftYear, leftMonth, dayObj.day) && selectDate(dayObj.day, false)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(leftYear, leftMonth, dayObj.day) && onDateHover(dayObj.day, false)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(leftYear, leftMonth, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(leftYear, leftMonth, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(leftYear, leftMonth, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(leftYear, leftMonth, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(leftYear, leftMonth, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Start Time Picker for Dual Calendar -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">Start Time</div>\r\n <div class=\"timepicker-controls\">\r\n <app-time-picker\r\n pickerId=\"dual-start\"\r\n [label]=\"''\"\r\n [value]=\"getDualTimePickerDisplay(true)\"\r\n [closePicker]=\"shouldClosePicker('dual-start')\"\r\n (timeChange)=\"onDualTimePickerChange($event, true)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT CALENDAR -->\r\n <div class=\"calendar-right\">\r\n <div class=\"header\">\r\n <button (click)=\"prevRightMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/chevron-left.svg\" alt=\"arrow-left\" class=\"arrow-left\">\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(rightMonth) }} {{ rightYear }}</span>\r\n <button (click)=\"nextRightMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/chevron-right.svg\" alt=\"arrow-right\" class=\"arrow-right\">\r\n </button>\r\n </div>\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of rightCalendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(rightYear, rightMonth, dayObj.day) && selectDate(dayObj.day, true)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(rightYear, rightMonth, dayObj.day) && onDateHover(dayObj.day, true)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(rightYear, rightMonth, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(rightYear, rightMonth, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(rightYear, rightMonth, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(rightYear, rightMonth, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(rightYear, rightMonth, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- End Time Picker for Dual Calendar -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">End Time</div>\r\n <div class=\"timepicker-controls\">\r\n <app-time-picker\r\n pickerId=\"dual-end\"\r\n [label]=\"''\"\r\n [value]=\"getDualTimePickerDisplay(false)\"\r\n [closePicker]=\"shouldClosePicker('dual-end')\"\r\n (timeChange)=\"onDualTimePickerChange($event, false)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- FOOTER -->\r\n <div class=\"footer\" *ngIf=\"!inline\">\r\n <button *ngIf=\"showCancel\" (click)=\"cancel()\" class=\"btn-cancel\" type=\"button\">Cancel</button>\r\n <button (click)=\"apply()\" class=\"btn-apply\" type=\"button\">Apply</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n CalendarSelection,\r\n CustomCalendarComponent,\r\n CalendarRange\r\n} from '../calendar/components/custom-calendar/custom-calendar.component';\r\n\r\n@Component({\r\n selector: 'lib-calendar',\r\n standalone: true,\r\n imports: [CustomCalendarComponent],\r\n template: `\r\n <app-custom-calendar\r\n [enableTimepicker]=\"enableTimepicker\"\r\n [autoApply]=\"autoApply\"\r\n [closeOnAutoApply]=\"closeOnAutoApply\"\r\n [showCancel]=\"showCancel\"\r\n [linkedCalendars]=\"linkedCalendars\"\r\n [singleDatePicker]=\"singleDatePicker\"\r\n [showWeekNumbers]=\"showWeekNumbers\"\r\n [showISOWeekNumbers]=\"showISOWeekNumbers\"\r\n [customRangeDirection]=\"customRangeDirection\"\r\n [lockStartDate]=\"lockStartDate\"\r\n [position]=\"position\"\r\n [drop]=\"drop\"\r\n [dualCalendar]=\"dualCalendar\"\r\n [showRanges]=\"showRanges\"\r\n [timeFormat]=\"timeFormat\"\r\n [enableSeconds]=\"enableSeconds\"\r\n [customRanges]=\"customRanges\"\r\n [multiDateSelection]=\"multiDateSelection\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n [placeholder]=\"placeholder\"\r\n [opens]=\"opens\"\r\n [inline]=\"inline\"\r\n [isDisplayCrossIcon]=\"isDisplayCrossIcon\"\r\n [selectedValue]=\"selectedValue\"\r\n [displayFormat]=\"displayFormat\"\r\n (selected)=\"selected.emit($event)\"\r\n (opened)=\"opened.emit()\"\r\n (closed)=\"closed.emit()\"\r\n />\r\n `,\r\n styles: ``\r\n})\r\nexport class CalendarComponent {\r\n // Mirror `CustomCalendarComponent` inputs/outputs so consumers can use `<lib-calendar>` as a drop-in.\r\n @Input() enableTimepicker = false;\r\n @Input() autoApply = false;\r\n @Input() closeOnAutoApply = false;\r\n @Input() showCancel = true;\r\n @Input() linkedCalendars = false;\r\n @Input() singleDatePicker = false;\r\n @Input() showWeekNumbers = false;\r\n @Input() showISOWeekNumbers = false;\r\n @Input() customRangeDirection = false;\r\n @Input() lockStartDate = false;\r\n @Input() position: 'center' | 'left' | 'right' = 'left';\r\n @Input() drop: 'up' | 'down' = 'down';\r\n @Input() dualCalendar = false;\r\n @Input() showRanges = true;\r\n @Input() timeFormat: 12 | 24 = 24;\r\n @Input() enableSeconds = false;\r\n @Input() customRanges?: Record<string, CalendarRange>;\r\n @Input() multiDateSelection = false;\r\n @Input() maxDate?: Date;\r\n @Input() minDate?: Date;\r\n @Input() placeholder = 'Select date range';\r\n @Input() opens: 'left' | 'right' | 'center' = 'left';\r\n @Input() inline = false;\r\n @Input() isDisplayCrossIcon = true;\r\n @Input() selectedValue: CalendarSelection | null = null;\r\n @Input() displayFormat = 'MM/DD/YYYY';\r\n\r\n @Output() selected = new EventEmitter<CalendarSelection>();\r\n @Output() opened = new EventEmitter<void>();\r\n @Output() closed = new EventEmitter<void>();\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CustomCalendarComponent, CalendarSelection } from '../custom-calendar/custom-calendar.component';\r\nimport { TimePickerComponent } from '../time-picker/time-picker.component';\r\n\r\nexport interface TimeConfiguration {\r\n date: Date;\r\n allDay: boolean;\r\n startTime: string; // Format: \"HH:mm\" or \"HH:mm:ss\"\r\n endTime: string; // Format: \"HH:mm\" or \"HH:mm:ss\"\r\n}\r\n\r\nexport interface ScheduledDateSelection {\r\n mode: 'single' | 'multiple' | 'range';\r\n singleDate?: {\r\n startDate: Date;\r\n endDate: Date;\r\n allDay: boolean;\r\n startTime: string;\r\n endTime: string;\r\n };\r\n multipleDates?: TimeConfiguration[];\r\n dateRange?: {\r\n startDate: Date;\r\n endDate: Date;\r\n allDay: boolean;\r\n startTime: string;\r\n endTime: string;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'app-scheduled-date-picker',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, CustomCalendarComponent, TimePickerComponent],\r\n templateUrl: './scheduled-date-picker.component.html',\r\n styleUrls: ['./scheduled-date-picker.component.css']\r\n})\r\nexport class ScheduledDatePickerComponent implements OnInit {\r\n @Input() timeFormat: 12 | 24 = 12;\r\n @Input() enableSeconds = false;\r\n \r\n @Output() scheduled = new EventEmitter<ScheduledDateSelection>();\r\n @Output() cleared = new EventEmitter<void>();\r\n\r\n activeTab: 'single' | 'multiple' | 'range' = 'single';\r\n openTimePickerId: string | null = null; // Track which time picker is currently open\r\n closePickerCounter: { [key: string]: number } = {}; // Track close signals for each picker\r\n \r\n // Single Date\r\n singleDate: Date | null = null;\r\n singleAllDay = false;\r\n singleStartTime = '1:00 AM';\r\n singleEndTime = '2:00 AM';\r\n\r\n // Multiple Dates\r\n multipleDates: TimeConfiguration[] = [];\r\n\r\n // Date Range\r\n rangeStartDate: Date | null = null;\r\n rangeEndDate: Date | null = null;\r\n rangeAllDay = false;\r\n rangeStartTime = '1:00 AM';\r\n rangeEndTime = '2:00 AM';\r\n\r\n ngOnInit() {\r\n // Initialize with default time if needed\r\n }\r\n\r\n onTabChange(tab: 'single' | 'multiple' | 'range') {\r\n this.activeTab = tab;\r\n this.openTimePickerId = null; // Close any open pickers when switching tabs\r\n }\r\n\r\n onTimePickerOpened(pickerId: string) {\r\n // Close all other pickers when one opens\r\n if (this.openTimePickerId && this.openTimePickerId !== pickerId) {\r\n // Increment close counter for the previously open picker\r\n if (!this.closePickerCounter[this.openTimePickerId]) {\r\n this.closePickerCounter[this.openTimePickerId] = 0;\r\n }\r\n this.closePickerCounter[this.openTimePickerId]++;\r\n }\r\n this.openTimePickerId = pickerId;\r\n }\r\n\r\n onTimePickerClosed(pickerId: string) {\r\n // Reset open picker ID if this was the open one\r\n if (this.openTimePickerId === pickerId) {\r\n this.openTimePickerId = null;\r\n }\r\n }\r\n\r\n shouldClosePicker(pickerId: string): number {\r\n // Return the counter value for this picker (triggers change detection)\r\n return this.closePickerCounter[pickerId] || 0;\r\n }\r\n\r\n // Single Date Handlers\r\n onSingleDateSelected(event: CalendarSelection) {\r\n if (event.startDate) {\r\n this.singleDate = new Date(event.startDate);\r\n // Initialize time if not all day\r\n if (!this.singleAllDay) {\r\n this.updateSingleDateTimes();\r\n }\r\n this.emitScheduled();\r\n } else {\r\n this.singleDate = null;\r\n }\r\n }\r\n\r\n onSingleAllDayChange() {\r\n this.singleAllDay = !this.singleAllDay;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onSingleStartTimeChange(time: string) {\r\n this.singleStartTime = time;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onSingleEndTimeChange(time: string) {\r\n this.singleEndTime = time;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n updateSingleDateTimes() {\r\n if (!this.singleDate) return;\r\n if (this.singleAllDay) {\r\n this.singleDate.setHours(0, 0, 0, 0);\r\n } else {\r\n const startTime = this.parseTimeString(this.singleStartTime);\r\n const endTime = this.parseTimeString(this.singleEndTime);\r\n this.singleDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n }\r\n }\r\n\r\n // Multiple Dates Handlers\r\n onMultipleDatesSelected(event: CalendarSelection) {\r\n if (event.selectedDates && event.selectedDates.length > 0) {\r\n const newDates: TimeConfiguration[] = [];\r\n \r\n event.selectedDates.forEach(date => {\r\n const dateStr = this.getDateString(date);\r\n const existing = this.multipleDates.find(d => this.getDateString(d.date) === dateStr);\r\n \r\n if (existing) {\r\n newDates.push(existing);\r\n } else {\r\n // Create new time configuration for this date\r\n newDates.push({\r\n date: new Date(date),\r\n allDay: false,\r\n startTime: '1:00 AM',\r\n endTime: '2:00 AM'\r\n });\r\n }\r\n });\r\n \r\n this.multipleDates = newDates;\r\n this.emitScheduled();\r\n } else {\r\n this.multipleDates = [];\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateAllDayChange(index: number) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].allDay = !this.multipleDates[index].allDay;\r\n if (this.multipleDates[index].allDay) {\r\n this.multipleDates[index].date.setHours(0, 0, 0, 0);\r\n } else {\r\n const time = this.parseTimeString(this.multipleDates[index].startTime);\r\n this.multipleDates[index].date.setHours(time.hours, time.minutes, 0, 0);\r\n }\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateStartTimeChange(index: number, time: string) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].startTime = time;\r\n if (!this.multipleDates[index].allDay) {\r\n const parsed = this.parseTimeString(time);\r\n this.multipleDates[index].date.setHours(parsed.hours, parsed.minutes, 0, 0);\r\n }\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateEndTimeChange(index: number, time: string) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].endTime = time;\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n // Date Range Handlers\r\n onRangeSelected(event: CalendarSelection) {\r\n if (event.startDate && event.endDate) {\r\n this.rangeStartDate = new Date(event.startDate);\r\n this.rangeEndDate = new Date(event.endDate);\r\n if (!this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n }\r\n this.emitScheduled();\r\n } else {\r\n this.rangeStartDate = null;\r\n this.rangeEndDate = null;\r\n }\r\n }\r\n\r\n onRangeAllDayChange() {\r\n this.rangeAllDay = !this.rangeAllDay;\r\n if (this.rangeStartDate && this.rangeEndDate) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onRangeStartTimeChange(time: string) {\r\n this.rangeStartTime = time;\r\n if (this.rangeStartDate && !this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onRangeEndTimeChange(time: string) {\r\n this.rangeEndTime = time;\r\n if (this.rangeEndDate && !this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n updateRangeTimes() {\r\n if (!this.rangeStartDate || !this.rangeEndDate) return;\r\n \r\n if (this.rangeAllDay) {\r\n this.rangeStartDate.setHours(0, 0, 0, 0);\r\n this.rangeEndDate.setHours(23, 59, 59, 999);\r\n } else {\r\n const startTime = this.parseTimeString(this.rangeStartTime);\r\n const endTime = this.parseTimeString(this.rangeEndTime);\r\n this.rangeStartDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n this.rangeEndDate.setHours(endTime.hours, endTime.minutes, 0, 0);\r\n }\r\n }\r\n\r\n // Utility Methods\r\n parseTimeString(timeStr: string): { hours: number; minutes: number } {\r\n // Parse time string like \"7:01 AM\" or \"19:01\"\r\n const parts = timeStr.split(' ');\r\n let timePart = parts[0];\r\n const ampm = parts[1];\r\n \r\n const [hoursStr, minutesStr] = timePart.split(':');\r\n let hours = parseInt(hoursStr, 10);\r\n const minutes = parseInt(minutesStr || '0', 10);\r\n \r\n if (ampm) {\r\n if (ampm.toUpperCase() === 'PM' && hours !== 12) {\r\n hours += 12;\r\n } else if (ampm.toUpperCase() === 'AM' && hours === 12) {\r\n hours = 0;\r\n }\r\n }\r\n \r\n return { hours, minutes };\r\n }\r\n\r\n getDateString(date: Date): string {\r\n return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\r\n }\r\n\r\n formatDate(date: Date): string {\r\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n return `${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\r\n }\r\n\r\n emitScheduled() {\r\n const selection: ScheduledDateSelection = {\r\n mode: this.activeTab\r\n };\r\n\r\n if (this.activeTab === 'single' && this.singleDate) {\r\n // For single date, create startDate and endDate with same date but different times\r\n const startDate = new Date(this.singleDate);\r\n const endDate = new Date(this.singleDate);\r\n \r\n if (!this.singleAllDay) {\r\n const startTime = this.parseTimeString(this.singleStartTime);\r\n const endTime = this.parseTimeString(this.singleEndTime);\r\n startDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n endDate.setHours(endTime.hours, endTime.minutes, 0, 0);\r\n } else {\r\n startDate.setHours(0, 0, 0, 0);\r\n endDate.setHours(23, 59, 59, 999);\r\n }\r\n \r\n selection.singleDate = {\r\n startDate: startDate,\r\n endDate: endDate,\r\n allDay: this.singleAllDay,\r\n startTime: this.singleStartTime,\r\n endTime: this.singleEndTime\r\n };\r\n } else if (this.activeTab === 'multiple') {\r\n selection.multipleDates = this.multipleDates.map(d => ({\r\n date: new Date(d.date),\r\n allDay: d.allDay,\r\n startTime: d.startTime,\r\n endTime: d.endTime\r\n }));\r\n } else if (this.activeTab === 'range' && this.rangeStartDate && this.rangeEndDate) {\r\n selection.dateRange = {\r\n startDate: new Date(this.rangeStartDate),\r\n endDate: new Date(this.rangeEndDate),\r\n allDay: this.rangeAllDay,\r\n startTime: this.rangeStartTime,\r\n endTime: this.rangeEndTime\r\n };\r\n }\r\n\r\n this.scheduled.emit(selection);\r\n }\r\n\r\n clear() {\r\n this.singleDate = null;\r\n this.multipleDates = [];\r\n this.rangeStartDate = null;\r\n this.rangeEndDate = null;\r\n this.singleAllDay = false;\r\n this.rangeAllDay = false;\r\n this.singleStartTime = '1:00 AM';\r\n this.singleEndTime = '2:00 AM';\r\n this.rangeStartTime = '1:00 AM';\r\n this.rangeEndTime = '2:00 AM';\r\n this.cleared.emit();\r\n }\r\n\r\n apply() {\r\n this.emitScheduled();\r\n }\r\n\r\n}\r\n\r\n","<div class=\"scheduled-date-picker-container\">\r\n <!-- Header with Tabs -->\r\n\r\n\r\n <!-- Main Content Area -->\r\n \r\n <div class=\"scheduled-content\">\r\n <!-- Left Side: Calendar -->\r\n <div class=\"calendar-section\">\r\n <h2 class=\"scheduled-title\">Scheduled Dates</h2>\r\n <div class=\"tabs\">\r\n <button \r\n class=\"tab-button\" \r\n [class.active]=\"activeTab === 'single'\"\r\n (click)=\"onTabChange('single')\">\r\n Single Date\r\n </button>\r\n <button \r\n class=\"tab-button\" \r\n [class.active]=\"activeTab === 'multiple'\"\r\n (click)=\"onTabChange('multiple')\">\r\n Multiple Dates\r\n </button>\r\n <button \r\n class=\"tab-button\" \r\n [class.active]=\"activeTab === 'range'\"\r\n (click)=\"onTabChange('range')\">\r\n Date Range\r\n </button>\r\n </div>\r\n <!-- Single Date Calendar -->\r\n <div *ngIf=\"activeTab === 'single'\" class=\"calendar-wrapper-inline\">\r\n <app-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"true\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select a date\"\r\n (selected)=\"onSingleDateSelected($event)\">\r\n </app-custom-calendar>\r\n </div>\r\n\r\n <!-- Multiple Dates Calendar -->\r\n <div *ngIf=\"activeTab === 'multiple'\" class=\"calendar-wrapper-inline\">\r\n <app-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"false\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [multiDateSelection]=\"true\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select multiple dates\"\r\n (selected)=\"onMultipleDatesSelected($event)\">\r\n </app-custom-calendar>\r\n </div>\r\n\r\n <!-- Date Range Calendar -->\r\n <div *ngIf=\"activeTab === 'range'\" class=\"calendar-wrapper-inline\">\r\n <app-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"false\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select date range\"\r\n (selected)=\"onRangeSelected($event)\">\r\n </app-custom-calendar>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Time Configuration -->\r\n <div class=\"time-config-section\">\r\n <h3 class=\"time-config-title\">Time Configuration</h3>\r\n\r\n <!-- Single Date Time Configuration -->\r\n <div *ngIf=\"activeTab === 'single'\">\r\n <div *ngIf=\"singleDate\" class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(singleDate) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input \r\n type=\"checkbox\" \r\n [checked]=\"singleAllDay\"\r\n (change)=\"onSingleAllDayChange()\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!singleAllDay\" class=\"time-inputs\">\r\n <app-time-picker\r\n pickerId=\"single-start\"\r\n label=\"Start Time\"\r\n [value]=\"singleStartTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('single-start')\"\r\n (timeChange)=\"onSingleStartTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n <app-time-picker\r\n pickerId=\"single-end\"\r\n label=\"End Time\"\r\n [value]=\"singleEndTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('single-end')\"\r\n (timeChange)=\"onSingleEndTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!singleDate\" class=\"no-selection\">\r\n <p>No date selected. Select a date from the calendar.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Multiple Dates Time Configuration -->\r\n <div *ngIf=\"activeTab === 'multiple'\" class=\"time-config-list\">\r\n <div \r\n *ngFor=\"let dateConfig of multipleDates; let i = index\" \r\n class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(dateConfig.date) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input \r\n type=\"checkbox\" \r\n [checked]=\"dateConfig.allDay\"\r\n (change)=\"onMultipleDateAllDayChange(i)\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!dateConfig.allDay\" class=\"time-inputs\">\r\n <app-time-picker\r\n [pickerId]=\"'multiple-' + i + '-start'\"\r\n label=\"Start Time\"\r\n [value]=\"dateConfig.startTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('multiple-' + i + '-start')\"\r\n (timeChange)=\"onMultipleDateStartTimeChange(i, $event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n <app-time-picker\r\n [pickerId]=\"'multiple-' + i + '-end'\"\r\n label=\"End Time\"\r\n [value]=\"dateConfig.endTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('multiple-' + i + '-end')\"\r\n (timeChange)=\"onMultipleDateEndTimeChange(i, $event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"multipleDates.length === 0\" class=\"no-selection\">\r\n <p>No dates selected. Select dates from the calendar.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Range Time Configuration -->\r\n <div *ngIf=\"activeTab === 'range' && rangeStartDate && rangeEndDate\" class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(rangeStartDate) }} - {{ formatDate(rangeEndDate) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input \r\n type=\"checkbox\" \r\n [checked]=\"rangeAllDay\"\r\n (change)=\"onRangeAllDayChange()\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!rangeAllDay\" class=\"time-inputs\">\r\n <app-time-picker\r\n pickerId=\"range-start\"\r\n label=\"Start Time\"\r\n [value]=\"rangeStartTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('range-start')\"\r\n (timeChange)=\"onRangeStartTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n <app-time-picker\r\n pickerId=\"range-end\"\r\n label=\"End Time\"\r\n [value]=\"rangeEndTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('range-end')\"\r\n (timeChange)=\"onRangeEndTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </app-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"activeTab === 'range' && (!rangeStartDate || !rangeEndDate)\" class=\"no-selection\">\r\n <p>No date range selected. Select a date range from the calendar.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"action-buttons\">\r\n <button class=\"btn-clear\" (click)=\"clear()\">Clear</button>\r\n <button class=\"btn-apply\" (click)=\"apply()\">Apply</button>\r\n </div>\r\n</div>\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { CustomCalendarComponent } from './components/custom-calendar/custom-calendar.component';\r\nimport { ScheduledDatePickerComponent } from './components/scheduled-date-picker/scheduled-date-picker.component';\r\nimport { TimePickerComponent } from './components/time-picker/time-picker.component';\r\n\r\n/**\r\n * Optional NgModule wrapper for projects that prefer module-based usage.\r\n *\r\n * Note:\r\n * - The components themselves are standalone, so you can also import them\r\n * directly into any standalone component without using this module.\r\n * - This module is mainly for:\r\n * - Existing apps that still use feature modules\r\n * - Easier \"plug-and-play\" integration: import CalendarModule once and use\r\n * the three exported components anywhere in your templates.\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n CustomCalendarComponent,\r\n ScheduledDatePickerComponent,\r\n TimePickerComponent\r\n ],\r\n exports: [\r\n CustomCalendarComponent,\r\n ScheduledDatePickerComponent,\r\n TimePickerComponent\r\n ]\r\n})\r\nexport class CalendarModule {}\r\n\r\n\r\n","/*\r\n * Public API Surface of calendar\r\n */\r\n\r\nexport * from './lib/calendar.service';\r\nexport * from './lib/calendar.component';\r\n\r\n// Standalone components (recommended)\r\nexport * from './calendar/components/custom-calendar/custom-calendar.component';\r\nexport * from './calendar/components/scheduled-date-picker/scheduled-date-picker.component';\r\nexport * from './calendar/components/time-picker/time-picker.component';\r\n\r\n// Optional module wrapper (for module-based Angular apps)\r\nexport * from './calendar/calendar.module';\r\n\r\n// Internal services that are useful for consumers (e.g., coordinating multiple calendars)\r\nexport * from './calendar/services/calendar-manager.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CalendarManagerService","i2"],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { CalendarSelection, CalendarRange } from '../calendar/components/custom-calendar/custom-calendar.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class CalendarComponent {
|
|
5
|
+
enableTimepicker: boolean;
|
|
6
|
+
autoApply: boolean;
|
|
7
|
+
closeOnAutoApply: boolean;
|
|
8
|
+
showCancel: boolean;
|
|
9
|
+
linkedCalendars: boolean;
|
|
10
|
+
singleDatePicker: boolean;
|
|
11
|
+
showWeekNumbers: boolean;
|
|
12
|
+
showISOWeekNumbers: boolean;
|
|
13
|
+
customRangeDirection: boolean;
|
|
14
|
+
lockStartDate: boolean;
|
|
15
|
+
position: 'center' | 'left' | 'right';
|
|
16
|
+
drop: 'up' | 'down';
|
|
17
|
+
dualCalendar: boolean;
|
|
18
|
+
showRanges: boolean;
|
|
19
|
+
timeFormat: 12 | 24;
|
|
20
|
+
enableSeconds: boolean;
|
|
21
|
+
customRanges?: Record<string, CalendarRange>;
|
|
22
|
+
multiDateSelection: boolean;
|
|
23
|
+
maxDate?: Date;
|
|
24
|
+
minDate?: Date;
|
|
25
|
+
placeholder: string;
|
|
26
|
+
opens: 'left' | 'right' | 'center';
|
|
27
|
+
inline: boolean;
|
|
28
|
+
isDisplayCrossIcon: boolean;
|
|
29
|
+
selectedValue: CalendarSelection | null;
|
|
30
|
+
displayFormat: string;
|
|
31
|
+
selected: EventEmitter<CalendarSelection>;
|
|
32
|
+
opened: EventEmitter<void>;
|
|
33
|
+
closed: EventEmitter<void>;
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarComponent, never>;
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarComponent, "lib-calendar", never, { "enableTimepicker": { "alias": "enableTimepicker"; "required": false; }; "autoApply": { "alias": "autoApply"; "required": false; }; "closeOnAutoApply": { "alias": "closeOnAutoApply"; "required": false; }; "showCancel": { "alias": "showCancel"; "required": false; }; "linkedCalendars": { "alias": "linkedCalendars"; "required": false; }; "singleDatePicker": { "alias": "singleDatePicker"; "required": false; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; }; "showISOWeekNumbers": { "alias": "showISOWeekNumbers"; "required": false; }; "customRangeDirection": { "alias": "customRangeDirection"; "required": false; }; "lockStartDate": { "alias": "lockStartDate"; "required": false; }; "position": { "alias": "position"; "required": false; }; "drop": { "alias": "drop"; "required": false; }; "dualCalendar": { "alias": "dualCalendar"; "required": false; }; "showRanges": { "alias": "showRanges"; "required": false; }; "timeFormat": { "alias": "timeFormat"; "required": false; }; "enableSeconds": { "alias": "enableSeconds"; "required": false; }; "customRanges": { "alias": "customRanges"; "required": false; }; "multiDateSelection": { "alias": "multiDateSelection"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "opens": { "alias": "opens"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "isDisplayCrossIcon": { "alias": "isDisplayCrossIcon"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "displayFormat": { "alias": "displayFormat"; "required": false; }; }, { "selected": "selected"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
|
|
36
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@brickclay/calendar",
|
|
3
|
+
"version": "0.0.6",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^19.2.0",
|
|
6
|
+
"@angular/core": "^19.2.0",
|
|
7
|
+
"@angular/forms": "^19.2.0",
|
|
8
|
+
"moment": "^2.30.1",
|
|
9
|
+
"rxjs": "~7.8.0"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"tslib": "^2.3.0"
|
|
13
|
+
},
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"module": "fesm2022/brickclay-calendar.mjs",
|
|
16
|
+
"typings": "index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
"./package.json": {
|
|
19
|
+
"default": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./index.d.ts",
|
|
23
|
+
"default": "./fesm2022/brickclay-calendar.mjs"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
package/public-api.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './lib/calendar.service';
|
|
2
|
+
export * from './lib/calendar.component';
|
|
3
|
+
export * from './calendar/components/custom-calendar/custom-calendar.component';
|
|
4
|
+
export * from './calendar/components/scheduled-date-picker/scheduled-date-picker.component';
|
|
5
|
+
export * from './calendar/components/time-picker/time-picker.component';
|
|
6
|
+
export * from './calendar/calendar.module';
|
|
7
|
+
export * from './calendar/services/calendar-manager.service';
|