import { default as CxSpace } from '../space/space.ts';
import { default as CortexElement } from '../../../../base/src/cortex-element.ts';
import { IconButtonSize } from '../../../../types/src/icon-button';
import { PaginationCounter } from '../../../../types/src/pagination';
import { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
import { default as CxButton } from '../button/button';
import { default as CxIconButton } from '../icon-button/icon-button';
import { default as CxInput } from '../input/input';
import { default as CxOption } from '../option/option';
import { default as CxSelect } from '../select/select';
import { default as CxTooltip } from '../tooltip/tooltip';
import { default as CxTypography } from '../typography/typography';

/**
 * @summary Pagination component displays the current page and allows the user to navigate through pages.
 * @description Set `show-pagination-input` to render an editable page input in page counters. Leave it unset to keep the original plain-text counters. When only one page is available, navigation buttons are hidden and page counters remain plain text. Use `back-icon-name` and `next-icon-name` to override the previous/next icon-button glyphs (see the icon component for available names). Use `icon-button-size` for all navigation icon buttons (`small`, `medium`, `large`, `x-large`).
 *
 * @cssproperty --width - The width of the select
 *
 * @event {{ pageIndex: number }} cx-page-change - Emitted when the active page changes.
 * @event {{ pageSize: number }} cx-page-size-change - Emitted when the number of items per page changes.
 */
export default class CxPagination extends CortexElement {
    static readonly styles: CSSResultGroup;
    private readonly localize;
    static readonly dependencies: {
        'cx-button': typeof CxButton;
        'cx-icon-button': typeof CxIconButton;
        'cx-input': typeof CxInput;
        'cx-option': typeof CxOption;
        'cx-select': typeof CxSelect;
        'cx-space': typeof CxSpace;
        'cx-tooltip': typeof CxTooltip;
        'cx-typography': typeof CxTypography;
    };
    /**
     * The total number of items
     */
    count: number;
    /**
     * The options for the number of items per page
     */
    pageSizeOptions: number[];
    /**
     * The current number of items per page
     */
    pageSize: number;
    /**
     * The label for the pagination
     */
    label: string;
    /**
     * Whether to show the first button
     */
    showFirst: boolean;
    /**
     * Whether to show the last button
     */
    showLast: boolean;
    /**
     * Whether to show the pagination buttons
     */
    showPaginationButtons: boolean;
    /**
     * The number of pagination buttons to show
     */
    paginationButtonCount: number;
    /**
     * The type of pagination counter to display.
     */
    paginationCounter: PaginationCounter;
    /**
     * Whether to show an editable page input in page counters.
     */
    showPaginationInput: boolean;
    /**
     * Icon name for the previous (back) navigation button.
     */
    backIconName: string;
    /**
     * Icon name for the next navigation button.
     */
    nextIconName: string;
    /**
     * Size passed to each `cx-icon-button` in the navigation controls (first, previous, next, last).
     */
    iconButtonSize: IconButtonSize;
    /**
     * The current page, 1-based index. Use `current-page` attribute to render at a specific page.
     */
    currentPage: number;
    /** Tracks the user-entered page value before committing navigation. */
    private _pageInputValue;
    private get _pageCount();
    get pageStart(): number;
    get pageEnd(): number;
    get prevDisabled(): boolean;
    get nextDisabled(): boolean;
    private get hasMultiplePages();
    private normalizePage;
    willUpdate(changed: PropertyValues<this>): void;
    private handlePageSizeSelectChange;
    private handleFirst;
    private handleBack;
    private handleForward;
    private handleLast;
    private commitPageInputValue;
    private handlePageInput;
    private handlePageInputKeyDown;
    private handlePageInputBlur;
    private renderCounterInput;
    handlePageChange(): void;
    handlePageSizeChange(): void;
    private handlePageClick;
    private renderPageButton;
    private renderPageButtons;
    private renderPageCount;
    private renderRowCount;
    render(): TemplateResult;
}
declare global {
    interface HTMLElementTagNameMap {
        'cx-pagination': CxPagination;
    }
}
