feat(example): New example app using RN 0.61, native-base, and react-navigation. (#2588)

Includes a camera screen with support for the right dimensions, aspect ratio, flash, tap to focus, pinch to zoom, flash, and multi camera support.
This commit is contained in:
cristianoccazinsp 2019-11-15 11:15:19 -03:00 committed by Sibelius Seraphini
parent ffbd805bcf
commit 9c6fcea43e
134 changed files with 17542 additions and 0 deletions

4
examples/advanced/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
# OSX
#
.DS_Store
.vscode

View File

@ -0,0 +1,6 @@
[android]
target = Google Inc.:Google APIs:23
[maven_repositories]
central = https://repo1.maven.org/maven2

View File

@ -0,0 +1,4 @@
module.exports = {
root: true,
extends: '@react-native-community',
};

View File

@ -0,0 +1,75 @@
[ignore]
; We fork some components by platform
.*/*[.]android.js
; Ignore "BUCK" generated dirs
<PROJECT_ROOT>/\.buckd/
; Ignore polyfills
node_modules/react-native/Libraries/polyfills/.*
; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/warning')
node_modules/warning/.*
; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js
[untyped]
.*/node_modules/@react-native-community/cli/.*/.*
[include]
[libs]
node_modules/react-native/Libraries/react-native/react-native-interface.js
node_modules/react-native/flow/
[options]
emoji=true
esproposal.optional_chaining=enable
esproposal.nullish_coalescing=enable
module.file_ext=.js
module.file_ext=.json
module.file_ext=.ios.js
munge_underscores=true
module.name_mapper='^react-native$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation'
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
[lints]
sketchy-null-number=warn
sketchy-null-mixed=warn
sketchy-number=warn
untyped-type-import=warn
nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
inexact-spread=warn
unnecessary-invariant=warn
signature-verification-failure=warn
deprecated-utility=error
[strict]
deprecated-type
nonstrict-import
sketchy-null
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import
[version]
^0.105.0

View File

@ -0,0 +1 @@
*.pbxproj -text

59
examples/advanced/advanced/.gitignore vendored Normal file
View File

@ -0,0 +1,59 @@
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots
# Bundle artifact
*.jsbundle
# CocoaPods
/ios/Pods/

View File

@ -0,0 +1,6 @@
module.exports = {
bracketSpacing: false,
jsxBracketSameLine: true,
singleQuote: true,
trailingComma: 'all',
};

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,55 @@
# To learn about Buck see [Docs](https://buckbuild.com/).
# To run your application with Buck:
# - install Buck
# - `npm start` - to start the packager
# - `cd android`
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
# - `buck install -r android/app` - compile, install and run application
#
load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
lib_deps = []
create_aar_targets(glob(["libs/*.aar"]))
create_jar_targets(glob(["libs/*.jar"]))
android_library(
name = "all-libs",
exported_deps = lib_deps,
)
android_library(
name = "app-code",
srcs = glob([
"src/main/java/**/*.java",
]),
deps = [
":all-libs",
":build_config",
":res",
],
)
android_build_config(
name = "build_config",
package = "com.advanced",
)
android_resource(
name = "res",
package = "com.advanced",
res = "src/main/res",
)
android_binary(
name = "app",
keystore = "//android/keystores:debug",
manifest = "src/main/AndroidManifest.xml",
package_type = "debug",
deps = [
":app-code",
],
)

View File

@ -0,0 +1,203 @@
apply plugin: "com.android.application"
import com.android.build.OutputFile
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
* // the entry file for bundle generation
* entryFile: "index.android.js",
*
* // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
* bundleCommand: "ram-bundle",
*
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
* // whether to bundle JS and assets in release mode
* bundleInRelease: true,
*
* // whether to bundle JS and assets in another build variant (if configured).
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
* // The configuration property can be in the following formats
* // 'bundleIn${productFlavor}${buildType}'
* // 'bundleIn${buildType}'
* // bundleInFreeDebug: true,
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
* // whether to disable dev mode in custom build variants (by default only disabled in release)
* // for example: to disable dev mode in the staging build type (if configured)
* devDisabledInStaging: true,
* // The configuration property can be in the following formats
* // 'devDisabledIn${productFlavor}${buildType}'
* // 'devDisabledIn${buildType}'
*
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
* // where to put the JS bundle asset in debug mode
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
*
* // where to put the JS bundle asset in release mode
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in debug mode
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in release mode
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
*
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
* // for example, you might want to remove it from here.
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
* nodeExecutableAndArgs: ["node"],
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
* ]
*/
project.ext.react = [
entryFile: "index.js",
enableHermes: false, // clean and rebuild if changing
]
apply from: "../../node_modules/react-native/react.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
/**
* The preferred build flavor of JavaScriptCore.
*
* For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and mirrored here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/
def enableHermes = project.ext.react.get("enableHermes", false);
android {
compileSdkVersion rootProject.ext.compileSdkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.advanced"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
missingDimensionStrategy 'react-native-camera', 'general'
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://facebook.github.io/react-native/docs/signed-apk-android.
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.facebook.react:react-native:+" // From node_modules
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

View File

@ -0,0 +1,19 @@
"""Helper definitions to glob .aar and .jar targets"""
def create_aar_targets(aarfiles):
for aarfile in aarfiles:
name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
lib_deps.append(":" + name)
android_prebuilt_aar(
name = name,
aar = aarfile,
)
def create_jar_targets(jarfiles):
for jarfile in jarfiles:
name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
lib_deps.append(":" + name)
prebuilt_jar(
name = name,
binary_jar = jarfile,
)

Binary file not shown.

View File

@ -0,0 +1,10 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
</manifest>

View File

@ -0,0 +1,34 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.advanced">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>

View File

@ -0,0 +1,32 @@
package com.advanced;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "advanced";
}
/**
For react-native-gesture-handler (used)
*/
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new ReactActivityDelegate(this, getMainComponentName()) {
@Override
protected ReactRootView createRootView() {
return new RNGestureHandlerEnabledRootView(MainActivity.this);
}
};
}
}

View File

@ -0,0 +1,74 @@
package com.advanced;
import android.app.Application;
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
initializeFlipper(this); // Remove this line if you don't want Flipper enabled
}
/**
* Loads Flipper in React Native templates.
*
* @param context
*/
private static void initializeFlipper(Context context) {
if (BuildConfig.DEBUG) {
try {
/*
We use reflection here to pick up the class that initializes Flipper,
since Flipper library is not available in release mode
*/
Class<?> aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper");
aClass.getMethod("initializeFlipper", Context.class).invoke(null, context);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,3 @@
<resources>
<string name="app_name">RNCamera</string>
</resources>

View File

@ -0,0 +1,10 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:textColor">#000000</item>
<item name="android:editTextBackground">@android:color/transparent</item>
</style>
</resources>

View File

@ -0,0 +1,38 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 16
compileSdkVersion = 28
targetSdkVersion = 28
}
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:3.4.2")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}

View File

@ -0,0 +1,21 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.useAndroidX=true
android.enableJetifier=true

View File

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

188
examples/advanced/advanced/android/gradlew vendored Executable file
View File

@ -0,0 +1,188 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

View File

@ -0,0 +1,100 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -0,0 +1,3 @@
rootProject.name = 'advanced'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'

View File

@ -0,0 +1,4 @@
{
"name": "advanced",
"displayName": "RNCamera"
}

View File

@ -0,0 +1,3 @@
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
};

View File

@ -0,0 +1,6 @@
import 'react-native-gesture-handler'; // required for correct initialization of this library
import {AppRegistry} from 'react-native';
import App from './src/App';
import {name as appName} from './app.json';
AppRegistry.registerComponent(appName, () => App);

View File

@ -0,0 +1,40 @@
platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
target 'advanced' do
# Pods for advanced
pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
pod 'React', :path => '../node_modules/react-native/'
pod 'React-Core', :path => '../node_modules/react-native/'
pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon"
pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
use_native_modules!
end

View File

@ -0,0 +1,356 @@
PODS:
- boost-for-react-native (1.63.0)
- DoubleConversion (1.1.6)
- FBLazyVector (0.61.4)
- FBReactNativeSpec (0.61.4):
- Folly (= 2018.10.22.00)
- RCTRequired (= 0.61.4)
- RCTTypeSafety (= 0.61.4)
- React-Core (= 0.61.4)
- React-jsi (= 0.61.4)
- ReactCommon/turbomodule/core (= 0.61.4)
- Folly (2018.10.22.00):
- boost-for-react-native
- DoubleConversion
- Folly/Default (= 2018.10.22.00)
- glog
- Folly/Default (2018.10.22.00):
- boost-for-react-native
- DoubleConversion
- glog
- glog (0.3.5)
- RCTRequired (0.61.4)
- RCTTypeSafety (0.61.4):
- FBLazyVector (= 0.61.4)
- Folly (= 2018.10.22.00)
- RCTRequired (= 0.61.4)
- React-Core (= 0.61.4)
- React (0.61.4):
- React-Core (= 0.61.4)
- React-Core/DevSupport (= 0.61.4)
- React-Core/RCTWebSocket (= 0.61.4)
- React-RCTActionSheet (= 0.61.4)
- React-RCTAnimation (= 0.61.4)
- React-RCTBlob (= 0.61.4)
- React-RCTImage (= 0.61.4)
- React-RCTLinking (= 0.61.4)
- React-RCTNetwork (= 0.61.4)
- React-RCTSettings (= 0.61.4)
- React-RCTText (= 0.61.4)
- React-RCTVibration (= 0.61.4)
- React-Core (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default (= 0.61.4)
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/CoreModulesHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/Default (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/DevSupport (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default (= 0.61.4)
- React-Core/RCTWebSocket (= 0.61.4)
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- React-jsinspector (= 0.61.4)
- Yoga
- React-Core/RCTActionSheetHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTAnimationHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTBlobHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTImageHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTLinkingHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTNetworkHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTSettingsHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTTextHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTVibrationHeaders (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-Core/RCTWebSocket (0.61.4):
- Folly (= 2018.10.22.00)
- glog
- React-Core/Default (= 0.61.4)
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsiexecutor (= 0.61.4)
- Yoga
- React-CoreModules (0.61.4):
- FBReactNativeSpec (= 0.61.4)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.61.4)
- React-Core/CoreModulesHeaders (= 0.61.4)
- React-RCTImage (= 0.61.4)
- ReactCommon/turbomodule/core (= 0.61.4)
- React-cxxreact (0.61.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsinspector (= 0.61.4)
- React-jsi (0.61.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsi/Default (= 0.61.4)
- React-jsi/Default (0.61.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsiexecutor (0.61.4):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- React-jsinspector (0.61.4)
- react-native-camera (3.9.0):
- React
- react-native-camera/RCT (= 3.9.0)
- react-native-camera/RN (= 3.9.0)
- react-native-camera/RCT (3.9.0):
- React
- react-native-camera/RN (3.9.0):
- React
- React-RCTActionSheet (0.61.4):
- React-Core/RCTActionSheetHeaders (= 0.61.4)
- React-RCTAnimation (0.61.4):
- React-Core/RCTAnimationHeaders (= 0.61.4)
- React-RCTBlob (0.61.4):
- React-Core/RCTBlobHeaders (= 0.61.4)
- React-Core/RCTWebSocket (= 0.61.4)
- React-jsi (= 0.61.4)
- React-RCTNetwork (= 0.61.4)
- React-RCTImage (0.61.4):
- React-Core/RCTImageHeaders (= 0.61.4)
- React-RCTNetwork (= 0.61.4)
- React-RCTLinking (0.61.4):
- React-Core/RCTLinkingHeaders (= 0.61.4)
- React-RCTNetwork (0.61.4):
- React-Core/RCTNetworkHeaders (= 0.61.4)
- React-RCTSettings (0.61.4):
- React-Core/RCTSettingsHeaders (= 0.61.4)
- React-RCTText (0.61.4):
- React-Core/RCTTextHeaders (= 0.61.4)
- React-RCTVibration (0.61.4):
- React-Core/RCTVibrationHeaders (= 0.61.4)
- ReactCommon/jscallinvoker (0.61.4):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-cxxreact (= 0.61.4)
- ReactCommon/turbomodule/core (0.61.4):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-Core (= 0.61.4)
- React-cxxreact (= 0.61.4)
- React-jsi (= 0.61.4)
- ReactCommon/jscallinvoker (= 0.61.4)
- RNGestureHandler (1.5.0):
- React
- Yoga (1.14.0)
DEPENDENCIES:
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
- React-Core (from `../node_modules/react-native/`)
- React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- react-native-camera (from `../node_modules/react-native-camera`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
- React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
- React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
- React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
- React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
- React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- ReactCommon/jscallinvoker (from `../node_modules/react-native/ReactCommon`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
https://github.com/cocoapods/specs.git:
- boost-for-react-native
EXTERNAL SOURCES:
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
FBLazyVector:
:path: "../node_modules/react-native/Libraries/FBLazyVector"
FBReactNativeSpec:
:path: "../node_modules/react-native/Libraries/FBReactNativeSpec"
Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
RCTRequired:
:path: "../node_modules/react-native/Libraries/RCTRequired"
RCTTypeSafety:
:path: "../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../node_modules/react-native/"
React-Core:
:path: "../node_modules/react-native/"
React-CoreModules:
:path: "../node_modules/react-native/React/CoreModules"
React-cxxreact:
:path: "../node_modules/react-native/ReactCommon/cxxreact"
React-jsi:
:path: "../node_modules/react-native/ReactCommon/jsi"
React-jsiexecutor:
:path: "../node_modules/react-native/ReactCommon/jsiexecutor"
React-jsinspector:
:path: "../node_modules/react-native/ReactCommon/jsinspector"
react-native-camera:
:path: "../node_modules/react-native-camera"
React-RCTActionSheet:
:path: "../node_modules/react-native/Libraries/ActionSheetIOS"
React-RCTAnimation:
:path: "../node_modules/react-native/Libraries/NativeAnimation"
React-RCTBlob:
:path: "../node_modules/react-native/Libraries/Blob"
React-RCTImage:
:path: "../node_modules/react-native/Libraries/Image"
React-RCTLinking:
:path: "../node_modules/react-native/Libraries/LinkingIOS"
React-RCTNetwork:
:path: "../node_modules/react-native/Libraries/Network"
React-RCTSettings:
:path: "../node_modules/react-native/Libraries/Settings"
React-RCTText:
:path: "../node_modules/react-native/Libraries/Text"
React-RCTVibration:
:path: "../node_modules/react-native/Libraries/Vibration"
ReactCommon:
:path: "../node_modules/react-native/ReactCommon"
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
FBLazyVector: feb35a6b7f7b50f367be07f34012f34a79282fa3
FBReactNativeSpec: 51477b84b1bf7ab6f9ef307c24e3dd675391be44
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
RCTRequired: f3b3fb6f4723e8e52facb229d0c75fdc76773849
RCTTypeSafety: 2ec60de6abb1db050b56ecc4b60188026078fd10
React: 10e0130b57e55a7cd8c3dee37c1261102ce295f4
React-Core: 636212410772d05f3a1eb79d965df2962ca1c70b
React-CoreModules: 6f70d5e41919289c582f88c9ad9923fe5c87400a
React-cxxreact: ddecbe9157ec1743f52ea17bf8d95debc0d6e846
React-jsi: ca921f4041505f9d5197139b2d09eeb020bb12e8
React-jsiexecutor: 8dfb73b987afa9324e4009bdce62a18ce23d983c
React-jsinspector: d15478d0a8ada19864aa4d1cc1c697b41b3fa92f
react-native-camera: 8ad12cae113fd60b07236983532acc8e595c0fc3
React-RCTActionSheet: 7369b7c85f99b6299491333affd9f01f5a130c22
React-RCTAnimation: d07be15b2bd1d06d89417eb0343f98ffd2b099a7
React-RCTBlob: 8e0b23d95c9baa98f6b0e127e07666aaafd96c34
React-RCTImage: 443050d14a66e8c2332e9c055f45689d23e15cc7
React-RCTLinking: ce9a90ba155aec41be49e75ec721bbae2d48a47e
React-RCTNetwork: 41fe54bacc67dd00e6e4c4d30dd98a13e4beabc8
React-RCTSettings: 45e3e0a6470310b2dab2ccc6d1d73121ba3ea936
React-RCTText: 21934e0a51d522abcd0a275407e80af45d6fd9ec
React-RCTVibration: 0f76400ee3cec6edb9c125da49fed279340d145a
ReactCommon: a6a294e7028ed67b926d29551aa9394fd989c24c
RNGestureHandler: a4ddde1ffc6e590c8127b8b7eabfdade45475c74
Yoga: ba3d99dbee6c15ea6bbe3783d1f0cb1ffb79af0f
PODFILE CHECKSUM: 27b3847fe4d98bb58146c377f86ebed45b40a77d
COCOAPODS: 1.7.5

View File

@ -0,0 +1,508 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
062607D0422842D88DF710BA /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B099670817684071AF0F1893 /* MaterialIcons.ttf */; };
094178A82163487B97009578 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6E6AFACE6DD74B8D8DE65F9D /* SimpleLineIcons.ttf */; };
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
348421C833E74C5182BCB9DD /* rubicon-icon-font.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 53E08F4C2C724DDDBB4D1F8A /* rubicon-icon-font.ttf */; };
3D8F8BED9802FE25EF64DF0B /* libPods-advanced.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 13933213D0463644F398ABD8 /* libPods-advanced.a */; };
62EB96F9E7374AACA02A0A5E /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1DBCCE5F94214C56BBB900D4 /* Octicons.ttf */; };
72EB31C325254DF5B991B84D /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DE200E779C404F619DC27169 /* AntDesign.ttf */; };
783D315FD7684FC8B773B484 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3BF1497671ED475EBB25942C /* EvilIcons.ttf */; };
7BFA53EAC35948EC8D1B4BF3 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D4F07CE1EF734EC2BD6EEB93 /* Ionicons.ttf */; };
84BE4437EEDB43EAA7FCE6CB /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 436527FFB9A04400BF5944F6 /* FontAwesome.ttf */; };
A5FAC66B25374E97AB8AD24F /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 891C6F6AE85849C0AEA4EE9D /* FontAwesome5_Solid.ttf */; };
AEBB31508EBC4C2BA44C8846 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D029104C407640F2B400A4DB /* Foundation.ttf */; };
B3CD170387DA49C4B9782E8E /* Fontisto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B60CC3D370D545E58CD72840 /* Fontisto.ttf */; };
C94C5AD1867A429AA8ADEF3B /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CEB49DD2C8EF43D18EF017B5 /* Roboto.ttf */; };
D0B5EF2F6B634AE1A9BBFAD9 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 230AA087B4DF4002B655AA4A /* Feather.ttf */; };
D6F97B93699645358C8C2C8F /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 97956D0EABB145B699AF0F94 /* MaterialCommunityIcons.ttf */; };
DC621F6F5E5B4E13BFC33DF8 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F16C1C727DA5491FBEBD6DE4 /* Zocial.ttf */; };
DFFAF9505B41467784F8C6CB /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7EE85165270445CEAD66A58E /* Entypo.ttf */; };
E4EF985626DE4E3EBAC7C646 /* Roboto_medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B6F84A95E26241E4B7549034 /* Roboto_medium.ttf */; };
EA2436BE9CFF4671B3A05D4F /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F1BB551E32164FE98F9F2ADE /* FontAwesome5_Regular.ttf */; };
F16629C0F69642AFB3CEB6D0 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A1551A287D074DE1BE677698 /* FontAwesome5_Brands.ttf */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
07B3BF7D3A962BA50396E297 /* Pods-advanced.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-advanced.release.xcconfig"; path = "Target Support Files/Pods-advanced/Pods-advanced.release.xcconfig"; sourceTree = "<group>"; };
13933213D0463644F398ABD8 /* libPods-advanced.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-advanced.a"; sourceTree = BUILT_PRODUCTS_DIR; };
13B07F961A680F5B00A75B9A /* advanced.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = advanced.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = advanced/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = advanced/AppDelegate.m; sourceTree = "<group>"; };
13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = advanced/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = advanced/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = advanced/main.m; sourceTree = "<group>"; };
1DBCCE5F94214C56BBB900D4 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/native-base/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
230AA087B4DF4002B655AA4A /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/native-base/Fonts/Feather.ttf"; sourceTree = "<group>"; };
3BF1497671ED475EBB25942C /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/native-base/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
436527FFB9A04400BF5944F6 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/native-base/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
53E08F4C2C724DDDBB4D1F8A /* rubicon-icon-font.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "rubicon-icon-font.ttf"; path = "../node_modules/native-base/Fonts/rubicon-icon-font.ttf"; sourceTree = "<group>"; };
6E6AFACE6DD74B8D8DE65F9D /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/native-base/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
7EE85165270445CEAD66A58E /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/native-base/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
891C6F6AE85849C0AEA4EE9D /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/native-base/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; };
8D2F66B2A31434AB475A52FD /* Pods-advanced.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-advanced.debug.xcconfig"; path = "Target Support Files/Pods-advanced/Pods-advanced.debug.xcconfig"; sourceTree = "<group>"; };
97956D0EABB145B699AF0F94 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/native-base/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; };
A1551A287D074DE1BE677698 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/native-base/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; };
B099670817684071AF0F1893 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/native-base/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; };
B60CC3D370D545E58CD72840 /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/native-base/Fonts/Fontisto.ttf"; sourceTree = "<group>"; };
B6F84A95E26241E4B7549034 /* Roboto_medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto_medium.ttf; path = "../node_modules/native-base/Fonts/Roboto_medium.ttf"; sourceTree = "<group>"; };
CEB49DD2C8EF43D18EF017B5 /* Roboto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto.ttf; path = "../node_modules/native-base/Fonts/Roboto.ttf"; sourceTree = "<group>"; };
D029104C407640F2B400A4DB /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/native-base/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
D4F07CE1EF734EC2BD6EEB93 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/native-base/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
DE200E779C404F619DC27169 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/native-base/Fonts/AntDesign.ttf"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
F16C1C727DA5491FBEBD6DE4 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/native-base/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
F1BB551E32164FE98F9F2ADE /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/native-base/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3D8F8BED9802FE25EF64DF0B /* libPods-advanced.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
13B07FAE1A68108700A75B9A /* advanced */ = {
isa = PBXGroup;
children = (
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
13B07FB71A68108700A75B9A /* main.m */,
);
name = advanced;
sourceTree = "<group>";
};
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
13933213D0463644F398ABD8 /* libPods-advanced.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
80BFD9DB84F945EDBE3A6B57 /* Resources */ = {
isa = PBXGroup;
children = (
DE200E779C404F619DC27169 /* AntDesign.ttf */,
7EE85165270445CEAD66A58E /* Entypo.ttf */,
3BF1497671ED475EBB25942C /* EvilIcons.ttf */,
230AA087B4DF4002B655AA4A /* Feather.ttf */,
436527FFB9A04400BF5944F6 /* FontAwesome.ttf */,
A1551A287D074DE1BE677698 /* FontAwesome5_Brands.ttf */,
F1BB551E32164FE98F9F2ADE /* FontAwesome5_Regular.ttf */,
891C6F6AE85849C0AEA4EE9D /* FontAwesome5_Solid.ttf */,
B60CC3D370D545E58CD72840 /* Fontisto.ttf */,
D029104C407640F2B400A4DB /* Foundation.ttf */,
D4F07CE1EF734EC2BD6EEB93 /* Ionicons.ttf */,
97956D0EABB145B699AF0F94 /* MaterialCommunityIcons.ttf */,
B099670817684071AF0F1893 /* MaterialIcons.ttf */,
1DBCCE5F94214C56BBB900D4 /* Octicons.ttf */,
B6F84A95E26241E4B7549034 /* Roboto_medium.ttf */,
CEB49DD2C8EF43D18EF017B5 /* Roboto.ttf */,
53E08F4C2C724DDDBB4D1F8A /* rubicon-icon-font.ttf */,
6E6AFACE6DD74B8D8DE65F9D /* SimpleLineIcons.ttf */,
F16C1C727DA5491FBEBD6DE4 /* Zocial.ttf */,
);
name = Resources;
sourceTree = "<group>";
};
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
);
name = Libraries;
sourceTree = "<group>";
};
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
13B07FAE1A68108700A75B9A /* advanced */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
CC7D0FD6B9611ABC7A660F90 /* Pods */,
80BFD9DB84F945EDBE3A6B57 /* Resources */,
);
indentWidth = 2;
sourceTree = "<group>";
tabWidth = 2;
usesTabs = 0;
};
83CBBA001A601CBA00E9B192 /* Products */ = {
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* advanced.app */,
);
name = Products;
sourceTree = "<group>";
};
CC7D0FD6B9611ABC7A660F90 /* Pods */ = {
isa = PBXGroup;
children = (
8D2F66B2A31434AB475A52FD /* Pods-advanced.debug.xcconfig */,
07B3BF7D3A962BA50396E297 /* Pods-advanced.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
13B07F861A680F5B00A75B9A /* advanced */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "advanced" */;
buildPhases = (
D02BE58F2A994D5543044933 /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
);
buildRules = (
);
dependencies = (
);
name = advanced;
productName = advanced;
productReference = 13B07F961A680F5B00A75B9A /* advanced.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 940;
ORGANIZATIONNAME = Facebook;
TargetAttributes = {
13B07F861A680F5B00A75B9A = {
DevelopmentTeam = 2MANV67FBC;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "advanced" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
English,
en,
Base,
);
mainGroup = 83CBB9F61A601CBA00E9B192;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* advanced */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
13B07F8E1A680F5B00A75B9A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
72EB31C325254DF5B991B84D /* AntDesign.ttf in Resources */,
DFFAF9505B41467784F8C6CB /* Entypo.ttf in Resources */,
783D315FD7684FC8B773B484 /* EvilIcons.ttf in Resources */,
D0B5EF2F6B634AE1A9BBFAD9 /* Feather.ttf in Resources */,
84BE4437EEDB43EAA7FCE6CB /* FontAwesome.ttf in Resources */,
F16629C0F69642AFB3CEB6D0 /* FontAwesome5_Brands.ttf in Resources */,
EA2436BE9CFF4671B3A05D4F /* FontAwesome5_Regular.ttf in Resources */,
A5FAC66B25374E97AB8AD24F /* FontAwesome5_Solid.ttf in Resources */,
B3CD170387DA49C4B9782E8E /* Fontisto.ttf in Resources */,
AEBB31508EBC4C2BA44C8846 /* Foundation.ttf in Resources */,
7BFA53EAC35948EC8D1B4BF3 /* Ionicons.ttf in Resources */,
D6F97B93699645358C8C2C8F /* MaterialCommunityIcons.ttf in Resources */,
062607D0422842D88DF710BA /* MaterialIcons.ttf in Resources */,
62EB96F9E7374AACA02A0A5E /* Octicons.ttf in Resources */,
E4EF985626DE4E3EBAC7C646 /* Roboto_medium.ttf in Resources */,
C94C5AD1867A429AA8ADEF3B /* Roboto.ttf in Resources */,
348421C833E74C5182BCB9DD /* rubicon-icon-font.ttf in Resources */,
094178A82163487B97009578 /* SimpleLineIcons.ttf in Resources */,
DC621F6F5E5B4E13BFC33DF8 /* Zocial.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
};
D02BE58F2A994D5543044933 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-advanced-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "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";
showEnvVarsInLog = 0;
};
FD10A7F022414F080027D42C /* Start Packager */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Start Packager";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "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";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
isa = PBXVariantGroup;
children = (
13B07FB21A68108700A75B9A /* Base */,
);
name = LaunchScreen.xib;
path = advanced;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 8D2F66B2A31434AB475A52FD /* Pods-advanced.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = 2MANV67FBC;
INFOPLIST_FILE = advanced/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = org.reactnative.rncamera.example.advanced;
PRODUCT_NAME = advanced;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 07B3BF7D3A962BA50396E297 /* Pods-advanced.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 2MANV67FBC;
INFOPLIST_FILE = advanced/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = org.reactnative.rncamera.example.advanced;
PRODUCT_NAME = advanced;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
83CBBA201A601CBA00E9B192 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
83CBBA211A601CBA00E9B192 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "advanced" */ = {
isa = XCConfigurationList;
buildConfigurations = (
13B07F941A680F5B00A75B9A /* Debug */,
13B07F951A680F5B00A75B9A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "advanced" */ = {
isa = XCConfigurationList;
buildConfigurations = (
83CBBA201A601CBA00E9B192 /* Debug */,
83CBBA211A601CBA00E9B192 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0940"
version = "1.3">
<BuildAction
parallelizeBuildables = "NO"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192"
BuildableName = "libReact.a"
BlueprintName = "React"
ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "advanced.app"
BlueprintName = "advanced"
ReferencedContainer = "container:advanced.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "advanced.app"
BlueprintName = "advanced"
ReferencedContainer = "container:advanced.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "advanced.app"
BlueprintName = "advanced"
ReferencedContainer = "container:advanced.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "advanced.app"
BlueprintName = "advanced"
ReferencedContainer = "container:advanced.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:advanced.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,15 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <React/RCTBridgeDelegate.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
@property (nonatomic, strong) UIWindow *window;
@end

View File

@ -0,0 +1,42 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import "AppDelegate.h"
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"advanced"
initialProperties:nil];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}
@end

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB">
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<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="8ie-xW-0ye">
<rect key="frame" x="20" y="439" width="441" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="advanced" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
<rect key="frame" x="20" y="140" width="441" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="548" y="455"/>
</view>
</objects>
</document>

View File

@ -0,0 +1,38 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>RNCamera</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
<key>NSCameraUsageDescription</key>
<string>RNCamera needs to access your camera.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSMicrophoneUsageDescription</key>
<string>zInspector needs access to your microphone in order to record videos with sound.</string>
<key>UIAppFonts</key>
<array>
<string>AntDesign.ttf</string>
<string>Entypo.ttf</string>
<string>EvilIcons.ttf</string>
<string>Feather.ttf</string>
<string>FontAwesome.ttf</string>
<string>FontAwesome5_Brands.ttf</string>
<string>FontAwesome5_Regular.ttf</string>
<string>FontAwesome5_Solid.ttf</string>
<string>Fontisto.ttf</string>
<string>Foundation.ttf</string>
<string>Ionicons.ttf</string>
<string>MaterialCommunityIcons.ttf</string>
<string>MaterialIcons.ttf</string>
<string>Octicons.ttf</string>
<string>Roboto_medium.ttf</string>
<string>Roboto.ttf</string>
<string>rubicon-icon-font.ttf</string>
<string>SimpleLineIcons.ttf</string>
<string>Zocial.ttf</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIUserInterfaceStyle</key>
<string>Light</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>

View File

@ -0,0 +1,16 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

View File

@ -0,0 +1,17 @@
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
},
}),
},
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,35 @@
{
"name": "advanced",
"version": "0.0.1",
"private": true,
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"start": "react-native start",
"test": "jest",
"lint": "eslint ."
},
"dependencies": {
"react": "16.11.0",
"react-native": "0.61.4",
"react-navigation": "4.0.10",
"react-navigation-stack": "1.10.3",
"native-base": "2.13.8",
"react-native-gesture-handler": "1.5.0",
"underscore": "1.9.1",
"react-native-camera": "*"
},
"devDependencies": {
"@babel/core": "7.7.2",
"@babel/runtime": "7.7.2",
"@react-native-community/eslint-config": "0.0.5",
"babel-jest": "24.9.0",
"eslint": "6.6.0",
"jest": "24.9.0",
"metro-react-native-babel-preset": "0.56.3",
"react-test-renderer": "16.9.0"
},
"jest": {
"preset": "react-native"
}
}

View File

@ -0,0 +1,73 @@
import conf from 'src/conf';
import React from 'react';
import {
StatusBar,
Text as RNText
} from 'react-native';
import {StyleProvider, Root, Input} from 'native-base';
import {createAppContainer} from "react-navigation";
import { createStackNavigator } from 'react-navigation-stack';
import {routesMap} from 'src/routes';
import MainHeader from 'src/baseComponents/MainHeader';
// Disable text font scaling, it is a mess with native-base
RNText.defaultProps = RNText.defaultProps || {};
RNText.defaultProps.allowFontScaling = false;
RNText.defaultProps.fontSize = conf.theme.variables.DefaultFontSize;
Input.defaultProps = Input.defaultProps || {};
Input.defaultProps.allowFontScaling = false;
Input.defaultProps.fontSize = conf.theme.variables.DefaultFontSize;
// Main stack navigator, used for authenticated routes only.
// Login won't use navigation. If we want further non authenticated screens
// we will need a separate router for it.
const StackNavigator = createStackNavigator (
routesMap,
{
initialRouteName: "Home",
transitionConfig: () => ({
transitionSpec: {
isInteraction: true,
useNativeDriver: true
}
}),
headerMode: 'screen',
defaultNavigationOptions: ({ navigation }) => {
return {
header: props => {
return <MainHeader back={true} title={props.scene.descriptor.options.title} navigation={navigation}/>;
},
gesturesEnabled: false
}
}
}
)
const NavigatorApp = createAppContainer(StackNavigator);
const App = () => {
return (
<StyleProvider style={conf.theme}>
<Root>
<StatusBar
barStyle="light-content"
backgroundColor={conf.theme.variables.statusBarColor}
/>
<NavigatorApp />
</Root>
</StyleProvider>
)
}
export default App;

View File

@ -0,0 +1,44 @@
import React from "react";
import {connectStyle} from "native-base";
import {SafeAreaView, ScrollView} from 'react-native';
import KeyboardShiftView from './KeyboardShiftView';
import conf from 'src/conf';
// Replacement for NB's <Content> Component
// We will assign the same styles, but replace the component
// to use our own keyboard aware component since the one used by native-base is quite outdated
const containerStyle = { flex: 1 };
const contentPadding = conf.theme.variables.contentPadding;
// Copied from native-base source
class Content extends React.Component{
constructor(props) {
super(props);
this.state = {
};
}
render(){
let {style, padder, contentContainerStyle, ...others} = this.props;
return (
<SafeAreaView style={containerStyle}>
<KeyboardShiftView
Component={ScrollView}
style={style}
contentContainerStyle={[
{ padding: padder ? contentPadding : undefined },
contentContainerStyle
]}
{...others}
/>
</SafeAreaView>
)
}
}
const StyledContent = connectStyle('baseComponents.Content')(Content);
export { StyledContent as Content };

View File

@ -0,0 +1,88 @@
import React from "react";
import {connectStyle} from "native-base";
import {View, Dimensions} from 'react-native';
import conf from 'src/conf';
let variables = conf.theme.variables;
// We won't use NativeBase Header component since it interferes with Android's status bar
// So we will just create a View component that acts as header
// and set those styles in the native-base config the same as Header
// Copied from native-base source
class Header extends React.PureComponent{
constructor(props) {
super(props);
let {width, height} = Dimensions.get('window');
this.state = {
isPortrait: width <= height
};
}
calculateHeight() {
let inset = variables.Inset;
const { style } = this.props;
const InsetValues = this.state.isPortrait ? inset.portrait : inset.landscape;
let oldHeight = null;
if (style.height != undefined) {
oldHeight = style.height;
} else if (style[1]) {
oldHeight = style[1].height ? style[1].height : style[0].height;
} else {
oldHeight = style[0].height;
}
let height = oldHeight + InsetValues.topInset;
return height;
}
calculatePadder() {
let inset = variables.Inset;
const InsetValues = this.state.isPortrait ? inset.portrait : inset.landscape;
return InsetValues.topInset;
}
onLayout = (event) => {
let {width, height} = Dimensions.get('window');
let isPortrait = width <= height;
if(isPortrait != this.state.isPortrait){
this.setState({isPortrait: isPortrait});
}
if(this.props.onLayout){
this.props.onLayout(event);
}
}
render(){
let {children, style, ...others} = this.props;
return(
<View
{...others}
onLayout={this.onLayout}
style={[style, {
height: this.calculateHeight(),
paddingTop: this.calculatePadder()
}]}
>
{children}
</View>
)
}
}
Header = connectStyle('baseComponents.Header')(Header);
export {Header};

View File

@ -0,0 +1,339 @@
import React, { Component } from 'react';
import { Keyboard, ScrollView, Platform } from 'react-native';
import {runAfterInteractions} from './utils';
// Component similar to react-native-keyboard-aware-scroll-view
// but made for iOS only with slight modifications for nested support. TODO: Replace react-native-keyboard-aware-scroll-view at some point
// Input fields will be auto scrolled automatically. For multi line, scrollEnabled={false} must be used.
// props:
// Component: FlatList | ScrollView
// extraHeight
// innerRef
const IS_IOS = Platform.OS == 'ios';
const showEvent = IS_IOS ? 'keyboardWillShow' : 'keyboardDidShow';
const hideEvent = IS_IOS ? 'keyboardWillHide' : 'keyboardDidHide';
// using native props to avoid re-renders
class KeyboardShift extends Component {
constructor(props){
super(props);
this.state = {
}
this.scroll = null;
this.lastScroll = null;
}
componentDidMount() {
this.keyboardShowSub = Keyboard.addListener(showEvent, this.handleKeyboardShow);
this.keyboardHideSub = Keyboard.addListener(hideEvent, this.handleKeyboardHide);
this.mounted = true;
}
componentWillUnmount() {
this.mounted = false;
this.lastScroll = null;
this.keyboardShowSub.remove();
this.keyboardHideSub.remove();
if(this.cancelHide){
this.cancelHide();
this.cancelHide = null;
}
if(this.cancelShow){
this.cancelShow();
this.cancelShow = null;
}
}
onLayout = (event) => {
this.layout = event.nativeEvent.layout
}
onScroll = (event) => {
if(event.nativeEvent.contentOffset){
this.lastScroll = event.nativeEvent.contentOffset.y;
}
this.props.onScroll && this.props.onScroll(event);
}
onScrollEndDrag = (event) =>{
// if user manually scrolled, do not restore scroll
this.scroll = null;
this.props.onScrollEndDrag && this.props.onScrollEndDrag(event);
}
setRef = (r) => {
this.ref = r;
if(this.props.innerRef){
this.props.innerRef(r);
}
}
render() {
const { Component, innerRef, onScroll, onScrollEndDrag, keyboardDismissMode, ...rest } = this.props;
return (
<Component
ref={this.setRef}
onLayout={this.onLayout}
keyboardDismissMode={keyboardDismissMode}
automaticallyAdjustContentInsets={false}
scrollEventThrottle={16}
onScroll={this.onScroll}
onScrollEndDrag={this.onScrollEndDrag}
{...rest} />
);
}
scrollTo = (scroll) => {
if(this.ref.scrollToOffset){
this.ref.scrollToOffset({
offset: scroll,
animated: true
})
}
else{
this.ref.scrollTo({
animated: true,
y: scroll
})
}
}
handleKeyboardShow = (event) => {
if(this.cancelHide){
this.cancelHide();
this.cancelHide = null;
}
if(this.cancelShow){
this.cancelShow();
}
// need to give time to other stuff to hide if any
// also set last scroll to 0 if it wasn't defined since we always must scroll on restore
this.scroll = this.lastScroll || (this.lastScroll = 0);
this.cancelShow = runAfterInteractions(()=>{
if(this.layout && this.ref && this.mounted){
const keyboardHeight = event.endCoordinates.height;
//const keyboardPosition = event.endCoordinates.screenY;
let gap = keyboardHeight + this.props.extraHeight;
// inset is also added on timeout so it doesn't look too awkward
this.ref.setNativeProps({contentInset: { bottom: gap }});
this.cancelShow = null;
}
}, 250);
}
handleKeyboardHide = () => {
if(this.cancelHide){
this.cancelHide();
this.cancelHide = null;
}
if(this.cancelShow){
this.cancelShow();
this.cancelShow = null;
}
// only fire this if we actually did something
if(this.lastScroll != null && this.ref){
// update inset right away to remove visible area as soon as possible
this.ref.setNativeProps({contentInset: { bottom: 0 }});
this.cancelHide = runAfterInteractions(()=>{
if(this.ref && this.mounted){
let scroll = this.scroll != null ? this.scroll : this.lastScroll;
this.scroll = null;
if(scroll != null && this.props.enableResetScrollToCoords){
this.scrollTo(scroll + 0.001);
}
this.cancelHide = null;
}
}, 150);
}
}
}
// very similar component with a few differences
// made to work with android's android:windowSoftInputMode="adjustResize"
// other modes *might* might work, but test it.
class KeyboardShiftAndroid extends Component {
constructor(props){
super(props);
this.state = {
}
this.scroll = null;
this.lastScroll = null;
}
componentDidMount() {
// Android events are far more limited
this.keyboardShowSub = Keyboard.addListener(showEvent, this.handleKeyboardShow);
this.keyboardHideSub = Keyboard.addListener(hideEvent, this.handleKeyboardHide);
this.mounted = true;
}
componentWillUnmount() {
this.mounted = false;
this.lastScroll = null;
this.keyboardShowSub.remove();
this.keyboardHideSub.remove();
if(this.cancelHide){
this.cancelHide();
this.cancelHide = null;
}
if(this.cancelShow){
this.cancelShow();
this.cancelShow = null;
}
}
onLayout = (event) => {
this.layout = event.nativeEvent.layout
}
onScroll = (event) => {
if(event.nativeEvent.contentOffset){
// update this with a timeout since scrolling might happen
// before keyboard show event
let scroll = event.nativeEvent.contentOffset.y;
if(this.scrollTimeout){
clearTimeout(this.scrollTimeout);
}
this.scrollTimeout = setTimeout(()=>{
this.lastScroll = scroll;
}, 260); // just a little higher than keyboard show time
}
this.props.onScroll && this.props.onScroll(event);
}
onScrollEndDrag = (event) =>{
// if user manually scrolled, do not restore scroll
this.scroll = null;
this.props.onScrollEndDrag && this.props.onScrollEndDrag(event);
}
setRef = (r) => {
this.ref = r;
if(this.props.innerRef){
this.props.innerRef(r);
}
}
render() {
const { Component, innerRef, onScroll, onScrollEndDrag, ...rest } = this.props;
return (
<Component
ref={this.setRef}
onLayout={this.onLayout}
automaticallyAdjustContentInsets={false}
scrollEventThrottle={16}
onScroll={this.onScroll}
onScrollEndDrag={this.onScrollEndDrag}
{...rest} />
);
}
scrollTo = (scroll) => {
if(this.ref.scrollToOffset){
this.ref.scrollToOffset({
offset: scroll,
animated: true
})
}
else{
this.ref.scrollTo({
animated: true,
y: scroll
})
}
}
// this relies on the fact that keyboard did show
// happens before everything scrolls up due to height changes
handleKeyboardShow = (event) => {
if(this.cancelHide){
this.cancelHide();
this.cancelHide = null;
}
// need to give time to other stuff to hide if any
// also set last scroll to 0 if it wasn't defined since we always must scroll on restore
this.scroll = this.lastScroll || (this.lastScroll = 0);
}
handleKeyboardHide = () => {
if(this.cancelHide){
this.cancelHide();
this.cancelHide = null;
}
// only fire this if we actually did something
if(this.lastScroll != null && this.ref){
this.cancelHide = runAfterInteractions(()=>{
if(this.ref && this.mounted && this.scroll != null && this.props.enableResetScrollToCoords){
this.scrollTo(this.scroll);
this.cancelHide = null;
}
}, 150);
}
}
}
export default class KeyboardShiftView extends React.Component{
render(){
let {Component, extraHeight, innerRef, androidEnabled, ...rest} = this.props;
return IS_IOS ?
<KeyboardShift Component={Component} extraHeight={extraHeight} innerRef={innerRef} {...rest}/>
:
(androidEnabled ? <KeyboardShiftAndroid Component={Component} extraHeight={extraHeight} innerRef={innerRef} {...rest}/> : <Component ref={innerRef} {...rest}/>)
}
}
KeyboardShiftView.defaultProps = {
Component: ScrollView,
extraHeight: 10,
keyboardDismissMode: 'interactive',
enableResetScrollToCoords: true,
keyboardShouldPersistTaps: 'handled',
androidEnabled: true
}

View File

@ -0,0 +1,125 @@
import conf from 'src/conf';
import React from 'react';
import {
BackHandler,
StyleSheet,
} from 'react-native';
import {StyleProvider, Root, Input} from 'native-base';
import {
Button,
Body,
Title,
Left,
Icon,
Right,
connectStyle
} from "native-base";
import {Header} from 'src/baseComponents/Header';
let variables = conf.theme.variables;
const styles = StyleSheet.create({
backButton: {
width: 48 * variables.sizeScaling,
},
backButtonIcon: {
fontSize: variables.iconBackButtonSize
}
});
export class SceneBackHandler extends React.PureComponent{
componentDidMount(){
this.willBlur = this.props.navigation.addListener('willBlur', this.handleBlur);
this.willFocus = this.props.navigation.addListener('willFocus', this.handleFocus);
// also add back handler here if it wasn't set already and we are focused
if(this.props.navigation.isFocused() && !this.backHandler){
this.handleFocus();
}
}
componentWillUnmount(){
this.willBlur && this.willBlur.remove();
this.willFocus && this.willFocus.remove();
// blur not called on component unmount
this.backHandler && this.backHandler.remove();
}
handleFocus = () => {
if(!this.backHandler){
this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.onBackPressAndroid);
}
}
handleBlur = () => {
this.backHandler && this.backHandler.remove();
this.backHandler = null;
}
onBackPressAndroid = () => {
let onExit = this.props.navigation.getParam('onExit', null);
if(onExit){
return onExit(this.props.navigation);
}
}
render(){
return null;
}
}
class MainHeader extends React.PureComponent {
handleBack = () => {
let onExit = this.props.navigation.getParam('onExit', null);
if(onExit){
if(!onExit(this.props.navigation)){
this.props.navigation.goBack(null);
}
}
else{
this.props.navigation.goBack(null);
}
}
render() {
let {transparent, back, headerStyle, title} = this.props;
return (
<Header transparent={transparent} style={headerStyle}>
{back ?
<Left>
<Button
transparent
rounded
onPress={this.handleBack}
style={styles.backButton}
>
<Icon style={styles.backButtonIcon} name="arrow-back" />
</Button>
</Left>
: <Left paddingRight/>}
<Body>
{typeof title === 'string' ? <Title padder>{title}</Title> : title}
</Body>
<Right>
</Right>
<SceneBackHandler navigation={this.props.navigation}/>
</Header>
);
}
}
MainHeader = connectStyle("Branding")(MainHeader);
export default MainHeader;

View File

@ -0,0 +1,47 @@
import React from 'react';
import {View} from 'react-native';
import {
PinchGestureHandler,
State,
} from 'react-native-gesture-handler';
export default class ZoomView extends React.Component {
onGesturePinch = ({ nativeEvent }) => {
this.props.onPinchProgress(nativeEvent.scale);
}
onPinchHandlerStateChange = event => {
if (event.nativeEvent.state === State.END){
this.props.onPinchEnd();
}
else if (event.nativeEvent.oldState === State.BEGAN && event.nativeEvent.state === State.ACTIVE){
this.props.onPinchStart();
}
};
render() {
return (
<PinchGestureHandler
onGestureEvent={this.onGesturePinch}
onHandlerStateChange={this.onPinchHandlerStateChange}
>
<View style={this.props.style}>
{this.props.children}
</View>
</PinchGestureHandler>
);
}
}
ZoomView.defaultProps = {
onPinchProgress: (p) => {},
onPinchStart: () => {},
onPinchEnd: () => {}
}

View File

@ -0,0 +1,97 @@
import {Dimensions, StatusBar, Platform} from 'react-native';
import conf from 'src/conf';
// orientation helper to handle extra spaces needed to layout the camera perfectly
// on various devices
// This coul be a reducer or something if needed globally
const IS_IOS = Platform.OS == 'ios';
const IS_IPHONEX = conf.theme.variables.isIphoneX;
const IPHONE_INSET_TOP = conf.theme.variables.Inset.portrait.topInset;
const IPHONE_INSET_TOP_LANDSCAPE = conf.theme.variables.Inset.landscape.topInset;
const IPHONE_INSET_BOTTOM = conf.theme.variables.Inset.portrait.bottomInset;
const IPHONE_INSET_BOTTOM_LANDSCAPE = conf.theme.variables.Inset.landscape.bottomInset;
export function isLandscape(){
let {width, height} = Dimensions.get('window');
return width > height;
}
// height factor that we need sometimes to consider
// such as status bar height, beause different OS report height
// differently or status bar hides/shows on IOS, or notches.
// insetTop also used to position stuff with absolute position and consider
// status bars and notches based on orientation.
// Try to use this only for absolute positioning, use SafeAreaView otherwise
let getMinusHeight, getInsetTop, getInsetBottom;
if(!IS_IOS){
// on Android, we always have a fixed status bar throught the app
getMinusHeight = (isPortrait) => {
return StatusBar.currentHeight;
}
getInsetTop = (isPortrait) => {
return 0;
}
getInsetBottom = (isPortrait) => {
return 0;
}
}
else{
if(IS_IPHONEX){
getMinusHeight = (isPortrait) => {
return 0;
}
getInsetTop = (isPortrait) => {
return isPortrait ? IPHONE_INSET_TOP : IPHONE_INSET_TOP_LANDSCAPE;
}
getInsetBottom = (isPortrait) => {
return isPortrait ? IPHONE_INSET_BOTTOM : IPHONE_INSET_BOTTOM_LANDSCAPE;
}
}
else{
getMinusHeight = (isPortrait) => {
return 0
}
getInsetTop = (isPortrait) => {
return isPortrait ? IPHONE_INSET_TOP : IPHONE_INSET_TOP_LANDSCAPE;
}
getInsetBottom = (isPortrait) => {
return 0;
}
}
}
export function getOrientation(){
let {width, height} = Dimensions.get('window');
let isLandscape = width > height;
return {
width: width,
height: height,
isLandscape: isLandscape,
isPortrait: !isLandscape,
minusHeight: getMinusHeight(!isLandscape),
insetTop: getInsetTop(!isLandscape),
insetBottom: getInsetBottom(!isLandscape),
}
}
// Hide statusbar on iOS landscape so it is consistent with iOS 13.
Dimensions.addEventListener('change', function(){
// give time to UI to adjust
setTimeout(()=>{
// On Android, always visible since it has a bunch of issues.
StatusBar.setHidden(IS_IOS && isLandscape(), 'none');
}, 100);
});

View File

@ -0,0 +1,41 @@
import React from 'react';
import {InteractionManager} from 'react-native';
import {Spinner, connectStyle} from "native-base";
// helper that calls interaction manager run after interactions
// but with a tiny timeout to also give time to other code to run
// some RN change broke runAfterInteractions in a way that it no longer has a huge delay as it used to
// so we add one here
// returns a cancellable object
export function runAfterInteractions(fun, to=25){
// setTimeout(() => {
// InteractionManager.runAfterInteractions(fun)
// }, to);
let prom = null;
let timeout = setTimeout(() => {
prom = InteractionManager.runAfterInteractions(fun);
}, to);
return () => {
clearTimeout(timeout);
if(prom){
prom.cancel();
prom = null;
}
}
}
class StyledSpinner extends React.PureComponent{
render(){
return <Spinner color={this.props.style.brandPrimary}/>
}
}
StyledSpinner = connectStyle("Branding")(StyledSpinner);
export {StyledSpinner};

View File

@ -0,0 +1,130 @@
import {Dimensions} from 'react-native';
import getTheme from './native-base-theme/components';
import platform from './native-base-theme/variables/platform';
let conf = {};
// Returns the recommended scaling based on screen dimensions
// as a string
const recommendedScaling = () => {
try{
// our guideline will be 375 width, based on iphone 7,8 and Xs
// ideas taken from https://blog.solutotlv.com/size-matters/
const baseWidth = 375;
const factor = 0.3; // resize factor
// Tested Widths in DPI
// 375 -> iphone 7, 8, X, 11 [Pro] (4.7 to 5.8 inches) --> normal, no prompt
// 414 -> iPhone X/Xs/11 Max (6.5 inches) --> normal, no prompt
// 768 -> iPad Pro 9.7 inch (should be the same as ipad mini) --> average, prompt
// 834 -> iPad Pro 11 inch --> large, prompt
// 1024 -> iPad Pro 12.9 inch --> large prompt
let res = "1.0"; // our normal sizing
let {width, height} = Dimensions.get('window');
let value = Math.min(width, height); // just in case the device starts up rotated.
let scale, moderateScale;
if(value != 0){
scale = value / baseWidth;
moderateScale = 1 + (scale - 1) * factor;
// map our ratio to our internal scaling values
if(moderateScale >= 2.5){
res = "2.5";
}
else if(moderateScale <= 0.7){ // should never happen unless using a tiny phone
res = "0.7";
}
else{
res = (Math.round(moderateScale * 10 ) / 10).toFixed(1);
}
}
else{
console.warn("Warning, failed to get device screen ratio for scaling calculations, it was 0.");
}
return res;
}
catch(err){
console.error("CRITICAL: Failed to get recommended scaling", err.message || err)
}
}
// preconfigured, see native-base-theme/variables/platform for more options
// key will be the value of the primary color so we can auto select the others
conf.themes = {
// default: was typical orange, switched to gray. See gray below
'default': {
primaryColor: '#404040',
toolbarColor: '#404040',
brandLight: '#cfd8dc'
},
// red dark
'#d32f2f': {
primaryColor: '#d32f2f',
toolbarColor: '#d32f2f',
brandLight: '#e57373',
brandDanger: '#b71c1c'
},
// super blue light
'#bbdefb': {
primaryColor: '#bbdefb',
toolbarColor: '#bbdefb',
brandLight: '#e4f1fb',
iosStatusbar: 'dark-content',
brandDark: '#d9d9d9',
brandDanger: '#eb7168',
brandSuccess: '#81c784',
brandInfo: '#4fc3f7',
brandWarning: '#fad25c',
brandBlack: '#3c3d3d',
inverseTextColor: '#3c3d3d'
},
// blue dark
'#1976d2': {
primaryColor: '#1976d2',
toolbarColor: '#1976d2',
brandLight: '#64b5f6'
},
// gray
'#404040': {
primaryColor: '#404040',
toolbarColor: '#404040',
brandLight: '#cfd8dc'
},
// black and white
'black': {
primaryColor: 'black',
toolbarColor: 'black',
brandLight: 'white'
},
}
const getAppTheme = (overrides, scaling) => getTheme(platform(overrides, scaling));
const buildTheme = (overrides) => {
return getAppTheme(overrides, sizeScaling);
}
let sizeScaling = parseFloat(recommendedScaling()) || 1;
conf.theme = buildTheme(conf.themes.default);
export default conf;

View File

@ -0,0 +1,52 @@
// @flow
export default (variables) => {
const badgeTheme = {
".primary": {
backgroundColor: variables.buttonPrimaryBg
},
".warning": {
backgroundColor: variables.buttonWarningBg
},
".info": {
backgroundColor: variables.buttonInfoBg
},
".success": {
backgroundColor: variables.buttonSuccessBg
},
".danger": {
backgroundColor: variables.buttonDangerBg
},
"NativeBase.Text": {
color: variables.badgeColor,
fontSize: variables.fontSizeBase,
lineHeight: variables.lineHeight - 1 * variables.sizeScaling,
textAlign: "center",
paddingHorizontal: 3 * variables.sizeScaling
},
'.small': {
paddingHorizontal: 3 * variables.sizeScaling,
height: 20 * variables.sizeScaling,
"NativeBase.Text": {
fontSize: variables.noteFontSize
}
},
'.transparent': {
backgroundColor: 'transparent',
borderRadius: 0,
"NativeBase.Text": {
color: '#000'
}
},
backgroundColor: variables.badgeBg,
padding: variables.badgePadding,
paddingHorizontal: 6 * variables.sizeScaling,
alignSelf: "flex-end",
justifyContent: "center", //variables.platform === "ios" ? "center" : undefined,
borderRadius: 13.5 * variables.sizeScaling,
height: 27 * variables.sizeScaling
};
return badgeTheme;
};

View File

@ -0,0 +1,12 @@
// @flow
export default (variables) => {
const bodyTheme = {
flex: 1,
alignItems: 'center',
alignSelf: 'center'
};
return bodyTheme;
};

View File

@ -0,0 +1,615 @@
// @flow
export default (variables) => {
const platformStyle = variables.platformStyle;
const platform = variables.platform;
const blackCommon = {
"NativeBase.Text": {
color: variables.brandBlack
},
"NativeBase.H1": {
color: variables.brandBlack
},
"NativeBase.H2": {
color: variables.brandBlack
},
"NativeBase.H3": {
color: variables.brandBlack
},
"NativeBase.Icon": {
color: variables.brandBlack
},
"NativeBase.IconNB": {
color: variables.brandBlack
}
};
const blackCommonTransparent = {
"NativeBase.Text": {
color: variables.transparentColor
},
"NativeBase.H1": {
color: variables.transparentColor
},
"NativeBase.H2": {
color: variables.transparentColor
},
"NativeBase.H3": {
color: variables.transparentColor
},
"NativeBase.Icon": {
color: variables.transparentColor
},
"NativeBase.IconNB": {
color: variables.transparentColor
}
};
const darkCommon = {
"NativeBase.Text": {
color: variables.brandDark
},
"NativeBase.H1": {
color: variables.brandDark
},
"NativeBase.H2": {
color: variables.brandDark
},
"NativeBase.H3": {
color: variables.brandDark
},
"NativeBase.Icon": {
color: variables.brandDark
},
"NativeBase.IconNB": {
color: variables.brandDark
}
};
const darkCommonTransparent = {
"NativeBase.Text": {
color: variables.transparentColor
},
"NativeBase.H1": {
color: variables.transparentColor
},
"NativeBase.H2": {
color: variables.transparentColor
},
"NativeBase.H3": {
color: variables.transparentColor
},
"NativeBase.Icon": {
color: variables.transparentColor
},
"NativeBase.IconNB": {
color: variables.transparentColor
}
};
const lightCommon = {
"NativeBase.Text": {
color: variables.brandLight
},
"NativeBase.H1": {
color: variables.brandLight
},
"NativeBase.H2": {
color: variables.brandLight
},
"NativeBase.H3": {
color: variables.brandLight
},
"NativeBase.Icon": {
color: variables.brandLight
},
"NativeBase.IconNB": {
color: variables.brandLight
}
};
const primaryCommon = {
"NativeBase.Text": {
color: variables.buttonPrimaryBg
},
"NativeBase.H1": {
color: variables.buttonPrimaryBg
},
"NativeBase.H2": {
color: variables.buttonPrimaryBg
},
"NativeBase.H3": {
color: variables.buttonPrimaryBg
},
"NativeBase.Icon": {
color: variables.buttonPrimaryBg
},
"NativeBase.IconNB": {
color: variables.buttonPrimaryBg
}
};
const successCommon = {
"NativeBase.Text": {
color: variables.buttonSuccessBg
},
"NativeBase.H1": {
color: variables.buttonSuccessBg
},
"NativeBase.H2": {
color: variables.buttonSuccessBg
},
"NativeBase.H3": {
color: variables.buttonSuccessBg
},
"NativeBase.Icon": {
color: variables.buttonSuccessBg
},
"NativeBase.IconNB": {
color: variables.buttonSuccessBg
}
};
const infoCommon = {
"NativeBase.Text": {
color: variables.buttonInfoBg
},
"NativeBase.H1": {
color: variables.buttonInfoBg
},
"NativeBase.H2": {
color: variables.buttonInfoBg
},
"NativeBase.H3": {
color: variables.buttonInfoBg
},
"NativeBase.Icon": {
color: variables.buttonInfoBg
},
"NativeBase.IconNB": {
color: variables.buttonInfoBg
}
};
const warningCommon = {
"NativeBase.Text": {
color: variables.buttonWarningBg
},
"NativeBase.H1": {
color: variables.buttonWarningBg
},
"NativeBase.H2": {
color: variables.buttonWarningBg
},
"NativeBase.H3": {
color: variables.buttonWarningBg
},
"NativeBase.Icon": {
color: variables.buttonWarningBg
},
"NativeBase.IconNB": {
color: variables.buttonWarningBg
}
};
const dangerCommon = {
"NativeBase.Text": {
color: variables.buttonDangerBg
},
"NativeBase.H1": {
color: variables.buttonDangerBg
},
"NativeBase.H2": {
color: variables.buttonDangerBg
},
"NativeBase.H3": {
color: variables.buttonDangerBg
},
"NativeBase.Icon": {
color: variables.buttonDangerBg
},
"NativeBase.IconNB": {
color: variables.buttonDangerBg
}
};
const buttonTheme = {
".disabled": {
".transparent": {
backgroundColor: 'transparent',
"NativeBase.Text": {
color: variables.buttonDisabledBg
},
"NativeBase.H1": {
color: variables.buttonDisabledBg
},
"NativeBase.H2": {
color: variables.buttonDisabledBg
},
"NativeBase.H3": {
color: variables.buttonDisabledBg
},
"NativeBase.Icon": {
color: variables.buttonDisabledBg
},
"NativeBase.IconNB": {
color: variables.buttonDisabledBg
}
},
"NativeBase.Text": {
color: variables.buttonDisabledText
},
"NativeBase.Icon": {
color: variables.buttonDisabledText
},
"NativeBase.IconNB": {
color: variables.buttonDisabledText
},
backgroundColor: variables.buttonDisabledBg
},
".bordered": {
".black": {
...blackCommon,
backgroundColor: "transparent",
borderColor: variables.brandBlack,
borderWidth: variables.borderWidth
},
".dark": {
...darkCommon,
backgroundColor: "transparent",
borderColor: variables.brandDark,
borderWidth: variables.borderWidth
},
".light": {
...lightCommon,
backgroundColor: "transparent",
borderColor: variables.brandLight,
borderWidth: variables.borderWidth
},
".primary": {
...primaryCommon,
backgroundColor: "transparent",
borderColor: variables.buttonPrimaryBg,
borderWidth: variables.borderWidth
},
".success": {
...successCommon,
backgroundColor: "transparent",
borderColor: variables.buttonSuccessBg,
borderWidth: variables.borderWidth
},
".info": {
...infoCommon,
backgroundColor: "transparent",
borderColor: variables.buttonInfoBg,
borderWidth: variables.borderWidth
},
".warning": {
...warningCommon,
backgroundColor: "transparent",
borderColor: variables.buttonWarningBg,
borderWidth: variables.borderWidth
},
".danger": {
...dangerCommon,
backgroundColor: "transparent",
borderColor: variables.buttonDangerBg,
borderWidth: variables.borderWidth
},
".disabled": {
backgroundColor: 'transparent',
borderColor: variables.buttonDisabledBg,
borderWidth: variables.borderWidth,
"NativeBase.Text": {
color: variables.buttonDisabledBg
}
},
...primaryCommon,
borderWidth: variables.borderWidth,
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowOpacity: null,
shadowRadius: null,
backgroundColor: "transparent"
},
".black": {
".bordered": {
...blackCommon
},
backgroundColor: variables.brandBlack
},
".dark": {
".bordered": {
...darkCommon
},
backgroundColor: variables.brandDark
},
".light": {
".bordered": {
...lightCommon
},
...blackCommon,
backgroundColor: variables.brandLight
},
".primary": {
".bordered": {
...primaryCommon
},
backgroundColor: variables.buttonPrimaryBg
},
".success": {
".bordered": {
...successCommon
},
backgroundColor: variables.buttonSuccessBg
},
".info": {
".bordered": {
...infoCommon
},
backgroundColor: variables.buttonInfoBg
},
".warning": {
".bordered": {
...warningCommon
},
backgroundColor: variables.buttonWarningBg
},
".danger": {
".bordered": {
...dangerCommon
},
backgroundColor: variables.buttonDangerBg
},
".block": {
justifyContent: "center",
alignSelf: "stretch"
},
".full": {
justifyContent: "center",
alignSelf: "stretch",
borderRadius: 0
},
".rounded": {
// paddingHorizontal: variables.buttonPadding + 20,
borderRadius: variables.borderRadiusLarge
},
".transparent": {
backgroundColor: "transparent",
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
...primaryCommon,
".black": {
...blackCommon,
backgroundColor: 'transparent'
},
".dark": {
...darkCommon,
backgroundColor: 'transparent'
},
".danger": {
...dangerCommon,
backgroundColor: 'transparent'
},
".warning": {
...warningCommon,
backgroundColor: 'transparent'
},
".info": {
...infoCommon,
backgroundColor: 'transparent'
},
".primary": {
...primaryCommon,
backgroundColor: 'transparent'
},
".success": {
...successCommon,
backgroundColor: 'transparent'
},
".light": {
...lightCommon,
backgroundColor: 'transparent'
},
".disabled": {
backgroundColor: "transparent",
borderColor: variables.buttonDisabledBg,
borderWidth: variables.borderWidth,
"NativeBase.Text": {
color: variables.buttonDisabledBg
},
"NativeBase.Icon": {
color: variables.buttonDisabledBg
},
"NativeBase.IconNB": {
color: variables.buttonDisabledBg
}
}
},
".small": {
height: 30 * variables.sizeScaling,
minWidth: 30 * variables.sizeScaling,
"NativeBase.Text": {
fontSize: variables.fontSizeSmall
},
"NativeBase.Icon": {
fontSize: 20 * variables.sizeScaling,
paddingTop: 0
},
"NativeBase.IconNB": {
fontSize: 20 * variables.sizeScaling,
paddingTop: 0
},
'.noWidth':{
minWidth: 0
}
},
".large": {
height: 60 * variables.sizeScaling,
minWidth: 60 * variables.sizeScaling,
"NativeBase.Text": {
fontSize: variables.fontSizeLarge,
},
'.noWidth':{
minWidth: 0
}
},
".medium": {
height: 50 * variables.sizeScaling,
minWidth: 50 * variables.sizeScaling,
"NativeBase.Text": {
fontSize: variables.fontSizeMedium,
},
'.noWidth':{
minWidth: 0
}
},
".capitalize": {},
".vertical": {
flexDirection: "column",
height: null
},
"NativeBase.Text": {
fontFamily: variables.buttonFontFamily,
marginLeft: 0,
marginRight: 0,
color: variables.inverseTextColor,
fontSize: variables.buttonTextSize,
paddingHorizontal: 16 * variables.sizeScaling,
backgroundColor: "transparent"
// childPosition: 1
},
"NativeBase.Icon": {
color: variables.inverseTextColor,
fontSize: variables.buttonIconSize,
marginHorizontal: 16 * variables.sizeScaling,
paddingTop: 0
},
"NativeBase.IconNB": {
color: variables.inverseTextColor,
fontSize: variables.buttonIconSize,
marginHorizontal: 16 * variables.sizeScaling,
paddingTop: 0
},
".iconLeft": {
"NativeBase.Text": {
marginLeft: 0
},
"NativeBase.IconNB": {
marginRight: 0,
marginLeft: 16 * variables.sizeScaling
},
"NativeBase.Icon": {
marginRight: 0,
marginLeft: 16 * variables.sizeScaling
}
},
".iconRight": {
"NativeBase.Text": {
marginRight: 0
},
"NativeBase.IconNB": {
marginLeft: 0,
marginRight: 16 * variables.sizeScaling
},
"NativeBase.Icon": {
marginLeft: 0,
marginRight: 16 * variables.sizeScaling
}
},
".picker": {
"NativeBase.Text": {
".note": {
fontSize: variables.noteFontSize,
lineHeight: null
}
}
},
".noSpacing": {
"NativeBase.Text": {
marginHorizontal: 0,
paddingHorizontal: 8 * variables.sizeScaling,
},
"NativeBase.IconNB": {
marginHorizontal: 0,
paddingHorizontal: 8 * variables.sizeScaling,
},
"NativeBase.Icon": {
marginHorizontal: 0,
paddingHorizontal: 8 * variables.sizeScaling,
}
},
paddingVertical: variables.buttonPadding,
paddingHorizontal: 0,
backgroundColor: variables.buttonPrimaryBg,
borderRadius: variables.borderRadiusBase,
borderColor: variables.buttonPrimaryBg,
borderWidth: null,
height: variables.buttonHeight,
minWidth: variables.buttonHeight,
alignSelf: "flex-start",
flexDirection: "row",
elevation: 0,
shadowColor: platformStyle === "material" ? variables.brandBlack : undefined,
shadowOffset:
platformStyle === "material" ? { width: 0, height: 2 } : undefined,
shadowOpacity: platformStyle === "material" ? 0.2 : undefined,
shadowRadius: platformStyle === "material" ? 1.2 : undefined,
alignItems: "center",
justifyContent: "center",
'.leftJustified': {
justifyContent: 'flex-start'
},
'.rightJustified': {
justifyContent: 'flex-end'
},
'.topJustified': {
alignItems: "flex-start",
},
'.noWidth':{
minWidth: 0
},
'.autoHeight': {
height: 'auto'
},
'.selfCenter': {
alignSelf: 'center'
},
'.marginLeft': {
marginLeft: variables.contentPadding
},
'.marginRight': {
marginRight: variables.contentPadding
},
'.marginBottom': {
marginBottom: variables.contentPadding
},
'.flex1': {
flex: 1
}
};
return buttonTheme;
};

View File

@ -0,0 +1,60 @@
// @flow
export default (variables) => {
const cardTheme = {
".transparent": {
shadowColor: null,
shadowOffset: null,
shadowOpacity: null,
shadowRadius: null,
elevation: null,
backgroundColor: "transparent",
borderWidth: 0
},
".noShadow": {
shadowColor: null,
shadowOffset: null,
shadowOpacity: null,
elevation: null
},
".noRadius": {
borderRadius: 0
},
".noRadiusTop": {
borderTopLeftRadius: 0,
borderTopRightRadius: 0
},
".primary": {
borderColor: variables.brandPrimary,
//backgroundColor: variables.brandPrimary,
"NativeBase.CardItem": {
".header": {
backgroundColor: variables.brandPrimary,
borderColor: variables.brandPrimary,
"NativeBase.Text": {
color: variables.inverseTextColor,
},
},
".bordered": {
borderColor: variables.brandPrimary
}
}
},
marginVertical: 5 * variables.sizeScaling,
borderWidth: variables.borderWidth,
borderRadius: variables.cardBorderRadius,
borderColor: variables.cardBorderColor,
flexWrap: "nowrap",
backgroundColor: variables.cardDefaultBg,
shadowColor: "#000",
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.1,
shadowRadius: 1.5,
elevation: 1
};
return cardTheme;
};

View File

@ -0,0 +1,112 @@
// @flow
import { StyleSheet } from "react-native";
export default (variables) => {
const platform = variables.platform;
const cardItemTheme = {
"NativeBase.Left": {
"NativeBase.Body": {
flex: 1,
marginLeft: 10 * variables.sizeScaling,
alignItems: null
},
flex: 0,
flexDirection: "row",
alignItems: "center"
},
".content": {
"NativeBase.Text": {
color: platform === "ios" ? "#555" : "#222",
fontSize: variables.DefaultFontSize - 2 * variables.sizeScaling
}
},
".cardBody": {
padding: -5 * variables.sizeScaling,
"NativeBase.Text": {
marginTop: 5 * variables.sizeScaling
}
},
"NativeBase.Body": {
flex: 1,
alignSelf: "stretch",
alignItems: "flex-start"
},
"NativeBase.Right": {
"NativeBase.Thumbnail": {
alignSelf: null
},
"NativeBase.Image": {
alignSelf: null
},
"NativeBase.Radio": {
alignSelf: null
},
"NativeBase.Checkbox": {
alignSelf: null
},
"NativeBase.Switch": {
alignSelf: null
},
flex: 0
},
".header": {
"NativeBase.Text": {
fontSize: variables.headerFontSize,
fontWeight: platform === "ios" ? "600" : "600"
},
borderTopWidth: 0,
borderBottomWidth: variables.borderWidth,
borderColor: variables.cardBorderColor,
backgroundColor: variables.cardHeaderBg,
borderRadius: variables.cardBorderRadius,
borderBottomLeftRadius: 0,
borderBottomRightRadius: 0,
paddingVertical: variables.cardItemPadding
},
".footer": {
"NativeBase.Text": {
fontSize: variables.headerFontSize,
fontWeight: platform === "ios" ? "600" : "600"
},
borderTopWidth: variables.borderWidth,
borderBottomWidth: 0,
backgroundColor: variables.cardHeaderBg,
borderRadius: variables.cardBorderRadius,
borderTopLeftRadius: 0,
borderTopRightRadius: 0
},
".bordered": {
borderBottomWidth: variables.borderWidth,
borderColor: variables.cardBorderColor
},
'.first': {
borderTopLeftRadius: variables.cardBorderRadius,
borderTopRightRadius: variables.cardBorderRadius
},
'.last': {
borderBottomLeftRadius: variables.cardBorderRadius,
borderBottomRightRadius: variables.cardBorderRadius
},
flexDirection: "row",
alignItems: "center",
padding: variables.cardItemPadding,
paddingVertical: variables.cardItemPadding,
//backgroundColor: variables.cardDefaultBg,
".noPadding": {
paddingHorizontal: 0
},
".noRadius": {
borderRadius: 0
},
'.noBorder': {
borderWidth: 0,
},
};
return cardItemTheme;
};

View File

@ -0,0 +1,37 @@
// @flow
export default (variables) => {
const checkBoxTheme = {
".checked": {
"NativeBase.Icon": {
color: variables.checkboxTickColor
},
"NativeBase.IconNB": {
color: variables.checkboxTickColor
}
},
"NativeBase.Icon": {
color: "transparent",
lineHeight: variables.CheckboxIconSize,
marginTop: variables.CheckboxIconMarginTop,
fontSize: variables.CheckboxFontSize
},
"NativeBase.IconNB": {
color: "transparent",
lineHeight: variables.CheckboxIconSize,
marginTop: variables.CheckboxIconMarginTop,
fontSize: variables.CheckboxFontSize
},
borderRadius: variables.CheckboxRadius,
overflow: "hidden",
width: variables.checkboxSize,
height: variables.checkboxSize,
borderWidth: variables.CheckboxBorderWidth,
paddingLeft: variables.CheckboxPaddingLeft - 1 * variables.sizeScaling,
paddingBottom: variables.CheckboxPaddingBottom
};
return checkBoxTheme;
};

View File

@ -0,0 +1,28 @@
// @flow
import { Platform, Dimensions } from "react-native";
const deviceHeight = Dimensions.get("window").height;
export default (variables) => {
const theme = {
flex: 1,
//height: Platform.OS === "ios" ? deviceHeight : deviceHeight - 120,
backgroundColor: variables.containerBgColor,
'.toolbarColor': {
backgroundColor: variables.toolbarDefaultBg
},
'.transparent': {
backgroundColor: 'transparent'
},
'.semiTransparent': {
backgroundColor: 'rgba(0,0,0, 0.9)'
},
'.fullBlack': {
backgroundColor: 'black'
}
};
return theme;
};

View File

@ -0,0 +1,22 @@
// @flow
export default (variables) => {
const contentTheme = {
flex: 1,
backgroundColor: 'transparent',
'.colored': {
backgroundColor: variables.containerBgColor,
},
'.semiTransparent': {
backgroundColor: 'rgba(0,0,0, 0.9)'
},
"NativeBase.Segment": {
borderWidth: 0,
backgroundColor: "transparent"
}
};
return contentTheme;
};

View File

@ -0,0 +1,29 @@
// @flow
export default (variables) => {
const platform = variables.platform;
const fabTheme = {
"NativeBase.Button": {
alignItems: "center",
padding: null,
justifyContent: "center",
"NativeBase.Icon": {
alignSelf: "center",
fontSize: 20 * variables.sizeScaling,
marginLeft: 0,
marginRight: 0,
},
"NativeBase.IconNB": {
alignSelf: "center",
fontSize: 20 * variables.sizeScaling,
marginLeft: 0,
marginRight: 0,
},
},
};
return fabTheme;
};

View File

@ -0,0 +1,129 @@
// @flow
export default (variables) => {
const platformStyle = variables.platformStyle;
const platform = variables.platform;
const iconCommon = {
"NativeBase.Icon": {
color: variables.tabBarActiveTextColor
}
};
const iconNBCommon = {
"NativeBase.IconNB": {
color: variables.tabBarActiveTextColor
}
};
const textCommon = {
"NativeBase.Text": {
color: variables.tabBarActiveTextColor
}
};
const footerTheme = {
"NativeBase.Left": {
"NativeBase.Button": {
".transparent": {
backgroundColor: "transparent",
borderColor: null,
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
...iconCommon,
...iconNBCommon,
...textCommon
},
alignSelf: null,
...iconCommon,
...iconNBCommon,
// ...textCommon
},
flex: 1,
alignSelf: "center",
alignItems: "flex-start"
},
"NativeBase.Body": {
flex: 1,
alignItems: "center",
alignSelf: "center",
flexDirection: "row",
"NativeBase.Button": {
alignSelf: "center",
".transparent": {
backgroundColor: "transparent",
borderColor: null,
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
...iconCommon,
...iconNBCommon,
...textCommon
},
".full": {
height: variables.footerHeight,
paddingBottom: variables.footerPaddingBottom,
flex: 1
},
...iconCommon,
...iconNBCommon,
// ...textCommon
}
},
"NativeBase.Right": {
"NativeBase.Button": {
".transparent": {
backgroundColor: "transparent",
borderColor: null,
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
...iconCommon,
...iconNBCommon,
...textCommon
},
alignSelf: null,
...iconCommon,
...iconNBCommon,
// ...textCommon
},
flex: 1,
alignSelf: "center",
alignItems: "flex-end"
},
backgroundColor: variables.footerDefaultBg,
flexDirection: "row",
justifyContent: "center",
borderTopWidth: undefined,
// platform === "ios" && platformStyle !== "material"
// ? variables.borderWidth
// : undefined,
borderColor: undefined,
// platform === "ios" && platformStyle !== "material"
// ? "#cbcbcb"
// : undefined,
height: variables.footerHeight,
paddingBottom: variables.footerPaddingBottom,
elevation: 3,
left: 0,
right: 0,
'.landscape': {
position: 'absolute',
top: 0,
// right: !variables.isIphoneX ? 0 : null,
// left: !variables.isIphoneX ? null : 0,
right: 0,
left: null,
height: !variables.isIphoneX ? '100%' : Math.min(variables.deviceWidth, variables.deviceHeight),
width: variables.footerWidth,
}
};
return footerTheme;
};

View File

@ -0,0 +1,112 @@
// @flow
import { Platform } from "react-native";
export default (variables) => {
const platform = variables.platform;
const nativeBaseButton = {
".active": {
"NativeBase.Text": {
color: variables.tabBarActiveTextColor,
fontSize: variables.tabBarTextSize,
lineHeight: 16 * variables.sizeScaling
},
"NativeBase.Icon": {
color: variables.tabBarActiveTextColor
},
"NativeBase.IconNB": {
color: variables.tabBarActiveTextColor
},
backgroundColor: variables.tabActiveBgColor
},
".transparent": {
"NativeBase.Text": {
color: variables.tabBarTextColor,
},
"NativeBase.H1": {
color: variables.tabBarTextColor,
},
"NativeBase.H2": {
color: variables.tabBarTextColor,
},
"NativeBase.H3": {
color: variables.tabBarTextColor,
},
"NativeBase.Icon": {
color: variables.tabBarTextColor
},
"NativeBase.IconNB": {
color: variables.tabBarTextColor
}
},
flexDirection: null,
backgroundColor: "transparent",
borderColor: null,
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
alignSelf: "center",
flex: 1,
height: variables.footerHeight - 5 * variables.sizeScaling,
justifyContent: "center",
".badge": {
"NativeBase.Badge": {
"NativeBase.Text": {
fontSize: 11 * variables.sizeScaling,
fontWeight: platform === "ios" ? "600" : "600",
lineHeight: 14 * variables.sizeScaling
},
top: -3,
alignSelf: "center",
left: 10,
zIndex: 99,
height: 18 * variables.sizeScaling,
padding: 1.7 * variables.sizeScaling,
paddingHorizontal: 3 * variables.sizeScaling
},
"NativeBase.Icon": {
marginTop: -18 * variables.sizeScaling
}
},
"NativeBase.Icon": {
color: variables.tabBarTextColor
},
"NativeBase.IconNB": {
color: variables.tabBarTextColor
},
"NativeBase.Text": {
color: variables.tabBarTextColor,
fontSize: variables.tabBarTextSize,
lineHeight: 16 * variables.sizeScaling
}
}
const footerTabTheme = {
"NativeBase.Button": nativeBaseButton,
backgroundColor: Platform.OS === "android"
? variables.footerDefaultBg
: undefined,
flexDirection: "row",
justifyContent: "space-between",
flex: 1,
alignSelf: "stretch",
'.landscape': {
flexDirection: 'column',
marginTop: variables.platform === 'ios' ? 15 : 0, // do not scale this one
// gotta override these too
"NativeBase.Button": Object.assign({}, nativeBaseButton, {
width: '100%',
margin: 0,
})
}
};
return footerTabTheme;
};

View File

@ -0,0 +1,90 @@
// @flow
export default (variables) => {
const platform = variables.platform;
const theme = {
"NativeBase.Item": {
".fixedLabel": {
"NativeBase.Label": {
paddingLeft: null
},
marginLeft: 15 * variables.sizeScaling
},
".inlineLabel": {
"NativeBase.Label": {
paddingLeft: null
},
marginLeft: 15 * variables.sizeScaling
},
".placeholderLabel": {
"NativeBase.Input": {}
},
".stackedLabel": {
"NativeBase.Label": {
top: 5,
paddingLeft: null
},
"NativeBase.Input": {
paddingLeft: null,
marginLeft: null
},
"NativeBase.Icon": {
marginTop: 36 * variables.sizeScaling
},
marginLeft: 15 * variables.sizeScaling
},
".floatingLabel": {
"NativeBase.Input": {
paddingLeft: null,
top: 10,
marginLeft: null
},
"NativeBase.Label": {
left: 0,
top: 6
},
"NativeBase.Icon": {
top: 6
},
marginTop: 15 * variables.sizeScaling,
marginLeft: 15 * variables.sizeScaling
},
".regular": {
"NativeBase.Label": {
left: 0
},
marginLeft: 0
},
".rounded": {
"NativeBase.Label": {
left: 0
},
marginLeft: 0
},
".underline": {
"NativeBase.Label": {
left: 0,
top: 0,
position: "relative"
},
"NativeBase.Input": {
left: -15 * variables.sizeScaling
},
marginLeft: 15 * variables.sizeScaling
},
".last": {
marginLeft: 0,
paddingLeft: 15 * variables.sizeScaling
},
"NativeBase.Label": {
paddingRight: 5 * variables.sizeScaling
},
marginLeft: 15 * variables.sizeScaling
}
};
return theme;
};

View File

@ -0,0 +1,37 @@
// @flow
export default (variables) => {
const h1Theme = {
color: variables.textColor,
fontSize: variables.fontSizeH1,
lineHeight: variables.lineHeightH1,
'.transparent': {
color: variables.transparentColor
},
'.inverse': {
color: variables.inverseTextColor,
},
'.dark': {
color: variables.brandDark
},
'.black': {
color: variables.brandBlack
},
'.light':{
color: variables.brandLight
},
'.danger':{
color: variables.brandDanger
},
'.success':{
color: variables.brandSuccess
},
".block": {
width: '100%'
},
};
return h1Theme;
};

View File

@ -0,0 +1,37 @@
// @flow
export default (variables) => {
const h2Theme = {
color: variables.textColor,
fontSize: variables.fontSizeH2,
lineHeight: variables.lineHeightH2,
'.transparent': {
color: variables.transparentColor
},
'.inverse': {
color: variables.inverseTextColor,
},
'.dark': {
color: variables.brandDark
},
'.black': {
color: variables.brandBlack
},
'.light':{
color: variables.brandLight
},
'.danger':{
color: variables.brandDanger
},
'.success':{
color: variables.brandSuccess
},
".block": {
width: '100%'
},
};
return h2Theme;
};

View File

@ -0,0 +1,37 @@
// @flow
export default (variables) => {
const h3Theme = {
color: variables.textColor,
fontSize: variables.fontSizeH3,
lineHeight: variables.lineHeightH3,
'.transparent': {
color: variables.transparentColor
},
'.inverse': {
color: variables.inverseTextColor,
},
'.dark': {
color: variables.brandDark
},
'.black': {
color: variables.brandBlack
},
'.light':{
color: variables.brandLight
},
'.danger':{
color: variables.brandDanger
},
'.success':{
color: variables.brandSuccess
},
".block": {
width: '100%'
},
};
return h3Theme;
};

View File

@ -0,0 +1,381 @@
import { PixelRatio, StatusBar } from "react-native";
export default (variables) => {
const platformStyle = variables.platformStyle;
const platform = variables.platform;
const textStyle = {
color: variables.toolbarBtnTextColor,
top: 0,
paddingHorizontal: 8 * variables.sizeScaling,
'.transparent': {
color: variables.toolbarBtnTextColor,
}
}
const titleStyle = {
color: variables.toolbarBtnTextColor,
'.transparent': {
color: variables.toolbarBtnTextColor,
}
}
const transparentTextStyle = {
color: variables.transparentColor,
'.transparent': {
color: variables.transparentColor
}
}
const iconStyle = {
color: variables.toolbarBtnTextColor,
fontSize: variables.iconHeaderSize,
marginTop: 0,
marginHorizontal: 8 * variables.sizeScaling,
paddingTop: 1 * variables.sizeScaling,
'.transparent': {
color: variables.toolbarBtnTextColor,
}
}
const transparentIconStyle = {
color: variables.transparentColor,
'.transparent': {
color: variables.transparentColor
}
}
const buttonStyle = {
".transparent": {
backgroundColor: "transparent",
borderColor: null,
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
"NativeBase.Icon": {
color: variables.toolbarBtnTextColor,
'.transparent': {
color: variables.toolbarBtnTextColor,
}
},
"NativeBase.IconNB": {
color: variables.toolbarBtnTextColor,
'.transparent': {
color: variables.toolbarBtnTextColor,
}
},
"NativeBase.Text": {
color: variables.toolbarBtnTextColor,
'.transparent': {
color: variables.toolbarBtnTextColor,
}
}
},
"NativeBase.Icon": iconStyle,
"NativeBase.IconNB": iconStyle,
"NativeBase.Text": textStyle,
".noSpacing": {
"NativeBase.Text": {
marginHorizontal: 0,
paddingHorizontal: 8 * variables.sizeScaling,
},
"NativeBase.IconNB": {
marginHorizontal: 0,
paddingHorizontal: 8 * variables.sizeScaling,
},
"NativeBase.Icon": {
marginHorizontal: 0,
paddingHorizontal: 8 * variables.sizeScaling,
},
minWidth: 38 * variables.sizeScaling,
},
alignSelf: null
}
const transparentButton = {
backgroundColor: "transparent",
borderColor: null,
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
".transparent": {
"NativeBase.Icon": transparentIconStyle,
"NativeBase.IconNB": transparentIconStyle,
"NativeBase.Text": transparentTextStyle
},
"NativeBase.Icon": transparentIconStyle,
"NativeBase.IconNB": transparentIconStyle,
"NativeBase.Text": transparentTextStyle
}
const headerTheme = {
".span": {
height: 128 * variables.sizeScaling,
"NativeBase.Left": {
alignSelf: "flex-start"
},
"NativeBase.Body": {
alignSelf: "flex-end",
alignItems: "flex-start",
justifyContent: "center",
paddingBottom: 26 * variables.sizeScaling
},
"NativeBase.Right": {
alignSelf: "flex-start"
}
},
".hasSubtitle": {
"NativeBase.Body": {
"NativeBase.Title": {
fontSize: variables.titleFontSize - 2 * variables.sizeScaling,
fontFamily: variables.titleFontfamily,
textAlign: "center",
fontWeight: "500",
paddingBottom: 3 * variables.sizeScaling
},
"NativeBase.Subtitle": {
fontSize: variables.subTitleFontSize,
fontFamily: variables.titleFontfamily,
color: variables.subtitleColor,
textAlign: "center"
}
}
},
".noShadow": {
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null
},
".hasTabs": {
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
borderBottomWidth: null
},
".hasSegment": {
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
borderBottomWidth: null,
"NativeBase.Left": {
flex: 0.3
},
"NativeBase.Right": {
flex: 0.3
},
"NativeBase.Body": {
flex: 1,
"NativeBase.Segment": {
marginRight: 0,
alignSelf: "center",
"NativeBase.Button": {
paddingLeft: 0,
paddingRight: 0
}
}
}
},
".noLeft": {
"NativeBase.Left": {
width: platform === "ios" ? undefined : 0,
flex: platform === "ios" ? 1 : 0
},
"NativeBase.Body": {
"NativeBase.Title": {
paddingLeft: platform === "ios" ? undefined : (10 * variables.sizeScaling)
},
"NativeBase.Subtitle": {
paddingLeft: platform === "ios" ? undefined : (10 * variables.sizeScaling)
}
}
},
".searchBar": {
"NativeBase.Item": {
"NativeBase.Icon": {
backgroundColor: "transparent",
color: variables.dropdownLinkColor,
fontSize: variables.toolbarSearchIconSize,
alignItems: "center",
marginTop: 2 * variables.sizeScaling,
paddingRight: 10 * variables.sizeScaling,
paddingLeft: 10 * variables.sizeScaling
},
"NativeBase.IconNB": {
backgroundColor: "transparent",
color: null,
alignSelf: "center"
},
"NativeBase.Input": {
alignSelf: "center",
lineHeight: null,
height: variables.searchBarInputHeight
},
alignSelf: "center",
alignItems: "center",
justifyContent: "flex-start",
flex: 1,
height: variables.searchBarHeight,
borderColor: "transparent",
backgroundColor: variables.toolbarInputColor
},
"NativeBase.Button": {
".transparent": {
paddingLeft: platform === "ios" ? (10 * variables.sizeScaling) : null
},
width: platform === "ios" ? undefined : 0,
height: platform === "ios" ? undefined : 0
}
},
".rounded": {
"NativeBase.Item": {
borderRadius: (platform === "ios" && platformStyle !== "material" ? 25 : 3) * variables.sizeScaling
}
},
"NativeBase.Left": {
"NativeBase.Button": buttonStyle,
"NativeBase.Text": textStyle,
"NativeBase.Title": titleStyle,
"NativeBase.Icon": iconStyle,
"NativeBase.IconNB": iconStyle,
flex: 0,
alignSelf: "center",
alignItems: "flex-start",
'.paddingRight': {
paddingRight: variables.contentPadding
},
'.paddingLeft': {
paddingLeft: variables.contentPadding
}
},
"NativeBase.Body": {
"NativeBase.Button": buttonStyle,
"NativeBase.Text": textStyle,
"NativeBase.Title": titleStyle,
"NativeBase.Icon": iconStyle,
"NativeBase.IconNB": iconStyle,
"NativeBase.Segment": {
borderWidth: 0,
alignSelf: "flex-end",
marginRight: (platform === "ios" ? -40 : -55) * variables.sizeScaling
},
flex: 1,
alignItems: 'flex-start',
alignSelf: "center",
'.paddingRight': {
paddingRight: variables.contentPadding
},
'.paddingLeft': {
paddingLeft: variables.contentPadding
}
},
"NativeBase.Right": {
"NativeBase.Button": buttonStyle,
"NativeBase.Text": textStyle,
"NativeBase.Title": titleStyle,
"NativeBase.Icon": iconStyle,
"NativeBase.IconNB": iconStyle,
flex: 0,
alignSelf: "center",
alignItems: "flex-end",
flexDirection: "row",
justifyContent: "flex-end",
'.paddingRight': {
paddingRight: variables.contentPadding
},
'.paddingLeft': {
paddingLeft: variables.contentPadding
}
},
backgroundColor: variables.toolbarDefaultBg,
flexDirection: "row",
paddingLeft: 0, //platform === "ios" && variables.platformStyle !== "material" ? 6 : 10,
paddingRight: 0,
justifyContent: "center",
paddingTop: 0, // Header component will handle paddings.
borderBottomWidth:
platform === "ios" ? variables.borderWidth : 0,
borderBottomColor: variables.toolbarDefaultBorder,
height: variables.toolbarHeight,
elevation: 3,
shadowColor: platformStyle === "material" ? "#000" : undefined,
shadowOffset:
platformStyle === "material" ? { width: 0, height: 2 } : undefined,
shadowOpacity: platformStyle === "material" ? 0.2 : undefined,
shadowRadius: platformStyle === "material" ? 1.2 : undefined,
top: 0,
left: 0,
right: 0,
zIndex: 100,
'.noPadding': {
paddingLeft: 0,
paddingRight: 0
},
".transparent": {
backgroundColor: "rgba(0,0,0,0.4)",
borderBottomColor: "transparent",
elevation: 0,
shadowColor: null,
shadowOffset: null,
shadowRadius: null,
shadowOpacity: null,
"NativeBase.Button": transparentButton,
"NativeBase.Text": transparentTextStyle,
"NativeBase.Title": transparentTextStyle,
"NativeBase.Icon": transparentIconStyle,
"NativeBase.IconNB": transparentIconStyle,
"NativeBase.Left": {
"NativeBase.Button": transparentButton,
"NativeBase.Text": transparentTextStyle,
"NativeBase.Title": transparentTextStyle,
"NativeBase.Icon": transparentIconStyle,
"NativeBase.IconNB": transparentIconStyle,
},
"NativeBase.Body": {
"NativeBase.Button": transparentButton,
"NativeBase.Text": transparentTextStyle,
"NativeBase.Title": transparentTextStyle,
"NativeBase.Icon": transparentIconStyle,
"NativeBase.IconNB": transparentIconStyle,
},
"NativeBase.Right": {
"NativeBase.Button": transparentButton,
"NativeBase.Text": transparentTextStyle,
"NativeBase.Title": transparentTextStyle,
"NativeBase.Icon": transparentIconStyle,
"NativeBase.IconNB": transparentIconStyle,
},
}
};
return headerTheme;
};

View File

@ -0,0 +1,58 @@
// @flow
export default (variables) => {
const iconTheme = {
fontSize: variables.iconFontSize,
color: variables.textColor,
'.transparent': {
color: variables.transparentColor
},
'.inverse': {
color: variables.inverseTextColor,
},
'.dark': {
color: variables.brandDark
},
'.black': {
color: variables.brandBlack
},
'.light':{
color: variables.brandLight
},
'.danger':{
color: variables.brandDanger
},
'.success':{
color: variables.brandSuccess
},
".warning": {
color: variables.brandWarning
},
'.brandInfo': {
color: variables.brandInfo
},
'.noMargin':{
marginHorizontal: 0,
},
'.noMarginLeft':{
marginLeft: 0
},
'.noMarginRight':{
marginRight: 0
},
'.normal': {
fontSize: variables.iconFontSize
},
'.small': {
fontSize: variables.iconFontSize - 10 * variables.sizeScaling,
},
'.large': {
fontSize: variables.iconFontSize + 5 * variables.sizeScaling,
}
};
return iconTheme;
};

Some files were not shown because too many files have changed in this diff Show More