import { IEventEmitter } from '@breadstone/mosaik-elements';
import { type IAnimatable } from '../../../Behaviors/Animatable';
import { ExpandDirection } from '../../../Types/ExpandDirection';
import { CustomElement } from '../../Abstracts/CustomElement';
import type { IExpandCollapsedEvent, IExpandCollapsedEventDetail } from './Events/IExpandCollapsedEvent';
import type { IExpandExpandedEvent, IExpandExpandedEventDetail } from './Events/IExpandExpandedEvent';
import type { IExpandToggledEvent, IExpandToggledEventDetail } from './Events/IExpandToggledEvent';
import type { IExpandableElementProps } from './IExpandableElementProps';
import { IExpandable } from '../../Interfaces/IExpandable';
declare const ExpandableElement_base: (abstract new (...args: Array<any>) => import("../../../Behaviors/Themeable").IThemeableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Animatable").IAnimatableProps & IAnimatable) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Disableable").IDisableableProps) & typeof CustomElement & import("../../../Behaviors/Themeable").IThemeableCtor;
/**
 * Expandable - A collapsible container that can be expanded or collapsed to reveal or hide its content.
 *
 * @description
 * The Expandable component provides a way to organize and display content that can be toggled to show or hide.
 * It typically consists of a header section that serves as a toggle button and a content section that can be expanded or collapsed.
 * Expandables are commonly used in UIs to manage space and provide a cleaner user experience by allowing users to focus on relevant information.
 *
 * @element mosaik-expandable
 * @category Layout
 *
 * @fires expanded - Called when the element is expanded.
 * @fires collapsed - Called when the element is collapsed.
 * @fires toggled - Called when the element is toggled.
 *
 * @example
 * ```html
 * <mosaik-expandable>
 *   <!-- Content to be revealed or hidden -->
 * </mosaik-expandable>
 * ```
 *
 * @public
 */
export declare class ExpandableElement extends ExpandableElement_base implements IExpandableElementProps, IAnimatable, IExpandable {
    private readonly _expanded;
    private readonly _collapsed;
    private readonly _toggled;
    private _direction;
    private _isExpanded;
    /**
     * @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 `direction` property.
     *
     * @public
     * @attr
     */
    get direction(): ExpandDirection;
    set direction(value: ExpandDirection);
    /**
     * Gets or sets the `isExpanded` property.
     *
     * @public
     * @attr
     */
    get isExpanded(): boolean;
    set isExpanded(value: boolean);
    /**
     * Called when the element is expanded.
     * Provides reference to `{@link IExpandExpandedEventDetail}` as event detail.
     *
     * @public
     * @readonly
     * @eventProperty
     */
    get expanded(): IEventEmitter<IExpandExpandedEventDetail>;
    /**
     * Called when the element is collapsed.
     * Provides reference to `{@link IEventDetail}` as event detail.
     *
     * @public
     * @readonly
     * @eventProperty
     */
    get collapsed(): IEventEmitter<IExpandCollapsedEventDetail>;
    /**
     * Called when the element is toggled.
     * Provides reference to `{@link IEventDetail}` as event detail.
     *
     * @public
     * @readonly
     * @eventProperty
     */
    get toggled(): IEventEmitter<IExpandToggledEventDetail>;
    /**
     * Toggles the element between expanded and collapsed states.
     *
     * @public
     */
    toggle(): void;
    /**
     * Expands the element.
     *
     * @public
     */
    expand(): void;
    /**
     * Collapses the element.
     *
     * @public
     */
    collapse(): void;
    /**
     * Emits the {@link expanded} event.
     *
     * @protected
     */
    protected onExpanded(args: IExpandExpandedEventDetail): void;
    /**
     * Emits the {@link collapsed} event.
     *
     * @protected
     */
    protected onCollapsed(args: IExpandCollapsedEventDetail): void;
    /**
     * Emits the {@link toggled} event.
     *
     * @protected
     */
    protected onToggled(args: IExpandToggledEventDetail): void;
    /**
     * This method is invoked when the `isExpanded` property is changed.
     *
     * @protected
     */
    protected onIsExpandedChanged(prev: boolean, next: boolean): void;
}
/**
 * @public
 */
export declare namespace ExpandableElement {
    type Props = IExpandableElementProps;
}
/**
 * @public
 */
declare global {
    interface HTMLElementTagNameMap {
        'mosaik-expandable': ExpandableElement;
    }
    interface HTMLElementEventMap {
        expanded: IExpandExpandedEvent;
        collapsed: IExpandCollapsedEvent;
        toggled: IExpandToggledEvent;
    }
}
export {};
//# sourceMappingURL=ExpandableElement.d.ts.map