
Product
Rust Support Now in Beta
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
react-native-boxes
Advanced tools
A simple to use react library that does all the UI heavy lifting for you so that you can focus on value and not code !
Out-of-the box comes with:
npm install react-native-boxes
Make sure you have following dependencies installed. The versions can be any satisfying version but must not have any breaking changes.
"@expo/vector-icons": "^13.0.0",
"react": "^18.2.0",
"@react-native-async-storage/async-storage": "1.23.1",
"react-native": "^0.73.6",
"react-native-safe-area-context": "^4.9.0",
"react-native-gesture-handler":"~2.14.0"
At the root of your app you must add a theme context and thats it! You are good to go.
import { Colors, DarkColors, Theme } from 'react-native-boxes';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
export default function App(){
const colorScheme = 'dark'
const theme = new Theme('my-app', colorScheme === 'dark' ? DarkColors : Colors);
return (
<ThemeContext.Provider value={theme} >
<GestureHandlerRootView>
<WatchlistPage />
</GestureHandlerRootView>
</ThemeContext.Provider>
)
}
Optional: If you are also gonna use bottomsheets, Add GestureHandlerRootView
Dark colors and Light colors come out of the box.
Dark Colors
Light Colors
import { Colors, Theme } from 'react-native-boxes';
...
const MyColors = Object.assign(Colors, {
accent: '#086CFE',
accentLight: '#337DFF',
text: '#444444',
caption: '#A9A9A9',
heading: '#222222',
background: '#E6E6E6',
forground: '#fff',
transparent: 'transparent',
semitransparent: '#111a1a1c',
info: '#2196F3',
success: '#4CAF50',
successBackground: '#388E3C',
warning: '#FFA726',
critical: '#F44336',
invert: {
text: '#fff',
caption: '#fff',
heading: '#fff',
background: '#1a1a1c'
}
})
const theme = new Theme('my-app', MyColors);
return (
<ThemeContext.Provider value={theme} >
<WatchlistPage />
</ThemeContext.Provider>
)
You can also customize sizes, dimensions etc, but it is not recommended.
const theme = new Theme(
appname = '',
colors ,
dimens ,
fonts ,
styles ,
)
Your root tag for pages. Consists of vertical alignment and some basic padding.
<VPage>
<Title>Watchlist1</Title>
</VPage>
<Center>
<Title>Watchlist</Title>
<Caption>Coming soon </Caption>
</Center>
<VBox>
<Title>Watchlist</Title>
<Caption>Coming soon </Caption>
</VBox>
<HBox>
<Title>Watchlist1</Title>
<Title>Watchlist2</Title>
</HBox>
<Title>Watchlist Title</Title>
<TextView>
This is a text with a simple example from a watchlist screen. You can add stocks to your watchlist and see their performance. You can also add alerts to get notified when a stock reaches a certain price.
</TextView>
<Subtitle>This is a subtitle for watchlist</Subtitle>
<TitleText>
This is a title text that explains what a watchlist is.
</TitleText>
<TextView>
A watchlist is a list of stocks that you are interested in.
</TextView>
<TitleText>
This is a another title text that explains what a watchlist is.
</TitleText>
<TextView>
A watchlist is a list of stocks that you are interested in.
</TextView>
<Caption>
This is a caption. All investments are subject to market risk. Please do your own research before investing in any stock. This app is for educational purposes only.
</Caption>
<Avatar iconName='user' />
<Avatar iconUrl='https://avatars.githubusercontent.com/u/16799797?v=4' />
<Avatar iconText='SN' />
Support for Fontawesome icon names from https://icons.expo.fyi/
<Icon name='home' size={50} />
<Title>Light Theme Watchlist</Title>
<ButtonView text='Simple Button' />
<TransparentButton text='Transparent Button' />
const [loading, setLoading] = useState(false)
<LoadingButton loading={loading} text='Loading Button' onPress={() => {
setLoading((prev) => !prev)
}} />
export default function AppBottomBar() {
const theme = useContext(ThemeContext)
const router = useRouter()
const [selectedId, setSelectedId] = React.useState('watchlist')
return (
<BottomNavBar
selectedId={selectedId}
options={[
{
id: 'watchlist',
icon: 'bookmark',
title: 'Watchlist'
},
{
id: 'orders',
icon: 'file-text',
title: 'Orders'
},
{
id: 'positions',
icon: 'briefcase',
title: 'Positions'
},
{
id: 'settings',
icon: 'gears',
title: 'Settings'
}
]}
onSelect={(selectedId) => {
console.log('selected', selectedId)
setSelectedId(selectedId)
router.push('/explore')
}} />
)
}
<Expand title='Expand Watchlist' >
<TextView>INFY</TextView>
<TextView>TCS</TextView>
</Expand>
<SimpleToolbar title="Watchlist" />
<SimpleToolbar title="Watchlist" />
<TransparentCenterToolbar
homeIcon={"arrow-left"}
title="Watchlist"
options={[{
id: 'search',
icon: 'search',
onClick: () => {
console.log('Search clicked')
}
}]}
/>
<Expand title='Expand Watchlist' >
<TextView>INFY</TextView>
<TextView>TCS</TextView>
</Expand>
<BottomSheet title="Bottomsheet About Watchlists" visible={showDialog} onDismiss={() => setShowDialog(false)}>
<TextView>
This is a simple dialog that can be used to show more information to the user. It is a bottom sheet that can host any content.
</TextView>
<HBox />
<TextView>
Watchlists are a great way to keep track of your favorite stocks. You can add stocks to your watchlist and see their performance. You can also add alerts to get notified when a stock reaches a certain price.
</TextView>
<TertiaryButtonView text='Goto Watchlist' onPress={() => setShowDialog(false)} />
</BottomSheet>
Opens a webview on native and a iframe
on Web
<WebBrowserView url='https://www.google.com' title='Google'/>
Install your favorite js library.
import { I18n } from 'i18n-js';
const I18nProvider = new I18n({
en: {
watchlist: {
hello: 'Hello!'
}
},
hi: {
watchlist: {
hello: 'नमस्ते !'
}
},
hinglish: {
watchlist: {
hello: 'Namaste !'
}
},
es: {
watchlist: {
hello: 'Hola!'
}
}
});
I18nProvider.missingBehavior = "guess";
export default function App(){
const [locale, setLocale] = useState('en')
I18nProvider.locale = locale
const theme = new Theme('appname', colorScheme === 'dark' ? DarkColors : Colors);
theme.i18n = I18nProvider
return (
<ThemeContext.Provider value={theme} >
<Center>
<Title>watchlist.hello</Title>
</Center>
<Center>
<HBox>
<TransparentButton text='English' onPress={() => {
setLocale('en')
}} />
<TransparentButton text='Hindi' onPress={() => {
setLocale('hi')
}} />
</HBox>
<HBox>
<TransparentButton text='Hinglish' onPress={() => {
setLocale('hinglish')
}} />
<TransparentButton text='Spanish' onPress={() => {
setLocale('es')
}} />
</HBox>
</Center>
</ThemeContext.Provider>
)
}
If you wanna track the users clicks and impressions on each component, just add a onTrack
hook to your theme.
action : TrackingActionType = click | view | navigate
view : TrackingViewType = button | dropdown...
text : The text related to the component if present
extra : Depending on component, some contextual info. For e.g. the WebView impression gives {url, title} extra
const theme = new Theme('appname', DarkColors);
theme.onTrack = (action, view, text, extras) => {
myTracker.track(`${action}-${text}-${text}`, extras)
}
FAQs
A react native library for rapid development of UI using boxes
We found that react-native-boxes demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.