Skip to content
Pinky UI

Curved 3D Grid

A conventional content grid mapped onto a shallow curved plane with restrained local depth.

  • spatial
  • 3d
  • grid
  • spatial
  • selection
  • Open plan
    Open plan · 01 / 04
  • Shared studio
    Shared studio · 02 / 04
  • Quiet room
    Quiet room · 03 / 04
  • Long table
    Long table · 04 / 04

Open plan

Usage

usage
import { Curved3DGrid } from "@pinky-ui/layouts";

<Curved3DGrid items={products} columns={4} curvature={28} />

Props

PropTypeDefaultDescription
itemsSpatialCollectionItem[]Recognizable cards or media with labels and optional metadata.
classNamestringStyles the outer layout surface.
disabledbooleanfalseKeeps the content and interaction while removing spatial choreography.

Accessibility

  • Items use listbox/option semantics with a single active tab stop.
  • Arrow, Home and End keys mirror pointer selection.
  • The flat grid is complete and does not depend on camera orientation.

Performance

  • Uses transforms and MotionValues rather than pointer-frame React renders.
  • The layout does not create a rendering or media dependency for its children.

Reduced motion

Renders the same collection in a readable flat arrangement with no spatial transition.

When to use

  • Small, curated collections where the arrangement adds useful context.

When not to use

  • Large scanning-heavy datasets or content that requires spatial navigation to understand.

Skill

Purpose

Use for a recognizable content grid mapped to a shallow CSS 3D curve. It adds hierarchy, not a navigable virtual world.

Use when

  • Four to twenty products, projects or media items benefit from a shared spatial plane.
  • The flat grid remains a complete fallback.

Avoid when

  • Depth is the only way to know which item is selected.
  • Content is dense, tabular or essential to compare exactly.

Keyboard and touch

Use listbox/option semantics, one active tab stop, Arrow/Home/End and explicit previous/next controls. Touch receives a flat two-column or one-column arrangement.

Reduced motion and performance

Remove transforms under reduced motion. CSS transforms and a bounded item count keep this WebGL-free; never add a camera loop for a normal grid.

Open this skill on its own page