Layout

Splitter

Resizable panels with a draggable divider. Supports horizontal and vertical layouts, minimum and maximum panel sizes, and resize callbacks.

Horizontal (drag the bar)

Left Panel

Drag the divider to resize.

Right Panel

Both panels have a 20% minimum.

Vertical

Top Panel

Bottom Panel

Installation

npx benflux-ui add splitter

Three panels

<Splitter>
  <SplitterPanel defaultSize={25} min={15}>
    Sidebar
  </SplitterPanel>
  <SplitterPanel defaultSize={50} min={30}>
    Editor
  </SplitterPanel>
  <SplitterPanel defaultSize={25} min={15}>
    Preview
  </SplitterPanel>
</Splitter>

With resize callback

<Splitter
  onResize={(sizes) => console.log("Resizing:", sizes)}
  onResizeEnd={(sizes) => console.log("Done:", sizes)}
>
  <SplitterPanel defaultSize={60}>Main</SplitterPanel>
  <SplitterPanel defaultSize={40}>Detail</SplitterPanel>
</Splitter>

Props — Splitter

PropTypeDefaultDescription
layout"horizontal" | "vertical""horizontal"Direction of the split
onResize(sizes: number[]) => voidCalled continuously while dragging
onResizeEnd(sizes: number[]) => voidCalled when the drag is released

Props — SplitterPanel

PropTypeDefaultDescription
defaultSizenumberequal splitInitial panel size as a percentage
minnumber10Minimum panel size as a percentage
maxnumber90Maximum panel size as a percentage