react-native-picture-selector 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 +627 -0
- package/android/CMakeLists.txt +30 -0
- package/android/build.gradle +79 -0
- package/android/proguard-rules.pro +21 -0
- package/android/src/main/AndroidManifest.xml +39 -0
- package/android/src/main/kotlin/com/margelo/pictureselector/GlideEngine.kt +80 -0
- package/android/src/main/kotlin/com/margelo/pictureselector/HybridPictureSelector.kt +138 -0
- package/android/src/main/kotlin/com/margelo/pictureselector/LubanCompressEngine.kt +58 -0
- package/android/src/main/kotlin/com/margelo/pictureselector/MediaAssetMapper.kt +69 -0
- package/android/src/main/kotlin/com/margelo/pictureselector/NitroPictureSelectorPackage.kt +52 -0
- package/android/src/main/kotlin/com/margelo/pictureselector/PictureSelectorOptionsMapper.kt +105 -0
- package/android/src/main/kotlin/com/margelo/pictureselector/UCropEngine.kt +57 -0
- package/android/src/main/res/xml/file_paths.xml +8 -0
- package/ios/HybridPictureSelector.swift +386 -0
- package/ios/NitroPictureSelector.podspec +39 -0
- package/lib/commonjs/PictureSelector.js +74 -0
- package/lib/commonjs/PictureSelector.js.map +1 -0
- package/lib/commonjs/index.js +39 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/PictureSelector.nitro.js +34 -0
- package/lib/commonjs/specs/PictureSelector.nitro.js.map +1 -0
- package/lib/commonjs/types.js +44 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/usePictureSelector.js +122 -0
- package/lib/commonjs/usePictureSelector.js.map +1 -0
- package/lib/module/PictureSelector.js +71 -0
- package/lib/module/PictureSelector.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/specs/PictureSelector.nitro.js +36 -0
- package/lib/module/specs/PictureSelector.nitro.js.map +1 -0
- package/lib/module/types.js +29 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/usePictureSelector.js +119 -0
- package/lib/module/usePictureSelector.js.map +1 -0
- package/lib/typescript/PictureSelector.d.ts +23 -0
- package/lib/typescript/PictureSelector.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +6 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/specs/PictureSelector.nitro.d.ts +96 -0
- package/lib/typescript/specs/PictureSelector.nitro.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +16 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/usePictureSelector.d.ts +26 -0
- package/lib/typescript/usePictureSelector.d.ts.map +1 -0
- package/nitro.json +11 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/NitroPictureSelector+autolinking.cmake +81 -0
- package/nitrogen/generated/android/NitroPictureSelector+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NitroPictureSelectorOnLoad.cpp +41 -0
- package/nitrogen/generated/android/NitroPictureSelectorOnLoad.hpp +34 -0
- package/nitrogen/generated/android/c++/JCompressOptions.hpp +69 -0
- package/nitrogen/generated/android/c++/JCropOptions.hpp +73 -0
- package/nitrogen/generated/android/c++/JHybridHybridPictureSelectorSpec.cpp +125 -0
- package/nitrogen/generated/android/c++/JHybridHybridPictureSelectorSpec.hpp +64 -0
- package/nitrogen/generated/android/c++/JMediaAsset.hpp +98 -0
- package/nitrogen/generated/android/c++/JMediaType.hpp +61 -0
- package/nitrogen/generated/android/c++/JPickerTheme.hpp +64 -0
- package/nitrogen/generated/android/c++/JPictureSelectorOptions.hpp +121 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/margelo/pictureselector/CompressOptions.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/margelo/pictureselector/CropOptions.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/margelo/pictureselector/HybridHybridPictureSelectorSpec.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/margelo/pictureselector/MediaAsset.kt +68 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/margelo/pictureselector/MediaType.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/margelo/pictureselector/NitroPictureSelectorOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/margelo/pictureselector/PickerTheme.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/margelo/pictureselector/PictureSelectorOptions.kt +65 -0
- package/nitrogen/generated/ios/NitroPictureSelector+autolinking.rb +60 -0
- package/nitrogen/generated/ios/NitroPictureSelector-Swift-Cxx-Bridge.cpp +49 -0
- package/nitrogen/generated/ios/NitroPictureSelector-Swift-Cxx-Bridge.hpp +270 -0
- package/nitrogen/generated/ios/NitroPictureSelector-Swift-Cxx-Umbrella.hpp +65 -0
- package/nitrogen/generated/ios/c++/HybridHybridPictureSelectorSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridHybridPictureSelectorSpecSwift.hpp +110 -0
- package/nitrogen/generated/ios/swift/CompressOptions.swift +83 -0
- package/nitrogen/generated/ios/swift/CropOptions.swift +101 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_MediaAsset_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridHybridPictureSelectorSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridHybridPictureSelectorSpec_cxx.swift +176 -0
- package/nitrogen/generated/ios/swift/MediaAsset.swift +118 -0
- package/nitrogen/generated/ios/swift/MediaType.swift +44 -0
- package/nitrogen/generated/ios/swift/PickerTheme.swift +48 -0
- package/nitrogen/generated/ios/swift/PictureSelectorOptions.swift +182 -0
- package/nitrogen/generated/shared/c++/CompressOptions.hpp +95 -0
- package/nitrogen/generated/shared/c++/CropOptions.hpp +99 -0
- package/nitrogen/generated/shared/c++/HybridHybridPictureSelectorSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridHybridPictureSelectorSpec.hpp +69 -0
- package/nitrogen/generated/shared/c++/MediaAsset.hpp +124 -0
- package/nitrogen/generated/shared/c++/MediaType.hpp +80 -0
- package/nitrogen/generated/shared/c++/PickerTheme.hpp +84 -0
- package/nitrogen/generated/shared/c++/PictureSelectorOptions.hpp +132 -0
- package/package.json +76 -0
- package/src/PictureSelector.ts +72 -0
- package/src/index.ts +16 -0
- package/src/specs/PictureSelector.nitro.ts +121 -0
- package/src/types.ts +38 -0
- package/src/usePictureSelector.ts +102 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "MediaType", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _PictureSelector.MediaType;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "PickerTheme", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _PictureSelector.PickerTheme;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
exports.toPickerError = toPickerError;
|
|
19
|
+
var _PictureSelector = require("./specs/PictureSelector.nitro");
|
|
20
|
+
// Re-export spec types for public consumption
|
|
21
|
+
|
|
22
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
23
|
+
// Convenience aliases
|
|
24
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Errors thrown by openPicker / openCamera.
|
|
28
|
+
*
|
|
29
|
+
* code === 'CANCELLED' — user dismissed the picker
|
|
30
|
+
* code === 'PERMISSION_DENIED' — runtime permission not granted
|
|
31
|
+
* code === 'UNKNOWN' — any other native error
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/** Normalise a raw native error to a typed PickerError. */
|
|
35
|
+
function toPickerError(err) {
|
|
36
|
+
const base = err instanceof Error ? err : new Error(String(err));
|
|
37
|
+
const msg = base.message ?? '';
|
|
38
|
+
let code = 'UNKNOWN';
|
|
39
|
+
if (msg.includes('CANCELLED')) code = 'CANCELLED';else if (msg.includes('PERMISSION_DENIED')) code = 'PERMISSION_DENIED';
|
|
40
|
+
return Object.assign(base, {
|
|
41
|
+
code
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_PictureSelector","require","toPickerError","err","base","Error","String","msg","message","code","includes","Object","assign"],"sourceRoot":"..\\..\\src","sources":["types.ts"],"mappings":";;;;;;;;;;;;;;;;;;AAQA,IAAAA,gBAAA,GAAAC,OAAA;AARA;;AAUA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACO,SAASC,aAAaA,CAACC,GAAY,EAAe;EACvD,MAAMC,IAAI,GAAGD,GAAG,YAAYE,KAAK,GAAGF,GAAG,GAAG,IAAIE,KAAK,CAACC,MAAM,CAACH,GAAG,CAAC,CAAC;EAChE,MAAMI,GAAG,GAAGH,IAAI,CAACI,OAAO,IAAI,EAAE;EAE9B,IAAIC,IAAyB,GAAG,SAAS;EACzC,IAAIF,GAAG,CAACG,QAAQ,CAAC,WAAW,CAAC,EAAED,IAAI,GAAG,WAAW,MAC5C,IAAIF,GAAG,CAACG,QAAQ,CAAC,mBAAmB,CAAC,EAAED,IAAI,GAAG,mBAAmB;EAEtE,OAAOE,MAAM,CAACC,MAAM,CAACR,IAAI,EAAE;IAAEK;EAAK,CAAC,CAAC;AACtC","ignoreList":[]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.usePictureSelector = usePictureSelector;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _PictureSelector = require("./PictureSelector");
|
|
9
|
+
var _types = require("./types");
|
|
10
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
11
|
+
// Hook state shape
|
|
12
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
// Hook
|
|
16
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* React hook that manages picker state.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const { assets, loading, pick, shoot, clear } = usePictureSelector({ maxCount: 9 })
|
|
23
|
+
*
|
|
24
|
+
* <Button onPress={() => pick()} title="Pick Photos" />
|
|
25
|
+
* {assets.map(a => <Image source={{ uri: a.uri }} />)}
|
|
26
|
+
*/
|
|
27
|
+
function usePictureSelector(defaultOptions) {
|
|
28
|
+
const [state, setState] = (0, _react.useState)({
|
|
29
|
+
assets: [],
|
|
30
|
+
loading: false,
|
|
31
|
+
error: null
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Stable ref to avoid re-creating callbacks when defaultOptions changes
|
|
35
|
+
const defaultOptionsRef = (0, _react.useRef)(defaultOptions);
|
|
36
|
+
defaultOptionsRef.current = defaultOptions;
|
|
37
|
+
const pick = (0, _react.useCallback)(async options => {
|
|
38
|
+
setState(s => ({
|
|
39
|
+
...s,
|
|
40
|
+
loading: true,
|
|
41
|
+
error: null
|
|
42
|
+
}));
|
|
43
|
+
try {
|
|
44
|
+
const merged = {
|
|
45
|
+
...defaultOptionsRef.current,
|
|
46
|
+
...options
|
|
47
|
+
};
|
|
48
|
+
const results = await _PictureSelector.PictureSelector.openPicker(merged);
|
|
49
|
+
setState({
|
|
50
|
+
assets: results,
|
|
51
|
+
loading: false,
|
|
52
|
+
error: null
|
|
53
|
+
});
|
|
54
|
+
return results;
|
|
55
|
+
} catch (err) {
|
|
56
|
+
const pickerErr = (0, _types.toPickerError)(err);
|
|
57
|
+
// Do not surface CANCELLED as an error — just restore loading state
|
|
58
|
+
if (pickerErr.code === 'CANCELLED') {
|
|
59
|
+
setState(s => ({
|
|
60
|
+
...s,
|
|
61
|
+
loading: false
|
|
62
|
+
}));
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
setState(s => ({
|
|
66
|
+
...s,
|
|
67
|
+
loading: false,
|
|
68
|
+
error: pickerErr
|
|
69
|
+
}));
|
|
70
|
+
throw pickerErr;
|
|
71
|
+
}
|
|
72
|
+
}, []);
|
|
73
|
+
const shoot = (0, _react.useCallback)(async options => {
|
|
74
|
+
setState(s => ({
|
|
75
|
+
...s,
|
|
76
|
+
loading: true,
|
|
77
|
+
error: null
|
|
78
|
+
}));
|
|
79
|
+
try {
|
|
80
|
+
const merged = {
|
|
81
|
+
...defaultOptionsRef.current,
|
|
82
|
+
...options
|
|
83
|
+
};
|
|
84
|
+
const results = await _PictureSelector.PictureSelector.openCamera(merged);
|
|
85
|
+
setState({
|
|
86
|
+
assets: results,
|
|
87
|
+
loading: false,
|
|
88
|
+
error: null
|
|
89
|
+
});
|
|
90
|
+
return results;
|
|
91
|
+
} catch (err) {
|
|
92
|
+
const pickerErr = (0, _types.toPickerError)(err);
|
|
93
|
+
if (pickerErr.code === 'CANCELLED') {
|
|
94
|
+
setState(s => ({
|
|
95
|
+
...s,
|
|
96
|
+
loading: false
|
|
97
|
+
}));
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
setState(s => ({
|
|
101
|
+
...s,
|
|
102
|
+
loading: false,
|
|
103
|
+
error: pickerErr
|
|
104
|
+
}));
|
|
105
|
+
throw pickerErr;
|
|
106
|
+
}
|
|
107
|
+
}, []);
|
|
108
|
+
const clear = (0, _react.useCallback)(() => {
|
|
109
|
+
setState({
|
|
110
|
+
assets: [],
|
|
111
|
+
loading: false,
|
|
112
|
+
error: null
|
|
113
|
+
});
|
|
114
|
+
}, []);
|
|
115
|
+
return {
|
|
116
|
+
...state,
|
|
117
|
+
pick,
|
|
118
|
+
shoot,
|
|
119
|
+
clear
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=usePictureSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_PictureSelector","_types","usePictureSelector","defaultOptions","state","setState","useState","assets","loading","error","defaultOptionsRef","useRef","current","pick","useCallback","options","s","merged","results","PictureSelector","openPicker","err","pickerErr","toPickerError","code","shoot","openCamera","clear"],"sourceRoot":"..\\..\\src","sources":["usePictureSelector.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAEA;AACA;AACA;;AAoBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,kBAAkBA,CAChCC,cAAuC,EACb;EAC1B,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAC,eAAQ,EAAuB;IACvDC,MAAM,EAAE,EAAE;IACVC,OAAO,EAAE,KAAK;IACdC,KAAK,EAAE;EACT,CAAC,CAAC;;EAEF;EACA,MAAMC,iBAAiB,GAAG,IAAAC,aAAM,EAACR,cAAc,CAAC;EAChDO,iBAAiB,CAACE,OAAO,GAAGT,cAAc;EAE1C,MAAMU,IAAI,GAAG,IAAAC,kBAAW,EACtB,MAAOC,OAAgC,IAA4B;IACjEV,QAAQ,CAAEW,CAAC,KAAM;MAAE,GAAGA,CAAC;MAAER,OAAO,EAAE,IAAI;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC,CAAC;IACvD,IAAI;MACF,MAAMQ,MAAM,GAAG;QAAE,GAAGP,iBAAiB,CAACE,OAAO;QAAE,GAAGG;MAAQ,CAAC;MAC3D,MAAMG,OAAO,GAAG,MAAMC,gCAAe,CAACC,UAAU,CAACH,MAAM,CAAC;MACxDZ,QAAQ,CAAC;QAAEE,MAAM,EAAEW,OAAO;QAAEV,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC;MAC1D,OAAOS,OAAO;IAChB,CAAC,CAAC,OAAOG,GAAG,EAAE;MACZ,MAAMC,SAAS,GAAG,IAAAC,oBAAa,EAACF,GAAG,CAAC;MACpC;MACA,IAAIC,SAAS,CAACE,IAAI,KAAK,WAAW,EAAE;QAClCnB,QAAQ,CAAEW,CAAC,KAAM;UAAE,GAAGA,CAAC;UAAER,OAAO,EAAE;QAAM,CAAC,CAAC,CAAC;QAC3C,OAAO,EAAE;MACX;MACAH,QAAQ,CAAEW,CAAC,KAAM;QAAE,GAAGA,CAAC;QAAER,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAEa;MAAU,CAAC,CAAC,CAAC;MAC7D,MAAMA,SAAS;IACjB;EACF,CAAC,EACD,EACF,CAAC;EAED,MAAMG,KAAK,GAAG,IAAAX,kBAAW,EACvB,MAAOC,OAAgC,IAA4B;IACjEV,QAAQ,CAAEW,CAAC,KAAM;MAAE,GAAGA,CAAC;MAAER,OAAO,EAAE,IAAI;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC,CAAC;IACvD,IAAI;MACF,MAAMQ,MAAM,GAAG;QAAE,GAAGP,iBAAiB,CAACE,OAAO;QAAE,GAAGG;MAAQ,CAAC;MAC3D,MAAMG,OAAO,GAAG,MAAMC,gCAAe,CAACO,UAAU,CAACT,MAAM,CAAC;MACxDZ,QAAQ,CAAC;QAAEE,MAAM,EAAEW,OAAO;QAAEV,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC;MAC1D,OAAOS,OAAO;IAChB,CAAC,CAAC,OAAOG,GAAG,EAAE;MACZ,MAAMC,SAAS,GAAG,IAAAC,oBAAa,EAACF,GAAG,CAAC;MACpC,IAAIC,SAAS,CAACE,IAAI,KAAK,WAAW,EAAE;QAClCnB,QAAQ,CAAEW,CAAC,KAAM;UAAE,GAAGA,CAAC;UAAER,OAAO,EAAE;QAAM,CAAC,CAAC,CAAC;QAC3C,OAAO,EAAE;MACX;MACAH,QAAQ,CAAEW,CAAC,KAAM;QAAE,GAAGA,CAAC;QAAER,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAEa;MAAU,CAAC,CAAC,CAAC;MAC7D,MAAMA,SAAS;IACjB;EACF,CAAC,EACD,EACF,CAAC;EAED,MAAMK,KAAK,GAAG,IAAAb,kBAAW,EAAC,MAAM;IAC9BT,QAAQ,CAAC;MAAEE,MAAM,EAAE,EAAE;MAAEC,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC;EACvD,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAE,GAAGL,KAAK;IAAES,IAAI;IAAEY,KAAK;IAAEE;EAAM,CAAC;AACzC","ignoreList":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
4
|
+
import { MediaType, toPickerError } from './types';
|
|
5
|
+
|
|
6
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
7
|
+
// Lazy singleton — created once and reused across calls
|
|
8
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
9
|
+
|
|
10
|
+
let _native = null;
|
|
11
|
+
function getNative() {
|
|
12
|
+
if (_native == null) {
|
|
13
|
+
_native = NitroModules.createHybridObject('PictureSelector');
|
|
14
|
+
}
|
|
15
|
+
return _native;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
// Default options
|
|
20
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
21
|
+
|
|
22
|
+
const defaultOptions = {
|
|
23
|
+
mediaType: MediaType.IMAGE,
|
|
24
|
+
maxCount: 1,
|
|
25
|
+
enableCamera: true
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
29
|
+
// Static API
|
|
30
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
export const PictureSelector = {
|
|
33
|
+
/**
|
|
34
|
+
* Open the gallery picker.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const assets = await PictureSelector.openPicker({ maxCount: 9 })
|
|
38
|
+
*
|
|
39
|
+
* @throws PickerError with code CANCELLED when the user dismisses
|
|
40
|
+
* @throws PickerError with code PERMISSION_DENIED on permission failure
|
|
41
|
+
*/
|
|
42
|
+
async openPicker(options = {}) {
|
|
43
|
+
try {
|
|
44
|
+
return await getNative().openPicker({
|
|
45
|
+
...defaultOptions,
|
|
46
|
+
...options
|
|
47
|
+
});
|
|
48
|
+
} catch (err) {
|
|
49
|
+
throw toPickerError(err);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
/**
|
|
53
|
+
* Open the camera for capture.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* const [asset] = await PictureSelector.openCamera({ mediaType: MediaType.VIDEO })
|
|
57
|
+
*
|
|
58
|
+
* @throws PickerError with code CANCELLED when the user dismisses
|
|
59
|
+
*/
|
|
60
|
+
async openCamera(options = {}) {
|
|
61
|
+
try {
|
|
62
|
+
return await getNative().openCamera({
|
|
63
|
+
...defaultOptions,
|
|
64
|
+
...options
|
|
65
|
+
});
|
|
66
|
+
} catch (err) {
|
|
67
|
+
throw toPickerError(err);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=PictureSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NitroModules","MediaType","toPickerError","_native","getNative","createHybridObject","defaultOptions","mediaType","IMAGE","maxCount","enableCamera","PictureSelector","openPicker","options","err","openCamera"],"sourceRoot":"..\\..\\src","sources":["PictureSelector.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAGzD,SAASC,SAAS,EAAEC,aAAa,QAAQ,SAAS;;AAElD;AACA;AACA;;AAEA,IAAIC,OAAqC,GAAG,IAAI;AAEhD,SAASC,SAASA,CAAA,EAA0B;EAC1C,IAAID,OAAO,IAAI,IAAI,EAAE;IACnBA,OAAO,GAAGH,YAAY,CAACK,kBAAkB,CACvC,iBACF,CAAC;EACH;EACA,OAAOF,OAAO;AAChB;;AAEA;AACA;AACA;;AAEA,MAAMG,cAAsC,GAAG;EAC7CC,SAAS,EAAEN,SAAS,CAACO,KAAK;EAC1BC,QAAQ,EAAE,CAAC;EACXC,YAAY,EAAE;AAChB,CAAC;;AAED;AACA;AACA;;AAEA,OAAO,MAAMC,eAAe,GAAG;EAC7B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,UAAUA,CACdC,OAA+B,GAAG,CAAC,CAAC,EACb;IACvB,IAAI;MACF,OAAO,MAAMT,SAAS,CAAC,CAAC,CAACQ,UAAU,CAAC;QAAE,GAAGN,cAAc;QAAE,GAAGO;MAAQ,CAAC,CAAC;IACxE,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZ,MAAMZ,aAAa,CAACY,GAAG,CAAC;IAC1B;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,UAAUA,CACdF,OAA+B,GAAG,CAAC,CAAC,EACb;IACvB,IAAI;MACF,OAAO,MAAMT,SAAS,CAAC,CAAC,CAACW,UAAU,CAAC;QAAE,GAAGT,cAAc;QAAE,GAAGO;MAAQ,CAAC,CAAC;IACxE,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZ,MAAMZ,aAAa,CAACY,GAAG,CAAC;IAC1B;EACF;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PictureSelector","usePictureSelector","MediaType","PickerTheme","toPickerError"],"sourceRoot":"..\\..\\src","sources":["index.ts"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,mBAAmB;AACnD,SAASC,kBAAkB,QAAQ,sBAAsB;AAczD,SAASC,SAAS,EAAEC,WAAW,EAAEC,aAAa,QAAQ,SAAS","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
+
// Enums
|
|
5
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
6
|
+
|
|
7
|
+
export let MediaType = /*#__PURE__*/function (MediaType) {
|
|
8
|
+
MediaType["IMAGE"] = "image";
|
|
9
|
+
MediaType["VIDEO"] = "video";
|
|
10
|
+
MediaType["ALL"] = "all";
|
|
11
|
+
return MediaType;
|
|
12
|
+
}({});
|
|
13
|
+
export let PickerTheme = /*#__PURE__*/function (PickerTheme) {
|
|
14
|
+
PickerTheme["DEFAULT"] = "default";
|
|
15
|
+
PickerTheme["WECHAT"] = "wechat";
|
|
16
|
+
PickerTheme["WHITE"] = "white";
|
|
17
|
+
PickerTheme["DARK"] = "dark";
|
|
18
|
+
return PickerTheme;
|
|
19
|
+
}({});
|
|
20
|
+
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
// Config sub-structures
|
|
23
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
26
|
+
// Picker options
|
|
27
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
28
|
+
|
|
29
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
30
|
+
// Result structure
|
|
31
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
32
|
+
|
|
33
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
34
|
+
// HybridObject — the main bridge
|
|
35
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
36
|
+
//# sourceMappingURL=PictureSelector.nitro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MediaType","PickerTheme"],"sourceRoot":"..\\..\\..\\src","sources":["specs/PictureSelector.nitro.ts"],"mappings":";;AAEA;AACA;AACA;;AAEA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AAMrB,WAAYC,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;;AAOvB;AACA;AACA;;AA0BA;AACA;AACA;;AAyBA;AACA;AACA;;AA2BA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// Re-export spec types for public consumption
|
|
4
|
+
|
|
5
|
+
export { MediaType, PickerTheme } from './specs/PictureSelector.nitro';
|
|
6
|
+
|
|
7
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
// Convenience aliases
|
|
9
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Errors thrown by openPicker / openCamera.
|
|
13
|
+
*
|
|
14
|
+
* code === 'CANCELLED' — user dismissed the picker
|
|
15
|
+
* code === 'PERMISSION_DENIED' — runtime permission not granted
|
|
16
|
+
* code === 'UNKNOWN' — any other native error
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** Normalise a raw native error to a typed PickerError. */
|
|
20
|
+
export function toPickerError(err) {
|
|
21
|
+
const base = err instanceof Error ? err : new Error(String(err));
|
|
22
|
+
const msg = base.message ?? '';
|
|
23
|
+
let code = 'UNKNOWN';
|
|
24
|
+
if (msg.includes('CANCELLED')) code = 'CANCELLED';else if (msg.includes('PERMISSION_DENIED')) code = 'PERMISSION_DENIED';
|
|
25
|
+
return Object.assign(base, {
|
|
26
|
+
code
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MediaType","PickerTheme","toPickerError","err","base","Error","String","msg","message","code","includes","Object","assign"],"sourceRoot":"..\\..\\src","sources":["types.ts"],"mappings":";;AAAA;;AAQA,SAASA,SAAS,EAAEC,WAAW,QAAQ,+BAA+B;;AAEtE;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA,OAAO,SAASC,aAAaA,CAACC,GAAY,EAAe;EACvD,MAAMC,IAAI,GAAGD,GAAG,YAAYE,KAAK,GAAGF,GAAG,GAAG,IAAIE,KAAK,CAACC,MAAM,CAACH,GAAG,CAAC,CAAC;EAChE,MAAMI,GAAG,GAAGH,IAAI,CAACI,OAAO,IAAI,EAAE;EAE9B,IAAIC,IAAyB,GAAG,SAAS;EACzC,IAAIF,GAAG,CAACG,QAAQ,CAAC,WAAW,CAAC,EAAED,IAAI,GAAG,WAAW,MAC5C,IAAIF,GAAG,CAACG,QAAQ,CAAC,mBAAmB,CAAC,EAAED,IAAI,GAAG,mBAAmB;EAEtE,OAAOE,MAAM,CAACC,MAAM,CAACR,IAAI,EAAE;IAAEK;EAAK,CAAC,CAAC;AACtC","ignoreList":[]}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useState, useCallback, useRef } from 'react';
|
|
4
|
+
import { PictureSelector } from './PictureSelector';
|
|
5
|
+
import { toPickerError } from './types';
|
|
6
|
+
|
|
7
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
// Hook state shape
|
|
9
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
12
|
+
// Hook
|
|
13
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* React hook that manages picker state.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const { assets, loading, pick, shoot, clear } = usePictureSelector({ maxCount: 9 })
|
|
20
|
+
*
|
|
21
|
+
* <Button onPress={() => pick()} title="Pick Photos" />
|
|
22
|
+
* {assets.map(a => <Image source={{ uri: a.uri }} />)}
|
|
23
|
+
*/
|
|
24
|
+
export function usePictureSelector(defaultOptions) {
|
|
25
|
+
const [state, setState] = useState({
|
|
26
|
+
assets: [],
|
|
27
|
+
loading: false,
|
|
28
|
+
error: null
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Stable ref to avoid re-creating callbacks when defaultOptions changes
|
|
32
|
+
const defaultOptionsRef = useRef(defaultOptions);
|
|
33
|
+
defaultOptionsRef.current = defaultOptions;
|
|
34
|
+
const pick = useCallback(async options => {
|
|
35
|
+
setState(s => ({
|
|
36
|
+
...s,
|
|
37
|
+
loading: true,
|
|
38
|
+
error: null
|
|
39
|
+
}));
|
|
40
|
+
try {
|
|
41
|
+
const merged = {
|
|
42
|
+
...defaultOptionsRef.current,
|
|
43
|
+
...options
|
|
44
|
+
};
|
|
45
|
+
const results = await PictureSelector.openPicker(merged);
|
|
46
|
+
setState({
|
|
47
|
+
assets: results,
|
|
48
|
+
loading: false,
|
|
49
|
+
error: null
|
|
50
|
+
});
|
|
51
|
+
return results;
|
|
52
|
+
} catch (err) {
|
|
53
|
+
const pickerErr = toPickerError(err);
|
|
54
|
+
// Do not surface CANCELLED as an error — just restore loading state
|
|
55
|
+
if (pickerErr.code === 'CANCELLED') {
|
|
56
|
+
setState(s => ({
|
|
57
|
+
...s,
|
|
58
|
+
loading: false
|
|
59
|
+
}));
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
setState(s => ({
|
|
63
|
+
...s,
|
|
64
|
+
loading: false,
|
|
65
|
+
error: pickerErr
|
|
66
|
+
}));
|
|
67
|
+
throw pickerErr;
|
|
68
|
+
}
|
|
69
|
+
}, []);
|
|
70
|
+
const shoot = useCallback(async options => {
|
|
71
|
+
setState(s => ({
|
|
72
|
+
...s,
|
|
73
|
+
loading: true,
|
|
74
|
+
error: null
|
|
75
|
+
}));
|
|
76
|
+
try {
|
|
77
|
+
const merged = {
|
|
78
|
+
...defaultOptionsRef.current,
|
|
79
|
+
...options
|
|
80
|
+
};
|
|
81
|
+
const results = await PictureSelector.openCamera(merged);
|
|
82
|
+
setState({
|
|
83
|
+
assets: results,
|
|
84
|
+
loading: false,
|
|
85
|
+
error: null
|
|
86
|
+
});
|
|
87
|
+
return results;
|
|
88
|
+
} catch (err) {
|
|
89
|
+
const pickerErr = toPickerError(err);
|
|
90
|
+
if (pickerErr.code === 'CANCELLED') {
|
|
91
|
+
setState(s => ({
|
|
92
|
+
...s,
|
|
93
|
+
loading: false
|
|
94
|
+
}));
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
setState(s => ({
|
|
98
|
+
...s,
|
|
99
|
+
loading: false,
|
|
100
|
+
error: pickerErr
|
|
101
|
+
}));
|
|
102
|
+
throw pickerErr;
|
|
103
|
+
}
|
|
104
|
+
}, []);
|
|
105
|
+
const clear = useCallback(() => {
|
|
106
|
+
setState({
|
|
107
|
+
assets: [],
|
|
108
|
+
loading: false,
|
|
109
|
+
error: null
|
|
110
|
+
});
|
|
111
|
+
}, []);
|
|
112
|
+
return {
|
|
113
|
+
...state,
|
|
114
|
+
pick,
|
|
115
|
+
shoot,
|
|
116
|
+
clear
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=usePictureSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","useCallback","useRef","PictureSelector","toPickerError","usePictureSelector","defaultOptions","state","setState","assets","loading","error","defaultOptionsRef","current","pick","options","s","merged","results","openPicker","err","pickerErr","code","shoot","openCamera","clear"],"sourceRoot":"..\\..\\src","sources":["usePictureSelector.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,WAAW,EAAEC,MAAM,QAAQ,OAAO;AACrD,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,SAASC,aAAa,QAAQ,SAAS;;AAEvC;AACA;AACA;;AAoBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,cAAuC,EACb;EAC1B,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGR,QAAQ,CAAuB;IACvDS,MAAM,EAAE,EAAE;IACVC,OAAO,EAAE,KAAK;IACdC,KAAK,EAAE;EACT,CAAC,CAAC;;EAEF;EACA,MAAMC,iBAAiB,GAAGV,MAAM,CAACI,cAAc,CAAC;EAChDM,iBAAiB,CAACC,OAAO,GAAGP,cAAc;EAE1C,MAAMQ,IAAI,GAAGb,WAAW,CACtB,MAAOc,OAAgC,IAA4B;IACjEP,QAAQ,CAAEQ,CAAC,KAAM;MAAE,GAAGA,CAAC;MAAEN,OAAO,EAAE,IAAI;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC,CAAC;IACvD,IAAI;MACF,MAAMM,MAAM,GAAG;QAAE,GAAGL,iBAAiB,CAACC,OAAO;QAAE,GAAGE;MAAQ,CAAC;MAC3D,MAAMG,OAAO,GAAG,MAAMf,eAAe,CAACgB,UAAU,CAACF,MAAM,CAAC;MACxDT,QAAQ,CAAC;QAAEC,MAAM,EAAES,OAAO;QAAER,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC;MAC1D,OAAOO,OAAO;IAChB,CAAC,CAAC,OAAOE,GAAG,EAAE;MACZ,MAAMC,SAAS,GAAGjB,aAAa,CAACgB,GAAG,CAAC;MACpC;MACA,IAAIC,SAAS,CAACC,IAAI,KAAK,WAAW,EAAE;QAClCd,QAAQ,CAAEQ,CAAC,KAAM;UAAE,GAAGA,CAAC;UAAEN,OAAO,EAAE;QAAM,CAAC,CAAC,CAAC;QAC3C,OAAO,EAAE;MACX;MACAF,QAAQ,CAAEQ,CAAC,KAAM;QAAE,GAAGA,CAAC;QAAEN,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAEU;MAAU,CAAC,CAAC,CAAC;MAC7D,MAAMA,SAAS;IACjB;EACF,CAAC,EACD,EACF,CAAC;EAED,MAAME,KAAK,GAAGtB,WAAW,CACvB,MAAOc,OAAgC,IAA4B;IACjEP,QAAQ,CAAEQ,CAAC,KAAM;MAAE,GAAGA,CAAC;MAAEN,OAAO,EAAE,IAAI;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC,CAAC;IACvD,IAAI;MACF,MAAMM,MAAM,GAAG;QAAE,GAAGL,iBAAiB,CAACC,OAAO;QAAE,GAAGE;MAAQ,CAAC;MAC3D,MAAMG,OAAO,GAAG,MAAMf,eAAe,CAACqB,UAAU,CAACP,MAAM,CAAC;MACxDT,QAAQ,CAAC;QAAEC,MAAM,EAAES,OAAO;QAAER,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC;MAC1D,OAAOO,OAAO;IAChB,CAAC,CAAC,OAAOE,GAAG,EAAE;MACZ,MAAMC,SAAS,GAAGjB,aAAa,CAACgB,GAAG,CAAC;MACpC,IAAIC,SAAS,CAACC,IAAI,KAAK,WAAW,EAAE;QAClCd,QAAQ,CAAEQ,CAAC,KAAM;UAAE,GAAGA,CAAC;UAAEN,OAAO,EAAE;QAAM,CAAC,CAAC,CAAC;QAC3C,OAAO,EAAE;MACX;MACAF,QAAQ,CAAEQ,CAAC,KAAM;QAAE,GAAGA,CAAC;QAAEN,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAEU;MAAU,CAAC,CAAC,CAAC;MAC7D,MAAMA,SAAS;IACjB;EACF,CAAC,EACD,EACF,CAAC;EAED,MAAMI,KAAK,GAAGxB,WAAW,CAAC,MAAM;IAC9BO,QAAQ,CAAC;MAAEC,MAAM,EAAE,EAAE;MAAEC,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC;EACvD,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAE,GAAGJ,KAAK;IAAEO,IAAI;IAAES,KAAK;IAAEE;EAAM,CAAC;AACzC","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { MediaAsset, PictureSelectorOptions } from './types';
|
|
2
|
+
export declare const PictureSelector: {
|
|
3
|
+
/**
|
|
4
|
+
* Open the gallery picker.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const assets = await PictureSelector.openPicker({ maxCount: 9 })
|
|
8
|
+
*
|
|
9
|
+
* @throws PickerError with code CANCELLED when the user dismisses
|
|
10
|
+
* @throws PickerError with code PERMISSION_DENIED on permission failure
|
|
11
|
+
*/
|
|
12
|
+
openPicker(options?: PictureSelectorOptions): Promise<MediaAsset[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Open the camera for capture.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const [asset] = await PictureSelector.openCamera({ mediaType: MediaType.VIDEO })
|
|
18
|
+
*
|
|
19
|
+
* @throws PickerError with code CANCELLED when the user dismisses
|
|
20
|
+
*/
|
|
21
|
+
openCamera(options?: PictureSelectorOptions): Promise<MediaAsset[]>;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=PictureSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PictureSelector.d.ts","sourceRoot":"","sources":["../../src/PictureSelector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAgCjE,eAAO,MAAM,eAAe;IAC1B;;;;;;;;OAQG;yBAEQ,sBAAsB,GAC9B,OAAO,CAAC,UAAU,EAAE,CAAC;IAQxB;;;;;;;OAOG;yBAEQ,sBAAsB,GAC9B,OAAO,CAAC,UAAU,EAAE,CAAC;CAOzB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { PictureSelector } from './PictureSelector';
|
|
2
|
+
export { usePictureSelector } from './usePictureSelector';
|
|
3
|
+
export type { PictureSelectorState, PictureSelectorActions, UsePictureSelectorReturn, } from './usePictureSelector';
|
|
4
|
+
export type { MediaAsset, PictureSelectorOptions, CropOptions, CompressOptions, PickerResult, PickerError, } from './types';
|
|
5
|
+
export { MediaType, PickerTheme, toPickerError } from './types';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EACV,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export declare enum MediaType {
|
|
3
|
+
IMAGE = "image",
|
|
4
|
+
VIDEO = "video",
|
|
5
|
+
ALL = "all"
|
|
6
|
+
}
|
|
7
|
+
export declare enum PickerTheme {
|
|
8
|
+
DEFAULT = "default",
|
|
9
|
+
WECHAT = "wechat",
|
|
10
|
+
WHITE = "white",
|
|
11
|
+
DARK = "dark"
|
|
12
|
+
}
|
|
13
|
+
export interface CropOptions {
|
|
14
|
+
/** Enable cropping after selection */
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
/** Allow free-form aspect ratio. Default: false */
|
|
17
|
+
freeStyle?: boolean;
|
|
18
|
+
/** Circular crop mask. iOS-only. Default: false */
|
|
19
|
+
circular?: boolean;
|
|
20
|
+
/** Width part of the crop aspect ratio. Default: 1 */
|
|
21
|
+
ratioX?: number;
|
|
22
|
+
/** Height part of the crop aspect ratio. Default: 1 */
|
|
23
|
+
ratioY?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface CompressOptions {
|
|
26
|
+
/** Enable compression */
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
/** JPEG quality, 0.0–1.0. Default: 0.8 */
|
|
29
|
+
quality?: number;
|
|
30
|
+
/** Max output width in pixels. Default: 1920 */
|
|
31
|
+
maxWidth?: number;
|
|
32
|
+
/** Max output height in pixels. Default: 1920 */
|
|
33
|
+
maxHeight?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface PictureSelectorOptions {
|
|
36
|
+
/** Media type to display. Default: IMAGE */
|
|
37
|
+
mediaType?: MediaType;
|
|
38
|
+
/** Maximum number of selectable items. Default: 1 */
|
|
39
|
+
maxCount?: number;
|
|
40
|
+
/** Show camera button inside the picker. Default: true */
|
|
41
|
+
enableCamera?: boolean;
|
|
42
|
+
/** Crop configuration. Only applies when maxCount === 1 */
|
|
43
|
+
crop?: CropOptions;
|
|
44
|
+
/** Compression configuration */
|
|
45
|
+
compress?: CompressOptions;
|
|
46
|
+
/** Max video duration in seconds */
|
|
47
|
+
maxVideoDuration?: number;
|
|
48
|
+
/** Min video duration in seconds. Default: 0 */
|
|
49
|
+
minVideoDuration?: number;
|
|
50
|
+
/** Picker UI theme */
|
|
51
|
+
theme?: PickerTheme;
|
|
52
|
+
/** Accent color as hex string, e.g. "#007AFF". iOS: themeColor; Android: accent */
|
|
53
|
+
themeColor?: string;
|
|
54
|
+
/** Pre-selected asset URIs (file:// URIs) */
|
|
55
|
+
selectedAssets?: string[];
|
|
56
|
+
}
|
|
57
|
+
export interface MediaAsset {
|
|
58
|
+
/** file:// URI of the final file (compressed or original) */
|
|
59
|
+
uri: string;
|
|
60
|
+
/** "image" | "video" */
|
|
61
|
+
type: string;
|
|
62
|
+
/** MIME type, e.g. "image/jpeg", "video/mp4" */
|
|
63
|
+
mimeType: string;
|
|
64
|
+
/** Width in pixels */
|
|
65
|
+
width: number;
|
|
66
|
+
/** Height in pixels */
|
|
67
|
+
height: number;
|
|
68
|
+
/** Duration in milliseconds (0 for images) */
|
|
69
|
+
duration: number;
|
|
70
|
+
/** Original filename with extension */
|
|
71
|
+
fileName: string;
|
|
72
|
+
/** File size in bytes */
|
|
73
|
+
fileSize: number;
|
|
74
|
+
/** file:// URI after crop or edit. Undefined if no edit was applied */
|
|
75
|
+
editedUri?: string;
|
|
76
|
+
/** iOS: true if user tapped "Original" quality button */
|
|
77
|
+
isOriginal?: boolean;
|
|
78
|
+
/** Android: album/bucket name the file belongs to */
|
|
79
|
+
bucketName?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface HybridPictureSelector extends HybridObject<{
|
|
82
|
+
ios: 'swift';
|
|
83
|
+
android: 'kotlin';
|
|
84
|
+
}> {
|
|
85
|
+
/**
|
|
86
|
+
* Open the photo/video gallery picker.
|
|
87
|
+
* Rejects with message "CANCELLED" when the user dismisses without selection.
|
|
88
|
+
*/
|
|
89
|
+
openPicker(options: PictureSelectorOptions): Promise<MediaAsset[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Open the device camera for capture.
|
|
92
|
+
* Rejects with message "CANCELLED" when the user dismisses.
|
|
93
|
+
*/
|
|
94
|
+
openCamera(options: PictureSelectorOptions): Promise<MediaAsset[]>;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=PictureSelector.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PictureSelector.nitro.d.ts","sourceRoot":"","sources":["../../../src/specs/PictureSelector.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAM9D,oBAAY,SAAS;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,GAAG,QAAQ;CACZ;AAED,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAMD,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD,MAAM,WAAW,sBAAsB;IACrC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,sBAAsB;IACtB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAMD,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAA;IACX,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAA;IAChB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAA;IAChB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAMD,MAAM,WAAW,qBACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACzD;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAElE;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;CACnE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type { MediaAsset, PictureSelectorOptions, CropOptions, CompressOptions, } from './specs/PictureSelector.nitro';
|
|
2
|
+
export { MediaType, PickerTheme } from './specs/PictureSelector.nitro';
|
|
3
|
+
export type PickerResult = import('./specs/PictureSelector.nitro').MediaAsset[];
|
|
4
|
+
/**
|
|
5
|
+
* Errors thrown by openPicker / openCamera.
|
|
6
|
+
*
|
|
7
|
+
* code === 'CANCELLED' — user dismissed the picker
|
|
8
|
+
* code === 'PERMISSION_DENIED' — runtime permission not granted
|
|
9
|
+
* code === 'UNKNOWN' — any other native error
|
|
10
|
+
*/
|
|
11
|
+
export interface PickerError extends Error {
|
|
12
|
+
code: 'CANCELLED' | 'PERMISSION_DENIED' | 'UNKNOWN';
|
|
13
|
+
}
|
|
14
|
+
/** Normalise a raw native error to a typed PickerError. */
|
|
15
|
+
export declare function toPickerError(err: unknown): PickerError;
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AACA,YAAY,EACV,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,eAAe,GAChB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAMtE,MAAM,MAAM,YAAY,GAAG,OAAO,+BAA+B,EAAE,UAAU,EAAE,CAAA;AAE/E;;;;;;GAMG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,IAAI,EAAE,WAAW,GAAG,mBAAmB,GAAG,SAAS,CAAA;CACpD;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CASvD"}
|