UNPKG

gallery-tour

Version:

A modern, responsive, Airbnb-style gallery component for React.

105 lines (75 loc) โ€ข 2.8 kB
# 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