reactstrap-native-web
v1.0.4
Published
This is project create support reactstrap on react native web
Downloads
11
Maintainers
Readme
ReactstrapNativeWeb
This is project create support library bootstrap on react native and react native web
Table of contents
- Installation
- Global Style
- Setup
- Document Structure Dynamic Theme
- Text Color
- Background Color
- Border Color
- Border Width
- Padding
- Margin
- Width and Height
- Display
- Overflow
- Position
- ZIndex
- Font Size
- Font Weight
- Letter Spacing
- Line Height
- Text Align
- Text Decoration
- Text Transform
- Flex Direction
- Flex Wrap
- Align Items
- Align Content
- Align Self
- Justify Content
- Flex
- Flex Grow
- Flex Shrink
- Container Component
- Row Component
- Col Component
- Image Component
- TextShadow Component
- Inspired by
- Contributing
- Author
- License
Installation
If using yarn:
yarn add reactstrap-native-web@beta
If using npm:
npm i reactstrap-native-web@beta
Global Style
Setup
- Create file styles any (recommended use name: theme.style.js or theme.style.ts if you use the typescript in a folder style)
- Load theme
default
ordynamic theme
you want.
And then you can import global style anywhereimport {buildTheme} from 'reactstrap-native-web'; import {StyleSheet} from 'react-native' const themes = buildTheme({ lightTheme: { spacer: 30, colors: { primary: 'red', }, }, }); export const bootstrap = StyleSheet.create(themes.default.styleSheet); export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
Note
: when we definecolors
variable for any theme will auto-generate text color, background color, and border color equivalent Beside aboutspacer
variable will auto-generate margin and padding equivalent please reference spacing - Theme defaults similar :root of bootstrap
export default { spacer: 16, colors: { blue: '#007bff', indigo: '#6610f2', purple: '#6f42c1', pink: '#e83e8c', red: '#dc3545', orange: '#fd7e14', yellow: '#ffc107', green: '#28a745', teal: '#20c997', cyan: '#17a2b8', white: '#fff', gray: '#6c757d', grayDark: '#343a40', primary: '#007bff', secondary: '#6c757d', success: '#28a745', info: '#17a2b8', warning: '#ffc107', danger: '#dc3545', light: '#f8f9fa', dark: '#343a40', }, };
Document Structure Dynamic Theme
| Name | Description | Default | Type | Required | |:-----|:------------|:--------|:-----|:---------| | colors | Define color for your dynamic theme or override theme default | None | Object | false | | spacer | Number present size please reference spacing | 16 | Number | false |
Text Color
- Generate when we setting
colors
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
text color
forlightTheme
:
import {StyleSheet} from "react-native";
StyleSheet.create({
textPrimary: {
color: 'red'
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.textPrimary}/>
);
}
Background Color
- Generate when we setting
colors
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
background color
forlightTheme
:
import {StyleSheet} from "react-native";
StyleSheet.create({
bgPrimary: {
backgroundColor: 'red'
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.bgPrimary}/>
);
}
Border Color
- Generate when we setting
colors
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
border color
forlightTheme
:
import {StyleSheet} from "react-native";
StyleSheet.create({
borderPrimary: {
borderColor: 'red',
},
borderFullPrimary: {
borderWidth: 1,
borderColor: 'red',
borderStyle: 'solid',
},
borderBottomPrimary: {
borderBottomColor: 'red',
borderBottomWidth: 1,
borderStyle: 'solid',
},
borderLeftPrimary: {
borderLeftColor: 'red',
borderLeftWidth: 1,
borderStyle: 'solid',
},
borderRightPrimary: {
borderRightColor: 'red',
borderRightWidth: 1,
borderStyle: 'solid',
},
borderTopPrimary: {
borderTopColor: 'red',
borderTopWidth: 1,
borderStyle: 'solid',
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.borderFullPrimary}/>
);
}
Border Width
- Generate when we setting
spacer
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
border width
forlightTheme
:
import {StyleSheet} from "react-native";
StyleSheet.create({
border0: {
borderWidth: 0,
},
borderB0: {
borderBottomWidth: 0,
},
borderE0: {
borderEndWidth: 0,
},
borderL0: {
borderLeftWidth: 0,
},
borderR0: {
borderRightWidth: 0,
},
borderS0: {
borderStartWidth: 0,
},
borderT0: {
borderTopWidth: 0,
},
borderX0: {
borderRightWidth: 0,
borderLeftWidth: 0,
},
borderY0: {
borderBottomWidth: 0,
borderTopWidth: 0,
},
... generate => spacer / 2 ,
border15: {
borderWidth: 15,
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.border3}/>
);
}
Padding
- Generate when we setting
spacer
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
padding
forlightTheme
according to the rate of spacing of the bootstrap
import {StyleSheet} from "react-native";
StyleSheet.create({
p0: {
padding: 0,
},
pb0: {
paddingBottom: 0,
},
pl0: {
paddingLeft: 0,
},
pt0: {
paddingTop: 0,
},
pr0: {
paddingRight: 0,
},
px0: {
paddingHorizontal: 0,
},
py0: {
paddingVertical: 0,
},
... generate => 5,
p5: {
padding: spacer * 3,
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.p3}/>
);
}
Margin
- Generate when we setting
spacer
- Example:
import {buildTheme} from 'reactstrap-native-web';
import {StyleSheet} from 'react-native'
const themes = buildTheme({
lightTheme: {
spacer: 30,
colors: {
primary: 'red',
},
},
});
export const bootstrap = StyleSheet.create(themes.default.styleSheet);
export const lightTheme = StyleSheet.create(themes.lightTheme.styleSheet);
- Auto generate
margin
forlightTheme
according to the rate of spacing of the bootstrap
import {StyleSheet} from "react-native";
StyleSheet.create({
m0: {
margin: 0,
},
mb0: {
marginBottom: 0,
},
ml0: {
marginLeft: 0,
},
mt0: {
marginTop: 0,
},
mr0: {
marginRight: 0,
},
mx0: {
marginHorizontal: 0,
},
my0: {
marginVertical: 0,
},
... generate => 5,
m5: {
margin: spacer * 3,
}
})
- we can access style in code the following:
export const ExampleComponent = () => {
return (
<View style={lightTheme.m3}/>
);
}
Width and Height
- Inspiration from library react-native-tailwindcss
Display
| Class | Properties |
|:-------|:-----------------|
| flex | display: 'flex' |
| hidden | display: 'none' |
Overflow
| Class | Properties | |:------------------|:----------------------| | overflowVisible | overflow: 'visible' | | overflowHidden | overflow: 'hidden' |
Position
| Class | Properties | |:----------|:------------------------------------------| | relative | position: 'relative' | | absolute | position: 'absolute' | | inset0 | top: 0, bottom: 0, left: 0, right: 0 | | insetY0 | top: 0, bottom: 0 | | insetX0 | left: 0, right: 0 | | top0 | top: 0 | | right0 | right: 0 | | bottom0 | bottom: 0 | | left0 | left: 0 |
ZIndex
| Class | Properties | |:------|:--------------| | z0 | zIndex: 0 | | z10 | zIndex: 10 | | z20 | zIndex: 20 | | z30 | zIndex: 30 | | z40 | zIndex: 50 | | z50 | zIndex: 50 |
Font Size
| Class | Properties | |:----------|:--------------| | textXs | fontSize: 12 | | textSm | fontSize: 14 | | textBase | fontSize: 16 | | textLg | fontSize: 18 | | textXl | fontSize: 20 | | text2xl | fontSize: 24 | | text3xl | fontSize: 30 | | text4xl | fontSize: 36 | | text5xl | fontSize: 48 | | text6xl | fontSize: 64 |
Font Weight
| Class | Properties | |:--------------|:----------------------| | fontHairline | fontWeight: 100 | | fontThin | fontWeight: 200 | | fontLight | fontWeight: 300 | | fontNormal | fontWeight: 'normal' | | fontMedium | fontWeight: 500 | | fontSemibold | fontWeight: 600 | | fontBold | fontWeight: 'bold' | | fontExtrabold | fontWeight: 800 | | fontBlack | fontWeight: 900 |
Letter Spacing
| Class | Properties | |:------------------|:----------------------| | trackingTighter | letterSpacing: -0.8 | | trackingTight | letterSpacing: -0.4 | | trackingNormal | letterSpacing: 0 | | trackingWide | letterSpacing: 0.4 | | trackingWider | letterSpacing: 0.8 | | trackingWidest | letterSpacing: 1.6 |
Line Height
| Class | Properties | |:------------------|:------------------| | leadingNone | lineHeight: 1 | | leadingTight | lineHeight: 1.25 | | leadingSnug | lineHeight: 1.375 | | leadingNormal | lineHeight: 1.5 | | leadingRelaxed | lineHeight: 1.625 | | leadingLoose | lineHeight: 2 |
Text Align
| Class | Properties | |:--------------|:----------------------| | textAuto | textAlign: auto | | textLeft | textAlign: left | | textRight | textAlign: right | | textCenter | textAlign: center | | textJustify | textAlign: justify |
Text Decoration
| Class | Properties | |:----------------------|:----------------------------------------------| | noUnderline | textDecorationLine: 'none' | | underline | textDecorationLine: 'underline' | | lineThrough | textDecorationLine: 'line-through' | | underlineLineThrough | textDecorationLine: 'underline line-through' |
Text Transform
| Class | Properties | |:--------------|:------------------------------| | normalCase | textTransform: 'none' | | uppercase | textTransform: 'uppercase' | | lowercase | textTransform: 'lowercase' | | capitalize | textTransform: 'capitalize' |
Flex Direction
| Class | Properties | |:------------------|:----------------------------------| | flexRow | flexDirection: 'row' | | flexRowReverse | flexDirection: 'row-reverse' | | flexCol | flexDirection: 'column' | | flexColReverse | flexDirection: 'column-reverse' |
Flex Wrap
| Class | Properties | |:------------------|:--------------------------| | flexWrap | flexWrap: 'wrap' | | flexWrapReverse | flexWrap: 'wrap-reverse' | | flexNoWrap | flexWrap: 'nowrap' |
Align Items
| Class | Properties | |:------------------|:--------------------------| | itemsStart | alignItems: 'flex-start' | | itemsEnd | alignItems: 'flex-end' | | itemsCenter | alignItems: 'center' | | itemsStretch | alignItems: 'stretch' | | itemsBaseline | alignItems: 'baseline' |
Align Content
| Class | Properties | |:------------------|:------------------------------| | contentStart | alignContent: 'flex-start' | | contentEnd | alignContent: 'flex-end' | | contentCenter | alignContent: 'center' | | contentStretch | alignContent: 'stretch' | | contentBetween | alignContent: 'space-between' | | contentAround | alignContent: 'space-around' |
Align Self
| Class | Properties | |:--------------|:--------------------------| | selfAuto | alignSelf: 'auto' | | selfStart | alignSelf: 'flex-start' | | selfEnd | alignSelf: 'flex-end' | | selfCenter | alignSelf: 'center' | | selfStretch | alignSelf: 'stretch' | | selfBaseline | lignSelf: 'baseline' |
Justify Content
| Class | Properties | |:------------------|:----------------------------------| | justifyStart | justifyContent: 'flex-start' | | justifyEnd | justifyContent: 'flex-end' | | justifyCenter | justifyContent: 'center' | | justifyBetween | justifyContent: 'space-between' | | justifyAround | justifyContent: 'space-around' | | justifyEvenly | justifyContent: 'space-evenly' |
Flex
| Class | Properties | |:---------|:-----------| | flexNone | flex: 0 | | flexAuto | flex: 1 |
Flex Grow
| Class | Properties | |:--------------|:------------------| | flexGrow | flexGrow: 1 | | flexGrowNone | flexGrow: 0 |
Flex Shrink
| Class | Properties | |:------------------|:------------------| | flexShrink | flexShrink: 1 | | flexShrinkNone | flexShrink: 0 |
Container
Component
Usage
import {Container} from 'reactstrap-native-web';
Document
| Name | Description | Default | Type | Required | |:----------|:----------------------------------------------------------------------------------|:--------|:--------|:---------| | fluid | Type container you want: "sm", "md", "lg", "xl", true You can reference link Container bootstrap to know use them | false | String or Boolean | false | | debug | Support debug for container component ( add border around container component ) | false | Boolean | false |
Example with default container and enable debug
import React from 'react';
import {View, Text} from 'react-native';
import {Container} from 'reactstrap-native-web';
export const ContainerWithDebug = () => {
return (
<Container debug>
<View>
<Text>Container</Text>
</View>
</Container>
);
};
| On Web | On IOS | On Android | |:------------------------------------------------------------------------------------------------------------------------------------------ |:---------------------------------------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------:| | containerWithDebug.js | containerWithDebug.js | containerWithDebug.js |
Row
Component
Usage
import {Row} from 'reactstrap-native-web';
Document
Col
Component
Usage
import {Col} from 'reactstrap-native-web';
Document
| Name | Description | Default | Type | Required | |:--------|:----------------------------------------------------------------------------------|:--------|:--------|:---------| | col | Number column: [1...12] or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | true | | sm | Number column: [1...12] or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | false | | md | Number column: [1...12] or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | false | | xl | Number column: [1...12] or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | false | | lg | Number column: [1...12] or 'auto' or object: {size: number, offset: number} You can reference link Column Reactstrap | None | String or Number or Object | false | | debug | Support debug | false | Boolean | false |
Example
import React from 'react';
import {Text} from 'react-native';
import {Container, Row, Col} from 'reactstrap-native-web';
export const TestColumn = () => {
return (
<Container fluid>
<Row>
<Col
col={{size: '3', offset: '1'}}
sm={{size: '6', offset: '0'}}
md={{size: '4', offset: '0'}}
debug>
<Text>Col 6</Text>
</Col>
<Col
col={{size: 7, offset: '1'}}
sm={{size: 6, offset: '0'}}
md={{size: 7, offset: '1'}}
debug>
<Text>Col 6</Text>
</Col>
</Row>
</Container>
);
};
| On Web | On IOS | On Android | |:------------------------------------------------------------------------------------------------------------------------------------------ |:---------------------------------------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------:| | demo.js | demo.js | demo.js |
Image
Component
Usage
import {Image} from 'reactstrap-native-web';
Document
Use library react-native-fit-image
Example
Please reference link react-native-fit-image
TextShadow Component
Usage
import {TextShadow} from 'reactstrap-native-web';
Document
| Name | Description | Default | Type | Required | |:----------|:----------------------|:--------------|:-------|:---------| | children | string text shadow | Text Shadow | String | false | | style | style for text Text Style | None | TextStyleProps | false | | textShadow| string shadow as css text shadow | None | String | true |
Example
import {TextShadow} from 'reactstrap-native-web';
export const TextShadowDemo = () => {
return (
<View style={{flex: 1, backgroundColor: "#232323"}}>
<TextShadow textShadow={'0 0 5px #FFF, 0 0 10px #FFF, 0 0 15px #FFF, 0 0 20px #49ff18, 0 0 30px #49FF18, 0 0 40px #49FF18, 0 0 55px #49FF18, 0 0 75px #49ff18'} style={{color: "#FFFFFF"}} />
</View>
);
};
| On Android | On IOS | |:-----------|:-------| | | |
Inspired by
Contributing
Pull requests are always welcome! Feel free to open a new GitHub issue for any changes that can be made.
Working on your first Pull Request? You can learn how from this free series How to Contribute to an Open Source Project on GitHub
Author
Pham Minh Hai Au