import type { ObjeRecord } from "../commons/ObjeRecord";
import { type GedcomTransferProgressCallback } from "../utils/gedcom/transferProgress";
export declare class SplitGedcom {
    /** Lignes du premier enregistrement `0 HEAD` (y compris la ligne `0 HEAD`), si présent. */
    protected informationHeaderLines: string[] | null;
    protected informationPersons: string[][];
    /** Lignes sous `0 @F…@ FAM` indexées par libellé xref canonique (`1`, `famA`, …). */
    protected informationFamiliesByLabel: Map<string, string[]>;
    /** Lignes sous `0 @N…@ NOTE|SNOTE` indexées par libellé xref canonique. */
    protected informationNotesByLabel: Map<string, string[]>;
    /**
     * Enregistrements `0 …` non intégrés au modèle typé (OBJE, REPO, SOUR, SUBM, FAM/NOTE à xref non
     * numérique, etc.). Conservés dans l’ordre du fichier pour diagnostic ou futur re‑export.
     * `0 TRLR` n’est pas conservé (terminaison standard).
     */
    private readonly preservedRecords;
    get preservedTopLevelRecords(): readonly string[];
    /** Ajoute un bloc `0 …` complet (multi-lignes) en fin de liste préservée. */
    appendPreservedTopLevelRecord(block: string): void;
    insertPreservedTopLevelRecordAt(index: number, block: string): void;
    replacePreservedTopLevelRecordAt(index: number, block: string): void;
    removePreservedTopLevelRecordAt(index: number): void;
    clearPreservedTopLevelRecords(): void;
    constructor(gedcomContent?: string);
    protected ingestGedcomText(gedcomContent: string): void;
    protected ingestGedcomFileStream(file: File, onProgress?: GedcomTransferProgressCallback, percentRange?: readonly [number, number]): Promise<void>;
    private ingestRecordBlock;
    /** N’ajoute pas `0 TRLR` (terminaison du fichier). */
    private preserveTopLevelRecord;
    /** Tout enregistrement `0 @xref@ INDI` (xref numérique `@I1@` ou textuelle `@Homer_Simpson@`). */
    private isIndiRecordFirstLine;
    /**
     * Retire de {@link preservedTopLevelRecords} les blocs `0 @O…@ OBJE` décodables et renvoie leurs
     * charges utiles pour l’hydratation des pointeurs `OBJE` sous `INDI` / actes.
     */
    protected absorbStandaloneObjeBlocksInto(): Map<number, ObjeRecord>;
    private splitInformationHeader;
    private splitInformationPersons;
    /** @returns `true` si le bloc a été stocké dans {@link informationFamiliesByLabel}. */
    private splitInformationFamilies;
    /** @returns `true` si le bloc a été stocké dans {@link informationNotesByLabel}. */
    private splitInformationNotes;
    private extractFamRecordLabel;
    private extractNoteRecordLabel;
}
