Skip to content
UI Kit
Accent color

Panels and splitters

Panes you resize by dragging the line between them, after the window splitter pattern. Arrows move it, Home and End go to the limits, Enter folds, a double click resets.

4 variants
Switch category

Resizable panels

Side by side

Write on the left, see the result on the right. The handle lights up on hover and focus, phones get the panes one below the other.

Open in Studio

Stacked

A preview above, a console below, the line between them moves up and down, on phones too. Up and Down move it by keyboard.

Open in Studio

Three panes

Folders, messages and the open message with two handles and minimum widths. On phones a switcher shows one pane at a time.

Open in Studio

Folding rail

A sidebar that snaps into an icon rail when dragged close to the edge, with a button and Enter for the same. A double click on the line restores it.

Open in Studio

Details

What Resizable panels brings along, read from the registry and the source.

Variants
4
Version
1.0.0 · since 1.1.0
File
components/ui/resizable-panels.tsx
Brings along
utilskiticon
npm packages
None
Languages
English and German, 5 texts of its own

Props

The ResizablePanelsProps interface from components/ui/resizable-panels.tsx, with the comments from the code.

  • variantoptional
    ResizablePanelsVariant

    horizontalverticalthreecollapsible

  • panelsrequired
    ResizablePanel[]
  • heightoptional
    string

    Height of the whole group, e.g. "28rem"

  • onResizeoptional
    (sizes: number[]) => void

    Called with the sizes in percent after a change

  • labeloptional
    string

    Accessible name of the group

Built-in texts

Resizable panels writes these texts itself. The language follows the KitProvider, the labels prop replaces single ones.

Show all 5 texts
resizeEnglish ResizeGerman Größe ändern
collapseEnglish CollapseGerman Einklappen
expandEnglish ExpandGerman Ausklappen
panesEnglish PanesGerman Bereiche
showEnglish ShowGerman Zeigen

Accessibility

Read from the source of the component.

  • Resizable panels handles the keys Enter, Arrow up, Arrow down, Arrow left, Arrow right, Home, End and Space itself.
  • Sets aria-checked, aria-controls, aria-expanded, aria-label, aria-orientation, aria-valuemax, aria-valuemin and aria-valuenow, so screen readers announce purpose and state.
  • Uses the roles group, radio, radiogroup and separator.
  • Adds text for screen readers where icons and graphics stand alone.
  • Shows a visible focus ring when used with the keyboard.
  • The server renders the starting state in full, JavaScript only adds the interaction.

Motion

  • Brings animations of its own, calmly timed and without wobble.
  • With reduced motion (prefers-reduced-motion) it stays still. 1 places in the code switch motion off then.

Frequent questions

How do I install Resizable panels?

With aiw add @ai-website/resizable-panels. The command puts components/ui/resizable-panels.tsx into your project, the code is yours from then on. It brings along icon. It needs no further npm packages.

Which variants does Resizable panels have?

4 variants, Side by side, Stacked, Three panes and Folding rail. You pick one with the variant prop, for example variant="three".

Can I translate the texts of Resizable panels?

Yes. Resizable panels carries 5 texts of its own in English and German, such as “Resize”, “Collapse” and “Expand”. The language follows the KitProvider, single texts change through the labels prop.

Can an AI assistant build with Resizable panels?

Yes. Through the MCP server of the aiw CLI, Claude, Cursor, GitHub Copilot, Windsurf, Codex and Gemini find Resizable panels with aiw_components and install it with aiw_add @ai-website/resizable-panels. Name the variant in your prompt, for example variant="vertical", and the assistant writes your content straight into the props.

Can I adjust Resizable panels without code?

Yes, in the Studio. All 4 variants are editable there, texts, lists and switches. The Studio writes the matching ResizablePanels code to copy.

Often searched

Jump to

Copied to the clipboard