Skip to main content
Mantı UI logoMantı UIv0.12.1
Studio

Splitter

Pass a panels array and matching default percentages. The machine manages resize math, keyboard controls, and panel constraints.

import { Splitter } from '@manti-ui/react';

const pane = (label: string) => (
  <div className="grid place-items-center h-[calc(var(--manti-space-16)*3)] text-text-muted">{label}</div>
);

export default function SplitterBasic() {
  return (
    <div className="w-full">
      <Splitter
        panels={[
          { id: 'a', content: pane('Sidebar') },
          { id: 'b', content: pane('Main') },
        ]}
        defaultSize={[30, 70]}
      />
    </div>
  );
}

Several panels

Left
Center
Right

API

PropTypeDefaultDescription
panelsSplitterPanel[]The resizable panels, in order. Each: { id, content, minSize?, maxSize?, collapsible? }.
orientation'horizontal' | 'vertical''horizontal'Layout direction of the split.
sizenumber[]Controlled panel sizes, as percentages.
defaultSizenumber[]Initial panel sizes for uncontrolled usage.
onResize(size: number[]) => voidCalled while resizing, with the new sizes.

Styling

Anatomy

PartSelectorDescription
root[data-scope="splitter"][data-part="root"]The split-layout container.
panel[data-scope="splitter"][data-part="panel"]A single resizable region.
resize-trigger[data-scope="splitter"][data-part="resize-trigger"]The draggable divider between panels.

Tokens

TokenControls
--manti-splitter-handle-sizehandle size
--manti-splitter-line-sizeline size
--manti-splitter-line-size-activeline size active

Last updated

Built end-to-end with Manti UI components and design tokens. Manti UI is a framework-agnostic design system on Zag.js.

GitHub