Prodular UI

Resizable

Panels that people can resize by dragging a hairline handle, with keyboard support.

npx prodular-ui add resizable

List and detail

A ticket inbox with a draggable grip. The handle turns to the ring color while dragging.

  • Pinecrest Health9m
    Invoice shows the wrong VAT rate
  • Corvid Labs26m
    Cannot add a fifth seat
  • Tidewater Freight1h
    Webhook retries are delayed
  • Halden Analytics3h
    Export to Snowflake failed
#4821 · Pinecrest Health

Invoice shows the wrong VAT rate

Our October invoice applies 19% VAT, but our entity is registered in the Netherlands at 21%. Can you reissue INV-2048 with the right rate?

Vertical

An editor above a log. Without withHandle the divider is a plain hairline.

Nightly usage export

Runs every day at 03:00 UTC. Last run succeeded and wrote 38 files.

  1. 03:00:01Starting nightly usage export
  2. 03:00:04Fetched 1,284,903 events from 412 workspaces
  3. 03:02:37Wrote 38 parquet files to s3://halden-exports
  4. 03:04:12Export finished in 4m 12s

Anatomy

<ResizablePanelGroup orientation="horizontal">  <ResizablePanel defaultSize="40%">...</ResizablePanel>  <ResizableHandle withHandle />  <ResizablePanel defaultSize="60%">...</ResizablePanel></ResizablePanelGroup>

Guidance

Use it when

  • Split views where people decide how much space each side gets: inbox and detail, editor and preview, query and results.
  • Inside one container. The panels share its border.

Avoid

  • Layouts that never need resizing. Use a fixed grid.
  • Borders or cards inside each panel. The handle is the divider.

Rules for AI agents

Published in llms-full.txt, the registry and the MCP server, so coding agents follow them when they build with this component.

  • Give the parent of ResizablePanelGroup a fixed height. Panels fill it.
  • Pass orientation="horizontal" or "vertical" to ResizablePanelGroup.
  • Set defaultSize and minSize on every ResizablePanel as percentage strings, for example defaultSize="40%".
  • Add withHandle on handles between panels that people are likely to drag. Leave it off for subtle splits.
  • Put the group inside one bordered container (rounded-xl border bg-card) and do not add borders inside the panels.

API

ResizablePanelGroup

PropTypeDefaultDescription
orientation"horizontal" | "vertical"Direction the panels are laid out in.

ResizablePanel

PropTypeDefaultDescription
defaultSizenumber | stringInitial size, for example "40%".
minSizenumber | stringSmallest size the panel can be dragged to.

ResizableHandle

PropTypeDefaultDescription
withHandlebooleanfalseShows a visible grip on the divider.

Installation

The Prodular UI CLI adds the source to components/ui with everything it depends on. In a project that already uses shadcn/ui, the shadcn CLI installs it from the Prodular registry too. See Installation for the first setup.

npx prodular-ui add resizable# or, with the registry in components.jsonnpx shadcn@latest add @prodular/resizable