Desktop optimized

Please maximize your browser window or use a larger screen to explore the component library.

Go to home

Proximity Grid

An interactive WebGL grid that zooms and rounds media cells dynamically based on cursor proximity.

Last Modified:Aug 17, 2026

Install

CLI

proximity-grid
$pnpm dlx shadcn@latest add https://ui.satisium.com/r/proximity-grid.json

Or install a specific demo variant:

proximity-grid-image
$pnpm dlx shadcn@latest add https://ui.satisium.com/r/proximity-grid-image.json

Or install a specific demo variant:

proximity-grid-video
$pnpm dlx shadcn@latest add https://ui.satisium.com/r/proximity-grid-video.json

Manual

1. Install Dependencies

Since this component leverages WebGL, you will need React Three Fiber and Three.js.

CLI Install
$pnpm add three @react-three/fiber @react-three/drei clsx tailwind-merge

Note: The demos utilize @hugeicons/react and @hugeicons/core-free-icons for the loading fallback, but they are not strictly required for the core component.

2. Add Source Code

Props

PropTypeDefaultDescription
mediaUrlstringThe source URL of the media asset.
mediaType"image" | "video""image"Defines the media type for correct texture processing.
columnsnumber18Number of vertical grid columns.
rowsnumber12Number of horizontal grid rows.
hoverRadiusnumber4.0How many cells outward the ripple effect reaches.
imageZoomnumber1.25How much the image zooms in when the cell is hovered.
cellRadiusnumber0.45Max border radius of a cell when hovered (0.0 to 0.5 relative to cell size).
mouseLerpSpeednumber2.5Fluidity of the mouse tracking. Lower = heavier/slower drag.
enterLeaveSpeednumber1.5Speed at which the effect fades in/out when entering/leaving the canvas.
fallbackReact.ReactNodenullOptional fallback UI rendered via Suspense while media loads.
classNamestringundefinedStandard React classNames for the container wrapper.