SplitPane
Give two working regions the space they need, with a real resizable boundary.
Live — this one is real
Source
Drag the divider or focus it and use the arrow keys.
Preview
This panel receives 55% of the available space.
Usage
import { useState } from "react";
import { SplitPane } from "mizu-ui";
export function Example() {
const [value, setValue] = useState(45);
return (
<SplitPane
value={value}
onValueChange={setValue}
first={
<div>
<h3>Source</h3>
<p className="mizu-field-hint">
Drag the divider or focus it and use the arrow keys.
</p>
</div>
}
second={
<div>
<h3>Preview</h3>
<p className="mizu-field-hint">
This panel receives {100 - value}% of the available space.
</p>
</div>
}
/>
);
}
Source & setup
Import mizu-ui/styles.css once. Fonts are optional via mizu-ui/fonts.css. Override --mizu-* tokens or use className for local styling. Uses native React and CSS; install the package peers for root imports.
Inspect layout/SplitPane.tsx
Source is included in the npm package under src/layout/SplitPane.tsx.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| first / second | ReactNode | — | Two independent panels. |
| value / onValueChange | number / function | — | Controlled percentage given to the first panel. |
| min / max / label | number / number / string | 15 / 85 | Bounds and separator name. |
Accessibility
Focusable separator with orientation, controls and current/min/max values. Arrow keys move 1%, Shift moves 10%; Home/End reach bounds. Pointer capture supports touch.
Motion
Direct manipulation, no spring lag.