MindeesUI
ComponentsOverlays

BottomSheet

Lightweight bottom-anchored sheet with token-driven animation, configurable height, and dismiss-on-backdrop.

BottomSheet is a minimum-deps bottom-anchored panel for simple show/dismiss flows. For full pan-gesture snapping (multiple stops, blur backdrop, content-aware sizing) consume @gorhom/bottom-sheet directly — this implementation favours zero peer-deps and predictable behaviour.

Import

import { BottomSheet } from '@mindees/ui';

Usage

const [visible, setVisible] = useState(false);

return (
  <>
    <Button onPress={() => setVisible(true)}>Show sheet</Button>
    <BottomSheet visible={visible} onClose={() => setVisible(false)} height="60%">
      <Heading level={3}>Filters</Heading>
      <Text>Sheet contents go here.</Text>
    </BottomSheet>
  </>
);

Auto-height (sized to content):

<BottomSheet visible={visible} onClose={close} height="auto">
  <Text>Short content</Text>
</BottomSheet>

Props

PropTypeDefaultDescription
visiblebooleanControls whether the sheet is shown.
onClose() => voidCalled on backdrop press (when dismissible) and on the platform back gesture.
dismissiblebooleantrueWhen false, backdrop taps are ignored.
heightnumber | string | 'auto''60%'Sheet height — dp number, percentage string, or 'auto' to size to content.
childrenReact.ReactNodeSheet contents (a drag handle is rendered above them).

Accessibility

Built on React Native's Modal, so the platform back gesture calls onClose and assistive tech treats the sheet as a modal layer. The animated slide-in honours reduce-motion (the transform is skipped when enabled). The drag handle is decorative — taps on the sheet body are stopped from bubbling to the backdrop.

On this page