diff --git a/App.js b/App.js index 7d771f2..5f60e71 100644 --- a/App.js +++ b/App.js @@ -1,19 +1,54 @@ import React from 'react'; -import { StyleSheet, Text, View } from 'react-native'; +import {Dimensions, StyleSheet, View, Text} from 'react-native'; +import {StyleProvider} from 'native-base'; +import AppNavigator from './navigation/AppNavigator'; +import ThemeManager from './utils/ThemeManager'; +import LocaleManager from './utils/LocaleManager'; +import * as Font from 'expo-font'; -export default function App() { - return ( - - Open up App.js to start working on your app! - - ); + +export default class App extends React.Component { + + constructor(props) { + super(props); + LocaleManager.getInstance().initTranslations(); + this.updateTheme = this.updateTheme.bind(this); + this.state = { + isLoading: true, + currentTheme: undefined, + }; + } + + async componentWillMount() { + await Font.loadAsync({ + 'Roboto': require('native-base/Fonts/Roboto.ttf'), + 'Roboto_medium': require('native-base/Fonts/Roboto_medium.ttf'), + }); + ThemeManager.getInstance().setUpdateThemeCallback(this.updateTheme); + await ThemeManager.getInstance().getDataFromPreferences(); + this.setState({ + isLoading: false, + currentTheme: ThemeManager.getInstance().getCurrentTheme() + }); + } + + updateTheme() { + console.log('update theme called'); + // Change not propagating, need to restart the app + // this.setState({ + // currentTheme: ThemeManager.getInstance().getCurrentTheme() + // }); + } + + render() { + if (this.state.isLoading) { + return ; + } + console.log('rendering'); + // console.log(this.state.currentTheme.variables.containerBgColor); + return ( + + + ); + } } - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - alignItems: 'center', - justifyContent: 'center', - }, -}); diff --git a/assets/amicale.png b/assets/amicale.png new file mode 100644 index 0000000..c1cdd1b Binary files /dev/null and b/assets/amicale.png differ diff --git a/assets/drawer-cover.png b/assets/drawer-cover.png new file mode 100644 index 0000000..895f486 Binary files /dev/null and b/assets/drawer-cover.png differ diff --git a/assets/icon.png b/assets/icon.png index 7f5e01c..e56d6ab 100644 Binary files a/assets/icon.png and b/assets/icon.png differ diff --git a/assets/image-missing.png b/assets/image-missing.png new file mode 100644 index 0000000..0252766 Binary files /dev/null and b/assets/image-missing.png differ diff --git a/assets/splash.png b/assets/splash.png index 4f9ade6..9cb8c72 100644 Binary files a/assets/splash.png and b/assets/splash.png differ diff --git a/components/CustomHeader.js b/components/CustomHeader.js new file mode 100644 index 0000000..b1f2174 --- /dev/null +++ b/components/CustomHeader.js @@ -0,0 +1,33 @@ +import React from "react"; +import {Body, Button, Header, Icon, Left, Right, Title} from "native-base"; +import {StyleSheet} from "react-native"; +import {getStatusBarHeight} from "react-native-status-bar-height"; + +export default class CustomHeader extends React.Component { + render() { + return ( +
+ + + + + {this.props.title} + + +
); + } +}; + + +// Fix header in status bar on Android +const styles = StyleSheet.create({ + header: { + paddingTop: getStatusBarHeight(), + height: 54 + getStatusBarHeight(), + }, +}); \ No newline at end of file diff --git a/components/SideMenu.js b/components/SideMenu.js new file mode 100644 index 0000000..4cff317 --- /dev/null +++ b/components/SideMenu.js @@ -0,0 +1,146 @@ +import React from 'react'; +import {Platform, Dimensions, ScrollView, StyleSheet, View, Image, FlatList} from 'react-native'; +import {Drawer} from 'react-native-paper'; +import {Badge, Text, Container, Content, Icon, Left, List, ListItem, Right} from "native-base"; +import i18n from "i18n-js"; + +const deviceHeight = Dimensions.get("window").height; + +const drawerCover = require("../assets/drawer-cover.png"); + +export default class SideBar extends React.Component { + + constructor(props) { + super(props); + this.state = { + active: 'Home', + }; + this.dataSet = [ + { + name: i18n.t('screens.home'), + route: "Home", + icon: "home", + bg: "#C5F442" + // types: "11" // Shows the badge + }, + { + name: i18n.t('screens.planning'), + route: "Planning", + icon: "calendar-range", + bg: "#477EEA", + // types: "11" + }, + { + name: "Proxiwash", + route: "Proxiwash", + icon: "washing-machine", + bg: "#477EEA", + // types: "11" + }, + { + name: "Proximo", + route: "Proximo", + icon: "shopping", + bg: "#477EEA", + // types: "11" + }, + { + name: i18n.t('screens.settings'), + route: "Settings", + icon: "settings", + bg: "#477EEA", + // types: "11" + }, + { + name: i18n.t('screens.about'), + route: "About", + icon: "information", + bg: "#477EEA", + // types: "11" + }, + ]; + } + + navigateToScreen = (route) => () => { + this.props.navigation.navigate(route); + this.props.navigation.closeDrawer(); + this.setState({active: route}); + }; + + render() { + return ( + + + + + item.route} + renderItem={({item}) => + + + + + {item.name} + + + {item.types && + + + {`${item.types} Types`} + + } + } + /> + + + ); + } +} + +const styles = StyleSheet.create({ + drawerCover: { + alignSelf: "stretch", + height: deviceHeight / 4, + width: null, + position: "relative", + marginBottom: 10, + marginTop: 20 + }, + text: { + fontWeight: Platform.OS === "ios" ? "500" : "400", + fontSize: 16, + marginLeft: 20 + }, + badgeText: { + fontSize: Platform.OS === "ios" ? 13 : 11, + fontWeight: "400", + textAlign: "center", + marginTop: Platform.OS === "android" ? -3 : undefined + } +}); diff --git a/components/TabBarIcon.js b/components/TabBarIcon.js new file mode 100644 index 0000000..245d56b --- /dev/null +++ b/components/TabBarIcon.js @@ -0,0 +1,16 @@ +import React from 'react'; +import {Ionicons} from '@expo/vector-icons/build/Icons'; + +export default class TabBarIcon extends React.Component { + render() { + return ( + + ); + } + +} diff --git a/native-base-theme/components/Badge.js b/native-base-theme/components/Badge.js new file mode 100644 index 0000000..b164a6c --- /dev/null +++ b/native-base-theme/components/Badge.js @@ -0,0 +1,38 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const badgeTheme = { + ".primary": { + backgroundColor: variables.btnPrimaryBg + }, + ".warning": { + backgroundColor: variables.btnWarningBg + }, + ".info": { + backgroundColor: variables.btnInfoBg + }, + ".success": { + backgroundColor: variables.btnSuccessBg + }, + ".danger": { + backgroundColor: variables.btnDangerBg + }, + "NativeBase.Text": { + color: variables.badgeColor, + fontSize: variables.fontSizeBase, + lineHeight: variables.lineHeight - 1, + textAlign: "center", + paddingHorizontal: 3 + }, + backgroundColor: variables.badgeBg, + padding: variables.badgePadding, + paddingHorizontal: 6, + alignSelf: "flex-start", + justifyContent: variables.platform === "ios" ? "center" : undefined, + borderRadius: 13.5, + height: 27 + }; + return badgeTheme; +}; diff --git a/native-base-theme/components/Body.js b/native-base-theme/components/Body.js new file mode 100644 index 0000000..0f85f4a --- /dev/null +++ b/native-base-theme/components/Body.js @@ -0,0 +1,13 @@ +// @flow + +import variable from './../variables/platform'; + +export default (variables /*: * */ = variable) => { + const bodyTheme = { + flex: 1, + alignItems: 'center', + alignSelf: 'center', + }; + + return bodyTheme; +}; diff --git a/native-base-theme/components/Button.js b/native-base-theme/components/Button.js new file mode 100644 index 0000000..62cefe6 --- /dev/null +++ b/native-base-theme/components/Button.js @@ -0,0 +1,396 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platformStyle = variables.platformStyle; + const platform = variables.platform; + const darkCommon = { + "NativeBase.Text": { + color: variables.brandDark + }, + "NativeBase.Icon": { + color: variables.brandDark + }, + "NativeBase.IconNB": { + color: variables.brandDark + } + }; + const lightCommon = { + "NativeBase.Text": { + color: variables.brandLight + }, + "NativeBase.Icon": { + color: variables.brandLight + }, + "NativeBase.IconNB": { + color: variables.brandLight + } + }; + const primaryCommon = { + "NativeBase.Text": { + color: variables.btnPrimaryBg + }, + "NativeBase.Icon": { + color: variables.btnPrimaryBg + }, + "NativeBase.IconNB": { + color: variables.btnPrimaryBg + } + }; + const successCommon = { + "NativeBase.Text": { + color: variables.btnSuccessBg + }, + "NativeBase.Icon": { + color: variables.btnSuccessBg + }, + "NativeBase.IconNB": { + color: variables.btnSuccessBg + } + }; + const infoCommon = { + "NativeBase.Text": { + color: variables.btnInfoBg + }, + "NativeBase.Icon": { + color: variables.btnInfoBg + }, + "NativeBase.IconNB": { + color: variables.btnInfoBg + } + }; + const warningCommon = { + "NativeBase.Text": { + color: variables.btnWarningBg + }, + "NativeBase.Icon": { + color: variables.btnWarningBg + }, + "NativeBase.IconNB": { + color: variables.btnWarningBg + } + }; + const dangerCommon = { + "NativeBase.Text": { + color: variables.btnDangerBg + }, + "NativeBase.Icon": { + color: variables.btnDangerBg + }, + "NativeBase.IconNB": { + color: variables.btnDangerBg + } + }; + const buttonTheme = { + ".disabled": { + ".transparent": { + backgroundColor: null, + "NativeBase.Text": { + color: variables.btnDisabledBg + }, + "NativeBase.Icon": { + color: variables.btnDisabledBg + }, + "NativeBase.IconNB": { + color: variables.btnDisabledBg + } + }, + "NativeBase.Icon": { + color: variables.brandLight + }, + "NativeBase.IconNB": { + color: variables.brandLight + }, + backgroundColor: variables.btnDisabledBg + }, + ".bordered": { + ".dark": { + ...darkCommon, + backgroundColor: "transparent", + borderColor: variables.brandDark, + borderWidth: variables.borderWidth * 2 + }, + ".light": { + ...lightCommon, + backgroundColor: "transparent", + borderColor: variables.brandLight, + borderWidth: variables.borderWidth * 2 + }, + ".primary": { + ...primaryCommon, + backgroundColor: "transparent", + borderColor: variables.btnPrimaryBg, + borderWidth: variables.borderWidth * 2 + }, + ".success": { + ...successCommon, + backgroundColor: "transparent", + borderColor: variables.btnSuccessBg, + borderWidth: variables.borderWidth * 2 + }, + ".info": { + ...infoCommon, + backgroundColor: "transparent", + borderColor: variables.btnInfoBg, + borderWidth: variables.borderWidth * 2 + }, + ".warning": { + ...warningCommon, + backgroundColor: "transparent", + borderColor: variables.btnWarningBg, + borderWidth: variables.borderWidth * 2 + }, + ".danger": { + ...dangerCommon, + backgroundColor: "transparent", + borderColor: variables.btnDangerBg, + borderWidth: variables.borderWidth * 2 + }, + ".disabled": { + backgroundColor: null, + borderColor: variables.btnDisabledBg, + borderWidth: variables.borderWidth * 2, + "NativeBase.Text": { + color: variables.btnDisabledBg + } + }, + ...primaryCommon, + borderWidth: variables.borderWidth * 2, + elevation: null, + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + shadowRadius: null, + backgroundColor: "transparent" + }, + + ".dark": { + ".bordered": { + ...darkCommon + }, + backgroundColor: variables.brandDark + }, + ".light": { + ".transparent": { + ...lightCommon, + backgroundColor: null + }, + ".bordered": { + ...lightCommon + }, + ...darkCommon, + backgroundColor: variables.brandLight + }, + + ".primary": { + ".bordered": { + ...primaryCommon + }, + backgroundColor: variables.btnPrimaryBg + }, + + ".success": { + ".bordered": { + ...successCommon + }, + backgroundColor: variables.btnSuccessBg + }, + + ".info": { + ".bordered": { + ...infoCommon + }, + backgroundColor: variables.btnInfoBg + }, + + ".warning": { + ".bordered": { + ...warningCommon + }, + backgroundColor: variables.btnWarningBg + }, + + ".danger": { + ".bordered": { + ...dangerCommon + }, + backgroundColor: variables.btnDangerBg + }, + + ".block": { + justifyContent: "center", + alignSelf: "stretch" + }, + + ".full": { + justifyContent: "center", + alignSelf: "stretch", + borderRadius: 0 + }, + + ".rounded": { + // paddingHorizontal: variables.buttonPadding + 20, + borderRadius: variables.borderRadiusLarge + }, + + ".transparent": { + backgroundColor: "transparent", + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...primaryCommon, + ".dark": { + ...darkCommon, + backgroundColor: null + }, + ".danger": { + ...dangerCommon, + backgroundColor: null + }, + ".warning": { + ...warningCommon, + backgroundColor: null + }, + ".info": { + ...infoCommon, + backgroundColor: null + }, + ".primary": { + ...primaryCommon, + backgroundColor: null + }, + ".success": { + ...successCommon, + backgroundColor: null + }, + ".light": { + ...lightCommon, + backgroundColor: null + }, + ".disabled": { + backgroundColor: "transparent", + borderColor: variables.btnDisabledBg, + borderWidth: variables.borderWidth * 2, + "NativeBase.Text": { + color: variables.btnDisabledBg + }, + "NativeBase.Icon": { + color: variables.btnDisabledBg + }, + "NativeBase.IconNB": { + color: variables.btnDisabledBg + } + } + }, + + ".small": { + height: 30, + "NativeBase.Text": { + fontSize: 14 + }, + "NativeBase.Icon": { + fontSize: 20, + paddingTop: 0 + }, + "NativeBase.IconNB": { + fontSize: 20, + paddingTop: 0 + } + }, + + ".large": { + height: 60, + "NativeBase.Text": { + fontSize: 22, + } + }, + + ".capitalize": {}, + + ".vertical": { + flexDirection: "column", + height: null + }, + + "NativeBase.Text": { + fontFamily: variables.btnFontFamily, + marginLeft: 0, + marginRight: 0, + color: variables.inverseTextColor, + fontSize: variables.btnTextSize, + paddingHorizontal: 16, + backgroundColor: "transparent" + // childPosition: 1 + }, + + "NativeBase.Icon": { + color: variables.inverseTextColor, + fontSize: 24, + marginHorizontal: 16, + paddingTop: platform === "ios" ? 2 : undefined + }, + "NativeBase.IconNB": { + color: variables.inverseTextColor, + fontSize: 24, + marginHorizontal: 16, + paddingTop: platform === "ios" ? 2 : undefined + }, + + ".iconLeft": { + "NativeBase.Text": { + marginLeft: 0 + }, + "NativeBase.IconNB": { + marginRight: 0, + marginLeft: 16 + }, + "NativeBase.Icon": { + marginRight: 0, + marginLeft: 16 + } + }, + ".iconRight": { + "NativeBase.Text": { + marginRight: 0 + }, + "NativeBase.IconNB": { + marginLeft: 0, + marginRight: 16 + }, + "NativeBase.Icon": { + marginLeft: 0, + marginRight: 16 + } + }, + ".picker": { + "NativeBase.Text": { + ".note": { + fontSize: 16, + lineHeight: null + } + } + }, + + paddingVertical: variables.buttonPadding, + // paddingHorizontal: variables.buttonPadding + 10, + backgroundColor: variables.btnPrimaryBg, + borderRadius: variables.borderRadiusBase, + borderColor: variables.btnPrimaryBg, + borderWidth: null, + height: 45, + alignSelf: "flex-start", + flexDirection: "row", + elevation: 2, + shadowColor: platformStyle === "material" ? variables.brandDark : undefined, + shadowOffset: + platformStyle === "material" ? { width: 0, height: 2 } : undefined, + shadowOpacity: platformStyle === "material" ? 0.2 : undefined, + shadowRadius: platformStyle === "material" ? 1.2 : undefined, + alignItems: "center", + justifyContent: "space-between" + }; + return buttonTheme; +}; diff --git a/native-base-theme/components/Card.js b/native-base-theme/components/Card.js new file mode 100644 index 0000000..f917e20 --- /dev/null +++ b/native-base-theme/components/Card.js @@ -0,0 +1,37 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const cardTheme = { + ".transparent": { + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + shadowRadius: null, + elevation: null, + backgroundColor: "transparent", + borderWidth: 0 + }, + ".noShadow": { + shadowColor: null, + shadowOffset: null, + shadowOpacity: null, + elevation: null + }, + marginVertical: 5, + marginHorizontal: 2, + borderWidth: variables.borderWidth, + borderRadius: variables.cardBorderRadius, + borderColor: variables.cardBorderColor, + flexWrap: "nowrap", + backgroundColor: variables.cardDefaultBg, + shadowColor: "#000", + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.1, + shadowRadius: 1.5, + elevation: 3 + }; + + return cardTheme; +}; diff --git a/native-base-theme/components/CardItem.js b/native-base-theme/components/CardItem.js new file mode 100644 index 0000000..57724ac --- /dev/null +++ b/native-base-theme/components/CardItem.js @@ -0,0 +1,196 @@ +// @flow + +import { StyleSheet } from "react-native"; +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platform = variables.platform; + const transparentBtnCommon = { + "NativeBase.Text": { + fontSize: variables.DefaultFontSize - 3, + color: variables.sTabBarActiveTextColor + }, + "NativeBase.Icon": { + fontSize: variables.iconFontSize - 10, + color: variables.sTabBarActiveTextColor, + marginHorizontal: null + }, + "NativeBase.IconNB": { + fontSize: variables.iconFontSize - 10, + color: variables.sTabBarActiveTextColor + }, + paddingVertical: null, + paddingHorizontal: null + }; + + const cardItemTheme = { + "NativeBase.Left": { + "NativeBase.Body": { + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "400", + marginRight: 20 + } + }, + flex: 1, + marginLeft: 10, + alignItems: null + }, + "NativeBase.Icon": { + fontSize: variables.iconFontSize + }, + "NativeBase.IconNB": { + fontSize: variables.iconFontSize + }, + "NativeBase.Text": { + marginLeft: 10, + alignSelf: "center" + }, + "NativeBase.Button": { + ".transparent": { + ...transparentBtnCommon, + paddingRight: variables.cardItemPadding + 5 + } + }, + flex: 1, + flexDirection: "row", + alignItems: "center" + }, + ".content": { + "NativeBase.Text": { + color: platform === "ios" ? "#555" : "#222", + fontSize: variables.DefaultFontSize - 2 + } + }, + ".cardBody": { + padding: -5, + "NativeBase.Text": { + marginTop: 5 + } + }, + "NativeBase.Body": { + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "200", + marginRight: 20 + } + }, + "NativeBase.Button": { + ".transparent": { + ...transparentBtnCommon, + paddingRight: variables.cardItemPadding + 5, + alignSelf: "stretch" + } + }, + flex: 1, + alignSelf: "stretch", + alignItems: "flex-start" + }, + "NativeBase.Right": { + "NativeBase.Badge": { + alignSelf: null + }, + "NativeBase.Button": { + ".transparent": { + ...transparentBtnCommon + }, + alignSelf: null + }, + "NativeBase.Icon": { + alignSelf: null, + fontSize: variables.iconFontSize - 8, + color: variables.cardBorderColor + }, + "NativeBase.IconNB": { + alignSelf: null, + fontSize: variables.iconFontSize - 8, + color: variables.cardBorderColor + }, + "NativeBase.Text": { + fontSize: variables.DefaultFontSize - 1, + alignSelf: null + }, + "NativeBase.Thumbnail": { + alignSelf: null + }, + "NativeBase.Image": { + alignSelf: null + }, + "NativeBase.Radio": { + alignSelf: null + }, + "NativeBase.Checkbox": { + alignSelf: null + }, + "NativeBase.Switch": { + alignSelf: null + }, + flex: 0.8 + }, + ".header": { + "NativeBase.Text": { + fontSize: 16, + fontWeight: platform === "ios" ? "600" : "500" + }, + ".bordered": { + "NativeBase.Text": { + color: variables.brandPrimary, + fontWeight: platform === "ios" ? "600" : "500" + }, + borderBottomWidth: variables.borderWidth + }, + borderBottomWidth: null, + paddingVertical: variables.cardItemPadding + 5 + }, + ".footer": { + "NativeBase.Text": { + fontSize: 16, + fontWeight: platform === "ios" ? "600" : "500" + }, + ".bordered": { + "NativeBase.Text": { + color: variables.brandPrimary, + fontWeight: platform === "ios" ? "600" : "500" + }, + borderTopWidth: variables.borderWidth + }, + borderBottomWidth: null + }, + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + } + }, + "NativeBase.Icon": { + width: variables.iconFontSize + 5, + fontSize: variables.iconFontSize - 2 + }, + "NativeBase.IconNB": { + width: variables.iconFontSize + 5, + fontSize: variables.iconFontSize - 2 + }, + ".bordered": { + borderBottomWidth: StyleSheet.hairlineWidth, + borderColor: variables.cardBorderColor + }, + ".first": { + borderTopLeftRadius: variables.cardBorderRadius, + borderTopRightRadius: variables.cardBorderRadius + }, + ".last": { + borderBottomLeftRadius: variables.cardBorderRadius, + borderBottomRightRadius: variables.cardBorderRadius + }, + flexDirection: "row", + alignItems: "center", + borderRadius: variables.cardBorderRadius, + padding: variables.cardItemPadding + 5, + paddingVertical: variables.cardItemPadding, + backgroundColor: variables.cardDefaultBg + }; + + return cardItemTheme; +}; diff --git a/native-base-theme/components/CheckBox.js b/native-base-theme/components/CheckBox.js new file mode 100644 index 0000000..d143e07 --- /dev/null +++ b/native-base-theme/components/CheckBox.js @@ -0,0 +1,38 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const checkBoxTheme = { + ".checked": { + "NativeBase.Icon": { + color: variables.checkboxTickColor + }, + "NativeBase.IconNB": { + color: variables.checkboxTickColor + } + }, + "NativeBase.Icon": { + color: "transparent", + lineHeight: variables.CheckboxIconSize, + marginTop: variables.CheckboxIconMarginTop, + fontSize: variables.CheckboxFontSize + }, + "NativeBase.IconNB": { + color: "transparent", + lineHeight: variables.CheckboxIconSize, + marginTop: variables.CheckboxIconMarginTop, + fontSize: variables.CheckboxFontSize + }, + borderRadius: variables.CheckboxRadius, + overflow: "hidden", + width: variables.checkboxSize, + height: variables.checkboxSize, + borderWidth: variables.CheckboxBorderWidth, + paddingLeft: variables.CheckboxPaddingLeft - 1, + paddingBottom: variables.CheckboxPaddingBottom, + left: 10 + }; + + return checkBoxTheme; +}; diff --git a/native-base-theme/components/Container.js b/native-base-theme/components/Container.js new file mode 100644 index 0000000..7a93fcc --- /dev/null +++ b/native-base-theme/components/Container.js @@ -0,0 +1,16 @@ +// @flow + +import { Platform, Dimensions } from "react-native"; + +import variable from "./../variables/platform"; + +const deviceHeight = Dimensions.get("window").height; +export default (variables /*: * */ = variable) => { + const theme = { + flex: 1, + height: Platform.OS === "ios" ? deviceHeight : deviceHeight - 20, + backgroundColor: variables.containerBgColor + }; + + return theme; +}; diff --git a/native-base-theme/components/Content.js b/native-base-theme/components/Content.js new file mode 100644 index 0000000..72230c4 --- /dev/null +++ b/native-base-theme/components/Content.js @@ -0,0 +1,16 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const contentTheme = { + flex: 1, + backgroundColor: "transparent", + "NativeBase.Segment": { + borderWidth: 0, + backgroundColor: "transparent" + } + }; + + return contentTheme; +}; diff --git a/native-base-theme/components/Fab.js b/native-base-theme/components/Fab.js new file mode 100644 index 0000000..c3314da --- /dev/null +++ b/native-base-theme/components/Fab.js @@ -0,0 +1,29 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platform = variables.platform; + + const fabTheme = { + "NativeBase.Button": { + alignItems: "center", + padding: null, + justifyContent: "center", + "NativeBase.Icon": { + alignSelf: "center", + fontSize: 20, + marginLeft: 0, + marginRight: 0, + }, + "NativeBase.IconNB": { + alignSelf: "center", + fontSize: 20, + marginLeft: 0, + marginRight: 0, + }, + }, + }; + + return fabTheme; +}; diff --git a/native-base-theme/components/Footer.js b/native-base-theme/components/Footer.js new file mode 100644 index 0000000..0021508 --- /dev/null +++ b/native-base-theme/components/Footer.js @@ -0,0 +1,118 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platformStyle = variables.platformStyle; + const platform = variables.platform; + + const iconCommon = { + "NativeBase.Icon": { + color: variables.tabBarActiveTextColor + } + }; + const iconNBCommon = { + "NativeBase.IconNB": { + color: variables.tabBarActiveTextColor + } + }; + const textCommon = { + "NativeBase.Text": { + color: variables.tabBarActiveTextColor + } + }; + const footerTheme = { + "NativeBase.Left": { + "NativeBase.Button": { + ".transparent": { + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon + }, + alignSelf: null, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + }, + flex: 1, + alignSelf: "center", + alignItems: "flex-start" + }, + "NativeBase.Body": { + flex: 1, + alignItems: "center", + alignSelf: "center", + flexDirection: "row", + "NativeBase.Button": { + alignSelf: "center", + ".transparent": { + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon + }, + ".full": { + height: variables.footerHeight, + paddingBottom: variables.footerPaddingBottom, + flex: 1 + }, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + } + }, + "NativeBase.Right": { + "NativeBase.Button": { + ".transparent": { + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + ...iconCommon, + ...iconNBCommon, + ...textCommon + }, + alignSelf: null, + ...iconCommon, + ...iconNBCommon, + // ...textCommon + }, + flex: 1, + alignSelf: "center", + alignItems: "flex-end" + }, + backgroundColor: variables.footerDefaultBg, + flexDirection: "row", + justifyContent: "center", + borderTopWidth: + platform === "ios" && platformStyle !== "material" + ? variables.borderWidth + : undefined, + borderColor: + platform === "ios" && platformStyle !== "material" + ? "#cbcbcb" + : undefined, + height: variables.footerHeight, + paddingBottom: variables.footerPaddingBottom, + elevation: 3, + left: 0, + right: 0 + }; + return footerTheme; +}; diff --git a/native-base-theme/components/FooterTab.js b/native-base-theme/components/FooterTab.js new file mode 100644 index 0000000..8fcdf03 --- /dev/null +++ b/native-base-theme/components/FooterTab.js @@ -0,0 +1,79 @@ +// @flow + +import { Platform } from "react-native"; + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platform = variables.platform; + + const footerTabTheme = { + "NativeBase.Button": { + ".active": { + "NativeBase.Text": { + color: variables.tabBarActiveTextColor, + fontSize: variables.tabBarTextSize, + lineHeight: 16 + }, + "NativeBase.Icon": { + color: variables.tabBarActiveTextColor + }, + "NativeBase.IconNB": { + color: variables.tabBarActiveTextColor + }, + backgroundColor: variables.tabActiveBgColor + }, + flexDirection: null, + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + alignSelf: "center", + flex: 1, + height: variables.footerHeight, + justifyContent: "center", + ".badge": { + "NativeBase.Badge": { + "NativeBase.Text": { + fontSize: 11, + fontWeight: platform === "ios" ? "600" : undefined, + lineHeight: 14 + }, + top: -3, + alignSelf: "center", + left: 10, + zIndex: 99, + height: 18, + padding: 1.7, + paddingHorizontal: 3 + }, + "NativeBase.Icon": { + marginTop: -18 + } + }, + "NativeBase.Icon": { + color: variables.tabBarTextColor + }, + "NativeBase.IconNB": { + color: variables.tabBarTextColor + }, + "NativeBase.Text": { + color: variables.tabBarTextColor, + fontSize: variables.tabBarTextSize, + lineHeight: 16 + } + }, + backgroundColor: Platform.OS === "android" + ? variables.footerDefaultBg + : undefined, + flexDirection: "row", + justifyContent: "space-between", + flex: 1, + alignSelf: "stretch" + }; + + return footerTabTheme; +}; diff --git a/native-base-theme/components/Form.js b/native-base-theme/components/Form.js new file mode 100644 index 0000000..8d7aedc --- /dev/null +++ b/native-base-theme/components/Form.js @@ -0,0 +1,90 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platform = variables.platform; + + const theme = { + "NativeBase.Item": { + ".fixedLabel": { + "NativeBase.Label": { + paddingLeft: null + }, + marginLeft: 15 + }, + ".inlineLabel": { + "NativeBase.Label": { + paddingLeft: null + }, + marginLeft: 15 + }, + ".placeholderLabel": { + "NativeBase.Input": {} + }, + ".stackedLabel": { + "NativeBase.Label": { + top: 5, + paddingLeft: null + }, + "NativeBase.Input": { + paddingLeft: null, + marginLeft: null + }, + "NativeBase.Icon": { + marginTop: 36 + }, + marginLeft: 15 + }, + ".floatingLabel": { + "NativeBase.Input": { + paddingLeft: null, + top: 10, + marginLeft: null + }, + "NativeBase.Label": { + left: 0, + top: 6 + }, + "NativeBase.Icon": { + top: 6 + }, + marginTop: 15, + marginLeft: 15 + }, + ".regular": { + "NativeBase.Label": { + left: 0 + }, + marginLeft: 0 + }, + ".rounded": { + "NativeBase.Label": { + left: 0 + }, + marginLeft: 0 + }, + ".underline": { + "NativeBase.Label": { + left: 0, + top: 0, + position: "relative" + }, + "NativeBase.Input": { + left: -15 + }, + marginLeft: 15 + }, + ".last": { + marginLeft: 0, + paddingLeft: 15 + }, + "NativeBase.Label": { + paddingRight: 5 + }, + marginLeft: 15 + } + }; + + return theme; +}; diff --git a/native-base-theme/components/H1.js b/native-base-theme/components/H1.js new file mode 100644 index 0000000..dd87958 --- /dev/null +++ b/native-base-theme/components/H1.js @@ -0,0 +1,13 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const h1Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH1, + lineHeight: variables.lineHeightH1, + }; + + return h1Theme; +}; diff --git a/native-base-theme/components/H2.js b/native-base-theme/components/H2.js new file mode 100644 index 0000000..0a1aa77 --- /dev/null +++ b/native-base-theme/components/H2.js @@ -0,0 +1,13 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const h2Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH2, + lineHeight: variables.lineHeightH2, + }; + + return h2Theme; +}; diff --git a/native-base-theme/components/H3.js b/native-base-theme/components/H3.js new file mode 100644 index 0000000..45e5891 --- /dev/null +++ b/native-base-theme/components/H3.js @@ -0,0 +1,13 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const h3Theme = { + color: variables.textColor, + fontSize: variables.fontSizeH3, + lineHeight: variables.lineHeightH3 + }; + + return h3Theme; +}; diff --git a/native-base-theme/components/Header.js b/native-base-theme/components/Header.js new file mode 100644 index 0000000..9e7f30f --- /dev/null +++ b/native-base-theme/components/Header.js @@ -0,0 +1,394 @@ +// @flow + +import { PixelRatio, StatusBar } from "react-native"; + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platformStyle = variables.platformStyle; + const platform = variables.platform; + + const headerTheme = { + ".span": { + height: 128, + "NativeBase.Left": { + alignSelf: "flex-start" + }, + "NativeBase.Body": { + alignSelf: "flex-end", + alignItems: "flex-start", + justifyContent: "center", + paddingBottom: 26 + }, + "NativeBase.Right": { + alignSelf: "flex-start" + } + }, + ".hasSubtitle": { + "NativeBase.Body": { + "NativeBase.Title": { + fontSize: variables.titleFontSize - 2, + fontFamily: variables.titleFontfamily, + textAlign: "center", + fontWeight: "500", + paddingBottom: 3 + }, + "NativeBase.Subtitle": { + fontSize: variables.subTitleFontSize, + fontFamily: variables.titleFontfamily, + color: variables.subtitleColor, + textAlign: "center" + } + } + }, + ".transparent": { + backgroundColor: "transparent", + borderBottomColor: "transparent", + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + paddingTop: platform === "android" ? StatusBar.currentHeight : undefined, + height: platform === "android" ? variables.toolbarHeight + StatusBar.currentHeight : variables.toolbarHeight + }, + ".noShadow": { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null + }, + ".hasTabs": { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + borderBottomWidth: null + }, + ".hasSegment": { + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null, + borderBottomWidth: null, + "NativeBase.Left": { + flex: 0.3 + }, + "NativeBase.Right": { + flex: 0.3 + }, + "NativeBase.Body": { + flex: 1, + "NativeBase.Segment": { + marginRight: 0, + alignSelf: "center", + "NativeBase.Button": { + paddingLeft: 0, + paddingRight: 0 + } + } + } + }, + ".noLeft": { + "NativeBase.Left": { + width: platform === "ios" ? undefined : 0, + flex: platform === "ios" ? 1 : 0 + }, + "NativeBase.Body": { + "NativeBase.Title": { + paddingLeft: platform === "ios" ? undefined : 10 + }, + "NativeBase.Subtitle": { + paddingLeft: platform === "ios" ? undefined : 10 + } + } + }, + "NativeBase.Button": { + justifyContent: "center", + alignSelf: "center", + alignItems: "center", + ".transparent": { + "NativeBase.Text": { + color: variables.toolbarBtnTextColor, + fontWeight: "600" + }, + "NativeBase.Icon": { + color: variables.toolbarBtnColor + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnColor + }, + paddingHorizontal: variables.buttonPadding + }, + paddingHorizontal: 15 + }, + ".searchBar": { + "NativeBase.Item": { + "NativeBase.Icon": { + backgroundColor: "transparent", + color: variables.dropdownLinkColor, + fontSize: variables.toolbarSearchIconSize, + alignItems: "center", + marginTop: 2, + paddingRight: 10, + paddingLeft: 10 + }, + "NativeBase.IconNB": { + backgroundColor: "transparent", + color: null, + alignSelf: "center" + }, + "NativeBase.Input": { + alignSelf: "center", + lineHeight: null, + height: variables.searchBarInputHeight + }, + alignSelf: "center", + alignItems: "center", + justifyContent: "flex-start", + flex: 1, + height: variables.searchBarHeight, + borderColor: "transparent", + backgroundColor: variables.toolbarInputColor + }, + "NativeBase.Button": { + ".transparent": { + "NativeBase.Text": { + fontWeight: "500" + }, + paddingHorizontal: null, + paddingLeft: platform === "ios" ? 10 : null + }, + paddingHorizontal: platform === "ios" ? undefined : null, + width: platform === "ios" ? undefined : 0, + height: platform === "ios" ? undefined : 0 + } + }, + ".rounded": { + "NativeBase.Item": { + borderRadius: + platform === "ios" && platformStyle !== "material" ? 25 : 3 + } + }, + "NativeBase.Left": { + "NativeBase.Button": { + ".hasText": { + marginLeft: -10, + height: 30, + "NativeBase.Icon": { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize, + marginTop: 2, + marginRight: 5, + marginLeft: 2 + }, + "NativeBase.Text": { + color: variables.toolbarBtnTextColor, + fontSize: platform === "ios" ? 17 : 0, + marginLeft: 7, + lineHeight: 19.5 + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize, + marginTop: 2, + marginRight: 5, + marginLeft: 2 + } + }, + ".transparent": { + marginLeft: + platform === "ios" && platformStyle !== "material" ? -3 : 0, + "NativeBase.Icon": { + color: variables.toolbarBtnColor, + fontSize: + platform === "ios" && variables.platformStyle !== "material" + ? variables.iconHeaderSize + 1 + : variables.iconHeaderSize, + marginTop: 0, + marginRight: 2, + marginLeft: 1, + paddingTop: 1 + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnColor, + fontSize: + platform === "ios" && variables.platformStyle !== "material" + ? variables.iconHeaderSize + 1 + : variables.iconHeaderSize - 2, + marginTop: 0, + marginRight: 2, + marginLeft: 1, + paddingTop: 1 + }, + "NativeBase.Text": { + color: variables.toolbarBtnTextColor, + fontSize: platform === "ios" ? 17 : 0, + top: platform === "ios" ? 1 : -1.5, + paddingLeft: + platform === "ios" && platformStyle !== "material" ? 2 : 5, + paddingRight: + platform === "ios" && platformStyle !== "material" + ? undefined + : 10 + }, + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null + }, + "NativeBase.Icon": { + color: variables.toolbarBtnColor + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnColor + }, + alignSelf: null, + paddingRight: variables.buttonPadding, + paddingLeft: platform === "ios" && platformStyle !== "material" ? 4 : 8 + }, + flex: platform === "ios" && platformStyle !== "material" ? 1 : 0.4, + alignSelf: "center", + alignItems: "flex-start" + }, + "NativeBase.Body": { + flex: 1, + alignItems: + platform === "ios" && platformStyle !== "material" + ? "center" + : "flex-start", + alignSelf: "center", + "NativeBase.Segment": { + borderWidth: 0, + alignSelf: "flex-end", + marginRight: platform === "ios" ? -40 : -55 + }, + "NativeBase.Button": { + alignSelf: "center", + ".transparent": { + backgroundColor: "transparent" + }, + "NativeBase.Icon": { + color: variables.toolbarBtnColor + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnColor + }, + "NativeBase.Text": { + color: variables.inverseTextColor, + backgroundColor: "transparent" + } + } + }, + "NativeBase.Right": { + "NativeBase.Button": { + ".hasText": { + height: 30, + "NativeBase.Icon": { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize - 2, + marginTop: 2, + marginRight: 2, + marginLeft: 5 + }, + "NativeBase.Text": { + color: variables.toolbarBtnTextColor, + fontSize: platform === "ios" ? 17 : 14, + lineHeight: 19.5 + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize - 2, + marginTop: 2, + marginRight: 2, + marginLeft: 5 + } + }, + ".transparent": { + marginRight: platform === "ios" ? -9 : -5, + paddingLeft: 15, + paddingRight: 12, + paddingHorizontal: 15, + borderRadius: 50, + "NativeBase.Icon": { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize - 2, + marginTop: 0, + marginLeft: 2, + marginRight: 0 + // paddingTop: 0 + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnColor, + fontSize: variables.iconHeaderSize - 2, + marginTop: 0, + marginLeft: 2, + marginRight: 0 + // paddingTop: 0 + }, + "NativeBase.Text": { + color: variables.toolbarBtnTextColor, + fontSize: platform === "ios" ? 17 : 14, + top: platform === "ios" ? 1 : -1.5, + paddingRight: + platform === "ios" && variables.platformStyle !== "material" + ? 0 + : undefined + }, + backgroundColor: "transparent", + borderColor: null, + elevation: 0, + shadowColor: null, + shadowOffset: null, + shadowRadius: null, + shadowOpacity: null + }, + "NativeBase.Icon": { + color: variables.toolbarBtnColor + }, + "NativeBase.IconNB": { + color: variables.toolbarBtnColor + }, + alignSelf: null, + paddingHorizontal: variables.buttonPadding + }, + flex: 1, + alignSelf: "center", + alignItems: "flex-end", + flexDirection: "row", + justifyContent: "flex-end" + }, + backgroundColor: variables.toolbarDefaultBg, + flexDirection: "row", + // paddingHorizontal: 10, + paddingLeft: + platform === "ios" && variables.platformStyle !== "material" ? 6 : 10, + paddingRight: 10, + justifyContent: "center", + paddingTop: platform === "ios" ? 18 : 0, + borderBottomWidth: + platform === "ios" ? 1 / PixelRatio.getPixelSizeForLayoutSize(1) : 0, + borderBottomColor: variables.toolbarDefaultBorder, + height: + variables.platform === "ios" && variables.platformStyle === "material" + ? variables.toolbarHeight + 10 + : variables.toolbarHeight, + elevation: 3, + shadowColor: platformStyle === "material" ? "#000" : undefined, + shadowOffset: + platformStyle === "material" ? { width: 0, height: 2 } : undefined, + shadowOpacity: platformStyle === "material" ? 0.2 : undefined, + shadowRadius: platformStyle === "material" ? 1.2 : undefined, + top: 0, + left: 0, + right: 0 + }; + + return headerTheme; +}; diff --git a/native-base-theme/components/Icon.js b/native-base-theme/components/Icon.js new file mode 100644 index 0000000..0b75534 --- /dev/null +++ b/native-base-theme/components/Icon.js @@ -0,0 +1,12 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const iconTheme = { + fontSize: variables.iconFontSize, + color: "#000" + }; + + return iconTheme; +}; diff --git a/native-base-theme/components/Input.js b/native-base-theme/components/Input.js new file mode 100644 index 0000000..ad0abff --- /dev/null +++ b/native-base-theme/components/Input.js @@ -0,0 +1,19 @@ +// @flow + +import variable from './../variables/platform'; + +export default (variables /*: * */ = variable) => { + const inputTheme = { + '.multiline': { + height: null, + }, + height: variables.inputHeightBase, + color: variables.inputColor, + paddingLeft: 5, + paddingRight: 5, + flex: 1, + fontSize: variables.inputFontSize + }; + + return inputTheme; +}; diff --git a/native-base-theme/components/InputGroup.js b/native-base-theme/components/InputGroup.js new file mode 100644 index 0000000..9d33525 --- /dev/null +++ b/native-base-theme/components/InputGroup.js @@ -0,0 +1,132 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const inputGroupTheme = { + "NativeBase.Icon": { + fontSize: 24, + color: variables.sTabBarActiveTextColor, + paddingHorizontal: 5 + }, + "NativeBase.IconNB": { + fontSize: 24, + color: variables.sTabBarActiveTextColor, + paddingHorizontal: 5 + }, + "NativeBase.Input": { + height: variables.inputHeightBase, + color: variables.inputColor, + paddingLeft: 5, + paddingRight: 5, + flex: 1, + fontSize: variables.inputFontSize, + lineHeight: variables.inputLineHeight + }, + ".underline": { + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + paddingLeft: 5, + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor + }, + ".regular": { + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + paddingLeft: 5, + borderWidth: variables.borderWidth, + borderColor: variables.inputBorderColor + }, + ".rounded": { + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + paddingLeft: 5, + borderWidth: variables.borderWidth, + borderRadius: variables.inputGroupRoundedBorderRadius, + borderColor: variables.inputBorderColor + }, + + ".success": { + "NativeBase.Icon": { + color: variables.inputSuccessBorderColor + }, + "NativeBase.IconNB": { + color: variables.inputSuccessBorderColor + }, + ".rounded": { + borderRadius: 30, + borderColor: variables.inputSuccessBorderColor + }, + ".regular": { + borderColor: variables.inputSuccessBorderColor + }, + ".underline": { + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputSuccessBorderColor + }, + borderColor: variables.inputSuccessBorderColor + }, + + ".error": { + "NativeBase.Icon": { + color: variables.inputErrorBorderColor + }, + "NativeBase.IconNB": { + color: variables.inputErrorBorderColor + }, + ".rounded": { + borderRadius: 30, + borderColor: variables.inputErrorBorderColor + }, + ".regular": { + borderColor: variables.inputErrorBorderColor + }, + ".underline": { + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputErrorBorderColor + }, + borderColor: variables.inputErrorBorderColor + }, + ".disabled": { + "NativeBase.Icon": { + color: "#384850" + }, + "NativeBase.IconNB": { + color: "#384850" + } + }, + + paddingLeft: 5, + borderWidth: variables.borderWidth, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor, + backgroundColor: "transparent", + flexDirection: "row", + alignItems: "center" + }; + + return inputGroupTheme; +}; diff --git a/native-base-theme/components/Item.js b/native-base-theme/components/Item.js new file mode 100644 index 0000000..447f297 --- /dev/null +++ b/native-base-theme/components/Item.js @@ -0,0 +1,240 @@ +// @flow + +import { Platform } from "react-native"; + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const itemTheme = { + ".floatingLabel": { + "NativeBase.Input": { + height: 50, + top: 8, + paddingTop: 3, + paddingBottom: 7, + ".multiline": { + minHeight: variables.inputHeightBase, + paddingTop: Platform.OS === "ios" ? 10 : 3, + paddingBottom: Platform.OS === "ios" ? 14 : 10 + } + }, + "NativeBase.Label": { + paddingTop: 5 + }, + "NativeBase.Icon": { + top: 6, + paddingTop: 8 + }, + "NativeBase.IconNB": { + top: 6, + paddingTop: 8 + } + }, + ".fixedLabel": { + "NativeBase.Label": { + position: null, + top: null, + left: null, + right: null, + flex: 1, + height: null, + width: null, + fontSize: variables.inputFontSize + }, + "NativeBase.Input": { + flex: 2, + fontSize: variables.inputFontSize + } + }, + ".stackedLabel": { + "NativeBase.Label": { + position: null, + top: null, + left: null, + right: null, + paddingTop: 5, + alignSelf: "flex-start", + fontSize: variables.inputFontSize - 2 + }, + "NativeBase.Icon": { + marginTop: 36 + }, + "NativeBase.Input": { + alignSelf: Platform.OS === "ios" ? "stretch" : "flex-start", + flex: 1, + width: Platform.OS === "ios" ? null : variables.deviceWidth - 25, + fontSize: variables.inputFontSize, + lineHeight: variables.inputLineHeight - 6, + ".secureTextEntry": { + fontSize: variables.inputFontSize - 4 + }, + ".multiline": { + paddingTop: Platform.OS === "ios" ? 9 : undefined, + paddingBottom: Platform.OS === "ios" ? 9 : undefined + } + }, + flexDirection: null, + minHeight: variables.inputHeightBase + 15 + }, + ".inlineLabel": { + "NativeBase.Label": { + position: null, + top: null, + left: null, + right: null, + paddingRight: 20, + height: null, + width: null, + fontSize: variables.inputFontSize + }, + "NativeBase.Input": { + paddingLeft: 5, + fontSize: variables.inputFontSize + }, + flexDirection: "row" + }, + "NativeBase.Label": { + fontSize: variables.inputFontSize, + color: variables.inputColorPlaceholder, + paddingRight: 5 + }, + "NativeBase.Icon": { + fontSize: 24, + paddingRight: 8 + }, + "NativeBase.IconNB": { + fontSize: 24, + paddingRight: 8 + }, + "NativeBase.Input": { + ".multiline": { + height: null + }, + height: variables.inputHeightBase, + color: variables.inputColor, + flex: 1, + top: Platform.OS === "ios" ? 1.5 : undefined, + fontSize: variables.inputFontSize + }, + ".underline": { + "NativeBase.Input": { + paddingLeft: 15 + }, + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + borderWidth: variables.borderWidth * 2, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor + }, + ".regular": { + "NativeBase.Input": { + paddingLeft: 8 + }, + "NativeBase.Icon": { + paddingLeft: 10 + }, + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + borderWidth: variables.borderWidth * 2, + borderColor: variables.inputBorderColor + }, + ".rounded": { + "NativeBase.Input": { + paddingLeft: 8 + }, + "NativeBase.Icon": { + paddingLeft: 10 + }, + ".success": { + borderColor: variables.inputSuccessBorderColor + }, + ".error": { + borderColor: variables.inputErrorBorderColor + }, + borderWidth: variables.borderWidth * 2, + borderRadius: 30, + borderColor: variables.inputBorderColor + }, + + ".success": { + "NativeBase.Icon": { + color: variables.inputSuccessBorderColor + }, + "NativeBase.IconNB": { + color: variables.inputSuccessBorderColor + }, + ".rounded": { + borderRadius: 30, + borderColor: variables.inputSuccessBorderColor + }, + ".regular": { + borderColor: variables.inputSuccessBorderColor + }, + ".underline": { + borderWidth: variables.borderWidth * 2, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputSuccessBorderColor + }, + borderColor: variables.inputSuccessBorderColor + }, + + ".error": { + "NativeBase.Icon": { + color: variables.inputErrorBorderColor + }, + "NativeBase.IconNB": { + color: variables.inputErrorBorderColor + }, + ".rounded": { + borderRadius: 30, + borderColor: variables.inputErrorBorderColor + }, + ".regular": { + borderColor: variables.inputErrorBorderColor + }, + ".underline": { + borderWidth: variables.borderWidth * 2, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputErrorBorderColor + }, + borderColor: variables.inputErrorBorderColor + }, + ".disabled": { + "NativeBase.Icon": { + color: "#384850" + }, + "NativeBase.IconNB": { + color: "#384850" + } + }, + ".picker": { + marginLeft: 0 + }, + + borderWidth: variables.borderWidth * 2, + borderTopWidth: 0, + borderRightWidth: 0, + borderLeftWidth: 0, + borderColor: variables.inputBorderColor, + backgroundColor: "transparent", + flexDirection: "row", + alignItems: "center", + marginLeft: 2 + }; + + return itemTheme; +}; diff --git a/native-base-theme/components/Label.js b/native-base-theme/components/Label.js new file mode 100644 index 0000000..01aa47b --- /dev/null +++ b/native-base-theme/components/Label.js @@ -0,0 +1,14 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const labelTheme = { + ".focused": { + width: 0 + }, + fontSize: 17 + }; + + return labelTheme; +}; diff --git a/native-base-theme/components/Left.js b/native-base-theme/components/Left.js new file mode 100644 index 0000000..0a4bc96 --- /dev/null +++ b/native-base-theme/components/Left.js @@ -0,0 +1,13 @@ +// @flow + +import variable from './../variables/platform'; + +export default (variables /*: * */ = variable) => { + const leftTheme = { + flex: 1, + alignSelf: 'center', + alignItems: 'flex-start', + }; + + return leftTheme; +}; diff --git a/native-base-theme/components/ListItem.js b/native-base-theme/components/ListItem.js new file mode 100644 index 0000000..94a345d --- /dev/null +++ b/native-base-theme/components/ListItem.js @@ -0,0 +1,444 @@ +// @flow + +import { Platform, PixelRatio } from "react-native"; + +import pickerTheme from "./Picker"; +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platform = variables.platform; + const selectedStyle = { + "NativeBase.Text": { + color: variables.listItemSelected + }, + "NativeBase.Icon": { + color: variables.listItemSelected + } + }; + + const listItemTheme = { + "NativeBase.InputGroup": { + "NativeBase.Icon": { + paddingRight: 5 + }, + "NativeBase.IconNB": { + paddingRight: 5 + }, + "NativeBase.Input": { + paddingHorizontal: 5 + }, + flex: 1, + borderWidth: null, + margin: -10, + borderBottomColor: "transparent" + }, + ".searchBar": { + "NativeBase.Item": { + "NativeBase.Icon": { + backgroundColor: "transparent", + color: variables.dropdownLinkColor, + fontSize: + platform === "ios" + ? variables.iconFontSize - 10 + : variables.iconFontSize - 5, + alignItems: "center", + marginTop: 2, + paddingRight: 8 + }, + "NativeBase.IconNB": { + backgroundColor: "transparent", + color: null, + alignSelf: "center" + }, + "NativeBase.Input": { + alignSelf: "center" + }, + alignSelf: "center", + alignItems: "center", + justifyContent: "flex-start", + flex: 1, + height: platform === "ios" ? 30 : 40, + borderColor: "transparent", + backgroundColor: "#fff", + borderRadius: 5 + }, + "NativeBase.Button": { + ".transparent": { + "NativeBase.Text": { + fontWeight: "500" + }, + paddingHorizontal: null, + paddingLeft: platform === "ios" ? 10 : null + }, + paddingHorizontal: platform === "ios" ? undefined : null, + width: platform === "ios" ? undefined : 0, + height: platform === "ios" ? undefined : 0 + }, + backgroundColor: variables.toolbarInputColor, + padding: 10, + marginLeft: null + }, + "NativeBase.CheckBox": { + marginLeft: -10, + marginRight: 10 + }, + ".first": { + ".itemHeader": { + paddingTop: variables.listItemPadding + 3 + } + }, + ".itemHeader": { + ".first": { + paddingTop: variables.listItemPadding + 3 + }, + borderBottomWidth: platform === "ios" ? variables.borderWidth : null, + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 5, + paddingTop: + platform === "ios" ? variables.listItemPadding + 25 : undefined, + paddingBottom: + platform === "android" ? variables.listItemPadding + 20 : undefined, + flexDirection: "row", + borderColor: variables.listBorderColor, + "NativeBase.Text": { + fontSize: 14, + color: platform === "ios" ? undefined : variables.listNoteColor + } + }, + ".itemDivider": { + borderBottomWidth: null, + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 5, + backgroundColor: variables.listDividerBg, + flexDirection: "row", + borderColor: variables.listBorderColor + }, + ".selected": { + "NativeBase.Left": { + ...selectedStyle + }, + "NativeBase.Body": { + ...selectedStyle + }, + "NativeBase.Right": { + ...selectedStyle + }, + ...selectedStyle + }, + "NativeBase.Left": { + "NativeBase.Body": { + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + }, + fontWeight: "600" + }, + marginLeft: 10, + alignItems: null, + alignSelf: null + }, + "NativeBase.Icon": { + width: variables.iconFontSize - 10, + fontSize: variables.iconFontSize - 10 + }, + "NativeBase.IconNB": { + width: variables.iconFontSize - 10, + fontSize: variables.iconFontSize - 10 + }, + "NativeBase.Text": { + alignSelf: "center" + }, + flexDirection: "row" + }, + "NativeBase.Body": { + "NativeBase.Text": { + marginHorizontal: variables.listItemPadding, + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + } + }, + alignSelf: null, + alignItems: null + }, + "NativeBase.Right": { + "NativeBase.Badge": { + alignSelf: null + }, + "NativeBase.PickerNB": { + "NativeBase.Button": { + marginRight: -15, + "NativeBase.Text": { + color: variables.topTabBarActiveTextColor + } + } + }, + "NativeBase.Button": { + alignSelf: null, + ".transparent": { + "NativeBase.Text": { + color: variables.topTabBarActiveTextColor + } + } + }, + "NativeBase.Icon": { + alignSelf: null, + fontSize: variables.iconFontSize - 8, + color: "#c9c8cd" + }, + "NativeBase.IconNB": { + alignSelf: null, + fontSize: variables.iconFontSize - 8, + color: "#c9c8cd" + }, + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + }, + alignSelf: null + }, + "NativeBase.Thumbnail": { + alignSelf: null + }, + "NativeBase.Image": { + alignSelf: null + }, + "NativeBase.Radio": { + alignSelf: null + }, + "NativeBase.Checkbox": { + alignSelf: null + }, + "NativeBase.Switch": { + alignSelf: null + }, + padding: null, + flex: 0.28 + }, + "NativeBase.Text": { + ".note": { + color: variables.listNoteColor, + fontWeight: "200" + }, + alignSelf: "center" + }, + ".last": { + marginLeft: -(variables.listItemPadding + 5), + paddingLeft: (variables.listItemPadding + 5) * 2, + top: 1 + }, + ".avatar": { + "NativeBase.Left": { + flex: 0, + alignSelf: "flex-start", + paddingTop: 14 + }, + "NativeBase.Body": { + "NativeBase.Text": { + marginLeft: null + }, + flex: 1, + paddingVertical: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + marginLeft: variables.listItemPadding + 5 + }, + "NativeBase.Right": { + "NativeBase.Text": { + ".note": { + fontSize: variables.noteFontSize - 2 + } + }, + flex: 0, + paddingRight: variables.listItemPadding + 5, + alignSelf: "stretch", + paddingVertical: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor + }, + ".noBorder": { + "NativeBase.Body": { + borderBottomWidth: null + }, + "NativeBase.Right": { + borderBottomWidth: null + } + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null + }, + ".thumbnail": { + "NativeBase.Left": { + flex: 0 + }, + "NativeBase.Body": { + "NativeBase.Text": { + marginLeft: null + }, + flex: 1, + paddingVertical: variables.listItemPadding + 8, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + marginLeft: variables.listItemPadding + 5 + }, + "NativeBase.Right": { + "NativeBase.Button": { + ".transparent": { + "NativeBase.Text": { + fontSize: variables.listNoteSize, + color: variables.sTabBarActiveTextColor + } + }, + height: null + }, + flex: 0, + justifyContent: "center", + alignSelf: "stretch", + paddingRight: variables.listItemPadding + 5, + paddingVertical: variables.listItemPadding + 5, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor + }, + ".noBorder": { + "NativeBase.Body": { + borderBottomWidth: null + }, + "NativeBase.Right": { + borderBottomWidth: null + } + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null + }, + ".icon": { + ".last": { + "NativeBase.Body": { + borderBottomWidth: null + }, + "NativeBase.Right": { + borderBottomWidth: null + }, + borderBottomWidth: variables.borderWidth, + borderColor: variables.listBorderColor + }, + "NativeBase.Left": { + "NativeBase.Button": { + "NativeBase.IconNB": { + marginHorizontal: null, + fontSize: variables.iconFontSize - 5 + }, + "NativeBase.Icon": { + marginHorizontal: null, + fontSize: variables.iconFontSize - 8 + }, + alignSelf: "center", + height: 29, + width: 29, + borderRadius: 6, + paddingVertical: null, + paddingHorizontal: null, + alignItems: "center", + justifyContent: "center" + }, + "NativeBase.Icon": { + width: variables.iconFontSize - 5, + fontSize: variables.iconFontSize - 2 + }, + "NativeBase.IconNB": { + width: variables.iconFontSize - 5, + fontSize: variables.iconFontSize - 2 + }, + paddingRight: variables.listItemPadding + 5, + flex: 0, + height: 44, + justifyContent: "center", + alignItems: "center" + }, + "NativeBase.Body": { + "NativeBase.Text": { + marginLeft: null, + fontSize: 17 + }, + flex: 1, + height: 44, + justifyContent: "center", + borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + borderColor: variables.listBorderColor + }, + "NativeBase.Right": { + "NativeBase.Text": { + textAlign: "center", + color: "#8F8E95", + fontSize: 17 + }, + "NativeBase.IconNB": { + color: "#C8C7CC", + fontSize: variables.iconFontSize - 10, + alignSelf: "center", + paddingLeft: 10, + paddingTop: 3 + }, + "NativeBase.Icon": { + color: "#C8C7CC", + fontSize: variables.iconFontSize - 10, + alignSelf: "center", + paddingLeft: 10, + paddingTop: 3 + }, + "NativeBase.Switch": { + marginRight: Platform.OS === "ios" ? undefined : -5, + alignSelf: null + }, + "NativeBase.PickerNB": { + ...pickerTheme() + }, + flexDirection: "row", + alignItems: "center", + flex: 0, + alignSelf: "stretch", + height: 44, + justifyContent: "flex-end", + borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + borderColor: variables.listBorderColor, + paddingRight: variables.listItemPadding + 5 + }, + ".noBorder": { + "NativeBase.Body": { + borderBottomWidth: null + }, + "NativeBase.Right": { + borderBottomWidth: null + } + }, + borderBottomWidth: null, + paddingVertical: null, + paddingRight: null, + height: 44, + justifyContent: "center" + }, + ".noBorder": { + borderBottomWidth: null + }, + ".noIndent": { + marginLeft: null, + padding: variables.listItemPadding, + paddingLeft: variables.listItemPadding + 6 + }, + alignItems: "center", + flexDirection: "row", + paddingRight: variables.listItemPadding + 6, + paddingVertical: variables.listItemPadding + 3, + marginLeft: variables.listItemPadding + 6, + borderBottomWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + backgroundColor: variables.listBg, + borderColor: variables.listBorderColor + }; + + return listItemTheme; +}; diff --git a/native-base-theme/components/Picker.android.js b/native-base-theme/components/Picker.android.js new file mode 100644 index 0000000..b1867f9 --- /dev/null +++ b/native-base-theme/components/Picker.android.js @@ -0,0 +1,16 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const pickerTheme = { + ".note": { + color: "#8F8E95" + }, + // width: 90, + marginRight: -4, + flexGrow: 1 + }; + + return pickerTheme; +}; diff --git a/native-base-theme/components/Picker.ios.js b/native-base-theme/components/Picker.ios.js new file mode 100644 index 0000000..36ea854 --- /dev/null +++ b/native-base-theme/components/Picker.ios.js @@ -0,0 +1,9 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const pickerTheme = {}; + + return pickerTheme; +}; diff --git a/native-base-theme/components/Picker.js b/native-base-theme/components/Picker.js new file mode 100644 index 0000000..b1867f9 --- /dev/null +++ b/native-base-theme/components/Picker.js @@ -0,0 +1,16 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const pickerTheme = { + ".note": { + color: "#8F8E95" + }, + // width: 90, + marginRight: -4, + flexGrow: 1 + }; + + return pickerTheme; +}; diff --git a/native-base-theme/components/Radio.js b/native-base-theme/components/Radio.js new file mode 100644 index 0000000..b6fb0ea --- /dev/null +++ b/native-base-theme/components/Radio.js @@ -0,0 +1,28 @@ +// @flow + +import { Platform } from "react-native"; + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const radioTheme = { + ".selected": { + "NativeBase.IconNB": { + color: Platform.OS === "ios" + ? variables.radioColor + : variables.radioSelectedColorAndroid, + lineHeight: Platform.OS === "ios" ? 25 : variables.radioBtnLineHeight, + height: Platform.OS === "ios" ? 20 : undefined + } + }, + "NativeBase.IconNB": { + color: Platform.OS === "ios" ? "transparent" : undefined, + lineHeight: Platform.OS === "ios" + ? undefined + : variables.radioBtnLineHeight, + fontSize: Platform.OS === "ios" ? undefined : variables.radioBtnSize + } + }; + + return radioTheme; +}; diff --git a/native-base-theme/components/Right.js b/native-base-theme/components/Right.js new file mode 100644 index 0000000..382e70b --- /dev/null +++ b/native-base-theme/components/Right.js @@ -0,0 +1,16 @@ +// @flow + +import variable from './../variables/platform'; + +export default (variables /*: * */ = variable) => { + const rightTheme = { + 'NativeBase.Button': { + alignSelf: null, + }, + flex: 1, + alignSelf: 'center', + alignItems: 'flex-end', + }; + + return rightTheme; +}; diff --git a/native-base-theme/components/Segment.js b/native-base-theme/components/Segment.js new file mode 100644 index 0000000..6ff15c2 --- /dev/null +++ b/native-base-theme/components/Segment.js @@ -0,0 +1,56 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platform = variables.platform; + + const segmentTheme = { + height: 45, + borderColor: variables.segmentBorderColorMain, + flexDirection: "row", + justifyContent: "center", + backgroundColor: variables.segmentBackgroundColor, + "NativeBase.Button": { + alignSelf: "center", + borderRadius: 0, + paddingTop: 3, + paddingBottom: 3, + height: 30, + backgroundColor: "transparent", + borderWidth: 1, + borderLeftWidth: 0, + borderColor: variables.segmentBorderColor, + elevation: 0, + ".active": { + backgroundColor: variables.segmentActiveBackgroundColor, + "NativeBase.Text": { + color: variables.segmentActiveTextColor + }, + "NativeBase.Icon": { + color: variables.segmentActiveTextColor + } + }, + ".first": { + borderTopLeftRadius: platform === "ios" ? 5 : undefined, + borderBottomLeftRadius: platform === "ios" ? 5 : undefined, + borderLeftWidth: 1 + }, + ".last": { + borderTopRightRadius: platform === "ios" ? 5 : undefined, + borderBottomRightRadius: platform === "ios" ? 5 : undefined + }, + "NativeBase.Text": { + color: variables.segmentTextColor, + fontSize: 14 + }, + "NativeBase.Icon": { + fontSize: 22, + paddingTop: 0, + color: variables.segmentTextColor + } + } + }; + + return segmentTheme; +}; diff --git a/native-base-theme/components/Separator.js b/native-base-theme/components/Separator.js new file mode 100644 index 0000000..f31b48a --- /dev/null +++ b/native-base-theme/components/Separator.js @@ -0,0 +1,49 @@ +// @flow + +import variable from './../variables/platform'; + +export default (variables /*: * */ = variable) => { + const theme = { + '.group': { + height: 50, + paddingVertical: variables.listItemPadding - 8, + paddingTop: variables.listItemPadding + 12, + '.bordered': { + height: 50, + paddingVertical: variables.listItemPadding - 8, + paddingTop: variables.listItemPadding + 12, + }, + }, + '.bordered': { + '.noTopBorder': { + borderTopWidth: 0, + }, + '.noBottomBorder': { + borderBottomWidth: 0, + }, + height: 35, + paddingTop: variables.listItemPadding + 2, + paddingBottom: variables.listItemPadding, + borderBottomWidth: variables.borderWidth, + borderTopWidth: variables.borderWidth, + borderColor: variables.listBorderColor, + }, + 'NativeBase.Text': { + fontSize: variables.tabBarTextSize - 2, + color: '#777', + }, + '.noTopBorder': { + borderTopWidth: 0, + }, + '.noBottomBorder': { + borderBottomWidth: 0, + }, + height: 38, + backgroundColor: '#F0EFF5', + flex: 1, + justifyContent: 'center', + paddingLeft: variables.listItemPadding + 5, + }; + + return theme; +}; diff --git a/native-base-theme/components/Spinner.js b/native-base-theme/components/Spinner.js new file mode 100644 index 0000000..edc811b --- /dev/null +++ b/native-base-theme/components/Spinner.js @@ -0,0 +1,11 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const spinnerTheme = { + height: 80 + }; + + return spinnerTheme; +}; diff --git a/native-base-theme/components/Subtitle.js b/native-base-theme/components/Subtitle.js new file mode 100644 index 0000000..897c560 --- /dev/null +++ b/native-base-theme/components/Subtitle.js @@ -0,0 +1,18 @@ +// @flow + +import { Platform } from "react-native"; + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const subtitleTheme = { + fontSize: variables.subTitleFontSize, + fontFamily: variables.titleFontfamily, + color: variables.subtitleColor, + textAlign: "center", + paddingLeft: Platform.OS === "ios" ? 4 : 0, + marginLeft: Platform.OS === "ios" ? undefined : -3 + }; + + return subtitleTheme; +}; diff --git a/native-base-theme/components/SwipeRow.js b/native-base-theme/components/SwipeRow.js new file mode 100644 index 0000000..3686582 --- /dev/null +++ b/native-base-theme/components/SwipeRow.js @@ -0,0 +1,48 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const swipeRowTheme = { + "NativeBase.ListItem": { + ".list": { + backgroundColor: "#FFF", + }, + marginLeft: 0, + }, + "NativeBase.Left": { + flex: 0, + alignSelf: null, + alignItems: null, + "NativeBase.Button": { + flex: 1, + alignItems: "center", + justifyContent: "center", + alignSelf: "stretch", + borderRadius: 0, + }, + }, + "NativeBase.Right": { + flex: 0, + alignSelf: null, + alignItems: null, + "NativeBase.Button": { + flex: 1, + alignItems: "center", + justifyContent: "center", + alignSelf: "stretch", + borderRadius: 0, + }, + }, + "NativeBase.Button": { + flex: 1, + height: null, + alignItems: "center", + justifyContent: "center", + alignSelf: "stretch", + borderRadius: 0, + }, + }; + + return swipeRowTheme; +}; diff --git a/native-base-theme/components/Switch.js b/native-base-theme/components/Switch.js new file mode 100644 index 0000000..116fa8f --- /dev/null +++ b/native-base-theme/components/Switch.js @@ -0,0 +1,11 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const switchTheme = { + marginVertical: -5, + }; + + return switchTheme; +}; diff --git a/native-base-theme/components/Tab.js b/native-base-theme/components/Tab.js new file mode 100644 index 0000000..35ede8b --- /dev/null +++ b/native-base-theme/components/Tab.js @@ -0,0 +1,12 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const tabTheme = { + flex: 1, + backgroundColor: "#FFF" + }; + + return tabTheme; +}; diff --git a/native-base-theme/components/TabBar.js b/native-base-theme/components/TabBar.js new file mode 100644 index 0000000..9714cdc --- /dev/null +++ b/native-base-theme/components/TabBar.js @@ -0,0 +1,57 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const tabBarTheme = { + ".tabIcon": { + height: undefined + }, + ".vertical": { + height: 60 + }, + "NativeBase.Button": { + ".transparent": { + "NativeBase.Text": { + fontSize: variables.tabFontSize, + color: variables.sTabBarActiveTextColor, + fontWeight: "400" + }, + "NativeBase.IconNB": { + color: variables.sTabBarActiveTextColor + } + }, + "NativeBase.IconNB": { + color: variables.sTabBarActiveTextColor + }, + "NativeBase.Text": { + fontSize: variables.tabFontSize, + color: variables.sTabBarActiveTextColor, + fontWeight: "400" + }, + ".isTabActive": { + "NativeBase.Text": { + fontWeight: "900" + } + }, + flex: 1, + alignSelf: "stretch", + alignItems: "center", + justifyContent: "center", + borderRadius: null, + borderBottomColor: "transparent", + backgroundColor: variables.tabBgColor + }, + height: 45, + flexDirection: "row", + justifyContent: "space-around", + borderWidth: 1, + borderTopWidth: 0, + borderLeftWidth: 0, + borderRightWidth: 0, + borderBottomColor: "#ccc", + backgroundColor: variables.tabBgColor + }; + + return tabBarTheme; +}; diff --git a/native-base-theme/components/TabContainer.js b/native-base-theme/components/TabContainer.js new file mode 100644 index 0000000..44d4886 --- /dev/null +++ b/native-base-theme/components/TabContainer.js @@ -0,0 +1,26 @@ +// @flow + +import variable from "./../variables/platform"; +import { Platform } from "react-native"; + +export default (variables /*: * */ = variable) => { + const platformStyle = variables.platformStyle; + const platform = variables.platform; + + const tabContainerTheme = { + elevation: 3, + height: 50, + flexDirection: "row", + shadowColor: platformStyle === "material" ? "#000" : undefined, + shadowOffset: platformStyle === "material" + ? { width: 0, height: 2 } + : undefined, + shadowOpacity: platformStyle === "material" ? 0.2 : undefined, + shadowRadius: platformStyle === "material" ? 1.2 : undefined, + justifyContent: "space-around", + borderBottomWidth: Platform.OS === "ios" ? variables.borderWidth : 0, + borderColor: variables.topTabBarBorderColor + }; + + return tabContainerTheme; +}; diff --git a/native-base-theme/components/TabHeading.js b/native-base-theme/components/TabHeading.js new file mode 100644 index 0000000..9f79903 --- /dev/null +++ b/native-base-theme/components/TabHeading.js @@ -0,0 +1,39 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platform = variables.platform; + + const tabHeadingTheme = { + flexDirection: "row", + backgroundColor: variables.tabDefaultBg, + flex: 1, + alignItems: "center", + justifyContent: "center", + ".scrollable": { + paddingHorizontal: 20, + flex: platform === "android" ? 0 : 1, + minWidth: platform === "android" ? undefined : 60 + }, + "NativeBase.Text": { + color: variables.topTabBarTextColor, + marginHorizontal: 7 + }, + "NativeBase.Icon": { + color: variables.topTabBarTextColor, + fontSize: platform === "ios" ? 26 : undefined + }, + ".active": { + "NativeBase.Text": { + color: variables.topTabBarActiveTextColor, + fontWeight: "600" + }, + "NativeBase.Icon": { + color: variables.topTabBarActiveTextColor + } + } + }; + + return tabHeadingTheme; +}; diff --git a/native-base-theme/components/Text.js b/native-base-theme/components/Text.js new file mode 100644 index 0000000..2c95ce1 --- /dev/null +++ b/native-base-theme/components/Text.js @@ -0,0 +1,17 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const textTheme = { + fontSize: variables.DefaultFontSize, + fontFamily: variables.fontFamily, + color: variables.textColor, + ".note": { + color: "#a7a7a7", + fontSize: variables.noteFontSize + } + }; + + return textTheme; +}; diff --git a/native-base-theme/components/Textarea.js b/native-base-theme/components/Textarea.js new file mode 100644 index 0000000..f5e3974 --- /dev/null +++ b/native-base-theme/components/Textarea.js @@ -0,0 +1,25 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const textAreaTheme = { + ".underline": { + borderBottomWidth: variables.borderWidth, + marginTop: 5, + borderColor: variables.inputBorderColor + }, + ".bordered": { + borderWidth: 1, + marginTop: 5, + borderColor: variables.inputBorderColor + }, + color: variables.textColor, + paddingLeft: 10, + paddingRight: 5, + fontSize: 15, + textAlignVertical: "top" + }; + + return textAreaTheme; +}; diff --git a/native-base-theme/components/Thumbnail.js b/native-base-theme/components/Thumbnail.js new file mode 100644 index 0000000..efff792 --- /dev/null +++ b/native-base-theme/components/Thumbnail.js @@ -0,0 +1,42 @@ +// @flow + +import variable from './../variables/platform'; + +export default (variables /*: * */ = variable) => { + const thumbnailTheme = { + '.square': { + borderRadius: 0, + '.small': { + width: 36, + height: 36, + borderRadius: 0, + }, + '.large': { + width: 80, + height: 80, + borderRadius: 0, + }, + }, + '.small': { + width: 36, + height: 36, + borderRadius: 18, + '.square': { + borderRadius: 0, + }, + }, + '.large': { + width: 80, + height: 80, + borderRadius: 40, + '.square': { + borderRadius: 0, + }, + }, + width: 56, + height: 56, + borderRadius: 28, + }; + + return thumbnailTheme; +}; diff --git a/native-base-theme/components/Title.js b/native-base-theme/components/Title.js new file mode 100644 index 0000000..5792e57 --- /dev/null +++ b/native-base-theme/components/Title.js @@ -0,0 +1,20 @@ +// @flow + +import { Platform } from "react-native"; + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const titleTheme = { + fontSize: variables.titleFontSize, + fontFamily: variables.titleFontfamily, + color: variables.titleFontColor, + fontWeight: Platform.OS === "ios" ? "700" : undefined, + textAlign: "center", + paddingLeft: Platform.OS === "ios" ? 4 : 0, + marginLeft: Platform.OS === "ios" ? undefined : -3, + paddingTop: 1 + }; + + return titleTheme; +}; diff --git a/native-base-theme/components/Toast.js b/native-base-theme/components/Toast.js new file mode 100644 index 0000000..a595308 --- /dev/null +++ b/native-base-theme/components/Toast.js @@ -0,0 +1,40 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const platform = variables.platform; + + const toastTheme = { + ".danger": { + backgroundColor: variables.brandDanger + }, + ".warning": { + backgroundColor: variables.brandWarning + }, + ".success": { + backgroundColor: variables.brandSuccess + }, + backgroundColor: "rgba(0,0,0,0.8)", + borderRadius: platform === "ios" ? 5 : 0, + flexDirection: "row", + justifyContent: "space-between", + alignItems: "center", + padding: 10, + minHeight: 50, + "NativeBase.Text": { + color: "#fff", + flex: 1 + }, + "NativeBase.Button": { + backgroundColor: "transparent", + height: 30, + elevation: 0, + "NativeBase.Text": { + fontSize: 14 + } + } + }; + + return toastTheme; +}; diff --git a/native-base-theme/components/View.js b/native-base-theme/components/View.js new file mode 100644 index 0000000..b9c7aeb --- /dev/null +++ b/native-base-theme/components/View.js @@ -0,0 +1,13 @@ +// @flow + +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const viewTheme = { + ".padder": { + padding: variables.contentPadding + } + }; + + return viewTheme; +}; diff --git a/native-base-theme/components/index.js b/native-base-theme/components/index.js new file mode 100644 index 0000000..d1102fd --- /dev/null +++ b/native-base-theme/components/index.js @@ -0,0 +1,242 @@ +// @flow + +import _ from "lodash"; +import bodyTheme from "./Body"; +import leftTheme from "./Left"; +import rightTheme from "./Right"; +import headerTheme from "./Header"; +import switchTheme from "./Switch"; +import thumbnailTheme from "./Thumbnail"; +import containerTheme from "./Container"; +import contentTheme from "./Content"; +import buttonTheme from "./Button"; +import titleTheme from "./Title"; +import subtitleTheme from "./Subtitle"; +import inputGroupTheme from "./InputGroup"; +import badgeTheme from "./Badge"; +import checkBoxTheme from "./CheckBox"; +import cardTheme from "./Card"; +import radioTheme from "./Radio"; +import h3Theme from "./H3"; +import h2Theme from "./H2"; +import h1Theme from "./H1"; +import footerTheme from "./Footer"; +import footerTabTheme from "./FooterTab"; +import fabTheme from "./Fab"; +import itemTheme from "./Item"; +import labelTheme from "./Label"; +import textAreaTheme from "./Textarea"; +import textTheme from "./Text"; +import toastTheme from "./Toast"; +import tabTheme from "./Tab"; +import tabBarTheme from "./TabBar"; +import tabContainerTheme from "./TabContainer"; +import viewTheme from "./View"; +import tabHeadingTheme from "./TabHeading"; +import iconTheme from "./Icon"; +import inputTheme from "./Input"; +import swipeRowTheme from "./SwipeRow"; +import segmentTheme from "./Segment"; +import spinnerTheme from "./Spinner"; +import cardItemTheme from "./CardItem"; +import listItemTheme from "./ListItem"; +import formTheme from "./Form"; +import separatorTheme from "./Separator"; +import pickerTheme from "./Picker" +import variable from "./../variables/platform"; + +export default (variables /*: * */ = variable) => { + const theme = { + variables, + "NativeBase.Left": { + ...leftTheme(variables) + }, + "NativeBase.Right": { + ...rightTheme(variables) + }, + "NativeBase.Body": { + ...bodyTheme(variables) + }, + + "NativeBase.Header": { + ...headerTheme(variables) + }, + + "NativeBase.Button": { + ...buttonTheme(variables) + }, + + "NativeBase.Title": { + ...titleTheme(variables) + }, + "NativeBase.Subtitle": { + ...subtitleTheme(variables) + }, + + "NativeBase.InputGroup": { + ...inputGroupTheme(variables) + }, + + "NativeBase.Input": { + ...inputTheme(variables) + }, + + "NativeBase.Badge": { + ...badgeTheme(variables) + }, + + "NativeBase.CheckBox": { + ...checkBoxTheme(variables) + }, + + "NativeBase.Radio": { + ...radioTheme(variables) + }, + + "NativeBase.Card": { + ...cardTheme(variables) + }, + + "NativeBase.CardItem": { + ...cardItemTheme(variables) + }, + + "NativeBase.Toast": { + ...toastTheme(variables) + }, + + "NativeBase.H1": { + ...h1Theme(variables) + }, + "NativeBase.H2": { + ...h2Theme(variables) + }, + "NativeBase.H3": { + ...h3Theme(variables) + }, + "NativeBase.Form": { + ...formTheme(variables) + }, + + "NativeBase.Container": { + ...containerTheme(variables) + }, + "NativeBase.Content": { + ...contentTheme(variables) + }, + + "NativeBase.Footer": { + ...footerTheme(variables) + }, + + "NativeBase.Tabs": { + flex: 1 + }, + + "NativeBase.FooterTab": { + ...footerTabTheme(variables) + }, + + "NativeBase.ListItem": { + ...listItemTheme(variables) + }, + + "NativeBase.ListItem1": { + ...listItemTheme(variables) + }, + + "NativeBase.Icon": { + ...iconTheme(variables) + }, + "NativeBase.IconNB": { + ...iconTheme(variables) + }, + "NativeBase.Text": { + ...textTheme(variables) + }, + "NativeBase.Spinner": { + ...spinnerTheme(variables) + }, + + "NativeBase.Fab": { + ...fabTheme(variables) + }, + + "NativeBase.Item": { + ...itemTheme(variables) + }, + + "NativeBase.Label": { + ...labelTheme(variables) + }, + + "NativeBase.Textarea": { + ...textAreaTheme(variables) + }, + + "NativeBase.PickerNB": { + ...pickerTheme(variables), + "NativeBase.Button": { + "NativeBase.Text": {} + } + }, + + "NativeBase.Tab": { + ...tabTheme(variables) + }, + + "NativeBase.Segment": { + ...segmentTheme(variables) + }, + + "NativeBase.TabBar": { + ...tabBarTheme(variables) + }, + "NativeBase.ViewNB": { + ...viewTheme(variables) + }, + "NativeBase.TabHeading": { + ...tabHeadingTheme(variables) + }, + "NativeBase.TabContainer": { + ...tabContainerTheme(variables) + }, + "NativeBase.Switch": { + ...switchTheme(variables) + }, + "NativeBase.Separator": { + ...separatorTheme(variables) + }, + "NativeBase.SwipeRow": { + ...swipeRowTheme(variables) + }, + "NativeBase.Thumbnail": { + ...thumbnailTheme(variables) + } + }; + + const cssifyTheme = (grandparent, parent, parentKey) => { + _.forEach(parent, (style, styleName) => { + if ( + styleName.indexOf(".") === 0 && + parentKey && + parentKey.indexOf(".") === 0 + ) { + if (grandparent) { + if (!grandparent[styleName]) { + grandparent[styleName] = {}; + } else { + grandparent[styleName][parentKey] = style; + } + } + } + if (style && typeof style === "object" && styleName !== "fontVariant" && styleName !== "transform") { + cssifyTheme(parent, style, styleName); + } + }); + }; + + cssifyTheme(null, theme, null); + + return theme; +}; diff --git a/native-base-theme/variables/commonColor.js b/native-base-theme/variables/commonColor.js new file mode 100644 index 0000000..c004877 --- /dev/null +++ b/native-base-theme/variables/commonColor.js @@ -0,0 +1,283 @@ +// @flow + +import color from "color"; + +import { Platform, Dimensions, PixelRatio } from "react-native"; + +const deviceHeight = Dimensions.get("window").height; +const deviceWidth = Dimensions.get("window").width; +const platform = Platform.OS; +const platformStyle = undefined; +const isIphoneX = + platform === "ios" && (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); + +export default { + platformStyle, + platform, + + //Accordion + headerStyle: "#edebed", + iconStyle: "#000", + contentStyle: "#f5f4f5", + expandedIconStyle: "#000", + accordionBorderColor: "#d3d3d3", + + //Android + androidRipple: true, + androidRippleColor: "rgba(256, 256, 256, 0.3)", + androidRippleColorDark: "rgba(0, 0, 0, 0.15)", + btnUppercaseAndroidText: true, + + // Badge + badgeBg: "#ED1727", + badgeColor: "#fff", + badgePadding: platform === "ios" ? 3 : 0, + + // Button + btnFontFamily: platform === "ios" ? "System" : "Roboto_medium", + btnDisabledBg: "#b5b5b5", + buttonPadding: 6, + get btnPrimaryBg() { + return this.brandPrimary; + }, + get btnPrimaryColor() { + return this.inverseTextColor; + }, + get btnInfoBg() { + return this.brandInfo; + }, + get btnInfoColor() { + return this.inverseTextColor; + }, + get btnSuccessBg() { + return this.brandSuccess; + }, + get btnSuccessColor() { + return this.inverseTextColor; + }, + get btnDangerBg() { + return this.brandDanger; + }, + get btnDangerColor() { + return this.inverseTextColor; + }, + get btnWarningBg() { + return this.brandWarning; + }, + get btnWarningColor() { + return this.inverseTextColor; + }, + get btnTextSize() { + return platform === "ios" ? this.fontSizeBase * 1.1 : this.fontSizeBase - 1; + }, + get btnTextSizeLarge() { + return this.fontSizeBase * 1.5; + }, + get btnTextSizeSmall() { + return this.fontSizeBase * 0.8; + }, + get borderRadiusLarge() { + return this.fontSizeBase * 3.8; + }, + get iconSizeLarge() { + return this.iconFontSize * 1.5; + }, + get iconSizeSmall() { + return this.iconFontSize * 0.6; + }, + + // Card + cardDefaultBg: "#fff", + cardBorderColor: "#ccc", + cardBorderRadius: 2, + cardItemPadding: platform === "ios" ? 10 : 12, + + // CheckBox + CheckboxRadius: platform === "ios" ? 13 : 0, + CheckboxBorderWidth: platform === "ios" ? 1 : 2, + CheckboxPaddingLeft: platform === "ios" ? 4 : 2, + CheckboxPaddingBottom: platform === "ios" ? 0 : 5, + CheckboxIconSize: platform === "ios" ? 21 : 16, + CheckboxIconMarginTop: platform === "ios" ? undefined : 1, + CheckboxFontSize: platform === "ios" ? 23 / 0.9 : 17, + checkboxBgColor: "#039BE5", + checkboxSize: 20, + checkboxTickColor: "#fff", + + // Color + brandPrimary: platform === "ios" ? "#007aff" : "#3F51B5", + brandInfo: "#62B1F6", + brandSuccess: "#5cb85c", + brandDanger: "#d9534f", + brandWarning: "#f0ad4e", + brandDark: "#000", + brandLight: "#f4f4f4", + + //Container + containerBgColor: "#fff", + + //Date Picker + datePickerTextColor: "#000", + datePickerBg: "transparent", + + // Font + DefaultFontSize: 16, + fontFamily: platform === "ios" ? "System" : "Roboto", + fontSizeBase: 15, + get fontSizeH1() { + return this.fontSizeBase * 1.8; + }, + get fontSizeH2() { + return this.fontSizeBase * 1.6; + }, + get fontSizeH3() { + return this.fontSizeBase * 1.4; + }, + + // Footer + footerHeight: 55, + footerDefaultBg: platform === "ios" ? "#F8F8F8" : "#3F51B5", + footerPaddingBottom: 0, + + // FooterTab + tabBarTextColor: platform === "ios" ? "#737373" : "#bfc6ea", + tabBarTextSize: platform === "ios" ? 14 : 11, + activeTab: platform === "ios" ? "#007aff" : "#fff", + sTabBarActiveTextColor: "#007aff", + tabBarActiveTextColor: platform === "ios" ? "#2874F0" : "#fff", + tabActiveBgColor: platform === "ios" ? "#cde1f9" : "#3F51B5", + + // Header + toolbarBtnColor: platform === "ios" ? "#007aff" : "#fff", + toolbarDefaultBg: platform === "ios" ? "#F8F8F8" : "#3F51B5", + toolbarHeight: platform === "ios" ? 64 : 56, + toolbarSearchIconSize: platform === "ios" ? 20 : 23, + toolbarInputColor: platform === "ios" ? "#CECDD2" : "#fff", + searchBarHeight: platform === "ios" ? 30 : 40, + searchBarInputHeight: platform === "ios" ? 30 : 50, + toolbarBtnTextColor: platform === "ios" ? "#007aff" : "#fff", + iosStatusbar: "dark-content", + toolbarDefaultBorder: platform === "ios" ? "#a7a6ab" : "#3F51B5", + get statusBarColor() { + return color(this.toolbarDefaultBg) + .darken(0.2) + .hex(); + }, + get darkenHeader() { + return color(this.tabBgColor) + .darken(0.03) + .hex(); + }, + + // Icon + iconFamily: "Ionicons", + iconFontSize: platform === "ios" ? 30 : 28, + iconHeaderSize: platform === "ios" ? 33 : 24, + + // InputGroup + inputFontSize: 17, + inputBorderColor: "#D9D5DC", + inputSuccessBorderColor: "#2b8339", + inputErrorBorderColor: "#ed2f2f", + inputHeightBase: 50, + get inputColor() { + return this.textColor; + }, + get inputColorPlaceholder() { + return "#575757"; + }, + + // Line Height + btnLineHeight: 19, + lineHeightH1: 32, + lineHeightH2: 27, + lineHeightH3: 22, + lineHeight: platform === "ios" ? 20 : 24, + + // List + listBg: "transparent", + listBorderColor: "#c9c9c9", + listDividerBg: "#f4f4f4", + listBtnUnderlayColor: "#DDD", + listItemPadding: platform === "ios" ? 10 : 12, + listNoteColor: "#808080", + listNoteSize: 13, + listItemSelected: platform === "ios" ? "#007aff" : "#3F51B5", + + // Progress Bar + defaultProgressColor: "#E4202D", + inverseProgressColor: "#1A191B", + + // Radio Button + radioBtnSize: platform === "ios" ? 25 : 23, + radioSelectedColorAndroid: "#3F51B5", + radioBtnLineHeight: platform === "ios" ? 29 : 24, + get radioColor() { + return this.brandPrimary; + }, + + // Segment + segmentBackgroundColor: platform === "ios" ? "#F8F8F8" : "#3F51B5", + segmentActiveBackgroundColor: platform === "ios" ? "#007aff" : "#fff", + segmentTextColor: platform === "ios" ? "#007aff" : "#fff", + segmentActiveTextColor: platform === "ios" ? "#fff" : "#3F51B5", + segmentBorderColor: platform === "ios" ? "#007aff" : "#fff", + segmentBorderColorMain: platform === "ios" ? "#a7a6ab" : "#3F51B5", + + // Spinner + defaultSpinnerColor: "#45D56E", + inverseSpinnerColor: "#1A191B", + + // Tab + tabDefaultBg: platform === "ios" ? "#F8F8F8" : "#3F51B5", + topTabBarTextColor: platform === "ios" ? "#6b6b6b" : "#b3c7f9", + topTabBarActiveTextColor: platform === "ios" ? "#007aff" : "#fff", + topTabBarBorderColor: platform === "ios" ? "#a7a6ab" : "#fff", + topTabBarActiveBorderColor: platform === "ios" ? "#007aff" : "#fff", + + // Tabs + tabBgColor: "#F8F8F8", + tabFontSize: 15, + + // Text + textColor: "#000", + inverseTextColor: "#fff", + noteFontSize: 14, + get defaultTextColor() { + return this.textColor; + }, + + // Title + titleFontfamily: platform === "ios" ? "System" : "Roboto_medium", + titleFontSize: platform === "ios" ? 17 : 19, + subTitleFontSize: platform === "ios" ? 11 : 14, + subtitleColor: platform === "ios" ? "#000" : "#fff", + titleFontColor: platform === "ios" ? "#000" : "#fff", + + // Other + borderRadiusBase: platform === "ios" ? 5 : 2, + borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + contentPadding: 10, + dropdownLinkColor: "#414142", + inputLineHeight: 24, + deviceWidth, + deviceHeight, + isIphoneX, + inputGroupRoundedBorderRadius: 30, + + //iPhoneX SafeArea + Inset: { + portrait: { + topInset: 24, + leftInset: 0, + rightInset: 0, + bottomInset: 34 + }, + landscape: { + topInset: 0, + leftInset: 44, + rightInset: 44, + bottomInset: 21 + } + } +}; diff --git a/native-base-theme/variables/material.js b/native-base-theme/variables/material.js new file mode 100644 index 0000000..ce917a1 --- /dev/null +++ b/native-base-theme/variables/material.js @@ -0,0 +1,283 @@ +// @flow + +import color from "color"; + +import { Platform, Dimensions, PixelRatio } from "react-native"; + +const deviceHeight = Dimensions.get("window").height; +const deviceWidth = Dimensions.get("window").width; +const platform = Platform.OS; +const platformStyle = "material"; +const isIphoneX = +platform === "ios" && (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); + +export default { + platformStyle, + platform, + + //Accordion + headerStyle: "#edebed", + iconStyle: "#000", + contentStyle: "#f5f4f5", + expandedIconStyle: "#000", + accordionBorderColor: "#d3d3d3", + + // Android + androidRipple: true, + androidRippleColor: "rgba(256, 256, 256, 0.3)", + androidRippleColorDark: "rgba(0, 0, 0, 0.15)", + btnUppercaseAndroidText: true, + + // Badge + badgeBg: "#ED1727", + badgeColor: "#fff", + badgePadding: 0, + + // Button + btnFontFamily: "Roboto", + btnDisabledBg: "#b5b5b5", + buttonPadding: 6, + get btnPrimaryBg() { + return this.brandPrimary; + }, + get btnPrimaryColor() { + return this.inverseTextColor; + }, + get btnInfoBg() { + return this.brandInfo; + }, + get btnInfoColor() { + return this.inverseTextColor; + }, + get btnSuccessBg() { + return this.brandSuccess; + }, + get btnSuccessColor() { + return this.inverseTextColor; + }, + get btnDangerBg() { + return this.brandDanger; + }, + get btnDangerColor() { + return this.inverseTextColor; + }, + get btnWarningBg() { + return this.brandWarning; + }, + get btnWarningColor() { + return this.inverseTextColor; + }, + get btnTextSize() { + return this.fontSizeBase - 1; + }, + get btnTextSizeLarge() { + return this.fontSizeBase * 1.5; + }, + get btnTextSizeSmall() { + return this.fontSizeBase * 0.8; + }, + get borderRadiusLarge() { + return this.fontSizeBase * 3.8; + }, + get iconSizeLarge() { + return this.iconFontSize * 1.5; + }, + get iconSizeSmall() { + return this.iconFontSize * 0.6; + }, + + // Card + cardDefaultBg: "#fff", + cardBorderColor: "#ccc", + cardBorderRadius: 2, + cardItemPadding: platform === "ios" ? 10 : 12, + + // CheckBox + CheckboxRadius: 0, + CheckboxBorderWidth: 2, + CheckboxPaddingLeft: 2, + CheckboxPaddingBottom: 5, + CheckboxIconSize: 16, + CheckboxIconMarginTop: 1, + CheckboxFontSize: 17, + checkboxBgColor: "#039BE5", + checkboxSize: 20, + checkboxTickColor: "#fff", + + // Color + brandPrimary: "#3F51B5", + brandInfo: "#62B1F6", + brandSuccess: "#5cb85c", + brandDanger: "#d9534f", + brandWarning: "#f0ad4e", + brandDark: "#000", + brandLight: "#f4f4f4", + + //Container + containerBgColor: "#fff", + + //Date Picker + datePickerTextColor: "#000", + datePickerBg: "transparent", + + // Font + DefaultFontSize: 16, + fontFamily: "Roboto", + fontSizeBase: 15, + get fontSizeH1() { + return this.fontSizeBase * 1.8; + }, + get fontSizeH2() { + return this.fontSizeBase * 1.6; + }, + get fontSizeH3() { + return this.fontSizeBase * 1.4; + }, + + // Footer + footerHeight: 55, + footerDefaultBg: "#3F51B5", + footerPaddingBottom: 0, + + // FooterTab + tabBarTextColor: "#bfc6ea", + tabBarTextSize: 11, + activeTab: "#fff", + sTabBarActiveTextColor: "#007aff", + tabBarActiveTextColor: "#fff", + tabActiveBgColor: "#3F51B5", + + // Header + toolbarBtnColor: "#fff", + toolbarDefaultBg: "#3F51B5", + toolbarHeight: 56, + toolbarSearchIconSize: 23, + toolbarInputColor: "#fff", + searchBarHeight: platform === "ios" ? 30 : 40, + searchBarInputHeight: platform === "ios" ? 40 : 50, + toolbarBtnTextColor: "#fff", + toolbarDefaultBorder: "#3F51B5", + iosStatusbar: "light-content", + get statusBarColor() { + return color(this.toolbarDefaultBg) + .darken(0.2) + .hex(); + }, + get darkenHeader() { + return color(this.tabBgColor) + .darken(0.03) + .hex(); + }, + + // Icon + iconFamily: "Ionicons", + iconFontSize: 28, + iconHeaderSize: 24, + + // InputGroup + inputFontSize: 17, + inputBorderColor: "#D9D5DC", + inputSuccessBorderColor: "#2b8339", + inputErrorBorderColor: "#ed2f2f", + inputHeightBase: 50, + get inputColor() { + return this.textColor; + }, + get inputColorPlaceholder() { + return "#575757"; + }, + + // Line Height + btnLineHeight: 19, + lineHeightH1: 32, + lineHeightH2: 27, + lineHeightH3: 22, + lineHeight: 24, + + // List + listBg: "transparent", + listBorderColor: "#c9c9c9", + listDividerBg: "#f4f4f4", + listBtnUnderlayColor: "#DDD", + listItemPadding: 12, + listNoteColor: "#808080", + listNoteSize: 13, + listItemSelected: "#3F51B5", + + // Progress Bar + defaultProgressColor: "#E4202D", + inverseProgressColor: "#1A191B", + + // Radio Button + radioBtnSize: 23, + radioSelectedColorAndroid: "#3F51B5", + radioBtnLineHeight: 24, + get radioColor() { + return this.brandPrimary; + }, + + // Segment + segmentBackgroundColor: "#3F51B5", + segmentActiveBackgroundColor: "#fff", + segmentTextColor: "#fff", + segmentActiveTextColor: "#3F51B5", + segmentBorderColor: "#fff", + segmentBorderColorMain: "#3F51B5", + + // Spinner + defaultSpinnerColor: "#45D56E", + inverseSpinnerColor: "#1A191B", + + // Tab + tabDefaultBg: "#3F51B5", + topTabBarTextColor: "#b3c7f9", + topTabBarActiveTextColor: "#fff", + topTabBarBorderColor: "#fff", + topTabBarActiveBorderColor: "#fff", + + // Tabs + tabBgColor: "#F8F8F8", + tabFontSize: 15, + + // Text + textColor: "#000", + inverseTextColor: "#fff", + noteFontSize: 14, + get defaultTextColor() { + return this.textColor; + }, + + // Title + titleFontfamily: "Roboto", + titleFontSize: 19, + subTitleFontSize: 14, + subtitleColor: "#FFF", + titleFontColor: "#FFF", + + // Other + borderRadiusBase: 2, + borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + contentPadding: 10, + dropdownLinkColor: "#414142", + inputLineHeight: 24, + deviceWidth, + deviceHeight, + isIphoneX, + inputGroupRoundedBorderRadius: 30, + + //iPhoneX SafeArea + Inset: { + portrait: { + topInset: 24, + leftInset: 0, + rightInset: 0, + bottomInset: 34 + }, + landscape: { + topInset: 0, + leftInset: 44, + rightInset: 44, + bottomInset: 21 + } + } +}; diff --git a/native-base-theme/variables/platform.js b/native-base-theme/variables/platform.js new file mode 100644 index 0000000..b5a5252 --- /dev/null +++ b/native-base-theme/variables/platform.js @@ -0,0 +1,283 @@ +// @flow + +import color from "color"; + +import { Platform, Dimensions, PixelRatio } from "react-native"; + +const deviceHeight = Dimensions.get("window").height; +const deviceWidth = Dimensions.get("window").width; +const platform = Platform.OS; +const platformStyle = undefined; +const isIphoneX = +platform === "ios" && (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); + +export default { + platformStyle, + platform, + + //Accordion + headerStyle: "#edebed", + iconStyle: "#000", + contentStyle: "#f5f4f5", + expandedIconStyle: "#000", + accordionBorderColor: "#d3d3d3", + + // Android + androidRipple: true, + androidRippleColor: "rgba(256, 256, 256, 0.3)", + androidRippleColorDark: "rgba(0, 0, 0, 0.15)", + btnUppercaseAndroidText: true, + + // Badge + badgeBg: "#ED1727", + badgeColor: "#fff", + badgePadding: platform === "ios" ? 3 : 0, + + // Button + btnFontFamily: platform === "ios" ? "System" : "Roboto_medium", + btnDisabledBg: "#b5b5b5", + buttonPadding: 6, + get btnPrimaryBg() { + return this.brandPrimary; + }, + get btnPrimaryColor() { + return this.inverseTextColor; + }, + get btnInfoBg() { + return this.brandInfo; + }, + get btnInfoColor() { + return this.inverseTextColor; + }, + get btnSuccessBg() { + return this.brandSuccess; + }, + get btnSuccessColor() { + return this.inverseTextColor; + }, + get btnDangerBg() { + return this.brandDanger; + }, + get btnDangerColor() { + return this.inverseTextColor; + }, + get btnWarningBg() { + return this.brandWarning; + }, + get btnWarningColor() { + return this.inverseTextColor; + }, + get btnTextSize() { + return platform === "ios" ? this.fontSizeBase * 1.1 : this.fontSizeBase - 1; + }, + get btnTextSizeLarge() { + return this.fontSizeBase * 1.5; + }, + get btnTextSizeSmall() { + return this.fontSizeBase * 0.8; + }, + get borderRadiusLarge() { + return this.fontSizeBase * 3.8; + }, + get iconSizeLarge() { + return this.iconFontSize * 1.5; + }, + get iconSizeSmall() { + return this.iconFontSize * 0.6; + }, + + // Card + cardDefaultBg: "#fff", + cardBorderColor: "#ccc", + cardBorderRadius: 2, + cardItemPadding: platform === "ios" ? 10 : 12, + + // CheckBox + CheckboxRadius: platform === "ios" ? 13 : 0, + CheckboxBorderWidth: platform === "ios" ? 1 : 2, + CheckboxPaddingLeft: platform === "ios" ? 4 : 2, + CheckboxPaddingBottom: platform === "ios" ? 0 : 5, + CheckboxIconSize: platform === "ios" ? 21 : 16, + CheckboxIconMarginTop: platform === "ios" ? undefined : 1, + CheckboxFontSize: platform === "ios" ? 23 / 0.9 : 17, + checkboxBgColor: "#039BE5", + checkboxSize: 20, + checkboxTickColor: "#fff", + + // Color + brandPrimary: platform === "ios" ? "#e42612" : "#e42612", + brandInfo: "#62B1F6", + brandSuccess: "#5cb85c", + brandDanger: "#d9534f", + brandWarning: "#f0ad4e", + brandDark: "#000", + brandLight: "#f4f4f4", + + //Container + containerBgColor: "#fff", + + //Date Picker + datePickerTextColor: "#000", + datePickerBg: "transparent", + + // Font + DefaultFontSize: 16, + fontFamily: platform === "ios" ? "System" : "Roboto", + fontSizeBase: 15, + get fontSizeH1() { + return this.fontSizeBase * 1.8; + }, + get fontSizeH2() { + return this.fontSizeBase * 1.6; + }, + get fontSizeH3() { + return this.fontSizeBase * 1.4; + }, + + // Footer + footerHeight: 55, + footerDefaultBg: platform === "ios" ? "#F8F8F8" : "#3F51B5", + footerPaddingBottom: 0, + + // FooterTab + tabBarTextColor: platform === "ios" ? "#6b6b6b" : "#b3c7f9", + tabBarTextSize: platform === "ios" ? 14 : 11, + activeTab: platform === "ios" ? "#007aff" : "#fff", + sTabBarActiveTextColor: "#007aff", + tabBarActiveTextColor: platform === "ios" ? "#007aff" : "#fff", + tabActiveBgColor: platform === "ios" ? "#cde1f9" : "#3F51B5", + + // Header + toolbarBtnColor: platform === "ios" ? "#e42612" : "#fff", + toolbarDefaultBg: platform === "ios" ? "#F8F8F8" : "#e42612", + toolbarHeight: platform === "ios" ? 64 : 56, + toolbarSearchIconSize: platform === "ios" ? 20 : 23, + toolbarInputColor: platform === "ios" ? "#CECDD2" : "#fff", + searchBarHeight: platform === "ios" ? 30 : 40, + searchBarInputHeight: platform === "ios" ? 30 : 50, + toolbarBtnTextColor: platform === "ios" ? "#e42612" : "#fff", + toolbarDefaultBorder: platform === "ios" ? "#a7a6ab" : "#ba1f0f", + iosStatusbar: platform === "ios" ? "dark-content" : "light-content", + get statusBarColor() { + return color(this.toolbarDefaultBg) + .darken(0.2) + .hex(); + }, + get darkenHeader() { + return color(this.tabBgColor) + .darken(0.03) + .hex(); + }, + + // Icon + iconFamily: "Ionicons", + iconFontSize: platform === "ios" ? 30 : 28, + iconHeaderSize: platform === "ios" ? 33 : 24, + + // InputGroup + inputFontSize: 17, + inputBorderColor: "#D9D5DC", + inputSuccessBorderColor: "#2b8339", + inputErrorBorderColor: "#ed2f2f", + inputHeightBase: 50, + get inputColor() { + return this.textColor; + }, + get inputColorPlaceholder() { + return "#575757"; + }, + + // Line Height + btnLineHeight: 19, + lineHeightH1: 32, + lineHeightH2: 27, + lineHeightH3: 22, + lineHeight: platform === "ios" ? 20 : 24, + listItemSelected: platform === "ios" ? "#e42612" : "#e42612", + + // List + listBg: "transparent", + listBorderColor: "#c9c9c9", + listDividerBg: "#f4f4f4", + listBtnUnderlayColor: "#DDD", + listItemPadding: platform === "ios" ? 10 : 12, + listNoteColor: "#808080", + listNoteSize: 13, + + // Progress Bar + defaultProgressColor: "#E4202D", + inverseProgressColor: "#1A191B", + + // Radio Button + radioBtnSize: platform === "ios" ? 25 : 23, + radioSelectedColorAndroid: "#3F51B5", + radioBtnLineHeight: platform === "ios" ? 29 : 24, + get radioColor() { + return this.brandPrimary; + }, + + // Segment + segmentBackgroundColor: platform === "ios" ? "#F8F8F8" : "#3F51B5", + segmentActiveBackgroundColor: platform === "ios" ? "#007aff" : "#fff", + segmentTextColor: platform === "ios" ? "#007aff" : "#fff", + segmentActiveTextColor: platform === "ios" ? "#fff" : "#3F51B5", + segmentBorderColor: platform === "ios" ? "#007aff" : "#fff", + segmentBorderColorMain: platform === "ios" ? "#a7a6ab" : "#3F51B5", + + // Spinner + defaultSpinnerColor: "#45D56E", + inverseSpinnerColor: "#1A191B", + + // Tab + tabDefaultBg: platform === "ios" ? "#F8F8F8" : "#e42612", + topTabBarTextColor: platform === "ios" ? "#6b6b6b" : "#b3c7f9", + topTabBarActiveTextColor: platform === "ios" ? "#e42612" : "#fff", + topTabBarBorderColor: platform === "ios" ? "#a7a6ab" : "#fff", + topTabBarActiveBorderColor: platform === "ios" ? "#e42612" : "#fff", + + // Tabs + tabBgColor: "#F8F8F8", + tabFontSize: 15, + + // Text + textColor: "#000", + inverseTextColor: "#fff", + noteFontSize: 14, + get defaultTextColor() { + return this.textColor; + }, + + // Title + titleFontfamily: platform === "ios" ? "System" : "Roboto_medium", + titleFontSize: platform === "ios" ? 17 : 19, + subTitleFontSize: platform === "ios" ? 11 : 14, + subtitleColor: platform === "ios" ? "#8e8e93" : "#FFF", + titleFontColor: platform === "ios" ? "#000" : "#FFF", + + // Other + borderRadiusBase: platform === "ios" ? 5 : 2, + borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + contentPadding: 10, + dropdownLinkColor: "#414142", + inputLineHeight: 24, + deviceWidth, + deviceHeight, + isIphoneX, + inputGroupRoundedBorderRadius: 30, + + //iPhoneX SafeArea + Inset: { + portrait: { + topInset: 24, + leftInset: 0, + rightInset: 0, + bottomInset: 34 + }, + landscape: { + topInset: 0, + leftInset: 44, + rightInset: 44, + bottomInset: 21 + } + } +}; diff --git a/native-base-theme/variables/platformDark.js b/native-base-theme/variables/platformDark.js new file mode 100644 index 0000000..e3fe4c2 --- /dev/null +++ b/native-base-theme/variables/platformDark.js @@ -0,0 +1,283 @@ +// @flow + +import color from "color"; + +import { Platform, Dimensions, PixelRatio } from "react-native"; + +const deviceHeight = Dimensions.get("window").height; +const deviceWidth = Dimensions.get("window").width; +const platform = Platform.OS; +const platformStyle = undefined; +const isIphoneX = + platform === "ios" && (deviceHeight === 812 || deviceWidth === 812 || deviceHeight === 896 || deviceWidth === 896); + +export default { + platformStyle, + platform, + + //Accordion + headerStyle: "#edebed", + iconStyle: "#000", + contentStyle: "#f5f4f5", + expandedIconStyle: "#000", + accordionBorderColor: "#d3d3d3", + + // Android + androidRipple: true, + androidRippleColor: "rgba(256, 256, 256, 0.3)", + androidRippleColorDark: "rgba(0, 0, 0, 0.15)", + btnUppercaseAndroidText: true, + + // Badge + badgeBg: "#ED1727", + badgeColor: "#fff", + badgePadding: platform === "ios" ? 3 : 0, + + // Button + btnFontFamily: platform === "ios" ? "System" : "Roboto_medium", + btnDisabledBg: "#b5b5b5", + buttonPadding: 6, + get btnPrimaryBg() { + return this.brandPrimary; + }, + get btnPrimaryColor() { + return this.inverseTextColor; + }, + get btnInfoBg() { + return this.brandInfo; + }, + get btnInfoColor() { + return this.inverseTextColor; + }, + get btnSuccessBg() { + return this.brandSuccess; + }, + get btnSuccessColor() { + return this.inverseTextColor; + }, + get btnDangerBg() { + return this.brandDanger; + }, + get btnDangerColor() { + return this.inverseTextColor; + }, + get btnWarningBg() { + return this.brandWarning; + }, + get btnWarningColor() { + return this.inverseTextColor; + }, + get btnTextSize() { + return platform === "ios" ? this.fontSizeBase * 1.1 : this.fontSizeBase - 1; + }, + get btnTextSizeLarge() { + return this.fontSizeBase * 1.5; + }, + get btnTextSizeSmall() { + return this.fontSizeBase * 0.8; + }, + get borderRadiusLarge() { + return this.fontSizeBase * 3.8; + }, + get iconSizeLarge() { + return this.iconFontSize * 1.5; + }, + get iconSizeSmall() { + return this.iconFontSize * 0.6; + }, + + // Card + cardDefaultBg: "#2b2b2b", + cardBorderColor: "#ccc", + cardBorderRadius: 2, + cardItemPadding: platform === "ios" ? 10 : 12, + + // CheckBox + CheckboxRadius: platform === "ios" ? 13 : 0, + CheckboxBorderWidth: platform === "ios" ? 1 : 2, + CheckboxPaddingLeft: platform === "ios" ? 4 : 2, + CheckboxPaddingBottom: platform === "ios" ? 0 : 5, + CheckboxIconSize: platform === "ios" ? 21 : 16, + CheckboxIconMarginTop: platform === "ios" ? undefined : 1, + CheckboxFontSize: platform === "ios" ? 23 / 0.9 : 17, + checkboxBgColor: "#039BE5", + checkboxSize: 20, + checkboxTickColor: "#fff", + + // Color + brandPrimary: platform === "ios" ? "#e42612" : "#e42612", + brandInfo: "#62B1F6", + brandSuccess: "#5cb85c", + brandDanger: "#d9534f", + brandWarning: "#f0ad4e", + brandDark: "#000", + brandLight: "#f4f4f4", + + //Container + containerBgColor: "#2b2b2b", + + //Date Picker + datePickerTextColor: "#000", + datePickerBg: "transparent", + + // Font + DefaultFontSize: 16, + fontFamily: platform === "ios" ? "System" : "Roboto", + fontSizeBase: 15, + get fontSizeH1() { + return this.fontSizeBase * 1.8; + }, + get fontSizeH2() { + return this.fontSizeBase * 1.6; + }, + get fontSizeH3() { + return this.fontSizeBase * 1.4; + }, + + // Footer + footerHeight: 55, + footerDefaultBg: platform === "ios" ? "#F8F8F8" : "#3F51B5", + footerPaddingBottom: 0, + + // FooterTab + tabBarTextColor: platform === "ios" ? "#6b6b6b" : "#b3c7f9", + tabBarTextSize: platform === "ios" ? 14 : 11, + activeTab: platform === "ios" ? "#007aff" : "#fff", + sTabBarActiveTextColor: "#007aff", + tabBarActiveTextColor: platform === "ios" ? "#007aff" : "#fff", + tabActiveBgColor: platform === "ios" ? "#cde1f9" : "#3F51B5", + + // Header + toolbarBtnColor: platform === "ios" ? "#e42612" : "#fff", + toolbarDefaultBg: platform === "ios" ? "#F8F8F8" : "#e42612", + toolbarHeight: platform === "ios" ? 64 : 56, + toolbarSearchIconSize: platform === "ios" ? 20 : 23, + toolbarInputColor: platform === "ios" ? "#CECDD2" : "#fff", + searchBarHeight: platform === "ios" ? 30 : 40, + searchBarInputHeight: platform === "ios" ? 30 : 50, + toolbarBtnTextColor: platform === "ios" ? "#e42612" : "#fff", + toolbarDefaultBorder: platform === "ios" ? "#a7a6ab" : "#ba1f0f", + iosStatusbar: platform === "ios" ? "dark-content" : "light-content", + get statusBarColor() { + return color(this.toolbarDefaultBg) + .darken(0.2) + .hex(); + }, + get darkenHeader() { + return color(this.tabBgColor) + .darken(0.03) + .hex(); + }, + + // Icon + iconFamily: "Ionicons", + iconFontSize: platform === "ios" ? 30 : 28, + iconHeaderSize: platform === "ios" ? 33 : 24, + + // InputGroup + inputFontSize: 17, + inputBorderColor: "#D9D5DC", + inputSuccessBorderColor: "#2b8339", + inputErrorBorderColor: "#ed2f2f", + inputHeightBase: 50, + get inputColor() { + return this.textColor; + }, + get inputColorPlaceholder() { + return "#575757"; + }, + + // Line Height + btnLineHeight: 19, + lineHeightH1: 32, + lineHeightH2: 27, + lineHeightH3: 22, + lineHeight: platform === "ios" ? 20 : 24, + listItemSelected: platform === "ios" ? "#e42612" : "#e42612", + + // List + listBg: "transparent", + listBorderColor: "#c9c9c9", + listDividerBg: "#f4f4f4", + listBtnUnderlayColor: "#DDD", + listItemPadding: platform === "ios" ? 10 : 12, + listNoteColor: "#808080", + listNoteSize: 13, + + // Progress Bar + defaultProgressColor: "#E4202D", + inverseProgressColor: "#1A191B", + + // Radio Button + radioBtnSize: platform === "ios" ? 25 : 23, + radioSelectedColorAndroid: "#3F51B5", + radioBtnLineHeight: platform === "ios" ? 29 : 24, + get radioColor() { + return this.brandPrimary; + }, + + // Segment + segmentBackgroundColor: platform === "ios" ? "#F8F8F8" : "#3F51B5", + segmentActiveBackgroundColor: platform === "ios" ? "#007aff" : "#fff", + segmentTextColor: platform === "ios" ? "#007aff" : "#fff", + segmentActiveTextColor: platform === "ios" ? "#fff" : "#3F51B5", + segmentBorderColor: platform === "ios" ? "#007aff" : "#fff", + segmentBorderColorMain: platform === "ios" ? "#a7a6ab" : "#3F51B5", + + // Spinner + defaultSpinnerColor: "#45D56E", + inverseSpinnerColor: "#1A191B", + + // Tab + tabDefaultBg: platform === "ios" ? "#2b2b2b" : "#e42612", + topTabBarTextColor: platform === "ios" ? "#6b6b6b" : "#b3c7f9", + topTabBarActiveTextColor: platform === "ios" ? "#e42612" : "#fff", + topTabBarBorderColor: platform === "ios" ? "#a7a6ab" : "#fff", + topTabBarActiveBorderColor: platform === "ios" ? "#e42612" : "#fff", + + // Tabs + tabBgColor: "#2b2b2b", + tabFontSize: 15, + + // Text + textColor: "#fff", + inverseTextColor: "#000", + noteFontSize: 14, + get defaultTextColor() { + return this.textColor; + }, + + // Title + titleFontfamily: platform === "ios" ? "System" : "Roboto_medium", + titleFontSize: platform === "ios" ? 17 : 19, + subTitleFontSize: platform === "ios" ? 11 : 14, + subtitleColor: platform === "ios" ? "#8e8e93" : "#FFF", + titleFontColor: platform === "ios" ? "#000" : "#FFF", + + // Other + borderRadiusBase: platform === "ios" ? 5 : 2, + borderWidth: 1 / PixelRatio.getPixelSizeForLayoutSize(1), + contentPadding: 10, + dropdownLinkColor: "#414142", + inputLineHeight: 24, + deviceWidth, + deviceHeight, + isIphoneX, + inputGroupRoundedBorderRadius: 30, + + //iPhoneX SafeArea + Inset: { + portrait: { + topInset: 24, + leftInset: 0, + rightInset: 0, + bottomInset: 34 + }, + landscape: { + topInset: 0, + leftInset: 44, + rightInset: 44, + bottomInset: 21 + } + } +}; diff --git a/navigation/AppNavigator.js b/navigation/AppNavigator.js new file mode 100644 index 0000000..e01d704 --- /dev/null +++ b/navigation/AppNavigator.js @@ -0,0 +1,9 @@ +import { createAppContainer, createSwitchNavigator } from 'react-navigation'; + +import MainDrawerNavigator from './MainDrawerNavigator'; + +export default createAppContainer( + createSwitchNavigator({ + Main: MainDrawerNavigator, + }) +); \ No newline at end of file diff --git a/navigation/MainDrawerNavigator.js b/navigation/MainDrawerNavigator.js new file mode 100644 index 0000000..a27059a --- /dev/null +++ b/navigation/MainDrawerNavigator.js @@ -0,0 +1,24 @@ +import React from 'react'; +import {createDrawerNavigator} from 'react-navigation'; + +import HomeScreen from '../screens/HomeScreen'; +import PlanningScreen from '../screens/PlanningScreen'; +import ProxiwashScreen from '../screens/ProxiwashScreen'; +import ProximoScreen from '../screens/ProximoScreen'; +import SettingsScreen from '../screens/SettingsScreen'; +import AboutScreen from '../screens/AboutScreen'; +import SideMenu from "../components/SideMenu"; + + +export default createDrawerNavigator({ + Home: {screen: HomeScreen}, + Planning: {screen: PlanningScreen,}, + Proxiwash: {screen: ProxiwashScreen,}, + Proximo: {screen: ProximoScreen,}, + Settings: {screen: SettingsScreen,}, + About: {screen: AboutScreen,}, + }, { + contentComponent: SideMenu, + } +); + diff --git a/navigation/MainTabNavigator.js b/navigation/MainTabNavigator.js new file mode 100644 index 0000000..bc422c7 --- /dev/null +++ b/navigation/MainTabNavigator.js @@ -0,0 +1,58 @@ +import React from 'react'; +import {Platform} from 'react-native'; +import {createStackNavigator} from 'react-navigation'; +import {createMaterialBottomTabNavigator} from "react-navigation-material-bottom-tabs"; +import TabBarIcon from '../components/TabBarIcon'; + +import HomeScreen from '../screens/HomeScreen'; +import PlanningScreen from '../screens/PlanningScreen'; + +const HomeStack = createStackNavigator({ + Home: HomeScreen, +}); + +HomeStack.navigationOptions = { + tabBarLabel: 'Home', + tabBarIcon: ({focused}) => ( + + ), +}; + +const ProfileStack = createStackNavigator({ + Profile: PlanningScreen, +}); + +ProfileStack.navigationOptions = { + tabBarLabel: 'Profile', + tabBarIcon: ({focused}) => ( + + ), +}; + + +export default createMaterialBottomTabNavigator( + { + Home: HomeStack, + Profile: ProfileStack + }, { + initialRouteName: 'Home', + shifting: true, + activeColor: Colors.tabIconSelected, + inactiveColor: Colors.tabIconDefault, + barStyle: {backgroundColor: Colors.mainColor}, + } +); diff --git a/package-lock.json b/package-lock.json index 0e78474..125244f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -925,6 +925,18 @@ "to-fast-properties": "^2.0.0" } }, + "@callstack/react-theme-provider": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-1.0.7.tgz", + "integrity": "sha512-NTjvHadSLja5KruFXThC6rwLrewzbPSZFefgl5hTWXVZ40BsIDn3744AgregeuGTM3249K1cE9uN7UKua87pKQ==", + "requires": { + "create-react-context": "^0.2.1", + "deepmerge": "^2.1.1", + "flow-copy-source": "^1.3.0", + "hoist-non-react-statics": "^2.5.0", + "prop-types": "^15.6.0" + } + }, "@expo/vector-icons": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-10.0.2.tgz", @@ -946,9 +958,9 @@ } }, "@react-native-community/cli": { - "version": "1.9.11", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.9.11.tgz", - "integrity": "sha512-VVu/tmTTzODfW2xlqIz0pZgeELG2ppPAIgbBEKLgHCO9DMxNZIKSqmei/JqkAi0gEipqQoP6YPAemHPd43lyrA==", + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.9.10.tgz", + "integrity": "sha512-mYFsSljhia/xNozRRDXC5HyGRBWaDh3OickT28i6NrJSZLjp0kAH6g4c0OWk67EslgXcMi/qYpucA8W54ldu1w==", "requires": { "chalk": "^1.1.1", "commander": "^2.19.0", @@ -1030,6 +1042,62 @@ "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-2.0.10.tgz", "integrity": "sha512-NrIzyLe0eSbhgMnHl2QdSEhaA7yXh6p9jzMomfUa//hoTXE+xbObGDdiWWSQm2bnXnZJg8XCU3AB9qzvqcuLnA==" }, + "@react-navigation/core": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.4.2.tgz", + "integrity": "sha512-7G+iDzLSTeOUU4vVZeRZKJ+Bd7ds7ZxYNqZcB8i0KlBeQEQfR74Ounfu/p0KIEq2RiNnaE3QT7WVP3C87sebzw==", + "requires": { + "hoist-non-react-statics": "^3.3.0", + "path-to-regexp": "^1.7.0", + "query-string": "^6.4.2", + "react-is": "^16.8.6" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + } + } + }, + "@react-navigation/native": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-3.5.0.tgz", + "integrity": "sha512-TmGOis++ejEXG3sqNJhCSKqB0/qLu3FQgDtO959qpqif36R/diR8SQwJqeSdofoEiK3CepdhFlTCeHdS1/+MsQ==", + "requires": { + "hoist-non-react-statics": "^3.0.1", + "react-native-safe-area-view": "^0.14.1", + "react-native-screens": "^1.0.0 || ^1.0.0-alpha" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + }, + "react-native-safe-area-view": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.5.tgz", + "integrity": "sha512-1NxWK1G0gzwCOuyNV/zf4n18s6FWsiqgwkzU3P9C0Iu8AErjhstK1jUqpRwzLH8+/7hGLsrQedmn+ZbQTOrJPg==", + "requires": { + "hoist-non-react-statics": "^2.3.1" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + } + } + }, "@types/fbemitter": { "version": "2.0.32", "resolved": "https://registry.npmjs.org/@types/fbemitter/-/fbemitter-2.0.32.tgz", @@ -1525,6 +1593,11 @@ "lodash": "^4.17.11" } }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -1709,6 +1782,11 @@ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.44.tgz", "integrity": "sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ==" }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, "blueimp-md5": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.10.0.tgz", @@ -1760,9 +1838,9 @@ } }, "bser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", - "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", "requires": { "node-int64": "^0.4.0" } @@ -1856,9 +1934,9 @@ "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" }, "caniuse-lite": { - "version": "1.0.30000977", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000977.tgz", - "integrity": "sha512-RTXL32vdfAc2g9aoDL6vnBzbOO/3sM+T+YX4m7W9iFZnl3qIz7WYoZZpcZpALud8xq4+N56rnruX/NQy9HQu6A==" + "version": "1.0.30000975", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000975.tgz", + "integrity": "sha512-ZsXA9YWQX6ATu5MNg+Vx/cMQ+hM6vBBSqDeJs8ruk9z0ky4yIHML15MoxcFt088ST2uyjgqyUGRJButkptWf0w==" }, "capture-exit": { "version": "1.2.0", @@ -1888,6 +1966,123 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" }, + "chokidar": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + } + } + }, + "clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -1971,6 +2166,15 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", + "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", + "requires": { + "color-convert": "^1.8.2", + "color-string": "^1.4.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1984,6 +2188,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -2000,9 +2213,9 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, "compare-versions": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.0.tgz", - "integrity": "sha512-hX+4kt2Rcwu+x1U0SsEFCn1quURjEjPEGH/cPBlpME/IidGimAdwfMU+B+xDr7et/KTR7VH2+ZqWGerv4NGs2w==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", + "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==" }, "component-emitter": { "version": "1.3.0", @@ -2117,9 +2330,9 @@ }, "dependencies": { "semver": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.2.tgz", - "integrity": "sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ==" + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", + "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" } } }, @@ -2154,6 +2367,15 @@ "object-assign": "^4.1.1" } }, + "create-react-context": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", + "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==", + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -2218,6 +2440,11 @@ "is-obj": "^1.0.0" } }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -2296,9 +2523,14 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.173", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.173.tgz", - "integrity": "sha512-weH16m8as+4Fy4XJxrn/nFXsIqB7zkxERhvj/5YX2HE4HB8MCu98Wsef4E3mu0krIT27ic0bGsr+TvqYrUn6Qg==" + "version": "1.3.166", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.166.tgz", + "integrity": "sha512-7XwtJz81H/PBnkmQ/07oVPOGTkBZs6ibZN8OqXNUrxjRPzR0Xj+MFcMmRZEXGilEg1Pm+97V8BZVI63qnBX1hQ==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "encodeurl": { "version": "1.0.2", @@ -2417,9 +2649,9 @@ } }, "expo": { - "version": "33.0.7", - "resolved": "https://registry.npmjs.org/expo/-/expo-33.0.7.tgz", - "integrity": "sha512-+mDBQ/KeJnDWg8bUoiuP/OpMXwUYaypgHMDPgH7+AXw8OJuedMhJlH+7UEX2OB+UePnWPcQER411sC7m819pag==", + "version": "33.0.6", + "resolved": "https://registry.npmjs.org/expo/-/expo-33.0.6.tgz", + "integrity": "sha512-BhPaEIdB+tEb5Wlp7ux+RDy7/mMPUSR6aCAVH2HlgrIpndFqgaWbm7pjRigE1Aqco0Iwcw/1G5k2spSu180GNA==", "requires": { "@babel/runtime": "^7.1.2", "@expo/vector-icons": "^10.0.1", @@ -3035,6 +3267,75 @@ "locate-path": "^2.0.0" } }, + "flow-copy-source": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flow-copy-source/-/flow-copy-source-1.3.0.tgz", + "integrity": "sha512-F8aRmNmtB5l+RFG7LAWj6IYU22K37BrhIXXCcQyxSsYWm0pNubnhBSEk+eoyGCou3+4aI4tReOfLFtgd5wnnYQ==", + "requires": { + "chokidar": "^2.0.0", + "fs-extra": "^5.0.0", + "glob": "^7.0.0", + "kefir": "^3.7.3", + "yargs": "^11.0.0" + }, + "dependencies": { + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, "fontfaceobserver": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", @@ -3661,6 +3962,11 @@ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -3750,16 +4056,31 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, + "html-parse-stringify2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz", + "integrity": "sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o=", + "requires": { + "void-elements": "^2.0.1" + } + }, "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.4", + "inherits": "2.0.3", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "hyphenate-style-name": { @@ -3767,6 +4088,19 @@ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==" }, + "i18n-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/i18n-js/-/i18n-js-3.3.0.tgz", + "integrity": "sha512-+m8jh84IIWlFwEJgwrWCkeIwIES9ilJKBOj5qx8ZTLLmlPz7bjKnCdxf254wRf6M4pkQHtgXGT9r9lGk0e9aug==" + }, + "i18next": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-17.0.4.tgz", + "integrity": "sha512-+lwmv3FT8Sv/HwVPjkR6rtEFhgOqt9L/CTehzyxvL/NdkeUYbFZJfE57MsBToB6LFWg3d0sZJIVgYqCpWzUyLQ==", + "requires": { + "@babel/runtime": "^7.3.1" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3878,6 +4212,14 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -4048,6 +4390,11 @@ "sane": "^3.0.0" } }, + "jest-react-native": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/jest-react-native/-/jest-react-native-18.0.0.tgz", + "integrity": "sha1-d92QnwaTJFmfInxYxhwuYhaHJro=" + }, "jest-serializer": { "version": "24.4.0", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", @@ -4119,6 +4466,21 @@ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, + "kefir": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/kefir/-/kefir-3.8.6.tgz", + "integrity": "sha512-H/8ZTjmEEme2YL388rgy5fFlz2NM4ZImNI2rJrTsR8og454kpY3lPVv53W9lfevNELfNeYD33gMdIKHL25z7WA==", + "requires": { + "symbol-observable": "1.0.4" + }, + "dependencies": { + "symbol-observable": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", + "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -4255,6 +4617,14 @@ "tmpl": "1.0.x" } }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4729,9 +5099,9 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -4762,6 +5132,11 @@ } } }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -4840,6 +5215,65 @@ } } }, + "native-base": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/native-base/-/native-base-2.12.1.tgz", + "integrity": "sha512-4DH5aKaazOwh7//URZySVxgHFnoZnkhat3aMEJYd/eWW/RBJQ/lBk/nRmDicLqq1chzq/6Ok4KmkQnVwSTt3mA==", + "requires": { + "blueimp-md5": "^2.5.0", + "clamp": "^1.0.1", + "color": "~1.0.3", + "fs-extra": "^2.0.0", + "jest-react-native": "^18.0.0", + "lodash": "4.17.11", + "native-base-shoutem-theme": "0.2.3", + "print-message": "^2.1.0", + "prop-types": "^15.5.10", + "react-native-drawer": "2.5.1", + "react-native-easy-grid": "0.2.1", + "react-native-keyboard-aware-scroll-view": "0.8.0", + "react-native-vector-icons": "6.1.0", + "react-timer-mixin": "^0.13.4", + "react-tween-state": "^0.1.5", + "tween-functions": "^1.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "native-base-shoutem-theme": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/native-base-shoutem-theme/-/native-base-shoutem-theme-0.2.3.tgz", + "integrity": "sha512-RitgmvLiQTD5fL5UkiaBYpVQROHlxlP6TzoJjeMUGOxHvwdSFJUnFTfDWZZSxk/YkHP+8CHjnm1XnvmGZvwXKQ==", + "requires": { + "hoist-non-react-statics": "^1.0.5", + "lodash": "4.17.11", + "prop-types": "^15.5.10" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -5039,6 +5473,11 @@ "mimic-fn": "^1.0.0" } }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==" + }, "opn": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", @@ -5119,11 +5558,21 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -5185,6 +5634,11 @@ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.0.tgz", "integrity": "sha512-Hkavx/nY4/plImrZPHRk2CL9vpOymZLgEbMNX1U0bjcBL7QN9wODxyx0yaMZURSQaUtSEvDrfAvxa9oPb0at9g==" }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -5205,6 +5659,21 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -5213,6 +5682,11 @@ "pify": "^2.0.0" } }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -5357,6 +5831,38 @@ "ansi-styles": "^3.2.0" } }, + "print-message": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/print-message/-/print-message-2.1.0.tgz", + "integrity": "sha1-tViO0IsOG/d6x7y1y3gASvr5qJE=", + "requires": { + "chalk": "1.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", + "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=", + "requires": { + "ansi-styles": "^2.1.0", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -5410,9 +5916,9 @@ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, "query-string": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.1.tgz", - "integrity": "sha512-g6y0Lbq10a5pPQpjlFuojfMfV1Pd2Jw9h75ypiYPPia3Gcq2rgkKiIwbkS6JxH7c5f5u/B/sB+d13PU+g1eu4Q==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.7.0.tgz", + "integrity": "sha512-oQ01H1jrgDRbPq5SjtJF470S418GOrKkds+fpvAt6DQatHXl7bmkaJulHbTIM+QNGtoPpa8f5k9W3Zk50zXRPQ==", "requires": { "decode-uri-component": "^0.2.0", "split-on-first": "^1.0.0", @@ -5424,6 +5930,14 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, "randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", @@ -5527,11 +6041,25 @@ "warning": "^3.0.0" } }, + "react-i18next": { + "version": "10.11.2", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-10.11.2.tgz", + "integrity": "sha512-Ru+WonG9BLILDg/By7Pw0Lne2I7HVLRyhyvDtar22tNNu6de2D89zAKl2RzK2jgq7m7l+BFSnLpz4kX7ZPV+JQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "html-parse-stringify2": "2.0.1" + } + }, "react-is": { "version": "16.8.6", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, "react-native": { "version": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz", "integrity": "sha512-/qr69tLChymCyNpTvBiHpepa1ufF43cCMtUzpaQxmCwG6Kz5Z9XqyoEP1lJaJ/BNFj/Bp9+l+LIHwvrDoPBnfQ==", @@ -5652,6 +6180,61 @@ "resolved": "https://registry.npmjs.org/react-native-branch/-/react-native-branch-2.2.5.tgz", "integrity": "sha1-QHTdY7SXPmOX2c5Q6XtXx3pRjp0=" }, + "react-native-drawer": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/react-native-drawer/-/react-native-drawer-2.5.1.tgz", + "integrity": "sha512-cxcQNbSWy5sbGi7anSVp6EDr6JarOBMY9lbFOeLFeVYbONiudoqRKbgEsSDgSw3/LFCLvUXK5zdjXCOedeytxQ==", + "requires": { + "prop-types": "^15.5.8", + "tween-functions": "^1.0.1" + } + }, + "react-native-easy-grid": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/react-native-easy-grid/-/react-native-easy-grid-0.2.1.tgz", + "integrity": "sha512-u90U4lf5L/PUmq7HoczFKgyElmBCpb3gu21TOWL7pq4gSH2Hz0EGm1Bgu0SQacO9v6jfQbS7JfE+xtMg6MHluQ==", + "requires": { + "lodash": "4.17.11" + } + }, + "react-native-elements": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-1.1.0.tgz", + "integrity": "sha512-n1eOL0kUdlH01zX7bn1p7qhYXn7kquqxYQ0oWlxoAck9t5Db/KeK5ViOsAk8seYSvAG6Pe7OxgzRFnMfFhng0Q==", + "requires": { + "color": "^3.1.0", + "deepmerge": "^3.1.0", + "hoist-non-react-statics": "^3.1.0", + "opencollective-postinstall": "^2.0.0", + "prop-types": "^15.5.8", + "react-native-ratings": "^6.3.0", + "react-native-status-bar-height": "^2.2.0" + }, + "dependencies": { + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" + }, + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + } + } + }, "react-native-gesture-handler": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.2.1.tgz", @@ -5662,16 +6245,79 @@ "prop-types": "^15.5.10" } }, + "react-native-iphone-x-helper": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz", + "integrity": "sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ==" + }, + "react-native-keyboard-aware-scroll-view": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.8.0.tgz", + "integrity": "sha512-gPfhgHQI/z7Cc5aeNOEmK0b250QkAeU6V+4oH8EC7mmFneEKn6MAIDjpoiwqt6bV+lFJPABXfx9MtrRmtCeJ/Q==", + "requires": { + "prop-types": "^15.6.2", + "react-native-iphone-x-helper": "^1.0.3" + } + }, "react-native-maps": { "version": "0.24.2", "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-0.24.2.tgz", "integrity": "sha512-1iNIDikp2dkCG+8DguaEviYZiMSYyvwqYT7pO2YTZvuFRDSc/P9jXMhTUnSh4wNDlEeQ47OJ09l0pwWVBZ7wxg==" }, + "react-native-paper": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-2.16.0.tgz", + "integrity": "sha512-dNHbVZNi9cfKr5sd/5pPGSJSo7ctnl61wLmRxWwvQ2VyEhDN+YxflvZ/vDZrnyivVWPcFS1nmiGCxABARISsuw==", + "requires": { + "@callstack/react-theme-provider": "^1.0.7", + "color": "^2.0.1", + "create-react-context": "^0.2.3", + "hoist-non-react-statics": "^3.1.0", + "react-lifecycles-compat": "^3.0.4", + "react-native-safe-area-view": "^0.12.0" + }, + "dependencies": { + "color": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", + "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + } + } + }, + "react-native-ratings": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/react-native-ratings/-/react-native-ratings-6.3.1.tgz", + "integrity": "sha512-+WEtk4wPvnoN5YbfWcmyM4LpKOlvkrFlpQe0KrqeWBAOkN6OXOZYBtiCh97dCIb8Ovpm7goOEcTf3T1MGCi2LA==", + "requires": { + "lodash": "^4.17.4", + "prop-types": "^15.5.10" + } + }, "react-native-reanimated": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.0.1.tgz", "integrity": "sha512-RENoo6/sJc3FApP7vJ1Js7WyDuTVh97bbr5aMjJyw3kqpR2/JDHyL/dQFfOvSSAc+VjitpR9/CfPPad7tLRiIA==" }, + "react-native-safe-area-view": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.12.0.tgz", + "integrity": "sha512-UrAXmBC4KNR5K2eczIDZgqceWyKsgG9gmWFerHCvoyApfei8ceBB9u/c//PWCpS5Gt8MRLTmX5jPtzdXo2yNqg==", + "requires": { + "hoist-non-react-statics": "^2.3.1" + } + }, "react-native-safe-module": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/react-native-safe-module/-/react-native-safe-module-1.2.0.tgz", @@ -5685,11 +6331,244 @@ "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-1.0.0-alpha.22.tgz", "integrity": "sha512-kSyAt0AeVU6N7ZonfV6dP6iZF8B7Bce+tk3eujXhzBGsLg0VSLnU7uE9VqJF0xdQrHR91ZjGgVMieo/8df9KTA==" }, + "react-native-settings-page": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/react-native-settings-page/-/react-native-settings-page-2.0.6.tgz", + "integrity": "sha512-RSfW30idzS/5hFcVEp2T7peQVuuu97foTJp1ubj9SeQHZcbKWkIQNDeFdRnFZUlGlCi6GbInpAXtckNfXeGCBw==", + "requires": { + "react": "^16.7.0", + "react-native-elements": "^1.0.0", + "react-native-vector-icons": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "react-native-vector-icons": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.5.0.tgz", + "integrity": "sha512-24Y5hkNTbpwK4OQFQQhJ20vBFWltGOcunJPztjO7E/4QpF3YmpbZIWjjf07wHOAlpeqCz3gEWr5iDI0Y2zLNnA==", + "requires": { + "lodash": "^4.0.0", + "prop-types": "^15.6.2", + "yargs": "^13.2.2" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "react-native-status-bar-height": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/react-native-status-bar-height/-/react-native-status-bar-height-2.3.1.tgz", + "integrity": "sha512-m9nGKYfFn6ljF1abafzF5cFaD9JCzXwj7kNE9CuF+g0TgtItH70eY2uHaCV9moENTftqd5XIS3Cx0mf4WfistA==" + }, "react-native-svg": { "version": "9.4.0", "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.4.0.tgz", "integrity": "sha512-IVJlVbS2dAPerPr927fEi4uXzrPXzlra5ddgyJXZZ2IKA2ZygyYWFZDM+vsQs+Vj20CfL8nOWszQQV57vdQgFg==" }, + "react-native-tab-view": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-1.4.1.tgz", + "integrity": "sha512-Bke8KkDcDhvB/z0AS7MnQKMD2p6Kwfc1rSKlMOvg9CC5CnClQ2QEnhPSbwegKDYhUkBI92iH/BYy7hNSm5kbUQ==", + "requires": { + "prop-types": "^15.6.1" + } + }, + "react-native-vector-icons": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.1.0.tgz", + "integrity": "sha512-1GF5I4VWgwnzBtVfAKNgEiR5ziHi5QaKL381wwApMzuiFgIJMNt5XIChuKwKoaiB86s+P5iMcYWxYCyENL96lA==", + "requires": { + "lodash": "^4.0.0", + "prop-types": "^15.6.2", + "yargs": "^8.0.2" + }, + "dependencies": { + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + } + } + }, "react-native-view-shot": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/react-native-view-shot/-/react-native-view-shot-2.6.0.tgz", @@ -5743,6 +6622,74 @@ "invariant": "2.2.4" } }, + "react-native-week-view": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/react-native-week-view/-/react-native-week-view-0.0.7.tgz", + "integrity": "sha512-A2/If7b4zIIVQklqQwyaFFhT7Ly7aVrmWwlHUD8btSKxLYEd4DXmOE7b+V9ybm4M/K69LiiahxFu0+DOTWoCXQ==", + "requires": { + "moment": "^2.19.3", + "prop-types": "^15.7.2" + } + }, + "react-navigation": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.11.0.tgz", + "integrity": "sha512-wlPcDtNiIdPeYxNQ/MN4arY5Xe9EphD2QVpRuvvuPWW+BamF3AJaIy060r3Yz59DODAoWllscabat/yqnih8Tg==", + "requires": { + "@react-navigation/core": "~3.4.1", + "@react-navigation/native": "~3.5.0", + "react-navigation-drawer": "~1.2.1", + "react-navigation-stack": "~1.4.0", + "react-navigation-tabs": "~1.1.4" + } + }, + "react-navigation-drawer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-navigation-drawer/-/react-navigation-drawer-1.2.1.tgz", + "integrity": "sha512-T2kaBjY2c4/3I6noWFnaf/c18ntNH5DsST38i+pdc2NPxn5Yi5lkK+ZZTeKuHSFD4a7G0jWY9OGf1iRkHWLMAQ==", + "requires": { + "react-native-tab-view": "^1.2.0" + } + }, + "react-navigation-material-bottom-tabs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/react-navigation-material-bottom-tabs/-/react-navigation-material-bottom-tabs-1.0.0.tgz", + "integrity": "sha512-fmPOt82xYpNYWh7gDdk38ce2TDmKuGnVaC7Pd67Ss62bjZ2CwmX9kOXExThtdY039zDGIcABDq9h65c8TQeTUA==", + "requires": { + "hoist-non-react-statics": "^2.5.0", + "prop-types": "^15.6.0", + "react-navigation-tabs": "1.0.0" + }, + "dependencies": { + "react-navigation-tabs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/react-navigation-tabs/-/react-navigation-tabs-1.0.0.tgz", + "integrity": "sha512-2oWPk+XfwHihgdOBhuAuzzU94NPhwdvuzseL30R3VsggunfVB4cUtNiQjRP4rVVpdGgJygQtws1eRbUsQ9cECA==", + "requires": { + "hoist-non-react-statics": "^2.5.0", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "react-native-tab-view": "^1.0.0" + } + } + } + }, + "react-navigation-stack": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-1.4.0.tgz", + "integrity": "sha512-zEe9wCA0Ot8agarYb//0nSWYW1GM+1R0tY/nydUV0EizeJ27At0EklYVWvYEuYU6C48va6cu8OPL7QD/CcJACw==" + }, + "react-navigation-tabs": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/react-navigation-tabs/-/react-navigation-tabs-1.1.4.tgz", + "integrity": "sha512-py2hLCRxPwXOzmY1W9XcY1rWXxdK6RGW/aXh56G9gIf8cpHNDhy/bJV4e46/JrVcse3ybFaN0liT09/DM/NdwQ==", + "requires": { + "hoist-non-react-statics": "^2.5.0", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "react-native-tab-view": "^1.4.1" + } + }, "react-proxy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz", @@ -5766,6 +6713,15 @@ "react-proxy": "^1.1.7" } }, + "react-tween-state": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/react-tween-state/-/react-tween-state-0.1.5.tgz", + "integrity": "sha1-6YsGZVHvuTy5LdG+FJlcLj3q4zk=", + "requires": { + "raf": "^3.1.0", + "tween-functions": "^1.0.1" + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -5799,6 +6755,279 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "recompose": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", @@ -5927,9 +7156,9 @@ "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=" }, "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", "requires": { "path-parse": "^1.0.6" } @@ -6383,9 +7612,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -6457,6 +7686,21 @@ "plist": "^3.0.1" } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -6876,6 +8120,11 @@ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, + "tween-functions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz", + "integrity": "sha1-GuOlDnxguz3vd06scHrLynO7w/8=" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -6982,14 +8231,35 @@ "integrity": "sha512-JvR04JZHqt+EJiGL/9KWsaTpTJQ53qqNMmZAC+MX6NUgnz1bWiUw9eY9MAAIaQbmorCwKyCqfpX9twTUM8z1yA==" }, "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } } }, "universalify": { @@ -7043,6 +8313,11 @@ } } }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -7096,6 +8371,11 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", diff --git a/package.json b/package.json index 0a103e8..51f0766 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,24 @@ "eject": "expo eject" }, "dependencies": { + "@expo/vector-icons": "latest", "expo": "^33.0.0", + "expo-font": "^5.0.1", + "expo-localization": "^5.0.1", + "i18n-js": "^3.3.0", + "i18next": "latest", + "native-base": "latest", "react": "16.8.3", "react-dom": "^16.8.6", + "react-i18next": "latest", "react-native": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz", - "react-native-web": "^0.11.4" + "react-native-paper": "latest", + "react-native-settings-page": "latest", + "react-native-status-bar-height": "latest", + "react-native-web": "^0.11.4", + "react-native-week-view": "latest", + "react-navigation": "latest", + "react-navigation-material-bottom-tabs": "latest" }, "devDependencies": { "babel-preset-expo": "^5.1.1" diff --git a/screens/AboutScreen.js b/screens/AboutScreen.js new file mode 100644 index 0000000..dbda873 --- /dev/null +++ b/screens/AboutScreen.js @@ -0,0 +1,226 @@ +import React from 'react'; +import {Platform, StyleSheet, Linking, Alert} from 'react-native'; +import {Container, Content, Text, Card, CardItem, Body, Icon, Left, Right, Thumbnail, H1} from 'native-base'; +import CustomHeader from "../components/CustomHeader"; +import i18n from "i18n-js"; + +const version = 'a0.0.1'; +const links = { + appstore: 'https://qwant.com', + playstore: 'https://qwant.com', + gitlab: 'https://qwant.com', + bugs: 'https://qwant.com', + changelog: 'https://qwant.com', + license: 'https://qwant.com', + mail: "mailto:arnaud.vergnet@netc.fr?subject=Application Amicale INSA Toulouse&body=", + linkedin: 'https://www.linkedin.com/in/arnaud-vergnet-434ba5179/', + facebook: 'https://www.facebook.com/arnaud.vergnet', + react: 'https://facebook.github.io/react-native/', +}; + + +export default class AboutScreen extends React.Component { + + openWebLink(link) { + Linking.openURL(link).catch((err) => console.error('Error opening link', err)); + } + + render() { + const nav = this.props.navigation; + return ( + + + + + + + + +

Amicale INSA Toulouse

+ + v.{version} + + +
+
+ this.openWebLink(Platform.OS === "ios" ? links.appstore : links.playstore)}> + + + {Platform.OS === "ios" ? i18n.t('aboutScreen.appstore') : i18n.t('aboutScreen.playstore')} + + + + + + this.openWebLink(links.gitlab)}> + + + Gitlab + + + + + + this.openWebLink(links.bugs)}> + + + {i18n.t('aboutScreen.bugs')} + + + + + + this.openWebLink(links.changelog)}> + + + + {i18n.t('aboutScreen.changelog')} + + + + + + + this.openWebLink(links.license)}> + + + + {i18n.t('aboutScreen.license')} + + + + + + +
+ + + + {i18n.t('aboutScreen.author')} + + Alert.alert('Coucou', 'Whaou')}> + + + Arnaud VERGNET + + + this.openWebLink(links.mail)}> + + + + {i18n.t('aboutScreen.mail')} + + + + + + + this.openWebLink(links.linkedin)}> + + + + Linkedin + + + + + + + this.openWebLink(links.facebook)}> + + + + Facebook + + + + + + + + + + + {i18n.t('aboutScreen.technologies')} + + this.openWebLink(links.react)}> + + + + {i18n.t('aboutScreen.reactNative')} + + + + + + + console.log('libs')}> + + + + {i18n.t('aboutScreen.libs')} + + + + + + + +
+
+ ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + alignItems: 'center', + justifyContent: 'center', + }, +}); diff --git a/screens/HomeScreen.js b/screens/HomeScreen.js new file mode 100644 index 0000000..77769b7 --- /dev/null +++ b/screens/HomeScreen.js @@ -0,0 +1,28 @@ +import React from 'react'; +import {Container, Content, Text, Button, Icon} from 'native-base'; +import CustomHeader from '../components/CustomHeader'; +import i18n from "i18n-js"; + +import { Notifications } from 'expo'; + + +export default class HomeScreen extends React.Component { + render() { + const nav = this.props.navigation; + return ( + + + + + + + ); + } +} diff --git a/screens/PlanningScreen.js b/screens/PlanningScreen.js new file mode 100644 index 0000000..c74290a --- /dev/null +++ b/screens/PlanningScreen.js @@ -0,0 +1,24 @@ +import React from 'react'; +import { StyleSheet, View } from 'react-native'; +import {Container, Text} from 'native-base'; +import CustomHeader from "../components/CustomHeader"; +import i18n from "i18n-js"; + +export default class PlanningScreen extends React.Component { + render() { + const nav = this.props.navigation; + return ( + + + + ); + } +} +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + alignItems: 'center', + justifyContent: 'center', + }, +}); diff --git a/screens/ProximoScreen.js b/screens/ProximoScreen.js new file mode 100644 index 0000000..d928e07 --- /dev/null +++ b/screens/ProximoScreen.js @@ -0,0 +1,113 @@ +import React from 'react'; +import {StyleSheet, View, Alert, ScrollView, RefreshControl, FlatList} from 'react-native'; +import {Container, Text, Content, ListItem, Left, Thumbnail, Right, Badge} from 'native-base'; +import CustomHeader from "../components/CustomHeader"; + +const DATA_URL = "https://etud.insa-toulouse.fr/~vergnet/appli-amicale/data.txt"; +const IMG_URL = "https://etud.insa-toulouse.fr/~vergnet/appli-amicale/img/"; + +const defaultImage = require('../assets/image-missing.png'); + +export default class ProximoScreen extends React.Component { + + constructor(props) { + super(props); + this.state = { + refreshing: false, + data: undefined + }; + } + + async readData() { + try { + let response = await fetch( + 'https://etud.insa-toulouse.fr/~vergnet/appli-amicale/data.txt', + ); + let responseText = await response.text(); + let responseArray = responseText.split('\n'); + let responseFinal = []; + for (let i = 0; i < responseArray.length; i++) { + if (responseArray[i] !== "") { + let itemArray = responseArray[i] + .replace('[', '') + .replace(']', '') + .split(',')[1] + .split(';'); + let object = { + name: itemArray[0], + price: itemArray[1], + image: defaultImage + }; + responseFinal.push(object); + } + } + this.setState({data: responseFinal}); + } catch (error) { + console.error(error); + return undefined; + } + } + + componentDidMount() { + this._onRefresh(); + } + + _onRefresh = () => { + this.setState({refreshing: true}); + this.readData().then(() => { + this.setState({refreshing: false}); + // console.log(this.state.data); + }); + }; + + + render() { + const nav = this.props.navigation; + return ( + + + + item.name} + refreshControl={ + + } + style={{minHeight: 300, width: '100%'}} + renderItem={({item}) => + { + console.log(IMG_URL + item.name + '.jpg') + }} + > + + + + {item.name} + + + + + {item.price}€ + + + } + /> + + + ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + alignItems: 'center', + justifyContent: 'center', + }, +}); diff --git a/screens/ProxiwashScreen.js b/screens/ProxiwashScreen.js new file mode 100644 index 0000000..f0b92a5 --- /dev/null +++ b/screens/ProxiwashScreen.js @@ -0,0 +1,24 @@ +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import {Container, Text} from 'native-base'; +import CustomHeader from "../components/CustomHeader"; + +export default class ProxiwashScreen extends React.Component { + render() { + const nav = this.props.navigation; + return ( + + + + ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + alignItems: 'center', + justifyContent: 'center', + }, +}); diff --git a/screens/SettingsScreen.js b/screens/SettingsScreen.js new file mode 100644 index 0000000..3ea5ced --- /dev/null +++ b/screens/SettingsScreen.js @@ -0,0 +1,56 @@ +import React from 'react'; +import {Alert} from 'react-native' +import {Badge, Container, Content, Icon, Left, ListItem, Right, Text, List, CheckBox} from "native-base"; +import CustomHeader from "../components/CustomHeader"; +import ThemeManager from '../utils/ThemeManager'; +import i18n from "i18n-js"; + + +const nightModeKey = 'nightMode'; + +export default class SettingsScreen extends React.Component { + state = { + nightMode: ThemeManager.getInstance().getNightMode(), + }; + + toggleNightMode() { + this.setState({nightMode: !this.state.nightMode}); + ThemeManager.getInstance().setNightmode(!this.state.nightMode); + Alert.alert(i18n.t('settingsScreen.nightMode'), i18n.t('settingsScreen.restart')); + + } + + render() { + const nav = this.props.navigation; + return ( + + + + + this.toggleNightMode()} + > + + + + {i18n.t('settingsScreen.nightMode')} + + + + this.toggleNightMode()}/> + + + + + + + ); + } +} diff --git a/translations/en.json b/translations/en.json new file mode 100644 index 0000000..71214ad --- /dev/null +++ b/translations/en.json @@ -0,0 +1,24 @@ +{ + "screens": { + "home": "Home", + "planning": "Planning", + "settings": "Settings", + "about": "About" + }, + "settingsScreen": { + "nightMode": "Night Mode", + "restart": "Restart the app to apply changes" + }, + "aboutScreen": { + "appstore": "See on the Appstore", + "playstore": "See on the Playstore", + "bugs": "Report Bugs", + "changelog": "Changelog", + "license": "License", + "author": "Author", + "mail": "Send an email", + "technologies": "Technologies", + "reactNative": "Made with React Native", + "libs": "Libraries used" + }, +} diff --git a/translations/fr.json b/translations/fr.json new file mode 100644 index 0000000..1cb581d --- /dev/null +++ b/translations/fr.json @@ -0,0 +1,24 @@ +{ + "screens": { + "home": "Accueil", + "planning": "Planning", + "settings": "Paramètres", + "about": "À Propos" + }, + "settingsScreen": { + "nightMode": "Mode Nuit", + "restart": "Redémarrez l'application pour appliquer les changements" + }, + "aboutScreen": { + "appstore": "Voir sur l'Appstore", + "playstore": "Voir sur le Playstore", + "bugs": "Rapporter des Bugs", + "changelog": "Historique des modifications", + "license": "Licence", + "author": "Auteur", + "mail": "Envoyer un mail", + "technologies": "Technologies", + "reactNative": "Créé avec React Native", + "libs": "Librairies utilisées" + } +} diff --git a/utils/LocaleManager.js b/utils/LocaleManager.js new file mode 100644 index 0000000..36eb711 --- /dev/null +++ b/utils/LocaleManager.js @@ -0,0 +1,23 @@ +import i18n from 'i18n-js'; +import * as Localization from 'expo-localization'; + +import en from '../translations/en'; +import fr from '../translations/fr'; + +export default class LocaleManager { + + static instance = null; + + static getInstance() { + if (LocaleManager.instance == null) { + LocaleManager.instance = new LocaleManager(); + } + return this.instance; + } + + initTranslations() { + i18n.fallbacks = true; + i18n.translations = {fr, en}; + i18n.locale = Localization.locale; + } +} diff --git a/utils/ThemeManager.js b/utils/ThemeManager.js new file mode 100644 index 0000000..07b5319 --- /dev/null +++ b/utils/ThemeManager.js @@ -0,0 +1,57 @@ +import {DefaultTheme} from 'react-native-paper'; +import {AsyncStorage} from 'react-native' +import platform from '../native-base-theme/variables/platform'; +import platformDark from '../native-base-theme/variables/platformDark'; +import getTheme from '../native-base-theme/components'; + +const nightModeKey = 'nightMode'; + +export default class ThemeManager { + + static instance = null; + + constructor() { + this.nightMode = false; + this.updateThemeCallback = undefined; + } + + static getInstance() { + if (ThemeManager.instance == null) { + ThemeManager.instance = new ThemeManager(); + } + return this.instance; + } + + setUpdateThemeCallback(callback) { + this.updateThemeCallback = callback; + console.log(this.updateThemeCallback); + + } + + async getDataFromPreferences() { + let result = await AsyncStorage.getItem(nightModeKey); + + if (result === '1') + this.nightMode = true; + console.log('nightmode: ' + this.nightMode); + } + + setNightmode(isNightMode) { + this.nightMode = isNightMode; + AsyncStorage.setItem(nightModeKey, isNightMode ? '1' : '0'); + if (this.updateThemeCallback !== undefined) + this.updateThemeCallback(); + } + + getNightMode() { + return this.nightMode; + } + + getCurrentTheme() { + if (this.nightMode) + return getTheme(platformDark); + else + return getTheme(platform); + } + +};