By the power of Thor I've only gone and tidied up the mess that was the TextField. This is still far from perfect, but a.) it works - before we didn't even pull in the JS b.) It feels a lot cleaner than before.