import { PdfViewer, PdfViewerBase, ISize, PageOrganizerSettingsModel } from '../index';
import { DragEventArgs, DropEventArgs } from '@syncfusion/ej2-base';
import { Dialog } from '@syncfusion/ej2-popups';
import { Toolbar } from '@syncfusion/ej2-navigations';
import { TextBox } from '@syncfusion/ej2-inputs';
interface IActionOrganizeElements {
    action: string;
    UndoRedoTileActions: OrganizeDetails[];
    toolbarActions: OrganizeDetails[];
    selectedPagesIndexes: number[];
    dropIndex: number;
    isRightInsertion: boolean;
}
/**
 * The `PageOrganizer` module is used to handle page organize operations of PDF viewer.
 *
 * @param {Event} event - The event triggering the page organization.
 * @param {Object} args - Additional arguments for the page organization.
 * @returns {void}
 */
export declare class PageOrganizer {
    /**
     * @private
     */
    pdfViewer: PdfViewer;
    /**
     * @private
     */
    pdfViewerBase: PdfViewerBase;
    private rotateRightButton;
    private rotateLeftButton;
    private insertRightButton;
    private insertLeftButton;
    private deleteButton;
    private copyButton;
    private pageZoomElement;
    private pageZoomDropDown;
    private pageZoomSlider;
    private pageZoomDecreaseButton;
    private pageZoomIncreaseButton;
    private pageZoomContainer;
    private toolbar;
    /**
     * @private
     */
    importDocInputElement: HTMLElement;
    /**
     * @private
     */
    importedDocumentName: string;
    private previewLimit;
    private lastRequestedPageIndex;
    private pageZoomSliderStep;
    private currentPageZoomSliderValue;
    private previouslyRequestedImageZoom;
    /**
     * @private
     */
    importedDocumentData: string;
    /**
     * @private
     */
    dataDetails: any[];
    /**
     * @private
     */
    dialogDivElement: HTMLElement;
    /**
     * @private
     */
    waitingPopup: HTMLElement;
    private thumbnail;
    private imageContainer;
    /**
     * @private
     */
    organizeDialog: Dialog;
    /**
     * @private
     */
    tileAreaWrapper: HTMLElement;
    /**
     * @private
     */
    tileAreaDiv: HTMLElement;
    private thumbnailImage;
    private importImageWrapper;
    private pageLink;
    private previewRequestHandler;
    private contextMenuObj;
    private mobileContextMenu;
    /**
     * @private
     */
    organizePagesCollection: OrganizeDetails[];
    /**
     * @private
     */
    tempOrganizePagesCollection: OrganizeDetails[];
    private isSkipRevert;
    private isAllImagesReceived;
    private selectAllCheckBox;
    /**
     * @private
     */
    totalCheckedCount: number;
    /**
     * @private
     */
    selectedPageIndexes: number[];
    private dragEndIndex;
    /**
     * @private
     */
    dragHoveredIndex: number;
    private dragObj;
    private dropObj;
    /**
     * @private
     */
    virtualEle: HTMLElement;
    private previousClientY;
    /**
     * @private
     */
    autoScrollInterval: number;
    private isRightInsertion;
    /**
     * @private
     */
    gapBetweenDivs: number;
    private previousImageZoom;
    private currentImageZoom;
    /**
     * @private
     */
    isDocumentModified: boolean;
    /**
     * @private
     */
    undoOrganizeCollection: IActionOrganizeElements[];
    /**
     * @private
     */
    redoOrganizeCollection: IActionOrganizeElements[];
    /**
     * @private
     */
    toolbarUndoRedoCollection: OrganizeDetails[];
    private startTile;
    private ctrlKey;
    private shiftKey;
    private isClickedOnCheckBox;
    private isTouchEvent;
    private isPageZoomChanged;
    private isInitialLoading;
    private boundOnTileAreaMouseDown;
    private boundOnTileAreaKeyDown;
    private boundOnTileAreaKeyUp;
    private boundPageOrganizerOnScroll;
    private boundPageZoomDropDownOpen;
    private boundPageZoomDropDownClose;
    private boundPageZoomChange;
    private boundIncreasePageZoom;
    private boundDecreasePageZoom;
    private boundImportDocument;
    private boundExtractInputChange;
    private extractButtonClickHandler;
    /**
     * @private
     */
    extractButtonElement: HTMLElement;
    /**
     * @private
     */
    isOrganizeWindowOpen: boolean;
    /**
     * @private
     */
    isPageZoomPopupOpen: boolean;
    /**
     * @private
     */
    extractDialog: Dialog;
    /**
     * @private
     */
    extractPagesInput: TextBox;
    /**
     * @private
     */
    isExtractToolbarVisible: boolean;
    /**
     * @private
     */
    deleteExtractValue: string;
    /**
     * @private
     */
    extractSecondaryToolbar: Toolbar;
    /**
     * @param {PdfViewer} pdfViewer - It describes about the pdfviewer
     * @param {PdfViewerBase} pdfViewerBase - It describes about the pdfviewer base
     * @private
     */
    constructor(pdfViewer: PdfViewer, pdfViewerBase: PdfViewerBase);
    /**
     * @param {boolean} isReConstruct - It describes about the isReConstruct
     * @private
     * @returns {void}
     */
    createOrganizeWindow(isReConstruct?: boolean): void;
    /**
     * @param {boolean} isReConstruct - Defines whether organizer window is reconstructed when closing
     * @private
     * @returns {void}
     */
    createOrganizeWindowForMobile(isReConstruct?: boolean): void;
    /**
     * @private
     * @param {PageOrganizerSettingsModel} pageOrganizerSettings - new page organizer settings object
     * @param {oldpageOrganizerSettings} oldPageOrganizerSettings - old page organizer settings object
     * @returns {void}
     */
    setPageOrganizerSettings(pageOrganizerSettings: PageOrganizerSettingsModel, oldPageOrganizerSettings?: PageOrganizerSettingsModel): void;
    /**
     * @private
     * @param {string} property - new toolbar item in organize toolbar.
     * @returns {void}
     */
    updateToolbarItemState(property?: string): void;
    /**
     * @private
     * @returns {number} - number
     */
    getImageZoomMin(): number;
    /**
     * @private
     * @returns {number} - number
     */
    getImageZoomMax(): number;
    /**
     * @private
     * @returns {void}
     */
    createRequestForPreview(): any;
    /**
     * @private
     * @param {PageOrganizer} proxy It describes about the page organizer
     * @returns {void}
     */
    requestPreviewCreation(proxy: PageOrganizer): void;
    /**
     * @param {any} data - It describes about the data
     * @private
     * @returns {void}
     */
    updatePreviewCollection(data: any): void;
    /**
     * @param {any} event - It describes about the event
     * @private
     * @returns {void}
     */
    previewOnMessage(event: any): void;
    /**
     * @param {any} data - It describes about the data
     * @param {boolean} isClientRender - It describes about the isClientRender
     * @private
     * @returns {void}
     */
    getData(data: any, isClientRender: boolean): void;
    /**
     * @param {any} event - It describes about the event
     * @private
     * @returns {void}
     */
    pageDragDrop(event: any): void;
    /**
     * @private
     * @param {any} a - a value
     * @param {any} b - b value
     * @returns {number} - number
     */
    sorting(a: any, b: any): number;
    /**
     * @param {number} pageIndex - It describes about the page index
     * @param {number} subIndex - It describes about the sub index
     * @param {number} pageOrder - It describes about the page order
     * @param {HTMLElement} targetElement - It describes about the target element
     * @param {boolean} isNewPage - It describes about the isNewPage
     * @param {boolean} isBefore - It describes about the isBefore
     * @param {boolean} isEmptyPage - It describes about the isEmptyPage
     * @param {boolean} isImportedPage - It describes about the isImportedPage
     * @param {string} documentName - It describes about the documentName
     * @private
     * @returns {void}
     */
    tileImageRender(pageIndex: number, subIndex?: number, pageOrder?: number, targetElement?: HTMLElement, isNewPage?: boolean, isBefore?: boolean, isEmptyPage?: boolean, isImportedPage?: boolean, documentName?: string): void;
    /**
     * @param {DragEventArgs} e - It describes about the event
     * @private
     * @returns {void}
     */
    autoScroll(e: DragEventArgs): void;
    /**
     * @param {DragEventArgs} e - It describes about the event
     * @param {DOMRect} tileRect - It describes about rect
     * @param {number} gapBetweenDivs - It describes about div gap
     * @param {HTMLElement} outerBorder - It describes about border
     * @private
     * @returns {void}
     */
    handlePageMove(e: DropEventArgs, tileRect: DOMRect, gapBetweenDivs: number, outerBorder: HTMLElement): void;
    /**
     * @private
     * @returns {void}
     */
    addSelectionRingStyle(): void;
    /**
     * @private
     * @returns {void}
     */
    removeSelectionRingStyle(): void;
    /**
     * @param {number[]} selectedPageIndexes - It describes about the selected page index
     * @param {number} hoveredIndex - It describes about hovered index
     * @private
     * @returns {boolean} - Returns boolean value
     */
    isHoveredOnSelectedPages(selectedPageIndexes: number[], hoveredIndex: number): boolean;
    /**
     * @param {MouseEvent} event - It describes about the event
     * @private
     * @returns {void}
     */
    thumbnailMouseOver: (event: MouseEvent) => void;
    /**
     * @param {MouseEvent} event - It describes about the event
     * @private
     * @returns {void}
     */
    thumbnailMouseLeave: (event: MouseEvent) => void;
    /**
     * @param {OrganizeDetails[]} UndoRedoTileActions - Specifies the details of the action occured page
     * @param {string} actionString - Specifies the Name of the action
     * @param {OrganizeDetails[]} toolbarActions - Collection to store multiple action as single action
     * @param {number[]} selectedPageIndexes - Collection to store selected page index
     * @param {number} dropIndex - Specifies where the page should be dropped
     * @param {boolean} isRightInsertion - Used to check whether the page should be dropped at right
     * @returns {void}
     * @private
     */
    addOrganizeAction(UndoRedoTileActions: OrganizeDetails[], actionString: string, toolbarActions: OrganizeDetails[], selectedPageIndexes: number[], dropIndex: number, isRightInsertion: boolean): void;
    /**
     * @private
     * @returns {void}
     */
    onSaveClicked(): void;
    /**
     * @param {boolean} isShow - specifies the isShow boolean.
     * @returns {void}
     * @private
     */
    showOrganizeLoadingIndicator(isShow: boolean): void;
    /**
     * @private
     * @returns {void}
     */
    undo: () => void;
    /**
     * @private
     * @returns {void}
     */
    redo: () => void;
    /**
     * @param {HTMLElement} mainTileElement - It describes about tile element
     * @private
     * @returns {void}
     */
    deletePageElement(mainTileElement: HTMLElement): void;
    private clonedCollection;
    /**
     * @param {string} documentData - specifies the documentData.
     * @param {string} password - specifies the password.
     * @param {boolean} isPasswordCorrect - specifies the isPasswordCorrect.
     * @returns {void}
     * @private
     */
    loadImportDoc(documentData: string, password: string, isPasswordCorrect: boolean): void;
    /**
     * @param {string} password - specifies the password.
     * @param {string} documentName - specifies the documentName.
     * @param {string} documentData - specifies the documentData.
     * @returns {void}
     * @private
     */
    importDocuments(password: string, documentName: string, documentData: string): void;
    /**
     * @private
     * @returns {void}
     */
    updateOrganizePageCollection(): void;
    /**
     *
     * @param {any} pageCanvas - It describes about the page canvas
     * @param {number} pageNumber - It describes about the page number
     * @private
     * @returns {void}
     */
    applyElementStyles(pageCanvas: any, pageNumber: number): void;
    /**
     * @private
     * @returns {void}
     */
    onSaveasClicked(): void;
    /**
     * @private
     * @returns {void}
     */
    updateOrganizePageActions(): void;
    /**
     *
     * Rotates all pages in the PDF Viewer by the specified angle.
     *
     * @param {PdfPageRotateAngle} pageRotateAngle - The angle by which to rotate the pages (PdfPageRotateAngle).
     *                          The rotation can be 0, 90, 180, or 270 degrees.
     * @returns {void}
     * @private
     */
    rotateAllPages(pageRotateAngle: PdfPageRotateAngle): void;
    /**
     * Rotates the specified pages in the PDF Viewer by the specified angle.
     *
     * @param {number} pageIndexes - The array of page indexes to rotate.
     * @param {PdfPageRotateAngle} pageRotateAngle - The angle by which to rotate the pages (PdfPageRotateAngle).
     *                          The rotation can be 0, 90, 180, or 270 degrees.
     * @returns {void}
     * @private
     */
    rotatePages(pageIndexes: number[], pageRotateAngle: PdfPageRotateAngle): void;
    /**
     * @private
     * @returns {void}
     */
    rotatePages(pageStartIndex: number, pageEndIndex: number, pageRotateAngle: PdfPageRotateAngle): void;
    /**
     * @private
     * @returns {void}
     */
    rotatePages(pageRotations: PageRotation[]): void;
    private generateRange;
    /**
     * @private
     * @param {number} newSize The size to which image zoom is to be updated
     * @param {number} oldSize The present value of image zoom
     * @returns {void}
     */
    updateOrganizePageImageSize(newSize: number, oldSize?: number): void;
    /**
     * Rotates the specified pages clockwise by 90 degrees.
     *
     * @param {number} pageNumbers - Array of page numbers to rotate.
     * @private
     * @returns {void}
     */
    rotateClockwise(pageNumbers: number[]): void;
    /**
     * Rotates the specified pages counterclockwise by 90 degrees.
     *
     * @param {number} pageNumbers - Array of page numbers to rotate.
     * @private
     * @returns {void}
     */
    rotateCounterclockwise(pageNumbers: number[]): void;
    /**
     * Opens the page organizer dialog within the Pdf Viewer, allowing for management of PDF pages.
     *
     * ```html
     * <div id="pdfViewer" style="height: 100%;width: 100%;"></div>
     * ```
     * ```ts
     * let viewer: PdfViewer = new PdfViewer();
     * viewer.appendTo("#pdfViewer");
     * viewer.documentLoad = () => {
     *      viewer.pageOrganizer.openPageOrganizer();
     * }
     * ```
     *
     * @returns {void}
     */
    openPageOrganizer(): void;
    /**
     * Closes the currently open page organizer dialog within the PDF Viewer, if present.
     *
     * ```html
     * <div id="pdfViewer" style="height: 100%;width: 100%;"></div>
     * ```
     * ```ts
     * let viewer: PdfViewer = new PdfViewer();
     * viewer.appendTo("#pdfViewer");
     * viewer.documentLoad = () => {
     *      viewer.pageOrganizer.closePageOrganizer();
     * }
     * ```
     *
     * @returns {void}
     */
    closePageOrganizer(): void;
    /**
     * @private
     * @param {PageOrganizerSettingsModel} newProp The new pageOrganizerSettings Property of PdfViewer from onPropertyChanged
     * @returns {void}
     */
    handleImageSizeBoundsChange(newProp: PageOrganizerSettingsModel): void;
    /**
     * @private
     * @param {boolean} showImageZoomingSlider The new showImageZoomingSlider property of PdfViewer.PageOrganizerSettings from onPropertyChanged
     * @returns {void}
     */
    handleImageResizerVisibility(showImageZoomingSlider: boolean): void;
    /**
     * @private
     * @returns {void}
     */
    switchPageOrganizer(): void;
    /**
     * @private
     * @returns {void}
     */
    getModuleName(): string;
    /**
     * @private
     * @param {boolean} isImageRequest defines if the function is called for image request
     * @param {number} size optional size can be sent to check valid page zoom value
     * @returns {number} imageZoom value
     */
    getImageZoomValue(isImageRequest?: boolean, size?: number): number;
    /**
     * @private
     * @param {number} currentValue - It describes about current value.
     * @param {number} previousValue - It describes about previous value.
     * @returns {void}
     */
    handlePageZoomChange(currentValue: number, previousValue: number): void;
    /**
     * @private
     * @param {boolean} isShowRemove - It describes about show or remove the extract icon in organize window toolbar.
     * @returns {void}
     */
    showRemoveExtractIcon(isShowRemove: boolean): void;
    /**
     * @private
     * @param {boolean} canExtractPages - It describes about show or hide the extract icon in organize window toolbar.
     * @returns {void}
     */
    showHideExtractIcon(canExtractPages: boolean): void;
    /**
     * @private
     * @returns {void}
     */
    clear(): void;
    /**
     * @private
     * @returns {void}
     */
    destroy(): void;
}
/**
 * Enum for PdfPageRotateAngle
 */
export declare enum PdfPageRotateAngle {
    RotateAngle0 = 1,
    RotateAngle90 = 2,
    RotateAngle180 = 3,
    RotateAngle270 = 4,
    RotateAngle360 = 1
}
export declare class PageRotation {
    pageIndex: number;
    rotationAngle: PdfPageRotateAngle;
    constructor(pageIndex: number, rotationAngle: PdfPageRotateAngle);
}
/**
 * Interface representing details about a page, including rotation angle and page index.
 *
 * @hidden
 */
export interface PageDetails {
    rotateAngle: number;
    pageIndex: number;
}
/**
 * Interface representing details about organizing pages, including page ID, current page index, rotate angle, and status of insertion and deletion.
 */
export declare class OrganizeDetails {
    currentPageIndex: number;
    pageIndex: number;
    copiedPageIndex: number;
    isInserted: boolean;
    isDeleted: boolean;
    isCopied: boolean;
    istargetCopied: boolean;
    hasEmptyPageAfter: boolean;
    hasEmptyPageBefore: boolean;
    rotateAngle: number;
    pageSize: ISize;
    isImportedDoc: boolean;
    documentName: string;
    password: string;
    documentData: string;
    constructor(currentPageIndex: number, pageIndex: number, copiedPageIndex: number, isInserted: boolean, isDeleted: boolean, isCopied: boolean, istargetCopied: boolean, hasEmptyPageAfter: boolean, hasEmptyPageBefore: boolean, rotateAngle: number, pageSize: ISize, isImportedDoc: boolean, documentName: string, password: string, documentData: string);
}
export {};
