** Implement to define a renderer for a specific input type.
**
** Sometimes the default rendered HTML does not meet your needs, or is not enough.
** In these cases you can define your own skin and render whatever HTML you like!
**
** Skins may be either be set directly on a form field or contributed to the 'InputSkins' service.
** Skins are selected based on the field's '@HtmlInput.type' attribute.
**
** syntax: fantom
**
** @Contribute { serviceType=InputSkins# }
** static Void contributeInputSkins(Configuration config) {
** config["tinytext"] = TinyTextSkin()
** }
**
** Default skins are provided for most of the HTML5 input types (text, email, select, etc...) and need to be overriden:
**
** syntax: fantom
**
** @Contribute { serviceType=InputSkins# }
** static Void contributeInputSkins(Configuration config) {
** config.overrideValue("text", MyTextSkin())
** }
**
** 'InputSkins' should *usually* be 'const' classes.
mixin InputSkin {
** Render the input to HTML.
abstract Str render(SkinCtx skinCtx)
}