Skip to main content

Image Gallery

A flexible image gallery with grid/scroll layouts, lightbox modal, hover effects, and compound component pattern for full customization.

Installation

$ npx shadcn@latest add @orecus/image-gallery
Dependencies:
motionlucide-react
Registry:
@orecus/card@orecus/header@orecus/enhanced-button@orecus/enhanced-empty-state@orecus/use-reduced-motionskeleton

Component

Props

PropTypeDefaultDescription
imagesImageGalleryImage[]Array of images for data-driven mode
type'normal' | 'subtle' | 'strong' | 'solid' | 'none''normal'Glass styling type
hoverEffect'none' | 'overlay''overlay'Hover effect - overlay shows alt text with blur
overlayStyle'dark' | 'light' | 'gradient''dark'Overlay style when hoverEffect is 'overlay'
aspectRatio'square' | 'video' | 'wide' | 'portrait''video'Default aspect ratio for items
borderRadius'none' | 'sm' | 'md' | 'lg''md'Default border radius for items
ImageComponentReact.ComponentType'img'Custom image component (e.g., Next.js Image)
cardPropsPartial<CardProps>Card component props for customization
classNamestringAdditional CSS classes

Compound Components

ImageGallery.Header

Header with title, icon, description, and action children

PropTypeDefaultDescription
titlestringTitle text
descriptionstringDescription text
iconLucideIconIcon component
size'sm' | 'md' | 'lg' | 'xl'Size variant
childrenReactNodeAction elements

ImageGallery.Grid

Responsive grid layout with standard or bento mode

PropTypeDefaultDescription
columns2 | 3 | 4 | 5 | 64Number of columns (standard mode)
gap'sm' | 'md' | 'lg''md'Gap between items
variant'standard' | 'bento''standard'Grid layout variant
bentoLayoutImageGalleryBentoSpan[]Pattern of col/row spans (repeats for items)
bentoColumnsnumber | ImageGalleryGridColumns4Column count for bento grid (number or responsive object)
itemHeightnumber150Base row height in pixels for bento mode
stagger'none' | 'fade' | 'slide-up' | 'slide-down' | 'scale' | 'fade-slide''none'Stagger animation preset for grid items
staggerDelaynumber0.05Delay between each item animation in seconds
childrenReactNodeImageGallery.Item elements

ImageGallery.Scroll

Horizontal scroll layout with navigation arrows

PropTypeDefaultDescription
showArrowsbooleantrueShow navigation arrows
itemWidthnumber200Minimum width of items
gap'sm' | 'md' | 'lg''md'Gap between items

ImageGallery.Item

Single image thumbnail

PropTypeDefaultDescription
image*ImageGalleryImageImage data object
indexnumberIndex for ordering/lightbox
onClick() => voidClick handler
hoverEffect'none' | 'overlay'Override hover effect
bentoSpanImageGalleryBentoSpanOverride col/row span for this item in bento mode

ImageGallery.Lightbox

Modal viewer with keyboard navigation

PropTypeDefaultDescription
showThumbnailsbooleantrueShow thumbnail strip

ImageGallery.Empty

Empty state placeholder

PropTypeDefaultDescription
childrenReactNodeCustom empty content