Home

Awesome

control-panel

NPM version experimental js-standard-style

Embeddable panel of inputs for adding parameter selection to your app or visualization. Modern and minimalist design. Fully encapsulated module including JS and CSS. Can easily be added to any app or page. Heavily inspired by dat-gui, but streamlined, simplified, and written as a npm module for use with browserify.

LIVE DEMO

themes


Supports the following input types

rangecheckboxtextcolorbuttonintervalselect


Includes the following themes

darklight

Want to contribute a new theme or input type? Submit a PR!

install

Add to your project with

npm install control-panel

example

Create a panel with four elements and add to your page in the top right.

var control = require('control-panel')

var panel = control([
  {type: 'range', label: 'my range', min: 0, max: 100, initial: 20},
  {type: 'range', label: 'log range', min: 0.1, max: 100, initial: 20, scale: 'log'},
  {type: 'text', label: 'my text', initial: 'my cool setting'},
  {type: 'checkbox', label: 'my checkbox', initial: true},
  {type: 'color', label: 'my color', format: 'rgb', initial: 'rgb(10,200,0)'},
  {type: 'button', label: 'gimme an alert', action: function () {alert('hello!');}},
  {type: 'select', label: 'select one', options: ['option 1', 'option 2'], initial: 'option 1'},
  {type: 'multibox', label: 'check many', count: 3, initial: [true, false, true]}
], 
  {theme: 'light', position: 'top-right'}
)

usage

panel = control([input1, input2, ...], [opts])

The first argument is a list of inputs. Each one must have a type and label property, and can have an initial property with an initial value. For example,

{type: 'checkbox', label: 'my checkbox', initial: true}

Each type must be one of rangeinputcheckboxcolorintervalselect. Each label must be unique.

Some types have additional properties:

The following optional parameters can also be passed as opts

panel.on('input', cb(data))

This event is emitted every time any one of the inputs change. The callback argument data will contain the state of all inputs keyed by label such as:

{'my checkbox': false, 'my range': 75}

panel.state

Access the current value of any input via its label, i.e. if you made the input

{type: 'checkbox', label: 'my checkbox', initial: true}

access its current value using

panel.state['my checkbox']

react port

This project has been ported to work with React and is available as react-control-panel on NPM. The visual appearance is identical to that of the original, and some features have been added including externally managed state and an ES6 Proxy-based API for reading/writing the UI state remotely.

see also