/// 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 {};