///
import type { ActivityIndicatorProps, FlatListProps, ImageProps, ImageResizeMode, ImageSourcePropType, ModalProps, StyleProp, ViewProps, ViewStyle } from 'react-native';
import type { AnimateProps, AnimateStyle } from 'react-native-reanimated';
export interface ArrayData {
id: number;
source: ImageSourcePropType;
}
export interface NetworkData {
loading?: boolean;
error?: boolean;
}
export interface PhotoGalleryProps extends ViewProps, Pick, Pick, Pick {
data: Array;
scaledImageResizeMode?: ImageResizeMode;
flatListProps?: Omit, 'data' | 'renderItem'>;
listItemProps?: Pick;
modalContentImageProps?: AnimateProps;
onImageExpand?: ({ visible }: Pick) => void;
modalProps?: Omit;
}
export interface MeasureValues {
x: number;
y: number;
width: number;
height: number;
pageX: number;
pageY: number;
}
export interface ListItemProps extends Pick {
item: ArrayData;
onPress: (args: MeasureValues) => void;
containerStyle?: StyleProp;
imageContainerStyle?: StyleProp>;
imageProps?: Omit, 'source' | 'defaultSource'>;
networkLoaderProps?: ActivityIndicatorProps;
networkImageProps?: Partial;
}
export interface TargetValues extends Pick {
opacity: number;
}
declare type Enumerate = Acc['length'] extends N ? Acc[number] : Enumerate;
export declare type Range = Exclude, Enumerate>;
export interface ModalContentProps {
contentStyle?: StyleProp, 'top' | 'left' | 'height' | 'width' | 'opacity' | 'position' | 'backgroundColor'>>;
contentProps?: Omit, 'style'>;
}
export interface PhotosModalProps extends Pick, Omit, Pick, Pick {
visible: boolean;
children: React.ReactElement;
origin: Omit;
renderHeader?: (args: () => void) => React.ReactElement;
onClose: () => void;
data: Array;
index: number;
item: ArrayData;
modalBackgroundProps?: Omit, 'style'>;
animationCloseSpeed?: Range<200, 500>;
animatedThumbnailScrollSpeed?: 10 | 20 | 30;
animatedImageDelay?: 20 | 30 | 60 | 90;
modalHeaderProps?: Pick;
modalFooterProps?: Pick;
modalContentProps?: ModalContentProps;
modalBackgroundStyle?: StyleProp, 'top' | 'left' | 'width' | 'height' | 'position'>>;
}
export interface PhotoModalHeaderProps {
close: () => void;
boxOpacityStyle: Pick;
containerProps?: Omit, 'style'>;
containerStyle?: StyleProp, 'opacity' | 'position' | 'width'>>;
}
export interface PhotoModalFooterProps {
handleScroll: () => void;
currentItem: ArrayData;
setCurrentItem: React.Dispatch>;
animatedProps: Partial<{
contentOffset: {
x: number;
y: number;
};
}>;
thumbnailFlatListProps?: Omit>, 'data' | 'renderItem' | 'onScrollToIndexFailed' | 'onScroll' | 'horizontal'>;
footerContainerProps?: Omit, 'style'>;
footerContainerStyle?: StyleProp, 'position' | 'bottom'>>;
getFooterContainerHeight: (height: number) => void;
thumbnailListImageHeight?: number;
thumbnailListImageWidth?: number;
thumbnailListImageSpace?: Range<5, 35>;
}
export interface GlobalConstantType {
animationCloseSpeedMargin: number;
originExtraLeft: number;
originExtraTop: number;
originExtraWidth: number;
originExtraHeight: number;
}
export interface ScrollToIndexFailErrorType {
index: number;
highestMeasuredFrameIndex: number;
averageItemLength: number;
}
export interface NetworkLoaderProps extends ActivityIndicatorProps, ViewProps {
renderNetworkLoader?: () => React.ReactElement;
}
export interface AnimatedImageProps extends Pick, Omit, 'source' | 'defaultSource'> {
enableNetworkHandling?: boolean;
}
declare type RenderItemStyle = {
width: number | undefined;
height: number | undefined;
};
declare type MarginHorizontal = {
marginHorizontal: number;
};
export interface RenderFooterItemProps extends Pick, Pick {
renderItem: ArrayData;
marginHorizontal: MarginHorizontal;
renderItemStyle: RenderItemStyle;
}
export {};