From 9c2da180aaf766b9affe143373cf04ac9f957b8e Mon Sep 17 00:00:00 2001 From: Bohdan Pomohaibo Date: Mon, 19 Oct 2026 23:59:05 +0300 Subject: [PATCH 1/3] chore(release): prepare 1.0.0 --- CHANGELOG.md | 68 ++++++++++++++++++++++++++++++++++++++++++++ docs/migration-v1.md | 4 +-- docs/support.md | 2 +- package-lock.json | 4 +-- package.json | 2 +- 5 files changed, 74 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4afdb3b..5d5a1fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,74 @@ the entry for the matching version. ## Unreleased +## 1.0.0 - 2026-10-19 + +First stable v1 release. Install it with +`npx expo install react-native-swipeable-actions`. 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. + +### 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 diff --git a/docs/migration-v1.md b/docs/migration-v1.md index 5564592..e2766c2 100644 --- a/docs/migration-v1.md +++ b/docs/migration-v1.md @@ -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`, then rebuild + the iOS and Android apps. ## At a glance diff --git a/docs/support.md b/docs/support.md index 5debc9e..75ceab0 100644 --- a/docs/support.md +++ b/docs/support.md @@ -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 +Every configuration below ran the 1.0 release. 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. diff --git a/package-lock.json b/package-lock.json index 3e412f6..b050e58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "react-native-swipeable-actions", - "version": "1.0.0-rc.0", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-native-swipeable-actions", - "version": "1.0.0-rc.0", + "version": "1.0.0", "license": "MIT", "devDependencies": { "@biomejs/biome": "2.4.9", diff --git a/package.json b/package.json index bb2d458..7dd7e34 100644 --- a/package.json +++ b/package.json @@ -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", From bf5fc564367f26aff9ac7deb69377fed1dd96ee8 Mon Sep 17 00:00:00 2001 From: Bohdan Pomohaibo Date: Tue, 20 Oct 2026 00:02:11 +0300 Subject: [PATCH 2/3] docs(release): date 1.0.0 and drop pre-release wording --- CHANGELOG.md | 7 ++++--- docs/migration-v1.md | 2 +- docs/support.md | 2 +- e2e/README.md | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d5a1fa..d1d98a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,13 @@ the entry for the matching version. ## Unreleased -## 1.0.0 - 2026-10-19 +## 1.0.0 - 2026-10-20 First stable v1 release. Install it with -`npx expo install react-native-swipeable-actions`. Rebuild the iOS and Android +`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 package code is the same as in 1.0.0-rc.0. The lists below are the changes +since 0.1.12. ### BREAKING CHANGES diff --git a/docs/migration-v1.md b/docs/migration-v1.md index e2766c2..82a5679 100644 --- a/docs/migration-v1.md +++ b/docs/migration-v1.md @@ -10,7 +10,7 @@ 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`, then rebuild +- Install it with `npx expo install react-native-swipeable-actions@^1`, then rebuild the iOS and Android apps. ## At a glance diff --git a/docs/support.md b/docs/support.md index 75ceab0..802053d 100644 --- a/docs/support.md +++ b/docs/support.md @@ -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 1.0 release. The E2E suite has 62 cases +Every configuration below ran the 1.0 release candidate. 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. diff --git a/e2e/README.md b/e2e/README.md index 2f7bc02..63e9e58 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -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 @@ -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. From f1ce92a40fe691906e6af82e09e9fd9e306f1353 Mon Sep 17 00:00:00 2001 From: Bohdan Pomohaibo Date: Tue, 20 Oct 2026 00:04:33 +0300 Subject: [PATCH 3/3] docs(support): state the CI rule for each 1.0 release --- docs/support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/support.md b/docs/support.md index 802053d..15914eb 100644 --- a/docs/support.md +++ b/docs/support.md @@ -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 1.0 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.