
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
react-native-good-ui
Advanced tools
You can use react-native-good-ui in android, ios, web based on react-native.
good UI that supports react-native based android, ios and web
# Enter commend in root directory at your react-native project
# If you want to use it in Web, refer to https://docs.expo.dev/versions/latest/sdk/reanimated/
yarn add react-native-reanimated
yarn add react-native-good-ui
import React, { useState } from 'react';
import { StyleSheet, ViewStyle } from 'react-native';
import {
Button,
Column,
Divider,
EdgeInsets,
Input,
Row,
Select,
Spacer,
Text,
ZIndex,
storage,
} from 'react-native-good-ui';
import {
useSharedValue,
useAnimatedStyle,
withSpring,
} from 'react-native-reanimated';
import type { AnimateStyle } from 'react-native-reanimated';
const storageKey = '@storage_test';
export default function App() {
const [storageValue, setStorageValue] = useState('');
React.useEffect(() => {
const fetch = async () => {
const aStorage = await storage.load(storageKey);
if (aStorage) {
setStorageValue(
`Storage Value : ${aStorage}, but it will be removed in the next run.`
);
await storage.remove(storageKey);
} else {
await storage.save(storageKey, 'hello world');
setStorageValue(
`Storage Value : null, but It will be present in the next run.`
);
}
};
fetch().then();
}, []);
const offset = useSharedValue(0);
const animatedStyles = useAnimatedStyle(() => {
return {
transform: [{ translateX: offset.value }],
} as AnimateStyle<ViewStyle>;
});
const body = (
<React.Fragment>
<Text preset={'header3'}>Components</Text>
<Spacer preset={'large'} />
<Text preset={'header5'}>Divider</Text>
<Divider />
<Divider text={'message'} textEdgeInsets={'medium'} />
<Column style={{ height: 200 }} alignItems={'center'}>
<Divider
direction={'vertical'}
text={'Message'}
textEdgeInsets={'small'}
/>
</Column>
<Divider direction={'vertical'} />
<Spacer preset={'huge'} />
<Text preset={'header5'}>Select</Text>
<Select
width={150}
options={['Option 1', 'Option 2', 'Option 3']}
style={{ zIndex: ZIndex.float + 1 }}
onSelect={(option) => console.log(option)}
/>
<Select
options={['옵션 1', '옵션 2', '옵션 3']}
onSelect={(option) => console.log(option)}
/>
<Spacer preset={'huge'} />
<Text preset={'header5'}>Button</Text>
<Button text={'Button'} onPress={() => console.log('onPress')} />
<Spacer preset={'huge'} />
<Text preset={'header5'}>Input</Text>
<Input placeholder={'입력'} />
<Spacer preset={'huge'} />
<Text preset={'header5'}>Storage</Text>
<Text>{storageValue}</Text>
<Spacer preset={'huge'} />
<Text preset={'header5'}>Animated View</Text>
<Spacer direction={'both'} preset={'medium'} />
<Row
animatable={true}
elevation={24}
round={'medium'}
roundShape={'all'}
style={[styles.box, animatedStyles]}
/>
<Spacer preset={'large'} />
<Button
onPress={() => {
offset.value = withSpring(Math.random() * 255);
}}
text={'Move'}
/>
<Spacer preset={'large'} />
<Text preset={'header5'}>Layout</Text>
<Spacer preset={'medium'} />
<Column
style={styles.layout1}
round={'medium'}
edgeInsets={EdgeInsets.fromVH('medium', 'medium')}
>
<Column style={styles.layout2} round={'small'} />
</Column>
<Spacer preset={'large'} />
<Text preset={'header5'}>Text</Text>
<Text preset={'header1'}>header1</Text>
<Text preset={'header2'}>header2</Text>
<Text preset={'header3'}>header3</Text>
<Text preset={'header4'}>header4</Text>
<Text preset={'header5'}>header5</Text>
<Text preset={'header6'}>header6</Text>
<Text preset={'subtitle1'}>subtitle1</Text>
<Text preset={'subtitle2'}>subtitle2</Text>
<Text preset={'body1'}>body1</Text>
<Text preset={'body2'}>body2</Text>
<Text preset={'caption'}>caption</Text>
<Text preset={'overline'}>overline</Text>
</React.Fragment>
);
return (
<Row>
<Column style={styles.container} edgeInsets={EdgeInsets.right('medium')}>
{body}
</Column>
<Column style={styles.container2}>{body}</Column>
</Row>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
flexShrink: 1,
alignItems: 'stretch',
backgroundColor: 'white',
},
container2: {
flex: 1,
flexShrink: 1,
alignItems: 'flex-start',
backgroundColor: 'white',
},
box: {
width: 100,
height: 100,
backgroundColor: '#6DB32A',
justifyContent: 'center',
alignItems: 'center',
},
layout1: {
backgroundColor: 'red',
width: 100,
height: 100,
},
layout2: {
backgroundColor: 'yellow',
width: 50,
height: 50,
},
});
See the contributing guide to learn how to contribute to the repository and the development workflow.
MIT
Made with create-react-native-library
FAQs
You can use react-native-good-ui in android, ios, web based on react-native.
The npm package react-native-good-ui receives a total of 2 weekly downloads. As such, react-native-good-ui popularity was classified as not popular.
We found that react-native-good-ui demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers 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.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.