* feat(expo-example): update to match example app structure - Add promise-based present/dismiss to TrueSheet.web.tsx - Remove tabs navigation, use stack-based routing - Add screens: Map, Standard, Modal, Test - Add shared components and sheet components - Add utils (constants, times, random) - Add react-native-maps dependency * feat(expo-example): add Map component and SheetStack with withLayoutContext - Add platform-specific Map component (native MapView, web View fallback) - Add sheet-stack route using expo-router's withLayoutContext - Integrate createTrueSheetNavigator with expo-router file-based routing * refactor: create shared example-shared package for common components - Create @truesheet/example-shared workspace package - Move common components (Button, Header, Footer, etc.) to shared - Move sheet components (BasicSheet, PromptSheet, etc.) to shared - Move utils (constants, times, random) to shared - Update example and expo-example to re-export from shared * chore: reorganize examples into examples/ folder - Move example/ to examples/bare/ - Move expo-example/ to examples/expo/ - Move example-shared/ to examples/shared/ - Update workspace paths in root package.json - Rename packages to @truesheet/bare-example, @truesheet/expo-example - Update script names (example -> bare, expo) * chore: update config paths for examples folder reorganization * chore: rename examples to example and update package names to @example/* * chore: move screen components to shared package - Add MapScreen, ModalScreen, StandardScreen, TestScreen to shared - Make screens navigation-agnostic with callback props - Add MapComponent prop to MapScreen for platform-specific map - Create Map component in bare example - Update expo and bare examples to use shared screens * chore: import screens directly from @example/shared/screens * chore: import components and utils directly from @example/shared * chore: remove unused sheets index files * chore: move Map component to shared package * chore: remove unused constants folder from expo example * chore: remove unused ReanimatedExample component * chore: update scripts for new example folder structure * chore: exclude example folder from jest test paths * chore: add expo prebuild step to clean script * fix: update config paths for new example folder structure * chore: categorize steps in clean script * fix: use workspace:* for example dependencies - Change @lodev09/react-native-true-sheet from * to workspace:* in bare and expo examples - Fixes duplicate view registration error caused by npm version being installed alongside workspace - Silence clean.sh script output while preserving error visibility |
||
|---|---|---|
| .github | ||
| .yarn | ||
| .zed | ||
| android | ||
| common/cpp/react/renderer/components/TrueSheetSpec | ||
| docs | ||
| example | ||
| ios | ||
| scripts | ||
| src | ||
| .clang-format | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .nvmrc | ||
| .prettierignore | ||
| .watchmanconfig | ||
| .yarnrc.yml | ||
| AGENTS.md | ||
| babel.config.js | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| eslint.config.mjs | ||
| jest.setup.js | ||
| lefthook.yml | ||
| LICENSE | ||
| package.json | ||
| react-native.config.js | ||
| README.md | ||
| RNTrueSheet.podspec | ||
| tsconfig.build.json | ||
| tsconfig.json | ||
| turbo.json | ||
| yarn.lock | ||
React Native True Sheet
Note
🎉 Version 3.0 is here! Completely rebuilt for Fabric with new features like automatic ScrollView detection, native headers/footers, sheet stacking, and more. Read the announcement
The true native bottom sheet experience for your React Native Apps. 💩
Features
- ⚡ Powered by Fabric - Built on React Native's new architecture for maximum performance
- 🚀 Native - Implemented in the native realm
- 🎯 Type-safe - Full TypeScript support with Codegen-generated native interfaces
- ♿ Accessible - Native accessibility and screen reader support out of the box
- 🔄 Flexible API - Use imperative methods or lifecycle events
- 🪟 Liquid Glass - iOS 26+ Liquid Glass support out of the box. Featured in Expo Blog
Installation
Important
Version 3.0+ requires React Native's New Architecture (Fabric) For the old architecture, use version 2.x. See the Migration Guide for upgrading.
Prerequisites
- React Native >= 0.76 (Expo SDK 52+)
- New Architecture enabled (default in RN 0.76+)
Expo
npx expo install @lodev09/react-native-true-sheet
Bare React Native
yarn add @lodev09/react-native-true-sheet
cd ios && pod install
Documentation
Usage
import { TrueSheet } from "@lodev09/react-native-true-sheet"
export const App = () => {
const sheet = useRef<TrueSheet>(null)
// Present the sheet ✅
const present = async () => {
await sheet.current?.present()
console.log('horray! sheet has been presented 💩')
}
// Dismiss the sheet ✅
const dismiss = async () => {
await sheet.current?.dismiss()
console.log('Bye bye 👋')
}
return (
<View>
<Button onPress={present} title="Present" />
<TrueSheet
ref={sheet}
detents={['auto', 1]}
>
<Button onPress={dismiss} title="Dismiss" />
</TrueSheet>
</View>
)
}
Testing
TrueSheet includes built-in Jest mocks for easy testing. Simply mock the package in your tests:
jest.mock('@lodev09/react-native-true-sheet');
All methods (present, dismiss, resize) are mocked as Jest functions, allowing you to test your components without native dependencies.
Contributing
See the contributing guide to learn how to contribute to the repository and the development workflow.
License
Made with ❤️ by @lodev09

