Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

react-native-shadow-2

Package Overview
Dependencies
Maintainers
0
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-native-shadow-2

Cross-platform shadow for React Native. Improved version of the abandoned react-native-shadow package

  • 7.1.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
34K
increased by0.92%
Maintainers
0
Weekly downloads
 
Created
Source

[!IMPORTANT]
The new React Native 0.76, released on Oct 23, 2024, finally supports a cross-platform shadow!

This new feature should be preferred over this library.

I can only wholeheartedly appreciate everyone's support and kindness over the past almost 4 years and celebrate having reached 35k weekly and 2M total downloads 🤗

For professional inquiries regarding senior-level expertise in TypeScript, React, and React Native, contact me at henrique.bruno.fa@gmail.com.

react-native-shadow-2

react-native-shadow is dead for years. This is an improved version with more functionalities, Typescript support and written from scratch. It's not required to define its size: the shadow is smartly applied on the first render and then precisely reapplied on the following ones.

It solves the old React Native issue of not having the same shadow appearence and usage for Android, iOS and Web.

The ethercreative/react-native-shadow-generator website won't give you very similar results between the two platforms, for the reasons I described here. It's also not as customizable as this library.

Compatible with Android, iOS and Web. And Expo!

Supports RTL.

🍟 Demo - Expo Snack Sandbox

Give this library a quick try!

📰 v7 Changelog - 2022-08-08

❗ Read the FAQ below!

💿 Installation

1. First install react-native-svg.

The latest react-native-svg version is recommended, including if using Expo.

2. Then install react-native-shadow-2:
npm i react-native-shadow-2
# or
yarn add react-native-shadow-2

📖 Usage

import { Shadow } from 'react-native-shadow-2';

<Shadow>
  <Text style={{ margin: 20, fontSize: 20 }}>🙂</Text>
</Shadow>

Example 1


<Shadow distance={15} startColor={'#eb9066d8'} endColor={'#ff00ff10'} offset={[3, 4]}>
  <View style={{ borderTopStartRadius: 24, borderBottomEndRadius: 0, borderRadius: 10, backgroundColor: '#c454f0dd' }}>
    <Text style={{ margin: 20, fontSize: 20 }}>🤯</Text>
  </View>
</Shadow>

Example 2

Properties

All properties are optional.
PropertyDescriptionTypeDefault
startColorThe initial gradient color of the shadow.string'#00000020'
endColorThe final gradient color of the shadow.stringTransparent startColor. Explanation.
distanceHow far the shadow goes.number10
offsetMoves the shadow. Negative x moves it left/start, negative y moves it up.

Accepts 'x%' values.

Defining this will default paintInside to true, as it's the usual desired behaviour.
[x: string | number, y: string | number][0, 0]
paintInsideApply the shadow below/inside the content. startColor is used as fill color, without a gradient.

Useful when using offset or if your child has some transparency.
booleanfalse, but true if offset is defined
sidesThe sides that will have their shadows drawn. Doesn't include corners. Undefined sides fallbacks to true. Explanation.Record<'start' | 'end' | 'top' | 'bottom', boolean>undefined
cornersThe corners that will have their shadows drawn. Undefined corners fallbacks to true. Explanation.Record<'topStart' | 'topEnd' | 'bottomStart' | 'bottomEnd', boolean>undefined
styleThe style of the View that wraps your children. Read the Notes below.StyleProp<ViewStyle>undefined
containerStyleThe style of the View that wraps the Shadow and your children. Useful for margins.StyleProp<ViewStyle>undefined
stretchMake your children ocuppy all available horizontal space. Explanation.booleanfalse
safeRenderWon't use the relative sizing and positioning on the 1st render but on the following renders with the exact onLayout sizes. Useful if dealing with radii greater than the sides sizes (like a circle) to avoid visual artifacts on the 1st render.

If true, the Shadow won't appear on the 1st render.
booleanfalse
disabledDisables the Shadow. Useful for easily reusing components as sometimes shadows are not desired.

containerStyle and style are still applied.
booleanfalse

Notes

  • If the Shadow has a single child, it will get the width, height and all of the borderRadius properties from the children's style property, if defined.

  • You may also define those properties in the Shadow's style. The defined properties here will have priority over the ones defined in the child's style.

  • If the width and height are defined in any of those, there will be only a single render, as the first automatic sizing won't happen, only the precise render.

  • You can use either the 'borderTopLeftRadius' or 'borderTopStartRadius' and their variations to define the corners radii, although I recommend the latter as it's the RTL standard.

  • Having a radius greater than its side will mess the shadow if the sizes aren't defined. You can use the safeRender property to only show the shadow on the 2nd render and beyond, when we have the exact component size and the radii are properly limited.

  • Radii greater than 2000 (Tailwind's rounded-full is 9999) may crash Android.

⁉️ FAQ

  • How to set the Shadow opacity?

    The opacity is set directly in the startColor and endColor properties, in the alpha channel. E.g.: '#0001' is an almost transparent black. You may also use '#rrggbbaa', 'rgba()', 'hsla()' etc. All patterns in this link, but not int colors, are accepted.

  • My component is no longer using the available parent width after applying the Shadow! What to do?

    Use the stretch property or style={{alignSelf: 'stretch'}} in your Shadow component. Explanation!

  • I want a preset for my Shadows!

    It's exported the ShadowProps type, the props of the Shadow component. You may do the following:

    const ShadowPresets = {
      button: {
        offset: [0, 1], distance: 1, startColor: '#0003',
      } as ShadowProps,
    };
    
    <Shadow {...ShadowPresets.button}>
    
  • The offset and size properties are throwing Typescript errors!

    Upgrade your Typescript to at least 4.0.0! Those two properties use labeled tuples. If you don't use Typescript, this won't happen.

📰 Popularly seen on

Keywords

FAQs

Package last updated on 26 Oct 2024

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc