A customizable UI component library for react-native and expo
npm i react-native-unicorn
Component | Description |
---|---|
Accordion | A customizable accordion-style list component for React Native applications. It allows you to display a list of items with expandable content sections. |
Avatar | A customizable image component for displaying user avatars or other images in different shapes and sizes. |
Bar Graph | A customizable bar graph component that allows you to display a bar graph. |
Bouncing Dots | A customizable loading animation component for that displays a series of dots bounce in a sequence |
Card | A customizable card component that allows you to display content within a styled card layout. |
Carousel | A customizable carousel component that allows you to display a list of items in a horizontally scrollable carousel layout. |
Checkbox | A customizable checkbox component allows you to display a checkbox with a label. |
Circular Graph | A a customizable circular graph component that allows you to display a circular progress graph with an optional percentage label in the center. |
Countdown Timer | A is a customizable countdown component that allows you to display a countdown timer that triggers a callback function when the time is up. |
Counter Box | A customizable counter component that allows you to display a counter with increment and decrement buttons. |
Input | A customizable Text Input component that allows you to display a text input field with optional icon, placeholder, and custom styles. |
DropDown | A customizable dropdown component that displays a dropdown list with selectable options, each of which can have an optional icon. |
Grid | A customizable grid component that displays a table-like structure with rows and columns. |
OTP Input | A customizable One-Time Password (OTP) input component that displays a series of input fields for OTP entry. |
Password Input | A customizable password input component. |
Phone Input | A customizable phone number component that allows you to display a phone number input field with an integrated country code picker |
Radio Button | A customizable radio button that allows you to display a group of radio buttons with selectable options. |
Vertical Stepper | A customizable vertical stepper component. |
The Accordion
component is a versatile, customizable accordion-style list component for React Native applications. It allows you to display a list of items with expandable content sections.
The component accepts the following props:
Props | Description |
---|---|
data | An array of objects, where each object represents an accordion item. Each object should have the following properties:
|
viewStyle | A string representing additional Tailwind CSS classes to be applied to the accordion item container. |
textStyle | A TextStyle object for customizing the style of the accordion item title. It uses default css |
dividerColor | A string representing the color of the divider line that appears when an accordion item is expanded. |
pageSize | A number representing the number of accordion items to be displayed per page. If this prop is provided, pagination buttons will be displayed. |
import Accordion from 'react-native-unicorn/accordion'
<Accordion
data={[
{
title: 'First Item',
component: <Text>First Item Content</Text>,
expanded: false,
},
{
title: 'Second Item',
component: <Text>Second Item Content</Text>,
expanded: false,
},
]}
viewStyle="bg-white"
textStyle={{ color: 'blue' }}
dividerColor="red"
pageSize={5}
pageButtonStyle="bg-blue-500"
/>
The Avatar
component is a customizable image component for React Native applications. It allows you to display user avatars or other images in different shapes and sizes.
The component accepts the following props:
Props | Description |
---|---|
source | The image source for the avatar. This can be a local asset or a URL to a remote image. |
variant | The shape of the avatar. This can be one of the following::
|
size | The size of the avatar in pixels. This will determine both the width and the height of the avatar. |
style | Additional Tailwind CSS classes to be applied to the avatar. |
import Avatar from 'react-native-unicorn/avatar'
<Avatar
source={{ uri: 'https://example.com/avatar.jpg' }}
variant="circle"
size={100}
style="bg-blue-500"
/>
The BarGraph
component is a customizable bar graph component for React Native applications. It allows you to display a bar graph with different statuses based on the percentage provided.
The component accepts the following props:
Props | Description |
---|---|
percentage | A number representing the percentage to be displayed by the bar graph. This value should be between 0 and 100. |
barColor | An optional string representing the color of the active bars in the graph. If not provided, the default color will be used. |
inactiveColor | An optional string representing the color of the inactive bars in the graph. If not provided, the default color will be used. |
import BarGraph from 'react-native-unicorn/bar-graph'
<BarGraph
percentage={75}
barColor="[#E4959E]"
inactiveColor="neutral-100"
/>
The BouncingDots
component is a customizable loading animation component that displays a series of dots that bounce in a sequence, creating a smooth loading animation.
The component accepts the following props:
Props | Description |
---|---|
dots | The number of dots to display. Default is 3. |
colors | An array of colors for the dots. |
size | The size of the dots in pixels. Default is 10. |
bounceHeight | The height of the bounce in pixels. Default is 10. |
borderRadius | The border radius of the dots. If not provided, the dots will be circular. |
components | An array of custom components to use instead of dots. |
import BouncingDots from 'react-native-unicorn/dots'
<BouncingDots
dots={5}
colors={['red', 'green', 'blue', 'yellow', 'purple']}
size={15}
bounceHeight={15}
/>
The Card
component is a customizable card component that allows you to display content within a styled card layout.
The component accepts the following props:
Props | Description |
---|---|
children | The content to be displayed within the card. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the card. |
props | Any additional props to be passed to the underlying TouchableOpacity component. |
import Card from 'react-native-unicorn/card'
<Card viewStyle={'p-2 m-4 justify-center flex-1'}>
<View style={{ height: 50, justifyContent: 'center' }}>
<Text>This is a card.</Text>
</View>
</Card>
The Carousel
component is a customizable carousel component that allows you to display a list of items in a horizontally scrollable carousel layout.
The component accepts the following props:
Props | Description |
---|---|
data | An array of items to be displayed in the carousel. |
renderComponent | The component to be rendered in ths carousel |
autoplayInterval | An optional number representing the interval (in milliseconds) at which the carousel should automatically scroll to the next item. Default is 3000 (3 seconds). |
import Carousel from 'react-native-unicorn/dots'
<Carousel
data={[{ title: 'Item 1' }, { title: 'Item 2' }, { title: 'Item 3' }]}
renderComponent={(item, index) => <Text>{item.title}</Text>}
autoplayInterval={5000}
/>
The Checkbox
component is a customizable checkbox component that allows you to display a list of items in a horizontally scrollable checkbox layout.
The component accepts the following props:
Props | Description |
---|---|
label | The label to be displayed next to the checkbox. |
onSelect | A function that is called when the checkbox is selected or deselected. The function receives a boolean argument indicating whether the checkbox is checked. |
isChecked | An optional boolean indicating whether the checkbox is initially checked. Default is false. |
color | An optional string representing the color of the checkbox when it is checked. If not provided, the default color is used. |
width | An optional string representing the width of the checkbox. If not provided, the default width is '100%'. |
textStyle | An optional TextStyle object for customizing the style of the label. |
import Checkbox from 'react-native-unicorn/checkbox';
<View
style={{
width: Dimensions.get('window').width,
padding: 5,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
}}
>
<Checkbox
label={'Default Checked'}
onSelect={() => {}}
color="blue-500"
isChecked={true}
/>
<Checkbox
label={'Default Unchecked'}
onSelect={() => {}}
color="red-500"
isChecked={false}
/>
</View>
The CircularGraph
component is a customizable circularGraph component that allows you to display a list of items in a horizontally scrollable circularGraph layout.
The component accepts the following props:
Props | Description |
---|---|
percentage | A number representing the percentage to be displayed by the circular graph. This value should be between 0 and 100. |
radius | The radius of the circular graph in pixels. |
strokeWidth | The width of the stroke used to draw the circular graph in pixels. |
strokeColor | An optional string representing the color of the progress stroke. If not provided, the default color is used. |
displayText | An optional boolean indicating whether to display the percentage text in the center of the graph. Default is false. |
import CircularGraph from 'react-native-unicorn/circular-graph';
<View
style={{
width: Dimensions.get('window').width,
padding: 5,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
}}
>
<CircularGraph
percentage={25}
radius={35}
strokeWidth={12}
strokeColor="#048BA8"
displayText={true}
/>
<CircularGraph
strokeColor="#F18F01"
percentage={35}
radius={35}
strokeWidth={12}
displayText={true}
/>
<CircularGraph
percentage={75}
radius={35}
strokeWidth={12}
displayText={true}
/>
</View>
The Countdown
component is a customizable countdown component that allows you to display a countdown timer that triggers a callback function when the time is up.
The component accepts the following props:
Props | Description |
---|---|
seconds | The initial number of seconds for the countdown. |
onTimeUp | A function that is called when the countdown reaches zero. |
textStyle | An optional TextStyle object for customizing the style of the countdown text. |
import Countdown from 'react-native-unicorn/countdown';
<View
style={{
width: Dimensions.get('window').width,
padding: 5,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
}}
>
<Countdown
seconds={120}
onTimeUp={() => {
Alert.alert("Time's up!");
}}
/>
</View>
The CounterBox
component is a customizable CounterBox component that allows you to display a counter with increment and decrement buttons.
The component accepts the following props:
Props | Description |
---|---|
onTextChanged | A function that is called when the counter value changes. The function receives the new counter value as a string. |
counterValue | An optional number representing the initial value of the counter. Default is 1. |
title | An optional string representing the title to be displayed above the counter. |
textStyle | An optional TextStyle object for customizing the style of the counter text. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the counter. |
import CounterBox from 'react-native-unicorn/counterBox';
<View
style={{
width: Dimensions.get('window').width,
padding: 5,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
}}
>
<CounterBox
onTextChanged={(value) => console.log(`Counter value is ${value}`)}
counterValue={10}
title="Quantity"
textStyle={{ fontSize: 20 }}
viewStyle="bg-red-500"
/>
</View>
The CustomInput
component is a customizable TextInput component that allows you to display a text input field with optional icon, placeholder, and custom styles.
The component accepts the following props:
Props | Description |
---|---|
onTextChange | A function that is called when the text in the input field changes. The function receives the new text as a string. |
variant | A string representing the variant of the input field. This determines the height and multiline property of the input field. The accepted values are 'small', 'medium', and 'large'. |
placeholder | A string representing the placeholder text to be displayed in the input field. |
placeholderTextColor | An optional string representing the color of the placeholder text. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the input field. |
textStyle | An optional TextStyle object for customizing the style of the text in the input field. |
icon | An optional React Node to be displayed next to the input field. |
disabled | An optional boolean indicating whether the input field is disabled. |
caps | An optional boolean indicating whether the text in the input field should be auto-capitalized. |
length | An optional number representing the maximum length of the text in the input field. |
inputMode | An optional string representing the input mode of the input field. |
props | Any additional props to be passed to the underlying TextInput component. |
import Input from 'react-native-unicorn/custom-input';
<View
style={{
width: Dimensions.get('window').width,
padding: 5,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
}}
>
<Input
variant="medium"
placeholder="Medium Input"
onTextChange={(text: string) => {
console.log(text);
}}
/>
</View>
The DropDown
component is a customizable dropdown component that displays a dropdown list with selectable options, each of which can have an optional icon.
The component accepts the following props:
Props | Description |
---|---|
options | An array of objects representing the options to be displayed in the dropdown. Each object should have an id, label, and value property, and an optional icon property. |
onSelect | A function that is called when an option is selected. The function receives the value of the selected option. |
title | A string representing the title to be displayed on the dropdown button. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the dropdown button. |
textStyle | An optional TextStyle object for customizing the style of the text in the dropdown button and options. |
import DropDown from 'react-native-unicorn/dropdown';
<View
style={{
width: Dimensions.get('window').width,
padding: 5,
justifyContent: 'center',
alignItems: 'center',
alignSelf: 'center',
}}
>
<DropDown
options={[
{ id: '1', label: 'Option 1', value: '1', icon: <Icon name="home" /> },
{ id: '2', label: 'Option 2', value: '2' },
]}
onSelect={(value) => console.log(`Selected value is ${value}`)}
title="Select an option"
/>
</View>
The Grid
component is a customizable grid component that displays a table-like structure with rows and columns.
The component accepts the following props:
Props | Description |
---|---|
data | An array of objects representing the data to be displayed in the grid. Each object should have properties corresponding to the keys provided in the keys prop. |
columns | An array of strings representing the column headers of the grid. |
keys | An array of strings representing the keys of the data objects. The order of the keys determines the order of the columns in the grid. |
textStyle | An optional TextStyle object for customizing the style of the text in the grid cells. |
import { Grid } from 'react-native-unicorn/grid';
<Grid
data={[
{ id: '1', name: 'John Doe', age: 30 },
{ id: '2', name: 'Jane Doe', age: 25 },
]}
columns={['ID', 'Name', 'Age']}
keys={['id', 'name', 'age']}
/>
The OTPInput
component is a customizable One-Time Password (OTP) input component that displays a series of input fields for OTP entry. Long pressing on the first cell allows users to paste the OTP in all the cells.
The component accepts the following props:
Props | Description |
---|---|
length | The number of digits in the OTP. |
value | The initial value of the OTP. |
onOtpChange | A function that is called when the OTP value changes. The function receives the new OTP value. |
incorrect | A boolean indicating whether the entered OTP is incorrect. If true, the input fields are highlighted in red. |
textStyle | An optional TextStyle object for customizing the style of the text in the input fields. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the container view of the input fields. |
import { OTPInput } from './otp-input';
<OTPInput
length={6}
onOtpChange={(value) => console.log(`OTP value is ${value}`)}
incorrect={false}
textStyle={{ color: 'black', fontSize: 16 }}
/>
The PasswordInput
component is a customizable password input component for React Native applications. It allows you to display a password input field with an integrated show/hide password toggle.
The component accepts the following props:
Props | Description |
---|---|
onChangePassword | A function that is called when the password value changes. The function receives the new password value. |
placeholder | An optional string representing the placeholder text to be displayed in the input field. |
placeholderTextColor | An optional string representing the color of the placeholder text. |
textStyle | An optional TextStyle object for customizing the style of the text in the input field. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the container view of the input field. |
disabled | An optional boolean indicating whether the input field is disabled. |
props | An optional object containing additional TextInputProps to be passed to the TextInput component. |
import { PasswordInput } from './password-input';
<PasswordInput
onChangePassword={(text: string) => console.log(text)}
/>
The PhoneNumberInput
component is a customizable phone number component that allows you to display a phone number input field with an integrated country code picker.
The component accepts the following props:
Props | Description |
---|---|
onPhoneNumberChange | A function that is called when the phone number value changes. The function receives the new phone number value. |
placeholderTextColor | An optional string representing the color of the placeholder text. |
placeholder | An optional string representing the placeholder text to be displayed in the input field. |
textStyle | An optional TextStyle object for customizing the style of the text in the input field. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the container view of the input field. |
codeStyle | An optional string representing additional Tailwind CSS classes to be applied to the country code picker. |
props | An optional object containing additional TextInputProps to be passed to the TextInput component. |
disabled | An optional boolean indicating whether the input field is disabled. |
codes | An optional array of strings representing the country codes to be displayed in the country code picker. |
import { PhoneNumberInput } from './phone-input';
<PhoneNumberInput
onPhoneNumberChange={(text: string) => console.log(text)}
/>
<PhoneNumberInput
onPhoneNumberChange={(text: string) => console.log(text)}
viewStyle="my-4"
codes={['KE', 'UG', 'TZ']}
/>
The RadioButton
component is a customizable radio button that allows you to display a group of radio buttons with selectable options.
The component accepts the following props:
Props | Description |
---|---|
data | An array of objects representing the options to be displayed as radio buttons. Each object should have an id and label property. |
type | A string representing the type of the radio button. |
onSelect | A function that is called when a radio button is selected. The function receives the value of the selected option. |
orientation | A string representing the orientation of the radio buttons. It can be 'horizontal' or 'vertical'. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the container view of the radio buttons. |
textStyle | An optional TextStyle object for customizing the style of the text in the radio buttons. |
width | An optional string representing the width of the radio buttons. |
defaultSelected | An optional object representing the default selected option. |
import { RadioButton } from './radio-button';
<RadioButton
data={[
{ id: '1', label: 'Option 1' },
{ id: '2', label: 'Option 2' },
]}
onSelect={(item: any) => {
console.log(item.name);
}}
type={''}
orientation={'row'}
/>
The VerticalStepper
component is a customizable vertical stepper component for React Native applications. It allows you to display a series of steps in a vertical layout.
The component accepts the following props:
Props | Description |
---|---|
steps | An array of objects representing the steps to be displayed in the stepper. Each object should have a title and component property, and an optional pointStyle property. |
viewStyle | An optional string representing additional Tailwind CSS classes to be applied to the container view of the stepper. |
textStyle | An optional TextStyle object for customizing the style of the text in the stepper. |
import { VerticalStepper } from './vertical-stepper';
<VerticalStepper
steps={[
{ title: 'Step 1', component: <Text>Step 1 Content</Text> },
{ title: 'Step 2', component: <Text>Step 2 Content</Text>, pointStyle: 'bg-red-500' },
]}
viewStyle="bg-blue-500 my-5"
/>
In this example, the VerticalStepper
component is used to display a vertical stepper with two steps: 'Step 1' and 'Step 2'. The content of each step is a Text component. The point of 'Step 2' has a red background. The container view of the stepper has a blue background. The text in the stepper is white and has a font size of 16.