Skip to main content
Version: Unreleased

Types

SheetDetent

<TrueSheet detents={['auto', 0.8, 1]}>
<View />
</TrueSheet>
ValueDescription🍎🤖🌐
"auto"Auto resize based on content height.16+
"peek"Collapsed height based on the combined header and absolute footer heights, plus the content up to the bottom of a TrueSheetPeek component rendered within it. Falls back to a fixed height of 150 when none is provided.16+
numberFractional height (0-1) representing percentage of screen height.
info

The "auto" detent derives the sheet height from the content's natural height. With scrolling content, it sizes to the scroll view's content height and resizes as content grows or shrinks. See Scrolling Content.

BackgroundBlur

Blur style that is mapped into native values in iOS.

<TrueSheet backgroundBlur="dark">
<View />
</TrueSheet>
Value
"light"
"dark"
"default"
"extra-light"
"regular"
"prominent"
"system-ultra-thin-material"
"system-thin-material"
"system-material"
"system-thick-material"
"system-chrome-material"
"system-ultra-thin-material-light"
"system-thin-material-light"
"system-material-light"
"system-thick-material-light"
"system-chrome-material-light"
"system-ultra-thin-material-dark"
"system-thin-material-dark"
"system-material-dark"
"system-thick-material-dark"
"system-chrome-material-dark"

BlurOptions

Options for customizing the blur effect. Only applies when backgroundBlur is set.

<TrueSheet
backgroundBlur="dark"
blurOptions={{
intensity: 80,
interaction: false,
}}
>
<View />
</TrueSheet>
PropertyTypeDescriptionDefault
intensitynumberThe intensity of the blur effect (0-100).system default
interactionbooleanEnables or disables user interaction on the blur view. Disabling can help with visual artifacts on iOS 18+.true

ScrollableOptions

Options for customizing scrollable behavior. Applies to the scrollable provided via scrollableRef.

<TrueSheet
scrollableRef={scrollableRef}
scrollableOptions={{
scrollingExpandsSheet: false,
}}
>
<ScrollView ref={scrollableRef}>
<View />
</ScrollView>
</TrueSheet>
PropertyTypeDescriptionDefault
contentInsetAdjustmentBehaviorbooleanApplies the bottom safe-area inset to the scroll content automatically while the content can scroll. On iOS, sets the scroll view's native contentInsetAdjustmentBehavior to automatic; on Android and Web, the sheet applies the inset itself — parity React Native's iOS-only prop can't provide. Only applies while the sheet's insetAdjustment is 'automatic'; a relative footer absorbs the inset instead.true
scrollingExpandsSheetbooleanWhen false, scrolling the content does not expand the sheet to the next detent. Only dragging the grabber or sheet background expands it. Useful for YouTube-style comments sheets.true
keyboardScrollOffsetnumberAdditional offset when scrolling to a focused input above the keyboard.0
keyboardOffsetnumberAdjusts the bottom inset applied to the scrollable when the keyboard is shown. Negative values reduce it — pass -insets.bottom to cancel out safe-area padding already included in the content's paddingBottom.0
topScrollEdgeEffectScrollEdgeEffectThe scroll edge effect applied to the top edge of the scroll view and header. iOS 26+ only.'hidden'
bottomScrollEdgeEffectScrollEdgeEffectThe scroll edge effect applied to the bottom edge of the scroll view and footer. iOS 26+ only.'hidden'

HeaderOptions

Options for customizing header behavior.

<TrueSheet
header={<Header />}
headerOptions={{
position: 'absolute',
}}
>
{/* ... */}
</TrueSheet>
PropertyTypeDescriptionDefault
position'relative' | 'absolute'How the header participates in the sheet layout. 'relative' takes up space above the content and is included in the auto detent height. 'absolute' floats over the content, pinned to the top edge, and is excluded from the auto detent height.'relative'

FooterOptions

Options for customizing footer behavior.

<TrueSheet
footer={<Footer />}
footerOptions={{
position: 'absolute',
keyboardOffset: -16,
}}
>
{/* ... */}
</TrueSheet>
PropertyTypeDescriptionDefault
position'relative' | 'absolute'How the footer participates in the sheet layout. 'relative' takes up space below the content, pinned to the bottom edge — included in the auto detent height but excluded from the peek detent height (it's pushed off-screen at peek). 'absolute' floats over the content, pinned to the bottom edge — excluded from the auto detent height but included in the peek detent height.'relative'
keyboardOffsetnumberAdjusts how far an absolute footer rises when the keyboard opens. Positive values raise it higher; negative values tuck the footer's own bottom padding behind the keyboard instead of leaving a gap. The built-in safe-area inset is skipped automatically while the keyboard is open. A relative footer stays in the layout flow behind the keyboard, so this has no effect.0

ScrollEdgeEffect

Controls the blur/gradient edge effect on the scroll view edges and header/footer overlay views. iOS 26+ only.

ValueDescription
'automatic'System default edge effect style.
'hard'A hard, opaque edge effect.
'soft'A soft, gradient edge effect.
'hidden'No edge effect. This is the default.

GrabberOptions

Options for customizing the grabber (drag handle) appearance.

<TrueSheet
grabber
grabberOptions={{
width: 48,
height: 6,
topMargin: 10,
cornerRadius: 3,
color: '#FF0000',
adaptive: false,
}}
>
<View />
</TrueSheet>
PropertyTypeDescriptionDefault
widthnumberThe width of the grabber pill.iOS: 36, Android: 32
heightnumberThe height of the grabber pill.iOS: 5, Android: 4
topMarginnumberThe top margin from the sheet edge.iOS: 5, Android: 16
cornerRadiusnumberThe corner radius of the grabber pill.height / 2
colorColorValueThe color of the grabber. Uses native styling when not provided.
adaptivebooleanWhether the grabber adapts to light/dark mode. Uses vibrancy on iOS and theme-based colors on Android.true

AccessibilityOptions

Options for customizing (e.g. localizing) the accessibility strings announced by screen readers.

<TrueSheet
accessibilityOptions={{
grabberLabel: 'Poignée de déplacement',
expandedValue: 'Développé',
collapsedValue: 'Réduit',
detentValue: 'Position {index} sur {count}',
}}
>
<View />
</TrueSheet>
PropertyTypeDescriptionDefault
grabberLabelstringThe accessibility label of the grabber.iOS: 'Sheet Grabber', Android: 'Drag handle'
grabberHintstringThe accessibility hint of the grabber. iOS only.'Double-tap to expand. Swipe up or down to resize the sheet'
expandedValuestringThe value announced when the sheet is at the last detent.'Expanded'
collapsedValuestringThe value announced when the sheet is at the first detent.'Collapsed'
detentValuestringThe value announced at intermediate detents. Supports {index} and {count} placeholders.'Detent {index} of {count}'
expandActionLabelstringThe label of the expand accessibility action. Android only.'Expand'
collapseActionLabelstringThe label of the collapse accessibility action. Android only.'Collapse'
paneTitlestringThe title announced when the sheet appears. Sets the accessibility pane title on Android and the hidden dialog title on Web.Android: 'Bottom sheet', Web: 'Sheet'
info

On iOS, the grabber strings only apply when grabberOptions is provided. Without it, iOS uses the system grabber which is already localized by the system.

InsetAdjustment

Controls how the bottom safe area inset affects detent heights.

<TrueSheet insetAdjustment="never">
<View />
</TrueSheet>
ValueDescription
"automatic"System handles insets automatically. This is the default behavior.
"never"TrueSheet will keep the layout as-is for precise sizing.

DetentInfoEventPayload

Object that comes with most sheet events.

{
index: 1,
position: 123.5,
detent: 0.5
}
PropertyTypeDescription
indexnumberThe detent index from the provided detents. See detents prop.
positionnumberThe Y position of the sheet relative to the screen.
detentnumberThe detent value (0-1) for the current index.

PositionChangeEventPayload

Object that comes with the onPositionChange event. Extends DetentInfoEventPayload.

{
index: 1.5,
position: 123.5,
detent: 0.5,
realtime: true
}
PropertyTypeDescription
indexnumberThe interpolated detent index. Continuous value that smoothly transitions between detents (e.g., 0.5 means halfway between detent 0 and 1).
positionnumberThe Y position of the sheet relative to the screen.
detentnumberThe detent value (0-1) for the nearest detent index.
realtimebooleanWhether the position is a real-time value (e.g., during drag or animation tracking). When false, position should be animated in JS.