1.0.9 • Published 1 year ago

splitview.js v1.0.9

Weekly downloads
232
License
MIT
Repository
github
Last release
1 year ago

splitview.js npm version

SplitView implementation based on Split.js

Live Demo

There are two implementations:

split-percent

  • layout: flexbox
  • property: flex-basis
  • unit: percent
  • embed and absolute gutters
  • collapse with animation
  • disable pane

split-absolute

  • layout: absolute position
  • property: left, top, width, height
  • unit: pixel
  • absolute gutters
  • collapse, expand, toggle with animation
  • disable pane
  • smart size distribution

Installation

Using npm:

npm install splitview.js

Using yarn:

yarn add splitview.js

Usage

import SplitView from 'splitview.js'
import 'splitview.js/dist/splitview.css';

const panes = [
  document.getElementById('pane1'),
  document.getElementById('pane2')
];
const splitview = SplitView(panes, options?);

Default HTML:

<div>
  <div id="pane1"></div>
  <div id="pane2"></div>
</div>

Documentation

Pane options:

NameTypeDefaultDescription
idNumber, StringnullUnique pane id. Used in api methods. (optional)
elementHTMLElementnullPane element. (required)
sizeNumber, String0Initial size of pane element in percents. In split-absolute availabe 'px' and '%', 0 value take up the remaining size. (optional)
minSizeNumber0Minimum size of pane element in pixels. (optional)
disabledBooleanfalseDisable resize of pane element. (optional)
fallbackExpandSizeNumbernullFallback expand size in pixels. Only in split-absolute. (optional)

Options:

NameTypeDefaultDescription
percentBooleantrueCreate percent or absolute splitview. (optional)
expandToMinBooleanfalseGrow initial sizes to pane minSize. (optional)
gutterSizeNumber4Gutter size in pixels. (optional)
gutterAlignString'center'Gutter alignment between elements. (optional)
gutterModeString'embed'Gutter takes size between elements. Value: 'embed' or 'absolute'. In split-absolute is always 'absolute'. (optional)
snapOffsetNumber0Snap to minimum size offset in pixels. (optional)
dragIntervalNumber1Number of pixels to drag. (optional)
directionStringverticalDirection to split: 'vertical' or 'horizontal'. (optional)
cursorStringcol-resizeCursor to display while dragging. (optional)
createGutterFunctionnullCreate custom gutter element. (optional)
elementStyleFunctionnullSet the custom style of each element. (optional)
gutterStyleFunctionnullSet the custom style of the gutter. (optional)
customGutterClassNameStringnullAdditional gutter class name. (optional)
onDragFunctionnullCallback on drag. (optional)
onDragStartFunctionnullCallback on drag start. (optional)
onDragEndFunctionnullCallback on drag end. (optional)
onResizeFunctionnullCallback on resize panes. (optional)

Examples

Create percent slitview:

const panes = [
  {
    element: document.getElementById('pane1'),
    size: 30 //%,
    minSize: 100 //px
  },
  {
    element: document.getElementById('pane2'),
    size: 40 //%,
    minSize: 200 //px
  },
  {
    element: document.getElementById('pane3'),
    size: 30 //%,
    minSize: 0 //px
  }
];

const options = {
  onResize: ({percentSizes, sender}) => console.log(percentSizes, sender);
};

const splitview = SplitView(panes, options);

Create absolute slitview:

const panes = [
  {
    element: document.getElementById('pane1'),
    size: "300px"
    minSize: 40 //px
  },
  {
    element: document.getElementById('pane2'),
    size: 0, // take up the remaining size
    minSize: 300 //px
  },
  {
    element: document.getElementById('pane3'),
    size: "20%",
    minSize: 0 //px
  }
];

const options = {
  percent: false,
  snapOffset: 30,
  onResize: ({percentSizes, sender}) => console.log(percentSizes, sender);
};

const splitview = SplitView(panes, options);

// Distribute sizes on window resize
window.addEventListener("resize", () => {
  splitview.invalidateSize();
});

More expamples see demo.

API

Create percent splitview instance:

const instance = SplitView(panes, options);

Create absolute splitview instance:

  const instance = SplitView(panes, {
    percent: false,
    ...
  });

Directly instantiate SplitPercent:

const instance = new SplitView.SplitPercent(panes, options);

Directly instantiate SplitAbsolute:

const instance = new SplitView.SplitAbsolute(panes, options);

SplitPercent:

.collapsePaneAt(index, animated? = false)

.collapsePane(id, animated? = false)

.disablePaneAt(index)

.disablePane(id)

.destroy()

SplitAbsolute:

.invalidateSize()

.collapsePaneAt(index, animated? = false)

.collapsePane(id, animated? = false)

.expandPaneAt(index, size, animated? = false)

.expandPane(id, size, animated? = false)

.togglePaneAt(index, size? = null, animated? = false)

.togglePane(id, size? = null, animated? = false)

.isCollapsedPaneAt(index)

.isCollapsedPane(id)

.disablePaneAt(index)

.disablePane(id)

.destroy()

License

Licensed under the MIT License.

1.0.9

1 year ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago