import { NicePresentationDocument, PresentationSlide as _PresentationSlide, SlideElement, ElementPosition, PresentationTheme as _PresentationTheme, SlideLayout } from '../types/presentationTypes';

export declare class PresentationModel {
    private doc;
    private undoStack;
    private redoStack;
    private listeners;
    private maxHistory;
    constructor(doc?: NicePresentationDocument);
    static createEmpty(title?: string): NicePresentationDocument;
    subscribe(fn: () => void): () => void;
    private notify;
    private pushUndo;
    undo(): void;
    redo(): void;
    canUndo(): boolean;
    canRedo(): boolean;
    getDocument(): Readonly<NicePresentationDocument>;
    getSlides(): readonly _PresentationSlide[];
    getSlide(id: string): _PresentationSlide | undefined;
    getTheme(): _PresentationTheme;
    loadDocument(doc: NicePresentationDocument): void;
    addSlide(afterIndex?: number, layout?: SlideLayout): _PresentationSlide;
    removeSlide(id: string): void;
    moveSlide(id: string, newIndex: number): void;
    duplicateSlide(id: string): _PresentationSlide | null;
    updateSlide(id: string, patch: Partial<Omit<_PresentationSlide, 'id' | 'elements'>>): void;
    addElement(slideId: string, element: Omit<SlideElement, 'id'>): SlideElement | null;
    updateElement(slideId: string, elementId: string, patch: Partial<Omit<SlideElement, 'id'>>): void;
    removeElement(slideId: string, elementId: string): void;
    moveElement(slideId: string, elementId: string, position: ElementPosition): void;
    setTheme(theme: _PresentationTheme): void;
}
//# sourceMappingURL=PresentationModel.d.ts.map