import { AriaAttributes } from 'react';
import { CommonProps } from '../types';
/** General props that should be supported by ANY form control */
export interface GeneralFormControlProps<Value, OnChangeValue = Value> extends CommonProps {
    ariaLabel?: AriaAttributes['aria-label'];
    ariaErrorMessage?: AriaAttributes['aria-errormessage'];
    ariaDescribedBy?: AriaAttributes['aria-errormessage'];
    ariaInvalid?: AriaAttributes['aria-invalid'];
    ariaRequired?: AriaAttributes['aria-required'];
    /**
     * The id global attribute defines an identifier (ID) which must be unique in
     * the whole document. Its purpose is to identify the element when linking
     * (using a fragment identifier), scripting, or styling (with CSS).
     *
     * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
     */
    id?: string;
    /**
     * The input control's value.
     *
     * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#value
     */
    value?: Value;
    /**
     * The Boolean required attribute, if present, indicates that the user must specify a value
     * for the input before the owning form can be submitted.
     *
     * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/required
     */
    required?: boolean;
    /**
     * The Boolean `disabled` attribute, when present, makes the element not mutable, focusable, or even
     * submitted with the form. The user can neither edit nor focus on the control, nor its form control
     * descendants.
     *
     * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled
     */
    disabled?: boolean;
    /**
     * The change event is fired for `<input>` elements when
     * an alteration to the element's value is committed by the user. Unlike the input
     * event, the change event is not necessarily fired for each alteration to an element's value.
     *
     * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event
     */
    onChange?: (value: OnChangeValue) => void;
    /**
     * The onblur property of the GlobalEventHandlers mixin is the event handler for processing
     * blur events.
     *
     * @see https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onblur
     */
    onBlur?: () => void;
}
/**
 * List of attributes and events that allows to elements based on `<input>` and `<textarea>`.
 */
export interface SupportedInputProps<Value = string> extends GeneralFormControlProps<Value> {
    /**
     * The placeholder attribute is a string that provides a brief hint to the user as to
     * what kind of information is expected in the field. It should be a word or
     * short phrase that provides a hint as to the expected type of data,
     * rather than an explanation or prompt. The text must not include carriage returns
     * or line feeds. So for example if a field is expected to capture a user's
     * first name, and its label is "First Name", a suitable placeholder might be "e.g. Mustafa".
     *
     * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#placeholder
     */
    placeholder?: string;
}
