#import <HTML/HTMLElement.idl>
#import <HTML/HTMLFormElement.idl>

[MissingValueDefault=submit, InvalidValueDefault=submit]
enum ButtonTypeState {
    "submit",
    "reset",
    "button"
};

// https://html.spec.whatwg.org/multipage/semantics.html#htmlbuttonelement
[Exposed=Window]
interface HTMLButtonElement : HTMLElement {
    [HTMLConstructor] constructor();

    [CEReactions, Reflect] attribute boolean disabled;
    readonly attribute HTMLFormElement? form;
    [CEReactions] attribute USVString formAction;
    [CEReactions, Reflect=formenctype, Enumerated=FormEnctypeAttribute] attribute DOMString formEnctype;
    [CEReactions, Reflect=formmethod, Enumerated=FormMethodAttribute] attribute DOMString formMethod;
    [CEReactions, Reflect=formnovalidate] attribute boolean formNoValidate;
    [CEReactions, Reflect=formtarget] attribute DOMString formTarget;
    [CEReactions, Reflect] attribute DOMString name;
    [CEReactions, Reflect, Enumerated=ButtonTypeState] attribute DOMString type;
    [CEReactions, Reflect] attribute DOMString value;

    [FIXME] readonly attribute boolean willValidate;
    [FIXME] readonly attribute ValidityState validity;
    [FIXME] readonly attribute DOMString validationMessage;
    [FIXME] boolean checkValidity();
    [FIXME] boolean reportValidity();
    [FIXME] undefined setCustomValidity(DOMString error);

    readonly attribute NodeList labels;
};
// FIXME: HTMLButtonElement includes PopoverInvokerElement;