import type { HighLatitudeRule } from "../lib/utils/polar"; import type { TimeFormat, RoundingMethod } from "../lib/utils/time"; import type { Coordinates } from "../lib/utils/coordinates"; export type PrayerName = "fajr" | "sunrise" | "dhuhr" | "asr" | "maghrib" | "isha"; export type ExtendedPrayerName = PrayerName | "sunset" | "midnight"; export type SunnahPeriod = "duha" | "lastThird" | "firstThird" | "middleNight"; export type AsrSchool = "Standard" | "Hanafi"; export type MidnightMode = "Standard" | "Jafari"; export type ShafaqType = "general" | "ahmer" | "abyad"; export type MethodCode = "ISNA" | "MWL" | "Egypt" | "UmmAlQura" | "Qatar" | "Dubai" | "JAKIM" | "JAKIMKN" | "Kemenag" | "Singapore" | "France12" | "France15" | "France18" | "Turkey" | "Russia" | "Moonsighting" | "Tehran" | "Jafari" | "Karachi" | "Custom"; export type RegionCode = "north_america" | "europe" | "middle_east" | "southeast_asia" | "africa" | "south_asia" | "unknown"; export interface MethodParams { fajr: number; isha: number | string; maghrib?: number | string; midnight?: MidnightMode; shafaq?: ShafaqType; adjustments?: Partial>; } export interface PrayerTimeConfig { method: MethodCode; location: [number, number] | Coordinates; timezone?: string; date?: Date; fajr?: number; isha?: number | string; maghrib?: number | string; midnight?: MidnightMode; shafaq?: ShafaqType; asrSchool?: AsrSchool; highLatitudeRule?: HighLatitudeRule; elevation?: number; adjustments?: Partial>; format?: TimeFormat; rounding?: RoundingMethod; iterations?: number; } export interface PrayerTimes { fajr: Date; sunrise: Date; dhuhr: Date; asr: Date; sunset: Date; maghrib: Date; isha: Date; } export interface ExtendedPrayerTimes extends PrayerTimes { midnight: Date; lastThirdOfNight: Date; firstThirdOfNight: Date; } export interface PrayerTimesWithMeta extends PrayerTimes { meta: { method: MethodCode; methodParams: MethodParams; coordinates: Coordinates; timezone?: string; date: Date; julianDay: number; highLatitudeAdjustment?: HighLatitudeRule; adjustments?: Partial>; }; } export interface FormattedPrayerTimes { fajr: string; sunrise: string; dhuhr: string; asr: string; sunset: string; maghrib: string; isha: string; } export interface MonthlyPrayerTimes { year: number; month: number; times: PrayerTimes[]; } export interface DateRange { start: Date; end: Date; } export interface PrayerTimesRange { range: DateRange; times: PrayerTimes[]; } export interface CurrentPrayerInfo { current: PrayerName | null; next: PrayerName | null; timeUntilNext?: number; progress?: number; } export interface GeographicBounds { north: number; south: number; east: number; west: number; } export interface MethodSuggestion { recommended: MethodCode; region: RegionCode; alternatives: MethodCode[]; reason: string; } export declare class PrayerTimeError extends Error { code: ErrorCode; field?: string | undefined; constructor(message: string, code: ErrorCode, field?: string | undefined); } export type ErrorCode = "INVALID_METHOD" | "INVALID_COORDINATES" | "INVALID_DATE" | "INVALID_TIMEZONE" | "INVALID_ADJUSTMENT" | "INVALID_ANGLE" | "CALCULATION_ERROR" | "POLAR_REGION" | "VALIDATION_ERROR"; export interface SolarTime { transit: number; sunrise: number; sunset: number; afternoon: (shadowLength: number) => number; hourAngle: (angle: number, afterTransit: boolean) => number; } export interface SolarPosition { declination: number; rightAscension: number; equationOfTime: number; julianDay: number; } export interface SolarTimes { transit: number; sunrise: number; sunset: number; afternoon: (shadowLength: number) => number; hourAngle: (angle: number, afterTransit: boolean) => number; } export interface SolarCoordinates { declination: number; rightAscension: number; apparentSiderealTime: number; } export interface TimeComponents { hours: number; minutes: number; seconds: number; } export type MethodRegistry = Record; export interface ValidationResult { isValid: boolean; errors: { field: string; message: string; code: ErrorCode; }[]; } export type CoordinateInput = [number, number] | Coordinates | string; export type DateInput = Date | string | number; export type { TimeFormat, RoundingMethod, HighLatitudeRule, Coordinates }; export type CalculatePrayerTimes = (config: PrayerTimeConfig, date?: Date) => PrayerTimes; export interface IPrayerTimeCalculator { calculate(config: PrayerTimeConfig, date?: Date): PrayerTimes; calculateForMonth(config: PrayerTimeConfig, year: number, month: number): MonthlyPrayerTimes; calculateForRange(config: PrayerTimeConfig, range: DateRange): PrayerTimesRange; getCurrentPrayer(times: PrayerTimes, currentTime?: Date): CurrentPrayerInfo; getNextPrayer(times: PrayerTimes, currentTime?: Date): PrayerName | null; suggestMethod(coordinates: CoordinateInput): MethodSuggestion; validateConfig(config: Partial): ValidationResult; } export interface PrayerTimeEvent { type: "prayer_time" | "before_prayer" | "after_prayer"; prayer: PrayerName; time: Date; location: Coordinates; } export interface NotificationConfig { enabled: boolean; prayers: PrayerName[]; reminderMinutes?: number; } export interface PrayerTimeSettings extends PrayerTimeConfig { notifications?: NotificationConfig; favoriteLocations?: { name: string; coordinates: Coordinates; }[]; } export interface CalculationMetrics { calculationTime: number; iterationsUsed: number; precision: number; cacheHit?: boolean; } export interface SunnahTimes { middleOfNight: Date; lastThirdOfNight: Date; firstThirdOfNight: Date; duhaStart: Date; duhaEnd: Date; meta: { nightDuration: number; calculation: { maghribTime: number; nextFajrTime: number; sunriseTime: number; dhuhrTime: number; }; }; } //# sourceMappingURL=index.d.ts.map