react-native-gallery-picker-pro
Version:
A comprehensive React Native media gallery picker with smooth animations, multi-select, single-select, crop functionality, and native iOS/Android support
129 lines (113 loc) • 3.17 kB
TypeScript
import { ReactNode } from 'react';
// MediaType
export type MediaType = 'image' | 'video' | 'all';
// PhotoAsset interface
export interface PhotoAsset {
id: string;
uri: string;
filename: string;
width: number;
height: number;
creationDate: number;
mediaType: 'image' | 'video';
duration?: number;
}
// SelectedImage interface
export interface SelectedImage {
uri: string;
fileName: string;
fileSize: number;
width: number;
height: number;
type: string;
id: string;
base64: string;
}
// CropParams interface
export interface CropParams {
x: number;
y: number;
width: number;
height: number;
scale: number;
aspectRatio: number;
}
// MainPhotoGalleryRef interface
export interface MainPhotoGalleryRef {
triggerCropCapture: () => Promise<void>;
}
// CropValues interface
export interface CropValues {
scale: number;
translateX: number;
translateY: number;
}
// ImageCropperRef interface
export interface ImageCropperRef {
captureImage: () => Promise<string>;
}
// ImageCropper Props
export interface ImageCropperProps {
asset: PhotoAsset;
containerWidth: number;
containerHeight: number;
cropWidth: number;
cropHeight: number;
initialCropValues?: CropValues;
onCropChange?: (values: CropValues) => void;
showOverlay?: boolean;
showGrid?: boolean;
enableGestures?: boolean;
}
// MainPhotoGallery Props
export interface MainPhotoGalleryProps {
mediaType?: 'image' | 'video' | 'all';
multiSelect?: boolean;
maxSelectionLimit?: number;
selectedAssets?: PhotoAsset[];
onAssetSelected?: (asset: PhotoAsset) => void;
onSelectedAssetsChange?: (assets: PhotoAsset[]) => void;
showSelectedAssetsHeader?: boolean;
hideSelectionHeader?: boolean;
onCropParamsChange?: (assetId: string, params: CropParams | null) => void;
existingCropParams?: Map<string, CropParams>;
onAspectRatioChange?: (ratio: number) => void;
onCroppedImagesReady?: (images: Array<{assetId: string, dataUri: string}>) => void;
onCancel?: () => void;
onNext?: (assets: PhotoAsset[]) => void;
renderPermissionDeniedState?: (onRequest?: () => void) => ReactNode;
}
// PhotoAssetImage Props
export interface PhotoAssetImageProps {
asset: PhotoAsset;
size?: number;
style?: any;
}
// ImagePickerModule
export interface ImagePickerModule {
openImagePicker: (options: {
mediaType?: 'image' | 'video' | 'all';
multiSelect?: boolean;
maxSelections?: number;
includeBase64?: boolean;
}) => Promise<SelectedImage[]>;
requestPermissions: () => Promise<{
granted: boolean;
message?: string;
}>;
}
// Component exports
declare const MainPhotoGallery: React.ForwardRefExoticComponent<
MainPhotoGalleryProps & React.RefAttributes<{
triggerCropCapture: () => Promise<void>;
}>
>;
declare const PhotoAssetImage: React.FC<PhotoAssetImageProps>;
declare const ImageCropper: React.ForwardRefExoticComponent<
ImageCropperProps & React.RefAttributes<ImageCropperRef>
>;
declare const ImagePickerModule: ImagePickerModule;
// Named exports
export { MainPhotoGallery, PhotoAssetImage, ImageCropper, ImagePickerModule };
// Default export
export default MainPhotoGallery;