{"version":3,"file":"persian-date-time-picker.mjs","sources":["../../../projects/persian-date-time-picker/src/lib/utils/animation/animation-consts.ts","../../../projects/persian-date-time-picker/src/lib/utils/animation/slide.ts","../../../projects/persian-date-time-picker/src/lib/utils/models.ts","../../../projects/persian-date-time-picker/src/lib/persian-date-time-picker.service.ts","../../../projects/persian-date-time-picker/src/lib/utils/overlay/overlay.ts","../../../projects/persian-date-time-picker/src/lib/utils/input-mask.directive.ts","../../../projects/persian-date-time-picker/src/lib/date-adapter.ts","../../../projects/persian-date-time-picker/src/lib/time-picker/time-picker.component.ts","../../../projects/persian-date-time-picker/src/lib/time-picker/time-picker.component.html","../../../projects/persian-date-time-picker/src/lib/date-picker-popup/date-picker-popup.component.ts","../../../projects/persian-date-time-picker/src/lib/date-picker-popup/date-picker-popup.component.html","../../../projects/persian-date-time-picker/src/lib/utils/template.directive.ts","../../../projects/persian-date-time-picker/src/lib/date-picker/date-picker.component.ts","../../../projects/persian-date-time-picker/src/lib/date-picker/date-picker.component.html","../../../projects/persian-date-time-picker/src/lib/persian-date-time-picker.module.ts","../../../projects/persian-date-time-picker/src/public-api.ts","../../../projects/persian-date-time-picker/src/persian-date-time-picker.ts"],"sourcesContent":["export 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","import {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({\n      opacity: 1,\n      transform: 'scaleY(1)',\n      transformOrigin: '0% 0%'\n    }),\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 {Injectable} from \"@angular/core\";\n\nexport interface CustomLabels {\n  label: string,\n  value: Array<Date> | 'custom',\n  arrow?: boolean\n}\n\nexport interface YearRange {\n  start: number,\n  end: number\n}\n\nexport interface DateRange {\n  start: Date | null,\n  end?: Date | null\n}\n\nexport interface RangeInputLabels {\n  start: string,\n  end: string,\n}\n\nexport interface LanguageLocale {\n  today: string;\n  lastDay: string;\n  lastWeek: string;\n  lastMonth: string;\n  custom: string;\n  previousMonth: string;\n  nextMonth: string;\n  previousYear: string;\n  nextYear: string;\n  selectTime: string;\n  selectDate: string;\n  selectMonth: string;\n  selectYear: string;\n  selectDateRange: string;\n  startDate: string;\n  endDate: string;\n  pm: string;\n  am: string;\n  ok: string;\n  cancel: string;\n  now: string;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PersianLocale implements LanguageLocale {\n  today: string = \"امروز\";\n  lastDay: string = \"آخرین روز\";\n  lastWeek: string = \"آخرین هفته\";\n  lastMonth: string = \"آخرین ماه\";\n  custom: string = \"دلخواه\";\n  previousMonth: string = \"ماه قبل\";\n  nextMonth: string = \"ماه بعد\";\n  previousYear: string = \"سال قبل\";\n  nextYear: string = \"سال بعد\";\n  selectTime: string = \"انتخاب زمان\";\n  selectDate: string = \"انتخاب تاریخ\";\n  selectMonth: string = \"انتخاب ماه\";\n  selectYear: string = \"انتخاب سال\";\n  selectDateRange: string = \"انتخاب محدوده تاریخ\";\n  startDate: string = \"از تاریخ\";\n  endDate: string = \"تا تاریخ\";\n  pm: string = \"ب.ظ\";\n  am: string = \"ق.ظ\";\n  ok: string = \"تایید\";\n  cancel: string = \"لغو\";\n  now: string = \"اکنون\";\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class EnglishLocale implements LanguageLocale {\n  today: string = \"Today\";\n  lastDay: string = \"Last Day\";\n  lastWeek: string = \"Last Week\";\n  lastMonth: string = \"Last Month\";\n  custom: string = \"Custom\";\n  previousMonth: string = \"Previous Month\";\n  nextMonth: string = \"Next Month\";\n  previousYear: string = \"Previous Year\";\n  nextYear: string = \"Next Year\";\n  selectTime: string = \"Select time\";\n  selectDate: string = \"Select date\";\n  selectMonth: string = \"Select month\";\n  selectYear: string = \"Select year\";\n  selectDateRange: string = \"Select date range\";\n  startDate: string = \"Start date\";\n  endDate: string = \"End date\";\n  pm: string = \"PM\";\n  am: string = \"AM\";\n  ok: string = \"Ok\";\n  cancel: string = \"Cancel\";\n  now: string = \"Now\";\n}\n","import {Injectable, OnDestroy} from \"@angular/core\";\nimport {BehaviorSubject, Subject} from \"rxjs\";\nimport {EnglishLocale, LanguageLocale, PersianLocale} from \"./utils/models\";\n\nexport interface ValidTimeResult {\n  isValid: boolean;\n  normalizedTime: string;\n}\n\n@Injectable()\nexport class PersianDateTimePickerService {\n\n  activeInput: BehaviorSubject<string> = new BehaviorSubject('');\n  languageLocale?: LanguageLocale;\n\n  constructor(public persianLocale: PersianLocale, public englishLocale: EnglishLocale) {\n  }\n\n  getActiveInputValue() {\n    return this.activeInput.getValue();\n  }\n}\n\n@Injectable()\nexport class DestroyService extends Subject<void> implements OnDestroy {\n\n  ngOnDestroy(): void {\n    this.next();\n    this.complete();\n  }\n}\n","import {\n  CdkConnectedOverlay,\n  CdkOverlayOrigin,\n  ConnectedOverlayPositionChange,\n  ConnectionPositionPair,\n  FlexibleConnectedPositionStrategyOrigin\n} from '@angular/cdk/overlay';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Directive, ElementRef, Input} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\nimport {DestroyService} from '../../persian-date-time-picker.service';\n\nexport type SafeAny = any;\n\nfunction propDecoratorFactory<T, D>(name: string, fallback: (v: T) => D): (target: SafeAny, propName: string) => void {\n  function propDecorator(target: SafeAny, propName: string, safeAnyTypedPropertyDescriptor?: TypedPropertyDescriptor<SafeAny>): SafeAny {\n    const privatePropName = `$$__zorroPropDecorator__${propName}`;\n\n    if (Object.prototype.hasOwnProperty.call(target, privatePropName)) {\n      console.warn(`The prop \"${privatePropName}\" is already exist, it will be overrided by ${name} decorator.`);\n    }\n\n    Object.defineProperty(target, privatePropName, {\n      configurable: true,\n      writable: true\n    });\n\n    return {\n      get(): string {\n        return safeAnyTypedPropertyDescriptor && safeAnyTypedPropertyDescriptor.get\n          ? safeAnyTypedPropertyDescriptor.get.bind(this)()\n          : this[privatePropName];\n      },\n      set(value: T): void {\n        if (safeAnyTypedPropertyDescriptor && safeAnyTypedPropertyDescriptor.set) {\n          safeAnyTypedPropertyDescriptor.set.bind(this)(fallback(value));\n        }\n        this[privatePropName] = fallback(value);\n      }\n    };\n  }\n\n  return propDecorator;\n}\n\n/**\n * Input decorator that handle a prop to do get/set automatically with toBoolean\n *\n * Why not using @InputBoolean alone without @Input? AOT needs @Input to be visible\n *\n * @howToUse\n * ```\n * @Input() @InputBoolean() visible: boolean = false;\n *\n * // Act as below:\n * // @Input()\n * // get visible() { return this.__visible; }\n * // set visible(value) { this.__visible = value; }\n * // __visible = false;\n * ```\n */\nexport function InputBoolean(): any {\n  return propDecoratorFactory('InputBoolean', toBoolean);\n}\n\nexport function toBoolean(value: boolean | string): boolean {\n  return coerceBooleanProperty(value);\n}\n\n/** Equivalent of `ClientRect` without some of the properties we don't care about. */\ntype Dimensions = Omit<ClientRect, 'x' | 'y' | 'toJSON'>;\n\n@Directive({\n  selector: '[cdkConnectedOverlay][nzConnectedOverlay]',\n  exportAs: 'nzConnectedOverlay',\n  standalone: true,\n  providers: [DestroyService]\n})\nexport class NzConnectedOverlayDirective {\n\n  @Input() @InputBoolean() nzArrowPointAtCenter: boolean = false;\n\n  constructor(private readonly cdkConnectedOverlay: CdkConnectedOverlay, private readonly destroyService: DestroyService) {\n    this.cdkConnectedOverlay.backdropClass = 'nz-overlay-transparent-backdrop';\n\n    this.cdkConnectedOverlay.positionChange\n      .pipe(takeUntil(this.destroyService))\n      .subscribe((position: ConnectedOverlayPositionChange) => {\n        if (this.nzArrowPointAtCenter) {\n          this.updateArrowPosition(position);\n        }\n      });\n  }\n\n  private updateArrowPosition(position: ConnectedOverlayPositionChange): void {\n    const originRect = this.getOriginRect();\n    const placement = getPlacementName(position);\n\n    let offsetX: number | undefined = 0;\n    let offsetY: number | undefined = 0;\n\n    if (placement === 'topLeft' || placement === 'bottomLeft') {\n      offsetX = originRect.width / 2 - 14;\n    } else if (placement === 'topRight' || placement === 'bottomRight') {\n      offsetX = -(originRect.width / 2 - 14);\n    } else if (placement === 'leftTop' || placement === 'rightTop') {\n      offsetY = originRect.height / 2 - 10;\n    } else if (placement === 'leftBottom' || placement === 'rightBottom') {\n      offsetY = -(originRect.height / 2 - 10);\n    }\n\n    if (this.cdkConnectedOverlay.offsetX !== offsetX || this.cdkConnectedOverlay.offsetY !== offsetY) {\n      this.cdkConnectedOverlay.offsetY = offsetY;\n      this.cdkConnectedOverlay.offsetX = offsetX;\n      this.cdkConnectedOverlay.overlayRef.updatePosition();\n    }\n  }\n\n  private getFlexibleConnectedPositionStrategyOrigin(): FlexibleConnectedPositionStrategyOrigin {\n    if (this.cdkConnectedOverlay.origin instanceof CdkOverlayOrigin) {\n      return this.cdkConnectedOverlay.origin.elementRef;\n    } else {\n      return this.cdkConnectedOverlay.origin;\n    }\n  }\n\n  private getOriginRect(): Dimensions {\n    const origin = this.getFlexibleConnectedPositionStrategyOrigin();\n\n    if (origin instanceof ElementRef) {\n      return origin.nativeElement.getBoundingClientRect();\n    }\n\n    // Check for Element so SVG elements are also supported.\n    if (origin instanceof Element) {\n      return origin.getBoundingClientRect();\n    }\n\n    const width = origin.width || 0;\n    const height = origin.height || 0;\n\n    // If the origin is a point, return a client rect as if it was a 0x0 element at the point.\n    return {\n      top: origin.y,\n      bottom: origin.y + height,\n      left: origin.x,\n      right: origin.x + width,\n      height,\n      width\n    };\n  }\n}\n\n//overlay-position.ts:\nexport const POSITION_MAP = {\n  top: new ConnectionPositionPair({\n    originX: 'center',\n    originY: 'top'\n  }, {\n    overlayX: 'center',\n    overlayY: 'bottom'\n  }),\n  topCenter: new ConnectionPositionPair(\n    {\n      originX: 'center',\n      originY: 'top'\n    },\n    {\n      overlayX: 'center',\n      overlayY: 'bottom'\n    }\n  ),\n  topLeft: new ConnectionPositionPair({\n    originX: 'start',\n    originY: 'top'\n  }, {\n    overlayX: 'start',\n    overlayY: 'bottom'\n  }),\n  topRight: new ConnectionPositionPair({\n    originX: 'end',\n    originY: 'top'\n  }, {\n    overlayX: 'end',\n    overlayY: 'bottom'\n  }),\n  right: new ConnectionPositionPair({\n    originX: 'end',\n    originY: 'center'\n  }, {\n    overlayX: 'start',\n    overlayY: 'center'\n  }),\n  rightTop: new ConnectionPositionPair({\n    originX: 'end',\n    originY: 'top'\n  }, {\n    overlayX: 'start',\n    overlayY: 'top'\n  }),\n  rightBottom: new ConnectionPositionPair(\n    {\n      originX: 'end',\n      originY: 'bottom'\n    },\n    {\n      overlayX: 'start',\n      overlayY: 'bottom'\n    }\n  ),\n  bottom: new ConnectionPositionPair({\n    originX: 'center',\n    originY: 'bottom'\n  }, {\n    overlayX: 'center',\n    overlayY: 'top'\n  }),\n  bottomCenter: new ConnectionPositionPair(\n    {\n      originX: 'center',\n      originY: 'bottom'\n    },\n    {\n      overlayX: 'center',\n      overlayY: 'top'\n    }\n  ),\n  bottomLeft: new ConnectionPositionPair(\n    {\n      originX: 'start',\n      originY: 'bottom'\n    },\n    {\n      overlayX: 'start',\n      overlayY: 'top'\n    }\n  ),\n  bottomRight: new ConnectionPositionPair({\n    originX: 'end',\n    originY: 'bottom'\n  }, {\n    overlayX: 'end',\n    overlayY: 'top'\n  }),\n  left: new ConnectionPositionPair({\n    originX: 'start',\n    originY: 'center'\n  }, {\n    overlayX: 'end',\n    overlayY: 'center'\n  }),\n  leftTop: new ConnectionPositionPair({\n    originX: 'start',\n    originY: 'top'\n  }, {\n    overlayX: 'end',\n    overlayY: 'top'\n  }),\n  leftBottom: new ConnectionPositionPair(\n    {\n      originX: 'start',\n      originY: 'bottom'\n    },\n    {\n      overlayX: 'end',\n      overlayY: 'bottom'\n    }\n  )\n};\nexport type POSITION_TYPE = keyof typeof POSITION_MAP;\nexport type POSITION_TYPE_HORIZONTAL = Extract<\n  POSITION_TYPE,\n  'bottomLeft' | 'bottomCenter' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight'\n>;\n\nexport const DEFAULT_TOOLTIP_POSITIONS = [POSITION_MAP.top, POSITION_MAP.right, POSITION_MAP.bottom, POSITION_MAP.left];\n\nexport const DEFAULT_CASCADER_POSITIONS = [\n  POSITION_MAP.bottomLeft,\n  POSITION_MAP.bottomRight,\n  POSITION_MAP.topLeft,\n  POSITION_MAP.topRight,\n  POSITION_MAP.topCenter,\n  POSITION_MAP.bottomCenter\n];\n\nexport const DEFAULT_MENTION_TOP_POSITIONS = [\n  new ConnectionPositionPair({\n    originX: 'start',\n    originY: 'bottom'\n  }, {\n    overlayX: 'start',\n    overlayY: 'bottom'\n  }),\n  new ConnectionPositionPair({\n    originX: 'start',\n    originY: 'bottom'\n  }, {\n    overlayX: 'end',\n    overlayY: 'bottom'\n  })\n];\n\nexport const DEFAULT_MENTION_BOTTOM_POSITIONS = [\n  POSITION_MAP.bottomLeft,\n  new ConnectionPositionPair({\n    originX: 'start',\n    originY: 'bottom'\n  }, {\n    overlayX: 'end',\n    overlayY: 'top'\n  })\n];\n\nexport function getPlacementName(position: ConnectedOverlayPositionChange): string | undefined {\n  for (const placement in POSITION_MAP) {\n    if (\n      position.connectionPair.originX === POSITION_MAP[placement as POSITION_TYPE].originX &&\n      position.connectionPair.originY === POSITION_MAP[placement as POSITION_TYPE].originY &&\n      position.connectionPair.overlayX === POSITION_MAP[placement as POSITION_TYPE].overlayX &&\n      position.connectionPair.overlayY === POSITION_MAP[placement as POSITION_TYPE].overlayY\n    ) {\n      return placement;\n    }\n  }\n  return undefined;\n}\n\nexport const DATE_PICKER_POSITION_MAP = {\n  bottomLeft: new ConnectionPositionPair(\n    {\n      originX: 'start',\n      originY: 'bottom'\n    },\n    {\n      overlayX: 'start',\n      overlayY: 'top'\n    },\n    undefined,\n    2\n  ),\n  topLeft: new ConnectionPositionPair(\n    {\n      originX: 'start',\n      originY: 'top'\n    },\n    {\n      overlayX: 'start',\n      overlayY: 'bottom'\n    },\n    undefined,\n    -2\n  ),\n  bottomRight: new ConnectionPositionPair(\n    {\n      originX: 'end',\n      originY: 'bottom'\n    },\n    {\n      overlayX: 'end',\n      overlayY: 'top'\n    },\n    undefined,\n    2\n  ),\n  topRight: new ConnectionPositionPair(\n    {\n      originX: 'end',\n      originY: 'top'\n    },\n    {\n      overlayX: 'end',\n      overlayY: 'bottom'\n    },\n    undefined,\n    -2\n  )\n};\n\nexport const DEFAULT_DATE_PICKER_POSITIONS = [\n  DATE_PICKER_POSITION_MAP.bottomLeft,\n  DATE_PICKER_POSITION_MAP.topLeft,\n  DATE_PICKER_POSITION_MAP.bottomRight,\n  DATE_PICKER_POSITION_MAP.topRight\n];\n","import {Directive, ElementRef, HostListener, Input} from '@angular/core';\n\n@Directive({\n  selector: '[dtp-dateMask]',\n  standalone: true\n})\nexport class DateMaskDirective {\n\n  @Input('dtp-dateMask') dateFormat: string = 'yyyy/MM/dd';\n  @Input() disableInputMask = false;\n\n  delimiters: string[] = [];\n  parts: string[] = [];\n  lastValue: string = '';\n\n  constructor(public elementRef: ElementRef) {\n  }\n\n  ngOnInit() {\n    this.parseFormat();\n  }\n\n  parseFormat() {\n    if (this.disableInputMask)\n      return;\n\n    this.parts = [];\n    this.delimiters = [];\n    let currentPart = '';\n\n    for (let i = 0; i < this.dateFormat.length; i++) {\n      const char = this.dateFormat[i];\n\n      if (this.isFormatChar(char)) {\n        currentPart += char;\n      } else {\n        if (currentPart) {\n          this.parts.push(currentPart);\n          currentPart = '';\n        }\n        this.delimiters.push(char);\n      }\n    }\n\n    if (currentPart) {\n      this.parts.push(currentPart);\n    }\n  }\n\n  isFormatChar(char: string): boolean {\n    return /[yMdHhmsa]/i.test(char);\n  }\n\n  @HostListener('input', ['$event'])\n  onInput(event: InputEvent) {\n    if (this.disableInputMask)\n      return;\n\n    const input = event.target as HTMLInputElement;\n    const cursorPosition = input.selectionStart || 0;\n    let value = input.value.replace(/[^0-9APMapm\\s:/\\-\\.]/g, '');\n\n    // Allow backspace/delete\n    if (value.length < this.lastValue.length) {\n      this.lastValue = value;\n      return;\n    }\n\n    let formattedParts: string[] = [];\n    let currentValue = value;\n    let shouldAddDelimiter = false;\n    let totalLength = 0;\n    let newCursorPosition = cursorPosition;\n\n    for (let i = 0; i < this.parts.length; i++) {\n      const part = this.extractPart(currentValue, this.parts[i]);\n      if (!part && part !== '0') break;\n\n      const expectedLength = this.getPartLength(this.parts[i]);\n      let formattedPart = part;\n\n      if (formattedPart.length >= expectedLength) {\n        formattedPart = this.validatePart(formattedPart.slice(0, expectedLength), this.parts[i]);\n        shouldAddDelimiter = true;\n      }\n\n      formattedParts.push(formattedPart);\n      totalLength += formattedPart.length;\n\n      if (shouldAddDelimiter && i < this.parts.length - 1) {\n        formattedParts.push(this.delimiters[i] || '');\n        totalLength += 1;\n        shouldAddDelimiter = false;\n\n        if (cursorPosition === totalLength - 1) {\n          newCursorPosition = totalLength;\n        }\n      }\n\n      currentValue = this.removeProcessedPart(currentValue, part);\n    }\n\n    const formattedValue = formattedParts.join('');\n    input.value = formattedValue;\n\n    // Set cursor position\n    newCursorPosition = Math.min(newCursorPosition, totalLength);\n    input.setSelectionRange(newCursorPosition, newCursorPosition);\n\n    this.lastValue = formattedValue;\n  }\n\n  extractPart(value: string, format: string): string {\n    if (!value) return '';\n\n    if (format[0].toLowerCase() === 'a') {\n      // Handle AM/PM\n      const match = value.match(/^[AaPp][Mm]?/);\n      return match ? match[0].toUpperCase() : '';\n    }\n\n    // Handle numeric parts\n    const match = value.match(/^\\d+/);\n    return match ? match[0] : '';\n  }\n\n  removeProcessedPart(value: string, part: string): string {\n    if (!part) return value;\n\n    // Remove part and following delimiter if exists\n    const remainingValue = value.slice(part.length);\n    return remainingValue.replace(/^[:/\\s-]/, '');\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent) {\n    if (this.disableInputMask)\n      return;\n\n    const input = event.target as HTMLInputElement;\n    const cursorPosition = input.selectionStart || 0;\n\n    // Allow control keys\n    if (event.key === 'Backspace' || event.key === 'Delete' ||\n      event.key === 'ArrowLeft' || event.key === 'ArrowRight' ||\n      event.key === 'Tab' || event.ctrlKey) {\n      return;\n    }\n\n    const currentPartIndex = this.getCurrentPartIndex(input.value, cursorPosition);\n    if (currentPartIndex === -1) return;\n\n    const currentFormat = this.parts[currentPartIndex];\n    const isTimeDelimiter = event.key === ':' && cursorPosition > 0 &&\n      (this.parts[currentPartIndex - 1]?.includes('H') ||\n        this.parts[currentPartIndex - 1]?.includes('h'));\n\n    // Allow time delimiter after hours\n    if (isTimeDelimiter) {\n      if (this.delimiters[currentPartIndex - 1] === ':') {\n        const parts = input.value.split(/[:/\\s-]/);\n        const currentPart = this.validatePart(parts[currentPartIndex - 1], this.parts[currentPartIndex - 1]);\n        parts[currentPartIndex - 1] = currentPart;\n\n        const newValue = parts.slice(0, currentPartIndex).join(this.delimiters[currentPartIndex - 1]) + ':';\n        input.value = newValue + parts.slice(currentPartIndex).join(this.delimiters[currentPartIndex]);\n\n        input.setSelectionRange(newValue.length, newValue.length);\n        event.preventDefault();\n      }\n      return;\n    }\n\n    // Handle AM/PM input\n    if (currentFormat[0].toLowerCase() === 'a') {\n      if (!/^[AaPpMm]$/.test(event.key)) {\n        event.preventDefault();\n      }\n      return;\n    }\n\n    // Allow only digits for other parts\n    if (!/^\\d$/.test(event.key)) {\n      event.preventDefault();\n    }\n  }\n\n  validatePart(value: string, format: string): string {\n    if (value === '') return '';\n\n    const type = format[0].toLowerCase();\n    if (type === 'a') {\n      const upperValue = value.toUpperCase();\n      if (value.length === 1) {\n        return upperValue === 'A' || upperValue === 'P' ? upperValue : '';\n      }\n      return ['AM', 'PM'].includes(upperValue) ? upperValue : upperValue[0];\n    }\n\n    const numValue = parseInt(value, 10);\n    switch (type) {\n      case 'h': // 12-hour format\n        if (format[0] == 'H')\n          return Math.min(Math.max(numValue, 0), 23).toString().padStart(2, '0');\n\n        return Math.min(Math.max(numValue, 1), 12).toString().padStart(2, '0');\n\n      case 'm': // month or minute\n        if (format === 'MM') {\n          return Math.min(Math.max(numValue, 1), 12).toString().padStart(2, '0');\n        }\n        return Math.min(Math.max(numValue, 0), 59).toString().padStart(2, '0');\n\n      case 's': // seconds\n        return Math.min(Math.max(numValue, 0), 59).toString().padStart(2, '0');\n\n      case 'd': // day\n        return Math.min(Math.max(numValue, 1), 31).toString().padStart(2, '0');\n\n      case 'y': // year\n        if (format.length === 2) return value.padStart(2, '0');\n        return value.padStart(4, '0');\n\n      default:\n        return value;\n    }\n  }\n\n  getPartLength(format: string): number {\n    const type = format[0].toLowerCase();\n    switch (type) {\n      case 'y':\n        return format.length === 2 ? 2 : 4;\n      case 'a':\n        return format.length === 1 ? 1 : 2;\n      default:\n        return 2;\n    }\n  }\n\n  getCurrentPartIndex(value: string, cursorPosition: number): number {\n    const parts = value.split(/[:/\\s-]/);\n    let currentIndex = 0;\n    let totalLength = 0;\n\n    for (let i = 0; i < parts.length; i++) {\n      totalLength += parts[i].length;\n      if (cursorPosition <= totalLength + i) {\n        return i;\n      }\n      totalLength += 1; // Add delimiter length\n    }\n\n    return parts.length - 1;\n  }\n}\n","import {\n  addDays as addDaysJalali,\n  addHours as addHoursJalali,\n  addMonths as addMonthsJalali,\n  addYears as addYearsJalali,\n  endOfMonth as endOfMonthJalali,\n  format as formatJalali,\n  getDaysInMonth as getDaysInMonthJalali,\n  isAfter as isAfterJalali,\n  isBefore as isBeforeJalali,\n  isSameDay as isSameDayJalali,\n  isSameMonth as isSameMonthJalali,\n  isSameYear as isSameYearJalali,\n  isValid as isValidJalali,\n  max as maxJalali,\n  parse as parseJalali,\n  setYear as setYearJalali,\n  startOfMonth as startOfMonthJalali,\n  startOfWeek as startOfWeekJalali\n} from 'date-fns-jalali';\n\nimport {\n  addDays as addDaysGregorian,\n  addHours as addHoursGregorian,\n  addMinutes,\n  addMonths as addMonthsGregorian,\n  addYears as addYearsGregorian,\n  endOfMonth as endOfMonthGregorian,\n  format as formatGregorian,\n  getDaysInMonth as getDaysInMonthGregorian,\n  isAfter as isAfterGregorian,\n  isBefore as isBeforeGregorian,\n  isEqual,\n  isSameDay as isSameDayGregorian,\n  isSameMonth as isSameMonthGregorian,\n  isSameYear as isSameYearGregorian,\n  isValid as isValidGregorian,\n  max as maxGregorian,\n  parse as parseGregorian,\n  parseISO,\n  setYear as setYearGregorian,\n  startOfDay,\n  startOfMonth as startOfMonthGregorian,\n  startOfWeek as startOfWeekGregorian\n} from 'date-fns';\nimport {Injectable} from '@angular/core';\n\nexport interface DateAdapter<T> {\n  today(): T;\n\n  parse(value: any, formatString: string): T | null;\n\n  format(date: T, formatString: string): string;\n\n  addDays(date: T, amount: number): T;\n\n  addMonths(date: T, amount: number): T;\n\n  addYears(date: T, amount: number): T;\n\n  addHours(date: T, amount: number): T;\n\n  getYear(date: T): number | null;\n\n  getMonth(date: T): number | null;\n\n  getDate(date: T): number | null;\n\n  getDayOfWeek(date: T): number;\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  getDateNames(): string[];\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  getFirstDayOfWeek(): number;\n\n  getNumDaysInMonth(date: T): number;\n\n  clone(date: T): T;\n\n  createDate(year: number, month: number, date: number): T;\n\n  isSameDay(date1: T, date2: T): boolean;\n\n  isSameMonth(date1: T, date2: T): boolean;\n\n  isSameYear(date1: T, date2: T): boolean;\n\n  isAfter(date1: T, date2: T): boolean;\n\n  isBefore(date1: T, date2: T): boolean;\n\n  isEqual(date1: T, date2: T): boolean;\n\n  startOfMonth(date: T): T;\n\n  endOfMonth(date: T): T;\n\n  startOfWeek(date: T): T;\n\n  isValidFormat(dateString: string, formatString: string): boolean;\n\n  max(dates: T[]): T;\n\n  setYear(date: T, year: number): T;\n\n  startOfDay(date: T): T;\n\n  getHours(date: T): number | null;\n\n  getMinutes(date: T): number | null;\n\n  getSeconds(date: T): number | null;\n\n  setHours(date: T, hours: number): T;\n\n  setMinutes(date: T, minutes: number): T;\n\n  setSeconds(date: T, seconds: number): T;\n\n  getDaysInMonth(date: T): number;\n\n  addMinutes(date: T, amount: number): T;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class JalaliDateAdapter implements DateAdapter<Date> {\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any, formatString: string): Date | null {\n    if (typeof value === 'string') {\n      // Check if it's in ISO 8601 format\n      if (value.includes('T')) {\n        const parsedDate = parseISO(value);\n        return isValidJalali(parsedDate) ? parsedDate : null;\n      }\n\n      try {\n        const parsedDate = parseJalali(value, formatString, new Date());\n        return isValidJalali(parsedDate) ? parsedDate : null;\n      } catch (error) {\n        console.error('Error parsing date:', error);\n        return null;\n      }\n    } else if (value instanceof Date) {\n      return isValidJalali(value) ? value : null;\n    }\n    return null;\n  }\n\n  format(date: Date, formatString: string): string {\n    return formatJalali(date, formatString);\n  }\n\n  addDays(date: Date, amount: number): Date {\n    return addDaysJalali(date, amount);\n  }\n\n  addMonths(date: Date, amount: number): Date {\n    return addMonthsJalali(date, amount);\n  }\n\n  addYears(date: Date, amount: number): Date {\n    return addYearsJalali(date, amount);\n  }\n\n  addHours(date: Date, amount: number): Date {\n    return addHoursJalali(date, amount);\n  }\n\n  getYear(date: Date): number | null {\n    return date ? parseInt(formatJalali(date, 'yyyy')) : null;\n  }\n\n  getMonth(date: Date): number | null {\n    // Jalali months are 1-indexed in date-fns-jalali\n    return date ? parseInt(formatJalali(date, 'M')) - 1 : null;\n  }\n\n  getDate(date: Date): number | null {\n    return date ? parseInt(formatJalali(date, 'dd')) : null;\n  }\n\n  getDayOfWeek(date: Date): number {\n    return parseInt(formatJalali(date, 'i')) - 1;\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const jalaliMonths = [\n      'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',\n      'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'\n    ];\n\n    switch (style) {\n      case 'long':\n        return jalaliMonths;\n      case 'short':\n        return jalaliMonths.map(month => month.substring(0, 3));\n      case 'narrow':\n        return jalaliMonths.map(month => month.substring(0, 1));\n      default:\n        return jalaliMonths;\n    }\n  }\n\n  getDateNames(): string[] {\n    return Array.from({length: 31}, (_, i) => (i + 1).toString());\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const formats = {\n      long: 'EEEE',\n      short: 'EEEEE',\n      narrow: 'EEEEEE'\n    };\n    return Array.from({length: 7}, (_, i) =>\n      formatJalali(addDaysJalali(startOfWeekJalali(new Date()), i), formats[style])\n    );\n  }\n\n  getFirstDayOfWeek(): number {\n    return 6; // Saturday is the first day of the week in the Jalali calendar\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return parseInt(formatJalali(endOfMonthJalali(date), 'd'));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    // Adjust for 0-indexed months in the interface vs 1-indexed months in date-fns-jalali\n    return parseJalali(`${year}/${month + 1}/${date}`, 'yyyy/M/d', new Date());\n  }\n\n  isSameDay(date1: Date, date2: Date): boolean {\n    return isSameDayJalali(date1, date2);\n  }\n\n  isSameMonth(date1: Date, date2: Date): boolean {\n    return isSameMonthJalali(date1, date2);\n  }\n\n  isSameYear(date1: Date, date2: Date): boolean {\n    return isSameYearJalali(date1, date2);\n  }\n\n  isAfter(date1: Date, date2: Date): boolean {\n    return isAfterJalali(date1, date2);\n  }\n\n  isBefore(date1: Date, date2: Date): boolean {\n    return isBeforeJalali(date1, date2);\n  }\n\n  isEqual(date1: Date, date2: Date): boolean {\n    return isEqual(date1, date2);\n  }\n\n  startOfMonth(date: Date): Date {\n    return startOfMonthJalali(date);\n  }\n\n  endOfMonth(date: Date): Date {\n    return endOfMonthJalali(date);\n  }\n\n  startOfWeek(date: Date): Date {\n    return startOfWeekJalali(date, {weekStartsOn: this.getFirstDayOfWeek() as 0 | 1 | 2 | 3 | 4 | 5 | 6});\n  }\n\n  isValidFormat(dateString: string, formatString: string): boolean {\n    try {\n      const parsedDate = parseJalali(dateString, formatString, new Date());\n      if (!isValidJalali(parsedDate)) {\n        return false;\n      }\n      // Check if the formatted parsed date matches the original date string\n      const formattedDate = formatJalali(parsedDate, formatString);\n      return formattedDate === dateString;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  max(dates: Date[]): Date {\n    return maxJalali(dates);\n  }\n\n  setYear(date: Date, year: number): Date {\n    return setYearJalali(date, year);\n  }\n\n  startOfDay(date: Date): Date {\n    return startOfDay(date);\n  }\n\n  getHours(date: Date): number | null {\n    return date ? parseInt(formatJalali(date, 'HH')) : null;\n  }\n\n  getMinutes(date: Date): number | null {\n    return date ? parseInt(formatJalali(date, 'mm')) : null;\n  }\n\n  getSeconds(date: Date): number | null {\n    return date ? parseInt(formatJalali(date, 'ss')) : null;\n  }\n\n  setHours(date: Date, hours: number): Date {\n    const newDate = this.clone(date);\n    newDate.setHours(hours);\n    return newDate;\n  }\n\n  setMinutes(date: Date, minutes: number): Date {\n    const newDate = this.clone(date);\n    newDate.setMinutes(minutes);\n    return newDate;\n  }\n\n  setSeconds(date: Date, seconds: number): Date {\n    const newDate = this.clone(date);\n    newDate.setSeconds(seconds);\n    return newDate;\n  }\n\n  getDaysInMonth(date: Date) {\n    return getDaysInMonthJalali(date);\n  }\n\n  addMinutes(date: Date, amount: number) {\n    return addMinutes(date, amount);\n  }\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GregorianDateAdapter implements DateAdapter<Date> {\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any, formatString: string): Date | null {\n    if (typeof value === 'string') {\n      // Check if it's in ISO 8601 format\n      if (value.includes('T')) {\n        const parsedDate = parseISO(value);\n        return isValidGregorian(parsedDate) ? parsedDate : null;\n      }\n\n      try {\n        let parsedDate: Date;\n        if (formatString === \"ISO\") {\n          parsedDate = parseISO(value);\n        } else {\n          parsedDate = parseGregorian(value, formatString, new Date());\n        }\n        return isValidGregorian(parsedDate) ? parsedDate : null;\n      } catch (error) {\n        console.error('Error parsing date:', error);\n        return null;\n      }\n    } else if (value instanceof Date) {\n      return isValidGregorian(value) ? value : null;\n    }\n    return null;\n  }\n\n  format(date: Date, formatString: string): string {\n    return formatGregorian(date, formatString);\n  }\n\n  addDays(date: Date, amount: number): Date {\n    return addDaysGregorian(date, amount);\n  }\n\n  addMonths(date: Date, amount: number): Date {\n    return addMonthsGregorian(date, amount);\n  }\n\n  addYears(date: Date, amount: number): Date {\n    return addYearsGregorian(date, amount);\n  }\n\n  addHours(date: Date, amount: number): Date {\n    return addHoursGregorian(date, amount);\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const formats = {\n      long: 'MMMM',\n      short: 'MMM',\n      narrow: 'MMMMM'\n    };\n    return Array.from({length: 12}, (_, i) =>\n      formatGregorian(new Date(2000, i, 1), formats[style])\n    );\n  }\n\n  getDateNames(): string[] {\n    return Array.from({length: 31}, (_, i) => (i + 1).toString());\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const formats = {\n      long: 'EEEE',\n      short: 'EEE',\n      narrow: 'EEEEE'\n    };\n    return Array.from({length: 7}, (_, i) =>\n      formatGregorian(addDaysGregorian(startOfWeekGregorian(new Date()), i), formats[style])\n    );\n  }\n\n  getFirstDayOfWeek(): number {\n    return 0; // Sunday is the first day of the week in the Gregorian calendar\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    return new Date(year, month, date);\n  }\n\n  isSameDay(date1: Date, date2: Date): boolean {\n    return isSameDayGregorian(date1, date2);\n  }\n\n  isSameMonth(date1: Date, date2: Date): boolean {\n    return isSameMonthGregorian(date1, date2);\n  }\n\n  isSameYear(date1: Date, date2: Date): boolean {\n    return isSameYearGregorian(date1, date2);\n  }\n\n  isAfter(date1: Date, date2: Date): boolean {\n    return isAfterGregorian(date1, date2);\n  }\n\n  isBefore(date1: Date, date2: Date): boolean {\n    return isBeforeGregorian(date1, date2);\n  }\n\n  isEqual(date1: Date, date2: Date): boolean {\n    return isEqual(date1, date2);\n  }\n\n  startOfMonth(date: Date): Date {\n    return startOfMonthGregorian(date);\n  }\n\n  endOfMonth(date: Date): Date {\n    return endOfMonthGregorian(date);\n  }\n\n  startOfWeek(date: Date): Date {\n    return startOfWeekGregorian(date, {weekStartsOn: this.getFirstDayOfWeek() as 0 | 1 | 2 | 3 | 4 | 5 | 6});\n  }\n\n  isValidFormat(dateString: string, formatString: string): boolean {\n    try {\n      const parsedDate = parseGregorian(dateString, formatString, new Date());\n      if (!isValidGregorian(parsedDate)) {\n        return false;\n      }\n      // Check if the formatted parsed date matches the original date string\n      const formattedDate = formatGregorian(parsedDate, formatString);\n      return formattedDate === dateString;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  max(dates: Date[]): Date {\n    return maxGregorian(dates);\n  }\n\n  setYear(date: Date, year: number): Date {\n    return setYearGregorian(date, year);\n  }\n\n  startOfDay(date: Date): Date {\n    return startOfDay(date);\n  }\n\n  getHours(date: Date): number | null {\n    return date ? date.getHours() : null;\n  }\n\n  getMinutes(date: Date): number | null {\n    return date ? date.getMinutes() : null;\n  }\n\n  getSeconds(date: Date): number | null {\n    return date ? date.getSeconds() : null;\n  }\n\n  setHours(date: Date, hours: number): Date {\n    const newDate = this.clone(date);\n    newDate.setHours(hours);\n    return newDate;\n  }\n\n  setMinutes(date: Date, minutes: number): Date {\n    const newDate = this.clone(date);\n    newDate.setMinutes(minutes);\n    return newDate;\n  }\n\n  setSeconds(date: Date, seconds: number): Date {\n    const newDate = this.clone(date);\n    newDate.setSeconds(seconds);\n    return newDate;\n  }\n\n  getDaysInMonth(date: Date) {\n    return getDaysInMonthGregorian(date);\n  }\n\n  addMinutes(date: Date, amount: number) {\n    return addMinutes(date, amount);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  Injector,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  runInInjectionContext,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormBuilder,\n  FormGroup,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport {CdkOverlayOrigin, ConnectedOverlayPositionChange, OverlayModule} from '@angular/cdk/overlay';\nimport {slideMotion} from '../utils/animation/slide';\nimport {LanguageLocale} from '../utils/models';\nimport {PersianDateTimePickerService} from '../persian-date-time-picker.service';\nimport {DateAdapter, GregorianDateAdapter, JalaliDateAdapter} from '../date-adapter';\nimport {TimeConfig, TimeFormat, TimeValueType} from '../utils/types';\nimport {DEFAULT_DATE_PICKER_POSITIONS, NzConnectedOverlayDirective} from \"../utils/overlay/overlay\";\nimport {NgFor, NgIf, NgTemplateOutlet} from '@angular/common';\nimport {DateMaskDirective} from '../utils/input-mask.directive';\n\n@Component({\n  selector: 'persian-time-picker',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './time-picker.component.html',\n  styleUrls: ['./time-picker.component.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    NgFor,\n    FormsModule,\n    ReactiveFormsModule,\n    NgTemplateOutlet,\n    DateMaskDirective,\n    OverlayModule,\n    NzConnectedOverlayDirective\n  ],\n  providers: [\n    PersianDateTimePickerService,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => TimePickerComponent),\n      multi: true\n    }\n  ],\n  host: {\n    '(click)': 'open()'\n  },\n  animations: [slideMotion]\n})\nexport class TimePickerComponent implements ControlValueAccessor, OnInit, OnDestroy, OnChanges {\n\n  @Input() placeholder?: string;\n  @Input() rtl = false;\n  @Input() placement: 'left' | 'right' = 'right';\n  @Input() minTime?: string;\n  @Input() maxTime?: string;\n  @Input() lang!: LanguageLocale;\n  @Input() valueType: TimeValueType = 'string';\n  @Input() cssClass = '';\n  @Input() showIcon = true;\n  @Input() dateAdapter: DateAdapter<Date>;\n  @Input() inline = false;\n  @Input() disableInputMask = false;\n  @Input() disabled = false;\n  @Input() disabledTimesFilter?: (date: Date) => boolean;\n  @Input() allowEmpty = true;\n  @Input() readOnly = false;\n  @Input() readOnlyInput = false;\n  @Output() timeChange = new EventEmitter<Date | string>();\n  @Output() openChange = new EventEmitter<boolean>();\n  @ViewChild('timePickerInput') timePickerInput!: ElementRef<HTMLInputElement>;\n  @ViewChild('popupWrapper') popupWrapper!: ElementRef<HTMLDivElement>;\n  timeFormat: TimeFormat = '12';\n  showSeconds = false;\n  hours: number[] = [];\n  minutes: number[] = Array.from({length: 60}, (_, i) => i);\n  seconds: number[] = Array.from({length: 60}, (_, i) => i);\n  periods: string[] = [];\n  selectedTime: TimeConfig = {\n    hour: 12,\n    minute: 0,\n    second: 0,\n    period: ''\n  };\n  isOpen = false;\n  form?: FormGroup;\n  origin?: CdkOverlayOrigin;\n  overlayPositions = [...DEFAULT_DATE_PICKER_POSITIONS];\n  private timeoutId: number | null = null;\n\n  constructor(public formBuilder: FormBuilder, public elementRef: ElementRef, public injector: Injector, public changeDetectorRef: ChangeDetectorRef, public persianDateTimePickerService: PersianDateTimePickerService, public jalaliDateAdapter: JalaliDateAdapter, public gregorianDateAdapter: GregorianDateAdapter) {\n    this.dateAdapter = this.gregorianDateAdapter;\n    this.initializeForm();\n    this.initializeLocale();\n  }\n\n  private _displayFormat = 'hh:mm a';\n\n  get displayFormat(): string {\n    return this._displayFormat;\n  }\n\n  @Input() set displayFormat(value: string) {\n    this._displayFormat = value;\n    this.showSeconds = value.toLowerCase().includes('s');\n    // Infer time format from display format\n    this.timeFormat = this.getTimeFormatFromDisplayFormat(value);\n    this.updateHourRange();\n    this.updateTimeDisplay();\n  }\n\n  private _value: string | Date | null = null;\n\n  // Value accessors and form control\n  get value(): Date | string | null {\n    return this._value;\n  }\n\n  set value(val: Date | string | null) {\n    this._value = val;\n    this.updateFromValue(val);\n  }\n\n  private _selectedDate: Date | null = new Date();\n\n  get selectedDate(): Date | null {\n    return this._selectedDate;\n  }\n\n  @Input() set selectedDate(date: Date | null) {\n    if (date) {\n      this._selectedDate = date;\n    }\n  }\n\n  // Lifecycle hooks\n  ngOnInit(): void {\n    this.updateHourRange();\n    runInInjectionContext(this.injector, () => {\n      this.origin = new CdkOverlayOrigin(this.elementRef);\n    });\n    this.setupInputSubscription();\n    this.value = this.selectedDate;\n\n    // Only add document click listener for non-inline mode\n    if (!this.inline) {\n      document.addEventListener('click', this.handleDocumentClick);\n    }\n\n    // Auto-open for inline mode\n    if (this.inline) {\n      this.isOpen = true;\n      this.scrollToTime();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.cleanupTimeouts();\n    document.removeEventListener('click', this.handleDocumentClick);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['rtl'] || changes['lang']) {\n      this.updateLocale();\n    }\n    if (changes['rtl'] && !changes['dateAdapter']) {\n      this.dateAdapter = this.rtl ? this.jalaliDateAdapter : this.gregorianDateAdapter;\n    }\n  }\n\n  // Initialization methods\n  initializeForm(): void {\n    this.form = this.formBuilder.group({\n      timeInput: ['']\n    });\n  }\n\n  initializeLocale(): void {\n    this.lang = this.persianDateTimePickerService.englishLocale;\n    this.selectedTime.period = this.lang.am;\n    this.periods = [this.lang.am, this.lang.pm];\n  }\n\n  updateLocale(): void {\n    this.lang = this.rtl ? this.persianDateTimePickerService.persianLocale : this.persianDateTimePickerService.englishLocale;\n    this.selectedTime.period = this.lang.am;\n    this.periods = [this.lang.am, this.lang.pm];\n    this.placeholder = this.lang.selectTime;\n  }\n\n  setupInputSubscription(): void {\n    this.form!.get('timeInput')?.valueChanges.subscribe(value => {\n      if (!value) return;\n\n      if (!this.isOpen) {\n        this.validateAndUpdateTime(value);\n      } else {\n        this.parseTimeString(value);\n        this.scrollToTime();\n      }\n    });\n  }\n\n  // Time management\n  updateHourRange(): void {\n    const format = this.getTimeFormatFromDisplayFormat(this._displayFormat);\n    this.hours = format === '12'\n      ? Array.from({length: 12}, (_, i) => i + 1)\n      : Array.from({length: 24}, (_, i) => i);\n  }\n\n  formatTime(date?: Date): string {\n    if (!date && !this.dateAdapter) return '';\n\n    const currentDate = date || this.updateDateFromSelection();\n    return this.dateAdapter.format(currentDate, this._displayFormat);\n  }\n\n  parseTimeString(value: string | Date): void {\n    if (!this.dateAdapter) return;\n\n    const date = value instanceof Date ? value : this.dateAdapter.parse(value, this._displayFormat);\n    if (!date) return;\n\n    const hours = this.dateAdapter.getHours(date);\n    const minutes = this.dateAdapter.getMinutes(date);\n    const seconds = this.dateAdapter.getSeconds(date);\n\n    if (hours === null || minutes === null || seconds === null) return;\n\n    this.selectedTime = {\n      hour: hours,\n      minute: minutes,\n      second: seconds,\n      period: hours >= 12 ? this.lang.pm : this.lang.am\n    };\n\n    this.changeDetectorRef.markForCheck();\n  }\n\n  updateFromValue(value: Date | string | null): void {\n    if (!value) {\n      this.resetSelection();\n      return;\n    }\n\n    if (value instanceof Date) {\n      this.updateFromDate(value);\n    } else {\n      this.parseTimeString(value);\n    }\n  }\n\n  updateFromDate(date: Date | null): void {\n    if (date && !isNaN(date.getTime()) && this.dateAdapter) {\n      const hours = this.dateAdapter.getHours(date);\n      if (hours === null) return;\n\n      this.selectedTime = {\n        hour: hours,\n        minute: this.dateAdapter.getMinutes(date) ?? 0,\n        second: this.dateAdapter.getSeconds(date) ?? 0,\n        period: hours >= 12 ? this.lang.pm : this.lang.am\n      };\n    } else {\n      this.resetSelection();\n    }\n\n    this.changeDetectorRef.markForCheck();\n  }\n\n  resetSelection(): void {\n    this.selectedTime = {\n      hour: 0,\n      minute: 0,\n      second: 0,\n      period: this.lang.am\n    };\n    this.changeDetectorRef.markForCheck();\n  }\n\n  writeValue(value: Date | string | null): void {\n    if (!value) {\n      this.value = null;\n      return;\n    }\n\n    if (value instanceof Date) {\n      this.value = value;\n    } else if (value.trim()) {\n      const date = this.selectedDate;\n      this.value = !isNaN(date!.getTime()) && this.valueType === 'date' ? date : value;\n      this.parseTimeString(value);\n    }\n\n    this.updateTimeDisplay();\n    this.save(false);\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  // UI Event handlers\n  @HostListener('keydown', ['$event'])\n  handleKeydown(event: KeyboardEvent): void {\n    if (event.key === 'Tab' || event.key === 'Enter') {\n      this.handleTimeInput();\n      if (event.key === 'Tab') this.close();\n    } else if (event.key === 'Escape') {\n      this.close();\n    }\n  }\n\n  handleTimeInput(): void {\n    const currentValue = this.form!.get('timeInput')?.value;\n    if (currentValue || (!currentValue && !this.allowEmpty)) {\n      this.validateAndUpdateTime(currentValue);\n    }\n  }\n\n  handleDocumentClick = (event: MouseEvent): void => {\n    if (!this.elementRef.nativeElement.contains(event.target) && this.isOpen) {\n      this.close();\n      this.handleTimeInput();\n    }\n  };\n\n  onFocusInput(): void {\n    if (!this.isOpen) {\n      this.open();\n    }\n  }\n\n  toggleTimePicker(event: Event): void {\n    event.stopPropagation();\n    this.isOpen ? this.close() : this.open();\n  }\n\n  // Picker operations\n  open(): void {\n    if (this.inline || this.disabled || this.readOnly) return;\n\n    const wasOpen = this.isOpen;\n    this.isOpen = true;\n    this.openChange.emit(true);\n    this.scrollToTime();\n\n    if (!wasOpen) {\n      this.changeDetectorRef.markForCheck();\n    }\n  }\n\n  close(): void {\n    if (this.inline) return;\n\n    this.cleanupTimeouts();\n    if (this.isOpen) {\n      this.isOpen = false;\n      this.openChange.emit(false);\n      this.changeDetectorRef.markForCheck();\n    }\n  }\n\n  // Selection methods\n  selectHour(hour: number): void {\n    if (!this.isHourDisabled(hour)) {\n      this.selectedTime.hour = hour;\n      this.updateTimeDisplay();\n      this.scrollToSelectedItem(`h${hour}`);\n      if (this.inline) this.save();\n    }\n  }\n\n  selectMinute(minute: number): void {\n    if (!this.isMinuteDisabled(minute)) {\n      this.selectedTime.minute = minute;\n      this.updateTimeDisplay();\n      this.scrollToSelectedItem(`m${minute}`);\n      if (this.inline) this.save();\n    }\n  }\n\n  selectSecond(second: number): void {\n    if (!this.isSecondDisabled(second)) {\n      this.selectedTime.second = second;\n      this.updateTimeDisplay();\n      this.scrollToSelectedItem(`s${second}`);\n      if (this.inline) this.save();\n    }\n  }\n\n  selectPeriod(period: string): void {\n    this.selectedTime.period = period;\n    this.updateTimeDisplay();\n  }\n\n  selectNow(): void {\n    const now = this.selectedDate;\n    this.selectedTime = {\n      hour: now!.getHours(),\n      minute: now!.getMinutes(),\n      second: now!.getSeconds(),\n      period: now!.getHours() >= 12 ? this.lang.pm : this.lang.am\n    };\n\n    this.updateTimeDisplay();\n    this.scrollToTime();\n    this.save();\n  }\n\n  save(close = true): void {\n    const date = this.updateDateFromSelection();\n    const {\n      isValid,\n      normalizedDate\n    } = this.validateAndNormalizeTime(date);\n\n    if (!isValid || !normalizedDate) return;\n\n    const outputValue = this.valueType === 'date'\n      ? normalizedDate\n      : this.formatTime(normalizedDate);\n\n    const valueChanged = JSON.stringify(this._value) !== JSON.stringify(outputValue);\n    if (valueChanged) {\n      this._value = outputValue;\n      this.form!.get('timeInput')?.setValue(this.formatTime(normalizedDate), {emitEvent: false});\n\n      this.onChange(outputValue);\n      this.timeChange.emit(outputValue);\n      this.changeDetectorRef.markForCheck();\n    }\n\n    if (close && !this.inline) {\n      this.close();\n    }\n  }\n\n  // Validation methods\n  validateAndUpdateTime(value: string): void {\n    if (!value || !this.dateAdapter) {\n      this.updateTimeDisplay();\n      return;\n    }\n\n    try {\n      const parsedDate = this.dateAdapter.parse(value, this._displayFormat);\n      if (!parsedDate) {\n        this.updateTimeDisplay();\n        return;\n      }\n\n      const {\n        isValid,\n        normalizedDate\n      } = this.validateAndNormalizeTime(parsedDate);\n      const formattedTime = this.dateAdapter.format(normalizedDate!, this._displayFormat);\n      this.form!.get('timeInput')?.setValue(formattedTime, {emitEvent: false});\n      this.parseTimeString(normalizedDate!);\n\n      const outputValue = this.valueType === 'date' ? normalizedDate : formattedTime;\n      this._value = outputValue;\n      this.onChange(outputValue);\n      this.timeChange.emit(outputValue!);\n\n    } catch (error) {\n      console.error('Error normalizing time:', error);\n      this.updateTimeDisplay();\n    }\n  }\n\n  isHourDisabled(hour: number): boolean {\n    if (!this.dateAdapter) return false;\n    return this.isFullHourDisabled(hour);\n  }\n\n  isMinuteDisabled(minute: number): boolean {\n    if (!this.dateAdapter) return false;\n    return this.isFullMinuteDisabled(minute);\n  }\n\n  isSecondDisabled(second: number): boolean {\n    if (!this.dateAdapter) return false;\n    const testConfig = {\n      ...this.selectedTime,\n      second\n    };\n    const testDate = this.createDateWithTime(testConfig);\n    return this.isTimeDisabled(testDate);\n  }\n\n  isTimeDisabled(testDate: Date): boolean {\n    if (!this.dateAdapter) return false;\n\n    if (this.minTime) {\n      const minDate = this.dateAdapter.parse(this.minTime, this._displayFormat);\n      if (minDate && this.dateAdapter.isBefore(testDate, minDate)) {\n        return true;\n      }\n    }\n\n    if (this.maxTime) {\n      const maxDate = this.dateAdapter.parse(this.maxTime, this._displayFormat);\n      if (maxDate && this.dateAdapter.isAfter(testDate, maxDate)) {\n        return true;\n      }\n    }\n\n    return this.disabledTimesFilter ? this.disabledTimesFilter(testDate) : false;\n  }\n\n  validateAndNormalizeTime(date: Date): { isValid: boolean; normalizedDate: Date | null } {\n    if (!this.dateAdapter) {\n      return {\n        isValid: false,\n        normalizedDate: null\n      };\n    }\n\n    let isValid = true;\n    // Clone the date to avoid modifying the original\n    let normalizedDate = this.dateAdapter.clone(date);\n    if (this.isTimeDisabled(normalizedDate)) {\n      isValid = false;\n      // Try to find nearest valid time (check next and previous 48 intervals of 30 minutes)\n      for (let i = 1; i <= 48; i++) {\n        const nextTime = this.dateAdapter.addMinutes(date, i * 30);\n        const prevTime = this.dateAdapter.addMinutes(date, -i * 30);\n\n        if (!this.isTimeDisabled(nextTime)) {\n          normalizedDate = nextTime;\n          break;\n        }\n        if (!this.isTimeDisabled(prevTime)) {\n          normalizedDate = prevTime;\n          break;\n        }\n      }\n\n      // If still disabled after trying to find valid time\n      if (this.isTimeDisabled(normalizedDate)) {\n        return {\n          isValid: false,\n          normalizedDate: null\n        };\n      }\n    }\n\n    return {\n      isValid: isValid,\n      normalizedDate\n    };\n  }\n\n  // Helper methods\n  createDateWithTime(config: TimeConfig): Date {\n    if (!this.dateAdapter) return this.selectedDate!;\n\n    let testHour = config.hour;\n    if (this.timeFormat === '12') {\n      if (config.period === this.lang.pm && testHour < 12) testHour += 12;\n      if (config.period === this.lang.am && testHour === 12) testHour = 0;\n    }\n\n    let date = this.selectedDate;\n    date = this.dateAdapter.setHours(date!, testHour);\n    date = this.dateAdapter.setMinutes(date!, config.minute);\n    date = this.dateAdapter.setSeconds(date!, config.second);\n    return date;\n  }\n\n  updateDateFromSelection(): Date {\n    if (!this.dateAdapter) return this.selectedDate!;\n\n    let hours = this.selectedTime.hour;\n    if (this.timeFormat === '12') {\n      if (this.selectedTime.period === this.lang.pm && hours < 12) hours += 12;\n      if (this.selectedTime.period === this.lang.am && hours === 12) hours = 0;\n    }\n\n    let date = this._value instanceof Date ?\n      this.dateAdapter.clone(this._value) :\n      this.selectedDate;\n\n    date = this.dateAdapter.setHours(date!, hours);\n    date = this.dateAdapter.setMinutes(date!, this.selectedTime.minute);\n    date = this.dateAdapter.setSeconds(date!, this.selectedTime.second);\n\n    return date;\n  }\n\n  updateTimeDisplay(): void {\n    if (this.form) {\n      this.form.get('timeInput')?.setValue(this.formatTime(), {emitEvent: false});\n    }\n  }\n\n  getTimeFormatFromDisplayFormat(format: string): '12' | '24' {\n    // Check for 24-hour format indicators\n    const has24HourFormat = /\\bH{1,2}\\b/.test(format);\n    return has24HourFormat ? '24' : '12';\n  }\n\n  // UI Update methods\n  async scrollToTime() {\n    await this.scrollToSelectedItem(`h${this.selectedTime.hour}`, 'auto'),\n      await this.scrollToSelectedItem(`m${this.selectedTime.minute}`, 'auto'),\n      this.showSeconds ? await this.scrollToSelectedItem(`s${this.selectedTime.second}`, 'auto') : '';\n  }\n\n  scrollToSelectedItem(id: string, behavior: ScrollBehavior = 'smooth'): Promise<boolean> {\n    this.cleanupTimeouts();\n    return new Promise((resolve) => {\n      if (!id) {\n        resolve(false);\n        return;\n      }\n\n      this.timeoutId = window.setTimeout(() => {\n        const selectedElement = this.popupWrapper?.nativeElement.querySelector(`#selector_${id}`);\n        if (selectedElement) {\n          selectedElement.scrollIntoView({\n            behavior,\n            block: 'center'\n          });\n        }\n        resolve(true);\n      }, 0);\n    });\n  }\n\n  cleanupTimeouts(): void {\n    if (this.timeoutId !== null) {\n      window.clearTimeout(this.timeoutId);\n      this.timeoutId = null;\n    }\n  }\n\n  onPositionChange(position: ConnectedOverlayPositionChange): void {\n    this.changeDetectorRef.detectChanges();\n  }\n\n  private onChange: (value: any) => void = () => {\n  };\n\n  private onTouched: () => void = () => {\n  };\n\n  private isFullHourDisabled(hour: number): boolean {\n    for (let minute = 0; minute < 60; minute++) {\n      const testConfig = {\n        ...this.selectedTime,\n        hour,\n        minute,\n        second: 0\n      };\n      const testDate = this.createDateWithTime(testConfig);\n\n      if (!this.isTimeDisabled(testDate)) {\n        return false; // If any minute is enabled, hour is not fully disabled\n      }\n    }\n    return true; // All minutes in hour are disabled\n  }\n\n  private isFullMinuteDisabled(minute: number): boolean {\n    if (!this.showSeconds) {\n      const testConfig = {\n        ...this.selectedTime,\n        minute,\n        second: 0\n      };\n      const testDate = this.createDateWithTime(testConfig);\n      return this.isTimeDisabled(testDate);\n    }\n\n    // If showing seconds, check each second\n    for (let second = 0; second < 60; second++) {\n      const testConfig = {\n        ...this.selectedTime,\n        minute,\n        second\n      };\n      const testDate = this.createDateWithTime(testConfig);\n\n      if (!this.isTimeDisabled(testDate)) {\n        return false; // If any second is enabled, minute is not fully disabled\n      }\n    }\n    return true; // All seconds in minute are disabled\n  }\n}\n","<div [formGroup]=\"form!\" class=\"time-picker-wrapper\">\n  <!-- Regular input mode -->\n  <ng-container *ngIf=\"!inline\">\n    <div [class.disabled]=\"disabled\" [class.focus]=\"isOpen\" class=\"input-wrapper\">\n      <input\n        #timePickerInput\n        (focus)=\"onFocusInput()\"\n        [attr.disabled]=\"disabled? 'disabled':null\"\n        [class.disabled]=\"disabled\"\n        [class.focus]=\"isOpen\"\n        [disableInputMask]=\"disableInputMask\"\n        [dtp-dateMask]=\"displayFormat\"\n        [placeholder]=\"placeholder\"\n        [readonly]=\"readOnly || readOnlyInput\"\n        class=\"time-picker-input\"\n        formControlName=\"timeInput\"\n        type=\"text\">\n      <button (click)=\"toggleTimePicker($event)\" *ngIf=\"showIcon\" class=\"time-button\" tabindex=\"-1\">\n        <svg fill=\"none\" height=\"20\" stroke=\"#999\" stroke-width=\"2\" viewBox=\"0 0 24 24\" width=\"20\"\n             xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n          <path d=\"M12 6v6l4 2\"/>\n        </svg>\n      </button>\n    </div>\n\n    <ng-template\n      (detach)=\"close()\"\n      (positionChange)=\"onPositionChange($event)\"\n      [cdkConnectedOverlayHasBackdrop]=\"false\"\n      [cdkConnectedOverlayOpen]=\"isOpen\"\n      [cdkConnectedOverlayOrigin]=\"origin!\"\n      [cdkConnectedOverlayPositions]=\"overlayPositions\"\n      [cdkConnectedOverlayTransformOriginOn]=\"'.time-picker-popup'\"\n      cdkConnectedOverlay\n      nzConnectedOverlay>\n      <ng-container *ngTemplateOutlet=\"timePickerContent\"></ng-container>\n    </ng-template>\n  </ng-container>\n\n  <!-- Inline mode -->\n  <ng-container *ngIf=\"inline\">\n    <ng-container *ngTemplateOutlet=\"timePickerContent\"></ng-container>\n  </ng-container>\n\n  <!-- Time Picker Content Template -->\n  <ng-template #timePickerContent>\n    <div\n      #popupWrapper\n      (click)=\"$event.stopPropagation()\"\n      [@slideMotion]=\"'enter'\"\n      [class.disabled]=\"disabled\"\n      [class.inline]=\"inline\"\n      [class]=\"'time-picker-popup ' + cssClass\"\n      style=\"position: relative\">\n      <div class=\"time-picker-content\">\n        <div class=\"time-columns\">\n          <!-- Hours -->\n          <div class=\"time-column\">\n            <div class=\"time-scroller\">\n              <button\n                (click)=\"selectHour(hour)\"\n                *ngFor=\"let hour of hours\"\n                [class.disabled]=\"isHourDisabled(hour)\"\n                [class.selected]=\"selectedTime.hour === hour\"\n                [id]=\"'selector_h'+hour\"\n                type=\"button\">\n                {{ hour.toString().padStart(2, '0') }}\n              </button>\n            </div>\n          </div>\n\n          <div class=\"time-separator\">:</div>\n\n          <!-- Minutes -->\n          <div class=\"time-column\">\n            <div class=\"time-scroller\">\n              <button\n                (click)=\"selectMinute(minute)\"\n                *ngFor=\"let minute of minutes\"\n                [class.disabled]=\"isMinuteDisabled(minute)\"\n                [class.selected]=\"selectedTime.minute === minute\"\n                [id]=\"'selector_m'+minute\"\n                type=\"button\">\n                {{ minute.toString().padStart(2, '0') }}\n              </button>\n            </div>\n          </div>\n\n          <!-- Seconds (if format includes seconds) -->\n          <ng-container *ngIf=\"showSeconds\">\n            <div class=\"time-separator\">:</div>\n            <div class=\"time-column\">\n              <div class=\"time-scroller\">\n                <button\n                  (click)=\"selectSecond(second)\"\n                  *ngFor=\"let second of seconds\"\n                  [class.disabled]=\"isSecondDisabled(second)\"\n                  [class.selected]=\"selectedTime.second === second\"\n                  [id]=\"'selector_s'+second\"\n                  type=\"button\">\n                  {{ second.toString().padStart(2, '0') }}\n                </button>\n              </div>\n            </div>\n          </ng-container>\n\n          <!-- AM/PM (only in 12-hour format) -->\n          <ng-container *ngIf=\"timeFormat === '12'\">\n            <div class=\"time-column period\">\n              <button\n                (click)=\"selectPeriod(period)\"\n                *ngFor=\"let period of periods\"\n                [class.selected]=\"selectedTime.period === period\"\n                type=\"button\">\n                {{ period }}\n              </button>\n            </div>\n          </ng-container>\n        </div>\n      </div>\n\n      <div *ngIf=\"!inline\" class=\"time-picker-footer\">\n        <div class=\"footer-buttons\">\n          <button (click)=\"selectNow()\" class=\"now-btn\" type=\"button\">{{ lang.now }}</button>\n        </div>\n        <div class=\"footer-actions\">\n          <button (click)=\"save()\" class=\"save-btn\" type=\"button\">{{ lang.ok }}</button>\n        </div>\n      </div>\n    </div>\n  </ng-template>\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport {CustomLabels, DateRange, LanguageLocale, YearRange} from '../utils/models';\nimport {CalendarType, DatePickerMode} from '../utils/types';\nimport {TimePickerComponent} from '../time-picker/time-picker.component';\nimport {takeUntil} from 'rxjs';\nimport {NgFor, NgIf, NgTemplateOutlet} from '@angular/common';\nimport {CustomTemplate} from '../utils/template.directive';\nimport {DateAdapter, GregorianDateAdapter, JalaliDateAdapter} from '../date-adapter';\nimport {DestroyService, PersianDateTimePickerService} from '../persian-date-time-picker.service';\n\n@Component({\n  selector: 'persian-date-picker-popup',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    NgIf,\n    NgFor,\n    NgTemplateOutlet,\n    TimePickerComponent\n  ],\n  templateUrl: './date-picker-popup.component.html',\n  styleUrls: ['./date-picker-popup.component.scss']\n})\nexport class DatePickerPopupComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n  // ========== Input Properties ==========\n  @Input() rtl = false;\n  @Input() selectedDate: Date | null = null;\n  @Input() selectedStartDate: Date | null = null;\n  @Input() selectedEndDate: Date | null = null;\n  @Input() mode: DatePickerMode = 'day';\n  @Input() isRange = false;\n  @Input() customLabels?: Array<CustomLabels> = [];\n  @Input() calendarType: CalendarType = 'gregorian';\n  @Input() minDate: Date | null = null;\n  @Input() maxDate: Date | null = null;\n  @Input() cssClass = '';\n  @Input() footerDescription = '';\n  @Input() activeInput: 'start' | 'end' | '' | null = null;\n  @Input() showSidebar = true;\n  @Input() showToday?: boolean;\n  @Input() showTimePicker = false;\n  @Input() timeDisplayFormat = 'HH:mm';\n  @Input() dateFormat?: string;\n  @Input() disabledDates: Array<Date | string> = [];\n  @Input() disabledDatesFilter?: (date: Date) => boolean;\n  @Input() disabledTimesFilter?: (date: Date) => boolean;\n  @Input() templates?: QueryList<CustomTemplate>;\n\n  // ========== Output Properties ==========\n  @Output() dateSelected = new EventEmitter<Date>();\n  @Output() dateRangeSelected = new EventEmitter<DateRange>();\n  @Output() closePicker = new EventEmitter<void>();\n  @Output() clickInside = new EventEmitter<boolean>();\n\n  // ========== ViewChild Properties ==========\n  @ViewChild('itemSelector') itemSelector?: ElementRef;\n  @ViewChild(TimePickerComponent) timePicker?: TimePickerComponent;\n\n  // ========== Class Properties ==========\n  dateAdapter?: DateAdapter<Date>;\n  weekDays: string[] = [];\n  periods: Array<CustomLabels> = [];\n  days: Date[] = [];\n  currentDate?: Date;\n  selectedPeriod: any = '';\n  tempEndDate: Date | null = null;\n  monthListNum = Array.from({length: 12}, (_, i) => i + 1);\n  yearList: number[] = [];\n  yearRanges: Array<YearRange> = [];\n  viewMode: 'days' | 'months' | 'years' = 'days';\n  lang?: LanguageLocale;\n  timeoutId: any = null;\n  dayTemplate?: TemplateRef<any>;\n  monthTemplate?: TemplateRef<any>;\n  quarterTemplate?: TemplateRef<any>;\n  yearTemplate?: TemplateRef<any>;\n\n  constructor(public elementRef: ElementRef, public changeDetectorRef: ChangeDetectorRef, public persianDateTimePickerService: PersianDateTimePickerService, public jalaliDateAdapter: JalaliDateAdapter, public gregorianDateAdapter: GregorianDateAdapter, public destroyService: DestroyService) {\n    changeDetectorRef.markForCheck();\n  }\n\n  // ========== Getters ==========\n  public get getDate(): Date {\n    return this.selectedDate! || this.selectedStartDate || this.selectedEndDate || new Date();\n  }\n\n  // ========== Lifecycle Hooks ==========\n  ngOnInit() {\n    this.initializeComponent();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.handleChanges(changes);\n  }\n\n  ngAfterViewInit() {\n    this.scrollToSelectedItem();\n    this.setTimePickerDate();\n    this.templates!.forEach((item) => {\n      switch (item.getType()) {\n        case 'day':\n          this.dayTemplate = item.templateRef;\n          break;\n\n        case 'month':\n          this.monthTemplate = item.templateRef;\n          break;\n\n        case 'quarter':\n          this.quarterTemplate = item.templateRef;\n          break;\n\n        case 'year':\n          this.yearTemplate = item.templateRef;\n          break;\n      }\n    });\n    this.changeDetectorRef.markForCheck();\n  }\n\n  ngOnDestroy(): void {\n    if (this.timeoutId != null) {\n      clearTimeout(this.timeoutId);\n    }\n  }\n\n  // ========== Initialization Methods ==========\n  initializeComponent(): void {\n    this.setDateAdapter();\n    this.setInitialDate();\n    this.generateCalendar();\n    this.weekDays = this.dateAdapter!.getDayOfWeekNames('short');\n    if (this.mode === 'year') {\n      this.showYearSelector();\n    }\n    this.initLabels();\n  }\n\n  initLabels(): void {\n    const today = this.dateAdapter!.today();\n    if (this.customLabels?.length) {\n      this.periods = this.customLabels;\n    } else if (this.isRange) {\n      this.generateDefaultPeriods(today);\n    }\n  }\n\n  generateDefaultPeriods(today: Date): void {\n    this.periods = [\n      {\n        label: this.lang!.lastDay,\n        value: [this.dateAdapter!.addDays(today, -1), today]\n      },\n      {\n        label: this.lang!.lastWeek,\n        value: [this.dateAdapter!.addDays(today, -7), today],\n        arrow: true\n      },\n      {\n        label: this.lang!.lastMonth,\n        value: [this.dateAdapter!.addMonths(today, -1), today]\n      },\n      {\n        label: this.lang!.custom,\n        value: 'custom'\n      }\n    ];\n  }\n\n  // ========== Date Adapter Methods ==========\n  setDateAdapter(): void {\n    this.dateAdapter = this.calendarType === 'jalali' ? this.jalaliDateAdapter : this.gregorianDateAdapter;\n    this.lang = this.persianDateTimePickerService.languageLocale;\n  }\n\n  // ========== Calendar Generation Methods ==========\n  generateCalendar(): void {\n    const firstDayOfMonth = this.dateAdapter!.startOfMonth(this.currentDate!);\n    const startDate = this.dateAdapter!.startOfWeek(firstDayOfMonth);\n    this.days = Array.from({length: 42}, (_, i) => this.dateAdapter!.addDays(startDate, i));\n  }\n\n  // ========== View Mode Management ==========\n  setViewMode(): void {\n    switch (this.mode) {\n      case 'day':\n        this.viewMode = 'days';\n        break;\n      case 'month':\n        this.viewMode = 'months';\n        this.generateYearList(15);\n        break;\n      case 'year':\n        this.viewMode = 'years';\n        break;\n    }\n  }\n\n  showMonthSelector(): void {\n    this.viewMode = 'months';\n    this.generateYearList(15);\n    this.scrollToSelectedItem(this.dateAdapter!.getYear(this.getDate));\n    this.changeDetectorRef.markForCheck();\n  }\n\n  showYearSelector(): void {\n    this.viewMode = 'years';\n    this.generateYearRanges();\n    this.generateYearList();\n    this.scrollToSelectedItem();\n    this.changeDetectorRef.markForCheck();\n  }\n\n  // ========== Time Selection Methods ==========\n  onTimeChange(time: string | Date): void {\n    const timeDate = time instanceof Date ? time : new Date(time);\n\n    if (!this.isRange) {\n      this.updateSingleDateTime(timeDate);\n    } else {\n      this.updateRangeDateTime(timeDate);\n    }\n  }\n\n  updateSingleDateTime(timeDate: Date): void {\n    if (!this.selectedDate!) {\n      this.selectedDate! = this.dateAdapter!.today();\n    }\n\n    const updatedDate = this.applyTimeToDate(this.selectedDate!, timeDate);\n    this.selectedDate! = updatedDate;\n  }\n\n  updateRangeDateTime(timeDate: Date): void {\n    if (this.activeInput === 'start' && this.selectedStartDate) {\n      const updatedDate = this.applyTimeToDate(this.selectedStartDate, timeDate);\n      this.selectedStartDate = updatedDate;\n      this.dateRangeSelected.emit({\n        start: this.selectedStartDate,\n        end: undefined\n      });\n    } else if (this.activeInput === 'end' && this.selectedEndDate) {\n      const updatedDate = this.applyTimeToDate(this.selectedEndDate, timeDate);\n      this.selectedEndDate = updatedDate;\n      clearTimeout(this.timeoutId);\n      this.timeoutId = setTimeout(() => {\n        this.dateRangeSelected.emit({\n          start: this.selectedStartDate!,\n          end: this.selectedEndDate!\n        });\n      }, 300);\n    }\n  }\n\n  setTimePickerDate(date?: Date) {\n    if (this.showTimePicker) {\n      if (this.isRange) {\n        this.persianDateTimePickerService.activeInput.asObservable()\n          .pipe(\n            takeUntil(this.destroyService)\n          )\n          .subscribe(active => {\n            if (active == 'start') {\n              this.timePicker!.updateFromDate(this.selectedStartDate);\n            } else {\n              this.timePicker!.updateFromDate(this.selectedEndDate);\n            }\n            this.timePicker!.scrollToTime();\n          });\n      } else {\n        this.timePicker!.updateFromDate(date || this.selectedDate!);\n        this.timePicker!.scrollToTime();\n      }\n    }\n  }\n\n  // ========== Date Selection Methods ==========\n  selectDate(date: Date): void {\n    if (this.isDateDisabled(date)) return;\n\n    if (this.showTimePicker) {\n      const existingDate = this.isRange ?\n        (this.activeInput === 'start' ? this.selectedStartDate : this.selectedEndDate) :\n        this.selectedDate!;\n\n      if (existingDate) {\n        date = this.applyTimeToDate(date, existingDate);\n      }\n    } else {\n      date = this.applyTimeToDate(date, new Date());\n    }\n\n    if (this.isRange) {\n      this.handleRangeSelection(date);\n    } else {\n      this.handleSingleSelection(date);\n    }\n    this.currentDate = date;\n    this.changeDetectorRef.markForCheck();\n  }\n\n  handleRangeSelection(date: Date): void {\n    const prevStartDate = this.selectedStartDate;\n    const prevEndDate = this.selectedEndDate;\n\n    if (!this.selectedStartDate ||\n      (this.selectedStartDate && this.selectedEndDate) ||\n      this.dateAdapter!.isBefore(date, this.selectedStartDate)) {\n      this.selectedStartDate = date;\n      this.selectedEndDate = null;\n      if (!this.showTimePicker) {\n        this.activeInput = 'end';\n        this.persianDateTimePickerService.activeInput.next('end');\n      }\n      this.dateRangeSelected.emit({\n        start: this.selectedStartDate,\n        end: undefined\n      });\n    } else {\n      if (this.showTimePicker) {\n        this.activeInput = 'end';\n        this.persianDateTimePickerService.activeInput.next('end');\n      }\n      this.selectedEndDate = date;\n      this.dateRangeSelected.emit({\n        start: this.selectedStartDate,\n        end: this.selectedEndDate\n      });\n    }\n\n    if (prevStartDate !== this.selectedStartDate || prevEndDate !== this.selectedEndDate)\n      this.changeDetectorRef.markForCheck();\n  }\n\n  handleSingleSelection(date: Date): void {\n    this.selectedDate! = date;\n    if (!this.showTimePicker)\n      this.dateSelected.emit(date);\n  }\n\n  selectMonth(month: number, closeAfterSelection: boolean = false): void {\n    if (this.isMonthDisabled(month)) return;\n\n    this.currentDate = this.dateAdapter!.createDate(this.dateAdapter!.getYear(this.currentDate!)!, month - 1, 1);\n\n    if (this.isRange && this.mode === 'month') {\n      this.handleRangeSelection(this.currentDate);\n      return;\n    }\n\n    if (this.mode === 'month' || closeAfterSelection) {\n      this.selectedDate! = this.currentDate;\n      this.dateSelected.emit(this.currentDate);\n      this.closeDatePicker();\n    } else {\n      this.viewMode = 'days';\n      this.generateCalendar();\n      this.changeDetectorRef.detectChanges();\n    }\n\n    this.scrollToSelectedItem(month);\n  }\n\n  selectYear(year: number, sideSelector = false): void {\n    if (this.isYearDisabled(year)) return;\n\n    this.currentDate = this.dateAdapter!.createDate(\n      year,\n      this.dateAdapter!.getMonth(this.currentDate!)!,\n      1\n    );\n\n    if (this.isRange && this.mode === 'year') {\n      this.handleRangeSelection(this.currentDate);\n      return;\n    }\n\n    if (this.mode === 'year') {\n      this.selectedDate! = this.currentDate;\n      this.dateSelected.emit(this.currentDate);\n      this.closeDatePicker();\n      return;\n    }\n\n    if (sideSelector) {\n      this.currentDate = this.dateAdapter!.setYear(this.selectedDate!, year);\n      this.scrollToSelectedItem(year);\n    } else {\n      this.viewMode = 'months';\n      this.changeDetectorRef.detectChanges();\n    }\n  }\n\n  // ========== Navigation Methods ==========\n  goPrev(): void {\n    if (this.viewMode === 'days') {\n      this.prevMonth();\n      this.changeDetectorRef.detectChanges();\n      return;\n    }\n\n    let id: number | null;\n    if (this.viewMode === 'months') {\n      this.currentDate = this.dateAdapter!.addYears(this.currentDate!, -1);\n      id = this.dateAdapter!.getYear(this.currentDate!);\n    }\n\n    if (this.viewMode === 'years') {\n      const yearStart = this.yearList[0] - 15;\n      this.yearList = Array.from({length: 15}, (_, i) => yearStart + i);\n      id = yearStart;\n    }\n\n    this.changeDetectorRef.detectChanges();\n    this.scrollToSelectedItem(id!);\n  }\n\n  goNext(): void {\n    if (this.viewMode === 'days') {\n      this.nextMonth();\n      this.changeDetectorRef.detectChanges();\n      return;\n    }\n\n    let id: number | null;\n    if (this.viewMode === 'months') {\n      this.currentDate = this.dateAdapter!.addYears(this.currentDate!, 1);\n      id = this.dateAdapter!.getYear(this.currentDate);\n    }\n\n    if (this.viewMode === 'years') {\n      const yearStart = this.yearList[14] + 1;\n      this.yearList = Array.from({length: 15}, (_, i) => yearStart + i);\n      id = yearStart;\n    }\n\n    this.changeDetectorRef.detectChanges();\n    this.scrollToSelectedItem(id!);\n  }\n\n  prevMonth(): void {\n    if (this.isPrevMonthDisabled()) return;\n    this.currentDate = this.dateAdapter!.addMonths(this.currentDate!, -1);\n    this.generateCalendar();\n    this.scrollToSelectedItem(this.dateAdapter!.getMonth(this.currentDate!)! + 1);\n  }\n\n  nextMonth(): void {\n    if (this.isNextMonthDisabled()) return;\n    this.currentDate = this.dateAdapter!.addMonths(this.currentDate!, 1);\n    this.generateCalendar();\n    this.scrollToSelectedItem(this.dateAdapter!.getMonth(this.currentDate!)! + 1);\n  }\n\n  // ========== State Check Methods ==========\n  isSelected(date: Date): boolean {\n    if (this.isRange) {\n      return this.isRangeStart(date)! || this.isRangeEnd(date)!;\n    }\n    return this.selectedDate! && this.dateAdapter!.isSameDay(date, this.selectedDate!);\n  }\n\n  isRangeStart(date: Date): boolean | null {\n    return this.isRange &&\n      this.selectedStartDate &&\n      this.dateAdapter!.isSameDay(date, this.selectedStartDate);\n  }\n\n  isRangeEnd(date: Date): boolean | null {\n    return this.isRange &&\n      this.selectedEndDate &&\n      this.dateAdapter!.isSameDay(date, this.selectedEndDate);\n  }\n\n  isInRange(date: Date): boolean | null {\n    return this.isRange &&\n      this.selectedStartDate &&\n      (this.selectedEndDate || this.tempEndDate) &&\n      this.dateAdapter!.isAfter(date, this.selectedStartDate) &&\n      this.dateAdapter!.isBefore(date, this.selectedEndDate! || this.tempEndDate!);\n  }\n\n  isToday(date: Date): boolean {\n    return this.dateAdapter!.isSameDay(date, this.dateAdapter!.today())! && this.showToday!;\n  }\n\n  isActiveMonth(month: number): boolean {\n    return this.dateAdapter!.getMonth(this.currentDate!) === month - 1;\n  }\n\n  isActiveYear(year: number): boolean {\n    return year === this.dateAdapter!.getYear(this.currentDate!);\n  }\n\n  isActiveYearRange(startYear: number): boolean {\n    return startYear === this.yearList[0];\n  }\n\n  // ========== Disabled State Methods ==========\n  isDateDisabled(date: Date): boolean {\n    if (\n      (this.minDate && this.dateAdapter!.isBefore(date, this.minDate)) ||\n      (this.maxDate && this.dateAdapter!.isAfter(date, this.maxDate))\n    ) {\n      return true;\n    }\n\n    // Check if date is in disabled dates array\n    const parsedDisabledDates = this.parseDisabledDates();\n    const isDisabledDate = parsedDisabledDates.some(disabledDate =>\n      this.dateAdapter!.isSameDay(date, disabledDate)\n    );\n\n    // Check custom filter function if provided\n    const isFilterDisabled = this.disabledDatesFilter ?\n      this.disabledDatesFilter(date) :\n      false;\n\n    return isDisabledDate || isFilterDisabled;\n  }\n\n  isMonthDisabled(month: number): boolean {\n    const year = this.dateAdapter!.getYear(this.currentDate!);\n    const startOfMonth = this.dateAdapter!.createDate(year!, month - 1, 1);\n\n    // Check if all days in month are disabled\n    const daysInMonth = this.dateAdapter!.getDaysInMonth(startOfMonth);\n    let allDaysDisabled = true;\n\n    for (let day = 1; day <= daysInMonth; day++) {\n      const date = this.dateAdapter!.createDate(year!, month - 1, day);\n      if (!this.isDateDisabled(date)) {\n        allDaysDisabled = false;\n        break;\n      }\n    }\n\n    return allDaysDisabled;\n  }\n\n  isYearDisabled(year: number): boolean {\n\n    if (this.minDate && this.dateAdapter!.getYear(this.minDate!)! > year) return true;\n    if (this.maxDate && this.dateAdapter!.getYear(this.maxDate!)! < year) return true;\n\n    // Check if all months in year are disabled\n    const firstOfMonth = this.dateAdapter!.createDate(year, 0, 1);\n    let day = 1;\n\n    for (\n      let date = firstOfMonth;\n      date.getFullYear() == firstOfMonth.getFullYear();\n      date = this.dateAdapter!.addDays(firstOfMonth, day++)\n    ) {\n      if (!this.isDateDisabled(date)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  isYearRangeDisabled(yearRange: YearRange): boolean {\n    if (this.minDate && this.dateAdapter!.getYear(this.minDate!)! > yearRange.end) return true;\n    if (this.maxDate && this.dateAdapter!.getYear(this.maxDate!)! < yearRange.start) return true;\n\n    // Check if all years in range are disabled\n    for (let year = yearRange.start; year <= yearRange.end; year++) {\n      if (!this.isYearDisabled(year)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  isPrevMonthDisabled(): boolean {\n    if (!this.minDate) return false;\n\n    const minYear = this.dateAdapter!.getYear(this.minDate!)!;\n\n    switch (this.viewMode) {\n      case 'days':\n        const prevMonth = this.dateAdapter!.getMonth(this.currentDate!)! - 1;\n        return this.dateAdapter!.getMonth(this.minDate!)! > prevMonth;\n      case 'months':\n        const prevYear = this.dateAdapter!.getYear(this.currentDate!)! - 1;\n        return minYear > prevYear;\n      case 'years':\n        return minYear > this.yearList[this.yearList.length - 1];\n      default:\n        return false;\n    }\n  }\n\n  isNextMonthDisabled(): boolean {\n    if (!this.maxDate) return false;\n\n    const maxYear = this.dateAdapter!.getYear(this.maxDate!)!;\n\n    switch (this.viewMode) {\n      case 'days':\n        const nextMonth = this.dateAdapter!.getMonth(this.currentDate!)! + 1;\n        return this.dateAdapter!.getMonth(this.maxDate!)! < nextMonth;\n      case 'months':\n        const nextYear = this.dateAdapter!.getYear(this.currentDate!)! + 1;\n        return maxYear < nextYear;\n      case 'years':\n        return maxYear < this.yearList[0];\n      default:\n        return false;\n    }\n  }\n\n  parseDisabledDates(): Date[] {\n    return this.disabledDates.map(date => {\n      if (date instanceof Date) {\n        return this.dateAdapter!.startOfDay(date);\n      }\n      const parsedDate = this.dateAdapter!.parse(date, this.dateFormat!);\n      return parsedDate || null;\n    }).filter(date => date !== null) as Date[];\n  }\n\n  // ========== Event Handlers ==========\n  onMouseEnter(date: Date, event: Event): void {\n    if (this.isRange && this.selectedStartDate && !this.selectedEndDate) {\n      this.tempEndDate = date;\n    }\n  }\n\n  @HostListener('click')\n  onClickInside(): void {\n    this.clickInside.emit(true);\n  }\n\n  // ========== Utility Methods ==========\n  getMonthName(month: number): string {\n    return this.dateAdapter!.getMonthNames('long')[month - 1];\n  }\n\n  getCurrentMonthName(): string {\n    return this.dateAdapter!.getMonthNames('long')[this.dateAdapter!.getMonth(this.currentDate!)!];\n  }\n\n  getCurrentYear(): number {\n    return this.dateAdapter!.getYear(this.currentDate!)!;\n  }\n\n  getWeekDays(): string[] {\n    return this.weekDays;\n  }\n\n  isSameMonth(date1: Date, date2: Date): boolean {\n    return this.dateAdapter!.isSameMonth(date1, date2);\n  }\n\n  closeDatePicker(): void {\n    this.closePicker.emit();\n  }\n\n  // ========== Year Management Methods ==========\n  generateYearRanges(length: number = 15): void {\n    const yearCount = 15;\n    const currentYear = this.dateAdapter!.getYear(this.dateAdapter!.today()!)!;\n    const startYear = currentYear - Math.floor(yearCount / 2) - (yearCount * Math.floor(length / 2));\n    this.yearRanges = [];\n\n    for (let i = 0; i < length; i++) {\n      const start = startYear + i * yearCount;\n      this.yearRanges.push({\n        start,\n        end: start + 14\n      });\n    }\n  }\n\n  generateYearList(length: number = 15): void {\n    const date = this.selectedDate! || this.selectedEndDate || this.selectedStartDate || new Date();\n    const currentYear = this.dateAdapter!.getYear(date!)!;\n\n    let start: number;\n    if (this.viewMode === 'years') {\n      const currentRange = this.yearRanges.find(range =>\n        range.start <= currentYear && range.end >= currentYear\n      );\n      start = currentRange ? currentRange.start : currentYear;\n    } else {\n      start = this.dateAdapter!.getYear(date!)! - Math.round(length / 2);\n    }\n\n    this.yearList = Array.from({length}, (_, i) => start + i);\n  }\n\n  selectYearRange(startYear: number): void {\n    this.yearList = Array.from({length: 15}, (_, i) => startYear + i);\n    this.viewMode = 'years';\n    this.changeDetectorRef.detectChanges();\n    this.scrollToSelectedItem(startYear);\n  }\n\n  // ========== Period Selection Methods ==========\n  isActivePeriod(period: CustomLabels): boolean {\n    const sameStart = this.dateAdapter!.isEqual(\n      this.dateAdapter!.startOfDay(period.value[0] as Date),\n      this.dateAdapter!.startOfDay(this.selectedStartDate!)\n    );\n\n    const sameEnd = this.dateAdapter!.isEqual(\n      this.dateAdapter!.startOfDay(period.value[1] as Date),\n      this.dateAdapter!.startOfDay(this.selectedEndDate!)\n    );\n\n\n    if (period.value === 'custom') {\n      let isActiveOther = this.periods.find(p => p.arrow);\n      return !isActiveOther;\n    }\n\n    period.arrow = sameStart && sameEnd;\n    return sameStart && sameEnd;\n  }\n\n  selectPeriod(period: CustomLabels): void {\n    this.selectedPeriod = period.value;\n\n    if (period.value !== 'custom') {\n      const [start, end] = period.value as Date[];\n      this.dateRangeSelected.emit({\n        start,\n        end\n      });\n    }\n  }\n\n  onTodayClick() {\n    this.currentDate = this.selectedDate! = new Date();\n    this.generateCalendar();\n    this.selectDate(this.currentDate);\n    this.setTimePickerDate(this.currentDate);\n    this.changeDetectorRef.detectChanges();\n  }\n\n  onOkClick() {\n    if (this.isRange) {\n      this.dateRangeSelected.emit({\n        start: this.selectedStartDate,\n        end: this.selectedEndDate\n      });\n      this.closeDatePicker();\n    } else {\n      if (!this.selectedDate) {\n        return;\n      }\n      this.dateSelected.emit(this.selectedDate!);\n      this.closeDatePicker();\n    }\n  }\n\n  // ========== Scroll Management ==========\n  scrollToSelectedItem(id: number | null = null): void {\n    if (!this.showSidebar) return;\n\n    if (this.timeoutId != null) {\n      clearTimeout(this.timeoutId);\n    }\n\n    const itemId = this.determineScrollItemId(id);\n    if (!itemId || !this.itemSelector) return;\n\n    this.timeoutId = setTimeout(() => {\n      const selectedElement = this.itemSelector!.nativeElement.querySelector(`#selector_${itemId}`);\n      if (selectedElement) {\n        selectedElement.scrollIntoView({\n          behavior: 'smooth',\n          block: 'center'\n        });\n      }\n    }, 0);\n  }\n\n  determineScrollItemId(id: number | null): number | null {\n    if (id != null) return id;\n    if (!this.getDate) return null;\n\n    switch (this.viewMode) {\n      case 'days':\n        return this.dateAdapter!.getMonth(this.getDate!)! + 1;\n      case 'months':\n        return this.dateAdapter!.getYear(this.getDate!)!;\n      case 'years':\n        const currentYear = this.dateAdapter!.getYear(this.getDate!)!;\n        const currentRange = this.yearRanges.find(range =>\n          range.start <= currentYear && range.end >= currentYear\n        );\n        return currentRange?.start || null;\n      default:\n        return null;\n    }\n  }\n\n  // ========== State Management ==========\n  handleChanges(changes: SimpleChanges): void {\n    if (changes['calendarType']) {\n      this.setDateAdapter();\n      this.weekDays = this.dateAdapter!.getDayOfWeekNames('short');\n    }\n\n    if (changes['selectedDate'] ||\n      changes['selectedStartDate'] ||\n      changes['selectedEndDate'] ||\n      changes['mode'] ||\n      changes['calendarType']) {\n      this.setInitialDate();\n      this.generateCalendar();\n    }\n\n    if (changes['minDate'] || changes['maxDate']) {\n      this.adjustCurrentDateToValidRange();\n    }\n  }\n\n  setInitialDate(): void {\n    this.currentDate = this.determineInitialDate();\n    this.setViewMode();\n    this.adjustCurrentDateToValidRange();\n  }\n\n  determineInitialDate(): Date {\n    if (this.isRange) {\n      if (this.activeInput === 'start') {\n        return this.selectedStartDate || this.dateAdapter!.today();\n      }\n      return this.selectedEndDate || this.selectedStartDate || this.dateAdapter!.today();\n    }\n\n    return this.selectedDate! || this.dateAdapter!.today();\n  }\n\n  adjustCurrentDateToValidRange(): void {\n    let adjustedDate = this.currentDate;\n\n    if (this.minDate && this.dateAdapter!.isBefore(adjustedDate!, this.minDate)) {\n      adjustedDate = this.minDate;\n    } else if (this.maxDate && this.dateAdapter!.isAfter(adjustedDate!, this.maxDate)) {\n      adjustedDate = this.maxDate;\n    }\n\n    if (!this.dateAdapter!.isSameDay(this.currentDate!, adjustedDate!)) {\n      this.currentDate = adjustedDate;\n      this.generateCalendar();\n    }\n  }\n\n  private applyTimeToDate(date: Date, timeDate: Date): Date {\n    let updatedDate = this.dateAdapter!.setHours(date, timeDate.getHours());\n    updatedDate = this.dateAdapter!.setMinutes(updatedDate, timeDate.getMinutes());\n    updatedDate = this.dateAdapter!.setSeconds(updatedDate, timeDate.getSeconds());\n    return updatedDate;\n  }\n}\n","<div [class.rtl]=\"rtl\" [class]=\"cssClass\" class=\"date-picker-popup\" tabindex=\"-1\">\n  <div class=\"date-picker-content\">\n    <ng-container *ngIf=\"showSidebar\">\n      <div *ngIf=\"isRange\" class=\"period-selector\">\n        <button\n          (click)=\"selectPeriod(period)\"\n          *ngFor=\"let period of periods\"\n          [class.active]=\"isActivePeriod(period)\"\n          tabindex=\"-1\">\n          {{ period.label }}\n          <span *ngIf=\"period.arrow\" class=\"arrow\">→</span>\n        </button>\n      </div>\n      <div #itemSelector *ngIf=\"!isRange\" class=\"side-selector\">\n        <ng-container *ngIf=\"viewMode == 'days'\">\n          <button\n            (click)=\"selectMonth(month, false)\"\n            *ngFor=\"let month of monthListNum\"\n            [class.active]=\"isActiveMonth(month)\"\n            [disabled]=\"isMonthDisabled(month)\"\n            [id]=\"'selector_'+month\"\n            tabindex=\"-1\">\n            {{ getMonthName(month) }}\n          </button>\n        </ng-container>\n        <ng-container *ngIf=\"viewMode == 'months'\">\n          <button\n            (click)=\"selectYear(year, true)\"\n            *ngFor=\"let year of yearList\"\n            [class.active]=\"isActiveYear(year)\"\n            [disabled]=\"isYearDisabled(year)\"\n            [id]=\"'selector_'+year\"\n            tabindex=\"-1\">\n            {{ year }}\n          </button>\n        </ng-container>\n        <ng-container *ngIf=\"viewMode == 'years'\">\n          <button\n            (click)=\"selectYearRange(yearRange.start)\"\n            *ngFor=\"let yearRange of yearRanges\"\n            [class.active]=\"isActiveYearRange(yearRange.start)\"\n            [disabled]=\"isYearRangeDisabled(yearRange)\"\n            [id]=\"'selector_'+yearRange.start\"\n            tabindex=\"-1\">\n            {{ yearRange.start }} - {{ yearRange.end }}\n          </button>\n        </ng-container>\n      </div>\n    </ng-container>\n    <div class=\"calendar\">\n      <div class=\"header\">\n        <button (click)=\"goPrev()\" [disabled]=\"isPrevMonthDisabled()\" class=\"persian-calendar-nav-left\"\n                tabindex=\"-1\"></button>\n        <span class=\"month-year\">\n          <span (click)=\"showMonthSelector()\" *ngIf=\"mode != 'year'\"\n                class=\"month-name\">{{ getCurrentMonthName() }}\n          </span>\n          <span (click)=\"showYearSelector()\" class=\"year\">{{ getCurrentYear() }}</span>\n        </span>\n        <button (click)=\"goNext()\" [disabled]=\"isNextMonthDisabled()\" class=\"persian-calendar-nav-right\"\n                tabindex=\"-1\"></button>\n      </div>\n      <div *ngIf=\"viewMode == 'days'\">\n        <div *ngIf=\"viewMode === 'days'\" class=\"weekdays\">\n          <span *ngFor=\"let day of getWeekDays()\">{{ day }}</span>\n        </div>\n        <div *ngIf=\"viewMode === 'days'\" class=\"days\">\n          <button\n            (click)=\"selectDate(day)\"\n            (mouseenter)=\"onMouseEnter(day,$event)\"\n            *ngFor=\"let day of days\"\n            [class.different-month]=\"!isSameMonth(day, currentDate!)\"\n            [class.disabled]=\"isDateDisabled(day)\"\n            [class.in-range]=\"isInRange(day)\"\n            [class.range-end]=\"isRangeEnd(day)\"\n            [class.range-start]=\"isRangeStart(day)\"\n            [class.selected]=\"isSelected(day)\"\n            [class.today]=\"isToday(day)\"\n            [disabled]=\"isDateDisabled(day)\"\n            tabindex=\"-1\">\n            <ng-container *ngIf=\"dayTemplate; else dayDefTemplate\">\n              <ng-container *ngTemplateOutlet=\"$any(dayTemplate); context: { $implicit: day }\"></ng-container>\n            </ng-container>\n            <ng-template #dayDefTemplate>\n              {{ dateAdapter!.getDate(day) }}\n            </ng-template>\n          </button>\n        </div>\n      </div>\n      <div *ngIf=\"viewMode === 'months'\" class=\"months\">\n        <button\n          (click)=\"selectMonth(month,false)\"\n          *ngFor=\"let month of monthListNum\"\n          [class.selected]=\"month === dateAdapter!.getMonth(currentDate!)! + 1\"\n          [disabled]=\"isMonthDisabled(month)\"\n          tabindex=\"-1\">\n          <ng-container *ngIf=\"monthTemplate; else monthDefTemplate\">\n            <ng-container *ngTemplateOutlet=\"$any(monthTemplate); context: { $implicit: month }\"></ng-container>\n          </ng-container>\n          <ng-template #monthDefTemplate>\n            {{ getMonthName(month) }}\n          </ng-template>\n        </button>\n      </div>\n      <div *ngIf=\"viewMode === 'years' || mode == 'year'\" class=\"years\">\n        <button\n          (click)=\"selectYear(year)\"\n          *ngFor=\"let year of yearList\"\n          [class.selected]=\"year === dateAdapter!.getYear(currentDate!)\"\n          [disabled]=\"isYearDisabled(year)\"\n          tabindex=\"-1\">\n          <ng-container *ngIf=\"yearTemplate; else yearDefTemplate\">\n            <ng-container *ngTemplateOutlet=\"$any(yearTemplate); context: { $implicit: year }\"></ng-container>\n          </ng-container>\n          <ng-template #yearDefTemplate>\n            {{ year }}\n          </ng-template>\n        </button>\n      </div>\n    </div>\n\n    <!-- Time Picker Integration -->\n    <div *ngIf=\"showTimePicker\" class=\"time-picker-section\">\n      <persian-time-picker\n        #timePicker\n        (timeChange)=\"onTimeChange($event)\"\n        [cssClass]=\"'embedded-time-picker'\"\n        [dateAdapter]=\"dateAdapter!\"\n        [disabledTimesFilter]=\"disabledTimesFilter\"\n        [displayFormat]=\"timeDisplayFormat\"\n        [inline]=\"true\"\n        [rtl]=\"rtl\"\n        [selectedDate]=\"selectedDate\"\n        [valueType]=\"'date'\"></persian-time-picker>\n    </div>\n  </div>\n  <div *ngIf=\"footerDescription || showTimePicker || showToday\" class=\"date-picker-footer\">\n    <div *ngIf=\"footerDescription\" [innerHtml]=\"footerDescription\" class=\"footer-description\">\n    </div>\n    <div class=\"footer-actions\">\n      <button (click)=\"onOkClick()\" *ngIf=\"showTimePicker\" class=\"footer-button ok\">{{ lang!.ok }}</button>\n      <button (click)=\"onTodayClick()\" *ngIf=\"showToday\" class=\"footer-button\">{{ lang!.today }}</button>\n    </div>\n  </div>\n</div>\n","import {Directive, Input, TemplateRef} from \"@angular/core\";\n\n@Directive({\n  selector: '[dtp-template]',\n  standalone: true,\n  host: {}\n})\nexport class CustomTemplate {\n\n  @Input() type: string | undefined;\n  @Input('dtp-template') name: string | undefined;\n\n  constructor(public templateRef: TemplateRef<any>) {\n  }\n\n  getType(): string {\n    return this.name!;\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Injector,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  runInInjectionContext,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormBuilder,\n  FormGroup,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  ReactiveFormsModule,\n  ValidationErrors\n} from '@angular/forms';\nimport {slideMotion} from '../utils/animation/slide';\nimport {DateAdapter, GregorianDateAdapter, JalaliDateAdapter} from '../date-adapter';\nimport {CustomLabels, DateRange, LanguageLocale, RangeInputLabels} from '../utils/models';\nimport {DatePickerPopupComponent} from '../date-picker-popup/date-picker-popup.component';\nimport {\n  CdkOverlayOrigin,\n  ConnectedOverlayPositionChange,\n  ConnectionPositionPair,\n  HorizontalConnectionPos,\n  OverlayModule,\n  VerticalConnectionPos\n} from '@angular/cdk/overlay';\nimport {\n  DATE_PICKER_POSITION_MAP,\n  DEFAULT_DATE_PICKER_POSITIONS,\n  NzConnectedOverlayDirective\n} from '../utils/overlay/overlay';\nimport {DOCUMENT, NgIf, NgTemplateOutlet} from '@angular/common';\nimport {DestroyService, PersianDateTimePickerService} from '../persian-date-time-picker.service';\nimport {fromEvent, takeUntil} from 'rxjs';\nimport {CalendarType, DatePickerMode, Placement, RangePartType, ValueFormat} from '../utils/types';\nimport {CustomTemplate} from '../utils/template.directive';\nimport {DateMaskDirective} from '../utils/input-mask.directive';\n\n@Component({\n  selector: 'persian-date-picker',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  templateUrl: './date-picker.component.html',\n  styleUrls: ['./date-picker.component.scss'],\n  host: {\n    \"[class.persian-date-picker]\": \"true\",\n    \"[class.persian-date-picker-rtl]\": \"rtl\"\n  },\n  imports: [\n    NgIf,\n    FormsModule,\n    ReactiveFormsModule,\n    OverlayModule,\n    NgTemplateOutlet,\n    NzConnectedOverlayDirective,\n    DateMaskDirective,\n    DatePickerPopupComponent\n  ],\n  providers: [\n    DestroyService,\n    PersianDateTimePickerService,\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DatePickerComponent),\n      multi: true\n    }\n  ],\n  animations: [slideMotion]\n})\nexport class DatePickerComponent implements ControlValueAccessor, OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n  // ========== Input Properties ==========\n  @Input() rtl = false;\n  @Input() mode: DatePickerMode = 'day';\n  @Input() isRange = false;\n  @Input() customLabels?: Array<CustomLabels>;\n  @Input() calendarType: CalendarType = 'gregorian';\n  @Input() lang?: LanguageLocale;\n  @Input() cssClass = '';\n  @Input() footerDescription = '';\n  @Input() rangeInputLabels?: RangeInputLabels;\n  @Input() inputLabel?: string;\n  @Input() placement: Placement = 'bottomRight';\n  @Input() disabled = false;\n  @Input() isInline = false;\n  @Input() showSidebar = true;\n  @Input() showToday = false;\n  @Input() valueFormat: ValueFormat = 'gregorian';\n  @Input() disableInputMask = false;\n  @Input() disabledDates: Array<Date | string> = [];\n  @Input() disabledDatesFilter?: (date: Date) => boolean;\n  @Input() disabledTimesFilter?: (date: Date) => boolean;\n  @Input() allowEmpty = false;\n  @Input() readOnly = false;\n  @Input() readOnlyInput = false;\n  // ========== Output Properties ==========\n  @Output() onFocus = new EventEmitter<any>();\n  @Output() onBlur = new EventEmitter<any>();\n  @Output() onChangeValue = new EventEmitter<any>();\n  @Output() onOpenChange = new EventEmitter<boolean>();\n  // ========== ViewChild/ViewChildren/ContentChildren Properties ==========\n  @ViewChild('datePickerInput') datePickerInput?: ElementRef;\n  @ViewChildren('rangePickerInput') rangePickerInputs?: QueryList<ElementRef<HTMLInputElement>>;\n  @ViewChild(DatePickerPopupComponent) datePickerPopup?: DatePickerPopupComponent;\n  @ContentChildren(CustomTemplate) templates!: QueryList<CustomTemplate>;\n  // ========== Class Properties ==========\n  origin?: CdkOverlayOrigin;\n  overlayPositions: ConnectionPositionPair[] = [...DEFAULT_DATE_PICKER_POSITIONS];\n  currentPositionX: HorizontalConnectionPos = 'start';\n  currentPositionY: VerticalConnectionPos = 'bottom';\n  document?: Document;\n  isOpen = false;\n  selectedDate: Date | null = null;\n  selectedStartDate: Date | null = null;\n  selectedEndDate: Date | null = null;\n  form?: FormGroup;\n  dateAdapter?: DateAdapter<Date>;\n  activeInput: 'start' | 'end' | '' | null = '';\n  hideStateHelper = false;\n  isInternalChange = false;\n  lastEmittedValue: any = null;\n  showTimePicker = false;\n  timeDisplayFormat = 'HH:mm';\n  documentClickListener?: (event: MouseEvent) => void;\n\n  constructor(public formBuilder: FormBuilder, public elementRef: ElementRef, public injector: Injector, public changeDetectorRef: ChangeDetectorRef, public persianDateTimePickerService: PersianDateTimePickerService, public destroyService: DestroyService, public ngZone: NgZone, public jalaliDateAdapter: JalaliDateAdapter, public gregorianDateAdapter: GregorianDateAdapter, @Inject(DOCUMENT) doc: Document) {\n    this.initializeComponent(doc);\n  }\n\n  private _minDate: any;\n\n  get minDate(): Date {\n    return this._minDate;\n  }\n\n  @Input() set minDate(date: Date | string | null) {\n    if (date) {\n      this._minDate = date;\n    }\n  };\n\n  private _maxDate: any;\n\n  get maxDate(): Date {\n    return this._maxDate;\n  }\n\n  @Input() set maxDate(date: Date | string | null) {\n    if (date) {\n      this._maxDate = date;\n    }\n  };\n\n  private _format = 'yyyy/MM/dd';\n\n  get format(): string {\n    return this._format;\n  }\n\n  @Input() set format(value: string) {\n    this._format = value;\n    this.showTimePicker = this.hasTimeComponent(value);\n    this.timeDisplayFormat = this.extractTimeFormat(value);\n  }\n\n  get valueAdapter() {\n    return this.valueFormat == 'jalali' ? this.jalaliDateAdapter : this.gregorianDateAdapter;\n  }\n\n  // ========== Lifecycle Hooks ==========\n  ngOnInit(): void {\n    this.initialize();\n    document.addEventListener('click', this.documentClickListener!);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    this.handleChanges(changes);\n  }\n\n  ngAfterViewInit(): void {\n    this.setupAfterViewInit();\n    this._minDate = this.valueAdapter?.parse(this._minDate, this.extractDateFormat(this.format));\n    this._maxDate = this.valueAdapter?.parse(this._maxDate, this.extractDateFormat(this.format));\n  }\n\n  ngOnDestroy(): void {\n    this.destroyService.next();\n    this.destroyService.complete();\n    document.removeEventListener('click', this.documentClickListener!);\n  }\n\n  // ========== Initialization Methods ==========\n  initializeComponent(doc: Document): void {\n    this.origin = new CdkOverlayOrigin(this.elementRef);\n    this.document = doc;\n    this.form = this.formBuilder.group({\n      dateInput: [''],\n      startDateInput: [''],\n      endDateInput: ['']\n    });\n    this.documentClickListener = this.handleDocumentClick.bind(this);\n    this.lang = this.calendarType === 'jalali' ? this.persianDateTimePickerService.persianLocale : this.persianDateTimePickerService.englishLocale;\n    this.persianDateTimePickerService.languageLocale = this.lang;\n  }\n\n  initialize(): void {\n    this.setDateAdapter();\n    this.setupFormControls();\n  }\n\n  setupAfterViewInit(): void {\n    this.setupActiveInputSubscription();\n    this.setupMouseDownEventHandler();\n  }\n\n  // ========== Date Adapter Methods ==========\n  setDateAdapter(): void {\n    this.dateAdapter = this.calendarType === 'jalali' ? this.jalaliDateAdapter : this.gregorianDateAdapter;\n  }\n\n  // ========== Form Control Methods ==========\n  setupFormControls(): void {\n    if (this.isRange) {\n      this.form!.get('startDateInput')?.valueChanges.pipe(takeUntil(this.destroyService)).subscribe(value => this.onInputChange(value, 'start'));\n      this.form!.get('endDateInput')?.valueChanges.pipe(takeUntil(this.destroyService)).subscribe(value => this.onInputChange(value, 'end'));\n    } else {\n      this.form!.get('dateInput')?.valueChanges.pipe(takeUntil(this.destroyService)).subscribe(value => this.onInputChange(value));\n    }\n  }\n\n  // ========== Event Handlers ==========\n  handleChanges(changes: SimpleChanges): void {\n    if (changes['calendarType']) {\n      this.setDateAdapter();\n      this.updateInputValue();\n      this.lang = this.calendarType === 'jalali' ? this.persianDateTimePickerService.persianLocale : this.persianDateTimePickerService.englishLocale;\n      this.persianDateTimePickerService.languageLocale = this.lang;\n    }\n    if (changes['minDate'] || changes['maxDate']) {\n      this._minDate = this.valueAdapter?.parse(this._minDate, this.extractDateFormat(this.format));\n      this._maxDate = this.valueAdapter?.parse(this._maxDate, this.extractDateFormat(this.format));\n      this.form!.updateValueAndValidity();\n    }\n    if (changes['mode'] || changes['isRange']) {\n      this.setupFormControls();\n    }\n    if (changes['placement']) {\n      this.setPlacement(this.placement);\n    }\n    if (changes['lang']) {\n      this.lang = changes['lang'].currentValue;\n      this.persianDateTimePickerService.languageLocale = this.lang;\n    }\n    if (changes['mode'] && !changes['format']) {\n      this.format = this.getFormatForMode();\n    }\n    if (changes['isRange'] && !this.isRange) {\n      runInInjectionContext(this.injector, () => {\n        this.origin = new CdkOverlayOrigin(this.elementRef);\n      });\n    }\n    if (changes['valueFormat']) {\n      this.emitValueIfChanged();\n    }\n  }\n\n  handleDocumentClick(event: MouseEvent): void {\n    if (!this.elementRef.nativeElement.contains(event.target)) {\n      if (this.isOpen) {\n        this.close();\n        this.onInputBlur(this.activeInput as any, event as any);\n      }\n      this.hideStateHelper = false;\n    }\n  }\n\n  // ========== Input Handling Methods ==========\n  onInputChange(value: string, inputType?: 'start' | 'end'): void {\n    if (!this.isInternalChange) {\n      if (this.isRange) {\n        this.handleRangeInputChange(value, inputType);\n      } else {\n        this.handleSingleInputChange(value);\n      }\n      this.updateDatePickerPopup();\n    }\n  }\n\n  handleRangeInputChange(value: string, inputType?: 'start' | 'end'): void {\n    const date = this.dateAdapter!.parse(value, this.format);\n    if (date) {\n      if (inputType === 'start') {\n        this.selectedStartDate = this.clampDate(date);\n      } else if (inputType === 'end') {\n        this.selectedEndDate = this.clampDate(date);\n      }\n      this.emitValueIfChanged();\n    }\n  }\n\n  handleSingleInputChange(value: string): void {\n    const date = this.dateAdapter!.parse(value, this.format);\n    if (date) {\n      this.selectedDate = this.clampDate(date);\n      this.emitValueIfChanged();\n    }\n  }\n\n  // ========== Value Emission Methods ==========\n  emitValueIfChanged(): void {\n    const newValue = this.prepareValueForEmission();\n    if (newValue && JSON.stringify(newValue) !== JSON.stringify(this.lastEmittedValue)) {\n      this.lastEmittedValue = newValue;\n      this.onChange(newValue);\n      this.onChangeValue.emit(newValue);\n    }\n  }\n\n  prepareValueForEmission(): any {\n    if (this.isRange) {\n      if (this.selectedStartDate && this.selectedEndDate) {\n        return {\n          start: this.convertDateToFormat(this.selectedStartDate, this.calendarType),\n          end: this.convertDateToFormat(this.selectedEndDate, this.calendarType)\n        };\n      }\n    } else if (this.selectedDate) {\n      return this.convertDateToFormat(this.selectedDate, this.calendarType);\n    }\n    return null;\n  }\n\n  // ========== Date Selection Methods ==========\n  onDateSelected(date: Date): void {\n    const clampedDate = this.clampDate(date);\n    if (this.isRange) {\n      this.handleRangeDateSelection(clampedDate!);\n    } else {\n      this.handleSingleDateSelection(clampedDate!);\n    }\n    this.hideStateHelper = true;\n    this.updateDatePickerPopup();\n    this.focus();\n  }\n\n  handleRangeDateSelection(date: Date): void {\n    if (!this.selectedStartDate || (this.selectedStartDate && this.selectedEndDate) ||\n      this.dateAdapter!.isBefore(date, this.selectedStartDate)) {\n      this.selectedStartDate = date;\n      this.selectedEndDate = null;\n      this.form!.get('startDateInput')?.setValue(this.dateAdapter!.format(date, this.format), {emitEvent: false});\n      this.form!.get('endDateInput')?.setValue('', {emitEvent: false});\n    } else {\n      this.selectedEndDate = date;\n      this.form!.get('endDateInput')?.setValue(this.dateAdapter!.format(date, this.format), {emitEvent: false});\n      this.emitValueIfChanged();\n      this.close();\n    }\n  }\n\n  handleSingleDateSelection(date: Date): void {\n    this.selectedDate = date;\n    const formattedDate = this.dateAdapter!.format(date, this.format);\n    this.form!.get('dateInput')?.setValue(formattedDate, {emitEvent: false});\n    this.emitValueIfChanged();\n    this.close();\n  }\n\n  // ========== Date Range Methods ==========\n  onDateRangeSelected(dateRange: DateRange): void {\n    this.hideStateHelper = true;\n\n    this.selectedStartDate = this.clampDate(<Date>dateRange.start);\n    const startFormatted = this.dateAdapter!.format(this.selectedStartDate!, this.format);\n    this.form!.get('startDateInput')?.setValue(startFormatted, {emitEvent: false});\n\n    if (dateRange.end) {\n      this.selectedEndDate = this.clampDate(<Date>dateRange.end);\n      const endFormatted = this.dateAdapter!.format(this.selectedEndDate!, this.format);\n      this.form!.get('endDateInput')?.setValue(endFormatted, {emitEvent: false});\n      this.emitValueIfChanged();\n      if (!this.hasTimeComponent(this.format)) this.close();\n      this.updateDatePickerPopup();\n      this.focus();\n    }\n  }\n\n  // ========== UI State Methods ==========\n  close(): void {\n    if (this.isInline) {\n      return;\n    }\n    if (this.isOpen) {\n      this.isOpen = false;\n      this.onOpenChange.emit(false);\n      this.changeDetectorRef.markForCheck();\n    }\n  }\n\n  open(): void {\n    if (this.isInline || this.isOpen || this.disabled || this.readOnly) {\n      return;\n    }\n    this.isOpen = true;\n    this.onOpenChange.emit(true);\n    this.focus();\n    this.changeDetectorRef.markForCheck();\n  }\n\n  focus(): void {\n    const activeInputElement = this.getInput(this.activeInput!);\n    if (this.document!.activeElement !== activeInputElement) {\n      activeInputElement?.focus();\n      const length = activeInputElement?.value?.length;\n      activeInputElement?.setSelectionRange(length!, length!);\n    }\n  }\n\n  // ========== UI Helper Methods ==========\n  getInput(partType?: RangePartType): HTMLInputElement | undefined {\n    if (this.isInline) {\n      return undefined;\n    }\n    return this.isRange\n      ? partType === 'start'\n        ? this.rangePickerInputs?.first.nativeElement\n        : this.rangePickerInputs?.last.nativeElement\n      : this.datePickerInput?.nativeElement;\n  }\n\n  getPlaceholder(inputType: string | null = null): string {\n    if (inputType === 'start') return this.lang!.startDate;\n    if (inputType === 'end') return this.lang!.endDate;\n\n    switch (this.mode) {\n      case 'month':\n        return this.lang!.selectMonth;\n      case 'year':\n        return this.lang!.selectYear;\n      default:\n        return this.lang!.selectDate;\n    }\n  }\n\n  // ========== Date Validation Methods ==========\n  clampDate(date: Date): Date | null {\n    if (!date) return date;\n\n    let adjustedDate: Date | null = this.dateAdapter!.clone(date);\n\n    if (this.minDate && this.dateAdapter!.isBefore(adjustedDate, this.minDate)) {\n      return this.minDate;\n    }\n    if (this.maxDate && this.dateAdapter!.isAfter(adjustedDate, this.maxDate)) {\n      return this.maxDate;\n    }\n\n    if (this.isDateDisabled(adjustedDate)) {\n      // Find the nearest enabled date\n      adjustedDate = this.findNearestValidDate(adjustedDate);\n    }\n\n    // Preserve the original time if format includes time\n    adjustedDate = this.clampDateTime(adjustedDate, date);\n\n    return adjustedDate;\n  }\n\n  clampDateTime(adjustedDate: Date | null, date: Date) {\n    if (this.hasTimeComponent(this.format)) {\n      adjustedDate!.setHours(date.getHours());\n      adjustedDate!.setMinutes(date.getMinutes());\n      adjustedDate!.setSeconds(date.getSeconds());\n      let {normalizedDate} = this.validateAndNormalizeTime(adjustedDate!);\n      adjustedDate = normalizedDate;\n    }\n    return adjustedDate;\n  }\n\n  findNearestValidDate(date: Date) {\n    let nextDate = this.dateAdapter!.addDays(date, 1);\n    let prevDate = this.dateAdapter!.addDays(date, -1);\n\n    while (this.isDateDisabled(nextDate) && this.isDateDisabled(prevDate)) {\n      nextDate = this.dateAdapter!.addDays(nextDate, 1);\n      prevDate = this.dateAdapter!.addDays(prevDate, -1);\n    }\n\n    // Return the first non-disabled date found\n    if (!this.isDateDisabled(nextDate)) {\n      date = nextDate;\n    } else if (!this.isDateDisabled(prevDate)) {\n      date = prevDate;\n    }\n    return date;\n  }\n\n  validateAndNormalizeTime(date: Date): { isValid: boolean; normalizedDate: Date | null } {\n    if (!this.dateAdapter) {\n      return {\n        isValid: false,\n        normalizedDate: null\n      };\n    }\n\n    let isValid = true;\n    let normalizedDate = this.dateAdapter!.clone(date);\n\n    if (this.isTimeDisabled(normalizedDate)) {\n      isValid = false;\n\n      // Get start and end of the current day\n      const startOfDay = this.dateAdapter!.clone(date);\n      startOfDay.setHours(0, 0, 0, 0);\n      const endOfDay = this.dateAdapter!.clone(date);\n      endOfDay.setHours(23, 59, 59, 999);\n\n      // Try to find nearest valid time within the same day\n      const currentMinutes = date.getHours() * 60 + date.getMinutes();\n      const maxForwardMinutes = (24 * 60) - currentMinutes;\n      let validTimeFound = false;\n\n      // Check forward\n      for (let i = 1; i <= maxForwardMinutes; i++) {\n        const nextTime = this.dateAdapter!.clone(date);\n        nextTime.setHours(Math.floor((currentMinutes + i) / 60), (currentMinutes + i) % 60, 0);\n        if (nextTime.getTime() <= endOfDay.getTime() && !this.isTimeDisabled(nextTime)) {\n          normalizedDate = nextTime;\n          validTimeFound = true;\n          break;\n        }\n      }\n\n      // Check backward\n      if (!validTimeFound)\n        for (let i = 1; i < currentMinutes; i++) {\n          const prevTime = this.dateAdapter!.clone(date);\n          prevTime.setHours(Math.floor((currentMinutes - i) / 60), (currentMinutes - i) % 60, 0);\n          if (prevTime.getTime() >= startOfDay.getTime() && !this.isTimeDisabled(prevTime)) {\n            normalizedDate = prevTime;\n            break;\n          }\n        }\n\n      // If no valid time found in the current day, set to start of day\n      if (this.isTimeDisabled(normalizedDate)) {\n        normalizedDate = startOfDay;\n      }\n    }\n\n    return {\n      isValid: isValid,\n      normalizedDate\n    };\n  }\n\n  parseDisabledDates(): Date[] {\n    return this.disabledDates.map(date => {\n      if (date instanceof Date) {\n        return this.dateAdapter!.startOfDay(date);\n      }\n      const parsedDate = this.dateAdapter!.parse(date, this.extractDateFormat(this.format));\n      return parsedDate || null;\n    }).filter(date => date !== null) as Date[];\n  }\n\n  isDateDisabled(date: Date): boolean {\n    if (!date) return false;\n\n    const dateToCheck = this.dateAdapter!.startOfDay(date);\n    // Check if date is in disabled dates array\n    const parsedDisabledDates = this.parseDisabledDates();\n    const isDisabledDate = parsedDisabledDates.some(disabledDate =>\n      this.dateAdapter!.isSameDay(dateToCheck, disabledDate)\n    );\n\n    // Check custom filter function if provided\n    const isFilterDisabled = this.disabledDatesFilter ?\n      this.disabledDatesFilter(dateToCheck) :\n      false;\n\n    return isDisabledDate || isFilterDisabled;\n  }\n\n  isTimeDisabled(date: Date) {\n    return this.disabledTimesFilter ? this.disabledTimesFilter(date) : false;\n  }\n\n  // ========== Date Validation Methods (continued) ==========\n  dateFormatValidator(control: AbstractControl): ValidationErrors | null {\n    const value = control.value;\n    if (!value) return null;\n\n    const format = this.getFormatForMode();\n    if (!this.dateAdapter!.isValidFormat(value, format)) {\n      return {invalidFormat: true};\n    }\n    return null;\n  }\n\n  getFormatForMode(): string {\n    switch (this.mode) {\n      case 'year':\n        return 'yyyy';\n      case 'month':\n        return 'yyyy/MM';\n      default:\n        return this.format;\n    }\n  }\n\n  // ========== Overlay Position Methods ==========\n  setPlacement(placement: Placement): void {\n    const position: ConnectionPositionPair = DATE_PICKER_POSITION_MAP[placement];\n    this.overlayPositions = [position, ...DEFAULT_DATE_PICKER_POSITIONS];\n    this.currentPositionX = position.originX;\n    this.currentPositionY = position.originY;\n  }\n\n  onPositionChange(position: ConnectedOverlayPositionChange): void {\n    if (this.currentPositionX !== position.connectionPair.originX ||\n      this.currentPositionY !== position.connectionPair.originY) {\n      this.currentPositionX = position.connectionPair.originX;\n      this.currentPositionY = position.connectionPair.originY;\n      this.changeDetectorRef.markForCheck();\n    }\n  }\n\n  // ========== Input Event Handlers ==========\n  onFocusout(event: FocusEvent): void {\n    event.preventDefault();\n    this.onTouch();\n    if (\n      !this.elementRef.nativeElement.contains(event.relatedTarget as Node) &&\n      !this.datePickerPopup?.elementRef.nativeElement.contains(event.relatedTarget as Node)\n    ) {\n      this.close();\n    }\n  }\n\n  onInputBlur(inputType: 'start' | 'end' | null, event: Event): void {\n    const inputValue = this.getInputValue(inputType);\n\n    if (typeof inputValue === 'string' && !this.isOpen) {\n      const correctedValue = this.validateAndCorrectInput(inputValue);\n      if (correctedValue !== inputValue) {\n        if (inputValue) {\n          this.handleCorrectedValue(inputType, correctedValue);\n        } else if (!this.allowEmpty) {\n          this.handleCorrectedValue(inputType, correctedValue);\n        } else {\n          this.selectedDate = null;\n          this.onChange(inputValue);\n        }\n      }\n      this.onBlur.emit({\n        input: inputType,\n        event,\n        value: correctedValue\n      });\n    }\n  }\n\n  getInputValue(inputType: 'start' | 'end' | null): string | undefined {\n    if (this.isRange) {\n      return inputType === 'start'\n        ? this.form!.get('startDateInput')?.value\n        : this.form!.get('endDateInput')?.value;\n    }\n    return this.form!.get('dateInput')?.value;\n  }\n\n  validateAndCorrectInput(value: string): string {\n    let date = this.dateAdapter!.parse(value, this.format);\n    if (!date) {\n      const today = this.dateAdapter!.today();\n      date = this.clampDate(today);\n    } else {\n      date = this.clampDate(date);\n    }\n    return this.dateAdapter!.format(date!, this.format);\n  }\n\n  handleCorrectedValue(inputType: 'start' | 'end' | null, correctedValue: string): void {\n    this.isInternalChange = true;\n    if (this.isRange) {\n      this.handleRangeCorrectedValue(inputType, correctedValue);\n    } else {\n      this.handleSingleCorrectedValue(correctedValue);\n    }\n    this.isInternalChange = false;\n  }\n\n  handleRangeCorrectedValue(inputType: 'start' | 'end' | null, correctedValue: string): void {\n    if (inputType === 'start') {\n      this.form!.get('startDateInput')?.setValue(correctedValue);\n      this.selectedStartDate = this.dateAdapter!.parse(correctedValue, this.format);\n    } else {\n      this.form!.get('endDateInput')?.setValue(correctedValue);\n      this.selectedEndDate = this.dateAdapter!.parse(correctedValue, this.format);\n    }\n\n    if (this.selectedStartDate && this.selectedEndDate) {\n      this.onChange({\n        start: this.dateAdapter!.format(this.selectedStartDate, this.format),\n        end: this.dateAdapter!.format(this.selectedEndDate, this.format)\n      });\n    }\n\n    if (this.datePickerPopup) {\n      this.datePickerPopup.selectedStartDate = this.selectedStartDate;\n      this.datePickerPopup.selectedEndDate = this.selectedEndDate;\n      this.datePickerPopup.generateCalendar();\n    }\n  }\n\n  handleSingleCorrectedValue(correctedValue: string): void {\n    this.form!.get('dateInput')?.setValue(correctedValue);\n    this.selectedDate = this.dateAdapter!.parse(correctedValue, this.format);\n    this.onChange(this.selectedDate);\n\n    if (this.datePickerPopup) {\n      this.datePickerPopup.selectedDate = this.selectedDate;\n    }\n  }\n\n  onFocusInput(inputType: 'start' | 'end' | null, event: Event): void {\n    if (this.hideStateHelper == false) {\n      this.toggleDatePicker(inputType, event);\n      this.hideStateHelper = true;\n    } else {\n      this.hideStateHelper = false;\n    }\n  }\n\n  toggleDatePicker(inputType: 'start' | 'end' | null, event: Event): void {\n    this.onFocus.emit({\n      input: inputType,\n      event\n    });\n    this.activeInput = inputType;\n    this.persianDateTimePickerService.activeInput.next(this.activeInput!);\n    this.open();\n    this.changeDetectorRef.detectChanges();\n  }\n\n  onInputKeydown(event: KeyboardEvent): void {\n    if ((!event.shiftKey && event.key === 'Tab') || (!event.shiftKey && event.key === 'Enter')) {\n      if (this.isRange) {\n        return;\n      }\n      this.close();\n    }\n  }\n\n  // ========== Update Methods ==========\n  updateInputValue(): void {\n    if (this.isRange) {\n      if (this.selectedStartDate) {\n        this.form!.get('startDateInput')?.setValue(\n          this.dateAdapter!.format(this.selectedStartDate, this.format)\n        );\n      }\n      if (this.selectedEndDate) {\n        this.form!.get('endDateInput')?.setValue(\n          this.dateAdapter!.format(this.selectedEndDate, this.format)\n        );\n      }\n    } else if (this.selectedDate) {\n      this.form!.get('dateInput')?.setValue(\n        this.dateAdapter!.format(this.selectedDate, this.format)\n      );\n    }\n  }\n\n  updateDatePickerPopup(): void {\n    if (this.datePickerPopup) {\n      if (this.isRange) {\n        this.datePickerPopup.selectedStartDate = this.selectedStartDate;\n        this.datePickerPopup.selectedEndDate = this.selectedEndDate;\n        if (this.showTimePicker) {\n          this.datePickerPopup!.timePicker!.updateFromDate(\n            this.activeInput == 'start' ?\n              this.selectedStartDate :\n              this.selectedEndDate\n          );\n          this.datePickerPopup!.timePicker!.scrollToTime();\n        }\n      } else {\n        this.datePickerPopup.selectedDate = this.selectedDate;\n        if (this.showTimePicker) {\n          this.datePickerPopup!.timePicker!.updateFromDate(this.selectedDate);\n          this.datePickerPopup!.timePicker!.scrollToTime();\n        }\n      }\n      this.datePickerPopup.generateCalendar();\n      this.changeDetectorRef.detectChanges();\n    }\n  }\n\n  convertDateToFormat(date: Date, fromType: CalendarType): any {\n    if (!date) return null;\n\n    switch (this.valueFormat) {\n      case 'date':\n        return date;\n      case 'jalali':\n        return this.jalaliDateAdapter.format(date, this.format);\n      case 'gregorian':\n        return this.gregorianDateAdapter.format(date, this.format);\n      default:\n        return this.dateAdapter!.format(date, this.format);\n    }\n  }\n\n  // ========== ControlValueAccessor Implementation ==========\n  onChange: any = () => {\n  };\n  onTouch: any = () => {\n  };\n\n  writeValue(value: any): void {\n    if (value) {\n      this.isInternalChange = true;\n\n      if (this.isRange && typeof value === 'object') {\n        const startDate = this.parseIncomingValue(value.start);\n        const endDate = this.parseIncomingValue(value.end);\n\n        if (startDate) {\n          this.selectedStartDate = startDate;\n          this.form!.get('startDateInput')?.setValue(\n            this.dateAdapter!.format(startDate, this.format),\n            {emitEvent: false}\n          );\n        }\n\n        if (endDate) {\n          this.selectedEndDate = endDate;\n          this.form!.get('endDateInput')?.setValue(\n            this.dateAdapter!.format(endDate, this.format),\n            {emitEvent: false}\n          );\n        }\n      } else {\n        const parsedDate = this.parseIncomingValue(value);\n        if (parsedDate) {\n          this.selectedDate = parsedDate;\n          this.form!.get('dateInput')?.setValue(\n            this.dateAdapter!.format(parsedDate, this.format),\n            {emitEvent: false}\n          );\n        }\n      }\n\n      this.lastEmittedValue = value;\n      this.isInternalChange = false;\n      this.updateDatePickerPopup();\n\n      this.changeDetectorRef.markForCheck();\n    } else {\n      this.resetValues();\n    }\n  }\n\n  resetValues(): void {\n    this.isInternalChange = true;\n    this.selectedDate = null;\n    this.selectedStartDate = null;\n    this.selectedEndDate = null;\n    this.form!.get('dateInput')?.setValue('', {emitEvent: false});\n    this.form!.get('startDateInput')?.setValue('', {emitEvent: false});\n    this.form!.get('endDateInput')?.setValue('', {emitEvent: false});\n    this.lastEmittedValue = null;\n    this.isInternalChange = false;\n    this.updateDatePickerPopup();\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouch = fn;\n  }\n\n  // ========== Setup Methods ==========\n  setupActiveInputSubscription(): void {\n    this.persianDateTimePickerService.activeInput\n      .pipe(takeUntil(this.destroyService))\n      .subscribe((active: any) => {\n        this.activeInput = active;\n        if (active) {\n          if (!this.isOpen)\n            this.origin = new CdkOverlayOrigin(this.activeInput == 'start' ? this.rangePickerInputs?.first : this.rangePickerInputs!.last);\n          this.focus();\n        }\n      });\n  }\n\n  setupMouseDownEventHandler(): void {\n    this.ngZone.runOutsideAngular(() =>\n      fromEvent(this.elementRef.nativeElement, 'mousedown')\n        .pipe(takeUntil(this.destroyService))\n        .subscribe((event: any) => {\n          if ((event.target as HTMLInputElement).tagName.toLowerCase() !== 'input') {\n            event.preventDefault();\n          }\n        })\n    );\n  }\n\n  parseDateValue(value: any): Date | null {\n    if (value instanceof Date) {\n      return value;\n    }\n    return this.dateAdapter!.parse(value, this.format);\n  }\n\n  parseValueFromFormat(value: string | Date, targetAdapter: DateAdapter<Date>): Date | null {\n    if (!value) return null;\n    if (value instanceof Date) return value;\n\n    return targetAdapter.parse(value, this.format);\n  }\n\n  parseIncomingValue(value: any): Date | null {\n    if (!value) return null;\n    if (value instanceof Date) return value;\n    let parsedDate: Date | null = null;\n\n    // try with value adapter\n    parsedDate = this.valueAdapter.parse(value, this.format);\n    if (parsedDate) return parsedDate;\n\n    return null;\n  }\n\n  // ========== Time Methods ==========\n  hasTimeComponent(format: string): boolean {\n    return /[Hh]|[m]|[s]|[a]/g.test(format);\n  }\n\n  extractTimeFormat(format: string): string {\n    const timeMatch = format.match(/[Hh]{1,2}:mm(?::ss)?(?:\\s*[aA])?/);\n    return timeMatch ? timeMatch[0] : 'HH:mm';\n  }\n\n  extractDateFormat(format: string): string {\n    const dateFormatMatch = format.match(/[yMd\\/.-]+/);\n    return dateFormatMatch ? dateFormatMatch[0] : '';\n  }\n}\n","<div [class.date-picker-rtl]=\"rtl\" [class.disabled]=\"disabled\" [formGroup]=\"form!\"\n     class=\"date-picker-wrapper\">\n  <ng-container *ngIf=\"!isInline; else inlineMode\">\n    <ng-container *ngIf=\"!isRange; else rangeMode\">\n      <div [class.rtl] class=\"input-container\">\n        <label *ngIf=\"inputLabel\" for=\"dateInput\">{{ inputLabel }}</label>\n        <input\n          #datePickerInput\n          (blur)=\"onInputBlur(null,$event)\"\n          (click)=\"toggleDatePicker(null,$event)\"\n          (focus)=\"onFocusInput(null,$event)\"\n          (keydown)=\"onInputKeydown($event)\"\n          [attr.disabled]=\"disabled? 'disabled':null\"\n          [class.focus]=\"isOpen\"\n          [disableInputMask]=\"disableInputMask\"\n          [dtp-dateMask]=\"format\"\n          [placeholder]=\"getPlaceholder()\"\n          [readonly]=\"readOnly || readOnlyInput\"\n          formControlName=\"dateInput\"\n          type=\"text\">\n        <ng-container *ngTemplateOutlet=\"icon\"></ng-container>\n      </div>\n    </ng-container>\n    <ng-template #rangeMode>\n      <div *ngIf=\"rangeInputLabels\" class=\"range-input-labels\">\n        <div class=\"start-label\">\n          <label for=\"startDateInput\">{{ rangeInputLabels!.start }}</label>\n        </div>\n        <div class=\"end-label\">\n          <label for=\"endDateInput\">{{ rangeInputLabels!.end }}</label>\n        </div>\n      </div>\n      <div class=\"range-input-container\">\n        <input\n          #rangePickerInput\n          (blur)=\"onInputBlur('start',$event)\"\n          (click)=\"toggleDatePicker('start',$event)\"\n          (focus)=\"onFocusInput('start',$event)\"\n          (focusout)=\"onFocusout($event)\"\n          (keydown)=\"onInputKeydown($event)\"\n          [attr.disabled]=\"disabled? 'disabled':null\"\n          [class.focus]=\"isOpen && activeInput === 'start'\"\n          [disableInputMask]=\"disableInputMask\"\n          [dtp-dateMask]=\"format\"\n          [placeholder]=\"getPlaceholder('start')\"\n          [readonly]=\"readOnly || readOnlyInput\"\n          formControlName=\"startDateInput\"\n          type=\"text\">\n        <span class=\"range-separator\">→</span>\n        <input\n          #rangePickerInput\n          (blur)=\"onInputBlur('end',$event)\"\n          (click)=\"toggleDatePicker('end',$event)\"\n          (focus)=\"onFocusInput('end',$event)\"\n          (focusout)=\"onFocusout($event)\"\n          (keydown)=\"onInputKeydown($event)\"\n          [attr.disabled]=\"disabled? 'disabled':null\"\n          [class.focus]=\"isOpen && activeInput === 'end'\"\n          [disableInputMask]=\"disableInputMask\"\n          [dtp-dateMask]=\"format\"\n          [placeholder]=\"getPlaceholder('end')\"\n          [readonly]=\"readOnly || readOnlyInput\"\n          formControlName=\"endDateInput\"\n          type=\"text\">\n        <ng-container *ngTemplateOutlet=\"icon\"></ng-container>\n      </div>\n    </ng-template>\n    <ng-template #icon>\n      <button (click)=\"toggleDatePicker(null, $event)\" class=\"calendar-button\" tabindex=\"-1\">\n        <svg fill=\"#999\" height=\"18px\" viewBox=\"0 0 24 24\" width=\"18px\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path clip-rule=\"evenodd\"\n                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\"\n                fill=\"#999\"\n                fill-rule=\"evenodd\"/>\n        </svg>\n      </button>\n    </ng-template>\n  </ng-container>\n  <ng-template #inlineMode>\n    <div\n      [class.persian-date-picker-dropdown-placement-bottomLeft]=\"currentPositionY === 'bottom' && currentPositionX === 'start'\"\n      [class.persian-date-picker-dropdown-placement-bottomRight]=\"currentPositionY === 'bottom' && currentPositionX === 'end'\"\n      [class.persian-date-picker-dropdown-placement-topLeft]=\"currentPositionY === 'top' && currentPositionX === 'start'\"\n      [class.persian-date-picker-dropdown-placement-topRight]=\"currentPositionY === 'top' && currentPositionX === 'end'\"\n      [class.persian-date-picker-dropdown-range]=\"isRange\"\n      [class.persian-date-picker-dropdown-rtl]=\"rtl\"\n      class=\"dp-dropdown\">\n      <persian-date-picker-popup\n        (clickInside)=\"focus()\"\n        (closePicker)=\"close()\"\n        (dateRangeSelected)=\"onDateRangeSelected($event)\"\n        (dateSelected)=\"onDateSelected($event)\"\n        [@slideMotion]=\"'enter'\"\n        [activeInput]=\"activeInput\"\n        [attr.disabled]=\"disabled? 'disabled':null\"\n        [calendarType]=\"calendarType\"\n        [cssClass]=\"cssClass\"\n        [customLabels]=\"customLabels\"\n        [dateFormat]=\"extractDateFormat(format)\"\n        [disabledDatesFilter]=\"disabledDatesFilter\"\n        [disabledDates]=\"disabledDates\"\n        [disabledTimesFilter]=\"disabledTimesFilter\"\n        [footerDescription]=\"footerDescription\"\n        [isRange]=\"isRange\"\n        [maxDate]=\"maxDate\"\n        [minDate]=\"minDate\"\n        [mode]=\"mode\"\n        [rtl]=\"rtl\"\n        [selectedDate]=\"selectedDate\"\n        [selectedEndDate]=\"selectedEndDate\"\n        [selectedStartDate]=\"selectedStartDate\"\n        [showSidebar]=\"showSidebar\"\n        [showTimePicker]=\"showTimePicker\"\n        [showToday]=\"showToday\"\n        [templates]=\"templates\"\n        [timeDisplayFormat]=\"timeDisplayFormat\"\n        tabindex=\"-1\"></persian-date-picker-popup>\n    </div>\n  </ng-template>\n  <ng-template\n    (detach)=\"close()\"\n    (positionChange)=\"onPositionChange($event)\"\n    [cdkConnectedOverlayHasBackdrop]=\"false\"\n    [cdkConnectedOverlayOpen]=\"isOpen\"\n    [cdkConnectedOverlayOrigin]=\"origin!\"\n    [cdkConnectedOverlayPositions]=\"overlayPositions\"\n    [cdkConnectedOverlayTransformOriginOn]=\"'.persian-date-time-picker-wrapper'\"\n    cdkConnectedOverlay\n    nzConnectedOverlay>\n    <div\n      (click)=\"$event.stopPropagation()\"\n      [@slideMotion]=\"'enter'\"\n      [class.disabled]=\"disabled\"\n      class=\"persian-date-time-picker-wrapper\"\n      style=\"position: relative;\">\n      <ng-container *ngTemplateOutlet=\"inlineMode\"></ng-container>\n    </div>\n  </ng-template>\n</div>\n","import {NgModule} from '@angular/core';\nimport {DatePickerComponent} from './date-picker/date-picker.component';\nimport {TimePickerComponent} from './time-picker/time-picker.component';\nimport {DatePickerPopupComponent} from './date-picker-popup/date-picker-popup.component';\nimport {DateMaskDirective} from './utils/input-mask.directive';\nimport {NzConnectedOverlayDirective} from './../public-api';\nimport {CustomTemplate} from './utils/template.directive';\n\n@NgModule({\n  imports: [\n    DatePickerComponent,\n    TimePickerComponent,\n    DatePickerPopupComponent,\n    DateMaskDirective,\n    NzConnectedOverlayDirective,\n    CustomTemplate\n  ],\n  exports: [\n    DatePickerComponent,\n    TimePickerComponent,\n    DatePickerPopupComponent,\n    DateMaskDirective,\n    NzConnectedOverlayDirective,\n    CustomTemplate\n  ]\n})\nexport class PersianDateTimePickerModule {\n}\n","/*\n * Public API Surface of persian-date-time-picker\n */\n\n// Modules\nexport * from './lib/persian-date-time-picker.module';\n\n// Services\nexport * from './lib/persian-date-time-picker.service';\n\n// Components\nexport * from './lib/date-picker/date-picker.component';\nexport * from './lib/date-picker-popup/date-picker-popup.component';\nexport * from './lib/time-picker/time-picker.component';\n\n// Models and Utils\nexport * from './lib/utils/models';\nexport * from './lib/utils/overlay/overlay';\nexport * from './lib/utils/animation/slide';\nexport * from './lib/utils/input-mask.directive';\nexport * from './lib/utils/template.directive';\n\n// Adapters\nexport * from './lib/date-adapter';\n\n// Types\nexport * from './lib/utils/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PersianLocale","i1.EnglishLocale","i2.DestroyService","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","i2.PersianDateTimePickerService","i3.JalaliDateAdapter","i3.GregorianDateAdapter","i4","takeUntil","i1.PersianDateTimePickerService","i2.JalaliDateAdapter","i2.GregorianDateAdapter","i1.DestroyService"],"mappings":"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"}