angular-hijri-gregorian-date-time-picker 1.5.0 → 1.5.1

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"angular-hijri-gregorian-date-time-picker.mjs","sources":["../../../projects/hijri-gregorian-datepicker/src/_services/date-utilities.service.ts","../../../projects/hijri-gregorian-datepicker/src/lib/hijri-gregorian-datepicker.component.ts","../../../projects/hijri-gregorian-datepicker/src/lib/hijri-gregorian-datepicker.component.html","../../../projects/hijri-gregorian-datepicker/src/lib/hijri-gregorian-datepicker.module.ts","../../../projects/hijri-gregorian-datepicker/src/public-api.ts","../../../projects/hijri-gregorian-datepicker/src/angular-hijri-gregorian-date-time-picker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as datesDictionary from '../_data/dictionary.json';\nimport { Data, DayInfo, MonthDays } from '../_interfaces/calendar-model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DateUtilitiesService {\n public calendarData: Data;\n\n constructor() {\n this.calendarData = (datesDictionary as any)['default']; //prod\n // this.calendarData = datesDictionary; //debug\n }\n\n parseDate(dateStr: string): Date | null {\n if (!dateStr) {\n return null;\n }\n const parts = dateStr?.split('/');\n if (parts.length !== 3) {\n return null;\n }\n const [day, month, year] = parts.map(Number);\n if (\n isNaN(day) ||\n isNaN(month) ||\n isNaN(year) ||\n day < 1 ||\n day > 31 ||\n month < 1 ||\n month > 12 ||\n year < 1\n ) {\n return null;\n }\n return new Date(year, month - 1, day);\n }\n\n formatDate(date: Date): string {\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return `${day}/${month}/${year}`;\n }\n\n getDayShortHand(date: Date): string {\n return date.toLocaleString('en-US', { weekday: 'short' });\n }\n\n generateDates(fD: DayInfo, lD: DayInfo, uC: number): MonthDays {\n const startDate = this.parseDate(fD?.gD);\n const endDate = this.parseDate(lD?.gD);\n const daysInMonth: MonthDays = [];\n let currentGregorianDate = new Date(startDate);\n let currentUmmAlQuraDay = parseInt(fD?.uD?.split('/')[0]);\n let currentUmmAlQuraMonth = parseInt(fD?.uD?.split('/')[1]);\n let currentUmmAlQuraYear = parseInt(fD?.uD?.split('/')[2]);\n let daysInCurrentUmmAlQuraMonth = uC;\n while (currentGregorianDate <= endDate) {\n const ummAlQuraDate = `${currentUmmAlQuraDay\n .toString()\n .padStart(2, '0')}/${currentUmmAlQuraMonth\n .toString()\n .padStart(2, '0')}/${currentUmmAlQuraYear}`;\n daysInMonth.push({\n gD: this.formatDate(currentGregorianDate),\n uD: ummAlQuraDate,\n dN: this.getDayShortHand(currentGregorianDate),\n uC: 0,\n });\n currentGregorianDate.setDate(currentGregorianDate.getDate() + 1);\n currentUmmAlQuraDay += 1;\n if (currentUmmAlQuraDay > daysInCurrentUmmAlQuraMonth) {\n currentUmmAlQuraDay = 1;\n currentUmmAlQuraMonth += 1;\n if (currentUmmAlQuraMonth > 12) {\n currentUmmAlQuraMonth = 1;\n currentUmmAlQuraYear += 1;\n }\n const nextMonthData =\n this.calendarData[currentUmmAlQuraYear.toString()]?.[\n currentUmmAlQuraMonth.toString()\n ];\n daysInCurrentUmmAlQuraMonth = nextMonthData ? nextMonthData.fD.uC : 30;\n }\n }\n return daysInMonth;\n }\n\n convertDate(dateStr: string, isGregorian: boolean): DayInfo | null {\n if (!dateStr) return null;\n\n if (isGregorian) {\n // Preprocess Gregorian date\n const gregorianDate = this.parseDate(dateStr);\n if (!gregorianDate) return null;\n const formattedDate = this.formatDate(gregorianDate);\n\n for (const yearKey in this.calendarData) {\n for (const monthKey in this.calendarData[yearKey]) {\n const monthData = this.calendarData[yearKey][monthKey];\n\n if (\n this.isDateInMonthRange(\n formattedDate,\n monthData.fD?.gD,\n monthData.lD?.gD\n )\n ) {\n const daysInMonth = this.generateDates(\n monthData.fD,\n monthData.lD,\n monthData.fD?.uC\n );\n\n const dayMatch = daysInMonth.find((d) => d.gD === formattedDate);\n if (dayMatch) return dayMatch;\n }\n }\n }\n } else {\n const [day, month, year] = dateStr.split('/').map(Number);\n\n if (isNaN(day) || isNaN(month) || isNaN(year)) return null;\n\n for (const yearKey in this.calendarData) {\n for (const monthKey in this.calendarData[yearKey]) {\n const monthData = this.calendarData[yearKey][monthKey];\n\n if (\n this.isDateInMonthRange(\n `${day}/${month}/${year}`,\n monthData.fD?.uD,\n monthData.lD?.uD\n )\n ) {\n const daysInMonth = this.generateDates(\n monthData.fD,\n monthData.lD,\n monthData.fD?.uC\n );\n\n const dayMatch = daysInMonth.find((d) => {\n const [uDay, uMonth, uYear] = d?.uD?.split('/').map(Number);\n return uDay === day && uMonth === month && uYear === year;\n });\n\n if (dayMatch) return dayMatch;\n }\n }\n }\n }\n\n return null;\n }\n\n private isDateInMonthRange(\n dateToCheck: string,\n monthStartDate: string | undefined,\n monthEndDate: string | undefined\n ): boolean {\n if (!monthStartDate || !monthEndDate) return false;\n\n const checkDate = this.parseDate(dateToCheck);\n const startDate = this.parseDate(monthStartDate);\n const endDate = this.parseDate(monthEndDate);\n\n if (!checkDate || !startDate || !endDate) return false;\n\n return checkDate >= startDate && checkDate <= endDate;\n }\n\n getMonthData(inputDate: string, type: string): DayInfo[] | null {\n const [day, month, year] = inputDate?.split('/').map(Number);\n let isGregorian: boolean;\n if (type == 'greg') {\n isGregorian = true;\n } else {\n isGregorian = false;\n }\n if (isGregorian) {\n return this.getGregorianMonthData(day, month, year);\n } else {\n return this.getUmAlQurraMonthData(day, month, year);\n }\n }\n\n getGregorianMonthData(\n day: number,\n month: number,\n year: number\n ): DayInfo[] | null {\n const yearData = this.calendarData[year];\n if (!yearData) return null;\n const monthData = yearData[month];\n if (!monthData) return null;\n const monthArray: DayInfo[] = [];\n const endDate = new Date(year, month, 0);\n for (let d = 1; d <= endDate.getDate(); d++) {\n const offset = d - 1;\n\n monthArray.push({\n gD: `${d.toString().padStart(2, '0')}/${month\n .toString()\n .padStart(2, '0')}/${year}`,\n uD: this.calculateUmAlQurraDate(\n monthData.fD.uD,\n offset,\n monthData.fD.uC\n ),\n dN: this.getDayName(new Date(year, month - 1, d).getDay()),\n uC: monthData.fD.uC,\n });\n }\n\n return monthArray;\n }\n\n getUmAlQurraMonthData(\n day: number,\n month: number,\n year: number\n ): DayInfo[] | null {\n for (const gregorianYear in this.calendarData) {\n const yearData = this.calendarData[parseInt(gregorianYear)];\n\n for (const monthIndex in yearData) {\n const monthData = yearData[parseInt(monthIndex)];\n const [fDay, fMonth, fYear] = monthData?.fD?.uD?.split('/').map(Number);\n\n if (fYear === year && fMonth === month) {\n const totalDays = monthData.fD.uC;\n const monthArray: DayInfo[] = [];\n const umAlQurraStartDate = `01/${month\n .toString()\n .padStart(2, '0')}/${year}`;\n const dayDifference = fDay - 1;\n\n const startGregorianDate = this.calculateGregorianDate(\n monthData.fD.gD,\n -dayDifference\n );\n\n for (let i = 0; i < totalDays; i++) {\n const uDate = this.calculateUmAlQurraDate(\n umAlQurraStartDate,\n i,\n totalDays\n );\n const gDate = this.calculateGregorianDate(startGregorianDate, i);\n const [gDay, gMonth, gYear] = gDate?.split('/').map(Number);\n const dayName = this.getDayName(\n new Date(gYear, gMonth - 1, gDay).getDay()\n );\n\n monthArray.push({\n gD: gDate,\n uD: uDate,\n dN: dayName,\n uC: totalDays,\n });\n }\n\n return monthArray;\n }\n }\n }\n\n return null;\n }\n\n calculateGregorianDate(startGDate: string, offset: number): string {\n const [day, month, year] = startGDate?.split('/').map(Number);\n const newDate = new Date(year, month - 1, day + offset);\n\n return `${newDate.getDate().toString().padStart(2, '0')}/${(\n newDate.getMonth() + 1\n )\n .toString()\n .padStart(2, '0')}/${newDate.getFullYear()}`;\n }\n\n calculateUmAlQurraDate(\n startUDate: string,\n offset: number,\n uC: number\n ): string {\n const [day, month, year] = startUDate?.split('/').map(Number);\n\n let newDay = day + offset;\n let newMonth = month;\n let newYear = year;\n\n while (newDay > uC) {\n newDay -= uC;\n newMonth += 1;\n }\n\n while (newMonth > 12) {\n newMonth = 1;\n newYear += 1;\n }\n\n return `${newDay.toString().padStart(2, '0')}/${newMonth\n .toString()\n .padStart(2, '0')}/${newYear}`;\n }\n\n getDayName(dayIndex: number): string {\n const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n return days[dayIndex];\n }\n\n /// Check date is it in past or future\n checkPastOrFuture(inputDate: any, targetDate: any) {\n if (inputDate) {\n const [day, month, year] = inputDate?.split('/').map(Number);\n const dateToCheck = new Date(year, month - 1, day);\n const today = targetDate;\n today.setHours(0, 0, 0, 0);\n if (dateToCheck > today) {\n return 'Future';\n } else if (dateToCheck < today) {\n return 'Past';\n } else {\n return 'Today';\n }\n }\n }\n\n /// Convert english numbers to arabic equivalent\n parseEnglish(englishNum: any) {\n if (!englishNum) return englishNum;\n const numStr = String(englishNum);\n const arabicNumbers = [\n '\\u0660',\n '\\u0661',\n '\\u0662',\n '\\u0663',\n '\\u0664',\n '\\u0665',\n '\\u0666',\n '\\u0667',\n '\\u0668',\n '\\u0669',\n ];\n return numStr.replace(/[0-9]/g, (digit) => {\n return arabicNumbers[Number(digit)] || digit;\n });\n }\n\n /// Convert arabic numbers to english equivalent\n parseArabic(arabicNum: any) {\n return arabicNum.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d: string) {\n return d.charCodeAt(0) - 1632;\n });\n }\n\n ///\n convertDateNumerals(date: string, targetLang: 'en' | 'ar'): string {\n const arabicNumbers = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n const englishNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n\n const toArabic = (value: string) =>\n value\n .split('')\n .map((char) => (/\\d/.test(char) ? arabicNumbers[+char] : char))\n .join('');\n\n const toEnglish = (value: string) =>\n value\n .split('')\n .map((char) => {\n const index = arabicNumbers.indexOf(char);\n return index > -1 ? englishNumbers[index] : char;\n })\n .join('');\n\n if (targetLang === 'ar') {\n const [day, month, year] = date.split('/');\n return `${toArabic(year)}/${toArabic(month)}/${toArabic(day)}`;\n } else {\n const [year, month, day] = date.split('/');\n return `${toEnglish(day)}/${toEnglish(month)}/${toEnglish(year)}`;\n }\n }\n\n /**\n * Normalize input date to DD/MM/YYYY string format (Gregorian)\n * Accepts Date object or DD/MM/YYYY string\n */\n normalizeDateToString(date: Date | string | undefined): string | null {\n if (!date) return null;\n\n if (date instanceof Date) {\n return this.formatDate(date);\n }\n\n // Already a string - validate format\n const parsed = this.parseDate(date);\n return parsed ? this.formatDate(parsed) : null;\n }\n\n /**\n * Compare two dates (Gregorian format DD/MM/YYYY)\n * Returns: -1 if date1 < date2, 0 if equal, 1 if date1 > date2\n */\n compareDates(date1Str: string, date2Str: string): number {\n const d1 = this.parseDate(date1Str);\n const d2 = this.parseDate(date2Str);\n\n if (!d1 || !d2) return 0;\n\n if (d1 < d2) return -1;\n if (d1 > d2) return 1;\n return 0;\n }\n\n /**\n * Compare two Hijri dates (UM format DD/MM/YYYY)\n * Converts to Gregorian for comparison\n */\n compareHijriDates(hijri1: string, hijri2: string): number {\n const day1 = this.convertDate(hijri1, false);\n const day2 = this.convertDate(hijri2, false);\n\n if (!day1?.gD || !day2?.gD) return 0;\n\n return this.compareDates(day1.gD, day2.gD);\n }\n\n /**\n * Check if a date is within the specified range (inclusive)\n * All dates in Gregorian DD/MM/YYYY format\n */\n isDateInRange(\n dateStr: string,\n minDateStr: string | null,\n maxDateStr: string | null\n ): boolean {\n if (!dateStr) return false;\n\n // If no constraints, date is valid\n if (!minDateStr && !maxDateStr) return true;\n\n // Check minimum constraint\n if (minDateStr && this.compareDates(dateStr, minDateStr) < 0) {\n return false;\n }\n\n // Check maximum constraint\n if (maxDateStr && this.compareDates(dateStr, maxDateStr) > 0) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Check if a Hijri date is within the specified range\n * Converts to Gregorian for comparison\n */\n isHijriDateInRange(\n hijriDateStr: string,\n minDateStr: string | null,\n maxDateStr: string | null\n ): boolean {\n if (!hijriDateStr) return false;\n\n const dayInfo = this.convertDate(hijriDateStr, false);\n if (!dayInfo?.gD) return false;\n\n return this.isDateInRange(dayInfo.gD, minDateStr, maxDateStr);\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n Output,\n EventEmitter,\n HostBinding,\n OnChanges,\n SimpleChanges,\n AfterViewInit,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { stylesConfig } from '../_interfaces/styles-config.model';\nimport { DateUtilitiesService } from '../_services/date-utilities.service';\nimport { TodayDate, DayInfo } from '../_interfaces/calendar-model';\nimport * as themesConfig from '../themes/themes.json';\n@Component({\n selector: 'hijri-gregorian-datepicker',\n templateUrl: './hijri-gregorian-datepicker.component.html',\n styleUrls: ['./hijri-gregorian-datepicker.component.scss'],\n})\nexport class HijriGregorianDatepickerComponent implements OnInit, OnChanges, AfterViewInit {\n /// Inputs\n @Input() markToday: boolean = true;\n @Input() canChangeMode: boolean = true;\n @Input() todaysDateSection: boolean = true;\n @Input() futureValidation: boolean = true;\n @Input() disableYearPicker: boolean = false;\n @Input() disableMonthPicker: boolean = false;\n @Input() disableDayPicker: boolean = false;\n @Input() multiple: boolean = false;\n @Input() isRequired: boolean = false;\n @Input() showConfirmButton: boolean = true;\n @Input() futureValidationMessage: boolean = false;\n @Input() arabicLayout: boolean = false;\n @Input() mode: string = 'greg';\n @Input() dir: string = 'ltr';\n @Input() locale: string = 'en';\n @Input() submitTextButton: string = 'Confirm';\n @Input() todaysDateText: string = \"Today's Date\";\n @Input() ummAlQuraDateText: string = 'Hijri Date';\n @Input() monthSelectLabel: string = 'Month';\n @Input() yearSelectLabel: string = 'Year';\n @Input() futureValidationMessageEn: string;\n @Input() futureValidationMessageAr: string;\n @Input() theme?: string = '';\n @Input() pastYearsLimit: number = 90;\n @Input() futureYearsLimit: number = 0;\n @Input() styles?: stylesConfig = {};\n\n // New inputs for extended functionality\n @Input() enableTime: boolean = false; // Enable time picker (hours & minutes)\n @Input() minDate?: Date | string; // Minimum allowed date (Gregorian Date or DD/MM/YYYY string)\n @Input() maxDate?: Date | string; // Maximum allowed date (Gregorian Date or DD/MM/YYYY string)\n @Input() initialDate?: Date | string; // Initial date to navigate to when picker opens\n \n // Range selection initial dates\n @Input() initialRangeStart?: Date | string; // Initial start date for range selection\n @Input() initialRangeEnd?: Date | string; // Initial end date for range selection\n \n // BACKWARD COMPATIBILITY: Default to false (24-hour format)\n // When true, displays 12-hour format with AM/PM toggle\n @Input() useMeridian: boolean = false; // Enable 12-hour format with AM/PM\n \n // BACKWARD COMPATIBILITY: Default to 'single' (existing behavior)\n // 'range' enables range selection mode (first click = start, second click = end)\n @Input() selectionMode: 'single' | 'range' = 'single';\n /// Outputs\n @Output() onSubmit = new EventEmitter<object>();\n @Output() onDaySelect = new EventEmitter<object>();\n @Output() onMonthChange = new EventEmitter<object>();\n @Output() onYearChange = new EventEmitter<object>();\n /// Variables\n ummAlQuraMonths = [\n { labelAr: 'محرم', labelEn: 'Muharram', value: 1 },\n { labelAr: 'صفر', labelEn: 'Safar', value: 2 },\n { labelAr: 'ربيع الأول', labelEn: 'Rabi al-Awwal', value: 3 },\n { labelAr: 'ربيع الثاني', labelEn: 'Rabi al-Thani', value: 4 },\n { labelAr: 'جمادى الأولى', labelEn: 'Jumada al-Awwal', value: 5 },\n { labelAr: 'جمادى الآخرة', labelEn: 'Jumada al-Thani', value: 6 },\n { labelAr: 'رجب', labelEn: 'Rajab', value: 7 },\n { labelAr: 'شعبان', labelEn: 'Shaban', value: 8 },\n { labelAr: 'رمضان', labelEn: 'Ramadan', value: 9 },\n { labelAr: 'شوال', labelEn: 'Shawwal', value: 10 },\n { labelAr: 'ذو القعدة', labelEn: 'Dhu al-Qadah', value: 11 },\n { labelAr: 'ذو الحجة', labelEn: 'Dhu al-Hijjah', value: 12 },\n ];\n gregMonths = [\n { labelAr: 'يناير', labelEn: 'January', value: 1 },\n { labelAr: 'فبراير', labelEn: 'February', value: 2 },\n { labelAr: 'مارس', labelEn: 'March', value: 3 },\n { labelAr: 'ابريل', labelEn: 'April', value: 4 },\n { labelAr: 'مايو', labelEn: 'May', value: 5 },\n { labelAr: 'يونيو', labelEn: 'June', value: 6 },\n { labelAr: 'يوليو', labelEn: 'July', value: 7 },\n { labelAr: 'اغسطس', labelEn: 'August', value: 8 },\n { labelAr: 'سبتمبر', labelEn: 'September', value: 9 },\n { labelAr: 'اكتوبر', labelEn: 'October', value: 10 },\n { labelAr: 'نوفمبر', labelEn: 'November', value: 11 },\n { labelAr: 'ديسمبر', labelEn: 'December', value: 12 },\n ];\n ummAlQuraYear: number;\n gregYear: number;\n years: any[];\n weeks: any[];\n months: any[];\n weekdaysEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n weekdaysAr = ['سبت', 'جمعة', 'خميس', 'أربعاء', 'ثلاثاء', 'اثنين', 'أحد'];\n // weekdaysAr = ['س', 'ج', 'خ', 'أر', 'ث', 'إث', 'أح'];\n todaysDate: TodayDate = {};\n selectedDay: DayInfo;\n periodForm: UntypedFormGroup;\n multipleSelectedDates = [] as DayInfo[];\n themes = [] as any;\n\n // Time picker variables\n // BACKWARD COMPATIBILITY: selectedTime defaults to 0:0 to preserve existing behavior when enableTime=false\n // When enableTime=true, this will be initialized to current system time in ngOnInit\n selectedTime: { hour: number; minute: number } = { hour: 0, minute: 0 };\n \n // Track if time has been initialized to avoid re-initializing at midnight\n private timeInitialized: boolean = false;\n \n // BACKWARD COMPATIBILITY: Meridian only used when useMeridian=true\n // Tracks AM/PM state for 12-hour format\n meridian: 'AM' | 'PM' = 'AM';\n \n // Range selection state\n // BACKWARD COMPATIBILITY: These are only used when selectionMode='range'\n // They do not affect single or multiple selection modes\n rangeStart?: DayInfo = undefined;\n rangeEnd?: DayInfo = undefined;\n\n @HostBinding('style.font-family') fontFamilyStyle: string;\n constructor(\n public formBuilder: UntypedFormBuilder,\n public _dateUtilsService: DateUtilitiesService\n ) {}\n\n ngOnInit(): void {\n this.initTheme();\n this.initializeForm();\n this.getTodaysDateInfo();\n this.initializeYearsAndMonths();\n\n // Initialize time from current system time or initialDate\n // BACKWARD COMPATIBILITY: This only runs when enableTime=true\n if (this.enableTime) {\n this.initializeTime();\n }\n }\n\n ngAfterViewInit(): void {\n // Double-check time initialization after view is ready\n // This handles cases where enableTime might be set after ngOnInit\n if (this.enableTime && !this.timeInitialized) {\n this.initializeTime();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes['mode'].isFirstChange()) {\n this.changeCalendarMode();\n }\n }\n\n initTheme() {\n if (this.theme != '') {\n this.themes = themesConfig;\n for (const themeItem of this.themes['default']) {\n if (themeItem.name == this.theme) {\n this.styles = themeItem.stylesConfig;\n break;\n }\n }\n }\n this.fontFamilyStyle = this.styles.fontFamily;\n }\n\n /// Initialize form control for month and year select\n initializeForm() {\n this.periodForm = this.formBuilder.group({\n year: [{ value: '', disabled: this.disableYearPicker }, []],\n month: [{ value: '', disabled: this.disableMonthPicker }, []],\n });\n }\n\n // Initialize years and months for calendar\n initializeYearsAndMonths() {\n this.years = [];\n this.months = [];\n\n // Determine the date to use for initialization (initialDate or today)\n let referenceDate: string;\n if (this.initialDate) {\n const normalizedInitialDate =\n this._dateUtilsService.normalizeDateToString(this.initialDate);\n if (normalizedInitialDate) {\n if (this.mode == 'greg') {\n referenceDate = normalizedInitialDate;\n } else {\n const hijriDate = this._dateUtilsService.convertDate(\n normalizedInitialDate,\n true\n );\n referenceDate = hijriDate?.uD || this.todaysDate.ummAlQura;\n }\n } else {\n referenceDate =\n this.mode == 'greg'\n ? this.todaysDate.gregorian\n : this.todaysDate.ummAlQura;\n }\n } else {\n referenceDate =\n this.mode == 'greg'\n ? this.todaysDate.gregorian\n : this.todaysDate.ummAlQura;\n }\n\n if (this.mode == 'greg') {\n this.gregYear =\n this.futureYearsLimit == 0\n ? Number(referenceDate?.split('/')[2])\n : Number(referenceDate?.split('/')[2]) + this.futureYearsLimit;\n for (let i = 0; i < this.gregYear; i++) {\n if (i < this.pastYearsLimit) {\n let val = this.gregYear--;\n this.years.push(val);\n } else {\n break;\n }\n }\n this.months = this.gregMonths;\n } else {\n this.ummAlQuraYear =\n this.futureYearsLimit == 0\n ? Number(referenceDate?.split('/')[2])\n : Number(referenceDate?.split('/')[2]) + this.futureYearsLimit;\n for (let i = 0; i < this.ummAlQuraYear; i++) {\n if (i < this.pastYearsLimit) {\n let val = this.ummAlQuraYear--;\n this.years.push(val);\n } else {\n break;\n }\n }\n this.months = this.ummAlQuraMonths;\n }\n this.years.map((year: any) => {\n if (year == referenceDate?.split('/')[2]) {\n this.periodForm.controls['year'].setValue(year);\n }\n });\n this.months.map((month: any) => {\n if (month.value == referenceDate?.split('/')[1]) {\n this.periodForm.controls['month'].setValue(month.value);\n }\n });\n }\n\n /// On change event of years and months\n onPeriodChange(type: string) {\n if (type == 'year') {\n this.onYearChange.emit(this.periodForm.controls['year'].value);\n } else {\n this.onMonthChange.emit(this.periodForm.controls['month'].value);\n }\n const days = this._dateUtilsService.getMonthData(\n '01/' +\n this.periodForm.controls['month'].value +\n '/' +\n this.periodForm.controls['year'].value,\n this.mode\n );\n this.weeks = this.generateWeeksArray(days);\n }\n\n /// Get todays(greg and umm al qura) date info\n getTodaysDateInfo() {\n this.todaysDate.gregorian = this._dateUtilsService.formatDate(new Date());\n this.todaysDate.ummAlQura = this._dateUtilsService.convertDate(\n this.todaysDate.gregorian,\n true\n )?.uD;\n\n // Use initialDate if provided, otherwise use today's date\n let dateToNavigate: string;\n\n if (this.initialDate) {\n // Normalize initialDate to DD/MM/YYYY format\n const normalizedInitialDate =\n this._dateUtilsService.normalizeDateToString(this.initialDate);\n\n if (normalizedInitialDate) {\n if (this.mode == 'greg') {\n dateToNavigate = normalizedInitialDate;\n } else {\n // Convert to Hijri for ummAlQura mode\n const hijriDate = this._dateUtilsService.convertDate(\n normalizedInitialDate,\n true\n );\n dateToNavigate = hijriDate?.uD || this.todaysDate.ummAlQura;\n }\n } else {\n // Invalid initialDate, fall back to today\n dateToNavigate =\n this.mode == 'greg'\n ? this.todaysDate.gregorian\n : this.todaysDate.ummAlQura;\n }\n } else {\n // No initialDate provided, use today\n dateToNavigate =\n this.mode == 'greg'\n ? this.todaysDate.gregorian\n : this.todaysDate.ummAlQura;\n }\n\n this.generatetMonthData(dateToNavigate);\n \n // Highlight initialDate or initialRange if provided\n if (this.selectionMode === 'range' && (this.initialRangeStart || this.initialRangeEnd)) {\n this.highlightInitialRange();\n } else if (this.initialDate) {\n this.highlightInitialDate();\n }\n }\n\n /// Generate month days from JSON\n generatetMonthData(date: string) {\n const days = this._dateUtilsService.getMonthData(date, this.mode);\n this.weeks = this.generateWeeksArray(days);\n }\n\n /// Highlight initialDate on the calendar\n private highlightInitialDate() {\n if (!this.initialDate) {\n return;\n }\n\n const normalizedInitialDate =\n this._dateUtilsService.normalizeDateToString(this.initialDate);\n\n if (!normalizedInitialDate) {\n return;\n }\n\n // Find the day in the weeks array that matches initialDate\n for (const week of this.weeks) {\n for (const day of week) {\n if (day && day.gD === normalizedInitialDate) {\n // Don't select if date is disabled\n if (!this.isDateDisabled(day)) {\n // Mark as selected without triggering events\n day.selected = true;\n \n // Set as selectedDay based on selection mode\n if (this.selectionMode === 'range') {\n this.rangeStart = day;\n } else if (this.multiple) {\n this.multipleSelectedDates = [day];\n } else {\n this.selectedDay = day;\n }\n \n // Initialize time if enableTime is active\n if (this.enableTime && !this.timeInitialized) {\n this.initializeTime();\n }\n \n // Attach time to the day if it's a Date object with time\n if (this.enableTime && this.initialDate instanceof Date) {\n day.time = {\n hour: this.initialDate.getHours(),\n minute: this.initialDate.getMinutes()\n };\n }\n }\n return;\n }\n }\n }\n }\n\n /// Highlight initial range (start and end dates) on the calendar\n private highlightInitialRange() {\n if (!this.initialRangeStart && !this.initialRangeEnd) {\n return;\n }\n\n const normalizedStartDate = this.initialRangeStart\n ? this._dateUtilsService.normalizeDateToString(this.initialRangeStart)\n : null;\n const normalizedEndDate = this.initialRangeEnd\n ? this._dateUtilsService.normalizeDateToString(this.initialRangeEnd)\n : null;\n\n let startDay: DayInfo | null = null;\n let endDay: DayInfo | null = null;\n\n // Find both start and end dates in the weeks array\n for (const week of this.weeks) {\n for (const day of week) {\n if (day && normalizedStartDate && day.gD === normalizedStartDate) {\n if (!this.isDateDisabled(day)) {\n startDay = day;\n }\n }\n if (day && normalizedEndDate && day.gD === normalizedEndDate) {\n if (!this.isDateDisabled(day)) {\n endDay = day;\n }\n }\n }\n }\n\n // Set range start\n if (startDay) {\n startDay.selected = true;\n this.rangeStart = startDay;\n this.selectedDay = startDay;\n \n // Initialize and attach time to start date\n if (this.enableTime) {\n if (!this.timeInitialized) {\n this.initializeTime();\n }\n if (this.initialRangeStart instanceof Date) {\n startDay.time = {\n hour: this.initialRangeStart.getHours(),\n minute: this.initialRangeStart.getMinutes()\n };\n } else {\n startDay.time = { ...this.selectedTime };\n }\n }\n }\n\n // Set range end if provided\n if (endDay && startDay) {\n // Swap if end is before start\n const startDate = this.parseDateString(startDay.gD);\n const endDate = this.parseDateString(endDay.gD);\n \n if (endDate && startDate && endDate < startDate) {\n // Swap\n this.rangeEnd = startDay;\n this.rangeStart = endDay;\n endDay.selected = true;\n } else {\n this.rangeEnd = endDay;\n }\n \n // Attach time to end date (inherit from start)\n if (this.enableTime) {\n const timeToUse = this.rangeStart.time || { ...this.selectedTime };\n if (this.initialRangeEnd instanceof Date) {\n this.rangeEnd.time = {\n hour: this.initialRangeEnd.getHours(),\n minute: this.initialRangeEnd.getMinutes()\n };\n } else {\n this.rangeEnd.time = { ...timeToUse };\n }\n // Ensure start also has time\n this.rangeStart.time = { ...timeToUse };\n }\n \n // Highlight the range\n this.highlightRange();\n this.selectedDay = this.rangeEnd;\n }\n }\n\n /// Generate month weeks\n generateWeeksArray(daysArray: any) {\n const firstDayName = daysArray[0]?.dN;\n const startIndex = this.weekdaysEn.indexOf(firstDayName);\n const weeks = [[]] as any;\n let currentWeek = 0;\n let currentDayIndex = startIndex;\n\n daysArray?.forEach((day: any) => {\n if (!weeks[currentWeek]) {\n weeks[currentWeek] = [];\n }\n\n weeks[currentWeek][currentDayIndex] = day;\n currentDayIndex++;\n\n if (currentDayIndex === 7) {\n currentDayIndex = 0;\n currentWeek++;\n }\n });\n weeks.forEach((week: any) => {\n while (week.length < 7) {\n week.push({});\n }\n });\n return weeks;\n }\n\n /// Change calendar mode 'greg' or 'ummAlQura'\n changeCalendarMode() {\n this.mode = this.mode == 'greg' ? 'ummAlQura' : 'greg';\n this.initializeYearsAndMonths();\n this.generatetMonthData(\n '01/' +\n this.periodForm.controls['month'].value +\n '/' +\n this.periodForm.controls['year'].value\n );\n }\n\n /// On day clicked handler\n onDayClicked(day: DayInfo) {\n if (day && day?.gD) {\n // Check if day is disabled by min/max constraints\n if (this.isDateDisabled(day)) {\n return; // Don't allow selection of disabled dates\n }\n\n if (this.futureValidation) {\n if (this.checkFutureValidation(day)) {\n this.futureValidationMessage = true;\n } else {\n this.futureValidationMessage = false;\n this.markDaySelected(day);\n }\n } else {\n this.markDaySelected(day);\n }\n }\n }\n\n /// Mark day as selected\n markDaySelected(dayInfo: DayInfo) {\n // BACKWARD COMPATIBILITY: Range selection only when selectionMode='range'\n if (this.selectionMode === 'range') {\n this.handleRangeSelection(dayInfo);\n return;\n }\n \n // BACKWARD COMPATIBILITY: Original behavior for single/multiple selection\n if (dayInfo.selected) {\n dayInfo.selected = false;\n this.multipleSelectedDates = this.multipleSelectedDates.filter(\n (day) => day !== dayInfo\n );\n if (!this.multiple) {\n this.selectedDay = undefined;\n }\n } else {\n if (!this.multiple) {\n this.weeks.forEach((week: any) => {\n week.forEach((day: DayInfo) => {\n day.selected = false;\n });\n });\n\n dayInfo.selected = true;\n this.selectedDay = dayInfo;\n this.multipleSelectedDates = [dayInfo];\n\n // Attach current time if enableTime is active\n if (this.enableTime) {\n // Ensure time is initialized before attaching\n if (!this.timeInitialized) {\n this.initializeTime();\n }\n dayInfo.time = { ...this.selectedTime };\n }\n\n this.onDaySelect.emit(dayInfo);\n } else {\n dayInfo.selected = true;\n\n // Attach current time if enableTime is active\n if (this.enableTime) {\n // Ensure time is initialized before attaching\n if (!this.timeInitialized) {\n this.initializeTime();\n }\n dayInfo.time = { ...this.selectedTime };\n }\n\n this.onDaySelect.emit(dayInfo);\n if (!this.multipleSelectedDates.includes(dayInfo)) {\n this.multipleSelectedDates.push(dayInfo);\n }\n }\n }\n }\n\n /**\n * Handle range selection logic\n * BACKWARD COMPATIBILITY: Only called when selectionMode='range'\n * \n * Range selection lifecycle:\n * 1. First click → Sets rangeStart\n * 2. Second click → Sets rangeEnd, highlights range\n * 3. Third click → Resets range, starts new selection\n */\n private handleRangeSelection(dayInfo: DayInfo): void {\n // First click or resetting range\n if (!this.rangeStart || (this.rangeStart && this.rangeEnd)) {\n this.resetRange();\n this.rangeStart = dayInfo;\n dayInfo.selected = true;\n this.selectedDay = dayInfo;\n \n // Attach current time if enableTime is active\n if (this.enableTime) {\n // Ensure selectedTime is initialized\n // If time hasn't been initialized yet, initialize it now\n if (!this.timeInitialized) {\n this.initializeTime();\n }\n dayInfo.time = { ...this.selectedTime };\n }\n \n this.onDaySelect.emit({ start: dayInfo, end: null });\n }\n // Second click - complete the range\n else if (this.rangeStart && !this.rangeEnd) {\n const startDate = this.parseDateString(this.rangeStart.gD);\n const endDate = this.parseDateString(dayInfo.gD);\n \n // Swap if end is before start\n if (endDate && startDate && endDate < startDate) {\n this.rangeEnd = this.rangeStart;\n this.rangeStart = dayInfo;\n } else {\n this.rangeEnd = dayInfo;\n }\n \n // Attach time if enableTime is active\n // IMPORTANT: Range end inherits time from range start (not current selectedTime)\n if (this.enableTime) {\n // Use rangeStart's time if it exists, otherwise use current selectedTime\n const timeToUse = this.rangeStart.time || { ...this.selectedTime };\n this.rangeStart.time = { ...timeToUse };\n this.rangeEnd.time = { ...timeToUse };\n }\n \n this.highlightRange();\n this.selectedDay = this.rangeEnd;\n \n this.onDaySelect.emit({ start: this.rangeStart, end: this.rangeEnd });\n }\n }\n\n /// On confirm button clicked\n onConfirmClicked() {\n // BACKWARD COMPATIBILITY: Range selection output when selectionMode='range'\n if (this.selectionMode === 'range') {\n if (this.rangeStart && this.rangeEnd) {\n // Collect all dates in range\n const rangeDates: DayInfo[] = [];\n this.weeks.forEach((week: any) => {\n week.forEach((day: DayInfo) => {\n if (day && day.gD && (this.isInRange(day) || this.isRangeStart(day) || this.isRangeEnd(day))) {\n // Attach current time if enableTime is active\n if (this.enableTime && !day.time) {\n day.time = { ...this.selectedTime };\n }\n rangeDates.push(day);\n }\n });\n });\n \n this.onSubmit.emit({ \n start: this.rangeStart, \n end: this.rangeEnd,\n dates: rangeDates \n });\n } else {\n // Incomplete range\n this.onSubmit.emit({ start: this.rangeStart, end: null, dates: [] });\n }\n return;\n }\n \n // BACKWARD COMPATIBILITY: Original behavior for multiple/single selection\n if (this.multiple) {\n // For multiple dates, attach time to each if enableTime is active\n if (this.enableTime) {\n this.multipleSelectedDates.forEach((day) => {\n if (!day.time) {\n day.time = { ...this.selectedTime };\n }\n });\n }\n this.onSubmit.emit(this.multipleSelectedDates);\n } else {\n // For single date, attach time if enableTime is active\n if (this.enableTime && this.selectedDay) {\n this.selectedDay.time = { ...this.selectedTime };\n }\n this.onSubmit.emit(this.selectedDay);\n }\n }\n\n /// Check if date from future\n checkFutureValidation(day: DayInfo) {\n if (\n this._dateUtilsService.checkPastOrFuture(day?.gD, new Date()) == 'Future'\n ) {\n return true;\n }\n }\n\n /// Check if passed day is today or not\n checkTodaysDate(day: DayInfo) {\n return (\n this.todaysDate?.gregorian == day?.gD ||\n this.todaysDate?.ummAlQura == day?.uD\n );\n }\n\n /**\n * Check if a day is disabled based on min/max date constraints\n * Works for both Gregorian and Hijri modes\n */\n isDateDisabled(day: DayInfo): boolean {\n if (!day || !day.gD) return true;\n\n // Normalize min/max dates to Gregorian DD/MM/YYYY format\n const minDateStr = this.minDate\n ? this._dateUtilsService.normalizeDateToString(this.minDate)\n : null;\n const maxDateStr = this.maxDate\n ? this._dateUtilsService.normalizeDateToString(this.maxDate)\n : null;\n\n // Check if the day's Gregorian date is within range\n return !this._dateUtilsService.isDateInRange(\n day.gD,\n minDateStr,\n maxDateStr\n );\n }\n\n /**\n * Initialize time from current system time or initialDate\n * BACKWARD COMPATIBILITY: Only called when enableTime=true\n *\n * Priority:\n * 1. If initialDate has time, use that\n * 2. If selectedDay has time, use that\n * 3. Otherwise, use current system time\n */\n initializeTime(): void {\n let timeSet = false;\n\n // Check if initialDate has time information\n if (this.initialDate && this.initialDate instanceof Date) {\n this.selectedTime = {\n hour: this.initialDate.getHours(),\n minute: this.initialDate.getMinutes(),\n };\n timeSet = true;\n }\n\n // If no time from initialDate, use current system time\n if (!timeSet) {\n const now = new Date();\n this.selectedTime = {\n hour: now.getHours(),\n minute: now.getMinutes(),\n };\n }\n \n // Mark that time has been initialized\n this.timeInitialized = true;\n \n // BACKWARD COMPATIBILITY: Only set meridian when useMeridian=true\n if (this.useMeridian) {\n this.meridian = this.selectedTime.hour >= 12 ? 'PM' : 'AM';\n }\n }\n\n /**\n * Increment hour value with wraparound (0-23)\n * BACKWARD COMPATIBILITY: Only available when enableTime=true\n */\n incrementHour(): void {\n this.selectedTime.hour = (this.selectedTime.hour + 1) % 24;\n this.updateSelectedDayTime();\n }\n\n /**\n * Decrement hour value with wraparound (0-23)\n * BACKWARD COMPATIBILITY: Only available when enableTime=true\n */\n decrementHour(): void {\n this.selectedTime.hour = (this.selectedTime.hour - 1 + 24) % 24;\n this.updateSelectedDayTime();\n }\n\n /**\n * Increment minute value with wraparound (0-59)\n * BACKWARD COMPATIBILITY: Only available when enableTime=true\n */\n incrementMinute(): void {\n this.selectedTime.minute = (this.selectedTime.minute + 1) % 60;\n this.updateSelectedDayTime();\n }\n\n /**\n * Decrement minute value with wraparound (0-59)\n * BACKWARD COMPATIBILITY: Only available when enableTime=true\n */\n decrementMinute(): void {\n this.selectedTime.minute = (this.selectedTime.minute - 1 + 60) % 60;\n this.updateSelectedDayTime();\n }\n\n /**\n * Handle keyboard input for hours\n * Validates and clamps to 0-23 range\n * BACKWARD COMPATIBILITY: Only available when enableTime=true\n */\n onHourInputChange(event: any): void {\n let value = parseInt(event.target.value, 10);\n\n if (isNaN(value) || value < 0) {\n value = 0;\n } else if (value > 23) {\n value = 23;\n }\n\n this.selectedTime.hour = value;\n event.target.value = value;\n this.updateSelectedDayTime();\n }\n\n /**\n * Handle keyboard input for minutes\n * Validates and clamps to 0-59 range\n * BACKWARD COMPATIBILITY: Only available when enableTime=true\n */\n onMinuteInputChange(event: any): void {\n let value = parseInt(event.target.value, 10);\n\n if (isNaN(value) || value < 0) {\n value = 0;\n } else if (value > 59) {\n value = 59;\n }\n\n this.selectedTime.minute = value;\n event.target.value = value;\n this.updateSelectedDayTime();\n }\n\n /**\n * Handle keyboard arrow keys for hour/minute input\n * BACKWARD COMPATIBILITY: Only available when enableTime=true\n */\n onTimeKeydown(event: KeyboardEvent, type: 'hour' | 'minute'): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hour') {\n this.incrementHour();\n } else {\n this.incrementMinute();\n }\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hour') {\n this.decrementHour();\n } else {\n this.decrementMinute();\n }\n }\n }\n\n /**\n * Update the selected day's time property when time changes\n * BACKWARD COMPATIBILITY: Only called when enableTime=true\n */\n private updateSelectedDayTime(): void {\n if (this.selectedDay) {\n this.selectedDay.time = { ...this.selectedTime };\n }\n }\n\n /**\n * Get display hour for 12-hour format\n * BACKWARD COMPATIBILITY: Only used when useMeridian=true\n * \n * Conversion:\n * - 0 (midnight) → 12 AM\n * - 1-11 (AM) → 1-11 AM\n * - 12 (noon) → 12 PM\n * - 13-23 (PM) → 1-11 PM\n * \n * IMPORTANT: Hour 0 is NEVER displayed as 0, always as 12\n */\n getDisplayHour(): number {\n if (!this.useMeridian) {\n return this.selectedTime.hour;\n }\n \n const hour = this.selectedTime.hour;\n \n // Midnight (0) → 12\n if (hour === 0) {\n return 12;\n }\n // 1-12 → 1-12 (no change)\n else if (hour <= 12) {\n return hour;\n }\n // 13-23 → 1-11 (subtract 12)\n else {\n return hour - 12;\n }\n }\n\n /**\n * Toggle AM/PM meridian\n * BACKWARD COMPATIBILITY: Only available when useMeridian=true\n * \n * When toggling:\n * - Adds or subtracts 12 hours\n * - Maintains internal 24-hour format\n */\n toggleMeridian(): void {\n if (this.meridian === 'AM') {\n this.meridian = 'PM';\n // Add 12 hours if not already in PM range\n if (this.selectedTime.hour < 12) {\n this.selectedTime.hour += 12;\n }\n } else {\n this.meridian = 'AM';\n // Subtract 12 hours if in PM range\n if (this.selectedTime.hour >= 12) {\n this.selectedTime.hour -= 12;\n }\n }\n this.updateSelectedDayTime();\n }\n\n /**\n * Increment hour in 12-hour mode\n * BACKWARD COMPATIBILITY: Only used when useMeridian=true\n */\n incrementHour12(): void {\n let displayHour = this.getDisplayHour();\n displayHour = (displayHour % 12) + 1; // 1-12 cycle\n \n // Convert back to 24-hour format\n if (this.meridian === 'AM') {\n this.selectedTime.hour = displayHour === 12 ? 0 : displayHour;\n } else {\n this.selectedTime.hour = displayHour === 12 ? 12 : displayHour + 12;\n }\n \n this.updateSelectedDayTime();\n }\n\n /**\n * Decrement hour in 12-hour mode\n * BACKWARD COMPATIBILITY: Only used when useMeridian=true\n */\n decrementHour12(): void {\n let displayHour = this.getDisplayHour();\n displayHour = displayHour === 1 ? 12 : displayHour - 1; // 1-12 cycle\n \n // Convert back to 24-hour format\n if (this.meridian === 'AM') {\n this.selectedTime.hour = displayHour === 12 ? 0 : displayHour;\n } else {\n this.selectedTime.hour = displayHour === 12 ? 12 : displayHour + 12;\n }\n \n this.updateSelectedDayTime();\n }\n\n /**\n * Handle 12-hour input change\n * BACKWARD COMPATIBILITY: Only used when useMeridian=true\n * \n * IMPORTANT: Input must be 1-12, never 0\n * - User types 0 → converted to 12\n * - User types > 12 → clamped to 12\n */\n onHour12InputChange(event: any): void {\n let value = parseInt(event.target.value, 10);\n \n // Validate 1-12 range (0 is not allowed in 12-hour format)\n if (isNaN(value) || value < 1 || value === 0) {\n value = 12; // Default to 12 if invalid or 0\n } else if (value > 12) {\n value = 12;\n }\n \n // Convert to 24-hour format\n if (this.meridian === 'AM') {\n this.selectedTime.hour = value === 12 ? 0 : value;\n } else {\n this.selectedTime.hour = value === 12 ? 12 : value + 12;\n }\n \n event.target.value = value;\n this.updateSelectedDayTime();\n }\n\n /**\n * Check if a date is within the current range\n * BACKWARD COMPATIBILITY: Only used when selectionMode='range'\n */\n isInRange(day: DayInfo): boolean {\n if (this.selectionMode !== 'range' || !this.rangeStart || !this.rangeEnd || !day?.gD) {\n return false;\n }\n \n const dayDate = this.parseDateString(day.gD);\n const startDate = this.parseDateString(this.rangeStart.gD);\n const endDate = this.parseDateString(this.rangeEnd.gD);\n \n if (!dayDate || !startDate || !endDate) {\n return false;\n }\n \n return dayDate >= startDate && dayDate <= endDate;\n }\n\n /**\n * Check if a date is the range start\n * BACKWARD COMPATIBILITY: Only used when selectionMode='range'\n */\n isRangeStart(day: DayInfo): boolean {\n return this.selectionMode === 'range' && \n this.rangeStart?.gD === day?.gD;\n }\n\n /**\n * Check if a date is the range end\n * BACKWARD COMPATIBILITY: Only used when selectionMode='range'\n */\n isRangeEnd(day: DayInfo): boolean {\n return this.selectionMode === 'range' && \n this.rangeEnd?.gD === day?.gD;\n }\n\n /**\n * Reset range selection\n * BACKWARD COMPATIBILITY: Only used when selectionMode='range'\n */\n private resetRange(): void {\n if (this.selectionMode !== 'range') {\n return;\n }\n \n // Clear range highlighting\n this.weeks.forEach((week: any) => {\n week.forEach((day: DayInfo) => {\n if (day && day.gD) {\n day.selected = false;\n }\n });\n });\n \n this.rangeStart = undefined;\n this.rangeEnd = undefined;\n this.selectedDay = undefined;\n }\n\n /**\n * Parse date string (DD/MM/YYYY) to Date object\n * Helper for range comparison\n */\n private parseDateString(dateStr: string): Date | null {\n if (!dateStr) return null;\n \n const parts = dateStr.split('/');\n if (parts.length !== 3) return null;\n \n const day = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1; // Month is 0-indexed\n const year = parseInt(parts[2], 10);\n \n return new Date(year, month, day);\n }\n\n /**\n * Highlight all dates in range\n * BACKWARD COMPATIBILITY: Only used when selectionMode='range'\n */\n private highlightRange(): void {\n if (this.selectionMode !== 'range' || !this.rangeStart || !this.rangeEnd) {\n return;\n }\n \n this.weeks.forEach((week: any) => {\n week.forEach((day: DayInfo) => {\n if (day && day.gD) {\n day.selected = this.isInRange(day) || \n this.isRangeStart(day) || \n this.isRangeEnd(day);\n }\n });\n });\n }\n}\n","<div class=\"calendar-container\" [dir]=\"dir\" [attr.lang]=\"locale\">\n <div\n class=\"toggle-section\"\n [dir]=\"dir\"\n *ngIf=\"canChangeMode\"\n [ngStyle]=\"{ color: styles.primaryColor }\"\n >\n <span> {{ ummAlQuraDateText }} </span>\n <label class=\"switch\">\n <input\n type=\"checkbox\"\n [disabled]=\"!canChangeMode\"\n [checked]=\"mode === 'ummAlQura'\"\n (change)=\"changeCalendarMode()\"\n #calendarCheckbox\n />\n <span\n class=\"slider\"\n [ngStyle]=\"\n calendarCheckbox.checked\n ? { 'background-color': styles.primaryColor }\n : { 'background-color': styles.backgroundColor }\n \"\n ></span>\n </label>\n </div>\n\n <div\n class=\"todays-date-section\"\n *ngIf=\"todaysDateSection\"\n [ngStyle]=\"{\n 'background-color': styles.backgroundColor,\n color: styles.primaryColor,\n 'border-radius': styles.borderRadius\n }\"\n >\n <div\n class=\"text-info\"\n [ngClass]=\"{\n order: dir == 'rtl'\n }\"\n >\n <p>{{ todaysDateText }}</p>\n </div>\n\n <div\n class=\"data\"\n [dir]=\"dir\"\n [ngStyle]=\"{\n 'background-color': styles.todaysDateBgColor,\n color: styles.todaysDateTextColor\n }\"\n >\n <p *ngIf=\"mode == 'ummAlQura'\">\n <!-- {{todaysDate.ummAlQura}} -->\n {{\n locale == \"ar\"\n ? _dateUtilsService.convertDateNumerals(todaysDate.ummAlQura, \"ar\")\n : todaysDate.ummAlQura\n }}\n </p>\n <p *ngIf=\"mode == 'greg'\">\n {{\n locale == \"ar\"\n ? _dateUtilsService.convertDateNumerals(todaysDate.gregorian, \"ar\")\n : todaysDate.gregorian\n }}\n </p>\n </div>\n </div>\n\n <div class=\"period-container\">\n <form [formGroup]=\"periodForm\" class=\"period-form\">\n <div\n class=\"select-item\"\n [ngClass]=\"{\n order: dir == 'ltr'\n }\"\n [ngStyle]=\"{\n 'background-color': styles.backgroundColor,\n 'border-radius': styles.borderRadius\n }\"\n >\n <label *ngIf=\"!periodForm.controls['year'].value\">{{\n yearSelectLabel\n }}</label>\n\n <select\n formControlName=\"year\"\n class=\"{{ 'icon-' + dir }}\"\n placeholder=\"السنة\"\n (change)=\"onPeriodChange('year')\"\n [dir]=\"dir\"\n [ngStyle]=\"{\n color: styles.primaryColor,\n 'font-family': styles.fontFamily\n }\"\n >\n <option *ngFor=\"let year of years\" [ngValue]=\"year\">\n {{ locale == \"ar\" ? _dateUtilsService.parseEnglish(year) : year }}\n </option>\n </select>\n </div>\n\n <div\n class=\"select-item\"\n [ngClass]=\"{\n order: dir == 'rtl'\n }\"\n [ngStyle]=\"{\n 'background-color': styles.backgroundColor,\n 'border-radius': styles.borderRadius\n }\"\n >\n <label *ngIf=\"!periodForm.controls['month'].value\">{{\n monthSelectLabel\n }}</label>\n <select\n class=\"{{ 'icon-' + dir }}\"\n formControlName=\"month\"\n (change)=\"onPeriodChange('month')\"\n [dir]=\"dir\"\n [ngStyle]=\"{\n color: styles.primaryColor,\n 'font-family': styles.fontFamily\n }\"\n >\n <option *ngFor=\"let month of months\" [ngValue]=\"month.value\">\n {{ locale == \"ar\" ? month?.labelAr : month?.labelEn }}\n </option>\n </select>\n </div>\n </form>\n </div>\n\n <div\n class=\"calendar-layout\"\n [ngStyle]=\"{\n 'background-color': styles.backgroundColor,\n 'border-radius': styles.borderRadius\n }\"\n >\n <div class=\"week-days\">\n <div\n class=\"week-day\"\n [ngStyle]=\"{ color: styles.dayNameColor }\"\n *ngFor=\"let date of locale == 'ar' ? weekdaysAr : weekdaysEn\"\n >\n {{ date }}\n </div>\n </div>\n\n <div [dir]=\"dir\">\n <div class=\"week\" *ngFor=\"let week of weeks\">\n <div\n class=\"day\"\n *ngFor=\"let day of week\"\n (click)=\"disableDayPicker == false ? onDayClicked(day) : ''\"\n [ngStyle]=\"{\n 'background-color': styles.backgroundColor,\n color: styles.dayColor\n }\"\n >\n <div\n id=\"greg-day\"\n [ngClass]=\"{\n 'todays-date': checkTodaysDate(day),\n 'selected-date': day?.selected == true\n }\"\n [ngStyle]=\"{\n border:\n markToday && checkTodaysDate(day)\n ? '1px solid ' + styles.secondaryColor\n : '',\n 'background-color':\n day?.selected == true ? styles.secondaryColor : '',\n color:\n (day?.selected == true ? styles.todaysDateTextColor : '') ||\n (checkFutureValidation(day) && futureValidation\n ? styles.disabledDayColor\n : '') ||\n (isDateDisabled(day) ? styles.disabledDayColor : ''),\n opacity: isDateDisabled(day) ? '0.4' : '1',\n cursor: isDateDisabled(day) ? 'not-allowed' : 'pointer'\n }\"\n >\n <span *ngIf=\"mode == 'greg'\">{{\n locale == \"ar\"\n ? _dateUtilsService.parseEnglish(\n day?.gD?.split(\"/\")[0] | number\n )\n : (day?.gD?.split(\"/\")[0] | number)\n }}</span>\n\n <span id=\"ummAlQura-day\" *ngIf=\"mode == 'ummAlQura'\">{{\n locale == \"ar\"\n ? _dateUtilsService.parseEnglish(\n day?.uD?.split(\"/\")[0] | number\n )\n : (day?.uD?.split(\"/\")[0] | number)\n }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"future-validation\" dir=\"auto\" *ngIf=\"futureValidationMessage\">\n <span *ngIf=\"locale == 'ar'\">\n {{ futureValidationMessageAr }}\n </span>\n <span *ngIf=\"locale == 'en'\">\n {{ futureValidationMessageEn }}\n </span>\n </div>\n\n <!-- Time Picker Section -->\n <!-- BACKWARD COMPATIBILITY: This section only renders when enableTime=true -->\n <div class=\"time-picker-section\" *ngIf=\"enableTime\" [dir]=\"'ltr'\">\n <div class=\"time-picker-wrapper\">\n <!-- Hour Input with Arrows -->\n <div class=\"time-input-container\">\n <button\n type=\"button\"\n class=\"time-arrow time-arrow-up\"\n (click)=\"useMeridian ? incrementHour12() : incrementHour()\"\n tabindex=\"-1\"\n aria-label=\"Increment hour\"\n >\n <i class=\"ri-arrow-drop-up-line\"></i>\n </button>\n <input\n type=\"number\"\n class=\"time-field\"\n [value]=\"getDisplayHour().toString().padStart(2, '0')\"\n (input)=\"\n useMeridian\n ? onHour12InputChange($event)\n : onHourInputChange($event)\n \"\n (keydown)=\"onTimeKeydown($event, 'hour')\"\n [min]=\"useMeridian ? 1 : 0\"\n [max]=\"useMeridian ? 12 : 23\"\n aria-label=\"Hour\"\n />\n <button\n type=\"button\"\n class=\"time-arrow time-arrow-down\"\n (click)=\"useMeridian ? decrementHour12() : decrementHour()\"\n tabindex=\"-1\"\n aria-label=\"Decrement hour\"\n >\n <i class=\"ri-arrow-drop-down-line\"></i>\n </button>\n </div>\n\n <!-- Colon Separator -->\n <span class=\"time-colon\">:</span>\n\n <!-- Minute Input with Arrows -->\n <div class=\"time-input-container\">\n <button\n type=\"button\"\n class=\"time-arrow time-arrow-up\"\n (click)=\"incrementMinute()\"\n tabindex=\"-1\"\n aria-label=\"Increment minute\"\n >\n <i class=\"ri-arrow-drop-up-line\"></i>\n </button>\n <input\n type=\"number\"\n class=\"time-field\"\n [value]=\"selectedTime.minute.toString().padStart(2, '0')\"\n (input)=\"onMinuteInputChange($event)\"\n (keydown)=\"onTimeKeydown($event, 'minute')\"\n min=\"0\"\n max=\"59\"\n aria-label=\"Minute\"\n />\n <button\n type=\"button\"\n class=\"time-arrow time-arrow-down\"\n (click)=\"decrementMinute()\"\n tabindex=\"-1\"\n aria-label=\"Decrement minute\"\n >\n <i class=\"ri-arrow-drop-down-line\"></i>\n </button>\n </div>\n\n <!-- AM/PM Button Group (only when useMeridian=true) -->\n <!-- BACKWARD COMPATIBILITY: This only renders when useMeridian=true -->\n <div class=\"meridian-toggle-group\" *ngIf=\"useMeridian\">\n <button\n type=\"button\"\n class=\"meridian-btn\"\n [class.active]=\"meridian === 'AM'\"\n (click)=\"meridian !== 'AM' && toggleMeridian()\"\n aria-label=\"Select AM\"\n >\n AM\n </button>\n <button\n type=\"button\"\n class=\"meridian-btn\"\n [class.active]=\"meridian === 'PM'\"\n (click)=\"meridian !== 'PM' && toggleMeridian()\"\n aria-label=\"Select PM\"\n >\n PM\n </button>\n </div>\n </div>\n </div>\n\n <div>\n <button\n type=\"button\"\n class=\"confirm-btn\"\n [disabled]=\"\n isRequired &&\n ((!selectedDay && !multiple) ||\n (!multipleSelectedDates.length && multiple))\n \"\n (click)=\"onConfirmClicked()\"\n *ngIf=\"showConfirmButton\"\n [ngStyle]=\"{\n 'background-color': styles.secondaryColor,\n color: styles.confirmBtnTextColor,\n 'font-family': styles.fontFamily,\n 'border-radius': styles.borderRadius\n }\"\n >\n {{ submitTextButton }}\n </button>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { HijriGregorianDatepickerComponent } from './hijri-gregorian-datepicker.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n declarations: [HijriGregorianDatepickerComponent],\n imports: [FormsModule, ReactiveFormsModule, CommonModule],\n exports: [HijriGregorianDatepickerComponent],\n})\nexport class HijriGregorianDatepickerModule {}\n","/*\n * Public API Surface of hijri-gregorian-datepicker\n */\n\nexport * from './_services/date-utilities.service';\nexport * from './lib/hijri-gregorian-datepicker.component';\nexport * from './lib/hijri-gregorian-datepicker.module';\nexport * from './_interfaces/calendar-model'; // Export interfaces including TimeValue\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["datesDictionary['default']","i2.DateUtilitiesService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
@@ -1,238 +0,0 @@
1
- import { OnInit, EventEmitter, OnChanges, SimpleChanges, AfterViewInit } from '@angular/core';
2
- import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
3
- import { stylesConfig } from '../_interfaces/styles-config.model';
4
- import { DateUtilitiesService } from '../_services/date-utilities.service';
5
- import { TodayDate, DayInfo } from '../_interfaces/calendar-model';
6
- import * as i0 from "@angular/core";
7
- export declare class HijriGregorianDatepickerComponent implements OnInit, OnChanges, AfterViewInit {
8
- formBuilder: UntypedFormBuilder;
9
- _dateUtilsService: DateUtilitiesService;
10
- markToday: boolean;
11
- canChangeMode: boolean;
12
- todaysDateSection: boolean;
13
- futureValidation: boolean;
14
- disableYearPicker: boolean;
15
- disableMonthPicker: boolean;
16
- disableDayPicker: boolean;
17
- multiple: boolean;
18
- isRequired: boolean;
19
- showConfirmButton: boolean;
20
- futureValidationMessage: boolean;
21
- arabicLayout: boolean;
22
- mode: string;
23
- dir: string;
24
- locale: string;
25
- submitTextButton: string;
26
- todaysDateText: string;
27
- ummAlQuraDateText: string;
28
- monthSelectLabel: string;
29
- yearSelectLabel: string;
30
- futureValidationMessageEn: string;
31
- futureValidationMessageAr: string;
32
- theme?: string;
33
- pastYearsLimit: number;
34
- futureYearsLimit: number;
35
- styles?: stylesConfig;
36
- enableTime: boolean;
37
- minDate?: Date | string;
38
- maxDate?: Date | string;
39
- initialDate?: Date | string;
40
- initialRangeStart?: Date | string;
41
- initialRangeEnd?: Date | string;
42
- useMeridian: boolean;
43
- selectionMode: 'single' | 'range';
44
- onSubmit: EventEmitter<object>;
45
- onDaySelect: EventEmitter<object>;
46
- onMonthChange: EventEmitter<object>;
47
- onYearChange: EventEmitter<object>;
48
- ummAlQuraMonths: {
49
- labelAr: string;
50
- labelEn: string;
51
- value: number;
52
- }[];
53
- gregMonths: {
54
- labelAr: string;
55
- labelEn: string;
56
- value: number;
57
- }[];
58
- ummAlQuraYear: number;
59
- gregYear: number;
60
- years: any[];
61
- weeks: any[];
62
- months: any[];
63
- weekdaysEn: string[];
64
- weekdaysAr: string[];
65
- todaysDate: TodayDate;
66
- selectedDay: DayInfo;
67
- periodForm: UntypedFormGroup;
68
- multipleSelectedDates: DayInfo[];
69
- themes: any;
70
- selectedTime: {
71
- hour: number;
72
- minute: number;
73
- };
74
- private timeInitialized;
75
- meridian: 'AM' | 'PM';
76
- rangeStart?: DayInfo;
77
- rangeEnd?: DayInfo;
78
- fontFamilyStyle: string;
79
- constructor(formBuilder: UntypedFormBuilder, _dateUtilsService: DateUtilitiesService);
80
- ngOnInit(): void;
81
- ngAfterViewInit(): void;
82
- ngOnChanges(changes: SimpleChanges): void;
83
- initTheme(): void;
84
- initializeForm(): void;
85
- initializeYearsAndMonths(): void;
86
- onPeriodChange(type: string): void;
87
- getTodaysDateInfo(): void;
88
- generatetMonthData(date: string): void;
89
- private highlightInitialDate;
90
- private highlightInitialRange;
91
- generateWeeksArray(daysArray: any): any;
92
- changeCalendarMode(): void;
93
- onDayClicked(day: DayInfo): void;
94
- markDaySelected(dayInfo: DayInfo): void;
95
- /**
96
- * Handle range selection logic
97
- * BACKWARD COMPATIBILITY: Only called when selectionMode='range'
98
- *
99
- * Range selection lifecycle:
100
- * 1. First click → Sets rangeStart
101
- * 2. Second click → Sets rangeEnd, highlights range
102
- * 3. Third click → Resets range, starts new selection
103
- */
104
- private handleRangeSelection;
105
- onConfirmClicked(): void;
106
- checkFutureValidation(day: DayInfo): boolean;
107
- checkTodaysDate(day: DayInfo): boolean;
108
- /**
109
- * Check if a day is disabled based on min/max date constraints
110
- * Works for both Gregorian and Hijri modes
111
- */
112
- isDateDisabled(day: DayInfo): boolean;
113
- /**
114
- * Initialize time from current system time or initialDate
115
- * BACKWARD COMPATIBILITY: Only called when enableTime=true
116
- *
117
- * Priority:
118
- * 1. If initialDate has time, use that
119
- * 2. If selectedDay has time, use that
120
- * 3. Otherwise, use current system time
121
- */
122
- initializeTime(): void;
123
- /**
124
- * Increment hour value with wraparound (0-23)
125
- * BACKWARD COMPATIBILITY: Only available when enableTime=true
126
- */
127
- incrementHour(): void;
128
- /**
129
- * Decrement hour value with wraparound (0-23)
130
- * BACKWARD COMPATIBILITY: Only available when enableTime=true
131
- */
132
- decrementHour(): void;
133
- /**
134
- * Increment minute value with wraparound (0-59)
135
- * BACKWARD COMPATIBILITY: Only available when enableTime=true
136
- */
137
- incrementMinute(): void;
138
- /**
139
- * Decrement minute value with wraparound (0-59)
140
- * BACKWARD COMPATIBILITY: Only available when enableTime=true
141
- */
142
- decrementMinute(): void;
143
- /**
144
- * Handle keyboard input for hours
145
- * Validates and clamps to 0-23 range
146
- * BACKWARD COMPATIBILITY: Only available when enableTime=true
147
- */
148
- onHourInputChange(event: any): void;
149
- /**
150
- * Handle keyboard input for minutes
151
- * Validates and clamps to 0-59 range
152
- * BACKWARD COMPATIBILITY: Only available when enableTime=true
153
- */
154
- onMinuteInputChange(event: any): void;
155
- /**
156
- * Handle keyboard arrow keys for hour/minute input
157
- * BACKWARD COMPATIBILITY: Only available when enableTime=true
158
- */
159
- onTimeKeydown(event: KeyboardEvent, type: 'hour' | 'minute'): void;
160
- /**
161
- * Update the selected day's time property when time changes
162
- * BACKWARD COMPATIBILITY: Only called when enableTime=true
163
- */
164
- private updateSelectedDayTime;
165
- /**
166
- * Get display hour for 12-hour format
167
- * BACKWARD COMPATIBILITY: Only used when useMeridian=true
168
- *
169
- * Conversion:
170
- * - 0 (midnight) → 12 AM
171
- * - 1-11 (AM) → 1-11 AM
172
- * - 12 (noon) → 12 PM
173
- * - 13-23 (PM) → 1-11 PM
174
- *
175
- * IMPORTANT: Hour 0 is NEVER displayed as 0, always as 12
176
- */
177
- getDisplayHour(): number;
178
- /**
179
- * Toggle AM/PM meridian
180
- * BACKWARD COMPATIBILITY: Only available when useMeridian=true
181
- *
182
- * When toggling:
183
- * - Adds or subtracts 12 hours
184
- * - Maintains internal 24-hour format
185
- */
186
- toggleMeridian(): void;
187
- /**
188
- * Increment hour in 12-hour mode
189
- * BACKWARD COMPATIBILITY: Only used when useMeridian=true
190
- */
191
- incrementHour12(): void;
192
- /**
193
- * Decrement hour in 12-hour mode
194
- * BACKWARD COMPATIBILITY: Only used when useMeridian=true
195
- */
196
- decrementHour12(): void;
197
- /**
198
- * Handle 12-hour input change
199
- * BACKWARD COMPATIBILITY: Only used when useMeridian=true
200
- *
201
- * IMPORTANT: Input must be 1-12, never 0
202
- * - User types 0 → converted to 12
203
- * - User types > 12 → clamped to 12
204
- */
205
- onHour12InputChange(event: any): void;
206
- /**
207
- * Check if a date is within the current range
208
- * BACKWARD COMPATIBILITY: Only used when selectionMode='range'
209
- */
210
- isInRange(day: DayInfo): boolean;
211
- /**
212
- * Check if a date is the range start
213
- * BACKWARD COMPATIBILITY: Only used when selectionMode='range'
214
- */
215
- isRangeStart(day: DayInfo): boolean;
216
- /**
217
- * Check if a date is the range end
218
- * BACKWARD COMPATIBILITY: Only used when selectionMode='range'
219
- */
220
- isRangeEnd(day: DayInfo): boolean;
221
- /**
222
- * Reset range selection
223
- * BACKWARD COMPATIBILITY: Only used when selectionMode='range'
224
- */
225
- private resetRange;
226
- /**
227
- * Parse date string (DD/MM/YYYY) to Date object
228
- * Helper for range comparison
229
- */
230
- private parseDateString;
231
- /**
232
- * Highlight all dates in range
233
- * BACKWARD COMPATIBILITY: Only used when selectionMode='range'
234
- */
235
- private highlightRange;
236
- static ɵfac: i0.ɵɵFactoryDeclaration<HijriGregorianDatepickerComponent, never>;
237
- static ɵcmp: i0.ɵɵComponentDeclaration<HijriGregorianDatepickerComponent, "hijri-gregorian-datepicker", never, { "markToday": "markToday"; "canChangeMode": "canChangeMode"; "todaysDateSection": "todaysDateSection"; "futureValidation": "futureValidation"; "disableYearPicker": "disableYearPicker"; "disableMonthPicker": "disableMonthPicker"; "disableDayPicker": "disableDayPicker"; "multiple": "multiple"; "isRequired": "isRequired"; "showConfirmButton": "showConfirmButton"; "futureValidationMessage": "futureValidationMessage"; "arabicLayout": "arabicLayout"; "mode": "mode"; "dir": "dir"; "locale": "locale"; "submitTextButton": "submitTextButton"; "todaysDateText": "todaysDateText"; "ummAlQuraDateText": "ummAlQuraDateText"; "monthSelectLabel": "monthSelectLabel"; "yearSelectLabel": "yearSelectLabel"; "futureValidationMessageEn": "futureValidationMessageEn"; "futureValidationMessageAr": "futureValidationMessageAr"; "theme": "theme"; "pastYearsLimit": "pastYearsLimit"; "futureYearsLimit": "futureYearsLimit"; "styles": "styles"; "enableTime": "enableTime"; "minDate": "minDate"; "maxDate": "maxDate"; "initialDate": "initialDate"; "initialRangeStart": "initialRangeStart"; "initialRangeEnd": "initialRangeEnd"; "useMeridian": "useMeridian"; "selectionMode": "selectionMode"; }, { "onSubmit": "onSubmit"; "onDaySelect": "onDaySelect"; "onMonthChange": "onMonthChange"; "onYearChange": "onYearChange"; }, never, never, false, never>;
238
- }
@@ -1,9 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./hijri-gregorian-datepicker.component";
3
- import * as i2 from "@angular/forms";
4
- import * as i3 from "@angular/common";
5
- export declare class HijriGregorianDatepickerModule {
6
- static ɵfac: i0.ɵɵFactoryDeclaration<HijriGregorianDatepickerModule, never>;
7
- static ɵmod: i0.ɵɵNgModuleDeclaration<HijriGregorianDatepickerModule, [typeof i1.HijriGregorianDatepickerComponent], [typeof i2.FormsModule, typeof i2.ReactiveFormsModule, typeof i3.CommonModule], [typeof i1.HijriGregorianDatepickerComponent]>;
8
- static ɵinj: i0.ɵɵInjectorDeclaration<HijriGregorianDatepickerModule>;
9
- }
package/public-api.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from './_services/date-utilities.service';
2
- export * from './lib/hijri-gregorian-datepicker.component';
3
- export * from './lib/hijri-gregorian-datepicker.module';
4
- export * from './_interfaces/calendar-model';