├── .buckconfig ├── .flowconfig ├── .gitignore ├── .watchmanconfig ├── README.md ├── android ├── app │ ├── BUCK │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ ├── index.android.bundle │ │ ├── index.android.bundle.meta │ │ └── index.android.map │ │ ├── java │ │ └── com │ │ │ └── designer │ │ │ ├── MainActivity.java │ │ │ └── MainApplication.java │ │ └── res │ │ ├── drawable-hdpi │ │ └── node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png │ │ ├── drawable-mdpi │ │ └── node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png │ │ ├── drawable-xhdpi │ │ └── node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png │ │ ├── drawable-xxhdpi │ │ └── node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png │ │ ├── drawable-xxxhdpi │ │ └── node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ └── values │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── keystores │ ├── BUCK │ └── debug.keystore.properties └── settings.gradle ├── comment ├── Behance │ ├── ProjectsDetail.js │ └── ProjectsList.js ├── CommentItem.js ├── Dribbble │ ├── ShotCell.js │ ├── ShotDetails.js │ └── ShotList.js ├── FacebookTabBar.js ├── Player.js ├── Scrollable.js ├── api.js └── getImage.js ├── index.android.js ├── index.ios.js ├── ios ├── Designer.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── Designer.xcscheme ├── Designer │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Base.lproj │ │ └── LaunchScreen.xib │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon-29-ipad.png │ │ │ ├── icon-29.png │ │ │ ├── icon-29@2x-ipad.png │ │ │ ├── icon-29@2x.png │ │ │ ├── icon-29@3x.png │ │ │ ├── icon-40.png │ │ │ ├── icon-40@2x.png │ │ │ ├── icon-40@3x.png │ │ │ ├── icon-50.png │ │ │ ├── icon-50@2x.png │ │ │ ├── icon-57.png │ │ │ ├── icon-57@2x.png │ │ │ ├── icon-60@2x.png │ │ │ ├── icon-60@3x.png │ │ │ ├── icon-72.png │ │ │ ├── icon-72@2x.png │ │ │ ├── icon-76.png │ │ │ ├── icon-76@2x.png │ │ │ └── icon-83.5@2x.png │ │ ├── Contents.json │ │ └── iTunesArtwork.imageset │ │ │ ├── Contents.json │ │ │ ├── iTunesArtwork.png │ │ │ └── iTunesArtwork@2x.png │ ├── Info.plist │ └── main.m ├── DesignerTests │ ├── DesignerTests.m │ └── Info.plist └── Fonts │ ├── Entypo.ttf │ ├── EvilIcons.ttf │ ├── FontAwesome.ttf │ ├── Foundation.ttf │ ├── Ionicons.ttf │ ├── MaterialIcons.ttf │ ├── Octicons.ttf │ └── Zocial.ttf └── package.json /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | 3 | # We fork some components by platform. 4 | .*/*.android.js 5 | 6 | # Ignore templates with `@flow` in header 7 | .*/local-cli/generator.* 8 | 9 | # Ignore malformed json 10 | .*/node_modules/y18n/test/.*\.json 11 | 12 | # Ignore the website subdir 13 | /website/.* 14 | 15 | # Ignore BUCK generated dirs 16 | /\.buckd/ 17 | 18 | # Ignore unexpected extra @providesModule 19 | .*/node_modules/commoner/test/source/widget/share.js 20 | 21 | # Ignore duplicate module providers 22 | # For RN Apps installed via npm, "Libraries" folder is inside node_modules/react-native but in the source repo it is in the root 23 | .*/Libraries/react-native/React.js 24 | .*/Libraries/react-native/ReactNative.js 25 | .*/node_modules/jest-runtime/build/__tests__/.* 26 | 27 | [include] 28 | 29 | [libs] 30 | node_modules/react-native/Libraries/react-native/react-native-interface.js 31 | node_modules/react-native/flow 32 | flow/ 33 | 34 | [options] 35 | module.system=haste 36 | 37 | esproposal.class_static_fields=enable 38 | esproposal.class_instance_fields=enable 39 | 40 | experimental.strict_type_args=true 41 | 42 | munge_underscores=true 43 | 44 | module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' 45 | 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\)$' -> 'RelativeImageStub' 46 | 47 | suppress_type=$FlowIssue 48 | suppress_type=$FlowFixMe 49 | suppress_type=$FixMe 50 | 51 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-9]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 52 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(2[0-9]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ 53 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 54 | 55 | unsafe.enable_getters_and_setters=true 56 | 57 | [version] 58 | ^0.29.0 59 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IJ 26 | # 27 | *.iml 28 | .idea 29 | .gradle 30 | local.properties 31 | 32 | # node.js 33 | # 34 | node_modules/ 35 | npm-debug.log 36 | 37 | # BUCK 38 | buck-out/ 39 | \.buckd/ 40 | android/app/libs 41 | android/keystores/debug.keystore 42 | -------------------------------------------------------------------------------- /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-native-design-captures 2 | 3 | Design Captures is an lightweight Android client for browse Dribbble and Behance\\\'s shots/projects. 4 | 5 | ###iOS: 6 | 7 | ![](http://firimg.fir.im/95c32aef8b8c10d1c91cc662d721e6c599b8bcfd?imageView2/0/w/426/h/240) 8 | ![](http://firimg.fir.im/ec1ac081d81069865341e8f11e6b79166c60d5ab?imageView2/0/w/426/h/240) 9 | ![](http://firimg.fir.im/6bf056317791e6f5ea1238a804532ef02b8aa1f4?imageView2/0/w/426/h/240) 10 | 11 | 12 | ###Android: 13 | 14 | ![](http://pp.myapp.com/ma_pic2/0/shot_42388181_2_1479453949/550) 15 | ![](http://pp.myapp.com/ma_pic2/0/shot_42388181_1_1479453949/550) 16 | 17 | ###Preview: 18 | 19 | https://www.youtube.com/watch?v=WeZ2-scoZCM 20 | 21 | 22 | ###Download QR: 23 | 24 | ![](http://ww3.sinaimg.cn/large/65e4f1e6gw1f9yrenncbjj207s07sdgp.jpg) 25 | 26 | Plugins used: 27 | - "react": "15.2.1", 28 | - "react-native": "0.31.0", 29 | - "react-native-animated-segmented-control": "0.0.1", 30 | - "react-native-button": "^1.7.0", 31 | - "react-native-gifted-listview": "0.0.15", 32 | - "react-native-htmlview": "^0.5.0", 33 | - "react-native-image-progress": "^0.6.0", 34 | - "react-native-modal": "^0.4.0", 35 | - "react-native-modalbox": "^1.3.7", 36 | - "react-native-parallax-view": "^2.0.5", 37 | - "react-native-photo-view": "^1.0.1", 38 | - "react-native-progress": "^3.1.0", 39 | - "react-native-radio-buttons": "^0.13.0", 40 | - "react-native-scrollable-tab-view": "^0.6.0", 41 | - "react-native-vector-icons": "^2.1.0", 42 | - "react-tween-state": "0.0.5" 43 | 44 | ####How to run it locally 45 | 46 | - Clone this repo `git@github.com:xayoung/react-native-design-captures.git` 47 | - `cd react-native-design-captures` 48 | - run `npm install` 49 | 50 | iOS: 51 | - Open `Designer.xcodeproj` in `XCode` 52 | - Press `cmd+r` to build it 53 | 54 | Android: 55 | - run `react-native run-android` 56 | 57 | ## License 58 | MIT 59 | -------------------------------------------------------------------------------- /android/app/BUCK: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | # To learn about Buck see [Docs](https://buckbuild.com/). 4 | # To run your application with Buck: 5 | # - install Buck 6 | # - `npm start` - to start the packager 7 | # - `cd android` 8 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 9 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 10 | # - `buck install -r android/app` - compile, install and run application 11 | # 12 | 13 | lib_deps = [] 14 | for jarfile in glob(['libs/*.jar']): 15 | name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) 16 | lib_deps.append(':' + name) 17 | prebuilt_jar( 18 | name = name, 19 | binary_jar = jarfile, 20 | ) 21 | 22 | for aarfile in glob(['libs/*.aar']): 23 | name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) 24 | lib_deps.append(':' + name) 25 | android_prebuilt_aar( 26 | name = name, 27 | aar = aarfile, 28 | ) 29 | 30 | android_library( 31 | name = 'all-libs', 32 | exported_deps = lib_deps 33 | ) 34 | 35 | android_library( 36 | name = 'app-code', 37 | srcs = glob([ 38 | 'src/main/java/**/*.java', 39 | ]), 40 | deps = [ 41 | ':all-libs', 42 | ':build_config', 43 | ':res', 44 | ], 45 | ) 46 | 47 | android_build_config( 48 | name = 'build_config', 49 | package = 'com.designer', 50 | ) 51 | 52 | android_resource( 53 | name = 'res', 54 | res = 'src/main/res', 55 | package = 'com.designer', 56 | ) 57 | 58 | android_binary( 59 | name = 'app', 60 | package_type = 'debug', 61 | manifest = 'src/main/AndroidManifest.xml', 62 | keystore = '//android/keystores:debug', 63 | deps = [ 64 | ':app-code', 65 | ], 66 | ) 67 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.application" 2 | 3 | import com.android.build.OutputFile 4 | 5 | /** 6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets 7 | * and bundleReleaseJsAndAssets). 8 | * These basically call `react-native bundle` with the correct arguments during the Android build 9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the 10 | * bundle directly from the development server. Below you can see all the possible configurations 11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the 12 | * `apply from: "../../node_modules/react-native/react.gradle"` line. 13 | * 14 | * project.ext.react = [ 15 | * // the name of the generated asset file containing your JS bundle 16 | * bundleAssetName: "index.android.bundle", 17 | * 18 | * // the entry file for bundle generation 19 | * entryFile: "index.android.js", 20 | * 21 | * // whether to bundle JS and assets in debug mode 22 | * bundleInDebug: false, 23 | * 24 | * // whether to bundle JS and assets in release mode 25 | * bundleInRelease: true, 26 | * 27 | * // whether to bundle JS and assets in another build variant (if configured). 28 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 29 | * // The configuration property can be in the following formats 30 | * // 'bundleIn${productFlavor}${buildType}' 31 | * // 'bundleIn${buildType}' 32 | * // bundleInFreeDebug: true, 33 | * // bundleInPaidRelease: true, 34 | * // bundleInBeta: true, 35 | * 36 | * // the root of your project, i.e. where "package.json" lives 37 | * root: "../../", 38 | * 39 | * // where to put the JS bundle asset in debug mode 40 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", 41 | * 42 | * // where to put the JS bundle asset in release mode 43 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release", 44 | * 45 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 46 | * // require('./image.png')), in debug mode 47 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", 48 | * 49 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 50 | * // require('./image.png')), in release mode 51 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", 52 | * 53 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means 54 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to 55 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle 56 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ 57 | * // for example, you might want to remove it from here. 58 | * inputExcludes: ["android/**", "ios/**"], 59 | * 60 | * // override which node gets called and with what additional arguments 61 | * nodeExecutableAndArgs: ["node"] 62 | * 63 | * // supply additional arguments to the packager 64 | * extraPackagerArgs: [] 65 | * ] 66 | */ 67 | 68 | apply from: "../../node_modules/react-native/react.gradle" 69 | apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" 70 | 71 | /** 72 | * Set this to true to create two separate APKs instead of one: 73 | * - An APK that only works on ARM devices 74 | * - An APK that only works on x86 devices 75 | * The advantage is the size of the APK is reduced by about 4MB. 76 | * Upload all the APKs to the Play Store and people will download 77 | * the correct one based on the CPU architecture of their device. 78 | */ 79 | def enableSeparateBuildPerCPUArchitecture = false 80 | 81 | /** 82 | * Run Proguard to shrink the Java bytecode in release builds. 83 | */ 84 | def enableProguardInReleaseBuilds = false 85 | 86 | android { 87 | compileSdkVersion 23 88 | buildToolsVersion "23.0.1" 89 | 90 | defaultConfig { 91 | applicationId "com.designCaptures" 92 | minSdkVersion 16 93 | targetSdkVersion 22 94 | versionCode 1 95 | versionName "1.0.0" 96 | ndk { 97 | abiFilters "armeabi-v7a", "x86" 98 | } 99 | } 100 | signingConfigs { 101 | release { 102 | storeFile file(MYAPP_RELEASE_STORE_FILE) 103 | storePassword MYAPP_RELEASE_STORE_PASSWORD 104 | keyAlias MYAPP_RELEASE_KEY_ALIAS 105 | keyPassword MYAPP_RELEASE_KEY_PASSWORD 106 | } 107 | } 108 | splits { 109 | abi { 110 | reset() 111 | enable enableSeparateBuildPerCPUArchitecture 112 | universalApk false // If true, also generate a universal APK 113 | include "armeabi-v7a", "x86" 114 | } 115 | } 116 | buildTypes { 117 | release { 118 | minifyEnabled enableProguardInReleaseBuilds 119 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 120 | signingConfig signingConfigs.release 121 | } 122 | } 123 | // applicationVariants are e.g. debug, release 124 | applicationVariants.all { variant -> 125 | variant.outputs.each { output -> 126 | // For each separate APK per architecture, set a unique version code as described here: 127 | // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits 128 | def versionCodes = ["armeabi-v7a":1, "x86":2] 129 | def abi = output.getFilter(OutputFile.ABI) 130 | if (abi != null) { // null for the universal-debug, universal-release variants 131 | output.versionCodeOverride = 132 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode 133 | } 134 | } 135 | } 136 | } 137 | 138 | dependencies { 139 | compile fileTree(dir: "libs", include: ["*.jar"]) 140 | compile "com.android.support:appcompat-v7:23.0.1" 141 | compile "com.facebook.react:react-native:+" // From node_modules 142 | } 143 | 144 | // Run this once to be able to run the application with BUCK 145 | // puts all compile dependencies into folder libs for BUCK to use 146 | task copyDownloadableDepsToLibs(type: Copy) { 147 | from configurations.compile 148 | into 'libs' 149 | } 150 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Disabling obfuscation is useful if you collect stack traces from production crashes 20 | # (unless you are using a system that supports de-obfuscate the stack traces). 21 | -dontobfuscate 22 | 23 | # React Native 24 | 25 | # Keep our interfaces so they can be used by other ProGuard rules. 26 | # See http://sourceforge.net/p/proguard/bugs/466/ 27 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip 28 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters 29 | -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip 30 | 31 | # Do not strip any method/class that is annotated with @DoNotStrip 32 | -keep @com.facebook.proguard.annotations.DoNotStrip class * 33 | -keep @com.facebook.common.internal.DoNotStrip class * 34 | -keepclassmembers class * { 35 | @com.facebook.proguard.annotations.DoNotStrip *; 36 | @com.facebook.common.internal.DoNotStrip *; 37 | } 38 | 39 | -keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { 40 | void set*(***); 41 | *** get*(); 42 | } 43 | 44 | -keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } 45 | -keep class * extends com.facebook.react.bridge.NativeModule { *; } 46 | -keepclassmembers,includedescriptorclasses class * { native ; } 47 | -keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } 48 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } 49 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } 50 | 51 | -dontwarn com.facebook.react.** 52 | 53 | # okhttp 54 | 55 | -keepattributes Signature 56 | -keepattributes *Annotation* 57 | -keep class okhttp3.** { *; } 58 | -keep interface okhttp3.** { *; } 59 | -dontwarn okhttp3.** 60 | 61 | # okio 62 | 63 | -keep class sun.misc.Unsafe { *; } 64 | -dontwarn java.nio.file.* 65 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 66 | -dontwarn okio.** 67 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /android/app/src/main/assets/index.android.bundle.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/assets/index.android.bundle.meta -------------------------------------------------------------------------------- /android/app/src/main/java/com/designer/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.designer; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. 9 | * This is used to schedule rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "Designer"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/designer/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.designer; 2 | 3 | import android.app.Application; 4 | import android.util.Log; 5 | 6 | import com.facebook.react.ReactApplication; 7 | import com.facebook.react.ReactInstanceManager; 8 | import com.facebook.react.ReactNativeHost; 9 | import com.facebook.react.ReactPackage; 10 | import com.facebook.react.shell.MainReactPackage; 11 | import java.util.Arrays; 12 | import java.util.List; 13 | 14 | public class MainApplication extends Application implements ReactApplication { 15 | 16 | private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 17 | @Override 18 | protected boolean getUseDeveloperSupport() { 19 | return BuildConfig.DEBUG; 20 | } 21 | 22 | @Override 23 | protected List getPackages() { 24 | return Arrays.asList( 25 | new MainReactPackage() 26 | ); 27 | } 28 | }; 29 | 30 | @Override 31 | public ReactNativeHost getReactNativeHost() { 32 | return mReactNativeHost; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/drawable-hdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/drawable-mdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/drawable-xhdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/drawable-xxhdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/drawable-xxxhdpi/node_modules_reactnative_libraries_customcomponents_navigationexperimental_assets_backicon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Design Captures 3 | 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:2.2.0' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | mavenLocal() 18 | jcenter() 19 | maven { 20 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 21 | url "$rootDir/../node_modules/react-native/android" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | android.useDeprecatedNdk=true 20 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Oct 01 20:54:30 CST 2016 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 7 | -------------------------------------------------------------------------------- /android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # For Cygwin, ensure paths are in UNIX format before anything is touched. 46 | if $cygwin ; then 47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 48 | fi 49 | 50 | # Attempt to set APP_HOME 51 | # Resolve links: $0 may be a link 52 | PRG="$0" 53 | # Need this for relative symlinks. 54 | while [ -h "$PRG" ] ; do 55 | ls=`ls -ld "$PRG"` 56 | link=`expr "$ls" : '.*-> \(.*\)$'` 57 | if expr "$link" : '/.*' > /dev/null; then 58 | PRG="$link" 59 | else 60 | PRG=`dirname "$PRG"`"/$link" 61 | fi 62 | done 63 | SAVED="`pwd`" 64 | cd "`dirname \"$PRG\"`/" >&- 65 | APP_HOME="`pwd -P`" 66 | cd "$SAVED" >&- 67 | 68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 69 | 70 | # Determine the Java command to use to start the JVM. 71 | if [ -n "$JAVA_HOME" ] ; then 72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 73 | # IBM's JDK on AIX uses strange locations for the executables 74 | JAVACMD="$JAVA_HOME/jre/sh/java" 75 | else 76 | JAVACMD="$JAVA_HOME/bin/java" 77 | fi 78 | if [ ! -x "$JAVACMD" ] ; then 79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 80 | 81 | Please set the JAVA_HOME variable in your environment to match the 82 | location of your Java installation." 83 | fi 84 | else 85 | JAVACMD="java" 86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 87 | 88 | Please set the JAVA_HOME variable in your environment to match the 89 | location of your Java installation." 90 | fi 91 | 92 | # Increase the maximum file descriptors if we can. 93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 94 | MAX_FD_LIMIT=`ulimit -H -n` 95 | if [ $? -eq 0 ] ; then 96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 97 | MAX_FD="$MAX_FD_LIMIT" 98 | fi 99 | ulimit -n $MAX_FD 100 | if [ $? -ne 0 ] ; then 101 | warn "Could not set maximum file descriptor limit: $MAX_FD" 102 | fi 103 | else 104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 105 | fi 106 | fi 107 | 108 | # For Darwin, add options to specify how the application appears in the dock 109 | if $darwin; then 110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 111 | fi 112 | 113 | # For Cygwin, switch paths to Windows format before running java 114 | if $cygwin ; then 115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 158 | function splitJvmOpts() { 159 | JVM_OPTS=("$@") 160 | } 161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 163 | 164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 165 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /android/keystores/BUCK: -------------------------------------------------------------------------------- 1 | keystore( 2 | name = 'debug', 3 | store = 'debug.keystore', 4 | properties = 'debug.keystore.properties', 5 | visibility = [ 6 | 'PUBLIC', 7 | ], 8 | ) 9 | -------------------------------------------------------------------------------- /android/keystores/debug.keystore.properties: -------------------------------------------------------------------------------- 1 | key.store=debug.keystore 2 | key.alias=androiddebugkey 3 | key.store.password=android 4 | key.alias.password=android 5 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Designer' 2 | 3 | include ':app' 4 | -------------------------------------------------------------------------------- /comment/Behance/ProjectsDetail.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by xayoung on 11/7/16. 3 | */ 4 | import React, { Component } from 'react'; 5 | import { 6 | AppRegistry, 7 | StyleSheet, 8 | Text, 9 | View, 10 | Switch, 11 | TouchableOpacity, 12 | TouchableHighlight, 13 | Dimensions, 14 | ScrollView, 15 | ListView, 16 | Modal, 17 | Platform 18 | 19 | } from 'react-native'; 20 | 21 | import Image from 'react-native-image-progress'; 22 | var HTMLView = require('react-native-htmlview') 23 | import Icon from 'react-native-vector-icons/MaterialIcons'; 24 | var getImage = require("./../getImage"); 25 | import PhotoView from 'react-native-photo-view'; 26 | 27 | //请求api 28 | var api = require("./../api"), 29 | screen = Dimensions.get('window'); 30 | 31 | var ProjectsDetail = React.createClass({ 32 | //初始化参数 33 | getDefaultProps(){ 34 | return { 35 | title: '', 36 | project: '', 37 | 38 | }; 39 | }, 40 | 41 | //状态机,datasource 42 | getInitialState(){ 43 | return { 44 | selectImage:'', 45 | isOpen: false, 46 | isDisabled: false, 47 | swipeToClose: true, 48 | sliderValue: 0.3, 49 | show:false, 50 | transparent: false, 51 | dataSource: new ListView.DataSource({ 52 | rowHasChanged: (row1, row2) => row1 !== row2, 53 | }), 54 | }; 55 | }, 56 | 57 | componentDidMount() { 58 | api.getBehanceProjectResources(this.props.project.id).then((responseData) => { 59 | console.log(responseData) 60 | this.setState({ 61 | dataSource: this.state.dataSource.cloneWithRows(responseData.project.modules), 62 | }); 63 | }).done(); 64 | }, 65 | 66 | render() { 67 | var modalBackgroundStyle = { 68 | backgroundColor: this.state.transparent ? 'rgba(0, 0, 0, 0.5)' : '#f5fcff', 69 | }; 70 | if (Platform.OS === 'ios') 71 | return( 72 | 73 | {/*头部*/} 74 | 75 | {/*ListView*/} 76 | this.handleScroll(e)} 80 | renderHeader={this.renderHeader} 81 | /> 82 | {}} 87 | onRequestClose={() => {}} > 88 | 89 | 90 | this.setModalVisible()}> 91 | 92 | 93 | 94 | 95 | console.log("Image loaded!")} 101 | style={{width: screen.width, height: 300}} /> 102 | 103 | 104 | 105 | this.props.navigator.pop()}> 107 | 108 | 109 | 110 | 111 | 112 | ); 113 | else 114 | return( 115 | 116 | {/*头部*/} 117 | 118 | {/*ListView*/} 119 | this.handleScroll(e)} 123 | renderHeader={this.renderHeader} 124 | /> 125 | 126 | this.props.navigator.pop()}> 128 | 129 | 130 | 131 | 132 | 133 | ); 134 | 135 | }, 136 | handleScroll(e) { 137 | // console.log('wtf') 138 | // console.log(e.nativeEvent); 139 | let scrollH = e.nativeEvent.contentSize.height; 140 | let y = e.nativeEvent.contentOffset.y; 141 | let height = e.nativeEvent.layoutMeasurement.height; 142 | // console.log('handle scroll', scrollH, y, height); 143 | 144 | }, 145 | renderHeader(){ 146 | return ( 147 | 148 | 149 | 153 | 154 | {this.props.project.name} 155 | 156 | by 157 | {this.props.project.owners[0].display_name} 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | {this.props.project.stats.appreciations} 166 | 167 | 168 | 169 | {this.props.project.stats.comments} 170 | 171 | 172 | 173 | {this.props.project.stats.views} 174 | 175 | 176 | 177 | ); 178 | }, 179 | // 每一行的数据 180 | renderRow(rowData){ 181 | if (rowData.type == 'image') 182 | return ( 183 | this.setModalVisible(rowData)}> 184 | 188 | 189 | ); 190 | else 191 | return ( 192 | 193 | 194 | console.log('clicked link: ', url)} 197 | /> 198 | 199 | ); 200 | }, 201 | // 显示/隐藏 modal 202 | setModalVisible(rowData) { 203 | console.log(rowData); 204 | if (rowData) 205 | this.setState({selectImage:rowData.src}); 206 | 207 | this.setState({transparent: !this.state.transparent}); 208 | let isShow = this.state.show; 209 | this.setState({ 210 | show:!isShow, 211 | }); 212 | 213 | } 214 | }); 215 | 216 | const styles = StyleSheet.create({ 217 | headerViewStyle: { 218 | height: 60, 219 | alignItems: 'center', 220 | flexDirection: 'row', 221 | marginTop: 60, 222 | }, 223 | headerImageStyle: { 224 | width: 40, 225 | height: 40, 226 | marginLeft: 10 227 | 228 | }, 229 | headerViewRightView: { 230 | flexDirection: 'column', 231 | marginLeft: 10 232 | }, 233 | mainView: { 234 | flex: 1, 235 | position: 'absolute', 236 | width: screen.width, 237 | height: screen.height, 238 | backgroundColor: 'white', 239 | }, 240 | imgStyle:{ 241 | height: 300, 242 | width: screen.width, 243 | backgroundColor: "transparent", 244 | resizeMode: "cover" 245 | }, 246 | floatView: { 247 | position: 'absolute', 248 | width: 40, 249 | height: 40, 250 | top: 30, 251 | left: 10, 252 | overflow: 'hidden', 253 | borderWidth: 1, 254 | borderColor: '#2d4486', 255 | borderRadius: 20, 256 | backgroundColor: '#2d4486', 257 | }, 258 | shotDetailsRow: { 259 | alignItems: "center", 260 | justifyContent: "center", 261 | backgroundColor: "white", 262 | flexDirection: "row", 263 | height: 30 264 | }, 265 | shotCounter: { 266 | flex: 1, 267 | alignItems: "center", 268 | justifyContent: "center", 269 | flexDirection: 'row' 270 | }, 271 | shotCounterText: { 272 | color: "#333" 273 | }, 274 | 275 | }); 276 | 277 | module.exports = ProjectsDetail; -------------------------------------------------------------------------------- /comment/Behance/ProjectsList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by xayoung on 9/18/16. 3 | */ 4 | import React, { Component } from 'react'; 5 | import { 6 | AppRegistry, 7 | StyleSheet, 8 | Text, 9 | View, 10 | Switch, 11 | ScrollView, 12 | TouchableOpacity, 13 | TouchableHighlight, 14 | Dimensions 15 | } from 'react-native'; 16 | 17 | var GiftedListView = require('react-native-gifted-listview'); 18 | 19 | import Image from 'react-native-image-progress'; 20 | import { RadioButtons } from 'react-native-radio-buttons' 21 | var getImage = require("./../getImage"); 22 | //请求api 23 | var api = require("./../api"), 24 | ProjectsDetail = require("./ProjectsDetail"), 25 | screen = Dimensions.get('window'); 26 | 27 | var ProjectsList = React.createClass({ 28 | //初始化参数 29 | getDefaultProps(){ 30 | return { 31 | filter: "" 32 | }; 33 | }, 34 | 35 | //状态机,datasource 36 | getInitialState(){ 37 | return { 38 | filter: this.props.filter, 39 | queryNumber: 0, 40 | }; 41 | }, 42 | 43 | // 跳转到二级界面 44 | pushToDetail(project){ 45 | console.log(project.id); 46 | this.props.navigator.push( 47 | { 48 | component: ProjectsDetail, // 要跳转的版块 49 | passProps: {project}, 50 | 51 | } 52 | ); 53 | }, 54 | 55 | 56 | _onFetch(page = 1, callback, options) { 57 | 58 | this.setState({ queryNumber: page }); 59 | console.log(this.state.queryNumber) 60 | var query = this.state.filter; 61 | setTimeout(() => { 62 | api.getBehanceProjectsByType(query,this.state.queryNumber) 63 | .catch((error) => { 64 | console.log(error) 65 | }) 66 | .then((responseData) => { 67 | console.log(responseData.projects) 68 | callback(responseData.projects); 69 | 70 | }) 71 | .done(); 72 | 73 | 74 | }, 1000); // simulating network fetching 75 | }, 76 | 77 | _onEndReached(){ 78 | console.log('底部') 79 | this.refs.glistView._onPaginate() 80 | }, 81 | 82 | 83 | /** 84 | * When a row is touched 85 | * @param {object} rowData Row data 86 | */ 87 | _onPress(rowData) { 88 | console.log(rowData+' pressed'); 89 | }, 90 | 91 | /** 92 | * Render a row 93 | * @param {object} rowData Row data 94 | */ 95 | _renderRowView(rowData,sectionID,rowID) { 96 | return ( 97 | {this.pushToDetail(rowData)}}> 98 | 100 | {/*左边*/} 101 | 105 | 106 | 107 | 108 | ); 109 | }, 110 | 111 | 112 | 113 | /** 114 | * Render the refreshable view when waiting for refresh 115 | * On Android, the view should be touchable to trigger the refreshCallback 116 | * @param {function} refreshCallback The function to call to refresh the listview 117 | */ 118 | _renderRefreshableWaitingView(refreshCallback) { 119 | this.setState({ queryNumber: 0 }) 120 | if (Platform.OS !== 'android') { 121 | return ( 122 | 123 | 124 | ↓ 125 | 126 | 127 | ); 128 | } else { 129 | return ( 130 | 135 | 136 | ↻ 137 | 138 | 139 | ); 140 | } 141 | }, 142 | 143 | /** 144 | * Render the refreshable view when the pull to refresh has been activated 145 | * @platform ios 146 | */ 147 | _renderRefreshableWillRefreshView() { 148 | return ( 149 | 150 | 151 | ↻ 152 | 153 | 154 | ); 155 | }, 156 | 157 | /** 158 | * Render the refreshable view when fetching 159 | */ 160 | _renderRefreshableFetchingView() { 161 | console.log('0000111') 162 | return ( 163 | 164 | 165 | 166 | 167 | ); 168 | }, 169 | 170 | 171 | /** 172 | * Render the pagination view when end of list is reached 173 | */ 174 | _renderPaginationAllLoadedView() { 175 | return ( 176 | 177 | 178 | ~ 179 | 180 | 181 | ); 182 | }, 183 | 184 | /** 185 | * Render a view when there is no row to display at the first fetch 186 | * @param {function} refreshCallback The function to call to refresh the listview 187 | */ 188 | _renderEmptyView(refreshCallback) { 189 | return ( 190 | 191 | 192 | Sorry, there is no content to display 193 | 194 | 195 | 199 | 200 | ↻ 201 | 202 | 203 | 204 | ); 205 | }, 206 | 207 | /** 208 | * Render a separator between rows 209 | */ 210 | _renderSeparatorView(sectionID, rowID, adjacentRowHighlighted) { 211 | return ( 212 | 213 | ); 214 | }, 215 | 216 | renderOption(option, selected, onSelect, index){ 217 | const style = selected ? { marginLeft:3,marginBottom:3, marginRight:3,overflow: 'hidden',borderWidth: 1, borderColor: '#2d4486',borderRadius: 12,padding: 3,backgroundColor:'#2d4486',marginTop: 5} : {marginTop: 5,marginLeft:3,marginBottom:3, marginRight:3,padding: 3}; 218 | const textStyle = selected ? { textAlign: 'center',color:'white'} : {color:'#666666',textAlign: 'center'}; 219 | 220 | return ( 221 | 222 | 223 | {option} 224 | 225 | 226 | 227 | ); 228 | }, 229 | 230 | setSelectedOption(selectedOption){ 231 | // 设置tag 232 | this.setState({ 233 | selectedOption 234 | }); 235 | this.refs.glistView._scrollToTop(); 236 | this.setState({filter: selectedOption}, () => { 237 | 238 | this.refs.glistView._refresh(); 239 | }); 240 | 241 | 242 | 243 | 244 | 245 | }, 246 | 247 | 248 | render(){ 249 | 250 | const options = [ 251 | "Projects", 252 | "UI/UX", 253 | "Graphic Design", 254 | "Illustration", 255 | "Interaction Design", 256 | "Motion Graphics", 257 | "Photography", 258 | ]; 259 | 260 | 261 | 262 | function renderContainer(optionNodes){ 263 | return {optionNodes}; 264 | } 265 | 266 | return ( 267 | 268 | 269 | 270 | 276 | 285 | 286 | 287 | { 320 | r1.id !== r2.id 321 | }} 322 | /> 323 | 324 | ); 325 | }, 326 | 327 | }); 328 | 329 | 330 | var customStyles = { 331 | separator: { 332 | height: 1, 333 | backgroundColor: '#CCC' 334 | }, 335 | refreshableView: { 336 | height: 50, 337 | backgroundColor: '#fff', 338 | justifyContent: 'center', 339 | alignItems: 'center', 340 | }, 341 | actionsLabel: { 342 | fontSize: 20, 343 | color: '#007aff', 344 | }, 345 | paginationView: { 346 | height: 44, 347 | justifyContent: 'center', 348 | alignItems: 'center', 349 | backgroundColor: '#FFF', 350 | }, 351 | defaultView: { 352 | justifyContent: 'center', 353 | alignItems: 'center', 354 | padding: 20, 355 | }, 356 | defaultViewTitle: { 357 | fontSize: 16, 358 | fontWeight: 'bold', 359 | marginBottom: 15, 360 | }, 361 | row: { 362 | padding: 10, 363 | height: 44, 364 | }, 365 | header: { 366 | backgroundColor: '#50a4ff', 367 | padding: 10, 368 | }, 369 | headerTitle: { 370 | color: '#fff', 371 | }, 372 | }; 373 | 374 | 375 | var screenStyles = { 376 | container: { 377 | flex: 1, 378 | backgroundColor: '#FFF', 379 | }, 380 | navBar: { 381 | height: 64, 382 | backgroundColor: '#007aff', 383 | 384 | justifyContent: 'center', 385 | alignItems: 'center', 386 | }, 387 | navBarTitle: { 388 | color: '#fff', 389 | fontSize: 16, 390 | marginTop: 12, 391 | } 392 | }; 393 | 394 | const styles = StyleSheet.create({ 395 | mainViewStyle:{ 396 | flex: 1 397 | }, 398 | 399 | cellViewStyle:{ 400 | // 确定主轴的方向 401 | flexDirection:'row', 402 | // 设置侧轴的对齐方式 403 | // alignItems:'center', 404 | // padding:10, 405 | // 设置下边框 406 | borderBottomColor:'#e8e8e8', 407 | borderBottomWidth:0.5 408 | 409 | }, 410 | 411 | imgStyle:{ 412 | height: 300, 413 | width: screen.width, 414 | backgroundColor: "transparent", 415 | resizeMode: "cover" 416 | }, 417 | titleStyle:{ 418 | fontSize:16, 419 | marginBottom:5 420 | }, 421 | container: { 422 | flex: 1, 423 | }, 424 | switch: { 425 | flexDirection: 'row', 426 | alignItems: 'center', 427 | padding: 10 428 | }, 429 | control: { 430 | marginTop: 30, 431 | marginBottom: 30, 432 | marginLeft: 16, 433 | marginRight: 16 434 | } 435 | 436 | }); 437 | 438 | //输出类 439 | module.exports = ProjectsList; -------------------------------------------------------------------------------- /comment/CommentItem.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { 3 | Image, 4 | StyleSheet, 5 | PixelRatio, 6 | Text, 7 | TouchableHighlight, 8 | View, 9 | Dimensions 10 | } from 'react-native'; 11 | 12 | var Icon = require("react-native-vector-icons/FontAwesome"), 13 | getImage = require("./getImage"), 14 | HTML = require("react-native-htmlview"), 15 | screen = Dimensions.get('window'); 16 | 17 | var CommentItem = React.createClass({ 18 | getDefaultProps() { 19 | return { 20 | comments: [] 21 | } 22 | }, 23 | 24 | render() { 25 | return 26 | 28 | 29 | 30 | 32 | 33 | 34 | {this.props.comment.user.name} 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | ; 45 | } 46 | }); 47 | 48 | var styles = StyleSheet.create({ 49 | commentContent: { 50 | padding: 10, 51 | flex: 1, 52 | flexDirection: "row", 53 | alignItems: "flex-start" 54 | }, 55 | userName: { 56 | fontWeight: "700" 57 | }, 58 | commentBody: { 59 | flex: 1, 60 | flexDirection: "column", 61 | justifyContent: "center" 62 | }, 63 | commentText: { 64 | flex: 1, 65 | flexDirection: "row" 66 | }, 67 | cellBorder: { 68 | backgroundColor: "rgba(0, 0, 0, 0.2)", 69 | // Trick to get the thinest line the device can display 70 | height: 1 / PixelRatio.get(), 71 | marginLeft: 4, 72 | }, 73 | avatar: { 74 | borderRadius: 20, 75 | width: 40, 76 | height: 40, 77 | marginRight: 10 78 | } 79 | }); 80 | 81 | module.exports = CommentItem; 82 | -------------------------------------------------------------------------------- /comment/Dribbble/ShotCell.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { 3 | Image, 4 | PixelRatio, 5 | StyleSheet, 6 | Text, 7 | TouchableHighlight, 8 | View, 9 | Dimensions 10 | } from 'react-native'; 11 | 12 | var getImage = require("./../getImage"), 13 | screen = Dimensions.get('window'); 14 | 15 | var ShotCell = React.createClass({ 16 | render: function() { 17 | return ( 18 | 19 | 20 | 21 | 26 | 27 | 28 | 29 | 30 | ); 31 | } 32 | }); 33 | 34 | var styles = StyleSheet.create({ 35 | textContainer: { 36 | flex: 1, 37 | }, 38 | row: { 39 | backgroundColor: "white", 40 | flexDirection: "column" 41 | }, 42 | cellImage: { 43 | height: 300, 44 | width: screen.width, 45 | backgroundColor: "transparent", 46 | resizeMode: "cover" 47 | }, 48 | cellBorder: { 49 | backgroundColor: "rgba(0, 0, 0, 0.2)", 50 | // Trick to get the thinest line the device can display 51 | height: 1 / PixelRatio.get(), 52 | marginLeft: 4, 53 | }, 54 | }); 55 | 56 | module.exports = ShotCell; 57 | -------------------------------------------------------------------------------- /comment/Dribbble/ShotDetails.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by xayoung on 9/6/16. 3 | */ 4 | import React, { Component } from 'react'; 5 | import { 6 | PixelRatio, 7 | StyleSheet, 8 | Text, 9 | TouchableOpacity, 10 | TouchableHighlight, 11 | View, 12 | Dimensions, 13 | Scroll, 14 | Modal, 15 | Image, 16 | Platform, 17 | ListView 18 | } from 'react-native'; 19 | 20 | var getImage = require("./../getImage"), 21 | api = require("./../api"), 22 | screen = Dimensions.get('window'), 23 | ParallaxView = require("react-native-parallax-view"); 24 | var HTMLView = require('react-native-htmlview') 25 | import Icon from 'react-native-vector-icons/MaterialIcons'; 26 | import PhotoView from 'react-native-photo-view'; 27 | 28 | 29 | var ShotDetails = React.createClass({ 30 | 31 | 32 | getInitialState() { 33 | return { 34 | isOpen: false, 35 | isDisabled: false, 36 | swipeToClose: true, 37 | sliderValue: 0.3, 38 | show:false, 39 | transparent: false, 40 | dataSource: new ListView.DataSource({ 41 | rowHasChanged: (row1, row2) => row1 !== row2, 42 | }), 43 | }; 44 | }, 45 | 46 | getDefaultProps() { 47 | return{ 48 | title: '', 49 | shot: '' 50 | } 51 | }, 52 | 53 | 54 | componentDidMount() { 55 | api.getResources(this.props.shot.comments_url).then((responseData) => { 56 | console.log(responseData) 57 | this.setState({ 58 | dataSource: this.state.dataSource.cloneWithRows(responseData), 59 | }); 60 | }).done(); 61 | }, 62 | 63 | render() { 64 | var modalBackgroundStyle = { 65 | backgroundColor: this.state.transparent ? 'rgba(0, 0, 0, 0.5)' : '#f5fcff', 66 | }; 67 | return ( 68 | 69 | 70 | 71 | this.handleScroll(e)} 76 | header={( 77 | 78 | this.setModalVisible()}> 79 | 80 | 81 | )} 82 | > 83 | 84 | 88 | 89 | {this.props.shot.title} 90 | 91 | by 92 | {this.props.shot.user.name} 93 | 94 | 95 | 96 | 97 | 98 | 99 | {this.props.shot.likes_count} 100 | 101 | 102 | 103 | {this.props.shot.comments_count} 104 | 105 | 106 | 107 | {this.props.shot.views_count} 108 | 109 | 110 | 111 | 112 | {this._renderCommentsList()} 113 | 114 | 115 | 116 | {}} 121 | onRequestClose={() => {}} > 122 | 123 | 124 | this.setModalVisible()}> 125 | 126 | 127 | 128 | 129 | console.log("Image loaded!")} 135 | style={{width: screen.width, height: 300}} /> 136 | 137 | 138 | 139 | 140 | this.props.navigator.pop()}> 142 | 143 | 144 | 145 | 146 | 147 | 148 | ) 149 | }, 150 | 151 | _renderCommentsList() { 152 | var commentsStyle; 153 | if (Platform.OS === 'ios') 154 | commentsStyle = 0; 155 | else 156 | commentsStyle = 20; 157 | return 158 | 159 | Comments 160 | 161 | 168 | 169 | }, 170 | 171 | renderRow(comment,sectionID, rowID) { 172 | var b = rowID % 2; 173 | return ( 174 | 175 | 176 | 180 | {comment.user.name} 181 | 182 | 183 | console.log('clicked link: ', url)} 186 | /> 187 | 188 | 189 | 190 | 191 | ); 192 | }, 193 | 194 | // 显示/隐藏 modal 195 | setModalVisible() { 196 | this.setState({transparent: !this.state.transparent}); 197 | let isShow = this.state.show; 198 | this.setState({ 199 | show:!isShow, 200 | }); 201 | } 202 | 203 | 204 | 205 | }); 206 | 207 | var styles = StyleSheet.create({ 208 | mainView: { 209 | flex: 1, 210 | position: 'absolute', 211 | width: screen.width, 212 | height: screen.height, 213 | backgroundColor: 'white' 214 | }, 215 | invisibleView: { 216 | flex: 1, 217 | position: 'absolute', 218 | width: screen.width, 219 | height: 300, 220 | 221 | }, 222 | headerViewStyle: { 223 | height: 60, 224 | alignItems: 'center', 225 | flexDirection: 'row' 226 | }, 227 | headerImageStyle: { 228 | width: 40, 229 | height: 40, 230 | marginLeft: 10 231 | 232 | }, 233 | headerViewRightView: { 234 | flexDirection: 'column', 235 | marginLeft: 10 236 | }, 237 | shotDetailsRow: { 238 | alignItems: "center", 239 | justifyContent: "center", 240 | backgroundColor: "white", 241 | flexDirection: "row", 242 | height: 20 243 | }, 244 | shotCounter: { 245 | flex: 1, 246 | alignItems: "center", 247 | justifyContent: "center", 248 | flexDirection: 'row' 249 | }, 250 | shotCounterText: { 251 | color: "#333" 252 | }, 253 | separator: { 254 | backgroundColor: "rgba(0, 0, 0, 0.1)", 255 | height: 1 / PixelRatio.get(), 256 | marginVertical: 10, 257 | }, 258 | sectionSpacing: { 259 | marginTop: 10 260 | }, 261 | heading: { 262 | fontWeight: "700", 263 | fontSize: 16, 264 | marginLeft: 10 265 | }, 266 | commentImageStyle: { 267 | width: 20, 268 | height: 20, 269 | marginLeft: 10 270 | 271 | }, 272 | commentTopView: { 273 | flexDirection: 'row', 274 | alignItems: 'center', 275 | marginTop: 20 276 | }, 277 | floatView: { 278 | position: 'absolute', 279 | width: 40, 280 | height: 40, 281 | top: 30, 282 | left: 10, 283 | overflow: 'hidden', 284 | borderWidth: 1, 285 | borderColor: '#2d4486', 286 | borderRadius: 20, 287 | backgroundColor: '#2d4486', 288 | }, 289 | 290 | }); 291 | 292 | module.exports = ShotDetails; -------------------------------------------------------------------------------- /comment/Dribbble/ShotList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by xayoung on 8/28/16. 3 | */ 4 | import React, { Component } from 'react'; 5 | import { 6 | AppRegistry, 7 | StyleSheet, 8 | Text, 9 | View, 10 | Switch, 11 | TouchableOpacity, 12 | TouchableHighlight, 13 | Dimensions, 14 | ScrollView, 15 | TouchableWithoutFeedback 16 | } from 'react-native'; 17 | 18 | var GiftedListView = require('react-native-gifted-listview'); 19 | import Image from 'react-native-image-progress'; 20 | import { RadioButtons } from 'react-native-radio-buttons' 21 | 22 | var getImage = require("./../getImage"); 23 | 24 | //请求api 25 | var api = require("./../api"), 26 | ShotCell = require("./ShotCell"), 27 | ShotDetails = require("./ShotDetails"), 28 | screen = Dimensions.get('window'); 29 | 30 | var ShotList = React.createClass({ 31 | //初始化参数 32 | getDefaultProps(){ 33 | return { 34 | filter: "default", 35 | }; 36 | }, 37 | //状态机,datasource 38 | getInitialState(){ 39 | return { 40 | filter: this.props.filter, 41 | queryNumber: 0, 42 | }; 43 | }, 44 | 45 | // 跳转到二级界面 46 | pushToDetail(shot){ 47 | 48 | this.props.navigator.push( 49 | { 50 | component: ShotDetails, // 要跳转的版块 51 | passProps: {shot}, 52 | title: shot.title 53 | 54 | } 55 | ); 56 | }, 57 | 58 | 59 | _onFetch(page = 1, callback, options) { 60 | 61 | this.setState({ queryNumber: page }); 62 | var query = this.state.filter; 63 | setTimeout(() => { 64 | api.getShotsByType(query,this.state.queryNumber) 65 | .catch((error) => { 66 | 67 | }) 68 | .then((responseData) => { 69 | console.log(responseData) 70 | callback(responseData); 71 | }) 72 | .done(); 73 | 74 | 75 | }, 1000); // simulating network fetching 76 | }, 77 | 78 | _onEndReached(){ 79 | 80 | this.refs.listView._onPaginate() 81 | }, 82 | 83 | 84 | /** 85 | * When a row is touched 86 | * @param {object} rowData Row data 87 | */ 88 | _onPress(rowData) { 89 | console.log(rowData+' pressed'); 90 | }, 91 | 92 | /** 93 | * Render a row 94 | * @param {object} rowData Row data 95 | */ 96 | _renderRowView(rowData,sectionID,rowID) { 97 | return ( 98 | {this.pushToDetail(rowData)}}> 99 | 101 | {/**/} 105 | {/*indicator={Progress.CircleSnail}*/} 106 | {/*indicatorProps={{*/} 107 | {/*color: ['red', 'green', 'blue']*/} 108 | {/*}}*/} 109 | 114 | 115 | 116 | ); 117 | }, 118 | 119 | 120 | 121 | /** 122 | * Render the refreshable view when waiting for refresh 123 | * On Android, the view should be touchable to trigger the refreshCallback 124 | * @param {function} refreshCallback The function to call to refresh the listview 125 | */ 126 | _renderRefreshableWaitingView(refreshCallback) { 127 | this.setState({ queryNumber: 0 }) 128 | if (Platform.OS !== 'android') { 129 | return ( 130 | 131 | 132 | ↓ 133 | 134 | 135 | ); 136 | } else { 137 | return ( 138 | 143 | 144 | ↻ 145 | 146 | 147 | ); 148 | } 149 | }, 150 | 151 | /** 152 | * Render the refreshable view when the pull to refresh has been activated 153 | * @platform ios 154 | */ 155 | _renderRefreshableWillRefreshView() { 156 | return ( 157 | 158 | 159 | ↻ 160 | 161 | 162 | ); 163 | }, 164 | 165 | /** 166 | * Render the refreshable view when fetching 167 | */ 168 | _renderRefreshableFetchingView() { 169 | 170 | return ( 171 | 172 | 173 | 174 | 175 | ); 176 | }, 177 | 178 | 179 | /** 180 | * Render the pagination view when end of list is reached 181 | */ 182 | _renderPaginationAllLoadedView() { 183 | return ( 184 | 185 | 186 | ~ 187 | 188 | 189 | ); 190 | }, 191 | 192 | /** 193 | * Render a view when there is no row to display at the first fetch 194 | * @param {function} refreshCallback The function to call to refresh the listview 195 | */ 196 | _renderEmptyView(refreshCallback) { 197 | return ( 198 | 199 | 200 | Sorry, there is no content to display 201 | 202 | 203 | 207 | 208 | ↻ 209 | 210 | 211 | 212 | ); 213 | }, 214 | 215 | /** 216 | * Render a separator between rows 217 | */ 218 | _renderSeparatorView(sectionID, rowID, adjacentRowHighlighted) { 219 | return ( 220 | 221 | ); 222 | }, 223 | 224 | renderOption(option, selected, onSelect, index){ 225 | const style = selected ? { marginLeft:3,marginBottom:3, marginRight:3,overflow: 'hidden',borderWidth: 1, borderColor: '#2d4486',borderRadius: 12,padding: 3,backgroundColor:'#2d4486',marginTop: 5} : {marginTop: 5,marginLeft:3,marginBottom:3, marginRight:3,padding: 3}; 226 | const textStyle = selected ? { textAlign: 'center',color:'white'} : {color:'#666666',textAlign: 'center'}; 227 | 228 | return ( 229 | 230 | 231 | {option} 232 | 233 | 234 | 235 | ); 236 | 237 | }, 238 | 239 | setSelectedOption(selectedOption){ 240 | // 设置tag 241 | this.setState({ 242 | selectedOption 243 | }); 244 | this.refs.listView._scrollToTop(); 245 | this.setState({filter: selectedOption}, () => { 246 | console.log(this.state.filter); 247 | this.refs.listView._refresh(); 248 | }); 249 | 250 | }, 251 | 252 | 253 | render(){ 254 | 255 | const options = [ 256 | "shots", 257 | "debuts", 258 | "teams", 259 | "playoffs", 260 | "rebounds", 261 | "animated", 262 | "attachments", 263 | ]; 264 | 265 | 266 | 267 | function renderContainer(optionNodes){ 268 | return {optionNodes}; 269 | } 270 | 271 | return ( 272 | 273 | 274 | 275 | 276 | 282 | 291 | 292 | 293 | { 323 | r1.id !== r2.id 324 | }} 325 | /> 326 | 327 | 328 | 329 | 330 | ); 331 | }, 332 | 333 | }); 334 | 335 | 336 | var customStyles = { 337 | 338 | separator: { 339 | height: 1, 340 | backgroundColor: '#CCC' 341 | }, 342 | refreshableView: { 343 | height: 50, 344 | backgroundColor: '#fff', 345 | justifyContent: 'center', 346 | alignItems: 'center', 347 | }, 348 | actionsLabel: { 349 | fontSize: 20, 350 | color: '#007aff', 351 | }, 352 | paginationView: { 353 | height: 44, 354 | justifyContent: 'center', 355 | alignItems: 'center', 356 | backgroundColor: '#FFF', 357 | }, 358 | defaultView: { 359 | justifyContent: 'center', 360 | alignItems: 'center', 361 | padding: 20, 362 | }, 363 | defaultViewTitle: { 364 | fontSize: 16, 365 | fontWeight: 'bold', 366 | marginBottom: 15, 367 | }, 368 | row: { 369 | padding: 10, 370 | height: 44, 371 | }, 372 | header: { 373 | backgroundColor: '#50a4ff', 374 | padding: 10, 375 | }, 376 | headerTitle: { 377 | color: '#fff', 378 | }, 379 | }; 380 | 381 | 382 | var screenStyles = { 383 | container: { 384 | flex: 1, 385 | backgroundColor: '#FFF', 386 | }, 387 | navBar: { 388 | height: 64, 389 | backgroundColor: '#007aff', 390 | 391 | justifyContent: 'center', 392 | alignItems: 'center', 393 | }, 394 | navBarTitle: { 395 | color: '#fff', 396 | fontSize: 16, 397 | marginTop: 12, 398 | } 399 | }; 400 | 401 | const styles = StyleSheet.create({ 402 | mainViewStyle:{ 403 | flex: 1 404 | }, 405 | scrollView:{ 406 | height: 30 407 | }, 408 | horizontalScrollView: { 409 | height: 40, 410 | }, 411 | 412 | cellViewStyle:{ 413 | // 确定主轴的方向 414 | flexDirection:'row', 415 | // 设置侧轴的对齐方式 416 | // alignItems:'center', 417 | // padding:10, 418 | // 设置下边框 419 | borderBottomColor:'#e8e8e8', 420 | borderBottomWidth:0.5 421 | 422 | }, 423 | 424 | imgStyle:{ 425 | height: 300, 426 | width: screen.width, 427 | backgroundColor: "transparent", 428 | resizeMode: "cover" 429 | }, 430 | titleStyle:{ 431 | fontSize:16, 432 | marginBottom:5 433 | }, 434 | container: { 435 | flex: 1, 436 | }, 437 | switch: { 438 | flexDirection: 'row', 439 | alignItems: 'center', 440 | padding: 10 441 | }, 442 | control: { 443 | marginTop: 30, 444 | marginBottom: 30, 445 | marginLeft: 16, 446 | marginRight: 16 447 | } 448 | 449 | }); 450 | 451 | //输出类 452 | module.exports = ShotList; 453 | -------------------------------------------------------------------------------- /comment/FacebookTabBar.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { 3 | StyleSheet, 4 | Text, 5 | View, 6 | TouchableOpacity, 7 | } from 'react-native'; 8 | import Icon from 'react-native-vector-icons/FontAwesome'; 9 | 10 | const FacebookTabBar = React.createClass({ 11 | tabIcons: [], 12 | 13 | propTypes: { 14 | goToPage: React.PropTypes.func, 15 | activeTab: React.PropTypes.number, 16 | tabs: React.PropTypes.array, 17 | }, 18 | 19 | componentDidMount() { 20 | this._listener = this.props.scrollValue.addListener(this.setAnimationValue); 21 | }, 22 | 23 | setAnimationValue({ value, }) { 24 | this.tabIcons.forEach((icon, i) => { 25 | const progress = (value - i >= 0 && value - i <= 1) ? value - i : 1; 26 | icon.setNativeProps({ 27 | style: { 28 | color: this.iconColor(progress), 29 | }, 30 | }); 31 | }); 32 | }, 33 | 34 | //color between rgb(59,89,152) and rgb(204,204,204) 35 | iconColor(progress) { 36 | const red = 59 + (204 - 59) * progress; 37 | const green = 89 + (204 - 89) * progress; 38 | const blue = 152 + (204 - 152) * progress; 39 | return `rgb(${red}, ${green}, ${blue})`; 40 | }, 41 | 42 | render() { 43 | return 44 | {this.props.tabs.map((tab, i) => { 45 | return this.props.goToPage(i)} style={styles.tab}> 46 | { this.tabIcons[i] = icon; }} 51 | /> 52 | ; 53 | })} 54 | ; 55 | }, 56 | }); 57 | 58 | const styles = StyleSheet.create({ 59 | tab: { 60 | flex: 1, 61 | alignItems: 'center', 62 | justifyContent: 'center', 63 | paddingBottom: 10, 64 | }, 65 | tabs: { 66 | height: 45, 67 | flexDirection: 'row', 68 | paddingTop: 5, 69 | borderWidth: 1, 70 | borderTopWidth: 0, 71 | borderLeftWidth: 0, 72 | borderRightWidth: 0, 73 | borderBottomColor: 'rgba(0,0,0,0.05)', 74 | }, 75 | }); 76 | 77 | export default FacebookTabBar; 78 | -------------------------------------------------------------------------------- /comment/Player.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { 3 | Image, 4 | StyleSheet, 5 | Text, 6 | TouchableOpacity, 7 | View, 8 | ActivityIndicatorIOS, 9 | ListView, 10 | Dimensions, 11 | Modal 12 | } from 'react-native'; 13 | 14 | var Icon = require("react-native-vector-icons/FontAwesome"), 15 | getImage = require("./getImage"), 16 | HTML = require("react-native-htmlview"), 17 | screen = Dimensions.get('window'), 18 | ParallaxView = require("react-native-parallax-view"); 19 | 20 | var api = require("./api"); 21 | 22 | var ShotDetails = require("./Dribbble/ShotDetails"); 23 | var ShotCell = require("./Dribbble/ShotCell"); 24 | var Loading = require("./Loading"); 25 | 26 | var Player = React.createClass({ 27 | 28 | getInitialState() { 29 | return { 30 | isModalOpen: false, 31 | isLoading: true, 32 | dataSource: new ListView.DataSource({ 33 | rowHasChanged: (row1, row2) => row1 !== row2, 34 | }) 35 | }; 36 | }, 37 | 38 | componentWillMount() { 39 | api.getResources(this.props.player.shots_url).then((responseData) => { 40 | this.setState({ 41 | dataSource: this.state.dataSource.cloneWithRows(responseData), 42 | isLoading: false 43 | }); 44 | }).done(); 45 | }, 46 | 47 | openModal() { 48 | this.setState({ 49 | isModalOpen: true 50 | }); 51 | }, 52 | 53 | closeModal() { 54 | this.setState({ 55 | isModalOpen: false 56 | }); 57 | }, 58 | 59 | render() { 60 | return ( 61 | 67 | 68 | 69 | 71 | {this.props.player.username} 72 | {this.props.player.name} 73 | 74 | 75 | 76 | {this.props.player.followers_count} 77 | 78 | 79 | 80 | {this.props.player.shots_count} 81 | 82 | 83 | 84 | {this.props.player.likes_count} 85 | 86 | 87 | 88 | 89 | 90 | )} 91 | > 92 | 93 | {this.state.dataSource.length !== 0 ? this.renderShots() : } 94 | 95 | 97 | 99 | 100 | 101 | ); 102 | }, 103 | 104 | renderShots() { 105 | return ; 114 | }, 115 | 116 | renderRow(shot) { 117 | return this.selectShot(shot)} 119 | shot={shot} 120 | />; 121 | }, 122 | 123 | selectShot(shot) { 124 | console.log(shot); 125 | debugger; 126 | this.props.navigator.push({ 127 | component: ShotDetails, 128 | passProps: {shot}, 129 | title: shot.title 130 | }); 131 | }, 132 | }); 133 | 134 | var styles = StyleSheet.create({ 135 | listStyle: { 136 | flex: 1, 137 | backgroundColor: "red" 138 | }, 139 | listView: { 140 | flex: 1, 141 | backgroundColor: "coral" 142 | }, 143 | spinner: { 144 | width: 50, 145 | }, 146 | headerContent: { 147 | flex: 1, 148 | alignItems: "center", 149 | justifyContent: "center", 150 | backgroundColor: "transparent", 151 | }, 152 | innerHeaderContent: { 153 | marginTop: 30, 154 | alignItems: "center" 155 | }, 156 | playerInfo: { 157 | flex: 1, 158 | alignItems: "center", 159 | justifyContent: "center", 160 | backgroundColor: "white", 161 | flexDirection: "row" 162 | }, 163 | playerUsername: { 164 | color: "#fff", 165 | fontWeight: "300" 166 | }, 167 | playerName: { 168 | fontSize: 14, 169 | color: "#fff", 170 | fontWeight: "900", 171 | lineHeight: 18 172 | }, 173 | //Player details list 174 | playerDetailsRow: { 175 | flex: 1, 176 | alignItems: "center", 177 | justifyContent: "center", 178 | flexDirection: "row", 179 | width: screen.width / 2, 180 | marginTop: 20 181 | }, 182 | playerCounter: { 183 | flex: 1, 184 | alignItems: "center" 185 | }, 186 | playerCounterValue: { 187 | color: "#fff", 188 | fontWeight: "900", 189 | fontSize: 14, 190 | marginTop: 5, 191 | }, 192 | playerAvatar: { 193 | width: 80, 194 | height: 80, 195 | borderRadius: 40, 196 | borderWidth: 2, 197 | borderColor: "#fff", 198 | marginBottom: 10 199 | }, 200 | //Modal 201 | playerImageModal: { 202 | height: screen.height / 3, 203 | resizeMode: "contain" 204 | }, 205 | //playerContent 206 | playerContent: { 207 | padding: 20 208 | } 209 | }); 210 | 211 | module.exports = Player; 212 | -------------------------------------------------------------------------------- /comment/Scrollable.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by xayoung on 9/7/16. 3 | */ 4 | 5 | import React, { Component } from 'react'; 6 | import { 7 | AppRegistry, 8 | StyleSheet, 9 | Text, 10 | View, 11 | Navigator, 12 | ScrollView 13 | 14 | } from 'react-native'; 15 | 16 | import FacebookTabBar from './FacebookTabBar'; 17 | import ScrollableTabView from 'react-native-scrollable-tab-view'; 18 | 19 | var ShotList = require("./Dribbble/ShotList"); 20 | var ProjectsList = require("./Behance/ProjectsList"); 21 | 22 | 23 | class Scrollable extends Component { 24 | render() { 25 | 26 | 27 | return ( 28 | } 32 | > 33 | 37 | 38 | 42 | 43 | 44 | 45 | 46 | ); 47 | } 48 | } 49 | 50 | const styles = StyleSheet.create({ 51 | tabView: { 52 | flex: 1, 53 | padding: 10, 54 | backgroundColor: 'rgba(0,0,0,0.01)', 55 | }, 56 | 57 | }); 58 | 59 | //输出类 60 | module.exports = Scrollable; -------------------------------------------------------------------------------- /comment/api.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var Dribbble_API_URL = "https://api.dribbble.com/v1/", 4 | Dribbble_ACCESS_TOKEN = "682980c8af77de282f59ac36673dbb8af7bb588e7798654fd308e9d84276b5c1", 5 | Behance_API_URL = "http://www.behance.net/v2/projects", 6 | Behance_ACCESS_TOKEN = "ZQCdTvMMZC7ZEj7zuJ7ojCH9dAs1Soi1"; 7 | 8 | function fetchDribbbleData(URL) { 9 | return fetch(URL, { 10 | headers: { 11 | "Authorization": "Bearer " + Dribbble_ACCESS_TOKEN 12 | } 13 | }).then((response) => response.json()) 14 | } 15 | 16 | function fetchBehanceData(URL) { 17 | return fetch(URL, { 18 | headers: { 19 | 20 | } 21 | }).then((response) => response.json()) 22 | } 23 | 24 | module.exports = { 25 | getShotsByType(type, pageNumber){ 26 | var URL = Dribbble_API_URL + "shots/?list=" + type; 27 | if (pageNumber) { 28 | URL += "&per_page=8&page=" + pageNumber; 29 | } 30 | console.log(URL); 31 | return fetchDribbbleData(URL); 32 | }, 33 | 34 | getResources(url){ 35 | console.log(url) 36 | return fetchDribbbleData(url); 37 | }, 38 | 39 | getBehanceProjectsByType(fields, pageNumber){ 40 | var URL = Behance_API_URL + "?client_id=" + Behance_ACCESS_TOKEN; 41 | if (pageNumber) { 42 | URL += "&page=" + pageNumber; 43 | } 44 | if (fields) { 45 | URL += "&field=" + fields; 46 | } 47 | 48 | return fetchBehanceData(URL); 49 | }, 50 | 51 | getBehanceProjectResources(id){ 52 | var URL = Behance_API_URL + "/" + id + "?client_id=" + Behance_ACCESS_TOKEN; 53 | console.log(URL) 54 | return fetchBehanceData(URL); 55 | }, 56 | 57 | }; 58 | -------------------------------------------------------------------------------- /comment/getImage.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | shotImage(shot) { 5 | var uri = shot.images.normal ? shot.images.normal : shot.images.teaser; 6 | return {uri}; 7 | }, 8 | 9 | shotHidpiImage(shot) { 10 | var uri = shot.images.hidpi ? shot.images.hidpi : shot.images.normal; 11 | return {uri}; 12 | }, 13 | 14 | coversImage(project) { 15 | var uri = project.covers['404'] ? project.covers['404'] : project.covers['230'] ; 16 | 17 | return {uri}; 18 | }, 19 | coversOwnersImage(project) { 20 | var uri = project.owners[0].images['100'] ? project.owners[0].images['115'] : project.owners[0].images['138'] ; 21 | 22 | return {uri}; 23 | }, 24 | projectImage(modules) { 25 | var uri = modules.src; 26 | 27 | return {uri}; 28 | }, 29 | } 30 | -------------------------------------------------------------------------------- /index.android.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | * @flow 5 | */ 6 | 7 | import React, { Component } from 'react'; 8 | import { 9 | AppRegistry, 10 | StyleSheet, 11 | Text, 12 | View, 13 | Navigator, 14 | ScrollView 15 | } from 'react-native'; 16 | 17 | var ScrollableView = require("./comment/Scrollable"); 18 | class Designer extends Component { 19 | render() { 20 | return ( 21 | 22 | { 25 | return Navigator.SceneConfigs.PushFromRight; 26 | }} 27 | renderScene={(route,navigator)=>{ 28 | let Component = route.component; 29 | return ; 30 | }} 31 | /> 32 | ); 33 | } 34 | } 35 | 36 | const styles = StyleSheet.create({ 37 | tabView: { 38 | flex: 1, 39 | padding: 10, 40 | backgroundColor: 'rgba(0,0,0,0.01)', 41 | }, 42 | 43 | }); 44 | 45 | AppRegistry.registerComponent('Designer', () => Designer); 46 | -------------------------------------------------------------------------------- /index.ios.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | * @flow 5 | */ 6 | 7 | import React, { Component } from 'react'; 8 | import { 9 | AppRegistry, 10 | StyleSheet, 11 | Text, 12 | View, 13 | Navigator, 14 | ScrollView 15 | 16 | } from 'react-native'; 17 | 18 | 19 | 20 | var ShotList = require("./comment/Dribbble/ShotList"); 21 | var ScrollableView = require("./comment/Scrollable"); 22 | 23 | class Designer extends Component { 24 | render() { 25 | return ( 26 | { 29 | return Navigator.SceneConfigs.PushFromRight; 30 | }} 31 | renderScene={(route,navigator)=>{ 32 | let Component = route.component; 33 | return ; 34 | }} 35 | /> 36 | ); 37 | } 38 | } 39 | 40 | const styles = StyleSheet.create({ 41 | tabView: { 42 | flex: 1, 43 | padding: 10, 44 | backgroundColor: 'rgba(0,0,0,0.01)', 45 | }, 46 | 47 | }); 48 | 49 | AppRegistry.registerComponent('Designer', () => Designer); 50 | -------------------------------------------------------------------------------- /ios/Designer.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 11 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 12 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 13 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 14 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 15 | 00E356F31AD99517003FC87E /* DesignerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* DesignerTests.m */; }; 16 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 17 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 18 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; 19 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 20 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 21 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 22 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 23 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 24 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 25 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 26 | AA35A3381D8D7FE8000980C3 /* libART.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA35A32D1D8D7FDE000980C3 /* libART.a */; }; 27 | AA8BA8D21D8046BE00F00D00 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA8BA8CA1D8046BE00F00D00 /* Entypo.ttf */; }; 28 | AA8BA8D31D8046BE00F00D00 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA8BA8CB1D8046BE00F00D00 /* EvilIcons.ttf */; }; 29 | AA8BA8D41D8046BE00F00D00 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA8BA8CC1D8046BE00F00D00 /* FontAwesome.ttf */; }; 30 | AA8BA8D51D8046BE00F00D00 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA8BA8CD1D8046BE00F00D00 /* Foundation.ttf */; }; 31 | AA8BA8D61D8046BE00F00D00 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA8BA8CE1D8046BE00F00D00 /* Ionicons.ttf */; }; 32 | AA8BA8D71D8046BE00F00D00 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA8BA8CF1D8046BE00F00D00 /* MaterialIcons.ttf */; }; 33 | AA8BA8D81D8046BE00F00D00 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA8BA8D01D8046BE00F00D00 /* Octicons.ttf */; }; 34 | AA8BA8D91D8046BE00F00D00 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA8BA8D11D8046BE00F00D00 /* Zocial.ttf */; }; 35 | /* End PBXBuildFile section */ 36 | 37 | /* Begin PBXContainerItemProxy section */ 38 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 39 | isa = PBXContainerItemProxy; 40 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 41 | proxyType = 2; 42 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 43 | remoteInfo = RCTActionSheet; 44 | }; 45 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 46 | isa = PBXContainerItemProxy; 47 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 48 | proxyType = 2; 49 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 50 | remoteInfo = RCTGeolocation; 51 | }; 52 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 53 | isa = PBXContainerItemProxy; 54 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 55 | proxyType = 2; 56 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 57 | remoteInfo = RCTImage; 58 | }; 59 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 60 | isa = PBXContainerItemProxy; 61 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 62 | proxyType = 2; 63 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 64 | remoteInfo = RCTNetwork; 65 | }; 66 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 67 | isa = PBXContainerItemProxy; 68 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 69 | proxyType = 2; 70 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 71 | remoteInfo = RCTVibration; 72 | }; 73 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 74 | isa = PBXContainerItemProxy; 75 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 76 | proxyType = 1; 77 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 78 | remoteInfo = Designer; 79 | }; 80 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 81 | isa = PBXContainerItemProxy; 82 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 83 | proxyType = 2; 84 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 85 | remoteInfo = RCTSettings; 86 | }; 87 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 88 | isa = PBXContainerItemProxy; 89 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 90 | proxyType = 2; 91 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 92 | remoteInfo = RCTWebSocket; 93 | }; 94 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 95 | isa = PBXContainerItemProxy; 96 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 97 | proxyType = 2; 98 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 99 | remoteInfo = React; 100 | }; 101 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 102 | isa = PBXContainerItemProxy; 103 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 104 | proxyType = 2; 105 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 106 | remoteInfo = RCTLinking; 107 | }; 108 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 109 | isa = PBXContainerItemProxy; 110 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 111 | proxyType = 2; 112 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 113 | remoteInfo = RCTText; 114 | }; 115 | AA35A32C1D8D7FDE000980C3 /* PBXContainerItemProxy */ = { 116 | isa = PBXContainerItemProxy; 117 | containerPortal = AA35A3281D8D7FDE000980C3 /* ART.xcodeproj */; 118 | proxyType = 2; 119 | remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C; 120 | remoteInfo = ART; 121 | }; 122 | /* End PBXContainerItemProxy section */ 123 | 124 | /* Begin PBXFileReference section */ 125 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 126 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 127 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 128 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 129 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 130 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 131 | 00E356EE1AD99517003FC87E /* DesignerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 132 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 133 | 00E356F21AD99517003FC87E /* DesignerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DesignerTests.m; sourceTree = ""; }; 134 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 135 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 136 | 13B07F961A680F5B00A75B9A /* Designer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Designer.app; sourceTree = BUILT_PRODUCTS_DIR; }; 137 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Designer/AppDelegate.h; sourceTree = ""; }; 138 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Designer/AppDelegate.m; sourceTree = ""; }; 139 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 140 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Designer/Images.xcassets; sourceTree = ""; }; 141 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Designer/Info.plist; sourceTree = ""; }; 142 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Designer/main.m; sourceTree = ""; }; 143 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 144 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 145 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 146 | AA35A3281D8D7FDE000980C3 /* ART.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ART.xcodeproj; path = "../node_modules/react-native/Libraries/ART/ART.xcodeproj"; sourceTree = ""; }; 147 | AA8BA8CA1D8046BE00F00D00 /* Entypo.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Entypo.ttf; sourceTree = ""; }; 148 | AA8BA8CB1D8046BE00F00D00 /* EvilIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = EvilIcons.ttf; sourceTree = ""; }; 149 | AA8BA8CC1D8046BE00F00D00 /* FontAwesome.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = FontAwesome.ttf; sourceTree = ""; }; 150 | AA8BA8CD1D8046BE00F00D00 /* Foundation.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Foundation.ttf; sourceTree = ""; }; 151 | AA8BA8CE1D8046BE00F00D00 /* Ionicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Ionicons.ttf; sourceTree = ""; }; 152 | AA8BA8CF1D8046BE00F00D00 /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = MaterialIcons.ttf; sourceTree = ""; }; 153 | AA8BA8D01D8046BE00F00D00 /* Octicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Octicons.ttf; sourceTree = ""; }; 154 | AA8BA8D11D8046BE00F00D00 /* Zocial.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Zocial.ttf; sourceTree = ""; }; 155 | /* End PBXFileReference section */ 156 | 157 | /* Begin PBXFrameworksBuildPhase section */ 158 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 159 | isa = PBXFrameworksBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, 163 | ); 164 | runOnlyForDeploymentPostprocessing = 0; 165 | }; 166 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 167 | isa = PBXFrameworksBuildPhase; 168 | buildActionMask = 2147483647; 169 | files = ( 170 | AA35A3381D8D7FE8000980C3 /* libART.a in Frameworks */, 171 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 172 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 173 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 174 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 175 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, 176 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 177 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, 178 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 179 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 180 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | }; 184 | /* End PBXFrameworksBuildPhase section */ 185 | 186 | /* Begin PBXGroup section */ 187 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 188 | isa = PBXGroup; 189 | children = ( 190 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 191 | ); 192 | name = Products; 193 | sourceTree = ""; 194 | }; 195 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 196 | isa = PBXGroup; 197 | children = ( 198 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 199 | ); 200 | name = Products; 201 | sourceTree = ""; 202 | }; 203 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 207 | ); 208 | name = Products; 209 | sourceTree = ""; 210 | }; 211 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 212 | isa = PBXGroup; 213 | children = ( 214 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 215 | ); 216 | name = Products; 217 | sourceTree = ""; 218 | }; 219 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 220 | isa = PBXGroup; 221 | children = ( 222 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 223 | ); 224 | name = Products; 225 | sourceTree = ""; 226 | }; 227 | 00E356EF1AD99517003FC87E /* DesignerTests */ = { 228 | isa = PBXGroup; 229 | children = ( 230 | 00E356F21AD99517003FC87E /* DesignerTests.m */, 231 | 00E356F01AD99517003FC87E /* Supporting Files */, 232 | ); 233 | path = DesignerTests; 234 | sourceTree = ""; 235 | }; 236 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 237 | isa = PBXGroup; 238 | children = ( 239 | 00E356F11AD99517003FC87E /* Info.plist */, 240 | ); 241 | name = "Supporting Files"; 242 | sourceTree = ""; 243 | }; 244 | 139105B71AF99BAD00B5F7CC /* Products */ = { 245 | isa = PBXGroup; 246 | children = ( 247 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 248 | ); 249 | name = Products; 250 | sourceTree = ""; 251 | }; 252 | 139FDEE71B06529A00C62182 /* Products */ = { 253 | isa = PBXGroup; 254 | children = ( 255 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 256 | ); 257 | name = Products; 258 | sourceTree = ""; 259 | }; 260 | 13B07FAE1A68108700A75B9A /* Designer */ = { 261 | isa = PBXGroup; 262 | children = ( 263 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 264 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 265 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 266 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 267 | 13B07FB61A68108700A75B9A /* Info.plist */, 268 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 269 | 13B07FB71A68108700A75B9A /* main.m */, 270 | ); 271 | name = Designer; 272 | sourceTree = ""; 273 | }; 274 | 146834001AC3E56700842450 /* Products */ = { 275 | isa = PBXGroup; 276 | children = ( 277 | 146834041AC3E56700842450 /* libReact.a */, 278 | ); 279 | name = Products; 280 | sourceTree = ""; 281 | }; 282 | 78C398B11ACF4ADC00677621 /* Products */ = { 283 | isa = PBXGroup; 284 | children = ( 285 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 286 | ); 287 | name = Products; 288 | sourceTree = ""; 289 | }; 290 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 291 | isa = PBXGroup; 292 | children = ( 293 | AA35A3281D8D7FDE000980C3 /* ART.xcodeproj */, 294 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 295 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 296 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 297 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 298 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 299 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 300 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 301 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 302 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 303 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 304 | ); 305 | name = Libraries; 306 | sourceTree = ""; 307 | }; 308 | 832341B11AAA6A8300B99B32 /* Products */ = { 309 | isa = PBXGroup; 310 | children = ( 311 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 312 | ); 313 | name = Products; 314 | sourceTree = ""; 315 | }; 316 | 83CBB9F61A601CBA00E9B192 = { 317 | isa = PBXGroup; 318 | children = ( 319 | AA8BA8C91D8046BE00F00D00 /* Fonts */, 320 | 13B07FAE1A68108700A75B9A /* Designer */, 321 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 322 | 00E356EF1AD99517003FC87E /* DesignerTests */, 323 | 83CBBA001A601CBA00E9B192 /* Products */, 324 | ); 325 | indentWidth = 2; 326 | sourceTree = ""; 327 | tabWidth = 2; 328 | }; 329 | 83CBBA001A601CBA00E9B192 /* Products */ = { 330 | isa = PBXGroup; 331 | children = ( 332 | 13B07F961A680F5B00A75B9A /* Designer.app */, 333 | 00E356EE1AD99517003FC87E /* DesignerTests.xctest */, 334 | ); 335 | name = Products; 336 | sourceTree = ""; 337 | }; 338 | AA35A3291D8D7FDE000980C3 /* Products */ = { 339 | isa = PBXGroup; 340 | children = ( 341 | AA35A32D1D8D7FDE000980C3 /* libART.a */, 342 | ); 343 | name = Products; 344 | sourceTree = ""; 345 | }; 346 | AA8BA8C91D8046BE00F00D00 /* Fonts */ = { 347 | isa = PBXGroup; 348 | children = ( 349 | AA8BA8CA1D8046BE00F00D00 /* Entypo.ttf */, 350 | AA8BA8CB1D8046BE00F00D00 /* EvilIcons.ttf */, 351 | AA8BA8CC1D8046BE00F00D00 /* FontAwesome.ttf */, 352 | AA8BA8CD1D8046BE00F00D00 /* Foundation.ttf */, 353 | AA8BA8CE1D8046BE00F00D00 /* Ionicons.ttf */, 354 | AA8BA8CF1D8046BE00F00D00 /* MaterialIcons.ttf */, 355 | AA8BA8D01D8046BE00F00D00 /* Octicons.ttf */, 356 | AA8BA8D11D8046BE00F00D00 /* Zocial.ttf */, 357 | ); 358 | path = Fonts; 359 | sourceTree = ""; 360 | }; 361 | /* End PBXGroup section */ 362 | 363 | /* Begin PBXNativeTarget section */ 364 | 00E356ED1AD99517003FC87E /* DesignerTests */ = { 365 | isa = PBXNativeTarget; 366 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "DesignerTests" */; 367 | buildPhases = ( 368 | 00E356EA1AD99517003FC87E /* Sources */, 369 | 00E356EB1AD99517003FC87E /* Frameworks */, 370 | 00E356EC1AD99517003FC87E /* Resources */, 371 | ); 372 | buildRules = ( 373 | ); 374 | dependencies = ( 375 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 376 | ); 377 | name = DesignerTests; 378 | productName = DesignerTests; 379 | productReference = 00E356EE1AD99517003FC87E /* DesignerTests.xctest */; 380 | productType = "com.apple.product-type.bundle.unit-test"; 381 | }; 382 | 13B07F861A680F5B00A75B9A /* Designer */ = { 383 | isa = PBXNativeTarget; 384 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Designer" */; 385 | buildPhases = ( 386 | 13B07F871A680F5B00A75B9A /* Sources */, 387 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 388 | 13B07F8E1A680F5B00A75B9A /* Resources */, 389 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 390 | ); 391 | buildRules = ( 392 | ); 393 | dependencies = ( 394 | ); 395 | name = Designer; 396 | productName = "Hello World"; 397 | productReference = 13B07F961A680F5B00A75B9A /* Designer.app */; 398 | productType = "com.apple.product-type.application"; 399 | }; 400 | /* End PBXNativeTarget section */ 401 | 402 | /* Begin PBXProject section */ 403 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 404 | isa = PBXProject; 405 | attributes = { 406 | LastUpgradeCheck = 0810; 407 | ORGANIZATIONNAME = Facebook; 408 | TargetAttributes = { 409 | 00E356ED1AD99517003FC87E = { 410 | CreatedOnToolsVersion = 6.2; 411 | TestTargetID = 13B07F861A680F5B00A75B9A; 412 | }; 413 | 13B07F861A680F5B00A75B9A = { 414 | DevelopmentTeam = 6QYU33MRLQ; 415 | }; 416 | }; 417 | }; 418 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Designer" */; 419 | compatibilityVersion = "Xcode 3.2"; 420 | developmentRegion = English; 421 | hasScannedForEncodings = 0; 422 | knownRegions = ( 423 | en, 424 | Base, 425 | ); 426 | mainGroup = 83CBB9F61A601CBA00E9B192; 427 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 428 | projectDirPath = ""; 429 | projectReferences = ( 430 | { 431 | ProductGroup = AA35A3291D8D7FDE000980C3 /* Products */; 432 | ProjectRef = AA35A3281D8D7FDE000980C3 /* ART.xcodeproj */; 433 | }, 434 | { 435 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 436 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 437 | }, 438 | { 439 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 440 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 441 | }, 442 | { 443 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 444 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 445 | }, 446 | { 447 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 448 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 449 | }, 450 | { 451 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 452 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 453 | }, 454 | { 455 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 456 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 457 | }, 458 | { 459 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 460 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 461 | }, 462 | { 463 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 464 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 465 | }, 466 | { 467 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 468 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 469 | }, 470 | { 471 | ProductGroup = 146834001AC3E56700842450 /* Products */; 472 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 473 | }, 474 | ); 475 | projectRoot = ""; 476 | targets = ( 477 | 13B07F861A680F5B00A75B9A /* Designer */, 478 | 00E356ED1AD99517003FC87E /* DesignerTests */, 479 | ); 480 | }; 481 | /* End PBXProject section */ 482 | 483 | /* Begin PBXReferenceProxy section */ 484 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 485 | isa = PBXReferenceProxy; 486 | fileType = archive.ar; 487 | path = libRCTActionSheet.a; 488 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 489 | sourceTree = BUILT_PRODUCTS_DIR; 490 | }; 491 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 492 | isa = PBXReferenceProxy; 493 | fileType = archive.ar; 494 | path = libRCTGeolocation.a; 495 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 496 | sourceTree = BUILT_PRODUCTS_DIR; 497 | }; 498 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 499 | isa = PBXReferenceProxy; 500 | fileType = archive.ar; 501 | path = libRCTImage.a; 502 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 503 | sourceTree = BUILT_PRODUCTS_DIR; 504 | }; 505 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 506 | isa = PBXReferenceProxy; 507 | fileType = archive.ar; 508 | path = libRCTNetwork.a; 509 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 510 | sourceTree = BUILT_PRODUCTS_DIR; 511 | }; 512 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 513 | isa = PBXReferenceProxy; 514 | fileType = archive.ar; 515 | path = libRCTVibration.a; 516 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 517 | sourceTree = BUILT_PRODUCTS_DIR; 518 | }; 519 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 520 | isa = PBXReferenceProxy; 521 | fileType = archive.ar; 522 | path = libRCTSettings.a; 523 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 524 | sourceTree = BUILT_PRODUCTS_DIR; 525 | }; 526 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 527 | isa = PBXReferenceProxy; 528 | fileType = archive.ar; 529 | path = libRCTWebSocket.a; 530 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 531 | sourceTree = BUILT_PRODUCTS_DIR; 532 | }; 533 | 146834041AC3E56700842450 /* libReact.a */ = { 534 | isa = PBXReferenceProxy; 535 | fileType = archive.ar; 536 | path = libReact.a; 537 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 538 | sourceTree = BUILT_PRODUCTS_DIR; 539 | }; 540 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 541 | isa = PBXReferenceProxy; 542 | fileType = archive.ar; 543 | path = libRCTLinking.a; 544 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 545 | sourceTree = BUILT_PRODUCTS_DIR; 546 | }; 547 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 548 | isa = PBXReferenceProxy; 549 | fileType = archive.ar; 550 | path = libRCTText.a; 551 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 552 | sourceTree = BUILT_PRODUCTS_DIR; 553 | }; 554 | AA35A32D1D8D7FDE000980C3 /* libART.a */ = { 555 | isa = PBXReferenceProxy; 556 | fileType = archive.ar; 557 | path = libART.a; 558 | remoteRef = AA35A32C1D8D7FDE000980C3 /* PBXContainerItemProxy */; 559 | sourceTree = BUILT_PRODUCTS_DIR; 560 | }; 561 | /* End PBXReferenceProxy section */ 562 | 563 | /* Begin PBXResourcesBuildPhase section */ 564 | 00E356EC1AD99517003FC87E /* Resources */ = { 565 | isa = PBXResourcesBuildPhase; 566 | buildActionMask = 2147483647; 567 | files = ( 568 | ); 569 | runOnlyForDeploymentPostprocessing = 0; 570 | }; 571 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 572 | isa = PBXResourcesBuildPhase; 573 | buildActionMask = 2147483647; 574 | files = ( 575 | AA8BA8D71D8046BE00F00D00 /* MaterialIcons.ttf in Resources */, 576 | AA8BA8D81D8046BE00F00D00 /* Octicons.ttf in Resources */, 577 | AA8BA8D91D8046BE00F00D00 /* Zocial.ttf in Resources */, 578 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 579 | AA8BA8D41D8046BE00F00D00 /* FontAwesome.ttf in Resources */, 580 | AA8BA8D31D8046BE00F00D00 /* EvilIcons.ttf in Resources */, 581 | AA8BA8D61D8046BE00F00D00 /* Ionicons.ttf in Resources */, 582 | AA8BA8D51D8046BE00F00D00 /* Foundation.ttf in Resources */, 583 | AA8BA8D21D8046BE00F00D00 /* Entypo.ttf in Resources */, 584 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 585 | ); 586 | runOnlyForDeploymentPostprocessing = 0; 587 | }; 588 | /* End PBXResourcesBuildPhase section */ 589 | 590 | /* Begin PBXShellScriptBuildPhase section */ 591 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 592 | isa = PBXShellScriptBuildPhase; 593 | buildActionMask = 2147483647; 594 | files = ( 595 | ); 596 | inputPaths = ( 597 | ); 598 | name = "Bundle React Native code and images"; 599 | outputPaths = ( 600 | ); 601 | runOnlyForDeploymentPostprocessing = 0; 602 | shellPath = /bin/sh; 603 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; 604 | }; 605 | /* End PBXShellScriptBuildPhase section */ 606 | 607 | /* Begin PBXSourcesBuildPhase section */ 608 | 00E356EA1AD99517003FC87E /* Sources */ = { 609 | isa = PBXSourcesBuildPhase; 610 | buildActionMask = 2147483647; 611 | files = ( 612 | 00E356F31AD99517003FC87E /* DesignerTests.m in Sources */, 613 | ); 614 | runOnlyForDeploymentPostprocessing = 0; 615 | }; 616 | 13B07F871A680F5B00A75B9A /* Sources */ = { 617 | isa = PBXSourcesBuildPhase; 618 | buildActionMask = 2147483647; 619 | files = ( 620 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 621 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 622 | ); 623 | runOnlyForDeploymentPostprocessing = 0; 624 | }; 625 | /* End PBXSourcesBuildPhase section */ 626 | 627 | /* Begin PBXTargetDependency section */ 628 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 629 | isa = PBXTargetDependency; 630 | target = 13B07F861A680F5B00A75B9A /* Designer */; 631 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 632 | }; 633 | /* End PBXTargetDependency section */ 634 | 635 | /* Begin PBXVariantGroup section */ 636 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 637 | isa = PBXVariantGroup; 638 | children = ( 639 | 13B07FB21A68108700A75B9A /* Base */, 640 | ); 641 | name = LaunchScreen.xib; 642 | path = Designer; 643 | sourceTree = ""; 644 | }; 645 | /* End PBXVariantGroup section */ 646 | 647 | /* Begin XCBuildConfiguration section */ 648 | 00E356F61AD99517003FC87E /* Debug */ = { 649 | isa = XCBuildConfiguration; 650 | buildSettings = { 651 | BUNDLE_LOADER = "$(TEST_HOST)"; 652 | GCC_PREPROCESSOR_DEFINITIONS = ( 653 | "DEBUG=1", 654 | "$(inherited)", 655 | ); 656 | INFOPLIST_FILE = DesignerTests/Info.plist; 657 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 658 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 659 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 660 | PRODUCT_NAME = "$(TARGET_NAME)"; 661 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Designer.app/Designer"; 662 | }; 663 | name = Debug; 664 | }; 665 | 00E356F71AD99517003FC87E /* Release */ = { 666 | isa = XCBuildConfiguration; 667 | buildSettings = { 668 | BUNDLE_LOADER = "$(TEST_HOST)"; 669 | COPY_PHASE_STRIP = NO; 670 | INFOPLIST_FILE = DesignerTests/Info.plist; 671 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 672 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 673 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 674 | PRODUCT_NAME = "$(TARGET_NAME)"; 675 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Designer.app/Designer"; 676 | }; 677 | name = Release; 678 | }; 679 | 13B07F941A680F5B00A75B9A /* Debug */ = { 680 | isa = XCBuildConfiguration; 681 | buildSettings = { 682 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 683 | CODE_SIGN_IDENTITY = "iPhone Developer"; 684 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 685 | DEAD_CODE_STRIPPING = NO; 686 | DEVELOPMENT_TEAM = 6QYU33MRLQ; 687 | HEADER_SEARCH_PATHS = ( 688 | "$(inherited)", 689 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 690 | "$(SRCROOT)/../node_modules/react-native/React/**", 691 | ); 692 | INFOPLIST_FILE = Designer/Info.plist; 693 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 694 | OTHER_LDFLAGS = ( 695 | "$(inherited)", 696 | "-ObjC", 697 | "-lc++", 698 | ); 699 | PRODUCT_BUNDLE_IDENTIFIER = cn.xayoung.captures; 700 | PRODUCT_NAME = Designer; 701 | PROVISIONING_PROFILE = ""; 702 | }; 703 | name = Debug; 704 | }; 705 | 13B07F951A680F5B00A75B9A /* Release */ = { 706 | isa = XCBuildConfiguration; 707 | buildSettings = { 708 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 709 | CODE_SIGN_IDENTITY = "iPhone Developer"; 710 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 711 | DEVELOPMENT_TEAM = 6QYU33MRLQ; 712 | HEADER_SEARCH_PATHS = ( 713 | "$(inherited)", 714 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 715 | "$(SRCROOT)/../node_modules/react-native/React/**", 716 | ); 717 | INFOPLIST_FILE = Designer/Info.plist; 718 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 719 | OTHER_LDFLAGS = ( 720 | "$(inherited)", 721 | "-ObjC", 722 | "-lc++", 723 | ); 724 | PRODUCT_BUNDLE_IDENTIFIER = cn.xayoung.captures; 725 | PRODUCT_NAME = Designer; 726 | PROVISIONING_PROFILE = ""; 727 | }; 728 | name = Release; 729 | }; 730 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 731 | isa = XCBuildConfiguration; 732 | buildSettings = { 733 | ALWAYS_SEARCH_USER_PATHS = NO; 734 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 735 | CLANG_CXX_LIBRARY = "libc++"; 736 | CLANG_ENABLE_MODULES = YES; 737 | CLANG_ENABLE_OBJC_ARC = YES; 738 | CLANG_WARN_BOOL_CONVERSION = YES; 739 | CLANG_WARN_CONSTANT_CONVERSION = YES; 740 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 741 | CLANG_WARN_EMPTY_BODY = YES; 742 | CLANG_WARN_ENUM_CONVERSION = YES; 743 | CLANG_WARN_INFINITE_RECURSION = YES; 744 | CLANG_WARN_INT_CONVERSION = YES; 745 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 746 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 747 | CLANG_WARN_UNREACHABLE_CODE = YES; 748 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 749 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 750 | COPY_PHASE_STRIP = NO; 751 | ENABLE_STRICT_OBJC_MSGSEND = YES; 752 | ENABLE_TESTABILITY = YES; 753 | GCC_C_LANGUAGE_STANDARD = gnu99; 754 | GCC_DYNAMIC_NO_PIC = NO; 755 | GCC_NO_COMMON_BLOCKS = YES; 756 | GCC_OPTIMIZATION_LEVEL = 0; 757 | GCC_PREPROCESSOR_DEFINITIONS = ( 758 | "DEBUG=1", 759 | "$(inherited)", 760 | ); 761 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 762 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 763 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 764 | GCC_WARN_UNDECLARED_SELECTOR = YES; 765 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 766 | GCC_WARN_UNUSED_FUNCTION = YES; 767 | GCC_WARN_UNUSED_VARIABLE = YES; 768 | HEADER_SEARCH_PATHS = ( 769 | "$(inherited)", 770 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 771 | "$(SRCROOT)/../node_modules/react-native/React/**", 772 | ); 773 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 774 | MTL_ENABLE_DEBUG_INFO = YES; 775 | ONLY_ACTIVE_ARCH = YES; 776 | SDKROOT = iphoneos; 777 | }; 778 | name = Debug; 779 | }; 780 | 83CBBA211A601CBA00E9B192 /* Release */ = { 781 | isa = XCBuildConfiguration; 782 | buildSettings = { 783 | ALWAYS_SEARCH_USER_PATHS = NO; 784 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 785 | CLANG_CXX_LIBRARY = "libc++"; 786 | CLANG_ENABLE_MODULES = YES; 787 | CLANG_ENABLE_OBJC_ARC = YES; 788 | CLANG_WARN_BOOL_CONVERSION = YES; 789 | CLANG_WARN_CONSTANT_CONVERSION = YES; 790 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 791 | CLANG_WARN_EMPTY_BODY = YES; 792 | CLANG_WARN_ENUM_CONVERSION = YES; 793 | CLANG_WARN_INFINITE_RECURSION = YES; 794 | CLANG_WARN_INT_CONVERSION = YES; 795 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 796 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 797 | CLANG_WARN_UNREACHABLE_CODE = YES; 798 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 799 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 800 | COPY_PHASE_STRIP = YES; 801 | ENABLE_NS_ASSERTIONS = NO; 802 | ENABLE_STRICT_OBJC_MSGSEND = YES; 803 | GCC_C_LANGUAGE_STANDARD = gnu99; 804 | GCC_NO_COMMON_BLOCKS = YES; 805 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 806 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 807 | GCC_WARN_UNDECLARED_SELECTOR = YES; 808 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 809 | GCC_WARN_UNUSED_FUNCTION = YES; 810 | GCC_WARN_UNUSED_VARIABLE = YES; 811 | HEADER_SEARCH_PATHS = ( 812 | "$(inherited)", 813 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 814 | "$(SRCROOT)/../node_modules/react-native/React/**", 815 | ); 816 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 817 | MTL_ENABLE_DEBUG_INFO = NO; 818 | SDKROOT = iphoneos; 819 | VALIDATE_PRODUCT = YES; 820 | }; 821 | name = Release; 822 | }; 823 | /* End XCBuildConfiguration section */ 824 | 825 | /* Begin XCConfigurationList section */ 826 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "DesignerTests" */ = { 827 | isa = XCConfigurationList; 828 | buildConfigurations = ( 829 | 00E356F61AD99517003FC87E /* Debug */, 830 | 00E356F71AD99517003FC87E /* Release */, 831 | ); 832 | defaultConfigurationIsVisible = 0; 833 | defaultConfigurationName = Release; 834 | }; 835 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Designer" */ = { 836 | isa = XCConfigurationList; 837 | buildConfigurations = ( 838 | 13B07F941A680F5B00A75B9A /* Debug */, 839 | 13B07F951A680F5B00A75B9A /* Release */, 840 | ); 841 | defaultConfigurationIsVisible = 0; 842 | defaultConfigurationName = Release; 843 | }; 844 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Designer" */ = { 845 | isa = XCConfigurationList; 846 | buildConfigurations = ( 847 | 83CBBA201A601CBA00E9B192 /* Debug */, 848 | 83CBBA211A601CBA00E9B192 /* Release */, 849 | ); 850 | defaultConfigurationIsVisible = 0; 851 | defaultConfigurationName = Release; 852 | }; 853 | /* End XCConfigurationList section */ 854 | }; 855 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 856 | } 857 | -------------------------------------------------------------------------------- /ios/Designer.xcodeproj/xcshareddata/xcschemes/Designer.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /ios/Designer/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (nonatomic, strong) UIWindow *window; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ios/Designer/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "AppDelegate.h" 11 | 12 | #import "RCTBundleURLProvider.h" 13 | #import "RCTRootView.h" 14 | 15 | @implementation AppDelegate 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 18 | { 19 | NSURL *jsCodeLocation; 20 | 21 | jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; 22 | 23 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 24 | moduleName:@"Designer" 25 | initialProperties:nil 26 | launchOptions:launchOptions]; 27 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 28 | 29 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 30 | UIViewController *rootViewController = [UIViewController new]; 31 | rootViewController.view = rootView; 32 | self.window.rootViewController = rootViewController; 33 | [self.window makeKeyAndVisible]; 34 | return YES; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ios/Designer/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "icon-29.png", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "idiom" : "iphone", 22 | "filename" : "icon-29@2x.png", 23 | "scale" : "2x" 24 | }, 25 | { 26 | "size" : "29x29", 27 | "idiom" : "iphone", 28 | "filename" : "icon-29@3x.png", 29 | "scale" : "3x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "idiom" : "iphone", 34 | "filename" : "icon-40@2x.png", 35 | "scale" : "2x" 36 | }, 37 | { 38 | "size" : "40x40", 39 | "idiom" : "iphone", 40 | "filename" : "icon-40@3x.png", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "size" : "57x57", 45 | "idiom" : "iphone", 46 | "filename" : "icon-57.png", 47 | "scale" : "1x" 48 | }, 49 | { 50 | "size" : "57x57", 51 | "idiom" : "iphone", 52 | "filename" : "icon-57@2x.png", 53 | "scale" : "2x" 54 | }, 55 | { 56 | "size" : "60x60", 57 | "idiom" : "iphone", 58 | "filename" : "icon-60@2x.png", 59 | "scale" : "2x" 60 | }, 61 | { 62 | "size" : "60x60", 63 | "idiom" : "iphone", 64 | "filename" : "icon-60@3x.png", 65 | "scale" : "3x" 66 | }, 67 | { 68 | "idiom" : "ipad", 69 | "size" : "20x20", 70 | "scale" : "1x" 71 | }, 72 | { 73 | "idiom" : "ipad", 74 | "size" : "20x20", 75 | "scale" : "2x" 76 | }, 77 | { 78 | "size" : "29x29", 79 | "idiom" : "ipad", 80 | "filename" : "icon-29-ipad.png", 81 | "scale" : "1x" 82 | }, 83 | { 84 | "size" : "29x29", 85 | "idiom" : "ipad", 86 | "filename" : "icon-29@2x-ipad.png", 87 | "scale" : "2x" 88 | }, 89 | { 90 | "size" : "40x40", 91 | "idiom" : "ipad", 92 | "filename" : "icon-40.png", 93 | "scale" : "1x" 94 | }, 95 | { 96 | "size" : "40x40", 97 | "idiom" : "ipad", 98 | "filename" : "icon-40@2x.png", 99 | "scale" : "2x" 100 | }, 101 | { 102 | "size" : "50x50", 103 | "idiom" : "ipad", 104 | "filename" : "icon-50.png", 105 | "scale" : "1x" 106 | }, 107 | { 108 | "size" : "50x50", 109 | "idiom" : "ipad", 110 | "filename" : "icon-50@2x.png", 111 | "scale" : "2x" 112 | }, 113 | { 114 | "size" : "72x72", 115 | "idiom" : "ipad", 116 | "filename" : "icon-72.png", 117 | "scale" : "1x" 118 | }, 119 | { 120 | "size" : "72x72", 121 | "idiom" : "ipad", 122 | "filename" : "icon-72@2x.png", 123 | "scale" : "2x" 124 | }, 125 | { 126 | "size" : "76x76", 127 | "idiom" : "ipad", 128 | "filename" : "icon-76.png", 129 | "scale" : "1x" 130 | }, 131 | { 132 | "size" : "76x76", 133 | "idiom" : "ipad", 134 | "filename" : "icon-76@2x.png", 135 | "scale" : "2x" 136 | }, 137 | { 138 | "size" : "83.5x83.5", 139 | "idiom" : "ipad", 140 | "filename" : "icon-83.5@2x.png", 141 | "scale" : "2x" 142 | } 143 | ], 144 | "info" : { 145 | "version" : 1, 146 | "author" : "xcode" 147 | } 148 | } -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29-ipad.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-50.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-50@2x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-57.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-57@2x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-72.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-72@2x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/iTunesArtwork.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "iTunesArtwork.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "iTunesArtwork@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/iTunesArtwork.imageset/iTunesArtwork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/iTunesArtwork.imageset/iTunesArtwork.png -------------------------------------------------------------------------------- /ios/Designer/Images.xcassets/iTunesArtwork.imageset/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Designer/Images.xcassets/iTunesArtwork.imageset/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /ios/Designer/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Design Captures 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 4 25 | ITSAppUsesNonExemptEncryption 26 | 27 | LSRequiresIPhoneOS 28 | 29 | NSAppTransportSecurity 30 | 31 | NSAllowsArbitraryLoads 32 | 33 | NSExceptionDomains 34 | 35 | localhost 36 | 37 | NSTemporaryExceptionAllowsInsecureHTTPLoads 38 | 39 | 40 | 41 | 42 | NSLocationWhenInUseUsageDescription 43 | 44 | UIAppFonts 45 | 46 | EvilIcons.ttf 47 | FontAwesome.ttf 48 | Foundation.ttf 49 | Ionicons.ttf 50 | MaterialIcons.ttf 51 | Octicons.ttf 52 | Zocial.ttf 53 | Entypo.ttf 54 | 55 | UILaunchStoryboardName 56 | LaunchScreen 57 | UIRequiredDeviceCapabilities 58 | 59 | armv7 60 | 61 | UISupportedInterfaceOrientations 62 | 63 | UIInterfaceOrientationPortrait 64 | 65 | UIViewControllerBasedStatusBarAppearance 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /ios/Designer/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "AppDelegate.h" 13 | 14 | int main(int argc, char * argv[]) { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ios/DesignerTests/DesignerTests.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | #import 12 | 13 | #import "RCTLog.h" 14 | #import "RCTRootView.h" 15 | 16 | #define TIMEOUT_SECONDS 600 17 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" 18 | 19 | @interface DesignerTests : XCTestCase 20 | 21 | @end 22 | 23 | @implementation DesignerTests 24 | 25 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 26 | { 27 | if (test(view)) { 28 | return YES; 29 | } 30 | for (UIView *subview in [view subviews]) { 31 | if ([self findSubviewInView:subview matching:test]) { 32 | return YES; 33 | } 34 | } 35 | return NO; 36 | } 37 | 38 | - (void)testRendersWelcomeScreen 39 | { 40 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 41 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 42 | BOOL foundElement = NO; 43 | 44 | __block NSString *redboxError = nil; 45 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 46 | if (level >= RCTLogLevelError) { 47 | redboxError = message; 48 | } 49 | }); 50 | 51 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 52 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 53 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 54 | 55 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 56 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 57 | return YES; 58 | } 59 | return NO; 60 | }]; 61 | } 62 | 63 | RCTSetLogFunction(RCTDefaultLogFunction); 64 | 65 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 66 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 67 | } 68 | 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /ios/DesignerTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/Fonts/Entypo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Fonts/Entypo.ttf -------------------------------------------------------------------------------- /ios/Fonts/EvilIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Fonts/EvilIcons.ttf -------------------------------------------------------------------------------- /ios/Fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /ios/Fonts/Foundation.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Fonts/Foundation.ttf -------------------------------------------------------------------------------- /ios/Fonts/Ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Fonts/Ionicons.ttf -------------------------------------------------------------------------------- /ios/Fonts/MaterialIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Fonts/MaterialIcons.ttf -------------------------------------------------------------------------------- /ios/Fonts/Octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Fonts/Octicons.ttf -------------------------------------------------------------------------------- /ios/Fonts/Zocial.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xayoung/react-native-design-captures/2d06c135c5c120134e7e848dfa81cbcb7566e076/ios/Fonts/Zocial.ttf -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Designer", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "node node_modules/react-native/local-cli/cli.js start" 7 | }, 8 | "dependencies": { 9 | "react": "15.2.1", 10 | "react-native": "0.31.0", 11 | "react-native-animated-segmented-control": "0.0.1", 12 | "react-native-button": "^1.7.0", 13 | "react-native-gifted-listview": "0.0.15", 14 | "react-native-htmlview": "^0.5.0", 15 | "react-native-image-progress": "^0.6.0", 16 | "react-native-modal": "^0.4.0", 17 | "react-native-modalbox": "^1.3.7", 18 | "react-native-parallax-view": "^2.0.5", 19 | "react-native-photo-view": "^1.0.1", 20 | "react-native-progress": "^3.1.0", 21 | "react-native-radio-buttons": "^0.13.0", 22 | "react-native-scrollable-tab-view": "^0.6.0", 23 | "react-native-vector-icons": "^2.1.0", 24 | "react-tween-state": "0.0.5" 25 | } 26 | } 27 | --------------------------------------------------------------------------------