@ishubhamx/panchangam-js
Version:
Enhanced Indian Panchangam (Hindu Calendar) library with comprehensive Vedic features including Muhurta calculations, planetary positions, Rashi placements, and auspicious/inauspicious time calculations
100 lines • 4.24 kB
TypeScript
/**
* Festival Calculation Logic - v3.1.0
*
* Fixes applied over v3.0.0:
* - Dahi Handi: moved to Shravana (masa 4), tithi 24
* - Ahoi Ashtami: moved to Kartika (masa 7), tithi 23
* - Mauni Amavasya: moved to Magha (masa 10), tithi 30
* - Holashtak Begins: corrected to Phalguna Shukla Ashtami (tithi 8)
* - Kalki Jayanti: corrected to Shravana Shukla Shashthi (tithi 6)
* - Vat Savitri Vrat regional: corrected to North India
* - Vat Purnima regional: corrected to Maharashtra/Gujarat
* - Narada Jayanti: moved to Vaishakha (masa 1), tithi 16
* - Masik Shivaratri: suppressed in Magha (Maha Shivaratri handled separately)
* - Maghi: marked as solar-approximate, guarded with vara === 0 (Sunday nearest Makar)
* - Varalakshmi Vratam: moved to vara-based logic (Friday before Shravana Purnima)
* - Gayatri Jayanti (Jyeshtha): disambiguated from Shravana Purnima entry
* - Parivartini/Parsva Ekadashi duplicate: consolidated under EKADASHI_NAMES
* - Minor additions: Skanda Sashti (masa 7 + vara), Kamada Ekadashi description,
* Chaitra Navratri day-3/day-9 stubs, Shraddha Paksha daily observance.
*/
import type { Festival, FestivalCalculationOptions, FestivalCategory } from '../types/festivals';
import { Observer } from 'astronomy-engine';
/**
* Ekadashi Names by Masa and Paksha
*
* Keys: "<masaIndex>-<Shukla|Krishna>"
* Tithis: Shukla Ekadashi = 11, Krishna Ekadashi = 26
*/
export declare const EKADASHI_NAMES: {
[key: string]: string;
};
/**
* Get Ekadashi name for a given Masa and Paksha.
*/
export declare function getEkadashiName(masaIndex: number, paksha: string, isAdhika?: boolean): string;
/**
* Uses Udaya Tithi (sunrise Tithi) as primary, with full-day tithi
* look-ahead for accurate festival date assignment per Drik Panchang
* convention.
*
* Three-pass approach:
* 1. Sunrise tithi — standard udaya-tithi festivals
* 2. Midday tithi — Madhyahna-vyapini (most festivals)
* 3. Sunset tithi — Aparahna/Sayahna-vyapini (e.g. Dussehra, Vat Savitri)
*
* When a tithi crosses a month boundary (Amavasya → Pratipada), the
* midday/sunset pass uses the NEXT masa index automatically.
*
* Also handles:
* - Adhika Masa festivals (only Ekadashi/Pradosham in Adhika)
* - Kshaya Tithi (short tithis that don't touch any sunrise)
* - Vriddhi Tithi (long tithis spanning two sunrises — festival on FIRST day)
*/
export declare function getFestivals(options: FestivalCalculationOptions): Festival[];
/**
* Pure festival detection by Tithi — no astronomical dependencies.
* Recommended for unit testing.
*
* @param masaIndex - 0–11 (Chaitra → Phalguna)
* @param isAdhika - intercalary month flag
* @param udayaTithi - 1–30 (1-indexed)
* @param paksha - "Shukla" | "Krishna"
* @param vara - day of week 0=Sun…6=Sat (optional, used for vara-based festivals)
*/
export declare function getFestivalsByTithi(masaIndex: number, isAdhika: boolean, udayaTithi: number, paksha: string, vara?: number): string[];
export interface UpcomingFestivalsOptions {
/** Start date to scan from */
date: Date;
/** Observer location for sunrise calculations */
observer: Observer;
/** Number of days to scan ahead (default: 30) */
days?: number;
/** Timezone offset in minutes (e.g. 330 for IST) */
timezoneOffset?: number;
/** Minimum festival category to include (default: all) */
categories?: FestivalCategory[];
/** Calendar type (default: 'purnimanta') */
calendarType?: 'amanta' | 'purnimanta';
}
/**
* Scan ahead N days and return all upcoming festivals.
*
* Useful for "upcoming festivals" widgets where calling `getPanchangam` for
* a single date might return zero festivals.
*
* @param options - Scan options including date, observer, and number of days
* @returns Array of festivals with their dates, sorted chronologically
*
* @example
* ```typescript
* const upcoming = getUpcomingFestivals({
* date: new Date(),
* observer: new Observer(12.97, 77.59, 920),
* days: 30,
* timezoneOffset: 330
* });
* ```
*/
export declare function getUpcomingFestivals(options: UpcomingFestivalsOptions): Festival[];
//# sourceMappingURL=festivals.d.ts.map