import { ButtonType } from '../../../Types/ButtonType';
import { CustomElement } from '../../Abstracts/CustomElement';
import type { IButtonBaseElementProps } from './IButtonBaseElementProps';
declare const ButtonBaseElement_base: import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<typeof CustomElement, import("../../../Behaviors/Focusable").IFocusableProps>, import("../../../Behaviors/Disableable").IDisableableProps>, import("../../../Behaviors/Valueable").IValueableProps<unknown>>, import("../../../Behaviors/Sizeable").ISizeableProps>, import("../../../Behaviors/Appearanceable").IAppearanceableProps>, import("../../../Behaviors/Variantable").IVariantableProps>;
/**
 * Button Base Element - The foundational base class for all button-type components.
 *
 * @description
 * ButtonBaseElement provides the core functionality and behavior patterns for all button-like
 * interactive controls in the Mosaik design system. It combines essential behaviors including
 * focus management, disabled states, visual variants, sizing, appearance modes, and value tracking.
 * This abstract class establishes the common API surface for buttons, icon buttons, toggle buttons,
 * and other clickable controls. It manages the button type attribute (button/submit/reset) which
 * determines how the button interacts with parent forms. All concrete button implementations
 * extend this base class to inherit consistent behavioral patterns and styling hooks.
 *
 * @remarks
 * The class applies multiple behavior mixins in a specific composition order: Focusable (innermost)
 * → Disableable → Valueable → Sizeable → Appearanceable → Variantable (outermost). This layering
 * ensures proper inheritance of lifecycle hooks and property override patterns.
 *
 * @name ButtonBaseElement
 * @category Abstract Elements
 *
 * @slot [dynamic] - Slots are defined by concrete button implementations
 *
 * @csspart [dynamic] - Parts are defined by concrete button implementations
 *
 * @fires connected {ConnectedEvent} - Emitted when the element is connected to the DOM
 * @fires disconnected {DisconnectedEvent} - Emitted when the element is disconnected from the DOM
 * @fires changed {PropertyChangedEvent} - Emitted when any attribute changes before update
 *
 * @example
 * Extending ButtonBaseElement to create a custom button:
 * ```typescript
 * export class IconButtonElement extends ButtonBaseElement {
 *   constructor() {
 *     super();
 *   }
 *
 *   protected override render() {
 *     return html`<button type="${this.type}"><slot></slot></button>`;
 *   }
 * }
 * ```
 *
 * @example
 * Using type property for form integration:
 * ```typescript
 * <mosaik-button type="submit">Submit Form</mosaik-button>
 * <mosaik-button type="reset">Reset Form</mosaik-button>
 * <mosaik-button type="button">Regular Button</mosaik-button>
 * ```
 *
 * @example
 * Leveraging inherited behaviors:
 * ```html
 * <custom-button
 *   variant="primary"
 *   appearance="solid"
 *   size="large"
 *   disabled
 *   value="action-id">
 *   Action
 * </custom-button>
 * ```
 *
 * @abstract
 * @public
 */
export declare abstract class ButtonBaseElement extends ButtonBaseElement_base implements IButtonBaseElementProps {
    private _type;
    /**
     * @public
     */
    constructor();
    /**
     * Gets or sets the `type` property.
     * It modifies the classification and default behavior of the {@link ButtonElement}.
     * `submit` and `reset` are only necessary when the {@link ButtonElement} is located in a from and should control this actions.
     *
     * @public
     * @attr
     */
    get type(): ButtonType;
    set type(value: ButtonType);
    /**
     * @protected
     * @override
     */
    protected onApplyTemplate(): void;
}
export {};
//# sourceMappingURL=ButtonBaseElement.d.ts.map