#import <DOM/ShadowRoot.idl>
#import <HTML/CustomElements/CustomStateSet.idl>

// https://html.spec.whatwg.org/multipage/custom-elements.html#elementinternals
[Exposed=Window]
interface ElementInternals {
    // Shadow root access
    readonly attribute ShadowRoot? shadowRoot;

    // Form-associated custom elements
    undefined setFormValue((File or USVString or FormData)? value,
                            optional (File or USVString or FormData)? state);

    readonly attribute HTMLFormElement? form;

    undefined setValidity(optional ValidityStateFlags flags = {},
                          optional DOMString message,
                          optional HTMLElement anchor);
    readonly attribute boolean willValidate;
    readonly attribute ValidityState validity;
    readonly attribute DOMString validationMessage;
    boolean checkValidity();
    boolean reportValidity();

    readonly attribute NodeList labels;

    // Custom state pseudo-class
    [SameObject] readonly attribute CustomStateSet states;
};

// Accessibility semantics
// ElementInternals includes ARIAMixin;

dictionary ValidityStateFlags {
    boolean valueMissing = false;
    boolean typeMismatch = false;
    boolean patternMismatch = false;
    boolean tooLong = false;
    boolean tooShort = false;
    boolean rangeUnderflow = false;
    boolean rangeOverflow = false;
    boolean stepMismatch = false;
    boolean badInput = false;
    boolean customError = false;
};
