JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 41
  • Score
    100M100P100Q68755F
  • License MIT

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

Package Exports

  • gallery-tour
  • gallery-tour/dist/styles.css

Readme

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

npm install @your-org/airbnb-gallery embla-carousel-react

Peer dependencies:

  • react (>=17)
  • react-dom (>=17)
  • embla-carousel-react (>=8)

๐Ÿ›  Usage

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

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

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

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:

npm test

๐Ÿ“„ License

MIT