1.1.5 • Published 3 months ago

react-drag-mobile-drawer v1.1.5

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

react-drag-mobile-drawer

npm package

Mobile draggable drawer that falls back to modals on desktop

This is an updated fork of the original react-drag-drawer with some notable changes:

  • New <MobileDrawer/> component based off motion instead
  • Supports React 18 OR React 19
  • Added a disableBackDrop prop
  • Updated dependencies for a much smaller bundle size
  • Added TypeScript support

Live demo!

Install

$ npm i react-drag-mobile-drawer

Usage

1. <MobileDrawer/> (🆕)

import { MobileDrawer } from 'react-drag-mobile-drawer'

...

const [open, setOpen] = useState(false)

  return (
    <MobileDrawer
          open={open}
          onRequestClose={setOpen}
    >
          <div>
            A mobile drawer!
          </div>
        </MobileDrawer>
  )

2.1 API for MobileDrawer

ParamTypeFunctionalityRequired
childrenReact.ReactNodeThe content to render inside the drawer.Yes
openbooleanIndicates whether the drawer is open or closed. Default: false.Yes
onRequestClose() => voidCallback function when the drawer has closed. Use this to maintain the controlling open stateYes
classNamestringAdditional class names for the drawer container. Default: "".No
closeThresholdstringThe threshold at which the drawer should close when scrolled beyond its lower boundary, takes in any CSS value (e.g. 20px, 2rem). Default: "20px".No
dragElasticDragElasticControls the drag elasticity (how much the drawer can scroll beyond the boundaries) on the top and bottom edges. Default: { top: 0, bottom: 0.5 }.No
dragTransitionDragTransitionDefines the drag transition behavior. Default: { bounceStiffness: 300, timeConstant: 150, bounceDamping: 30, power: 0.7 }.No
parentElementHTMLElementThe DOM element to which the drawer should be appended (portal target). Default: document.body.No
peakHeightstringThe height of the drawer when it's peeking, takes in any CSS value (e.g. 200px, 20rem). Default: "200px".No

2. <Drawer/>

import { Drawer } from 'react-drag-mobile-drawer' // Note the named export change here

..

toggle = () => {
  let { toggle } = this.state

  this.setState({ toggle: !toggle })
}

render () {
  const { open } = this.state

  return (
    <Drawer
      open={open}
      onRequestClose={this.toggle}
    >
      <div>Hey Im inside the drawer!</div>
    </Drawer>
  )
}

2.1 API for Drawer

ParamTypefunctionalityrequired
allowCloseBooleanblock closing if allowClose={false}, default is truefalse
childrenNodenulltrue
containerElementClassStringclassName to be applied to the drawer container elementfalse
containerOpacityNumberControls the container's opacity (default 0.6)false
directionStringdirection to translate drawerfalse
disableBackDropBooleanDisables the backdrop/background and allows for background scrolling (Note: There appears to be a bug with webkit browsers (Safari) which does causes this feature to not work as expected)false
dontApplyListenersBooleanskip applying internal event listeners to the domfalse
getContainerRefFunctionget container (overlay) reffalse
getModalRefFunctionget modal (draggable element) reffalse
inViewportChangeFunctiondetect when drawer is at top of viewportfalse
modalElementClassStringclassName to be applied to top elementfalse
notifyWillCloseFunctionnotify consumer if the drawer will close at touch releasefalse
onDragFunctioninvoked on dragfalse
onOpenFunctioninvoked on drawer focusfalse
openBooleannulltrue
onRequestCloseFunctionnulltrue
parentElementElementblock scrolls on element if you're not using body scrollingfalse

Example modal style

.modal {
  outline: none;
  background: white;
  font-size: 1.6rem;
  width: 76rem;
  max-width: 90%;
  display: flex;
  justify-content: space-between;
  flex-direction: column;
  z-index: 15;
  min-height: 47rem;

  will-change: transform;
  transform: translate3d(0, 0, 0);
}

@media (max-width: 768px) {
  .modal {
    width: 100%;
    max-width: 100%;
    margin-bottom: 0;
    border-top-left-radius: 8px;
    border-top-right-radius: 8px;
  }
}

License

MIT © Teo Kai Xiang (this maintained fork) and Jack Hanford (Original author)

1.1.1

3 months ago

1.1.0

3 months ago

1.0.17

4 months ago

1.0.16

4 months ago

1.1.5

3 months ago

1.1.3

3 months ago

1.1.2

3 months ago

1.0.15

4 months ago

1.0.14

10 months ago

1.0.13

10 months ago

1.0.9

12 months ago

1.0.11

12 months ago

1.0.10

12 months ago

1.0.12

12 months ago

1.0.8

2 years ago

1.0.71

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.51

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago