diff --git a/.eslintignore b/.eslintignore
index e966676c7..6985a3abb 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -407,7 +407,6 @@ packages/app-mobile/components/ProfileSwitcher/ProfileSwitcher.js
packages/app-mobile/components/ProfileSwitcher/useProfileConfig.js
packages/app-mobile/components/ScreenHeader.js
packages/app-mobile/components/SelectDateTimeDialog.js
-packages/app-mobile/components/SideMenu.js
packages/app-mobile/components/TextInput.js
packages/app-mobile/components/app-nav.js
packages/app-mobile/components/biometrics/BiometricPopup.js
diff --git a/.eslintrc.js b/.eslintrc.js
index 496c42c5c..dd7c141a4 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -42,6 +42,8 @@ module.exports = {
'zxcvbn': 'readonly',
'tinymce': 'readonly',
+
+ 'JSX': 'readonly',
},
'parserOptions': {
'ecmaVersion': 2018,
diff --git a/.gitignore b/.gitignore
index e99f6bb54..9c88d4a48 100644
--- a/.gitignore
+++ b/.gitignore
@@ -393,7 +393,6 @@ packages/app-mobile/components/ProfileSwitcher/ProfileSwitcher.js
packages/app-mobile/components/ProfileSwitcher/useProfileConfig.js
packages/app-mobile/components/ScreenHeader.js
packages/app-mobile/components/SelectDateTimeDialog.js
-packages/app-mobile/components/SideMenu.js
packages/app-mobile/components/TextInput.js
packages/app-mobile/components/app-nav.js
packages/app-mobile/components/biometrics/BiometricPopup.js
diff --git a/packages/app-mobile/babel.config.js b/packages/app-mobile/babel.config.js
index e953058a7..b23608952 100644
--- a/packages/app-mobile/babel.config.js
+++ b/packages/app-mobile/babel.config.js
@@ -1,3 +1,4 @@
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
+ plugins: ['react-native-reanimated/plugin'],
};
diff --git a/packages/app-mobile/components/SideMenu.ts b/packages/app-mobile/components/SideMenu.ts
deleted file mode 100644
index 272a4c842..000000000
--- a/packages/app-mobile/components/SideMenu.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-const { connect } = require('react-redux');
-const SideMenu_ = require('react-native-side-menu-updated').default;
-import { Dimensions } from 'react-native';
-import { State } from '@joplin/lib/reducer';
-
-class SideMenuComponent extends SideMenu_ {
- public onLayoutChange(e: any) {
- const { width, height } = e.nativeEvent.layout;
- const openMenuOffsetPercentage = this.props.openMenuOffset / Dimensions.get('window').width;
- const openMenuOffset = width * openMenuOffsetPercentage;
- const hiddenMenuOffset = width * this.state.hiddenMenuOffsetPercentage;
- this.setState({ width, height, openMenuOffset, hiddenMenuOffset });
- }
-}
-
-const SideMenu = connect((state: State) => {
- return {
- isOpen: state.showSideMenu,
- };
-})(SideMenuComponent);
-
-export default SideMenu;
diff --git a/packages/app-mobile/index.js b/packages/app-mobile/index.js
index a72cfbfa3..e38877608 100644
--- a/packages/app-mobile/index.js
+++ b/packages/app-mobile/index.js
@@ -10,6 +10,9 @@
import 'react-native-get-random-values';
import 'react-native-url-polyfill/auto';
+// Set up required for react-native-drawer-layout (See: https://reactnavigation.org/docs/drawer-layout/ v6.x)
+import 'react-native-gesture-handler';
+
import { LogBox, AppRegistry } from 'react-native';
const Root = require('./root').default;
diff --git a/packages/app-mobile/ios/Podfile.lock b/packages/app-mobile/ios/Podfile.lock
index b4909b572..3e55098d4 100644
--- a/packages/app-mobile/ios/Podfile.lock
+++ b/packages/app-mobile/ios/Podfile.lock
@@ -475,10 +475,39 @@ PODS:
- React-Core
- RNFS (2.20.0):
- React-Core
+ - RNGestureHandler (2.9.0):
+ - React-Core
- RNLocalize (3.0.0):
- React-Core
- RNQuickAction (0.3.13):
- React
+ - RNReanimated (3.1.0):
+ - DoubleConversion
+ - FBLazyVector
+ - FBReactNativeSpec
+ - glog
+ - RCT-Folly
+ - RCTRequired
+ - RCTTypeSafety
+ - React-callinvoker
+ - React-Core
+ - React-Core/DevSupport
+ - React-Core/RCTWebSocket
+ - React-CoreModules
+ - React-cxxreact
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector
+ - React-RCTActionSheet
+ - React-RCTAnimation
+ - React-RCTBlob
+ - React-RCTImage
+ - React-RCTLinking
+ - React-RCTNetwork
+ - React-RCTSettings
+ - React-RCTText
+ - ReactCommon/turbomodule/core
+ - Yoga
- RNSecureRandom (1.0.1):
- React
- RNShare (8.2.2):
@@ -583,8 +612,10 @@ DEPENDENCIES:
- RNExitApp (from `../node_modules/react-native-exit-app`)
- RNFileViewer (from `../node_modules/react-native-file-viewer`)
- RNFS (from `../node_modules/react-native-fs`)
+ - RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNLocalize (from `../node_modules/react-native-localize`)
- RNQuickAction (from `../node_modules/react-native-quick-actions`)
+ - RNReanimated (from `../node_modules/react-native-reanimated`)
- RNSecureRandom (from `../node_modules/react-native-securerandom`)
- RNShare (from `../node_modules/react-native-share`)
- RNVectorIcons (from `../node_modules/react-native-vector-icons`)
@@ -729,10 +760,14 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-file-viewer"
RNFS:
:path: "../node_modules/react-native-fs"
+ RNGestureHandler:
+ :path: "../node_modules/react-native-gesture-handler"
RNLocalize:
:path: "../node_modules/react-native-localize"
RNQuickAction:
:path: "../node_modules/react-native-quick-actions"
+ RNReanimated:
+ :path: "../node_modules/react-native-reanimated"
RNSecureRandom:
:path: "../node_modules/react-native-securerandom"
RNShare:
@@ -817,8 +852,10 @@ SPEC CHECKSUMS:
RNExitApp: c4e052df2568b43bec8a37c7cd61194d4cfee2c3
RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
+ RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
RNLocalize: 5944c97d2fe8150913a51ddd5eab4e23a82bd80d
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93
+ RNReanimated: b1220a0e5168745283ff5d53bfc7d2144b2cee1b
RNSecureRandom: 07efbdf2cd99efe13497433668e54acd7df49fef
RNShare: d82e10f6b7677f4b0048c23709bd04098d5aee6c
RNVectorIcons: fcc2f6cb32f5735b586e66d14103a74ce6ad61f8
diff --git a/packages/app-mobile/package.json b/packages/app-mobile/package.json
index 22c95d0a7..d0f58e1ed 100644
--- a/packages/app-mobile/package.json
+++ b/packages/app-mobile/package.json
@@ -46,11 +46,13 @@
"react-native-device-info": "10.6.0",
"react-native-dialogbox": "0.6.10",
"react-native-document-picker": "8.2.1",
+ "react-native-drawer-layout": "3.2.0",
"react-native-dropdownalert": "4.5.1",
"react-native-exit-app": "1.1.0",
"react-native-file-viewer": "2.1.5",
"react-native-fingerprint-scanner": "6.0.0",
"react-native-fs": "2.20.0",
+ "react-native-gesture-handler": "2.9.0",
"react-native-get-random-values": "1.9.0",
"react-native-image-picker": "5.4.2",
"react-native-image-resizer": "1.4.5",
@@ -59,11 +61,11 @@
"react-native-paper": "5.8.0",
"react-native-popup-menu": "0.16.1",
"react-native-quick-actions": "0.3.13",
+ "react-native-reanimated": "3.1.0",
"react-native-rsa-native": "2.0.5",
"react-native-safe-area-context": "4.5.3",
"react-native-securerandom": "1.0.1",
"react-native-share": "8.2.2",
- "react-native-side-menu-updated": "1.3.2",
"react-native-sqlite-storage": "6.0.1",
"react-native-url-polyfill": "1.3.0",
"react-native-vector-icons": "9.2.0",
diff --git a/packages/app-mobile/root.tsx b/packages/app-mobile/root.tsx
index bff7dba90..1e7377896 100644
--- a/packages/app-mobile/root.tsx
+++ b/packages/app-mobile/root.tsx
@@ -28,7 +28,7 @@ import SyncTargetJoplinCloud from '@joplin/lib/SyncTargetJoplinCloud';
import SyncTargetOneDrive from '@joplin/lib/SyncTargetOneDrive';
import initProfile from '@joplin/lib/services/profileConfig/initProfile';
const VersionInfo = require('react-native-version-info').default;
-const { Keyboard, BackHandler, Animated, View, StatusBar, Platform, Dimensions } = require('react-native');
+const { Keyboard, BackHandler, View, StatusBar, Platform, Dimensions } = require('react-native');
import { AppState as RNAppState, EmitterSubscription, Linking, NativeEventSubscription } from 'react-native';
import getResponsiveValue from './components/getResponsiveValue';
import NetInfo from '@react-native-community/netinfo';
@@ -67,7 +67,7 @@ const { OneDriveLoginScreen } = require('./components/screens/onedrive-login.js'
import EncryptionConfigScreen from './components/screens/encryption-config';
const { DropboxLoginScreen } = require('./components/screens/dropbox-login.js');
const { MenuContext } = require('react-native-popup-menu');
-import SideMenu from './components/SideMenu';
+import { Drawer } from 'react-native-drawer-layout';
import SideMenuContent from './components/side-menu-content';
const { SideMenuContentNote } = require('./components/side-menu-content-note.js');
const { DatabaseDriverReactNative } = require('./utils/database-driver-react-native');
@@ -116,6 +116,9 @@ import ProfileEditor from './components/ProfileSwitcher/ProfileEditor';
import sensorInfo, { SensorInfo } from './components/biometrics/sensorInfo';
import { getCurrentProfile } from '@joplin/lib/services/profileConfig';
import { getDatabaseName, getProfilesRootDir, getResourceDir, setDispatch } from './services/profiles';
+import { ReactNode } from 'react';
+
+type SideMenuPosition = 'left' | 'right';
const logger = Logger.create('root');
@@ -712,7 +715,6 @@ class AppComponent extends React.Component {
super();
this.state = {
- sideMenuContentOpacity: new Animated.Value(0),
sideMenuWidth: this.getSideMenuWidth(),
sensorInfo: null,
};
@@ -956,8 +958,8 @@ class AppComponent extends React.Component {
if (this.props.appState !== 'ready') return null;
const theme: Theme = themeStyle(this.props.themeId);
- let sideMenuContent = null;
- let menuPosition = 'left';
+ let sideMenuContent: ReactNode = null;
+ let menuPosition: SideMenuPosition = 'left';
if (this.props.routeName === 'Note') {
sideMenuContent = ;
@@ -996,18 +998,20 @@ class AppComponent extends React.Component {
const mainContent = (
- this.sideMenu_change(isOpen)}
- onSliding={(percent: number) => {
- this.props.dispatch({
- type: 'SIDE_MENU_OPEN_PERCENT',
- value: percent,
- });
+ this.sideMenu_change(true)}
+ onClose={() => this.sideMenu_change(false)}
+ drawerPosition={menuPosition}
+ swipeEdgeWidth={15}
+ drawerStyle={{
+ width: this.state.sideMenuWidth,
}}
+ renderDrawerContent={() => sideMenuContent}
>
@@ -1024,7 +1028,7 @@ class AppComponent extends React.Component {
/> }
-
+
);
diff --git a/yarn.lock b/yarn.lock
index 157e81b44..9d03a5152 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1385,7 +1385,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.7, @babel/helper-create-class-features-plugin@npm:^7.21.0":
+"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.7, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-create-class-features-plugin@npm:7.22.5"
dependencies:
@@ -1985,6 +1985,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-jsx@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/plugin-syntax-jsx@npm:7.22.5"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce
+ languageName: node
+ linkType: hard
+
"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3":
version: 7.10.4
resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4"
@@ -2084,6 +2095,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-typescript@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/plugin-syntax-typescript@npm:7.22.5"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.18.6":
version: 7.22.5
resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5"
@@ -2277,7 +2299,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.19.6":
+"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.19.6, @babel/plugin-transform-modules-commonjs@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.5"
dependencies:
@@ -2339,6 +2361,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-object-assign@npm:^7.16.7":
+ version: 7.22.5
+ resolution: "@babel/plugin-transform-object-assign@npm:7.22.5"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 5b672d72c7b12973e5e5881c3e69ab02474c44add224a9972b9450f859e713b2065fa18b88797b1393ad72cb952c0b14d80fa36960a17d6b558f24ee5cde219c
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.18.6":
version: 7.22.5
resolution: "@babel/plugin-transform-object-super@npm:7.22.5"
@@ -2542,6 +2575,20 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-typescript@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/plugin-transform-typescript@npm:7.22.5"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-typescript": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: d12f1ca1ef1f2a54432eb044d2999705d1205ebe211c2a7f05b12e8eb2d2a461fd7657b5486b2f2f1efe7c0c0dc8e80725b767073d40fe4ae059a7af057b05e4
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-escapes@npm:^7.18.10":
version: 7.22.5
resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.5"
@@ -2691,6 +2738,21 @@ __metadata:
languageName: node
linkType: hard
+"@babel/preset-typescript@npm:^7.16.7":
+ version: 7.22.5
+ resolution: "@babel/preset-typescript@npm:7.22.5"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-validator-option": ^7.22.5
+ "@babel/plugin-syntax-jsx": ^7.22.5
+ "@babel/plugin-transform-modules-commonjs": ^7.22.5
+ "@babel/plugin-transform-typescript": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 7be1670cb4404797d3a473bd72d66eb2b3e0f2f8a672a5e40bdb0812cc66085ec84bcd7b896709764cabf042fdc6b7f2d4755ac7cce10515eb596ff61dab5154
+ languageName: node
+ linkType: hard
+
"@babel/register@npm:^7.13.16":
version: 7.18.9
resolution: "@babel/register@npm:7.18.9"
@@ -3386,6 +3448,15 @@ __metadata:
languageName: node
linkType: hard
+"@egjs/hammerjs@npm:^2.0.17":
+ version: 2.0.17
+ resolution: "@egjs/hammerjs@npm:2.0.17"
+ dependencies:
+ "@types/hammerjs": ^2.0.36
+ checksum: 8945137cec5837edd70af3f2e0ea621543eb0aa3b667e6269ec6485350f4d120c2434b37c7c30b1cf42a65275dd61c1f24626749c616696d3956ac0c008c4766
+ languageName: node
+ linkType: hard
+
"@electron/get@npm:^1.14.1":
version: 1.14.1
resolution: "@electron/get@npm:1.14.1"
@@ -4405,11 +4476,13 @@ __metadata:
react-native-device-info: 10.6.0
react-native-dialogbox: 0.6.10
react-native-document-picker: 8.2.1
+ react-native-drawer-layout: 3.2.0
react-native-dropdownalert: 4.5.1
react-native-exit-app: 1.1.0
react-native-file-viewer: 2.1.5
react-native-fingerprint-scanner: 6.0.0
react-native-fs: 2.20.0
+ react-native-gesture-handler: 2.9.0
react-native-get-random-values: 1.9.0
react-native-image-picker: 5.4.2
react-native-image-resizer: 1.4.5
@@ -4418,11 +4491,11 @@ __metadata:
react-native-paper: 5.8.0
react-native-popup-menu: 0.16.1
react-native-quick-actions: 0.3.13
+ react-native-reanimated: 3.1.0
react-native-rsa-native: 2.0.5
react-native-safe-area-context: 4.5.3
react-native-securerandom: 1.0.1
react-native-share: 8.2.2
- react-native-side-menu-updated: 1.3.2
react-native-sqlite-storage: 6.0.1
react-native-url-polyfill: 1.3.0
react-native-vector-icons: 9.2.0
@@ -7370,6 +7443,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/hammerjs@npm:^2.0.36":
+ version: 2.0.41
+ resolution: "@types/hammerjs@npm:2.0.41"
+ checksum: d16fbd688fc9b18cc270abe8dea8d4c50ef7bd8375e593d92c233d299387933a6b003c8db69819344833052458bc5f9ef1b472001277a49f095928d184356006
+ languageName: node
+ linkType: hard
+
"@types/hoist-non-react-statics@npm:*, @types/hoist-non-react-statics@npm:^3.3.0, @types/hoist-non-react-statics@npm:^3.3.1":
version: 3.3.1
resolution: "@types/hoist-non-react-statics@npm:3.3.1"
@@ -27944,6 +28024,20 @@ __metadata:
languageName: node
linkType: hard
+"react-native-drawer-layout@npm:3.2.0":
+ version: 3.2.0
+ resolution: "react-native-drawer-layout@npm:3.2.0"
+ dependencies:
+ use-latest-callback: ^0.1.5
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ react-native-gesture-handler: ">= 1.0.0"
+ react-native-reanimated: ">= 1.0.0"
+ checksum: 67237e650e1245297ec08b9cf90c74aed25dfefbf66c972dae6be5913df78d98f04c5e90e98e396e8ea2b97eca8df0db1872a7608509e29f86491b5d3db36b3a
+ languageName: node
+ linkType: hard
+
"react-native-dropdownalert@npm:4.5.1":
version: 4.5.1
resolution: "react-native-dropdownalert@npm:4.5.1"
@@ -27994,6 +28088,22 @@ __metadata:
languageName: node
linkType: hard
+"react-native-gesture-handler@npm:2.9.0":
+ version: 2.9.0
+ resolution: "react-native-gesture-handler@npm:2.9.0"
+ dependencies:
+ "@egjs/hammerjs": ^2.0.17
+ hoist-non-react-statics: ^3.3.0
+ invariant: ^2.2.4
+ lodash: ^4.17.21
+ prop-types: ^15.7.2
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ checksum: 6bfdd9d23486193424dcfb0073dd821a216c2783dde746d73a3441e920602343f09efa10261c6f09fcbcb645d029a95305c86f61997053c01ad89751c8c6d236
+ languageName: node
+ linkType: hard
+
"react-native-get-random-values@npm:1.9.0":
version: 1.9.0
resolution: "react-native-get-random-values@npm:1.9.0"
@@ -28094,6 +28204,27 @@ __metadata:
languageName: node
linkType: hard
+"react-native-reanimated@npm:3.1.0":
+ version: 3.1.0
+ resolution: "react-native-reanimated@npm:3.1.0"
+ dependencies:
+ "@babel/plugin-transform-object-assign": ^7.16.7
+ "@babel/preset-typescript": ^7.16.7
+ convert-source-map: ^2.0.0
+ invariant: ^2.2.4
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ "@babel/plugin-proposal-nullish-coalescing-operator": ^7.0.0-0
+ "@babel/plugin-proposal-optional-chaining": ^7.0.0-0
+ "@babel/plugin-transform-arrow-functions": ^7.0.0-0
+ "@babel/plugin-transform-shorthand-properties": ^7.0.0-0
+ "@babel/plugin-transform-template-literals": ^7.0.0-0
+ react: "*"
+ react-native: "*"
+ checksum: 28279642056c7b214649ff14d3c9f1e914c9dd3dd74afc734fc10d1af088a2c3b0e187751e2713d54fc0a9916c394068b29aec51e754b51625a4179f10e38bcd
+ languageName: node
+ linkType: hard
+
"react-native-rsa-native@npm:2.0.5":
version: 2.0.5
resolution: "react-native-rsa-native@npm:2.0.5"
@@ -28129,15 +28260,6 @@ __metadata:
languageName: node
linkType: hard
-"react-native-side-menu-updated@npm:1.3.2":
- version: 1.3.2
- resolution: "react-native-side-menu-updated@npm:1.3.2"
- dependencies:
- prop-types: ^15.5.10
- checksum: 5d7ae7d2b372c80d9f7a3472f945daa6c11b43f00193ebec92fdb40ee853e86f522686736aa6a510a4fb09479c8eb7e4f14b53ad117d7e23749cd58c3c9d6cb7
- languageName: node
- linkType: hard
-
"react-native-sqlite-storage@npm:6.0.1":
version: 6.0.1
resolution: "react-native-sqlite-storage@npm:6.0.1"