Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,75 @@ the entry for the matching version.

## Unreleased

## 1.0.0 - 2026-10-20

First stable v1 release. Install it with
`npx expo install react-native-swipeable-actions@^1`. Rebuild the iOS and Android
apps after you upgrade. Read the [v1 migration guide](docs/migration-v1.md).
The package code is the same as in 1.0.0-rc.0. The lists below are the changes
since 0.1.12.

### BREAKING CHANGES

- The package requires the New Architecture (Fabric) on iOS and Android. The
legacy architecture (Paper) is not supported. The iOS view does not compile on it.
- The minimum peer versions are now Expo SDK 54 (`expo >=54.0.0`), React Native
0.81 (`react-native >=0.81.0`) and React 19.1 (`react >=19.1.0`).
- Removed `actions`, `actionsWidth` and `actionsPosition`. Pass explicit pairs:
`rightActions` + `rightActionsWidth` and/or `leftActions` + `leftActionsWidth`
([#15](https://github.com/chocky335/react-native-swipeable-actions/issues/15)).
- Removed `SWIPE_DEFAULTS.ACTIONS_POSITION`. There is no default side.
- Removed `actionsWidth` and `actionsPosition` from the raw `SwipeableView` props.
- `SwipeableProps` is now a union type of valid side configurations, not an
interface. Use `SwipeableProps & { ... }` for wrapper props.
- Every row uses one native engine. Rows migrated from the single-sided API take
its behavior:
- A drag toward a disabled side stays closed and does not start a swipe. The
old wrong-direction rubber band is gone.
- `onSwipeStateChange` follows the active side. Do not depend on the old
callback cadence.
- `close(false)` and `cancel()` also clear the cached open state for the key.
- Cache restoration and width updates are not swipes. Do not use the swipe
callbacks to detect them.
- `open()` with no side opens the right side if it is enabled, else the left side.

### Added

- Independent left and right actions on one row, each with its own width.
- `open(side)` and `Swipeable.open(key, side)`.
- `onLeftSwipeEnd` and `onRightSwipeEnd`. They run after `onSwipeEnd`.
- Opt-in `appearance="ios26"` iOS action motion, and the `hapticFeedback`
prop for the iOS threshold haptic. Reduce Motion removes the motion scaling
([#19](https://github.com/chocky335/react-native-swipeable-actions/issues/19)).
- Type exports `SwipeSide`, `SwipeAppearance`, `SwipeableCommonProps`,
`SwipeStartEvent`, and the aliases `TwoSidedSwipeableProps` and
`SwipeableComponentProps`.

### Fixed

- Action alignment on the physical edge in RTL layouts.
- A recycled or rebound row no longer receives commands, callbacks or open state
from its previous key.
- A drag that crosses the closed position no longer opens the opposite side.
- On Android, content replaced during a drag no longer keeps the drag offset.
- `Swipeable.closeAll()` now also closes rows that are not mounted (scrolled off
or on a covered screen), like `Swipeable.close(key)`.
- `expo-modules-core` is no longer a peer dependency. A fresh `npm install`
could pull a newer expo-modules-core than the app's Expo SDK uses. The app now
gets the version its `expo` package brings.
- The shipped Jest mock (`jestSetup.js`) no longer calls `onSwipeStart` when a row
mounts. Tests that relied on that call must fire the native event themselves,
as the README shows.
- On Android, a swipe with no touch events for 5 seconds is now cancelled
without an `onSwipeEnd`, and the rest of that touch is ignored.
- A cancelled swipe now reports the position where the row settles to
`onProgress` and `onSwipeStateChange`, so a progress UI does not stay mid-drag.
- An `autoClose` row that a cancelled drag returns to open now waits
`autoCloseTimeout` again and closes. Before, it stayed open.
- On iOS, a pan that has not passed `dragOffsetFromEdge` no longer stops a
pending auto-close or a settling animation. That work and a props change also
no longer swallow the pan, so the pan can still start a swipe, like on Android.

## 1.0.0-rc.0 - 2026-10-17

First release candidate for 1.0.0. Install it with
Expand Down
4 changes: 2 additions & 2 deletions docs/migration-v1.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ Do not mix v1 JavaScript with an older native binary.
architecture (Paper) is not supported. If your app still uses it, stay on 0.x.
- v1 requires Expo SDK 54 or newer, React Native 0.81 or newer and React 19.1 or
newer. Upgrade the app first, then install v1.
- Install it with `npx expo install react-native-swipeable-actions@next` while
1.0 is a release candidate, then rebuild the iOS and Android apps.
- Install it with `npx expo install react-native-swipeable-actions@^1`, then rebuild
the iOS and Android apps.

## At a glance

Expand Down
2 changes: 1 addition & 1 deletion docs/support.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ The package declares these ranges. They are minimums, not a tested matrix.

## Tested for 1.0

Every configuration below ran the release candidate. The E2E suite has 62 cases
Each 1.0 release must pass a full CI run on every configuration below. The E2E suite has 62 cases
(25 single-sided, 19 two-sided, 14 RTL, 3 swipe to go back, 1 performance) plus the
Maestro flows.

Expand Down
4 changes: 2 additions & 2 deletions e2e/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ The final `e2e-ios` gate requires all five jobs to succeed, all 62 registered ca

Run `cd e2e && npm run test:harness` for the offline shard-evidence regressions alongside the existing harness tests. Offline success does not establish simulator acceptance. Job isolation prevents one serial run from leaving later suites unstarted; it does not change or excuse individual test timeouts.

## Upcoming 1.0.0 API migration
## 1.0.0 API migration

The demo now uses explicit physical-side content/width pairs for every row. The original
25 cases in `swipeable.spec.ts` remain, alongside 19 two-sided, 14 RTL, 3 swipe-to-go-back and
Expand All @@ -118,4 +118,4 @@ only an existing test ID, not an accepted prop or fallback path. Press-counter t
Migrated single-side rows intentionally adopt the canonical engine's disabled-edge,
state-callback and instant-close/cache behavior. See
[the intentional behavior changes](../docs/migration-v1.md#intentional-behavior-changes).
Historical runs do not establish acceptance of this upcoming release.
Historical runs do not establish acceptance of a later release.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-native-swipeable-actions",
"version": "1.0.0-rc.0",
"version": "1.0.0",
"description": "High-performance native swipeable row component for React Native using Expo Modules",
"main": "src/index.ts",
"types": "build/index.d.ts",
Expand Down
Loading