import { LitElement } from 'lit';
type HTMLElementConstructor<T = HTMLElement> = new (...args: any[]) => T;
type NativeFormControlElement = HTMLInputElement;
type FlagTypes = 'badInput' | 'customError' | 'patternMismatch' | 'rangeOverflow' | 'rangeUnderflow' | 'stepMismatch' | 'tooLong' | 'tooShort' | 'typeMismatch' | 'valueMissing' | 'badInput' | 'valid';
interface UUIFormControlValidatorConfig {
    flagKey: FlagTypes;
    getMessageMethod: () => string;
    checkMethod: () => boolean;
    weight: number;
}
export interface UUIFormControlMixinInterface<ValueType> extends LitElement {
    addValidator: (flagKey: FlagTypes, getMessageMethod: () => string, checkMethod: () => boolean) => void;
    removeValidator: (obj: UUIFormControlValidatorConfig) => void;
    focusFirstInvalidElement(): void;
    get value(): ValueType;
    set value(newValue: ValueType);
    formResetCallback(): void;
    checkValidity(): boolean;
    get validationMessage(): string;
    get validity(): ValidityState;
    setCustomValidity(error?: string): void;
    submit(): void;
    pristine: boolean;
}
export declare abstract class UUIFormControlMixinElement<ValueType> extends LitElement implements UUIFormControlMixinInterface<ValueType> {
    protected _internals: ElementInternals;
    protected _runValidators(): void;
    addValidator: (flagKey: FlagTypes, getMessageMethod: () => string, checkMethod: () => boolean) => void;
    removeValidator: (obj: UUIFormControlValidatorConfig) => void;
    protected addFormControlElement(element: NativeFormControlElement): void;
    protected abstract getFormElement(): HTMLElement | undefined | null;
    focusFirstInvalidElement(): void;
    get value(): ValueType;
    set value(newValue: ValueType);
    formResetCallback(): void;
    checkValidity(): boolean;
    get validationMessage(): string;
    get validity(): ValidityState;
    setCustomValidity(error: string): void;
    submit(): void;
    pristine: boolean;
    name: string;
    required: boolean;
    requiredMessage: string;
    error: boolean;
    errorMessage: string;
}
/**
 * The mixin allows a custom element to participate in HTML forms.
 *
 * @param {Object} superClass - superclass to be extended.
 * @mixin
 */
export declare const UUIFormControlMixin: <ValueType = FormDataEntryValue | FormData, T extends HTMLElementConstructor<LitElement> = typeof LitElement, DefaultValueType = undefined>(superClass: T, defaultValue?: DefaultValueType) => HTMLElementConstructor<UUIFormControlMixinElement<ValueType | DefaultValueType>> & T;
export {};
