import { EventEmitter, Signal, Injector } from '@angular/core';
import { ChangedRotation, PagesInfo, DocumentError, FindMatchesCount, ReadAloudState, AnnotationEditorState, AnnotationEditorMode, SidebarViewChange, DocumentMetadata, DocumentOutline, FormDataMap, PresentationMode } from 'ng2-pdfjs-viewer';

interface PdfViewerSignalSource {
    onPageChange: EventEmitter<number>;
    onScaleChange: EventEmitter<number>;
    onRotationChange: EventEmitter<ChangedRotation>;
    onPagesInit: EventEmitter<PagesInfo>;
    onDocumentError: EventEmitter<DocumentError>;
    onUpdateFindMatchesCount: EventEmitter<FindMatchesCount>;
    onReadAloudStateChange: EventEmitter<ReadAloudState>;
    onAnnotationEditorStateChange: EventEmitter<AnnotationEditorState>;
    annotationEditorChange: EventEmitter<AnnotationEditorMode>;
    onSidebarViewChanged: EventEmitter<SidebarViewChange>;
    onMetadataLoaded: EventEmitter<DocumentMetadata>;
    onOutlineLoaded: EventEmitter<DocumentOutline>;
    formDataChange: EventEmitter<FormDataMap>;
    onPresentationModeChanged: EventEmitter<PresentationMode>;
    zoomChange: EventEmitter<string>;
    cursorChange: EventEmitter<string>;
    scrollChange: EventEmitter<string>;
    spreadChange: EventEmitter<string>;
    pageModeChange: EventEmitter<string>;
}
interface PdfViewerSignals {
    /** Current 1-based page number; undefined until the first page change. */
    page: Signal<number | undefined>;
    /** Current zoom scale factor (1 = 100%); undefined until the first scale change. */
    scale: Signal<number | undefined>;
    /** Total page count, available once the document's pages initialize. */
    totalPages: Signal<number | undefined>;
    /** True once the document's pages have initialized. */
    loaded: Signal<boolean>;
    /** Last document-load error, or undefined if none. */
    error: Signal<DocumentError | undefined>;
    /** Page rotation state ({ rotation, page }). */
    rotation: Signal<ChangedRotation | undefined>;
    /** Live find/search match counts ({ current, total }). */
    findMatches: Signal<FindMatchesCount | undefined>;
    /** Read-aloud progress ({ status, page, sentence? }). */
    readAloud: Signal<ReadAloudState | undefined>;
    /** Annotation editor undo/empty/selection state. */
    annotationEditor: Signal<AnnotationEditorState | undefined>;
    /** Active annotation editor tool (highlight / ink / freetext / ...). */
    annotationEditorMode: Signal<AnnotationEditorMode | undefined>;
    /** Current sidebar panel ({ view }). */
    sidebar: Signal<SidebarViewChange | undefined>;
    /** Document metadata (title / author / ...). */
    metadata: Signal<DocumentMetadata | undefined>;
    /** Document outline / bookmarks ({ items?, hasOutline }). */
    outline: Signal<DocumentOutline | undefined>;
    /** Current AcroForm field values. */
    formData: Signal<FormDataMap | undefined>;
    /** Presentation (fullscreen) mode ({ active }). */
    presentationMode: Signal<PresentationMode | undefined>;
    /** Zoom mode string (e.g. 'auto', 'page-fit', '125'). */
    zoom: Signal<string | undefined>;
    /** Cursor tool ('select' | 'hand'). */
    cursor: Signal<string | undefined>;
    /** Scroll mode ('vertical' | 'horizontal' | 'wrapped' | 'page'). */
    scroll: Signal<string | undefined>;
    /** Spread mode ('none' | 'odd' | 'even'). */
    spread: Signal<string | undefined>;
    /** Page (view) mode. */
    pageMode: Signal<string | undefined>;
}
/**
 * Project the viewer's outputs into read-only signals. See the file header for
 * usage and the injection-context rules. The returned signals are live: each
 * updates when its source output next fires.
 */
declare function pdfViewerSignals(viewer: PdfViewerSignalSource, options?: {
    injector?: Injector;
}): PdfViewerSignals;

export { pdfViewerSignals };
export type { PdfViewerSignalSource, PdfViewerSignals };
