import { AXEvent, MXInteractiveComponent, AXOptionChangedEvent, AXValueChangedEvent, AXClickEvent, MXValueComponent } from '@acorex/cdk/common';
import { AXUnsubscriber } from '@acorex/core/utils';
import * as i0 from '@angular/core';
import { EventEmitter } from '@angular/core';
import * as i8 from '@acorex/core/translation';
import { AXTranslationService } from '@acorex/core/translation';
import * as i3 from '@acorex/components/button';
import { AXButtonItem } from '@acorex/components/button';
import * as i1 from '@angular/common';
import * as i2 from '@angular/forms';
import * as i4 from '@acorex/components/button-group';
import * as i5 from '@acorex/components/number-box';
import * as i6 from '@acorex/components/dropdown';
import * as i7 from '@acorex/components/decorators';
import * as i9 from '@acorex/components/skeleton';

/**
 * A token that specifies the  display mode of datapager component.
 */
type AXDataPagerDisplayMode = 'full' | 'compact' | 'custom';
interface AXDataPagerData {
    range: {
        from: number;
        to: number;
    };
    page: number;
    skip: number;
    take: number;
    totalPages: number;
    totalItems: number;
}
declare class AXDataPagerChangedEvent extends AXEvent implements AXDataPagerData {
    range: {
        from: number;
        to: number;
    };
    page: number;
    skip: number;
    take: number;
    totalPages: number;
    totalItems: number;
}
declare abstract class AXDataPagerParentComponent {
    abstract readonly: boolean;
    abstract disabled: boolean;
    abstract isLoading: boolean;
    abstract onChanged: EventEmitter<AXDataPagerChangedEvent>;
    abstract onOptionChanged: EventEmitter<AXOptionChangedEvent>;
    abstract get displayInfo(): AXDataPagerData;
    abstract size: any;
    abstract goNextPage(): void;
    abstract goLastPage(): void;
    abstract goFirstPage(): void;
    abstract goPrevPage(): void;
    abstract goToPage(page: number): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerParentComponent, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXDataPagerParentComponent>;
}
declare abstract class AXDataPagerChild extends MXInteractiveComponent {
    protected _parent: AXDataPagerParentComponent;
    protected _unsubscriber: AXUnsubscriber;
    private _localeService;
    /**
     *  @ignore
     */
    constructor();
    /**
     *  @ignore
     */
    ngAfterViewInit(): Promise<void>;
    /**
     *  @ignore
     */
    protected abstract applyParent(): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerChild, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXDataPagerChild>;
}

/**
 * Displays formatted and translated information text for a data pager component.
 *
 * @category Components
 */
declare class AXDataPagerInfoComponent extends AXDataPagerChild {
    /**
     * The text to be displayed in the data pager info component.
     */
    text: string;
    /**
     *  @ignore
     */
    protected _textFormatted: string;
    protected translateService: AXTranslationService;
    /**
     *  @ignore
     */
    protected applyParent(): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerInfoComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXDataPagerInfoComponent, "ax-data-pager-info", never, { "text": { "alias": "text"; "required": false; }; }, {}, never, never, true, never>;
}

/**
 * Provides an input selector for navigating pages in a data pager component.
 *
 * @category Components
 */
declare class AXDataPagerInputSelectorComponent extends AXDataPagerChild {
    /**
     *  @ignore
     */
    protected _totalPages: number;
    /**
     *  @ignore
     */
    protected _currentPage: number;
    /**
     *  @ignore
     */
    protected applyParent(): Promise<void>;
    /**
     *  @ignore
     */
    protected _handleValueChanged(e: AXValueChangedEvent<number>): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerInputSelectorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXDataPagerInputSelectorComponent, "ax-data-pager-input-selector", never, {}, {}, never, never, true, never>;
}

/**
 * Provides buttons for navigating to the next and last pages in a data pager component.
 *
 * @category Components
 */
declare class AXDataPagerNextButtonsComponent extends AXDataPagerChild {
    private localeService;
    protected readonly isRtl: i0.Signal<boolean>;
    /**
     *  @ignore
     */
    protected applyParent(): Promise<void>;
    /**
     *  @ignore
     */
    protected _emitOnLastPageClick(e: AXClickEvent): void;
    /**
     *  @ignore
     */
    protected _emitOnNextPageClick(e: AXClickEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerNextButtonsComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXDataPagerNextButtonsComponent, "ax-data-pager-next-buttons", never, {}, {}, never, never, true, never>;
}

/**
 * Component that provides numeric page selection controls for a data pager.
 *
 * @category Components
 */
declare class AXDataPagerNumericSelectorComponent extends AXDataPagerChild {
    protected _items: AXButtonItem[];
    protected _currentPage: number;
    protected _lastPage: number;
    protected _loading: boolean;
    private localeService;
    protected readonly isRtl: i0.Signal<boolean>;
    /**
     *  @ignore
     */
    private _displayCount;
    /**
     *  @ignore
     */
    protected applyParent(): Promise<void>;
    /**
     *  @ignore
     */
    protected _handleOnItemClick(e: any): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerNumericSelectorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXDataPagerNumericSelectorComponent, "ax-data-pager-numeric-selector", never, {}, {}, never, never, true, never>;
}

/**
 * Displays a button to select page sizes for data pagination.
 *
 * @category Components
 */
declare class AXDataPagerPageSizesComponent extends AXDataPagerChild {
    /**
     *  @ignore
     */
    protected _size: number;
    /**
     *  @ignore
     */
    protected _items: any[];
    /**
     *  @ignore
     */
    private _sizes;
    /**
     * Gets the list of page sizes available for selection.
     */
    get sizes(): number[];
    /**
     * Sets the list of page sizes available for selection.
     *
     * @param value - An array of numbers representing the page sizes to be set.
     */
    set sizes(v: number[]);
    /**
     *  @ignore
     */
    protected applyParent(): Promise<void>;
    /**
     *  @ignore
     */
    protected _emitOnItemClick(e: AXClickEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerPageSizesComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXDataPagerPageSizesComponent, "ax-data-pager-page-sizes", never, { "sizes": { "alias": "sizes"; "required": false; }; }, {}, never, never, true, never>;
}

/**
 * Component that provides navigation buttons for going to the previous page and the first page in a data pager.
 *
 * @category Components
 */
declare class AXDataPagerPrevButtonsComponent extends AXDataPagerChild {
    private localeService;
    protected readonly isRtl: i0.Signal<boolean>;
    /**
     *  @ignore
     */
    protected applyParent(): Promise<void>;
    /**
     *  @ignore
     */
    protected _emitOnFirstPageClick(e: AXClickEvent): void;
    /**
     *  @ignore
     */
    protected _emitOnPrevPageClick(e: AXClickEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerPrevButtonsComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXDataPagerPrevButtonsComponent, "ax-data-pager-prev-buttons", never, {}, {}, never, never, true, never>;
}

type AXDataPagerMode = 'full' | 'compact' | 'custom';
/**
 * Component for managing and displaying data pagination controls.
 *
 * @category Components
 */
declare class AXDataPagerComponent extends MXValueComponent<number> {
    private _parent;
    /**
     *  @ignore
     */
    private _isLoading;
    /**
     * Indicates whether the component is currently loading.
     *
     */
    get isLoading(): boolean;
    /**
     * Sets the loading state of the component.
     *
     * @param v - The loading state to be set.
     */
    set isLoading(v: boolean);
    /**
     *  @ignore
     */
    private _size;
    /**
     * Gets the number of items per page in the data pager.
     */
    get size(): number;
    /**
     * Sets the number of items per page and updates the data pager accordingly.
     *
     * @param {number} v - The new number of items per page.
     */
    set size(v: number);
    /**
     *  @ignore
     */
    private _total;
    /**
     * Gets the total number of items.
     */
    get total(): number;
    /**
     * Sets the total number of items and triggers an update event if the value changes.
     *
     * @param v - The total number of items to set.
     *                     If the value is non-positive, it defaults to 0.
     */
    set total(v: number);
    /**
     *  @ignore
     */
    private _totalPages;
    /**
     * Gets the total number of pages.
     */
    get totalPages(): number;
    /**
     * Sets the total number of pages.
     *
     * @param value - The total number of pages to set.
     */
    private set totalPages(value);
    /**
     * Emitted when the display mode changes.
     * @event
     * An event containing the new display mode.
     */
    displayModeChange: EventEmitter<string>;
    /**
     *  @ignore
     */
    private _displayMode;
    /**
     * Gets the current display mode of the data pager.
     */
    get displayMode(): AXDataPagerMode;
    /**
     * Sets the display mode of the data pager and emits a change event.
     *
     * @param v - The new display mode to set, of type `AXDataPagerMode`.
     */
    set displayMode(v: AXDataPagerMode);
    /**
     * Emitted when the data pager's state changes.
     * @event
     * An event containing details about the change.
     */
    onChanged: EventEmitter<AXDataPagerChangedEvent>;
    /**
     *  @ignore
     */
    constructor();
    /**
     *  @ignore
     */
    ngAfterViewInit(): void;
    /**
     *  @ignore
     */
    protected internalValueChanged(value: any): void;
    /**
     *  @ignore
     */
    protected internalGetValue(value: any): number;
    /**
     *  @ignore
     */
    private previousDisplayInfo;
    get displayInfo(): AXDataPagerData;
    /**
     *  @ignore
     */
    private _emitChangedEvent;
    /**
     * Navigates to the next page, or to the last page if on the final page.
     *
     * @returns void - No return value. The component navigates to the next available page.
     */
    goNextPage(): void;
    /**
     * Navigates to the last page.
     *
     * @returns void - No return value. The component navigates to the final page.
     */
    goLastPage(): void;
    /**
     * Navigates to the first page.
     *
     * @returns void - No return value. The component navigates to the first page.
     */
    goFirstPage(): void;
    /**
     * Navigates to the previous page, or to the first page if on the initial page.
     *
     * @returns void - No return value. The component navigates to the previous available page.
     */
    goPrevPage(): void;
    /**
     * Navigates to a specified page.
     *
     * @param page - The page number to navigate to.
     * @returns void - No return value. The component navigates to the specified page.
     */
    goToPage(page: number): void;
    get __hostClass(): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXDataPagerComponent, "ax-data-pager", never, { "value": { "alias": "value"; "required": false; }; "name": { "alias": "name"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "size": { "alias": "size"; "required": false; }; "total": { "alias": "total"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; }, { "valueChange": "valueChange"; "onValueChanged": "onValueChanged"; "disabledChange": "disabledChange"; "readonlyChange": "readonlyChange"; "displayModeChange": "displayModeChange"; "onChanged": "onChanged"; }, never, ["ax-prefix", "ax-suffix"], true, never>;
}

declare class AXDataPagerModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXDataPagerModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXDataPagerModule, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof i3.AXButtonModule, typeof i4.AXButtonGroupModule, typeof i5.AXNumberBoxModule, typeof i6.AXDropdownModule, typeof i7.AXDecoratorModule, typeof i8.AXTranslationModule, typeof i9.AXSkeletonModule, typeof AXDataPagerComponent, typeof AXDataPagerNextButtonsComponent, typeof AXDataPagerPrevButtonsComponent, typeof AXDataPagerPageSizesComponent, typeof AXDataPagerNumericSelectorComponent, typeof AXDataPagerInputSelectorComponent, typeof AXDataPagerInfoComponent], [typeof AXDataPagerComponent, typeof AXDataPagerNextButtonsComponent, typeof AXDataPagerPrevButtonsComponent, typeof AXDataPagerPageSizesComponent, typeof AXDataPagerNumericSelectorComponent, typeof AXDataPagerInputSelectorComponent, typeof AXDataPagerInfoComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXDataPagerModule>;
}

export { AXDataPagerChangedEvent, AXDataPagerChild, AXDataPagerComponent, AXDataPagerInfoComponent, AXDataPagerInputSelectorComponent, AXDataPagerModule, AXDataPagerNextButtonsComponent, AXDataPagerNumericSelectorComponent, AXDataPagerPageSizesComponent, AXDataPagerParentComponent, AXDataPagerPrevButtonsComponent };
export type { AXDataPagerData, AXDataPagerDisplayMode, AXDataPagerMode };
