Add text node to deserializer and control creation
Simplify control construction and make text deserialization work
Return valid shape in text() even if string is empty