A strip of images that bulges or pinches with your scroll speed
| Name | Type | Default | Description |
|---|---|---|---|
items | (string | { src: string; alt?: string })[] | 8 abstract images | Images in the strip, as URLs or { src, alt } objects. Alt text goes into a hidden list that screen readers announce. |
orientation | "vertical" | "horizontal" | "vertical" | Direction the strip runs and scrolls. |
bend | "convex" | "concave" | "direction" | "direction" | How speed shapes the lens. convex swells the middle toward you, concave pinches it, direction swells while scrolling forward and pinches while scrolling back. |
strength | number | 1 | How quickly the bend builds as scrolling speeds up. Higher values bend fully at gentler speeds. |
maxBend | number | 0.38 | Strongest bend that speed can add, from 0 to 0.45. |
restBend | number | 0 | Bend the strip holds when it is still. Positive values bulge, negative values pinch. |
axisBias | number | 0.75 | How much the lens also stretches along the strip. 0 only widens the silhouette and keeps the gaps straight, 1 is a full fisheye where the gaps bow. |
lensRadius | number | 1 | Size of the lens relative to the visible strip. Smaller values gather the bend into the middle. |
response | number | 0.32 | Seconds the bend takes to follow a change in speed. |
wobble | number | 0.25 | Overshoot as the bend springs back, from 0 (none) to 1 (jelly). |
itemSize | number | 0.68 | Tile size across the strip, as a fraction of the container's shorter side. |
aspectRatio | number | 1.35 vertical, 0.78 horizontal | Tile width divided by height. Images are cropped to fill their tile. |
gap | number | 16 | Space between tiles in pixels. |
radius | number | 18 | Corner radius of the tiles in pixels. |
autoScroll | number | 50 | Drift speed in pixels per second while idle. It pauses briefly after any input. Negative values drift backward, 0 turns it off. |
pauseOnHover | boolean | false | Stop the drift while the pointer is over the strip. |
wheelSpeed | number | 1 | Multiplier for wheel and trackpad scrolling. 0 leaves the page scroll untouched. |
dragSpeed | number | 1 | Multiplier for mouse and touch dragging. 0 turns dragging off. |
inertia | number | 0.55 | Seconds of momentum after a flick. It also sets how softly wheel scrolling glides. |
snap | boolean | true | Settle on the nearest image when scrolling stops. Applies when autoScroll is 0. A single wheel notch then steps one image. |
infinite | boolean | true | Loop the images endlessly. When off, the ends stretch and spring back, and the drift turns around. |
fade | number | 0.16 | Length of the fade to transparent at each end, as a fraction of the strip's length. |
shade | number | 0.22 | How much the tiles darken toward the ends, from 0 to 1. |
aberration | number | 0.4 | Colour fringing that appears as the lens bends, from 0 to 1. |
paused | boolean | false | Stop the drift. Scrolling, dragging and the keyboard still work. Reduced-motion users get no drift or bend. |
quality | number | 1 | Resolution scale from 0.25 to 1. Lower values are cheaper on large screens. |
onIndexChange | (index: number) => void | — | Called with the index of the image nearest the centre whenever it changes. |
ariaLabel | string | "Image gallery" | Accessible name of the carousel. When it has focus, the arrow keys and Page Up/Down step one image, Home and End jump to the first and last. |
ref | { next, previous, goTo, impulse } | — | next() and previous() step one image, goTo(index) glides to an image, impulse(velocity) pushes the strip in pixels per second. |
className | string | — | Classes for the root element. It fills its parent, with a 420px minimum height. |
style | CSSProperties | — | Inline styles for the root element. |
items(string | { src: string; alt?: string })[]Images in the strip, as URLs or { src, alt } objects. Alt text goes into a hidden list that screen readers announce.
8 abstract imagesorientation"vertical" | "horizontal"Direction the strip runs and scrolls.
"vertical"bend"convex" | "concave" | "direction"How speed shapes the lens. convex swells the middle toward you, concave pinches it, direction swells while scrolling forward and pinches while scrolling back.
"direction"strengthnumberHow quickly the bend builds as scrolling speeds up. Higher values bend fully at gentler speeds.
1maxBendnumberStrongest bend that speed can add, from 0 to 0.45.
0.38restBendnumberBend the strip holds when it is still. Positive values bulge, negative values pinch.
0axisBiasnumberHow much the lens also stretches along the strip. 0 only widens the silhouette and keeps the gaps straight, 1 is a full fisheye where the gaps bow.
0.75lensRadiusnumberSize of the lens relative to the visible strip. Smaller values gather the bend into the middle.
1responsenumberSeconds the bend takes to follow a change in speed.
0.32wobblenumberOvershoot as the bend springs back, from 0 (none) to 1 (jelly).
0.25itemSizenumberTile size across the strip, as a fraction of the container's shorter side.
0.68aspectRationumberTile width divided by height. Images are cropped to fill their tile.
1.35 vertical, 0.78 horizontalgapnumberSpace between tiles in pixels.
16radiusnumberCorner radius of the tiles in pixels.
18autoScrollnumberDrift speed in pixels per second while idle. It pauses briefly after any input. Negative values drift backward, 0 turns it off.
50pauseOnHoverbooleanStop the drift while the pointer is over the strip.
falsewheelSpeednumberMultiplier for wheel and trackpad scrolling. 0 leaves the page scroll untouched.
1dragSpeednumberMultiplier for mouse and touch dragging. 0 turns dragging off.
1inertianumberSeconds of momentum after a flick. It also sets how softly wheel scrolling glides.
0.55snapbooleanSettle on the nearest image when scrolling stops. Applies when autoScroll is 0. A single wheel notch then steps one image.
trueinfinitebooleanLoop the images endlessly. When off, the ends stretch and spring back, and the drift turns around.
truefadenumberLength of the fade to transparent at each end, as a fraction of the strip's length.
0.16shadenumberHow much the tiles darken toward the ends, from 0 to 1.
0.22aberrationnumberColour fringing that appears as the lens bends, from 0 to 1.
0.4pausedbooleanStop the drift. Scrolling, dragging and the keyboard still work. Reduced-motion users get no drift or bend.
falsequalitynumberResolution scale from 0.25 to 1. Lower values are cheaper on large screens.
1onIndexChange(index: number) => voidCalled with the index of the image nearest the centre whenever it changes.
—ariaLabelstringAccessible name of the carousel. When it has focus, the arrow keys and Page Up/Down step one image, Home and End jump to the first and last.
"Image gallery"ref{ next, previous, goTo, impulse }next() and previous() step one image, goTo(index) glides to an image, impulse(velocity) pushes the strip in pixels per second.
—classNamestringClasses for the root element. It fills its parent, with a 420px minimum height.
—styleCSSPropertiesInline styles for the root element.
—