Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

react-swipeable

FormidableLabs1.7mMIT7.0.2TypeScript support: included

React Swipe event handler hook

react swipe, react touch, react hook, touch, swipe, swipeable, react, hook

readme

React Swipeable — Formidable, We build the modern web

React swipe event handler hook

npm downloads npm version build status gzip size maintenance status

Edit react-swipeable image carousel

Visit the Docs site for information on usage, api, and demos.

License

MIT

Contributing

Please see our contributions guide.

Maintainers

Project Maintenance

Maintenance Status

Active: Formidable is actively working on this project, and we expect to continue for work for the foreseeable future. Bug reports, feature requests and pull requests are welcome.

changelog

v7.0.0

7.0.2

Patch Changes

  • Add react v19 to peer deps (#357)

7.0.1

Patch Changes

  • Adding GitHub release workflow (#328) New Features:
  • add new swipeDuration prop - "allowable duration of a swipe"
    • A swipe lasting more than swipeDuration, in milliseconds, will not be considered a swipe.
    • Defaults to Infinity for backwards compatibility
  • add new touchEventOptions prop that can set the options for the touch event listeners
    • this provides users full control of if/when they want to set passive
    • Defaults to { passive: true }
  • add new onTouchStartOrOnMouseDown prop that is called for touchstart and mousedown. Before a swipe even starts.
    • combined with touchEventOptions allows users the ability to now call preventDefault on touchstart
  • add new onTouchEndOrOnMouseUp prop that is called for touchend and mouseup.
  • add react 18 to peerDependencies

Breaking Changes:

  • we have dropped support for es5 transpiled output
    • we target es2015 for our transpilation now
      • swipeable utilizes object/array spread & const/let natively
  • preventScrollOnSwipe - "new" prop. Replaces preventDefaultTouchmoveEvent
    • same functionality but renamed to be more explicit on its intended use
    • fixed bug - where toggling this prop did not re-attach event listeners
    • update - we now only change the passive event listener option for touchmove depending on this prop
    • Thank you @stefvhuynh

Bug fixes:

  • fix bug where directional swiped check allowed undefined/falsy values to set cancelablePageSwipe
  • fix bug when both trackTouch and trackMouse were present that triggered an erroneous swipe when the user clicked outside and above the swipeable area

Infrastructure:

  • post size-limit report to PRs with bundle diff sizes
  • utilize rollup for build & output
    • remove dependency on microbundle
    • remove interop injected code - pull/260
    • Thank you @binoy14
  • upgrade lots of dev dependencies
    • 🎉 upgrade to typescript v4.6.3
  • export/outputs housekeeping and cleaning (mimicked from react-redux)
    • removed/renamed exports from package.json:
      • browser, umd:main(renamed dist), jsnext:main(use module), typings(use types)
    • moved exports - old => new
      • "main": "./dist/react-swipeable.js" => "main": "./lib/index.js"
      • "module": "./dist/react-swipeable.module.js" => "module": "es/index.js"
      • "types": "./dist/index.d.ts" => "types": "./es/index.d.ts"

v6.2.2

  • add react v18 to peerDependencies

v6.2.1

  • Fix issue with some config properties being set to undefined breaking swipeable
    • PR #296
    • explicitly set undefined config props to config defaults
    • Thank you @simonflk

v6.2.0

  • delta prop can now be an object specifying different values for each direction
  • Maintenance
    • upgrade to latest version of microbundle
      • remove comments from built files
        • attempt to lower size to counter unnecessary increase from microbundle upgrade due to rollup output.interop
      • include type updates influenced by PR #259
    • ~dependabot security updates~

v6.1.2

  • Maintenance
    • actually include dependabot security updates
    • update badge links

v6.1.1

  • Maintenance
    • ~dependabot security updates~
    • Migrate to github actions, remove travis, update badges
    • Update examples and provide link via codesandbox

v6.1.0

  • Add new event handler prop onSwipeStart

    • called only once per swipe at the start and before the first onSwiping callback
      • The first property of the SwipeEventData will be true
    • PR #226
    • Thank you @feketegy for the idea!
  • typescript updated to v4.1.3 and associated deps bumped to be compatible

v6.0.1

  • Fix issue with first property on SwipeEventData always being true.

v6.0.0

New Features:

  • include passive event listener option, by default, to internal uses of addEventListener
  • add new onTap event handler prop which executes its callback after a tap
  • add new vxvy event data property
    • [ deltaX/time, deltaY/time] - velocity per axis
    • Thank you @upatel32!

Breaking Changes:

  • remove <Swipeable> component
  • event data update correctly calculate deltaX and deltaY
    • from initial - current to current - initial
    • fixes issue #157
    • Thank you @upatel32!
  • drop support for ie11
    • using addEventListener options object needs to be polyfilled, browser support
  • requires react >= 16.8.3, additionally supports new react v17

Bug fixes:

  • Swipes can now start at edges (x or y === 0)

Infrastructure:

  • typescript Converted entire code base, tests, and examples to typescript
    • changed type EventData -> SwipeEventData - The event data provided for all swipe event callbacks
    • removed type SwipeableOptions - use SwipeableProps now
    • removed types associated with <Swipeable> component
    • new type TapCallback - callback for the new onTap prop handler
    • new type SwipeDirections - "Left" | "Right" | "Up" | "Down"
  • Converted tests to @testing-library/react, react testing library
  • Build bundles with microbundle. microbundle

Maintenance:

  • Upgraded all dev dependencies, jest, babel, webpack, eslint, prettier

5.5.0

5.4.0

  • Add initial property to eventData that supplies the inital [x, y] swipe value coordinates issue #150 and PR #131

5.3.0

5.2.3

5.2.2

5.2.0

5.1.0

  • Fix for preventDefaultTouchmoveEvent in safari issue #127 and PR #131
    • Thank you @JiiB and @bhj!
    • use ref callback for both <Swipeable> and useSwipeable to attach all touch event handlers
      • useSwipeable's returned handlers now contains a ref callback
      • Please see disscusion and comments in both #127 and #131 for more details and info.
        • fix avoids the passive: true issue from chrome document event listeners
        • fix avoids bug on safari where the touchmove event listener needs to be attached before a touchstart in order to be able to call e.preventDefault
  • removed touchHandlerOption prop
    • fix above deprecates this prop

5.0.0

  • Introduce react hook, useSwipeable
  • Core rewrite to simplify api and trim down bundled size
  • Add size-limit to help keep bundled size down
  • Add es export via "module": "es/index.js" to package.json
  • Add prettier code formating
  • [BREAKING] simplify handler event data to allow destructuring
    • onSwiped = ({ event, direction, absX, absY, velocity}) => console.log('swiped')
  • [BREAKING] deprecated onSwiping{Left|Right|Up|Down} handler props
    • can be replaced with direction/dir event data
    • onSwiping = ({ dir }) => console.log(`swiping - ${dir}`)
  • [BREAKING] deprecated props
    • flickThreshold
    • stopPropagation
    • disabled
  • [BREAKING] deprecated passing "rest" of props down
    • removed additional props besides the ones used by <Swipeable> from being passed down
      • only className and style get passed to <Swipeable>'s dom node, default div

4.3.0

  • Add rotationAngle prop. #103
    • will allow to set a rotation angle, e.g. for a four-player game on a tablet, where each player has a 90° turned view.
    • Thank you @Narquadah and @LarsKumbier!

4.2.2

  • fixed bug that happened when if either onSwiping or onSwiped were set we were not calling e.preventDefault() appropriately

4.2.0

  • Add support for calling preventDefault on Chrome 56+ via passive event support checking and manual event listener setup. #88

4.1.0

  • add disabled prop. #83
  • add innerRef prop that allows user to access to <Swipeable>'s inner dom node react ref. #82

4.0.1

  • fixed bug where delta was causing a swipe to not be tracked correctly, #74 , thanks @mctep

4.0.0

  • Major Change preventDefaultTouchmoveEvent defaults to false now #69
  • Major Change drop support for React 12 & 13, peerDependencies updated #64
    • prop-types added to dependencies #64
  • Major Change trackMouse now 'tracks' the swipe outside of the swipeable component, #67.
  • react 16 added to peerDependencies

3.9.0

3.8.0

  • Allow onMouseDown, onMouseUp, and onMouseMove props to fire appropriately again. #55, thanks @lochstar
  • Stop using this.state to track swipes, thanks @grantila for pointing out this change and submitting PR, #58. Should provide minor performance gains since Swipeable will no longer be calling this.setState internally.

3.7.0

3.6.0

  • add stopPropagation prop for all swipe events, defaults to false. See #46 for more info.

3.5.1

  • fix React 15.2.0 warning for unknown properties on DOM elements

3.5.0

  • Add configurable container element via nodeName prop, defaults to 'div'. See #24 and #40 for more info.

3.4.0

  • Add preventDefault while swiping when props onSwipedLeft, onSwipedRight, onSwipedUp, and onSwipedDown are present. See #21 and #37 for more info.

3.3.0

  • Adds velocity data to onSwiping callback
  • Updated the build process introducing ES2015 and babel

3.2.0

  • Adds preventDefaultTouchMoveEvent option, defaults to true

3.1.0

  • Adds isFLick to onSwipe events
  • Removes React as a peer dep
  • Adds onSwiping events

3.0.2

  • Fixes onSwipeDown and onSwipeUp events

3.0.1

  • Fixes vertical swiping

3.0.0

  • Refactors build into jsx.

2.1.0

  • Adds onSwipedUp, onSwipedRight, onSwipedDown, onSwipedLeft callbacks.

2.0

  • onFlick prop has been removed.

  • onSwipe now has a 4th argument for the callback Boolean isFlick

  • Added a prop flickThreshold which allows you to customize at what velocity a flick is detected.