import type { Range } from './internal.cjs';
/**
 * A flexible range specification for numeric indices.
 * If a start or end is defined, a tuple can be used where the second item is a boolean
 * indicating whether that end is inclusive or exclusive.<br/>
 * An IndexRange can have one of the following forms:<br/>
 * <br/>
 * - { amount: number }<br/>
 * - { start: number }<br/>
 * - { start: number, amount: number }<br/>
 * - { start: number, end: number }<br/>
 * - { start: number, end: [number, boolean] }<br/>
 * - { start: [number, boolean] }<br/>
 * - { start: [number, boolean], amount: number }<br/>
 * - { start: [number, boolean], end: number }<br/>
 * - { start: [number, boolean], end: [number, boolean] }<br/>
 * - { end: number }<br/>
 * - { end: [number, boolean] }<br/>
 */
export type IndexRange = {
    amount: number;
    start?: number | [number, boolean];
    end?: undefined;
} | Range<number>;
export declare namespace IndexRange {
    /**
     * Returns, given the `range` `IndexRange`, a normalized tuple containing the
     * start index, and optionally an end index.
     * @param range - the `IndexRange` to use
     */
    function getIndexRangeIndices(range: IndexRange): [number, number | undefined];
    /**
     * Returns, given the `range` `IndexRange`, and a target maximum `length`, the actual index range.
     * This can be one of three options:
     * - 'empty': there are no elements within the range
     * - 'all': all elements are within the range
     * - [start: number, end: number]: an inclusive range of element indices within the given range
     * @param range - the `IndexRange` to use
     * @param length - the target maximum length
     */
    function getIndicesFor(range: IndexRange, length: number): [number, number] | 'empty' | 'all';
}
