__init__(value, choices, options) {
		if (!L.isObject(choices))
			choices = {};

		if (!Array.isArray(value))
			value = (value != null && value != '') ? [ value ] : [];

		if (!options.multiple && value.length > 1)
			value.length = 1;

		this.values = value;
		this.choices = choices;
		this.options = Object.assign({
			multiple: false,
			widget: 'select',
			orientation: 'horizontal'
		}, options);

		if (this.choices.hasOwnProperty(''))
			this.options.optional = true;
	}
In addition to the [AbstractElement.InitOptions]{@link LuCI.ui.AbstractElement.InitOptions}
the following properties are recognized:

@typedef {LuCI.ui.AbstractElement.InitOptions} InitOptions
@memberof LuCI.ui.Select

@property {boolean} [multiple=false]
Specifies whether multiple choice values may be selected.

@property {"select"|"individual"} [widget=select]
Specifies the kind of widget to render. May be either `select` or
`individual`. When set to `select` an HTML `<select>` element will be
used, otherwise a group of checkbox or radio button elements is created,
depending on the value of the `multiple` option.

@property {string} [orientation=horizontal]
Specifies whether checkbox / radio button groups should be rendered
in a `horizontal` or `vertical` manner. Does not apply to the `select`
widget type.

@property {boolean|string[]} [sort=false]
Specifies if and how to sort choice values. If set to `true`, the choice
values will be sorted alphabetically. If set to an array of strings, the
choice sort order is derived from the array.

@property {number} [size]
Specifies the HTML `size` attribute to set on the `<select>` element.
Only applicable to the `select` widget type.

@property {string} [placeholder=-- Please choose --]
Specifies a placeholder text which is displayed when no choice is
selected yet. Only applicable to the `select` widget type.