MCPcopy Index your code
hub / github.com/devbookhq/splitter

github.com/devbookhq/splitter @v1.4.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.4.2 ↗ · + Follow
45 symbols 88 edges 29 files 0 documented · 0% 2 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
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:

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

CodeSandbox project

Installing

npm install @devbookhq/splitter
# or
yarn add @devbookhq/splitter

Usage

Horizontal split

import Splitter, { SplitDirection } from '@devbookhq/splitter'

function MyComponent() {
  return (
    <Splitter>


Tile 1




Tile 2


    </Splitter>
  );
}

Vertical split

import Splitter, { SplitDirection } from '@devbookhq/splitter'

function MyComponent() {
  return (
    <Splitter direction={SplitDirection.Vertical}>


Tile 1




Tile 2


    </Splitter>
  );
}

Nested split

import Splitter, { SplitDirection } from '@devbookhq/splitter'

function MyComponent() {
  return (
    <Splitter direction={SplitDirection.Vertical}>


Tile 1


      <Splitter direction={SplitDirection.Horizontal}>


Tile 2


        <Splitter direction={SplitDirection.Vertical}>


Tile 3




Tile 4


        </Splitter>
      </Splitter>
    </Splitter>
  );
}

Get sizes of tiles

import Splitter, { SplitDirection } from '@devbookhq/splitter'

function MyComponent() {
  function handleResizeStarted(gutterIdx: number) {
    console.log('Resize started!', gutterIdx);
  }
  function handleResizeFinished(gutterIdx: number, newSizes: number[]) {
    console.log('Resize finished!', gutterIdx, newSizes);
  }

  return (
    <Splitter
      direction={SplitDirection.Vertical}
      onResizeStarted={handleResizeStarted}
      onResizeFinished={handleResizeFinished}
    >


Tile 1




Tile 2


    </Splitter>
  );
}

To see more examples check out the examples section.

Examples

Check the example folder or the CodeSandbox project. - Horizontal - Vertical - Nested - Styled gutter - Minimal tile size - Initial tile sizes - Scrollable tiles - Get sizes of tiles

Extension points exported contracts — how you extend this code

TileProps (Interface)
(no doc)
example/src/Tile.tsx
GutterProps (Interface)
(no doc)
src/Gutter.tsx
Pair (Interface)
(no doc)
src/pair.ts
SplitProps (Interface)
(no doc)
src/index.tsx
UseAddEventListenerOptions (Interface)
(no doc)
src/useEventListener.ts
State (Interface)
(no doc)
src/state/reducer.ts
SetIsReadyToCompute (Interface)
(no doc)
src/state/reducer.actions.ts
CreatePairs (Interface)
(no doc)
src/state/reducer.actions.ts

Core symbols most depended-on inside this repo

useEventListener
called by 4
src/useEventListener.ts
getInnerSize
called by 4
src/utils/getInnerSize.ts
getCursorIcon
called by 3
src/index.tsx
getGutterSizes
called by 3
src/utils/getGutterSize.ts
addRef
called by 2
src/index.tsx
isTouchEvent
called by 2
src/utils/isTouchEvent.ts
getPosition
called by 1
src/index.tsx
handleStartDragging
called by 1
src/index.tsx

Shape

Function 30
Interface 11
Enum 4

Languages

TypeScript100%

Modules by API surface

src/index.tsx10 symbols
src/state/reducer.actions.ts6 symbols
src/useEventListener.ts2 symbols
src/state/reducer.ts2 symbols
example/src/Tile.tsx2 symbols
example/src/OnDidResize/index.tsx2 symbols
example/src/App.tsx2 symbols
src/utils/isTouchEvent.ts1 symbols
src/utils/getInnerSize.ts1 symbols
src/utils/getGutterSize.ts1 symbols
src/utils/flattenChildren.ts1 symbols
src/pair.ts1 symbols

Used by 2 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add splitter \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact