zero-dependency-bottom-sheet
Version:
A zero-dependency, customizable React bottom sheet component with drag gestures, snap points, and TypeScript support
127 lines (101 loc) ⢠4.81 kB
Markdown
# Zero Dependency Bottom Sheet
A lightweight, customizable React bottom sheet component with zero dependencies.
## Installation
```bash
npm install zero-dependency-bottom-sheet
```
OR
```bash
yarn add zero-dependency-bottom-sheet
```
## Features
š« Zero dependencies
š± Responsive design
šÆ Snap points for precise positioning
šØ Highly customizable styling
š Smooth animations
š² Touch-friendly drag gestures
## Usage
```jsx
import React, { useState } from "react";
import "./App.css";
import { BottomSheet } from "zero-dependency-bottom-sheet";
const App: React.FC = () => {
const [isSheetVisible, setIsSheetVisible] = useState(false);
const showSheet = () => {
setIsSheetVisible(true);
};
const hideSheet = () => {
setIsSheetVisible(false);
};
return (
<div className="App">
<button className="show-btn" onClick={showSheet}>
Show Bottom Sheet
</button>
<BottomSheet
isOpen={isSheetVisible}
onClose={hideSheet}
initialHeight={50}
borderRadius={20}
backdropOpacity={0.5}
dragAreaColor={"#000000"}
dragIconColor={"red"}
closeOnOverlayClick={true}
snapPoints={[25, 60]}
backgroundColor="red"
>
<BottomSheet.Header>
<div
style={{
display: "flex",
justifyContent: "center",
background: "blue",
}}
>
This is the Header
</div>
</BottomSheet.Header>
<BottomSheet.Body>
<div style={{ background: "red", padding: "25px 60px" }}>
<h2>Bottom Sheet Modal</h2>
<button
style={{ color: "black", background: "GrayText" }}
onClick={hideSheet}
data-testid="close-button"
>
Close the sheet
</button>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Maiores,
quisquam rem laborum adipisci voluptate deleniti officiis alias
minima perspiciatis, nostrum quibusdam! Doloribus nam obcaecati
blanditiis ducimus quasi optio aliquid aspernatur.
</p>
</div>
</BottomSheet.Body>
</BottomSheet>
</div>
);
};
export default App;
```
## Props
## Props
## Props
| Prop | Type | Default | Description | Required/Optional |
| :------------------ | :---------------- | :---------- | :------------------------------------------------------------------------------------------ | :---------------- |
| isOpen | `boolean` | required | Controls the visibility of the bottom sheet | Required |
| onClose | `() => void` | required | Callback function when bottom sheet is closed | Required |
| children | `React.ReactNode` | required | Content to be rendered inside the bottom sheet | Required |
| initialHeight | `number` | `50` | Initial height of the bottom sheet in percentage (values greater than 85 will be set to 85) | Optional |
| backdropColor | `string` | `'#000000'` | Color of the backdrop overlay | Optional |
| backdropOpacity | `number` | `0.5` | Opacity of the backdrop overlay (0-1) | Optional |
| borderRadius | `number` | `20` | Border radius of the bottom sheet in pixels | Optional |
| dragAreaColor | `string` | `'#000000'` | Color of the drag handle area | Optional |
| dragIconColor | `string` | `'#ffffff'` | Color of the drag handle | Optional |
| closeOnOverlayClick | `boolean` | `true` | Close the bottom sheet when overlay is clicked | Optional |
| snapPoints | `number[]` | `undefined` | Define snapping positions during dragging (values greater than 85 will be set to 85) | Optional |
| backgroundColor | `string` | `'#ffffff'` | Background color of the content part of the bottom sheet | Optional |
## License
MIT Ā© Ahmad Ghorbani