diff --git a/.flowconfig b/.flowconfig
index c6f0b5b..a493b62 100644
--- a/.flowconfig
+++ b/.flowconfig
@@ -28,6 +28,7 @@
.*/example/node_modules/fbjs
.*/example/node_modules/react
.*/example/node_modules/react-native
+.*/example/node_modules/exponent
.*/example/\.buckd/
[include]
@@ -50,6 +51,7 @@ experimental.strict_type_args=true
munge_underscores=true
+module.name_mapper='^exponent$' -> 'emptyObject'
module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub'
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
diff --git a/example/main.js b/example/main.js
index d8c3ad1..cd15f0e 100644
--- a/example/main.js
+++ b/example/main.js
@@ -1,27 +1,24 @@
-import Exponent from 'exponent';
-import React from 'react';
-import {
- StyleSheet,
- Text,
- View,
-} from 'react-native';
+/* @flow */
-class App extends React.Component {
+import Exponent from 'exponent';
+import React, { Component } from 'react';
+import {
+ NavigationProvider,
+ StackNavigation,
+} from '@exponent/ex-navigation';
+import { ThemeProvider } from 'react-native-paper';
+import Router from './src/Router';
+
+class App extends Component {
render() {
return (
-
- React Native Paper will rock :D
-
+
+
+
+
+
);
}
}
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- marginTop: 24,
- alignItems: 'center',
- },
-});
-
Exponent.registerRootComponent(App);
diff --git a/example/package.json b/example/package.json
index bd87232..c4e8a50 100644
--- a/example/package.json
+++ b/example/package.json
@@ -6,6 +6,8 @@
"private": true,
"main": "main.js",
"dependencies": {
+ "@exponent/ex-navigation": "^1.7.0",
+ "@exponent/vector-icons": "^1.0.4",
"exponent": "^10.0.4",
"react": "~15.3.2",
"react-native": "github:exponentjs/react-native#sdk-10.1.2",
diff --git a/example/src/ExampleList.js b/example/src/ExampleList.js
new file mode 100644
index 0000000..3ad6b86
--- /dev/null
+++ b/example/src/ExampleList.js
@@ -0,0 +1,52 @@
+/* @flow */
+
+import React, { Component } from 'react';
+import {
+ View,
+ Text,
+ StyleSheet,
+} from 'react-native';
+import { Colors, TouchableRipple } from 'react-native-paper';
+import RipplesExample from './RipplesExample';
+
+export const examples = {
+ ripples: RipplesExample,
+};
+
+export default class ExampleList extends Component {
+
+ static route = {
+ navigationBar: {
+ title: 'Examples',
+ },
+ };
+
+ render() {
+ return (
+
+ {Object.keys(examples).map(id => (
+ this.props.navigator.push(id)}
+ >
+ {examples[id].title}
+
+ ))}
+
+ );
+ }
+}
+
+const styles = StyleSheet.create({
+ item: {
+ padding: 16,
+ borderBottomColor: Colors.grey300,
+ borderBottomWidth: StyleSheet.hairlineWidth,
+ },
+
+ text: {
+ fontSize: 16,
+ fontWeight: 'bold',
+ },
+});
diff --git a/example/src/RipplesExample.js b/example/src/RipplesExample.js
new file mode 100644
index 0000000..d3eb0e1
--- /dev/null
+++ b/example/src/RipplesExample.js
@@ -0,0 +1,12 @@
+/* @flow */
+
+import { Component } from 'react';
+
+export default class RipplesExample extends Component {
+
+ static title = 'Ripples';
+
+ render() {
+ return null;
+ }
+}
diff --git a/example/src/Router.js b/example/src/Router.js
new file mode 100644
index 0000000..56a90e0
--- /dev/null
+++ b/example/src/Router.js
@@ -0,0 +1,32 @@
+/* @flow */
+
+import React from 'react';
+import {
+ createRouter,
+} from '@exponent/ex-navigation';
+import ExampleList, { examples } from './ExampleList';
+
+const routes = Object.keys(examples)
+ .map(id => ({ id, item: examples[id] }))
+ .reduce((acc, { id, item }) => {
+ const Comp = item;
+ const Screen = props => ;
+
+ Screen.route = {
+ navigationBar: {
+ title: Comp.title,
+ }
+ };
+
+ return {
+ ...acc,
+ [id]: () => Screen,
+ };
+ }, {});
+
+const Router = createRouter(() => ({
+ home: () => ExampleList,
+ ...routes,
+}));
+
+export default Router;
diff --git a/index.js b/index.js
index 0e6f3c6..378a1d3 100644
--- a/index.js
+++ b/index.js
@@ -1,3 +1,7 @@
-// @flow
-export { default as ThemeProvider } from './src/styles/ThemeProvider';
-export { default as TouchableRipple } from './src/TouchableRipple';
+/* @flow */
+
+export { default as ThemeProvider } from './src/core/ThemeProvider';
+
+export * as Colors from './src/styles/colors.js';
+
+export { default as TouchableRipple } from './src/components/TouchableRipple';
diff --git a/src/TouchableRipple/TouchableRipple.android.js b/src/TouchableRipple/TouchableRipple.android.js
deleted file mode 100644
index 078ab9f..0000000
--- a/src/TouchableRipple/TouchableRipple.android.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// @flow
-import React, {
- Component,
- PropTypes,
- Platform,
-} from 'react';
-import {
- TouchableNativeFeedback,
- View,
-} from 'react-native';
-
-export default class TouchableRipple extends Component {
-
- static propTypes = {
- children: PropTypes.element.isRequired,
- borderless: PropTypes.bool,
- onPress: PropTypes.func,
- rippleColor: PropTypes.string,
- style: View.propTypes.style,
- };
- static defaultProps = {
- borderless: false,
- }
-
- render() {
- const {
- children,
- onPress,
- rippleColor,
- borderless,
- style,
- } = this.props;
- return (
- = 21 ?
- TouchableNativeFeedback.Ripple(rippleColor, borderless) :
- TouchableNativeFeedback.SelectableBackground()}
- >
-
- {children}
-
-
- );
- }
-}
diff --git a/src/TouchableRipple/index.js b/src/TouchableRipple/index.js
deleted file mode 100644
index 94fbe43..0000000
--- a/src/TouchableRipple/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export default from './TouchableRipple';
diff --git a/src/components/TouchableRipple/TouchableRipple.android.js b/src/components/TouchableRipple/TouchableRipple.android.js
new file mode 100644
index 0000000..aacc033
--- /dev/null
+++ b/src/components/TouchableRipple/TouchableRipple.android.js
@@ -0,0 +1,61 @@
+/* @flow */
+
+import React, {
+ Component,
+ PropTypes,
+} from 'react';
+import {
+ TouchableNativeFeedback,
+ View,
+ Platform,
+} from 'react-native';
+
+type Props = {
+ borderless: boolean;
+ onPress?: ?Function;
+ rippleColor?: string;
+ children?: any;
+ style?: any;
+}
+
+type DefaultProps = {
+ borderless: boolean;
+}
+
+export default class TouchableRipple extends Component {
+
+ static propTypes = {
+ children: PropTypes.element.isRequired,
+ borderless: PropTypes.bool,
+ onPress: PropTypes.func,
+ rippleColor: PropTypes.string,
+ style: View.propTypes.style,
+ };
+
+ static defaultProps = {
+ borderless: false,
+ }
+
+ render() {
+ const {
+ children,
+ onPress,
+ rippleColor,
+ borderless,
+ style,
+ } = this.props;
+
+ return (
+ = 21 ?
+ TouchableNativeFeedback.Ripple(rippleColor, borderless) :
+ TouchableNativeFeedback.SelectableBackground()}
+ >
+
+ {children}
+
+
+ );
+ }
+}
diff --git a/src/TouchableRipple/TouchableRipple.js b/src/components/TouchableRipple/TouchableRipple.js
similarity index 54%
rename from src/TouchableRipple/TouchableRipple.js
rename to src/components/TouchableRipple/TouchableRipple.js
index 9db41cf..110e3dd 100644
--- a/src/TouchableRipple/TouchableRipple.js
+++ b/src/components/TouchableRipple/TouchableRipple.js
@@ -1,4 +1,5 @@
-// @flow
+/* @flow */
+
import React, {
Component,
PropTypes,
@@ -8,15 +9,28 @@ import {
View,
} from 'react-native';
-export default class TouchableRipple extends Component {
+type Props = {
+ borderless: boolean;
+ onPress?: ?Function;
+ rippleColor?: string;
+ children?: any;
+ style?: any;
+}
+
+type DefaultProps = {
+ borderless: boolean;
+}
+
+export default class TouchableRipple extends Component {
static propTypes = {
- children: PropTypes.element.isRequired,
borderless: PropTypes.bool,
onPress: PropTypes.func,
rippleColor: PropTypes.string,
+ children: PropTypes.element.isRequired,
style: View.propTypes.style,
};
+
static defaultProps = {
borderless: false,
}
@@ -28,14 +42,15 @@ export default class TouchableRipple extends Component {
rippleColor,
style,
} = this.props;
+
return (
-
- {children}
-
+
+ {children}
+
);
}
}
diff --git a/src/components/TouchableRipple/index.js b/src/components/TouchableRipple/index.js
new file mode 100644
index 0000000..ca477b1
--- /dev/null
+++ b/src/components/TouchableRipple/index.js
@@ -0,0 +1,3 @@
+/* @flow */
+
+export { default as default } from './TouchableRipple';
diff --git a/src/core/ThemeProvider.js b/src/core/ThemeProvider.js
new file mode 100644
index 0000000..e3c4e0e
--- /dev/null
+++ b/src/core/ThemeProvider.js
@@ -0,0 +1,31 @@
+/* @flow */
+
+import {
+ Component,
+ PropTypes,
+ Children,
+} from 'react';
+import DefaultTheme from '../styles/DefaultTheme';
+
+export default class ThemeProvider extends Component {
+
+ static propTypes = {
+ children: PropTypes.node.isRequired,
+ theme: PropTypes.object,
+ };
+
+ static childContextTypes = {
+ theme: PropTypes.object,
+ };
+
+ getChildContext() {
+ return {
+ theme: this.props.theme || DefaultTheme,
+ };
+ }
+
+ render() {
+ return Children.only(this.props.children);
+ }
+}
+
diff --git a/src/styles/DefaultTheme.js b/src/styles/DefaultTheme.js
index a0618ec..53c4b33 100644
--- a/src/styles/DefaultTheme.js
+++ b/src/styles/DefaultTheme.js
@@ -6,12 +6,8 @@ import {
pinkA200,
} from './colors';
-const DefaultTheme = () => {
- return {
- primaryColor: indigo500,
- primaryDarkColor: indigo700,
- accentColor: pinkA200,
- };
+export default {
+ primaryColor: indigo500,
+ primaryDarkColor: indigo700,
+ accentColor: pinkA200,
};
-
-export default DefaultTheme;
diff --git a/src/styles/ThemeProvider.js b/src/styles/ThemeProvider.js
deleted file mode 100644
index 94f04dd..0000000
--- a/src/styles/ThemeProvider.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// @flow
-
-import {
- Component,
- PropTypes,
-} from 'react';
-import DefaultTheme from './DefaultTheme';
-
-
-class ThemeProvider extends Component {
-
- static propTypes = {
- children: PropTypes.element,
- theme: PropTypes.object,
- };
-
- static childContextTypes = {
- theme: PropTypes.object,
- };
-
- getChildContext() {
- return {
- theme: this.props.theme || DefaultTheme(),
- };
- }
-
- render() {
- return this.props.children;
- }
-}
-
-export default ThemeProvider;
diff --git a/src/styles/colors.js b/src/styles/colors.js
index 31551f2..5d234af 100644
--- a/src/styles/colors.js
+++ b/src/styles/colors.js
@@ -1,3 +1,5 @@
+/* @flow */
+
export const red50 = '#ffebee';
export const red100 = '#ffcdd2';
export const red200 = '#ef9a9a';