export interface UseOverflowOptions {
    /**
     * Gap between items in pixels. Used in width calculations.
     * @default 0
     */
    gap?: number;
    /**
     * Minimum number of items to always show, even if they don't fit.
     * @default 0
     */
    minVisibleItems?: number;
    /**
     * Maximum number of items to ever show, even if they all fit. The ceiling
     * partner to `minVisibleItems`. `undefined` means no cap. When it is less
     * than `minVisibleItems`, the floor wins and a dev-only warning is emitted.
     * @default undefined
     */
    maxVisibleItems?: number;
    /**
     * Wrap items across up to this many rows before collapsing the rest into the
     * overflow indicator. `undefined` (or `1`) keeps the single-line behavior.
     * A number, not a boolean: unbounded wrapping is a plain flex-wrap layout,
     * not overflow collapse. Assumes uniform row height.
     * @default undefined
     */
    maxRows?: number;
    /**
     * Which end to collapse items from.
     * @default 'end'
     */
    collapseFrom?: 'start' | 'end';
    /**
     * Which element to observe for overflow calculations.
     * - `'observeSelf'`: uses the container's own width (default)
     * - `'observeParent'`: observes the container's parent element for
     *   resize and uses the parent's content width. This allows the
     *   visible container to remain content-sized while still detecting
     *   available space for grow-back. Siblings that don't fit alongside
     *   the items can wrap and be clipped by the parent's overflow.
     * @default 'observeSelf'
     */
    behavior?: 'observeParent' | 'observeSelf';
}
export interface UseOverflowReturn {
    /** Ref to attach to the visible container element */
    containerRef: React.RefCallback<HTMLElement>;
    /** Ref to attach to the hidden measurement container */
    measureRef: React.RefCallback<HTMLElement>;
    /** Number of items that fit in the visible container */
    visibleCount: number;
    /** Whether any items are overflowing */
    hasOverflow: boolean;
    /** Number of rows the visible items occupy (1 for the single-line path) */
    rows: number;
    /** Measured max item height in pixels; used to size the multi-row container */
    rowHeight: number;
}
/**
 * Hook for managing horizontal overflow of a list of items.
 *
 * Renders all items into a hidden measurement container, then calculates
 * how many fit in the visible container's width. Uses ResizeObserver to
 * recalculate when the container resizes.
 *
 * The measurement container should contain all items followed by the
 * overflow indicator element (if any). The indicator is identified by
 * a `data-overflow-indicator` attribute.
 *
 * @example
 * ```
 * const { containerRef, measureRef, visibleCount, hasOverflow } = useOverflow(5, {
 *   gap: 8,
 * });
 * ```
 */
export declare function useOverflow(itemCount: number, options?: UseOverflowOptions): UseOverflowReturn;
//# sourceMappingURL=useOverflow.d.ts.map