MCPcopy Index your code
hub / github.com/arekkubaczkowski/react-native-bottom-sheet-stack

github.com/arekkubaczkowski/react-native-bottom-sheet-stack @v1.18.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.18.2 ↗ · + Follow
225 symbols 592 edges 83 files 4 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

react-native-bottom-sheet-stack

A stack manager for bottom sheets and modals in React Native. Supports push, switch, and replace navigation modes, iOS-style scale animations, and React context preservation. Works with any bottom sheet or modal library via a pluggable adapter architecture.

Documentation

View Full Documentation

Features

  • Adapter Architecture - Pluggable adapters for different bottom sheet/modal libraries. Ships with adapters for @gorhom/bottom-sheet, react-native-modal, react-native-actions-sheet, @swmansion/react-native-bottom-sheet, and a custom modal. You can also build your own.
  • Stack Navigation - push, switch, and replace modes for managing multiple sheets
  • Scale Animation - iOS-style background scaling effect when sheets are stacked
  • Context Preservation - Portal-based API that preserves React context in bottom sheets
  • Mixed Stacking - Bottom sheets and modals coexist in the same stack
  • Persistent Sheets - Pre-mounted sheets that open instantly and preserve state
  • Type-Safe - Full TypeScript support with type-safe portal IDs and params
  • Group Support - Isolated stacks for different parts of your app

Installation

yarn add react-native-bottom-sheet-stack

Peer Dependencies

yarn add react-native-reanimated react-native-safe-area-context react-native-teleport react-native-worklets zustand

Additionally, install the dependencies required by the adapter(s) you plan to use (e.g. @gorhom/bottom-sheet and react-native-gesture-handler for GorhomSheetAdapter).

Quick Example (with @gorhom/bottom-sheet)

import { forwardRef } from 'react';
import { View, Text, Button } from 'react-native';
import { BottomSheetView } from '@gorhom/bottom-sheet';
import {
  BottomSheetManagerProvider,
  BottomSheetHost,
  BottomSheetScaleView,
  useBottomSheetManager,
  useBottomSheetContext,
} from 'react-native-bottom-sheet-stack';
import { GorhomSheetAdapter } from 'react-native-bottom-sheet-stack/gorhom';

// 1. Define a bottom sheet component
const MySheet = forwardRef((props, ref) => {
  const { close } = useBottomSheetContext();

  return (
    <GorhomSheetAdapter ref={ref} snapPoints={['50%']}>
      <BottomSheetView>
        <View style={{ padding: 20 }}>
          <Text>Hello from Bottom Sheet!</Text>
          <Button title="Close" onPress={close} />
        </View>
      </BottomSheetView>
    </GorhomSheetAdapter>
  );
});

// 2. Setup provider and host
function App() {
  return (
    <BottomSheetManagerProvider id="default">
      <BottomSheetScaleView>
        <YourAppContent />
      </BottomSheetScaleView>
      <BottomSheetHost />
    </BottomSheetManagerProvider>
  );
}

// 3. Open bottom sheets from anywhere
function YourAppContent() {
  const { open } = useBottomSheetManager();

  return (
    <Button
      title="Open Sheet"
      onPress={() => open(<MySheet />, { mode: 'push' })}
    />
  );
}

Shipped Adapters

Adapter Import Wraps Extra Peer Dependencies
GorhomSheetAdapter react-native-bottom-sheet-stack/gorhom @gorhom/bottom-sheet @gorhom/bottom-sheet, react-native-gesture-handler
CustomModalAdapter react-native-bottom-sheet-stack Custom animated modal None
ReactNativeModalAdapter react-native-bottom-sheet-stack/react-native-modal react-native-modal react-native-modal
ActionsSheetAdapter react-native-bottom-sheet-stack/actions-sheet react-native-actions-sheet react-native-actions-sheet
SwmansionSheetAdapter react-native-bottom-sheet-stack/swmansion @swmansion/react-native-bottom-sheet @swmansion/react-native-bottom-sheet (Fabric / New Architecture); react-native-keyboard-controller (optional, only for keyboardBehavior="inset")

Adapters with 3rd-party dependencies are shipped as separate subpath exports so that importing the main package never triggers Metro resolution errors for uninstalled libraries. Each sheet in the stack can use a different adapter.

SwmansionSheetAdapter also adds a few opt-in conveniences over the bare native sheet (handle, fullHeight, fillContent, keyboardBehavior, cornerRadius) — see SwmansionSheetAdapter.

License

MIT

Extension points exported contracts — how you extend this code

BottomSheetPortalRegistry (Interface)
(no doc)
example/src/bottom-sheet.d.ts
ProviderProps (Interface)
(no doc)
src/BottomSheetManager.provider.tsx
BottomSheetContextValue (Interface)
(no doc)
src/BottomSheet.context.ts
BottomSheetPortalRegistry (Interface)
(no doc)
src/portal.types.ts
BottomSheetDefaultIndexContextValue (Interface)
(no doc)
src/BottomSheetDefaultIndex.context.ts
BottomSheetBackdropProps (Interface)
(no doc)
src/BottomSheetBackdrop.tsx
QueueItemProps (Interface)
(no doc)
src/QueueItem.tsx
BottomSheetPersistentProps (Interface)
(no doc)
src/BottomSheetPersistent.tsx

Core symbols most depended-on inside this repo

useBottomSheetContext
called by 49
src/useBottomSheetContext.ts
open
called by 48
src/useBottomSheetControl.ts
useBottomSheetManager
called by 29
src/useBottomSheetManager.tsx
open
called by 18
src/store/types.ts
useBottomSheetControl
called by 17
src/useBottomSheetControl.ts
addDebugLog
called by 9
example/src/components/BottomSheetDebugMonitor.tsx
updateSheet
called by 9
src/store/helpers.ts
useUser
called by 8
example/src/context/UserContext.tsx

Shape

Function 164
Interface 45
Method 16

Languages

TypeScript100%

Modules by API surface

src/store/hooks.ts20 symbols
example/src/sheets/ThirdPartyAdapterSheets.tsx16 symbols
src/store/types.ts14 symbols
example/src/sheets/ModalSheets.tsx13 symbols
example/src/sheets/PersistentMixedAdapters.tsx11 symbols
src/useBottomSheetControl.ts8 symbols
src/store/helpers.ts8 symbols
example/src/components/BottomSheetDebugMonitor.tsx8 symbols
src/bottomSheetCoordinator.ts7 symbols
src/adapter.types.ts7 symbols
src/useSheetRenderData.ts6 symbols
src/useScaleAnimation.ts6 symbols

For agents

$ claude mcp add react-native-bottom-sheet-stack \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page