MediaGrid
The files of a folder as tiles or as a list, with selection for bulk actions, an action per file, drag to reorder and files dropped from the desktop. Pick it for any library view; use MediaTile alone for one file outside a list.
- MediaGrid
PreviewLink to the section Preview
Live in all three themes. Everything here is interactive.
Light theme, MediaGrid
harbour-at-dawn.webp
Image · 182 KB · 1920×1080
meadow.webp
Image · 96 KB · 1600×900
north-ridge-panorama-from-the-upper-hut-in-late-october-final-version-2.webp
Image · 410 KB · 2400×1000
No alt textdunes.avif
Image · 74 KB · 1200×800
Decorativeprice-list-2026.pdf
PDF · 320 KB · 4 pages
logo.svg
Vector · 4 KB
intro.mp4
Video · 12.4 MB · 0:42
jingle.mp3
Audio · 1.1 MB · 0:18
Dark theme, MediaGrid
harbour-at-dawn.webp
Image · 182 KB · 1920×1080
meadow.webp
Image · 96 KB · 1600×900
north-ridge-panorama-from-the-upper-hut-in-late-october-final-version-2.webp
Image · 410 KB · 2400×1000
No alt textdunes.avif
Image · 74 KB · 1200×800
Decorativeprice-list-2026.pdf
PDF · 320 KB · 4 pages
logo.svg
Vector · 4 KB
intro.mp4
Video · 12.4 MB · 0:42
jingle.mp3
Audio · 1.1 MB · 0:18
High contrast theme, MediaGrid
harbour-at-dawn.webp
Image · 182 KB · 1920×1080
meadow.webp
Image · 96 KB · 1600×900
north-ridge-panorama-from-the-upper-hut-in-late-october-final-version-2.webp
Image · 410 KB · 2400×1000
No alt textdunes.avif
Image · 74 KB · 1200×800
Decorativeprice-list-2026.pdf
PDF · 320 KB · 4 pages
logo.svg
Vector · 4 KB
intro.mp4
Video · 12.4 MB · 0:42
jingle.mp3
Audio · 1.1 MB · 0:18
UsageLink to the section Usage
import { MediaGrid } from '@skribly/ui/media'<MediaGrid aria-label="Files in Holidays" items={files} view="grid"
selectionMode="multiple" selectedKeys={selected} onSelectionChange={setSelected}
selectLabel="Select" onAction={openEditor}
renderActions={(file) => <IconButton label={`Edit ${file.name}`} …/>}
onMove={reorder} dragLabel={(file) => `Drag ${file.name}`}
isLoading={loading} loadingLabel="Loading files"
emptyState={<EmptyState title="This folder is empty" />} />Every label is a prop, so the app passes its own words in its own language. See no built-in text.
AccessibilityLink to the section Accessibility
- A React Aria grid with one tab stop.
- Arrow keys move between tiles in both directions, typing a file name jumps to it, Space or the checkbox selects, Enter runs the action and Tab reaches the buttons inside the focused tile.
- Checkboxes are read as "Select" plus the file name.
- Dragging works with the pointer, with Enter on the drag handle and the arrow keys, and with screen readers.
- Loading is a busy status with skeleton tiles, the empty state says why it is empty, notices such as a missing alt text carry a word and a glyph, and selected tiles get a border as well as a tint.
- Tiles reflow from one column at 320px.
This demo runs through axe in all three themes on every test run. See what the tests check.