ethio-calendar-converter-angular
Version:
Ethiopian Calendar Converter for Angular applications
1 lines • 31.4 kB
Source Map (JSON)
{"version":3,"file":"ethio-calendar-converter-angular.mjs","sources":["../../src/lib/ethiopian-calendar.service.ts","../../src/lib/ethiopian-calendar.component.ts","../../src/lib/ethiopian-calendar.module.ts","../../src/ethio-calendar-converter-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { EthiopianDate, GregorianDate } from './models/calendar.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EthiopianCalendarService {\n // Ethiopian calendar constants\n private readonly ETHIOPIAN_MONTHS = 13;\n private readonly ETHIOPIAN_DAYS_IN_MONTH = 30;\n private readonly ETHIOPIAN_PAGUME_DAYS = 5; // 6 in leap year\n\n private isEthiopianLeapYear(year: number): boolean {\n return (year + 1) % 4 === 0;\n }\n\n private isGregorianLeapYear(year: number): boolean {\n return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);\n }\n\n private validateEthiopianDate(date: EthiopianDate): boolean {\n if (date.month < 1 || date.month > this.ETHIOPIAN_MONTHS) return false;\n if (date.month === this.ETHIOPIAN_MONTHS) {\n const maxDays = this.isEthiopianLeapYear(date.year) ? \n this.ETHIOPIAN_PAGUME_DAYS + 1 : \n this.ETHIOPIAN_PAGUME_DAYS;\n return date.day >= 1 && date.day <= maxDays;\n }\n return date.day >= 1 && date.day <= this.ETHIOPIAN_DAYS_IN_MONTH;\n }\n\n toGregorian(ethiopianDate: EthiopianDate): GregorianDate {\n if (!this.validateEthiopianDate(ethiopianDate)) {\n throw new Error('Invalid Ethiopian date');\n }\n\n let { year, month, day } = ethiopianDate;\n \n // Calculate the number of days from Ethiopian new year to the given date\n let daysDiff = (month - 1) * this.ETHIOPIAN_DAYS_IN_MONTH + day;\n \n // Basic conversion (Ethiopian new year is typically September 11/12)\n let gregorianYear = year + 7;\n let gregorianMonth = 9; // September\n let gregorianDay = 10; // Start from September 10\n\n // Adjust for Ethiopian leap year\n if (this.isEthiopianLeapYear(year)) {\n gregorianDay += 1;\n }\n\n // Add the difference in days\n gregorianDay += daysDiff;\n\n // Adjust the Gregorian date\n const gregorianMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (this.isGregorianLeapYear(gregorianYear)) {\n gregorianMonthDays[1] = 29;\n }\n\n // Adjust month and day\n while (gregorianDay > gregorianMonthDays[gregorianMonth - 1]) {\n gregorianDay -= gregorianMonthDays[gregorianMonth - 1];\n gregorianMonth++;\n if (gregorianMonth > 12) {\n gregorianMonth = 1;\n gregorianYear++;\n if (this.isGregorianLeapYear(gregorianYear)) {\n gregorianMonthDays[1] = 29;\n } else {\n gregorianMonthDays[1] = 28;\n }\n }\n }\n\n return {\n year: gregorianYear,\n month: gregorianMonth,\n day: gregorianDay\n };\n }\n\n toEthiopian(gregorianDate: GregorianDate): EthiopianDate {\n let { year, month, day } = gregorianDate;\n \n // Find the Ethiopian year\n let ethiopianYear = year - 8;\n \n // Calculate days from Ethiopian new year (September 11/12)\n const gregorianMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (this.isGregorianLeapYear(year)) {\n gregorianMonthDays[1] = 29;\n }\n\n // Calculate the Ethiopian date\n let ethiopianMonth = 1;\n let ethiopianDay = 1;\n \n // Adjust based on the Gregorian date\n if (month > 9 || (month === 9 && day > 11)) {\n ethiopianYear++;\n }\n\n // Calculate days from Ethiopian new year\n let daysDiff = 0;\n if (month > 9) {\n // Add days from September to current month\n for (let m = 9; m < month; m++) {\n daysDiff += gregorianMonthDays[m - 1];\n }\n daysDiff += day - 11;\n } else if (month < 9) {\n // Add remaining days from September to December\n for (let m = 9; m <= 12; m++) {\n daysDiff += gregorianMonthDays[m - 1];\n }\n // Add days from January to current month\n for (let m = 1; m < month; m++) {\n daysDiff += gregorianMonthDays[m - 1];\n }\n daysDiff += day - 11;\n } else {\n // September\n daysDiff = day - 11;\n }\n\n // Convert days difference to Ethiopian date\n ethiopianMonth = Math.floor(daysDiff / 30) + 1;\n ethiopianDay = (daysDiff % 30) + 1;\n\n return {\n year: ethiopianYear,\n month: ethiopianMonth,\n day: ethiopianDay\n };\n }\n\n // Helper method to format dates\n formatDate(date: EthiopianDate | GregorianDate, isEthiopian: boolean = true): string {\n const { year, month, day } = date;\n return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}${\n isEthiopian ? ' (Ethiopian)' : ' (Gregorian)'\n }`;\n }\n} ","import { Component, Output, EventEmitter } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { EthiopianCalendarService } from './ethiopian-calendar.service';\nimport { EthiopianDate, GregorianDate } from './models/calendar.model';\n\n@Component({\n selector: 'ethiopian-calendar',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule\n ],\n template: `\n <div class=\"bg-white rounded-lg shadow-lg p-6 max-w-md mx-auto\">\n <!-- Ethiopian Calendar Input -->\n <div class=\"mb-8\">\n <h3 class=\"text-lg font-medium text-gray-900 mb-4\">Ethiopian Calendar</h3>\n <div class=\"relative\">\n <input\n type=\"text\"\n [value]=\"formatEthiopianDateForInput(ethiopianDate)\"\n (click)=\"toggleEthiopianPicker()\"\n readonly\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all cursor-pointer\"\n />\n <label class=\"absolute -top-2 left-2 bg-white px-1 text-xs text-gray-600\">Select Date</label>\n \n <!-- Calendar Icon -->\n <button \n (click)=\"toggleEthiopianPicker()\"\n class=\"absolute right-2 top-2 text-gray-400 hover:text-gray-600 focus:outline-none\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" 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\" />\n </svg>\n </button>\n\n <!-- Ethiopian Calendar Picker -->\n <div *ngIf=\"showEthiopianPicker\" \n class=\"absolute left-0 mt-1 p-4 bg-white rounded-lg shadow-lg border border-gray-200 z-50 w-[320px]\">\n <!-- Month and Year Navigation -->\n <div class=\"flex justify-between items-center mb-4\">\n <button \n (click)=\"previousMonth()\"\n class=\"p-1 hover:bg-gray-100 rounded-full\"\n >\n <svg class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n \n <div class=\"flex items-center space-x-2\">\n <select \n [(ngModel)]=\"ethiopianDate.month\"\n (change)=\"updateEthiopianDate()\"\n class=\"text-sm border-none bg-transparent font-semibold focus:outline-none focus:ring-0\"\n >\n <option *ngFor=\"let month of ethiopianMonths\" [value]=\"month.value\">\n {{month.label}}\n </option>\n </select>\n <select \n [(ngModel)]=\"ethiopianDate.year\"\n (change)=\"updateEthiopianDate()\"\n class=\"text-sm border-none bg-transparent font-semibold focus:outline-none focus:ring-0\"\n >\n <option *ngFor=\"let year of ethiopianYears\" [value]=\"year\">{{year}}</option>\n </select>\n </div>\n\n <button \n (click)=\"nextMonth()\"\n class=\"p-1 hover:bg-gray-100 rounded-full\"\n >\n <svg class=\"h-5 w-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"grid grid-cols-7 gap-1\">\n <!-- Week days -->\n <div *ngFor=\"let day of weekDays\" \n class=\"text-center text-xs font-medium text-gray-500 py-1\">\n {{day}}\n </div>\n\n <!-- Days -->\n <ng-container *ngFor=\"let day of getDaysArray()\">\n <button *ngIf=\"day !== 0\"\n (click)=\"selectDay(day)\"\n [class]=\"getDayClasses(day)\"\n >\n {{day}}\n </button>\n <div *ngIf=\"day === 0\" class=\"h-8\"></div>\n </ng-container>\n </div>\n\n <!-- Today Button -->\n <div class=\"mt-4 flex justify-between items-center border-t pt-4\">\n <button \n (click)=\"selectToday()\"\n class=\"text-sm text-blue-600 hover:text-blue-800 font-medium\"\n >\n Today\n </button>\n <button \n (click)=\"toggleEthiopianPicker()\"\n class=\"text-sm text-gray-600 hover:text-gray-800 font-medium\"\n >\n Close\n </button>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"ethiopianDate\" class=\"mt-2 text-sm text-gray-600\">\n Selected: {{formatEthiopianDateForDisplay(ethiopianDate)}}\n </div>\n\n <button\n (click)=\"convertToGregorian()\"\n class=\"mt-4 w-full bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors\"\n >\n Convert to Gregorian\n </button>\n </div>\n\n <!-- Gregorian Calendar Input -->\n <div class=\"mb-8\">\n <h3 class=\"text-lg font-medium text-gray-900 mb-4\">Gregorian Calendar</h3>\n <div class=\"relative\">\n <input\n type=\"date\"\n [value]=\"formatDateForInput(gregorianDate)\"\n (change)=\"onGregorianDateSelected($event)\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all\"\n />\n <label class=\"absolute -top-2 left-2 bg-white px-1 text-xs text-gray-600\">Select Date</label>\n </div>\n\n <div *ngIf=\"gregorianDate\" class=\"mt-2 text-sm text-gray-600\">\n Selected: {{formatGregorianDate(gregorianDate)}}\n </div>\n\n <button\n (click)=\"convertToEthiopian()\"\n class=\"mt-4 w-full bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors\"\n >\n Convert to Ethiopian\n </button>\n </div>\n\n <!-- Conversion Result -->\n <div *ngIf=\"lastConversion\" \n class=\"p-4 bg-gray-50 rounded-lg border border-gray-200\">\n <p class=\"text-sm font-medium text-gray-900\">Last Conversion:</p>\n <p class=\"text-sm text-gray-600 mt-1\">{{lastConversion}}</p>\n </div>\n </div>\n `\n})\nexport class EthiopianCalendarComponent {\n ethiopianDate: EthiopianDate = { year: 2015, month: 4, day: 25 };\n gregorianDate: GregorianDate = { year: 2022, month: 3, day: 25 };\n lastConversion: string = '';\n showEthiopianPicker: boolean = false;\n\n ethiopianMonths = [\n { value: 1, label: 'Meskerem' },\n { value: 2, label: 'Tikimt' },\n { value: 3, label: 'Hidar' },\n { value: 4, label: 'Tahsas' },\n { value: 5, label: 'Tir' },\n { value: 6, label: 'Yekatit' },\n { value: 7, label: 'Megabit' },\n { value: 8, label: 'Miyazia' },\n { value: 9, label: 'Ginbot' },\n { value: 10, label: 'Sene' },\n { value: 11, label: 'Hamle' },\n { value: 12, label: 'Nehase' },\n { value: 13, label: 'Pagume' }\n ];\n\n get ethiopianYears(): number[] {\n const currentYear = new Date().getFullYear();\n const years: number[] = [];\n for (let i = currentYear - 100; i <= currentYear + 100; i++) {\n years.push(i - 8); // Convert to approximate Ethiopian year\n }\n return years;\n }\n\n @Output() ethiopianDateChange = new EventEmitter<EthiopianDate>();\n @Output() gregorianDateChange = new EventEmitter<GregorianDate>();\n\n constructor(private calendarService: EthiopianCalendarService) {}\n\n toggleEthiopianPicker() {\n this.showEthiopianPicker = !this.showEthiopianPicker;\n }\n\n getEthiopianDays(): number[] {\n const maxDays = this.ethiopianDate.month === 13 ? \n (this.calendarService['isEthiopianLeapYear'](this.ethiopianDate.year) ? 6 : 5) : \n 30;\n return Array.from({length: maxDays}, (_, i) => i + 1);\n }\n\n applyEthiopianDate() {\n this.convertToGregorian();\n this.toggleEthiopianPicker();\n }\n\n formatEthiopianDateForDisplay(date: EthiopianDate): string {\n const monthName = this.ethiopianMonths.find(m => m.value === date.month)?.label || '';\n return `${monthName} ${date.day}, ${date.year}`;\n }\n\n convertToGregorian() {\n try {\n this.gregorianDate = this.calendarService.toGregorian(this.ethiopianDate);\n this.gregorianDateChange.emit(this.gregorianDate);\n this.lastConversion = `Ethiopian ${this.formatDate(this.ethiopianDate)} → Gregorian ${this.formatDate(this.gregorianDate)}`;\n } catch (error) {\n this.lastConversion = 'Invalid Ethiopian date';\n }\n }\n\n convertToEthiopian() {\n try {\n this.ethiopianDate = this.calendarService.toEthiopian(this.gregorianDate);\n this.ethiopianDateChange.emit(this.ethiopianDate);\n this.lastConversion = `Gregorian ${this.formatDate(this.gregorianDate)} → Ethiopian ${this.formatDate(this.ethiopianDate)}`;\n } catch (error) {\n this.lastConversion = 'Invalid Gregorian date';\n }\n }\n\n onGregorianDateSelected(event: any) {\n const date = new Date(event.target.value);\n this.gregorianDate = {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n };\n this.convertToEthiopian();\n }\n\n formatDate(date: EthiopianDate | GregorianDate): string {\n return `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`;\n }\n\n formatDateForInput(date: GregorianDate): string {\n return `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`;\n }\n\n formatGregorianDate(date: GregorianDate): string {\n return new Date(date.year, date.month - 1, date.day)\n .toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n }\n\n weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n previousMonth() {\n if (this.ethiopianDate.month > 1) {\n this.ethiopianDate.month--;\n } else {\n this.ethiopianDate.month = 13;\n this.ethiopianDate.year--;\n }\n this.updateEthiopianDate();\n }\n\n nextMonth() {\n if (this.ethiopianDate.month < 13) {\n this.ethiopianDate.month++;\n } else {\n this.ethiopianDate.month = 1;\n this.ethiopianDate.year++;\n }\n this.updateEthiopianDate();\n }\n\n getDaysArray(): number[] {\n const daysInMonth = this.ethiopianDate.month === 13 ? \n (this.calendarService['isEthiopianLeapYear'](this.ethiopianDate.year) ? 6 : 5) : \n 30;\n \n // Create array with padding for alignment\n const days: number[] = [];\n const firstDayOffset = this.getFirstDayOffset();\n \n // Add padding\n for (let i = 0; i < firstDayOffset; i++) {\n days.push(0);\n }\n \n // Add days\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(i);\n }\n \n return days;\n }\n\n getFirstDayOffset(): number {\n // This is a simplified version - you might want to implement proper Ethiopian calendar day-of-week calculation\n return (this.ethiopianDate.month * 2) % 7;\n }\n\n getDayClasses(day: number): string {\n const baseClasses = 'h-8 w-8 rounded-full flex items-center justify-center text-sm';\n const isSelected = day === this.ethiopianDate.day;\n \n if (isSelected) {\n return `${baseClasses} bg-blue-600 text-white`;\n }\n \n return `${baseClasses} hover:bg-gray-100 text-gray-700`;\n }\n\n selectDay(day: number) {\n this.ethiopianDate.day = day;\n this.updateEthiopianDate();\n this.toggleEthiopianPicker();\n }\n\n selectToday() {\n const today = this.calendarService.toEthiopian({\n year: new Date().getFullYear(),\n month: new Date().getMonth() + 1,\n day: new Date().getDate()\n });\n this.ethiopianDate = today;\n this.updateEthiopianDate();\n this.toggleEthiopianPicker();\n }\n\n updateEthiopianDate() {\n this.ethiopianDateChange.emit(this.ethiopianDate);\n this.convertToGregorian();\n }\n\n formatEthiopianDateForInput(date: EthiopianDate): string {\n const monthName = this.ethiopianMonths.find(m => m.value === date.month)?.label || '';\n return `${monthName} ${date.day}, ${date.year}`;\n }\n} ","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { EthiopianCalendarComponent } from './ethiopian-calendar.component';\nimport { EthiopianCalendarService } from './ethiopian-calendar.service';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n FormsModule,\n EthiopianCalendarComponent\n ],\n exports: [\n EthiopianCalendarComponent\n ],\n providers: [\n EthiopianCalendarService\n ]\n})\nexport class EthiopianCalendarModule { } ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.EthiopianCalendarService"],"mappings":"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"}