simple-keyboard

Documentation

Usage

Check out the usage instructions at the “Getting Started” page.

Options

You can customize the Keyboard by passing options to it. Here are the available options (the code examples are the defaults):

layout

Modify the keyboard layout

layout: {
  'default': [
    '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
    '{tab} q w e r t y u i o p [ ] \\',
    '{lock} a s d f g h j k l ; \' {enter}',
    '{shift} z x c v b n m , . / {shift}',
    '.com @ {space}'
  ],
  'shift': [
    '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
    '{tab} Q W E R T Y U I O P { } |',
    '{lock} A S D F G H J K L : " {enter}',
    '{shift} Z X C V B N M < > ? {shift}',
    '.com @ {space}'
  ]
}

 

Looking for keyboard layouts in other languages? Check out simple-keyboard-layouts !

layoutName

Specifies which layout should be used.

layoutName: "default"

display

Replaces variable buttons (such as {bksp}) with a human-friendly name (e.g.: “backspace”).

display: {
  '{bksp}': 'backspace',
  '{enter}': '< enter',
  '{shift}': 'shift',
  ...
}

mergeDisplay

By default, when you set the display property, you replace the default one. This setting merges them instead.

mergeDisplay: true,

display: {
  '{bksp}': 'delete',
  '{enter}': 'submit',
}

// Result:
{
  '{bksp}': 'delete'
  '{enter}': 'submit',
  '{shift}': 'shift', // < Merged from default among others
  ....
}

theme

A prop to add your own css classes to the keyboard wrapper. You can add multiple classes separated by a space.

theme: "hg-theme-default"

buttonTheme

A prop to add your own css classes to one or several buttons.

To add or remove individual buttonTheme entries, check out the methods addButtonTheme and removeButtonTheme below.

buttonTheme: [
  {
    class: "myCustomClass",
    buttons: "Q W E R T Y q w e r t y"
  },
  {
    class: "anotherCustomClass",
    buttons: "Q q"
  },
  ...
]

debug

Runs a console.log every time a key is pressed. Displays the buttons pressed and the current input.

debug: false

useTouchEvents

Instructs simple-keyboard to use touch events instead of click events.

useTouchEvents: true

preventMouseDownDefault

Prevents loss of input focus from clicking simple-keyboard buttons

preventMouseDownDefault: false

useButtonTag

Render buttons as <button> elements instead of the default <div> elements.

useButtonTag: false

newLineOnEnter

Specifies whether clicking the “ENTER” button will input a newline (\n) or not.

newLineOnEnter: false

tabCharOnTab

Specifies whether clicking the “TAB” button will input a tab character (\t) or not.

tabCharOnTab: true

inputName

Allows you to use a single simple-keyboard instance for several inputs.

inputName: "default"

maxLength

Restrains simple-keyboard’s input to a certain length. This should be used in addition to the input element’s maxlengthattribute.

// Applies to all internal inputs
maxLength: 5

// Specifies different limiters for each input set, in case you are using the "inputName" option
maxLength: {
  'default': 5,
  'myFancyInput': 10
}

syncInstanceInputs

When set to true, this option synchronizes the internal input of every simple-keyboard instance.

syncInstanceInputs: false

physicalKeyboardHighlight

Enable highlighting of keys pressed on physical keyboard.

For functional keys such as shift, note that the key’s event.code is used. In that instance, pressing the left key will result in the code ShiftLeft. Therefore, the key must be named {shiftleft}Click here for some of keys supported out of the box.

If in doubt, you can also set the debug option to true to see the key events.

physicalKeyboardHighlight: true

physicalKeyboardHighlightTextColor

Define the text color that the physical keyboard highlighted key should have. Used when physicalKeyboardHighlight is set to true.

physicalKeyboardHighlightTextColor: "white"

physicalKeyboardHighlightBgColor

Define the background color that the physical keyboard highlighted key should have. Used when physicalKeyboardHighlightis set to true.

physicalKeyboardHighlightBgColor: "#9ab4d0"

onKeyPress

Executes the callback function on key press. Returns button layout name (i.e.: “{shift}”).

onKeyPress: (button) => console.log(button)

onChange

Executes the callback function on input change. Returns the current input’s string.

onChange: (input) => console.log(input)

onRender

Executes the callback function every time simple-keyboard is rendered (e.g: when you change layouts).

onRender: () => console.log("simple-keyboard refreshed")

onInit

Executes the callback function once simple-keyboard is rendered for the first time (on initialization).

onInit: () => console.log("simple-keyboard initialized")

onChangeAll

Executes the callback function on input change. Returns the input object with all defined inputs. This is useful if you’re handling several inputs with simple-keyboard, as specified in the “Using several inputs” guide.

onChangeAll: (inputs) => console.log(inputs)

Methods

simple-keyboard has a few methods you can use to further control it’s behavior. To access these functions, you need the instance of the keyboard component, like so:

var keyboard = new Keyboard({
  ...
});

// Then, use as follows...
keyboard.methodName(params);

clearInput

Clear the keyboard’s input.

// For default input (i.e. if you have only one)
keyboard.clearInput();

// For specific input
// Must have been previously set using the "inputName" prop.
keyboard.clearInput("myInputName");

getInput

Get the keyboard’s input (You can also get it from the onChange prop).

// For default input (i.e. if you have only one)
let input = keyboard.getInput();

// For specific input
// Must have been previously set using the "inputName" prop.
let input = keyboard.getInput("myInputName");

setInput

Set the keyboard’s input. Useful if you want to track input changes made outside simple-keyboard.

// For default input (i.e. if you have only one)
keyboard.setInput("Hello World!");

// For specific input
// Must have been previously set using the "inputName" prop.
keyboard.setInput("Hello World!", "myInputName");

setOptions

Set new option or modify existing ones after initialization. The changes are applied immediately.

keyboard.setOptions({
  theme: "my-custom-theme"
});

dispatch

Send a command to all simple-keyboard instances at once (if you have multiple instances).

keyboard.dispatch(instance => {
  instance.setOptions({
    buttonTheme: [
      {
        class: "myClass",
        buttons: `a b c`
      }
    ]
  })
});

getButtonElement

Get the DOM Element of a button. If there are several buttons with the same name, an array of the DOM Elements is returned.

this.keyboard.getButtonElement('a'); // Gets the "a" key as per your layout
this.keyboard.getButtonElement('{shift}') // Gets all keys with that name in an array

addButtonTheme

Adds an entry to the buttonTheme. Basically a way to add a class to a button.

Unlike the buttonTheme property, which replaces entries, addButtonTheme creates entries or modifies existing ones.

this.keyboard.addButtonTheme("a b c {enter}", "myClass1 myClass2");

removeButtonTheme

Removes an entry to the buttonTheme. Basically a way to remove a class previously added to a button through buttonTheme or addButtonTheme.

Unlike the buttonTheme property, which replaces entries, removeButtonTheme removes entries or modifies existing ones.

this.keyboard.removeButtonTheme("b c", "myClass1 myClass2");

To learn more about the different use-cases, check out the Q&A / Use-cases page