type Time = { hour: number, minute: number, second?: number };
type SunTimes = { sunrise?: Time, sunset?: Time };
type ZmanToShow = { id: number, desc: string, eng: string, heb: string, offset?: number, whichDaysFlags?: number };
type ZmanTime$1 = { zmanType: ZmanToShow, time: Time, isTomorrow: boolean; };
type ShulZmanimType = { chatzosHayom?: Time, chatzosHalayla?: Time, alos?: Time, shkia?: Time };

/**
 * Computes the Sedra/Sedras of the week for the given day.
 * The property "sedras" an array of sedras (either one or two) for the given Jewish Date
 * Sample of use to get todays sedra in Israel:
 *     const sedras = new Sedra(new jDate(), true).toString();
 * The code was converted to javascript and tweaked by CBS.
 * It is directly based on the C code in Danny Sadinoff's HebCal - Copyright (C) 1994.
 * Portions of that code are Copyright (c) 2002 Michael J. Radwin. All Rights Reserved.
 * Many of the algorithms were taken from hebrew calendar routines implemented by Nachum Dershowitz
 * @property sedras {[{ eng: String, heb: String }]}
 */
declare class Sedra {
    sedras: {
        eng: string;
        heb: string;
    }[];
    /**
     * @param {jDate} jd
     * @param {boolean} israel
     */
    constructor(jd: jDate, israel: boolean);
    /**
     * Gets the sedra/s as a string. If there are two, they are seperated by a " - "
     */
    toString(): string | false;
    /**
     * Gets the sedra/s as a string. If there are two, they are seperated by a " - "
     */
    toStringHeb(): string | false;
    static lastCalculatedYear: {
        firstSatInYear: number;
        sedraArray?: number[];
        year: number;
        israel: boolean;
    } | null;
    static sedraList: {
        eng: string;
        heb: string;
    }[];
    static shabbos_short: number[];
    static shabbos_long: number[];
    static mon_short: number[];
    static mon_long: number[];
    static thu_normal: number[];
    static thu_normal_Israel: number[];
    static thu_long: number[];
    static shabbos_short_leap: number[];
    static shabbos_long_leap: number[];
    static mon_short_leap: number[];
    static mon_short_leap_Israel: number[];
    static mon_long_leap: number[];
    static mon_long_leap_Israel: number[];
    static thu_short_leap: number[];
    static thu_long_leap: number[];
    static getDayOnOrBefore(day_of_week: number, date: number): number;
    static getSedraOrder(year: number, israel: boolean): {
        firstSatInYear: number;
        sedraArray?: number[];
        year: number;
        israel: boolean;
    };
}

/** Represents a geographic Location. Needed for calculating Zmanim.
If Israel is undefined, if the given coordinates are near the vicinity of Israel it will be assumed that it is in Israel.
UTCOffset is the time zone. Israel is always 2 and the US East coast is -5. England is 0 of course.
If UTCOffset is not specifically supplied, the longitude will be used to get a quasi-educated guess.*/
declare class Location {
    Name: string;
    NameHebrew?: string;
    Israel: boolean;
    Latitude: number;
    Longitude: number;
    UTCOffset: number;
    Elevation: number;
    CandleLighting?: number;
    /**
     * Describe a new Location.
     * @param {String} name The name of the Location
     * @param {String} nameHeb The name of the Location
     * @param {Boolean} israel Is this Location in Israel?
     * @param {Number} latitude
     * @param {Number} longitude
     * @param {Number} utcOffset The time zone. Israel is 2 and New York is -5.
     * @param {Number} elevation Elevation in meters
     * @param {Number} [candleLighting] Number of minutes before sunset the candles are lit on Friday
     */
    constructor(name: string, nameHeb: string | undefined, israel: boolean, latitude: number, longitude: number, utcOffset: number, elevation: number, candleLighting?: number);
    static clone(location: Location): Location;
    static getCandles(location: Location): number;
    /**Gets the Location for Jerusalem.*/
    static getJerusalem(): Location;
    /**Gets the Location for Lakewood NJ*/
    static getLakewood(): Location;
}

/** Represents a single day in the Jewish Calendar. */
declare class jDate {
    Day: number;
    Month: number;
    Year: number;
    Abs: number;
    /**
     *  Create a new Jdate.
     *  new jDate() - Sets the Jewish Date for the current system date
     *  new jDate(javascriptDateObject) - Sets to the Jewish date on the given Gregorian date
     *  new jDate("January 1 2045") - Accepts any valid javascript Date string (uses javascripts new Date(string))
     *  new jDate(jewishYear, jewishMonth, jewishDay) - Months start at 1. Nissan is month 1 Adar Sheini is 13.
     *  new jDate(jewishYear, jewishMonth) - Same as above, with Day defaulting to 1
     *  new jDate( { year: 5776, month: 4, day: 5 } ) - same as new jDate(jewishYear, jewishMonth, jewishDay)
     *  new jDate( { year: 5776, month: 4 } ) - same as new jDate(jewishYear, jewishMonth)
     *  new jDate( { year: 5776 } ) - sets to the first day of Rosh Hashana on the given year
     *  new jDate(absoluteDate) - The number of days elapsed since the theoretical date Sunday, December 31, 0001 BCE
     *  new jDate(jewishYear, jewishMonth, jewishDay, absoluteDate) - Most efficient constructor. Needs no calculations at all.
     *  new jDate( { year: 5776, month: 4, day: 5, abs: 122548708 } ) - same as new jDate(jewishYear, jewishMonth, jewishDay, absoluteDate)
     * @param {number | Date | string | {year:number,month:number,day:number} | [number, number, number, number]} [arg] The full Jewish year number OR Javascript Date object or string OR object or array of year, month, day
     * @param {number} [month] The month of the Jewish date. Nissan is 1.
     * @param {number} [day] The day of the month
     * @param {number} [abs] The number of days that have passed since 12/31/0001
     */
    constructor(arg?: number | Date | string | {
        year: number;
        month: number;
        day: number;
    } | [number, number, number, number], month?: number, day?: number, abs?: number);
    /**Sets the current Jewish date from the given absolute date*/
    fromAbs(absolute: number): void;
    /**Returns a valid javascript Date object that represents the Gregorian date
      that starts at midnight of the current Jewish date.*/
    getDate(): Date;
    /**
     * @returns {number} The day of the week for the current Jewish date. Sunday is 0 and Shabbos is 6.
     */
    getDayOfWeek(): number;
    /**
     * @returns {number} The day of the week for the current Jewish date. Sunday is 0 and Shabbos is 6
     */
    get DayOfWeek(): number;
    /**Returns a new Jewish date represented by adding the given number of days to the current Jewish date.*/
    addDays(days: number): jDate;
    /**
     * Returns a new Jewish date represented by adding the given number of
     * Jewish Months to the current Jewish date.
     * If the current Day is 30 and the new month only has 29 days,
     * the 29th day of the month is returned.
     * @param {number} months
     */
    addMonths(months: number): jDate;
    /**
     * Returns a new Jewish date represented by adding the
     * given number of Jewish Years to the current Jewish date.
     * If the current Day is 30 and the new dates month only has 29 days,
     * the 29th day of the month is returned.
     * @param {number} years
     */
    addYears(years: number): jDate;
    addSecularMonths(months: number): jDate;
    addSecularYears(years: number): jDate;
    /**Gets the number of days separating this Jewish Date and the given one.
     *
     * If the given date is before this one, the number will be negative.
     * @param {jDate} jd
     * */
    diffDays(jd: jDate): number;
    /**Gets the number of months separating this Jewish Date and the given one.
     *
     * Ignores the Day property:
     *
     * jDate.toJDate(5777, 6, 29).diffMonths(jDate.toJDate(5778, 7, 1)) will return 1 even though they are a day apart.
     *
     * If the given date is before this one, the number will be negative.
     * @param {jDate} jd
     * */
    diffMonths(jd: jDate): number;
    /**Gets the number of full months separating this Jewish Date and the given one.
     * If the given date is before this one, the number will be negative.
     * @param {jDate} jd
     * */
    diffFullMonths(jd: jDate): number;
    /**Gets the number of years separating this Jewish Date and the given one.
     *
     * Ignores the Day and Month properties:
     *
     * jDate.toJDate(5777, 6, 29).diffYears(jDate.toJDate(5778, 7, 1)) will return 1 even though they are a day apart.
     *
     * If the given date is before this one, the number will be negative.
     * @param {jDate} jd*/
    diffYears(jd: jDate): number;
    /**Gets the number of full years separating this Jewish Date and the given one.
     * If the given date is before this one, the number will be negative.
     * @param {jDate} jd*/
    diffFullYears(jd: jDate): number;
    /**
     * Returns the current Jewish date in the format: Thursday, the 3rd of Kislev 5776.
     * @param {boolean} hideDayOfWeek
     * @param {boolean} dontCapitalize
     * @param {boolean} showParsha Show the parsha name?
     * @param {boolean} israel Use the Israeli calendar for determining the parsha?
     */
    toString(hideDayOfWeek?: boolean, dontCapitalize?: boolean, showParsha?: boolean, israel?: boolean): string;
    /**
     * Returns the current Jewish date in the format "[Tuesday] Nissan 3, 5778"
     * @param {boolean} showDow - show day of week?
     */
    toShortstring(showDow: boolean): string;
    /**
     * Returns the current Jewish date in the format "Nissan 5778"
     * @param {boolean} showYear - show the year number?
     */
    monthName(showYear?: boolean): string;
    /**
     * Returns the current Jewish date in the format: יום חמישי כ"א כסלו תשע"ו or יום חמישי לפרשת וישב, כ"א כסלו תשע"ו
     * @param hideDayOfWeek When set to truthy, hides the day of the week
     * @param showParsha When set to truthy, shows the parsha
     * @param israel When set to truthy, uses the Israeli Calendar for ascertaining the parsha
     */
    toStringHeb(hideDayOfWeek?: boolean, showParsha?: boolean, israel?: boolean): string;
    /**Gets the day of the omer for the current Jewish date. If the date is not during sefira, 0 is returned.*/
    getDayOfOmer(): number;
    /**
     * Returns true if this day is yomtov or chol hamoed
     * @param {boolean} israel
     */
    isYomTovOrCholHamoed(israel: boolean): boolean;
    /**
     * Returns true if this day is yomtov
     * @param {boolean} israel
     */
    isYomTov(israel: boolean): boolean;
    /**Is today Erev Yom Tov? (includes Erev second days of Sukkos and Pesach) */
    isErevYomTov(): boolean;
    /**Does the current Jewish date have candle lighting before sunset?*/
    hasCandleLighting(): boolean;
    /**Is the current Jewish Date the day before a yomtov that contains a Friday?*/
    hasEiruvTavshilin(israel: boolean): boolean;
    /**Gets the candle lighting time for the current Jewish date for the given Location object.*/
    getCandleLighting(location: Location, nullIfNoCandles?: boolean): Time | null | undefined;
    /**Get the sedra of the week for the current Jewish date.*/
    getSedra(israel: boolean): Sedra;
    /**Get the prakim of Pirkei Avos for the current Jewish date.*/
    getPirkeiAvos(israel: boolean): number[];
    /**Gets sunrise and sunset time for the current Jewish date at the given Location.
     *
     * Return format: {sunrise: {hour: 6, minute: 18}, sunset: {hour: 19, minute: 41}}*/
    getSunriseSunset(location: Location, ignoreElevation?: boolean): SunTimes;
    /**Gets Chatzos for both the day and the night for the current Jewish date at the given Location.
     *
     *Return format: {hour: 11, minute: 48}*/
    getChatzos(location: Location): Time;
    /**Gets the length of a single Sha'a Zmanis in minutes for the current Jewish date at the given Location.*/
    getShaaZmanis(location: Location, offset: number): number;
    /**Returns the daily daf in English. For example: Sukkah, Daf 3.*/
    getDafYomi(): string;
    /**Gets the daily daf in Hebrew. For example: 'סוכה דף כ.*/
    getDafyomiHeb(): string;
    /**
     *  Converts its argument/s to a Jewish Date.
     *  Samples of use:
     *    To get the current Jewish Date: jDate.toJDate(new Date()).
     *    To print out the current date in English: jDate.toJDate(new Date()).toString()
     *    To print out the current date in Hebrew: jDate.toJDate(new Date()).toStringHeb()
     *
     *  Arguments to the jDate.toJDate function can be one of the following:
     *  jDate.toJDate() - Sets the Jewish Date for the current system date
     *  jDate.toJDate(Date) - Sets to the Jewish date on the given Javascript Date object
     *  jDate.toJDate("January 1 2045") - Accepts any valid Javascript Date string (uses string constructor of Date object)
     *  jDate.toJDate(jewishYear, jewishMonth, jewishDay) - Months start at 1. Nissan is month 1 Adara Sheini is 13.
     *  jDate.toJDate(jewishYear, jewishMonth) - Same as above, with Day defaulting to 1
     *  jDate.toJDate(jewishYear) - sets to the first day of Rosh Hashana on the given year
     *  jDate.toJDate( { year: 5776, month: 4, day: 5 } ) - Months start at 1. Nissan is month 1 Adara Sheini is 13.
     *  jDate.toJDate( { year: 5776, month: 4 } ) - Same as above, with Day defaulting to 1
     *  jDate.toJDate( { year: 5776 } ) - sets to the first day of Rosh Hashana on the given year
     *  jDate.toJDate(jewishYear, jewishMonth, jewishDay, absoluteDate) - Most efficient. Needs no calculations at all. The absoluteDate is the number of days elapsed since the theoretical date Sunday, December 31, 0001 BCE.
     *  jDate.toJDate( { year: 5776, month: 4, day: 5, abs: 122548708 } ) - same as jDate.toJDate(jewishYear, jewishMonth, jewishDay, absoluteDate)
     ****************************************************************************************************************/
    static toJDate(arg?: number | Date | string | {
        year: number;
        month: number;
        day: number;
    } | [number, number, number, number], month?: number, day?: number, abs?: number): jDate;
    static now(): jDate;
    /**Calculate the Jewish year, month and day for the given absolute date.*/
    static fromAbs(absDay: number): {
        year: number;
        month: number;
        day: number;
    };
    /**
     * Gets the absolute date of the given javascript Date object.
     * @param {Date} date
     */
    static absSd(date: Date): number;
    /**Calculate the absolute date for the given Jewish Date.*/
    static absJd(year: number, month: number, day: number): number;
    /**
     * Gets a javascript date from an absolute date
     */
    static sdFromAbs(abs: number): Date;
    /**number of days in the given Jewish Month. Nissan is 1 and Adar Sheini is 13.*/
    static daysJMonth(year: number, month: number): number;
    /**The index for the year type of the given year.
     * IMPORTANT NOTE: Only works for years 5000 and after.
     */
    static yearType(year: number): {
        isLeapYear: boolean;
        dow: number;
        isLongCheshvan: boolean;
        isLongKislev: boolean;
        daysInYear: number;
    };
    /**number of days in the given Jewish Year.*/
    static daysJYear(year: number): number;
    /**Does Cheshvan for the given Jewish Year have 30 days?*/
    static isLongCheshvan(year: number): boolean;
    /**Does Kislev for the given Jewish Year have 29 days?*/
    static isShortKislev(year: number): boolean;
    /**Does the given Jewish Year have 13 months?*/
    static isJdLeapY(year: number): boolean;
    /**number of months in Jewish Year.*/
    static monthsJYear(year: number): number;
    static getElapsedDays: (year: number) => number;
}

/**
 * Pure Date and Math Utilities
 */
declare class DateUtils {
    /**
     * Converts the given complex number to an integer by removing the decimal part.
     */
    static toInt(float: number): number;
    /**
     * Add two character suffix to number. e.g. 21st, 102nd, 93rd, 500th
     */
    static toSuffixed(num: number): string;
    /**
     * Gets the absolute date of the given javascript Date object.
     * @param {Date} date
     */
    static absSd(date: Date): number;
    /**
     * Gets a javascript date from an absolute date
     */
    static sdFromAbs(abs: number): Date;
    /**
     * Gets the total number of minutes in the given time.
     */
    static totalMinutes(time: Time): number;
    /**
     * Gets the total number of seconds in the given time.
     */
    static totalSeconds(time: Time): number;
    /**
     * Makes sure hour is between 0 and 23 and minute is between 0 and 59.
     */
    static fixTime(time: Time): Time;
    /**
     * Add the given number of minutes to the given time.
     */
    static addMinutes(time?: Time, minutes?: number): Time | undefined;
    /**
     * Add the given number of seconds to the given time.
     */
    static addSeconds(time: Time, seconds: number): Time;
    /**
     * Gets the time difference between two times of day.
     */
    static timeDiff(earlierTime: Time, laterTime: Time, showNegative?: boolean): {
        sign: number;
        hour: number;
        minute: number;
        second?: number;
    };
    /**
     * Gets the UTC offset in whole hours for the users time zone.
     */
    static currUtcOffset(): number;
    /** Determines if the given date is within DST on the users system */
    static isDateDST(date: Date): boolean;
    static isUSA_DST(date: Date): boolean;
    static isIsrael_DST(date: Date): boolean;
    /**
     * Determines if the given date is within DST in the given location
     */
    static isDST(location: Location, date: Date): boolean;
    /** Returns whether or not the given, array, string, or argument list contains the given item or substring. */
    static has(o: unknown, ...arr: unknown[]): boolean;
    static isSecularLeapYear(year: number): boolean;
    static isValidDate(thing: unknown): boolean;
    static isString(thing: unknown): thing is string | String;
    static isNumber(thing: unknown): thing is number | Number;
}

declare const DaysOfWeek: Readonly<{
    SUNDAY: 0;
    MONDAY: 1;
    TUESDAY: 2;
    WEDNESDAY: 3;
    THURSDAY: 4;
    FRIDAY: 5;
    SHABBOS: 6;
}>;
declare const JewishMonthsNames: Readonly<{
    NISSAN: 1;
    IYAR: 2;
    SIVAN: 3;
    TAMUZ: 4;
    AV: 5;
    ELLUL: 6;
    TISHREI: 7;
    CHESHVAN: 8;
    KISLEV: 9;
    TEVES: 10;
    SHVAT: 11;
    ADAR: 12;
    ADAR_SHEINI: 13;
}>;
declare const JewishMonthsEng: string[];
declare const JewishMonthsHeb: string[];
declare const SecularMonthsEng: string[];
declare const DaysOfWeekEng: string[];
declare const DaysOfWeekHeb: string[];
declare class Utils extends DateUtils {
    static jsd: string[];
    static jtd: string[];
    static jhd: string[];
    static jsnum: string[];
    static jtnum: string[];
    /**
     * Gets the Jewish representation of a number (365 = שס"ה)
     * Minimum number is 1 and maximum is 9999.
     * @param {Number} number
     */
    static toJewishNumber(number: number): string;
    /**
     * Returns the javascript date in the format: Thursday, the 3rd of January 2018.
     * @param {Date} date
     * @param {Boolean} hideDayOfWeek
     * @param {Boolean} dontCapitalize
     */
    static toStringDate(date: Date, hideDayOfWeek: boolean, dontCapitalize: boolean): string | undefined;
    /**
     * Returns the javascript date in the format: 1/3/2020.
     * @param {Date} date
     * @param {Boolean} monthFirst
     */
    static toShortStringDate(date: Date, monthFirst: boolean): string | undefined;
    /**
     * Get day of week using Javascripts getDay function.
     * Important note: months starts at 1 not 0 like javascript
     * The DOW returned has Sunday = 0
     * @param {Number} year
     * @param {Number} month
     * @param {Number} day
     */
    static getSdDOW(year: number, month: number, day: number): number;
    /**
     * Returns the time of the given javascript date as an object in the format of {hour : 23, minute :42, second: 18 }
     * @param {Date} sdate
     * @returns {{hour :number, minute :number, second:number }}
     */
    static timeFromDate(sdate: Date): {
        hour: number;
        minute: number;
        second: number;
    };
    /**
     * Determines if the second given time is after (or at) the first given time
     * @param {{hour :number, minute :number, second:number }} beforeTime
     * @param {{hour :number, minute :number, second:number }} afterTime
     */
    static isTimeAfter(beforeTime?: Time, afterTime?: Time): boolean;
    /**
     * Returns the given time interval in a formatted string.
     * @param {{hour:number, minute:number,second:number,sign?: 1 | -1}} time An object in the format {hour : 23, minute :42, second: 18 }
     */
    static getTimeIntervalTextStringHeb(time: Time): string;
    /**
     * Returns the given time interval in a formatted string.
     * @param {{hour:number, minute:number,second:number,sign?: 1 | -1}} time An object in the format {hour : 23, minute :42, second: 18 }
     */
    static getTimeIntervalTextString(time: Time): string;
    /**
     * Returns the nusach for Sefiras Ha'omer for the given day and minhag
     * @param {number} dayOfOmer The day of the Omer for which to get the nusach for
     * @param {'ashkenaz'|'sefard'|'sefardi'} nusach Should it be La'Omer ("sefard") or Ba'Omer ("ashkenaz") or "sefardi" (Eidot Hamizrach)?
     */
    static getOmerNusach(dayOfOmer: number, nusach: "ashkenaz" | "sefard" | "sefardi"): string;
    /**
     * Returns the given time in a formatted string.
     * @param {Time} time An object in the format {hour : 23, minute :42, second: 18 }
     * @param {1 | -1} [sign]
     * @param {Boolean} [army] If falsey, the returned string will be: 11:42:18 PM otherwise it will be 23:42:18
     * @param {Boolean} [roundUp] If falsey, the numbers will converted to a whole number by rounding down, otherwise, up.
     */
    static getTimeString(time: Time, sign?: 1 | -1, army?: boolean, roundUp?: boolean): string;
    /** The current time in Israel - determined by the current users system time and time zone offset*/
    static getSdNowInIsrael(): Date;
    /**
     * Adds the given number of days to the given javascript date and returns the new date
     * @param {Date} sdate
     * @param {Number} days
     */
    static addDaysToSdate(sdate: Date, days: number): Date;
    /**
     * Compares two js dates to se if they both refer to the same day - time is ignored.
     * @param {Date} sdate1
     * @param {Date} sdate2
     */
    static isSameSdate(sdate1: Date, sdate2: Date): boolean;
    /**
     * Compares two jDates to se if they both refer to the same day - time is ignored.
     * @param {jDate} jdate1
     * @param {jDate} jdate2
     */
    static isSameJdate(jdate1: jDate, jdate2: jDate): boolean | 0;
    /**
     * Compares two jDates to see if they both refer to the same Jewish Month.
     * @param {jDate} jdate1
     * @param {jDate} jdate2
     */
    static isSameJMonth(jdate1: jDate, jdate2: jDate): boolean;
    /**
     * Compares two dates to se if they both refer to the same Secular Month.
     * @param {Date} sdate1
     * @param {Date} sdate2
     */
    static isSameSMonth(sdate1: Date, sdate2: Date): boolean;
    /**
     * Determines if the time of the given Date() is after sunset at the given Location
     * @param {Date} sdate
     * @param {Location} location
     */
    static isAfterSunset(sdate: Date, location: Location): boolean | undefined;
    /**
     * Gets the current Jewish Date at the given Location
     * @param {Location} location
     */
    static nowAtLocation(location: Location): jDate;
    /***
     * Takes either a jDate or a Date and returns both
     * @param date {Date |jDate}
     * @returns {{ sdate:Date, jdate:jDate }}
     */
    static bothDates(date: Date | jDate): {
        sdate: Date;
        jdate: jDate;
    };
    /** Returns true if "thing" is either a string primitive or String object.*/
    static isString(thing: unknown): thing is string | String;
    /** Returns true if "thing" is either a number primitive or a Number object.*/
    static isNumber(thing: unknown): thing is number | Number;
    /** Returns the first value unless it is undefined, null or NaN.
     *
     * This is very useful for boolean, string and integer parameters
     * where we want to keep false, "" and 0 if they were supplied.
     *
     * Similar purpose to default parameters with the difference being that this function will return
     * the second value if the first is NaN or null, while default params will give give you the NaN or the null.
     */
    static setDefault(paramValue: unknown, defValue: unknown): unknown;
    /**
     * Returns an array containing a range of integers.
     * @param {Number} [start] The number to start at. The start number is included in the results.
     * If only one argument is supplied, start will be set to 1.
     * @param {Number} end The top end of the range.
     * Unlike Pythons range function, The end number is included in the results.
     * @returns {[Number]}
     */
    static range(start: number, end?: number): number[];
    /**
     * Log message to console
     * @param {string} txt
     */
    static log(txt: string, ...optionalItems: any[]): void;
    /**
     * Warn message to console
     * @param {string} txt
     */
    static warn(txt: string, ...optionalItems: any[]): void;
    /**
     * Error message to console
     * @param {*} txt
     */
    static error(txt: string, ...optionalItems: any[]): void;
}

/**
 * Computes the daily Zmanim for any single date at any location.
 * The astronomical and mathematical calculations were directly adapted from the excellent
 * Jewish calendar calculation in C# Copyright © by Ulrich and Ziporah Greve (2005)
 */
declare class Zmanim {
    private static _sunTimesCache;
    /**
     * Gets sunrise and sunset time for given date and Location.
     * Accepts a javascript Date object, a string for creating a javascript date object or a jDate object.
     * Location object is required.
     * @returns {SunTimes}
     * @param {Date | jDate} date A Javascript Date or Jewish Date for which to calculate the sun times.
     * @param {Location} location Where on the globe to calculate the sun times for.
     * @param {Boolean} considerElevation
     */
    static getSunTimes(date: Date | jDate | string, location: Location, considerElevation?: boolean): SunTimes;
    /**
     * @param {jDate | Date} date
     * @param {Location} location
     */
    static getChatzos(date: jDate | Date, location: Location): Time;
    /**
     * @param {SunTimes} sunTimes
     */
    static getChatzosFromSuntimes(sunTimes: SunTimes): Time;
    /**
     * @param {jDate | Date} date
     * @param {Location} location
     * @param {any} offset
     */
    static getShaaZmanis(date: jDate | Date, location: Location, offset: number): number;
    /**
     * @param {{ sunrise: any; sunset: any; }} sunTimes
     * @param {number} [offset]
     */
    static getShaaZmanisFromSunTimes(sunTimes: SunTimes, offset?: number): number;
    /**
     * @param {{ sunrise: any; sunset: any; }} sunTimes
     * @param {boolean} israel
     */
    static getShaaZmanisMga(sunTimes: SunTimes, israel: boolean): number;
    /**
     * @param {jDate | Date} date
     * @param {Location} location
     */
    static getCandleLighting(date: Date | jDate, location: Location): Time | undefined;
    /**
     * @param {SunTimes} sunTimes
     * @param {any} location
     */
    static getCandleLightingFromSunTimes(sunTimes: SunTimes, location: Location): Time | undefined;
    /**
     * @param {Time} sunset
     * @param {Location} location
     */
    static getCandleLightingFromSunset(sunset: Time, location: Location): Time | undefined;
    /**
     * @param {Date} date
     */
    static dayOfYear(date: Date): number;
    /**
     * @param {number} deg
     * @param {number} min
     */
    static degToDec(deg: number, min: number): number;
    /**
     * @param {number} x
     */
    static M(x: number): number;
    /**
     * @param {number} x
     */
    static L(x: number): number;
    /**
     * @param {number} x
     */
    static adj(x: number): number;
    /**
     * @param {number} rad
     */
    static radToDeg(rad: number): number;
    /**
     * @param {number} time
     * @param {Date} date
     * @param {Location} location
     */
    static timeAdj(time: number, date: Date, location: Location): Time;
}

/**
 * NOTE: South and East are negative.
 */
type Point = {
    latitude: number;
    longitude: number;
};
declare const Locations: Location[];
/**
 * Find the Location (city) that is the closest to the given point of coordinates.
 * @param {Point} point
 * @returns
 */
declare function closestDistanceMatch(point: Point): Location | undefined;
/**
 * Find the Location (city) who's city name is the closest match to the given point of coordinates.
 * @param {string} val
 * @returns
 */
declare function closestNameMatch(val: string): Location | undefined;
/**
 * Option 1: Find a location with the given name
 * Option 2: Find the location with the name that is most similar to the given name
 * Option 3: Find the Location with the given coordinates
 * Option 4: Find the location closest to the given coordinates
 * @param {String|Point} nameOrCoordinates
 */
declare function findLocation(nameOrCoordinates: string | Point): Location | undefined;

/**
 * List of ZmanTypeIds. Use as an enum.
 */
declare const ZmanTypeIds: Readonly<{
    ChatzosLayla: 0;
    Alos90: 1;
    Alos72: 2;
    TalisTefillin: 3;
    NetzAtElevation: 4;
    NetzMishor: 5;
    szksMga: 6;
    szksGra: 7;
    sztMga: 8;
    sztGra: 9;
    chatzosDay: 10;
    minGed: 11;
    minKet: 12;
    plag: 13;
    shkiaAtSeaLevel: 14;
    shkiaElevation: 15;
    tzais45: 16;
    tzais50: 17;
    tzais72: 18;
    rabbeinuTamZmanios: 19;
    rabbeinuTamZmaniosMga: 20;
    candleLighting: 21;
    SofZmanEatingChometz: 22;
    SofZmanBurnChometz: 23;
}>;
/**
 * List of Zman Types. Used to acquire the Zmanim for a particular day.
 *
 * An array of objects representing different Zmanim (Jewish halachic times).
 * Each object contains the following properties:
 * - `id`: A unique identifier for the Zman.
 * - `desc`: A description of the Zman in Hebrew.
 * - `eng`: The English translation of the Zman.
 * - `heb`: The Hebrew name of the Zman.
 *
 * The Zmanim included are:
 * - Chatzos Layla (Midnight)
 * - Alos Hashachar (Dawn) - 90 minutes
 * - Alos Hashachar (Dawn) - 72 minutes
 * - Taliss and Tefillin (36 minutes)
 * - Sunrise at current elevation
 * - Sunrise at sea level
 * - Zman Krias Shma according to MG"A
 * - Zman Krias Shma according to GR"A
 * - Zman Tefilla according to MG"A
 * - Zman Tefilla according to GR"A
 * - Chatzos (Midday)
 * - Mincha Gedola
 * - Mincha Ketana
 * - Plag HaMincha
 * - Sunset at sea level
 * - Sunset at current elevation
 * - Nightfall (45 minutes after sunset)
 * - Nightfall (50 minutes after sunset)
 * - Rabbeinu Tam (72 minutes after sunset)
 * - Rabbeinu Tam - Zmanios
 * - Rabbeinu Tam - Zmanios MG"A
 * - Candle lighting time
 * - Stop eating Chometz
 * - Destroy Chometz
 */
declare const ZmanTypes: ZmanToShow[];
/**
 * Get the ZmanType with the given id, name (Hebrew or English) or description.
 * @param {number|string} idOrName
 * @returns {ZmanToShow}
 */
declare function getZmanType(idOrName: number | string): ZmanToShow | undefined;

/**
 * Gets the molad for the given jewish month and year.
 * Algorithm was adapted from Hebcal by Danny Sadinoff
 *
 * Example of use:
 * const moladString = Molad.getString(5776, 10);
 */
declare class Molad {
    /**
     * @param {Number} month
     * @param {Number} year
     * @returns {{jDate:jDate,time:Time,chalakim:number}}
     */
    static getMolad(month: number, year: number): {
        jDate: jDate;
        time: Time;
        chalakim: number;
    };
    /**
     * Returns the time of the molad as a string in the format: Monday Night, 8:33 PM and 12 Chalakim
     * The molad is always in Jerusalem so we use the Jerusalem sunset times
     * to determine whether to display "Night" or "Motzai Shabbos" etc. (check this...)
     * @param {Number} year
     * @param {Number} month
     */
    static getString(year: number, month: number): string;
    /**
     * Returns the time of the molad as a string in the format: ליל שני 20:33 12 חלקים
     * The molad is always in Jerusalem so we use the Jerusalem sunset times
     * to determine whether to display "ליל/יום" or "מוצאי שב"ק" etc.
     * @param {Number} year
     * @param {Number} month
     */
    static getStringHeb(year: number, month: number): string;
}

/****************************************************************************************************************
 * Computes the Perek/Prakim of the week for the given Shabbos.
 * Returns an array of prakim (integers) (either one or two) for the given Jewish Date
 * Sample of use to get todays sedra in Israel:
 *     const prakim = PirkeiAvos.getPrakim(new jDate(), true);
 *     const str = 'Pirkei Avos: ' + prakim.map(s => `${Utils.toSuffixed(s)} Perek`).join(' and ');
 * ***************************************************************************************************************/
declare class PirkeiAvos {
    static getPrakim(jd: jDate, israel: boolean): number[];
    static _get1stPerek: (jd: jDate, israel: boolean) => number;
    static _ellul: (jd: jDate, israel: boolean) => number[];
}

/** *********************************************************************************************************
 * Computes the Day Yomi for the given day.
 * Sample of use - to get todays daf:
 *     const dafEng = Dafyomi.toString(jDate.now());
 *     const dafHeb = Dafyomi.toStringHeb(jDate.now());
 * The code was converted to typescript and tweaked by CBS.
 * It is directly based on the C code in Danny Sadinoff's HebCal - Copyright (C) 1994.
 * The HebCal code for dafyomi was adapted by Aaron Peromsik from Bob Newell's public domain daf.el.
***********************************************************************************************************/
declare class Dafyomi {
    static masechtaList: {
        eng: string;
        heb: string;
        daf: number;
    }[];
    static getDaf(jdate: jDate): {
        masechet: {
            eng: string;
            heb: string;
            daf: number;
        };
        daf: number;
    } | null;
    static toString(jd: jDate): string | undefined;
    static toStringHeb(jd: jDate): string | undefined;
}

type ZmanTime = {
    date: Date;
    location: Location;
    sunrise: Time | undefined;
    sunset: Time | undefined;
    suntimesMishor: SunTimes | undefined;
    sunriseMishor: Time | undefined;
    sunsetMishor: Time | undefined;
    mishorNeg90: Time | undefined;
    chatzos: Time | undefined;
    shaaZmanis: number | undefined;
    shaaZmanisMga: number | undefined;
};
declare class ZmanimUtils {
    static zmanTimesCache: Map<string, ZmanTime>;
    /**
     * Gets the zmanim for all the types in the given list.
     * @param {[ZmanToShow]} zmanTypes An array of ZmanTypes to get the zman for.
     * @param {Date} date The secular date to get the zmanim for
     * @param {jDate} jdate The jewish date to get the zmanim for
     * @param {Location} location The location for which to get the zmanim
     * @returns{[{zmanType:{id:number,offset:?number,desc:string,eng:string,heb:string },time:Time}]}
     */
    static getZmanTimes(zmanTypes: ZmanToShow[], date: Date, jdate: jDate, location: Location): {
        zmanType: ZmanToShow;
        time?: Time;
    }[];
    /**
     * Get the WhichDaysFlags for the given secular date
     * @param {Date} date
     * @param {jDate} jdate
     * @param {Location} location
     */
    static getWhichDays(date: Date, jdate: jDate, location: Location): 2 | 0 | 1 | 8 | 4 | 16 | 32 | 64 | 128;
    /**
     * Returns the zmanim necessary for showing basic shul notifications: chatzosHayom, chatzosHalayla, alos
     * @param {jDate|Date} date
     * @param {Location} location
     * @returns {{chatzosHayom:Time, chatzosHalayla:Time, alos:Time, shkia:Time }}
     */
    static getBasicShulZmanim(date: jDate | Date, location: Location): {
        chatzosHayom: Time | undefined;
        chatzosHalayla: Time | undefined;
        alos: Time | undefined;
        shkia: Time | undefined;
    };
    /**
    * Returns all the zmanim for the given day
    * @param {Date|jDate} date
    * @param {Location} location
    * @returns {{zmanType:ZmanToShow, time?:Time }[]}
    */
    static getAllZmanim(date: jDate | Date, location: Location): {
        zmanType: ZmanToShow;
        time?: Time;
    }[];
}

/**
 * Get shul notifications for the given date and location
 * @param date
 * @param time
 * @param location
 * @param english
 * @param showGaonShir
 * @param showDafYomi
 * @returns {{ dayNotes: string[], tefillahNotes: string[]}}
 */
declare function getNotifications(date: jDate | Date, time: Time, location: Location, english: boolean, showGaonShir?: boolean, showDafYomi?: boolean): {
    dayNotes: string[];
    tefillahNotes: string[];
};

export { Dafyomi, DaysOfWeek, DaysOfWeekEng, DaysOfWeekHeb, JewishMonthsEng, JewishMonthsHeb, JewishMonthsNames, Location, Locations, Molad, PirkeiAvos, SecularMonthsEng, Sedra, type ShulZmanimType, type SunTimes, type Time, Utils, type ZmanTime$1 as ZmanTime, type ZmanToShow, ZmanTypeIds, ZmanTypes, Zmanim, ZmanimUtils, closestDistanceMatch, closestNameMatch, findLocation, getNotifications, getZmanType, jDate };
