import HTMLElement from '../html-element/HTMLElement';
import IHTMLFormElement from '../html-form-element/IHTMLFormElement';
import ValidityState from '../validity-state/ValidityState';
import IHTMLLabelElement from '../html-label-element/IHTMLLabelElement';
import INodeList from '../node/INodeList';
import IHTMLSelectElement from './IHTMLSelectElement';
import Event from '../../event/Event';
import IHTMLOptionElement from '../html-option-element/IHTMLOptionElement';
import IHTMLOptGroupElement from '../html-opt-group-element/IHTMLOptGroupElement';
import IHTMLOptionsCollection from '../html-option-element/IHTMLOptionsCollection';
import INode from '../node/INode';
/**
* HTML Select Element.
*
* Reference:
* https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.
*/
export default class HTMLSelectElement extends HTMLElement implements IHTMLSelectElement {
labels: INodeList;
readonly options: IHTMLOptionsCollection;
onchange: (event: Event) => void | null;
oninput: (event: Event) => void | null;
/**
* Returns name.
*
* @returns Name.
*/
get name(): string;
/**
* Sets name.
*
* @param name Name.
*/
set name(name: string);
/**
* Returns disabled.
*
* @returns Disabled.
*/
get disabled(): boolean;
/**
* Sets disabled.
*
* @param disabled Disabled.
*/
set disabled(disabled: boolean);
/**
* Returns multiple.
*
* @returns Multiple.
*/
get multiple(): boolean;
/**
* Sets multiple.
*
* @param multiple Multiple.
*/
set multiple(multiple: boolean);
/**
* Returns autofocus.
*
* @returns Autofocus.
*/
get autofocus(): boolean;
/**
* Sets autofocus.
*
* @param autofocus Autofocus.
*/
set autofocus(autofocus: boolean);
/**
* Returns length.
*
* @returns length.
*/
get length(): number;
/**
* Sets length.
*
* @param length Length.
*/
set length(length: number);
/**
* Returns required.
*
* @returns Required.
*/
get required(): boolean;
/**
* Sets required.
*
* @param required Required.
*/
set required(required: boolean);
/**
* Returns type.
*
* @returns type.
*/
get type(): string;
/**
* Returns value.
*
* @returns Value.
*/
get value(): string;
/**
* Sets value.
*
* @param value Value.
*/
set value(value: string);
/**
* Returns value.
*
* @returns Value.
*/
get selectedIndex(): number;
/**
* Sets value.
*
* @param selectedIndex Selected index.
*/
set selectedIndex(selectedIndex: number);
/**
* Returns the parent form element.
*
* @returns Form.
*/
get form(): IHTMLFormElement;
/**
* Returns validity state.
*
* @returns Validity state.
*/
get validity(): ValidityState;
/**
* Returns "true" if it will validate.
*
* @returns "true" if it will validate.
*/
get willValidate(): boolean;
/**
* Returns item from options collection by index.
*
* @param index Index.
*/
item(index: number): IHTMLOptionElement | IHTMLOptGroupElement;
/**
* Adds new option to options collection.
*
* @param element HTMLOptionElement or HTMLOptGroupElement to add.
* @param before HTMLOptionElement or index number.
*/
add(element: IHTMLOptionElement | IHTMLOptGroupElement, before?: number | IHTMLOptionElement | IHTMLOptGroupElement): void;
/**
* Removes indexed element from collection or the select element.
*
* @param [index] Index.
*/
remove(index?: number): void;
/**
* @override
*/
appendChild(node: INode): INode;
/**
* @override
*/
insertBefore(newNode: INode, referenceNode: INode | null): INode;
/**
* @override
*/
removeChild(node: INode): INode;
/**
* Resets the option selectedness.
*
* Based on:
* https://github.com/jsdom/jsdom/blob/master/lib/jsdom/living/nodes/HTMLSelectElement-impl.js
*
* @param [newOption] Optional new option element to be selected.
* @see https://html.spec.whatwg.org/multipage/form-elements.html#selectedness-setting-algorithm
*/
_resetOptionSelectednes(newOption?: IHTMLOptionElement): void;
/**
* Returns display size.
*
* @returns Display size.
*/
protected _getDisplaySize(): number;
/**
* Updates index properties.
*
* @param previousLength Length before the update.
* @param newLength Length after the update.
*/
protected _updateIndexProperties(previousLength: number, newLength: number): void;
}