import React, { ReactElement, RefObject, MutableRefObject } from 'react';
import { ImageURISource, ImageResizeMode, TouchableOpacity, TouchableOpacityProps, StyleProp, ViewStyle } from 'react-native';

declare enum GestureEnum {
    TAP = "TAP",
    MODAL = "MODAL"
}
type ImageViewerItemData = {
    key: string;
    source: ImageURISource;
};
type ImageViewerProps = {
    data: ImageViewerItemData[];
    onLongPress?: (_: {
        item: ImageViewerItemData;
        index: number;
    }) => void;
    renderCustomComponent?: (_: {
        item: ImageViewerItemData;
        index: number;
    }) => ReactElement;
    imageResizeMode?: ImageResizeMode;
    onChange?: (currentIndex: number) => void;
    dragUpToCloseEnabled?: boolean;
    maxScale?: number;
    doubleTapScale?: number;
    shouldCloseViewer?: (props: {
        gesture: GestureEnum;
        index: number;
        imageData: ImageViewerItemData;
        loaded: boolean;
    }) => boolean;
    originalLayoutOffset?: {
        pageX?: number;
        pageY?: number;
    };
};
type ImageViewerRef = {
    show: (_: {
        index: number;
        source: ImageURISource;
    }) => void;
    init: (_: {
        index: number;
        itemRef: RefObject<TouchableOpacity>;
    }) => void;
    close: () => void;
};
declare const _default$1: React.MemoExoticComponent<React.ForwardRefExoticComponent<ImageViewerProps & React.RefAttributes<ImageViewerRef>>>;

type ImageWrapperType = {
    viewerRef: MutableRefObject<ImageViewerRef | null>;
    index: number;
    source: ImageURISource;
    onPress?: () => boolean | void;
    wrapperProps?: TouchableOpacityProps;
    children?: React.ReactNode;
    style?: StyleProp<ViewStyle>;
};
declare const _default: React.MemoExoticComponent<(props: ImageWrapperType) => JSX.Element>;

export { GestureEnum, _default$1 as ImageViewer, ImageViewerItemData, ImageViewerProps, ImageViewerRef, _default as ImageWrapper, ImageWrapperType };
