import { RefObject } from 'react';
import type { ContextType } from 'react';
import { StoreContext } from '../../../../services/store';
import { ISettings } from '../../../../types';
export interface LayoutParams {
    context: {
        widgetWidth: number;
        contentSize: ISettings['content_size'];
        isMobile: boolean;
        hideArrows: boolean;
    };
    config: {
        contentSize: ISettings['content_size'];
        itemCount: number;
        partialItemWidth: number;
        alwaysPartial?: boolean;
    };
    refs: {
        slideRef: RefObject<HTMLDivElement>;
    };
}
export interface HeightParams {
    refs: {
        outerRef: RefObject<HTMLDivElement>;
    };
    config: {
        thumbnailShape: ISettings['thumbnail_shape'];
        contentSize: ISettings['content_size'];
        itemCount: number;
    };
    layout: {
        isCompact: boolean;
        constrainedWidgetWidth: number;
        widgetWidth: number;
    };
}
type StoreStateUpdater = ContextType<typeof StoreContext>['setStoreState'];
interface NavigationParams {
    config: {
        itemCount: number;
        contentSize: ISettings['content_size'];
        cloneCount: number;
        contentSizeNotReached: boolean;
    };
    refs: {
        slideRef: RefObject<HTMLDivElement>;
        containerRef: RefObject<HTMLDivElement>;
    };
    state: {
        itemWidth: number;
        currentPosition?: number;
    };
    actions: {
        setStoreState: StoreStateUpdater;
    };
    transitionDurationSec?: number;
}
/**
 * Decide whether the uniform carousel should use clones and partial visibility.
 * If there are fewer items than visible slots, disable cloning and partial positioning.
 */
export declare const useUniformCenteredConfig: (itemCount: number, contentSize: ISettings['content_size'], setStoreState: StoreStateUpdater) => {
    contentSizeNotReached: boolean;
    partialItemWidth: number;
    cloneCount: number;
};
export declare const useCarouselLayout: ({ context: { widgetWidth, contentSize, isMobile, hideArrows }, config: { contentSize: carouselContentSize, itemCount, partialItemWidth: carouselPartialItemWidth, alwaysPartial, }, refs: { slideRef }, }: LayoutParams) => {
    constrainedWidgetWidth: number;
    isCompact: boolean;
    compactStyle: import("react").CSSProperties | undefined;
    carouselDimensions: import("../../../../hooks/useCarouselDimensions").CarouselDimensions;
    arrowSize: import("../../../../types").ArrowSize;
};
export declare const useCarouselHeightConfig: ({ refs: { outerRef }, config: { thumbnailShape, contentSize, itemCount }, layout: { isCompact, constrainedWidgetWidth, widgetWidth }, }: HeightParams) => {
    enforcedMinHeight: number;
};
export declare const useInfiniteNavigation: ({ config: { itemCount, contentSize, contentSizeNotReached }, refs: { containerRef }, state: { currentPosition }, actions: { setStoreState }, transitionDurationSec, }: NavigationParams) => {
    activeIndex: number;
    isTransitioning: boolean;
    skipTransition: boolean;
    handleSlide: (direction: 'left' | 'right') => void;
    goToSlide: (index: number, shouldUpdateCurrentPosition?: boolean) => void;
};
export {};
