** Implement to provide options to be rendered in '<select>' tags. 'OptionsProviders' are used by the default skin for '<select>' tags.
**
** The 'FormBean' libraries caters for 'Enum' values but sometimes you want the user to choose from a list supplied from a database, or config file.
** In these scenarios you can supply your own 'OptionsProvider'.
**
** Options providers may be either be set directly on a form field or contributed to the 'OptionsProviders' service.
** Options providers are selected based on the field's type.
**
** syntax: fantom
**
** @Contribute { serviceType=OptionsProviders# }
** static Void contributeOptionsProviders(Configuration config) {
** config[MyValue#] = MyValueOptionsProvider()
** }
**
** 'OptionProviders' should *usually* be 'const' classes.
mixin OptionsProvider {
** Return 'true' if the '<select>' should show a blank value at the start of the options list.
**
** Default behaviour is to return '!formField.required'.
virtual Bool showBlank(FormField formField) {
(formField.required ?: false).not
}
** The label to display in the blank option, should 'showBlank' return 'true'.
**
** Default behaviour is to return an empty string.
virtual Str? blankLabel(FormField formField) { "" }
** A map of option values to display, keyed on the display label.
** The returned map should be ordered.
**
** 'bean' is the bean instance being rendered.
abstract Str:Obj options(FormField formField, Obj? bean)
}