Prototyped on the keyboard component

* Made it more general
* Added constructors