Media & display
Images, galleries and small display elements. Carousels pause on hover and focus and never auto-advance under reduced motion; every image requires alt text.
11 components on this page. Every demo is live — change the theme in the header or flip a demo to right-to-left with its RTL button. 8 of them are React-only for now; Vue, Svelte and Angular versions are coming.
Carousel Link to Carousel
Pages through items several at a time, with responsive breakpoints, indicators and optional autoplay.
Code
ReactComing to Vue, Svelte and Angular.
<Carousel label="Featured products" items={products} numVisible={3} numScroll={1} circular
responsiveOptions={[{ breakpoint: '768px', numVisible: 1 }]}
itemTemplate={(p) => <ProductCard product={p} />} /> Galleria Link to Galleria
An image gallery with thumbnails, captions and a full-screen mode.
Image 1 of 6
Showing: 1 of 6
Code
ReactComing to Vue, Svelte and Angular.
<Galleria label="Trip photos" items={photos} showThumbnails showCaptions fullScreen /> Image Link to Image
An image with an optional zoomable, rotatable preview overlay.
Click an image (or focus it and press Enter) to preview, zoom and rotate.
Code
ReactComing to Vue, Svelte and Angular.
<Image src="/photos/amman.jpg" alt="Amman citadel at sunset" width={240} preview /> ImageCompare Link to ImageCompare
Compare two images with a draggable divider.
Divider: 50%
Code
ReactComing to Vue, Svelte and Angular.
<ImageCompare label="Before and after retouching"
before={{ src: before, alt: 'Original photo' }} after={{ src: after, alt: 'Edited photo' }} /> Avatar Link to Avatar
A user picture with initials fallback.
Code
<Avatar name="Lina Haddad" />
<Avatar name="Omar Saleh" src="/omar.jpg" size="lg" /> <Avatar name="Lina Haddad" /> <Avatar name="Lina Haddad" /> <Avatar name="Lina Haddad" /> <Avatar name="Lina Haddad" /> Badge Link to Badge
A small status label.
Code
<Badge variant="success">Active</Badge> <Badge variant="success">Active</Badge> <Badge variant="success">Active</Badge> <Badge variant="success">Active</Badge> <Badge variant="success">Active</Badge> Tag Link to Tag
A label for categorising, optionally removable.
Code
<Tag removable onRemove={() => remove('design')}>Design</Tag> <Tag removable @remove="remove('design')">Design</Tag> <Tag removable onremove={() => remove('design')}>Design</Tag> <Tag removeHref="?remove=design">Design</Tag> <Tag removable onRemove={() => remove('design')}>Design</Tag> Chip Link to Chip
A compact element with an image or icon, for people, filters or selections.
Code
ReactComing to Vue, Svelte and Angular.
<Chip label="Lina Haddad" image={avatar} imageAlt="" removable onRemove={drop} />
<Chip label="Amman" icon="📍" /> MeterGroup Link to MeterGroup
Several values stacked in one bar, such as storage by type.
Code
ReactComing to Vue, Svelte and Angular.
<MeterGroup label="Storage" max={256} formatValue={(v) => v + ' GB'} value={[
{ label: 'Apps', value: 64, color: 'primary' },
{ label: 'Photos', value: 48, color: 'success' },
{ label: 'System', value: 24, color: 'warning' },
]} /> FileUpload Link to FileUpload
Choose or drop files, validate size and type, and show upload progress.
Drag and drop files here, or use Choose.
Status: No uploads yet
Code
ReactComing to Vue, Svelte and Angular.
<FileUpload label="Attachments" multiple accept="image/*,.pdf" maxFileSize={2_000_000}
onUpload={async (files, { onProgress }) => {
for (const f of files) await send(f, (p) => onProgress(f, p));
}} /> Terminal Link to Terminal
A command-line style console that runs your command handler.
Code
ReactComing to Vue, Svelte and Angular.
<Terminal label="Demo shell" welcomeMessage="Type help"
onCommand={(cmd) => cmd === 'date' ? new Date().toString() : 'Unknown command: ' + cmd} />