/**
 * Pure transforms for numbering model mutations.
 *
 * These functions take a `NumberingModel` (same shape as `converter.numbering`)
 * and mutate it in place. They never access `editor`, never emit events, and
 * never touch the XML tree directly.
 *
 * Callers must:
 *   1. Run the transform inside a `mutatePart` callback
 *   2. Call `syncNumberingToXmlTree()` after the transform
 *   3. Let `afterCommit` handle event emission and cache rebuild
 */
export interface NumberingModel {
    abstracts: Record<number, any>;
    definitions: Record<number, any>;
}
interface GenerateOptions {
    numId: number;
    listType: string;
    level?: number | null;
    start?: string | null;
    text?: string | null;
    fmt?: string | null;
    markerFontFamily?: string | null;
    bulletStyle?: 'disc' | 'circle' | 'square' | null;
    /**
     * Level (`w:ilvl`) at which to apply `bulletStyle`. Defaults to 0 (top-level).
     * Used when the user changes the bullet style for a nested list item — the
     * override needs to land on the paragraph's actual level, otherwise the
     * paragraph keeps showing whatever marker the base template assigned to that
     * level.
     */
    bulletStyleLevel?: number | null;
}
interface GenerateResult {
    numId: number;
    abstractId: number;
    abstractDef: any;
    numDef: any;
}
declare function getNextId(group: Record<number, unknown>): number;
/**
 * Generate a new abstract + num definition and add them to the model.
 */
export declare function generateNewListDefinition(numbering: NumberingModel, options: GenerateOptions): GenerateResult;
/**
 * Clone an abstract and create a new num definition pointing to the clone.
 * Falls back to `generateNewListDefinition` if the source abstract is missing.
 */
export declare function changeNumIdSameAbstract(numbering: NumberingModel, numId: number, level: number, listType: string): {
    newNumId: number;
    generated: boolean;
};
/**
 * Remove a list definition (num + its abstract) from the model.
 */
export declare function removeListDefinitions(numbering: NumberingModel, listId: number): void;
/**
 * Set or update a lvlOverride entry on a num definition.
 */
export declare function setLvlOverride(numbering: NumberingModel, numId: number, ilvl: number, overrides: {
    startOverride?: number;
    lvlRestart?: number | null;
}): boolean;
/**
 * Remove a lvlOverride entry from a num definition.
 */
export declare function removeLvlOverride(numbering: NumberingModel, numId: number, ilvl: number): boolean;
/**
 * Create a new num definition pointing to an existing abstract.
 * Optionally copies lvlOverride entries from a source numId.
 */
export declare function createNumDefinition(numbering: NumberingModel, abstractNumId: number, options?: {
    copyOverridesFrom?: number;
}): {
    numId: number;
    numDef: any;
};
/**
 * Set or remove w:lvlRestart on an abstract definition level.
 */
export declare function setLvlRestartOnAbstract(numbering: NumberingModel, abstractNumId: number, ilvl: number, restartAfterLevel: number | null): boolean;
export { getNextId as getNextNumberingId };
//# sourceMappingURL=numbering-transforms.d.ts.map