diff --git a/.eslintignore b/.eslintignore index b138ca656..fa5e16241 100644 --- a/.eslintignore +++ b/.eslintignore @@ -53,6 +53,7 @@ ReactNativeClient/lib/joplin-renderer/assets/ # Ignore files generated from TypeScript files ElectronClient/app/gui/ShareNoteDialog.js ReactNativeClient/lib/JoplinServerApi.js +ReactNativeClient/QuickActions.js ReactNativeClient/PluginAssetsLoader.js ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js -ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js +ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5b744d39d..c429c9ccb 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,7 @@ Tools/commit_hook.txt # Ignore files generated from TypeScript files ElectronClient/app/gui/ShareNoteDialog.js ReactNativeClient/lib/JoplinServerApi.js +ReactNativeClient/QuickActions.js ReactNativeClient/PluginAssetsLoader.js ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4a8ae1dcd..498a1625d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -52,21 +52,32 @@ When submitting a pull request for a new feature or bug fix, please add unit tes The tests are under CliClient/tests. To get them running, you first need to build the CLI app: - cd CliClient - npm i - ./build.sh +```sh +npm run tsc # Build the .ts and .tsx files +cd CliClient +npm i +./build.sh +``` To run all the test units: - ./run_test.sh +```sh +./run_test.sh +``` To run just one particular file: - ./run_test.sh markdownUtils # Don't add the .js extension +```sh +./run_test.sh markdownUtils # Don't add the .js extension +``` To filter tests: - ./run_test.sh "should handle conflict" # Will run all the test units that contain "should handle conflict" in their description +```sh +./run_test.sh "should handle conflict" # Will run all the test units that contain "should handle conflict" in their description +``` + +If you get the error `Cannot find module '/joplin/CliClient/node_modules/sqlite3/lib/binding/node-v79-darwin-x64/node_sqlite3.node'`, you may need to run `npm rebuild`. ## About abandoned pull requests diff --git a/CliClient/package-lock.json b/CliClient/package-lock.json index 474741674..902de8ff4 100644 --- a/CliClient/package-lock.json +++ b/CliClient/package-lock.json @@ -2929,7 +2929,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.2.4.tgz", "integrity": "sha512-qHwPdGyGr9pOZBoSgUOuNPG20QYZVN00lFcxKQgjPUODSxVH7obQeLVVawa3B4cfSNtLIeczSzoy/xYA8XG5WQ==", - "dev": true, "requires": { "he": "1.1.1" } diff --git a/ElectronClient/app/package-lock.json b/ElectronClient/app/package-lock.json index 47240a2ac..a886d9eb4 100644 --- a/ElectronClient/app/package-lock.json +++ b/ElectronClient/app/package-lock.json @@ -6952,6 +6952,36 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true + } + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "optional": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "optional": true }, "semver-diff": { "version": "2.1.0", @@ -7653,7 +7683,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true + "dev": true, + "optional": true }, "repeat-string": { "version": "1.6.1", diff --git a/ReactNativeClient/QuickActions.ts b/ReactNativeClient/QuickActions.ts new file mode 100644 index 000000000..8b91b2f78 --- /dev/null +++ b/ReactNativeClient/QuickActions.ts @@ -0,0 +1,50 @@ + +import {DeviceEventEmitter} from 'react-native'; +import * as QuickActions from 'react-native-quick-actions'; +const { _ } = require('lib/locale.js'); + +type TData = { + type: string +} + +export default (dispatch: Function, folderId: string) => { + const userInfo = { url: '' }; + QuickActions.setShortcutItems([ + {type: 'New note', title: _('New note'), icon: 'Compose', userInfo}, + {type: 'New to-do', title: _('New to-do'), icon: 'Add', userInfo}, + ]); + + DeviceEventEmitter.addListener('quickActionShortcut', (data: TData) => { + // This dispatch is to momentarily go back to reset state, similar to what + // happens in onJoplinLinkClick_(). Easier to just go back, then go to the + // note since the Note screen doesn't handle reloading a different note. + // + // This hack is necessary because otherwise you get this problem: + // The first time you create a note from the quick-action menu, it works + // perfectly. But if you do it again immediately later, it re-opens the + // page to that first note you made rather than creating an entirely new + // note. If you navigate around enough (which I think changes the redux + // state sufficiently or something), then it'll work again. + dispatch({type: 'NAV_BACK'}); + + if (data.type === 'New note') { + dispatch({ + type: 'NAV_GO', + noteId: null, + folderId, + routeName: 'Note', + itemType: 'note', + }); + } + + if (data.type === 'New to-do') { + dispatch({ + type: 'NAV_GO', + noteId: null, + folderId, + routeName: 'Note', + itemType: 'todo', + }); + } + }); +}; diff --git a/ReactNativeClient/android/app/build.gradle b/ReactNativeClient/android/app/build.gradle index 756d7196f..d3f216a1f 100644 --- a/ReactNativeClient/android/app/build.gradle +++ b/ReactNativeClient/android/app/build.gradle @@ -180,6 +180,8 @@ android { } dependencies { + implementation project(':react-native-quick-actions') + implementation project(':@react-native-community_slider') implementation "org.webkit:android-jsc:r241213" compile project(':react-native-push-notification') // implementation (project(':react-native-camera')) { @@ -219,6 +221,7 @@ dependencies { implementation project(':react-native-version-info') implementation project(':react-native-camera') implementation "com.facebook.react:react-native:+" + implementation project(':react-native-quick-actions') // implementation "com.google.android.gms:play-services-base:16.0.1" // For Firebase // implementation 'me.leolin:ShortcutBadger:1.1.21@aar' // For Firebase - this line if you wish to use badge on Android diff --git a/ReactNativeClient/android/app/src/main/java/net/cozic/joplin/MainApplication.java b/ReactNativeClient/android/app/src/main/java/net/cozic/joplin/MainApplication.java index 2f2ccd193..d12572ee0 100644 --- a/ReactNativeClient/android/app/src/main/java/net/cozic/joplin/MainApplication.java +++ b/ReactNativeClient/android/app/src/main/java/net/cozic/joplin/MainApplication.java @@ -4,6 +4,9 @@ import android.app.Application; import android.content.Context; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; +import com.reactNativeQuickActions.AppShortcutsPackage; +import com.reactnativecommunity.slider.ReactSliderPackage; +import com.reactnativecommunity.webview.RNCWebViewPackage; import com.dieam.reactnativepushnotification.ReactNativePushNotificationPackage; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; @@ -19,51 +22,74 @@ import android.database.CursorWindow; public class MainApplication extends Application implements ReactApplication { - private final ReactNativeHost mReactNativeHost = - new ReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } - @Override - protected List getPackages() { - @SuppressWarnings("UnnecessaryLocalVariable") - List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - return packages; - } + @Override + protected List getPackages() { + @SuppressWarnings("UnnecessaryLocalVariable") + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return packages; + } - @Override - protected String getJSMainModuleName() { - return "index"; - } - }; + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new AppShortcutsPackage(), + new ReactSliderPackage(), + new RNCWebViewPackage(), + new ReactNativePushNotificationPackage(), + new ImageResizerPackage(), + new RNFileViewerPackage(), + new RNSecureRandomPackage(), + new ImagePickerPackage(), + new ReactNativeDocumentPicker(), + new RNFetchBlobPackage(), + new RNFSPackage(), + new SQLitePluginPackage(), + new VectorIconsPackage(), + new SharePackage(), + new RNCameraPackage(), + new RNVersionInfoPackage() + ); + } - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } + @Override + protected String getJSMainModuleName() { + return "index"; + } + }; - @Override - public void onCreate() { - super.onCreate(); + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } - // To try to fix the error "Row too big to fit into CursorWindow" - // https://github.com/andpor/react-native-sqlite-storage/issues/364#issuecomment-526423153 - // https://github.com/laurent22/joplin/issues/1767#issuecomment-515617991 - try { - Field field = CursorWindow.class.getDeclaredField("sCursorWindowSize"); + @Override + public void onCreate() { + super.onCreate(); + + // To try to fix the error "Row too big to fit into CursorWindow" + // https://github.com/andpor/react-native-sqlite-storage/issues/364#issuecomment-526423153 + // https://github.com/laurent22/joplin/issues/1767#issuecomment-515617991 + try { + Field field = CursorWindow.class.getDeclaredField("sCursorWindowSize"); field.setAccessible(true); field.set(null, 50 * 1024 * 1024); //the 102400 is the new size added - } catch (Exception e) { - e.printStackTrace(); - } + } catch (Exception e) { + e.printStackTrace(); + } - SoLoader.init(this, /* native exopackage */ false); - initializeFlipper(this); // Remove this line if you don't want Flipper enabled + SoLoader.init(this, /* native exopackage */ false); + initializeFlipper(this); // Remove this line if you don't want Flipper enabled } + /** * Loads Flipper in React Native templates. * diff --git a/ReactNativeClient/android/settings.gradle b/ReactNativeClient/android/settings.gradle index 3634bd74f..4ed4c0fef 100644 --- a/ReactNativeClient/android/settings.gradle +++ b/ReactNativeClient/android/settings.gradle @@ -1,4 +1,22 @@ rootProject.name = 'Joplin' +include ':react-native-quick-actions' +project(':react-native-quick-actions').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-quick-actions/android') +include ':@react-native-community_slider' +project(':@react-native-community_slider').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/slider/android') +include ':react-native-webview' +project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') +include ':react-native-file-viewer' +project(':react-native-file-viewer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-file-viewer/android') +include ':react-native-securerandom' +project(':react-native-securerandom').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-securerandom/android') +include ':react-native-fs' +project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') +include ':react-native-image-picker' +project(':react-native-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-picker/android') +include ':react-native-vector-icons' +project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') +include ':react-native-image-resizer' +project(':react-native-image-resizer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-resizer/android') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':react-native-fs' project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') diff --git a/ReactNativeClient/ios/Joplin.xcodeproj/project.pbxproj b/ReactNativeClient/ios/Joplin.xcodeproj/project.pbxproj index af73ba995..b42509f94 100644 --- a/ReactNativeClient/ios/Joplin.xcodeproj/project.pbxproj +++ b/ReactNativeClient/ios/Joplin.xcodeproj/project.pbxproj @@ -7,10 +7,49 @@ objects = { /* Begin PBXBuildFile section */ + 00255D8FDBA1452E82982E76 /* libReactNativeShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5537407876044BA9ACB21FF9 /* libReactNativeShareExtension.a */; }; + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; + 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; + 065B3D792187B61200002863 /* libRNVersionInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 065B3D772187B5E300002863 /* libRNVersionInfo.a */; }; + 0DAD2E67F6A14BDC8250B927 /* libRNDocumentPicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 82214D3345D846709A314868 /* libRNDocumentPicker.a */; }; + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; + 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 1E71C4672AEC47CE94DFF507 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FD370E24D76E461D960DD85D /* Feather.ttf */; }; + 2DF8F1FD23BA7FA300871C80 /* Joplin.app in Frameworks */ = {isa = PBXBuildFile; fileRef = 13B07F961A680F5B00A75B9A /* Joplin.app */; }; + 350318CF7C9E4BD68821EBE9 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FF411B45E68B4A8CBCC35777 /* Ionicons.ttf */; }; + 45E8D3F9FBA0410E82E28A0D /* libRNCWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7A5EE79128470A920D4971 /* libRNCWebView.a */; }; + 4D05897622B446600072ECCC /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D05896A22B4464B0072ECCC /* libRNCamera.a */; }; + 4DDA31241FC88F2400B5A80D /* libRCTPushNotification.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DDA310F1FC88EEB00B5A80D /* libRCTPushNotification.a */; }; + 5AFCE00CC1414FE6BD618F0D /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 15FD7D2C8F0A445BBA807A9D /* MaterialIcons.ttf */; }; + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 65B672EE2B5A43E0919683EA /* libRNCSlider.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 090D1FCD537D494CBC153ED6 /* libRNCSlider.a */; }; + 725A77EC604947A0AFF12C2B /* libRNFetchBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F5E37D05726A4A08B2EE323A /* libRNFetchBlob.a */; }; + 73F8D08845494D1396B6CD0B /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1F79F2CD7CED446B986A6252 /* Entypo.ttf */; }; + 82C61D3DAE0A4666883001E9 /* libRNFileViewer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CCDC2774CD86466F897D88E2 /* libRNFileViewer.a */; }; + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; + 929CA5ABC80E4D398AFC4E44 /* libSQLite.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 87BABCF4ED0A406B9546CCE9 /* libSQLite.a */; }; + A47605BC216B4DB3B3C2ED42 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E2638D52624B477FABB52B8F /* FontAwesome.ttf */; }; + A6F5DFAC928B4DBCADFB5D65 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3FFC0F5EFDC54862B1F998DD /* Foundation.ttf */; }; + AA484D3B3E0F4588A7687313 /* libRNFS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F098E1ACCB594C828C851A57 /* libRNFS.a */; }; + ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; + AE6BB3A2FDA34D01864A721A /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 381C047F2739439CB3E6452A /* libRNVectorIcons.a */; }; + AE98927FE9BF483FB24D229F /* libRCTImageResizer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 508DD20D1EA341CA8F730F22 /* libRCTImageResizer.a */; }; + AF99EEC6C55042F7BFC87583 /* libRNImagePicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 44A39642217548C8ADA91CBA /* libRNImagePicker.a */; }; + BEECB8BAF419407AB74CE211 /* libRNQuickAction.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 97C7168EEE364A80B33E87BE /* libRNQuickAction.a */; }; + C8DD987A30F740F1B8EF6D3D /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CC3CF4044A914711B8D30D1A /* Zocial.ttf */; }; + E75DD6E04D0441D5BF8EB841 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C77F905EF22646F39B673572 /* MaterialCommunityIcons.ttf */; }; + E8DD8252C0DD4CF1B53590E9 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 69B8EE98BFBC4AABA4885BB0 /* SimpleLineIcons.ttf */; }; + EA501DCDCF4745E9B63ECE98 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7D46CBDF8846409890AD7A84 /* Octicons.ttf */; }; + EC11356C90E9419799A2626F /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 51BCEC3BC28046C8BB19531F /* EvilIcons.ttf */; }; 9E1B958F73B0E37D15AA9B24 /* libPods-Joplin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DDE6F1BE6285C68A2DA17BE9 /* libPods-Joplin.a */; }; AE6BB3A2FDA34D01864A721A /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 381C047F2739439CB3E6452A /* libRNVectorIcons.a */; }; ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; }; @@ -19,6 +58,394 @@ FBF57CE2F0F448FA9A8985E2 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EB8BCAEA9AA41CAAE460443 /* libsqlite3.0.tbd */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTActionSheet; + }; + 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTGeolocation; + }; + 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5115D1A9E6B3D00147676; + remoteInfo = RCTImage; + }; + 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B511DB1A9E6C8500147676; + remoteInfo = RCTNetwork; + }; + 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; + remoteInfo = RCTVibration; + }; + 065B3D762187B5E300002863 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 065B3D412187B5E300002863 /* RNVersionInfo.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNVersionInfo; + }; + 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTSettings; + }; + 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3C86DF461ADF2C930047B81A; + remoteInfo = RCTWebSocket; + }; + 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; + remoteInfo = React; + }; + 2DF8F1F823BA7F6B00871C80 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A3D344FFDE034BB3A6ABBD36 /* ReactNativeShareExtension.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 41B5DE301D0B505800949BD5; + remoteInfo = ReactNativeShareExtension; + }; + 2DF8F1FB23BA7F6B00871C80 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 932E53ED42494ECB93F01D99 /* RNQuickAction.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 91090D8B1BB6C934009AE358; + remoteInfo = RNQuickAction; + }; + 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C059A1DE3340900C268FA; + remoteInfo = yoga; + }; + 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + 4D0588F522B444490072ECCC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EDEBC6D6214B3E7000DD5AC8; + remoteInfo = jsi; + }; + 4D0588F722B444490072ECCC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EDEBC73B214B45A300DD5AC8; + remoteInfo = jsiexecutor; + }; + 4D0588F922B444490072ECCC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ED296FB6214C9A0900B7C4FE; + remoteInfo = "jsi-tvOS"; + }; + 4D0588FB22B444490072ECCC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ED296FEE214C9CF800B7C4FE; + remoteInfo = "jsiexecutor-tvOS"; + }; + 4D05890B22B444490072ECCC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = DECA9B559982480BBD8F9E84 /* RNCWebView.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNCWebView; + }; + 4D05896922B4464B0072ECCC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4D05893D22B4464B0072ECCC /* RNCamera.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 4107012F1ACB723B00C6AA39; + remoteInfo = RNCamera; + }; + 4D2A44E7200015A2001CA388 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 252BD7B86BF7435B960DA901 /* RNSecureRandom.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNSecureRandom; + }; + 4D2A85A91FBCE3AC0028537D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3DBE0D001F3B181A0099AA32; + remoteInfo = fishhook; + }; + 4D2A85BA1FBCE3AD0028537D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = DF1C50EBC11E46A3AF87F80A /* RCTImageResizer.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5D72D2E81C16249000E22EC1; + remoteInfo = RCTImageResizer; + }; + 4D2A85BD1FBCE3AD0028537D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 02C42EA98156482DB00BF86D /* RNDocumentPicker.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E01DD9DB1D2311A600C39062; + remoteInfo = RNDocumentPicker; + }; + 4D2A85C01FBCE3AD0028537D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B8C44254005A4B80AD5CA558 /* RNFetchBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A15C300E1CD25C330074CB35; + remoteInfo = RNFetchBlob; + }; + 4D2A85C41FBCE3AD0028537D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9D8705D0D07C4A098FD912EB /* RNFS.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F12AFB9B1ADAF8F800E0535D; + remoteInfo = RNFS; + }; + 4D2A85C61FBCE3AD0028537D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9D8705D0D07C4A098FD912EB /* RNFS.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 6456441F1EB8DA9100672408; + remoteInfo = "RNFS-tvOS"; + }; + 4D2A85C91FBCE3AD0028537D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 711CBD21F0894B83A2D8E234 /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5DBEB1501B18CEA900B34395; + remoteInfo = RNVectorIcons; + }; + 4D2A85CC1FBCE3AD0028537D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = CCDE9E9AF09B45F391B1C2AF /* SQLite.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E23D7B471ACEFE2A00C59171; + remoteInfo = SQLite; + }; + 4D2AFF551FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28201D9B03D100D4039D; + remoteInfo = "RCTAnimation-tvOS"; + }; + 4D2AFF591FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ADD01A681E09402E00F6D226; + remoteInfo = "RCTBlob-tvOS"; + }; + 4D2AFF5E1FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; + remoteInfo = "RCTImage-tvOS"; + }; + 4D2AFF631FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28471D9B043800D4039D; + remoteInfo = "RCTLinking-tvOS"; + }; + 4D2AFF671FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28541D9B044C00D4039D; + remoteInfo = "RCTNetwork-tvOS"; + }; + 4D2AFF6D1FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28611D9B046600D4039D; + remoteInfo = "RCTSettings-tvOS"; + }; + 4D2AFF711FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A287B1D9B048500D4039D; + remoteInfo = "RCTText-tvOS"; + }; + 4D2AFF781FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28881D9B049200D4039D; + remoteInfo = "RCTWebSocket-tvOS"; + }; + 4D2AFF7A1FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32; + remoteInfo = "fishhook-tvOS"; + }; + 4D2AFF881FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28131D9B038B00D4039D; + remoteInfo = "React-tvOS"; + }; + 4D2AFF8A1FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C06751DE3340C00C268FA; + remoteInfo = "yoga-tvOS"; + }; + 4D2AFF8C1FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 4D2AFF901FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D383D3C1EBD27B6005632C8; + remoteInfo = "third-party-tvOS"; + }; + 4D2AFF921FDA002000599716 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D383D621EBD27B9005632C8; + remoteInfo = "double-conversion-tvOS"; + }; + 4D3A19261FBDDA9400457703 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7; + remoteInfo = "third-party"; + }; + 4D3A192A1FBDDA9400457703 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 139D7E881E25C6D100323FB7; + remoteInfo = "double-conversion"; + }; + 4D7F8DA020A32BA0008B757D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BDC1FC498900052F4D5; + remoteInfo = jsinspector; + }; + 4D7F8DA220A32BA0008B757D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5; + remoteInfo = "jsinspector-tvOS"; + }; + 4D8B719B2163E8C500136BBC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 59F5448FAF7345F8B568BD00 /* RNFileViewer.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNFileViewer; + }; + 4DA7F80C1FC1DA9C00353191 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A4716DB8654B431D894F89E1 /* RNImagePicker.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 014A3B5C1C6CF33500B6D375; + remoteInfo = RNImagePicker; + }; + 4DC3B74E22B44EC300447A39 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E839F3056BD643A7B4377288 /* RNCSlider.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 28C79A09220DC4CC0061DE82; + remoteInfo = RNCSlider; + }; + 4DDA310E1FC88EEB00B5A80D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4DDA31011FC88EEA00B5A80D /* RCTPushNotification.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTPushNotification; + }; + 4DDA31101FC88EEB00B5A80D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4DDA31011FC88EEA00B5A80D /* RCTPushNotification.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D05745F1DE6004600184BB4; + remoteInfo = "RCTPushNotification-tvOS"; + }; + 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTAnimation; + }; + 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTLinking; + }; + 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5119B1A9E6C1200147676; + remoteInfo = RCTText; + }; + ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 358F4ED71D1E81A9004DF814; + remoteInfo = RCTBlob; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 0EB8BCAEA9AA41CAAE460443 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; }; @@ -32,6 +459,34 @@ 22647ACF9A4C45918C44C599 /* libRNSecureRandom.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSecureRandom.a; sourceTree = ""; }; 381C047F2739439CB3E6452A /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; 4DA7F7A61FC1196F00353191 /* Joplin.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Joplin.entitlements; path = Joplin/Joplin.entitlements; sourceTree = ""; }; + 4DDA31011FC88EEA00B5A80D /* RCTPushNotification.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTPushNotification.xcodeproj; path = "../node_modules/react-native/Libraries/PushNotificationIOS/RCTPushNotification.xcodeproj"; sourceTree = ""; }; + 508DD20D1EA341CA8F730F22 /* libRCTImageResizer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTImageResizer.a; sourceTree = ""; }; + 51BCEC3BC28046C8BB19531F /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; + 5537407876044BA9ACB21FF9 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = ""; }; + 59F5448FAF7345F8B568BD00 /* RNFileViewer.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFileViewer.xcodeproj; path = "../node_modules/react-native-file-viewer/ios/RNFileViewer.xcodeproj"; sourceTree = ""; }; + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 69B8EE98BFBC4AABA4885BB0 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; + 711CBD21F0894B83A2D8E234 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; + 7D46CBDF8846409890AD7A84 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; + 82214D3345D846709A314868 /* libRNDocumentPicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNDocumentPicker.a; sourceTree = ""; }; + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; + 87BABCF4ED0A406B9546CCE9 /* libSQLite.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libSQLite.a; sourceTree = ""; }; + 932E53ED42494ECB93F01D99 /* RNQuickAction.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNQuickAction.xcodeproj; path = "../node_modules/react-native-quick-actions/RNQuickAction/RNQuickAction.xcodeproj"; sourceTree = ""; }; + 97C7168EEE364A80B33E87BE /* libRNQuickAction.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNQuickAction.a; sourceTree = ""; }; + 9D8705D0D07C4A098FD912EB /* RNFS.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFS.xcodeproj; path = "../node_modules/react-native-fs/RNFS.xcodeproj"; sourceTree = ""; }; + A3D344FFDE034BB3A6ABBD36 /* ReactNativeShareExtension.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = ReactNativeShareExtension.xcodeproj; path = "../node_modules/react-native-share-extension/ios/ReactNativeShareExtension.xcodeproj"; sourceTree = ""; }; + A4716DB8654B431D894F89E1 /* RNImagePicker.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNImagePicker.xcodeproj; path = "../node_modules/react-native-image-picker/ios/RNImagePicker.xcodeproj"; sourceTree = ""; }; + ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; + B8C44254005A4B80AD5CA558 /* RNFetchBlob.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFetchBlob.xcodeproj; path = "../node_modules/rn-fetch-blob/ios/RNFetchBlob.xcodeproj"; sourceTree = ""; }; + C77F905EF22646F39B673572 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; + CC3CF4044A914711B8D30D1A /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; + CCDC2774CD86466F897D88E2 /* libRNFileViewer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFileViewer.a; sourceTree = ""; }; + CCDE9E9AF09B45F391B1C2AF /* SQLite.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = SQLite.xcodeproj; path = "../node_modules/react-native-sqlite-storage/src/ios/SQLite.xcodeproj"; sourceTree = ""; }; + DECA9B559982480BBD8F9E84 /* RNCWebView.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCWebView.xcodeproj; path = "../node_modules/react-native-webview/ios/RNCWebView.xcodeproj"; sourceTree = ""; }; + DF1C50EBC11E46A3AF87F80A /* RCTImageResizer.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTImageResizer.xcodeproj; path = "../node_modules/react-native-image-resizer/ios/RCTImageResizer.xcodeproj"; sourceTree = ""; }; + E2638D52624B477FABB52B8F /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; + E839F3056BD643A7B4377288 /* RNCSlider.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCSlider.xcodeproj; path = "../node_modules/@react-native-community/slider/ios/RNCSlider.xcodeproj"; sourceTree = ""; }; 6CFFC13990302AAE61F81DB1 /* Pods-Joplin.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Joplin.release.xcconfig"; path = "Target Support Files/Pods-Joplin/Pods-Joplin.release.xcconfig"; sourceTree = ""; }; 756FF6C78FB548317DAD12C0 /* Pods-Joplin.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Joplin.debug.xcconfig"; path = "Target Support Files/Pods-Joplin/Pods-Joplin.debug.xcconfig"; sourceTree = ""; }; DDE6F1BE6285C68A2DA17BE9 /* libPods-Joplin.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Joplin.a"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -45,11 +500,18 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 2DF8F1FD23BA7FA300871C80 /* Joplin.app in Frameworks */, ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */, ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */, FBF57CE2F0F448FA9A8985E2 /* libsqlite3.0.tbd in Frameworks */, AE6BB3A2FDA34D01864A721A /* libRNVectorIcons.a in Frameworks */, F3D0BB525E6C490294D73075 /* libRNSecureRandom.a in Frameworks */, + 82C61D3DAE0A4666883001E9 /* libRNFileViewer.a in Frameworks */, + 45E8D3F9FBA0410E82E28A0D /* libRNCWebView.a in Frameworks */, + 4D05897622B446600072ECCC /* libRNCamera.a in Frameworks */, + 65B672EE2B5A43E0919683EA /* libRNCSlider.a in Frameworks */, + BEECB8BAF419407AB74CE211 /* libRNQuickAction.a in Frameworks */, + 00255D8FDBA1452E82982E76 /* libReactNativeShareExtension.a in Frameworks */, 9E1B958F73B0E37D15AA9B24 /* libPods-Joplin.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -83,12 +545,80 @@ name = Joplin; sourceTree = ""; }; + 146834001AC3E56700842450 /* Products */ = { + isa = PBXGroup; + children = ( + 146834041AC3E56700842450 /* libReact.a */, + 4D2AFF891FDA002000599716 /* libReact.a */, + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, + 4D2AFF8B1FDA002000599716 /* libyoga.a */, + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, + 4D2AFF8D1FDA002000599716 /* libcxxreact.a */, + 4D7F8DA120A32BA0008B757D /* libjsinspector.a */, + 4D7F8DA320A32BA0008B757D /* libjsinspector-tvOS.a */, + 4D3A19271FBDDA9400457703 /* libthird-party.a */, + 4D2AFF911FDA002000599716 /* libthird-party.a */, + 4D3A192B1FBDDA9400457703 /* libdouble-conversion.a */, + 4D2AFF931FDA002000599716 /* libdouble-conversion.a */, + 4D0588F622B444490072ECCC /* libjsi.a */, + 4D0588F822B444490072ECCC /* libjsiexecutor.a */, + 4D0588FA22B444490072ECCC /* libjsi-tvOS.a */, + 4D0588FC22B444490072ECCC /* libjsiexecutor-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 2DF8F1F323BA7F6900871C80 /* Products */ = { + isa = PBXGroup; + children = ( + 2DF8F1F923BA7F6B00871C80 /* libReactNativeShareExtension.a */, + ); + name = Products; + sourceTree = ""; + }; + 2DF8F1F523BA7F6900871C80 /* Products */ = { + isa = PBXGroup; + children = ( + 2DF8F1FC23BA7F6B00871C80 /* libRNQuickAction.a */, + ); + name = Products; + sourceTree = ""; + }; + 4D05890822B444490072ECCC /* Products */ = { + isa = PBXGroup; + children = ( + 4D05890C22B444490072ECCC /* libRNCWebView.a */, + ); + name = Products; + sourceTree = ""; + }; + 4D05893E22B4464B0072ECCC /* Products */ = { + isa = PBXGroup; + children = ( + 4D05896A22B4464B0072ECCC /* libRNCamera.a */, + ); + name = Products; + sourceTree = ""; + }; + 4D2A44E4200015A2001CA388 /* Products */ = { + isa = PBXGroup; + children = ( + 4D2A44E8200015A2001CA388 /* libRNSecureRandom.a */, + ); + name = Products; + sourceTree = ""; + }; 4D2A85911FBCE3950028537D /* Recovered References */ = { isa = PBXGroup; children = ( F5E37D05726A4A08B2EE323A /* libRNFetchBlob.a */, 381C047F2739439CB3E6452A /* libRNVectorIcons.a */, 22647ACF9A4C45918C44C599 /* libRNSecureRandom.a */, + CCDC2774CD86466F897D88E2 /* libRNFileViewer.a */, + 4C7A5EE79128470A920D4971 /* libRNCWebView.a */, + 090D1FCD537D494CBC153ED6 /* libRNCSlider.a */, + 97C7168EEE364A80B33E87BE /* libRNQuickAction.a */, + 5537407876044BA9ACB21FF9 /* libReactNativeShareExtension.a */, ); name = "Recovered References"; sourceTree = ""; @@ -112,6 +642,34 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( + 4D05893D22B4464B0072ECCC /* RNCamera.xcodeproj */, + 065B3D412187B5E300002863 /* RNVersionInfo.xcodeproj */, + 4DDA31011FC88EEA00B5A80D /* RCTPushNotification.xcodeproj */, + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, + 146833FF1AC3E56700842450 /* React.xcodeproj */, + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, + ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */, + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, + 02C42EA98156482DB00BF86D /* RNDocumentPicker.xcodeproj */, + B8C44254005A4B80AD5CA558 /* RNFetchBlob.xcodeproj */, + 9D8705D0D07C4A098FD912EB /* RNFS.xcodeproj */, + DF1C50EBC11E46A3AF87F80A /* RCTImageResizer.xcodeproj */, + CCDE9E9AF09B45F391B1C2AF /* SQLite.xcodeproj */, + 711CBD21F0894B83A2D8E234 /* RNVectorIcons.xcodeproj */, + A4716DB8654B431D894F89E1 /* RNImagePicker.xcodeproj */, + 252BD7B86BF7435B960DA901 /* RNSecureRandom.xcodeproj */, + 59F5448FAF7345F8B568BD00 /* RNFileViewer.xcodeproj */, + DECA9B559982480BBD8F9E84 /* RNCWebView.xcodeproj */, + E839F3056BD643A7B4377288 /* RNCSlider.xcodeproj */, + 932E53ED42494ECB93F01D99 /* RNQuickAction.xcodeproj */, + A3D344FFDE034BB3A6ABBD36 /* ReactNativeShareExtension.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -198,6 +756,120 @@ mainGroup = 83CBB9F61A601CBA00E9B192; productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; + ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + }, + { + ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; + ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + }, + { + ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */; + ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + }, + { + ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; + ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + }, + { + ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; + ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + }, + { + ProductGroup = 4D2A85B31FBCE3AC0028537D /* Products */; + ProjectRef = DF1C50EBC11E46A3AF87F80A /* RCTImageResizer.xcodeproj */; + }, + { + ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; + ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + }, + { + ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; + ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + }, + { + ProductGroup = 4DDA31021FC88EEA00B5A80D /* Products */; + ProjectRef = 4DDA31011FC88EEA00B5A80D /* RCTPushNotification.xcodeproj */; + }, + { + ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; + ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + }, + { + ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; + ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + }, + { + ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; + ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; + }, + { + ProductGroup = 139FDEE71B06529A00C62182 /* Products */; + ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + }, + { + ProductGroup = 146834001AC3E56700842450 /* Products */; + ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; + }, + { + ProductGroup = 2DF8F1F323BA7F6900871C80 /* Products */; + ProjectRef = A3D344FFDE034BB3A6ABBD36 /* ReactNativeShareExtension.xcodeproj */; + }, + { + ProductGroup = 4D05893E22B4464B0072ECCC /* Products */; + ProjectRef = 4D05893D22B4464B0072ECCC /* RNCamera.xcodeproj */; + }, + { + ProductGroup = 4DC3B74B22B44EC300447A39 /* Products */; + ProjectRef = E839F3056BD643A7B4377288 /* RNCSlider.xcodeproj */; + }, + { + ProductGroup = 4D05890822B444490072ECCC /* Products */; + ProjectRef = DECA9B559982480BBD8F9E84 /* RNCWebView.xcodeproj */; + }, + { + ProductGroup = 4D2A85AD1FBCE3AC0028537D /* Products */; + ProjectRef = 02C42EA98156482DB00BF86D /* RNDocumentPicker.xcodeproj */; + }, + { + ProductGroup = 4D2A85AF1FBCE3AC0028537D /* Products */; + ProjectRef = B8C44254005A4B80AD5CA558 /* RNFetchBlob.xcodeproj */; + }, + { + ProductGroup = 4D8B71982163E8C500136BBC /* Products */; + ProjectRef = 59F5448FAF7345F8B568BD00 /* RNFileViewer.xcodeproj */; + }, + { + ProductGroup = 4D2A85B11FBCE3AC0028537D /* Products */; + ProjectRef = 9D8705D0D07C4A098FD912EB /* RNFS.xcodeproj */; + }, + { + ProductGroup = 4DA7F8091FC1DA9C00353191 /* Products */; + ProjectRef = A4716DB8654B431D894F89E1 /* RNImagePicker.xcodeproj */; + }, + { + ProductGroup = 2DF8F1F523BA7F6900871C80 /* Products */; + ProjectRef = 932E53ED42494ECB93F01D99 /* RNQuickAction.xcodeproj */; + }, + { + ProductGroup = 4D2A44E4200015A2001CA388 /* Products */; + ProjectRef = 252BD7B86BF7435B960DA901 /* RNSecureRandom.xcodeproj */; + }, + { + ProductGroup = 4D2A85B71FBCE3AC0028537D /* Products */; + ProjectRef = 711CBD21F0894B83A2D8E234 /* RNVectorIcons.xcodeproj */; + }, + { + ProductGroup = 065B3D422187B5E300002863 /* Products */; + ProjectRef = 065B3D412187B5E300002863 /* RNVersionInfo.xcodeproj */; + }, + { + ProductGroup = 4D2A85B51FBCE3AC0028537D /* Products */; + ProjectRef = CCDE9E9AF09B45F391B1C2AF /* SQLite.xcodeproj */; + }, + ); projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* Joplin */, @@ -205,6 +877,394 @@ }; /* End PBXProject section */ +/* Begin PBXReferenceProxy section */ + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTActionSheet.a; + remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTGeolocation.a; + remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTImage.a; + remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTNetwork.a; + remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTVibration.a; + remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 065B3D772187B5E300002863 /* libRNVersionInfo.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNVersionInfo.a; + remoteRef = 065B3D762187B5E300002863 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTSettings.a; + remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTWebSocket.a; + remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 146834041AC3E56700842450 /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF8F1F923BA7F6B00871C80 /* libReactNativeShareExtension.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReactNativeShareExtension.a; + remoteRef = 2DF8F1F823BA7F6B00871C80 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF8F1FC23BA7F6B00871C80 /* libRNQuickAction.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNQuickAction.a; + remoteRef = 2DF8F1FB23BA7F6B00871C80 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D0588F622B444490072ECCC /* libjsi.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsi.a; + remoteRef = 4D0588F522B444490072ECCC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D0588F822B444490072ECCC /* libjsiexecutor.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsiexecutor.a; + remoteRef = 4D0588F722B444490072ECCC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D0588FA22B444490072ECCC /* libjsi-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsi-tvOS.a"; + remoteRef = 4D0588F922B444490072ECCC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D0588FC22B444490072ECCC /* libjsiexecutor-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsiexecutor-tvOS.a"; + remoteRef = 4D0588FB22B444490072ECCC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D05890C22B444490072ECCC /* libRNCWebView.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNCWebView.a; + remoteRef = 4D05890B22B444490072ECCC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D05896A22B4464B0072ECCC /* libRNCamera.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNCamera.a; + remoteRef = 4D05896922B4464B0072ECCC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A44E8200015A2001CA388 /* libRNSecureRandom.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNSecureRandom.a; + remoteRef = 4D2A44E7200015A2001CA388 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A85AA1FBCE3AC0028537D /* libfishhook.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libfishhook.a; + remoteRef = 4D2A85A91FBCE3AC0028537D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A85BB1FBCE3AD0028537D /* libRCTImageResizer.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTImageResizer.a; + remoteRef = 4D2A85BA1FBCE3AD0028537D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A85BE1FBCE3AD0028537D /* libRNDocumentPicker.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNDocumentPicker.a; + remoteRef = 4D2A85BD1FBCE3AD0028537D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A85C11FBCE3AD0028537D /* libRNFetchBlob.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNFetchBlob.a; + remoteRef = 4D2A85C01FBCE3AD0028537D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A85C51FBCE3AD0028537D /* libRNFS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNFS.a; + remoteRef = 4D2A85C41FBCE3AD0028537D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A85C71FBCE3AD0028537D /* libRNFS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNFS.a; + remoteRef = 4D2A85C61FBCE3AD0028537D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A85CA1FBCE3AD0028537D /* libRNVectorIcons.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNVectorIcons.a; + remoteRef = 4D2A85C91FBCE3AD0028537D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2A85CD1FBCE3AD0028537D /* libSQLite.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libSQLite.a; + remoteRef = 4D2A85CC1FBCE3AD0028537D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF561FDA002000599716 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 4D2AFF551FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF5A1FDA002000599716 /* libRCTBlob-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTBlob-tvOS.a"; + remoteRef = 4D2AFF591FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF5F1FDA002000599716 /* libRCTImage-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTImage-tvOS.a"; + remoteRef = 4D2AFF5E1FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF641FDA002000599716 /* libRCTLinking-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTLinking-tvOS.a"; + remoteRef = 4D2AFF631FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF681FDA002000599716 /* libRCTNetwork-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTNetwork-tvOS.a"; + remoteRef = 4D2AFF671FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF6E1FDA002000599716 /* libRCTSettings-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTSettings-tvOS.a"; + remoteRef = 4D2AFF6D1FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF721FDA002000599716 /* libRCTText-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTText-tvOS.a"; + remoteRef = 4D2AFF711FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF791FDA002000599716 /* libRCTWebSocket-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTWebSocket-tvOS.a"; + remoteRef = 4D2AFF781FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF7B1FDA002000599716 /* libfishhook-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libfishhook-tvOS.a"; + remoteRef = 4D2AFF7A1FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF891FDA002000599716 /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 4D2AFF881FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF8B1FDA002000599716 /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 4D2AFF8A1FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF8D1FDA002000599716 /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 4D2AFF8C1FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF911FDA002000599716 /* libthird-party.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libthird-party.a"; + remoteRef = 4D2AFF901FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D2AFF931FDA002000599716 /* libdouble-conversion.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libdouble-conversion.a"; + remoteRef = 4D2AFF921FDA002000599716 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D3A19271FBDDA9400457703 /* libthird-party.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libthird-party.a"; + remoteRef = 4D3A19261FBDDA9400457703 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D3A192B1FBDDA9400457703 /* libdouble-conversion.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libdouble-conversion.a"; + remoteRef = 4D3A192A1FBDDA9400457703 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D7F8DA120A32BA0008B757D /* libjsinspector.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsinspector.a; + remoteRef = 4D7F8DA020A32BA0008B757D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D7F8DA320A32BA0008B757D /* libjsinspector-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsinspector-tvOS.a"; + remoteRef = 4D7F8DA220A32BA0008B757D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4D8B719C2163E8C500136BBC /* libRNFileViewer.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNFileViewer.a; + remoteRef = 4D8B719B2163E8C500136BBC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4DA7F80D1FC1DA9C00353191 /* libRNImagePicker.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNImagePicker.a; + remoteRef = 4DA7F80C1FC1DA9C00353191 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4DC3B74F22B44EC300447A39 /* libRNCSlider.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNCSlider.a; + remoteRef = 4DC3B74E22B44EC300447A39 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4DDA310F1FC88EEB00B5A80D /* libRCTPushNotification.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTPushNotification.a; + remoteRef = 4DDA310E1FC88EEB00B5A80D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 4DDA31111FC88EEB00B5A80D /* libRCTPushNotification-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTPushNotification-tvOS.a"; + remoteRef = 4DDA31101FC88EEB00B5A80D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTLinking.a; + remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTText.a; + remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTBlob.a; + remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + /* Begin PBXResourcesBuildPhase section */ 13B07F8E1A680F5B00A75B9A /* Resources */ = { isa = PBXResourcesBuildPhase; @@ -353,9 +1413,22 @@ "$(SRCROOT)..", ode_modules, "eact-native-file-viewerios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/@react-native-community/slider/ios", + "$(SRCROOT)/../node_modules/react-native-quick-actions/RNQuickAction/RNQuickAction", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", ); INFOPLIST_FILE = Joplin/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/Joplin\"", + "\"$(SRCROOT)/Joplin\"", + "\"$(SRCROOT)/Joplin\"", + ); + MARKETING_VERSION = 10.0.41; + INFOPLIST_FILE = Joplin/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 10.0.44; OTHER_LDFLAGS = ( @@ -389,9 +1462,22 @@ "$(SRCROOT)..\node_modules\neact-native-image-pickerios", "$(SRCROOT)..\node_modules\neact-native-securerandomios", "$(SRCROOT)..\node_modules\neact-native-file-viewerios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/@react-native-community/slider/ios", + "$(SRCROOT)/../node_modules/react-native-quick-actions/RNQuickAction/RNQuickAction", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", ); INFOPLIST_FILE = Joplin/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/Joplin\"", + "\"$(SRCROOT)/Joplin\"", + "\"$(SRCROOT)/Joplin\"", + ); + MARKETING_VERSION = 10.0.41; + INFOPLIST_FILE = Joplin/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 10.0.44; OTHER_LDFLAGS = ( diff --git a/ReactNativeClient/ios/Joplin/AppDelegate.m b/ReactNativeClient/ios/Joplin/AppDelegate.m index 8c7f61dd7..c48f78328 100644 --- a/ReactNativeClient/ios/Joplin/AppDelegate.m +++ b/ReactNativeClient/ios/Joplin/AppDelegate.m @@ -8,6 +8,7 @@ */ #import "AppDelegate.h" +#import "RNQuickActionManager.h" #import #import @@ -82,4 +83,8 @@ fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler #endif } +- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL succeeded)) completionHandler { + [RNQuickActionManager onQuickActionPress:shortcutItem completionHandler:completionHandler]; +} + @end diff --git a/ReactNativeClient/lib/components/screens/note.js b/ReactNativeClient/lib/components/screens/note.js index 06b713cf8..65d4e4ba1 100644 --- a/ReactNativeClient/lib/components/screens/note.js +++ b/ReactNativeClient/lib/components/screens/note.js @@ -131,7 +131,8 @@ class NoteScreenComponent extends BaseScreenComponent { if (item.type_ === BaseModel.TYPE_NOTE) { // Easier to just go back, then go to the note since - // the Note screen doesn't handle reloading a different note + // the Note screen doesn't handle reloading a different note. + // Similar to creating a new note via QuickActions. this.props.dispatch({ type: 'NAV_BACK', diff --git a/ReactNativeClient/main.js b/ReactNativeClient/main.js index d69b64255..7b1181f87 100644 --- a/ReactNativeClient/main.js +++ b/ReactNativeClient/main.js @@ -8,13 +8,11 @@ // console.disableYellowBox = true -import { YellowBox } from 'react-native'; +import {YellowBox, AppRegistry} from 'react-native'; YellowBox.ignoreWarnings([ 'Require cycle: node_modules/react-native-', 'Require cycle: node_modules/rn-fetch-blob', ]); - -const { AppRegistry } = require('react-native'); const { Root } = require('./root.js'); function main() { diff --git a/ReactNativeClient/package-lock.json b/ReactNativeClient/package-lock.json index 4087c19b9..13af3a89a 100644 --- a/ReactNativeClient/package-lock.json +++ b/ReactNativeClient/package-lock.json @@ -7441,6 +7441,11 @@ "version": "git+https://github.com/laurent22/react-native-push-notification.git#04d0746035d1fb058d8f52696121a0d5a29acbc4", "from": "git+https://github.com/laurent22/react-native-push-notification.git" }, + "react-native-quick-actions": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/react-native-quick-actions/-/react-native-quick-actions-0.3.13.tgz", + "integrity": "sha512-Vz13a0+NV0mzCh/29tNt0qDzWPh8i2srTQW8eCSzGFDArnVm1COTOhTD0FY0hWHlxRY0ahvX+BlezTDvsyAuMA==" + }, "react-native-securerandom": { "version": "1.0.0-rc.0", "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-1.0.0-rc.0.tgz", diff --git a/ReactNativeClient/package.json b/ReactNativeClient/package.json index 1f44d59f4..ed105587e 100644 --- a/ReactNativeClient/package.json +++ b/ReactNativeClient/package.json @@ -65,6 +65,8 @@ "react-native-popup-dialog": "^0.9.35", "react-native-popup-menu": "^0.10.0", "react-native-push-notification": "git+https://github.com/laurent22/react-native-push-notification.git", + "react-native-quick-actions": "^0.3.13", + "react-native-share-extension": "^1.2.1", "react-native-securerandom": "^1.0.0-rc.0", "react-native-side-menu": "^1.1.3", "react-native-sqlite-storage": "^4.1.0", diff --git a/ReactNativeClient/root.js b/ReactNativeClient/root.js index 27306c7cc..9e9d478f6 100644 --- a/ReactNativeClient/root.js +++ b/ReactNativeClient/root.js @@ -82,6 +82,7 @@ const EncryptionService = require('lib/services/EncryptionService'); const MigrationService = require('lib/services/MigrationService'); import PluginAssetsLoader from './PluginAssetsLoader'; +import setUpQuickActions from './QuickActions'; let storeDispatch = function() {}; @@ -215,9 +216,9 @@ const appReducer = (state = appDefaultState, action) => { const currentRoute = state.route; if (!historyGoingBack && historyCanGoBackTo(currentRoute, action)) { - // If the route *name* is the same (even if the other parameters are different), we - // overwrite the last route in the history with the current one. If the route name - // is different, we push a new history entry. + // If the route *name* is the same (even if the other parameters are different), we + // overwrite the last route in the history with the current one. If the route name + // is different, we push a new history entry. if (currentRoute.routeName == action.routeName) { // nothing } else { @@ -534,6 +535,8 @@ async function initialize(dispatch) { folderId: folder.id, }); } + + setUpQuickActions(dispatch, folderId); } catch (error) { alert(`Initialization error: ${error.message}`); reg.logger().error('Initialization error:', error); diff --git a/package-lock.json b/package-lock.json index 51d146131..86888fc9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -109,14 +109,12 @@ "@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "dev": true + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" }, "@types/react": { "version": "16.9.16", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.16.tgz", "integrity": "sha512-dQ3wlehuBbYlfvRXfF5G+5TbZF3xqgkikK7DWAsQXe2KnzV+kjD4W2ea+ThCrKASZn9h98bjjPzoTYzfRqyBkw==", - "dev": true, "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" @@ -131,6 +129,14 @@ "@types/react": "*" } }, + "@types/react-native": { + "version": "0.61.4", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.61.4.tgz", + "integrity": "sha512-RWU51dCIEjvgT0QuclgAha/P9fdAvnDzilhatx85LcTKTH2S3PSOUNZlbxwyZLMrqpCek5xsBOjSA5nOIFYq4A==", + "requires": { + "@types/react": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.10.0.tgz", @@ -593,8 +599,7 @@ "csstype": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz", - "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==", - "dev": true + "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==" }, "date-fns": { "version": "1.30.1", diff --git a/package.json b/package.json index 2a4cedf84..a5bbb1c5b 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,9 @@ "husky": "^3.0.2", "lint-staged": "^9.2.1", "typescript": "^3.7.3" + }, + "dependencies": { + "@types/react-native": "^0.61.4", + "joplin-renderer": "^1.0.6" } }