Release v3.6.0#99
Draft
eds2002 wants to merge 29 commits into
Draft
Conversation
Port the gesture runtime from next into the v3.6 shared module while keeping v3 compatibility shims in place. Move the gesture implementation under providers/screen/gestures so pan, pinch, activation, ownership, scroll coordination, policies, and runtime stores live behind one screen-scoped boundary. Pan and pinch now keep stable recognizer identity and read the latest runtime config from a stable shared runtime object. This lets gesture direction, enabled state, and sensitivity change without rebuilding the detector. Add pinch support to the shared gesture runtime, race pan and pinch recognizers, coordinate Transition.ScrollView native gestures with owning gestures, and preserve ancestor shadowing through explicit direction-claim registration. Restore component-stack isolation boundaries and keep useScreenGesture() returning the legacy pan ref for v3 callers. Backport next snap behavior with a v3-safe API shape: current.snapIndex is the target/discrete snap index, current.animatedSnapIndex is the live fractional index, and deprecated top-level snapIndex remains the v3 fractional alias. Programmatic snapTo now chooses expand/collapse specs from current progress and uses SharedValue.get() for auto snap resolution. Preserve soft-deprecated v3 surfaces while adopting the new runtime. Deprecated gesture aliases stay hydrated, flat interpolator return keys still normalize, styleId="config" remains usable as a style slot, gestureReleaseVelocityMax keeps capping release velocity, and DefaultSpec keeps Reanimated v3 restSpeedThreshold while disabling overshoot clamping. Add regression coverage for direction ownership, scroll coordination, multi-direction snap gestures, snap transition spec selection, runtime config stripping, snap index semantics, gesture velocity and sensitivity, and ancestor walking. Verification: - bun run typecheck - bun run lint - bun test packages/react-native-screen-transitions/src/shared/__tests__ - bun run build
Backport the cleaned next gesture runtime onto release/v3.6, including the merged screen gesture config hook, dynamic interpolator options, stable runtime sensitivity, and leaner gesture builder internals. Keep v3 behavior compatible by default: disabled non-snap gestures do not track or claim directions unless experimental_allowDisabledGestureTracking is enabled. Snap point gestures continue to track when gestureEnabled is false, matching existing v3 behavior. Preserve v3.6-specific release velocity capping and transition-state shape while adopting the next gesture module structure. Add focused compatibility coverage, update interpolator option tests, add nested/dynamic gesture e2e examples, and keep TypeScript 6 builds passing by silencing the moduleResolution deprecation. Verified with bun run lint, bun run typecheck, bun run build, focused gesture tests, and the full shared test suite.
Wire expandViaScrollView through the shared sheet scroll behavior resolver. This keeps the v3 alias effective while the canonical option remains sheetScrollGestureBehavior. Mark gestureReleaseVelocityMax as deprecated on the v3 compatibility path. It remains wired for v3 but is removed from the next gesture runtime. Align small gesture helper/docs drift without changing gesture behavior.
Backport the next slot-style resolver behavior to v3. Resolved slots now track emitted style and prop keys instead of only a few known fields. When a key disappears, the resolver materializes a concrete reset value. This avoids stale animated style or prop values sticking around across frames. Add regression coverage for style and prop reset materialization.
Remove the maskEnabled compatibility alias from the v3 public type surface. navigationMaskEnabled is the supported mask option for the current line. Drop the unused resolver and tests for maskEnabled so docs, types, and runtime behavior agree.
Keep the root and package READMEs as compact package landing pages. Point setup, examples, and API reference to the public docs site. Document the current v3 support line for Reanimated v3/v4 and RNGH v2.
Keep navigation zoom presenting the last measured grouped tag while a newly active group member is still missing source bounds. This prevents mask and content styles from collapsing during paged grouped zoom flows where the active id can change before the new boundary pair is ready. Move zoom helpers out of build.ts so the presented-tag fallback can share the same worklet-safe helpers, and add regression coverage for retargeting to an unmeasured group member.
Remove the TypeScript 6 deprecation suppression from the v3.6 package config because this branch is pinned to TypeScript 5.8, where the value is invalid. Wrap scroll gesture shared-value mutation in a typed helper so the current Reanimated SharedValue.modify signature accepts the state update callbacks. This keeps bun run typecheck green after the gesture backport.
Replace the reaction-built frame snapshot with a persistent shared frame that is hydrated in place from the current transition states. The derived version signal gives downstream worklets a scalar invalidation source while preserving stable object identity for the frame graph. This also moves snap-index derivation and optional content layout hydration onto persistent slots, so interpolators read live focus, neighbor, and layout state without rebuilding the frame object each tick.
…-transitions into release/v3.6 # Conflicts: # packages/react-native-screen-transitions/src/shared/utils/bounds/zoom/build.ts
✅ Deploy Preview for rnst-docs canceled.
|
Rework runtime screen options to use a single shared snapshot object. Gesture worklets now read the latest screen option snapshot directly. This avoids passing nested shared values through gesture builders. Add gesture as the canonical active gesture field. Deprecate direction as a pan-only compatibility field. Pan gestures write both gesture and legacy direction. Pinch gestures write pinch-in or pinch-out to gesture. Transition hydration, reset paths, snap behavior, and zoom presets prefer gesture. Tighten gesture direction helpers to stay worklet-safe. Update tests for interpolator options, snap behavior, hydration, and velocity. Verified with bun run typecheck. Verified with bun run lint. Verified with bun test packages/react-native-screen-transitions/src/shared/__tests__.
Add the container reveal bounds preset, refreshed docs, and dynamic e2e examples. Stabilize shared-bound measurement and link resolution for nested/group flows. Normalize overscrolled measurements, detach close-time scroll listeners, and model gesture settling.
Rework boundary measurement so source and destination capture only handle initial links. Refresh existing bounds only after coherent source and destination links are available. Keep grouped bounds bare while tracking the active id and the id that started a link. Expose coherent link handles with initialSource, initialDestination, and link.compute(). Use selected links inside reveal and zoom so derived styles do not re-resolve live state. Consolidate shared navigation geometry math and trim duplicate reveal and zoom helpers. Fix gesture lifecycle state so no-op pan releases do not leave animating stuck on. Clear gesture settling from actual resting values instead of an animateMany callback latch. Keep logicallySettled false while gesture translations or pinch scale are still resetting. Apply Boundary.Target prepared styles when a nested target drives measurement. Keep focused reveal target opacity explicit for the public style contract. Update bounds examples to cover style-id list targets and simplify zoom demo stress cases.
Remove ancestor and navigator-key matching from the bounds store.
Bounds now match and clean up by concrete screen keys only.
Add transition({ depth }) for ancestor and descendant transition scopes.
Keep useScreenAnimation compatible with its shipped ancestor targets.
Expose bounds and transition accessors outside the animation pipeline.
Add nested transition-scope examples, including a third-level route.
Guard initial destination blocking on an attachable source link.
Update bounds, transition, cleanup, and public API type tests.
Remove unused shared debounce and scroll-settle modules so they no longer ship. Clean package output before builds and exclude typecheck/test folders from packs. Collapse duplicate constants and type aliases, and rename gesture-local empty claims. Keep runtime option helpers private to their module. Includes the current reveal handoff and style-id spring tuning already in the tree.
Squash merge the better animation state work into release/v3.6. Modularize transition hydration around progress, settle, and snap state rules. Scope interpolator runtime options to the selected current or next route. Preserve freeform dismiss displacement and avoid stale close lifecycle state. Refine reveal gesture handoff, mask collapse, and style-id alpha behavior. Reduce baseline animated mapper work for mask, surface, and backdrop layers. Add focused unit coverage for gesture lifecycle, reveal, and transition state rules.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Draft release branch for the v3.6 line.
This branch has been refreshed with current
mainand is intentionally draft until the release contents are reviewed and conflicts/checks are resolved.Notes
mainrelease/v3.6