//#region src/ts-utils.d.ts
type GrowToSize<T, N extends number, A extends T[]> = A["length"] extends N ? A : GrowToSize<T, N, [...A, T]>;
type FixedArray<T, N extends number> = GrowToSize<T, N, []>;
type LessThan<TNumber extends number, TArray extends unknown[] = []> = TNumber extends TArray["length"] ? TArray[number] : LessThan<TNumber, [...TArray, TArray["length"]]>;
//#endregion
//#region src/lists/types.d.ts
interface RiwayaFullData {
  HizbEighthList?: AyahId[];
  HizbQuarterList: AyahId[];
  JuzList: AyahId[];
  ManzilList: AyahId[];
  PageList: AyahId[];
  RukuList: AyahId[];
  SajdaList: AyahId[];
  SurahList: FixedArray<SurahInfo, 116>;
  meta: QuranMeta;
}
type RiwayasNames = ["Hafs", "Qalun", "Warsh"];
type RiwayaName = RiwayasNames[number];
interface MissingListsPerRiwaya {
  Hafs: ["HizbEighthList"];
  Qalun: [];
  Warsh: [];
}
type Riwayas = { [k in RiwayaName]: Omit<RiwayaFullData, MissingListsPerRiwaya[k][number]> & {
  meta: QuranMeta;
} };
type RiwayaData = Riwayas[RiwayaName];
declare const partNames: readonly ["surah", "juz", "rubAlHizb", "thumunAlHizb", "page", "manzil", "ruku"];
type PartType = (typeof partNames)[number];
//#endregion
//#region src/types.d.ts
/**
 * The maximum number of ayahs (verses) that can exist in any surah (chapter) of the Quran.
 * This maximum occurs in Surah Al-Baqarah (2), which has 286 ayahs.
 */
declare const maxAyahsInSurah = 286;
/**
 * Total number of surahs (chapters) in the Quran.
 * This is constant across all riwayas.
 */
declare const numSurahs = 114;
/**
 * Number of Rub al-Hizbs (quarters) in each Juz.
 * This is constant across all riwayas.
 */
declare const numRubsInJuz = 8;
/**
 * Default metadata for the Quran (uses Hafs riwaya as default).
 *
 * @remarks
 * Hafs metadata includes:
 * - 6236 ayahs (verses)
 * - 114 surahs (chapters)
 * - 604 pages
 * - 30 juzs (parts)
 * - 60 hizbs (sections)
 * - 240 rub al-hizbs (quarters)
 * - 0 thumun al-hizbs (eighths) - not used in Hafs
 * - 15 sajdas (prostrations)
 * - 556 rukus
 * - 7 manzils
 *
 * @example
 * ```typescript
 * import { meta } from 'quran-meta/hafs'
 * console.log(meta.numAyahs)  // 6236
 * ```
 */
/**
 * Riwaya-specific metadata type.
 * For tree-shakeable imports, use specific entry points:
 * - 'quran-meta/hafs' for Hafs only
 * - 'quran-meta/qalun' for Qalun only
 * - 'quran-meta/warsh' for Warsh only
 *
 * @example
 * ```typescript
 * import { meta } from 'quran-meta/hafs'  // Only Hafs data bundled
 * import { meta } from 'quran-meta/qalun' // Only Qalun data bundled
 * ```
 */
/**
 * Represents the complete metadata structure for Quranic information.
 * Contains counts for all structural divisions of the Quran.
 *
 * @remarks
 * Different riwayas may have different values for these properties.
 * Most notably, Qalun has 6214 ayahs while Hafs has 6236 ayahs.
 *
 * @example
 * ```typescript
 * import { meta, riwayaMeta } from 'quran-meta'
 *
 * // Hafs metadata (default)
 * console.log(meta.numAyahs)  // 6236
 *
 * // Qalun metadata
 * console.log(riwayaMeta.Qalun.numAyahs)  // 6214
 * ```
 */
interface QuranMeta {
  /** Name of the riwaya (recitation tradition) */
  riwayaName: RiwayaName;
  /** Total number of ayahs (verses) in this riwaya */
  numAyahs: number;
  /** Total number of surahs (chapters) - always 114 */
  numSurahs: number;
  /** Total number of pages - typically 604 */
  numPages: number;
  /** Total number of juzs (parts) - always 30 */
  numJuzs: number;
  /** Total number of hizbs (sections) - always 60 */
  numHizbs: number;
  /** Total number of rub al-hizbs (quarters) - always 240 */
  numRubAlHizbs: number;
  /** Total number of thumun al-hizbs (eighths) - 0 for Hafs, 480 for Qalun */
  numThumunAlHizbs: number;
  /** Number of rubs (quarters) in each juz - always 8 */
  numRubsInJuz: number;
  /** Total number of sajdas (prostrations) - varies by riwaya */
  numSajdas: number;
  /** Total number of rukus (sections) - varies by riwaya */
  numRukus: number;
  /** Total number of manzils (7-day reading divisions) - always 7 */
  numManzils: number;
}
/**
 * Creates a type representing a range of numbers from TStart to TEnd (inclusive).
 *
 * @typeParam TStart - The starting number of the range
 * @typeParam TEnd - The ending number of the range
 *
 *
 * @remarks
 * This type uses the Exclude utility type along with a LessThan helper type
 * to generate a union of all numbers within the specified range.
 */
type NumericRange<TStart extends number, TEnd extends number> = Exclude<TEnd | LessThan<TEnd>, LessThan<TStart>>;
/**
 * Represents a valid Surah number in the Quran.
 * A type that ensures the number is within the valid range of Surahs (1 to 114).
 */
type Surah = NumericRange<1, typeof numSurahs>;
/**
 * Represents the number of an ayah (verse) within a surah.
 * Valid values are between 1 and the maximum number of ayahs in any surah.
 *
 */
type AyahNo = NumericRange<1, typeof maxAyahsInSurah>;
/**
 * Represents a valid thumun al-Hizb (Eighth of a Hizb) identifier.
 * The value must be a number between 1 and 480 (maximum across all riwayas).
 * Uses 1-based indexing where 1 is the first thumun al-hizb.
 *
 * @remarks
 * - Hafs: 0 ThumunAlHizbs (not supported)
 * - Qalun: 480 ThumunAlHizbs
 */
type ThumunAlHizbId = NumericRange<1, 480>;
/**
 * Represents a valid Rub al-Hizb (quarter of a Hizb) identifier.
 * The value must be a number between 1 and 240 (consistent across all riwayas).
 * Uses 1-based indexing where 1 is the first rub al-hizb.
 */
type RubAlHizbId = NumericRange<1, 240>;
/**
 * Represents a valid Hizb number in the Quran.
 * A Hizb is one of 60 equal divisions of the Quran.
 * Uses 1-based indexing where 1 is the first hizb.
 */
type HizbId = NumericRange<1, 60>;
/**
 * Represents a numeric identifier for an Ayah (verse) in the Quran.
 * The value should be between 0 and the total number of Ayahs.
 */
type AyahId = number;
/**
 * Represents a valid page number within the Quran.
 * Uses 1-based indexing where 1 is the first page (typically 604 pages total).
 */
type Page = NumericRange<1, 604>;
/**
 * Represents a Manzil number in the Quran.
 * A Manzil is one of seven roughly equal parts of the Quran used for sequential reading over seven days.
 * Uses 1-based indexing where 1 is the first manzil (1-7).
 */
type Manzil = NumericRange<1, 7>;
/**
 * A type representing a valid Ruku (section) number in the Quran.
 * Uses 1-based indexing where 1 is the first ruku (typically 556 rukus in Hafs).
 */
type Ruku = NumericRange<1, 556>;
/**
 * Represents a Juz (part) number in the Quran.
 * The Quran is traditionally divided into 30 Juzs for ease of recitation and memorization.
 * Uses 1-based indexing where 1 is the first juz (1-30).
 */
type Juz = NumericRange<1, 30>;
/**
 * Represents a part (rub') number within a Juz.
 * A numeric value ranging from 1 to the total number of rub's (quarters) in a Juz.
 * A number constrained between 1 and the total number of rub's in a Juz
 */
type JuzPart = NumericRange<1, typeof numRubsInJuz>;
type SurahInfo = [startAyahId: AyahId, ayahCount: AyahNo, surahOrder: Surah, rukuCount: Ruku, name: string, isMeccan: boolean];
type SurahListType = FixedArray<SurahInfo, 116>;
type SurahName = [name: string, translitName: string];
interface RangeMeta {
  firstAyahId: AyahId;
  lastAyahId: AyahId;
  first: SurahAyah;
  last: SurahAyah;
}
/**
 * Represents the structure of a Juz and Hizb combination in the Quran
 */
interface ThumunAlHizb {
  juz: Juz;
  juzPart: JuzPart;
  hizbId: HizbId;
  rubAlHizbId: RubAlHizbId;
  thumunAlHizbId: ThumunAlHizbId;
}
type ThumunAlHizbMeta = ThumunAlHizb & RangeMeta;
/**
 * Represents the structure of a Juz and Hizb combination in the Quran
 */
interface RubAlHizb {
  juz: Juz;
  juzPart: JuzPart;
  hizbId: HizbId;
  rubAlHizbId: RubAlHizbId;
}
type RubAlHizbMeta = RubAlHizb & RangeMeta;
type SurahAyah = [Surah, AyahNo];
type AyahRange = [AyahId, AyahId];
type SurahAyahSegment = [Surah, AyahNo | [AyahNo, AyahNo]];
type SurahMeta = {
  name: string;
  surahNum: Surah;
  ayahCount: AyahNo;
  surahOrder: Surah;
  rukuCount: Ruku;
  isMeccan: boolean;
} & RangeMeta;
type PageMeta = {
  pageNum: Page;
} & RangeMeta;
type ManzilMeta = {
  manzilNum: Manzil;
} & RangeMeta;
type JuzMeta = {
  juzNum: Juz;
} & RangeMeta;
type RukuMeta = {
  rukuNum: Ruku;
} & RangeMeta;
type AyahCountBetweenJuzSurah = NumericRange<0, typeof maxAyahsInSurah>;
interface SurahJuzMeta {
  leftjuz: Juz;
  ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah;
  rightJuz: Juz;
  leftAyahId: AyahId;
  rightAyahId: AyahId;
}
type RangeMode = "juz" | "surah" | "ayah" | "page" | "ruku" | "all";
interface SurahAyahPos {
  surah: Surah;
  ayah: AyahNo;
}
interface AyahMeta extends SurahAyahPos {
  juz: Juz;
  juzPart: JuzPart;
  hizbId: HizbId;
  rubAlHizbId: RubAlHizbId;
  thumunAlHizbId?: ThumunAlHizbId;
  page: Page;
  ruku: Ruku;
  isStartOfQuarter: boolean;
  isEndOfQuarter: boolean;
  isSajdahAyah: boolean;
  isStartOfPage: boolean;
  isEndOfPage: boolean;
  isStartOfJuz: boolean;
  isEndOfJuz: boolean;
  isStartOfSurah: boolean;
  isEndOfSurah: boolean;
  isStartOfRuku: boolean;
  isEndOfRuku: boolean;
}
//#endregion
//#region src/lists/getList.d.ts
/**
 * Represents a block or section of the Quran with its starting ayah and length
 * startAyahId - The identifier of the first ayah in the block
 * ayahCount - The number of ayahs contained in this block
 */
interface PartBlock {
  startAyahId: AyahId;
  ayahCount: AyahId | AyahNo;
}
//#endregion
//#region src/typeGuards.d.ts
/**
 * Checks if the given value is a valid Ayah number.
 *
 * @param x - The value to check.
 * @returns True if the value is a valid Ayah number, otherwise false.
 */
declare function isValidAyahNo(x: unknown): x is AyahNo;
//#endregion
//#region src/QuranRiwaya.d.ts
/**
 * QuranRiwaya class provides a clean API for Quran metadata operations
 * with a specific riwaya (recitation tradition) context.
 *
 * Currently provides basic Surah and Ayah operations. For advanced features
 * like Juz, Page, Manzil, RubAlHizb, etc., use the functional API directly.
 *
 * @example
 * **Basic Usage with Hafs**
 * ```typescript
 * import { quran } from 'quran-meta/hafs'
 *
 * const surahMeta = quran.getSurahMeta(2)  // Get Al-Baqarah metadata
 * const ayahCount = quran.getAyahCountInSurah(2)  // 286 ayahs
 * const [surah, ayah] = quran.findSurahAyahByAyahId(100)  // [2, 93]
 * ```
 *
 * @example
 * **Working with Qalun**
 * ```typescript
 * import { quran } from 'quran-meta/qalun'
 *
 * const meta = quran.meta
 * console.log(meta.numAyahs)  // 6214 (Qalun has fewer ayahs than Hafs)
 * ```
 *
 * @example
 * **Creating a custom instance**
 * ```typescript
 * import { QuranRiwaya } from 'quran-meta'
 * import { WarshMeta, WarshLists } from 'quran-meta/lists/WarshLists'
 *
 * const warsh = QuranRiwaya.create(WarshLists)
 * ```
 */
declare class QuranRiwaya<R extends RiwayaName = "Hafs"> {
  #private;
  private constructor();
  /**
   * Create a QuranRiwaya instance with the specified riwaya, metadata, and lists
   * @param riwaya - The riwaya name ("Hafs", "Qalun", or "Warsh")
   * @param meta - The metadata for this riwaya
   * @param rData - The Lists object for this riwaya
   */
  static create<R extends RiwayaName>(rData: Riwayas[R]): QuranRiwaya<R>;
  /**
   * Gets the metadata for the specified Surah
   */
  getSurahMeta(surahNum: Surah): SurahMeta;
  ayahStringSplitter(str: string, isStrict?: boolean): SurahAyahSegment;
  /**
   * Gets the surah info array [firstAyahId, ayahCount, surahOrder, rukuCount, name, isMeccan]
   */
  getSurahInfo(surah: Surah): SurahInfo;
  /**
   * Gets the count of ayahs in a surah
   */
  getAyahCountInSurah(surah: Surah): number;
  /**
   * Finds the surah number for a given ayah ID
   */
  findSurahByAyahId(ayahId: AyahId): Surah;
  /**
   * Finds the [surah, ayah] tuple for a given ayah ID
   */
  findSurahAyahByAyahId(ayahId: AyahId): SurahAyah;
  /**
   * Finds the ayah ID for a given surah and ayah number
   */
  findAyahIdBySurah(surah: Surah, ayah: AyahNo): AyahId;
  generatePartBlocks<P extends PartType>(type: P): PartBlock[] | null;
  getList<P extends PartType>(type: P): number[] | [SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo];
  getListNormalised<P extends PartType>(type: P): PartBlock[];
  /**
   * Gets the next ayah after the given surah and ayah
   */
  nextAyah(surah: Surah, ayah: AyahNo): SurahAyah;
  /**
   * Gets the previous ayah before the given surah and ayah
   */
  prevAyah(surah: Surah, ayah: AyahNo): SurahAyah;
  /**
   * Finds the juz number for a given surah and ayah
   */
  findJuz(surah: Surah, ayah?: AyahNo): Juz;
  /**
   * Finds the juz number for a given ayah ID
   */
  findJuzByAyahId(ayahId: AyahId): Juz;
  /**
   * Finds the page number for a given surah and ayah
   */
  findPage(surah: Surah, ayah?: AyahNo): Page;
  /**
   * Finds the page number for a given ayah ID
   */
  findPagebyAyahId(ayahId: AyahId): Page;
  /**
   * Gets metadata for a specific page
   */
  getPageMeta(pageNum: Page): PageMeta;
  /**
   * Finds the manzil number for a given surah and ayah
   */
  findManzil(surah: Surah, ayah?: AyahNo): Manzil;
  /**
   * Finds the manzil number for a given ayah ID
   */
  findManzilByAyahId(ayahId: AyahId): Manzil;
  /**
   * Gets metadata for a specific manzil
   */
  getManzilMeta(manzilNum: number): ManzilMeta;
  /**
   * Finds the ruku number for a given ayah ID
   */
  findRukuByAyahId(ayahId: AyahId): Ruku;
  /**
   * Gets metadata for a specific ruku
   */
  getRukuMeta(rukuNum: number): RukuMeta;
  /**
   * Gets metadata for a specific juz
   */
  getJuzMeta(juzNum: Juz): JuzMeta;
  /**
   * Finds juz metadata for a given surah and ayah
   */
  findJuzMetaBySurah(surah: Surah, ayah?: AyahNo): SurahJuzMeta;
  /**
   * Finds juz and calculates shift between juz start and surah start
   */
  findJuzAndShift(surah: Surah, ayah: AyahNo): {
    juz: Juz;
    leftAyahId: AyahId;
    ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah;
  };
  /**
   * Finds juz and shift for a given ayah ID
   */
  findJuzAndShiftByAyahId(ayahId: AyahId): {
    juz: Juz;
    leftAyahId: AyahId;
    ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah;
  };
  /**
   * Finds the RubAlHizb for a given surah and ayah
   */
  findRubAlHizb(surah: Surah, ayah?: AyahNo): RubAlHizbId;
  /**
   * Finds the RubAlHizb ID for a given ayah ID
   */
  findRubAlHizbByAyahId(ayahId: AyahId): RubAlHizbId;
  /**
   * Gets RubAlHizb data (juz, hizb, etc.) for a given ayah ID
   */
  getRubAlHizbByAyahId(ayahId: AyahId): RubAlHizb;
  /**
   * Gets RubAlHizb data (juz, hizb, etc.) for a given ayah ID
   */
  getRubAlHizb(quarterIndex: RubAlHizbId): RubAlHizb;
  /**
   * Gets complete RubAlHizb metadata for a given ayah ID
   */
  getRubAlHizbMetaByAyahId(ayahId: AyahId): RubAlHizbMeta;
  /**
   * Gets metadata for a specific RubAlHizb
   */
  getRubAlHizbMeta(quarterIndex: RubAlHizbId): RubAlHizbMeta;
  /**
   * Finds the ThumunAlHizb ID for a given ayah ID (Qalun/Warsh only)
   */
  findThumunAlHizbByAyahId(ayahId: AyahId): ThumunAlHizbId | null;
  /**
   * Finds the ThumunAlHizb ID for a given ayah ID (Qalun/Warsh only)
   */
  findThumunAlHizb(surah: Surah, ayah?: AyahNo): ThumunAlHizbId | null;
  /**
   * Gets metadata for a specific ThumunAlHizb (Qalun/Warsh only)
   */
  getThumunAlHizbMeta(eighthIndex: ThumunAlHizbId): ThumunAlHizbMeta | null;
  getThumunAlHizbByAyahId(ayahId: AyahId): ThumunAlHizb | null;
  getThumunAlHizbMetaByAyahId(ayahId: AyahId): ThumunAlHizb | null;
  getThumunAlHizb(eighthIndex: ThumunAlHizbId): ThumunAlHizb | null;
  /**
   * Gets comprehensive metadata for a specific ayah
   */
  getAyahMeta(ayahId: AyahId): AyahMeta;
  /**
   * Gets metadata for all ayahs in a surah
   */
  getAyahMetasForSurah(surahNumber: Surah): AyahMeta[];
  /**
   * Finds the range of ayahs around a given ayah
   */
  findRangeAroundAyah(ayahId: AyahId, mode: RangeMode): AyahRange;
  /**
   * Finds the range of ayahs around a given surah and ayah
   */
  findRangeAroundSurahAyah(surah: Surah, ayah: AyahNo, mode: RangeMode): AyahRange;
  /**
   * Checks if an ayah is the first ayah of a juz
   */
  isAyahJuzFirst(ayahId: AyahId): Juz | number;
  /**
   * Checks if an ayah is the first ayah of a page
   */
  isAyahPageFirst(ayahId: AyahId): Page | number;
  /**
   * Checks if a surah-ayah combination is the first ayah of a juz
   */
  isSurahAyahJuzFirst(surah: Surah, ayah: AyahNo): Juz | number;
  /**
   * Checks if a surah-ayah combination is the first ayah of a page
   */
  isSurahAyahPageFirst(surah: Surah, ayah: AyahNo): Page | number;
  isValidAyahId(x: unknown): x is AyahId;
  isValidPage(x: unknown): x is Page;
  isValidSurah(x: unknown): x is Surah;
  isValidJuz(x: unknown): x is Juz;
  isValidRuku(x: unknown): x is Ruku;
  isValidSurahAyah(x: [unknown, unknown]): x is SurahAyah;
  static isValidAyahNo(x: unknown): x is AyahNo;
  surahStringParser(str: string, isStrict?: boolean): Page | number;
  static string2NumberSplitter(str: string): {
    ayah?: number;
    ayahTo?: number;
    surahOrAyah?: number;
  } | null;
  /**
   * Gets the riwaya name
   */
  get riwayaName(): R;
  /**
   * Gets the metadata for this riwaya
   */
  get meta(): QuranMeta;
  /**
   * Gets the metadata for this riwaya
   */
  get lists(): Riwayas[R];
}
//#endregion
//#region src/getRubAlHizb.d.ts
/**
 * Retrieves the basic metadata for a specific quarter (rub' al-hizb) of the Quran.
 *
 * @param quarterIndex - The index of the quarter (rub' al-hizb) to retrieve metadata for, where 1 is the first quarter.
 *  @param riwaya - The riwaya. Defaults to "Hafs" if not provided.
 * @returns An object containing the metadata for the specified quarter, including the juz' (part), hizb (section), and the quarter (rub' al-hizb) index.
 */
declare function getRubAlHizb(quarterIndex: RubAlHizbId): RubAlHizb;
//#endregion
//#region src/ayahStringSplitter.d.ts
/**
 * Splits a string containing surah and ayah numbers into their numeric components.
 *
 * @param str - Input string containing numbers separated by non-digits (e.g., "2:255" or "2 255" or "2-255")
 * @returns An object containing the parsed numbers, or null if parsing fails
 *          - ayah: The ayah number if present
 *          - ayahTo: The ending ayah number if a range is specified
 *          - surahOrAyah: The surah number
 * @example
 * stringNumberSplitter("2:255") // returns \{ ayah: 255, ayahTo: 0, surahOrAyah: 2 \}
 * stringNumberSplitter("2:255-260") // returns \{ ayah: 255, ayahTo: 260, surahOrAyah: 2 \}
 * stringNumberSplitter("invalid") // returns null
 */
declare function string2NumberSplitter(str: string): {
  ayah?: number;
  ayahTo?: number;
  surahOrAyah?: number;
} | null;
/**
 * Splits a string in the format "surah:ayah" or "surah:ayah-ayah" into its numeric components.
 *
 * @param str - The input string to parse in the format "surah:ayah" or "surah:ayah-ayah"
 * @returns An object containing the parsed numbers:
 *          - surahOrAyah: The surah number
 *          - ayah: The first or only ayah number
 *          - ayahTo: The ending ayah number (if range specified)
 * @throws {@link Error} When the input string format is invalid or contains non-numeric values
 *
 * @example
 * string2NumberSplitterStrict("2:255")    // returns \{ surahOrAyah: 2, ayah: 255, ayahTo: NaN \}
 * string2NumberSplitterStrict("2:255-260") // returns \{ surahOrAyah: 2, ayah: 255, ayahTo: 260 \}
 */
declare function string2NumberSplitterStrict(str: string): {
  ayah?: number;
  ayahTo?: number;
  surahOrAyah?: number;
} | null;
//#endregion
//#region src/qalun.d.ts
/**
 * Qalun metadata
 */
declare const riwayaLists: RiwayaData;
declare const getList: (listName: PartType) => number[] | [SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo];
declare const getListNormalised: (listName: PartType) => PartBlock[];
declare const meta: QuranMeta;
/**
 * Qalun Lists (SurahList, JuzList, etc.)
 */
declare const HizbQuarterList: number[];
declare const JuzList: number[];
declare const ManzilList: number[];
declare const PageList: number[];
declare const SurahList: [SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo, SurahInfo];
declare const RukuList: number[];
declare const SajdaList: number[];
declare const ayahStringSplitter: (str: string, isStrict?: boolean) => SurahAyahSegment;
declare const surahStringParser: (str: string, isStrict?: boolean) => Surah;
declare const checkValidSurahAyah: (surah: Surah | number | unknown, ayah: number | AyahNo | unknown) => void;
declare const checkValidSurah: (surah: Surah | number | unknown) => void;
declare const checkValidSurahAyahPair: (pair: [unknown, unknown]) => void;
declare const checkValidAyahId: (ayahId: unknown) => void;
declare const checkValidPage: (page: unknown) => void;
declare const checkValidJuz: (juz: unknown) => void;
declare const checkValidRuku: (ruku: unknown) => void;
declare const checkValidManzil: (manzil: unknown) => void;
declare const getSurahMeta: (surah: Surah) => SurahMeta;
declare const getSurahInfo: (surah: Surah) => SurahInfo;
declare const getAyahCountInSurah: (surah: Surah) => AyahNo;
declare const findAyahIdBySurah: (surah: Surah, ayah?: AyahNo) => number;
declare const findSurahByAyahId: (ayahId: AyahId) => Surah;
declare const findSurahAyahByAyahId: (ayahId: AyahId) => SurahAyah;
declare const nextAyah: (surah: Surah, ayah: AyahNo) => SurahAyah;
declare const prevAyah: (surah: Surah, ayah: AyahNo) => SurahAyah;
declare const findJuz: (surah: Surah, ayah?: AyahNo) => Juz;
declare const findJuzByAyahId: (ayahId: AyahId) => Juz;
declare const getJuzMeta: (juz: Juz) => JuzMeta;
declare const findJuzMetaBySurah: (surah: Surah, ayah?: AyahNo) => SurahJuzMeta;
declare const findJuzAndShift: (surah: Surah, ayah?: AyahNo) => {
  juz: Juz;
  leftAyahId: AyahId;
  ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah;
};
declare const findJuzAndShiftByAyahId: (ayahId: AyahId) => {
  juz: Juz;
  leftAyahId: AyahId;
  ayahsBetweenJuzSurah: AyahCountBetweenJuzSurah;
};
declare const findPage: (surah: Surah, ayah?: AyahNo) => Page;
declare const findPagebyAyahId: (ayahId: AyahId) => Page;
declare const getPageMeta: (page: Page) => PageMeta;
declare const findManzil: (surah: Surah, ayah?: AyahNo) => Manzil;
declare const findManzilByAyahId: (ayahId: AyahId) => Manzil;
declare const getManzilMeta: (manzil: Manzil) => ManzilMeta;
declare const findRukuByAyahId: (ayahId: AyahId) => Ruku;
declare const getRukuMeta: (ruku: Ruku) => RukuMeta;
declare const findRubAlHizb: (surah: Surah, ayah?: AyahNo) => RubAlHizbId;
declare const findRubAlHizbByAyahId: (ayahId: AyahId) => RubAlHizbId;
declare const getRubAlHizbMeta: (quarterIndex: RubAlHizbId) => RubAlHizbMeta;
declare const getRubAlHizbMetaByAyahId: (ayahId: AyahId) => RubAlHizbMeta;
declare const getRubAlHizbByAyahId: (ayahId: AyahId) => RubAlHizb;
declare const findThumunAlHizb: (surah: Surah, ayah?: AyahNo) => ThumunAlHizbId;
declare const findThumunAlHizbByAyahId: (ayahId: AyahId) => ThumunAlHizbId;
declare const getThumunAlHizb: (quarterIndex: ThumunAlHizbId) => ThumunAlHizb;
declare const getThumunAlHizbByAyahId: (ayahId: AyahId) => ThumunAlHizb;
declare const getThumunAlHizbMeta: (quarterIndex: ThumunAlHizbId) => ThumunAlHizbMeta;
declare const getThumunAlHizbMetaByAyahId: (ayahId: AyahId) => ThumunAlHizbMeta;
declare const getAyahMeta: (ayahId: AyahId) => AyahMeta;
declare const getAyahMetasForSurah: (surah: Surah) => AyahMeta[];
declare const findRangeAroundAyah: (ayahId: AyahId, mode: RangeMode) => AyahRange;
declare const findRangeAroundSurahAyah: (surah: Surah, ayah: AyahNo, mode: RangeMode) => AyahRange;
declare const isAyahJuzFirst: (ayahId: AyahId) => number;
declare const isAyahPageFirst: (ayahId: AyahId) => number;
declare const isSurahAyahJuzFirst: (surah: Surah, ayah: AyahNo) => number;
declare const isSurahAyahPageFirst: (surah: Surah, ayah: AyahNo) => number;
declare const isValidSurah: (x: unknown) => x is Surah;
declare const isValidAyahId: (x: unknown) => x is number;
declare const isValidPage: (x: unknown) => x is Juz;
declare const isValidJuz: (x: unknown) => x is Juz;
declare const isValidRuku: (x: unknown) => x is Ruku;
declare const isValidSurahAyah: (x: [unknown, unknown]) => x is SurahAyah;
declare const generatePartBlocks: (part: PartType) => PartBlock[] | null;
/**
 * Pre-initialized QuranRiwaya instance for Qalun
 *
 * @example
 * ```typescript
 * import { quran } from 'quran-meta/qalun'
 *
 * const ayahMeta = quran.getAyahMeta(1)
 * const juz = quran.findJuz(1, 1)
 * ```
 */
declare const createQalun: () => QuranRiwaya<"Hafs" | "Qalun" | "Warsh">;
//#endregion
export { AyahCountBetweenJuzSurah, AyahId, AyahMeta, AyahNo, AyahRange, HizbId, HizbQuarterList, Juz, JuzList, JuzMeta, JuzPart, Manzil, ManzilList, ManzilMeta, NumericRange, Page, PageList, PageMeta, PartType, QuranMeta, RangeMeta, RangeMode, RubAlHizb, RubAlHizbId, RubAlHizbMeta, Ruku, RukuList, RukuMeta, SajdaList, Surah, SurahAyah, SurahAyahPos, SurahAyahSegment, SurahInfo, SurahJuzMeta, SurahList, SurahListType, SurahMeta, SurahName, ThumunAlHizb, ThumunAlHizbId, ThumunAlHizbMeta, ayahStringSplitter, checkValidAyahId, checkValidJuz, checkValidManzil, checkValidPage, checkValidRuku, checkValidSurah, checkValidSurahAyah, checkValidSurahAyahPair, createQalun, findAyahIdBySurah, findJuz, findJuzAndShift, findJuzAndShiftByAyahId, findJuzByAyahId, findJuzMetaBySurah, findManzil, findManzilByAyahId, findPage, findPagebyAyahId, findRangeAroundAyah, findRangeAroundSurahAyah, findRubAlHizb, findRubAlHizbByAyahId, findRukuByAyahId, findSurahAyahByAyahId, findSurahByAyahId, findThumunAlHizb, findThumunAlHizbByAyahId, generatePartBlocks, getAyahCountInSurah, getAyahMeta, getAyahMetasForSurah, getJuzMeta, getList, getListNormalised, getManzilMeta, getPageMeta, getRubAlHizb, getRubAlHizbByAyahId, getRubAlHizbMeta, getRubAlHizbMetaByAyahId, getRukuMeta, getSurahInfo, getSurahMeta, getThumunAlHizb, getThumunAlHizbByAyahId, getThumunAlHizbMeta, getThumunAlHizbMetaByAyahId, isAyahJuzFirst, isAyahPageFirst, isSurahAyahJuzFirst, isSurahAyahPageFirst, isValidAyahId, isValidAyahNo, isValidJuz, isValidPage, isValidRuku, isValidSurah, isValidSurahAyah, maxAyahsInSurah, meta, nextAyah, numRubsInJuz, numSurahs, prevAyah, riwayaLists, string2NumberSplitter, string2NumberSplitterStrict, surahStringParser };