Drop Gallery
imageProImages dropped into a physics world that you can pick up and toss, by mouse, touch or keyboard.
Opening soon
Pro cannot be bought yet. The page opens when payment is ready.
Preview
The preview could not load.
Live demo. The theme switches the demo itself.
Code
drop-gallery.tsxPro
The code is locked
Drop Gallery is part of Manniche UI Pro. A key unlocks the source of all 60 effects.
Opening soon€49 · Introductory price until 31 December 2026. €79 after that.
- One-off payment
- One developer
- Your key arrives by email straight away
- No VAT (§ 19 UStG)
Have a key? Get the code with the CLI or MCP.
The key lives in MANNICHE_PRO_KEY, never in your code or a URL. How to set it up
CLI
npx shadcn@latest add @manniche-pro/drop-galleryMCP
claude mcp add --transport http manniche-ui https://mikkelmanniche.dk/api/mcp --header "Authorization: Bearer $MANNICHE_PRO_KEY"Props
DropGalleryProps
| Prop | Type | Default | What it does |
|---|---|---|---|
images | DropGalleryImage[] | – | Pictures that fill the bodies, cycled across count. Without any, bodies are solid colours from colors. |
colors | string[] | – | Solid fill colours, used when there are no images or while an image is still loading. Any CSS colour, including var(--x). |
shape | 'circle' | 'square' | 'circle' | Shape of the bodies. |
count | number | 24 | How many bodies to drop. Fewer are used when the container is too small to hold them. |
size | number | 96 | Diameter (or side) of a body in CSS pixels. It shrinks a little on narrow containers. |
gravityX | number | 0 | Pull along the horizontal axis, from -1 (left) to 1 (right). |
gravityY | number | 1 | Pull along the vertical axis, from -1 (up) to 1 (down). |
gravityStrength | number | 1 | Overall strength of gravity, from 0 (weightless) to 3. |
walls | DropGalleryWalls | – | Which edges of the container are solid. Each side can be switched on or off on its own. Bodies that leave through an open side are gone until the next replay. |
friction | number | 0.3 | Surface friction, from 0 (ice) to 1 (rubber). Higher values make the pile settle faster. |
dragStiffness | number | 0.2 | How firmly a grabbed body follows the pointer, from 0.02 (rubber band) to 1 (rigid). |
angularStiffness | number | 0.25 | How firmly a grabbed body resists twisting while dragged, from 0 (spins freely) to 1. |
controls | boolean | true | Show the Shake and Drop again buttons, which also give keyboard users a way to move the bodies. |
children | ReactNode | – | Content drawn above the bodies. It ignores the pointer so bodies underneath stay draggable; switch pointer-events-auto back on for anything clickable. |
aria-label | string | – | Accessible name of the whole gallery. |
touchDrag | boolean | true | Touch behaviour. By default the surface sets touch-action: none so a finger can pick up and toss a body, which also means a finger on the gallery will not scroll the page. Pass false to keep vertical page scroll (touch then cannot drag; mouse and pen still can). |
ref | Ref<DropGalleryHandle> | – | Ref with replay() and shake(). |
className | string | – | – |
A11y
No accessibility notes written yet.
The notes come with the source when Pro opens.