[
  {
    "path": ".buckconfig",
    "content": "\n[android]\n  target = Google Inc.:Google APIs:23\n\n[maven_repositories]\n  central = https://repo1.maven.org/maven2\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  root: true,\n  parser: \"@typescript-eslint/parser\",\n  plugins: [\"@typescript-eslint/eslint-plugin\"],\n  extends: [\"prettier\"],\n  rules: {\n    \"@typescript-eslint/no-unused-vars\": [\n      \"error\",\n      {\n        argsIgnorePattern: \"^_\",\n      },\n    ],\n    \"no-unused-vars\": \"off\",\n    \"no-shadow\": \"off\",\n    \"@typescript-eslint/no-shadow\": 1,\n    \"no-undef\": \"off\",\n  },\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\nios/.xcode.env.local\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\n*.hprof\n.cxx/\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n**/fastlane/report.xml\n**/fastlane/Preview.html\n**/fastlane/screenshots\n**/fastlane/test_output\n\n# Bundle artifact\n*.jsbundle\n\n# Ruby / CocoaPods\n/ios/Pods/\n/vendor/bundle/\n"
  },
  {
    "path": ".ruby-version",
    "content": "2.7.5\n"
  },
  {
    "path": ".watchmanconfig",
    "content": "{}"
  },
  {
    "path": "Gemfile",
    "content": "source 'https://rubygems.org'\n\n# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version\nruby '2.7.5'\n\ngem 'cocoapods', '~> 1.11', '>= 1.11.2'\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2022 Takuya Matsuyama\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# Gmail-like UI with React Native\n\nA UI mockup for the new version of [Inkdrop](https://www.inkdrop.app/) for mobile, inspired by Gmail for iOS and Android.\n\n## Features\n\n- Sticky header bar\n- Swipe-able list item\n- Bottom action sheet\n- Multiple theme support\n- Tablet screen support\n\nNote: Web is not supported\n\n![thumbnail](./doc/thumb1.jpg)\n\n![thumbnail](./doc/thumb2.jpg)\n\n![thumbnail](./doc/thumb3.jpg)\n\n## Video Tutorial\n\n- Part 1: [How to build Gmail-like UI with React Native](https://www.youtube.com/watch?v=w-M9UFHLAl0)\n- Part 2: [How to implement responsive three-column layout with React Native](https://www.youtube.com/watch?v=JU4VBbe23jg)\n\n## Stack\n\n- [TypeScript](https://www.typescriptlang.org/) - JavaScript with syntax for types\n- [React Native](https://reactnative.dev/) - ReactJS-based framework that can use native platform capabilities\n- [React Navigation(v6)](https://reactnavigation.org/) - Routing and navigation\n- [Restyle](https://github.com/Shopify/restyle) - A type-enforced system for building UI components\n- [React Native Reanimated](https://docs.swmansion.com/react-native-reanimated/) - Animations\n- [React Native SVG](https://github.com/react-native-svg/react-native-svg) - Displaying SVG images\n- [React Native Vector Icons](https://github.com/oblador/react-native-vector-icons) - Free Icons\n- [React Native Bottom Sheet](https://github.com/gorhom/react-native-bottom-sheet) - A performant interactive bottom sheet with fully configurable options\n- [jotai](https://jotai.org/) - Primitive and flexible state management for React\n- [React Native Three-Column Layout](https://github.com/craftzdog/react-native-three-column-layout) - A React component providing a three-column layout with animation support for tablet displays\n\n## Project structure\n\n```\n$PROJECT_ROOT\n├── index.js       # Entry point\n└── src\n    ├── navs.tsx   # Navigation components\n    ├── atoms      # Atomic components\n    ├── components # UI components\n    ├── screens    # Screen components\n    ├── hooks      # hooks\n    ├── states     # Jotai atoms\n    ├── fixtures   # sample data\n    └── images     # Image files\n```\n\n## How to dev\n\nThis project can be run from the Expo client app.\n\n```sh\nyarn\nyarn start\n```\n\nand in another terminal:\n\n```sh\nyarn run ios\n# or\nyarn run android\n```\n\n## License\n\nApache-2.0\n\n---\n\nLooking for a Markdown note-taking app? Check out my app called Inkdrop:\n\n[![Inkdrop](https://github.com/craftzdog/dotfiles-public/raw/master/images/inkdrop.png)](https://www.inkdrop.app/)\n"
  },
  {
    "path": "__tests__/App-test.tsx",
    "content": "/**\n * @format\n */\n\nimport 'react-native';\nimport React from 'react';\nimport App from '../App';\n\n// Note: test renderer must be required after react-native.\nimport renderer from 'react-test-renderer';\n\nit('renders correctly', () => {\n  renderer.create(<App />);\n});\n"
  },
  {
    "path": "android/app/_BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nload(\":build_defs.bzl\", \"create_aar_targets\", \"create_jar_targets\")\n\nlib_deps = []\n\ncreate_aar_targets(glob([\"libs/*.aar\"]))\n\ncreate_jar_targets(glob([\"libs/*.jar\"]))\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.rnmail\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.rnmail\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\n\nimport com.android.build.OutputFile\nimport org.apache.tools.ant.taskdefs.condition.Os\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\napply from: \"../../node_modules/react-native/react.gradle\"\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and that value will be read here. If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\n/**\n * Architectures to build native code for.\n */\ndef reactNativeArchitectures() {\n    def value = project.getProperties().get(\"reactNativeArchitectures\")\n    return value ? value.split(\",\") : [\"armeabi-v7a\", \"x86\", \"x86_64\", \"arm64-v8a\"]\n}\n\nandroid {\n    ndkVersion rootProject.ext.ndkVersion\n\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    defaultConfig {\n        applicationId \"com.rnmail\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n        buildConfigField \"boolean\", \"IS_NEW_ARCHITECTURE_ENABLED\", isNewArchitectureEnabled().toString()\n\n        if (isNewArchitectureEnabled()) {\n            // We configure the NDK build only if you decide to opt-in for the New Architecture.\n            externalNativeBuild {\n                ndkBuild {\n                    arguments \"APP_PLATFORM=android-21\",\n                        \"APP_STL=c++_shared\",\n                        \"NDK_TOOLCHAIN_VERSION=clang\",\n                        \"GENERATED_SRC_DIR=$buildDir/generated/source\",\n                        \"PROJECT_BUILD_DIR=$buildDir\",\n                        \"REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid\",\n                        \"REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build\"\n                    cFlags \"-Wall\", \"-Werror\", \"-fexceptions\", \"-frtti\", \"-DWITH_INSPECTOR=1\"\n                    cppFlags \"-std=c++17\"\n                    // Make sure this target name is the same you specify inside the\n                    // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.\n                    targets \"rnmail_appmodules\"\n\n                    // Fix for windows limit on number of character in file paths and in command lines\n                    if (Os.isFamily(Os.FAMILY_WINDOWS)) {\n                        arguments \"NDK_APP_SHORT_COMMANDS=true\"\n                    }\n                }\n            }\n            if (!enableSeparateBuildPerCPUArchitecture) {\n                ndk {\n                    abiFilters (*reactNativeArchitectures())\n                }\n            }\n        }\n    }\n\n    if (isNewArchitectureEnabled()) {\n        // We configure the NDK build only if you decide to opt-in for the New Architecture.\n        externalNativeBuild {\n            ndkBuild {\n                path \"$projectDir/src/main/jni/Android.mk\"\n            }\n        }\n        def reactAndroidProjectDir = project(':ReactAndroid').projectDir\n        def packageReactNdkDebugLibs = tasks.register(\"packageReactNdkDebugLibs\", Copy) {\n            dependsOn(\":ReactAndroid:packageReactNdkDebugLibsForBuck\")\n            from(\"$reactAndroidProjectDir/src/main/jni/prebuilt/lib\")\n            into(\"$buildDir/react-ndk/exported\")\n        }\n        def packageReactNdkReleaseLibs = tasks.register(\"packageReactNdkReleaseLibs\", Copy) {\n            dependsOn(\":ReactAndroid:packageReactNdkReleaseLibsForBuck\")\n            from(\"$reactAndroidProjectDir/src/main/jni/prebuilt/lib\")\n            into(\"$buildDir/react-ndk/exported\")\n        }\n        afterEvaluate {\n            // If you wish to add a custom TurboModule or component locally,\n            // you should uncomment this line.\n            // preBuild.dependsOn(\"generateCodegenArtifactsFromSchema\")\n            preDebugBuild.dependsOn(packageReactNdkDebugLibs)\n            preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)\n\n            // Due to a bug inside AGP, we have to explicitly set a dependency\n            // between configureNdkBuild* tasks and the preBuild tasks.\n            // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732\n            configureNdkBuildRelease.dependsOn(preReleaseBuild)\n            configureNdkBuildDebug.dependsOn(preDebugBuild)\n            reactNativeArchitectures().each { architecture ->\n                tasks.findByName(\"configureNdkBuildDebug[${architecture}]\")?.configure {\n                    dependsOn(\"preDebugBuild\")\n                }\n                tasks.findByName(\"configureNdkBuildRelease[${architecture}]\")?.configure {\n                    dependsOn(\"preReleaseBuild\")\n                }\n            }\n        }\n    }\n\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include (*reactNativeArchitectures())\n        }\n    }\n    signingConfigs {\n        debug {\n            storeFile file('debug.keystore')\n            storePassword 'android'\n            keyAlias 'androiddebugkey'\n            keyPassword 'android'\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.debug\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://reactnative.dev/docs/signed-apk-android.\n            signingConfig signingConfigs.debug\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.fbjni'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.flipper'\n        exclude group:'com.squareup.okhttp3', module:'okhttp'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.flipper'\n    }\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\nif (isNewArchitectureEnabled()) {\n    // If new architecture is enabled, we let you build RN from source\n    // Otherwise we fallback to a prebuilt .aar bundled in the NPM package.\n    // This will be applied to all the imported transtitive dependency.\n    configurations.all {\n        resolutionStrategy.dependencySubstitution {\n            substitute(module(\"com.facebook.react:react-native\"))\n                    .using(project(\":ReactAndroid\")).because(\"On New Architecture we're building React Native from source\")\n        }\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n\ndef isNewArchitectureEnabled() {\n    // To opt-in for the New Architecture, you can either:\n    // - Set `newArchEnabled` to true inside the `gradle.properties` file\n    // - Invoke gradle with `-newArchEnabled=true`\n    // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`\n    return project.hasProperty(\"newArchEnabled\") && project.newArchEnabled == \"true\"\n}\n\nproject.ext.vectoricons = [\n  iconFontNames: ['Feather.ttf']\n]\n\napply from: '../../node_modules/react-native-vector-icons/fonts.gradle'\n"
  },
  {
    "path": "android/app/build_defs.bzl",
    "content": "\"\"\"Helper definitions to glob .aar and .jar targets\"\"\"\n\ndef create_aar_targets(aarfiles):\n    for aarfile in aarfiles:\n        name = \"aars__\" + aarfile[aarfile.rindex(\"/\") + 1:aarfile.rindex(\".aar\")]\n        lib_deps.append(\":\" + name)\n        android_prebuilt_aar(\n            name = name,\n            aar = aarfile,\n        )\n\ndef create_jar_targets(jarfiles):\n    for jarfile in jarfiles:\n        name = \"jars__\" + jarfile[jarfile.rindex(\"/\") + 1:jarfile.rindex(\".jar\")]\n        lib_deps.append(\":\" + name)\n        prebuilt_jar(\n            name = name,\n            binary_jar = jarfile,\n        )\n"
  },
  {
    "path": "android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n"
  },
  {
    "path": "android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n\n    <application\n        android:usesCleartextTraffic=\"true\"\n        tools:targetApi=\"28\"\n        tools:ignore=\"GoogleAppIndexingWarning\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" android:exported=\"false\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "android/app/src/debug/java/com/rnmail/ReactNativeFlipper.java",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * <p>This source code is licensed under the MIT license found in the LICENSE file in the root\n * directory of this source tree.\n */\npackage com.rnmail;\n\nimport android.content.Context;\nimport com.facebook.flipper.android.AndroidFlipperClient;\nimport com.facebook.flipper.android.utils.FlipperUtils;\nimport com.facebook.flipper.core.FlipperClient;\nimport com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;\nimport com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;\nimport com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;\nimport com.facebook.flipper.plugins.inspector.DescriptorMapping;\nimport com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;\nimport com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;\nimport com.facebook.flipper.plugins.network.NetworkFlipperPlugin;\nimport com.facebook.flipper.plugins.react.ReactFlipperPlugin;\nimport com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;\nimport com.facebook.react.ReactInstanceEventListener;\nimport com.facebook.react.ReactInstanceManager;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.modules.network.NetworkingModule;\nimport okhttp3.OkHttpClient;\n\npublic class ReactNativeFlipper {\n  public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {\n    if (FlipperUtils.shouldEnableFlipper(context)) {\n      final FlipperClient client = AndroidFlipperClient.getInstance(context);\n\n      client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));\n      client.addPlugin(new ReactFlipperPlugin());\n      client.addPlugin(new DatabasesFlipperPlugin(context));\n      client.addPlugin(new SharedPreferencesFlipperPlugin(context));\n      client.addPlugin(CrashReporterPlugin.getInstance());\n\n      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();\n      NetworkingModule.setCustomClientBuilder(\n          new NetworkingModule.CustomClientBuilder() {\n            @Override\n            public void apply(OkHttpClient.Builder builder) {\n              builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));\n            }\n          });\n      client.addPlugin(networkFlipperPlugin);\n      client.start();\n\n      // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized\n      // Hence we run if after all native modules have been initialized\n      ReactContext reactContext = reactInstanceManager.getCurrentReactContext();\n      if (reactContext == null) {\n        reactInstanceManager.addReactInstanceEventListener(\n            new ReactInstanceEventListener() {\n              @Override\n              public void onReactContextInitialized(ReactContext reactContext) {\n                reactInstanceManager.removeReactInstanceEventListener(this);\n                reactContext.runOnNativeModulesQueueThread(\n                    new Runnable() {\n                      @Override\n                      public void run() {\n                        client.addPlugin(new FrescoFlipperPlugin());\n                      }\n                    });\n              }\n            });\n      } else {\n        client.addPlugin(new FrescoFlipperPlugin());\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.rnmail\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n      android:name=\".MainApplication\"\n      android:label=\"@string/app_name\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\".MainActivity\"\n        android:label=\"@string/app_name\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:windowSoftInputMode=\"adjustResize\"\n        android:exported=\"true\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n    </application>\n</manifest>\n"
  },
  {
    "path": "android/app/src/main/java/com/rnmail/MainActivity.java",
    "content": "package com.rnmail;\n\nimport android.os.Bundle;\nimport com.facebook.react.ReactActivity;\nimport com.facebook.react.ReactActivityDelegate;\nimport com.facebook.react.ReactRootView;\n\npublic class MainActivity extends ReactActivity {\n  @Override\n  protected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(null);\n  }\n\n  /**\n   * Returns the name of the main component registered from JavaScript. This is used to schedule\n   * rendering of the component.\n   */\n  @Override\n  protected String getMainComponentName() {\n    return \"RNMail\";\n  }\n\n  /**\n   * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and\n   *\n   * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer\n   * (Paper).\n   */\n  @Override\n  protected ReactActivityDelegate createReactActivityDelegate() {\n    return new MainActivityDelegate(this, getMainComponentName());\n  }\n\n  public static class MainActivityDelegate extends ReactActivityDelegate {\n    public MainActivityDelegate(ReactActivity activity, String mainComponentName) {\n      super(activity, mainComponentName);\n    }\n\n    @Override\n    protected ReactRootView createRootView() {\n      ReactRootView reactRootView = new ReactRootView(getContext());\n      // If you opted-in for the New Architecture, we enable the Fabric Renderer.\n      reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED);\n      return reactRootView;\n    }\n    @Override\n    protected boolean isConcurrentRootEnabled() {\n    // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18).\n    // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html\n    return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;\n    }\n  }\n}\n"
  },
  {
    "path": "android/app/src/main/java/com/rnmail/MainApplication.java",
    "content": "package com.rnmail;\n\nimport android.app.Application;\nimport android.content.Context;\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactInstanceManager;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.config.ReactFeatureFlags;\nimport com.facebook.soloader.SoLoader;\nimport com.rnmail.newarchitecture.MainApplicationReactNativeHost;\nimport java.lang.reflect.InvocationTargetException;\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n  private final ReactNativeHost mReactNativeHost =\n      new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n          return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n          @SuppressWarnings(\"UnnecessaryLocalVariable\")\n          List<ReactPackage> packages = new PackageList(this).getPackages();\n          // Packages that cannot be autolinked yet can be added manually here, for example:\n          // packages.add(new MyReactNativePackage());\n          return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n          return \"index\";\n        }\n      };\n\n  private final ReactNativeHost mNewArchitectureNativeHost =\n      new MainApplicationReactNativeHost(this);\n\n  @Override\n  public ReactNativeHost getReactNativeHost() {\n    if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {\n      return mNewArchitectureNativeHost;\n    } else {\n      return mReactNativeHost;\n    }\n  }\n\n  @Override\n  public void onCreate() {\n    super.onCreate();\n    // If you opted-in for the New Architecture, we enable the TurboModule system\n    ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;\n    SoLoader.init(this, /* native exopackage */ false);\n    initializeFlipper(this, getReactNativeHost().getReactInstanceManager());\n  }\n\n  /**\n   * Loads Flipper in React Native templates. Call this in the onCreate method with something like\n   * initializeFlipper(this, getReactNativeHost().getReactInstanceManager());\n   *\n   * @param context\n   * @param reactInstanceManager\n   */\n  private static void initializeFlipper(\n      Context context, ReactInstanceManager reactInstanceManager) {\n    if (BuildConfig.DEBUG) {\n      try {\n        /*\n         We use reflection here to pick up the class that initializes Flipper,\n        since Flipper library is not available in release mode\n        */\n        Class<?> aClass = Class.forName(\"com.rnmail.ReactNativeFlipper\");\n        aClass\n            .getMethod(\"initializeFlipper\", Context.class, ReactInstanceManager.class)\n            .invoke(null, context, reactInstanceManager);\n      } catch (ClassNotFoundException e) {\n        e.printStackTrace();\n      } catch (NoSuchMethodException e) {\n        e.printStackTrace();\n      } catch (IllegalAccessException e) {\n        e.printStackTrace();\n      } catch (InvocationTargetException e) {\n        e.printStackTrace();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "android/app/src/main/java/com/rnmail/newarchitecture/MainApplicationReactNativeHost.java",
    "content": "package com.rnmail.newarchitecture;\n\nimport android.app.Application;\nimport androidx.annotation.NonNull;\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactInstanceManager;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.ReactPackageTurboModuleManagerDelegate;\nimport com.facebook.react.bridge.JSIModulePackage;\nimport com.facebook.react.bridge.JSIModuleProvider;\nimport com.facebook.react.bridge.JSIModuleSpec;\nimport com.facebook.react.bridge.JSIModuleType;\nimport com.facebook.react.bridge.JavaScriptContextHolder;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.UIManager;\nimport com.facebook.react.fabric.ComponentFactory;\nimport com.facebook.react.fabric.CoreComponentsRegistry;\nimport com.facebook.react.fabric.FabricJSIModuleProvider;\nimport com.facebook.react.fabric.ReactNativeConfig;\nimport com.facebook.react.uimanager.ViewManagerRegistry;\nimport com.rnmail.BuildConfig;\nimport com.rnmail.newarchitecture.components.MainComponentsRegistry;\nimport com.rnmail.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate;\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both\n * TurboModule delegates and the Fabric Renderer.\n *\n * <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the\n * `newArchEnabled` property). Is ignored otherwise.\n */\npublic class MainApplicationReactNativeHost extends ReactNativeHost {\n  public MainApplicationReactNativeHost(Application application) {\n    super(application);\n  }\n\n  @Override\n  public boolean getUseDeveloperSupport() {\n    return BuildConfig.DEBUG;\n  }\n\n  @Override\n  protected List<ReactPackage> getPackages() {\n    List<ReactPackage> packages = new PackageList(this).getPackages();\n    // Packages that cannot be autolinked yet can be added manually here, for example:\n    //     packages.add(new MyReactNativePackage());\n    // TurboModules must also be loaded here providing a valid TurboReactPackage implementation:\n    //     packages.add(new TurboReactPackage() { ... });\n    // If you have custom Fabric Components, their ViewManagers should also be loaded here\n    // inside a ReactPackage.\n    return packages;\n  }\n\n  @Override\n  protected String getJSMainModuleName() {\n    return \"index\";\n  }\n\n  @NonNull\n  @Override\n  protected ReactPackageTurboModuleManagerDelegate.Builder\n      getReactPackageTurboModuleManagerDelegateBuilder() {\n    // Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary\n    // for the new architecture and to use TurboModules correctly.\n    return new MainApplicationTurboModuleManagerDelegate.Builder();\n  }\n\n  @Override\n  protected JSIModulePackage getJSIModulePackage() {\n    return new JSIModulePackage() {\n      @Override\n      public List<JSIModuleSpec> getJSIModules(\n          final ReactApplicationContext reactApplicationContext,\n          final JavaScriptContextHolder jsContext) {\n        final List<JSIModuleSpec> specs = new ArrayList<>();\n\n        // Here we provide a new JSIModuleSpec that will be responsible of providing the\n        // custom Fabric Components.\n        specs.add(\n            new JSIModuleSpec() {\n              @Override\n              public JSIModuleType getJSIModuleType() {\n                return JSIModuleType.UIManager;\n              }\n\n              @Override\n              public JSIModuleProvider<UIManager> getJSIModuleProvider() {\n                final ComponentFactory componentFactory = new ComponentFactory();\n                CoreComponentsRegistry.register(componentFactory);\n\n                // Here we register a Components Registry.\n                // The one that is generated with the template contains no components\n                // and just provides you the one from React Native core.\n                MainComponentsRegistry.register(componentFactory);\n\n                final ReactInstanceManager reactInstanceManager = getReactInstanceManager();\n\n                ViewManagerRegistry viewManagerRegistry =\n                    new ViewManagerRegistry(\n                        reactInstanceManager.getOrCreateViewManagers(reactApplicationContext));\n\n                return new FabricJSIModuleProvider(\n                    reactApplicationContext,\n                    componentFactory,\n                    ReactNativeConfig.DEFAULT_CONFIG,\n                    viewManagerRegistry);\n              }\n            });\n        return specs;\n      }\n    };\n  }\n}\n"
  },
  {
    "path": "android/app/src/main/java/com/rnmail/newarchitecture/components/MainComponentsRegistry.java",
    "content": "package com.rnmail.newarchitecture.components;\n\nimport com.facebook.jni.HybridData;\nimport com.facebook.proguard.annotations.DoNotStrip;\nimport com.facebook.react.fabric.ComponentFactory;\nimport com.facebook.soloader.SoLoader;\n\n/**\n * Class responsible to load the custom Fabric Components. This class has native methods and needs a\n * corresponding C++ implementation/header file to work correctly (already placed inside the jni/\n * folder for you).\n *\n * <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the\n * `newArchEnabled` property). Is ignored otherwise.\n */\n@DoNotStrip\npublic class MainComponentsRegistry {\n  static {\n    SoLoader.loadLibrary(\"fabricjni\");\n  }\n\n  @DoNotStrip private final HybridData mHybridData;\n\n  @DoNotStrip\n  private native HybridData initHybrid(ComponentFactory componentFactory);\n\n  @DoNotStrip\n  private MainComponentsRegistry(ComponentFactory componentFactory) {\n    mHybridData = initHybrid(componentFactory);\n  }\n\n  @DoNotStrip\n  public static MainComponentsRegistry register(ComponentFactory componentFactory) {\n    return new MainComponentsRegistry(componentFactory);\n  }\n}\n"
  },
  {
    "path": "android/app/src/main/java/com/rnmail/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java",
    "content": "package com.rnmail.newarchitecture.modules;\n\nimport com.facebook.jni.HybridData;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.ReactPackageTurboModuleManagerDelegate;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.soloader.SoLoader;\nimport java.util.List;\n\n/**\n * Class responsible to load the TurboModules. This class has native methods and needs a\n * corresponding C++ implementation/header file to work correctly (already placed inside the jni/\n * folder for you).\n *\n * <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the\n * `newArchEnabled` property). Is ignored otherwise.\n */\npublic class MainApplicationTurboModuleManagerDelegate\n    extends ReactPackageTurboModuleManagerDelegate {\n\n  private static volatile boolean sIsSoLibraryLoaded;\n\n  protected MainApplicationTurboModuleManagerDelegate(\n      ReactApplicationContext reactApplicationContext, List<ReactPackage> packages) {\n    super(reactApplicationContext, packages);\n  }\n\n  protected native HybridData initHybrid();\n\n  native boolean canCreateTurboModule(String moduleName);\n\n  public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder {\n    protected MainApplicationTurboModuleManagerDelegate build(\n        ReactApplicationContext context, List<ReactPackage> packages) {\n      return new MainApplicationTurboModuleManagerDelegate(context, packages);\n    }\n  }\n\n  @Override\n  protected synchronized void maybeLoadOtherSoLibraries() {\n    if (!sIsSoLibraryLoaded) {\n      // If you change the name of your application .so file in the Android.mk file,\n      // make sure you update the name here as well.\n      SoLoader.loadLibrary(\"rnmail_appmodules\");\n      sIsSoLibraryLoaded = true;\n    }\n  }\n}\n"
  },
  {
    "path": "android/app/src/main/jni/Android.mk",
    "content": "THIS_DIR := $(call my-dir)\n\ninclude $(REACT_ANDROID_DIR)/Android-prebuilt.mk\n\n# If you wish to add a custom TurboModule or Fabric component in your app you\n# will have to include the following autogenerated makefile.\n# include $(GENERATED_SRC_DIR)/codegen/jni/Android.mk\ninclude $(CLEAR_VARS)\n\nLOCAL_PATH := $(THIS_DIR)\n\n# You can customize the name of your application .so file here.\nLOCAL_MODULE := rnmail_appmodules\n\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\n\n# If you wish to add a custom TurboModule or Fabric component in your app you\n# will have to uncomment those lines to include the generated source \n# files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni)\n#\n# LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni\n# LOCAL_SRC_FILES += $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp)\n# LOCAL_EXPORT_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni\n\n# Here you should add any native library you wish to depend on.\nLOCAL_SHARED_LIBRARIES := \\\n  libfabricjni \\\n  libfbjni \\\n  libfolly_futures \\\n  libfolly_json \\\n  libglog \\\n  libjsi \\\n  libreact_codegen_rncore \\\n  libreact_debug \\\n  libreact_nativemodule_core \\\n  libreact_render_componentregistry \\\n  libreact_render_core \\\n  libreact_render_debug \\\n  libreact_render_graphics \\\n  librrc_view \\\n  libruntimeexecutor \\\n  libturbomodulejsijni \\\n  libyoga\n\nLOCAL_CFLAGS := -DLOG_TAG=\\\"ReactNative\\\" -fexceptions -frtti -std=c++17 -Wall\n\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "android/app/src/main/jni/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.13)\n# Define the library name here.\nproject(rndiffapp_appmodules)\n# This file includes all the necessary to let you build your application with the New Architecture.\ninclude(${REACT_ANDROID_DIR}/cmake-utils/ReactNative-application.cmake)\n"
  },
  {
    "path": "android/app/src/main/jni/MainApplicationModuleProvider.cpp",
    "content": "#include \"MainApplicationModuleProvider.h\"\n\n#include <rncli.h>\n#include <rncore.h>\n\nnamespace facebook {\nnamespace react {\n\nstd::shared_ptr<TurboModule> MainApplicationModuleProvider(\n    const std::string &moduleName,\n    const JavaTurboModule::InitParams &params) {\n  // Here you can provide your own module provider for TurboModules coming from\n  // either your application or from external libraries. The approach to follow\n  // is similar to the following (for a library called `samplelibrary`:\n  //\n  // auto module = samplelibrary_ModuleProvider(moduleName, params);\n  // if (module != nullptr) {\n  //    return module;\n  // }\n  // return rncore_ModuleProvider(moduleName, params);\n\n  // Module providers autolinked by RN CLI\n  auto rncli_module = rncli_ModuleProvider(moduleName, params);\n  if (rncli_module != nullptr) {\n    return rncli_module;\n  }\n\n  return rncore_ModuleProvider(moduleName, params);\n}\n\n} // namespace react\n} // namespace facebook\n"
  },
  {
    "path": "android/app/src/main/jni/MainApplicationModuleProvider.h",
    "content": "#pragma once\n\n#include <memory>\n#include <string>\n\n#include <ReactCommon/JavaTurboModule.h>\n\nnamespace facebook {\nnamespace react {\n\nstd::shared_ptr<TurboModule> MainApplicationModuleProvider(\n    const std::string &moduleName,\n    const JavaTurboModule::InitParams &params);\n\n} // namespace react\n} // namespace facebook\n"
  },
  {
    "path": "android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp",
    "content": "#include \"MainApplicationTurboModuleManagerDelegate.h\"\n#include \"MainApplicationModuleProvider.h\"\n\nnamespace facebook {\nnamespace react {\n\njni::local_ref<MainApplicationTurboModuleManagerDelegate::jhybriddata>\nMainApplicationTurboModuleManagerDelegate::initHybrid(\n    jni::alias_ref<jhybridobject>) {\n  return makeCxxInstance();\n}\n\nvoid MainApplicationTurboModuleManagerDelegate::registerNatives() {\n  registerHybrid({\n      makeNativeMethod(\n          \"initHybrid\", MainApplicationTurboModuleManagerDelegate::initHybrid),\n      makeNativeMethod(\n          \"canCreateTurboModule\",\n          MainApplicationTurboModuleManagerDelegate::canCreateTurboModule),\n  });\n}\n\nstd::shared_ptr<TurboModule>\nMainApplicationTurboModuleManagerDelegate::getTurboModule(\n    const std::string &name,\n    const std::shared_ptr<CallInvoker> jsInvoker) {\n  // Not implemented yet: provide pure-C++ NativeModules here.\n  return nullptr;\n}\n\nstd::shared_ptr<TurboModule>\nMainApplicationTurboModuleManagerDelegate::getTurboModule(\n    const std::string &name,\n    const JavaTurboModule::InitParams &params) {\n  return MainApplicationModuleProvider(name, params);\n}\n\nbool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule(\n    const std::string &name) {\n  return getTurboModule(name, nullptr) != nullptr ||\n      getTurboModule(name, {.moduleName = name}) != nullptr;\n}\n\n} // namespace react\n} // namespace facebook\n"
  },
  {
    "path": "android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h",
    "content": "#include <memory>\n#include <string>\n\n#include <ReactCommon/TurboModuleManagerDelegate.h>\n#include <fbjni/fbjni.h>\n\nnamespace facebook {\nnamespace react {\n\nclass MainApplicationTurboModuleManagerDelegate\n    : public jni::HybridClass<\n          MainApplicationTurboModuleManagerDelegate,\n          TurboModuleManagerDelegate> {\n public:\n  // Adapt it to the package you used for your Java class.\n  static constexpr auto kJavaDescriptor =\n      \"Lcom/rnmail/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;\";\n\n  static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);\n\n  static void registerNatives();\n\n  std::shared_ptr<TurboModule> getTurboModule(\n      const std::string &name,\n      const std::shared_ptr<CallInvoker> jsInvoker) override;\n  std::shared_ptr<TurboModule> getTurboModule(\n      const std::string &name,\n      const JavaTurboModule::InitParams &params) override;\n\n  /**\n   * Test-only method. Allows user to verify whether a TurboModule can be\n   * created by instances of this class.\n   */\n  bool canCreateTurboModule(const std::string &name);\n};\n\n} // namespace react\n} // namespace facebook\n"
  },
  {
    "path": "android/app/src/main/jni/MainComponentsRegistry.cpp",
    "content": "#include \"MainComponentsRegistry.h\"\n\n#include <CoreComponentsRegistry.h>\n#include <fbjni/fbjni.h>\n#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>\n#include <react/renderer/components/rncore/ComponentDescriptors.h>\n#include <rncli.h>\n\nnamespace facebook {\nnamespace react {\n\nMainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}\n\nstd::shared_ptr<ComponentDescriptorProviderRegistry const>\nMainComponentsRegistry::sharedProviderRegistry() {\n  auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();\n\n  // Autolinked providers registered by RN CLI\n  rncli_registerProviders(providerRegistry);\n\n  // Custom Fabric Components go here. You can register custom\n  // components coming from your App or from 3rd party libraries here.\n  //\n  // providerRegistry->add(concreteComponentDescriptorProvider<\n  //        AocViewerComponentDescriptor>());\n  return providerRegistry;\n}\n\njni::local_ref<MainComponentsRegistry::jhybriddata>\nMainComponentsRegistry::initHybrid(\n    jni::alias_ref<jclass>,\n    ComponentFactory *delegate) {\n  auto instance = makeCxxInstance(delegate);\n\n  auto buildRegistryFunction =\n      [](EventDispatcher::Weak const &eventDispatcher,\n         ContextContainer::Shared const &contextContainer)\n      -> ComponentDescriptorRegistry::Shared {\n    auto registry = MainComponentsRegistry::sharedProviderRegistry()\n                        ->createComponentDescriptorRegistry(\n                            {eventDispatcher, contextContainer});\n\n    auto mutableRegistry =\n        std::const_pointer_cast<ComponentDescriptorRegistry>(registry);\n\n    mutableRegistry->setFallbackComponentDescriptor(\n        std::make_shared<UnimplementedNativeViewComponentDescriptor>(\n            ComponentDescriptorParameters{\n                eventDispatcher, contextContainer, nullptr}));\n\n    return registry;\n  };\n\n  delegate->buildRegistryFunction = buildRegistryFunction;\n  return instance;\n}\n\nvoid MainComponentsRegistry::registerNatives() {\n  registerHybrid({\n      makeNativeMethod(\"initHybrid\", MainComponentsRegistry::initHybrid),\n  });\n}\n\n} // namespace react\n} // namespace facebook\n"
  },
  {
    "path": "android/app/src/main/jni/MainComponentsRegistry.h",
    "content": "#pragma once\n\n#include <ComponentFactory.h>\n#include <fbjni/fbjni.h>\n#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>\n#include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>\n\nnamespace facebook {\nnamespace react {\n\nclass MainComponentsRegistry\n    : public facebook::jni::HybridClass<MainComponentsRegistry> {\n public:\n  // Adapt it to the package you used for your Java class.\n  constexpr static auto kJavaDescriptor =\n      \"Lcom/rnmail/newarchitecture/components/MainComponentsRegistry;\";\n\n  static void registerNatives();\n\n  MainComponentsRegistry(ComponentFactory *delegate);\n\n private:\n  static std::shared_ptr<ComponentDescriptorProviderRegistry const>\n  sharedProviderRegistry();\n\n  static jni::local_ref<jhybriddata> initHybrid(\n      jni::alias_ref<jclass>,\n      ComponentFactory *delegate);\n};\n\n} // namespace react\n} // namespace facebook\n"
  },
  {
    "path": "android/app/src/main/jni/OnLoad.cpp",
    "content": "#include <fbjni/fbjni.h>\n#include \"MainApplicationTurboModuleManagerDelegate.h\"\n#include \"MainComponentsRegistry.h\"\n\nJNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {\n  return facebook::jni::initialize(vm, [] {\n    facebook::react::MainApplicationTurboModuleManagerDelegate::\n        registerNatives();\n    facebook::react::MainComponentsRegistry::registerNatives();\n  });\n}\n"
  },
  {
    "path": "android/app/src/main/res/drawable/rn_edit_text_material.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Copyright (C) 2014 The Android Open Source Project\n\n     Licensed under the Apache License, Version 2.0 (the \"License\");\n     you may not use this file except in compliance with the License.\n     You may obtain a copy of the License at\n\n          http://www.apache.org/licenses/LICENSE-2.0\n\n     Unless required by applicable law or agreed to in writing, software\n     distributed under the License is distributed on an \"AS IS\" BASIS,\n     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     See the License for the specific language governing permissions and\n     limitations under the License.\n-->\n<inset xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:insetLeft=\"@dimen/abc_edit_text_inset_horizontal_material\"\n       android:insetRight=\"@dimen/abc_edit_text_inset_horizontal_material\"\n       android:insetTop=\"@dimen/abc_edit_text_inset_top_material\"\n       android:insetBottom=\"@dimen/abc_edit_text_inset_bottom_material\">\n\n    <selector>\n        <!-- \n          This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).\n          The item below with state_pressed=\"false\" and state_focused=\"false\" causes a NullPointerException.\n          NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'\n\n          <item android:state_pressed=\"false\" android:state_focused=\"false\" android:drawable=\"@drawable/abc_textfield_default_mtrl_alpha\"/>\n\n          For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.\n        -->\n        <item android:state_enabled=\"false\" android:drawable=\"@drawable/abc_textfield_default_mtrl_alpha\"/>\n        <item android:drawable=\"@drawable/abc_textfield_activated_mtrl_alpha\"/>\n    </selector>\n\n</inset>\n"
  },
  {
    "path": "android/app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">RNMail</string>\n</resources>\n"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.DayNight.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:editTextBackground\">@drawable/rn_edit_text_material</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "android/build.gradle",
    "content": "import org.apache.tools.ant.taskdefs.condition.Os\n\n// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 31\n        targetSdkVersion = 31\n\n        if (System.properties['os.arch'] == \"aarch64\") {\n            // For M1 Users we need to use the NDK 24 which added support for aarch64\n            ndkVersion = \"24.0.8215888\"\n        } else {\n            // Otherwise we default to the side-by-side NDK version from AGP.\n            ndkVersion = \"21.4.7075529\"\n        }\n    }\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:7.2.1\")\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        classpath(\"de.undercouch:gradle-download-task:5.0.1\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        maven {\n            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n            url(\"$rootDir/../node_modules/react-native/android\")\n        }\n        maven {\n            // Android JSC is installed from npm\n            url(\"$rootDir/../node_modules/jsc-android/dist\")\n        }\n        mavenCentral {\n            // We don't want to fetch react-native from Maven Central as there are\n            // older versions over there.\n            content {\n                excludeGroup \"com.facebook.react\"\n            }\n        }\n        google()\n        maven { url 'https://www.jitpack.io' }\n    }\n}\n"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5.1-all.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.125.0\n\n# Use this property to specify which architecture you want to build.\n# You can also override it from the CLI using\n# ./gradlew <task> -PreactNativeArchitectures=x86_64\nreactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n\n# Use this property to enable support to the new architecture.\n# This will allow you to use TurboModules and the Fabric render in\n# your application. You should enable this flag either if you want\n# to write custom TurboModules/Fabric components OR use libraries that\n# are providing them.\nnewArchEnabled=false\n"
  },
  {
    "path": "android/gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\nAPP_HOME=$( cd \"${APP_HOME:-./}\" && pwd -P ) || exit\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=${0##*/}\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=$JAVA_HOME/jre/sh/java\n    else\n        JAVACMD=$JAVA_HOME/bin/java\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=java\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\n# Collect all arguments for the java command;\n#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of\n#     shell script including quotes and variable substitutions, so put them in\n#     double quotes to make sure that they get re-expanded; and\n#   * put everything else in single quotes, so that it's not re-expanded.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        org.gradle.wrapper.GradleWrapperMain \\\n        \"$@\"\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "android/gradlew.bat",
    "content": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\r\n@rem you may not use this file except in compliance with the License.\r\n@rem You may obtain a copy of the License at\r\n@rem\r\n@rem      https://www.apache.org/licenses/LICENSE-2.0\r\n@rem\r\n@rem Unless required by applicable law or agreed to in writing, software\r\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\r\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n@rem See the License for the specific language governing permissions and\r\n@rem limitations under the License.\r\n@rem\r\n\r\n@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\r\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto execute\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto execute\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "android/settings.gradle",
    "content": "rootProject.name = 'RNMail'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/react-native-gradle-plugin')\n\nif (settings.hasProperty(\"newArchEnabled\") && settings.newArchEnabled == \"true\") {\n    include(\":ReactAndroid\")\n    project(\":ReactAndroid\").projectDir = file('../node_modules/react-native/ReactAndroid')\n    include(\":ReactAndroid:hermes-engine\")\n    project(\":ReactAndroid:hermes-engine\").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine')\n}\n"
  },
  {
    "path": "app.json",
    "content": "{\n  \"name\": \"RNMail\",\n  \"displayName\": \"RNMail\"\n}"
  },
  {
    "path": "babel.config.js",
    "content": "module.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n  plugins: [\n    [\n      'module-resolver',\n      {\n        root: ['./'],\n        alias: {\n          '@': './src',\n        },\n      },\n    ],\n    'react-native-reanimated/plugin',\n  ],\n}\n"
  },
  {
    "path": "declarations.d.ts",
    "content": "declare module '*.svg' {\n  import { SvgProps } from 'react-native-svg'\n  const content: React.FC<SvgProps>\n  export default content\n}\n"
  },
  {
    "path": "index.js",
    "content": "/**\n * @format\n */\n\nimport 'react-native-gesture-handler'\nimport { AppRegistry } from 'react-native'\nimport App from './src/app'\nimport { name as appName } from './app.json'\n\nAppRegistry.registerComponent(appName, () => App)\n"
  },
  {
    "path": "ios/Podfile",
    "content": "require_relative '../node_modules/react-native/scripts/react_native_pods'\nrequire_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'\n\nplatform :ios, '12.4'\ninstall! 'cocoapods', :deterministic_uuids => false\n\ntarget 'RNMail' do\n  config = use_native_modules!\n\n  # Flags change depending on the env values.\n  flags = get_default_flags()\n\n  use_react_native!(\n    :path => config[:reactNativePath],\n    # Hermes is now enabled by default. Disable by setting this flag to false.\n    # Upcoming versions of React Native may rely on get_default_flags(), but\n    # we make it explicit here to aid in the React Native upgrade process.\n    :hermes_enabled => true,\n    :fabric_enabled => flags[:fabric_enabled],\n    # Enables Flipper.\n    #\n    # Note that if you have use_frameworks! enabled, Flipper will not work and\n    # you should disable the next line.\n    :flipper_configuration => FlipperConfiguration.enabled,\n    # An absolute path to your application root.\n    :app_path => \"#{Pod::Config.instance.installation_root}/..\"\n  )\n\n  target 'RNMailTests' do\n    inherit! :complete\n    # Pods for testing\n  end\n\n  post_install do |installer|\n    react_native_post_install(\n      installer,\n      # Set `mac_catalyst_enabled` to `true` in order to apply patches\n      # necessary for Mac Catalyst builds\n      :mac_catalyst_enabled => false\n    )\n    __apply_Xcode_12_5_M1_post_install_workaround(installer)\n  end\nend\n"
  },
  {
    "path": "ios/RNMail/AppDelegate.h",
    "content": "#import <React/RCTBridgeDelegate.h>\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>\n\n@property (nonatomic, strong) UIWindow *window;\n\n@end\n"
  },
  {
    "path": "ios/RNMail/AppDelegate.mm",
    "content": "#import \"AppDelegate.h\"\n\n#import <React/RCTBridge.h>\n#import <React/RCTBundleURLProvider.h>\n#import <React/RCTRootView.h>\n\n#import <React/RCTAppSetupUtils.h>\n\n#if RCT_NEW_ARCH_ENABLED\n#import <React/CoreModulesPlugins.h>\n#import <React/RCTCxxBridgeDelegate.h>\n#import <React/RCTFabricSurfaceHostingProxyRootView.h>\n#import <React/RCTSurfacePresenter.h>\n#import <React/RCTSurfacePresenterBridgeAdapter.h>\n#import <ReactCommon/RCTTurboModuleManager.h>\n\n#import <react/config/ReactNativeConfig.h>\n\nstatic NSString *const kRNConcurrentRoot = @\"concurrentRoot\";\n\n@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate> {\n  RCTTurboModuleManager *_turboModuleManager;\n  RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;\n  std::shared_ptr<const facebook::react::ReactNativeConfig> _reactNativeConfig;\n  facebook::react::ContextContainer::Shared _contextContainer;\n}\n@end\n#endif\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n  RCTAppSetupPrepareApp(application);\n\n  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];\n\n#if RCT_NEW_ARCH_ENABLED\n  _contextContainer = std::make_shared<facebook::react::ContextContainer const>();\n  _reactNativeConfig = std::make_shared<facebook::react::EmptyReactNativeConfig const>();\n  _contextContainer->insert(\"ReactNativeConfig\", _reactNativeConfig);\n  _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];\n  bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;\n#endif\n\n  NSDictionary *initProps = [self prepareInitialProps];\n  UIView *rootView = RCTAppSetupDefaultRootView(bridge, @\"RNMail\", initProps);\n\n  if (@available(iOS 13.0, *)) {\n    rootView.backgroundColor = [UIColor systemBackgroundColor];\n  } else {\n    rootView.backgroundColor = [UIColor whiteColor];\n  }\n\n  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n  UIViewController *rootViewController = [UIViewController new];\n  rootViewController.view = rootView;\n  self.window.rootViewController = rootViewController;\n  [self.window makeKeyAndVisible];\n  return YES;\n}\n\n/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.\n///\n/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html\n/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).\n/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`.\n- (BOOL)concurrentRootEnabled\n{\n  // Switch this bool to turn on and off the concurrent root\n  return true;\n}\n- (NSDictionary *)prepareInitialProps\n{\n  NSMutableDictionary *initProps = [NSMutableDictionary new];\n#ifdef RCT_NEW_ARCH_ENABLED\n  initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]);\n#endif\n  return initProps;\n}\n\n- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge\n{\n#if DEBUG\n  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@\"index\"];\n#else\n  return [[NSBundle mainBundle] URLForResource:@\"main\" withExtension:@\"jsbundle\"];\n#endif\n}\n\n#if RCT_NEW_ARCH_ENABLED\n\n#pragma mark - RCTCxxBridgeDelegate\n\n- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge\n{\n  _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge\n                                                             delegate:self\n                                                            jsInvoker:bridge.jsCallInvoker];\n  return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager);\n}\n\n#pragma mark RCTTurboModuleManagerDelegate\n\n- (Class)getModuleClassFromName:(const char *)name\n{\n  return RCTCoreModulesClassProvider(name);\n}\n\n- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name\n                                                      jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker\n{\n  return nullptr;\n}\n\n- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name\n                                                     initParams:\n                                                         (const facebook::react::ObjCTurboModule::InitParams &)params\n{\n  return nullptr;\n}\n\n- (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass\n{\n  return RCTAppSetupDefaultModuleFromClass(moduleClass);\n}\n\n#endif\n\n@end\n"
  },
  {
    "path": "ios/RNMail/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"scale\" : \"1x\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "ios/RNMail/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/RNMail/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>RNMail</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSExceptionDomains</key>\n\t\t<dict>\n\t\t\t<key>localhost</key>\n\t\t\t<dict>\n\t\t\t\t<key>NSExceptionAllowsInsecureHTTPLoads</key>\n\t\t\t\t<true/>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n\t<key>NSLocationWhenInUseUsageDescription</key>\n\t<string></string>\n\t<key>UIAppFonts</key>\n\t<array>\n\t\t<string>Feather.ttf</string>\n\t</array>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/RNMail/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"15702\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"15704\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"RNMail\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GJd-Yh-RWb\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"202\" width=\"375\" height=\"43\"/>\n                                <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Powered by React Native\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MN2-I3-ftu\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"626\" width=\"375\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\" cocoaTouchSystemColor=\"whiteColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"bottom\" secondItem=\"MN2-I3-ftu\" secondAttribute=\"bottom\" constant=\"20\" id=\"OZV-Vh-mqD\"/>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"GJd-Yh-RWb\" secondAttribute=\"centerX\" id=\"Q3B-4B-g5h\"/>\n                            <constraint firstItem=\"MN2-I3-ftu\" firstAttribute=\"centerX\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"centerX\" id=\"akx-eg-2ui\"/>\n                            <constraint firstItem=\"MN2-I3-ftu\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" id=\"i1E-0Y-4RG\"/>\n                            <constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"moa-c2-u7t\"/>\n                            <constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" symbolic=\"YES\" id=\"x7j-FC-K8j\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"Bcu-3y-fUS\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"52.173913043478265\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "ios/RNMail/main.m",
    "content": "#import <UIKit/UIKit.h>\n\n#import \"AppDelegate.h\"\n\nint main(int argc, char *argv[])\n{\n  @autoreleasepool {\n    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n  }\n}\n"
  },
  {
    "path": "ios/RNMail.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t00E356F31AD99517003FC87E /* RNMailTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RNMailTests.m */; };\n\t\t0C80B921A6F3F58F76C31292 /* libPods-RNMail.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-RNMail.a */; };\n\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };\n\t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n\t\t7699B88040F8A987B510C191 /* libPods-RNMail-RNMailTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-RNMail-RNMailTests.a */; };\n\t\t81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 13B07F861A680F5B00A75B9A;\n\t\t\tremoteInfo = RNMail;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t00E356EE1AD99517003FC87E /* RNMailTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RNMailTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t00E356F21AD99517003FC87E /* RNMailTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNMailTests.m; sourceTree = \"<group>\"; };\n\t\t13B07F961A680F5B00A75B9A /* RNMail.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RNMail.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RNMail/AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = RNMail/AppDelegate.mm; sourceTree = \"<group>\"; };\n\t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RNMail/Images.xcassets; sourceTree = \"<group>\"; };\n\t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RNMail/Info.plist; sourceTree = \"<group>\"; };\n\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RNMail/main.m; sourceTree = \"<group>\"; };\n\t\t19F6CBCC0A4E27FBF8BF4A61 /* libPods-RNMail-RNMailTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-RNMail-RNMailTests.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3B4392A12AC88292D35C810B /* Pods-RNMail.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-RNMail.debug.xcconfig\"; path = \"Target Support Files/Pods-RNMail/Pods-RNMail.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t5709B34CF0A7D63546082F79 /* Pods-RNMail.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-RNMail.release.xcconfig\"; path = \"Target Support Files/Pods-RNMail/Pods-RNMail.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t5B7EB9410499542E8C5724F5 /* Pods-RNMail-RNMailTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-RNMail-RNMailTests.debug.xcconfig\"; path = \"Target Support Files/Pods-RNMail-RNMailTests/Pods-RNMail-RNMailTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t5DCACB8F33CDC322A6C60F78 /* libPods-RNMail.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-RNMail.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = RNMail/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t89C6BE57DB24E9ADA2F236DE /* Pods-RNMail-RNMailTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-RNMail-RNMailTests.release.xcconfig\"; path = \"Target Support Files/Pods-RNMail-RNMailTests/Pods-RNMail-RNMailTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t00E356EB1AD99517003FC87E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t7699B88040F8A987B510C191 /* libPods-RNMail-RNMailTests.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F8C1A680F5B00A75B9A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0C80B921A6F3F58F76C31292 /* libPods-RNMail.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t00E356EF1AD99517003FC87E /* RNMailTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00E356F21AD99517003FC87E /* RNMailTests.m */,\n\t\t\t\t00E356F01AD99517003FC87E /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = RNMailTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00E356F01AD99517003FC87E /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00E356F11AD99517003FC87E /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t13B07FAE1A68108700A75B9A /* RNMail */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.mm */,\n\t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n\t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n\t\t\t\t81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,\n\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n\t\t\t);\n\t\t\tname = RNMail;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n\t\t\t\t5DCACB8F33CDC322A6C60F78 /* libPods-RNMail.a */,\n\t\t\t\t19F6CBCC0A4E27FBF8BF4A61 /* libPods-RNMail-RNMailTests.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t832341AE1AAA6A7D00B99B32 /* Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Libraries;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t83CBB9F61A601CBA00E9B192 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07FAE1A68108700A75B9A /* RNMail */,\n\t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n\t\t\t\t00E356EF1AD99517003FC87E /* RNMailTests */,\n\t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n\t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n\t\t\t\tBBD78D7AC51CEA395F1C20DB /* Pods */,\n\t\t\t);\n\t\t\tindentWidth = 2;\n\t\t\tsourceTree = \"<group>\";\n\t\t\ttabWidth = 2;\n\t\t\tusesTabs = 0;\n\t\t};\n\t\t83CBBA001A601CBA00E9B192 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07F961A680F5B00A75B9A /* RNMail.app */,\n\t\t\t\t00E356EE1AD99517003FC87E /* RNMailTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBBD78D7AC51CEA395F1C20DB /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B4392A12AC88292D35C810B /* Pods-RNMail.debug.xcconfig */,\n\t\t\t\t5709B34CF0A7D63546082F79 /* Pods-RNMail.release.xcconfig */,\n\t\t\t\t5B7EB9410499542E8C5724F5 /* Pods-RNMail-RNMailTests.debug.xcconfig */,\n\t\t\t\t89C6BE57DB24E9ADA2F236DE /* Pods-RNMail-RNMailTests.release.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t00E356ED1AD99517003FC87E /* RNMailTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget \"RNMailTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t00E356EA1AD99517003FC87E /* Sources */,\n\t\t\t\t00E356EB1AD99517003FC87E /* Frameworks */,\n\t\t\t\t00E356EC1AD99517003FC87E /* Resources */,\n\t\t\t\tC59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,\n\t\t\t\tF6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t00E356F51AD99517003FC87E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = RNMailTests;\n\t\t\tproductName = RNMailTests;\n\t\t\tproductReference = 00E356EE1AD99517003FC87E /* RNMailTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t13B07F861A680F5B00A75B9A /* RNMail */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget \"RNMail\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tFD10A7F022414F080027D42C /* Start Packager */,\n\t\t\t\t13B07F871A680F5B00A75B9A /* Sources */,\n\t\t\t\t13B07F8C1A680F5B00A75B9A /* Frameworks */,\n\t\t\t\t13B07F8E1A680F5B00A75B9A /* Resources */,\n\t\t\t\t00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,\n\t\t\t\t00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,\n\t\t\t\tE235C05ADACE081382539298 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = RNMail;\n\t\t\tproductName = RNMail;\n\t\t\tproductReference = 13B07F961A680F5B00A75B9A /* RNMail.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t83CBB9F71A601CBA00E9B192 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1210;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t00E356ED1AD99517003FC87E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.2;\n\t\t\t\t\t\tTestTargetID = 13B07F861A680F5B00A75B9A;\n\t\t\t\t\t};\n\t\t\t\t\t13B07F861A680F5B00A75B9A = {\n\t\t\t\t\t\tLastSwiftMigration = 1120;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject \"RNMail\" */;\n\t\t\tcompatibilityVersion = \"Xcode 12.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 83CBB9F61A601CBA00E9B192;\n\t\t\tproductRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t13B07F861A680F5B00A75B9A /* RNMail */,\n\t\t\t\t00E356ED1AD99517003FC87E /* RNMailTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t00E356EC1AD99517003FC87E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F8E1A680F5B00A75B9A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Bundle React Native code and images\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"set -e\\n\\nWITH_ENVIRONMENT=\\\"../node_modules/react-native/scripts/xcode/with-environment.sh\\\"\\nREACT_NATIVE_XCODE=\\\"../node_modules/react-native/scripts/react-native-xcode.sh\\\"\\n\\n/bin/sh -c \\\"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\\\"\\n\";\n\t\t};\n\t\t00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-RNMail/Pods-RNMail-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-RNMail/Pods-RNMail-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-RNMail/Pods-RNMail-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tA55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-RNMail-RNMailTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tC38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-RNMail-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tC59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-RNMail-RNMailTests/Pods-RNMail-RNMailTests-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-RNMail-RNMailTests/Pods-RNMail-RNMailTests-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-RNMail-RNMailTests/Pods-RNMail-RNMailTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tE235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-RNMail/Pods-RNMail-resources-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-RNMail/Pods-RNMail-resources-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-RNMail/Pods-RNMail-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-RNMail-RNMailTests/Pods-RNMail-RNMailTests-resources-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-RNMail-RNMailTests/Pods-RNMail-RNMailTests-resources-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-RNMail-RNMailTests/Pods-RNMail-RNMailTests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tFD10A7F022414F080027D42C /* Start Packager */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Start Packager\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"export RCT_METRO_PORT=\\\"${RCT_METRO_PORT:=8081}\\\"\\necho \\\"export RCT_METRO_PORT=${RCT_METRO_PORT}\\\" > \\\"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\\\"\\nif [ -z \\\"${RCT_NO_LAUNCH_PACKAGER+xxx}\\\" ] ; then\\n  if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\\n    if ! curl -s \\\"http://localhost:${RCT_METRO_PORT}/status\\\" | grep -q \\\"packager-status:running\\\" ; then\\n      echo \\\"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\\\"\\n      exit 2\\n    fi\\n  else\\n    open \\\"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\\\" || echo \\\"Can't start packager automatically\\\"\\n  fi\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t00E356EA1AD99517003FC87E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t00E356F31AD99517003FC87E /* RNMailTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F871A680F5B00A75B9A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,\n\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t00E356F51AD99517003FC87E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 13B07F861A680F5B00A75B9A /* RNMail */;\n\t\t\ttargetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t00E356F61AD99517003FC87E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-RNMail-RNMailTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = RNMailTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/RNMail.app/RNMail\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t00E356F71AD99517003FC87E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-RNMail-RNMailTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tINFOPLIST_FILE = RNMailTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/RNMail.app/RNMail\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-RNMail.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = LW2FS662E4;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tINFOPLIST_FILE = RNMail/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = RNMail;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t13B07F951A680F5B00A75B9A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-RNMail.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = LW2FS662E4;\n\t\t\t\tINFOPLIST_FILE = RNMail/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = RNMail;\n\t\t\t\tSUPPORTED_PLATFORMS = \"iphoneos iphonesimulator\";\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t83CBBA201A601CBA00E9B192 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"c++17\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\t\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\" = i386;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t/usr/lib/swift,\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SDKROOT)/usr/lib/swift\\\"\",\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(inherited)\\\"\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-DFOLLY_NO_CONFIG\",\n\t\t\t\t\t\"-DFOLLY_MOBILE=1\",\n\t\t\t\t\t\"-DFOLLY_USE_LIBCPP=1\",\n\t\t\t\t);\n\t\t\t\tREACT_NATIVE_PATH = \"${PODS_ROOT}/../../node_modules/react-native\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t83CBBA211A601CBA00E9B192 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"c++17\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\t\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\" = i386;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t/usr/lib/swift,\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SDKROOT)/usr/lib/swift\\\"\",\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(inherited)\\\"\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"-DFOLLY_NO_CONFIG\",\n\t\t\t\t\t\"-DFOLLY_MOBILE=1\",\n\t\t\t\t\t\"-DFOLLY_USE_LIBCPP=1\",\n\t\t\t\t);\n\t\t\t\tREACT_NATIVE_PATH = \"${PODS_ROOT}/../../node_modules/react-native\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget \"RNMailTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t00E356F61AD99517003FC87E /* Debug */,\n\t\t\t\t00E356F71AD99517003FC87E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget \"RNMail\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t13B07F941A680F5B00A75B9A /* Debug */,\n\t\t\t\t13B07F951A680F5B00A75B9A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject \"RNMail\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t83CBBA201A601CBA00E9B192 /* Debug */,\n\t\t\t\t83CBBA211A601CBA00E9B192 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;\n}\n"
  },
  {
    "path": "ios/RNMail.xcodeproj/xcshareddata/xcschemes/RNMail.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1210\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n               BuildableName = \"RNMail.app\"\n               BlueprintName = \"RNMail\"\n               ReferencedContainer = \"container:RNMail.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"00E356ED1AD99517003FC87E\"\n               BuildableName = \"RNMailTests.xctest\"\n               BlueprintName = \"RNMailTests\"\n               ReferencedContainer = \"container:RNMail.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"RNMail.app\"\n            BlueprintName = \"RNMail\"\n            ReferencedContainer = \"container:RNMail.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"RNMail.app\"\n            BlueprintName = \"RNMail\"\n            ReferencedContainer = \"container:RNMail.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "ios/RNMail.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:RNMail.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "ios/RNMail.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/RNMailTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/RNMailTests/RNMailTests.m",
    "content": "#import <UIKit/UIKit.h>\n#import <XCTest/XCTest.h>\n\n#import <React/RCTLog.h>\n#import <React/RCTRootView.h>\n\n#define TIMEOUT_SECONDS 600\n#define TEXT_TO_LOOK_FOR @\"Welcome to React\"\n\n@interface RNMailTests : XCTestCase\n\n@end\n\n@implementation RNMailTests\n\n- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test\n{\n  if (test(view)) {\n    return YES;\n  }\n  for (UIView *subview in [view subviews]) {\n    if ([self findSubviewInView:subview matching:test]) {\n      return YES;\n    }\n  }\n  return NO;\n}\n\n- (void)testRendersWelcomeScreen\n{\n  UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];\n  NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];\n  BOOL foundElement = NO;\n\n  __block NSString *redboxError = nil;\n#ifdef DEBUG\n  RCTSetLogFunction(\n      ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {\n        if (level >= RCTLogLevelError) {\n          redboxError = message;\n        }\n      });\n#endif\n\n  while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {\n    [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n    [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n\n    foundElement = [self findSubviewInView:vc.view\n                                  matching:^BOOL(UIView *view) {\n                                    if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {\n                                      return YES;\n                                    }\n                                    return NO;\n                                  }];\n  }\n\n#ifdef DEBUG\n  RCTSetLogFunction(RCTDefaultLogFunction);\n#endif\n\n  XCTAssertNil(redboxError, @\"RedBox error: %@\", redboxError);\n  XCTAssertTrue(foundElement, @\"Couldn't find element with text '%@' in %d seconds\", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);\n}\n\n@end\n"
  },
  {
    "path": "metro.config.js",
    "content": "/**\n * Metro configuration for React Native\n * https://github.com/facebook/react-native\n *\n * @format\n */\nconst {getDefaultConfig} = require('metro-config')\n\nmodule.exports = (async () => {\n  const {\n    resolver: {sourceExts, assetExts},\n  } = await getDefaultConfig()\n  return {\n    transformer: {\n      babelTransformerPath: require.resolve('react-native-svg-transformer'),\n      getTransformOptions: async () => ({\n        transform: {\n          experimentalImportSupport: false,\n          inlineRequires: true,\n        },\n      }),\n    },\n    resolver: {\n      assetExts: assetExts.filter(ext => ext !== 'svg'),\n      sourceExts: [...sourceExts, 'svg'],\n    },\n  }\n})()\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"inkdrop-ui-mockup\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"license\": \"Apache-2.0\",\n  \"author\": \"Takuya Matsuyama<hi@craftz.dog> (https://www.craftz.dog/)\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint . --ext .js,.jsx,.ts,.tsx\"\n  },\n  \"dependencies\": {\n    \"@gorhom/bottom-sheet\": \"^4.4.5\",\n    \"@react-navigation/drawer\": \"^6.5.0\",\n    \"@react-navigation/native\": \"^6.0.13\",\n    \"@react-navigation/native-stack\": \"^6.9.1\",\n    \"@shopify/restyle\": \"^2.1.0\",\n    \"jotai\": \"^1.9.0\",\n    \"lorem-ipsum\": \"^2.0.4\",\n    \"react\": \"18.1.0\",\n    \"react-native\": \"0.70.4\",\n    \"react-native-gesture-handler\": \"^2.8.0\",\n    \"react-native-reanimated\": \"^2.12.0\",\n    \"react-native-safe-area-context\": \"^4.4.1\",\n    \"react-native-screens\": \"^3.18.2\",\n    \"react-native-svg\": \"^13.4.0\",\n    \"react-native-three-column-layout\": \"^0.1.0\",\n    \"react-native-vector-icons\": \"^9.2.0\",\n    \"shortid\": \"^2.2.16\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.9\",\n    \"@babel/runtime\": \"^7.12.5\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/react-native\": \"^0.70.6\",\n    \"@types/react-native-vector-icons\": \"^6.4.10\",\n    \"@types/react-test-renderer\": \"^17.0.1\",\n    \"@types/shortid\": \"^0.0.29\",\n    \"@typescript-eslint/eslint-plugin\": \"^5.17.0\",\n    \"@typescript-eslint/parser\": \"^5.17.0\",\n    \"babel-jest\": \"^26.6.3\",\n    \"babel-plugin-module-resolver\": \"^4.1.0\",\n    \"eslint\": \"^8.16.0\",\n    \"eslint-config-prettier\": \"^8.5.0\",\n    \"jest\": \"^26.6.3\",\n    \"metro-react-native-babel-preset\": \"^0.72.3\",\n    \"prettier\": \"^2.6.2\",\n    \"react-native-svg-transformer\": \"^1.0.0\",\n    \"react-test-renderer\": \"18.1.0\",\n    \"typescript\": \"^4.4.4\"\n  },\n  \"resolutions\": {\n    \"@types/react\": \"^18\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\",\n      \"jsx\",\n      \"json\",\n      \"node\"\n    ]\n  }\n}\n"
  },
  {
    "path": "prettier.config.js",
    "content": "const options = {\n  arrowParens: 'avoid',\n  singleQuote: true,\n  bracketSpacing: true,\n  endOfLine: 'lf',\n  semi: false,\n  tabWidth: 2,\n  trailingComma: 'none'\n}\nmodule.exports = options\n"
  },
  {
    "path": "src/app.tsx",
    "content": "import React from 'react'\nimport { NavigationContainer } from '@react-navigation/native'\nimport Navigations from './navs'\nimport { ThemeProvider } from '@shopify/restyle'\nimport StatusBar from '@/components/status-bar'\nimport { useAtom } from 'jotai'\nimport { activeThemeAtom } from './states/theme'\n\nconst App = () => {\n  const [activeTheme] = useAtom(activeThemeAtom)\n  return (\n    <NavigationContainer>\n      <ThemeProvider theme={activeTheme}>\n        <StatusBar />\n        <Navigations />\n      </ThemeProvider>\n    </NavigationContainer>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "src/atoms/animated-box.ts",
    "content": "import * as React from 'react'\nimport { Theme } from '@/themes'\nimport { ViewProps } from 'react-native'\nimport Animated, { AnimateProps } from 'react-native-reanimated'\nimport { createBox } from '@shopify/restyle'\n\nconst AnimatedBox = createBox<Theme, AnimateProps<ViewProps>>(Animated.View)\n\nexport type AnimatedBoxProps = React.ComponentProps<typeof AnimatedBox>\nexport default AnimatedBox\n"
  },
  {
    "path": "src/atoms/bar.ts",
    "content": "import { Theme } from '@/themes'\nimport {\n  createRestyleComponent,\n  createVariant,\n  VariantProps\n} from '@shopify/restyle'\nimport Box, { BoxProps } from './box'\n\nconst Bar = createRestyleComponent<\n  VariantProps<Theme, 'barVariants'> & BoxProps,\n  Theme\n>([createVariant({ themeKey: 'barVariants' })], Box)\n\nexport default Bar\n"
  },
  {
    "path": "src/atoms/bottom-sheet.tsx",
    "content": "import { Theme } from '@/themes'\nimport RNBottomSheet, { BottomSheetProps } from '@gorhom/bottom-sheet'\nimport { ColorProps, useTheme } from '@shopify/restyle'\nimport React, { forwardRef } from 'react'\n\ntype Props = BottomSheetProps & ColorProps<Theme>\n\nconst BottomSheet = forwardRef<RNBottomSheet, Props>(({ ...rest }, ref) => {\n  const theme = useTheme<Theme>()\n  const bgColor = theme.colors['$background']\n  const handleColor = theme.colors['$foreground']\n\n  return (\n    <RNBottomSheet\n      {...rest}\n      ref={ref}\n      handleIndicatorStyle={{\n        backgroundColor: handleColor,\n        opacity: 0.8\n      }}\n      backgroundStyle={{\n        backgroundColor: bgColor\n      }}\n    />\n  )\n})\n\nexport default BottomSheet\n"
  },
  {
    "path": "src/atoms/box.ts",
    "content": "import { Theme } from '@/themes'\nimport { createBox } from '@shopify/restyle'\n\nconst Box = createBox<Theme>()\nexport type BoxProps = React.ComponentProps<typeof Box>\n\nexport default Box\n"
  },
  {
    "path": "src/atoms/container.tsx",
    "content": "import * as React from 'react'\nimport { BoxProps } from '@shopify/restyle'\nimport { Theme } from '@/themes'\nimport Box from './box'\n\ntype Props = BoxProps<Theme> & {\n  children: React.ReactNode\n}\n\nconst Container: React.FC<Props> = props => (\n  <Box {...props} flex={1} backgroundColor=\"$background\">\n    {props.children}\n  </Box>\n)\n\nexport default Container\n"
  },
  {
    "path": "src/atoms/index.ts",
    "content": "import Box from './box'\nimport Text from './text'\nimport TextInput from './text-input'\nimport Container from './container'\nimport AnimatedBox from './animated-box'\nimport Bar from './bar'\nimport Pressable from './pressable'\nimport Touchable, { TouchableOpacity } from './touchable'\nimport SafeAreaView from './safe-area-view'\nimport ScrollView from './scroll-view'\n\nexport {\n  Box,\n  Text,\n  TextInput,\n  Container,\n  AnimatedBox,\n  Bar,\n  Pressable,\n  Touchable,\n  TouchableOpacity,\n  SafeAreaView,\n  ScrollView\n}\n"
  },
  {
    "path": "src/atoms/pressable.ts",
    "content": "import {\n  Pressable as NativePressable,\n  PressableProps as NativePressableProps\n} from 'react-native'\nimport { Theme } from '@/themes'\nimport { createBox } from '@shopify/restyle'\n\nconst Pressable = createBox<Theme, NativePressableProps>(NativePressable)\nexport type PressableProps = React.ComponentProps<typeof Pressable>\n\nexport default Pressable\n"
  },
  {
    "path": "src/atoms/safe-area-view.ts",
    "content": "import { Theme } from '@/themes'\nimport { SafeAreaView as NativeSafeAreaView, ViewProps } from 'react-native'\nimport { createBox } from '@shopify/restyle'\n\nconst SafeAreaView = createBox<Theme, ViewProps>(NativeSafeAreaView)\nexport type SafeAreaViewProps = React.ComponentProps<typeof SafeAreaView>\n\nexport default SafeAreaView\n"
  },
  {
    "path": "src/atoms/scroll-view.ts",
    "content": "import { Theme } from '@/themes'\nimport {\n  ScrollView as NativeScrollView,\n  ScrollViewProps as NativeScrollViewProps\n} from 'react-native'\nimport { createBox } from '@shopify/restyle'\n\nconst ScrollView = createBox<Theme, NativeScrollViewProps>(NativeScrollView)\nexport type ScrollViewProps = React.ComponentProps<typeof ScrollView>\n\nexport default ScrollView\n"
  },
  {
    "path": "src/atoms/text-input.tsx",
    "content": "import { Theme } from '@/themes'\nimport React, { forwardRef } from 'react'\nimport {\n  ColorProps,\n  useRestyle,\n  spacing,\n  border,\n  backgroundColor,\n  BorderProps,\n  BackgroundColorProps,\n  composeRestyleFunctions,\n  SpacingProps,\n  color,\n  backgroundColorShorthand,\n  BackgroundColorShorthandProps,\n  typography,\n  TypographyProps,\n  SpacingShorthandProps,\n  spacingShorthand,\n  LayoutProps,\n  layout,\n  ResponsiveValue,\n  useTheme,\n  useResponsiveProp\n} from '@shopify/restyle'\nimport { TextInput as RNTextInput } from 'react-native'\n\ntype RestyleProps = SpacingProps<Theme> &\n  SpacingShorthandProps<Theme> &\n  BorderProps<Theme> &\n  BackgroundColorProps<Theme> &\n  BackgroundColorShorthandProps<Theme> &\n  ColorProps<Theme> &\n  TypographyProps<Theme> &\n  LayoutProps<Theme>\n\nconst restyleFunctions = composeRestyleFunctions<Theme, RestyleProps>([\n  color,\n  spacing,\n  spacingShorthand,\n  border,\n  backgroundColor,\n  backgroundColorShorthand,\n  typography,\n  layout\n])\n\ntype TextInputProps = React.ComponentPropsWithRef<typeof RNTextInput> &\n  RestyleProps & {\n    placeholderColor?: ResponsiveValue<keyof Theme['colors'], Theme>\n  }\n\nconst TextInput = forwardRef<RNTextInput, TextInputProps>(\n  ({ placeholderColor, ...rest }, ref) => {\n    const props = useRestyle(restyleFunctions, rest as any)\n    const theme = useTheme<Theme>()\n    const placeholderTextColorProp =\n      placeholderColor && useResponsiveProp(placeholderColor)\n    const placeholderTextColorValue =\n      placeholderTextColorProp && theme.colors[placeholderTextColorProp]\n    return (\n      <RNTextInput\n        ref={ref}\n        {...props}\n        placeholderTextColor={placeholderTextColorValue}\n      />\n    )\n  }\n)\n\nexport default TextInput\n"
  },
  {
    "path": "src/atoms/text.ts",
    "content": "import { Theme } from '@/themes'\nimport { createText } from '@shopify/restyle'\n\nconst Text = createText<Theme>()\n\nexport default Text\n"
  },
  {
    "path": "src/atoms/touchable.tsx",
    "content": "import React from 'react'\nimport Pressable, { PressableProps } from './pressable'\nimport { Platform, StyleProp, ViewStyle } from 'react-native'\nimport {\n  backgroundColor,\n  BackgroundColorProps,\n  backgroundColorShorthand,\n  BackgroundColorShorthandProps,\n  border,\n  BorderProps,\n  composeRestyleFunctions,\n  opacity,\n  OpacityProps,\n  ResponsiveValue,\n  useResponsiveProp,\n  useRestyle,\n  useTheme\n} from '@shopify/restyle'\nimport { Theme } from '@/themes'\n\ntype RestyleProps = BackgroundColorProps<Theme> &\n  BackgroundColorShorthandProps<Theme> &\n  BorderProps<Theme> &\n  OpacityProps<Theme>\n\nconst restyleFunctions = composeRestyleFunctions<Theme, RestyleProps>([\n  backgroundColorShorthand,\n  backgroundColor,\n  border,\n  opacity\n])\n\ninterface Props extends PressableProps {\n  pressed?: RestyleProps\n  rippleColor?: ResponsiveValue<keyof Theme['colors'], Theme>\n  rippleBorderless?: boolean\n}\n\nconst Touchable = ({\n  pressed,\n  rippleColor,\n  rippleBorderless,\n  style,\n  ...rest\n}: Props) => {\n  const { style: pressedStyle } = pressed\n    ? useRestyle(restyleFunctions, pressed)\n    : { style: undefined }\n  const theme = useTheme<Theme>()\n  const rippleColorProp = rippleColor && useResponsiveProp(rippleColor)\n  const rippleColorValue = rippleColorProp && theme.colors[rippleColorProp]\n\n  return (\n    <Pressable\n      {...rest}\n      android_ripple={{ color: rippleColorValue, borderless: rippleBorderless }}\n      style={({ pressed: isPressed }) =>\n        (isPressed ? [style, pressedStyle] : style) as StyleProp<ViewStyle>\n      }\n    />\n  )\n}\n\nexport const TouchableOpacity: React.FC<Props> = props => (\n  <Touchable\n    rippleColor=\"$foreground\"\n    {...props}\n    pressed={{ opacity: Platform.select({ ios: 0.6 }) }}\n  />\n)\n\nexport default Touchable\n"
  },
  {
    "path": "src/components/book-list-item.tsx",
    "content": "import { Text, TouchableOpacity } from '@/atoms'\nimport { Book } from '@/models'\nimport { Theme } from '@/themes'\nimport { ColorProps } from '@shopify/restyle'\nimport React, { useCallback } from 'react'\n\nexport type ListItemProps = Book &\n  ColorProps<Theme> & {\n    onPress: (bookId: string) => void\n  }\n\nconst BookListItem: React.FC<ListItemProps> = ({\n  id,\n  name,\n  onPress,\n  color\n}) => {\n  const handlePress = useCallback(() => onPress(id), [id])\n  return (\n    <TouchableOpacity px=\"lg\" py=\"sm\" onPress={handlePress}>\n      <Text\n        ellipsizeMode=\"tail\"\n        numberOfLines={1}\n        mb=\"xs\"\n        color={color || '$sidebarForeground'}\n      >\n        {name}\n      </Text>\n    </TouchableOpacity>\n  )\n}\n\nexport default BookListItem\n"
  },
  {
    "path": "src/components/book-list.tsx",
    "content": "import { Book } from '@/models'\nimport { Theme } from '@/themes'\nimport { BottomSheetFlatList } from '@gorhom/bottom-sheet'\nimport { ColorProps, createBox } from '@shopify/restyle'\nimport React, { useCallback } from 'react'\nimport { FlatList, FlatListProps } from 'react-native'\nimport BookListItem from './book-list-item'\nimport BOOKS from '@/fixtures/books'\n\nconst StyledFlatList = createBox<Theme, FlatListProps<Book>>(FlatList)\nconst StyledBottomSheetFlatList = createBox<Theme, FlatListProps<Book>>(\n  BottomSheetFlatList\n)\n\ntype Props = {\n  inBottomSheet?: boolean\n  onPressItem: (bookId: string) => void\n  headerComponent?: React.FC<any>\n} & ColorProps<Theme>\n\nconst BookList: React.FC<Props> = ({\n  onPressItem,\n  headerComponent,\n  color,\n  inBottomSheet\n}) => {\n  const renderItem = useCallback(\n    ({ item }: { item: Book }) => {\n      return <BookListItem {...item} onPress={onPressItem} color={color} />\n    },\n    [onPressItem]\n  )\n\n  const ListComponent = inBottomSheet\n    ? StyledBottomSheetFlatList\n    : StyledFlatList\n\n  return (\n    <ListComponent\n      contentInsetAdjustmentBehavior=\"automatic\"\n      scrollEventThrottle={16}\n      data={BOOKS}\n      renderItem={renderItem}\n      keyExtractor={item => item.id}\n      width=\"100%\"\n      pt=\"sm\"\n      ListHeaderComponent={headerComponent}\n    />\n  )\n}\n\nexport default BookList\n"
  },
  {
    "path": "src/components/header-bar-left-button.tsx",
    "content": "import React from 'react'\nimport { AnimatedBox, Box, TouchableOpacity } from '@/atoms'\nimport { AnimatedBoxProps } from '@/atoms/animated-box'\nimport FeatherIcon from '@/components/icon'\nimport { Easing, useAnimatedStyle, withTiming } from 'react-native-reanimated'\n\ntype Props = AnimatedBoxProps & {\n  onPress: () => void\n  backButtonVisible: boolean\n}\n\nconst HeaderBarLeftButton: React.FC<Props> = props => {\n  const { onPress, backButtonVisible } = props\n\n  const menuButtonStyle = useAnimatedStyle(\n    () => ({\n      transform: [\n        { rotateZ: withTiming(backButtonVisible ? `0deg` : `180deg`) }\n      ],\n      opacity: withTiming(backButtonVisible ? 0 : 1, {\n        easing: Easing.out(Easing.quad)\n      })\n    }),\n    [backButtonVisible]\n  )\n  const backButtonStyle = useAnimatedStyle(\n    () => ({\n      transform: [\n        { rotateZ: withTiming(backButtonVisible ? `0deg` : `180deg`) }\n      ],\n      opacity: withTiming(backButtonVisible ? 1 : 0, {\n        easing: Easing.in(Easing.quad)\n      })\n    }),\n    [backButtonVisible]\n  )\n\n  return (\n    <TouchableOpacity m=\"xs\" p=\"xs\" onPress={onPress} rippleBorderless>\n      <AnimatedBox\n        position=\"absolute\"\n        width={30}\n        height={30}\n        alignItems=\"center\"\n        justifyContent=\"center\"\n        style={menuButtonStyle}\n      >\n        <FeatherIcon name=\"menu\" size={22} />\n      </AnimatedBox>\n      <AnimatedBox\n        position=\"absolute\"\n        width={30}\n        height={30}\n        alignItems=\"center\"\n        justifyContent=\"center\"\n        style={backButtonStyle}\n      >\n        <FeatherIcon name=\"arrow-left\" size={26} />\n      </AnimatedBox>\n      <Box width={22} height={22} />\n    </TouchableOpacity>\n  )\n}\n\nexport default HeaderBarLeftButton\n"
  },
  {
    "path": "src/components/header-bar.tsx",
    "content": "import React, { useCallback, useRef } from 'react'\nimport { TextInput as RNTextInput } from 'react-native'\nimport { TextInput, TouchableOpacity } from '@/atoms'\nimport AnimatedBox, { AnimatedBoxProps } from '@/atoms/animated-box'\nimport { searchInputHasFocusAtom, searchQueryAtom } from '@/states/search-bar'\nimport { useAtom } from 'jotai'\nimport HeaderBarLeftButton from './header-bar-left-button'\nimport FeatherIcon from './icon'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { useAnimatedStyle, withTiming } from 'react-native-reanimated'\nimport { useTheme } from '@shopify/restyle'\nimport { Theme } from '@/themes'\n\ntype Props = AnimatedBoxProps & {\n  onSidebarToggle: () => any\n}\n\nconst HeaderBar: React.FC<Props> = props => {\n  const { onSidebarToggle, ...rest } = props\n  const safeAreaInsets = useSafeAreaInsets()\n  const theme = useTheme<Theme>()\n  const [searchQuery, setSearchQuery] = useAtom(searchQueryAtom)\n  const [searchInputHasFocus, setSearchInputHasFocus] = useAtom(\n    searchInputHasFocusAtom\n  )\n  const refSearchInput = useRef<RNTextInput>(null)\n\n  const handleSearchInputFocus = () => {\n    setSearchInputHasFocus(true)\n  }\n\n  const handleSearchInputBlur = () => {\n    setSearchInputHasFocus(false)\n  }\n\n  const handleClearButtonPress = () => {\n    setSearchQuery('')\n  }\n\n  const handleLeftButtonPress = useCallback(() => {\n    if (searchInputHasFocus) {\n      const { current: input } = refSearchInput\n      if (input) input.blur()\n      setSearchQuery('')\n    } else {\n      onSidebarToggle()\n    }\n  }, [searchInputHasFocus, onSidebarToggle])\n\n  const safeAreaStyle = useAnimatedStyle(\n    () => ({\n      opacity: withTiming(searchInputHasFocus ? 1 : 0)\n    }),\n    [searchInputHasFocus]\n  )\n  const barStyle = useAnimatedStyle(\n    () => ({\n      marginHorizontal: withTiming(searchInputHasFocus ? 0 : theme.spacing.lg),\n      borderRadius: withTiming(searchInputHasFocus ? 0 : theme.borderRadii.md, {\n        duration: 600\n      })\n    }),\n    [searchInputHasFocus]\n  )\n\n  return (\n    <AnimatedBox position=\"absolute\" top={0} left={0} right={0} {...rest}>\n      <AnimatedBox\n        position=\"absolute\"\n        top={-safeAreaInsets.top}\n        left={0}\n        right={0}\n        bottom={0}\n        bg=\"$headerBarBackground\"\n        style={safeAreaStyle}\n      ></AnimatedBox>\n      <AnimatedBox\n        flexDirection=\"row\"\n        alignItems=\"center\"\n        mx=\"lg\"\n        my=\"md\"\n        px=\"sm\"\n        minHeight={44}\n        bg=\"$headerBarBackground\"\n        style={barStyle}\n      >\n        <HeaderBarLeftButton\n          onPress={handleLeftButtonPress}\n          backButtonVisible={searchInputHasFocus}\n        />\n        <TextInput\n          ref={refSearchInput}\n          flex={1}\n          ml=\"sm\"\n          fontSize={18}\n          autoCapitalize=\"none\"\n          color=\"$foreground\"\n          placeholder=\"Search notes\"\n          placeholderColor=\"$fieldInputPlaceholderTextColor\"\n          value={searchQuery}\n          onFocus={handleSearchInputFocus}\n          onBlur={handleSearchInputBlur}\n          onChangeText={setSearchQuery}\n        />\n        {searchQuery.length > 0 && (\n          <TouchableOpacity\n            m=\"xs\"\n            p=\"xs\"\n            rippleBorderless\n            onPress={handleClearButtonPress}\n          >\n            <FeatherIcon name=\"x\" size={22} />\n          </TouchableOpacity>\n        )}\n      </AnimatedBox>\n    </AnimatedBox>\n  )\n}\n\nexport default HeaderBar\n"
  },
  {
    "path": "src/components/icon.tsx",
    "content": "import { Theme } from '@/themes'\nimport { ColorProps, useResponsiveProp, useTheme } from '@shopify/restyle'\nimport * as React from 'react'\nimport Feather from 'react-native-vector-icons/Feather'\n\nexport type IconProps = React.ComponentProps<typeof Feather>\ntype Props = Omit<IconProps, 'color'> & ColorProps<Theme>\n\nconst FeatherIcon: React.FC<Props> = ({ color = '$foreground', ...rest }) => {\n  const theme = useTheme<Theme>()\n  const colorProp = useResponsiveProp(color)\n  const vColor = theme.colors[colorProp || '$foreground']\n  return <Feather {...rest} color={vColor} />\n}\n\nexport default FeatherIcon\n"
  },
  {
    "path": "src/components/inkdrop-logo.tsx",
    "content": "import React from 'react'\nimport LogoSVG from '@/images/inkdrop-logo.svg'\nimport { Theme } from '@/themes'\nimport { ColorProps, useResponsiveProp, useTheme } from '@shopify/restyle'\nimport { SvgProps } from 'react-native-svg'\n\ntype Props = Omit<SvgProps, 'color'> & ColorProps<Theme>\n\nconst InkdropLogo: React.FC<Props> = ({ color = '$foreground', ...rest }) => {\n  const theme = useTheme<Theme>()\n  const colorProp = useResponsiveProp(color)\n  const vColor = theme.colors[colorProp || '$foreground']\n\n  return <LogoSVG {...rest} color={vColor} />\n}\n\nexport default InkdropLogo\n"
  },
  {
    "path": "src/components/move-note-sheet.tsx",
    "content": "import React, {\n  forwardRef,\n  useCallback,\n  useImperativeHandle,\n  useMemo,\n  useRef\n} from 'react'\nimport RNBottomSheet, { BottomSheetBackdrop } from '@gorhom/bottom-sheet'\nimport BottomSheet from '@/atoms/bottom-sheet'\nimport { Box, Text } from '@/atoms'\nimport BookList from './book-list'\n\ninterface Props {\n  onClose?: () => void\n}\n\ninterface MoveNoteSheetHandle {\n  show: () => void\n}\n\nconst MoveNoteSheet = forwardRef<MoveNoteSheetHandle, Props>(\n  ({ onClose }, ref) => {\n    const refBottomSheet = useRef<RNBottomSheet>(null)\n    const snapPoints = useMemo(() => ['60%', '90%'], [])\n\n    useImperativeHandle(ref, () => ({\n      show: () => {\n        const { current: bottomSheet } = refBottomSheet\n        if (bottomSheet) {\n          bottomSheet.snapToIndex(0)\n        }\n      }\n    }))\n\n    const handlePressItem = useCallback((_bookId: string) => {\n      const { current: bottomSheet } = refBottomSheet\n      if (bottomSheet) {\n        bottomSheet.close()\n      }\n    }, [])\n\n    return (\n      <BottomSheet\n        ref={refBottomSheet}\n        index={-1}\n        snapPoints={snapPoints}\n        backdropComponent={props => (\n          <BottomSheetBackdrop\n            {...props}\n            appearsOnIndex={0}\n            disappearsOnIndex={-1}\n          />\n        )}\n        detached={true}\n        bottomInset={46}\n        enablePanDownToClose={true}\n        style={{ marginHorizontal: 12 }}\n        onClose={onClose}\n      >\n        <BookList\n          inBottomSheet\n          onPressItem={handlePressItem}\n          color=\"$foreground\"\n          headerComponent={() => (\n            <Box justifyContent=\"center\" alignItems=\"center\">\n              <Text fontWeight=\"bold\">Move</Text>\n            </Box>\n          )}\n        />\n      </BottomSheet>\n    )\n  }\n)\n\ntype MoveNoteSheet = MoveNoteSheetHandle\n\nexport default MoveNoteSheet\n"
  },
  {
    "path": "src/components/navbar.tsx",
    "content": "import * as React from 'react'\nimport { Box, SafeAreaView } from '@/atoms'\nimport { StyleSheet } from 'react-native'\n\ninterface Props {\n  children?: React.ReactNode\n}\n\nconst Navbar: React.FC<Props> = ({ children }) => {\n  return (\n    <SafeAreaView\n      backgroundColor=\"$navbarBackground\"\n      borderBottomColor=\"$navbarBorderBottom\"\n      borderBottomWidth={StyleSheet.hairlineWidth}\n    >\n      <Box minHeight={52} flexDirection=\"row\" alignItems=\"center\" px=\"md\">\n        {children}\n      </Box>\n    </SafeAreaView>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "src/components/note-list-header-title-bar.tsx",
    "content": "import * as React from 'react'\nimport { Box, Text } from '@/atoms'\n\ntype Props = {}\n\nconst NoteListHeaderTitleBar = (_props: Props) => {\n  return (\n    <Box\n      px=\"md\"\n      py=\"sm\"\n      flexDirection=\"row\"\n      justifyContent=\"flex-start\"\n      alignItems=\"center\"\n    >\n      <Text\n        ml=\"xs\"\n        mr=\"md\"\n        fontWeight=\"bold\"\n        fontSize={14}\n        numberOfLines={1}\n        ellipsizeMode=\"middle\"\n        style={{ maxWidth: '70%' }}\n      >\n        All Notes\n      </Text>\n    </Box>\n  )\n}\n\nexport default NoteListHeaderTitleBar\n"
  },
  {
    "path": "src/components/note-list-item-action-view.tsx",
    "content": "import { AnimatedBox, Box } from '@/atoms'\nimport React from 'react'\nimport { SharedValue, useAnimatedStyle } from 'react-native-reanimated'\nimport FeatherIcon from './icon'\n\ninterface Props {\n  progress: Readonly<SharedValue<number>>\n}\n\nconst NoteListItemActionView: React.FC<Props> = ({ progress }) => {\n  const iconStyle = useAnimatedStyle(() => ({\n    transform: [\n      {\n        scale: progress.value\n      }\n    ]\n  }))\n\n  return (\n    <Box\n      flex={1}\n      bg=\"$primary\"\n      flexDirection=\"row\"\n      alignItems=\"center\"\n      justifyContent=\"flex-end\"\n      pr=\"xl\"\n    >\n      <AnimatedBox\n        flexDirection=\"row\"\n        alignItems=\"center\"\n        justifyContent=\"center\"\n        style={iconStyle}\n      >\n        <FeatherIcon name=\"folder\" color=\"white\" size={18} />\n        <FeatherIcon name=\"arrow-right\" color=\"white\" size={12} />\n      </AnimatedBox>\n    </Box>\n  )\n}\n\nexport default NoteListItemActionView\n"
  },
  {
    "path": "src/components/note-list-item.tsx",
    "content": "import { Box, Text, TouchableOpacity } from '@/atoms'\nimport { Note } from '@/models'\nimport React, { memo, useCallback } from 'react'\nimport NoteListItemActionView from './note-list-item-action-view'\nimport SwipeableView, { BackViewProps } from './swipeable-view'\n\nexport interface ListItemProps extends Note {\n  onPress: (noteId: string) => void\n  onSwipeLeft?: (noteId: string, done: () => void) => void\n}\n\nconst NoteListItem: React.FC<ListItemProps> = memo(props => {\n  const { onPress, onSwipeLeft, id } = props\n  const handlePress = useCallback(() => {\n    onPress(id)\n  }, [onPress, id])\n  const handleSwipeLeft = useCallback(\n    (done: () => void) => {\n      onSwipeLeft && onSwipeLeft(id, done)\n    },\n    [id, onSwipeLeft]\n  )\n\n  const renderBackView = useCallback(\n    ({ progress }: BackViewProps) => (\n      <NoteListItemActionView progress={progress} />\n    ),\n    []\n  )\n  return (\n    <SwipeableView\n      bg=\"yellow\"\n      onSwipeLeft={handleSwipeLeft}\n      backView={renderBackView}\n    >\n      <Box bg=\"$background\">\n        <TouchableOpacity\n          bg=\"$background\"\n          px=\"lg\"\n          py=\"sm\"\n          onPress={handlePress}\n        >\n          <Text\n            ellipsizeMode=\"tail\"\n            numberOfLines={1}\n            fontWeight=\"bold\"\n            mb=\"xs\"\n          >\n            {props.title}\n          </Text>\n          <Text\n            ellipsizeMode=\"tail\"\n            numberOfLines={2}\n            fontSize={14}\n            opacity={0.7}\n          >\n            {props.body}\n          </Text>\n        </TouchableOpacity>\n      </Box>\n    </SwipeableView>\n  )\n})\n\nexport default NoteListItem\n"
  },
  {
    "path": "src/components/note-list.tsx",
    "content": "import React, { useCallback } from 'react'\nimport { Theme } from '@/themes'\nimport { createBox } from '@shopify/restyle'\nimport {\n  FlatListProps,\n  NativeScrollEvent,\n  NativeSyntheticEvent\n} from 'react-native'\nimport NoteListItem from './note-list-item'\nimport NOTES from '@/fixtures/notes'\nimport { Note } from '@/models'\nimport Animated, { AnimateProps } from 'react-native-reanimated'\nimport { Box } from '@/atoms'\n\nconst StyledFlatList = createBox<Theme, AnimateProps<FlatListProps<Note>>>(\n  Animated.FlatList\n)\n\nexport interface Props {\n  contentInsetTop: number\n  ListHeaderComponent?: React.ComponentType<any> | null | undefined\n  onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void\n  onItemPress: (noteId: string) => void\n  onItemSwipeLeft: (noteId: string, cancel: () => void) => void\n}\n\nconst NoteList: React.FC<Props> = ({\n  ListHeaderComponent,\n  onScroll,\n  contentInsetTop,\n  onItemPress,\n  onItemSwipeLeft\n}) => {\n  const renderItem = useCallback(\n    ({ item }: { item: Note }) => {\n      return (\n        <NoteListItem\n          {...item}\n          onPress={onItemPress}\n          onSwipeLeft={onItemSwipeLeft}\n        />\n      )\n    },\n    [onItemPress, onItemSwipeLeft]\n  )\n\n  return (\n    <StyledFlatList\n      contentInsetAdjustmentBehavior=\"automatic\"\n      data={NOTES}\n      renderItem={renderItem}\n      keyExtractor={item => item.id}\n      width=\"100%\"\n      onScroll={onScroll}\n      scrollEventThrottle={16}\n      ListHeaderComponent={\n        <Box>\n          <>\n            <Box width=\"100%\" height={contentInsetTop}></Box>\n            {ListHeaderComponent && <ListHeaderComponent />}\n          </>\n        </Box>\n      }\n    />\n  )\n}\n\nexport default NoteList\n"
  },
  {
    "path": "src/components/responsive-layout.tsx",
    "content": "import useResponsiveLayout from '@/hooks/use-responsive-layout'\nimport React, { ReactElement } from 'react'\nimport { useEffect } from 'react'\n\ntype Props = {\n  renderOnTablet?: () => ReactElement<any, any>\n  renderOnPhone?: () => ReactElement<any, any>\n  onLayoutChange?: (layout: 'tablet' | 'phone') => any\n}\n\nconst ResponsiveLayout: React.FC<Props> = props => {\n  const { isTablet } = useResponsiveLayout()\n  const { renderOnTablet, renderOnPhone, onLayoutChange } = props\n  // may return nothing:\n  // 1. renderOnWide set but we have narrow layout\n  // 2. renderOnNarrow set but we have wide layout\n  let children: React.ReactElement<any, any> | null = null\n\n  if (isTablet === true && renderOnTablet) {\n    children = renderOnTablet()\n  } else if (isTablet === false && renderOnPhone) {\n    children = renderOnPhone()\n  }\n\n  useEffect(() => {\n    onLayoutChange && onLayoutChange(isTablet === true ? 'tablet' : 'phone')\n  }, [isTablet])\n\n  return children\n}\n\nexport default ResponsiveLayout\n"
  },
  {
    "path": "src/components/sidebar.tsx",
    "content": "import { Box, Text } from '@/atoms'\nimport activeThemeId from '@/states/theme'\nimport { Theme, ThemeMeta, ThemeNames, themes } from '@/themes'\nimport { DrawerNavigationHelpers } from '@react-navigation/drawer/lib/typescript/src/types'\nimport { useNavigation } from '@react-navigation/native'\nimport { createBox } from '@shopify/restyle'\nimport { useAtom } from 'jotai'\nimport React, { useCallback } from 'react'\nimport { FlatList, FlatListProps, SafeAreaView } from 'react-native'\nimport InkdropLogo from './inkdrop-logo'\nimport ThemeListItem from './theme-list-item'\n\ntype Props = {}\nconst StyledFlatList = createBox<Theme, FlatListProps<ThemeMeta>>(FlatList)\n\nconst Sidebar: React.FC<Props> = () => {\n  const navigation = useNavigation<DrawerNavigationHelpers>()\n  const [, setActiveTheme] = useAtom(activeThemeId)\n\n  const handleThemeItemPress = useCallback(\n    (selectedThemeId: ThemeNames) => {\n      setActiveTheme(selectedThemeId)\n      // navigation.closeDrawer()\n    },\n    [navigation]\n  )\n\n  const renderThemeItem = useCallback(\n    ({ item }: { item: ThemeMeta }) => {\n      return <ThemeListItem theme={item} onPress={handleThemeItemPress} />\n    },\n    [handleThemeItemPress]\n  )\n\n  return (\n    <Box flex={1} bg=\"$sidebarBackground\">\n      <SafeAreaView>\n        <Box\n          alignItems=\"flex-start\"\n          pl=\"md\"\n          pb=\"sm\"\n          mt=\"xs\"\n          borderBottomColor=\"$sidebarSeparator\"\n          borderBottomWidth={1}\n        >\n          <InkdropLogo width={128} height={36} color=\"$sidebarForeground\" />\n        </Box>\n      </SafeAreaView>\n      <StyledFlatList\n        ListHeaderComponent={() => (\n          <Box p=\"lg\" alignItems=\"flex-start\">\n            <Text color=\"$sidebarForeground\" fontWeight=\"bold\">\n              UI Themes\n            </Text>\n          </Box>\n        )}\n        data={themes}\n        keyExtractor={(t: ThemeMeta) => t.id}\n        renderItem={renderThemeItem}\n      />\n    </Box>\n  )\n}\n\nexport default Sidebar\n"
  },
  {
    "path": "src/components/status-bar.tsx",
    "content": "import { Theme } from '@/themes'\nimport { useTheme } from '@shopify/restyle'\nimport * as React from 'react'\nimport { StatusBar as NativeStatusBar } from 'react-native'\n\nexport default function StatusBar() {\n  const theme = useTheme<Theme>()\n\n  return (\n    <NativeStatusBar\n      animated={true}\n      backgroundColor={theme.colors.$windowBackground || 'white'}\n      barStyle={theme.statusBar?.barStyle}\n    />\n  )\n}\n"
  },
  {
    "path": "src/components/swipeable-view.tsx",
    "content": "import { Box } from '@/atoms'\nimport AnimatedBox, { AnimatedBoxProps } from '@/atoms/animated-box'\nimport React, { forwardRef, useCallback, useImperativeHandle } from 'react'\nimport { Dimensions } from 'react-native'\nimport {\n  PanGestureHandler,\n  PanGestureHandlerGestureEvent,\n  PanGestureHandlerProps\n} from 'react-native-gesture-handler'\nimport {\n  interpolate,\n  runOnJS,\n  SharedValue,\n  useAnimatedGestureHandler,\n  useAnimatedStyle,\n  useDerivedValue,\n  useSharedValue,\n  withTiming\n} from 'react-native-reanimated'\n\ntype SwipeLeftCallback = () => any\n\nexport interface BackViewProps {\n  progress: Readonly<SharedValue<number>>\n}\n\ninterface Props\n  extends Pick<PanGestureHandlerProps, 'simultaneousHandlers'>,\n    AnimatedBoxProps {\n  children: React.ReactNode\n  backView?: React.ReactNode | React.FC<BackViewProps>\n  onSwipeLeft?: (conceal: SwipeLeftCallback) => any\n  revealed?: boolean\n}\n\ninterface SwipeableViewHandle {\n  conceal: () => void\n}\n\nconst { width: SCREEN_WIDTH } = Dimensions.get('window')\nconst SWIPE_THREASHOLD = -0.2\n\nconst SwipeableView = forwardRef<SwipeableViewHandle, Props>((props, ref) => {\n  const { children, backView, onSwipeLeft, simultaneousHandlers, ...boxProps } =\n    props\n  const translateX = useSharedValue(0)\n\n  const invokeSwipeLeft = useCallback(() => {\n    if (onSwipeLeft) {\n      onSwipeLeft(() => {\n        translateX.value = withTiming(0)\n      })\n    }\n  }, [onSwipeLeft])\n\n  const panGesture = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>({\n    onActive: event => {\n      const x = interpolate(event.translationX, [-SCREEN_WIDTH, 0], [-1, 0])\n      translateX.value = Math.max(-1, Math.min(0, x))\n    },\n    onEnd: () => {\n      const shouldBeDismissed = translateX.value < SWIPE_THREASHOLD\n      if (shouldBeDismissed) {\n        translateX.value = withTiming(-1)\n        runOnJS(invokeSwipeLeft)()\n      } else {\n        translateX.value = withTiming(0)\n      }\n    }\n  })\n\n  const facadeStyle = useAnimatedStyle(() => ({\n    transform: [\n      {\n        translateX: interpolate(translateX.value, [-1, 0], [-SCREEN_WIDTH, 0])\n      }\n    ]\n  }))\n\n  const progress = useDerivedValue(() => {\n    return interpolate(\n      Math.max(translateX.value, SWIPE_THREASHOLD),\n      [-0.2, 0],\n      [1, 0]\n    )\n  })\n\n  useImperativeHandle(ref, () => ({\n    conceal: () => {\n      translateX.value = withTiming(0)\n    }\n  }))\n\n  return (\n    <AnimatedBox {...boxProps}>\n      {backView && (\n        <Box position=\"absolute\" left={0} right={0} top={0} bottom={0}>\n          {typeof backView === 'function' ? backView({ progress }) : backView}\n        </Box>\n      )}\n      <PanGestureHandler\n        activeOffsetX={[-5, 1000]}\n        simultaneousHandlers={simultaneousHandlers}\n        onGestureEvent={panGesture}\n      >\n        <AnimatedBox style={facadeStyle}>{children}</AnimatedBox>\n      </PanGestureHandler>\n    </AnimatedBox>\n  )\n})\n\nexport default SwipeableView\n"
  },
  {
    "path": "src/components/theme-list-item.tsx",
    "content": "import { Box, Text, TouchableOpacity } from '@/atoms'\nimport activeThemeId from '@/states/theme'\nimport { ThemeMeta, ThemeNames } from '@/themes'\nimport { useAtom } from 'jotai'\nimport { selectAtom } from 'jotai/utils'\nimport React, { useCallback, useMemo } from 'react'\nimport FeatherIcon from './icon'\n\ninterface Props {\n  theme: ThemeMeta\n  onPress: (themeId: ThemeNames) => void\n}\n\nconst ThemeListItem: React.FC<Props> = ({ theme, onPress }) => {\n  const [isActive] = useAtom(\n    useMemo(() => selectAtom(activeThemeId, v => v === theme.id), [theme])\n  )\n  const handlePress = useCallback(() => {\n    onPress(theme.id)\n  }, [onPress, theme])\n\n  return (\n    <TouchableOpacity\n      minHeight={44}\n      flexDirection=\"row\"\n      alignItems=\"center\"\n      px=\"lg\"\n      onPress={handlePress}\n    >\n      <Box alignItems=\"center\" justifyContent=\"center\" width={32}>\n        {isActive ? (\n          <FeatherIcon size={20} name=\"check\" color=\"$primary\" />\n        ) : null}\n      </Box>\n      <Text color=\"$sidebarForeground\">{theme.name}</Text>\n    </TouchableOpacity>\n  )\n}\n\nexport default ThemeListItem\n"
  },
  {
    "path": "src/components/three-column-layout.tsx",
    "content": "import * as React from 'react'\nimport { memo, useCallback, useEffect, useRef } from 'react'\nimport { Animated, View, StyleSheet } from 'react-native'\nexport type ThreeColumnLayoutProps = {\n  type: 'three-column'\n  leftViewVisible: boolean\n  middleViewVisible: boolean\n}\ntype RenderView = (callbacks: ThreeColumnLayoutProps) => React.ReactNode\ntype Props = {\n  renderLeftView: RenderView\n  renderMiddleView: RenderView\n  renderRightView: RenderView\n  leftViewVisible?: boolean\n  middleViewVisible?: boolean\n  leftViewWidth?: number\n  middleViewWidth?: number\n}\n\nconst ThreeColumnLayout: React.FC<Props> = props => {\n  const {\n    renderLeftView,\n    renderMiddleView,\n    renderRightView,\n    leftViewVisible = true,\n    middleViewVisible = true,\n    leftViewWidth = 240,\n    middleViewWidth = 320\n  } = props\n  const viewProps: ThreeColumnLayoutProps = {\n    type: 'three-column',\n    leftViewVisible,\n    middleViewVisible\n  }\n  const leftValue = useRef(\n    new Animated.Value(leftViewVisible ? leftViewWidth : 0)\n  ).current\n  const middleValue = useRef(\n    new Animated.Value(middleViewVisible ? middleViewWidth : 0)\n  ).current\n  const animatedLeftViewStyle = {\n    flexBasis: leftValue\n  }\n  const animatedMiddleViewStyle = {\n    flexBasis: middleValue\n  }\n  const toggleLeftView = useCallback(\n    (visible: boolean) => {\n      if (visible) {\n        Animated.spring(leftValue, {\n          useNativeDriver: false,\n          toValue: leftViewWidth,\n          bounciness: 0\n        }).start()\n      } else {\n        Animated.spring(leftValue, {\n          useNativeDriver: false,\n          toValue: 0,\n          bounciness: 0\n        }).start()\n      }\n    },\n    [leftValue, leftViewWidth]\n  )\n  const toggleMiddleView = useCallback(\n    (visible: boolean) => {\n      if (visible) {\n        Animated.spring(middleValue, {\n          useNativeDriver: false,\n          toValue: middleViewWidth,\n          bounciness: 0\n        }).start()\n      } else {\n        Animated.spring(middleValue, {\n          useNativeDriver: false,\n          toValue: 0,\n          bounciness: 0\n        }).start()\n      }\n    },\n    [middleValue, middleViewWidth]\n  )\n  useEffect(() => {\n    toggleLeftView(leftViewVisible)\n  }, [leftViewVisible, toggleLeftView])\n  useEffect(() => {\n    toggleMiddleView(middleViewVisible)\n  }, [middleViewVisible, toggleMiddleView])\n\n  return (\n    <View style={styles.container}>\n      <Animated.View style={[styles.leftViewContainer, animatedLeftViewStyle]}>\n        <View\n          style={{\n            flex: 1,\n            width: leftViewWidth\n          }}\n        >\n          {renderLeftView(viewProps)}\n        </View>\n      </Animated.View>\n      <Animated.View\n        style={[styles.middleViewContainer, animatedMiddleViewStyle]}\n      >\n        <View\n          style={{\n            flex: 1,\n            width: middleViewWidth\n          }}\n        >\n          {renderMiddleView(viewProps)}\n        </View>\n      </Animated.View>\n      <View style={styles.rightViewContainer}>\n        {renderRightView(viewProps)}\n      </View>\n    </View>\n  )\n}\n\nexport default memo<Props>(ThreeColumnLayout)\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    flexDirection: 'row'\n  },\n  leftViewContainer: {\n    flexShrink: 0,\n    flexGrow: 0\n  },\n  middleViewContainer: {\n    flexShrink: 0,\n    flexGrow: 0\n  },\n  rightViewContainer: {\n    flex: 1\n  }\n})\n"
  },
  {
    "path": "src/consts.ts",
    "content": "export const RESPONSIVE_SCREEN_BREAKPOINT = 1024\n"
  },
  {
    "path": "src/fixtures/books.ts",
    "content": "import { Book } from '@/models'\nimport { LoremIpsum } from 'lorem-ipsum'\nimport shortid from 'shortid'\n\nconst DATA: Array<Book> = []\n\nconst lorem = new LoremIpsum({\n  wordsPerSentence: {\n    max: 16,\n    min: 4\n  }\n})\n\nconst capitalizeFirstLetter = ([first, ...rest]: string) =>\n  first.toLocaleUpperCase() + rest.join('')\n\nfor (let i = 0; i < 100; ++i) {\n  DATA.push({\n    id: shortid.generate(),\n    name: capitalizeFirstLetter(\n      lorem.generateSentences(Math.round(Math.random() * 4))\n    )\n  })\n}\n\nexport default DATA\n"
  },
  {
    "path": "src/fixtures/notes.ts",
    "content": "import { Note } from '@/models'\nimport { LoremIpsum } from 'lorem-ipsum'\nimport shortid from 'shortid'\n\nconst DATA: Array<Note> = []\n\nconst lorem = new LoremIpsum({\n  sentencesPerParagraph: {\n    max: 8,\n    min: 4\n  },\n  wordsPerSentence: {\n    max: 16,\n    min: 4\n  }\n})\n\nconst capitalizeFirstLetter = ([first, ...rest]: string) =>\n  first.toLocaleUpperCase() + rest.join('')\n\nfor (let i = 0; i < 100; ++i) {\n  DATA.push({\n    id: shortid.generate(),\n    title: capitalizeFirstLetter(\n      lorem.generateWords(Math.round(Math.random() * 10) + 2)\n    ),\n    body: capitalizeFirstLetter(\n      lorem.generateSentences(Math.round(Math.random() * 50) + 1)\n    )\n  })\n}\n\nexport default DATA\n"
  },
  {
    "path": "src/hooks/use-drawer-enabled.ts",
    "content": "import { searchInputHasFocusAtom } from '@/states/search-bar'\nimport { useAtom } from 'jotai'\nimport useResponsiveLayout from './use-responsive-layout'\n\nconst useDrawerEnabled = () => {\n  const [searchInputHasFocus] = useAtom(searchInputHasFocusAtom)\n  const { isTablet, isPortrait } = useResponsiveLayout()\n  if (isTablet) {\n    return isPortrait\n  } else {\n    return !searchInputHasFocus\n  }\n}\n\nexport default useDrawerEnabled\n"
  },
  {
    "path": "src/hooks/use-responsive-layout.ts",
    "content": "import { useWindowDimensions } from 'react-native'\nimport { RESPONSIVE_SCREEN_BREAKPOINT } from '@/consts'\n\nconst useResponsiveLayout = () => {\n  const screenSize = useWindowDimensions()\n  const isTablet =\n    screenSize.width >= RESPONSIVE_SCREEN_BREAKPOINT ||\n    screenSize.height >= RESPONSIVE_SCREEN_BREAKPOINT\n  const isPortrait = screenSize.width < screenSize.height\n  return { isTablet, isPortrait }\n}\n\nexport default useResponsiveLayout\n"
  },
  {
    "path": "src/hooks/use-sticky-header.ts",
    "content": "import { useCallback, useState } from 'react'\nimport { LayoutChangeEvent, NativeScrollEvent } from 'react-native'\nimport {\n  interpolate,\n  useAnimatedScrollHandler,\n  useAnimatedStyle,\n  useSharedValue,\n  withTiming\n} from 'react-native-reanimated'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\n\nconst ANCHOR_INIT = -9999\n\nexport default function useStickyHeader() {\n  const safeAreaInsets = useSafeAreaInsets()\n  const [headerBarHeight, setHeaderBarHeight] = useState(70)\n  const anchorY = useSharedValue(ANCHOR_INIT)\n  const translationY = useSharedValue(0)\n  const progressY = useSharedValue(0)\n\n  const minY = -headerBarHeight\n  const maxY = safeAreaInsets.top\n\n  const handleNoteListLayout = useCallback((event: LayoutChangeEvent) => {\n    setHeaderBarHeight(event.nativeEvent.layout.height)\n  }, [])\n\n  const handleEndDrag = (event: NativeScrollEvent) => {\n    'worklet'\n    if (progressY.value > 0.5 || event.contentOffset.y < headerBarHeight) {\n      translationY.value = withTiming(maxY)\n    } else {\n      translationY.value = withTiming(minY)\n    }\n  }\n\n  const handleScroll = useAnimatedScrollHandler(\n    {\n      onBeginDrag: event => {\n        anchorY.value = event.contentOffset.y\n      },\n      onScroll: event => {\n        const offsetY = event.contentOffset.y\n        let distY = offsetY - anchorY.value\n        if (anchorY.value === ANCHOR_INIT) distY = offsetY\n\n        let value =\n          offsetY <= -safeAreaInsets.top\n            ? maxY\n            : Math.max(minY, Math.min(maxY, translationY.value - distY))\n        translationY.value = value\n        anchorY.value = offsetY\n        progressY.value = interpolate(translationY.value, [minY, maxY], [0, 1])\n      },\n      onEndDrag: handleEndDrag,\n      onMomentumEnd: handleEndDrag\n    },\n    [minY, maxY, headerBarHeight]\n  )\n  const headerBarStyle = useAnimatedStyle(() => ({\n    transform: [\n      {\n        translateY: translationY.value\n      }\n    ]\n  }))\n\n  return {\n    handleNoteListLayout,\n    handleScroll,\n    headerBarStyle,\n    headerBarHeight\n  }\n}\n"
  },
  {
    "path": "src/models.ts",
    "content": "export interface Note {\n  id: string\n  title: string\n  body: string\n}\n\nexport interface Book {\n  id: string\n  name: string\n}\n"
  },
  {
    "path": "src/navs.tsx",
    "content": "import { createDrawerNavigator } from '@react-navigation/drawer'\nimport { NavigatorScreenParams } from '@react-navigation/native'\nimport { createNativeStackNavigator } from '@react-navigation/native-stack'\nimport * as React from 'react'\nimport Sidebar from './components/sidebar'\nimport useDrawerEnabled from './hooks/use-drawer-enabled'\nimport useResponsiveLayout from './hooks/use-responsive-layout'\nimport DetailScreenForPhone from './screens/detail-phone'\nimport MainScreen from './screens/main'\n\nexport type HomeDrawerParamList = {\n  Main: {}\n}\n\nexport type RootStackParamList = {\n  Home: NavigatorScreenParams<HomeDrawerParamList>\n  Detail: undefined\n}\n\nconst Stack = createNativeStackNavigator<RootStackParamList>()\nconst Drawer = createDrawerNavigator<HomeDrawerParamList>()\n\nfunction Home() {\n  const { isTablet } = useResponsiveLayout()\n  const swipeEnabled = useDrawerEnabled()\n\n  return (\n    <Drawer.Navigator\n      initialRouteName=\"Main\"\n      screenOptions={{\n        drawerType: isTablet ? 'front' : 'back',\n        drawerStyle: {\n          width: isTablet ? 280 : '90%'\n        },\n        swipeEdgeWidth: 200,\n        swipeEnabled: swipeEnabled\n      }}\n      drawerContent={Sidebar}\n    >\n      <Drawer.Screen\n        name=\"Main\"\n        component={MainScreen}\n        options={{\n          headerShown: false\n        }}\n      />\n    </Drawer.Navigator>\n  )\n}\n\nexport default function Navigations() {\n  return (\n    <Stack.Navigator initialRouteName=\"Home\">\n      <Stack.Screen\n        name=\"Home\"\n        component={Home}\n        options={{\n          headerShown: false\n        }}\n      />\n      <Stack.Screen\n        name=\"Detail\"\n        component={DetailScreenForPhone}\n        options={{\n          headerShown: false\n        }}\n      />\n    </Stack.Navigator>\n  )\n}\n"
  },
  {
    "path": "src/screens/detail-phone.tsx",
    "content": "import React, { useCallback } from 'react'\nimport DetailScreen from './detail'\nimport FeatherIcon from '@/components/icon'\nimport { TouchableOpacity } from '@/atoms'\nimport { useNavigation } from '@react-navigation/native'\nimport { NativeStackNavigationProp } from '@react-navigation/native-stack'\nimport { RootStackParamList } from '@/navs'\n\ntype Props = {}\n\nconst DetailScreenForPhone: React.FC<Props> = _props => {\n  const navigation =\n    useNavigation<NativeStackNavigationProp<RootStackParamList>>()\n  const handleBackPress = useCallback(() => {\n    navigation.goBack()\n  }, [])\n\n  return (\n    <DetailScreen\n      renderNavBarLeft={() => (\n        <TouchableOpacity onPress={handleBackPress} p=\"sm\">\n          <FeatherIcon name=\"arrow-left\" size={24} />\n        </TouchableOpacity>\n      )}\n    />\n  )\n}\n\nexport default DetailScreenForPhone\n"
  },
  {
    "path": "src/screens/detail-tablet.tsx",
    "content": "import React from 'react'\nimport { ThreeColumnLayoutProps } from 'react-native-three-column-layout'\nimport DetailScreen from './detail'\nimport { TouchableOpacity } from '@/atoms'\nimport FeatherIcon from '@/components/icon'\n\ntype Props = ThreeColumnLayoutProps & { onDistractionFreeModeToggle: () => any }\n\nconst DetailScreenForTablet: React.FC<Props> = props => {\n  const { onDistractionFreeModeToggle, middleViewVisible } = props\n\n  return (\n    <DetailScreen\n      renderNavBarLeft={() => (\n        <TouchableOpacity\n          onPress={onDistractionFreeModeToggle}\n          flexDirection=\"row\"\n          alignItems=\"center\"\n          height=\"100%\"\n        >\n          <FeatherIcon\n            name={middleViewVisible ? 'maximize-2' : 'minimize-2'}\n            size={24}\n          />\n        </TouchableOpacity>\n      )}\n    />\n  )\n}\n\nexport default DetailScreenForTablet\n"
  },
  {
    "path": "src/screens/detail.tsx",
    "content": "import React, { ReactNode } from 'react'\nimport { Box, Container, ScrollView, Text } from '@/atoms'\nimport Navbar from '@/components/navbar'\nimport { useAtom } from 'jotai'\nimport { editingNoteIdAtom } from '@/states/editor'\nimport NOTES from '@/fixtures/notes'\n\ntype Props = {\n  renderNavBarLeft: () => ReactNode\n}\n\nexport default function DetailScreen(props: Props) {\n  const { renderNavBarLeft } = props\n  const [editingNoteId] = useAtom(editingNoteIdAtom)\n  const note = NOTES.find(n => n.id === editingNoteId)\n\n  return (\n    <Container>\n      <Navbar>\n        {renderNavBarLeft()}\n        <Box flex={1}>\n          <Text variant=\"navbar\" textAlign=\"center\">\n            Editor\n          </Text>\n        </Box>\n        <Box width={36} />\n      </Navbar>\n      <ScrollView flex={1} p=\"sm\">\n        <Text fontWeight=\"bold\" fontSize={24} m=\"sm\">\n          {note?.title}\n        </Text>\n        <Text fontSize={20} m=\"sm\">\n          {note?.body}\n        </Text>\n      </ScrollView>\n    </Container>\n  )\n}\n"
  },
  {
    "path": "src/screens/main-phone.tsx",
    "content": "import { HomeDrawerParamList, RootStackParamList } from '@/navs'\nimport { DrawerScreenProps } from '@react-navigation/drawer'\nimport { CompositeScreenProps } from '@react-navigation/native'\nimport { NativeStackScreenProps } from '@react-navigation/native-stack'\nimport React from 'react'\nimport NoteListScreenForPhone from './note-list-phone'\n\ntype Props = CompositeScreenProps<\n  DrawerScreenProps<HomeDrawerParamList, 'Main'>,\n  NativeStackScreenProps<RootStackParamList>\n>\n\nexport default function MainScreenForPhone({ navigation }: Props) {\n  return <NoteListScreenForPhone navigation={navigation} />\n}\n"
  },
  {
    "path": "src/screens/main-tablet.tsx",
    "content": "import Sidebar from '@/components/sidebar'\nimport ThreeColumnLayout from 'react-native-three-column-layout'\nimport useResponsiveLayout from '@/hooks/use-responsive-layout'\nimport { HomeDrawerParamList, RootStackParamList } from '@/navs'\nimport { DrawerScreenProps } from '@react-navigation/drawer'\nimport { CompositeScreenProps } from '@react-navigation/native'\nimport { NativeStackScreenProps } from '@react-navigation/native-stack'\nimport React, { useCallback, useState } from 'react'\nimport DetailScreenForTablet from './detail-tablet'\nimport NoteListScreenForTablet from './note-list-tablet'\n\ntype Props = CompositeScreenProps<\n  DrawerScreenProps<HomeDrawerParamList, 'Main'>,\n  NativeStackScreenProps<RootStackParamList>\n>\n\nexport default function MainScreenForTablet({ navigation }: Props) {\n  const { isPortrait } = useResponsiveLayout()\n  const [sidebarVisible, setSidebarVisible] = useState(true)\n  const [distractionFreeMode, setDistractionFreeMode] = useState(false)\n\n  const toggleSidebar = useCallback(() => {\n    setSidebarVisible(visible => !visible)\n  }, [])\n  const toggleDistractionFreeMode = useCallback(() => {\n    setDistractionFreeMode(enabled => !enabled)\n  }, [])\n\n  const leftViewVisible = !isPortrait && sidebarVisible && !distractionFreeMode\n\n  return (\n    <ThreeColumnLayout\n      renderLeftView={() => <Sidebar />}\n      renderMiddleView={() => (\n        <NoteListScreenForTablet\n          navigation={navigation}\n          onSidebarToggle={toggleSidebar}\n        />\n      )}\n      renderRightView={viewProps => (\n        <DetailScreenForTablet\n          {...viewProps}\n          onDistractionFreeModeToggle={toggleDistractionFreeMode}\n        />\n      )}\n      leftViewVisible={leftViewVisible}\n      middleViewVisible={!distractionFreeMode}\n    />\n  )\n}\n"
  },
  {
    "path": "src/screens/main.tsx",
    "content": "import { Container } from '@/atoms'\nimport ResponsiveLayout from '@/components/responsive-layout'\nimport { HomeDrawerParamList, RootStackParamList } from '@/navs'\nimport { DrawerScreenProps } from '@react-navigation/drawer'\nimport { CompositeScreenProps } from '@react-navigation/native'\nimport { NativeStackScreenProps } from '@react-navigation/native-stack'\nimport React from 'react'\nimport MainScreenForPhone from './main-phone'\nimport MainScreenForTablet from './main-tablet'\n\ntype Props = CompositeScreenProps<\n  DrawerScreenProps<HomeDrawerParamList, 'Main'>,\n  NativeStackScreenProps<RootStackParamList>\n>\n\nexport default function MainScreen(props: Props) {\n  return (\n    <Container>\n      <ResponsiveLayout\n        renderOnPhone={() => <MainScreenForPhone {...props} />}\n        renderOnTablet={() => <MainScreenForTablet {...props} />}\n      />\n    </Container>\n  )\n}\n"
  },
  {
    "path": "src/screens/note-list-phone.tsx",
    "content": "import { HomeDrawerParamList, RootStackParamList } from '@/navs'\nimport { editingNoteIdAtom } from '@/states/editor'\nimport { DrawerNavigationProp } from '@react-navigation/drawer'\nimport { CompositeNavigationProp } from '@react-navigation/native'\nimport { NativeStackNavigationProp } from '@react-navigation/native-stack'\nimport { useSetAtom } from 'jotai'\nimport React, { useCallback } from 'react'\nimport NoteListScreen from './note-list'\n\ninterface Props {\n  navigation: CompositeNavigationProp<\n    DrawerNavigationProp<HomeDrawerParamList>,\n    NativeStackNavigationProp<RootStackParamList>\n  >\n}\n\nconst NoteListScreenForPhone: React.FC<Props> = ({ navigation }) => {\n  const setEditingNoteId = useSetAtom(editingNoteIdAtom)\n\n  const handleSidebarToggle = useCallback(() => {\n    navigation.toggleDrawer()\n  }, [])\n\n  const handleNoteListItemPress = useCallback((noteId: string) => {\n    setEditingNoteId(noteId)\n    navigation.navigate('Detail')\n  }, [])\n\n  return (\n    <NoteListScreen\n      onSidebarToggle={handleSidebarToggle}\n      onNoteSelect={handleNoteListItemPress}\n    />\n  )\n}\n\nexport default NoteListScreenForPhone\n"
  },
  {
    "path": "src/screens/note-list-tablet.tsx",
    "content": "import React, { memo, useCallback } from 'react'\nimport NoteListScreen from './note-list'\nimport useResponsiveLayout from '@/hooks/use-responsive-layout'\nimport { HomeDrawerParamList, RootStackParamList } from '@/navs'\nimport { editingNoteIdAtom } from '@/states/editor'\nimport { DrawerNavigationProp } from '@react-navigation/drawer'\nimport { CompositeNavigationProp } from '@react-navigation/native'\nimport { NativeStackNavigationProp } from '@react-navigation/native-stack'\nimport { useSetAtom } from 'jotai'\n\ntype Props = {\n  navigation: CompositeNavigationProp<\n    DrawerNavigationProp<HomeDrawerParamList>,\n    NativeStackNavigationProp<RootStackParamList>\n  >\n  onSidebarToggle: () => any\n}\n\nconst NoteListScreenForTablet: React.FC<Props> = memo(props => {\n  const { navigation, onSidebarToggle } = props\n  const setEditingNoteId = useSetAtom(editingNoteIdAtom)\n  const { isPortrait } = useResponsiveLayout()\n  const handleSidebarToggle = useCallback(() => {\n    if (isPortrait) {\n      navigation.toggleDrawer()\n    } else {\n      onSidebarToggle()\n    }\n  }, [isPortrait, navigation])\n\n  const handleNoteListItemPress = useCallback((noteId: string) => {\n    setEditingNoteId(noteId)\n  }, [])\n\n  return (\n    <NoteListScreen\n      onSidebarToggle={handleSidebarToggle}\n      onNoteSelect={handleNoteListItemPress}\n    />\n  )\n})\n\nexport default NoteListScreenForTablet\n"
  },
  {
    "path": "src/screens/note-list.tsx",
    "content": "import React, { useCallback, useRef, useState } from 'react'\nimport { Container } from '@/atoms'\nimport NoteList, { Props as NoteListProps } from '@/components/note-list'\nimport useStickyHeader from '@/hooks/use-sticky-header'\nimport HeaderBar from '@/components/header-bar'\nimport NoteListHeaderTitleBar from '@/components/note-list-header-title-bar'\nimport MoveNoteSheet from '@/components/move-note-sheet'\n\ntype Props = {\n  onSidebarToggle: () => any\n  onNoteSelect: NoteListProps['onItemPress']\n}\n\nconst NoteListScreen: React.FC<Props> = props => {\n  const { onSidebarToggle, onNoteSelect } = props\n  const refMoveNoteSheet = useRef<MoveNoteSheet>(null)\n  const {\n    handleNoteListLayout,\n    handleScroll,\n    headerBarStyle,\n    headerBarHeight\n  } = useStickyHeader()\n  const [concealNoteListItem, setConcealNoteListItem] = useState<\n    (() => void) | null\n  >(null)\n\n  const handleNoteListItemSwipeLeft = useCallback(\n    (_noteId: string, conceal: () => void) => {\n      const { current: menu } = refMoveNoteSheet\n      if (menu) {\n        menu.show()\n        setConcealNoteListItem(() => conceal)\n      }\n    },\n    []\n  )\n  const handleMoveNoteSheetClose = useCallback(() => {\n    concealNoteListItem && concealNoteListItem()\n    setConcealNoteListItem(null)\n  }, [concealNoteListItem])\n\n  return (\n    <Container alignItems=\"center\" justifyContent=\"center\">\n      <NoteList\n        contentInsetTop={headerBarHeight}\n        onScroll={handleScroll}\n        onItemPress={onNoteSelect}\n        onItemSwipeLeft={handleNoteListItemSwipeLeft}\n        ListHeaderComponent={NoteListHeaderTitleBar}\n      />\n      <HeaderBar\n        style={headerBarStyle}\n        onLayout={handleNoteListLayout}\n        onSidebarToggle={onSidebarToggle}\n      ></HeaderBar>\n      <MoveNoteSheet\n        ref={refMoveNoteSheet}\n        onClose={handleMoveNoteSheetClose}\n      />\n    </Container>\n  )\n}\n\nexport default NoteListScreen\n"
  },
  {
    "path": "src/states/editor.ts",
    "content": "import { atom } from 'jotai'\n\nexport const editingNoteIdAtom = atom<string | null | undefined>(undefined)\n"
  },
  {
    "path": "src/states/search-bar.ts",
    "content": "import { atom } from 'jotai'\n\nexport const searchQueryAtom = atom<string>('')\nexport const searchInputHasFocusAtom = atom<boolean>(false)\n"
  },
  {
    "path": "src/states/theme.ts",
    "content": "import { Theme, ThemeNames, themes } from '@/themes'\nimport { atom } from 'jotai'\n\nconst activeThemeId = atom<ThemeNames>('dark')\n\nexport const activeThemeAtom = atom<Theme>(get => {\n  const themeId = get(activeThemeId)\n  const themeIndex = themes.findIndex(t => t.id === themeId)\n  if (themeIndex >= 0) {\n    return themes[themeIndex].theme\n  } else {\n    return themes[0].theme\n  }\n})\n\nexport default activeThemeId\n"
  },
  {
    "path": "src/themes/dark.ts",
    "content": "import { createTheme } from '@shopify/restyle'\nimport { StatusBarStyle } from 'react-native'\nimport light, { Theme } from './light'\n\n// Palette\nconst p = {\n  slate00: '#1b1c1d',\n  slate10: '#202225',\n  slate20: '#292c2f',\n  slate30: '#2e3235',\n  slate40: '#35393d',\n  slate100: '#767577',\n  slate900: '#dddddd',\n  blue70: '#2185d0'\n}\n\nexport const theme: Theme = createTheme({\n  ...light,\n  colors: {\n    ...light.colors,\n    $primary: p.blue70,\n    $secondary: p.slate00,\n    $windowBackground: p.slate10,\n    $background: p.slate10,\n    $foreground: p.slate900,\n    $separator: p.slate100,\n    $navbarBackground: p.slate20,\n    $navbarBorderBottom: p.slate00,\n    $headerBarBackground: p.slate40,\n    $sidebarBackground: p.slate30,\n    $sidebarForeground: p.slate900,\n    $sidebarSeparator: p.slate900 + '20',\n    $fieldInputBackground: p.slate00,\n    $fieldInputPlaceholderTextColor: p.slate100\n  },\n  statusBar: {\n    barStyle: 'light-content' as StatusBarStyle\n  },\n  textVariants: {\n    ...light.textVariants\n  },\n  barVariants: {\n    headerBar: {\n      bg: '$headerBarBackground',\n      borderRadius: 'hg',\n      shadowColor: 'black',\n      shadowOffset: { width: 0, height: 2 },\n      shadowOpacity: 0.4,\n      shadowRadius: 8\n    }\n  }\n})\n\nexport default theme\n"
  },
  {
    "path": "src/themes/index.ts",
    "content": "import light, { Theme } from './light'\nimport dark from './dark'\nimport nord from './nord'\nimport solarizedDark from './solarized-dark'\n\nexport type ThemeNames = 'light' | 'dark' | 'nord' | 'solarized-dark'\nexport interface ThemeMeta {\n  id: ThemeNames\n  name: string\n  theme: Theme\n}\n\nexport const themes: readonly ThemeMeta[] = [\n  {\n    id: 'light',\n    name: 'Default Light',\n    theme: light\n  },\n  {\n    id: 'dark',\n    name: 'Default Dark',\n    theme: dark\n  },\n  {\n    id: 'nord',\n    name: 'Nord',\n    theme: nord\n  },\n  {\n    id: 'solarized-dark',\n    name: 'Solarized Dark',\n    theme: solarizedDark\n  }\n]\n\nexport type { Theme }\n"
  },
  {
    "path": "src/themes/light.ts",
    "content": "import { createTheme } from '@shopify/restyle'\nimport { StatusBarStyle } from 'react-native'\n\n// Palette\nconst p = {\n  white: 'white',\n  black: 'black',\n  red: 'red',\n  blue: 'blue',\n  yellow: 'yellow',\n  paper00: '#ffffff',\n  paper10: '#f5f5f4',\n  paper20: '#e6e6e6',\n  paper100: '#aeaeae',\n  paper300: '#767577',\n  paper900: '#202020',\n  blue70: '#2185d0',\n  navy20: '#171a21',\n  navy900: '#b9babc'\n}\n\nconst theme = createTheme({\n  spacing: {\n    '0': 0,\n    xs: 4,\n    sm: 8,\n    md: 12,\n    lg: 16,\n    xl: 24,\n    xxl: 48,\n    hg: 128\n  },\n  breakpoints: {\n    phone: 0,\n    tablet: 768\n  },\n  colors: {\n    white: p.white,\n    black: p.black,\n    red: p.red,\n    blue: p.blue,\n    yellow: p.yellow,\n\n    $primary: p.blue70,\n    $windowBackground: '#f0f0f0',\n    $background: p.paper10,\n    $foreground: p.paper900,\n    $navbarBackground: p.paper10,\n    $navbarBorderBottom: p.paper100,\n    $sidebarBackground: p.navy20,\n    $sidebarForeground: p.navy900,\n    $sidebarSeparator: p.paper00 + '20',\n    $headerBarBackground: p.paper20,\n    $fieldInputBackground: p.paper00,\n    $fieldInputPlaceholderTextColor: p.paper300\n  },\n  borderRadii: {\n    xs: 4,\n    sm: 16,\n    md: 24,\n    lg: 64,\n    hg: 128\n  },\n  statusBar: {\n    barStyle: 'dark-content' as StatusBarStyle\n  },\n  textVariants: {\n    defaults: {\n      color: '$foreground',\n      fontSize: 16\n    },\n    sidebar: {\n      color: '$sidebarForeground'\n    },\n    navbar: {\n      fontSize: 20\n    }\n  },\n  barVariants: {\n    headerBar: {\n      bg: '$headerBarBackground',\n      borderRadius: 'hg'\n    }\n  }\n})\nexport default theme\n\nexport type Theme = typeof theme\n"
  },
  {
    "path": "src/themes/nord.ts",
    "content": "import { createTheme } from '@shopify/restyle'\nimport { StatusBarStyle } from 'react-native'\nimport light, { Theme } from './light'\n\n// Palette\nconst p = {\n  // Polar Night\n  nord0: '#2E3440',\n  nord1: '#3B4252',\n  nord2: '#434C5E',\n  nord3: '#4C566A',\n\n  // Snow Storm\n  nord4: '#D8DEE9',\n  nord5: '#E5E9F0',\n  nord6: '#ECEFF4',\n\n  // Frost\n  nord7: '#8FBCBB',\n  nord8: '#88C0D0',\n  nord9: '#81A1C1',\n  nord10: '#5E81AC',\n\n  // Aurora\n  nord11: '#BF616A',\n  nord12: '#D08770',\n  nord13: '#EBCB8B',\n  nord14: '#A3BE8C',\n  nord15: '#B48EAD'\n}\n\nexport const theme: Theme = createTheme({\n  ...light,\n  colors: {\n    ...light.colors,\n    $primary: p.nord10,\n    $secondary: p.nord9,\n    $windowBackground: p.nord0,\n    $background: p.nord0,\n    $foreground: p.nord4,\n    $separator: p.nord3,\n    $navbarBackground: p.nord1,\n    $navbarBorderBottom: p.nord0,\n    $headerBarBackground: p.nord2,\n    $sidebarBackground: p.nord0,\n    $sidebarForeground: p.nord4,\n    $sidebarSeparator: p.nord4 + '20'\n  },\n  statusBar: {\n    barStyle: 'light-content' as StatusBarStyle\n  },\n  textVariants: {\n    ...light.textVariants\n  },\n  barVariants: {\n    headerBar: {\n      bg: '$headerBarBackground',\n      borderRadius: 'hg'\n    }\n  }\n})\n\nexport default theme\n"
  },
  {
    "path": "src/themes/solarized-dark.ts",
    "content": "import { createTheme } from '@shopify/restyle'\nimport { StatusBarStyle } from 'react-native'\nimport light, { Theme } from './light'\n\n// Palette\nconst p = {\n  base000: '#00141A',\n  base00: '#002b36',\n  base01: '#073642',\n  base02: '#586e75',\n  base03: '#657b83',\n  base04: '#839496',\n  base05: '#93a1a1',\n  base06: '#eee8d5',\n  base07: '#fdf6e3',\n  red: '#dc322f',\n  orange: '#cb4b16',\n  yellow: '#b58900',\n  green: '#859900',\n  cyan: '#2aa198',\n  blue: '#268bd2',\n  violet: '#6c71c4',\n  magenta: '#d33682'\n}\n\nexport const theme: Theme = createTheme({\n  ...light,\n  colors: {\n    ...light.colors,\n    $primary: p.blue,\n    $secondary: p.orange,\n    $windowBackground: p.base00,\n    $background: p.base00,\n    $foreground: p.base06,\n    $separator: p.base04,\n    $navbarBackground: p.base01,\n    $navbarBorderBottom: p.base00,\n    $headerBarBackground: p.base01,\n    $sidebarBackground: p.base000,\n    $sidebarForeground: p.base06,\n    $sidebarSeparator: p.base07 + '20'\n  },\n  statusBar: {\n    barStyle: 'light-content' as StatusBarStyle\n  },\n  textVariants: {\n    ...light.textVariants\n  },\n  barVariants: {\n    headerBar: {\n      bg: '$headerBarBackground',\n      borderRadius: 'hg',\n      shadowColor: 'black',\n      shadowOffset: { width: 0, height: 2 },\n      shadowOpacity: 0.4,\n      shadowRadius: 8\n    }\n  }\n})\n\nexport default theme\n"
  },
  {
    "path": "tsconfig.json",
    "content": "// prettier-ignore\n{\n  \"compilerOptions\": {\n    /* Visit https://aka.ms/tsconfig.json to read more about this file */\n\n    /* Projects */\n    // \"incremental\": true,                              /* Enable incremental compilation */\n    // \"composite\": true,                                /* Enable constraints that allow a TypeScript project to be used with project references. */\n    // \"tsBuildInfoFile\": \"./\",                          /* Specify the folder for .tsbuildinfo incremental compilation files. */\n    // \"disableSourceOfProjectReferenceRedirect\": true,  /* Disable preferring source files instead of declaration files when referencing composite projects */\n    // \"disableSolutionSearching\": true,                 /* Opt a project out of multi-project reference checking when editing. */\n    // \"disableReferencedProjectLoad\": true,             /* Reduce the number of projects loaded automatically by TypeScript. */\n\n    /* Language and Environment */\n    \"target\": \"esnext\",                                  /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */\n    \"lib\": [\"es2017\"],                                   /* Specify a set of bundled library declaration files that describe the target runtime environment. */\n    \"jsx\": \"react-native\",                               /* Specify what JSX code is generated. */\n    // \"experimentalDecorators\": true,                   /* Enable experimental support for TC39 stage 2 draft decorators. */\n    // \"emitDecoratorMetadata\": true,                    /* Emit design-type metadata for decorated declarations in source files. */\n    // \"jsxFactory\": \"\",                                 /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */\n    // \"jsxFragmentFactory\": \"\",                         /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */\n    // \"jsxImportSource\": \"\",                            /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */\n    // \"reactNamespace\": \"\",                             /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */\n    // \"noLib\": true,                                    /* Disable including any library files, including the default lib.d.ts. */\n    // \"useDefineForClassFields\": true,                  /* Emit ECMAScript-standard-compliant class fields. */\n\n    /* Modules */\n    \"module\": \"commonjs\",                                /* Specify what module code is generated. */\n    // \"rootDir\": \"./\",                                  /* Specify the root folder within your source files. */\n    \"moduleResolution\": \"node\",                          /* Specify how TypeScript looks up a file from a given module specifier. */\n    \"baseUrl\": \"./\",                                  /* Specify the base directory to resolve non-relative module names. */\n    \"paths\": {\n      \"@/*\": [\"src/*\"]\n    },                                      /* Specify a set of entries that re-map imports to additional lookup locations. */\n    // \"rootDirs\": [],                                   /* Allow multiple folders to be treated as one when resolving modules. */\n    // \"typeRoots\": [],                                  /* Specify multiple folders that act like `./node_modules/@types`. */\n    // \"types\": [],                                      /* Specify type package names to be included without being referenced in a source file. */\n    // \"allowUmdGlobalAccess\": true,                     /* Allow accessing UMD globals from modules. */\n    \"resolveJsonModule\": true,                           /* Enable importing .json files */\n    // \"noResolve\": true,                                /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */\n\n    /* JavaScript Support */\n    \"allowJs\": true,                                     /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */\n    // \"checkJs\": true,                                  /* Enable error reporting in type-checked JavaScript files. */\n    // \"maxNodeModuleJsDepth\": 1,                        /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */\n\n    /* Emit */\n    // \"declaration\": true,                              /* Generate .d.ts files from TypeScript and JavaScript files in your project. */\n    // \"declarationMap\": true,                           /* Create sourcemaps for d.ts files. */\n    // \"emitDeclarationOnly\": true,                      /* Only output d.ts files and not JavaScript files. */\n    // \"sourceMap\": true,                                /* Create source map files for emitted JavaScript files. */\n    // \"outFile\": \"./\",                                  /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */\n    // \"outDir\": \"./\",                                   /* Specify an output folder for all emitted files. */\n    // \"removeComments\": true,                           /* Disable emitting comments. */\n    \"noEmit\": true,                                      /* Disable emitting files from a compilation. */\n    // \"importHelpers\": true,                            /* Allow importing helper functions from tslib once per project, instead of including them per-file. */\n    // \"importsNotUsedAsValues\": \"remove\",               /* Specify emit/checking behavior for imports that are only used for types */\n    // \"downlevelIteration\": true,                       /* Emit more compliant, but verbose and less performant JavaScript for iteration. */\n    // \"sourceRoot\": \"\",                                 /* Specify the root path for debuggers to find the reference source code. */\n    // \"mapRoot\": \"\",                                    /* Specify the location where debugger should locate map files instead of generated locations. */\n    // \"inlineSourceMap\": true,                          /* Include sourcemap files inside the emitted JavaScript. */\n    // \"inlineSources\": true,                            /* Include source code in the sourcemaps inside the emitted JavaScript. */\n    // \"emitBOM\": true,                                  /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */\n    // \"newLine\": \"crlf\",                                /* Set the newline character for emitting files. */\n    // \"stripInternal\": true,                            /* Disable emitting declarations that have `@internal` in their JSDoc comments. */\n    // \"noEmitHelpers\": true,                            /* Disable generating custom helper functions like `__extends` in compiled output. */\n    // \"noEmitOnError\": true,                            /* Disable emitting files if any type checking errors are reported. */\n    // \"preserveConstEnums\": true,                       /* Disable erasing `const enum` declarations in generated code. */\n    // \"declarationDir\": \"./\",                           /* Specify the output directory for generated declaration files. */\n    // \"preserveValueImports\": true,                     /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */\n\n    /* Interop Constraints */\n    \"isolatedModules\": true,                             /* Ensure that each file can be safely transpiled without relying on other imports. */\n    \"allowSyntheticDefaultImports\": true,                /* Allow 'import x from y' when a module doesn't have a default export. */\n    \"esModuleInterop\": true,                             /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */\n    // \"preserveSymlinks\": true,                         /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */\n    \"forceConsistentCasingInFileNames\": true,            /* Ensure that casing is correct in imports. */\n\n    /* Type Checking */\n    \"strict\": true,                                      /* Enable all strict type-checking options. */\n    // \"noImplicitAny\": true,                            /* Enable error reporting for expressions and declarations with an implied `any` type.. */\n    // \"strictNullChecks\": true,                         /* When type checking, take into account `null` and `undefined`. */\n    // \"strictFunctionTypes\": true,                      /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */\n    // \"strictBindCallApply\": true,                      /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */\n    // \"strictPropertyInitialization\": true,             /* Check for class properties that are declared but not set in the constructor. */\n    // \"noImplicitThis\": true,                           /* Enable error reporting when `this` is given the type `any`. */\n    // \"useUnknownInCatchVariables\": true,               /* Type catch clause variables as 'unknown' instead of 'any'. */\n    // \"alwaysStrict\": true,                             /* Ensure 'use strict' is always emitted. */\n    // \"noUnusedLocals\": true,                           /* Enable error reporting when a local variables aren't read. */\n    // \"noUnusedParameters\": true,                       /* Raise an error when a function parameter isn't read */\n    // \"exactOptionalPropertyTypes\": true,               /* Interpret optional property types as written, rather than adding 'undefined'. */\n    // \"noImplicitReturns\": true,                        /* Enable error reporting for codepaths that do not explicitly return in a function. */\n    // \"noFallthroughCasesInSwitch\": true,               /* Enable error reporting for fallthrough cases in switch statements. */\n    // \"noUncheckedIndexedAccess\": true,                 /* Include 'undefined' in index signature results */\n    // \"noImplicitOverride\": true,                       /* Ensure overriding members in derived classes are marked with an override modifier. */\n    // \"noPropertyAccessFromIndexSignature\": true,       /* Enforces using indexed accessors for keys declared using an indexed type */\n    // \"allowUnusedLabels\": true,                        /* Disable error reporting for unused labels. */\n    // \"allowUnreachableCode\": true,                     /* Disable error reporting for unreachable code. */\n\n    /* Completeness */\n    // \"skipDefaultLibCheck\": true,                      /* Skip type checking .d.ts files that are included with TypeScript. */\n    \"skipLibCheck\": true                                 /* Skip type checking all .d.ts files. */\n  },\n  \"exclude\": [\n    \"node_modules\", \"babel.config.js\", \"metro.config.js\", \"jest.config.js\"\n  ]\n}\n"
  }
]