Gravity wellPro

A grid of tiles that bends toward the cursor like spacetime, with a click that sends a shockwave through it.

Live · keyboard ready
A woven oak lounge chair with a sheepskin and linen cushion on a concrete floor
Wavy terracotta walls rising toward a blue sky
Chloe Nguyen
A home office with a wooden desk and deep green walls
A chef spooning sauce onto a plated dish in a dark kitchen
A white mushroom table lamp glowing beside books and a small vase
Layered mountain ridges under a warm evening sky
Ava Mitchell
A grey armchair and ottoman with a knit throw in a dark green room
Emma Collins
Folded natural linen throws with fringed edges in soft window light
A calm alpine lake reflecting a rocky peak at golden hour
Daniel Kim
A made bed with striped linen pillows against an oak headboard
Marcus Johnson
A hand pouring water from a ribbed glass carafe into tumblers
A long coastline with waves rolling onto a beach below green cliffs
Jordan Reyes
A warm restaurant dining room with woven pendant lights and a tree
Jasmine Brooks
Two speckled stoneware cups with a lid on a pale table
A calm sea at dusk with a low island on the horizon
Mateo Alvarez
A glass carafe of red wine on a bar table in low evening light
Olivia Bennett
Two stacked speckled ceramic bowls against a dark wall
A yellow tram on a street lined with historic buildings in Lisbon
Tyler Hayes
Curved stainless steel panels of the Walt Disney Concert Hall against a blue sky
Sofia Ramirez
A sculptural ceramic lamp with a linen shade on a walnut sideboard
The 25 de Abril Bridge crossing the Tagus in Lisbon
Andre Williams
A white tiled building facade with curved balconies
Ryan Sullivan
A bright living room with timber beams, arched windows, and cream sofas
Terracotta rooftops of Lisbon running down to the river
Nathan Cole
A modern glass house beside a long pool under a clear sky
Hannah Walsh
A sunroom with a round dining table, plants, and windows on three sides
Seared salmon with a bright herb salsa and a glass of red wine
  • A team, customer, or moodboard wall where playfulness is the point.
  • Landing page sections that show breadth: many logos, avatars, or photos at once.
  • Grids people must scan or click precisely, like file pickers; use a plain grid.
  • Large collections; use infinite-moodboard or photo-grid.

Installation

Pro source and install commands unlock with a Pro plan.

example.tsx
import { GravityWell } from "@/components/arc/gravity-well/gravity-well"; export function Team({ people }: { people: { name: string; src: string }[] }) {  return (    <GravityWell label="Team">      {people.map(person => <img key={person.src} src={person.src} alt={person.name} />)}    </GravityWell>  );}

GravityWell

A grid of tiles that bends toward the pointer like spacetime around a mass. Tiles near the well lean in, shrink, and dim on their own springs; a click sends a shockwave rolling outward through the grid.

PropTypeDefaultDescription
childrenRequiredReactNode–One tile per child. Photos, avatars, icons, or any small content.
columnsnumber–Fixed column count. Leave it out to fit as many columns as minTileSize allows.
minTileSizenumber56Smallest tile width in px when columns is not set.
gapnumber8Gap between tiles in px.
radiusnumber150Reach of the well in px.
strengthnumber1Pull strength from 0 to about 1.5.
onPulse(origin: { x: number; y: number }) => void–Called when a click or key sends a shockwave, with its origin in px from the top left of the grid.
labelstring"Gravity well"Accessible name for the grid.
classNamestring–Extra class on the root.
styleCSSProperties–Inline styles on the root.
Tab
Focuses the grid and places the well on the current tile.
Arrow keys
Moves the well from tile to tile.
HomeorEnd
Moves the well to the first or last tile.
SpaceorEnter
Sends a shockwave from the current tile.
  • The root is a named group with aria-roledescription="gravity well". Tile content keeps its own semantics and alt text.
  • Motion is decorative: tiles keep their grid slot and only move with transform, so reading order never changes.
  • No focus ring is drawn (product decision); the well itself shows where keyboard focus is.
  • The well follows the pointer on a critically damped spring, and each tile follows the field on an underdamped spring, so fast moves leave a jelly wake.
  • Tiles deeper in the well shrink, dim, and slide under their neighbours.
  • A click drops a shockwave that travels at 900 px/s and rings each tile once as it passes.
  • Reduced motion leaves the grid static.
  • Columns fit the width with minTileSize, or stay fixed with columns.
  • Touch: a tap sends a shockwave and dragging pulls the well; vertical scroll keeps working.
  • One transform, opacity, and z-index write per tile per frame, with no layout reads during animation.
  • The loop stops once every spring is at rest.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Use a uniform set of square tiles, around 30 to 60. Content is wrapped in square cells; set object-fit: cover on images.
  • Tie onPulse to something meaningful, like shuffling or selecting, or leave it as pure delight.

The full library index for assistants is at /llms.txt.