Repository navigation
Release: version 6.0.0 - #848
Merged
Merged
Conversation
This allows the consistant approach to further customization
This is based on the native support of what Jetpack Compose provides
This aligns v6 with the legacy additional props from v5 API
When implementing the two thumb support, it was required to opt out of the fully native thumb in favor of custom implementation. However, as this custom implementation was based on vibe coded assummed legacy solution, the thumb was left without the natively supported features. This commit brings it back by implementing the custom liquid glass which layout is based on thumb calculation and measurements.
The tapToSeek on iOS platform is true by default and cannot be set to false
The example app will run both natives and web platforms which makes the separate example-web application no longer needed.
This refactor was solely based on callstack/Apex model
BartoszKlonowski
marked this pull request as draft
October 30, 2026 14:41
Disabled prop allows to customize the disabled styling of custom track, thumb and steps
The documentation in that file was fully scaffolded vibe-coding with Apex model
BartoszKlonowski
marked this pull request as ready for review
November 3, 2026 14:06
Keep the Android consistant
The fix is to use hasOverlappingRendering to avoid Android clipping the alpha viewed components
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.
This release brings the Slider to Material Design 3 on Android, and SwiftUI on iOS.
Web and Windows are soon to follow.
The package moves to
@callstack/slider, Android moves to Kotlin, Compose and Material 3, iOS moves to a 15.1 deployment target with SwiftUI. The example app loses its outdated screens and gains a README walking through the scenarios it keeps.The old implementation wrapped the platform's control —
AppCompatSeekBaron Android,UISlideron iOS — and reached whatever the control did not support by patching the wrapper: step markers rendered in JavaScript beside a native view whose width had to be measured first, a thumb tintedtransparentso an overlay could stand in for it.That ceiling is what this release removes. Both platforms are now built on the declarative toolkit of their own, so the features below live in the Slider itself rather than around it, and the JS layer shrinks to the parts that are only to provide the support for the feature, not the feature itself.
What the rewrite buys
thumb, atrackor astepMarkerscomponent is mounted as a child of the Slider and placed inRNCSliderShadowNode::layout— thumbs centred on their value, step markers hung off the track, a custom track stretched to its length. The native view then moves those frames as the value changes, without asking JS for a relayout on every frame of a drag. Each host ispointerEvents="none", so a custom thumb never steals the drag from the Slider.RNCSliderGeometryon iOS, one set of track helpers on Android — the ranged variant only adding a second thumb. That is what let ranged mode come with the same behaviour on both platforms, rather than an approximation of it. That fixes Flicker on Initial Render Android #733ranged,step,orientation,lowerLimit,stepMarkers), and each platform decides how. Defaults are declared once, asCodegenTypes.WithDefault, so JS, Kotlin, Swift and C++ cannot disagree about them.DirectEventHandlers, and JS passes a handler down only when one was given, so an idle Slider sends nothing across the bridge. The oldonRNCSliderValueChangeandonChange, both bubbling, are gone along with the re-emitting of values they relied on.0.1reports0.3, not0.30000000000000004. JS, iOS and Android agree on how many steps a range holds, including the last one when the step does not divide it evenly.What is included:
disabledon both platforms, drawn in the platform's own off state, taking no touch, tap, drag or keyboard and reporting nothing of its own — while the props keep saying where its thumbs standminimumTrackColor,middleRangeTrackColor,maximumTrackColor) for those who only need a recolour, closes Android: Tint color inconsistency #84,stepMarkersfor the steps below the track —truefor the built-in ones, a component for custom ones, closes Allow step marker styling #741stepMarkersare fully native, avoiding JS-based workarounds, fixes Thumb and steps are not aligned #689,stepsnapping, for single and ranged Sliders alike, including fractional steps, closes Step between 0 and 1 produces floating point rounding errors #742lowerLimitandupperLimit, limiting where a thumb can be dragged while the track still spans the full rangeorientationaccepting"horizontal"or"vertical", replacing the Windows-onlyverticalboolean, closes Unable to create Vertical Slider #196onSlidingStartandonSlidingCompleteas native events, fired on grab and release regardless of whether the value moved, closes Support native events #99onLeftValueChangeandonRightValueChange, reporting each thumb of a ranged Slider on its owntapToSeekno longer needs a prop. A hold on the track picks the nearest thumb up and drags it along, the same read done slowly