New button designs

Holding this open for review at the moment.
Some duplicate code... maybe take this code and create another function that just builds up the list of options.  

If it's a string, behave as normal and clone `optionElem`, set values, and append it.  Otherwise if it's an `object, maybe loop through the object properties and call itself recursively.