# What Input? __A global utility for tracking the current input method (mouse, keyboard or touch).__ ## What Input is now v4.3.0 What Input adds data attributes to the `` tag based on the type of input being used. It also exposes a simple API that can be used for scripting interactions. ### July 12, 2017 * Updated: added passive to `touchstart` event. ### July 3, 2017 * Updated: custom events can now be registered and unregistered. ### June 13, 2017 * Updated: Typing _in_ form inputs does not change input type, but tabbing between inputs _does_ initiate a switch from `mouse` to `keyboard`. ### June 12, 2017 * Added: passive event listener for `wheel` event. * Added: ability to fire custom functions when 'intent' or 'input' changes. ### Changes from v3 * `mousemove` and `pointermove` events no longer affect the `data-whatinput` attribute. * A new `data-whatintent` attribute now works like v3. This change is intended to separate direct interaction from potential. * Key logging and the corresponding `whatInput.keys()` API option have been removed. * Event binding and attributes are now added to the `` tag to eliminate the need to test for `DOMContentLoaded`. * The `whatInput.set()` API option has been removed. * A new set of `whatinput-types-[type]` classes are now added as inputs are detected. New classes are added but existing ones remain, creating the same output as what the `whatInput.types()` returns. ## How it works What Input uses event bubbling on the `` tag to watch for mouse, keyboard and touch events (via `mousedown`, `keydown` and `touchstart`). It then sets or updates a `data-whatinput` attribute. Where present, Pointer Events are supported, but note that `pen` inputs are remapped to `touch`. What Input also exposes a tiny API that allows the developer to ask for or set the current input. _What Input does not make assumptions about the input environment before the page is directly interacted with._ However, the `mousemove` and `pointermove` events are used to set a `data-whatintent="mouse"` attribute to indicate that a mouse is being used _indirectly_. ### Interacting with Forms Since interacting with a form requires use of the keyboard, What Input _does not switch the input type while form ``s and `