gallery-tour
Version:
A modern, responsive, Airbnb-style gallery component for React.
105 lines (75 loc) โข 2.8 kB
Markdown
# Airbnb Gallery React Library
A modern, responsive, Airbnb-style gallery component for React. Features a beautiful grid, sectioned view, and modal/lightbox with swipe, fade, and thumbnail navigation. Built with React, Tailwind CSS, and Embla Carousel.
## โจ Features
- Responsive Airbnb-style grid (first image large, others small)
- Sectioned view for grouped images
- Modal/lightbox with swipe (mobile) and fade (desktop)
- Keyboard navigation, thumbnails, and custom modal buttons
- TypeScript support
- Easily theme with Tailwind CSS
## ๐ Installation
```bash
npm install @your-org/airbnb-gallery embla-carousel-react
```
> **Peer dependencies:**
> - `react` (>=17)
> - `react-dom` (>=17)
> - `embla-carousel-react` (>=8)
## ๐ Usage
```tsx
import { Gallery } from '@your-org/airbnb-gallery'
const images = [
'https://images.unsplash.com/photo-1.jpg',
'https://images.unsplash.com/photo-2.jpg',
'https://images.unsplash.com/photo-3.jpg',
// ...
]
function App() {
return <Gallery images={images} />
}
```
### Sectioned View Example
```tsx
import { Gallery, GalleryImage } from '@your-org/airbnb-gallery'
const sectionedImages: GalleryImage[] = [
{ url: '...', label: 'Living Room', section: 'Living' },
{ url: '...', label: 'Kitchen', section: 'Kitchen' },
// ...
]
<Gallery images={sectionedImages} mode="sections" sectionsTitle="Tour" />
```
## ๐ฆ API
### `Gallery` Props
| Prop | Type | Default | Description |
|-------------------|-----------------------------------|----------------------|---------------------------------------------|
| images | `string[] \| GalleryImage[]` | **required** | Array of image URLs or objects |
| mode | `'grid' \| 'sections'` | `'grid'` | Display mode |
| buttonLabel | `string` | `'Show all photos'` | Text for the grid overlay button |
| customModalButtons| `React.ReactNode` | `undefined` | Custom buttons in modal (e.g. share, save) |
| sectionsTitle | `string` | `'Photos'` | Title for sectioned view |
### `GalleryImage` Type
```ts
type GalleryImage = {
url: string;
label?: string;
section?: string;
}
```
## ๐จ Customization
- Style with Tailwind CSS classes (override or extend as needed)
- Pass custom buttons (e.g. share, save) to the modal
- Use your own section/grouping logic with `GalleryImage[]`
## ๐งช Testing
This library is fully tested with Vitest and React Testing Library. To run tests:
```bash
npm test
```
## ๐ License
MIT