import { CustomElement } from '../Abstracts/CustomElement';
import type { IFormResetEventDetail } from './Events/IFormResetEventDetail';
import type { IFormSubmitEventDetail } from './Events/IFormSubmitEventDetail';
import type { IFormElementProps } from './IFormElementProps';
import { IEventEmitter } from '@breadstone/mosaik-elements';
import { ISlottable } from '../../Behaviors/Slottable';
declare const FormElement_base: (abstract new (...args: Array<any>) => import("../../../Controls/Behaviors/Themeable").IThemeableProps) & (abstract new (...args: Array<any>) => import("../../Behaviors/Slottable").ISlottableProps & ISlottable) & typeof CustomElement & import("../../../Controls/Behaviors/Themeable").IThemeableCtor;
/**
 * Form - A component that represents a form container.
 *
 * @description
 * This element serves as a container for form inputs and buttons. *
 *
 * @name Form
 * @element mosaik-form
 * @category Forms
 *
 * @fires submitted {CustomEvent<IFormSubmitEventDetail>} - Fired when the form is submitted.
 * @fires reseted {CustomEvent<IFormResetEventDetail>} - Fired when the form is reseted.
 *
 * @slot - The default slot where form controls can be placed.
 *
 * @csspart form - The part representing the form container itself.
 *
 * @example
 * ```html
 * <mosaik-form>
 *   <input type="text" name="username" placeholder="Username">
 *   <input type="password" name="password" placeholder="Password">
 *   <button type="submit">Submit</button>
 * </mosaik-form>
 * ```
 *
 * @public
 */
export declare class FormElement extends FormElement_base implements IFormElementProps, ISlottable {
    private readonly _submitted;
    private readonly _reseted;
    private _submitSubscription;
    private _resetSubscription;
    private _formElement?;
    private _novalidate;
    private _autocomplete;
    private _name;
    /**
     * @public
     */
    constructor();
    /**
     * Returns the `{@link is}` property.
     * The `{@link is}` property represents natural name of this element.
     *
     * @public
     * @static
     * @readonly
     */
    static get is(): string;
    /**
     * Gets or sets the `novalidate` property.
     *
     * @public
     * @attr
     */
    get novalidate(): boolean;
    set novalidate(value: boolean);
    /**
     * Gets or sets the `autocomplete` property.
     *
     * @public
     * @attr
     */
    get autocomplete(): boolean;
    set autocomplete(value: boolean);
    /**
     * Gets or sets the `name` property.
     *
     * @public
     * @attr
     */
    get name(): string;
    set name(value: string);
    /**
     * Called when the form is submitted.
     * Provides reference to `{@link IEventDetail}` as event detail.
     *
     * @public
     * @readonly
     * @eventProperty
     */
    get submitted(): IEventEmitter<IFormSubmitEventDetail>;
    /**
     * Called when the form is reseted.
     * Provides reference to `{@link IEventDetail}` as event detail.
     *
     * @public
     * @readonly
     * @eventProperty
     */
    get reseted(): IEventEmitter<IFormResetEventDetail>;
    /**
     * @public
     * @override
     */
    disconnectedCallback(): void;
    /**
     * Submits the form. It returns `true` if the form is valid, otherwise it returns `false`.
     *
     * @public
     */
    submit(): boolean;
    /**
     * Resets the form.
     *
     * @public
     */
    reset(): void;
    /**
     * Reports the validity of the form.
     * It returns `true` if the form is valid, otherwise it returns `false`.
     *
     * @public
     */
    reportValidity(): boolean;
    /**
     * Checks the validity of the form.
     * It returns `true` if the form is valid, otherwise it returns `false`.
     *
     * @public
     */
    checkValidity(): boolean;
    /**
     * @protected
     * @override
     */
    protected onApplyTemplate(): void;
    /**
     * Emits the {@link reseted} event.
     *
     * @protected
     */
    protected onReseted(args: IFormResetEventDetail): void;
    /**
     * Emits the {@link submitted} event.
     *
     * @protected
     */
    protected onSubmitted(args: IFormSubmitEventDetail): void;
    /**
     * @private
     */
    private getFormData;
    /**
     * @private
     */
    private getFormFields;
    /**
     * @private
     */
    private onClick;
}
/**
 * @public
 */
export declare namespace FormElement {
    type Props = IFormElementProps;
}
/**
 * @public
 */
declare global {
    interface HTMLElementTagNameMap {
        'mosaik-form': FormElement;
    }
}
export {};
//# sourceMappingURL=FormElement.d.ts.map