@hotta/react-native-imagepicker 0.1.2

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/package.json ADDED
@@ -0,0 +1,171 @@
1
+ {
2
+ "name": "@hotta/react-native-imagepicker",
3
+ "version": "0.1.2",
4
+ "description": "@ht/react-native-imagepicker",
5
+ "main": "./lib/module/index.js",
6
+ "types": "./lib/typescript/src/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "source": "./src/index.tsx",
10
+ "types": "./lib/typescript/src/index.d.ts",
11
+ "default": "./lib/module/index.js"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
15
+ "files": [
16
+ "src",
17
+ "lib",
18
+ "android",
19
+ "ios",
20
+ "cpp",
21
+ "*.podspec",
22
+ "react-native.config.js",
23
+ "!ios/build",
24
+ "!android/build",
25
+ "!android/gradle",
26
+ "!android/gradlew",
27
+ "!android/gradlew.bat",
28
+ "!android/local.properties",
29
+ "!**/__tests__",
30
+ "!**/__fixtures__",
31
+ "!**/__mocks__",
32
+ "!**/.*"
33
+ ],
34
+ "scripts": {
35
+ "example": "yarn workspace @ht-react-native/imagepicker-example",
36
+ "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
37
+ "prepare": "bob build",
38
+ "typecheck": "tsc",
39
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
40
+ "release": "release-it --only-version",
41
+ "test": "jest"
42
+ },
43
+ "keywords": [
44
+ "react-native",
45
+ "ios",
46
+ "android"
47
+ ],
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "git+https://github.com/weiningtry7/ht-react-native-imagepicker.git"
51
+ },
52
+ "author": "伟宁 <1131811951@qq.com> (https://github.com/weiningtry7)",
53
+ "license": "MIT",
54
+ "bugs": {
55
+ "url": "https://github.com/weiningtry7/ht-react-native-imagepicker/issues"
56
+ },
57
+ "homepage": "https://github.com/weiningtry7/ht-react-native-imagepicker#readme",
58
+ "publishConfig": {
59
+ "registry": "https://registry.npmjs.org/",
60
+ "access": "public"
61
+ },
62
+ "devDependencies": {
63
+ "@commitlint/config-conventional": "^19.8.1",
64
+ "@eslint/compat": "^1.3.2",
65
+ "@eslint/eslintrc": "^3.3.1",
66
+ "@eslint/js": "^9.35.0",
67
+ "@react-native-community/cli": "20.0.1",
68
+ "@react-native/babel-preset": "0.81.1",
69
+ "@react-native/eslint-config": "^0.81.1",
70
+ "@release-it/conventional-changelog": "^10.0.1",
71
+ "@types/jest": "^29.5.14",
72
+ "@types/react": "^19.1.0",
73
+ "commitlint": "^19.8.1",
74
+ "del-cli": "^6.0.0",
75
+ "eslint": "^9.35.0",
76
+ "eslint-config-prettier": "^10.1.8",
77
+ "eslint-plugin-prettier": "^5.5.4",
78
+ "jest": "^29.7.0",
79
+ "lefthook": "^2.0.3",
80
+ "prettier": "^2.8.8",
81
+ "react": "19.1.0",
82
+ "react-native": "0.81.1",
83
+ "react-native-builder-bob": "^0.40.13",
84
+ "release-it": "^19.0.4",
85
+ "turbo": "^2.5.6",
86
+ "typescript": "^5.9.2"
87
+ },
88
+ "peerDependencies": {
89
+ "react": "*",
90
+ "react-native": "*"
91
+ },
92
+ "workspaces": [
93
+ "example"
94
+ ],
95
+ "packageManager": "yarn@4.11.0",
96
+ "react-native-builder-bob": {
97
+ "source": "src",
98
+ "output": "lib",
99
+ "targets": [
100
+ [
101
+ "module",
102
+ {
103
+ "esm": true
104
+ }
105
+ ],
106
+ [
107
+ "typescript",
108
+ {
109
+ "project": "tsconfig.build.json"
110
+ }
111
+ ]
112
+ ]
113
+ },
114
+ "codegenConfig": {
115
+ "name": "NativeImagePickerSpec",
116
+ "type": "modules",
117
+ "jsSrcsDir": "src",
118
+ "android": {
119
+ "javaPackageName": "com.htreactnative.imagepicker"
120
+ }
121
+ },
122
+ "prettier": {
123
+ "quoteProps": "consistent",
124
+ "singleQuote": true,
125
+ "tabWidth": 2,
126
+ "trailingComma": "es5",
127
+ "useTabs": false
128
+ },
129
+ "commitlint": {
130
+ "extends": [
131
+ "@commitlint/config-conventional"
132
+ ]
133
+ },
134
+ "release-it": {
135
+ "git": {
136
+ "commitMessage": "chore: release ${version}",
137
+ "tagName": "v${version}"
138
+ },
139
+ "npm": {
140
+ "publish": true
141
+ },
142
+ "github": {
143
+ "release": true
144
+ },
145
+ "plugins": {
146
+ "@release-it/conventional-changelog": {
147
+ "preset": {
148
+ "name": "angular"
149
+ }
150
+ }
151
+ }
152
+ },
153
+ "jest": {
154
+ "preset": "react-native",
155
+ "modulePathIgnorePatterns": [
156
+ "<rootDir>/example/node_modules",
157
+ "<rootDir>/lib/"
158
+ ]
159
+ },
160
+ "create-react-native-library": {
161
+ "languages": "kotlin-objc",
162
+ "type": "turbo-module",
163
+ "tools": [
164
+ "eslint",
165
+ "lefthook",
166
+ "release-it",
167
+ "jest"
168
+ ],
169
+ "version": "0.55.1"
170
+ }
171
+ }
@@ -0,0 +1,79 @@
1
+ import { TurboModuleRegistry, type TurboModule } from 'react-native';
2
+ import { Dimensions } from 'react-native';
3
+ export type ImagePickerOption = {
4
+ imageCount: number, // 最大选择图片数目,默认6
5
+ isRecordSelected: boolean, // 是否已选图片
6
+ isCamera: boolean, // 是否允许用户在内部拍照,默认true
7
+ isCrop: boolean, // 是否允许裁剪,默认false, imageCount 为1才生效
8
+ CropW: number, // 裁剪宽度,默认屏幕宽度60%
9
+ CropH: number, // 裁剪高度,默认屏幕宽度60%
10
+ isGif: boolean, // 是否允许选择GIF,默认false,暂无回调GIF数据
11
+ showCropCircle: boolean, // 是否显示圆形裁剪区域,默认false
12
+ circleCropRadius: number, // 圆形裁剪半径,默认屏幕宽度一半
13
+ showCropFrame: boolean, // 是否显示裁剪区域,默认true
14
+ showCropGrid: boolean, // 是否隐藏裁剪区域网格,默认false
15
+ freeStyleCropEnabled: boolean, // 裁剪框是否可拖拽
16
+ rotateEnabled: boolean, // 裁剪是否可旋转图片
17
+ scaleEnabled: boolean, // 裁剪是否可放大缩小图片
18
+ compress: boolean,
19
+ compressFocusAlpha:boolean, //压缩png保留通明度
20
+ minimumCompressSize: number, // 小于100kb的图片不压缩
21
+ quality: number, // 压缩质量
22
+ enableBase64: boolean, // 是否返回base64编码,默认不返回
23
+ allowPickingOriginalPhoto: boolean,
24
+ allowPickingMultipleVideo: boolean, // 可以多选视频/gif/图片,和照片共享最大可选张数maxImagesCount的限制
25
+ videoMaximumDuration: number, // 视频最大拍摄时间,默认是10分钟,单位是秒
26
+ isWeChatStyle: boolean, // 是否是微信风格选择界面 Android Only
27
+ sortAscendingByModificationDate: boolean // 对照片排序,按修改时间升序,默认是YES。如果设置为NO,最新的照片会显示在最前面,内部的拍照按钮会排在第一个
28
+ videoCount: number // 视频个数
29
+ MaxSecond: number // 选择视频最大时长,默认是180秒
30
+ MinSecond: number // 选择视频最小时长,默认是1秒
31
+ showSelectedIndex: boolean, // 是否显示序号, 默认不显示
32
+ }
33
+
34
+ export interface SelectedPhoto {
35
+ width: number, //图片宽度
36
+ height: number, //图片高度
37
+ uri: string, //图片路径
38
+ original_uri:string, //图片原始路径,仅 Android
39
+ type: string, //文件类型,仅 Android,当前只返回 image
40
+ size:number, //图片大小,单位为字节 b
41
+ base64:string //图片的 base64 编码,如果 enableBase64 设置 false,则不返回该属性
42
+ }
43
+ const { width } = Dimensions.get('window');
44
+
45
+ /**
46
+ * 默认参数
47
+ */
48
+ export const defaultOptions = {
49
+ imageCount: 6, // 最大选择图片数目,默认6
50
+ isRecordSelected: false, // 是否已选图片
51
+ isCamera: true, // 是否允许用户在内部拍照,默认true
52
+ isCrop: false, // 是否允许裁剪,默认false, imageCount 为1才生效
53
+ CropW: ~~(width * 0.6), // 裁剪宽度,默认屏幕宽度60%
54
+ CropH: ~~(width * 0.6), // 裁剪高度,默认屏幕宽度60%
55
+ isGif: false, // 是否允许选择GIF,默认false,暂无回调GIF数据
56
+ showCropCircle: false, // 是否显示圆形裁剪区域,默认false
57
+ circleCropRadius: ~~(width / 4), // 圆形裁剪半径,默认屏幕宽度一半
58
+ showCropFrame: true, // 是否显示裁剪区域,默认true
59
+ showCropGrid: false, // 是否隐藏裁剪区域网格,默认false
60
+ freeStyleCropEnabled: false, // 裁剪框是否可拖拽
61
+ rotateEnabled: true, // 裁剪是否可旋转图片
62
+ scaleEnabled: true, // 裁剪是否可放大缩小图片
63
+ compress: true,
64
+ compressFocusAlpha:false, //压缩png保留通明度
65
+ minimumCompressSize: 100, // 小于100kb的图片不压缩
66
+ quality: 90, // 压缩质量
67
+ enableBase64: false, // 是否返回base64编码,默认不返回
68
+ allowPickingOriginalPhoto: false,
69
+ allowPickingMultipleVideo: false, // 可以多选视频/gif/图片,和照片共享最大可选张数maxImagesCount的限制
70
+ videoMaximumDuration: 10 * 60, // 视频最大拍摄时间,默认是10分钟,单位是秒
71
+ isWeChatStyle: false, // 是否是微信风格选择界面 Android Only
72
+ sortAscendingByModificationDate: true, // 对照片排序,按修改时间升序,默认是YES。如果设置为NO,最新的照片会显示在最前面,内部的拍照按钮会排在第一个
73
+ showSelectedIndex: false, // 是否显示序号, 默认不显示
74
+ };
75
+ export interface Spec extends TurboModule {
76
+ asyncShowImagePicker(options:ImagePickerOption): Promise<Array<SelectedPhoto>>;
77
+ }
78
+
79
+ export default TurboModuleRegistry.getEnforcing<Spec>('NativeImagePicker');
package/src/index.tsx ADDED
@@ -0,0 +1,9 @@
1
+ import NativeImagePicker from './NativeImagePicker';
2
+
3
+ const HTNativeImagePicker = (() => {
4
+ return {
5
+ asyncShowImagePicker: NativeImagePicker.asyncShowImagePicker
6
+ };
7
+ })()
8
+
9
+ export default HTNativeImagePicker