react-native-video-trim 3.0.10 → 4.1.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/LICENSE +1 -1
- package/README.md +80 -63
- package/VideoTrim.podspec +24 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +82 -49
- package/android/gradle.properties +7 -5
- package/android/src/main/AndroidManifest.xml +4 -2
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/margelo/nitro/videotrim/VideoTrim.kt +646 -0
- package/android/src/main/java/com/margelo/nitro/videotrim/VideoTrimPackage.kt +22 -0
- package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/enums/ErrorCode.java +1 -1
- package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/interfaces/IVideoTrimmerView.java +1 -1
- package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/interfaces/VideoTrimListener.java +6 -5
- package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/utils/MediaMetadataUtil.java +1 -1
- package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/utils/StorageUtil.java +3 -1
- package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/utils/VideoTrimmerUtil.java +51 -41
- package/android/src/main/java/com/{videotrim → margelo/nitro/videotrim}/widgets/VideoTrimmerView.java +45 -69
- package/ios/AssetLoader.swift +2 -2
- package/ios/ErrorCode.swift +2 -2
- package/ios/ProgressAlertController.swift +2 -2
- package/ios/VideoTrim.swift +52 -835
- package/ios/VideoTrimImpl.swift +957 -0
- package/ios/VideoTrimmer.swift +2 -3
- package/ios/VideoTrimmerThumb.swift +33 -26
- package/ios/VideoTrimmerViewController.swift +47 -28
- package/lib/module/VideoTrim.nitro.js +4 -0
- package/lib/module/VideoTrim.nitro.js.map +1 -0
- package/lib/module/index.js +98 -22
- package/lib/module/index.js.map +1 -1
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/{index.d.ts → src/VideoTrim.nitro.d.ts} +125 -134
- package/lib/typescript/src/VideoTrim.nitro.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +49 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitrogen/generated/android/c++/JEditorConfig.hpp +237 -0
- package/nitrogen/generated/android/c++/JFileValidationResult.hpp +61 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +74 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string_std__unordered_map_std__string__std__string_.hpp +89 -0
- package/nitrogen/generated/android/c++/JHybridVideoTrimSpec.cpp +151 -0
- package/nitrogen/generated/android/c++/JHybridVideoTrimSpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JTrimOptions.hpp +109 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/EditorConfig.kt +72 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/FileValidationResult.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/Func_void_std__string_std__unordered_map_std__string__std__string_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/HybridVideoTrimSpec.kt +86 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/TrimOptions.kt +40 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/videotrimOnLoad.kt +35 -0
- package/nitrogen/generated/android/videotrim+autolinking.cmake +78 -0
- package/nitrogen/generated/android/videotrim+autolinking.gradle +27 -0
- package/nitrogen/generated/android/videotrimOnLoad.cpp +50 -0
- package/nitrogen/generated/android/videotrimOnLoad.hpp +25 -0
- package/nitrogen/generated/ios/VideoTrim+autolinking.rb +60 -0
- package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Bridge.cpp +96 -0
- package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Bridge.hpp +374 -0
- package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Umbrella.hpp +56 -0
- package/nitrogen/generated/ios/VideoTrimAutolinking.mm +33 -0
- package/nitrogen/generated/ios/VideoTrimAutolinking.swift +25 -0
- package/nitrogen/generated/ios/c++/HybridVideoTrimSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVideoTrimSpecSwift.hpp +127 -0
- package/nitrogen/generated/ios/swift/EditorConfig.swift +541 -0
- package/nitrogen/generated/ios/swift/FileValidationResult.swift +57 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_FileValidationResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_double.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string_std__unordered_map_std__string__std__string_.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridVideoTrimSpec.swift +54 -0
- package/nitrogen/generated/ios/swift/HybridVideoTrimSpec_cxx.swift +241 -0
- package/nitrogen/generated/ios/swift/TrimOptions.swift +189 -0
- package/nitrogen/generated/shared/c++/EditorConfig.hpp +253 -0
- package/nitrogen/generated/shared/c++/FileValidationResult.hpp +77 -0
- package/nitrogen/generated/shared/c++/HybridVideoTrimSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridVideoTrimSpec.hpp +80 -0
- package/nitrogen/generated/shared/c++/TrimOptions.hpp +125 -0
- package/package.json +75 -71
- package/src/VideoTrim.nitro.ts +263 -0
- package/src/index.tsx +120 -257
- package/android/src/main/AndroidManifestDeprecated.xml +0 -3
- package/android/src/main/java/com/videotrim/VideoTrimModule.java +0 -603
- package/android/src/main/java/com/videotrim/VideoTrimPackage.java +0 -28
- package/ios/VideoTrim-Bridging-Header.h +0 -2
- package/ios/VideoTrim.mm +0 -17
- package/ios/VideoTrim.xcodeproj/project.pbxproj +0 -283
- package/lib/commonjs/index.js +0 -87
- package/lib/commonjs/index.js.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/react-native-video-trim.podspec +0 -43
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// TrimOptions.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2025 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#if __has_include(<NitroModules/JSIConverter.hpp>)
|
|
11
|
+
#include <NitroModules/JSIConverter.hpp>
|
|
12
|
+
#else
|
|
13
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
14
|
+
#endif
|
|
15
|
+
#if __has_include(<NitroModules/NitroDefines.hpp>)
|
|
16
|
+
#include <NitroModules/NitroDefines.hpp>
|
|
17
|
+
#else
|
|
18
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
#include <string>
|
|
24
|
+
|
|
25
|
+
namespace margelo::nitro::videotrim {
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A struct which can be represented as a JavaScript object (TrimOptions).
|
|
29
|
+
*/
|
|
30
|
+
struct TrimOptions {
|
|
31
|
+
public:
|
|
32
|
+
double startTime SWIFT_PRIVATE;
|
|
33
|
+
double endTime SWIFT_PRIVATE;
|
|
34
|
+
bool saveToPhoto SWIFT_PRIVATE;
|
|
35
|
+
std::string type SWIFT_PRIVATE;
|
|
36
|
+
std::string outputExt SWIFT_PRIVATE;
|
|
37
|
+
bool openDocumentsOnFinish SWIFT_PRIVATE;
|
|
38
|
+
bool openShareSheetOnFinish SWIFT_PRIVATE;
|
|
39
|
+
bool removeAfterSavedToPhoto SWIFT_PRIVATE;
|
|
40
|
+
bool removeAfterFailedToSavePhoto SWIFT_PRIVATE;
|
|
41
|
+
bool removeAfterSavedToDocuments SWIFT_PRIVATE;
|
|
42
|
+
bool removeAfterFailedToSaveDocuments SWIFT_PRIVATE;
|
|
43
|
+
bool removeAfterShared SWIFT_PRIVATE;
|
|
44
|
+
bool removeAfterFailedToShare SWIFT_PRIVATE;
|
|
45
|
+
bool enableRotation SWIFT_PRIVATE;
|
|
46
|
+
double rotationAngle SWIFT_PRIVATE;
|
|
47
|
+
|
|
48
|
+
public:
|
|
49
|
+
TrimOptions() = default;
|
|
50
|
+
explicit TrimOptions(double startTime, double endTime, bool saveToPhoto, std::string type, std::string outputExt, bool openDocumentsOnFinish, bool openShareSheetOnFinish, bool removeAfterSavedToPhoto, bool removeAfterFailedToSavePhoto, bool removeAfterSavedToDocuments, bool removeAfterFailedToSaveDocuments, bool removeAfterShared, bool removeAfterFailedToShare, bool enableRotation, double rotationAngle): startTime(startTime), endTime(endTime), saveToPhoto(saveToPhoto), type(type), outputExt(outputExt), openDocumentsOnFinish(openDocumentsOnFinish), openShareSheetOnFinish(openShareSheetOnFinish), removeAfterSavedToPhoto(removeAfterSavedToPhoto), removeAfterFailedToSavePhoto(removeAfterFailedToSavePhoto), removeAfterSavedToDocuments(removeAfterSavedToDocuments), removeAfterFailedToSaveDocuments(removeAfterFailedToSaveDocuments), removeAfterShared(removeAfterShared), removeAfterFailedToShare(removeAfterFailedToShare), enableRotation(enableRotation), rotationAngle(rotationAngle) {}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
} // namespace margelo::nitro::videotrim
|
|
54
|
+
|
|
55
|
+
namespace margelo::nitro {
|
|
56
|
+
|
|
57
|
+
using namespace margelo::nitro::videotrim;
|
|
58
|
+
|
|
59
|
+
// C++ TrimOptions <> JS TrimOptions (object)
|
|
60
|
+
template <>
|
|
61
|
+
struct JSIConverter<TrimOptions> final {
|
|
62
|
+
static inline TrimOptions fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
|
|
63
|
+
jsi::Object obj = arg.asObject(runtime);
|
|
64
|
+
return TrimOptions(
|
|
65
|
+
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "startTime")),
|
|
66
|
+
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "endTime")),
|
|
67
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "saveToPhoto")),
|
|
68
|
+
JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "type")),
|
|
69
|
+
JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "outputExt")),
|
|
70
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "openDocumentsOnFinish")),
|
|
71
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "openShareSheetOnFinish")),
|
|
72
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "removeAfterSavedToPhoto")),
|
|
73
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "removeAfterFailedToSavePhoto")),
|
|
74
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "removeAfterSavedToDocuments")),
|
|
75
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "removeAfterFailedToSaveDocuments")),
|
|
76
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "removeAfterShared")),
|
|
77
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "removeAfterFailedToShare")),
|
|
78
|
+
JSIConverter<bool>::fromJSI(runtime, obj.getProperty(runtime, "enableRotation")),
|
|
79
|
+
JSIConverter<double>::fromJSI(runtime, obj.getProperty(runtime, "rotationAngle"))
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
static inline jsi::Value toJSI(jsi::Runtime& runtime, const TrimOptions& arg) {
|
|
83
|
+
jsi::Object obj(runtime);
|
|
84
|
+
obj.setProperty(runtime, "startTime", JSIConverter<double>::toJSI(runtime, arg.startTime));
|
|
85
|
+
obj.setProperty(runtime, "endTime", JSIConverter<double>::toJSI(runtime, arg.endTime));
|
|
86
|
+
obj.setProperty(runtime, "saveToPhoto", JSIConverter<bool>::toJSI(runtime, arg.saveToPhoto));
|
|
87
|
+
obj.setProperty(runtime, "type", JSIConverter<std::string>::toJSI(runtime, arg.type));
|
|
88
|
+
obj.setProperty(runtime, "outputExt", JSIConverter<std::string>::toJSI(runtime, arg.outputExt));
|
|
89
|
+
obj.setProperty(runtime, "openDocumentsOnFinish", JSIConverter<bool>::toJSI(runtime, arg.openDocumentsOnFinish));
|
|
90
|
+
obj.setProperty(runtime, "openShareSheetOnFinish", JSIConverter<bool>::toJSI(runtime, arg.openShareSheetOnFinish));
|
|
91
|
+
obj.setProperty(runtime, "removeAfterSavedToPhoto", JSIConverter<bool>::toJSI(runtime, arg.removeAfterSavedToPhoto));
|
|
92
|
+
obj.setProperty(runtime, "removeAfterFailedToSavePhoto", JSIConverter<bool>::toJSI(runtime, arg.removeAfterFailedToSavePhoto));
|
|
93
|
+
obj.setProperty(runtime, "removeAfterSavedToDocuments", JSIConverter<bool>::toJSI(runtime, arg.removeAfterSavedToDocuments));
|
|
94
|
+
obj.setProperty(runtime, "removeAfterFailedToSaveDocuments", JSIConverter<bool>::toJSI(runtime, arg.removeAfterFailedToSaveDocuments));
|
|
95
|
+
obj.setProperty(runtime, "removeAfterShared", JSIConverter<bool>::toJSI(runtime, arg.removeAfterShared));
|
|
96
|
+
obj.setProperty(runtime, "removeAfterFailedToShare", JSIConverter<bool>::toJSI(runtime, arg.removeAfterFailedToShare));
|
|
97
|
+
obj.setProperty(runtime, "enableRotation", JSIConverter<bool>::toJSI(runtime, arg.enableRotation));
|
|
98
|
+
obj.setProperty(runtime, "rotationAngle", JSIConverter<double>::toJSI(runtime, arg.rotationAngle));
|
|
99
|
+
return obj;
|
|
100
|
+
}
|
|
101
|
+
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
102
|
+
if (!value.isObject()) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
jsi::Object obj = value.getObject(runtime);
|
|
106
|
+
if (!JSIConverter<double>::canConvert(runtime, obj.getProperty(runtime, "startTime"))) return false;
|
|
107
|
+
if (!JSIConverter<double>::canConvert(runtime, obj.getProperty(runtime, "endTime"))) return false;
|
|
108
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "saveToPhoto"))) return false;
|
|
109
|
+
if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, "type"))) return false;
|
|
110
|
+
if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, "outputExt"))) return false;
|
|
111
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "openDocumentsOnFinish"))) return false;
|
|
112
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "openShareSheetOnFinish"))) return false;
|
|
113
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "removeAfterSavedToPhoto"))) return false;
|
|
114
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "removeAfterFailedToSavePhoto"))) return false;
|
|
115
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "removeAfterSavedToDocuments"))) return false;
|
|
116
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "removeAfterFailedToSaveDocuments"))) return false;
|
|
117
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "removeAfterShared"))) return false;
|
|
118
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "removeAfterFailedToShare"))) return false;
|
|
119
|
+
if (!JSIConverter<bool>::canConvert(runtime, obj.getProperty(runtime, "enableRotation"))) return false;
|
|
120
|
+
if (!JSIConverter<double>::canConvert(runtime, obj.getProperty(runtime, "rotationAngle"))) return false;
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
} // namespace margelo::nitro
|
package/package.json
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-video-trim",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "Video trimmer for your React Native app",
|
|
5
|
-
"main": "lib/
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
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
|
+
},
|
|
10
15
|
"files": [
|
|
11
16
|
"src",
|
|
12
17
|
"lib",
|
|
13
18
|
"android",
|
|
14
19
|
"ios",
|
|
15
20
|
"cpp",
|
|
21
|
+
"nitrogen",
|
|
16
22
|
"*.podspec",
|
|
17
|
-
"
|
|
23
|
+
"react-native.config.js",
|
|
18
24
|
"!ios/build",
|
|
19
25
|
"!android/build",
|
|
20
26
|
"!android/gradle",
|
|
@@ -27,24 +33,25 @@
|
|
|
27
33
|
"!**/.*"
|
|
28
34
|
],
|
|
29
35
|
"scripts": {
|
|
36
|
+
"example": "yarn workspace react-native-video-trim-example",
|
|
30
37
|
"test": "jest",
|
|
31
|
-
"typecheck": "tsc
|
|
38
|
+
"typecheck": "tsc",
|
|
32
39
|
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"build:ios": "cd example/ios && xcodebuild -workspace VideoTrimExample.xcworkspace -scheme VideoTrimExample -configuration Debug -sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO",
|
|
38
|
-
"bootstrap": "yarn example && yarn install && yarn example pods",
|
|
39
|
-
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build"
|
|
40
|
+
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
41
|
+
"prepare": "bob build",
|
|
42
|
+
"nitrogen": "nitro-codegen",
|
|
43
|
+
"release": "release-it --only-version"
|
|
40
44
|
},
|
|
41
45
|
"keywords": [
|
|
42
46
|
"react-native",
|
|
43
47
|
"ios",
|
|
44
48
|
"android"
|
|
45
49
|
],
|
|
46
|
-
"repository":
|
|
47
|
-
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "git+https://github.com/maitrungduc1410/react-native-video-trim.git"
|
|
53
|
+
},
|
|
54
|
+
"author": "Duc Trung Mai <maitrungduc1410@gmail.com> (https://github.com/maitrungduc1410)",
|
|
48
55
|
"license": "MIT",
|
|
49
56
|
"bugs": {
|
|
50
57
|
"url": "https://github.com/maitrungduc1410/react-native-video-trim/issues"
|
|
@@ -54,38 +61,41 @@
|
|
|
54
61
|
"registry": "https://registry.npmjs.org/"
|
|
55
62
|
},
|
|
56
63
|
"devDependencies": {
|
|
57
|
-
"@commitlint/config-conventional": "^
|
|
58
|
-
"@
|
|
59
|
-
"@
|
|
60
|
-
"@
|
|
61
|
-
"@
|
|
62
|
-
"@
|
|
63
|
-
"@
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"prettier": "^2.
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
64
|
+
"@commitlint/config-conventional": "^19.6.0",
|
|
65
|
+
"@eslint/compat": "^1.2.7",
|
|
66
|
+
"@eslint/eslintrc": "^3.3.0",
|
|
67
|
+
"@eslint/js": "^9.22.0",
|
|
68
|
+
"@evilmartians/lefthook": "^1.5.0",
|
|
69
|
+
"@react-native/babel-preset": "0.79.2",
|
|
70
|
+
"@react-native/eslint-config": "^0.78.0",
|
|
71
|
+
"@release-it/conventional-changelog": "^9.0.2",
|
|
72
|
+
"@types/jest": "^29.5.5",
|
|
73
|
+
"@types/react": "^19.0.0",
|
|
74
|
+
"commitlint": "^19.6.1",
|
|
75
|
+
"del-cli": "^5.1.0",
|
|
76
|
+
"eslint": "^9.22.0",
|
|
77
|
+
"eslint-config-prettier": "^10.1.1",
|
|
78
|
+
"eslint-plugin-prettier": "^5.2.3",
|
|
79
|
+
"jest": "^29.7.0",
|
|
80
|
+
"nitro-codegen": "^0.25.2",
|
|
81
|
+
"prettier": "^3.0.3",
|
|
82
|
+
"react": "19.0.0",
|
|
83
|
+
"react-native": "0.79.2",
|
|
84
|
+
"react-native-builder-bob": "^0.40.11",
|
|
85
|
+
"react-native-nitro-modules": "^0.25.2",
|
|
86
|
+
"release-it": "^17.10.0",
|
|
76
87
|
"turbo": "^1.10.7",
|
|
77
|
-
"typescript": "^5.
|
|
78
|
-
},
|
|
79
|
-
"resolutions": {
|
|
80
|
-
"@types/react": "17.0.21"
|
|
88
|
+
"typescript": "^5.8.3"
|
|
81
89
|
},
|
|
82
90
|
"peerDependencies": {
|
|
83
91
|
"react": "*",
|
|
84
|
-
"react-native": "*"
|
|
85
|
-
|
|
86
|
-
"engines": {
|
|
87
|
-
"node": ">= 16.0.0"
|
|
92
|
+
"react-native": "*",
|
|
93
|
+
"react-native-nitro-modules": "^0.25.2"
|
|
88
94
|
},
|
|
95
|
+
"workspaces": [
|
|
96
|
+
"example"
|
|
97
|
+
],
|
|
98
|
+
"packageManager": "yarn@3.6.1",
|
|
89
99
|
"jest": {
|
|
90
100
|
"preset": "react-native",
|
|
91
101
|
"modulePathIgnorePatterns": [
|
|
@@ -111,33 +121,12 @@
|
|
|
111
121
|
},
|
|
112
122
|
"plugins": {
|
|
113
123
|
"@release-it/conventional-changelog": {
|
|
114
|
-
"preset":
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
"eslintConfig": {
|
|
119
|
-
"root": true,
|
|
120
|
-
"extends": [
|
|
121
|
-
"@react-native-community",
|
|
122
|
-
"prettier"
|
|
123
|
-
],
|
|
124
|
-
"rules": {
|
|
125
|
-
"prettier/prettier": [
|
|
126
|
-
"error",
|
|
127
|
-
{
|
|
128
|
-
"quoteProps": "consistent",
|
|
129
|
-
"singleQuote": true,
|
|
130
|
-
"tabWidth": 2,
|
|
131
|
-
"trailingComma": "es5",
|
|
132
|
-
"useTabs": false
|
|
124
|
+
"preset": {
|
|
125
|
+
"name": "angular"
|
|
133
126
|
}
|
|
134
|
-
|
|
127
|
+
}
|
|
135
128
|
}
|
|
136
129
|
},
|
|
137
|
-
"eslintIgnore": [
|
|
138
|
-
"node_modules/",
|
|
139
|
-
"lib/"
|
|
140
|
-
],
|
|
141
130
|
"prettier": {
|
|
142
131
|
"quoteProps": "consistent",
|
|
143
132
|
"singleQuote": true,
|
|
@@ -149,8 +138,19 @@
|
|
|
149
138
|
"source": "src",
|
|
150
139
|
"output": "lib",
|
|
151
140
|
"targets": [
|
|
152
|
-
|
|
153
|
-
|
|
141
|
+
[
|
|
142
|
+
"custom",
|
|
143
|
+
{
|
|
144
|
+
"script": "nitrogen",
|
|
145
|
+
"clean": "nitrogen/"
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
[
|
|
149
|
+
"module",
|
|
150
|
+
{
|
|
151
|
+
"esm": true
|
|
152
|
+
}
|
|
153
|
+
],
|
|
154
154
|
[
|
|
155
155
|
"typescript",
|
|
156
156
|
{
|
|
@@ -159,5 +159,9 @@
|
|
|
159
159
|
]
|
|
160
160
|
]
|
|
161
161
|
},
|
|
162
|
-
"
|
|
162
|
+
"create-react-native-library": {
|
|
163
|
+
"languages": "kotlin-swift",
|
|
164
|
+
"type": "nitro-module",
|
|
165
|
+
"version": "0.50.3"
|
|
166
|
+
}
|
|
163
167
|
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
|
|
3
|
+
export interface BaseOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Save the output file to Photos Library. Only video is supported. Note that you have to make sure you have permission to save to Photos Library.
|
|
6
|
+
* @default false
|
|
7
|
+
*/
|
|
8
|
+
saveToPhoto: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Type of the file to edit. If video file, recommend to use `video`. If audio file, recommend to use `audio`.
|
|
11
|
+
* @default "video"
|
|
12
|
+
*/
|
|
13
|
+
type: string;
|
|
14
|
+
/**
|
|
15
|
+
* Output file extension. If video file, recommend to use `mp4` or `mov`. If audio file, recommend to use `wav` or `m4a`.
|
|
16
|
+
* @default "mp4"
|
|
17
|
+
* @example "mp4", "mov", "wav", "m4a", "3gp", "avi", "mkv", "flv", "wmv", "webm"
|
|
18
|
+
*/
|
|
19
|
+
outputExt: string;
|
|
20
|
+
/**
|
|
21
|
+
* Whether to open Documents app after finish editing
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
openDocumentsOnFinish: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Whether to open Share Sheet after finish editing
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
openShareSheetOnFinish: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Remove the file after saved to Photos Library
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
34
|
+
removeAfterSavedToPhoto: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Remove the file after failed to save to Photos Library
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
removeAfterFailedToSavePhoto: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Remove the file after saved to Documents app
|
|
42
|
+
* @default false
|
|
43
|
+
*/
|
|
44
|
+
removeAfterSavedToDocuments: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Remove the file after failed to save to Documents app
|
|
47
|
+
* @default false
|
|
48
|
+
*/
|
|
49
|
+
removeAfterFailedToSaveDocuments: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Remove the file after shared to other apps. Currently only support iOS, on Android there's no way to detect if the file is shared or not.
|
|
52
|
+
* @default false
|
|
53
|
+
*/
|
|
54
|
+
removeAfterShared: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Remove the file after failed to share to other apps. Currently only support iOS, on Android there's no way to detect if the file is shared or not.
|
|
57
|
+
* @default false
|
|
58
|
+
*/
|
|
59
|
+
removeAfterFailedToShare: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Enable rotation
|
|
62
|
+
* @default false
|
|
63
|
+
*/
|
|
64
|
+
enableRotation: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Rotation angle in degrees
|
|
67
|
+
* @default 0
|
|
68
|
+
*/
|
|
69
|
+
rotationAngle: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface EditorConfig extends BaseOptions {
|
|
73
|
+
/**
|
|
74
|
+
* Enable haptic feedback
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
enableHapticFeedback: boolean;
|
|
78
|
+
maxDuration: number;
|
|
79
|
+
/**
|
|
80
|
+
* Minimum duration for trimmer
|
|
81
|
+
* @default 1000
|
|
82
|
+
*/
|
|
83
|
+
minDuration: number;
|
|
84
|
+
/**
|
|
85
|
+
* Cancel button text
|
|
86
|
+
* @default "Cancel"
|
|
87
|
+
*/
|
|
88
|
+
cancelButtonText: string;
|
|
89
|
+
/**
|
|
90
|
+
* Save button text
|
|
91
|
+
* @default "Save"
|
|
92
|
+
*/
|
|
93
|
+
saveButtonText: string;
|
|
94
|
+
/**
|
|
95
|
+
* Enable cancel dialog
|
|
96
|
+
* @default true
|
|
97
|
+
*/
|
|
98
|
+
enableCancelDialog: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Cancel dialog title
|
|
101
|
+
* @default "Warning!"
|
|
102
|
+
*/
|
|
103
|
+
cancelDialogTitle: string;
|
|
104
|
+
/**
|
|
105
|
+
* Cancel dialog message
|
|
106
|
+
* @default "Are you sure want to cancel?"
|
|
107
|
+
*/
|
|
108
|
+
cancelDialogMessage: string;
|
|
109
|
+
/**
|
|
110
|
+
* Cancel dialog cancel text
|
|
111
|
+
* @default "Close"
|
|
112
|
+
*/
|
|
113
|
+
cancelDialogCancelText: string;
|
|
114
|
+
/**
|
|
115
|
+
* Cancel dialog confirm text
|
|
116
|
+
* @default "Proceed"
|
|
117
|
+
*/
|
|
118
|
+
cancelDialogConfirmText: string;
|
|
119
|
+
/**
|
|
120
|
+
* Enable save dialog
|
|
121
|
+
* @default true
|
|
122
|
+
*/
|
|
123
|
+
enableSaveDialog: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Save dialog title
|
|
126
|
+
* @default "Confirmation!"
|
|
127
|
+
*/
|
|
128
|
+
saveDialogTitle: string;
|
|
129
|
+
/**
|
|
130
|
+
* Save dialog message
|
|
131
|
+
* @default "Are you sure want to save?"
|
|
132
|
+
*/
|
|
133
|
+
saveDialogMessage: string;
|
|
134
|
+
/**
|
|
135
|
+
* Save dialog cancel text
|
|
136
|
+
* @default "Close"
|
|
137
|
+
*/
|
|
138
|
+
saveDialogCancelText: string;
|
|
139
|
+
/**
|
|
140
|
+
* Save dialog confirm text
|
|
141
|
+
* @default "Proceed"
|
|
142
|
+
*/
|
|
143
|
+
saveDialogConfirmText: string;
|
|
144
|
+
/**
|
|
145
|
+
* Trimming text
|
|
146
|
+
* @default "Trimming video..."
|
|
147
|
+
*/
|
|
148
|
+
trimmingText: string;
|
|
149
|
+
/**
|
|
150
|
+
* By default, on iOS the editor will be presented as a modal. If you want to present it as a full screen modal, set this to `true`.
|
|
151
|
+
* @default false
|
|
152
|
+
*/
|
|
153
|
+
fullScreenModalIOS: boolean;
|
|
154
|
+
/**
|
|
155
|
+
* Whether to enable autoplay on load
|
|
156
|
+
*/
|
|
157
|
+
autoplay: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Jump to position on load in milliseconds
|
|
160
|
+
* @default `undefined` (beginning of the video)
|
|
161
|
+
*/
|
|
162
|
+
jumpToPositionOnLoad: number;
|
|
163
|
+
/**
|
|
164
|
+
* Whether to close the editor when finish editing
|
|
165
|
+
* @default true
|
|
166
|
+
*/
|
|
167
|
+
closeWhenFinish: boolean;
|
|
168
|
+
/**
|
|
169
|
+
* Enable cancel trimming
|
|
170
|
+
* @default true
|
|
171
|
+
*/
|
|
172
|
+
enableCancelTrimming: boolean;
|
|
173
|
+
/**
|
|
174
|
+
* Cancel trimming button text
|
|
175
|
+
* @default "Cancel"
|
|
176
|
+
*/
|
|
177
|
+
cancelTrimmingButtonText: string;
|
|
178
|
+
/**
|
|
179
|
+
* Enable cancel trimming dialog
|
|
180
|
+
* @default true
|
|
181
|
+
*/
|
|
182
|
+
enableCancelTrimmingDialog: boolean;
|
|
183
|
+
/**
|
|
184
|
+
* Cancel trimming dialog title
|
|
185
|
+
* @default "Warning!"
|
|
186
|
+
*/
|
|
187
|
+
cancelTrimmingDialogTitle: string;
|
|
188
|
+
/**
|
|
189
|
+
* Cancel trimming dialog message
|
|
190
|
+
* @default "Are you sure want to cancel trimming?"
|
|
191
|
+
*/
|
|
192
|
+
cancelTrimmingDialogMessage: string;
|
|
193
|
+
/**
|
|
194
|
+
* Cancel trimming dialog cancel text
|
|
195
|
+
* @default "Close"
|
|
196
|
+
*/
|
|
197
|
+
cancelTrimmingDialogCancelText: string;
|
|
198
|
+
/**
|
|
199
|
+
* Cancel trimming dialog confirm text
|
|
200
|
+
* @default "Proceed"
|
|
201
|
+
*/
|
|
202
|
+
cancelTrimmingDialogConfirmText: string;
|
|
203
|
+
/**
|
|
204
|
+
* Header text
|
|
205
|
+
*/
|
|
206
|
+
headerText: string;
|
|
207
|
+
/**
|
|
208
|
+
* Header text size
|
|
209
|
+
* @default 16
|
|
210
|
+
*/
|
|
211
|
+
headerTextSize: number;
|
|
212
|
+
/**
|
|
213
|
+
* Header text color
|
|
214
|
+
* @default white
|
|
215
|
+
*/
|
|
216
|
+
headerTextColor: number;
|
|
217
|
+
/**
|
|
218
|
+
* Alert on fail to load media
|
|
219
|
+
* @default true
|
|
220
|
+
*/
|
|
221
|
+
alertOnFailToLoad: boolean;
|
|
222
|
+
/**
|
|
223
|
+
* Alert on fail to load media title
|
|
224
|
+
* @default "Error"
|
|
225
|
+
*/
|
|
226
|
+
alertOnFailTitle: string;
|
|
227
|
+
/**
|
|
228
|
+
* Alert on fail to load media message
|
|
229
|
+
* @default "Fail to load media. Possibly invalid file or no network connection"
|
|
230
|
+
*/
|
|
231
|
+
alertOnFailMessage: string;
|
|
232
|
+
/**
|
|
233
|
+
* Alert on fail to load media close text
|
|
234
|
+
* @default "Close"
|
|
235
|
+
*/
|
|
236
|
+
alertOnFailCloseText: string;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export interface TrimOptions extends BaseOptions {
|
|
240
|
+
startTime: number; // in milliseconds
|
|
241
|
+
endTime: number; // in milliseconds
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export interface FileValidationResult {
|
|
245
|
+
isValid: boolean;
|
|
246
|
+
fileType: string;
|
|
247
|
+
duration: number;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export interface VideoTrim
|
|
251
|
+
extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {
|
|
252
|
+
showEditor(
|
|
253
|
+
filePath: string,
|
|
254
|
+
config: EditorConfig,
|
|
255
|
+
onEvent: (eventName: string, payload: Record<string, string>) => void // currently nitro modules will fail if there are 2 optional callbacks, to make if work, we need to pass the onEvent as the last parameter
|
|
256
|
+
): void;
|
|
257
|
+
listFiles(): Promise<string[]>;
|
|
258
|
+
cleanFiles(): Promise<number>;
|
|
259
|
+
deleteFile(filePath: string): Promise<boolean>;
|
|
260
|
+
closeEditor(onComplete: () => void): void;
|
|
261
|
+
isValidFile(url: string): Promise<FileValidationResult>;
|
|
262
|
+
trim(url: string, options: TrimOptions): Promise<string>;
|
|
263
|
+
}
|