ImageGallery
imagegallery-1779394026158.tsx
'use client'
import { useState } from 'react'
const IMAGES = [
{ id:1, emoji:'🌄', label:'Mountains', bg:'linear-gradient(135deg,#667eea,#764ba2)', h:180 },
{ id:2, emoji:'🌊', label:'Ocean', bg:'linear-gradient(135deg,#0891b2,#0e7490)', h:120 },
{ id:3, emoji:'🌸', label:'Spring', bg:'linear-gradient(135deg,#ec4899,#db2777)', h:150 },
{ id:4, emoji:'🌿', label:'Forest', bg:'linear-gradient(135deg,#10b981,#059669)', h:130 },
{ id:5, emoji:'🌆', label:'City', bg:'linear-gradient(135deg,#374151,#111827)', h:160 },
{ id:6, emoji:'🌅', label:'Sunset', bg:'linear-gradient(135deg,#f59e0b,#ef4444)', h:140 },
]
export default function ImageGallery({ images = IMAGES }) {
const [selected, setSelected] = useState(null)
return (
<div>
<div style={{ columns:'2 200px', gap:'10px' }}>
{images.map(img => (
<div key={img.id} onClick={() => setSelected(img)} style={{
marginBottom:'10px', borderRadius:'12px', overflow:'hidden',
height:img.h, background:img.bg, cursor:'pointer',
display:'flex', alignItems:'center', justifyContent:'center',
fontSize:'48px', transition:'transform 0.2s',
breakInside:'avoid',
}}
onMouseEnter={e => e.currentTarget.style.transform='scale(0.97)'}
onMouseLeave={e => e.currentTarget.style.transform='scale(1)'}
>{img.emoji}</div>
))}
</div>
{selected && (
<div onClick={() => setSelected(null)} style={{
position:'fixed', inset:0, background:'rgba(0,0,0,0.8)', zIndex:100,
display:'flex', alignItems:'center', justifyContent:'center',
backdropFilter:'blur(8px)',
}}>
<div style={{
width:'400px', height:'300px', borderRadius:'20px', background:selected.bg,
display:'flex', flexDirection:'column', alignItems:'center', justifyContent:'center',
fontSize:'80px', boxShadow:'0 25px 80px rgba(0,0,0,0.5)',
}}>
{selected.emoji}
<div style={{ fontSize:'18px', color:'#fff', fontWeight:700, marginTop:'12px' }}>{selected.label}</div>
</div>
</div>
)}
</div>
)
}Component info
CategoryMedia
Frameworkreact
TierFREE
Views0
Copies0
About
Masonry-style image gallery with lightbox preview and navigation
More from Media
'use client'
import { useState, useEffect } from 'react'
const IMAGES = [
{ id: 1, src: null, color: 'linear-gradient(135deg, #C9A84C, #6366f1)', caption: 'GlowButton Component', w: 1, h: 2 },
{ id: 2, src: null, color: 'linear-gradient(135deg, ImageGallery
Media
'use client';
import { useEffect, useRef, useState } from 'react';
export default function AudioVisualizer({ isPlaying = true }) {
const bars = 32;
const refs = useRef([]);
const [playing, setPlaying] = useState(isPlaying);
useEffect(() => AudioVisualizer
Media
'use client'
import { useState } from 'react'
export default function VideoCard({
title = 'Getting Started with Empire UI',
channel = 'Empire Dev',
views = '124K',
duration = '12:34',
emoji = '🎬',
thumbnail = 'linear-gradient(135deg,#1eVideoCard
Media
'use client'
import { useState, useEffect } from 'react'
export default function AudioPlayer({
title = 'Midnight Drive',
artist = 'Synthwave Radio',
emoji = '🎵',
duration = 217,
}) {
const [playing, setPlaying] = useState(false)
const [AudioPlayer
Media