import * as react from 'react';
import react__default, { ReactNode } from 'react';

type ShowArrowsOption = boolean | 'always' | 'hover';
type ScrollDistanceType = number | 'slide' | 'screen';
type CarouselCallbacks = {
    beforeSlide?: (currentSlideIndex: number, endSlideIndex: number) => void;
    afterSlide?: (endSlideIndex: number) => void;
};
type CarouselProps = CarouselCallbacks & {
    children: ReactNode;
    arrows?: ReactNode;
    autoplay?: boolean;
    autoplayInterval?: number;
    className?: string;
    dots?: ReactNode;
    id?: string;
    keyboard?: boolean;
    minSwipeDistance?: number;
    scrollDistance?: ScrollDistanceType;
    showArrows?: ShowArrowsOption;
    showDots?: boolean;
    swiping?: boolean;
    title?: string;
    wrapMode?: 'nowrap' | 'wrap';
    initialPage?: number;
};
type SlideHandle = {
    goForward: () => void;
    goBack: () => void;
    goToPage: (proposedIndex: number) => void;
};

type CarouselContextType = CarouselProps & {
    currentPage: number;
    scrollOffset: number[];
    totalPages: number;
    goToPage: (idx: number) => void;
    goForward: () => void;
    goBack: () => void;
};
declare const CarouselProvider: react__default.Provider<CarouselContextType>;
declare const useCarousel: () => CarouselContextType;

declare const Carousel: react.ForwardRefExoticComponent<CarouselCallbacks & {
    children: react.ReactNode;
    arrows?: react.ReactNode;
    autoplay?: boolean;
    autoplayInterval?: number;
    className?: string;
    dots?: react.ReactNode;
    id?: string;
    keyboard?: boolean;
    minSwipeDistance?: number;
    scrollDistance?: ScrollDistanceType;
    showArrows?: ShowArrowsOption;
    showDots?: boolean;
    swiping?: boolean;
    title?: string;
    wrapMode?: "nowrap" | "wrap";
    initialPage?: number;
} & react.RefAttributes<SlideHandle>>;

export { Carousel, type CarouselCallbacks, type CarouselProps, CarouselProvider, type ScrollDistanceType, type ShowArrowsOption, type SlideHandle, useCarousel };
