keyboard re-implemented using RxJs