diff --git a/apps/mobile/android/app/build.gradle b/apps/mobile/android/app/build.gradle
index e29cf627c..dfe31c857 100644
--- a/apps/mobile/android/app/build.gradle
+++ b/apps/mobile/android/app/build.gradle
@@ -1,6 +1,7 @@
apply plugin: "com.android.application"
apply plugin: "org.jetbrains.kotlin.android"
apply plugin: "com.facebook.react"
+apply plugin: 'kotlin-parcelize'
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
@@ -124,7 +125,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled true
- versionCode 3080
+ versionCode 3081
versionName getNpmVersion()
testBuildType System.getProperty('testBuildType', 'debug')
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
diff --git a/apps/mobile/android/app/proguard-rules.pro b/apps/mobile/android/app/proguard-rules.pro
index c635f55cc..a7a15d14e 100644
--- a/apps/mobile/android/app/proguard-rules.pro
+++ b/apps/mobile/android/app/proguard-rules.pro
@@ -63,4 +63,7 @@
-keepattributes Signature
-keep class com.google.gson.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken
--keep class com.streetwriters.notesnook.datatypes.* { *; }
\ No newline at end of file
+-keep class com.streetwriters.notesnook.datatypes.* { *; }
+
+-keep class net.gotev.uploadservice.* { *; }
+-keep class kotlinx.parcelize.* { *; }
\ No newline at end of file
diff --git a/apps/mobile/app/common/filesystem/upload.ts b/apps/mobile/app/common/filesystem/upload.ts
index 2695d8255..cc824fd9a 100644
--- a/apps/mobile/app/common/filesystem/upload.ts
+++ b/apps/mobile/app/common/filesystem/upload.ts
@@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-import { RequestOptions } from "@notesnook/core";
-import { Platform } from "react-native";
+import { isImage, RequestOptions } from "@notesnook/core";
+import { PermissionsAndroid, Platform } from "react-native";
import RNFetchBlob from "react-native-blob-util";
import { ToastManager } from "../../services/event-manager";
import { useAttachmentStore } from "../../stores/use-attachment-store";
@@ -31,6 +31,7 @@ import {
FileSizeResult,
getUploadedFileSize
} from "./utils";
+import Upload from "@ammarahmed/react-native-upload";
export async function uploadFile(
filename: string,
@@ -64,47 +65,87 @@ export async function uploadFile(
);
}
- const fileSize = (await RNFetchBlob.fs.stat(filePath)).size;
+ const fileInfo = await RNFetchBlob.fs.stat(filePath);
const remoteFileSize = await getUploadedFileSize(filename);
if (remoteFileSize === FileSizeResult.Error) return false;
- if (remoteFileSize > FileSizeResult.Empty && remoteFileSize === fileSize) {
+ if (
+ remoteFileSize > FileSizeResult.Empty &&
+ remoteFileSize === fileInfo.size
+ ) {
DatabaseLogger.log(`File ${filename} is already uploaded.`);
return true;
}
- DatabaseLogger.info(`Starting upload: ${filename}`);
+ let attachmentInfo = await db.attachments.attachment(filename);
- const uploadRequest = RNFetchBlob.config({
- //@ts-ignore
- IOSBackgroundTask: !globalThis["IS_SHARE_EXTENSION"]
- })
- .fetch(
- "PUT",
- url,
- {
- ...headers,
- "content-type": ""
- },
- RNFetchBlob.wrap(filePath)
- )
- .uploadProgress((sent, total) => {
- useAttachmentStore
- .getState()
- .setProgress(sent, total, filename, 0, "upload");
- DatabaseLogger.info(
- `File upload progress: ${filename}, ${sent}/${total}`
- );
- });
+ DatabaseLogger.info(
+ `Starting upload of ${filename} at path: ${fileInfo.path} ${fileInfo.size}`
+ );
+ if (Platform.OS === "android") {
+ const status = await PermissionsAndroid.request(
+ "android.permission.POST_NOTIFICATIONS"
+ );
+ if (status !== "granted") {
+ ToastManager.show({
+ message: `The permission to show file upload notification was disallowed by the user.`,
+ type: "info"
+ });
+ }
+ }
+
+ const upload = Upload.create({
+ customUploadId: filename,
+ path: Platform.OS === "ios" ? "file://" + fileInfo.path : fileInfo.path,
+ url: url,
+ method: "PUT",
+ headers: {
+ ...headers,
+ "content-type": "application/octet-stream"
+ },
+ appGroup: IOS_APPGROUPID,
+ notification: {
+ filename:
+ attachmentInfo && isImage(attachmentInfo?.mimeType)
+ ? "image"
+ : attachmentInfo?.filename || "file",
+ enabled: true,
+ enableRingTone: true,
+ autoClear: true
+ }
+ }).onChange((event) => {
+ switch (event.status) {
+ case "running":
+ case "pending":
+ useAttachmentStore
+ .getState()
+ .setProgress(
+ event.uploadedBytes || 0,
+ event.totalBytes || fileInfo.size,
+ filename,
+ 0,
+ "upload"
+ );
+ DatabaseLogger.info(
+ `File upload progress: ${filename}, ${event.uploadedBytes}/${
+ event.totalBytes || fileInfo.size
+ }`
+ );
+ break;
+ case "completed":
+ console.log("Upload completed");
+ break;
+ }
+ });
+ const result = await upload.start();
cancelToken.cancel = async () => {
useAttachmentStore.getState().remove(filename);
- uploadRequest.cancel();
+ upload.cancel();
};
- const uploadResponse = await uploadRequest;
- const status = uploadResponse.info().status;
+ const status = result.responseCode || 0;
const uploaded = status >= 200 && status < 300;
useAttachmentStore.getState().remove(filename);
@@ -114,12 +155,12 @@ export async function uploadFile(
throw new Error(
`${status}, name: ${fileInfo.filename}, length: ${
fileInfo.size
- }, info: ${JSON.stringify(uploadResponse.info())}`
+ }, info: ${JSON.stringify(result.error)}`
);
}
- const attachment = await db.attachments.attachment(filename);
- if (!attachment) return false;
- await checkUpload(filename, requestOptions.chunkSize, attachment.size);
+ attachmentInfo = await db.attachments.attachment(filename);
+ if (!attachmentInfo) return false;
+ await checkUpload(filename, requestOptions.chunkSize, attachmentInfo.size);
DatabaseLogger.info(`File upload status: ${filename}, ${status}`);
return uploaded;
} catch (e) {
diff --git a/apps/mobile/app/screens/editor/tiptap/picker.ts b/apps/mobile/app/screens/editor/tiptap/picker.ts
index b89fa1fd3..84f8ef55f 100644
--- a/apps/mobile/app/screens/editor/tiptap/picker.ts
+++ b/apps/mobile/app/screens/editor/tiptap/picker.ts
@@ -205,7 +205,9 @@ const camera = async (options: PickerOptions) => {
options
);
})
- .catch((e) => {});
+ .catch((e) => {
+ console.log(e);
+ });
} catch (e) {
ToastManager.show({
heading: (e as Error).message,
diff --git a/apps/mobile/app/screens/editor/wrapper.tsx b/apps/mobile/app/screens/editor/wrapper.tsx
index b04b29900..e88171e6f 100644
--- a/apps/mobile/app/screens/editor/wrapper.tsx
+++ b/apps/mobile/app/screens/editor/wrapper.tsx
@@ -82,9 +82,6 @@ export const EditorWrapper = ({ widths }: { widths: any }) => {
return 0;
};
- const KeyboardAvoidingViewIOS =
- Platform.OS === "ios" ? KeyboardAvoidingView : View;
-
return (
{
borderLeftColor: DDS.isTab
? colors.secondary.background
: "transparent",
- paddingBottom: insets.bottom
+ paddingBottom:
+ Platform.OS === "android" ? insets.bottom + 10 : insets.bottom
}}
>
{loading || !introCompleted ? null : (
- {
blurOnSubmit={false}
/>
-
+
)}
);
diff --git a/apps/mobile/ios/Notesnook.xcodeproj/project.pbxproj b/apps/mobile/ios/Notesnook.xcodeproj/project.pbxproj
index 82ba4a313..ca99a3f4f 100644
--- a/apps/mobile/ios/Notesnook.xcodeproj/project.pbxproj
+++ b/apps/mobile/ios/Notesnook.xcodeproj/project.pbxproj
@@ -1029,7 +1029,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 2159;
+ CURRENT_PROJECT_VERSION = 2160;
DEVELOPMENT_TEAM = 53CWBG3QUC;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
@@ -1104,7 +1104,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 3.3.10-beta.1;
+ MARKETING_VERSION = "3.3.10-beta.2";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -1135,7 +1135,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 2159;
+ CURRENT_PROJECT_VERSION = 2160;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 53CWBG3QUC;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
@@ -1210,7 +1210,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 3.3.10-beta.1;
+ MARKETING_VERSION = "3.3.10-beta.2";
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = (
"$(inherited)",
@@ -1367,7 +1367,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 2159;
+ CURRENT_PROJECT_VERSION = 2160;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 53CWBG3QUC;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
@@ -1379,7 +1379,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 3.3.10-beta.1;
+ MARKETING_VERSION = "3.3.10-beta.2";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.streetwriters.notesnook.notewidget;
@@ -1410,7 +1410,7 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 2159;
+ CURRENT_PROJECT_VERSION = 2160;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 53CWBG3QUC;
@@ -1423,7 +1423,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 3.3.10-beta.1;
+ MARKETING_VERSION = "3.3.10-beta.2";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.streetwriters.notesnook.notewidget;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1453,7 +1453,7 @@
CODE_SIGN_ENTITLEMENTS = "Make Note/Make Note.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 2159;
+ CURRENT_PROJECT_VERSION = 2160;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 53CWBG3QUC;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
@@ -1534,7 +1534,7 @@
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift$(inherited)";
- MARKETING_VERSION = 3.3.10-beta.1;
+ MARKETING_VERSION = "3.3.10-beta.2";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.streetwriters.notesnook.share;
@@ -1565,7 +1565,7 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 2159;
+ CURRENT_PROJECT_VERSION = 2160;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 53CWBG3QUC;
@@ -1647,7 +1647,7 @@
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift$(inherited)";
- MARKETING_VERSION = 3.3.10-beta.1;
+ MARKETING_VERSION = "3.3.10-beta.2";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.streetwriters.notesnook.share;
PRODUCT_NAME = "$(TARGET_NAME)";
diff --git a/apps/mobile/ios/Notesnook/AppDelegate.mm b/apps/mobile/ios/Notesnook/AppDelegate.mm
index 0d5af7425..b6623c2d4 100644
--- a/apps/mobile/ios/Notesnook/AppDelegate.mm
+++ b/apps/mobile/ios/Notesnook/AppDelegate.mm
@@ -4,6 +4,7 @@
#import "RNShortcuts.h"
#import "RNBootSplash.h"
#import
+#import "RNFileUploader.h"
@interface ReactNativeDelegate : RCTDefaultReactNativeFactoryDelegate
@end
@@ -79,4 +80,8 @@
[RNBootSplash initWithStoryboard:@"BootSplash" rootView:rootView]; // ⬅️ initialize the splash screen
}
+- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler {
+ [RNFileUploader setCompletionHandlerWithIdentifier:identifier completionHandler:completionHandler];
+}
+
@end
diff --git a/apps/mobile/ios/Podfile.lock b/apps/mobile/ios/Podfile.lock
index cba646587..46a8038cb 100644
--- a/apps/mobile/ios/Podfile.lock
+++ b/apps/mobile/ios/Podfile.lock
@@ -1887,7 +1887,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - react-native-document-picker (10.1.7):
+ - react-native-document-picker (11.0.1):
- boost
- DoubleConversion
- fast_float
@@ -1969,14 +1969,14 @@ PODS:
- React-Core
- React-RCTFabric
- ReactCommon/turbomodule/core
- - react-native-mmkv-storage (0.11.2):
+ - react-native-mmkv-storage (12.0.0):
- boost
- DoubleConversion
- fast_float
- fmt
- glog
- hermes-engine
- - MMKV (~> 1.3.9)
+ - MMKV (~> 1.3.14)
- RCT-Folly
- RCT-Folly/Fabric
- RCTRequired
@@ -2244,6 +2244,8 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
+ - react-native-upload (6.27.0):
+ - React
- react-native-webview (13.16.0):
- boost
- DoubleConversion
@@ -3462,6 +3464,7 @@ DEPENDENCIES:
- "react-native-share-extension (from `../node_modules/@ammarahmed/react-native-share-extension`)"
- "react-native-sodium (from `../node_modules/@ammarahmed/react-native-sodium`)"
- react-native-theme-switch-animation (from `../node_modules/react-native-theme-switch-animation`)
+ - "react-native-upload (from `../node_modules/@ammarahmed/react-native-upload`)"
- react-native-webview (from `../node_modules/react-native-webview`)
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`)
@@ -3675,6 +3678,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/@ammarahmed/react-native-sodium"
react-native-theme-switch-animation:
:path: "../node_modules/react-native-theme-switch-animation"
+ react-native-upload:
+ :path: "../node_modules/@ammarahmed/react-native-upload"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-NativeModulesApple:
@@ -3855,7 +3860,7 @@ SPEC CHECKSUMS:
react-native-blob-util: 7946b7e13acf0da5e849dc2f73fcfebe1d981699
react-native-config: 963b5efabc864cf69412e54b5de49b6a23e4af03
react-native-date-picker: 4f4f40f6e65798038bb4b1bff47890c2be69c2e6
- react-native-document-picker: 1734eb0aa3dbd1cd7bf1b105936f9b55031ae616
+ react-native-document-picker: 254467fec90f263dfc4828210daf3e8baa4fcb81
react-native-fingerprint-scanner: d5e143a361f3f01858e9c45141ddcabc4fd57055
react-native-get-random-values: d16467cf726c618e9c7a8c3c39c31faa2244bbba
react-native-gzip: 794e0e964a0d9e1dfd1773fee938adb4d4310e26
@@ -3863,7 +3868,7 @@ SPEC CHECKSUMS:
react-native-image-resizer: 290b045c34c69db7574e4d08aadfc4abe1ff5a99
react-native-in-app-review: 1516ba69d60d58053b7eb3aaaf8d2a5a74af8b57
react-native-keep-awake: a351e6f67006b47f316ae2b17ee8ee69386167f4
- react-native-mmkv-storage: b7ce5a5eb3d3bfddcf2df127671abba6ef3d76ae
+ react-native-mmkv-storage: 31b7b155e690339f5a25cfe56d5e2f68dee4f066
react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187
react-native-notification-sounds: ce106d58df0dd384bccbd2e84fb53accab7cc068
react-native-orientation-locker: cc6f357b289a2e0dd2210fea0c52cb8e0727fdaa
@@ -3875,6 +3880,7 @@ SPEC CHECKSUMS:
react-native-share-extension: fdc6aaab51591a2d445df239c446aaa3a99658ec
react-native-sodium: 066f76e46c9be13e9260521e3fa994937c4cdab4
react-native-theme-switch-animation: 449d6db7a760f55740505e7403ae8061debc9a7e
+ react-native-upload: f0198bb4db00ff7dae14904ad59da470550be075
react-native-webview: 654f794a7686b47491cf43aa67f7f428bea00eed
React-NativeModulesApple: 46690a0fe94ec28fc6fc686ec797b911d251ded0
React-oscompat: 95875e81f5d4b3c7b2c888d5bd2c9d83450d8bdb
diff --git a/apps/mobile/package-lock.json b/apps/mobile/package-lock.json
index 7be81d23f..085d5b841 100644
--- a/apps/mobile/package-lock.json
+++ b/apps/mobile/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@notesnook/mobile",
- "version": "3.3.10-beta.0",
+ "version": "3.3.10-beta.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@notesnook/mobile",
- "version": "3.3.10-beta.0",
+ "version": "3.3.10-beta.2",
"hasInstallScript": true,
"license": "GPL-3.0-or-later",
"dependencies": {
@@ -16,6 +16,7 @@
"@ammarahmed/react-native-fingerprint-scanner": "^5.0.1",
"@ammarahmed/react-native-share-extension": "^2.9.5",
"@ammarahmed/react-native-sodium": "^1.6.8",
+ "@ammarahmed/react-native-upload": "^6.28.0",
"@azure/core-asynciterator-polyfill": "^1.0.2",
"@bam.tech/react-native-image-resizer": "3.0.11",
"@callstack/repack": "~5.2.1",
@@ -41,7 +42,7 @@
"@react-native-community/datetimepicker": "^8.4.5",
"@react-native-community/netinfo": "^11.4.1",
"@react-native-community/toolbar-android": "^0.2.1",
- "@react-native-documents/picker": "^10.1.7",
+ "@react-native-documents/picker": "^11.0.1",
"@react-native-masked-view/masked-view": "^0.3.2",
"@react-navigation/elements": "^1.3.3",
"@react-navigation/native": "^6.0.10",
@@ -529,6 +530,16 @@
"integrity": "sha512-FbX9fMfqJ3ysd+zkSS5di459tPv5iB0fhmK3dx/xo+l07sf7f1gzJu17mghSGkOKkbjXaoLPcq3XLMwWGpvapQ==",
"license": "ISC"
},
+ "node_modules/@ammarahmed/react-native-upload": {
+ "version": "6.28.0",
+ "resolved": "https://registry.npmjs.org/@ammarahmed/react-native-upload/-/react-native-upload-6.28.0.tgz",
+ "integrity": "sha512-0cU6ulbJB2s9KgV2QlQ91//YZ+K5USlKjM6CW9fDHFcGn+Td3tFWB0atnplP35Ih+HeOnYL9t1MuNG4vNzjoFw==",
+ "license": "BSD-3-Clause",
+ "peerDependencies": {
+ "react": "*",
+ "react-native": ">=0.47.0"
+ }
+ },
"node_modules/@azure/core-asynciterator-polyfill": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.2.tgz",
@@ -4839,13 +4850,13 @@
}
},
"node_modules/@react-native-documents/picker": {
- "version": "10.1.7",
- "resolved": "https://registry.npmjs.org/@react-native-documents/picker/-/picker-10.1.7.tgz",
- "integrity": "sha512-Tb8SPU+pHxrSJmDHBozSUStIPeyFHTHLrU3MW0N3sUAioLd5z+nmUdypfg5fs+Yzp7KTxVW06APe2HLB1ysLww==",
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/@react-native-documents/picker/-/picker-11.0.1.tgz",
+ "integrity": "sha512-aUq4MHGO/f8BslCFFx9OXz9NLLmcLkYAXp5PAEVau31v7obItPpb71Fe84bxpGV6gALIvGlGgSm6W9kEyU4toA==",
"license": "MIT",
"peerDependencies": {
"react": "*",
- "react-native": "*"
+ "react-native": ">=0.79.0"
}
},
"node_modules/@react-native-masked-view/masked-view": {
diff --git a/apps/mobile/package.json b/apps/mobile/package.json
index f3578d63e..ad11a844a 100644
--- a/apps/mobile/package.json
+++ b/apps/mobile/package.json
@@ -1,6 +1,6 @@
{
"name": "@notesnook/mobile",
- "version": "3.3.10-beta.1",
+ "version": "3.3.10-beta.2",
"private": true,
"license": "GPL-3.0-or-later",
"scripts": {
@@ -32,6 +32,7 @@
"@ammarahmed/react-native-fingerprint-scanner": "^5.0.1",
"@ammarahmed/react-native-share-extension": "^2.9.5",
"@ammarahmed/react-native-sodium": "^1.6.8",
+ "@ammarahmed/react-native-upload": "^6.28.0",
"@azure/core-asynciterator-polyfill": "^1.0.2",
"@bam.tech/react-native-image-resizer": "3.0.11",
"@callstack/repack": "~5.2.1",
@@ -57,7 +58,7 @@
"@react-native-community/datetimepicker": "^8.4.5",
"@react-native-community/netinfo": "^11.4.1",
"@react-native-community/toolbar-android": "^0.2.1",
- "@react-native-documents/picker": "^10.1.7",
+ "@react-native-documents/picker": "^11.0.1",
"@react-native-masked-view/masked-view": "^0.3.2",
"@react-navigation/elements": "^1.3.3",
"@react-navigation/native": "^6.0.10",
diff --git a/apps/mobile/patches/react-native+0.82.1.patch b/apps/mobile/patches/react-native+0.82.1.patch
new file mode 100644
index 000000000..7d3abd62e
--- /dev/null
+++ b/apps/mobile/patches/react-native+0.82.1.patch
@@ -0,0 +1,13 @@
+diff --git a/node_modules/react-native/Libraries/Components/Keyboard/KeyboardAvoidingView.js b/node_modules/react-native/Libraries/Components/Keyboard/KeyboardAvoidingView.js
+index 6eca156..5a42107 100644
+--- a/node_modules/react-native/Libraries/Components/Keyboard/KeyboardAvoidingView.js
++++ b/node_modules/react-native/Libraries/Components/Keyboard/KeyboardAvoidingView.js
+@@ -208,7 +208,7 @@ class KeyboardAvoidingView extends React.Component<
+ ];
+ } else {
+ this._subscriptions = [
+- Keyboard.addListener('keyboardDidHide', this._onKeyboardChange),
++ Keyboard.addListener('keyboardDidHide', this._onKeyboardHide),
+ Keyboard.addListener('keyboardDidShow', this._onKeyboardChange),
+ ];
+ }
diff --git a/apps/mobile/patches/react-native-actions-shortcuts+1.0.1.patch b/apps/mobile/patches/react-native-actions-shortcuts+1.0.1.patch
index ff0695914..2ca0637ca 100644
--- a/apps/mobile/patches/react-native-actions-shortcuts+1.0.1.patch
+++ b/apps/mobile/patches/react-native-actions-shortcuts+1.0.1.patch
@@ -1,3 +1,22 @@
+diff --git a/node_modules/react-native-actions-shortcuts/android/.settings/org.eclipse.buildship.core.prefs b/node_modules/react-native-actions-shortcuts/android/.settings/org.eclipse.buildship.core.prefs
+deleted file mode 100644
+index 8c253d6..0000000
+--- a/node_modules/react-native-actions-shortcuts/android/.settings/org.eclipse.buildship.core.prefs
++++ /dev/null
+@@ -1,13 +0,0 @@
+-arguments=
+-auto.sync=false
+-build.scans.enabled=false
+-connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(6.0))
+-connection.project.dir=
+-eclipse.preferences.version=1
+-gradle.user.home=
+-java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
+-jvm.arguments=
+-offline.mode=false
+-override.workspace.settings=true
+-show.console.view=true
+-show.executions.view=true
diff --git a/node_modules/react-native-actions-shortcuts/android/build.gradle b/node_modules/react-native-actions-shortcuts/android/build.gradle
index 19bd311..642ddbc 100644
--- a/node_modules/react-native-actions-shortcuts/android/build.gradle
@@ -3788,7 +3807,7 @@ index b438823..ba03915 100644
}
diff --git a/node_modules/react-native-actions-shortcuts/android/src/main/java/com/reactnativeshortcuts/ShortcutsModule.kt b/node_modules/react-native-actions-shortcuts/android/src/main/java/com/reactnativeshortcuts/ShortcutsModule.kt
-index ec847cc..a4686a0 100644
+index ec847cc..f101793 100644
--- a/node_modules/react-native-actions-shortcuts/android/src/main/java/com/reactnativeshortcuts/ShortcutsModule.kt
+++ b/node_modules/react-native-actions-shortcuts/android/src/main/java/com/reactnativeshortcuts/ShortcutsModule.kt
@@ -28,18 +28,18 @@ class ShortcutsModule(reactContext: ReactApplicationContext) :
@@ -3853,7 +3872,7 @@ index ec847cc..a4686a0 100644
shortcutManager?.removeAllDynamicShortcuts()
}
-@@ -145,6 +145,19 @@ class ShortcutsModule(reactContext: ReactApplicationContext) :
+@@ -145,6 +145,17 @@ class ShortcutsModule(reactContext: ReactApplicationContext) :
fun isSupported(): Boolean {
return Build.VERSION.SDK_INT >= 25
}
@@ -3863,9 +3882,7 @@ index ec847cc..a4686a0 100644
+ requestCode: Int,
+ resultCode: Int,
+ data: Intent?
-+ ) {
-+ TODO("Not yet implemented")
-+ }
++ ) {}
+
+ override fun onNewIntent(intent: Intent) {
+ emitEvent(intent)
diff --git a/packages/editor-mobile/package-lock.json b/packages/editor-mobile/package-lock.json
index 616f2ccf9..3678cbd2e 100644
--- a/packages/editor-mobile/package-lock.json
+++ b/packages/editor-mobile/package-lock.json
@@ -85,9 +85,6 @@
"@tiptap/extension-placeholder": "2.6.6",
"@tiptap/extension-subscript": "2.6.6",
"@tiptap/extension-superscript": "2.6.6",
- "@tiptap/extension-table": "2.6.6",
- "@tiptap/extension-table-cell": "2.6.6",
- "@tiptap/extension-table-header": "2.6.6",
"@tiptap/extension-table-row": "2.6.6",
"@tiptap/extension-task-item": "2.6.6",
"@tiptap/extension-task-list": "2.6.6",
diff --git a/packages/editor/package-lock.json b/packages/editor/package-lock.json
index b865641ed..24efdf2f0 100644
--- a/packages/editor/package-lock.json
+++ b/packages/editor/package-lock.json
@@ -1532,39 +1532,6 @@
"@styled-system/css": "^5.1.5"
}
},
- "node_modules/@theme-ui/color-modes": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@theme-ui/color-modes/-/color-modes-0.16.2.tgz",
- "integrity": "sha512-jWEWx53lxNgWCT38i/kwLV2rsvJz8lVZgi5oImnVwYba9VejXD23q1ckbNFJHosQ8KKXY87ht0KPC6BQFIiHtQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@theme-ui/core": "^0.16.2",
- "@theme-ui/css": "^0.16.2",
- "deepmerge": "^4.2.2"
- },
- "peerDependencies": {
- "@emotion/react": "^11.11.1",
- "react": ">=18"
- }
- },
- "node_modules/@theme-ui/color-modes/node_modules/@theme-ui/core": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@theme-ui/core/-/core-0.16.2.tgz",
- "integrity": "sha512-bBd/ltbwO9vIUjF1jtlOX6XN0IIOdf1vzBp2JCKsSOqdfn84m+XL8OogIe/zOhQ+aM94Nrq4+32tFJc8sFav4Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@theme-ui/css": "^0.16.2",
- "deepmerge": "^4.2.2"
- },
- "peerDependencies": {
- "@emotion/react": "^11.11.1",
- "react": ">=18"
- }
- },
"node_modules/@theme-ui/components": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/@theme-ui/components/-/components-0.16.1.tgz",
@@ -1610,39 +1577,6 @@
"@emotion/react": "^11.11.1"
}
},
- "node_modules/@theme-ui/theme-provider": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@theme-ui/theme-provider/-/theme-provider-0.16.2.tgz",
- "integrity": "sha512-LRnVevODcGqO0JyLJ3wht+PV3ZoZcJ7XXLJAJWDoGeII4vZcPQKwVy4Lpz/juHsZppQxKcB3U+sQDGBnP25irQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@theme-ui/color-modes": "^0.16.2",
- "@theme-ui/core": "^0.16.2",
- "@theme-ui/css": "^0.16.2"
- },
- "peerDependencies": {
- "@emotion/react": "^11.11.1",
- "react": ">=18"
- }
- },
- "node_modules/@theme-ui/theme-provider/node_modules/@theme-ui/core": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@theme-ui/core/-/core-0.16.2.tgz",
- "integrity": "sha512-bBd/ltbwO9vIUjF1jtlOX6XN0IIOdf1vzBp2JCKsSOqdfn84m+XL8OogIe/zOhQ+aM94Nrq4+32tFJc8sFav4Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@theme-ui/css": "^0.16.2",
- "deepmerge": "^4.2.2"
- },
- "peerDependencies": {
- "@emotion/react": "^11.11.1",
- "react": ">=18"
- }
- },
"node_modules/@tiptap/core": {
"version": "2.6.6",
"resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.6.tgz",
@@ -3516,7 +3450,8 @@
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
},
"node_modules/js-yaml": {
"version": "3.14.1",
@@ -3636,6 +3571,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
@@ -5158,6 +5094,7 @@
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "dev": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -5178,6 +5115,7 @@
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "dev": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
@@ -5492,6 +5430,7 @@
"version": "0.23.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
"integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "dev": true,
"dependencies": {
"loose-envify": "^1.1.0"
}