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 structured container for collecting and validating user input data.
 *
 * Provides form submission handling, validation coordination, and data collection across
 * multiple form controls. Supports custom form data serialization and validation workflows.
 * Essential for user registration, settings panels, and data entry interfaces.
 *
 * @name FormElement
 * @element mosaik-form
 * @category Forms
 *
 * @slot - Default content area for form controls and layout elements
 *
 * @csspart form - The main form container element
 *
 * @cssprop --form-background-color - Background color of the form container
 * @cssprop --form-padding - Internal padding for form content
 * @cssprop --form-gap - Spacing between form elements
 * @cssprop --form-border-radius - Border radius for form container
 * @cssprop --form-border-color - Border color around the form
 * @cssprop --form-max-width - Maximum width constraint for the form
 *
 * @dependency FormFieldElement - Provides structured form field layout and validation
 *
 * @example
 * ```html
 * <!-- User registration form -->
 * <mosaik-form id="registrationForm">
 *   <mosaik-form-field label="Full Name" required>
 *     <mosaik-text-field name="fullName" required></mosaik-text-field>
 *   </mosaik-form-field>
 *
 *   <mosaik-form-field label="Email" required>
 *     <mosaik-text-field name="email" type="email" required></mosaik-text-field>
 *   </mosaik-form-field>
 *
 *   <mosaik-form-field label="Password" required>
 *     <mosaik-text-field name="password" type="password" required></mosaik-text-field>
 *   </mosaik-form-field>
 *
 *   <div class="form-actions">
 *     <mosaik-button type="reset">Reset</mosaik-button>
 *     <mosaik-button type="submit" appearance="primary">Register</mosaik-button>
 *   </div>
 * </mosaik-form>
 *
 * <!-- Settings form with validation -->
 * <mosaik-form novalidate>
 *   <mosaik-form-field label="Theme Preference">
 *     <mosaik-select name="theme">
 *       <option value="light">Light</option>
 *       <option value="dark">Dark</option>
 *       <option value="auto">System</option>
 *     </mosaik-select>
 *   </mosaik-form-field>
 *
 *   <mosaik-form-field label="Notifications">
 *     <mosaik-checkbox name="emailNotifications">Email notifications</mosaik-checkbox>
 *     <mosaik-checkbox name="pushNotifications">Push notifications</mosaik-checkbox>
 *   </mosaik-form-field>
 *
 *   <mosaik-button type="submit">Save Settings</mosaik-button>
 * </mosaik-form>
 *
 * <!-- Multi-step form -->
 * <mosaik-form method="post" action="/api/submit">
 *   <div class="form-step" data-step="1">
 *     <h3>Personal Information</h3>
 *     <mosaik-form-field label="First Name">
 *       <mosaik-text-field name="firstName"></mosaik-text-field>
 *     </mosaik-form-field>
 *     <mosaik-form-field label="Last Name">
 *       <mosaik-text-field name="lastName"></mosaik-text-field>
 *     </mosaik-form-field>
 *   </div>
 *
 *   <div class="form-actions">
 *     <mosaik-button type="button">Next Step</mosaik-button>
 *   </div>
 * </mosaik-form>
 * ```
 *
 * @fires submitted - Emitted when the form is submitted with form data
 * @fires reseted - Emitted when the form is reset to initial values
 *
 * @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