Splitter

React component for building split views like in VS Code

README

Splitter

Splitter is a React component that allows you to split views into resizable panels. Similar to tabs in Visual Studio Code, for example.
Here's a gif of what you can build with Splitter:
undefined

Splitter is inspired by Split.js and written as 100% functional component:
- All size calculation is done through CSS using calc with minimal JS. This makes it much faster
- Fully responsive
- No dependencies beside React
- Minimal assumptions about your styling and views


Installing

  1. ```
  2. npm install @devbookhq/splitter
  3. # or
  4. yarn add @devbookhq/splitter
  5. ```

Usage


Horizontal split

  1. ```tsx
  2. import Splitter, { SplitDirection } from '@devbookhq/splitter'

  3. function MyComponent() {
  4.   return (
  5.     <Splitter>
  6.       <div>Tile 1</div>
  7.       <div>Tile 2</div>
  8.     </Splitter>
  9.   );
  10. }
  11. ```

Vertical split

  1. ```tsx
  2. import Splitter, { SplitDirection } from '@devbookhq/splitter'

  3. function MyComponent() {
  4.   return (
  5.     <Splitter direction={SplitDirection.Vertical}>
  6.       <div>Tile 1</div>
  7.       <div>Tile 2</div>
  8.     </Splitter>
  9.   );
  10. }
  11. ```

Nested split

  1. ```tsx
  2. import Splitter, { SplitDirection } from '@devbookhq/splitter'

  3. function MyComponent() {
  4.   return (
  5.     <Splitter direction={SplitDirection.Vertical}>
  6.       <div>Tile 1</div>
  7.       <Splitter direction={SplitDirection.Horizontal}>
  8.         <div>Tile 2</div>
  9.         <Splitter direction={SplitDirection.Vertical}>
  10.           <div>Tile 3</div>
  11.           <div>Tile 4</div>
  12.         </Splitter>
  13.       </Splitter>
  14.     </Splitter>
  15.   );
  16. }
  17. ```

Get sizes of tiles

  1. ```tsx
  2. import Splitter, { SplitDirection } from '@devbookhq/splitter'

  3. function MyComponent() {
  4.   function handleResizeStarted(gutterIdx: number) {
  5.     console.log('Resize started!', gutterIdx);
  6.   }
  7.   function handleResizeFinished(gutterIdx: number, newSizes: number[]) {
  8.     console.log('Resize finished!', gutterIdx, newSizes);
  9.   }

  10.   return (
  11.     <Splitter
  12.       direction={SplitDirection.Vertical}
  13.       onResizeStarted={handleResizeStarted}
  14.       onResizeFinished={handleResizeFinished}
  15.     >
  16.       <div>Tile 1</div>
  17.       <div>Tile 2</div>
  18.     </Splitter>
  19.   );
  20. }
  21. ```

To see more examples check out the examples section.

Examples

Check the [example](./example/src/App.tsx) folder or the CodeSandbox project.