motorinc-gallery-picker-pro 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +236 -0
- package/android/build.gradle +22 -0
- package/android/src/main/AndroidManifest.xml +10 -0
- package/android/src/main/java/com/gallerypicker/imagepicker/ImagePickerModule.java +1968 -0
- package/android/src/main/java/com/gallerypicker/imagepicker/ImagePickerPackage.java +24 -0
- package/index.d.ts +129 -0
- package/index.js +18 -0
- package/ios/ImagePickerModule.h +8 -0
- package/ios/ImagePickerModule.m +876 -0
- package/motorinc-gallery-picker-pro.podspec +21 -0
- package/package.json +63 -0
- package/react-native.config.js +13 -0
- package/src/components/ImageCropper.tsx +433 -0
- package/src/components/MainPhotoGallery.tsx +2639 -0
- package/src/components/PhotoAssetImage.tsx +121 -0
- package/src/modules/ImagePickerModule.ts +117 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package com.gallerypicker.imagepicker;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.ReactPackage;
|
|
4
|
+
import com.facebook.react.bridge.NativeModule;
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
6
|
+
import com.facebook.react.uimanager.ViewManager;
|
|
7
|
+
|
|
8
|
+
import java.util.ArrayList;
|
|
9
|
+
import java.util.Collections;
|
|
10
|
+
import java.util.List;
|
|
11
|
+
|
|
12
|
+
public class ImagePickerPackage implements ReactPackage {
|
|
13
|
+
@Override
|
|
14
|
+
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
|
|
15
|
+
List<NativeModule> modules = new ArrayList<>();
|
|
16
|
+
modules.add(new ImagePickerModule(reactContext));
|
|
17
|
+
return modules;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@Override
|
|
21
|
+
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
|
|
22
|
+
return Collections.emptyList();
|
|
23
|
+
}
|
|
24
|
+
}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
// MediaType
|
|
4
|
+
export type MediaType = 'image' | 'video' | 'all';
|
|
5
|
+
|
|
6
|
+
// PhotoAsset interface
|
|
7
|
+
export interface PhotoAsset {
|
|
8
|
+
id: string;
|
|
9
|
+
uri: string;
|
|
10
|
+
filename: string;
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
creationDate: number;
|
|
14
|
+
mediaType: 'image' | 'video';
|
|
15
|
+
duration?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// SelectedImage interface
|
|
19
|
+
export interface SelectedImage {
|
|
20
|
+
uri: string;
|
|
21
|
+
fileName: string;
|
|
22
|
+
fileSize: number;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
type: string;
|
|
26
|
+
id: string;
|
|
27
|
+
base64: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// CropParams interface
|
|
31
|
+
export interface CropParams {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
width: number;
|
|
35
|
+
height: number;
|
|
36
|
+
scale: number;
|
|
37
|
+
aspectRatio: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// MainPhotoGalleryRef interface
|
|
41
|
+
export interface MainPhotoGalleryRef {
|
|
42
|
+
triggerCropCapture: () => Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// CropValues interface
|
|
46
|
+
export interface CropValues {
|
|
47
|
+
scale: number;
|
|
48
|
+
translateX: number;
|
|
49
|
+
translateY: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ImageCropperRef interface
|
|
53
|
+
export interface ImageCropperRef {
|
|
54
|
+
captureImage: () => Promise<string>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ImageCropper Props
|
|
58
|
+
export interface ImageCropperProps {
|
|
59
|
+
asset: PhotoAsset;
|
|
60
|
+
containerWidth: number;
|
|
61
|
+
containerHeight: number;
|
|
62
|
+
cropWidth: number;
|
|
63
|
+
cropHeight: number;
|
|
64
|
+
initialCropValues?: CropValues;
|
|
65
|
+
onCropChange?: (values: CropValues) => void;
|
|
66
|
+
showOverlay?: boolean;
|
|
67
|
+
showGrid?: boolean;
|
|
68
|
+
enableGestures?: boolean;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// MainPhotoGallery Props
|
|
72
|
+
export interface MainPhotoGalleryProps {
|
|
73
|
+
mediaType?: 'image' | 'video' | 'all';
|
|
74
|
+
multiSelect?: boolean;
|
|
75
|
+
maxSelectionLimit?: number;
|
|
76
|
+
selectedAssets?: PhotoAsset[];
|
|
77
|
+
onAssetSelected?: (asset: PhotoAsset) => void;
|
|
78
|
+
onSelectedAssetsChange?: (assets: PhotoAsset[]) => void;
|
|
79
|
+
showSelectedAssetsHeader?: boolean;
|
|
80
|
+
hideSelectionHeader?: boolean;
|
|
81
|
+
onCropParamsChange?: (assetId: string, params: CropParams | null) => void;
|
|
82
|
+
existingCropParams?: Map<string, CropParams>;
|
|
83
|
+
onAspectRatioChange?: (ratio: number) => void;
|
|
84
|
+
onCroppedImagesReady?: (images: Array<{assetId: string, dataUri: string}>) => void;
|
|
85
|
+
onCancel?: () => void;
|
|
86
|
+
onNext?: (assets: PhotoAsset[]) => void;
|
|
87
|
+
renderPermissionDeniedState?: (onRequest?: () => void) => ReactNode;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// PhotoAssetImage Props
|
|
91
|
+
export interface PhotoAssetImageProps {
|
|
92
|
+
asset: PhotoAsset;
|
|
93
|
+
size?: number;
|
|
94
|
+
style?: any;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// ImagePickerModule
|
|
98
|
+
export interface ImagePickerModule {
|
|
99
|
+
openImagePicker: (options: {
|
|
100
|
+
mediaType?: 'image' | 'video' | 'all';
|
|
101
|
+
multiSelect?: boolean;
|
|
102
|
+
maxSelections?: number;
|
|
103
|
+
includeBase64?: boolean;
|
|
104
|
+
}) => Promise<SelectedImage[]>;
|
|
105
|
+
|
|
106
|
+
requestPermissions: () => Promise<{
|
|
107
|
+
granted: boolean;
|
|
108
|
+
message?: string;
|
|
109
|
+
}>;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Component exports
|
|
113
|
+
declare const MainPhotoGallery: React.ForwardRefExoticComponent<
|
|
114
|
+
MainPhotoGalleryProps & React.RefAttributes<{
|
|
115
|
+
triggerCropCapture: () => Promise<void>;
|
|
116
|
+
}>
|
|
117
|
+
>;
|
|
118
|
+
|
|
119
|
+
declare const PhotoAssetImage: React.FC<PhotoAssetImageProps>;
|
|
120
|
+
declare const ImageCropper: React.ForwardRefExoticComponent<
|
|
121
|
+
ImageCropperProps & React.RefAttributes<ImageCropperRef>
|
|
122
|
+
>;
|
|
123
|
+
declare const ImagePickerModule: ImagePickerModule;
|
|
124
|
+
|
|
125
|
+
// Named exports
|
|
126
|
+
export { MainPhotoGallery, PhotoAssetImage, ImageCropper, ImagePickerModule };
|
|
127
|
+
|
|
128
|
+
// Default export
|
|
129
|
+
export default MainPhotoGallery;
|
package/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import MainPhotoGallery from './src/components/MainPhotoGallery';
|
|
2
|
+
import PhotoAssetImage from './src/components/PhotoAssetImage';
|
|
3
|
+
import ImageCropper from './src/components/ImageCropper';
|
|
4
|
+
import ImagePickerModule from './src/modules/ImagePickerModule';
|
|
5
|
+
|
|
6
|
+
// Export types
|
|
7
|
+
export * from './src/modules/ImagePickerModule';
|
|
8
|
+
|
|
9
|
+
// Export components
|
|
10
|
+
export {
|
|
11
|
+
MainPhotoGallery,
|
|
12
|
+
PhotoAssetImage,
|
|
13
|
+
ImageCropper,
|
|
14
|
+
ImagePickerModule
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// Default export
|
|
18
|
+
export default MainPhotoGallery;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
#import <UIKit/UIKit.h>
|
|
4
|
+
#import <PhotosUI/PhotosUI.h>
|
|
5
|
+
|
|
6
|
+
@interface ImagePickerModule : RCTEventEmitter <RCTBridgeModule, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate>
|
|
7
|
+
|
|
8
|
+
@end
|