{"version":3,"file":"qeydar-datepicker.mjs","sources":["../../../projects/qeydar-datepicker/src/utils/animation/animation-consts.ts","../../../projects/qeydar-datepicker/src/utils/animation/slide.ts","../../../projects/qeydar-datepicker/src/date-adapter.ts","../../../projects/qeydar-datepicker/src/utils/models.ts","../../../projects/qeydar-datepicker/src/date-picker.service.ts","../../../projects/qeydar-datepicker/src/utils/overlay/overlay.ts","../../../projects/qeydar-datepicker/src/utils/input-mask.directive.ts","../../../projects/qeydar-datepicker/src/time-picker/time-picker.component.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/components/calendar-header.component.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/components/calendar-sidebar.component.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/components/days-grid.component.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/components/months-grid.component.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/components/years-grid.component.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/components/calendar-footer.component.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/services/calendar-utils.service.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/services/validation-strategy.service.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/services/selection-strategy.service.ts","../../../projects/qeydar-datepicker/src/date-picker-popup/date-picker-popup.component.ts","../../../projects/qeydar-datepicker/src/utils/template.directive.ts","../../../projects/qeydar-datepicker/src/date-picker.component.ts","../../../projects/qeydar-datepicker/src/qeydar-datepicker.module.ts","../../../projects/qeydar-datepicker/src/public-api.ts","../../../projects/qeydar-datepicker/src/qeydar-datepicker.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/../blob/master/LICENSE\n */\n\nexport class AnimationDuration {\n  static SLOW = '0.3s'; // Modal\n  static BASE = '0.2s';\n  static FAST = '0.1s'; // Tooltip\n}\n\nexport class AnimationCurves {\n  static EASE_BASE_OUT = 'cubic-bezier(0.7, 0.3, 0.1, 1)';\n  static EASE_BASE_IN = 'cubic-bezier(0.9, 0, 0.3, 0.7)';\n  static EASE_OUT = 'cubic-bezier(0.215, 0.61, 0.355, 1)';\n  static EASE_IN = 'cubic-bezier(0.55, 0.055, 0.675, 0.19)';\n  static EASE_IN_OUT = 'cubic-bezier(0.645, 0.045, 0.355, 1)';\n  static EASE_OUT_BACK = 'cubic-bezier(0.12, 0.4, 0.29, 1.46)';\n  static EASE_IN_BACK = 'cubic-bezier(0.71, -0.46, 0.88, 0.6)';\n  static EASE_IN_OUT_BACK = 'cubic-bezier(0.71, -0.46, 0.29, 1.46)';\n  static EASE_OUT_CIRC = 'cubic-bezier(0.08, 0.82, 0.17, 1)';\n  static EASE_IN_CIRC = 'cubic-bezier(0.6, 0.04, 0.98, 0.34)';\n  static EASE_IN_OUT_CIRC = 'cubic-bezier(0.78, 0.14, 0.15, 0.86)';\n  static EASE_OUT_QUINT = 'cubic-bezier(0.23, 1, 0.32, 1)';\n  static EASE_IN_QUINT = 'cubic-bezier(0.755, 0.05, 0.855, 0.06)';\n  static EASE_IN_OUT_QUINT = 'cubic-bezier(0.86, 0, 0.07, 1)';\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/../blob/master/LICENSE\n */\n\nimport { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\n\nimport { AnimationCurves, AnimationDuration } from './animation-consts';\n\nconst ANIMATION_TRANSITION_IN = `${AnimationDuration.BASE} ${AnimationCurves.EASE_OUT_QUINT}`;\nconst ANIMATION_TRANSITION_OUT = `${AnimationDuration.BASE} ${AnimationCurves.EASE_IN_QUINT}`;\n\nexport const slideMotion: AnimationTriggerMetadata = trigger('slideMotion', [\n  state(\n    'void',\n    style({\n      opacity: 0,\n      transform: 'scaleY(0.8)'\n    })\n  ),\n  state(\n    'enter',\n    style({\n      opacity: 1,\n      transform: 'scaleY(1)'\n    })\n  ),\n  transition('void => *', [animate(ANIMATION_TRANSITION_IN)]),\n  transition('* => void', [animate(ANIMATION_TRANSITION_OUT)])\n]);\n\nexport const slideAlertMotion: AnimationTriggerMetadata = trigger('slideAlertMotion', [\n  transition(':leave', [\n    style({ opacity: 1, transform: 'scaleY(1)', transformOrigin: '0% 0%' }),\n    animate(\n      `${AnimationDuration.SLOW} ${AnimationCurves.EASE_IN_OUT_CIRC}`,\n      style({\n        opacity: 0,\n        transform: 'scaleY(0)',\n        transformOrigin: '0% 0%'\n      })\n    )\n  ])\n]);\n","import {\r\n  format as formatJalali,\r\n  parse as parseJalali,\r\n  addDays as addDaysJalali,\r\n  addMonths as addMonthsJalali,\r\n  addYears as addYearsJalali,\r\n  addHours as addHoursJalali,\r\n  startOfWeek as startOfWeekJalali,\r\n  startOfMonth as startOfMonthJalali,\r\n  endOfMonth as endOfMonthJalali,\r\n  isSameDay as isSameDayJalali,\r\n  isSameMonth as isSameMonthJalali,\r\n  isSameYear as isSameYearJalali,\r\n  isAfter as isAfterJalali,\r\n  isBefore as isBeforeJalali,\r\n  isValid as isValidJalali,\r\n  max as maxJalali,\r\n  setYear as setYearJalali,\r\n  getDaysInMonth as getDaysInMonthJalali\r\n} from 'date-fns-jalali';\r\n\r\nimport {\r\n  format as formatGregorian,\r\n  parse as parseGregorian,\r\n  addDays as addDaysGregorian,\r\n  addMonths as addMonthsGregorian,\r\n  addYears as addYearsGregorian,\r\n  addHours as addHoursGregorian,\r\n  startOfWeek as startOfWeekGregorian,\r\n  startOfMonth as startOfMonthGregorian,\r\n  endOfMonth as endOfMonthGregorian,\r\n  isSameDay as isSameDayGregorian,\r\n  isSameMonth as isSameMonthGregorian,\r\n  isSameYear as isSameYearGregorian,\r\n  isAfter as isAfterGregorian,\r\n  isBefore as isBeforeGregorian,\r\n  isValid as isValidGregorian,\r\n  max as maxGregorian,\r\n  setYear as setYearGregorian,\r\n  getDaysInMonth as getDaysInMonthGregorian,\r\n  parseISO,\r\n  startOfDay,\r\n  isEqual,\r\n  addMinutes\r\n} from 'date-fns';\r\nimport { Injectable, InjectionToken, Provider } from '@angular/core';\r\nimport { CalendarType } from './utils/types';\r\n\r\nexport interface DateAdapter<D> {\r\n  today(): D;\r\n  parse(value: any, formatString: string): D | null;\r\n  format(date: D, formatString: string): string;\r\n  addDays(date: D, amount: number): D;\r\n  addMonths(date: D, amount: number): D;\r\n  addYears(date: D, amount: number): D;\r\n  addHours(date: D, amount: number): D;\r\n  getYear(date: D): number|null;\r\n  getMonth(date: D): number|null;\r\n  getDate(date: D): number|null;\r\n  getDayOfWeek(date: D): number;\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\r\n  getDateNames(): string[];\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\r\n  getFirstDayOfWeek(): number;\r\n  getNumDaysInMonth(date: D): number;\r\n  clone(date: D): D;\r\n  createDate(year: number, month: number, date: number): D;\r\n  isSameDay(date1: D, date2: D): boolean;\r\n  isSameMonth(date1: D, date2: D): boolean;\r\n  isSameYear(date1: D, date2: D): boolean;\r\n  isAfter(date1: D, date2: D): boolean;\r\n  isBefore(date1: D, date2: D): boolean;\r\n  isEqual(date1: D, date2: D): boolean;\r\n  startOfMonth(date: D): D;\r\n  endOfMonth(date: D): D;\r\n  startOfWeek(date: D): D;\r\n  isValidFormat(dateString: string, formatString: string): boolean;\r\n  max(dates: D[]): D;\r\n  setYear(date: D, year: number): D;\r\n  startOfDay (date: D): D;\r\n  getHours(date: D): number|null;\r\n  getMinutes(date: D): number|null;\r\n  getSeconds(date: D): number|null;\r\n  setHours(date: D, hours: number): D;\r\n  setMinutes(date: D, minutes: number): D;\r\n  setSeconds(date: D, seconds: number): D;\r\n  getDaysInMonth(date: D): number;\r\n  addMinutes(date: D, amount: number): D;\r\n}\r\n\r\n// Injection token for date adapter\r\nexport const DATE_ADAPTER = new InjectionToken<DateAdapter<Date>>('DateAdapter');\r\n\r\n// Provider factory for default adapters\r\nexport function provideDateAdapter(calendarType: CalendarType): Provider {\r\n  return {\r\n    provide: DATE_ADAPTER,\r\n    useFactory: (jalali: JalaliDateAdapter, gregorian: GregorianDateAdapter) => {\r\n      return calendarType === 'jalali' ? jalali : gregorian;\r\n    },\r\n    deps: [JalaliDateAdapter, GregorianDateAdapter]\r\n  };\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class JalaliDateAdapter implements DateAdapter<Date> {\r\n  today(): Date {\r\n    return new Date();\r\n  }\r\n\r\n  parse(value: any, formatString: string): Date | null {\r\n    if (typeof value === 'string') {\r\n      // Check if it's in ISO 8601 format\r\n      if (value.includes('T')) {\r\n        const parsedDate = parseISO(value);\r\n        return isValidJalali(parsedDate) ? parsedDate : null;\r\n      }\r\n\r\n      try {\r\n        const parsedDate = parseJalali(value, formatString, new Date());\r\n        return isValidJalali(parsedDate) ? parsedDate : null;\r\n      } catch (error) {\r\n        console.error('Error parsing date:', error);\r\n        return null;\r\n      }\r\n    } else if (value instanceof Date) {\r\n      return isValidJalali(value) ? value : null;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  format(date: Date, formatString: string): string {\r\n    return formatJalali(date, formatString);\r\n  }\r\n\r\n  addDays(date: Date, amount: number): Date {\r\n    return addDaysJalali(date, amount);\r\n  }\r\n\r\n  addMonths(date: Date, amount: number): Date {\r\n    return addMonthsJalali(date, amount);\r\n  }\r\n\r\n  addYears(date: Date, amount: number): Date {\r\n    return addYearsJalali(date, amount);\r\n  }\r\n\r\n  addHours(date: Date, amount: number): Date {\r\n    return addHoursJalali(date, amount);\r\n  }\r\n\r\n  getYear(date: Date): number|null {\r\n    return date? parseInt(formatJalali(date, 'yyyy')): null;\r\n  }\r\n\r\n  getMonth(date: Date): number|null {\r\n    // Jalali months are 1-indexed in date-fns-jalali\r\n    return date? parseInt(formatJalali(date, 'M')) - 1: null;\r\n  }\r\n\r\n  getDate(date: Date): number|null {\r\n    return date? parseInt(formatJalali(date, 'dd')): null;\r\n  }\r\n\r\n  getDayOfWeek(date: Date): number {\r\n    return parseInt(formatJalali(date, 'i')) - 1;\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    const jalaliMonths = [\r\n      'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',\r\n      'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\r\n    ];\r\n\r\n    switch (style) {\r\n      case 'long':\r\n        return jalaliMonths;\r\n      case 'short':\r\n        return jalaliMonths.map(month => month.substring(0, 3));\r\n      case 'narrow':\r\n        return jalaliMonths.map(month => month.substring(0, 1));\r\n      default:\r\n        return jalaliMonths;\r\n    }\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    return Array.from({ length: 31 }, (_, i) => (i + 1).toString());\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    const formats = {\r\n      long: 'EEEE',\r\n      short: 'EEEEE',\r\n      narrow: 'EEEEEE'\r\n    };\r\n    return Array.from({ length: 7 }, (_, i) =>\r\n      formatJalali(addDaysJalali(startOfWeekJalali(new Date()), i), formats[style])\r\n    );\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    return 6; // Saturday is the first day of the week in the Jalali calendar\r\n  }\r\n\r\n  getNumDaysInMonth(date: Date): number {\r\n    return parseInt(formatJalali(endOfMonthJalali(date), 'd'));\r\n  }\r\n\r\n  clone(date: Date): Date {\r\n    return new Date(date.getTime());\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number): Date {\r\n    // Adjust for 0-indexed months in the interface vs 1-indexed months in date-fns-jalali\r\n    return parseJalali(`${year}/${month + 1}/${date}`, 'yyyy/M/d', new Date());\r\n  }\r\n\r\n  isSameDay(date1: Date, date2: Date): boolean {\r\n    return isSameDayJalali(date1, date2);\r\n  }\r\n\r\n  isSameMonth(date1: Date, date2: Date): boolean {\r\n    return isSameMonthJalali(date1, date2);\r\n  }\r\n\r\n  isSameYear(date1: Date, date2: Date): boolean {\r\n    return isSameYearJalali(date1, date2);\r\n  }\r\n\r\n  isAfter(date1: Date, date2: Date): boolean {\r\n    return isAfterJalali(date1, date2);\r\n  }\r\n\r\n  isBefore(date1: Date, date2: Date): boolean {\r\n    return isBeforeJalali(date1, date2);\r\n  }\r\n\r\n  isEqual(date1: Date, date2: Date): boolean {\r\n    return isEqual(date1, date2);\r\n  }\r\n\r\n  startOfMonth(date: Date): Date {\r\n    return startOfMonthJalali(date);\r\n  }\r\n\r\n  endOfMonth(date: Date): Date {\r\n    return endOfMonthJalali(date);\r\n  }\r\n\r\n  startOfWeek(date: Date): Date {\r\n    return startOfWeekJalali(date, { weekStartsOn: this.getFirstDayOfWeek() as 0 | 1 | 2 | 3 | 4 | 5 | 6 });\r\n  }\r\n\r\n  isValidFormat(dateString: string, formatString: string): boolean {\r\n    try {\r\n      const parsedDate = parseJalali(dateString, formatString, new Date());\r\n      if (!isValidJalali(parsedDate)) {\r\n        return false;\r\n      }\r\n      // Check if the formatted parsed date matches the original date string\r\n      const formattedDate = formatJalali(parsedDate, formatString);\r\n      return formattedDate === dateString;\r\n    } catch (error) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  max(dates: Date[]): Date {\r\n    return maxJalali(dates);\r\n  }\r\n\r\n  setYear(date: Date, year: number): Date {\r\n    return setYearJalali(date, year)\r\n  }\r\n\r\n  startOfDay(date: Date): Date {\r\n    return startOfDay(date);\r\n  }\r\n\r\n  getHours(date: Date): number|null {\r\n    return date? parseInt(formatJalali(date, 'HH')): null;\r\n  }\r\n\r\n  getMinutes(date: Date): number|null {\r\n    return date? parseInt(formatJalali(date, 'mm')): null;\r\n  }\r\n\r\n  getSeconds(date: Date): number|null {\r\n    return date? parseInt(formatJalali(date, 'ss')): null;\r\n  }\r\n\r\n  setHours(date: Date, hours: number): Date {\r\n    const newDate = this.clone(date);\r\n    newDate.setHours(hours);\r\n    return newDate;\r\n  }\r\n\r\n  setMinutes(date: Date, minutes: number): Date {\r\n    const newDate = this.clone(date);\r\n    newDate.setMinutes(minutes);\r\n    return newDate;\r\n  }\r\n\r\n  setSeconds(date: Date, seconds: number): Date {\r\n    const newDate = this.clone(date);\r\n    newDate.setSeconds(seconds);\r\n    return newDate;\r\n  }\r\n\r\n  getDaysInMonth(date: Date) {\r\n    return getDaysInMonthJalali(date);\r\n  }\r\n\r\n  addMinutes(date: Date, amount: number) {\r\n    return addMinutes(date, amount);\r\n  }\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class GregorianDateAdapter implements DateAdapter<Date> {\r\n  today(): Date {\r\n    return new Date();\r\n  }\r\n\r\n  parse(value: any, formatString: string): Date | null {\r\n    if (typeof value === 'string') {\r\n       // Check if it's in ISO 8601 format\r\n       if (value.includes('T')) {\r\n        const parsedDate = parseISO(value);\r\n        return isValidGregorian(parsedDate) ? parsedDate : null;\r\n      }\r\n\r\n      try {\r\n        let parsedDate: Date;\r\n        if (formatString === \"ISO\") {\r\n          parsedDate = parseISO(value);\r\n        } else {\r\n          parsedDate = parseGregorian(value, formatString, new Date());\r\n        }\r\n        return isValidGregorian(parsedDate) ? parsedDate : null;\r\n      } catch (error) {\r\n        console.error('Error parsing date:', error);\r\n        return null;\r\n      }\r\n    } else if (value instanceof Date) {\r\n      return isValidGregorian(value) ? value : null;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  format(date: Date, formatString: string): string {\r\n    return formatGregorian(date, formatString);\r\n  }\r\n\r\n  addDays(date: Date, amount: number): Date {\r\n    return addDaysGregorian(date, amount);\r\n  }\r\n\r\n  addMonths(date: Date, amount: number): Date {\r\n    return addMonthsGregorian(date, amount);\r\n  }\r\n\r\n  addYears(date: Date, amount: number): Date {\r\n    return addYearsGregorian(date, amount);\r\n  }\r\n\r\n  addHours(date: Date, amount: number): Date {\r\n    return addHoursGregorian(date, amount);\r\n  }\r\n\r\n  getYear(date: Date): number {\r\n    return date.getFullYear();\r\n  }\r\n\r\n  getMonth(date: Date): number {\r\n    return date.getMonth();\r\n  }\r\n\r\n  getDate(date: Date): number {\r\n    return date.getDate();\r\n  }\r\n\r\n  getDayOfWeek(date: Date): number {\r\n    return date.getDay();\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    const formats = {\r\n      long: 'MMMM',\r\n      short: 'MMM',\r\n      narrow: 'MMMMM'\r\n    };\r\n    return Array.from({ length: 12 }, (_, i) =>\r\n      formatGregorian(new Date(2000, i, 1), formats[style])\r\n    );\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    return Array.from({ length: 31 }, (_, i) => (i + 1).toString());\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    const formats = {\r\n      long: 'EEEE',\r\n      short: 'EEE',\r\n      narrow: 'EEEEE'\r\n    };\r\n    return Array.from({ length: 7 }, (_, i) =>\r\n      formatGregorian(addDaysGregorian(startOfWeekGregorian(new Date()), i), formats[style])\r\n    );\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    return 0; // Sunday is the first day of the week in the Gregorian calendar\r\n  }\r\n\r\n  getNumDaysInMonth(date: Date): number {\r\n    return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n  }\r\n\r\n  clone(date: Date): Date {\r\n    return new Date(date.getTime());\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number): Date {\r\n    return new Date(year, month, date);\r\n  }\r\n\r\n  isSameDay(date1: Date, date2: Date): boolean {\r\n    return isSameDayGregorian(date1, date2);\r\n  }\r\n\r\n  isSameMonth(date1: Date, date2: Date): boolean {\r\n    return isSameMonthGregorian(date1, date2);\r\n  }\r\n\r\n  isSameYear(date1: Date, date2: Date): boolean {\r\n    return isSameYearGregorian(date1, date2);\r\n  }\r\n\r\n  isAfter(date1: Date, date2: Date): boolean {\r\n    return isAfterGregorian(date1, date2);\r\n  }\r\n\r\n  isBefore(date1: Date, date2: Date): boolean {\r\n    return isBeforeGregorian(date1, date2);\r\n  }\r\n\r\n  isEqual(date1: Date, date2: Date): boolean {\r\n    return isEqual(date1, date2);\r\n  }\r\n\r\n  startOfMonth(date: Date): Date {\r\n    return startOfMonthGregorian(date);\r\n  }\r\n\r\n  endOfMonth(date: Date): Date {\r\n    return endOfMonthGregorian(date);\r\n  }\r\n\r\n  startOfWeek(date: Date): Date {\r\n    return startOfWeekGregorian(date, { weekStartsOn: this.getFirstDayOfWeek() as 0 | 1 | 2 | 3 | 4 | 5 | 6 });\r\n  }\r\n\r\n  isValidFormat(dateString: string, formatString: string): boolean {\r\n    try {\r\n      const parsedDate = parseGregorian(dateString, formatString, new Date());\r\n      if (!isValidGregorian(parsedDate)) {\r\n        return false;\r\n      }\r\n      // Check if the formatted parsed date matches the original date string\r\n      const formattedDate = formatGregorian(parsedDate, formatString);\r\n      return formattedDate === dateString;\r\n    } catch (error) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  max(dates: Date[]): Date {\r\n    return maxGregorian(dates);\r\n  }\r\n\r\n  setYear(date: Date, year: number): Date {\r\n    return setYearGregorian(date, year);\r\n  }\r\n\r\n  startOfDay(date: Date): Date {\r\n    return startOfDay(date);\r\n  }\r\n\r\n  getHours(date: Date): number|null {\r\n    return date? date.getHours(): null;\r\n  }\r\n\r\n  getMinutes(date: Date): number|null {\r\n    return date? date.getMinutes(): null;\r\n  }\r\n\r\n  getSeconds(date: Date): number|null {\r\n    return date? date.getSeconds(): null;\r\n  }\r\n\r\n  setHours(date: Date, hours: number): Date {\r\n    const newDate = this.clone(date);\r\n    newDate.setHours(hours);\r\n    return newDate;\r\n  }\r\n\r\n  setMinutes(date: Date, minutes: number): Date {\r\n    const newDate = this.clone(date);\r\n    newDate.setMinutes(minutes);\r\n    return newDate;\r\n  }\r\n\r\n  setSeconds(date: Date, seconds: number): Date {\r\n    const newDate = this.clone(date);\r\n    newDate.setSeconds(seconds);\r\n    return newDate;\r\n  }\r\n\r\n  getDaysInMonth(date: Date) {\r\n    return getDaysInMonthGregorian(date);\r\n  }\r\n\r\n  addMinutes(date: Date, amount: number) {\r\n    return addMinutes(date, amount);\r\n  }\r\n}","import { Injectable } from \"@angular/core\";\r\n\r\nexport interface CustomLabels {\r\n    label: string,\r\n    value: Array<Date> | 'custom',\r\n    arrow?: boolean\r\n}\r\n\r\nexport interface YearRange {\r\n    start: number,\r\n    end: number\r\n}\r\n\r\nexport interface DateRange {\r\n    start: Date | string,\r\n    end: Date | string\r\n}\r\n\r\nexport interface RangeInputLabels {\r\n    start: string,\r\n    end: string,\r\n}\r\n\r\nexport interface Lang_Locale {\r\n    today: string;\r\n    lastDay: string;\r\n    lastWeek: string;\r\n    lastMonth: string;\r\n    custom: string;\r\n    previousMonth: string;\r\n    nextMonth: string;\r\n    previousYear: string;\r\n    nextYear: string;\r\n    selectTime: string;\r\n    selectDate: string;\r\n    selectMonth: string;\r\n    selectYear: string;\r\n    selectDateRange: string;\r\n    startDate: string;\r\n    endDate: string;\r\n    pm: string;\r\n    am: string;\r\n    ok: string;\r\n    cancel: string;\r\n    now: string;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class lang_Fa implements Lang_Locale{\r\n    today:string = \"امروز\";\r\n    lastDay:string = \"آخرین روز\";\r\n    lastWeek:string = \"آخرین هفته\";\r\n    lastMonth:string = \"آخرین ماه\";\r\n    custom:string = \"دلخواه\";\r\n    previousMonth:string = \"ماه قبل\";\r\n    nextMonth:string = \"ماه بعد\";\r\n    previousYear:string = \"سال قبل\";\r\n    nextYear:string = \"سال بعد\";\r\n    selectTime:string = \"انتخاب زمان\";\r\n    selectDate:string = \"انتخاب تاریخ\";\r\n    selectMonth:string = \"انتخاب ماه\";\r\n    selectYear:string = \"انتخاب سال\";\r\n    selectDateRange:string = \"انتخاب محدوده تاریخ\";\r\n    startDate:string = \"از تاریخ\";\r\n    endDate:string = \"تا تاریخ\";\r\n    pm: string = \"ب.ظ\";\r\n    am: string = \"ق.ظ\";\r\n    ok: string = \"تایید\";\r\n    cancel: string = \"لغو\";\r\n    now: string = \"اکنون\";\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class lang_En implements Lang_Locale{\r\n    today:string = \"Today\"\r\n    lastDay:string = \"Last Day\";\r\n    lastWeek:string = \"Last Week\";\r\n    lastMonth:string = \"Last Month\";\r\n    custom:string = \"Custom\";\r\n    previousMonth:string = \"Previous Month\";\r\n    nextMonth:string = \"Next Month\";\r\n    previousYear:string = \"Previous Year\";\r\n    nextYear:string = \"Next Year\";\r\n    selectTime:string = \"Select time\";\r\n    selectDate:string = \"Select date\";\r\n    selectMonth:string = \"Select month\";\r\n    selectYear:string = \"Select year\";\r\n    selectDateRange:string = \"Select date range\";\r\n    startDate:string = \"Start date\";\r\n    endDate:string = \"End date\";\r\n    pm: string = \"PM\";\r\n    am: string = \"AM\";\r\n    ok: string = \"Ok\";\r\n    cancel: string = \"Cancel\";\r\n    now: string = \"Now\";\r\n}","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { BehaviorSubject, Subject } from \"rxjs\";\r\nimport { lang_En, lang_Fa, Lang_Locale } from \"./utils/models\";\r\n\r\nexport interface ValidTimeResult {\r\n  isValid: boolean;\r\n  normalizedTime: string;\r\n}\r\n\r\n@Injectable()\r\nexport class QeydarDatePickerService {\r\n  activeInput$: BehaviorSubject<string> = new BehaviorSubject('');\r\n  locale: Lang_Locale;\r\n  /**\r\n   *\r\n   */\r\n  constructor(public locale_fa: lang_Fa, public locale_en: lang_En) {\r\n  }\r\n\r\n  getActiveInputValue() {\r\n    return this.activeInput$.getValue();\r\n  }\r\n}\r\n\r\n@Injectable()\r\nexport class DestroyService extends Subject<void> implements OnDestroy {\r\n  ngOnDestroy(): void {\r\n    this.next();\r\n    this.complete();\r\n  }\r\n}","/**\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/NG-ZORRO/../blob/master/LICENSE\r\n */\r\n\r\nimport {\r\n    CdkConnectedOverlay,\r\n    CdkOverlayOrigin,\r\n    ConnectedOverlayPositionChange,\r\n    FlexibleConnectedPositionStrategyOrigin,\r\n    ConnectionPositionPair \r\n} from '@angular/cdk/overlay';\r\nimport { coerceBooleanProperty, _isNumberValue } from '@angular/cdk/coercion';\r\nimport { Directive, ElementRef, Input } from '@angular/core';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { DestroyService } from '../../date-picker.service';\r\n\r\nexport type SafeAny = any;\r\n\r\nfunction propDecoratorFactory<T, D>(\r\n    name: string,\r\n    fallback: (v: T) => D\r\n): (target: SafeAny, propName: string) => void {\r\n    function propDecorator(\r\n        target: SafeAny,\r\n        propName: string,\r\n        originalDescriptor?: TypedPropertyDescriptor<SafeAny>\r\n    ): SafeAny {\r\n        const privatePropName = `$$__zorroPropDecorator__${propName}`;\r\n\r\n        if (Object.prototype.hasOwnProperty.call(target, privatePropName)) {\r\n            console.warn(`The prop \"${privatePropName}\" is already exist, it will be overrided by ${name} decorator.`);\r\n        }\r\n\r\n        Object.defineProperty(target, privatePropName, {\r\n            configurable: true,\r\n            writable: true\r\n        });\r\n\r\n        return {\r\n            get(): string {\r\n                return originalDescriptor && originalDescriptor.get\r\n                    ? originalDescriptor.get.bind(this)()\r\n                    : this[privatePropName];\r\n            },\r\n            set(value: T): void {\r\n                if (originalDescriptor && originalDescriptor.set) {\r\n                    originalDescriptor.set.bind(this)(fallback(value));\r\n                }\r\n                this[privatePropName] = fallback(value);\r\n            }\r\n        };\r\n    }\r\n\r\n    return propDecorator;\r\n}\r\n\r\n/**\r\n * Input decorator that handle a prop to do get/set automatically with toBoolean\r\n *\r\n * Why not using @InputBoolean alone without @Input? AOT needs @Input to be visible\r\n *\r\n * @howToUse\r\n * ```\r\n * @Input() @InputBoolean() visible: boolean = false;\r\n *\r\n * // Act as below:\r\n * // @Input()\r\n * // get visible() { return this.__visible; }\r\n * // set visible(value) { this.__visible = value; }\r\n * // __visible = false;\r\n * ```\r\n */\r\nexport function InputBoolean(): any {\r\n    return propDecoratorFactory('InputBoolean', toBoolean);\r\n}\r\n\r\nexport function toBoolean(value: boolean | string): boolean {\r\n    return coerceBooleanProperty(value);\r\n}\r\n\r\n/** Equivalent of `ClientRect` without some of the properties we don't care about. */\r\ntype Dimensions = Omit<ClientRect, 'x' | 'y' | 'toJSON'>;\r\n\r\n@Directive({\r\n    selector: '[cdkConnectedOverlay][nzConnectedOverlay]',\r\n    exportAs: 'nzConnectedOverlay',\r\n    standalone: true,\r\n    providers: [DestroyService]\r\n})\r\nexport class NzConnectedOverlayDirective {\r\n    @Input() @InputBoolean() nzArrowPointAtCenter: boolean = false;\r\n\r\n    constructor(\r\n        private readonly cdkConnectedOverlay: CdkConnectedOverlay,\r\n        private readonly nzDestroyService: DestroyService\r\n    ) {\r\n        this.cdkConnectedOverlay.backdropClass = 'nz-overlay-transparent-backdrop';\r\n\r\n        this.cdkConnectedOverlay.positionChange\r\n            .pipe(takeUntil(this.nzDestroyService))\r\n            .subscribe((position: ConnectedOverlayPositionChange) => {\r\n                if (this.nzArrowPointAtCenter) {\r\n                    this.updateArrowPosition(position);\r\n                }\r\n            });\r\n    }\r\n\r\n    private updateArrowPosition(position: ConnectedOverlayPositionChange): void {\r\n        const originRect = this.getOriginRect();\r\n        const placement = getPlacementName(position);\r\n\r\n        let offsetX: number | undefined = 0;\r\n        let offsetY: number | undefined = 0;\r\n\r\n        if (placement === 'topLeft' || placement === 'bottomLeft') {\r\n            offsetX = originRect.width / 2 - 14;\r\n        } else if (placement === 'topRight' || placement === 'bottomRight') {\r\n            offsetX = -(originRect.width / 2 - 14);\r\n        } else if (placement === 'leftTop' || placement === 'rightTop') {\r\n            offsetY = originRect.height / 2 - 10;\r\n        } else if (placement === 'leftBottom' || placement === 'rightBottom') {\r\n            offsetY = -(originRect.height / 2 - 10);\r\n        }\r\n\r\n        if (this.cdkConnectedOverlay.offsetX !== offsetX || this.cdkConnectedOverlay.offsetY !== offsetY) {\r\n            this.cdkConnectedOverlay.offsetY = offsetY;\r\n            this.cdkConnectedOverlay.offsetX = offsetX;\r\n            this.cdkConnectedOverlay.overlayRef.updatePosition();\r\n        }        \r\n    }\r\n\r\n    private getFlexibleConnectedPositionStrategyOrigin(): FlexibleConnectedPositionStrategyOrigin {\r\n        if (this.cdkConnectedOverlay.origin instanceof CdkOverlayOrigin) {\r\n            return this.cdkConnectedOverlay.origin.elementRef;\r\n        } else {\r\n            return this.cdkConnectedOverlay.origin;\r\n        }\r\n    }\r\n\r\n    private getOriginRect(): Dimensions {\r\n        const origin = this.getFlexibleConnectedPositionStrategyOrigin();\r\n\r\n        if (origin instanceof ElementRef) {\r\n            return origin.nativeElement.getBoundingClientRect();\r\n        }\r\n\r\n        // Check for Element so SVG elements are also supported.\r\n        if (origin instanceof Element) {\r\n            return origin.getBoundingClientRect();\r\n        }\r\n\r\n        const width = origin.width || 0;\r\n        const height = origin.height || 0;\r\n        \r\n        // If the origin is a point, return a client rect as if it was a 0x0 element at the point.\r\n        return {\r\n            top: origin.y,\r\n            bottom: origin.y + height,\r\n            left: origin.x,\r\n            right: origin.x + width,\r\n            height,\r\n            width\r\n        };\r\n    }\r\n}\r\n\r\n//overlay-position.ts:\r\nexport const POSITION_MAP = {\r\n    top: new ConnectionPositionPair({ originX: 'center', originY: 'top' }, { overlayX: 'center', overlayY: 'bottom' }),\r\n    topCenter: new ConnectionPositionPair(\r\n      { originX: 'center', originY: 'top' },\r\n      { overlayX: 'center', overlayY: 'bottom' }\r\n    ),\r\n    topLeft: new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }),\r\n    topRight: new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'bottom' }),\r\n    right: new ConnectionPositionPair({ originX: 'end', originY: 'center' }, { overlayX: 'start', overlayY: 'center' }),\r\n    rightTop: new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'start', overlayY: 'top' }),\r\n    rightBottom: new ConnectionPositionPair(\r\n      { originX: 'end', originY: 'bottom' },\r\n      { overlayX: 'start', overlayY: 'bottom' }\r\n    ),\r\n    bottom: new ConnectionPositionPair({ originX: 'center', originY: 'bottom' }, { overlayX: 'center', overlayY: 'top' }),\r\n    bottomCenter: new ConnectionPositionPair(\r\n      { originX: 'center', originY: 'bottom' },\r\n      { overlayX: 'center', overlayY: 'top' }\r\n    ),\r\n    bottomLeft: new ConnectionPositionPair(\r\n      { originX: 'start', originY: 'bottom' },\r\n      { overlayX: 'start', overlayY: 'top' }\r\n    ),\r\n    bottomRight: new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' }),\r\n    left: new ConnectionPositionPair({ originX: 'start', originY: 'center' }, { overlayX: 'end', overlayY: 'center' }),\r\n    leftTop: new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'end', overlayY: 'top' }),\r\n    leftBottom: new ConnectionPositionPair(\r\n      { originX: 'start', originY: 'bottom' },\r\n      { overlayX: 'end', overlayY: 'bottom' }\r\n    )\r\n  };\r\nexport type POSITION_TYPE = keyof typeof POSITION_MAP;\r\nexport type POSITION_TYPE_HORIZONTAL = Extract<\r\n  POSITION_TYPE,\r\n  'bottomLeft' | 'bottomCenter' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight'\r\n>;\r\n\r\nexport const DEFAULT_TOOLTIP_POSITIONS = [POSITION_MAP.top, POSITION_MAP.right, POSITION_MAP.bottom, POSITION_MAP.left];\r\n\r\nexport const DEFAULT_CASCADER_POSITIONS = [\r\n  POSITION_MAP.bottomLeft,\r\n  POSITION_MAP.bottomRight,\r\n  POSITION_MAP.topLeft,\r\n  POSITION_MAP.topRight,\r\n  POSITION_MAP.topCenter,\r\n  POSITION_MAP.bottomCenter\r\n];\r\n\r\nexport const DEFAULT_MENTION_TOP_POSITIONS = [\r\n  new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'bottom' }),\r\n  new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'end', overlayY: 'bottom' })\r\n];\r\n\r\nexport const DEFAULT_MENTION_BOTTOM_POSITIONS = [\r\n  POSITION_MAP.bottomLeft,\r\n  new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' })\r\n];\r\n\r\nexport function getPlacementName(position: ConnectedOverlayPositionChange): string | undefined {\r\n  for (const placement in POSITION_MAP) {\r\n    if (\r\n      position.connectionPair.originX === POSITION_MAP[placement as POSITION_TYPE].originX &&\r\n      position.connectionPair.originY === POSITION_MAP[placement as POSITION_TYPE].originY &&\r\n      position.connectionPair.overlayX === POSITION_MAP[placement as POSITION_TYPE].overlayX &&\r\n      position.connectionPair.overlayY === POSITION_MAP[placement as POSITION_TYPE].overlayY\r\n    ) {\r\n      return placement;\r\n    }\r\n  }\r\n  return undefined;\r\n}\r\n\r\nexport const DATE_PICKER_POSITION_MAP = {\r\n  bottomLeft: new ConnectionPositionPair(\r\n    { originX: 'start', originY: 'bottom' },\r\n    { overlayX: 'start', overlayY: 'top' },\r\n    undefined,\r\n    2\r\n  ),\r\n  topLeft: new ConnectionPositionPair(\r\n    { originX: 'start', originY: 'top' },\r\n    { overlayX: 'start', overlayY: 'bottom' },\r\n    undefined,\r\n    -2\r\n  ),\r\n  bottomRight: new ConnectionPositionPair(\r\n    { originX: 'end', originY: 'bottom' },\r\n    { overlayX: 'end', overlayY: 'top' },\r\n    undefined,\r\n    2\r\n  ),\r\n  topRight: new ConnectionPositionPair(\r\n    { originX: 'end', originY: 'top' },\r\n    { overlayX: 'end', overlayY: 'bottom' },\r\n    undefined,\r\n    -2\r\n  )\r\n};\r\n\r\nexport const DEFAULT_DATE_PICKER_POSITIONS = [\r\n  DATE_PICKER_POSITION_MAP.bottomLeft,\r\n  DATE_PICKER_POSITION_MAP.topLeft,\r\n  DATE_PICKER_POSITION_MAP.bottomRight,\r\n  DATE_PICKER_POSITION_MAP.topRight\r\n];\r\n  ","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[qeydar-dateMask]',\r\n  standalone: true\r\n})\r\nexport class DateMaskDirective {\r\n  @Input('qeydar-dateMask') dateFormat: string = 'yyyy/MM/dd';\r\n  @Input() disableInputMask = false;\r\n\r\n  delimiters: string[] = [];\r\n  parts: string[] = [];\r\n  lastValue: string = '';\r\n\r\n  constructor(public el: ElementRef) {}\r\n\r\n  ngOnInit() {\r\n    this.parseFormat();\r\n  }\r\n\r\n  parseFormat() {\r\n    if (this.disableInputMask)\r\n      return;\r\n\r\n    this.parts = [];\r\n    this.delimiters = [];\r\n    let currentPart = '';\r\n    \r\n    for (let i = 0; i < this.dateFormat.length; i++) {\r\n      const char = this.dateFormat[i];\r\n      \r\n      if (this.isFormatChar(char)) {\r\n        currentPart += char;\r\n      } else {\r\n        if (currentPart) {\r\n          this.parts.push(currentPart);\r\n          currentPart = '';\r\n        }\r\n        this.delimiters.push(char);\r\n      }\r\n    }\r\n    \r\n    if (currentPart) {\r\n      this.parts.push(currentPart);\r\n    }\r\n  }\r\n\r\n  isFormatChar(char: string): boolean {\r\n    return /[yMdHhmsa]/i.test(char);\r\n  }\r\n\r\n  @HostListener('input', ['$event'])\r\n  onInput(event: InputEvent) {\r\n    if (this.disableInputMask)\r\n      return;\r\n\r\n    const input = event.target as HTMLInputElement;\r\n    const cursorPosition = input.selectionStart || 0;\r\n    let value = input.value.replace(/[^0-9APMapm\\s:/\\-\\.]/g, '');\r\n    \r\n    // Allow backspace/delete\r\n    if (value.length < this.lastValue.length) {\r\n      this.lastValue = value;\r\n      return;\r\n    }\r\n\r\n    let formattedParts: string[] = [];\r\n    let currentValue = value;\r\n    let shouldAddDelimiter = false;\r\n    let totalLength = 0;\r\n    let newCursorPosition = cursorPosition;\r\n\r\n    for (let i = 0; i < this.parts.length; i++) {\r\n      const part = this.extractPart(currentValue, this.parts[i]);\r\n      if (!part && part !== '0') break;\r\n\r\n      const expectedLength = this.getPartLength(this.parts[i]);\r\n      let formattedPart = part;\r\n\r\n      if (formattedPart.length >= expectedLength) {\r\n        formattedPart = this.validatePart(formattedPart.slice(0, expectedLength), this.parts[i]);\r\n        shouldAddDelimiter = true;\r\n      }\r\n\r\n      formattedParts.push(formattedPart);\r\n      totalLength += formattedPart.length;\r\n\r\n      if (shouldAddDelimiter && i < this.parts.length - 1) {\r\n        formattedParts.push(this.delimiters[i] || '');\r\n        totalLength += 1;\r\n        shouldAddDelimiter = false;\r\n\r\n        if (cursorPosition === totalLength - 1) {\r\n          newCursorPosition = totalLength;\r\n        }\r\n      }\r\n\r\n      currentValue = this.removeProcessedPart(currentValue, part);\r\n    }\r\n\r\n    const formattedValue = formattedParts.join('');\r\n    input.value = formattedValue;\r\n\r\n    // Set cursor position\r\n    newCursorPosition = Math.min(newCursorPosition, totalLength);\r\n    input.setSelectionRange(newCursorPosition, newCursorPosition);\r\n\r\n    this.lastValue = formattedValue;\r\n  }\r\n\r\n  extractPart(value: string, format: string): string {\r\n    if (!value) return '';\r\n\r\n    if (format[0].toLowerCase() === 'a') {\r\n      // Handle AM/PM\r\n      const match = value.match(/^[AaPp][Mm]?/);\r\n      return match ? match[0].toUpperCase() : '';\r\n    }\r\n\r\n    // Handle numeric parts\r\n    const match = value.match(/^\\d+/);\r\n    return match ? match[0] : '';\r\n  }\r\n\r\n  removeProcessedPart(value: string, part: string): string {\r\n    if (!part) return value;\r\n    \r\n    // Remove part and following delimiter if exists\r\n    const remainingValue = value.slice(part.length);\r\n    return remainingValue.replace(/^[:/\\s-]/, '');\r\n  }\r\n\r\n  @HostListener('keydown', ['$event'])\r\n  onKeyDown(event: KeyboardEvent) {\r\n    if (this.disableInputMask)\r\n      return;\r\n\r\n    const input = event.target as HTMLInputElement;\r\n    const cursorPosition = input.selectionStart || 0;\r\n    \r\n    // Allow control keys\r\n    if (event.key === 'Backspace' || event.key === 'Delete' || \r\n        event.key === 'ArrowLeft' || event.key === 'ArrowRight' || \r\n        event.key === 'Tab' || event.ctrlKey) {\r\n      return;\r\n    }\r\n\r\n    const currentPartIndex = this.getCurrentPartIndex(input.value, cursorPosition);\r\n    if (currentPartIndex === -1) return;\r\n\r\n    const currentFormat = this.parts[currentPartIndex];\r\n    const isTimeDelimiter = event.key === ':' && cursorPosition > 0 && \r\n                           (this.parts[currentPartIndex - 1]?.includes('H') || \r\n                            this.parts[currentPartIndex - 1]?.includes('h'));\r\n\r\n    // Allow time delimiter after hours\r\n    if (isTimeDelimiter) {\r\n      if (this.delimiters[currentPartIndex - 1] === ':') {\r\n        const parts = input.value.split(/[:/\\s-]/);\r\n        const currentPart = this.validatePart(parts[currentPartIndex - 1], this.parts[currentPartIndex - 1]);\r\n        parts[currentPartIndex - 1] = currentPart;\r\n        \r\n        const newValue = parts.slice(0, currentPartIndex).join(this.delimiters[currentPartIndex - 1]) + ':';\r\n        input.value = newValue + parts.slice(currentPartIndex).join(this.delimiters[currentPartIndex]);\r\n        \r\n        input.setSelectionRange(newValue.length, newValue.length);\r\n        event.preventDefault();\r\n      }\r\n      return;\r\n    }\r\n\r\n    // Handle AM/PM input\r\n    if (currentFormat[0].toLowerCase() === 'a') {\r\n      if (!/^[AaPpMm]$/.test(event.key)) {\r\n        event.preventDefault();\r\n      }\r\n      return;\r\n    }\r\n\r\n    // Allow only digits for other parts\r\n    if (!/^\\d$/.test(event.key)) {\r\n      event.preventDefault();\r\n    }\r\n  }\r\n\r\n  validatePart(value: string, format: string): string {\r\n    if (value === '') return '';\r\n    \r\n    const type = format[0].toLowerCase();\r\n    if (type === 'a') {\r\n      const upperValue = value.toUpperCase();\r\n      if (value.length === 1) {\r\n        return upperValue === 'A' || upperValue === 'P' ? upperValue : '';\r\n      }\r\n      return ['AM', 'PM'].includes(upperValue) ? upperValue : upperValue[0];\r\n    }\r\n\r\n    const numValue = parseInt(value, 10);\r\n    switch (type) {\r\n      case 'h': // 12-hour format\r\n        if (format[0] == 'H')\r\n          return Math.min(Math.max(numValue, 0), 23).toString().padStart(2, '0');\r\n\r\n        return Math.min(Math.max(numValue, 1), 12).toString().padStart(2, '0');\r\n      \r\n      case 'm': // month or minute\r\n        if (format === 'MM') {\r\n          return Math.min(Math.max(numValue, 1), 12).toString().padStart(2, '0');\r\n        }\r\n        return Math.min(Math.max(numValue, 0), 59).toString().padStart(2, '0');\r\n      \r\n      case 's': // seconds\r\n        return Math.min(Math.max(numValue, 0), 59).toString().padStart(2, '0');\r\n      \r\n      case 'd': // day\r\n        return Math.min(Math.max(numValue, 1), 31).toString().padStart(2, '0');\r\n      \r\n      case 'y': // year\r\n        if (format.length === 2) return value.padStart(2, '0');\r\n        return value.padStart(4, '0');\r\n      \r\n      default:\r\n        return value;\r\n    }\r\n  }\r\n\r\n  getPartLength(format: string): number {\r\n    const type = format[0].toLowerCase();\r\n    switch (type) {\r\n      case 'y': return format.length === 2 ? 2 : 4;\r\n      case 'a': return format.length === 1 ? 1 : 2;\r\n      default: return 2;\r\n    }\r\n  }\r\n\r\n  getCurrentPartIndex(value: string, cursorPosition: number): number {\r\n    const parts = value.split(/[:/\\s-]/);\r\n    let currentIndex = 0;\r\n    let totalLength = 0;\r\n\r\n    for (let i = 0; i < parts.length; i++) {\r\n      totalLength += parts[i].length;\r\n      if (cursorPosition <= totalLength + i) {\r\n        return i;\r\n      }\r\n      totalLength += 1; // Add delimiter length\r\n    }\r\n\r\n    return parts.length - 1;\r\n  }\r\n}","/**\r\n * Time Picker Component\r\n * A customizable time picker that supports 12/24 hour formats, seconds, and multiple locales.\r\n * \r\n * Features:\r\n * - 12/24 hour format\r\n * - Optional seconds\r\n * - Localization support\r\n * - String or Date value types\r\n * - Min/Max time validation\r\n * - Custom styling\r\n */\r\nimport { Component, ElementRef, forwardRef, Input, OnInit, Output, EventEmitter, ViewChild, OnDestroy, HostListener, ChangeDetectorRef, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { CdkOverlayOrigin, ConnectedOverlayPositionChange, OverlayModule } from '@angular/cdk/overlay';\r\nimport { slideMotion } from '../utils/animation/slide';\r\nimport { Lang_Locale } from '../utils/models';\r\nimport { QeydarDatePickerService } from '../date-picker.service';\r\nimport { DateAdapter, GregorianDateAdapter, JalaliDateAdapter } from '../date-adapter';\r\nimport { TimeConfig, TimeFormat, TimeValueType } from '../utils/types';\r\nimport { DEFAULT_DATE_PICKER_POSITIONS, NzConnectedOverlayDirective } from \"../utils/overlay/overlay\"\r\nimport { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\r\nimport { DateMaskDirective } from '../utils/input-mask.directive';\r\n\r\n@Component({\r\n  selector: 'qeydar-time-picker',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  template: `\r\n    <div class=\"time-picker-wrapper\" [formGroup]=\"form\">\r\n      <!-- Regular input mode -->\r\n      <ng-container *ngIf=\"!inline\">\r\n        <div class=\"input-wrapper\" [class.focus]=\"isOpen\" [class.disabled]=\"disabled\">\r\n          <input\r\n            #timePickerInput\r\n            [qeydar-dateMask]=\"displayFormat\"\r\n            [disableInputMask]=\"disableInputMask\"\r\n            [class.disabled]=\"disabled\"\r\n            type=\"text\"\r\n            class=\"time-picker-input\"\r\n            [class.focus]=\"isOpen\"\r\n            formControlName=\"timeInput\"\r\n            (focus)=\"onFocusInput()\"\r\n            [placeholder]=\"placeholder\"\r\n            [readonly]=\"readOnly || readOnlyInput\"\r\n            [attr.disabled]=\"disabled? 'disabled':null\"\r\n          >\r\n          <button *ngIf=\"showIcon\" class=\"time-button\" (click)=\"toggleTimePicker($event)\" tabindex=\"-1\">\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#999\" stroke-width=\"2\">\r\n              <circle cx=\"12\" cy=\"12\" r=\"10\"/>\r\n              <path d=\"M12 6v6l4 2\"/>\r\n            </svg>\r\n          </button>\r\n        </div>\r\n\r\n        <ng-template\r\n          cdkConnectedOverlay\r\n          nzConnectedOverlay\r\n          [cdkConnectedOverlayOrigin]=\"origin\"\r\n          [cdkConnectedOverlayOpen]=\"isOpen\"\r\n          [cdkConnectedOverlayPositions]=\"overlayPositions\"\r\n          [cdkConnectedOverlayTransformOriginOn]=\"'.time-picker-popup'\"\r\n          [cdkConnectedOverlayHasBackdrop]=\"false\"\r\n          (positionChange)=\"onPositionChange($event)\"\r\n          (detach)=\"close()\"\r\n        >\r\n          <ng-container *ngTemplateOutlet=\"timePickerContent\"></ng-container>\r\n        </ng-template>\r\n      </ng-container>\r\n\r\n      <!-- Inline mode -->\r\n      <ng-container *ngIf=\"inline\">\r\n        <ng-container *ngTemplateOutlet=\"timePickerContent\"></ng-container>\r\n      </ng-container>\r\n\r\n      <!-- Time Picker Content Template -->\r\n      <ng-template #timePickerContent>\r\n        <div \r\n          #popupWrapper \r\n          [class]=\"'time-picker-popup ' + cssClass\"\r\n          [@slideMotion]=\"'enter'\" \r\n          [class.inline]=\"inline\"\r\n          [class.disabled]=\"disabled\"\r\n          style=\"position: relative\"\r\n          (click)=\"$event.stopPropagation()\"\r\n        >\r\n          <div class=\"time-picker-content\">\r\n            <div class=\"time-columns\">\r\n              <!-- Hours -->\r\n              <div class=\"time-column\">\r\n                <div class=\"time-scroller\">\r\n                  <button\r\n                    *ngFor=\"let hour of hours\"\r\n                    [id]=\"'selector_h'+hour\"\r\n                    [class.selected]=\"selectedTime.hour === hour\"\r\n                    [class.disabled]=\"isHourDisabled(hour)\"\r\n                    (click)=\"selectHour(hour)\"\r\n                    type=\"button\"\r\n                  >\r\n                    {{ hour.toString().padStart(2, '0') }}\r\n                  </button>\r\n                </div>\r\n              </div>\r\n              \r\n              <div class=\"time-separator\">:</div>\r\n              \r\n              <!-- Minutes -->\r\n              <div class=\"time-column\">\r\n                <div class=\"time-scroller\">\r\n                  <button\r\n                    *ngFor=\"let minute of minutes\"\r\n                    [id]=\"'selector_m'+minute\"\r\n                    [class.selected]=\"selectedTime.minute === minute\"\r\n                    [class.disabled]=\"isMinuteDisabled(minute)\"\r\n                    (click)=\"selectMinute(minute)\"\r\n                    type=\"button\"\r\n                  >\r\n                    {{ minute.toString().padStart(2, '0') }}\r\n                  </button>\r\n                </div>\r\n              </div>\r\n\r\n              <!-- Seconds (if format includes seconds) -->\r\n              <ng-container *ngIf=\"showSeconds\">\r\n                <div class=\"time-separator\">:</div>\r\n                <div class=\"time-column\">\r\n                  <div class=\"time-scroller\">\r\n                    <button\r\n                      *ngFor=\"let second of seconds\"\r\n                      [id]=\"'selector_s'+second\"\r\n                      [class.selected]=\"selectedTime.second === second\"\r\n                      [class.disabled]=\"isSecondDisabled(second)\"\r\n                      (click)=\"selectSecond(second)\"\r\n                      type=\"button\"\r\n                    >\r\n                      {{ second.toString().padStart(2, '0') }}\r\n                    </button>\r\n                  </div>\r\n                </div>\r\n              </ng-container>\r\n              \r\n              <!-- AM/PM (only in 12-hour format) -->\r\n              <ng-container *ngIf=\"timeFormat === '12'\">\r\n                <div class=\"time-column period\">\r\n                  <button\r\n                    *ngFor=\"let period of periods\"\r\n                    [class.selected]=\"selectedTime.period === period\"\r\n                    (click)=\"selectPeriod(period)\"\r\n                    type=\"button\"\r\n                  >\r\n                    {{ period }}\r\n                  </button>\r\n                </div>\r\n              </ng-container>\r\n            </div>\r\n          </div>\r\n          \r\n          <div class=\"time-picker-footer\" *ngIf=\"!inline\">\r\n            <div class=\"footer-buttons\">\r\n              <button class=\"now-btn\" (click)=\"selectNow()\" type=\"button\">{{ lang.now }}</button>\r\n            </div>\r\n            <div class=\"footer-actions\">\r\n              <button class=\"save-btn\" (click)=\"save()\" type=\"button\">{{ lang.ok }}</button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </ng-template>\r\n    </div>\r\n  `,\r\n  styleUrls: ['./time-picker.component.scss'],\r\n  standalone: true,\r\n  imports: [\r\n    NgIf,\r\n    NgFor,\r\n    ReactiveFormsModule,\r\n    NgTemplateOutlet,\r\n    DateMaskDirective,\r\n    OverlayModule,\r\n    NzConnectedOverlayDirective\r\n  ],\r\n  providers: [\r\n    QeydarDatePickerService,\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => TimePickerComponent),\r\n      multi: true\r\n    }\r\n  ],\r\n  host: {\r\n    '(click)': 'open()'\r\n  },\r\n  animations: [slideMotion]\r\n})\r\nexport class TimePickerComponent implements ControlValueAccessor, OnInit, OnDestroy, OnChanges {\r\n  @Input() placeholder?: string;\r\n  @Input() rtl = false;\r\n  @Input() placement: 'left' | 'right' = 'right';\r\n  @Input() minTime?: string;\r\n  @Input() maxTime?: string;\r\n  @Input() lang!: Lang_Locale;\r\n  @Input() valueType: TimeValueType = 'string';\r\n  @Input() cssClass = '';\r\n  @Input() showIcon = true;\r\n  @Input() dateAdapter: DateAdapter<Date>;\r\n  @Input() inline = false;\r\n  @Input() disableInputMask = false;\r\n  @Input() disabled = false;\r\n  @Input() disabledTimesFilter: (date: Date) => boolean;\r\n  @Input() allowEmpty = true;\r\n  @Input() readOnly = false;\r\n  @Input() readOnlyInput = false;\r\n  @Input() set displayFormat(value: string) {\r\n    this._displayFormat = value;\r\n    this.showSeconds = value.toLowerCase().includes('s');\r\n    // Infer time format from display format\r\n    this.timeFormat = this.getTimeFormatFromDisplayFormat(value);\r\n    this.updateHourRange();\r\n    this.updateTimeDisplay();\r\n  }\r\n  get displayFormat(): string {\r\n    return this._displayFormat;\r\n  }\r\n  @Input() set selectedDate(date: Date){\r\n    if (date) {\r\n      this._selectedDate = date;\r\n    }\r\n  }\r\n  get selectedDate() : Date {\r\n    return this._selectedDate;\r\n  }\r\n  \r\n\r\n  @Output() timeChange = new EventEmitter<Date | string>();\r\n  @Output() openChange = new EventEmitter<boolean>();\r\n\r\n  @ViewChild('timePickerInput') timePickerInput!: ElementRef<HTMLInputElement>;\r\n  @ViewChild('popupWrapper') popupWrapper!: ElementRef<HTMLDivElement>;\r\n\r\n  timeFormat: TimeFormat = '12';\r\n  private _displayFormat = 'hh:mm a';\r\n  private _value: string | Date | null = null;\r\n  private _selectedDate: Date = new Date();\r\n  private onChange: (value: any) => void = () => {};\r\n  private onTouched: () => void = () => {};\r\n  private timeoutId: number | null = null;\r\n\r\n  showSeconds = false;\r\n  hours: number[] = [];\r\n  minutes: number[] = Array.from({ length: 60 }, (_, i) => i);\r\n  seconds: number[] = Array.from({ length: 60 }, (_, i) => i);\r\n  periods: string[] = [];\r\n  selectedTime: TimeConfig = {\r\n    hour: 12,\r\n    minute: 0,\r\n    second: 0,\r\n    period: ''\r\n  };\r\n  isOpen = false;\r\n  form: FormGroup;\r\n  origin: CdkOverlayOrigin;\r\n  overlayPositions = [...DEFAULT_DATE_PICKER_POSITIONS];\r\n\r\n  constructor(\r\n    public fb: FormBuilder,\r\n    public elementRef: ElementRef,\r\n    public cdref: ChangeDetectorRef,\r\n    public datePickerService: QeydarDatePickerService,\r\n    public jalaliAdapter: JalaliDateAdapter,\r\n    public gregorianAdapter: GregorianDateAdapter,\r\n  ) {\r\n    this.dateAdapter = this.gregorianAdapter;\r\n    this.initializeForm();\r\n    this.initializeLocale();\r\n  }\r\n\r\n  // Lifecycle hooks\r\n  ngOnInit(): void {\r\n    this.updateHourRange();\r\n    this.origin = new CdkOverlayOrigin(this.elementRef);\r\n    this.setupInputSubscription();\r\n    this.value = this.selectedDate;\r\n\r\n    // Only add document click listener for non-inline mode\r\n    if (!this.inline) {\r\n      document.addEventListener('click', this.handleDocumentClick);\r\n    }\r\n\r\n    // Auto-open for inline mode\r\n    if (this.inline) {\r\n      this.isOpen = true;\r\n      this.scrollToTime();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.cleanupTimeouts();\r\n    document.removeEventListener('click', this.handleDocumentClick);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['rtl'] || changes['lang']) {\r\n      this.updateLocale();\r\n    }\r\n    if (changes['rtl'] && !changes['dateAdapter']) {\r\n      this.dateAdapter = this.rtl? this.jalaliAdapter: this.gregorianAdapter;\r\n    }\r\n  }\r\n\r\n  // Initialization methods\r\n  initializeForm(): void {\r\n    this.form = this.fb.group({\r\n      timeInput: ['']\r\n    });\r\n  }\r\n\r\n  initializeLocale(): void {\r\n    this.lang = this.datePickerService.locale_en;\r\n    this.selectedTime.period = this.lang.am;\r\n    this.periods = [this.lang.am, this.lang.pm];\r\n  }\r\n\r\n  updateLocale(): void {\r\n    this.lang = this.rtl ? this.datePickerService.locale_fa : this.datePickerService.locale_en;\r\n    this.selectedTime.period = this.lang.am;\r\n    this.periods = [this.lang.am, this.lang.pm];\r\n    this.placeholder = this.lang.selectTime;\r\n  }\r\n\r\n  setupInputSubscription(): void {\r\n    this.form.get('timeInput')?.valueChanges.subscribe(value => {\r\n      if (!value) return;\r\n\r\n      if (!this.isOpen) {\r\n        this.validateAndUpdateTime(value);\r\n      } else {\r\n        this.parseTimeString(value);\r\n        this.scrollToTime();\r\n      }\r\n    });\r\n  }\r\n\r\n  // Time management\r\n  updateHourRange(): void {\r\n    const format = this.getTimeFormatFromDisplayFormat(this._displayFormat);\r\n    this.hours = format === '12'\r\n      ? Array.from({ length: 12 }, (_, i) => i + 1)\r\n      : Array.from({ length: 24 }, (_, i) => i);\r\n  }\r\n\r\n  formatTime(date?: Date): string {\r\n    if (!date && !this.dateAdapter) return '';\r\n    \r\n    const currentDate = date || this.updateDateFromSelection();\r\n    return this.dateAdapter.format(currentDate, this._displayFormat);\r\n  }\r\n\r\n  parseTimeString(value: string | Date): void {\r\n    if (!this.dateAdapter) return;\r\n\r\n    const date = value instanceof Date ? value : this.dateAdapter.parse(value, this._displayFormat);\r\n    if (!date) return;\r\n\r\n    const hours = this.dateAdapter.getHours(date);\r\n    const minutes = this.dateAdapter.getMinutes(date);\r\n    const seconds = this.dateAdapter.getSeconds(date);\r\n\r\n    if (hours === null || minutes === null || seconds === null) return;\r\n\r\n    this.selectedTime = {\r\n      hour: hours,\r\n      minute: minutes,\r\n      second: seconds,\r\n      period: hours >= 12 ? this.lang.pm : this.lang.am\r\n    };\r\n\r\n    this.cdref.markForCheck();\r\n  }\r\n\r\n  // Value accessors and form control\r\n  get value(): Date | string | null {\r\n    return this._value;\r\n  }\r\n  \r\n  set value(val: Date | string | null) {\r\n    this._value = val;\r\n    this.updateFromValue(val);\r\n  }\r\n\r\n  updateFromValue(value: Date | string | null): void {\r\n    if (!value) {\r\n      this.resetSelection();\r\n      return;\r\n    }\r\n\r\n    if (value instanceof Date) {\r\n      this.updateFromDate(value);\r\n    } else {\r\n      this.parseTimeString(value);\r\n    }\r\n  }\r\n\r\n  updateFromDate(date: Date | null): void {\r\n    if (date && !isNaN(date.getTime()) && this.dateAdapter) {\r\n      const hours = this.dateAdapter.getHours(date);\r\n      if (hours === null) return;\r\n\r\n      this.selectedTime = {\r\n        hour: hours,\r\n        minute: this.dateAdapter.getMinutes(date) ?? 0,\r\n        second: this.dateAdapter.getSeconds(date) ?? 0,\r\n        period: hours >= 12 ? this.lang.pm : this.lang.am\r\n      };\r\n    } else {\r\n      this.resetSelection();\r\n    }\r\n\r\n    this.cdref.markForCheck();\r\n  }\r\n\r\n  resetSelection(): void {\r\n    this.selectedTime = {\r\n      hour: 0,\r\n      minute: 0,\r\n      second: 0,\r\n      period: this.lang.am\r\n    };\r\n    this.cdref.markForCheck();\r\n  }\r\n\r\n  writeValue(value: Date | string | null): void {\r\n    if (!value) {\r\n      this.value = null;\r\n      return;\r\n    }\r\n\r\n    if (value instanceof Date) {\r\n      this.value = value;\r\n    } else if (value.trim()) {\r\n      const date = this.selectedDate;\r\n      this.value = !isNaN(date.getTime()) && this.valueType === 'date' ? date : value;\r\n      this.parseTimeString(value);\r\n    }\r\n    \r\n    this.updateTimeDisplay();\r\n    this.save(false);\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  // UI Event handlers\r\n  @HostListener('keydown', ['$event'])\r\n  handleKeydown(event: KeyboardEvent): void {\r\n    if (event.key === 'Tab' || event.key === 'Enter') {\r\n      this.handleTimeInput();\r\n      if (event.key === 'Tab') this.close();\r\n    } else if (event.key === 'Escape') {\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  handleTimeInput(): void {\r\n    const currentValue = this.form.get('timeInput')?.value;\r\n    if (currentValue || (!currentValue && !this.allowEmpty)) {\r\n      this.validateAndUpdateTime(currentValue);\r\n    }\r\n  }\r\n\r\n  handleDocumentClick = (event: MouseEvent): void => {\r\n    if (!this.elementRef.nativeElement.contains(event.target) && this.isOpen) {\r\n      this.close();\r\n      this.handleTimeInput();\r\n    }\r\n  }\r\n\r\n  onFocusInput(): void {\r\n    if (!this.isOpen) {\r\n      this.open();\r\n    }\r\n  }\r\n\r\n  toggleTimePicker(event: Event): void {\r\n    event.stopPropagation();\r\n    this.isOpen ? this.close() : this.open();\r\n  }\r\n\r\n  // Picker operations\r\n  open(): void {\r\n    if (this.inline || this.disabled || this.readOnly) return;\r\n\r\n    const wasOpen = this.isOpen;\r\n    this.isOpen = true;\r\n    this.openChange.emit(true);\r\n    this.scrollToTime();\r\n\r\n    if (!wasOpen) {\r\n      this.cdref.markForCheck();\r\n    }\r\n  }\r\n\r\n  close(): void {\r\n    if (this.inline) return;\r\n\r\n    this.cleanupTimeouts();\r\n    if (this.isOpen) {\r\n      this.isOpen = false;\r\n      this.openChange.emit(false);\r\n      this.cdref.markForCheck();\r\n    }\r\n  }\r\n\r\n  // Selection methods\r\n  selectHour(hour: number): void {\r\n    if (!this.isHourDisabled(hour)) {\r\n      this.selectedTime.hour = hour;\r\n      this.updateTimeDisplay();\r\n      this.scrollToSelectedItem(`h${hour}`);\r\n      if (this.inline) this.save();\r\n    }\r\n  }\r\n\r\n  selectMinute(minute: number): void {\r\n    if (!this.isMinuteDisabled(minute)) {\r\n      this.selectedTime.minute = minute;\r\n      this.updateTimeDisplay();\r\n      this.scrollToSelectedItem(`m${minute}`);\r\n      if (this.inline) this.save();\r\n    }\r\n  }\r\n\r\n  selectSecond(second: number): void {\r\n    if (!this.isSecondDisabled(second)) {\r\n      this.selectedTime.second = second;\r\n      this.updateTimeDisplay();\r\n      this.scrollToSelectedItem(`s${second}`);\r\n      if (this.inline) this.save();\r\n    }\r\n  }\r\n\r\n  selectPeriod(period: string): void {\r\n    this.selectedTime.period = period;\r\n    this.updateTimeDisplay();\r\n  }\r\n\r\n  selectNow(): void {\r\n    const now = this.selectedDate;\r\n    this.selectedTime = {\r\n      hour: now.getHours(),\r\n      minute: now.getMinutes(),\r\n      second: now.getSeconds(),\r\n      period: now.getHours() >= 12 ? this.lang.pm : this.lang.am\r\n    };\r\n    \r\n    this.updateTimeDisplay();\r\n    this.scrollToTime();\r\n    this.save();\r\n  }\r\n\r\n  save(close = true): void {\r\n    const date = this.updateDateFromSelection();\r\n    const { isValid, normalizedDate } = this.validateAndNormalizeTime(date);\r\n\r\n    if (!isValid || !normalizedDate) return;\r\n\r\n    const outputValue = this.valueType === 'date' \r\n      ? normalizedDate \r\n      : this.formatTime(normalizedDate);\r\n\r\n    const valueChanged = JSON.stringify(this._value) !== JSON.stringify(outputValue);\r\n    if (valueChanged) {\r\n      this._value = outputValue;\r\n      this.form.get('timeInput')?.setValue(this.formatTime(normalizedDate), { emitEvent: false });\r\n      \r\n      this.onChange(outputValue);\r\n      this.timeChange.emit(outputValue);\r\n      this.cdref.markForCheck();\r\n    }\r\n\r\n    if (close && !this.inline) {\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  // Validation methods\r\n  validateAndUpdateTime(value: string): void {\r\n    if (!value || !this.dateAdapter) {\r\n      this.updateTimeDisplay();\r\n      return;\r\n    }\r\n  \r\n    try {\r\n      const parsedDate = this.dateAdapter.parse(value, this._displayFormat);\r\n      if (!parsedDate) {\r\n        this.updateTimeDisplay();\r\n        return;\r\n      }\r\n\r\n      const { isValid, normalizedDate } = this.validateAndNormalizeTime(parsedDate);\r\n      const formattedTime = this.dateAdapter.format(normalizedDate, this._displayFormat);\r\n      this.form.get('timeInput')?.setValue(formattedTime, { emitEvent: false });\r\n      this.parseTimeString(normalizedDate);\r\n  \r\n      const outputValue = this.valueType === 'date' ? normalizedDate : formattedTime;\r\n      this._value = outputValue;\r\n      this.onChange(outputValue);\r\n      this.timeChange.emit(outputValue);\r\n  \r\n    } catch (error) {\r\n      console.error('Error normalizing time:', error);\r\n      this.updateTimeDisplay();\r\n    }\r\n  }\r\n\r\n  isHourDisabled(hour: number): boolean {\r\n    if (!this.dateAdapter) return false;\r\n    return this.isFullHourDisabled(hour);\r\n  }\r\n\r\n  isMinuteDisabled(minute: number): boolean {\r\n    if (!this.dateAdapter) return false;\r\n    return this.isFullMinuteDisabled(minute);\r\n  }\r\n\r\n  isSecondDisabled(second: number): boolean {\r\n    if (!this.dateAdapter) return false;\r\n    const testConfig = { ...this.selectedTime, second };\r\n    const testDate = this.createDateWithTime(testConfig);\r\n    return this.isTimeDisabled(testDate);\r\n  }\r\n\r\n  isTimeDisabled(testDate: Date): boolean {\r\n    if (!this.dateAdapter) return false;\r\n\r\n    if (this.minTime) {\r\n      const minDate = this.dateAdapter.parse(this.minTime, this._displayFormat);\r\n      if (minDate && this.dateAdapter.isBefore(testDate, minDate)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (this.maxTime) {\r\n      const maxDate = this.dateAdapter.parse(this.maxTime, this._displayFormat);\r\n      if (maxDate && this.dateAdapter.isAfter(testDate, maxDate)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return this.disabledTimesFilter ? this.disabledTimesFilter(testDate) : false;\r\n  }\r\n\r\n  validateAndNormalizeTime(date: Date): { isValid: boolean; normalizedDate: Date | null } {\r\n    if (!this.dateAdapter) {\r\n      return { isValid: false, normalizedDate: null };\r\n    }\r\n  \r\n    let isValid = true;\r\n    // Clone the date to avoid modifying the original\r\n    let normalizedDate = this.dateAdapter.clone(date);\r\n    if (this.isTimeDisabled(normalizedDate)) {\r\n      isValid = false;\r\n      // Try to find nearest valid time (check next and previous 48 intervals of 30 minutes)\r\n      for (let i = 1; i <= 48; i++) {\r\n        const nextTime = this.dateAdapter.addMinutes(date, i * 30);\r\n        const prevTime = this.dateAdapter.addMinutes(date, -i * 30);\r\n  \r\n        if (!this.isTimeDisabled(nextTime)) {\r\n          normalizedDate = nextTime;\r\n          break;\r\n        }\r\n        if (!this.isTimeDisabled(prevTime)) {\r\n          normalizedDate = prevTime;\r\n          break;\r\n        }\r\n      }\r\n  \r\n      // If still disabled after trying to find valid time\r\n      if (this.isTimeDisabled(normalizedDate)) {\r\n        return { isValid: false, normalizedDate: null };\r\n      }\r\n    }\r\n  \r\n    return { isValid: isValid, normalizedDate };\r\n  }\r\n\r\n  private isFullHourDisabled(hour: number): boolean {\r\n    for (let minute = 0; minute < 60; minute++) {\r\n      const testConfig = {\r\n        ...this.selectedTime,\r\n        hour,\r\n        minute,\r\n        second: 0\r\n      };\r\n      const testDate = this.createDateWithTime(testConfig);\r\n      \r\n      if (!this.isTimeDisabled(testDate)) {\r\n        return false; // If any minute is enabled, hour is not fully disabled\r\n      }\r\n    }\r\n    return true; // All minutes in hour are disabled\r\n  }\r\n\r\n  private isFullMinuteDisabled(minute: number): boolean {\r\n    if (!this.showSeconds) {\r\n      const testConfig = {\r\n        ...this.selectedTime,\r\n        minute,\r\n        second: 0\r\n      };\r\n      const testDate = this.createDateWithTime(testConfig);\r\n      return this.isTimeDisabled(testDate);\r\n    }\r\n  \r\n    // If showing seconds, check each second\r\n    for (let second = 0; second < 60; second++) {\r\n      const testConfig = {\r\n        ...this.selectedTime,\r\n        minute,\r\n        second\r\n      };\r\n      const testDate = this.createDateWithTime(testConfig);\r\n      \r\n      if (!this.isTimeDisabled(testDate)) {\r\n        return false; // If any second is enabled, minute is not fully disabled\r\n      }\r\n    }\r\n    return true; // All seconds in minute are disabled\r\n  }\r\n\r\n  // Helper methods\r\n  createDateWithTime(config: TimeConfig): Date {\r\n    if (!this.dateAdapter) return this.selectedDate;\r\n\r\n    let testHour = config.hour;\r\n    if (this.timeFormat === '12') {\r\n      if (config.period === this.lang.pm && testHour < 12) testHour += 12;\r\n      if (config.period === this.lang.am && testHour === 12) testHour = 0;\r\n    }\r\n\r\n    let date = this.selectedDate;\r\n    date = this.dateAdapter.setHours(date, testHour);\r\n    date = this.dateAdapter.setMinutes(date, config.minute);\r\n    date = this.dateAdapter.setSeconds(date, config.second);\r\n    return date;\r\n  }\r\n\r\n  updateDateFromSelection(): Date {\r\n    if (!this.dateAdapter) return this.selectedDate;\r\n\r\n    let hours = this.selectedTime.hour;\r\n    if (this.timeFormat === '12') {\r\n      if (this.selectedTime.period === this.lang.pm && hours < 12) hours += 12;\r\n      if (this.selectedTime.period === this.lang.am && hours === 12) hours = 0;\r\n    }\r\n\r\n    let date = this._value instanceof Date ? \r\n      this.dateAdapter.clone(this._value) : \r\n      this.selectedDate;\r\n\r\n    date = this.dateAdapter.setHours(date, hours);\r\n    date = this.dateAdapter.setMinutes(date, this.selectedTime.minute);\r\n    date = this.dateAdapter.setSeconds(date, this.selectedTime.second);\r\n    \r\n    return date;\r\n  }\r\n\r\n  updateTimeDisplay(): void {\r\n    if (this.form) {\r\n      this.form.get('timeInput')?.setValue(this.formatTime(), { emitEvent: false });\r\n    }\r\n  }\r\n\r\n  getTimeFormatFromDisplayFormat(format: string): '12' | '24' {\r\n    // Check for 24-hour format indicators\r\n    const has24HourFormat = /\\bH{1,2}\\b/.test(format);\r\n    return has24HourFormat ? '24' : '12';\r\n  }\r\n\r\n  // UI Update methods\r\n  async scrollToTime(){\r\n    await this.scrollToSelectedItem(`h${this.selectedTime.hour}`, 'auto'),\r\n    await this.scrollToSelectedItem(`m${this.selectedTime.minute}`, 'auto'),\r\n    this.showSeconds ? await this.scrollToSelectedItem(`s${this.selectedTime.second}`, 'auto') : '';\r\n  }\r\n\r\n  scrollToSelectedItem(id: string, behavior: ScrollBehavior = 'smooth'): Promise<boolean> {\r\n    this.cleanupTimeouts();\r\n    return new Promise((resolve) => {\r\n      if (!id) {\r\n        resolve(false);\r\n        return;\r\n      }\r\n\r\n      this.timeoutId = window.setTimeout(() => {\r\n        const selectedElement = this.popupWrapper?.nativeElement.querySelector(`#selector_${id}`);\r\n        if (selectedElement) {\r\n          selectedElement.scrollIntoView({ behavior, block: 'center' });\r\n        }\r\n        resolve(true);\r\n      }, 0);\r\n    });\r\n  }\r\n\r\n  cleanupTimeouts(): void {\r\n    if (this.timeoutId !== null) {\r\n      window.clearTimeout(this.timeoutId);\r\n      this.timeoutId = null;\r\n    }\r\n  }\r\n\r\n  onPositionChange(position: ConnectedOverlayPositionChange): void {\r\n    this.cdref.detectChanges();\r\n  }\r\n}","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'qeydar-calendar-header',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [NgIf],\r\n  styleUrls: ['./calendar-header.component.scss'],\r\n  template: `\r\n    <div class=\"header\">\r\n      <button class=\"qeydar-calendar-nav-left\" (click)=\"prev.emit()\" [disabled]=\"prevDisabled\" tabindex=\"-1\"></button>\r\n      <span class=\"month-year\">\r\n        <span *ngIf=\"mode != 'year'\" class=\"month-name\" (click)=\"showMonths.emit()\">{{ currentMonthName }}</span>\r\n        <span class=\"year\" (click)=\"showYears.emit()\">{{ currentYear }}</span>\r\n      </span>\r\n      <button class=\"qeydar-calendar-nav-right\" (click)=\"next.emit()\" [disabled]=\"nextDisabled\" tabindex=\"-1\"></button>\r\n    </div>\r\n  `\r\n})\r\nexport class CalendarHeaderComponent {\r\n  @Input() mode: 'day' | 'month' | 'year' = 'day';\r\n  @Input() currentMonthName: string;\r\n  @Input() currentYear: number;\r\n  @Input() prevDisabled = false;\r\n  @Input() nextDisabled = false;\r\n\r\n  @Output() prev = new EventEmitter<void>();\r\n  @Output() next = new EventEmitter<void>();\r\n  @Output() showMonths = new EventEmitter<void>();\r\n  @Output() showYears = new EventEmitter<void>();\r\n}\r\n\r\n\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ElementRef, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { NgFor, NgIf } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'qeydar-calendar-sidebar',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [NgFor, NgIf],\r\n  styleUrls: ['./calendar-sidebar.component.scss'],\r\n  template: `\r\n    <ng-container *ngIf=\"showSidebar\">\r\n      <div *ngIf=\"isRange\" class=\"period-selector\">\r\n        <button\r\n          *ngFor=\"let period of periods\"\r\n          tabindex=\"-1\"\r\n          [class.active]=\"isActivePeriod(period)\"\r\n          (click)=\"selectPeriod.emit(period)\"\r\n        >\r\n          {{ period.label }}\r\n          <span *ngIf=\"period.arrow\" class=\"arrow\">→</span>\r\n        </button>\r\n      </div>\r\n      <div *ngIf=\"!isRange\" class=\"side-selector\" #itemSelector>\r\n        <ng-container *ngIf=\"viewMode == 'days'\">\r\n          <button \r\n            *ngFor=\"let month of monthListNum\"\r\n            tabindex=\"-1\"\r\n            [id]=\"'selector_'+month\"\r\n            [class.active]=\"isActiveMonth(month)\"\r\n            [disabled]=\"isMonthDisabled(month)\"\r\n            (click)=\"selectMonth.emit(month)\">\r\n            {{ getMonthName(month) }}\r\n          </button>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"viewMode == 'months'\">\r\n          <button\r\n            *ngFor=\"let year of yearList\" \r\n            tabindex=\"-1\"\r\n            [id]=\"'selector_'+year\"\r\n            [class.active]=\"isActiveYear(year)\"\r\n            [disabled]=\"isYearDisabled(year)\"\r\n            (click)=\"selectYear.emit(year)\"\r\n          >\r\n            {{ year }}\r\n          </button>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"viewMode == 'years'\">\r\n          <button\r\n            tabindex=\"-1\"\r\n            *ngFor=\"let yearRange of yearRanges\" \r\n            [id]=\"'selector_'+yearRange.start\"\r\n            [class.active]=\"isActiveYearRange(yearRange.start)\"\r\n            [disabled]=\"isYearRangeDisabled(yearRange)\"\r\n            (click)=\"selectYearRange.emit(yearRange.start)\"\r\n          >\r\n            {{ yearRange.start }} - {{ yearRange.end }}\r\n          </button>\r\n        </ng-container>\r\n      </div>\r\n    </ng-container>\r\n  `\r\n})\r\nexport class CalendarSidebarComponent implements AfterViewInit {\r\n  @Input() showSidebar = true;\r\n  @Input() isRange = false;\r\n  @Input() viewMode: 'days' | 'months' | 'years' = 'days';\r\n  @Input() periods: any[] = [];\r\n  @Input() monthListNum: number[] = [];\r\n  @Input() yearList: number[] = [];\r\n  @Input() yearRanges: Array<{ start: number; end: number }> = [];\r\n\r\n  @Input() isActivePeriod: (period: any) => boolean;\r\n  @Input() getMonthName: (month: number) => string;\r\n  @Input() isActiveMonth: (month: number) => boolean;\r\n  @Input() isMonthDisabled: (month: number) => boolean;\r\n  @Input() isActiveYear: (year: number) => boolean;\r\n  @Input() isYearDisabled: (year: number) => boolean;\r\n  @Input() isActiveYearRange: (startYear: number) => boolean;\r\n  @Input() isYearRangeDisabled: (range: { start: number; end: number }) => boolean;\r\n\r\n  @Output() selectPeriod = new EventEmitter<any>();\r\n  @Output() selectMonth = new EventEmitter<number>();\r\n  @Output() selectYear = new EventEmitter<number>();\r\n  @Output() selectYearRange = new EventEmitter<number>();\r\n\r\n  @ViewChild('itemSelector') itemSelector: ElementRef;\r\n\r\n  ngAfterViewInit(): void {}\r\n}\r\n\r\n\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\r\n@Component({\r\n  selector: 'qeydar-days-grid',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [NgIf, NgFor, NgTemplateOutlet],\r\n  styleUrls: ['./days-grid.component.scss'],\r\n  template: `\r\n    <div *ngIf=\"viewMode === 'days'\">\r\n      <div *ngIf=\"viewMode === 'days'\" class=\"weekdays\">\r\n        <span *ngFor=\"let day of weekDays\">{{ day }}</span>\r\n      </div>\r\n      <div *ngIf=\"viewMode === 'days'\" class=\"days\">\r\n        <button\r\n          *ngFor=\"let day of days\"\r\n          tabindex=\"-1\"\r\n          [class.different-month]=\"!isSameMonth(day, currentDate)\"\r\n          [class.selected]=\"isSelected(day)\"\r\n          [class.in-range]=\"isInRange(day)\"\r\n          [class.range-start]=\"isRangeStart(day)\"\r\n          [class.range-end]=\"isRangeEnd(day)\"\r\n          [class.today]=\"isToday(day)\"\r\n          [class.disabled]=\"isDateDisabled(day)\"\r\n          [disabled]=\"isDateDisabled(day)\"\r\n          (click)=\"selectDay.emit(day)\"\r\n          (mouseenter)=\"mouseEnter.emit(day)\"\r\n        >\r\n          <ng-container *ngIf=\"dayTemplate; else dayDefTemplate\">\r\n            <ng-container *ngTemplateOutlet=\"$any(dayTemplate); context: { $implicit: day }\"></ng-container>\r\n          </ng-container>\r\n          <ng-template #dayDefTemplate>\r\n            {{ getDayNumber(day) }}\r\n          </ng-template>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  `\r\n})\r\nexport class DaysGridComponent {\r\n  @Input() viewMode: 'days' | 'months' | 'years' = 'days';\r\n  @Input() days: Date[] = [];\r\n  @Input() weekDays: string[] = [];\r\n  @Input() currentDate: Date;\r\n  @Input() dayTemplate: TemplateRef<any> | null = null;\r\n\r\n  @Input() isSameMonth: (d1: Date, d2: Date) => boolean;\r\n  @Input() isSelected: (d: Date) => boolean;\r\n  @Input() isInRange: (d: Date) => boolean;\r\n  @Input() isRangeStart: (d: Date) => boolean;\r\n  @Input() isRangeEnd: (d: Date) => boolean;\r\n  @Input() isToday: (d: Date) => boolean;\r\n  @Input() isDateDisabled: (d: Date) => boolean;\r\n  @Input() getDayNumber: (d: Date) => number;\r\n\r\n  @Output() selectDay = new EventEmitter<Date>();\r\n  @Output() mouseEnter = new EventEmitter<Date>();\r\n}\r\n\r\n\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'qeydar-months-grid',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [NgIf, NgFor, NgTemplateOutlet],\r\n  styleUrls: ['./months-grid.component.scss'],\r\n  template: `\r\n    <div *ngIf=\"viewMode === 'months'\" class=\"months\">\r\n      <button\r\n        *ngFor=\"let month of monthListNum\"\r\n        tabindex=\"-1\"\r\n        [class.selected]=\"isActiveMonthNumber(month)\"\r\n        [disabled]=\"isMonthDisabled(month)\"\r\n        (click)=\"selectMonth.emit(month)\"\r\n      >\r\n        <ng-container *ngIf=\"monthTemplate; else monthDefTemplate\">\r\n          <ng-container *ngTemplateOutlet=\"$any(monthTemplate); context: { $implicit: month }\"></ng-container>\r\n        </ng-container>\r\n        <ng-template #monthDefTemplate>\r\n          {{ getMonthName(month) }}\r\n        </ng-template>\r\n      </button>\r\n    </div>\r\n  `\r\n})\r\nexport class MonthsGridComponent {\r\n  @Input() viewMode: 'days' | 'months' | 'years' = 'days';\r\n  @Input() monthListNum: number[] = [];\r\n  @Input() monthTemplate: TemplateRef<any> | null = null;\r\n\r\n  @Input() isActiveMonthNumber: (month: number) => boolean;\r\n  @Input() isMonthDisabled: (month: number) => boolean;\r\n  @Input() getMonthName: (month: number) => string;\r\n\r\n  @Output() selectMonth = new EventEmitter<number>();\r\n}\r\n\r\n\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\r\nimport { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'qeydar-years-grid',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [NgIf, NgFor, NgTemplateOutlet],\r\n  styleUrls: ['./years-grid.component.scss'],\r\n  template: `\r\n    <div *ngIf=\"viewMode === 'years' || mode == 'year'\" class=\"years\">\r\n      <button\r\n        *ngFor=\"let year of yearList\"\r\n        tabindex=\"-1\"\r\n        [class.selected]=\"isActiveYear(year)\"\r\n        [disabled]=\"isYearDisabled(year)\"\r\n        (click)=\"selectYear.emit(year)\"\r\n      >\r\n        <ng-container *ngIf=\"yearTemplate; else yearDefTemplate\">\r\n          <ng-container *ngTemplateOutlet=\"$any(yearTemplate); context: { $implicit: year }\"></ng-container>\r\n        </ng-container>\r\n        <ng-template #yearDefTemplate>\r\n          {{ year }}\r\n        </ng-template>\r\n      </button>\r\n    </div>\r\n  `\r\n})\r\nexport class YearsGridComponent {\r\n  @Input() viewMode: 'days' | 'months' | 'years' = 'days';\r\n  @Input() mode: 'day' | 'month' | 'year' = 'day';\r\n  @Input() yearList: number[] = [];\r\n  @Input() yearTemplate: TemplateRef<any> | null = null;\r\n\r\n  @Input() isActiveYear: (year: number) => boolean;\r\n  @Input() isYearDisabled: (year: number) => boolean;\r\n\r\n  @Output() selectYear = new EventEmitter<number>();\r\n}\r\n\r\n\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'qeydar-calendar-footer',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [NgIf],\r\n  styleUrls: ['./calendar-footer.component.scss'],\r\n  template: `\r\n    <div class=\"date-picker-footer\" *ngIf=\"footerDescription || showTimePicker || showToday\">\r\n      <div class=\"footer-description\" *ngIf=\"footerDescription\" [innerHtml]=\"footerDescription\">\r\n      </div>\r\n      <div class=\"footer-actions\">\r\n        <button *ngIf=\"showTimePicker\" class=\"footer-button ok\" (click)=\"okClick.emit()\">{{ okLabel }}</button>\r\n        <button *ngIf=\"showToday\" class=\"footer-button\" (click)=\"todayClick.emit()\">{{ todayLabel }}</button>\r\n      </div>\r\n    </div>\r\n  `\r\n})\r\nexport class CalendarFooterComponent {\r\n  @Input() footerDescription = '';\r\n  @Input() showTimePicker = false;\r\n  @Input() showToday = false;\r\n  @Input() okLabel = 'OK';\r\n  @Input() todayLabel = 'Today';\r\n\r\n  @Output() todayClick = new EventEmitter<void>();\r\n  @Output() okClick = new EventEmitter<void>();\r\n}\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { DateAdapter } from '../../date-adapter';\r\nimport { CustomLabels, YearRange } from '../../utils/models';\r\nimport { DatepickerMode } from '../../utils/types';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CalendarUtilsService {\r\n\r\n  /**\r\n   * Generate days grid for calendar view\r\n   */\r\n  generateDaysGrid(currentDate: Date, dateAdapter: DateAdapter<Date>): Date[] {\r\n    const firstDayOfMonth = dateAdapter.startOfMonth(currentDate);\r\n    const startDate = dateAdapter.startOfWeek(firstDayOfMonth);\r\n    return Array.from({ length: 42 }, (_, i) => dateAdapter.addDays(startDate, i));\r\n  }\r\n\r\n  /**\r\n   * Generate month list (1-12)\r\n   */\r\n  generateMonthList(): number[] {\r\n    return Array.from({ length: 12 }, (_, i) => i + 1);\r\n  }\r\n\r\n  /**\r\n   * Generate year list around a specific year\r\n   */\r\n  generateYearList(centerYear: number, length: number = 15): number[] {\r\n    const start = centerYear - Math.floor(length / 2);\r\n    return Array.from({ length }, (_, i) => start + i);\r\n  }\r\n\r\n  /**\r\n   * Generate year ranges for year selector\r\n   */\r\n  generateYearRanges(length: number = 15,dateAdapter: DateAdapter<Date>): YearRange[] {\r\n    const yearCount = 15;\r\n    const currentYear = dateAdapter.getYear(new Date);\r\n    const startYear = currentYear - Math.floor(yearCount/2) - (yearCount * Math.floor(length/2));\r\n    const yearRanges: YearRange[] = [];\r\n    \r\n    for (let i = 0; i < length; i++) {\r\n      const start = startYear + i * yearCount;\r\n      yearRanges.push({ start, end: start + 14 });\r\n    }\r\n    \r\n    return yearRanges;\r\n  }\r\n\r\n  /**\r\n   * Get week day names\r\n   */\r\n  getWeekDays(dateAdapter: DateAdapter<Date>): string[] {\r\n    return dateAdapter.getDayOfWeekNames('short');\r\n  }\r\n\r\n  /**\r\n   * Get month names\r\n   */\r\n  getMonthNames(dateAdapter: DateAdapter<Date>, format: 'long' | 'short' = 'long'): string[] {\r\n    return dateAdapter.getMonthNames(format);\r\n  }\r\n\r\n  /**\r\n   * Get month name by number\r\n   */\r\n  getMonthName(month: number, dateAdapter: DateAdapter<Date>): string {\r\n    return dateAdapter.getMonthNames('long')[month - 1];\r\n  }\r\n\r\n  /**\r\n   * Get current month name\r\n   */\r\n  getCurrentMonthName(currentDate: Date, dateAdapter: DateAdapter<Date>): string {\r\n    return dateAdapter.getMonthNames('long')[dateAdapter.getMonth(currentDate)];\r\n  }\r\n\r\n  /**\r\n   * Get current year\r\n   */\r\n  getCurrentYear(currentDate: Date, dateAdapter: DateAdapter<Date>): number {\r\n    return dateAdapter.getYear(currentDate);\r\n  }\r\n\r\n  /**\r\n   * Navigate to previous month\r\n   */\r\n  navigateToPrevMonth(currentDate: Date, dateAdapter: DateAdapter<Date>): Date {\r\n    return dateAdapter.addMonths(currentDate, -1);\r\n  }\r\n\r\n  /**\r\n   * Navigate to next month\r\n   */\r\n  navigateToNextMonth(currentDate: Date, dateAdapter: DateAdapter<Date>): Date {\r\n    return dateAdapter.addMonths(currentDate, 1);\r\n  }\r\n\r\n  /**\r\n   * Navigate to previous year\r\n   */\r\n  navigateToPrevYear(currentDate: Date, dateAdapter: DateAdapter<Date>): Date {\r\n    return dateAdapter.addYears(currentDate, -1);\r\n  }\r\n\r\n  /**\r\n   * Navigate to next year\r\n   */\r\n  navigateToNextYear(currentDate: Date, dateAdapter: DateAdapter<Date>): Date {\r\n    return dateAdapter.addYears(currentDate, 1);\r\n  }\r\n\r\n  /**\r\n   * Navigate to previous year range\r\n   */\r\n  navigateToPrevYearRange(yearList: number[]): number[] {\r\n    const yearStart = yearList[0] - 15;\r\n    return Array.from({ length: 15 }, (_, i) => yearStart + i);\r\n  }\r\n\r\n  /**\r\n   * Navigate to next year range\r\n   */\r\n  navigateToNextYearRange(yearList: number[]): number[] {\r\n    const yearStart = yearList[14] + 1;\r\n    return Array.from({ length: 15 }, (_, i) => yearStart + i);\r\n  }\r\n\r\n  /**\r\n   * Create date for month selection\r\n   */\r\n  createDateForMonth(year: number, month: number, dateAdapter: DateAdapter<Date>): Date {\r\n    return dateAdapter.createDate(year, month - 1, 1);\r\n  }\r\n\r\n  /**\r\n   * Create date for year selection\r\n   */\r\n  createDateForYear(year: number, currentDate: Date, dateAdapter: DateAdapter<Date>): Date {\r\n    return dateAdapter.createDate(\r\n      year, \r\n      dateAdapter.getMonth(currentDate), \r\n      1\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Set year for existing date\r\n   */\r\n  setYearForDate(date: Date, year: number, dateAdapter: DateAdapter<Date>): Date {\r\n    return dateAdapter.setYear(date, year);\r\n  }\r\n\r\n  /**\r\n   * Determine view mode based on datepicker mode\r\n   */\r\n  determineViewMode(mode: DatepickerMode): 'days' | 'months' | 'years' {\r\n    switch (mode) {\r\n      case 'day':\r\n        return 'days';\r\n      case 'month':\r\n        return 'months';\r\n      case 'year':\r\n        return 'years';\r\n      default:\r\n        return 'days';\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate default periods for range picker\r\n   */\r\n  generateDefaultPeriods(today: Date, lang: any): CustomLabels[] {\r\n    return [\r\n      { \r\n        label: lang.lastDay, \r\n        value: [this.addDays(today, -1), today] \r\n      },\r\n      { \r\n        label: lang.lastWeek, \r\n        value: [this.addDays(today, -7), today], \r\n        arrow: true \r\n      },\r\n      { \r\n        label: lang.lastMonth, \r\n        value: [this.addMonths(today, -1), today] \r\n      },\r\n      { \r\n        label: lang.custom, \r\n        value: 'custom' \r\n      }\r\n    ];\r\n  }\r\n\r\n  /**\r\n   * Helper method to add days (used in generateDefaultPeriods)\r\n   */\r\n  private addDays(date: Date, days: number): Date {\r\n    const result = new Date(date);\r\n    result.setDate(result.getDate() + days);\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Helper method to add months (used in generateDefaultPeriods)\r\n   */\r\n  private addMonths(date: Date, months: number): Date {\r\n    const result = new Date(date);\r\n    result.setMonth(result.getMonth() + months);\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Check if two dates are in the same month\r\n   */\r\n  isSameMonth(date1: Date, date2: Date, dateAdapter: DateAdapter<Date>): boolean {\r\n    return dateAdapter.isSameMonth(date1, date2);\r\n  }\r\n\r\n  /**\r\n   * Check if date is today\r\n   */\r\n  isToday(date: Date, dateAdapter: DateAdapter<Date>): boolean {\r\n    return dateAdapter.isSameDay(date, dateAdapter.today());\r\n  }\r\n\r\n  /**\r\n   * Check if month is active\r\n   */\r\n  isActiveMonth(month: number, currentDate: Date, dateAdapter: DateAdapter<Date>): boolean {\r\n    return dateAdapter.getMonth(currentDate) === month - 1;\r\n  }\r\n\r\n  /**\r\n   * Check if year is active\r\n   */\r\n  isActiveYear(year: number, currentDate: Date, dateAdapter: DateAdapter<Date>): boolean {\r\n    return year === dateAdapter.getYear(currentDate);\r\n  }\r\n\r\n  /**\r\n   * Check if year range is active\r\n   */\r\n  isActiveYearRange(startYear: number, yearList: number[]): boolean {\r\n    return yearList?.includes(startYear);\r\n  }\r\n\r\n  /**\r\n   * Get scroll item ID for different view modes\r\n   */\r\n  getScrollItemId(viewMode: 'days' | 'months' | 'years', date: Date, dateAdapter: DateAdapter<Date>, yearRanges?: YearRange[]): number | null {\r\n    if (!date) return null;\r\n\r\n    switch (viewMode) {\r\n      case 'days':\r\n        return dateAdapter.getMonth(date) + 1;\r\n      case 'months':\r\n        return dateAdapter.getYear(date);\r\n      case 'years':\r\n        const currentYear = dateAdapter.getYear(date);\r\n        const currentRange = yearRanges?.find(range => \r\n          range.start <= currentYear && range.end >= currentYear\r\n        );\r\n        return currentRange?.start || null;\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DateAdapter } from '../../date-adapter';\r\nimport { YearRange } from '../../utils/models';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ValidationStrategyService {\r\n  /**\r\n   * Check if a date is disabled based on various criteria\r\n   */\r\n  isDateDisabled(\r\n    date: Date,\r\n    dateAdapter: DateAdapter<Date>,\r\n    minDate?: Date | null,\r\n    maxDate?: Date | null,\r\n    disabledDates?: Array<Date | string>,\r\n    disabledDatesFilter?: (date: Date) => boolean,\r\n    dateFormat?: string\r\n  ): boolean {\r\n    // Check min/max date constraints\r\n    if (\r\n      (minDate && dateAdapter.isBefore(date, minDate)) ||\r\n      (maxDate && dateAdapter.isAfter(date, maxDate))\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    // Check if date is in disabled dates array\r\n    const parsedDisabledDates = this.parseDisabledDates(\r\n      disabledDates || [],\r\n      dateAdapter,\r\n      dateFormat\r\n    );\r\n    const isDisabledDate = parsedDisabledDates.some((disabledDate) =>\r\n      dateAdapter.isSameDay(date, disabledDate)\r\n    );\r\n\r\n    // Check custom filter function if provided\r\n    const isFilterDisabled = disabledDatesFilter\r\n      ? disabledDatesFilter(date)\r\n      : false;\r\n\r\n    return isDisabledDate || isFilterDisabled;\r\n  }\r\n\r\n  /**\r\n   * Check if a month is disabled (all days in month are disabled)\r\n   */\r\n  isMonthDisabled(\r\n    month: number,\r\n    year: number,\r\n    dateAdapter: DateAdapter<Date>,\r\n    minDate?: Date | null,\r\n    maxDate?: Date | null,\r\n    disabledDates?: Array<Date | string>,\r\n    disabledDatesFilter?: (date: Date) => boolean,\r\n    dateFormat?: string\r\n  ): boolean {\r\n    const startOfMonth = dateAdapter.createDate(year, month - 1, 1);\r\n\r\n    // Check if all days in month are disabled\r\n    const daysInMonth = dateAdapter.getDaysInMonth(startOfMonth);\r\n    let allDaysDisabled = true;\r\n\r\n    for (let day = 1; day <= daysInMonth; day++) {\r\n      const date = dateAdapter.createDate(year, month - 1, day);\r\n      if (\r\n        !this.isDateDisabled(\r\n          date,\r\n          dateAdapter,\r\n          minDate,\r\n          maxDate,\r\n          disabledDates,\r\n          disabledDatesFilter,\r\n          dateFormat\r\n        )\r\n      ) {\r\n        allDaysDisabled = false;\r\n        break;\r\n      }\r\n    }\r\n\r\n    return allDaysDisabled;\r\n  }\r\n\r\n  /**\r\n   * Check if a year is disabled (all months in year are disabled)\r\n   */\r\n  isYearDisabled(\r\n    year: number,\r\n    dateAdapter: DateAdapter<Date>,\r\n    minDate?: Date | null,\r\n    maxDate?: Date | null,\r\n    disabledDates?: Array<Date | string>,\r\n    disabledDatesFilter?: (date: Date) => boolean,\r\n    dateFormat?: string\r\n  ): boolean {\r\n    // Check year boundaries\r\n    if (minDate && dateAdapter.getYear(minDate) > year) return true;\r\n    if (maxDate && dateAdapter.getYear(maxDate) < year) return true;\r\n\r\n    // Check if all months in year are disabled\r\n    const firstOfMonth = dateAdapter.createDate(year, 0, 1);\r\n    let day = 1;\r\n\r\n    for (\r\n      let date = firstOfMonth;\r\n      date.getFullYear() == firstOfMonth.getFullYear();\r\n      date = dateAdapter.addDays(firstOfMonth, day++)\r\n    ) {\r\n      if (\r\n        !this.isDateDisabled(\r\n          date,\r\n          dateAdapter,\r\n          minDate,\r\n          maxDate,\r\n          disabledDates,\r\n          disabledDatesFilter,\r\n          dateFormat\r\n        )\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Check if a year range is disabled\r\n   */\r\n  isYearRangeDisabled(\r\n    yearRange: YearRange,\r\n    dateAdapter: DateAdapter<Date>,\r\n    minDate?: Date | null,\r\n    maxDate?: Date | null,\r\n    disabledDates?: Array<Date | string>,\r\n    disabledDatesFilter?: (date: Date) => boolean,\r\n    dateFormat?: string\r\n  ): boolean {\r\n    if (minDate && dateAdapter.getYear(minDate) > yearRange.end) return true;\r\n    if (maxDate && dateAdapter.getYear(maxDate) < yearRange.start) return true;\r\n\r\n    // Check if all years in range are disabled\r\n    for (let year = yearRange.start; year <= yearRange.end; year++) {\r\n      if (\r\n        !this.isYearDisabled(\r\n          year,\r\n          dateAdapter,\r\n          minDate,\r\n          maxDate,\r\n          disabledDates,\r\n          disabledDatesFilter,\r\n          dateFormat\r\n        )\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Check if previous navigation is disabled\r\n   */\r\n  isPrevNavigationDisabled(\r\n    currentDate: Date,\r\n    viewMode: 'days' | 'months' | 'years',\r\n    dateAdapter: DateAdapter<Date>,\r\n    minDate?: Date | null,\r\n    yearList?: number[]\r\n  ): boolean {\r\n    if (!minDate) return false;\r\n\r\n    const minYear = dateAdapter.getYear(minDate);\r\n    const minMonth = dateAdapter.getMonth(minDate);\r\n    const currentYear = dateAdapter.getYear(currentDate);\r\n    const currentMonth = dateAdapter.getMonth(currentDate);\r\n\r\n    switch (viewMode) {\r\n      case 'days':\r\n        const prevMonthUnnorm = currentMonth - 1;\r\n        const prevMonthYear = currentYear + Math.floor(prevMonthUnnorm / 12);\r\n        // نرمال‌سازی برای مقادیر منفی\r\n        const prevMonthIndex = (prevMonthUnnorm + 12) % 12;\r\n\r\n        if (minYear > prevMonthYear) return true;\r\n        if (minYear === prevMonthYear && minMonth > prevMonthIndex) return true;\r\n        return false;\r\n\r\n      case 'months':\r\n        const prevYear = currentYear - 1;\r\n        return minYear > prevYear;\r\n\r\n      case 'years':\r\n        if (!yearList || yearList.length === 0) return false;\r\n        const minDisplayedYear = Math.min(...yearList);\r\n        const prevLastYear = minDisplayedYear - 1;\r\n        return minYear > prevLastYear;\r\n\r\n      default:\r\n        return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if next navigation is disabled\r\n   */\r\n  isNextNavigationDisabled(\r\n    currentDate: Date,\r\n    viewMode: 'days' | 'months' | 'years',\r\n    dateAdapter: DateAdapter<Date>,\r\n    maxDate?: Date | null,\r\n    yearList?: number[]\r\n  ): boolean {\r\n    if (!maxDate) return false;\r\n\r\n    const maxYear = dateAdapter.getYear(maxDate);\r\n    const maxMonth = dateAdapter.getMonth(maxDate);\r\n    const currentYear = dateAdapter.getYear(currentDate);\r\n    const currentMonth = dateAdapter.getMonth(currentDate);\r\n\r\n    switch (viewMode) {\r\n      case 'days':\r\n        const nextMonthUnnorm = currentMonth + 1;\r\n        const nextMonthYear = currentYear + Math.floor(nextMonthUnnorm / 12);\r\n        const nextMonthIndex = nextMonthUnnorm % 12;\r\n\r\n        // اگر maxDate قبل از شروع ماه بعدی باشد، navigation غیرفعال است\r\n        if (maxYear < nextMonthYear) return true;\r\n        if (maxYear === nextMonthYear && maxMonth < nextMonthIndex) return true;\r\n        return false;\r\n\r\n      case 'months':\r\n        const nextYear = currentYear + 1;\r\n        return maxYear < nextYear;\r\n      case 'years':\r\n        if (!yearList || yearList.length === 0) return false;\r\n        const maxDisplayedYear = Math.max(...yearList);\r\n        const nextFirstYear = maxDisplayedYear + 1;\r\n        return maxYear < nextFirstYear;\r\n      default:\r\n        return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Parse disabled dates from various formats\r\n   */\r\n  parseDisabledDates(\r\n    disabledDates: Array<Date | string>,\r\n    dateAdapter: DateAdapter<Date>,\r\n    dateFormat?: string\r\n  ): Date[] {\r\n    return disabledDates\r\n      .map((date) => {\r\n        if (date instanceof Date) {\r\n          return dateAdapter.startOfDay(date);\r\n        }\r\n        const parsedDate = dateAdapter.parse(date, dateFormat);\r\n        return parsedDate || null;\r\n      })\r\n      .filter((date) => date !== null) as Date[];\r\n  }\r\n\r\n  /**\r\n   * Adjust current date to valid range\r\n   */\r\n  adjustDateToValidRange(\r\n    currentDate: Date,\r\n    dateAdapter: DateAdapter<Date>,\r\n    minDate?: Date | null,\r\n    maxDate?: Date | null\r\n  ): Date {\r\n    let adjustedDate = currentDate;\r\n\r\n    if (minDate && dateAdapter.isBefore(adjustedDate, minDate)) {\r\n      adjustedDate = minDate;\r\n    } else if (maxDate && dateAdapter.isAfter(adjustedDate, maxDate)) {\r\n      adjustedDate = maxDate;\r\n    }\r\n\r\n    return adjustedDate;\r\n  }\r\n\r\n  /**\r\n   * Check if date is within valid range\r\n   */\r\n  isDateInValidRange(\r\n    date: Date,\r\n    dateAdapter: DateAdapter<Date>,\r\n    minDate?: Date | null,\r\n    maxDate?: Date | null\r\n  ): boolean {\r\n    if (minDate && dateAdapter.isBefore(date, minDate)) return false;\r\n    if (maxDate && dateAdapter.isAfter(date, maxDate)) return false;\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Validate date range\r\n   */\r\n  validateDateRange(\r\n    startDate: Date,\r\n    endDate: Date,\r\n    dateAdapter: DateAdapter<Date>,\r\n    minDate?: Date | null,\r\n    maxDate?: Date | null\r\n  ): { isValid: boolean; errors: string[] } {\r\n    const errors: string[] = [];\r\n\r\n    // Check if start date is valid\r\n    if (!this.isDateInValidRange(startDate, dateAdapter, minDate, maxDate)) {\r\n      errors.push('Start date is outside valid range');\r\n    }\r\n\r\n    // Check if end date is valid\r\n    if (!this.isDateInValidRange(endDate, dateAdapter, minDate, maxDate)) {\r\n      errors.push('End date is outside valid range');\r\n    }\r\n\r\n    // Check if start date is before end date\r\n    if (dateAdapter.isAfter(startDate, endDate)) {\r\n      errors.push('Start date must be before end date');\r\n    }\r\n\r\n    return {\r\n      isValid: errors.length === 0,\r\n      errors,\r\n    };\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DateAdapter } from '../../date-adapter';\r\nimport { CustomLabels, DateRange } from '../../utils/models';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SelectionStrategyService {\r\n  /**\r\n   * Check if a date is selected (for single selection)\r\n   */\r\n  isSelected(\r\n    date: Date,\r\n    selectedDate: Date | null,\r\n    dateAdapter: DateAdapter<Date>\r\n  ): boolean {\r\n    return selectedDate && dateAdapter.isSameDay(date, selectedDate);\r\n  }\r\n\r\n  /**\r\n   * Check if a date is the start of a range\r\n   */\r\n  isRangeStart(\r\n    date: Date,\r\n    selectedStartDate: Date | null,\r\n    dateAdapter: DateAdapter<Date>\r\n  ): boolean {\r\n    return selectedStartDate && dateAdapter.isSameDay(date, selectedStartDate);\r\n  }\r\n\r\n  /**\r\n   * Check if a date is the end of a range\r\n   */\r\n  isRangeEnd(\r\n    date: Date,\r\n    selectedEndDate: Date | null,\r\n    dateAdapter: DateAdapter<Date>\r\n  ): boolean {\r\n    return selectedEndDate && dateAdapter.isSameDay(date, selectedEndDate);\r\n  }\r\n\r\n  /**\r\n   * Check if a date is in range (between start and end)\r\n   */\r\n  isInRange(\r\n    date: Date,\r\n    selectedStartDate: Date | null,\r\n    selectedEndDate: Date | null,\r\n    tempEndDate: Date | null,\r\n    dateAdapter: DateAdapter<Date>\r\n  ): boolean {\r\n    if (!selectedStartDate || (!selectedEndDate && !tempEndDate)) {\r\n      return false;\r\n    }\r\n\r\n    const endDate = selectedEndDate || tempEndDate;\r\n    return (\r\n      dateAdapter.isAfter(date, selectedStartDate) &&\r\n      dateAdapter.isBefore(date, endDate)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Check if a date is selected (for range selection)\r\n   */\r\n  isRangeSelected(\r\n    date: Date,\r\n    selectedStartDate: Date | null,\r\n    selectedEndDate: Date | null,\r\n    dateAdapter: DateAdapter<Date>\r\n  ): boolean {\r\n    return (\r\n      this.isRangeStart(date, selectedStartDate, dateAdapter) ||\r\n      this.isRangeEnd(date, selectedEndDate, dateAdapter)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Handle single date selection\r\n   */\r\n  handleSingleSelection(\r\n    date: Date,\r\n    selectedDate: Date | null,\r\n    showTimePicker: boolean,\r\n    existingTime?: Date\r\n  ): { selectedDate: Date; shouldEmit: boolean } {\r\n    let finalDate = date;\r\n\r\n    if (showTimePicker && existingTime) {\r\n      finalDate = this.applyTimeToDate(date, existingTime);\r\n    }\r\n\r\n    return {\r\n      selectedDate: finalDate,\r\n      shouldEmit: !showTimePicker,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Handle range date selection\r\n   */\r\n  handleRangeSelection(\r\n    date: Date,\r\n    selectedStartDate: Date | null,\r\n    selectedEndDate: Date | null,\r\n    showTimePicker: boolean,\r\n    existingTime?: Date\r\n  ): {\r\n    selectedStartDate: Date | null;\r\n    selectedEndDate: Date | null;\r\n    shouldEmit: boolean;\r\n    activeInput: 'start' | 'end';\r\n  } {\r\n    let finalDate = date;\r\n\r\n    if (showTimePicker && existingTime) {\r\n      finalDate = this.applyTimeToDate(date, existingTime);\r\n    }\r\n\r\n    // If no start date or both dates are selected or new date is before start date\r\n    if (\r\n      !selectedStartDate ||\r\n      (selectedStartDate && selectedEndDate) ||\r\n      this.isDateBefore(date, selectedStartDate)\r\n    ) {\r\n      return {\r\n        selectedStartDate: finalDate,\r\n        selectedEndDate: null,\r\n        shouldEmit: true,\r\n        activeInput: 'end',\r\n      };\r\n    } else {\r\n      return {\r\n        selectedStartDate,\r\n        selectedEndDate: finalDate,\r\n        shouldEmit: true,\r\n        activeInput: 'end',\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if a period is active (for sidebar periods)\r\n   */\r\n  isActivePeriod(\r\n    period: CustomLabels,\r\n    selectedStartDate: Date | null,\r\n    selectedEndDate: Date | null,\r\n    dateAdapter: DateAdapter<Date>,\r\n    allPeriods: CustomLabels[]\r\n  ): boolean {\r\n    if (!selectedStartDate || !selectedEndDate) return false;\r\n\r\n    if (period.value === 'custom') {\r\n      const otherPeriods = allPeriods.filter((p) => p.value !== 'custom');\r\n      const hasActiveOther = otherPeriods.some((p) =>\r\n        this.isPeriodMatch(p, selectedStartDate, selectedEndDate, dateAdapter)\r\n      );\r\n      return !hasActiveOther;\r\n    }\r\n\r\n    return this.isPeriodMatch(\r\n      period,\r\n      selectedStartDate,\r\n      selectedEndDate,\r\n      dateAdapter\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Check if a period is matched (for sidebar periods)\r\n   */\r\n  isPeriodMatch(\r\n    period: CustomLabels,\r\n    selectedStartDate: Date,\r\n    selectedEndDate: Date,\r\n    dateAdapter: DateAdapter<Date>\r\n  ): boolean {\r\n    const [start, end] = period.value as Date[];\r\n\r\n    const sameStart = dateAdapter.isEqual(\r\n      dateAdapter.startOfDay(start),\r\n      dateAdapter.startOfDay(selectedStartDate)\r\n    );\r\n\r\n    const sameEnd = dateAdapter.isEqual(\r\n      dateAdapter.startOfDay(end),\r\n      dateAdapter.startOfDay(selectedEndDate)\r\n    );\r\n\r\n    return sameStart && sameEnd;\r\n  }\r\n\r\n  /**\r\n   * Handle period selection\r\n   */\r\n  selectPeriod(period: CustomLabels): {\r\n    selectedPeriod: any;\r\n    dateRange?: DateRange;\r\n    isCustom: boolean;\r\n  } {\r\n    if (period.value === 'custom') {\r\n      return {\r\n        selectedPeriod: 'custom',\r\n        isCustom: true,\r\n      };\r\n    }\r\n\r\n    const [start, end] = period.value as Date[];\r\n    return {\r\n      selectedPeriod: period.value,\r\n      dateRange: { start, end },\r\n      isCustom: false,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Apply time to a date\r\n   */\r\n  applyTimeToDate(date: Date, timeDate: Date): Date {\r\n    const result = new Date(date);\r\n    result.setHours(timeDate.getHours());\r\n    result.setMinutes(timeDate.getMinutes());\r\n    result.setSeconds(timeDate.getSeconds());\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Check if first date is before second date\r\n   */\r\n  private isDateBefore(date1: Date, date2: Date): boolean {\r\n    return date1 < date2;\r\n  }\r\n\r\n  /**\r\n   * Create date range object\r\n   */\r\n  createDateRange(start: Date | null, end: Date | null): DateRange | null {\r\n    if (!start) return null;\r\n    return { start, end };\r\n  }\r\n\r\n  /**\r\n   * Check if range selection is complete\r\n   */\r\n  isRangeComplete(\r\n    selectedStartDate: Date | null,\r\n    selectedEndDate: Date | null\r\n  ): boolean {\r\n    return !!(selectedStartDate && selectedEndDate);\r\n  }\r\n\r\n  /**\r\n   * Get the active date for range selection\r\n   */\r\n  getActiveDateForRange(\r\n    activeInput: 'start' | 'end' | '',\r\n    selectedStartDate: Date | null,\r\n    selectedEndDate: Date | null\r\n  ): Date | null {\r\n    if (activeInput === 'start') {\r\n      return selectedStartDate;\r\n    } else if (activeInput === 'end') {\r\n      return selectedEndDate;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Update time for range selection\r\n   */\r\n  updateRangeTime(\r\n    timeDate: Date,\r\n    activeInput: 'start' | 'end' | '',\r\n    selectedStartDate: Date | null,\r\n    selectedEndDate: Date | null\r\n  ): {\r\n    selectedStartDate: Date | null;\r\n    selectedEndDate: Date | null;\r\n    shouldEmit: boolean;\r\n  } {\r\n    if (activeInput === 'start' && selectedStartDate) {\r\n      const updatedDate = this.applyTimeToDate(selectedStartDate, timeDate);\r\n      return {\r\n        selectedStartDate: updatedDate,\r\n        selectedEndDate,\r\n        shouldEmit: true,\r\n      };\r\n    } else if (activeInput === 'end' && selectedEndDate) {\r\n      const updatedDate = this.applyTimeToDate(selectedEndDate, timeDate);\r\n      return {\r\n        selectedStartDate,\r\n        selectedEndDate: updatedDate,\r\n        shouldEmit: true,\r\n      };\r\n    }\r\n\r\n    return {\r\n      selectedStartDate,\r\n      selectedEndDate,\r\n      shouldEmit: false,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Update time for single selection\r\n   */\r\n  updateSingleTime(\r\n    timeDate: Date,\r\n    selectedDate: Date | null\r\n  ): { selectedDate: Date; shouldEmit: boolean } {\r\n    if (!selectedDate) {\r\n      return {\r\n        selectedDate: new Date(),\r\n        shouldEmit: false,\r\n      };\r\n    }\r\n\r\n    const updatedDate = this.applyTimeToDate(selectedDate, timeDate);\r\n    return {\r\n      selectedDate: updatedDate,\r\n      shouldEmit: false,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Handle mouse enter for range selection preview\r\n   */\r\n  handleMouseEnter(\r\n    date: Date,\r\n    selectedStartDate: Date | null,\r\n    selectedEndDate: Date | null\r\n  ): Date | null {\r\n    if (selectedStartDate && !selectedEndDate) {\r\n      return date; // This will be used as tempEndDate\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Check if date is today\r\n   */\r\n  isToday(\r\n    date: Date,\r\n    dateAdapter: DateAdapter<Date>,\r\n    showToday: boolean\r\n  ): boolean {\r\n    return showToday && dateAdapter.isSameDay(date, dateAdapter.today());\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ElementRef, ViewChild, AfterViewInit, ChangeDetectorRef, HostListener, OnDestroy, ChangeDetectionStrategy, TemplateRef, QueryList, ViewEncapsulation, Inject } from '@angular/core';\r\nimport { DateAdapter, GregorianDateAdapter, JalaliDateAdapter } from '../date-adapter';\r\nimport { CustomLabels, DateRange, Lang_Locale, YearRange } from '../utils/models';\r\nimport { DestroyService, QeydarDatePickerService } from '../date-picker.service';\r\nimport { DatepickerMode } from '../utils/types';\r\nimport { TimePickerComponent } from '../time-picker/time-picker.component';\r\nimport { takeUntil } from 'rxjs';\r\nimport { NgIf } from '@angular/common';\r\nimport { CustomTemplate } from '../utils/template.directive';\r\nimport { CalendarHeaderComponent } from './components/calendar-header.component';\r\nimport { CalendarSidebarComponent } from './components/calendar-sidebar.component';\r\nimport { DaysGridComponent } from './components/days-grid.component';\r\nimport { MonthsGridComponent } from './components/months-grid.component';\r\nimport { YearsGridComponent } from './components/years-grid.component';\r\nimport { CalendarFooterComponent } from './components/calendar-footer.component';\r\nimport { CalendarUtilsService } from './services/calendar-utils.service';\r\nimport { ValidationStrategyService } from './services/validation-strategy.service';\r\nimport { SelectionStrategyService } from './services/selection-strategy.service';\r\n\r\n@Component({\r\n  selector: 'qeydar-date-picker-popup',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  host: {\r\n    class: 'qeydar-date-picker-popup'\r\n  },\r\n  imports: [\r\n    NgIf,\r\n    TimePickerComponent,\r\n    CalendarHeaderComponent,\r\n    CalendarSidebarComponent,\r\n    DaysGridComponent,\r\n    MonthsGridComponent,\r\n    YearsGridComponent,\r\n    CalendarFooterComponent\r\n  ],\r\n  template: `\r\n    <div class=\"date-picker-popup\" [class.rtl]=\"rtl\" [class]=\"cssClass\" [class.readOnly]=\"readOnly\" tabindex=\"-1\">\r\n      <div class=\"date-picker-content\">\r\n        <qeydar-calendar-sidebar\r\n          *ngIf=\"showSidebar\"\r\n          [showSidebar]=\"showSidebar\"\r\n          [isRange]=\"isRange\"\r\n          [viewMode]=\"viewMode\"\r\n          [periods]=\"periods\"\r\n          [monthListNum]=\"monthListNum\"\r\n          [yearList]=\"yearList\"\r\n          [yearRanges]=\"yearRanges\"\r\n          [isActivePeriod]=\"isActivePeriod.bind(this)\"\r\n          [getMonthName]=\"getMonthName.bind(this)\"\r\n          [isActiveMonth]=\"isActiveMonth.bind(this)\"\r\n          [isMonthDisabled]=\"isMonthDisabled.bind(this)\"\r\n          [isActiveYear]=\"isActiveYear.bind(this)\"\r\n          [isYearDisabled]=\"isYearDisabled.bind(this)\"\r\n          [isActiveYearRange]=\"isActiveYearRange.bind(this)\"\r\n          [isYearRangeDisabled]=\"isYearRangeDisabled.bind(this)\"\r\n          (selectPeriod)=\"selectPeriod($event)\"\r\n          (selectMonth)=\"selectMonth($event, false)\"\r\n          (selectYear)=\"selectYear($event, true)\"\r\n          (selectYearRange)=\"selectYearRange($event)\"\r\n        ></qeydar-calendar-sidebar>\r\n        <div class=\"calendar\">\r\n          <qeydar-calendar-header\r\n            [mode]=\"mode\"\r\n            [currentMonthName]=\"getCurrentMonthName()\"\r\n            [currentYear]=\"getCurrentYear()\"\r\n            [prevDisabled]=\"isPrevMonthDisabled()\"\r\n            [nextDisabled]=\"isNextMonthDisabled()\"\r\n            (prev)=\"goPrev()\"\r\n            (next)=\"goNext()\"\r\n            (showMonths)=\"showMonthSelector()\"\r\n            (showYears)=\"showYearSelector()\"\r\n          ></qeydar-calendar-header>\r\n\r\n          <qeydar-days-grid\r\n            [viewMode]=\"viewMode\"\r\n            [days]=\"days\"\r\n            [weekDays]=\"getWeekDays()\"\r\n            [currentDate]=\"currentDate\"\r\n            [dayTemplate]=\"$any(dayTemplate)\"\r\n            [isSameMonth]=\"isSameMonth.bind(this)\"\r\n            [isSelected]=\"isSelected.bind(this)\"\r\n            [isInRange]=\"isInRange.bind(this)\"\r\n            [isRangeStart]=\"isRangeStart.bind(this)\"\r\n            [isRangeEnd]=\"isRangeEnd.bind(this)\"\r\n            [isToday]=\"isToday.bind(this)\"\r\n            [isDateDisabled]=\"isDateDisabled.bind(this)\"\r\n            [getDayNumber]=\"dateAdapter.getDate.bind(dateAdapter)\"\r\n            (selectDay)=\"selectDate($event)\"\r\n            (mouseEnter)=\"onMouseEnter($event, $any(null))\"\r\n          ></qeydar-days-grid>\r\n\r\n          <qeydar-months-grid\r\n            [viewMode]=\"viewMode\"\r\n            [monthListNum]=\"monthListNum\"\r\n            [monthTemplate]=\"$any(monthTemplate)\"\r\n            [isActiveMonthNumber]=\"isActiveMonthNumber.bind(this)\"\r\n            [isMonthDisabled]=\"isMonthDisabled.bind(this)\"\r\n            [getMonthName]=\"getMonthName.bind(this)\"\r\n            (selectMonth)=\"selectMonth($event,false)\"\r\n          ></qeydar-months-grid>\r\n\r\n          <qeydar-years-grid\r\n            [viewMode]=\"viewMode\"\r\n            [mode]=\"mode\"\r\n            [yearList]=\"yearList\"\r\n            [yearTemplate]=\"$any(yearTemplate)\"\r\n            [isActiveYear]=\"isActiveYearNumber.bind(this)\"\r\n            [isYearDisabled]=\"isYearDisabled.bind(this)\"\r\n            (selectYear)=\"selectYear($event)\"\r\n          ></qeydar-years-grid>\r\n        </div>\r\n\r\n        <!-- Time Picker Integration -->\r\n        <div *ngIf=\"showTimePicker\" class=\"time-picker-section\">\r\n          <qeydar-time-picker\r\n            #timePicker\r\n            [rtl]=\"rtl\"\r\n            [dateAdapter]=\"dateAdapter\"\r\n            [valueType]=\"'date'\"\r\n            [displayFormat]=\"timeDisplayFormat\"\r\n            [inline]=\"true\"\r\n            [disabledTimesFilter]=\"disabledTimesFilter\"\r\n            [cssClass]=\"'embedded-time-picker'\"\r\n            [selectedDate]=\"selectedDate\"\r\n            (timeChange)=\"onTimeChange($event)\"\r\n          ></qeydar-time-picker>\r\n        </div>\r\n      </div>\r\n      <qeydar-calendar-footer\r\n        *ngIf=\"footerDescription || showTimePicker || showToday\"\r\n        [footerDescription]=\"footerDescription\"\r\n        [showTimePicker]=\"showTimePicker\"\r\n        [showToday]=\"showToday\"\r\n        [okLabel]=\"lang.ok\"\r\n        [todayLabel]=\"lang.today\"\r\n        (okClick)=\"onOkClick()\"\r\n        (todayClick)=\"onTodayClick()\"\r\n      ></qeydar-calendar-footer>\r\n    </div>\r\n  `,\r\n  styleUrls: ['./date-picker-popup.component.scss']\r\n})\r\nexport class DatePickerPopupComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n  // ========== Input Properties ==========\r\n  @Input() rtl = false;\r\n  @Input() selectedDate: Date | null = null;\r\n  @Input() selectedStartDate: Date | null = null;\r\n  @Input() selectedEndDate: Date | null = null;\r\n  @Input() mode: DatepickerMode = 'day';\r\n  @Input() isRange = false;\r\n  @Input() customLabels: Array<CustomLabels> = [];\r\n  @Input() minDate: Date | null = null;\r\n  @Input() maxDate: Date | null = null;\r\n  @Input() cssClass = '';\r\n  @Input() footerDescription = '';\r\n  @Input() activeInput: 'start' | 'end' | '' = null;\r\n  @Input() showSidebar = true;\r\n  @Input() showToday: boolean;\r\n  @Input() showTimePicker = false;\r\n  @Input() timeDisplayFormat = 'HH:mm';\r\n  @Input() dateFormat: string;\r\n  @Input() readOnly: boolean;\r\n  @Input() disabledDates: Array<Date | string> = [];\r\n  @Input() disabledDatesFilter: (date: Date) => boolean;\r\n  @Input() disabledTimesFilter: (date: Date) => boolean;\r\n  @Input() templates: QueryList<CustomTemplate>;\r\n  @Input() dateAdapter: DateAdapter<Date>;\r\n\r\n  // ========== Output Properties ==========\r\n  @Output() dateSelected = new EventEmitter<Date>();\r\n  @Output() dateRangeSelected = new EventEmitter<DateRange>();\r\n  @Output() closePicker = new EventEmitter<void>();\r\n  @Output() clickInside = new EventEmitter<boolean>();\r\n\r\n  // ========== ViewChild Properties ==========\r\n  @ViewChild(CalendarSidebarComponent) sidebar: CalendarSidebarComponent;\r\n  @ViewChild(TimePickerComponent) timePicker: TimePickerComponent;\r\n\r\n  // ========== Class Properties ==========\r\n  weekDays: string[] = [];\r\n  periods: Array<CustomLabels> = [];\r\n  days: Date[] = [];\r\n  currentDate: Date;\r\n  selectedPeriod: any = '';\r\n  tempEndDate: Date | null = null;\r\n  monthListNum = Array.from({ length: 12 }, (_, i) => i + 1);\r\n  yearList: number[] = [];\r\n  yearRanges: Array<YearRange> = [];\r\n  viewMode: 'days' | 'months' | 'years' = 'days';\r\n  lang: Lang_Locale;\r\n  timeoutId: any = null;\r\n  dayTemplate: TemplateRef<any>;\r\n  monthTemplate: TemplateRef<any>;\r\n  quarterTemplate: TemplateRef<any>;\r\n  yearTemplate: TemplateRef<any>;\r\n  // helpers for child bindings\r\n  isActiveMonthNumber = (m: number) => m === this.dateAdapter.getMonth(this.currentDate) + 1;\r\n  isActiveYearNumber = (y: number) => y === this.dateAdapter.getYear(this.currentDate);\r\n\r\n  // ========== Getters ==========\r\n  public get getDate(): Date {\r\n    return this.selectedDate || this.selectedStartDate || this.selectedEndDate || new Date();\r\n  }\r\n\r\n  constructor(\r\n    public el: ElementRef,\r\n    public cdr: ChangeDetectorRef, \r\n    public dpService: QeydarDatePickerService,\r\n    public jalali: JalaliDateAdapter,\r\n    public gregorian: GregorianDateAdapter,\r\n    public destroy$: DestroyService,\r\n    private calendarUtils: CalendarUtilsService,\r\n    private validationStrategy: ValidationStrategyService,\r\n    private selectionStrategy: SelectionStrategyService,\r\n  ) {\r\n    cdr.markForCheck();\r\n  }\r\n\r\n  // ========== Lifecycle Hooks ==========\r\n  ngOnInit() {\r\n    this.initializeComponent();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    this.handleChanges(changes);\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.scrollToSelectedItem();\r\n    this.setTimePickerDate();\r\n    this.templates.forEach((item) => {\r\n      switch (item.getType()) {\r\n          case 'day':\r\n              this.dayTemplate = item.template;\r\n              break;\r\n\r\n          case 'month':\r\n              this.monthTemplate = item.template;\r\n              break;\r\n\r\n          case 'quarter':\r\n              this.quarterTemplate = item.template;\r\n              break;\r\n\r\n          case 'year':\r\n              this.yearTemplate = item.template;\r\n              break;\r\n      }\r\n    });\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.timeoutId != null) {\r\n      clearTimeout(this.timeoutId);\r\n    }\r\n  }\r\n  // ========== Initialization Methods ==========\r\n  initializeComponent(): void {\r\n    this.setDateAdapter();\r\n    this.setInitialDate();\r\n    this.generateCalendar();\r\n    this.weekDays = this.calendarUtils.getWeekDays(this.dateAdapter);\r\n    if (this.mode === 'year') {\r\n      this.showYearSelector();\r\n    }\r\n    this.initLabels();\r\n  }\r\n\r\n  initLabels(): void {\r\n    const today = this.dateAdapter.today();\r\n    if (this.customLabels?.length) {\r\n      this.periods = this.customLabels;\r\n    } else if (this.isRange) {\r\n      this.generateDefaultPeriods(today);\r\n    }\r\n  }\r\n\r\n  generateDefaultPeriods(today: Date): void {\r\n    this.periods = this.calendarUtils.generateDefaultPeriods(today, this.lang);\r\n  }\r\n\r\n  // ========== Date Adapter Methods ==========\r\n  setDateAdapter(): void {\r\n    this.lang = this.dpService.locale;\r\n  }\r\n\r\n  // ========== Calendar Generation Methods ==========\r\n  generateCalendar(): void {\r\n    this.days = this.calendarUtils.generateDaysGrid(this.currentDate, this.dateAdapter);\r\n  }\r\n\r\n  // ========== View Mode Management ==========\r\n  setViewMode(): void {\r\n    this.viewMode = this.calendarUtils.determineViewMode(this.mode);\r\n    if (this.mode === 'month') {\r\n      this.generateYearList(15);\r\n    }\r\n  }\r\n\r\n  showMonthSelector(): void {\r\n    this.viewMode = 'months';\r\n    this.generateYearList(15);\r\n    this.scrollToSelectedItem(this.dateAdapter.getYear(this.getDate));\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  showYearSelector(): void {\r\n    this.viewMode = 'years';\r\n    this.generateYearRanges();\r\n    this.generateYearList();\r\n    this.scrollToSelectedItem();\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  // ========== Time Selection Methods ==========\r\n  onTimeChange(time: string | Date): void {\r\n    const timeDate = time instanceof Date ? time : new Date(time);\r\n    \r\n    if (!this.isRange) {\r\n      this.updateSingleDateTime(timeDate);\r\n    } else {\r\n      this.updateRangeDateTime(timeDate);\r\n    }\r\n  }\r\n\r\n  updateSingleDateTime(timeDate: Date): void {\r\n    if (!this.selectedDate) {\r\n      this.selectedDate = this.dateAdapter.today();\r\n    }\r\n\r\n    const result = this.selectionStrategy.updateSingleTime(timeDate, this.selectedDate);\r\n    this.selectedDate = result.selectedDate;\r\n  }\r\n\r\n  updateRangeDateTime(timeDate: Date): void {\r\n    const result = this.selectionStrategy.updateRangeTime(\r\n      timeDate, \r\n      this.activeInput, \r\n      this.selectedStartDate, \r\n      this.selectedEndDate\r\n    );\r\n    \r\n    this.selectedStartDate = result.selectedStartDate;\r\n    this.selectedEndDate = result.selectedEndDate;\r\n    \r\n    if (result.shouldEmit) {\r\n      if (this.activeInput === 'start') {\r\n        this.dateRangeSelected.emit({ start: this.selectedStartDate, end: null });\r\n      } else if (this.activeInput === 'end') {\r\n        clearTimeout(this.timeoutId);\r\n        this.timeoutId = setTimeout(() => {\r\n          this.dateRangeSelected.emit({ start: this.selectedStartDate, end: this.selectedEndDate });\r\n        }, 300);\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  setTimePickerDate(date?: Date) {\r\n    if (this.showTimePicker) {\r\n      if (this.isRange) {\r\n        this.dpService.activeInput$.asObservable()\r\n          .pipe(\r\n            takeUntil(this.destroy$)\r\n          )\r\n          .subscribe(active => {\r\n            if (active == 'start') {\r\n              this.timePicker.updateFromDate(this.selectedStartDate);\r\n            } else {\r\n              this.timePicker.updateFromDate(this.selectedEndDate);\r\n            }\r\n            this.timePicker.scrollToTime();\r\n          });\r\n      } else {\r\n        this.timePicker.updateFromDate(date || this.selectedDate);\r\n        this.timePicker.scrollToTime();\r\n      }\r\n    }\r\n  }\r\n\r\n  // ========== Date Selection Methods ==========\r\n  selectDate(date: Date): void {\r\n    if (this.isDateDisabled(date)) return;\r\n\r\n    if (this.showTimePicker) {\r\n      const existingDate = this.isRange ? \r\n        (this.activeInput === 'start' ? this.selectedStartDate : this.selectedEndDate) :\r\n        this.selectedDate;\r\n\r\n      if (existingDate) {\r\n        date = this.selectionStrategy.applyTimeToDate(date, existingDate);\r\n      }\r\n    } else {\r\n      date = this.selectionStrategy.applyTimeToDate(date, new Date());\r\n    }\r\n\r\n    if (this.isRange) {\r\n      this.handleRangeSelection(date);\r\n    } else {\r\n      this.handleSingleSelection(date);\r\n    }\r\n    this.currentDate = date;\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  handleRangeSelection(date: Date): void {\r\n    const prevStartDate = this.selectedStartDate;\r\n    const prevEndDate = this.selectedEndDate;\r\n    \r\n    const result = this.selectionStrategy.handleRangeSelection(\r\n      date, \r\n      this.selectedStartDate, \r\n      this.selectedEndDate, \r\n      this.showTimePicker\r\n    );\r\n    \r\n    this.selectedStartDate = result.selectedStartDate;\r\n    this.selectedEndDate = result.selectedEndDate;\r\n    \r\n    if (!this.showTimePicker) {\r\n      this.activeInput = result.activeInput;\r\n      this.dpService.activeInput$.next(result.activeInput);\r\n    } else if (this.showTimePicker) {\r\n      this.activeInput = result.activeInput;\r\n      this.dpService.activeInput$.next(result.activeInput);\r\n    }\r\n    \r\n    if (result.shouldEmit) {\r\n      this.dateRangeSelected.emit({ start: this.selectedStartDate, end: this.selectedEndDate });\r\n    }\r\n\r\n    if (prevStartDate !== this.selectedStartDate || prevEndDate !== this.selectedEndDate)\r\n      this.cdr.markForCheck();\r\n  }\r\n\r\n  handleSingleSelection(date: Date): void {\r\n    const result = this.selectionStrategy.handleSingleSelection(date, this.selectedDate, this.showTimePicker);\r\n    this.selectedDate = result.selectedDate;\r\n    if (result.shouldEmit) {\r\n      this.dateSelected.emit(result.selectedDate);\r\n    }\r\n  }\r\n\r\n  selectMonth(month: number, closeAfterSelection: boolean = false): void {\r\n    if (this.isMonthDisabled(month)) return;\r\n\r\n    this.currentDate = this.dateAdapter.createDate(\r\n      this.dateAdapter.getYear(this.currentDate), \r\n      month - 1, \r\n      1\r\n    );\r\n\r\n    if (this.isRange && this.mode === 'month') {\r\n      this.handleRangeSelection(this.currentDate);\r\n      return;\r\n    }\r\n\r\n    if (this.mode === 'month' || closeAfterSelection) {\r\n      this.selectedDate = this.currentDate;\r\n      this.dateSelected.emit(this.currentDate);\r\n      this.closeDatePicker();\r\n    } else {\r\n      this.viewMode = 'days';\r\n      this.generateCalendar();\r\n      this.cdr.detectChanges();\r\n    }\r\n\r\n    this.scrollToSelectedItem(month);\r\n  }\r\n\r\n  selectYear(year: number, sideSelector = false): void {\r\n    if (this.isYearDisabled(year)) return;\r\n\r\n    this.currentDate = this.dateAdapter.createDate(\r\n      year, \r\n      this.dateAdapter.getMonth(this.currentDate), \r\n      1\r\n    );\r\n\r\n    if (this.isRange && this.mode === 'year') {\r\n      this.handleRangeSelection(this.currentDate);\r\n      return;\r\n    }\r\n\r\n    if (this.mode === 'year') {\r\n      this.selectedDate = this.currentDate;\r\n      this.dateSelected.emit(this.currentDate);\r\n      this.closeDatePicker();\r\n      return;\r\n    }\r\n\r\n    if (sideSelector) {\r\n      this.currentDate = this.dateAdapter.setYear(this.selectedDate, year);\r\n      this.scrollToSelectedItem(year);\r\n    } else {\r\n      this.viewMode = 'months';\r\n      this.cdr.detectChanges();\r\n    }\r\n  }\r\n\r\n  // ========== Navigation Methods ==========\r\n  goPrev(): void {\r\n    if (this.viewMode === 'days') {\r\n      this.prevMonth();\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    let id: number;\r\n    if (this.viewMode === 'months') {\r\n      this.currentDate = this.calendarUtils.navigateToPrevYear(this.currentDate, this.dateAdapter);\r\n      id = this.dateAdapter.getYear(this.currentDate);\r\n    }\r\n\r\n    if (this.viewMode === 'years') {\r\n      this.yearList = this.calendarUtils.navigateToPrevYearRange(this.yearList);\r\n      id = this.yearList[0];\r\n    }\r\n\r\n    this.cdr.detectChanges();\r\n    this.scrollToSelectedItem(id);\r\n  }\r\n\r\n  goNext(): void {\r\n    if (this.viewMode === 'days') {\r\n      this.nextMonth();\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    let id: number;\r\n    if (this.viewMode === 'months') {\r\n      this.currentDate = this.calendarUtils.navigateToNextYear(this.currentDate, this.dateAdapter);\r\n      id = this.dateAdapter.getYear(this.currentDate);\r\n    }\r\n\r\n    if (this.viewMode === 'years') {\r\n      this.yearList = this.calendarUtils.navigateToNextYearRange(this.yearList);\r\n      id = this.yearList[0];\r\n    }\r\n\r\n    this.cdr.detectChanges();\r\n    this.scrollToSelectedItem(id);\r\n  }\r\n\r\n  prevMonth(): void {\r\n    if (this.isPrevMonthDisabled()) return;\r\n    this.currentDate = this.calendarUtils.navigateToPrevMonth(this.currentDate, this.dateAdapter);\r\n    this.generateCalendar();\r\n    this.scrollToSelectedItem(this.dateAdapter.getMonth(this.currentDate) + 1);\r\n  }\r\n\r\n  nextMonth(): void {\r\n    if (this.isNextMonthDisabled()) return;\r\n    this.currentDate = this.calendarUtils.navigateToNextMonth(this.currentDate, this.dateAdapter);\r\n    this.generateCalendar();\r\n    this.scrollToSelectedItem(this.dateAdapter.getMonth(this.currentDate) + 1);\r\n  }\r\n\r\n  // ========== State Check Methods ==========\r\n  isSelected(date: Date): boolean {\r\n    if (this.isRange) {\r\n      return this.selectionStrategy.isRangeSelected(date, this.selectedStartDate, this.selectedEndDate, this.dateAdapter);\r\n    }\r\n    return this.selectionStrategy.isSelected(date, this.selectedDate, this.dateAdapter);\r\n  }\r\n\r\n  isRangeStart(date: Date): boolean {\r\n    return this.isRange && this.selectionStrategy.isRangeStart(date, this.selectedStartDate, this.dateAdapter);\r\n  }\r\n\r\n  isRangeEnd(date: Date): boolean {\r\n    return this.isRange && this.selectionStrategy.isRangeEnd(date, this.selectedEndDate, this.dateAdapter);\r\n  }\r\n\r\n  isInRange(date: Date): boolean {\r\n    return this.isRange && this.selectionStrategy.isInRange(date, this.selectedStartDate, this.selectedEndDate, this.tempEndDate, this.dateAdapter);\r\n  }\r\n\r\n  isToday(date: Date): boolean {\r\n    return this.selectionStrategy.isToday(date, this.dateAdapter, this.showToday);\r\n  }\r\n\r\n  isActiveMonth(month: number): boolean {\r\n    return this.calendarUtils.isActiveMonth(month, this.currentDate, this.dateAdapter);\r\n  }\r\n\r\n  isActiveYear(year: number): boolean {\r\n    return this.calendarUtils.isActiveYear(year, this.currentDate, this.dateAdapter);\r\n  }\r\n\r\n  isActiveYearRange(startYear: number): boolean {\r\n    return this.calendarUtils.isActiveYearRange(startYear, this.yearList);\r\n  }\r\n\r\n  // ========== Disabled State Methods ==========\r\n  isDateDisabled(date: Date): boolean {\r\n    return this.validationStrategy.isDateDisabled(\r\n      date, \r\n      this.dateAdapter, \r\n      this.minDate, \r\n      this.maxDate, \r\n      this.disabledDates, \r\n      this.disabledDatesFilter, \r\n      this.dateFormat\r\n    );\r\n  }\r\n\r\n  isMonthDisabled(month: number): boolean {\r\n    const year = this.dateAdapter.getYear(this.currentDate);\r\n    return this.validationStrategy.isMonthDisabled(\r\n      month, \r\n      year, \r\n      this.dateAdapter, \r\n      this.minDate, \r\n      this.maxDate, \r\n      this.disabledDates, \r\n      this.disabledDatesFilter, \r\n      this.dateFormat\r\n    );\r\n  }\r\n\r\n  isYearDisabled(year: number): boolean {\r\n    return this.validationStrategy.isYearDisabled(\r\n      year, \r\n      this.dateAdapter, \r\n      this.minDate, \r\n      this.maxDate, \r\n      this.disabledDates, \r\n      this.disabledDatesFilter, \r\n      this.dateFormat\r\n    );\r\n  }\r\n\r\n  isYearRangeDisabled(yearRange: YearRange): boolean {\r\n    return this.validationStrategy.isYearRangeDisabled(\r\n      yearRange, \r\n      this.dateAdapter, \r\n      this.minDate, \r\n      this.maxDate, \r\n      this.disabledDates, \r\n      this.disabledDatesFilter, \r\n      this.dateFormat\r\n    );\r\n  }\r\n\r\n  isPrevMonthDisabled(): boolean {\r\n    return this.validationStrategy.isPrevNavigationDisabled(\r\n      this.currentDate, \r\n      this.viewMode, \r\n      this.dateAdapter, \r\n      this.minDate, \r\n      this.yearList\r\n    );\r\n  }\r\n\r\n  isNextMonthDisabled(): boolean {\r\n    return this.validationStrategy.isNextNavigationDisabled(\r\n      this.currentDate, \r\n      this.viewMode, \r\n      this.dateAdapter, \r\n      this.maxDate, \r\n      this.yearList\r\n    );\r\n  }\r\n\r\n  parseDisabledDates(): Date[] {\r\n    return this.validationStrategy.parseDisabledDates(this.disabledDates, this.dateAdapter, this.dateFormat);\r\n  }\r\n\r\n  // ========== Event Handlers ==========\r\n  onMouseEnter(date: Date, event: Event): void {\r\n    this.tempEndDate = this.selectionStrategy.handleMouseEnter(date, this.selectedStartDate, this.selectedEndDate);\r\n  }\r\n\r\n  @HostListener('click')\r\n  onClickInside(): void {\r\n    this.clickInside.emit(true);\r\n  }\r\n\r\n  // ========== Utility Methods ==========\r\n  getMonthName(month: number): string {\r\n    return this.calendarUtils.getMonthName(month, this.dateAdapter);\r\n  }\r\n\r\n  getCurrentMonthName(): string {\r\n    return this.calendarUtils.getCurrentMonthName(this.currentDate, this.dateAdapter);\r\n  }\r\n\r\n  getCurrentYear(): number {\r\n    return this.calendarUtils.getCurrentYear(this.currentDate, this.dateAdapter);\r\n  }\r\n\r\n  getWeekDays(): string[] {\r\n    return this.calendarUtils.getWeekDays(this.dateAdapter);\r\n  }\r\n\r\n  isSameMonth(date1: Date, date2: Date): boolean {\r\n    return this.calendarUtils.isSameMonth(date1, date2, this.dateAdapter);\r\n  }\r\n\r\n  closeDatePicker(): void {\r\n    this.closePicker.emit();\r\n  }\r\n\r\n  // ========== Year Management Methods ==========\r\n  generateYearRanges(length: number = 15): void {\r\n    this.yearRanges = this.calendarUtils.generateYearRanges(length, this.dateAdapter);\r\n  }\r\n\r\n  generateYearList(length: number = 15): void {\r\n    const date = this.selectedDate || this.selectedEndDate || this.selectedStartDate || new Date();\r\n    const currentYear = this.dateAdapter.getYear(date);\r\n    \r\n    this.yearList = this.calendarUtils.generateYearList(currentYear, length);\r\n  }\r\n\r\n  selectYearRange(startYear: number): void {\r\n    this.yearList = Array.from({ length: 15 }, (_, i) => startYear + i);\r\n    this.viewMode = 'years';\r\n    this.cdr.detectChanges();\r\n    this.scrollToSelectedItem(startYear);\r\n  }\r\n\r\n  // ========== Period Selection Methods ==========\r\n  isActivePeriod(period: CustomLabels): boolean {\r\n    return this.selectionStrategy.isActivePeriod(\r\n      period,\r\n      this.selectedStartDate,\r\n      this.selectedEndDate,\r\n      this.dateAdapter,\r\n      this.periods\r\n    );\r\n  }\r\n\r\n  selectPeriod(period: CustomLabels): void {\r\n    const result = this.selectionStrategy.selectPeriod(period);\r\n    this.selectedPeriod = result.selectedPeriod;\r\n    \r\n    if (!result.isCustom && result.dateRange) {\r\n      this.dateRangeSelected.emit(result.dateRange);\r\n    }\r\n  }\r\n\r\n  onTodayClick() {\r\n    this.currentDate = this.selectedDate = new Date();\r\n    this.viewMode = 'days';\r\n    this.generateCalendar();\r\n    this.selectDate(this.currentDate);\r\n    this.setTimePickerDate(this.currentDate);\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  onOkClick() {\r\n    if (this.isRange) {\r\n      this.dateRangeSelected.emit({ start: this.selectedStartDate, end: this.selectedEndDate });\r\n      this.closeDatePicker()\r\n    } else {\r\n      this.dateSelected.emit(this.selectedDate);\r\n    }\r\n  }\r\n\r\n  // ========== Scroll Management ==========\r\n  scrollToSelectedItem(id: number | null = null): void {\r\n    if (!this.showSidebar) return;\r\n\r\n    if (this.timeoutId != null) {\r\n      clearTimeout(this.timeoutId);\r\n    }\r\n\r\n    const itemId = this.determineScrollItemId(id);\r\n    if (!itemId || !this.sidebar || !this.sidebar.itemSelector) return;\r\n\r\n    this.timeoutId = setTimeout(() => {\r\n      const selectedElement = this.sidebar.itemSelector.nativeElement.querySelector(`#selector_${itemId}`);\r\n      if (selectedElement) {\r\n        selectedElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      }\r\n    }, 0);\r\n  }\r\n\r\n  determineScrollItemId(id: number | null): number | null {\r\n    if (id != null) return id;\r\n    if (!this.getDate) return null;\r\n\r\n    return this.calendarUtils.getScrollItemId(this.viewMode, this.getDate, this.dateAdapter, this.yearRanges);\r\n  }\r\n\r\n  // ========== State Management ==========\r\n  handleChanges(changes: SimpleChanges): void {\r\n    if (changes['dateAdapter']) {\r\n      this.setDateAdapter();\r\n      this.weekDays = this.dateAdapter.getDayOfWeekNames('short');\r\n    }\r\n    \r\n    if (changes['selectedDate'] || \r\n        changes['selectedStartDate'] || \r\n        changes['selectedEndDate'] || \r\n        changes['mode'] || \r\n        changes['dateAdapter']) {\r\n      this.setInitialDate();\r\n      this.generateCalendar();\r\n    }\r\n    \r\n    if (changes['minDate'] || changes['maxDate']) {\r\n      this.adjustCurrentDateToValidRange();\r\n    }\r\n  }\r\n\r\n  setInitialDate(): void {\r\n    this.currentDate = this.determineInitialDate();\r\n    this.setViewMode();\r\n    this.adjustCurrentDateToValidRange();\r\n  }\r\n\r\n  determineInitialDate(): Date {\r\n    if (this.isRange) {\r\n      if (this.activeInput === 'start') {\r\n        return this.selectedStartDate || this.dateAdapter.today();\r\n      }\r\n      return this.selectedEndDate || this.selectedStartDate || this.dateAdapter.today();\r\n    }\r\n    \r\n    return this.selectedDate || this.dateAdapter.today();\r\n  }\r\n\r\n  adjustCurrentDateToValidRange(): void {\r\n    const adjustedDate = this.validationStrategy.adjustDateToValidRange(\r\n      this.currentDate, \r\n      this.dateAdapter, \r\n      this.minDate, \r\n      this.maxDate\r\n    );\r\n\r\n    if (!this.dateAdapter.isSameDay(this.currentDate, adjustedDate)) {\r\n      this.currentDate = adjustedDate;\r\n      this.generateCalendar();\r\n    }\r\n  }\r\n}","import { Directive, Input, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n    selector: '[Template]',\r\n    standalone: true,\r\n    host: {}\r\n})\r\nexport class CustomTemplate {\r\n    @Input() type: string | undefined;\r\n\r\n    @Input('Template') name: string | undefined;\r\n\r\n    constructor(public template: TemplateRef<any>) {}\r\n\r\n    getType(): string {\r\n        return this.name!;\r\n    }\r\n}","import { Component, ElementRef, forwardRef, Input, OnInit, OnChanges, SimpleChanges, ViewChild, Output, EventEmitter, Renderer2, ChangeDetectorRef, Inject, AfterViewInit, ViewChildren, QueryList, NgZone, OnDestroy, ChangeDetectionStrategy, TemplateRef, ContentChildren, Optional } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormBuilder, FormGroup, AbstractControl, ValidationErrors, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { slideMotion } from './utils/animation/slide';\r\nimport { DateAdapter, JalaliDateAdapter, GregorianDateAdapter, DATE_ADAPTER, provideDateAdapter } from './date-adapter';\r\nimport { CustomLabels, DateRange, Lang_Locale, RangeInputLabels } from './utils/models';\r\nimport { DatePickerPopupComponent } from './date-picker-popup/date-picker-popup.component';\r\nimport { CdkOverlayOrigin, ConnectedOverlayPositionChange, ConnectionPositionPair, HorizontalConnectionPos, OverlayModule, VerticalConnectionPos } from '@angular/cdk/overlay';\r\nimport { DATE_PICKER_POSITION_MAP, DEFAULT_DATE_PICKER_POSITIONS, NzConnectedOverlayDirective } from './utils/overlay/overlay';\r\nimport { DOCUMENT, NgIf, NgTemplateOutlet } from '@angular/common';\r\nimport { DestroyService, QeydarDatePickerService } from './date-picker.service';\r\nimport { fromEvent, takeUntil } from 'rxjs';\r\nimport { CalendarType, DatepickerMode, Placement, RangePartType, ValueFormat } from './utils/types';\r\nimport { DateMaskDirective } from './utils/input-mask.directive';\r\nimport { CustomTemplate } from './utils/template.directive';\r\n\r\n@Component({\r\n  selector: 'qeydar-date-picker',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  template: `\r\n    <div qeydarDatepickerStyles class=\"date-picker-wrapper\" [class.date-picker-rtl]=\"rtl\" [class.disabled]=\"disabled\" [formGroup]=\"form\">\r\n      <ng-container *ngIf=\"!isInline; else inlineMode\">\r\n        <ng-container *ngIf=\"!isRange; else rangeMode\">\r\n          <div class=\"input-container\" [class.rtl]>\r\n            <label for=\"dateInput\" *ngIf=\"inputLabel\">{{ inputLabel }}</label>\r\n            <input\r\n              #datePickerInput\r\n              type=\"text\"\r\n              formControlName=\"dateInput\"\r\n              [qeydar-dateMask]=\"format\"\r\n              [disableInputMask]=\"disableInputMask\"\r\n              (click)=\"toggleDatePicker(null,$event)\"\r\n              (focus)=\"onFocusInput(null,$event)\"\r\n              (blur)=\"onInputBlur(null,$event)\"\r\n              (keydown)=\"onInputKeydown($event)\"\r\n              [class.focus]=\"isOpen\"\r\n              [placeholder]=\"getPlaceholder()\"\r\n              [readonly]=\"readOnly || readOnlyInput\"\r\n              [attr.disabled]=\"disabled? 'disabled':null\"\r\n            >\r\n            <ng-container *ngTemplateOutlet=\"icon\"></ng-container>\r\n          </div>\r\n        </ng-container>\r\n        <ng-template #rangeMode>\r\n          <div *ngIf=\"rangeInputLabels\" class=\"range-input-labels\">\r\n            <div class=\"start-label\">\r\n              <label for=\"startDateInput\">{{ rangeInputLabels.start }}</label>\r\n            </div>\r\n            <div class=\"end-label\">\r\n              <label for=\"endDateInput\">{{ rangeInputLabels.end }}</label>\r\n            </div>\r\n          </div>\r\n          <div class=\"range-input-container\">\r\n            <input\r\n              #rangePickerInput\r\n              type=\"text\"\r\n              formControlName=\"startDateInput\"\r\n              [qeydar-dateMask]=\"format\"\r\n              [disableInputMask]=\"disableInputMask\"\r\n              (click)=\"toggleDatePicker('start',$event)\"\r\n              (focus)=\"onFocusInput('start',$event)\"\r\n              (focusout)=\"onFocusout($event)\"\r\n              (blur)=\"onInputBlur('start',$event)\"\r\n              (keydown)=\"onInputKeydown($event)\"\r\n              [class.focus]=\"isOpen && activeInput === 'start'\"\r\n              [placeholder]=\"getPlaceholder('start')\"\r\n              [readonly]=\"readOnly || readOnlyInput\"\r\n              [attr.disabled]=\"disabled? 'disabled':null\"\r\n            >\r\n            <span class=\"range-separator\">→</span>\r\n            <input\r\n              #rangePickerInput\r\n              type=\"text\"\r\n              formControlName=\"endDateInput\"\r\n              [qeydar-dateMask]=\"format\"\r\n              [disableInputMask]=\"disableInputMask\"\r\n              (click)=\"toggleDatePicker('end',$event)\"\r\n              (focus)=\"onFocusInput('end',$event)\"\r\n              (focusout)=\"onFocusout($event)\"\r\n              (blur)=\"onInputBlur('end',$event)\"\r\n              (keydown)=\"onInputKeydown($event)\"\r\n              [class.focus]=\"isOpen && activeInput === 'end'\"\r\n              [placeholder]=\"getPlaceholder('end')\"\r\n              [readonly]=\"readOnly || readOnlyInput\"\r\n              [attr.disabled]=\"disabled? 'disabled':null\"\r\n            >\r\n            <ng-container *ngTemplateOutlet=\"icon\"></ng-container>\r\n          </div>\r\n        </ng-template>\r\n        <ng-template #icon>\r\n            <button class=\"calendar-button\" (click)=\"toggleDatePicker(null, $event)\" tabindex=\"-1\">\r\n              <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18px\" height=\"18px\" viewBox=\"0 0 24 24\" fill=\"#999\">\r\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6 2C6 1.44772 6.44772 1 7 1C7.55228 1 8 1.44772 8 2V3H16V2C16 1.44772 16.4477 1 17 1C17.5523 1 18 1.44772 18 2V3H19C20.6569 3 22 4.34315 22 6V20C22 21.6569 20.6569 23 19 23H5C3.34315 23 2 21.6569 2 20V6C2 4.34315 3.34315 3 5 3H6V2ZM16 5V6C16 6.55228 16.4477 7 17 7C17.5523 7 18 6.55228 18 6V5H19C19.5523 5 20 5.44772 20 6V9H4V6C4 5.44772 4.44772 5 5 5H6V6C6 6.55228 6.44772 7 7 7C7.55228 7 8 6.55228 8 6V5H16ZM4 11V20C4 20.5523 4.44772 21 5 21H19C19.5523 21 20 20.5523 20 20V11H4Z\" fill=\"#999\"/>\r\n              </svg>\r\n            </button>\r\n        </ng-template>\r\n      </ng-container>\r\n      <ng-template #inlineMode>\r\n        <div\r\n          class=\"dp-dropdown\"\r\n          [class.qeydar-picker-dropdown-rtl]=\"rtl\"\r\n          [class.qeydar-picker-dropdown-placement-bottomLeft]=\"currentPositionY === 'bottom' && currentPositionX === 'start'\"\r\n          [class.qeydar-picker-dropdown-placement-topLeft]=\"currentPositionY === 'top' && currentPositionX === 'start'\"\r\n          [class.qeydar-picker-dropdown-placement-bottomRight]=\"currentPositionY === 'bottom' && currentPositionX === 'end'\"\r\n          [class.qeydar-picker-dropdown-placement-topRight]=\"currentPositionY === 'top' && currentPositionX === 'end'\"\r\n          [class.qeydar-picker-dropdown-range]=\"isRange\"\r\n        >\r\n          <qeydar-date-picker-popup\r\n            [rtl]=\"rtl\"\r\n            [@slideMotion]=\"'enter'\"\r\n            [selectedDate]=\"selectedDate\"\r\n            [selectedStartDate]=\"selectedStartDate\"\r\n            [selectedEndDate]=\"selectedEndDate\"\r\n            [mode]=\"mode\"\r\n            [isRange]=\"isRange\"\r\n            [customLabels]=\"customLabels\"\r\n            [dateAdapter]=\"currentDateAdapter\"\r\n            [minDate]=\"minDate\"\r\n            [maxDate]=\"maxDate\"\r\n            [cssClass]=\"cssClass\"\r\n            [footerDescription]=\"footerDescription\"\r\n            [activeInput]=\"activeInput\"\r\n            [showSidebar]=\"showSidebar\"\r\n            [showToday]=\"showToday\"\r\n            [showTimePicker]=\"showTimePicker\"\r\n            [timeDisplayFormat]=\"timeDisplayFormat\"\r\n            [dateFormat]=\"extractDateFormat(format)\"\r\n            [disabledDates]=\"disabledDates\"\r\n            [disabledDatesFilter]=\"disabledDatesFilter\"\r\n            [disabledTimesFilter]=\"disabledTimesFilter\"\r\n            [templates]=\"templates\"\r\n            [readOnly]=\"readOnly\"\r\n            (dateSelected)=\"onDateSelected($event)\"\r\n            (dateRangeSelected)=\"onDateRangeSelected($event)\"\r\n            (closePicker)=\"close()\"\r\n            (clickInside)=\"focus()\"\r\n            tabindex=\"-1\"\r\n            [attr.disabled]=\"disabled? 'disabled':null\"\r\n          ></qeydar-date-picker-popup>\r\n        </div>\r\n      </ng-template>\r\n      <ng-template\r\n        cdkConnectedOverlay\r\n        nzConnectedOverlay\r\n        [cdkConnectedOverlayOrigin]=\"origin\"\r\n        [cdkConnectedOverlayOpen]=\"isOpen\"\r\n        [cdkConnectedOverlayPositions]=\"overlayPositions\"\r\n        [cdkConnectedOverlayTransformOriginOn]=\"'.qeydar-picker-wrapper'\"\r\n        [cdkConnectedOverlayHasBackdrop]=\"false\"\r\n        (positionChange)=\"onPositionChange($event)\"\r\n        (detach)=\"close()\"\r\n      >\r\n        <div\r\n          class=\"qeydar-picker-wrapper\"\r\n          [class.disabled]=\"disabled\"\r\n          [@slideMotion]=\"'enter'\"\r\n          style=\"position: relative;\"\r\n          (click)=\"$event.stopPropagation()\"\r\n        >\r\n          <ng-container *ngTemplateOutlet=\"inlineMode\"></ng-container>\r\n        </div>\r\n      </ng-template>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    :host.qeydar-datepicker ::ng-deep {\r\n      display: block;\r\n      max-width: fit-content;\r\n    }\r\n    .date-picker-wrapper {\r\n      position: relative;\r\n      max-width: fit-content;\r\n    }\r\n    input {\r\n      font-family: inherit;\r\n      max-width: 300px;\r\n      padding: 6px 10px;\r\n      border: 1px solid #d9d9d9;\r\n      border-radius: 4px;\r\n      font-size: 14px;\r\n      outline: none;\r\n      transition: all 0.3s;\r\n    }\r\n    input:hover {\r\n      border-color: #40a9ff;\r\n    }\r\n    input.focus {\r\n      border-color: #40a9ff;\r\n      box-shadow: 0 0 0 2px rgba(24,144,255,0.2);\r\n      outline: none;\r\n    }\r\n    .range-input-container {\r\n      display: flex;\r\n      align-items: center;\r\n      border: 1px solid #d9d9d9;\r\n      border-radius: 4px;\r\n      overflow: hidden;\r\n    }\r\n    .range-input-container input {\r\n      border: none;\r\n      flex: 1;\r\n      width: 50%;\r\n      padding: 6px 10px;\r\n      border-radius: 0;\r\n    }\r\n    .range-input-container input.focus {\r\n      border-bottom: 1px solid;\r\n      border-color: #40a9ff;\r\n      box-shadow: none !important;\r\n    }\r\n    .range-separator {\r\n      padding: 0 8px;\r\n      color: #999;\r\n    }\r\n    .calendar-button {\r\n      background: none;\r\n      border: none;\r\n      padding: 4px 4px 0;\r\n      cursor: pointer;\r\n      font-size: 16px;\r\n    }\r\n    .range-input-labels {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      gap: 10px;\r\n      color: #444;\r\n      padding: 0px 5px 5px;\r\n    }\r\n    .end-label {\r\n      width: 49%;\r\n    }\r\n    .disabled {\r\n      opacity: 0.8;\r\n      pointer-events: none;\r\n    }\r\n    .disabled .range-input-container {\r\n      background: #f3f3f3;\r\n    }\r\n    .input-container .calendar-button {\r\n      position: absolute;\r\n      right: 0;\r\n      bottom: 5px;\r\n    }\r\n    .date-picker-rtl .input-container .calendar-button {\r\n      right: auto;\r\n      left: 0;\r\n    }\r\n    .input-container {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 3px;\r\n      color: #444 \r\n    }\r\n    .input-container.rtl {\r\n      direction: rtl;\r\n    }\r\n    // rtl\r\n    :dir(rtl) .range-separator{\r\n      rotate: 180deg;\r\n    }\r\n  `],\r\n  host: {\r\n    \"[class.qeydar-datepicker]\": \"true\",\r\n    \"[class.qeydar-datepicker-rtl]\": \"rtl\"\r\n  },\r\n  imports: [\r\n    NgIf,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    OverlayModule,\r\n    NgTemplateOutlet,\r\n    NzConnectedOverlayDirective,\r\n    DateMaskDirective,\r\n    DatePickerPopupComponent\r\n  ],\r\n  providers: [\r\n    DestroyService,\r\n    QeydarDatePickerService,\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => DatePickerComponent),\r\n      multi: true\r\n    }\r\n  ],\r\n  animations: [slideMotion]\r\n})\r\nexport class DatePickerComponent implements ControlValueAccessor, OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n  // ========== Input Properties ==========\r\n  @Input() rtl = false;\r\n  @Input() mode: DatepickerMode = 'day';\r\n  @Input() isRange = false;\r\n  @Input() customLabels: Array<CustomLabels>;\r\n  @Input() calendarType: CalendarType = 'gregorian';\r\n  @Input() lang: Lang_Locale;\r\n  @Input() cssClass = '';\r\n  @Input() footerDescription = '';\r\n  @Input() rangeInputLabels: RangeInputLabels;\r\n  @Input() inputLabel: string;\r\n  @Input() placement: Placement = 'bottomRight';\r\n  @Input() disabled = false;\r\n  @Input() isInline = false;\r\n  @Input() showSidebar = true;\r\n  @Input() showToday = false;\r\n  @Input() valueFormat: ValueFormat = 'gregorian';\r\n  @Input() disableInputMask = false;\r\n  @Input() disabledDates: Array<Date | string> = [];\r\n  @Input() disabledDatesFilter: (date: Date) => boolean;\r\n  @Input() disabledTimesFilter: (date: Date) => boolean;\r\n  @Input() allowEmpty = false;\r\n  @Input() readOnly = false;\r\n  @Input() readOnlyInput = false;\r\n  @Input() dateAdapter: DateAdapter<Date> | null = null;\r\n  @Input() set minDate(date: Date | string | null) {\r\n    if (date) {\r\n      this._minDate = date;\r\n    }\r\n  };\r\n  get minDate() : Date {\r\n    return this._minDate\r\n  }\r\n  \r\n  @Input() set maxDate(date: Date | string | null) {\r\n    if (date) {\r\n      this._maxDate = date;\r\n    }\r\n  };\r\n  get maxDate() : Date {\r\n    return this._maxDate\r\n  }\r\n\r\n  @Input() set format(value: string) {\r\n    this._format = value;\r\n    this.showTimePicker = this.hasTimeComponent(value);\r\n    this.timeDisplayFormat = this.extractTimeFormat(value);\r\n  }\r\n  get format(): string {\r\n    return this._format;\r\n  }\r\n\r\n  // ========== Output Properties ==========\r\n  @Output() onFocus = new EventEmitter<any>();\r\n  @Output() onBlur = new EventEmitter<any>();\r\n  @Output() onChangeValue = new EventEmitter<any>();\r\n  @Output() onOpenChange = new EventEmitter<boolean>();\r\n\r\n  // ========== ViewChild/ViewChildren/ContentChildren Properties ==========\r\n  @ViewChild('datePickerInput') datePickerInput: ElementRef;\r\n  @ViewChildren('rangePickerInput') rangePickerInputs?: QueryList<ElementRef<HTMLInputElement>>;\r\n  @ViewChild(DatePickerPopupComponent) datePickerPopup: DatePickerPopupComponent;\r\n  @ContentChildren(CustomTemplate) templates!: QueryList<CustomTemplate>;\r\n\r\n  // ========== Class Properties ==========\r\n  origin: CdkOverlayOrigin;\r\n  overlayPositions: ConnectionPositionPair[] = [...DEFAULT_DATE_PICKER_POSITIONS];\r\n  currentPositionX: HorizontalConnectionPos = 'start';\r\n  currentPositionY: VerticalConnectionPos = 'bottom';\r\n  document: Document;\r\n\r\n  isOpen = false;\r\n  selectedDate: Date | null = null;\r\n  selectedStartDate: Date | null = null;\r\n  selectedEndDate: Date | null = null;\r\n  form: FormGroup;\r\n  currentDateAdapter: DateAdapter<Date>;\r\n  activeInput: 'start' | 'end' | '' = '';\r\n  hideStateHelper = false;\r\n  isInternalChange = false;\r\n  lastEmittedValue: any = null;\r\n  showTimePicker = false;\r\n  timeDisplayFormat = 'HH:mm';\r\n\r\n  documentClickListener: (event: MouseEvent) => void;\r\n  private _minDate: any;\r\n  private _maxDate: any;\r\n  private _format = 'yyyy/MM/dd';\r\n\r\n  get valueAdapter() {\r\n    return this.valueFormat == 'jalali'? this.jalali: this.gregorian;\r\n  }\r\n\r\n  constructor(\r\n    public fb: FormBuilder,\r\n    public elementRef: ElementRef,\r\n    public renderer: Renderer2,\r\n    public cdref: ChangeDetectorRef,\r\n    public dpService: QeydarDatePickerService,\r\n    public destroy$: DestroyService,\r\n    public ngZone: NgZone,\r\n    public jalali: JalaliDateAdapter,\r\n    public gregorian: GregorianDateAdapter,\r\n    @Inject(DOCUMENT) doc: Document,\r\n    @Optional() @Inject(DATE_ADAPTER) private injectedDateAdapter: DateAdapter<Date>\r\n  ) {\r\n    this.initializeComponent(doc);\r\n  }\r\n\r\n  // ========== Lifecycle Hooks ==========\r\n  ngOnInit(): void {\r\n    this.initialize();\r\n    document.addEventListener('click', this.documentClickListener);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    this.handleChanges(changes);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.setupAfterViewInit();\r\n    this._minDate = this.valueAdapter?.parse(this._minDate,this.extractDateFormat(this.format));\r\n    this._maxDate = this.valueAdapter?.parse(this._maxDate,this.extractDateFormat(this.format));\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n    document.removeEventListener('click', this.documentClickListener);\r\n  }\r\n\r\n  // ========== Initialization Methods ==========\r\n  initializeComponent(doc: Document): void {\r\n    this.origin = new CdkOverlayOrigin(this.elementRef);\r\n    this.document = doc;\r\n    this.form = this.fb.group({\r\n      dateInput: [''],\r\n      startDateInput: [''],\r\n      endDateInput: ['']\r\n    });\r\n    this.documentClickListener = this.handleDocumentClick.bind(this);\r\n    this.lang = this.calendarType === 'jalali' ? this.dpService.locale_fa  : this.dpService.locale_en;\r\n    this.dpService.locale = this.lang;\r\n  }\r\n\r\n  initialize(): void {\r\n    this.setDateAdapter();\r\n    this.setupFormControls();\r\n  }\r\n\r\n  setupAfterViewInit(): void {\r\n    this.setupActiveInputSubscription();\r\n    this.setupMouseDownEventHandler();\r\n  }\r\n\r\n  // ========== Date Adapter Methods ==========\r\n  setDateAdapter(): void {    \r\n    // Update the injected adapter to match the selected adapter\r\n    if (this.injectedDateAdapter && !this.currentDateAdapter) {\r\n      this.currentDateAdapter = this.injectedDateAdapter;\r\n    }\r\n    // اولویت اول: اگر کاربر از طریق @Input یک dateAdapter شخصی پاس داده باشد\r\n    if (this.dateAdapter) {\r\n      this.currentDateAdapter = this.dateAdapter;\r\n      return;\r\n    }\r\n    // اولویت دوم: اگر از طریق provider یک dateAdapter شخصی تزریق شده باشد\r\n    if (this.injectedDateAdapter) {\r\n      this.currentDateAdapter = this.injectedDateAdapter;\r\n      return;\r\n    }\r\n    // اولویت سوم: انتخاب بر اساس calendarType\r\n    this.currentDateAdapter =\r\n      this.calendarType === 'jalali'\r\n        ? this.jalali\r\n        : this.gregorian;\r\n  }\r\n\r\n  // ========== Form Control Methods ==========\r\n  setupFormControls(): void {\r\n    if (this.isRange) {\r\n      this.form.get('startDateInput')?.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => this.onInputChange(value, 'start'));\r\n      this.form.get('endDateInput')?.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => this.onInputChange(value, 'end'));\r\n    } else {\r\n      this.form.get('dateInput')?.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => this.onInputChange(value));\r\n    }\r\n  }\r\n\r\n  // ========== Event Handlers ==========\r\n  handleChanges(changes: SimpleChanges): void {\r\n    if (changes['calendarType']) {\r\n      this.setDateAdapter();\r\n      this.updateInputValue();\r\n      this.lang = this.calendarType === 'jalali' ? this.dpService.locale_fa : this.dpService.locale_en;\r\n      this.dpService.locale = this.lang;\r\n    }\r\n    if (changes['dateAdapter']) {\r\n      this.setDateAdapter();\r\n      this.updateInputValue();\r\n    }\r\n    if (changes['minDate'] || changes['maxDate']) {\r\n      this._minDate = this.valueAdapter?.parse(this._minDate,this.extractDateFormat(this.format));\r\n      this._maxDate = this.valueAdapter?.parse(this._maxDate,this.extractDateFormat(this.format));\r\n      this.form.updateValueAndValidity();\r\n    }\r\n    if (changes['mode'] || changes['isRange']) {\r\n      this.setupFormControls();\r\n    }\r\n    if (changes['placement']) {\r\n      this.setPlacement(this.placement);\r\n    }\r\n    if (changes['lang']) {\r\n      this.lang = changes['lang'].currentValue;\r\n      this.dpService.locale = this.lang;\r\n    }\r\n    if (changes['mode'] && !changes['format']) {\r\n      this.format = this.getFormatForMode();\r\n    }\r\n    if (changes['isRange'] && this.isRange ==  false) {\r\n      this.origin = new CdkOverlayOrigin(this.elementRef);\r\n    }\r\n    if (changes['valueFormat']) {\r\n      this.emitValueIfChanged();\r\n    }\r\n  }\r\n\r\n  handleDocumentClick(event: MouseEvent): void {\r\n    if (!this.elementRef.nativeElement.contains(event.target)) {\r\n      if (this.isOpen) {\r\n        this.close();\r\n        this.onInputBlur(this.activeInput as any, event as any);\r\n      }\r\n      this.hideStateHelper = false;\r\n    }\r\n  }\r\n\r\n  // ========== Input Handling Methods ==========\r\n  onInputChange(value: string, inputType?: 'start' | 'end'): void {\r\n    if (!this.isInternalChange) {\r\n      if (this.isRange) {\r\n        this.handleRangeInputChange(value, inputType);\r\n      } else {\r\n        this.handleSingleInputChange(value);\r\n      }\r\n      this.updateDatePickerPopup();\r\n    }\r\n  }\r\n\r\n  handleRangeInputChange(value: string, inputType?: 'start' | 'end'): void {\r\n    const date = this.currentDateAdapter.parse(value, this.format);\r\n    if (date) {\r\n      if (inputType === 'start') {\r\n        this.selectedStartDate = this.clampDate(date);\r\n      } else if (inputType === 'end') {\r\n        this.selectedEndDate = this.clampDate(date);\r\n      }\r\n      this.emitValueIfChanged();\r\n    }\r\n  }\r\n\r\n  handleSingleInputChange(value: string): void {\r\n    const date = this.currentDateAdapter.parse(value, this.format);\r\n    if (date) {\r\n      this.selectedDate = this.clampDate(date);\r\n      this.emitValueIfChanged();\r\n    }\r\n  }\r\n\r\n  // ========== Value Emission Methods ==========\r\n  emitValueIfChanged(): void {\r\n    const newValue = this.prepareValueForEmission();\r\n    if (newValue && JSON.stringify(newValue) !== JSON.stringify(this.lastEmittedValue)) {\r\n      this.lastEmittedValue = newValue;\r\n      this.onChange(newValue);\r\n      this.onChangeValue.emit(newValue);\r\n    }\r\n  }\r\n\r\n  prepareValueForEmission(): any {\r\n    if (this.isRange) {\r\n      if (this.selectedStartDate && this.selectedEndDate) {\r\n        return {\r\n          start: this.convertDateToFormat(this.selectedStartDate, this.calendarType),\r\n          end: this.convertDateToFormat(this.selectedEndDate, this.calendarType)\r\n        };\r\n      }\r\n    } else if (this.selectedDate) {\r\n      return this.convertDateToFormat(this.selectedDate, this.calendarType);\r\n    }\r\n    return null;\r\n  }\r\n\r\n  // ========== Date Selection Methods ==========\r\n  onDateSelected(date: Date): void {\r\n    const clampedDate = this.clampDate(date);\r\n    if (this.isRange) {\r\n      this.handleRangeDateSelection(clampedDate);\r\n    } else {\r\n      this.handleSingleDateSelection(clampedDate);\r\n    }\r\n    this.hideStateHelper = true;\r\n    this.updateDatePickerPopup();\r\n    this.focus();\r\n  }\r\n\r\n  handleRangeDateSelection(date: Date): void {\r\n    if (!this.selectedStartDate || (this.selectedStartDate && this.selectedEndDate) ||\r\n      this.currentDateAdapter.isBefore(date, this.selectedStartDate)) {\r\n      this.selectedStartDate = date;\r\n      this.selectedEndDate = null;\r\n      this.form.get('startDateInput')?.setValue(this.currentDateAdapter.format(date, this.format), { emitEvent: false });\r\n      this.form.get('endDateInput')?.setValue('', { emitEvent: false });\r\n    } else {\r\n      this.selectedEndDate = date;\r\n      this.form.get('endDateInput')?.setValue(this.currentDateAdapter.format(date, this.format), { emitEvent: false });\r\n      this.emitValueIfChanged();\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  handleSingleDateSelection(date: Date): void {\r\n    this.selectedDate = date;\r\n    if (date) {\r\n      const formattedDate = this.currentDateAdapter.format(date, this.format);\r\n      this.form.get('dateInput')?.setValue(formattedDate, { emitEvent: false });\r\n      this.emitValueIfChanged();\r\n    }\r\n    this.close();\r\n  }\r\n\r\n  // ========== Date Range Methods ==========\r\n  onDateRangeSelected(dateRange: DateRange): void {\r\n    this.hideStateHelper = true;\r\n\r\n    this.selectedStartDate = this.clampDate(<Date>dateRange.start);\r\n    const startFormatted = this.currentDateAdapter.format(this.selectedStartDate, this.format);\r\n    this.form.get('startDateInput')?.setValue(startFormatted, { emitEvent: false });\r\n\r\n    if (dateRange.end) {\r\n      this.selectedEndDate = this.clampDate(<Date>dateRange.end);\r\n      const endFormatted = this.currentDateAdapter.format(this.selectedEndDate, this.format);\r\n      this.form.get('endDateInput')?.setValue(endFormatted, { emitEvent: false });\r\n      this.emitValueIfChanged();\r\n      if (!this.hasTimeComponent(this.format)) this.close();\r\n      this.updateDatePickerPopup();\r\n      this.focus();\r\n    }\r\n  }\r\n\r\n  // ========== UI State Methods ==========\r\n  close(): void {\r\n    if (this.isInline) {\r\n      return;\r\n    }\r\n    if (this.isOpen) {\r\n      this.isOpen = false;\r\n      this.onOpenChange.emit(false);\r\n      this.cdref.markForCheck();\r\n    }\r\n  }\r\n\r\n  open(): void {\r\n    if (this.isInline || this.isOpen || this.disabled || this.readOnly) {\r\n      return;\r\n    }\r\n    this.isOpen = true;\r\n    this.onOpenChange.emit(true);\r\n    this.focus();\r\n    this.cdref.markForCheck();\r\n  }\r\n\r\n  focus(): void {\r\n    const activeInputElement = this.getInput(this.activeInput);\r\n    if (this.document.activeElement !== activeInputElement) {\r\n      activeInputElement?.focus();\r\n      const length = activeInputElement?.value?.length;\r\n      activeInputElement?.setSelectionRange(length, length);\r\n    }\r\n  }\r\n\r\n  // ========== UI Helper Methods ==========\r\n  getInput(partType?: RangePartType): HTMLInputElement | undefined {\r\n    if (this.isInline) {\r\n      return undefined;\r\n    }\r\n    return this.isRange\r\n      ? partType === 'start'\r\n        ? this.rangePickerInputs?.first.nativeElement\r\n        : this.rangePickerInputs?.last.nativeElement\r\n      : this.datePickerInput?.nativeElement;\r\n  }\r\n\r\n  getPlaceholder(inputType: string = null): string {\r\n    if (inputType === 'start') return this.lang.startDate;\r\n    if (inputType === 'end') return this.lang.endDate;\r\n\r\n    switch (this.mode) {\r\n      case 'month': return this.lang.selectMonth;\r\n      case 'year': return this.lang.selectYear;\r\n      default: return this.lang.selectDate;\r\n    }\r\n  }\r\n\r\n  // ========== Date Validation Methods ==========\r\n  clampDate(date: Date): Date {\r\n    if (!date) return date;\r\n\r\n    let adjustedDate = this.currentDateAdapter.clone(date);\r\n\r\n    if (this.minDate && this.currentDateAdapter.isBefore(adjustedDate, this.minDate)) {\r\n      return this.minDate;\r\n    }\r\n    if (this.maxDate && this.currentDateAdapter.isAfter(adjustedDate, this.maxDate)) {\r\n      return this.maxDate;\r\n    }\r\n\r\n    if (this.isDateDisabled(adjustedDate)) {\r\n      // Find the nearest enabled date\r\n      adjustedDate = this.findNearestValidDate(adjustedDate);\r\n    }\r\n\r\n    // Preserve the original time if format includes time\r\n    adjustedDate = this.clampDateTime(adjustedDate, date);\r\n\r\n    return adjustedDate;\r\n  }\r\n\r\n  clampDateTime(adjustedDate: Date, date: Date) {\r\n    if (this.hasTimeComponent(this.format)) {\r\n      adjustedDate.setHours(date.getHours());\r\n      adjustedDate.setMinutes(date.getMinutes());\r\n      adjustedDate.setSeconds(date.getSeconds());\r\n      let { normalizedDate } = this.validateAndNormalizeTime(adjustedDate);\r\n      adjustedDate = normalizedDate;\r\n    }\r\n    return adjustedDate;\r\n  }\r\n\r\n  findNearestValidDate(date: Date) {\r\n    let nextDate = this.currentDateAdapter.addDays(date, 1);\r\n    let prevDate = this.currentDateAdapter.addDays(date, -1);\r\n\r\n    while (this.isDateDisabled(nextDate) && this.isDateDisabled(prevDate)) {\r\n      nextDate = this.currentDateAdapter.addDays(nextDate, 1);\r\n      prevDate = this.currentDateAdapter.addDays(prevDate, -1);\r\n    }\r\n\r\n    // Return the first non-disabled date found\r\n    if (!this.isDateDisabled(nextDate)) {\r\n      date = nextDate;\r\n    } else if (!this.isDateDisabled(prevDate)) {\r\n      date = prevDate;\r\n    }\r\n    return date;\r\n  }\r\n\r\n  validateAndNormalizeTime(date: Date): { isValid: boolean; normalizedDate: Date | null } {\r\n    if (!this.currentDateAdapter) {\r\n      return { isValid: false, normalizedDate: null };\r\n    }\r\n \r\n    let isValid = true;\r\n    let normalizedDate = this.currentDateAdapter.clone(date);\r\n\r\n    if (this.isTimeDisabled(normalizedDate)) {\r\n      isValid = false;\r\n\r\n      // Get start and end of the current day\r\n      const startOfDay = this.currentDateAdapter.clone(date);\r\n      startOfDay.setHours(0, 0, 0, 0);\r\n      const endOfDay = this.currentDateAdapter.clone(date);\r\n      endOfDay.setHours(23, 59, 59, 999);\r\n\r\n      // Try to find nearest valid time within the same day\r\n      const currentMinutes = date.getHours() * 60 + date.getMinutes();\r\n      const maxForwardMinutes = (24 * 60) - currentMinutes;\r\n      let validTimeFound = false;\r\n\r\n      // Check forward\r\n      for (let i = 1; i <= maxForwardMinutes; i++) {\r\n        const nextTime = this.currentDateAdapter.clone(date);\r\n        nextTime.setHours(Math.floor((currentMinutes + i) / 60), (currentMinutes + i) % 60, 0);\r\n        if (nextTime.getTime() <= endOfDay.getTime() && !this.isTimeDisabled(nextTime)) {\r\n          normalizedDate = nextTime;\r\n          validTimeFound = true;\r\n          break;\r\n        }\r\n      }\r\n\r\n      // Check backward\r\n      if (!validTimeFound)\r\n        for (let i = 1; i < currentMinutes; i++) {\r\n          const prevTime = this.currentDateAdapter.clone(date);\r\n          prevTime.setHours(Math.floor((currentMinutes - i) / 60), (currentMinutes - i) % 60, 0);\r\n          if (prevTime.getTime() >= startOfDay.getTime() && !this.isTimeDisabled(prevTime)) {\r\n            normalizedDate = prevTime;\r\n            break;\r\n          }\r\n        }\r\n\r\n      // If no valid time found in the current day, set to start of day\r\n      if (this.isTimeDisabled(normalizedDate)) {\r\n        normalizedDate = startOfDay;\r\n      }\r\n    }\r\n \r\n    return { isValid: isValid, normalizedDate };\r\n  }\r\n\r\n  parseDisabledDates(): Date[] {\r\n    return this.disabledDates.map(date => {\r\n      if (date instanceof Date) {\r\n        return this.currentDateAdapter.startOfDay(date);\r\n      }\r\n      const parsedDate = this.currentDateAdapter.parse(date, this.extractDateFormat(this.format));\r\n      return parsedDate || null;\r\n    }).filter(date => date !== null) as Date[];\r\n  }\r\n  \r\n  isDateDisabled(date: Date): boolean {\r\n    if (!date) return false;\r\n  \r\n    const dateToCheck = this.currentDateAdapter.startOfDay(date);\r\n    // Check if date is in disabled dates array\r\n    const parsedDisabledDates = this.parseDisabledDates();\r\n    const isDisabledDate = parsedDisabledDates.some(disabledDate => \r\n      this.currentDateAdapter.isSameDay(dateToCheck, disabledDate)\r\n    );\r\n  \r\n    // Check custom filter function if provided\r\n    const isFilterDisabled = this.disabledDatesFilter ? \r\n      this.disabledDatesFilter(dateToCheck) : \r\n      false;\r\n  \r\n    return isDisabledDate || isFilterDisabled;\r\n  }\r\n\r\n  isTimeDisabled(date: Date) {\r\n    return this.disabledTimesFilter ? this.disabledTimesFilter(date) : false;\r\n  }\r\n\r\n  // ========== Date Validation Methods (continued) ==========\r\n  dateFormatValidator(control: AbstractControl): ValidationErrors | null {\r\n    const value = control.value;\r\n    if (!value) return null;\r\n\r\n    const format = this.getFormatForMode();\r\n    if (!this.currentDateAdapter.isValidFormat(value, format)) {\r\n      return { invalidFormat: true };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  getFormatForMode(): string {\r\n    switch (this.mode) {\r\n      case 'year':\r\n        return 'yyyy';\r\n      case 'month':\r\n        return 'yyyy/MM';\r\n      default:\r\n        return this.format;\r\n    }\r\n  }\r\n\r\n  // ========== Overlay Position Methods ==========\r\n  setPlacement(placement: Placement): void {\r\n    const position: ConnectionPositionPair = DATE_PICKER_POSITION_MAP[placement];\r\n    this.overlayPositions = [position, ...DEFAULT_DATE_PICKER_POSITIONS];\r\n    this.currentPositionX = position.originX;\r\n    this.currentPositionY = position.originY;\r\n  }\r\n\r\n  onPositionChange(position: ConnectedOverlayPositionChange): void {\r\n    if (this.currentPositionX !== position.connectionPair.originX ||\r\n        this.currentPositionY !== position.connectionPair.originY)\r\n    {\r\n      this.currentPositionX = position.connectionPair.originX;\r\n      this.currentPositionY = position.connectionPair.originY;\r\n      this.cdref.markForCheck();\r\n    }\r\n  }\r\n\r\n  // ========== Input Event Handlers ==========\r\n  onFocusout(event: FocusEvent): void {\r\n    event.preventDefault();\r\n    this.onTouch();\r\n    if (\r\n      !this.elementRef.nativeElement.contains(event.relatedTarget as Node) &&\r\n      !this.datePickerPopup?.el.nativeElement.contains(event.relatedTarget as Node)\r\n    ) {\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  onInputBlur(inputType: 'start' | 'end' | null, event: Event): void {\r\n    const inputValue = this.getInputValue(inputType);\r\n    \r\n    if (typeof inputValue === 'string' && !this.isOpen) {\r\n      const correctedValue = this.validateAndCorrectInput(inputValue);\r\n      if (correctedValue !== inputValue) {\r\n        if (inputValue) {\r\n          this.handleCorrectedValue(inputType, correctedValue);\r\n        } else if (!this.allowEmpty) {\r\n          this.handleCorrectedValue(inputType, correctedValue);\r\n        } else {\r\n          this.selectedDate = null;\r\n          this.onChange(inputValue);\r\n        }\r\n      }\r\n      this.onBlur.emit({\r\n        input: inputType,\r\n        event,\r\n        value: correctedValue\r\n      });\r\n    }\r\n  }\r\n\r\n  getInputValue(inputType: 'start' | 'end' | null): string | undefined {\r\n    if (this.isRange) {\r\n      return inputType === 'start' \r\n        ? this.form.get('startDateInput')?.value \r\n        : this.form.get('endDateInput')?.value;\r\n    }\r\n    return this.form.get('dateInput')?.value;\r\n  }\r\n\r\n  validateAndCorrectInput(value: string): string {\r\n    let date = this.currentDateAdapter.parse(value, this.format);\r\n    if (!date) {\r\n      const today = this.currentDateAdapter.today();\r\n      date = this.clampDate(today);\r\n    } else {\r\n      date = this.clampDate(date);\r\n    }\r\n    return this.currentDateAdapter.format(date, this.format);\r\n  }\r\n\r\n  handleCorrectedValue(inputType: 'start' | 'end' | null, correctedValue: string): void {\r\n    this.isInternalChange = true;\r\n    if (this.isRange) {\r\n      this.handleRangeCorrectedValue(inputType, correctedValue);\r\n    } else {\r\n      this.handleSingleCorrectedValue(correctedValue);\r\n    }\r\n    this.isInternalChange = false;\r\n  }\r\n\r\n  handleRangeCorrectedValue(inputType: 'start' | 'end' | null, correctedValue: string): void {\r\n    if (inputType === 'start') {\r\n      this.form.get('startDateInput')?.setValue(correctedValue);\r\n      this.selectedStartDate = this.currentDateAdapter.parse(correctedValue, this.format);\r\n    } else {\r\n      this.form.get('endDateInput')?.setValue(correctedValue);\r\n      this.selectedEndDate = this.currentDateAdapter.parse(correctedValue, this.format);\r\n    }\r\n    \r\n    if (this.selectedStartDate && this.selectedEndDate) {\r\n      this.onChange({\r\n        start: this.currentDateAdapter.format(this.selectedStartDate, this.format),\r\n        end: this.currentDateAdapter.format(this.selectedEndDate, this.format)\r\n      });\r\n    }\r\n    \r\n    if (this.datePickerPopup) {\r\n      this.datePickerPopup.selectedStartDate = this.selectedStartDate;\r\n      this.datePickerPopup.selectedEndDate = this.selectedEndDate;\r\n      this.datePickerPopup.generateCalendar();\r\n    }\r\n  }\r\n\r\n  handleSingleCorrectedValue(correctedValue: string): void {\r\n    this.form.get('dateInput')?.setValue(correctedValue);\r\n    this.selectedDate = this.currentDateAdapter.parse(correctedValue, this.format);\r\n    this.onChange(this.selectedDate);\r\n    \r\n    if (this.datePickerPopup) {\r\n      this.datePickerPopup.selectedDate = this.selectedDate;\r\n    }\r\n  }\r\n\r\n  onFocusInput(inputType: 'start' | 'end' | null, event: Event): void {\r\n    if (this.hideStateHelper == false){\r\n      this.toggleDatePicker(inputType, event);\r\n      this.hideStateHelper = true\r\n    } else {\r\n      this.hideStateHelper = false;\r\n    }\r\n  }\r\n\r\n  toggleDatePicker(inputType: 'start' | 'end' | null, event: Event): void {\r\n    this.onFocus.emit({\r\n      input: inputType,\r\n      event\r\n    });\r\n    this.activeInput = inputType;\r\n    this.dpService.activeInput$.next(this.activeInput);\r\n    this.open();\r\n    this.cdref.detectChanges();\r\n  }\r\n\r\n  onInputKeydown(event: KeyboardEvent): void {\r\n    if ((!event.shiftKey && event.key === 'Tab') || (!event.shiftKey && event.key === 'Enter')) {\r\n      if (this.isRange) {\r\n        return;\r\n      }\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  // ========== Update Methods ==========\r\n  updateInputValue(): void {\r\n    if (this.isRange) {\r\n      if (this.selectedStartDate) {\r\n        this.form.get('startDateInput')?.setValue(\r\n          this.currentDateAdapter.format(this.selectedStartDate, this.format)\r\n        );\r\n      }\r\n      if (this.selectedEndDate) {\r\n        this.form.get('endDateInput')?.setValue(\r\n          this.currentDateAdapter.format(this.selectedEndDate, this.format)\r\n        );\r\n      }\r\n    } else if (this.selectedDate) {\r\n      this.form.get('dateInput')?.setValue(\r\n        this.currentDateAdapter.format(this.selectedDate, this.format)\r\n      );\r\n    }\r\n  }\r\n\r\n  updateDatePickerPopup(): void {\r\n    if (this.datePickerPopup) {\r\n      if (this.isRange) {\r\n        this.datePickerPopup.selectedStartDate = this.selectedStartDate;\r\n        this.datePickerPopup.selectedEndDate = this.selectedEndDate;\r\n        if (this.showTimePicker){\r\n          this.datePickerPopup.timePicker.updateFromDate(\r\n            this.activeInput == 'start'?\r\n            this.selectedStartDate:\r\n            this.selectedEndDate\r\n          );\r\n          this.datePickerPopup.timePicker.scrollToTime()\r\n        }\r\n      } else {\r\n        this.datePickerPopup.selectedDate = this.selectedDate;\r\n        if (this.showTimePicker){\r\n          this.datePickerPopup.timePicker.updateFromDate(this.selectedDate);\r\n          this.datePickerPopup.timePicker.scrollToTime();\r\n        }\r\n      }\r\n      this.datePickerPopup.generateCalendar();\r\n      this.cdref.detectChanges();\r\n    }\r\n  }\r\n\r\n  convertDateToFormat(date: Date, fromType: CalendarType): any {\r\n    if (!date) return null;\r\n\r\n    switch (this.valueFormat) {\r\n      case 'date':\r\n        return date;\r\n      case 'jalali':\r\n        return this.jalali.format(date, this.format);\r\n      case 'gregorian':\r\n        return this.gregorian.format(date, this.format);\r\n      default:\r\n        return this.currentDateAdapter.format(date, this.format);\r\n    }\r\n  }\r\n\r\n  // ========== ControlValueAccessor Implementation ==========\r\n  onChange: any = () => {};\r\n  onTouch: any = () => {};\r\n\r\n  writeValue(value: any): void {\r\n    if (value) {\r\n      this.isInternalChange = true;\r\n      \r\n      if (this.isRange && typeof value === 'object') {\r\n        const startDate = this.parseIncomingValue(value.start);\r\n        const endDate = this.parseIncomingValue(value.end);\r\n        \r\n        if (startDate) {\r\n          this.selectedStartDate = startDate;\r\n          this.form.get('startDateInput')?.setValue(\r\n            this.currentDateAdapter.format(startDate, this.format),\r\n            { emitEvent: false }\r\n          );\r\n        }\r\n        \r\n        if (endDate) {\r\n          this.selectedEndDate = endDate;\r\n          this.form.get('endDateInput')?.setValue(\r\n            this.currentDateAdapter.format(endDate, this.format),\r\n            { emitEvent: false }\r\n          );\r\n        }\r\n      } else {\r\n        const parsedDate = this.parseIncomingValue(value);\r\n        if (parsedDate) {\r\n          this.selectedDate = parsedDate;\r\n          this.form.get('dateInput')?.setValue(\r\n            this.currentDateAdapter.format(parsedDate, this.format),\r\n            { emitEvent: false }\r\n          );\r\n        }\r\n      }\r\n      \r\n      this.lastEmittedValue = value;\r\n      this.isInternalChange = false;\r\n      this.updateDatePickerPopup();\r\n\r\n      this.cdref.markForCheck();\r\n    } else {\r\n      this.resetValues();\r\n    }\r\n  }\r\n\r\n  resetValues(): void {\r\n    this.isInternalChange = true;\r\n    this.selectedDate = null;\r\n    this.selectedStartDate = null;\r\n    this.selectedEndDate = null;\r\n    this.form.get('dateInput')?.setValue('', { emitEvent: false });\r\n    this.form.get('startDateInput')?.setValue('', { emitEvent: false });\r\n    this.form.get('endDateInput')?.setValue('', { emitEvent: false });\r\n    this.lastEmittedValue = null;\r\n    this.isInternalChange = false;\r\n    this.updateDatePickerPopup();\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouch = fn;\r\n  }\r\n\r\n  // ========== Setup Methods ==========\r\n  setupActiveInputSubscription(): void {\r\n    this.dpService.activeInput$\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe((active: any) => {\r\n        this.activeInput = active;\r\n        if (active) {\r\n          if (!this.isOpen)\r\n            this.origin = new CdkOverlayOrigin(this.activeInput == 'start'? this.rangePickerInputs?.first: this.rangePickerInputs.last)\r\n          this.focus();\r\n        }\r\n      });\r\n  }\r\n\r\n  setupMouseDownEventHandler(): void {\r\n    this.ngZone.runOutsideAngular(() =>\r\n      fromEvent(this.elementRef.nativeElement, 'mousedown')\r\n        .pipe(takeUntil(this.destroy$))\r\n        .subscribe((event: any) => {\r\n          if ((event.target as HTMLInputElement).tagName.toLowerCase() !== 'input') {\r\n            event.preventDefault();\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  parseDateValue(value: any): Date | null {\r\n    if (value instanceof Date) {\r\n      return value;\r\n    }\r\n    return this.currentDateAdapter.parse(value, this.format);\r\n  }\r\n\r\n  parseValueFromFormat(value: string | Date, targetAdapter: DateAdapter<Date>): Date | null {\r\n    if (!value) return null;\r\n    if (value instanceof Date) return value;\r\n\r\n    return targetAdapter.parse(value, this.format);\r\n  }\r\n\r\n  parseIncomingValue(value: any): Date | null {\r\n    if (!value) return null;\r\n    if (value instanceof Date) return value;\r\n    let parsedDate: Date | null = null;\r\n\r\n    // try with value adapter\r\n    parsedDate = this.valueAdapter.parse(value, this.format);\r\n    if (parsedDate) return parsedDate;\r\n\r\n    return null;\r\n  }\r\n\r\n  // ========== Time Methods ==========\r\n  hasTimeComponent(format: string): boolean {\r\n    return /[Hh]|[m]|[s]|[a]/g.test(format);\r\n  }\r\n\r\n  extractTimeFormat(format: string): string {\r\n    const timeMatch = format.match(/[Hh]{1,2}:mm(?::ss)?(?:\\s*[aA])?/);\r\n    return timeMatch ? timeMatch[0] : 'HH:mm';\r\n  }\r\n\r\n  extractDateFormat(format: string): string {\r\n    const dateFormatMatch = format.match(/[yMd\\/.-]+/);\r\n    return dateFormatMatch ? dateFormatMatch[0] : '';\r\n  }\r\n}","import { NgModule } from '@angular/core';\r\nimport { DatePickerComponent } from './date-picker.component';\r\nimport { DatePickerPopupComponent } from './date-picker-popup/date-picker-popup.component';\r\nimport { DateMaskDirective } from './utils/input-mask.directive';\r\nimport { NzConnectedOverlayDirective } from './public-api';\r\nimport { TimePickerComponent } from './time-picker/time-picker.component';\r\nimport { CustomTemplate } from './utils/template.directive';\r\n\r\n@NgModule({\r\n  imports: [\r\n    DatePickerComponent,\r\n    DatePickerPopupComponent,\r\n    DateMaskDirective,\r\n    NzConnectedOverlayDirective,\r\n    TimePickerComponent,\r\n    CustomTemplate\r\n  ],\r\n  exports: [\r\n    DatePickerComponent,\r\n    TimePickerComponent,\r\n    DatePickerPopupComponent,\r\n    DateMaskDirective,\r\n    NzConnectedOverlayDirective,\r\n    CustomTemplate\r\n  ]\r\n})\r\nexport class QeydarDatePickerModule { }\r\n","/*\r\n * Public API Surface of qeydar-datepicker\r\n */\r\n\r\n// Modules\r\nexport * from './qeydar-datepicker.module';\r\n\r\n// Components\r\nexport * from './date-picker.component';\r\nexport * from './time-picker/time-picker.component';\r\nexport * from './date-picker-popup/date-picker-popup.component';\r\n\r\n// Models and Utils\r\nexport * from './utils/models';\r\nexport * from './utils/overlay/overlay';\r\nexport * from './utils/animation/slide';\r\nexport * from './utils/input-mask.directive';\r\nexport * from './utils/template.directive';\r\n\r\n// Services\r\nexport * from './date-picker.service';\r\n\r\n// Adapters\r\nexport * from './date-adapter';\r\n\r\n// Types\r\nexport * from './utils/types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isValidJalali","parseJalali","formatJalali","addDaysJalali","addMonthsJalali","addYearsJalali","addHoursJalali","startOfWeekJalali","endOfMonthJalali","isSameDayJalali","isSameMonthJalali","isSameYearJalali","isAfterJalali","isBeforeJalali","startOfMonthJalali","maxJalali","setYearJalali","getDaysInMonthJalali","isValidGregorian","parseGregorian","formatGregorian","addDaysGregorian","addMonthsGregorian","addYearsGregorian","addHoursGregorian","startOfWeekGregorian","isSameDayGregorian","isSameMonthGregorian","isSameYearGregorian","isAfterGregorian","isBeforeGregorian","startOfMonthGregorian","endOfMonthGregorian","maxGregorian","setYearGregorian","getDaysInMonthGregorian","i1.lang_Fa","i1.lang_En","i2.DestroyService","i1","i2.QeydarDatePickerService","i3.JalaliDateAdapter","i3.GregorianDateAdapter","i4","takeUntil","i1.QeydarDatePickerService","i2.JalaliDateAdapter","i2.GregorianDateAdapter","i1.DestroyService","i3.CalendarUtilsService","i4.ValidationStrategyService","i5.SelectionStrategyService"],"mappings":"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"}