import * as MediaLibrary from 'expo-media-library';
import { Component, RefObject } from 'react';
import { FlatList, ViewProps, ViewStyle } from 'react-native';
export declare type Views = 'album' | 'gallery';
export declare type Page = MediaLibrary.PagedInfo<MediaLibrary.Asset>;
export declare type Asset = MediaLibrary.Asset;
export declare type Album = MediaLibrary.Album;
export declare type AssetsOptions = MediaLibrary.AssetsOptions;
interface SelectedAsset {
    asset: Asset;
    uncheck: () => void;
}
interface Size {
    width: number;
    height: number;
}
interface ImagePickerCarouselState {
    page?: Page;
    selectedAssets: Map<string, SelectedAsset>;
    data: ImageBoxItem[];
    currentIndex: number;
}
interface ImagePickerCarouselProps {
    columns: number;
    multiple?: boolean;
    onSelect?: (images: Asset[]) => void;
    albumID?: string;
    check?: () => JSX.Element;
    selected?: Asset[];
    max?: number;
    timeSlider?: boolean;
    timeSliderHeight?: number;
    slider?: (data: SliderData) => JSX.Element;
    video?: boolean;
    image?: boolean;
    videoComponent?: (asset: Asset) => JSX.Element;
}
export interface ImageBoxItem {
    asset: Asset;
    size: Size;
    onCheck: (checked: boolean, asset: SelectedAsset) => boolean;
    isChecked: () => boolean;
    check?: () => JSX.Element;
    video?: (asset: Asset) => JSX.Element;
}
export interface HeaderData {
    view: Views;
    goToAlbum?: () => void;
    imagesPicked: number;
    multiple: boolean;
    picked: boolean;
    album?: Album;
    noAlbums: boolean;
    save?: () => void;
}
export interface AlbumData {
    thumb: Asset;
    album: Album;
    goToGallery: (album: Album) => void;
}
export interface SliderItem {
    date: Date;
    top: number;
    styles?: ViewStyle;
}
export interface SliderBalloon extends SliderItem {
    quantity: number;
}
export interface SliderData {
    balloons: SliderBalloon[];
    button?: SliderItem;
    height: number;
    isMoving: boolean;
    buttonProps?: ViewProps;
}
export interface ScrollTimeData {
    selected: Map<string, SelectedAsset>;
    data: ImageBoxItem[];
    flatList: RefObject<FlatList<ImageBoxItem>> | null;
    galleryColumns: number;
    currentIndex: number;
    height?: number;
    customSlider?: (data: SliderData) => JSX.Element;
}
export interface ImagePickerTheme {
    header?: (props: HeaderData) => JSX.Element;
    album?: (props: AlbumData) => JSX.Element;
    check?: () => JSX.Element;
    slider?: (props: SliderData) => JSX.Element;
    video?: (asset: Asset) => JSX.Element;
}
export interface ImagePickerProps {
    galleryColumns?: number;
    albumColumns?: number;
    theme?: ImagePickerTheme;
    noAlbums?: boolean;
    multiple?: boolean;
    onSave?: (images: Asset[]) => void;
    onCancel?: () => void;
    selected?: Asset[];
    selectedAlbum?: Album;
    onSelectAlbum?: (album: Album | undefined) => void;
    limit?: number;
    timeSlider?: boolean;
    timeSliderHeight?: number;
    video?: boolean;
    image?: boolean;
}
export declare class ImagePickerCarousel extends Component<ImagePickerCarouselProps> {
    private flatListRef;
    _unmounted: boolean;
    state: ImagePickerCarouselState;
    getColumns(): number;
    isMultiple(): boolean;
    getImageSize(): {
        width: number;
        height: number;
    };
    getItemsPerScreen(): number;
    selectedImage(checked: boolean, selected: SelectedAsset): boolean;
    exists(asset_id: string): ImageBoxItem | undefined;
    isChecked(asset_id: string): boolean;
    fetchNextPage(stack: number): Promise<boolean>;
    fillStartImages(): Promise<void>;
    selectPropsImages(): void;
    componentDidMount(): Promise<void>;
    componentWillUnmount(): void;
    render(): JSX.Element;
}
export declare function ImagePicker(props: ImagePickerProps): JSX.Element;
export {};
