UNPKG

lucy-calendar

Version:

LucyCalendar is a powerful and flexible date picker library for Angular applications, specifically designed for Ethiopian dates. It provides a user-friendly interface for selecting dates and supports various customization options to fit your needs.

1 lines 63.7 kB
{"version":3,"file":"lucy-calendar.mjs","sources":["../../../projects/lucy-calendar/src/lib/date-convertor.ts","../../../projects/lucy-calendar/src/lib/custom-dropdown/custom-dropdown.component.ts","../../../projects/lucy-calendar/src/lib/custom-dropdown/custom-dropdown.component.html","../../../projects/lucy-calendar/src/lib/lucy-calendar.component.ts","../../../projects/lucy-calendar/src/lib/lucy-calendar.component.html","../../../projects/lucy-calendar/src/lib/lucy-calendar.directive.ts","../../../projects/lucy-calendar/src/lib/lucy-date/lucy-date.component.ts","../../../projects/lucy-calendar/src/lib/lucy-date/lucy-date.component.html","../../../projects/lucy-calendar/src/public-api.ts","../../../projects/lucy-calendar/src/lucy-calendar.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\n\r\nenum EpochOffset {\r\n    AmeteAlem = -285019,\r\n    AmeteMihret = 1723856,\r\n    Coptic = 1824665,\r\n    Gregorian = 1721426,\r\n    Unset = -1\r\n}\r\nconst nMonths: number = 12;\r\n\r\nconst monthDays: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\nconst JD_EPOCH_OFFSET_AMETE_ALEM: number = -285019; // ዓ/ዓ\r\nconst JD_EPOCH_OFFSET_AMETE_MIHRET: number = 1723856; // ዓ/ም\r\nconst JD_EPOCH_OFFSET_COPTIC: number = 1824665;\r\nconst JD_EPOCH_OFFSET_GREGORIAN: number = 1721426;\r\n\r\nexport const monthNames: string[] = [\r\n    \"መስከረም\", \"ጥቅምት\", \"ህዳር\", \"ታህሳስ\", \"ጥር\", \"የካቲት\",\r\n    \"መጋቢት\", \"ሚይዚያ\", \"ግንቦት\", \"ሰኔ\", \"ሐምሌ\", \"ነሐሴ\", \"ጳጉሜ\"\r\n];\r\nexport const dayNames: string[] = [\"እሁድ\", \"ሰኞ\", \"ማክሰኞ\", \"ረቡዕ\", \"ሐሙስ\", \"ዓርብ\", \"ቅዳሜ\"];\r\n\r\n\r\nexport function toGregorian(param: { year: number, month: number, day: number }): Date {\r\n    const { year, month, day } = param;\r\n\r\n    const era: number = year <= 0 ? JD_EPOCH_OFFSET_AMETE_ALEM : JD_EPOCH_OFFSET_AMETE_MIHRET;\r\n\r\n    let jdn = EthiopicToJdn({ year: param.year, month: param.month, day: param.day, era });\r\n    const date = JdnToGregorian(jdn);\r\n    return new Date(Date.UTC(date[0], date[1] - 1, date[2]));\r\n}\r\n\r\nexport function toEthiopian(gcDate: Date): { year: number, month: number, day: number } {\r\n    const jdn = GregorianToJdn(gcDate.getFullYear(), gcDate.getMonth() + 1, gcDate.getDate());\r\n    return JdnToEthiopic(jdn, GuessEraFromJDN(jdn));\r\n}\r\n\r\nfunction Quotient(i: number, j: number): number {\r\n    return Math.floor(i / j);\r\n}\r\n\r\nfunction Mod(i: number, j: number): number {\r\n    return i - j * Quotient(i, j);\r\n}\r\nfunction GuessEraFromJDN(jdn: number): number {\r\n    return (jdn >= (JD_EPOCH_OFFSET_AMETE_MIHRET + 365)) ? JD_EPOCH_OFFSET_AMETE_MIHRET : JD_EPOCH_OFFSET_AMETE_ALEM;\r\n}\r\nexport function isEthiopianLeapYear(year: number) {\r\n    return year % 4 === 3; // Ethiopian leap years are multiples of 4 with a remainder of 3\r\n}\r\nfunction IsGregorianLeap(year: number): boolean {\r\n    return (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0));\r\n}\r\n\r\nfunction GregorianToJdn(year: number, month: number, day: number): number {\r\n    const s = Quotient(year, 4) - Quotient(year - 1, 4) - Quotient(year, 100) + Quotient(year - 1, 100) + Quotient(year, 400) - Quotient(year - 1, 400);\r\n\r\n    const t = Quotient(14 - month, 12);\r\n\r\n    const n = 31 * t * (month - 1) + (1 - t) * (59 + s + 30 * (month - 3) + Quotient((3 * month - 7), 5)) + day - 1;\r\n\r\n    const j = JD_EPOCH_OFFSET_GREGORIAN + 365 * (year - 1) + Quotient(year - 1, 4) - Quotient(year - 1, 100) + Quotient(year - 1, 400) + n;\r\n\r\n    return j;\r\n}\r\n\r\nfunction JdnToEthiopic(jdn: number, era?: number): { year: number, month: number, day: number } {\r\n    era = era ?? GuessEraFromJDN(jdn);\r\n    const r = Mod((jdn - era), 1461);\r\n    const n = Mod(r, 365) + 365 * Quotient(r, 1460);\r\n\r\n    const year = 4 * Quotient((jdn - era), 1461) + Quotient(r, 365) - Quotient(r, 1460);;\r\n    const month = Quotient(n, 30) + 1;\r\n    const day = Mod(n, 30) + 1;\r\n    return { year, month: Number(month), day: Number(day) };\r\n}\r\n\r\nfunction EthCopticToJdn(year: number, month: number, day: number, era: number): number {\r\n    return (era + 365) + 365 * (year - 1) + Quotient(year, 4) + 30 * month + day - 31;\r\n}\r\n\r\nfunction JdnToGregorian(j: number): number[] {\r\n    const r2000: number = Mod((j - JD_EPOCH_OFFSET_GREGORIAN), 730485);\r\n    const r400: number = Mod((j - JD_EPOCH_OFFSET_GREGORIAN), 146097);\r\n    const r100: number = Mod(r400, 36524);\r\n    const r4: number = Mod(r100, 1461);\r\n\r\n    let n: number = Mod(r4, 365) + 365 * Quotient(r4, 1460);\r\n    const s: number = Quotient(r4, 1095);\r\n\r\n    const aprime: number = 400 * Quotient((j - JD_EPOCH_OFFSET_GREGORIAN), 146097) + 100 * Quotient(r400, 36524) + 4 * Quotient(r100, 1461) + Quotient(r4, 365) - Quotient(r4, 1460) - Quotient(r2000, 730484);;\r\n    const year: number = aprime + 1;\r\n    const t: number = Quotient((364 + s - n), 306);\r\n    const month: number = t * (Quotient(n, 31) + 1) + (1 - t) * (Quotient((5 * (n - s) + 13), 153) + 1);\r\n\r\n    n += 1 - Quotient(r2000, 730484);\r\n    let day = n;\r\n\r\n    if ((r100 == 0) && (n == 0) && (r400 != 0)) {\r\n        let month = 12;\r\n        day = 31;\r\n    }\r\n    else {\r\n        monthDays[2] = (IsGregorianLeap(year)) ? 29 : 28;\r\n        for (let i = 1; i <= nMonths; ++i) {\r\n            if (n <= monthDays[i]) {\r\n                day = n;\r\n                break;\r\n            }\r\n            n -= monthDays[i];\r\n        }\r\n    }\r\n\r\n    return [year, month, day];\r\n}\r\n\r\nfunction EthiopicToJdn(param: { year: number, month: number, day: number, era: number }): number {\r\n    return EthCopticToJdn(param.year, param.month, param.day, param.era);\r\n}\r\n\r\nfunction CopticToGregorian(year: number, month: number, day: number): number[] {\r\n    let jdn = EthiopicToJdn({ year, month, day, era: JD_EPOCH_OFFSET_COPTIC });\r\n    return JdnToGregorian(jdn);\r\n}\r\n\r\nfunction GregorianToCoptic(year: number, month: number, day: number): { year: number, month: number, day: number } {\r\n    let jdn = GregorianToJdn(year, month, day);\r\n    return JdnToEthiopic(jdn, JD_EPOCH_OFFSET_COPTIC);\r\n}\r\n\r\nfunction CopticToJdn(year: number, month: number, day: number): number {\r\n    return EthCopticToJdn(year, month, day, JD_EPOCH_OFFSET_COPTIC);\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, output, Output, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'lucy-dropdown',\r\n  standalone: true,\r\n  templateUrl: './custom-dropdown.component.html',\r\n  imports: [CommonModule],\r\n  styleUrls: ['./custom-dropdown.component.css']\r\n})\r\nexport class DropdownComponent<T> implements OnInit {\r\n  @Input() options: T[] = []; // List of dropdown options\r\n  @Input() selected!: T; // Selected value\r\n  @Output() selectedChange = new EventEmitter<T>(); // Event when selection changes\r\n\r\n  /**\r\n   * Optional function to convert an option to a displayable string.\r\n   */\r\n  @Input() displayFn?: (option: T) => string;\r\n\r\n  dropdownOpen: boolean = false;\r\n\r\n  @ViewChild('dropdownContainer') dropdownContainer!: ElementRef;\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.selected && this.options.length > 0) {\r\n      this.selected = this.options[0]; // Default to first option if no selection\r\n    }\r\n    // Scroll to the selected option if it exists\r\n    setTimeout(() => {\r\n      const selectedIndex = this.options.indexOf(this.selected);\r\n      if (selectedIndex >= 0) {\r\n        const dropdownElement = this.dropdownContainer.nativeElement.querySelector('ul');\r\n        const selectedElement = dropdownElement?.children[selectedIndex];\r\n        if (selectedElement) {\r\n          selectedElement.scrollIntoView({ block: 'nearest' });\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  toggleDropdown(event: Event): void {\r\n    console.log('Dropdown clicked. Selected item:', this.selected);\r\n    this.dropdownOpen = !this.dropdownOpen;\r\n\r\n    if (this.dropdownOpen && this.selected) {\r\n      setTimeout(() => {\r\n        const selectedIndex = this.options.indexOf(this.selected);\r\n        if (selectedIndex >= 0) {\r\n          const dropdownElement = this.dropdownContainer.nativeElement.querySelector('ul');\r\n          const selectedElement = dropdownElement.children[selectedIndex];\r\n          if (selectedElement) {\r\n            selectedElement.scrollIntoView({ block: 'nearest' });\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  onOptionClick(option: T, index: number): void {\r\n    this.selected = option;\r\n    this.selectedChange.emit(option);\r\n    this.dropdownOpen = false;\r\n  }\r\n\r\n  // Close dropdown when clicking outside\r\n  @HostListener('document:click', ['$event'])\r\n  onClickOutside(event: Event) {\r\n    if (this.dropdownContainer && !this.dropdownContainer.nativeElement.contains(event.target)) {\r\n      this.dropdownOpen = false;\r\n    }\r\n  }\r\n}\r\n","<div class=\"relative inline-block w-full\" #dropdownContainer>\r\n    <!-- Dropdown Button -->\r\n    <button (click)=\"toggleDropdown($event)\"\r\n        class=\"w-full px-3 py-2 text-center text-gray-700 bg-white border border-gray-300 rounded-lg shadow-sm focus:outline-none\">\r\n        {{ displayFn ? displayFn(selected) : selected }}\r\n        <svg class=\"w-4 h-4 inline-block ml-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\r\n        </svg>\r\n    </button>\r\n\r\n    <!-- Dropdown List -->\r\n    <div *ngIf=\"dropdownOpen\"\r\n        class=\"absolute z-10 mt-1 w-full bg-white border border-gray-300 rounded-lg shadow-lg max-h-60 overflow-y-auto custom-scrollbar\">\r\n        <ul>\r\n            <li *ngFor=\"let option of options; let i = index\" (click)=\"onOptionClick(option, i)\"\r\n                class=\"px-4 py-2 cursor-pointer hover:bg-gray-100\" [ngClass]=\"{'bg-blue-100': option === selected}\">\r\n                {{ displayFn ? displayFn(option) : option }}\r\n            </li>\r\n        </ul>\r\n    </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnInit, HostListener, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { isEthiopianLeapYear, toEthiopian, toGregorian } from './date-convertor';\r\nimport { DropdownComponent } from './custom-dropdown/custom-dropdown.component';\r\nimport { LucyDateComponent } from './lucy-date/lucy-date.component';\r\n\r\n@Component({\r\n  selector: 'lucy-calendar',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule, DropdownComponent],\r\n  templateUrl: './lucy-calendar.component.html',\r\n  styleUrl: './lucy-calendar.component.css'\r\n})\r\nexport class LucyCalendarComponent implements OnInit, OnChanges {\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    // if (changes['value'] && !changes['value'].firstChange) {\r\n    //   this.value = changes['value'].currentValue;\r\n    //   this.parseDate();\r\n    //   // this.valueChange.emit(this.value);\r\n    //   this.dateValue = toGregorian({ year: this.selectedYear, month: this.selectedMonth, day: this.selectedDay });\r\n    //   this.emitChange();\r\n    // }\r\n    // else \r\n    if (changes['dateValue'] && !changes['dateValue'].firstChange && changes['dateValue'].currentValue?.getTime() !== this.dateValue?.getTime()) {\r\n      this.dateValue = changes['dateValue'].currentValue;\r\n      if (this.dateValue === null)\r\n        return;\r\n      const et = toEthiopian(this.dateValue);\r\n      this.selectedYear = et.year;\r\n      this.selectedMonth = et.month;\r\n      this.selectedDay = et.day;\r\n      // this.dateValueChange.emit(this.dateValue);\r\n      // this.value = this.formatDate();\r\n      this.emitChange();\r\n    }\r\n  }\r\n  ngOnInit(): void {\r\n    if (this.dateValue) {\r\n      this.selectedYear = this.dateValue.getFullYear();\r\n      this.selectedMonth = this.dateValue.getMonth();\r\n      this.selectedDay = this.dateValue.getDate();\r\n    }\r\n    // if (this.value) {\r\n    //   this.parseDate();\r\n    // }\r\n    // if (this.selectedDay !== 0) {\r\n    //   this.selectDate(this.selectedDay);\r\n    // } else {\r\n    //   this.value = '';\r\n    // }\r\n    this.filteredMonths = this.availableMonths.filter(m => !this.isMonthOptionDisabled(m));\r\n    this.filteredYears = this.availableYears.filter(y => !this.isYearOptionDisabled(y));\r\n  }\r\n  @Input() label: string = 'Select Date';\r\n  // @Input() value: string | null = null; // New input for value\r\n  @Output() valueChange: EventEmitter<string | null> = new EventEmitter<string | null>(); // Output event emitter for value\r\n  @Input() dateValue: Date | null = null;\r\n  @Output() dateValueChange: EventEmitter<Date | null> = new EventEmitter<Date | null>(); // Output event emitter for grValue\r\n\r\n  @Input() placeholder: string | null = null;\r\n  @Input() min: Date | null = null;\r\n  @Input() max: Date | null = null;\r\n  @Input() dateFormat: string = 'DD/MM/YYYY'; // New input for date format\r\n  // @Input() disabled: boolean = false; // New input for disabled state\r\n  // @Input() readonly: boolean = true; // New input for readonly state\r\n\r\n  @Input() calendarVisible: boolean = false;\r\n\r\n  currentDate: Date = new Date();\r\n  selectedYear: number = toEthiopian(this.currentDate).year; // Start with 2015 (Ethiopian year 2008)\r\n  selectedMonth: number = 1; // Start with Meskerem (January in Ethiopian calendar)\r\n  selectedDay: number = 0;\r\n  monthNames: string[] = [\r\n    \"መስከረም\", \"ጥቅምት\", \"ህዳር\", \"ታህሳስ\", \"ጥር\", \"የካቲት\",\r\n    \"መጋቢት\", \"ሚይዚያ\", \"ግንቦት\", \"ሰኔ\", \"ሐምሌ\", \"ነሐሴ\", \"ጳጉሜ\"\r\n  ];\r\n  dayNames: string[] = [\"እሁድ\", \"ሰኞ\", \"ማክሰኞ\", \"ረቡዕ\", \"ሐሙስ\", \"ዓርብ\", \"ቅዳሜ\"];\r\n\r\n  availableYears: number[] = Array.from({ length: 101 }, (_, i) => this.currentDate.getFullYear() - 50 + i);\r\n  filteredYears = this.availableYears.filter(y => !this.isYearOptionDisabled(y));\r\n  availableMonths = Array.from({ length: 13 }, (_, i) => i + 1);\r\n  filteredMonths = this.availableMonths.filter(month => !this.isMonthOptionDisabled(month));\r\n\r\n\r\n  refreshMonthOptions() {\r\n    this.filteredMonths = this.availableMonths.filter(month => !this.isMonthOptionDisabled(month));\r\n  };\r\n  refreshYearOptions(): void {\r\n    this.filteredYears = this.availableYears.filter(y => !this.isYearOptionDisabled(y));\r\n  }\r\n\r\n  emitChange() {\r\n    this.dateValueChange.emit(this.dateValue); // Emit the new date value\r\n    // this.valueChange.emit(this.value);\r\n  }\r\n\r\n  toggleCalendar() {\r\n    this.calendarVisible = !this.calendarVisible;\r\n    if (this.dateValue) {\r\n      const et = toEthiopian(this.dateValue);\r\n      this.selectedYear = et.year;\r\n      this.selectedMonth = et.month;\r\n      this.selectedDay = et.day;\r\n    }\r\n    // if (this.value) {\r\n    //   this.parseDate();\r\n    // }\r\n  }\r\n\r\n  monthDisplay = (month: number): string => this.monthNames[month - 1]; /* Month numbers are 1-indexed so adjust for array (0-indexed)*/\r\n\r\n  selectMonthYear(month: number, year: number) {\r\n    this.selectedMonth = month;\r\n    this.selectedYear = year;\r\n    this.dateValue = toGregorian({ year, month, day: 1 });\r\n    // this.value = this.formatDate();\r\n    this.emitChange();\r\n  }\r\n\r\n  onMonthChanges(month: number) {\r\n    this.selectMonthYear(month, this.selectedYear);\r\n    this.refreshYearOptions();\r\n  }\r\n\r\n  onYearChanges(year: number) {\r\n    this.selectMonthYear(this.selectedMonth, year);\r\n    this.refreshMonthOptions();\r\n  }\r\n\r\n  prevMonth() {\r\n    this.selectedMonth = (this.selectedMonth - 1 + 13) % 13 || 13;\r\n    this.dateValue = toGregorian({ year: this.selectedYear, month: this.selectedMonth, day: 1 });\r\n    // this.value = this.formatDate();\r\n    this.emitChange()\r\n  }\r\n\r\n  nextMonth() {\r\n    this.selectedMonth = (this.selectedMonth + 1) % 13 || 13;\r\n    this.dateValue = toGregorian({ year: this.selectedYear, month: this.selectedMonth, day: 1 });\r\n    // this.value = this.formatDate();\r\n    this.emitChange();\r\n  }\r\n\r\n  getLeadingEmptyDays(): any[] {\r\n    const firstDay = toGregorian({ year: this.selectedYear, month: this.selectedMonth, day: 1 });\r\n    return Array(firstDay.getDay()).fill(null);\r\n  }\r\n\r\n  get daysInMonth(): number[] {\r\n    const daysInEthiopianMonth = this.selectedMonth === 13 ? (isEthiopianLeapYear(this.selectedYear) ? 6 : 5) : 30; // Pagumē has 6 days in a leap year\r\n    return Array.from({ length: daysInEthiopianMonth }, (_, i) => i + 1);\r\n  }\r\n\r\n  selectDate(day: number) {\r\n    this.selectedDay = day;\r\n    this.dateValue = toGregorian({ year: this.selectedYear, month: this.selectedMonth, day: day });\r\n    // this.value = this.formatDate();\r\n    this.calendarVisible = false;\r\n    this.emitChange();\r\n  }\r\n\r\n  clearDate() {\r\n    // if (this.disabled) return; // Prevent clearing date if disabled\r\n    this.dateValue = null;\r\n    // this.value = null;\r\n    this.selectedDay = 0;\r\n    this.calendarVisible = false;\r\n    this.emitChange();\r\n  }\r\n\r\n  selectToday() {\r\n    const today = toEthiopian(new Date());\r\n    this.selectedYear = today.year;\r\n    this.selectedMonth = today.month;\r\n    this.selectedDay = today.day;\r\n    this.selectDate(today.day);\r\n  }\r\n\r\n  isDayDisabled(day: number): boolean {\r\n    if (this.max === null)\r\n      return false;\r\n    const date = toGregorian({ year: this.selectedYear, month: this.selectedMonth, day: day });\r\n    return date > this.max;\r\n  }\r\n\r\n  isNextMonthDisabled(): boolean {\r\n    if (this.max === null)\r\n      return false;\r\n    const nextMonthDate = toGregorian({ year: this.selectedYear, month: this.selectedMonth + 1, day: 1 });\r\n    return nextMonthDate > this.max;\r\n  }\r\n\r\n  isPrevMonthDisabled(): boolean {\r\n    if (this.min === null)\r\n      return false;\r\n    const prevMonthDate = toGregorian({ year: this.selectedYear, month: this.selectedMonth - 1, day: 1 });\r\n    return prevMonthDate < this.min;\r\n  }\r\n\r\n  isMonthOptionDisabled(monthIndex: number): boolean {\r\n    const monthDate = toGregorian({ year: this.selectedYear, month: monthIndex, day: 1 });\r\n    return (this.max !== null && (monthDate > this.max || (this.selectedYear === this.max.getFullYear() && monthIndex > this.max.getMonth())))\r\n      || (this.min !== null && (monthDate < this.min || (this.selectedYear === this.min.getFullYear() && monthIndex < this.min.getMonth())));\r\n  }\r\n\r\n  isYearOptionDisabled(year: number): boolean {\r\n    const yearDate = toGregorian({ year: year, month: 1, day: 1 });\r\n    return (this.max !== null && yearDate > this.max) || (this.min !== null && yearDate < this.min);\r\n  }\r\n\r\n  formatDate(): string {\r\n    const formattedMonth = this.padZero(this.selectedMonth);\r\n    const formattedDay = this.padZero(this.selectedDay);\r\n    return this.dateFormat\r\n      .replace(/YYYY/i, this.selectedYear.toString())\r\n      .replace(/MM/i, formattedMonth)\r\n      .replace(/dd/i, formattedDay);\r\n  }\r\n\r\n  // parseDate() {\r\n  //   if (!this.value || !this.dateFormat) return;\r\n\r\n  //   // Detect separator from dateFormat (supports /, -, ., and others)\r\n  //   const separator = this.dateFormat.match(/[^a-zA-Z0-9]/)?.[0] || '/';\r\n  //   const dateParts = this.value.split(separator).map(Number);\r\n  //   const formatParts = this.dateFormat.split(separator);\r\n\r\n  //   if (dateParts.length !== formatParts.length) {\r\n  //     console.error('Date format mismatch');\r\n  //     return;\r\n  //   }\r\n\r\n  //   formatParts.forEach((part, index) => {\r\n  //     const partType = part.toUpperCase()[0];\r\n  //     switch (partType) {\r\n  //       case 'Y':\r\n  //         this.selectedYear = dateParts[index];\r\n  //         break;\r\n  //       case 'M':\r\n  //         this.selectedMonth = dateParts[index];\r\n  //         break;\r\n  //       case 'D':\r\n  //         this.selectedDay = dateParts[index];\r\n  //         break;\r\n  //     }\r\n  //   });\r\n  // }\r\n\r\n  padZero(num: number): string {\r\n    return num.toString().padStart(2, '0');\r\n  }\r\n\r\n  @HostListener('document:click', ['$event'])\r\n  onClickOutside(event: MouseEvent) {\r\n    const target = event.target as HTMLElement;\r\n    if (!target.closest('.relative') && !target.closest('lucy-calendar') && !target.classList.contains('calendar-icon') && !target.classList.contains('lucy-host')) {\r\n      this.calendarVisible = false;\r\n    }\r\n  }\r\n}\r\n","<div class=\"relative\">\r\n  <!-- <lucy-date [label]=\"label\" [placeholder]=\"placeholder\" [dateFormat]=\"dateFormat\" [selectedDay]=\"selectedDay\"\r\n    [readonly]=\"readonly\" [disabled]=\"disabled\" [dateFormat]=\"dateFormat\"></lucy-date> -->\r\n  <!-- Calendar Dropdown -->\r\n  <div id=\"calendar\" class=\"absolute mt-1 w-auto bg-white border border-gray-300 rounded-lg shadow-lg p-4 z-10\"\r\n    [ngClass]=\"{'hidden': !calendarVisible}\">\r\n    <div class=\"flex justify-between items-center mb-2\">\r\n      <button (click)=\"prevMonth()\"\r\n        class=\"text-gray-500 hover:text-gray-700 disabled:text-gray-300 disabled:cursor-not-allowed\"\r\n        [disabled]=\"isPrevMonthDisabled()\">\r\n        <svg class=\"h-6 w-6 text-gray-500 hover:text-gray-700 disabled:text-gray-300\" fill=\"none\" stroke=\"currentColor\"\r\n          viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\"></path>\r\n        </svg>\r\n      </button>\r\n      <!-- (click)=\"toggleMonthYearSelection()\" -->\r\n      <button class=\"font-medium text-gray-700\">\r\n        {{ monthNames[selectedMonth - 1] }} {{ selectedYear }}\r\n      </button>\r\n      <button (click)=\"nextMonth()\"\r\n        class=\"text-gray-500 hover:text-gray-700 disabled:text-gray-300 disabled:cursor-not-allowed\"\r\n        [disabled]=\"isNextMonthDisabled()\">\r\n        <svg class=\"h-6 w-6 text-gray-500 hover:text-gray-700 disabled:text-gray-300\" fill=\"none\" stroke=\"currentColor\"\r\n          viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\r\n        </svg>\r\n      </button>\r\n    </div>\r\n\r\n    <div class=\"grid grid-cols-2 gap-2\">\r\n      <lucy-dropdown [options]=\"filteredMonths\" [selected]=\"selectedMonth\" (selectedChange)=\"onMonthChanges($event)\"\r\n        [displayFn]=\"monthDisplay\">\r\n      </lucy-dropdown>\r\n      <lucy-dropdown [options]=\"filteredYears\" [selected]=\"selectedYear\"\r\n        (selectedChange)=\"onYearChanges($event)\"></lucy-dropdown>\r\n    </div>\r\n\r\n    <!-- Days of the Month -->\r\n    <div class=\"grid grid-cols-7 gap-1 text-center text-sm\">\r\n      <div *ngFor=\"let dayName of dayNames\" class=\"text-gray-500\">{{ dayName }}</div>\r\n    </div>\r\n\r\n    <div class=\"grid grid-cols-7 gap-1 text-center text-sm pt-2\">\r\n      <div *ngFor=\"let empty of getLeadingEmptyDays()\"></div>\r\n      <button *ngFor=\"let day of daysInMonth\" class=\"py-1 rounded hover:bg-indigo-100 focus:bg-indigo-200\"\r\n        [ngClass]=\"{'bg-blue-200': day === selectedDay, 'bg-gray-200 text-gray-400 cursor-not-allowed': isDayDisabled(day)}\"\r\n        [disabled]=\"isDayDisabled(day)\" (click)=\"selectDate(day)\">\r\n        {{ day }}\r\n      </button>\r\n    </div>\r\n\r\n    <div class=\"flex justify-between mt-2\">\r\n      <button (click)=\"clearDate()\"\r\n        class=\"px-2 py-1 border border-red-500 text-red-500 rounded text-xs hover:bg-red-100\">Clear</button>\r\n      <button (click)=\"selectToday()\"\r\n        class=\"px-2 py-1 border border-blue-500 text-blue-500 rounded text-xs hover:bg-blue-100\">Today</button>\r\n    </div>\r\n  </div>\r\n</div>","import {\r\n    Directive, ElementRef, HostListener, Input, ViewContainerRef,\r\n    ComponentRef, Output, EventEmitter, Renderer2, OnInit, OnDestroy,\r\n    SimpleChanges,\r\n    OnChanges\r\n} from '@angular/core';\r\nimport { LucyCalendarComponent } from './lucy-calendar.component';\r\n\r\n@Directive({\r\n    selector: '[lucyCalendar]',\r\n    standalone: true,\r\n})\r\nexport class LucyCalendarDirective implements OnInit, OnChanges, OnDestroy {\r\n    @Input() label: string = 'Select Date';\r\n    @Input() value: string | null = null;\r\n    @Output() valueChange: EventEmitter<string | null> = new EventEmitter<string | null>();\r\n    @Input() dateValue: Date | null = null;\r\n    @Output() dateValueChange: EventEmitter<Date | null> = new EventEmitter<Date | null>();\r\n    @Input() placeholder: string | null = null;\r\n    @Input() min: Date | null = null;\r\n    @Input() max: Date | null = null;\r\n    @Input() dateFormat: string = 'dd/mm/yyyy';\r\n    // @Input() disabled: boolean = false;\r\n    // @Input() readonly: boolean = true;\r\n\r\n    private componentRef: ComponentRef<LucyCalendarComponent>;\r\n    private isCalendarOpen = false; // Track open/closed state\r\n    private calendarElement: HTMLElement | null = null;\r\n\r\n    constructor(\r\n        private el: ElementRef,\r\n        private viewContainerRef: ViewContainerRef,\r\n        private renderer: Renderer2\r\n    ) {\r\n        this.componentRef = this.viewContainerRef.createComponent(LucyCalendarComponent);\r\n        this.calendarElement = this.componentRef.location.nativeElement;\r\n    }\r\n\r\n    // Open/close on input click\r\n    @HostListener('click') onClick() {\r\n        this.componentRef.instance.toggleCalendar();\r\n    }\r\n\r\n    // Close when clicking outside the input or calendar\r\n    @HostListener('document:click', ['$event'])\r\n    onDocumentClick(event: MouseEvent) {\r\n        const target = event.target as HTMLElement;\r\n        const clickedInsideInput = this.el.nativeElement.contains(target);\r\n        const clickedInsideCalendar = this.calendarElement?.contains(target);\r\n\r\n        if (!clickedInsideInput && !clickedInsideCalendar && this.isCalendarOpen) {\r\n            this.closeCalendar();\r\n        }\r\n    }\r\n\r\n    ngOnInit() {\r\n\r\n        // Create the button element\r\n        const button = this.renderer.createElement('button');\r\n        // this.renderer.setAttribute(button, 'type', 'button');\r\n        if (this.el.nativeElement.disabled) {\r\n            this.renderer.setAttribute(button, 'disabled', 'true');\r\n        }\r\n        if (this.el.nativeElement.readonly) {\r\n            this.renderer.setAttribute(button, 'readonly', 'true');\r\n        }\r\n        this.renderer.setAttribute(button, 'class', 'absolute inset-y-0 right-0 flex items-center pr-3 cursor-pointer disabled:cursor-not-allowed disabled:text-gray-300');\r\n\r\n        // Create the SVG element\r\n        const svg = this.renderer.createElement('svg', 'svg');\r\n        this.renderer.setAttribute(svg, 'xmlns', 'http://www.w3.org/2000/svg');\r\n        this.renderer.setAttribute(svg, 'fill', 'none');\r\n        this.renderer.setAttribute(svg, 'viewBox', '0 0 24 24');\r\n        this.renderer.setAttribute(svg, 'stroke-width', '1.5');\r\n        this.renderer.setAttribute(svg, 'stroke', 'currentColor');\r\n        this.renderer.setAttribute(svg, 'class', 'h-6 w-6 text-gray-500 hover:text-gray-700 calendar-icon');\r\n        // set the SVG attributes\r\n        const path = this.renderer.createElement('path', 'svg');\r\n        this.renderer.setAttribute(path, 'class', 'calendar-icon');\r\n        this.renderer.setAttribute(path, 'stroke-linecap', 'round');\r\n        this.renderer.setAttribute(path, 'stroke-linejoin', 'round');\r\n        this.renderer.setAttribute(path, 'd', 'M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z');\r\n\r\n        // Append the path to the SVG\r\n        this.renderer.appendChild(svg, path);\r\n        // Append the SVG to the button\r\n        this.renderer.appendChild(button, svg);\r\n\r\n\r\n        // append class to the host element\r\n        this.renderer.addClass(this.el.nativeElement, 'block');\r\n        this.renderer.addClass(this.el.nativeElement, 'lucy-host');\r\n\r\n        const parentDiv = this.renderer.createElement('div');\r\n        this.renderer.addClass(parentDiv, 'relative');\r\n        const computedWidth = window.getComputedStyle(this.el.nativeElement).width;\r\n        this.renderer.setStyle(parentDiv, 'width', computedWidth);\r\n\r\n        const parent = this.renderer.parentNode(this.el.nativeElement);\r\n        this.renderer.insertBefore(parent, parentDiv, this.el.nativeElement);\r\n        this.renderer.appendChild(parentDiv, this.el.nativeElement);\r\n        this.renderer.appendChild(parentDiv, button);\r\n\r\n        this.renderer.appendChild(this.el.nativeElement.parentElement, this.calendarElement);\r\n\r\n        this.renderer.listen(button, 'click', () => {\r\n            this.componentRef!.instance.toggleCalendar();\r\n            this.renderer.appendChild(this.el.nativeElement.parentElement, this.calendarElement);\r\n        });\r\n        this.openCalendar();\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['dateValue'] && !changes['dateValue'].firstChange) {\r\n            this.componentRef.instance.ngOnChanges(changes);\r\n        }\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.closeCalendar();\r\n    }\r\n\r\n    private openCalendar() {\r\n\r\n        // Pass inputs to the calendar component\r\n        // this.componentRef.instance.label = this.label;\r\n        // this.componentRef.instance.value = this.value;\r\n        this.componentRef.instance.dateValue = this.dateValue;\r\n        this.componentRef.instance.placeholder = this.placeholder;\r\n        this.componentRef.instance.min = this.min;\r\n        this.componentRef.instance.max = this.max;\r\n        this.componentRef.instance.dateFormat = this.dateFormat;\r\n\r\n        // Handle outputs\r\n        // this.componentRef.instance.valueChange.subscribe((value: string | null) => {\r\n        //     this.renderer.setProperty(this.el.nativeElement, 'value', value ?? this.placeholder ?? this.dateFormat);\r\n        //     if (value === this.value) return\r\n        //     this.valueChange.emit(value);\r\n        // });\r\n        this.componentRef.instance.dateValueChange.subscribe((date: Date | null) => {\r\n            // setTimeout(() => {\r\n            //     this.value = this.componentRef.instance.formatDate();\r\n            // });\r\n            const et = date !== null ? this.componentRef.instance.formatDate() : null;\r\n            this.renderer.setProperty(this.el.nativeElement, 'value', et ?? this.placeholder ?? this.dateFormat);\r\n            // this.valueChange.emit(this.value);\r\n            this.dateValueChange.emit(date);\r\n            this.valueChange.emit(et);\r\n        });\r\n        this.componentRef.instance.emitChange();\r\n\r\n        // Append to the input's parent (not document.body)\r\n        this.renderer.appendChild(this.el.nativeElement.parentElement, this.calendarElement);\r\n        // }\r\n    }\r\n\r\n    private closeCalendar() {\r\n        this.componentRef.destroy();\r\n    }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { LucyCalendarComponent } from '../lucy-calendar.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { toEthiopian } from '../date-convertor';\r\n\r\n@Component({\r\n    selector: 'lucy-date',\r\n    standalone: true,\r\n    imports: [CommonModule, LucyCalendarComponent, FormsModule],\r\n    templateUrl: './lucy-date.component.html',\r\n    styleUrls: ['./lucy-date.component.css']\r\n})\r\nexport class LucyDateComponent implements OnChanges {\r\n    @Input() label: string = '';\r\n    @Input() placeholder: string | null = null;\r\n    @Input() dateFormat: string = 'DD/MM/YYYY';\r\n    @Input() selectedDay: number = 0;\r\n    @Input() selectedYear: number = 0;\r\n    @Input() selectedMonth: number = 0;\r\n    @Input() readonly: boolean = true;\r\n    @Input() disabled: boolean = false;\r\n    @Input() value: string | null = null;\r\n    @Output() valueChange: EventEmitter<string | null> = new EventEmitter<string | null>();\r\n    @Input() dateValue: Date | null = new Date();\r\n    @Output() dateValueChange: EventEmitter<Date | null> = new EventEmitter<Date | null>();\r\n\r\n    showCalendar: boolean = false;\r\n    toggleCalendar() {\r\n        this.showCalendar = !this.showCalendar;\r\n    }\r\n\r\n    dateChange(date: Date | null) {\r\n        if (date === null) return;\r\n        const et = toEthiopian(date);\r\n        this.valueChange.emit(this.formatDate(et.year, et.month, et.day));\r\n        this.dateValueChange.emit(date);\r\n    }\r\n\r\n    formatDate(year: number, month: number, day: number): string {\r\n        const formattedMonth = this.padZero(month);\r\n        const formattedDay = this.padZero(day);\r\n        return this.dateFormat\r\n            .replace(/YYYY/i, year.toString())\r\n            .replace(/MM/i, formattedMonth)\r\n            .replace(/dd/i, formattedDay);\r\n    }\r\n    padZero(num: number): string {\r\n        return num.toString().padStart(2, '0');\r\n    }\r\n\r\n\r\n    ngOnChanges(changes: SimpleChanges) {\r\n        if (changes['dateValue']) {\r\n            this.dateValue = changes['dateValue'].currentValue;\r\n        }\r\n    }\r\n\r\n\r\n}\r\n","<div class=\"relative\">\r\n    <label for=\"date-picker\" class=\"block text-sm font-medium text-gray-700 mb-1\">\r\n        {{ label }}\r\n    </label>\r\n\r\n    <div class=\"relative\">\r\n        <input type=\"text\" id=\"date-picker\" [attr.readonly]=\"readonly ? true : null\"\r\n            class=\"block w-full px-4 py-2 text-gray-700 bg-white border disabled:cursor-not-allowed disabled:text-red-700 border-gray-300 rounded-lg shadow-sm cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-800\"\r\n            [placeholder]=\"placeholder ?? dateFormat\" [(value)]=\"value\" [attr.disabled]=\"disabled ? true : null\"\r\n            (click)=\"readonly ? toggleCalendar() : null\" />\r\n        <button\r\n            class=\"absolute inset-y-0 right-0 flex items-center pr-3 cursor-pointer disabled:cursor-not-allowed disabled:text-gray-300\"\r\n            [disabled]=\"disabled\" (click)=\"toggleCalendar()\">\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n                class=\"h-6 w-6 text-gray-500 hover:text-gray-700 disabled:hover:text-gray-500\" fill=\"none\"\r\n                viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\r\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n                    d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\r\n            </svg>\r\n        </button>\r\n    </div>\r\n    <lucy-calendar [calendarVisible]=\"showCalendar\" [label]=\"label\" [placeholder]=\"placeholder\" [dateValue]=\"dateValue\"\r\n        (dateValueChange)=\"dateChange($event)\" (valueChange)=\"valueChange.emit($event)\" [dateFormat]=\"dateFormat\"\r\n        [dateFormat]=\"dateFormat\"></lucy-calendar>\r\n    <!-- } -->\r\n</div>","/*\r\n * Public API Surface of lucy-calendar\r\n */\r\nexport * from './lib/date-convertor';\r\nexport * from './lib/lucy-calendar.component';\r\nexport * from './lib/lucy-calendar.directive';\r\nexport * from './lib/lucy-date/lucy-date.component';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}