diff --git a/.buckconfig b/.buckconfig new file mode 100644 index 0000000..934256c --- /dev/null +++ b/.buckconfig @@ -0,0 +1,6 @@ + +[android] + target = Google Inc.:Google APIs:23 + +[maven_repositories] + central = https://repo1.maven.org/maven2 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d42ff18 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.pbxproj -text diff --git a/.gitignore b/.gitignore index 16018a2..b1cf11b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,174 +1,10 @@ -# Created by https://www.gitignore.io/api/reactnative - -### ReactNative ### -# React Native Stack Base -### ReactNative.Android Stack ### -# Built application files -*.apk -*.ap_ - -# Files for the ART/Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ - -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# Intellij -*.iml -.idea - -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild - -# Freeline -freeline.py -freeline/ -freeline_project_description.json - -### ReactNative.macOS Stack ### -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### ReactNative.Buck Stack ### -buck-out/ -.buckconfig.local -.buckd/ -.buckversion -.fakebuckversion - -### ReactNative.Node Stack ### -# Logs -logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - - -### ReactNative.Gradle Stack ### -.gradle -**/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties +# OSX +# +.DS_Store -### ReactNative.Xcode Stack ### # Xcode # -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## Build generated -DerivedData/ - -## Various settings +build/ *.pbxuser !default.pbxuser *.mode1v3 @@ -177,27 +13,49 @@ DerivedData/ !default.mode2v3 *.perspectivev3 !default.perspectivev3 -xcuserdata/ - -## Other -*.moved-aside +xcuserdata *.xccheckout -*.xcscmblueprint - -### ReactNative.Linux Stack ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace -# Linux trash folder which might appear on any partition or disk -.Trash-* +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml -# .nfs files are created when an open file is removed but is still being accessed -.nfs* +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log +# BUCK +buck-out/ +\.buckd/ +*.keystore -# End of https://www.gitignore.io/api/reactnative +<<<<<<< HEAD +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ +======= +# Miscellaneous +MISC/ +>>>>>>> origin/GlobalNavBar + +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots + +# Bundle artifact +*.jsbundle diff --git a/.watchmanconfig b/.watchmanconfig index 0967ef4..9e26dfe 100644 --- a/.watchmanconfig +++ b/.watchmanconfig @@ -1 +1 @@ -{} +{} \ No newline at end of file diff --git a/App.js b/App.js index e839c58..a17812c 100644 --- a/App.js +++ b/App.js @@ -1,15 +1,25 @@ import React from 'react'; -import { StyleSheet, View, TouchableHighlight, Image, Dimensions } from 'react-native'; -import { StackNavigator } from 'react-navigation'; +import { StyleSheet, View, TouchableHighlight, Image, Dimensions, Text } from 'react-native'; +import { createBottomTabNavigator, TabNavigator, TabBarBottom } from 'react-navigation'; import YouTube from 'react-native-youtube'; import { videos } from './config'; -import ObjectChooser from './ObjectChooser'; -import HomeScreen from './HomeScreen'; +import { Sound } from 'react-native-sound'; +import ObjectChooser from './ObjectChooser'; +import RemnantChooser from './RemnantChooser'; +import RemnantDisplay from './Remnant'; import AboutPage from "./page/About.js"; +import HomeScreen from "./HomeScreen.js"; +import UploadPage from "./page/Upload.js"; +import ContactPage from "./page/Contact.js"; +import HelpPage from "./page/Help.js"; +import SettingsPage from "./page/SettingsPage"; + +import { Button } from "./component/Button.js"; +import pageStyles from "./page/styles.js"; +const youtubeApiKey = "AIzaSyBVwmuzixD7KGYsuP_2840WcXNFk1SnrUU"; -const youtubeApiKey = process.env.YOUTUBE_API_KEY; console.disableYellowBox = true; class Player extends React.Component { @@ -19,30 +29,110 @@ class Player extends React.Component { e.isFullscreen || navigation.goBack()} - style={{ width: 0, height: 0 }} /> ); } } -export default StackNavigator({ - Home: { - screen: HomeScreen, +const TabIcons = { + Chooser: require("./assets/help/tap_and_hold-24px_default.png"), + Upload: require("./assets/help/submit_video-24px_default.png"), + Settings: require("./assets/help/settings-24px_default.png"), + About: require("./assets/help/audio_help-24px_default.png"), + Help: require('./assets/help/help-24px_default.png') +}; + +const SelectedTabIcons = { + Chooser: require("./assets/help/tap_and_hold-24px_selected.png"), + Upload: require("./assets/help/submit_video-24px_selected.png"), + Settings: require("./assets/help/settings-24px_selected.png"), + About: require("./assets/help/audio_help-24px_selected.png"), + Help: require('./assets/help/help-24px_selected.png') +}; + + +export default class App extends React.Component { + constructor(props) { + super(props); + this.state = {previousTabScreen: 'ObjectChooserXXX'}; + } + + getCurrentRouteName = navigationState => { + if (!navigationState) { + return null; + } + const route = navigationState.routes[navigationState.index]; + + if (route.routes) { + return getActiveRouteName(route); + } + return route.routeName; + } + + render(){ + return( + { + const currentTabScreen = this.getCurrentRouteName(currentState); + const previousTabScreen = this.getCurrentRouteName(prevState); + if (currentTabScreen !== previousTabScreen) { + this.setState({ + previousTabScreen: currentTabScreen, + }); + } + }} + screenProps={{ + previousTabScreen: this.state.previousTabScreen, + }} + /> + ) + } +} + +const TabNav = createBottomTabNavigator({ + HomeScreen: {screen: HomeScreen, navigationOptions: { - header: null, + tabBarVisible: false, + tabBarIcon: null, }, }, - Chooser: { - screen: ObjectChooser, - }, - Player: { screen: Player }, - About: AboutPage.navConfig + Chooser: {screen: ObjectChooser}, + Settings: SettingsPage.navConfig, + Player: { screen: Player, + navigationOptions: { + tabBarVisible: false, + tabBarIcon: null, + }}, + Settings: SettingsPage.navConfig, + Contact: ContactPage.navConfig, + Upload: UploadPage.navConfig, + Help: HelpPage.navConfig }, { - headerMode: "none" -}); + navigationOptions: ({ navigation }) => ({ + tabBarIcon: ({ focused, tintColor }) => { + const { routeName, params } = navigation.state; + + let finishedIcon = (focused ? SelectedTabIcons : TabIcons)[routeName]; + + return ; + }, + tabBarOnPress: (screen) => { + screen.defaultHandler = screen.navigation.navigate(screen.navigation.state.routeName); + }, + }), + tabBarOptions: { + showLabel : false, + style: { + backgroundColor: 'blue', + } + }, + animationEnabled: false, +} +); + diff --git a/HomeScreen.js b/HomeScreen.js index 1d6e4e3..5b5ac8a 100644 --- a/HomeScreen.js +++ b/HomeScreen.js @@ -4,26 +4,56 @@ import { StyleSheet, ImageBackground, View, TouchableHighlight, Image, Text} fro import { homeScreenImage, ENGLISH, HINDI } from './config'; import { withDimensions } from "./component/responsive.js"; +import {saveSetting, getSetting} from "./StorageUtils"; +import { BackHandler } from 'react-native'; +const languageMap = { + "Hindi": HINDI, + "English": ENGLISH +}; class HomeScreenWrapped extends React.Component { - constructor(props) { super(props); this.state = { language: ENGLISH } + this.handleBackButtonClick = this.handleBackButtonClick.bind(this); } // could be abstracted to a single function accepting lang prop // but this works for only two cases handlePress= (lang) => { global.LANG = lang; + saveSetting({name: "languagePreference", value: global.LANG}); this.props.navigation.navigate("Chooser"); } + + componentWillMount() { + BackHandler.addEventListener('hardwareBackPress', this.handleBackButtonClick); + } + + componentWillUnmount() { + BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick); + } + + handleBackButtonClick() { + this.setState({pressing: languageMap[global.LANG]}); + } + + onLayout = () => { + } + + componentDidMount = () => { + let langPref = getSetting("languagePreference"); + langPref.then((val)=> { + var parsedVal = JSON.parse(val); + this.setState({pressing: languageMap[parsedVal.value]}); + }); + } render () { const navigation = this.props.navigation; - let homeScreenImage = require('./assets/BackgroundForAppLanding.png'); + let homeScreenImage = require('./assets/SmallerBackgroundforAppLanding.png'); let titleImage = require('./assets/Aashiyaan.png'); let {pressing} = this.state; let languageImageEnglish = @@ -44,7 +74,6 @@ class HomeScreenWrapped extends React.Component { imageStyle={{resizeMode: 'cover'}} style={{flex: 1, width: width, height: height}} > - this.handlePress(ENGLISH)} onPressIn={() => { this.setState({ pressing: ENGLISH }); }} - onPressOut={() => { this.setState({ pressing: null }); }} + //onPressOut={() => { this.setState({ pressing: null }); }} underlayColor="transparent" style={{ padding: 0.1 * titleWidth, @@ -82,7 +111,7 @@ class HomeScreenWrapped extends React.Component { this.handlePress(HINDI)} onPressIn={() => { this.setState({ pressing: HINDI }); }} - onPressOut={() => { this.setState({ pressing: null }); }} + //onPressOut={() => { this.setState({ pressing: null }); }} underlayColor="transparent" style={{ padding: 0.1 * titleWidth, @@ -100,10 +129,8 @@ class HomeScreenWrapped extends React.Component { - ) - + ) } - } const HomeScreen = withDimensions(HomeScreenWrapped); diff --git a/Languages/English.js b/Languages/English.js new file mode 100644 index 0000000..8402d63 --- /dev/null +++ b/Languages/English.js @@ -0,0 +1,34 @@ +import React, { Component } from 'react'; + +const EnglishStrings = { + languageName: "English", + settingsTitle: "SETTINGS", + chooseLanguageOption: "Choose a Language:", + aboutTheProjectTitle: "ABOUT AASHIYAAN", + acknowledgementsTitle: "ACKNOWLEDGEMENTS", + coCreators: "Co-creators", + coCreatorAssistance: "Co-creator Assistance", + researchAssistance: "Research Assistance", + teamDelhi: "Team Delhi", + filmProduction: "Film Production", + filmEditing: "Film Editing", + soundEditing: "Sound Editing", + photoGraphy: "Photography", + teamBoston: "Team Boston", + developers: "Developers", + uiUX: "UI/UX", + illustrators: "Illustrators", + filmEditing: "Film Editing", + filmEditingAssistance: "Film Editing Assistance", + web: "Web", + translators: "Translators", + institutionalPartner: "Institutional Partner", + institutionalSupport: "Institutional Support", + principalResearchAdvisor: "Principal Research Advisor", + academicAdvisors: "Academic Advisors", + projectAdvisors: "Project Advisors", + specialThanks: "Special Thanks", + creator: "Curator/Creator" + +} +export default EnglishStrings; diff --git a/Languages/Hindi.js b/Languages/Hindi.js new file mode 100644 index 0000000..0f9b430 --- /dev/null +++ b/Languages/Hindi.js @@ -0,0 +1,34 @@ +import React, { Component } from 'react'; + +const HindiStrings = { + languageName: "Hindi (हिन्दी)", + settingsTitle: "सेटिंग्स", + chooseLanguageOption: "भाषा चुनें", + aboutTheProjectTitle: "आशियाँ के बारे में", + acknowledgementsTitle: "स्वीकृतियां", + coCreators: "सह-रचनाकार", + coCreatorAssistance: "सह-रचनाकार सहायक", + researchAssistance: "शोध सहायक", + teamDelhi: "टीम दिल्ली", + filmProduction: "फ़िल्म उत्पादन", + filmEditing: "फ़िल्म संपादन", + soundEditing: "स्वन सम्पादन", + photoGraphy: "फ़ोटो", + teamBoston: "टीम बोस्टन", + developers: "डेवलपर", + uiUX: "यू. आई./ यू. एक्स.", + illustrators: "चित्रकार", + filmEditing: "फ़िल्म संपादन", + filmEditingAssistance: "फ़िल्म उप संपादन", + web: "वेब", + translators: "अनुवादक", + institutionalPartner: "संस्थागत सहयोगी", + institutionalSupport: "संस्थागत समर्थन", + principalResearchAdvisor: "प्राथमिक शोध सलाहकार", + academicAdvisors: "शैक्षिक सलाहकार", + projectAdvisors: "प्रोजैक्ट सलाहकार", + specialThanks: "आभार", + creator: "क्यूरेटर/ रचनाकार" + +} +export default HindiStrings; diff --git a/Languages/LanguageChooser.js b/Languages/LanguageChooser.js new file mode 100644 index 0000000..ab36668 --- /dev/null +++ b/Languages/LanguageChooser.js @@ -0,0 +1,16 @@ +import React, { Component } from 'react'; +import HindiStrings from "./Hindi.js"; +import EnglishStrings from "./English.js"; + +const languageToLocalizationMap = { + "English": EnglishStrings, + "Hindi": HindiStrings +}; + +export const getLocalizedString = (langName)=> { + let currentLang = {}; + if (languageToLocalizationMap.hasOwnProperty(langName)) { + currentLang = languageToLocalizationMap[langName]; + } + return currentLang; +}; \ No newline at end of file diff --git a/ObjectChooser.js b/ObjectChooser.js index 7b25ade..de7e4c7 100644 --- a/ObjectChooser.js +++ b/ObjectChooser.js @@ -1,25 +1,25 @@ import React from 'react'; import { StyleSheet, View, TouchableHighlight, Image , Dimensions} from 'react-native'; import { StackNavigator } from 'react-navigation'; -import { videos } from './config'; +import { IndicatorViewPager, PagerDotIndicator } from 'rn-viewpager'; +import { objectPages } from './config'; import { Button } from "./component/Button.js"; function renderVideoWithNavigation(navigate, shouldDisableRemnant, imgSize) { - return (video) => { - const disabled = video.isRemnant && shouldDisableRemnant; - return ( - + + ); + } + + renderForm() { + let {userName, email, message, error} = this.state; + + return ( + +

Contact Creators

+

Send message to creators

+ {error ? ({error}) : null} + this.setState({userName})} + /> + this.setState({email})} + /> + this.setState({message})} + /> + +
+ ); + } + + render() { + switch (this.state.state) { + case SUCCESS: + return this.renderSuccess(); + + default: + return this.renderForm(); + } + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center' + }, + textContainer : { + borderColor: "#aaa", + borderWidth: 1, + padding: 5, + margin: 5, + width: 250, + height: 40 + }, + textarea: { + height: 80, + textAlignVertical: "top" + } +}); + +ContactPage.navConfig = { + screen: ContactPage, + + navigationOptions: ({navigation}) => ({ + headerTitle: "Contact Creators" + }) +} diff --git a/page/Help.js b/page/Help.js new file mode 100644 index 0000000..aa19582 --- /dev/null +++ b/page/Help.js @@ -0,0 +1,518 @@ +import React, { Component } from 'react'; +import ReactNative, { + Image, + ScrollView, + StyleSheet, + Text, + View +} from 'react-native'; +import Sound from "react-native-sound"; + +import { ENGLISH, HINDI } from '../config'; + +import {IndicatorViewPager, PagerDotIndicator} from 'rn-viewpager'; + +import pageStyles, { A, H3, Em, Bull, P, Strong, BullHeader, BullHeaderMain } from "./styles.js"; +import { Button } from "../component/Button.js"; + + +const HelpIcons = { + home: require("../assets/help/home-24px_default.png"), + share: require("../assets/help/submit_video-24px_default.png"), + remnants: require("../assets/help/remnants-24px_default.png") +} + +const HelpAudio = { + home: require("../assets/audio/sound.mp3") +} + +const PlayingIcon = require("../assets/help/record_voice_over_playing-24px_default.png"); +const ListenIcon = require("../assets/help/audio_help-24px_default.png"); + +function withSound(name) { + return new Promise(function(resolve, reject) { + let sound = new Sound(name, (error) => { + if (error) { + reject(sound, error); + } else { + resolve(sound); + } + }) + }); +} + +const translations = { + [ENGLISH]: { + home: { + title: 'Objects', + audio: '', + text: () => ( + +

Explore stories of the invisible women of Delhi as told by them.

+

+ Objects: To play a video clip, select one of the + Objects at the top of the page. Each video will feature the women in + the photograph, and will relate in some way to the Object you selected. +

+

+ More Objects: You can see more stories + by tapping the arrows ({'< >'}) or swiping to the left or right. +

+
+ ) + }, + share: { + title: 'Share Your Video Story', + audio: '', + text: () => ( +

+ Record a video on your phone and share your own story. By sharing more + strategies you will help other women arm themselves and reclaim the city. +

+ ) + }, + remnants: { + title: 'Remnants', + audio: '', + text: () => ( + +

+ After viewing 2 videos a new choice (Fork & Knife icon) becomes available + in the navigation bar at the bottom of the screen. Tapping the icon brings + you to the “Remnants” section. Remnants are a collage of images of leftovers + from meals which the women shared while talking of their memories and + experiences of the city. +

+

+ Tiles: Select a tile from the collage to see a larger version + of the tile. Press and Hold (INSERT press and hold icon here) to hear a short + story. Keep holding to hear the entire story. As the audio plays, the remnant + tile will fade. If you listen to the entire message, then when you return to + the Remnants page you will start to see something revealed behind the tiles. + Listen to all the remnants to reveal the entire hidden image. +

+
+ ) + }, + settings: { + title: 'Settings', + audio: '', + text: () => ( +

+ Choose your preferred language + अंग्रेजी या हिंदी भाषा चुनें +

+ ) + + }, + resources: { + title: 'Resources', + audio: '', + text: () => ( + +

I’m interested in knowing more

+

+ Visit www.aashiyaan.org to learn more + about the co-creators, their stories and experiences of the city of Delhi. +

+

How Can I Help?

+

+ Share your favourite stories (especially strategies!) + with #AashiyaanStories on social media so others can also + watch, learn, contribute and reclaim the city. +

+

+ Organize a living room or porch conversation with + homemakers and domestic workers about their city experiences + and strategies. Contact us for ideas and to share post + discussion photos and videos on our website. +

+

+ Go to our YouTube + channel and add a translation in your local language. Let’s keep the conversation going! +

+

Support Groups

+

Helplines (India) http://ncw.nic.in/frmhelpline.aspx

+

Self defense https://www.slaponline.org/

+

Film for Change https://krititeam.blogspot.com/

+

Visit www.aashiyaan.org for more...

+
+ ) + }, + about: { + title: 'About', + audio: '', + text: () => ( +

(See Settings)

+ ) + }, + credits: { + title: 'Credits', + audio: '', + text: () => ( +

(link to Credits in Settings)

+ ) + }, + contact: { + title: 'Contact', + audio: '', + text: () => ( +

Email us at idoc.conversations@gmail.com

+ ) + }, + }, + [HINDI]: { + home: { + title: 'होम', + audio: '', + text: () => ( + +

दिल्ली में रहने वाली महिलाओं की अदृश्य जीवनियों को देखें।

+

+ वस्तु: वीडियो क्लिप चलाने के लिए, स्क्रीन के ऊपरी + हिस्से से मनचाही वस्तु का चयन करें। प्रत्येक वीडियो आपको फोटोग्राफ़ में दर्शायी + महिलाओं की कहानियाँ दिखाएगा, और आपके द्वारा चुनी गयी वस्तु से संबंधित होगा। +

+

+ आप स्क्रीन पर दर्शाये हुए तीरों को टैप* करके (<>) या बाएं या दाएं स्वाइप** + करके और भी कहानियां देख सकते हैं। +

+

*टैप: उंगली से एक बार दबाकर उठाना।

+

**स्वाइप: उंगली से दबाकर किसी दिशा में खींचना।

+
+ ), + }, + share: { + title: 'अपना वीडियो शामिल करें', + audio: '', + text: () => ( +

+ अपने फ़ोन पर वीडियो रिकॉर्ड करें और अपनी कहानी भेजें | अपने अलग-अलग उपाय आपस में + बाँटने से महिलाएं ख़ुद को सशक्त बना सकती हैं और शहर का निस्संकोच हिस्सा बन सकती हैं | +

+ ) + }, + remnants: { + title: 'निशान', + audio: '', + text: () => ( + +

+ किन्हीं २ वीडियो को देखने के बाद स्क्रीन के निचले भाग में नेविगेशन बार में एक नया विकल्प + (कांटे और छूरी का चिन्ह) उपलब्ध होता है | चिन्ह पर टैप करने से आपको "निशान" अध्याय + में ले जाया जायेगा। निशान उस भोजन की तस्वीरों का संयोजन है जो महिलाओं की यादों और + शहर में उनके अनुभवों की बातचीत करते समय परोसा गया था। +

+

+ टाइलें: तस्वीरों के सांचे में से किसी भी तस्वीर को बड़ा करके देखने के + लिए उस चित्र यानी टाइल को चुनें। उंगली दबाकर रखने पर महिलाओं की बातचीत सुनाई देगी। + पूरी कहानी सुनने के लिए टाइल पर उंगली दबाकर रखें। जैसे-जैसे कहानी बढ़ेगी वह टाइल फ़ीका + पड़ता जायेगा। अगर आप पूरे संदेश को सुनते हैं तब निशान नामक पृष्ठ पर वापस जाने से आप + उस टाइल के पीछे कुछ प्रकट होता पाएंगे। इस छिपी हुई छवि को प्रकट करने के लिए सभी + निशानों की कहानी को सुनना होगा। +

+
+ ) + }, + settings: { + title: 'सेटिंग्स', + audio: '', + text: () => ( +

+ अंग्रेजी या हिंदी भाषा चुनें + Choose your preferred language +

+ ) + + }, + resources: { + title: 'अन्य उपाय और कहानियाँ', + audio: '', + text: () => ( + +

और जानने में दिलचस्पी ?

+

+ सह-निर्माता और उनकी दिल्ली शहर सम्बन्धी कहानियों और अनुभवों के बारे में + अधिक जानने के लिए www.aashiyaan.org पर जाएं। +

+

मैं कैसे मदद कर सकती/सकता हूँ?

+ सोशल मीडिया पर #AashiyaanStories के साथ अपनी पसंदीदा कहानियाँ (विशेष रूप से उपाय) प्रचलित करें| इससे अन्य लोग भी नए उपाय सीखेंगे, और अपनी कहानी का योगदान कर शहर को अपना सा बना पाएंगे। + गृहणियों और घरेलू श्रमिकों के साथ अपने शहर के अनुभवों और सुरक्षित रहने के उपायों के बारे में अपने घर या आँगन में बातचीत का आयोजन करें। बातचीत का आयोजन करने के तरीकों के अलावा चर्चा के फ़ोटो और वीडियो को हमारी वेबसाइट [http://www.aashiyaan.org/] पे शामिल करने के लिए हमसे संपर्क करें। + हमारे यूट्यूब चैनल [https://www.youtube.com/playlist?list=PLTXq6Eg-6vhrYDlEKZVYURf1JOSoHkRJz] पर जायेँ और अपनी स्थानीय भाषा में अनुवाद करें। बातचीत जारी रखें! +

सहायता

+

हेल्पलाइन (भारत) http://ncw.nic.in/frmhelpline.aspx

+

आत्मरक्षा https://www.slaponline.org/

+

परिवर्तन के लिए फिल्में https://krititeam.blogspot.com/

+

अधिक जानकारी के लिए पर www.aashiyaan.org जायें

+
+ ) + }, + about: { + title: 'ऐप के बारे में जानें', + audio: '', + text: () => ( +

(See Settings)

+ ) + }, + credits: { + title: 'आभार', + audio: '', + text: () => ( +

(link to Credits in Settings)

+ ) + }, + contact: { + title: 'ईमेल', + audio: '', + text: () => ( +

idoc.conversations@gmail.com पर ईमेल भेजकर हमसे संपर्क करें |

+ ) + }, + }, +} + +export class SectionedScroller extends Component { + constructor(props) { + super(props); + this.state = { + pageHeight: 500, + soundKey: null, + soundPlaying: null, + soundLoading: null + }; + } + + _scrollTo(name, animated=false) { + let child = this.refs[name]; + + if (child != null) { + let nodeHandle = ReactNative.findNodeHandle(this._scroller); + child.measureLayout(nodeHandle, (_x, y) => { + this._scroller.scrollTo({x: 0, y: y-30, animated: animated}); + }, (error) => { + console.log(error); + }) + } + } + + stopSound() { + let {soundPlaying} = this.state; + + if (!soundPlaying) return; + + soundPlaying.stop(); + this.setState({ + soundKey: null, + soundPlaying: null + }); + } + + onPlayingComplete(success, name, sound) { + if (this.state.soundKey === name) { + this.setState({ + soundKey: null, + soundPlaying: null + }); + } + } + + playSound(key) { + console.log(`Play sound: ${key}`); + let {state} = this; + + if (state.soundPlaying) { + this.stopSound(); + + if (state.soundKey === key) + return; + } + + this.setState({ soundKey: key, soundLoading: true }); + withSound(HelpAudio.home) + .then((sound) => { + console.log(sound); + if (this.state.soundKey !== key) return; + + console.log("boop"); + sound.play((success) => { + this.onPlayingComplete(success, key, sound) + }); + this.setState({ + soundPlaying: sound + }) + }) + .finally(() => { + if (this.state.soundKey === key) + this.setState({ soundLoading: false }); + }) + } + + onLayout = (e) => { + this.setState({ pageHeight: e.nativeEvent.layout.height }); + + if (this.props.selected) + this._scrollTo(this.props.selected); + } + + componentDidUpdate(prevProps) { + // never evaluates to true? + // if (this.props.selected && prevProps.selected !== this.props.selected) + this._scrollTo(this.props.selected, true); + } + + componentWillUnmount() { + this.stopSound(); + } + + render() { + let {children, style} = this.props, + {pageHeight, soundKey, soundLoading, soundPlaying} = this.state; + + let selectedLang = global.LANG || HINDI, + localizedText = translations[selectedLang] + + return ( + { this._scroller = scroller; }} + style={style} + onLayout={ this.onLayout } + stickyHeaderIndices={children.map((_, i) => i*2)}> + {React.Children.map(children, (section) => { + let {title} = section.props, + icon = HelpIcons[section.key], + iconComponent = icon && (), + active = soundKey === section.key, + sectionBody = localizedText[section.key].text() || ((Not found)) + sectionTitle = localizedText[section.key].title; + + return [ + ( + {iconComponent} +

+ { sectionTitle } +

+ +
+ )} + /> +); + + +export default class UploadPage extends Component { + constructor(props) { + super(props); + this.state = { + user: null, + video: null, + state: CHOOSER, + checked: false, + myKey: null, + uploaded: [] + }; + } + + componentDidMount() { + this.getUploadedVideos().then((videos) => this.setState({uploaded: videos}), + err => console.error(err)); + + firebase.messaging().getToken() + .then(fcmToken => { + if (fcmToken) { + // user has a device token + console.log("user has a device token; fcmtoken = ", fcmToken); + } else { + // user doesn't have a device token yet + console.log("user doesn't have a device token yet; fcmtoken = ", fcmToken); + } + }).catch(function(err) { + console.error('An error occurred while retrieving token. ', err); + }); + this.onTokenRefreshListener = firebase.messaging().onTokenRefresh(fcmToken => { + // Process your token as required + console.log("Process your token as required; refreshed token = ", fcmToken); + }); + + this.onTokenRefreshListener(); + } + + selectVideo = () => { + ImagePicker.showImagePicker({ + title: "Video Picker", + takePhotoButtonTitle: 'Take Video...', + mediaType: "video", + durationLimit: 5*60, + }, (response) => { + if (response.didCancel) { + console.log('User cancelled video picker'); + } + else if (response.error) { + console.log('ImagePicker Error: ', response.error); + } + else if (response.customButton) { + console.log('User tapped custom button: ', response.customButton); + } + else if (response.path) { + this.setState({video: response}); + } + }); + } + + saveVideoInfo(video) { + var date = video.date || new Date().toISOString(); + + if (typeof date !== "string") + date = date.toISOString(); + + return AsyncStorage.mergeItem("Aashiyaan:uploaded", + JSON.stringify({ + [date]: video + })) + .then(() => this.getUploadedVideos()); + } + + async getUploadedVideos() { + var videos = await AsyncStorage.getItem("Aashiyaan:uploaded"); + + if (videos) { + videos = JSON.parse(videos); + return Object.keys(videos).map(k => videos[k]); + } else { + return []; + } + } + + dummyUpload = () => { + var transferred = 0, total = 100000000; + this.setState({ state: UPLOADING, upload: { transferred: 0, total: total} }); + setInterval(() => { + this.setState({ + upload: { + transferred: (transferred += 1000000), + total: total + } + }) + }, 500); + } + + upload = () => { + let {video} = this.state; + + if (video) { + firebase.auth().signInAnonymouslyAndRetrieveData() + .then(creds => { + this.setState({ + user: creds.user.toJSON() + }); + + let refpath = `${creds.user.uid}/${this.videoName(video)}`; + let ref = firebase.storage().ref(refpath); + + var metadata = { + contentType: 'video/mp4', + customMetadata: { + 'userAuthId': this.state.user.uid, + "notifyIfPublished": this.state.checked + } + }; + + let unsubscribe = ref.putFile(video.path, metadata).on( + firebase.storage.TaskEvent.STATE_CHANGED, + (event) => { + let {state, bytesTransferred, totalBytes} = event; + this.setState({ + upload: { + transferred: bytesTransferred, + total: totalBytes + }, + state: UPLOADING + }); + + if (state === firebase.storage.TaskState.SUCCESS) { + this.setState({ + state: UPLOADED, + successMessage: "Your video was successfully uploaded." + }); + video.name = this.videoName(video); + video.size = totalBytes; + video.date = new Date(); + this.saveVideoInfo(video).then(videos => this.setState({ uploaded: videos }), + error => console.log(error)); + unsubscribe(); + } + }, + (error) => { + unsubscribe(); + this.setState({ + state: CHOOSER, + error: error + }); + console.error(error); + } + ); + }); + } + } + + onDelete = (video) => { + let {name, date} = video; + firebase.firestore().collection("deletionRequests").add({ + videoName: name, + videoDate: date + }).then(_ => { + video.deletionRequested = true; + return this.saveVideoInfo(video); + }).then(videos => this.setState({ videos: videos })); + } + + videoName = (video) => { + if (!video) video = this.state.video; + + return video ? video.path.split("/").slice(-1)[0] : ""; + } + + renderUploaded = () => { + let {successMessage} = this.state; + return ( + + {successMessage ?

{successMessage}

: null} + +
+ ); + } + + renderUploader = () => { + let {total, transferred} = this.state.upload; + + return ( + +

Uploading {this.videoName()}

+ +
+ ); + } + + renderChooser() { + let {checked, video, upload, uploaded} = this.state; + return ( + +

+ INSERT EXPLANATORY TEXT HERE +

+ + {uploaded.length > 0 && ( +

+ You have uploaded {uploaded.length} videos +

)} + + + + + + + + this.setState({checked: !checked})}> + + + Notify me if my video is uploaded to YouTube + + +
+ ); + } + + renderContent() { + switch(this.state.state) { + case UPLOADING: + return this.renderUploader(); + + case UPLOADED: + return this.renderUploaded(); + + default: + return this.renderChooser(); + } + } + + render() { + return ( + +

Upload Video

+ {this.renderContent()} +
+ ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center' + }, + contentWrapper: { + flexDirection: 'column', + flex: 1 + }, + buttonRow: { + flexDirection: "row" + }, + progressBar: { + backgroundColor: "#333", + width: 500 + }, + + uploads: { + + }, + + uploadedItem: { + flex: 1, + flexDirection: "row", + justifyContent: "space-between", + width: "80%" + } +}); + +UploadPage.navConfig = { + screen: UploadPage, + + navigationOptions: ({navigation}) => ({ + headerTitle: "About this Project" + }) +} diff --git a/page/styles.js b/page/styles.js index fec186a..77a847d 100644 --- a/page/styles.js +++ b/page/styles.js @@ -1,20 +1,35 @@ import React from 'react'; -import { Linking, StyleSheet, Text } from 'react-native'; +import { Linking, StyleSheet, Text, PixelRatio, View} from 'react-native'; -export const H2 = ({children}) => ( - +const pr = PixelRatio.get(); + + +export const H2 = ({style, children}) => ( + {children} ); -export const P = ({children}) => ( - - { children} +export const H3 = ({style, children}) => ( + + {children} + +); + +export const ErrorBox = ({style, children}) => ( + + {children} ); -export const A = ({children, href}) => ( - Linking.openURL(href)}> +export const P = ({children, style}) => ( + + { children } + +); + +export const A = ({children, href, onPress, style, ...props}) => ( + Linking.openURL(href))}> { children } ); @@ -37,38 +52,57 @@ export const Bull = ({children}) => ( ); +//header for bullets export const BullHeader = ({children}) => ( {children} ); +//an larger bullet header with slightly more spacing export const BullHeaderMain = ({children}) => ( {children} ); +export const HR = () => ( + +); + const styles = StyleSheet.create({ header: { color: "red", fontWeight: "100" }, + horizontalLine: { + borderBottomColor: 'black', + borderBottomWidth: 1, + marginTop: 3*pr + }, + h2: { - fontSize: 18, - lineHeight: 25, + fontSize: 14 * pr, + lineHeight: 22 * pr, + color: 'rgb(43, 35, 103)' /* textDecorationColor: "#ddd", * textDecorationLine: "underline" */ }, bodyText: { - fontSize: 12, + fontSize: 6*pr, lineHeight: 20, padding: 15, textAlign: "justify" }, + errorText: { + borderWidth: 1, + borderColor: "maroon", + padding: 10 + }, + liText: { paddingLeft: 20, paddingTop: 0 @@ -78,6 +112,10 @@ const styles = StyleSheet.create({ fontWeight: "bold" }, + em: { + fontStyle: "italic" + }, + link: { color: "#4682b4", textDecorationLine: "underline" @@ -85,20 +123,33 @@ const styles = StyleSheet.create({ center: { textAlign: 'center' - }, + }, bullHeader: { - fontSize: 15, - lineHeight: 20, + fontSize: 15 * pr, + lineHeight: 20 * pr, padding: 15, textAlign: "justify" }, bullHeaderMain: { - fontSize: 16, - lineHeight: 20, + fontSize: 16 * pr, + lineHeight: 20 * pr, paddingTop: 19, textAlign: "justify" + }, + + // These are the Settings Page Styles . Merge in for the about page from here + settingsRadioFormLabel: { + lineHeight: 12*pr, + width: 150 + }, + fontSize10: { + fontSize: 7*pr + }, + settingsRadioButton: { + lineHeight: 10, + alignSelf: 'flex-start' } }); diff --git a/yarn.lock b/yarn.lock index e7bcb09..4c422ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -446,10 +446,24 @@ acorn-globals@^4.1.0: dependencies: acorn "^5.0.0" -acorn@^5.0.0, acorn@^5.3.0: +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -457,7 +471,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.0: +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -466,6 +480,15 @@ ajv@^5.1.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.0.tgz#4c8affdf80887d8f132c9c52ab8a2dc4d0b7b24c" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + uri-js "^4.2.1" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -478,6 +501,10 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" @@ -586,7 +613,13 @@ array-reduce@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" -array-uniq@^1.0.2: +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1, array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -598,7 +631,7 @@ array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -arrify@^1.0.1: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -664,7 +697,7 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -1132,9 +1165,9 @@ babel-plugin-transform-function-bind@^6.5.2: babel-plugin-syntax-function-bind "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-inline-environment-variables@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-0.4.0.tgz#365a38c1f6547801398d23a6f56d2f464ab4062c" +babel-plugin-transform-inline-environment-variables@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-0.4.1.tgz#93d36666de581ea9978b285418488f8714f70974" babel-plugin-transform-object-assign@^6.5.0: version "6.22.0" @@ -1183,6 +1216,14 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-polyfill@6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + babel-preset-es2015-node@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-preset-es2015-node/-/babel-preset-es2015-node-6.1.1.tgz#60b23157024b0cfebf3a63554cb05ee035b4e55f" @@ -1538,6 +1579,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -1561,7 +1612,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1579,6 +1630,14 @@ chalk@^2.0.0, chalk@^2.0.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.1.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" @@ -1587,6 +1646,10 @@ ci-info@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + clamp@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634" @@ -1884,6 +1947,18 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1922,6 +1997,12 @@ diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" @@ -2028,6 +2109,67 @@ eslint-plugin-react-native@^3.2.1: dependencies: eslint-plugin-react-native-globals "^0.1.1" +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + +eslint@^4.0.0: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -2036,7 +2178,19 @@ esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" -estraverse@^4.2.0: +esquery@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -2142,7 +2296,7 @@ extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" -external-editor@^2.0.4: +external-editor@^2.0.1, external-editor@^2.0.4: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" dependencies: @@ -2189,6 +2343,10 @@ fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -2234,6 +2392,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -2297,6 +2462,15 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2381,6 +2555,10 @@ function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" @@ -2453,6 +2631,10 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" +globals@^11.0.1: + version "11.5.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.5.0.tgz#6bc840de6771173b191f13d3a9c94d441ee92642" + globals@^11.1.0: version "11.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.4.0.tgz#b85c793349561c16076a3c13549238a27945f1bc" @@ -2461,6 +2643,17 @@ globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + glogg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" @@ -2673,6 +2866,10 @@ iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +ignore@^3.3.3: + version "3.3.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.8.tgz#3f8e9c35d38708a3a7e0e9abb6c73e7ee7707b2b" + image-size@^0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.2.tgz#8ee316d4298b028b965091b673d5f1537adee5b4" @@ -2703,6 +2900,24 @@ ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" +inquirer@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347" + dependencies: + ansi-escapes "^1.1.0" + chalk "^1.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.1" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx "^4.1.0" + string-width "^2.0.0" + strip-ansi "^3.0.0" + through "^2.3.6" + inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -2872,6 +3087,22 @@ is-odd@^2.0.0: dependencies: is-number "^4.0.0" +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2896,6 +3127,10 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -3304,7 +3539,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.7.0: +js-yaml@^3.7.0, js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: @@ -3366,6 +3601,10 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -3447,7 +3686,7 @@ leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" -levn@~0.3.0: +levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: @@ -3850,7 +4089,7 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3860,7 +4099,7 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -3934,6 +4173,13 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +node-fetch@1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-fetch@^1.0.1, node-fetch@^1.3.3: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -4099,6 +4345,24 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +opencollective@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1" + dependencies: + babel-polyfill "6.23.0" + chalk "1.1.3" + inquirer "3.0.6" + minimist "1.2.0" + node-fetch "1.6.3" + opn "4.0.2" + +opn@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + opn@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" @@ -4112,7 +4376,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -4218,6 +4482,10 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -4305,6 +4573,10 @@ plist@^1.2.0: xmlbuilder "4.0.0" xmldom "0.1.x" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -4313,6 +4585,10 @@ posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" +postinstall-build@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postinstall-build/-/postinstall-build-5.0.1.tgz#b917a9079b26178d9a24af5a5cd8cb4a991d11b9" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -4344,13 +4620,17 @@ process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" -prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0: +prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1: version "15.6.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" dependencies: @@ -4417,7 +4697,7 @@ react-is@^16.3.1: version "16.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.3.1.tgz#ee66e6d8283224a83b3030e110056798488359ba" -react-lifecycles-compat@^1.0.2: +react-lifecycles-compat@^1.0.2, react-lifecycles-compat@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-1.1.4.tgz#fc005c72849b7ed364de20a0f64ff58ebdc2009a" @@ -4437,12 +4717,28 @@ react-native-drawer-layout@1.3.2: dependencies: react-native-dismiss-keyboard "1.0.0" +react-native-firebase@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/react-native-firebase/-/react-native-firebase-4.2.0.tgz#d44b1e5b5149d65936045c0398e0acc2ebb4c7e9" + dependencies: + opencollective "^1.0.3" + postinstall-build "^5.0.1" + prop-types "^15.6.1" + +react-native-image-picker@^0.26.10: + version "0.26.10" + resolved "https://registry.yarnpkg.com/react-native-image-picker/-/react-native-image-picker-0.26.10.tgz#0bb9ab928984948c67aee0b9e64216bee007a9fc" + react-native-safe-area-view@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/react-native-safe-area-view/-/react-native-safe-area-view-0.7.0.tgz#38f5ab9368d6ef9e5d18ab64212938af3ec39421" dependencies: hoist-non-react-statics "^2.3.1" +react-native-sound@^0.10.9: + version "0.10.9" + resolved "https://registry.yarnpkg.com/react-native-sound/-/react-native-sound-0.10.9.tgz#6b00b0f4afd017cde09fbb9d171df1b5d5b851a8" + "react-native-tab-view@github:react-navigation/react-native-tab-view": version "0.0.74" resolved "https://codeload.github.com/react-navigation/react-native-tab-view/tar.gz/36ebd834d78b841fc19778c966465d02fd1213bb" @@ -4629,6 +4925,10 @@ regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -4660,6 +4960,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -4776,12 +5080,23 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" dependencies: resolve-from "^3.0.0" +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -4823,7 +5138,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -4833,6 +5148,10 @@ rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" +rn-viewpager@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/rn-viewpager/-/rn-viewpager-1.2.9.tgz#7f06f898e23b296f3b5be7c98bd9101d94427779" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -4849,6 +5168,10 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" +rx@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -4989,6 +5312,12 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -5243,6 +5572,17 @@ symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + tar-pack@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" @@ -5281,6 +5621,10 @@ test-exclude@^4.2.1: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + throat@^4.0.0, throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -5432,6 +5776,12 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +uri-js@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.1.tgz#4595a80a51f356164e22970df64c7abd6ade9850" + dependencies: + punycode "^2.1.0" + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -5606,6 +5956,12 @@ write-file-atomic@^2.1.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + ws@^1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"