react-native wrapper for android BottomSheetBehavior

Overview

react-native-bottom-sheet-behavior

react-native wrapper for android BottomSheetBehavior, supports FloatingActionButton.

npm version

Demo

react-native-bottom-sheet-behavior

See the Google Maps gif implementation

v1.0.0

This major release v1.0.0 supports anchor state, which means that you can have a middle state between collapsed and expanded.

This version now uses a custom BottomSheetBehavior implementation from miguelhincapie/CustomBottomSheetBehavior which is basically a fork from the original design-support, but with anchor state support and colors management, even though is custom implementation, old version should work as before, and you can also disable the anchor state with anchorEnabled prop which is disabled by default.

Components

The following components are included in this package:

  • CoordinatorLayout
  • BottomSheetBehavior
  • FloatingActionButton
  • MergedAppBarLayout
  • ScrollingAppBarLayout
  • BackdropBottomSheet
  • BottomSheetHeader

NOTE We expose some android core components such as CoordinatorLayout, AppBarLayout, FloatingActionButton, but they are NOT meant to be general purposed, and it may not work out of the context of this library, so use at your own risk.

iOS Alternative

If you are wondering some iOS alternative, i highly recommend react-native-interactable by wix, you can see their google maps approach here, which is very easy to get started.

Install

$ npm install react-native-bottom-sheet-behavior

Install with RNPM

$ react-native link react-native-bottom-sheet-behavior

Install Manually

Edit the current files as follows.

android/settings.gradle

include ':app'

+   include ':react-native-bottom-sheet-behavior'
+   project(':react-native-bottom-sheet-behavior').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-bottom-sheet-behavior/android')

android/app/build.gradle

    dependencies {
        implementation fileTree(dir: "libs", include: ["*.jar"])
        implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
+       implementation "com.android.support:design:${rootProject.ext.supportLibVersion}"
        implementation "com.facebook.react:react-native:+"  // From node_modules
+       implementation project(':react-native-bottom-sheet-behavior')
    }

MainApplication.java

+   import com.bottomsheetbehavior.BottomSheetBehaviorPackage;

    public class MainApplication extends Application implements ReactApplication {

      @Override
      protected List<ReactPackage> getPackages() {
        return Arrays.<ReactPackage>asList(
            new MainReactPackage(),
+           new BottomSheetBehaviorPackage()
        );
      }
    }

Usage

You will need to wrap your view into a CoordinatorLayout to make it work.

    render() {
      return (
          <CoordinatorLayout style={{flex: 1}}>
            <View style={{ flex: 1, backgroundColor: 'transparent' }}></View>
            <BottomSheetBehavior
              ref='bottomSheet'
              peekHeight={70}
              hideable={false}
              state={BottomSheetBehavior.STATE_COLLAPSED}>
              <View style={{backgroundColor: '#4389f2'}}>
                <View style={{padding: 26}}>
                  <Text>BottomSheetBehavior!</Text>
                </View>
                <View style={{height: 200, backgroundColor: '#fff'}} />
              </View>
            </BottomSheetBehavior>
            <FloatingActionButton autoAnchor ref="fab" />
          </CoordinatorLayout>
      )
    }

NOTE Make sure that your view has a backgroundColor style to prevent some "bugs" when rendering the container.

Components Order

You should follow this component order.

render() {
  return (
    <CoordinatorLayout>
      <ScrollingAppBarLayout>
        <ToolbarAndroid />
      </ScrollingAppBarLayout>
      <View>Main Content</View>
      <BackdropBottomSheet />
      <BottomSheetBehavior />
      <MergedAppBarLayout
        <ToolbarAndroid />
      </MergedAppBarLayout>
      <FloatingActionButton />
    </CoordinatorLayout>
  )
}

Events

In order to get the current bottom sheet state or offset, you can listen to onStateChange or onSlide respectively.

  <BottomSheetBehavior
    onSlide={(e) => console.log(e.nativeEvent.offset)}
    onStateChange={(e) => console.log(e.nativeEvent.state)}
  />

AppBarLayouts

We provide some custom AppBars that has custom behaviors, they automatically connects with BottomSheetBehavior in order to connects with ToolbarAndroid and toggle visibility, both AppBars can also manager StatusBar backgrounds.

Currently, AppBars only supports ToolbarAndroid as a child, you may have some troubles trying to render a custom View.

ScrollingAppBarLayout

This behavior hides and sets the StatusBar background to transparent when you starting dragging the BottomSheet, and reappears when the BottomSheet backs to the collapsed state, setting back the StatusBar background color with statusBarColor prop.

scrollingappbar

MergedAppBarLayout

The MergedAppBarLayout behavior appears when the BottomSheet reaches the anchor state (or expanded state if you're not using anchorEnabled). When the BottomSheet is getting over the MergedAppBar, it will partially sets the height of ToolbarAndroid revealing the mergedColor prop, and when the BottomSheet is fully expanded, it sets the ToolbarAndroid with the toolbarColor prop.

<MergedAppBarLayout
  translucent={true}
  barStyle='light-content'
  barStyleTransparent='dark-content'
  mergedColor='#1abc9c'
  toolbarColor='#34495e'
  statusBarColor='#2c3e50'>
  <ToolbarAndroid
    navIconName="md-arrow-back"
    overflowIconName='md-more'
    title='React Native Bar!'
    titleColor='#fff'
  />
</MergedAppBarLayout>

mergedappbar

merged_color

Translucent App Bars

Both AppBars supports translucent status bar, you can enable with translucent prop, which will basically adds top margins and NOT change the translucent itself, you should handle the translucent directely on the react-native StatusBar component.

FloatingActionButton

If you are using FloatingActionButton, the autoAnchor prop will automatically connect to BottomSheetBehavior, in order to follow when it's dragging.

<FloatingActionButton autoAnchor />

You still can do it manually though, by doing this.

  componentDidMount() {
    this.refs.fab.setAnchorId(this.refs.bottomSheet)
  }

FloatingActionButton's has a custom behavior that hides when closely reaches MergedAppBarLayout.

Support for react-native-vector-icons

You can also use react-native-vector-icons on FloatingActionButton, which will automatically load the icon for you.

  import Icon from 'react-native-vector-icons/Ionicons'

  ...

  render() {
    return (
      <FloatingActionButton icon={"directions"} iconProvider={Icon} />
    )
  }

You can check GoogleMapsView.js example.

BackdropBottomSheet

This component is rendered behind the BottomSheetBehavior, and behave like a parallax when BottomSheet is dragging. you should pass a fixed height prop that may match with anchorPoint prop from BottomSheet, in order to achieve a full screen view when reaches the anchor state.

BottomSheetHeader

This component abstracts color management between BottomSheet states on the native side, it will find all and components recursively and handles everything out the box.

NestedScrollView

If you are not using the anchor point, and want to add some nested scroll, you will need to install the react-native-nested-scroll-view to allows you to scroll inside bottom sheet continuously.

Note the react-native-nested-scroll-view is only useful when you are NOT using the anchorPoint.

react-native

NestedScrollView.js example

API

BottomSheetBehavior properties

Prop Description Default Value
state The state of the bottom sheet 4 (STATE_COLLAPSED)
peekHeight Peek Height value in DP 50
hideable Allow hide the bottom sheet false
anchorEnabled Enabled anchor point false
anchorPoint Anchor point where the bottom sheet should stay between collapsed and expanded 300
elevation Elevation shadow 0
onStateChange Callback when bottom sheet state changed
onSlide Callback continuously called while the user is dragging the bottom sheet

BottomSheetBehavior States

State Description
1 STATE_DRAGGING
2 STATE_SETTLING
3 STATE_EXPANDED
4 STATE_COLLAPSED
5 STATE_HIDDEN
6 STATE_ANCHOR_POINT
BottomSheetBehavior actions
Method Description
setBottomSheetState Sets the bottom sheet state
FloatingActionButton properties
Prop Description Default Value
src Drawable file under the drawable android folder
autoAnchor Attachs the button on bottom sheet automatically false
icon react-native-vector-icons name
iconProvider Icon package provided by react-native-vector-icons
iconColor Icon color
iconColorExpanded Icon expanded color when used by BottomSheetHeader
backgroundColor Background color
backgroundColorExpanded Background expanded color used by BottomSheetHeader
hidden Hides FloatingActionButton false
rippleEffect Enable rippleEffect true
rippleColor Ripple color
elevation Elevation shadow 18
onPress Callback called when touch is released
FloatingActionButton actions
Method Description
show This method will animate the button show if the view has already been laid out
hide This method will animate the button hide if the view has already been laid out
setAnchorId Attachs the button on bottom sheet by passing it as a argument (no needed if autoAnchor is set true)
ScrollingAppBarLayout properties
Prop Description
height Height of ScrollingAppBarLayout
statusBarColor Active status bar color
translucent Adds top margins on the AppBar to not draw behind the status bar
barStyle Status Bar style, (default, light-content, dark-content), used when the ScrollingAppBarLayout is present
barStyleTransparent Status Bar style, (default, light-content, dark-content), used when the ScrollingAppBarLayout is not present and the StatusBar is transparent
MergedAppBarLayout properties
Prop Description
height Height of ScrollingAppBarLayout
mergedColor Merged color when the bottom sheet is overlaying with ToolbarAndroid
toolbarColor The final ToolbarAndroid color when the bottom sheet is fully expanded
statusBarColor Active status bar color when bottom sheet is expanded
translucent Adds top margins on the AppBar to not draw behind the status bar
barStyle Status Bar style, (default, light-content, dark-content), used when the BottomSheet is fully expanded
barStyleTransparent Status Bar style, (default, light-content, dark-content), used when the AppBar is transparent
BottomSheetHeader properties
Prop Description
textColorExpanded The state of the bottom sheet
backgroundColor Background color when collased
backgroundColorExpanded Background color when anchored or expanded
onPress Callback called when header touch is released

License

MIT

Comments
  • Problem scroll example button maps

    Problem scroll example button maps

    @cesardeazevedo : Hi, I copied the following example. Link: https://github.com/cesardeazevedo/react-native-bottom-sheet-behavior/blob/master/example/views/GoogleMapsView.js I did not change anything, but it looks like this when I scroll.

    What could be the problem? screenshot_20171128-190211

    opened by Angelk90 31
  • Bottom action sheet following material style

    Bottom action sheet following material style

    Following the material guidelines here - https://material.io/guidelines/components/bottom-sheets.html#bottom-sheets-modal-bottom-sheets

    I am trying to create an action sheet like this:

    • https://storage.googleapis.com/material-design/publish/material_v_12/assets/0Bzhp5Z4wHba3MC0zbFNZaU1lUkk/components-bottomsheets-modal9.png
    • https://storage.googleapis.com/material-design/publish/material_v_12/assets/0Bzhp5Z4wHba3UzA3RDctV2k0YUk/components-bottomsheets-modal2.png

    We see it has a overlay in the back that slightly dims as it expands. And hitting that overlay hides it. May you please help me accomplish this, excuse this, I wasn't able to figure it out.

    So far I got this code below, the issues:

    • The bottom sheet is pushing things up out of the way. I think I need it position absolute somehow, however when I do this, it makes things real wonky.
    • No background overlay, which dismisses on click
    • It starts out peaking, want it to not peak, and on collapse actually hide/disappear after slide animation
        render() {
                 <CoordinatorLayout>
                    <View>
                          {/* my stuff here */}
                          <Button onPress={this.showActions} title="Show" />
                     </View>
                    <BottomSheetBehavior hideable={false} ref={this.refSheet} elevation={5} style={{ position:'absolute', width:'100%' }}>
                        <View style={{backgroundColor: '#4389f2'}}>
                            <View>
                                <Icon name="invite" />
                                <Text>Invite Members</Text>
                            </View>
                            <View>
                                <Icon name="uninvite" />
                                <Text>Remove Members</Text>
                            </View>
                        </View>
                    </BottomSheetBehavior>
                </CoordinatorLayout>
        }
    
        refSheet = el => this.sheet = el
    
        showActions = () => {
            this.sheet.setBottomSheetState(BottomSheetBehavior.STATE_EXPANDED);
        }
    
    opened by Noitidart 12
  • Manually Link issue Invariant Violation Native Component for BSBottomSheetBehaviourAndroid Does not exist

    Manually Link issue Invariant Violation Native Component for BSBottomSheetBehaviourAndroid Does not exist

    implementation project(':react-native-vector-icons') implementation project(':react-native-nested-scroll-view') implementation project(':react-native-bottom-sheet-behavior')

    project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') project(':react-native-nested-scroll-view').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-nested-scroll-view/android') project(':react-native-bottom-sheet-behavior').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-bottom-sheet-behavior/android')

    if (mReactRootView==null) { mReactRootView = new ReactRootView(this); mReactInstanceManager = ReactInstanceManager.builder() .setApplication(getApplication()) .setBundleAssetName("index.android.bundle") .setJSMainModulePath("index") .addPackage(new MainReactPackage()) .addPackage(new RNNestedScrollViewPackage()) .addPackage(new RealmReactPackage()) .addPackage(new BottomSheetBehaviorPackage()) .addPackage(new VectorIconsPackage()) .setUseDeveloperSupport(BuildConfig.DEBUG) .setInitialLifecycleState(LifecycleState.RESUMED) .build(); // The string here (e.g. "MyReactNativeApp") has to match // the string in AppRegistry.registerComponent() in index.js mReactRootView.startReactApplication(mReactInstanceManager, "MyReactNativeApp", null); } setContentView(mReactRootView);

    opened by tarunkonda123 11
  • conditionally rendering BottomSheetBehavior doesn't show up and tapping causes crash

    conditionally rendering BottomSheetBehavior doesn't show up and tapping causes crash

    RN version: 0.43.2 Library version: Latest (0.4.0)

    The issue is that BottomSheetBehavior#onLayoutChild is never called, therefore mNestedScrollingChildRef in android.support.design.widget.BottomSheetBehavior is never set

    Example code:

    
    import { CoordinatorLayout, BottomSheetBehavior } from 'react-native-bottom-sheet-behavior'
    
    class TestCase extends React.PureComponent {
    
      componentDidMount() {
        setTimeout(() => this.setState({ ok: true }), 5000)
      }
      
      render() {
        return (
          <CoordinatorLayout style={{flex:1}}>
            {this.state.ok && <BottomSheetBehavior
              peekHeight={70}
              hideable={false}
              state={BottomSheetBehavior.STATE_COLLAPSED}>
              <View style={{backgroundColor: '#4389f2'}}>
                <View style={{padding: 26}}>
                  <Text>BottomSheetBehavior!</Text>
                </View>
                <View style={{height: 200, backgroundColor: '#fff'}} />
              </View>
            </BottomSheetBehavior> }
          </CoordinatorLayout>
        )
      }
        
    }
    

    Crashes with the following exception when you try to tap where the bottom sheet should be:

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.lang.ref.WeakReference.get()' on a null object reference at android.support.design.widget.BottomSheetBehavior.onInterceptTouchEvent(BottomSheetBehavior.java:282) at android.support.design.widget.CoordinatorLayout.performIntercept(CoordinatorLayout.java:446) at android.support.design.widget.CoordinatorLayout.onInterceptTouchEvent(CoordinatorLayout.java:485) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2366) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2839) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2456) at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2831) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1863) at android.app.Activity.dispatchTouchEvent(Activity.java:3046) at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2792) at android.view.View.dispatchPointerEvent(View.java:10233) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5397) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5233) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4673) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4726) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4692) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4834) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4700) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4891) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4673) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4726) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4692) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4700) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4673) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7359) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7237) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7198) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7469) at android.view.In

    opened by bgdavidx 10
  • FloatingActionButtonShadowNode compilation error

    FloatingActionButtonShadowNode compilation error

    Hello!

    Thanks for your repo! I am trying to use it but I am facing following issue when compiling.

    :react-native-bottom-sheet-behavior:compileReleaseJavaWithJavac /Users/user/vscode-projects/reactNativeProject/node_modules/react-native-bottom-sheet-behavior/android/src/main/java/com/bottomsheetbehavior/FloatingActionButtonShadowNode.java:10: error: FloatingActionButtonShadowNode is not abstract and does not override abstract method measure(CSSNodeAPI,float,CSSMeasureMode,float,CSSMeasureMode,MeasureOutput) in MeasureFunction public class FloatingActionButtonShadowNode extends LayoutShadowNode implements CSSNode.MeasureFunction { ^ /Users/user/vscode-projects/reactNativeProject/node_modules/react-native-bottom-sheet-behavior/android/src/main/java/com/bottomsheetbehavior/FloatingActionButtonShadowNode.java:19: error: method does not override or implement a method from a supertype @Override ^ Note: /Users/user/vscode-projects/reactNativeProject/node_modules/react-native-bottom-sheet-behavior/android/src/main/java/com/bottomsheetbehavior/ResourceDrawableIdHelper.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: /Users/user/vscode-projects/reactNativeProject/node_modules/react-native-bottom-sheet-behavior/android/src/main/java/com/bottomsheetbehavior/FloatingActionButtonManager.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 2 errors :react-native-bottom-sheet-behavior:compileReleaseJavaWithJavac FAILED

    FAILURE: Build failed with an exception.

    What went wrong: Execution failed for task ':react-native-bottom-sheet-behavior:compileReleaseJavaWithJavac'. Compilation failed; see the compiler error output for details.

    Here are the dependencies I use

      "dependencies": {
        "react": "15.3.1",
        "react-native": "^0.32.0",
        "react-native-bottom-sheet-behavior": "0.0.4",
        "react-native-maps": "0.8.2",
        "react-native-router-flux": "^3.35.0",
        "react-redux": "^4.4.5",
        "redux": "^3.6.0",
        "redux-thunk": "^2.1.0"
      },
    
    opened by fdnhkj 8
  • Any Plans to Support iOS?

    Any Plans to Support iOS?

    The Google Maps iOS app, and many other material design apps, use this same bottom sheet behavior on both iOS and Android. Are there any plans to make this library cross-compatible with iOS as well?

    opened by joncursi 7
  • UIManager['BSBottomSheetBehaviourAndroid'] is no longer supported . Use UIManager.ViewManagerConfig('BSBottomSheetBehaviourAndroid') instead warning

    UIManager['BSBottomSheetBehaviourAndroid'] is no longer supported . Use UIManager.ViewManagerConfig('BSBottomSheetBehaviourAndroid') instead warning

    UIManager['BSBottomSheetBehaviourAndroid'] is no longer supported . Use UIManager.ViewManagerConfig('BSBottomSheetBehaviourAndroid') instead warning is giving in the simulator

    image

    opened by arunkrishnang86 6
  • Execution failed for task `:app:transformClassesWithMultidexlistForDebug`

    Execution failed for task `:app:transformClassesWithMultidexlistForDebug`

    I am getting error after adding this package. `FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':app:transformClassesWithMultidexlistForDebug'.

    com.android.build.api.transform.TransformException: Error while generating the main dex list.`

    My android.defaultConfig has multiDexEnabled true. And dependencies { classpath 'com.android.tools.build:gradle:3.1.4' classpath 'com.google.gms:google-services:4.0.1'

    opened by aryalprakash 6
  • Crash: null object reference on init

    Crash: null object reference on init

    Hey,

    We're seeing the crashes using latest beta (with RN 0.51.1). Seems to be a race condition on init, let me know if you need more info. Using .beta8.

    This code crashes:

    class App extends React.Component<{}> {
      render() {
        return (
          <CoordinatorLayout style={{flex: 1}}>
            <BottomSheetBehavior
              peekHeight={70}
              hideable={false}
              state={BottomSheetBehavior.STATE_COLLAPSED}
            >
              <View style={{backgroundColor: '#4389f2'}}>
                <View style={{padding: 26}}>
                  <Text>BottomSheetBehavior!</Text>
                </View>
                <View style={{height: 200, backgroundColor: '#fff'}} />
              </View>
            </BottomSheetBehavior>
          </CoordinatorLayout>
        );
      }
    }
    
    export default App;
    

    This code works:

    class App extends React.Component<{}> {
      constructor() {
        super();
        this.state = {
          ok: false,
        }
      }
    
      componentDidMount() {
        setTimeout(() => this.setState({ok: true}), 5000);
      }
    
      render() {
        return (
          <CoordinatorLayout style={{flex: 1}}>
            {this.state.ok && (
              <BottomSheetBehavior
                peekHeight={70}
                hideable={false}
                state={BottomSheetBehavior.STATE_COLLAPSED}
              >
                <View style={{backgroundColor: '#4389f2'}}>
                  <View style={{padding: 26}}>
                    <Text>BottomSheetBehavior!</Text>
                  </View>
                  <View style={{height: 200, backgroundColor: '#fff'}} />
                </View>
              </BottomSheetBehavior>
            )}
          </CoordinatorLayout>
        );
      }
    }
    

    Stack:

    Attempt to invoke virtual method 'void android.support.v4.widget.ViewDragHelper.process TouhEnvent(android.view.MotionEvent)' on a null object reference
    
    onTouchEvent
    RnBottomSheetBehavior.java:273
    
    resetTouchBehaviors
    CoordinatorLayout.java:396
    
    onAttachedToWindow
    CoordinatorLayout.java:238
    
    dispatchAttachedToWindow
    View.java:16638
    
    opened by kristfal 6
  • Usage issue: RCTBottomSheetBehaviorAndroid.Commands

    Usage issue: RCTBottomSheetBehaviorAndroid.Commands

    Hello, In a new project, when trying the basic example in the readme, something like:

        return (
          <CoordinatorLayout style={styles.container}>
            <View style={{ flex: 1, backgroundColor: 'transparent' }}></View>
            <BottomSheetBehavior
                ref="bottomSheet"
                peekHeight={50}
                hideable={true}
                state={BottomSheetBehavior.STATE_COLLAPSED}>
                <View></View>
            </BottomSheetBehavior>
            <FloatingActionButton ref="fab" />
          </CoordinatorLayout>
        );
    

    I get the following error:

    undefined is not an object (evaluating '_reactNative.UIManager.RCTBottomSheetBehaviorAndroid.Commands')
    

    I have no idea where the issue is coming from.

    opened by Unforgiven-wanda 6
  • [Question] Header with zero height

    [Question] Header with zero height

    Is it possible to have Bottom Sheet with zero height (so that it does not occupy any space when "hidden") and control sheet completely remotely?

    Dummy question, but sorry, I am from iOS world.

    TY

    opened by Andreyco 6
  • Bump qs from 6.5.2 to 6.5.3 in /example

    Bump qs from 6.5.2 to 6.5.3 in /example

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump decode-uri-component from 0.2.0 to 0.2.2 in /example

    Bump decode-uri-component from 0.2.0 to 0.2.2 in /example

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump xmldom and plist in /example

    Bump xmldom and plist in /example

    Removes xmldom. It's no longer used after updating ancestor dependency plist. These dependencies need to be updated together.

    Removes xmldom

    Updates plist from 3.0.1 to 3.0.6

    Changelog

    Sourced from plist's changelog.

    3.0.5 / 2022-03-23

    • [96e2303d05] Prototype Pollution using .parse() #114 (mario-canva)
    • update browserify from 16 to 17

    3.0.4 / 2021-08-27

    3.0.3 / 2021-08-04

    • update xmldom to 0.6.0 to patch critical vulnerability (Mike Reinstein)
    • remove flaky saucelabs teseting badge (Mike Reinstein)

    3.0.2 / 2021-03-25

    • update xmldom to 0.5.0 to patch critical vulnerability (Mike Reinstein)
    • update saucelab credentials to point at mreinstein's saucelabs account (Mike Reinstein)
    • remove a bunch of test versions from the matrix because they weren't working in zuul + sauce (Mike Reinstein)
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump simple-plist from 1.0.0 to 1.3.1 in /example

    Bump simple-plist from 1.0.0 to 1.3.1 in /example

    Bumps simple-plist from 1.0.0 to 1.3.1.

    Release notes

    Sourced from simple-plist's releases.

    TypeScript

    This release is a rewrite of the JavaScript code into TypeScript code to add strong typing for those who would choose to use it.

    As this is a minor release there should be minimal risk in upgrading from v1.1.1

    1.1.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump async from 2.6.2 to 2.6.4 in /example

    Bump async from 2.6.2 to 2.6.4 in /example

    Bumps async from 2.6.2 to 2.6.4.

    Changelog

    Sourced from async's changelog.

    v2.6.4

    • Fix potential prototype pollution exploit (#1828)

    v2.6.3

    • Updated lodash to squelch a security warning (#1675)
    Commits
    Maintainer changes

    This version was pushed to npm by hargasinski, a new releaser for async since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump ua-parser-js from 0.7.19 to 0.7.31 in /example

    Bump ua-parser-js from 0.7.19 to 0.7.31 in /example

    Bumps ua-parser-js from 0.7.19 to 0.7.31.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v1.0.0)
  • v1.0.0(Jul 6, 2018)

  • v1.0.0-beta.7(Aug 4, 2017)

  • v1.0.0-beta.6(Jun 14, 2017)

    NestedScrollView is now on different package, it was a huge codebase dependency, and it was not required to work with the bottom sheet, also a little bit hard to maintain, it is only useful when you are NOT using the anchor point.

    See the repository: https://github.com/cesardeazevedo/react-native-nested-scroll-view

    If you are using the NestedScrollView, you should now attach it on the componentDidMount as follows.

    
    import NestedScrollView from 'react-native-nested-scroll-view'
    
    class App extends Component {
      componentDidMount() {
        this.bottomSheet.attachNestedScrollChild(this.nestedScroll)
      }
      render() {
        return (
          <CoordinatorLayout>
            <BottomSheetBehavior ref={ref => { this.bottomSheet = ref}}>
              <NestedScrollView ref={ref => { this.nestedScroll = ref }} />
            </BottomSheetBehavior>
          </CoordinatorLayout>
        )
      }
    }
    

    See the NestedScrollView example for better details. https://github.com/cesardeazevedo/react-native-bottom-sheet-behavior/blob/master/example/views/NestedScrollView.js

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.1(Apr 16, 2017)

    This patch changes the StatusBars translucent behavior, now translucent is disabled by default, and you should pass the translucent prop either on ScrollingAppBarLayout, or MergedAppBarLayout, which just adjusts the AppBar top margins, and doesn't change anything on the translucent itself, earlier versions automatically enables translucent on StatusBars, now it won't, and you should handle the translucent directly on the react-native StatusBar component.

    New props added

    ScrollingAppBarLayout:

    • barStyle
    • barStyleTransparent
    • translucent

    MergedAppBarLayout

    • barStyle
    • barStyleTransparent
    • translucent
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta(Apr 11, 2017)

    image

    This major release v1.0.0-beta supports anchor state 🎉, which means that you can have a middle state between collapsed and expanded.

    This version now uses a custom BottomSheetBehavior implementation from miguelhincapie/CustomBottomSheetBehavior which is basically a fork from the original design-support, but with anchor state support and colors management, even though is custom implementation, old version should work as before, and you can also disable the anchor state with anchorEnabled prop which is disabled by default.

    New Components

    • MergedAppBarLayout
    • ScrollingAppBarLayout
    • BackdropBottomSheet
    • BottomSheetHeader

    BottomSheetBehavior

    • Added anchorEnabled prop
    • Added anchorPoint prop

    AppBarLayouts

    We provide some custom AppBars that has custom behaviors, they automatically connects with BottomSheetBehavior in order to connects with ToolbarAndroid and toggle visibility, both AppBars can also manager StatusBar backgrounds.

    Currently, AppBars only supports ToolbarAndroid as a child, you may have some troubles trying to render a custom View.

    ScrollingAppBarLayout

    This behavior hides and sets the StatusBar background to transparent when you starting dragging the BottomSheet, and reappears when the BottomSheet backs to the collapsed state, setting back the StatusBar background color with statusBarColor prop.

    image

    MergedAppBarLayout

    The MergedAppBarLayout behavior appears when the BottomSheet reaches the anchor state (or expanded state if you're not using anchorEnabled). When the BottomSheet is getting over the MergedAppBar, it will partially sets the height of ToolbarAndroid revealing the mergedColor prop, and when the BottomSheet is fully expanded, it sets the ToolbarAndroid with the toolbarColor prop.

    image

    image

    FloatingActionButton

    • FloatingActionButton's has a custom behavior that hides when closely reaches MergedAppBarLayout.

    BackdropBottomSheet

    This component is rendered behind the BottomSheetBehavior, and behave like a parallax when BottomSheet is dragging. you should pass a fixed height prop that may match with anchorPoint prop from BottomSheet, in order to achieve a full screen view when reaches the anchor state.

    BottomSheetHeader

    This component abstracts color management between BottomSheet states on the native side, it will find all and components recursively and handles everything out the box.

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Apr 8, 2017)

  • v0.4.0(Mar 2, 2017)

  • v0.3.2(Mar 2, 2017)

    • Added autoAnchor prop to automatically anchor fab with the bottom sheet, this.ref.fab.setAnchorId still works.
    • Added show and hide command actions.
    • Fixed misunderstood hidden prop that was causing crash, now uses show and hide actions directly.
    • Added rippleColor prop.
    • Now only set iconColor through react-native-vector-icons.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Feb 5, 2017)

  • v0.1.0(Jan 8, 2017)

  • v0.0.11(Nov 24, 2016)

  • v0.0.10(Oct 28, 2016)

  • v0.0.9(Oct 15, 2016)

  • v0.0.6(Sep 30, 2016)

  • v0.0.5(Sep 30, 2016)

  • v0.0.4(Aug 23, 2016)

Owner
César Augusto
César Augusto
Blend-mode-demo-using-react-p5-wrapper - React+p5.js app demonstrating p5.js blend modes, Uses react-p5-wrapper

React + p5.js blend mode demonstrator This is a React + p5.js app which demonstr

null 0 Jan 29, 2022
A React Native wrapper around the Facebook SDKs for Android and iOS. Provides access to Facebook login, sharing, graph requests, app events etc.

React Native FBSDK React Native FBSDK is a wrapper around the iOS Facebook SDK and Android Facebook SDK, allowing for Facebook integration in React Na

Facebook 3k Dec 26, 2022
react-native wrapper for android CollapsingToolbarLayout

react-native-collapsing-toolbar react-native wrapper for CollapsingToolbarLayout, easy to integrate with Animated.Event and FlatList out the box. See

César Augusto 293 Nov 23, 2022
React Native Wrapper of Google Place Picker for iOS + Android.

react-native-google-place-picker React Native Wrapper of Google Place Picker for iOS + Android. iOS Android Table of contents Install iOS Android Usag

ZHANG Tai 183 Nov 11, 2022
A simple wrapper for Android's Spinner in react-native

react-native-dropdown-android A simple wrapper for Android's Spinner Installation Android npm install --save react-native-dropdown-android In android/

Tu Do 61 Aug 28, 2022
react-native-wheel-picker-android ★186 - Simple and flexible React native wheel picker for Android, including DatePicker and TimePicker.

React native wheel picker V2 A simple Wheel Picker for Android (For IOs is using Picker from react-native) Example You can clone the repo and run exam

Kalon.Tech 336 Dec 15, 2022
A react native module to show toast like android, it works on iOS and Android.

react-native-easy-toast A react native module to show toast like android, it works on iOS and Android. Content Installation Demo Getting started API C

Devio.org 1.1k Dec 28, 2022
A react native android module to control the android statusbar.

Status bar for React Native Android A react native android module to control the android statusbar. Setup There are five steps in the setup process in

Nishanth Shankar 144 Nov 11, 2022
React Native Android module to use Android's AlertDialog - same idea of AlertIOS

react-native-simpledialog-android React Native Android module to use Android's AlertDialog - same idea of AlertIOS Installation npm install react-nati

Lucas Ferreira 42 Mar 1, 2020
icons for react-native android using android-iconify

react-native-android-iconify icons for react native android using android-iconify Installation and How to use Step 1 - NPM Install npm install --save

Layton Whiteley 32 May 26, 2020
Lottie wrapper for React Native.

Lottie for React Native, iOS, and Android Lottie component for React Native (iOS and Android) Lottie is a mobile library for Android and iOS that pars

Lottie - React Native 15.6k Jan 9, 2023
[DEPRECATED] A Radio-button like logic wrapper for React Native

react-native-radio-buttons IMPORTANT this package is deprecated and no longer maintained in favor of the official SegmentedControlIOS component. A rea

Arnaud Rinquin 416 Nov 11, 2022
A react-native wrapper for showing tooltips

react-native-tooltip A react-native component from displaying tooltip. Uses UIMenuController. Add it to your project Run npm install react-native-tool

Chirag Jain 285 Dec 16, 2022
An inline wrapper for calling out React Native components via tooltip

React Native Walkthrough Tooltip React Native Walkthrough Tooltip is a fullscreen modal that highlights whichever element it wraps. When not visible,

Jason Gaare 487 Jan 4, 2023
📈Powerful React-Native ECharts Wrapper 📊

react-native-echarts-wrapper v2.0.0 Apache ECharts (incubating) wrapper build for React Native/Expo. Screenshots • How To Use • Authors A React Native

Thomas Leiter 173 Nov 16, 2022
react-native wrapper for gravatar-api

react-native-gravatar Install npm install --save react-native-gravatar Use eg. import React, { Component } from 'react'; import {StyleSheet} from 'rea

Layton Whiteley 16 Dec 30, 2019
Use the iOS and Android native Twitter and Facebook share popup with React Native https://github.com/doefler/react-native-social-share

React Native Social Share Use the built-in share view from iOS and Android to let the user share on Facebook and Twitter. It will use the user's exist

Kim Døfler 415 Oct 9, 2022
A wrapper of dotparser to parse GraphViz dot file and collect nodes / edges

reagram React component to render customizable graph/diagram. There are many great ways in JavaScript to create graphs/diagrams, like mermaid, JointJS

null 0 Dec 13, 2021
react-native-rebound-scrollview ★12 - React Native Android ReboundScrollView implementation.

React Native ReboundScrollView support android rebound ScrollView, compatible ios -- use react scrollview Usage ##Android In android/setting.gradle ..

null 13 Mar 18, 2022