softlofy-rn-components

1.1.3 • Public • Published

Softlofy RN Components

A collection of commonly used components on React Native project developed by Softlofy.

Installation:

There are two ways to use Softlofy RN Components.

Way 1: Initiate a new project with Softlofy RN Components

npx softlofy-rn-components-starter <YourProjectName>

Way 2: Configure with an existing project

Step 1: Run npm i softlofy-rn-components

Step 2 Install packages npm i --dev react-native-svg-transformer & npm i react-native-svg react-native-reanimated

Step 3 Add react-native-reanimated/plugin plugin to your babel.config.js.

   module.exports = {
    presets: [
      ... // don't add it here :)
    ],
    plugins: [
      ...
      'react-native-reanimated/plugin',
    ],
  };

Step 4 Change your metro.config.js

For Expo SDK v41.0.0 or newer

Merge the contents from your project's metro.config.js file with this config (create the file if it does not exist already).

metro.config.js:

const { getDefaultConfig } = require("expo/metro-config");

module.exports = (() => {
  const config = getDefaultConfig(__dirname);

  const { transformer, resolver } = config;

  config.transformer = {
    ...transformer,
    babelTransformerPath: require.resolve("react-native-svg-transformer")
  };
  config.resolver = {
    ...resolver,
    assetExts: resolver.assetExts.filter((ext) => ext !== "svg"),
    sourceExts: [...resolver.sourceExts, "svg"]
  };

  return config;
})();

For React Native v0.72.1 or newer:

const { getDefaultConfig, mergeConfig } = require("@react-native/metro-config");

const defaultConfig = getDefaultConfig(__dirname);
const { assetExts, sourceExts } = defaultConfig.resolver;


const config = {
  transformer: {
    babelTransformerPath: require.resolve("react-native-svg-transformer")
  },
  resolver: {
    assetExts: assetExts.filter((ext) => ext !== "svg"),
    sourceExts: [...sourceExts, "svg"]
  }
};

module.exports = mergeConfig(defaultConfig, config);

For React Native v0.59 or newer

Merge the contents from your project's metro.config.js file with this config (create the file if it does not exist already).

metro.config.js:

const { getDefaultConfig } = require("metro-config");

module.exports = (async () => {
  const {
    resolver: { sourceExts, assetExts }
  } = await getDefaultConfig();
  return {
    transformer: {
      babelTransformerPath: require.resolve("react-native-svg-transformer")
    },
    resolver: {
      assetExts: assetExts.filter((ext) => ext !== "svg"),
      sourceExts: [...sourceExts, "svg"]
    }
  };
})();

Using TypeScript

If you are using TypeScript, you need to add this to your declarations.d.ts file (create one if you don't have one already):

declare module "*.svg" {
  import React from "react";
  import { SvgProps } from "react-native-svg";
  const content: React.FC<SvgProps>;
  export default content;
}

Usage

Wrap your app by Wrapper

import  React  from  'react';
import  {Wrapper}  from  'softlofy-rn-components';

const  App  =  ()  =>  {
return  (
    <Wrapper>
	    // Your App
    </Wrapper>
)};



export  default  App;

Components

Button

Props

Name Type is required Default
variant `'fillRounded' 'transparent' 'outline'`
onPress `((event: GestureResponderEvent) => void) undefined;` false
title string false ""
disabled boolean false undefined
width `DimensionValue undefined` false
flex number false undefined
backgroundColor (for fillRounded variant only) string false undefined
textColor string false accentColor
icon React.ReactNode false undefined
themeColor (for outline only) string false undefined

Typography

Props

Name Type is required Default
children React.ReactNode true N/A
textAlign `'left' 'right' 'center'
color string false accentColor
fontSize number false 16
fontWeight `'normal' 'bold' '100'
flex number false 0
opacity number false 1

InputField

Props

Name Type ==================== is required Default
bgColor string false colors.gray for dark mode device and colors.light_gray for light mode
textColor string false colors.white for dark mode and colors.black for light mode
error string false ""
placeholder string false undefined
placeholderTextColor string false colors.light_gray for darks mode and colors.gray for light mode
cursorColor string false colors.sky
onFocus () => void false undefined
onChangeText (text: string) => void false undefined
value string false ""
variant normal or password false ""

PhoneInput

Use softlofy-rn-phone-input-component

CustomStatusBar

Props

Name Type is required Default
backgroundColor string false themeColor
barStyle `StatusBarStyle null undefined`

FlexContainer

Props

Name Type is required Default
children React.ReactNode true N/A
justifyContent `'center' 'flex-start' 'flex-end'
alignItems `'center' 'flex-start' 'flex-end'`
flex number false undefined
gap number false undefined
padding number false undefined
margin number false undefined
backgroundColor string false undefined
width `DimensionValue undefined` false

FullWidthContainer

Props

Name Type is required Default
children React.ReactNode true N/A
style StyleProp<ViewStyle>; false {width: '100%',}

InputError

Props

Name Type is required Default
error string true N/A

NonScrollableScreenContainer

Props

Name Type is required Default
children string true N/A
paddingHorizontal number false 16
paddingVertical number false 16
backgroundColor number false themeColor
statusBarBg string false default style of < CustomStatusBar />
barStyle `StatusBarStyle null undefined;`
screenTitleProps Same as < ScreenTitle /> false Default of < ScreenTitle />

ScrollableScreenContainer

Props Everything from NonScrollableScreenContainer &

Name Type is required Default
refreshing boolean false undefined
onRefresh () => void false undefined
refreshControlColors string[] false default

ScreenTitle

Props

Name Type is required Default
showBackButton boolean false false
customBackIcon React.ReactNode false undefined
onBackClick () => void false undefined
title string false ""
paddingHorizontal number false undefined
rightComponent React.ReactNode false < Spacer />

Spacer

Props

Name Type is required Default
height number false undefined
width DimensionValue false 100%

Tag

Props

Name Type is required Default
tag string true N/A
backgroundColor string true N/A
color string false white
flex number false 0

Hooks

useColors

Will give you a color palette Note: Color palette is inspired by Tailwind CSS's Colors You will get the 500 variant's color of tailwind's color palatte.

const colors = useColors()

will return the following object

{
    white:  '#ffffff',
    light_gray:  '#d1d5db',
    black:  '#000000',
    slate:  '#64748b',
    gray:  '#6b7280',
    zinc:  '#71717a',
    neutral:  '#737373',
    stone:  '#78716c',
    red:  '#ef4444',
    orange:  '#f97316',
    amber:  '#f59e0b',
    yellow:  '#eab308',
    lime:  '#84cc16',
    green:  '#22c55e',
    emerald:  '#10b981',
    teal:  '#14b8a6',
    cyan:  '#06b6d4',
    sky:  '#0ea5e9',
    blue:  '#3b82f6',
    indigo:  '#6366f1',
    violet:  '#8b5cf6',
    purple:  '#a855f7',
    fuchsia:  '#d946ef',
    pink:  '#ec4899',
    rose:  '#f43f5e',
}

useLoading

const  {isLoading,  setIsLoading}  =  useLoading();

is loading will return the loading state, and setIsLoading(stateYouWannaSet: boolean, colorYouWannaSeeTheSpinner?:string)

useSnackBar

const  {showSnackBar}  =  useSnackBar();

showSnackBar(message:string, variant:'success'  |  'error'  |  'warning'  |  'info')

useThemeColor

const themeColor = useThemeColor()

will return

   if (deviceTheme==="dark"){
	    return '#242424'
   } else{
       return '#F1F1F1'
   }

useAccentColor

const accentColor = useAccentColor()

will return

   if (deviceTheme==="dark"){
	    return colors.white
   } else{
       return colors.black
   }
   // Where colors is the object returned by useColors hook

Package Sidebar

Install

npm i softlofy-rn-components

Weekly Downloads

0

Version

1.1.3

License

MIT

Unpacked Size

70.1 kB

Total Files

58

Last publish

Collaborators

  • mehedihsiam