import { type IEventEmitter } from '@breadstone/mosaik-elements';
import { CssLength } from '@breadstone/mosaik-themes';
import { DropdownChangeReason } from '../../../Types/DropdownChangeReason';
import { DropdownTrigger } from '../../../Types/DropdownTrigger';
import { Placement } from '../../../Types/Placement';
import { Strategy } from '../../../Types/Strategy';
import { CustomElement } from '../../Abstracts/CustomElement';
import { IDropdownElementProps } from './IDropdownElementProps';
declare const DropdownElement_base: (abstract new (...args: Array<any>) => import("../../../Behaviors/Themeable").IThemeableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Animatable").IAnimatableProps & import("../../../Behaviors/Animatable").IAnimatable) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Disableable").IDisableableProps) & typeof CustomElement & import("../../../Behaviors/Themeable").IThemeableCtor;
/**
 * Dropdown - A generic anchored floating-content primitive for building dropdowns, popovers, menus, and floating panels.
 *
 * @description
 * MosaicDropdown is a lower-level generic primitive that can be used to build every kind of anchored dropdown,
 * popover-like panel, menu surface, filter panel, user menu, contextual action panel or custom floating-content surface.
 * It owns only the dropdown lifecycle, trigger behavior, open state, native positioning, outside interaction handling,
 * focus restoration, keyboard close behavior, event dispatching and animation orchestration.
 * The semantic meaning of the projected content belongs to the projected content itself.
 *
 * The component supports two equivalent authoring styles:
 * 1. Direct slot projection: Place any element with `slot="anchor"` and any element with `slot="panel"`.
 * 2. Alias elements: Use `<mosaik-dropdown-anchor>` and `<mosaik-dropdown-panel>` wrappers.
 *
 * @name Dropdown
 * @element mosaik-dropdown
 * @category Primitives
 *
 * @slot anchor - The anchor content that triggers the dropdown.
 * @slot panel - The floating panel content.
 *
 * @csspart anchor - The anchor wrapper part.
 * @csspart panel - The panel wrapper part.
 *
 * @cssprop {String} --dropdown-background-color - The background color CSS custom property.
 * @cssprop {String} --dropdown-border-color - The border color CSS custom property.
 * @cssprop {String} --dropdown-border-radius - The border radius CSS custom property.
 * @cssprop {String} --dropdown-border-style - The border style CSS custom property.
 * @cssprop {String} --dropdown-border-width - The border width CSS custom property.
 * @cssprop {String} --dropdown-font-family - The font family CSS custom property.
 * @cssprop {String} --dropdown-font-letter-spacing - The font letter spacing CSS custom property.
 * @cssprop {String} --dropdown-font-line-height - The font line height CSS custom property.
 * @cssprop {String} --dropdown-font-size - The font size CSS custom property.
 * @cssprop {String} --dropdown-font-text-decoration - The font text decoration CSS custom property.
 * @cssprop {String} --dropdown-font-text-transform - The font text transform CSS custom property.
 * @cssprop {String} --dropdown-font-weight - The font weight CSS custom property.
 * @cssprop {String} --dropdown-foreground-color - The foreground color CSS custom property.
 * @cssprop {String} --dropdown-gap - The gap CSS custom property.
 * @cssprop {String} --dropdown-padding-bottom - The padding bottom CSS custom property.
 * @cssprop {String} --dropdown-padding-left - The padding left CSS custom property.
 * @cssprop {String} --dropdown-padding-right - The padding right CSS custom property.
 * @cssprop {String} --dropdown-padding-top - The padding top CSS custom property.
 * @cssprop {String} --dropdown-panel-background-color - The background color of the dropdown panel.
 * @cssprop {String} --dropdown-panel-border-color - The border color of the dropdown panel.
 * @cssprop {String} --dropdown-panel-border-radius - The border radius of the dropdown panel.
 * @cssprop {String} --dropdown-panel-border-style - The border style of the dropdown panel.
 * @cssprop {String} --dropdown-panel-border-width - The border width of the dropdown panel.
 * @cssprop {String} --dropdown-panel-box-shadow - The box shadow of the dropdown panel.
 * @cssprop {String} --dropdown-panel-max-height - The max height of the dropdown panel.
 * @cssprop {String} --dropdown-panel-offset - The offset between anchor and panel.
 * @cssprop {String} --dropdown-panel-padding - The padding of the dropdown panel.
 * @cssprop {String} --dropdown-panel-z-index - The z-index of the dropdown panel.
 * @cssprop {String} --dropdown-shadow - The shadow CSS custom property.
 * @cssprop {String} --dropdown-shadow-blur - The shadow blur CSS custom property.
 * @cssprop {String} --dropdown-shadow-color - The shadow color CSS custom property.
 * @cssprop {String} --dropdown-shadow-offset-x - The shadow offset x CSS custom property.
 * @cssprop {String} --dropdown-shadow-offset-y - The shadow offset y CSS custom property.
 * @cssprop {String} --dropdown-shadow-spread - The shadow spread CSS custom property.
 * @cssprop {String} --dropdown-transition-duration - The transition duration CSS custom property.
 * @cssprop {String} --dropdown-transition-mode - The transition mode CSS custom property.
 * @cssprop {String} --dropdown-transition-property - The transition property CSS custom property.
 * @cssprop {String} --dropdown-translate - The translate CSS custom property.
 *
 * @fires openChanged {CustomEvent<{open: boolean, reason: DropdownChangeReason}>} - Fired when the open state changes.
 *
 * @example
 * Basic dropdown with menu:
 * ```html
 * <mosaik-dropdown placement="bottom-start">
 *   <mosaik-button slot="anchor">Actions</mosaik-button>
 *   <mosaik-menu slot="panel">
 *     <mosaik-menu-item label="Edit"></mosaik-menu-item>
 *     <mosaik-menu-item label="Duplicate"></mosaik-menu-item>
 *     <mosaik-menu-item label="Delete"></mosaik-menu-item>
 *   </mosaik-menu>
 * </mosaik-dropdown>
 * ```
 *
 * @example
 * Dropdown with alias elements:
 * ```html
 * <mosaik-dropdown placement="bottom-end">
 *   <mosaik-dropdown-anchor>
 *     <mosaik-avatar user-id="current"></mosaik-avatar>
 *   </mosaik-dropdown-anchor>
 *   <mosaik-dropdown-panel>
 *     <mosaik-card>Account details</mosaik-card>
 *   </mosaik-dropdown-panel>
 * </mosaik-dropdown>
 * ```
 *
 * @example
 * Controlled dropdown:
 * ```html
 * <mosaik-dropdown .open="${this.isOpen}" trigger="manual">
 *   <mosaik-button slot="anchor">Toggle</mosaik-button>
 *   <div slot="panel">Panel content</div>
 * </mosaik-dropdown>
 * ```
 *
 * @public
 */
export declare class DropdownElement extends DropdownElement_base implements IDropdownElementProps {
    private static _anchorCounter;
    private readonly _clickOutsideController;
    private readonly _animationPlayer;
    private readonly _openChanged;
    private readonly _instanceId;
    private _trigger;
    private _closeOnEscape;
    private _closeOnSelect;
    private _restoreFocus;
    private _hasPopup?;
    private _matchAnchorWidth;
    private _popupRole;
    private _isVisible;
    private _dropDownPlacement;
    private _dropDownStrategy;
    private _dropDownDistance;
    private _dropDownSkidding;
    private _dropDownStaysOpen;
    private _dropDownMaxHeight;
    private _dropDownHeight?;
    private _dropDownWidth?;
    private _dropDownMaxWidth?;
    private _isDropDownOpen;
    private _anchorElement;
    private _panelElement;
    private _anchorSlot;
    private _panelSlot;
    private _hoverTimeout;
    private _focusTimeout;
    private _clickSubscription;
    private _anchorMouseEnterSubscription;
    private _anchorMouseLeaveSubscription;
    private _anchorFocusInSubscription;
    private _anchorFocusOutSubscription;
    private _panelClickSubscription;
    private _panelKeydownSubscription;
    private _panelMouseEnterSubscription;
    private _panelMouseLeaveSubscription;
    private _positioningCleanup;
    /**
     * @public
     */
    constructor();
    /**
     * Returns the `is` property.
     * The `is` property represents natural name of this element.
     *
     * @public
     * @static
     * @readonly
     */
    static get is(): string;
    /**
     * Gets the unique anchor ID for this instance.
     *
     * @public
     * @readonly
     */
    get _anchorId(): string;
    /**
     * Gets the unique panel ID for this instance.
     *
     * @public
     * @readonly
     */
    get _panelId(): string;
    /**
     * Gets the anchor name CSS custom property for CSS Anchor Positioning.
     *
     * @public
     * @readonly
     */
    get _anchorName(): string;
    /**
     * Gets the current popup role based on the hasPopup property.
     *
     * @public
     * @readonly
     */
    get popupRole(): string;
    /**
     * Gets whether the panel is currently visible.
     * This is separate from `open` to allow exit animations to complete before hiding.
     *
     * @public
     * @readonly
     */
    get isVisible(): boolean;
    /**
     * Gets the animation target element.
     * Animations are applied to the panel element.
     *
     * @public
     * @override
     * @readonly
     */
    get animationTarget(): HTMLElement;
    /**
     * Gets or sets the `dropDownPlacement` property.
     *
     * @public
     * @attr drop-down-placement
     */
    get dropDownPlacement(): Placement;
    set dropDownPlacement(value: Placement);
    /**
     * Gets or sets the `dropDownStrategy` property.
     *
     * @public
     * @attr drop-down-strategy
     */
    get dropDownStrategy(): Strategy;
    set dropDownStrategy(value: Strategy);
    /**
     * Gets or sets the `dropDownDistance` property.
     *
     * @public
     * @attr drop-down-distance
     */
    get dropDownDistance(): number;
    set dropDownDistance(value: number);
    /**
     * Gets or sets the `dropDownSkidding` property.
     *
     * @public
     * @attr drop-down-skidding
     */
    get dropDownSkidding(): number;
    set dropDownSkidding(value: number);
    /**
     * Gets or sets the `dropDownStaysOpen` property.
     *
     * @public
     * @attr drop-down-stays-open
     */
    get dropDownStaysOpen(): boolean;
    set dropDownStaysOpen(value: boolean);
    /**
     * Gets or sets the `dropDownMaxHeight` property.
     *
     * @public
     * @attr drop-down-max-height
     */
    get dropDownMaxHeight(): CssLength;
    set dropDownMaxHeight(value: CssLength);
    /**
     * Gets or sets the `dropDownHeight` property.
     *
     * @public
     * @attr drop-down-height
     */
    get dropDownHeight(): CssLength | undefined;
    set dropDownHeight(value: CssLength | undefined);
    /**
     * Gets or sets the `dropDownWidth` property.
     *
     * @public
     * @attr drop-down-width
     */
    get dropDownWidth(): CssLength | undefined;
    set dropDownWidth(value: CssLength | undefined);
    /**
     * Gets or sets the `dropDownMaxWidth` property.
     *
     * @public
     * @attr drop-down-max-width
     */
    get dropDownMaxWidth(): CssLength | undefined;
    set dropDownMaxWidth(value: CssLength | undefined);
    /**
     * Gets or sets the `isDropDownOpen` property.
     *
     * @public
     * @attr is-drop-down-open
     */
    get isDropDownOpen(): boolean;
    set isDropDownOpen(value: boolean);
    /**
     * Gets or sets the `placement` property.
     *
     * @public
     * @attr placement
     */
    get placement(): Placement;
    set placement(value: Placement);
    /**
     * Gets or sets the `strategy` property.
     *
     * @public
     * @attr strategy
     */
    get strategy(): Strategy;
    set strategy(value: Strategy);
    /**
     * Gets or sets the `offset` property.
     *
     * @public
     * @attr offset
     */
    get offset(): number;
    set offset(value: number);
    /**
     * Gets or sets the `skidding` property.
     *
     * @public
     * @attr skidding
     */
    get skidding(): number;
    set skidding(value: number);
    /**
     * Gets or sets the `open` property.
     * Supports both controlled and uncontrolled usage.
     *
     * @public
     * @attr open
     */
    get open(): boolean;
    set open(value: boolean);
    /**
     * Gets or sets the `trigger` property.
     *
     * @public
     * @attr trigger
     */
    get trigger(): DropdownTrigger;
    set trigger(value: DropdownTrigger);
    /**
     * Gets or sets the `closeOnOutsideClick` property.
     *
     * @public
     * @attr close-on-outside-click
     */
    get closeOnOutsideClick(): boolean;
    set closeOnOutsideClick(value: boolean);
    /**
     * Gets or sets the `closeOnEscape` property.
     *
     * @public
     * @attr close-on-escape
     */
    get closeOnEscape(): boolean;
    set closeOnEscape(value: boolean);
    /**
     * Gets or sets the `closeOnSelect` property.
     *
     * @public
     * @attr close-on-select
     */
    get closeOnSelect(): boolean;
    set closeOnSelect(value: boolean);
    /**
     * Gets or sets the `restoreFocus` property.
     *
     * @public
     * @attr restore-focus
     */
    get restoreFocus(): boolean;
    set restoreFocus(value: boolean);
    /**
     * Gets or sets the `hasPopup` property.
     *
     * @public
     * @attr has-popup
     */
    get hasPopup(): string | undefined;
    set hasPopup(value: string | undefined);
    /**
     * Gets or sets the `matchAnchorWidth` property.
     *
     * @public
     * @attr match-anchor-width
     */
    get matchAnchorWidth(): boolean;
    set matchAnchorWidth(value: boolean);
    /**
     * Gets or sets the `maxHeight` property.
     *
     * @public
     * @attr max-height
     */
    get maxHeight(): CssLength;
    set maxHeight(value: CssLength);
    /**
     * Gets or sets the `height` property.
     *
     * @public
     * @attr height
     */
    get height(): CssLength | undefined;
    set height(value: CssLength | undefined);
    /**
     * Gets or sets the `width` property.
     *
     * @public
     * @attr width
     */
    get width(): CssLength | undefined;
    set width(value: CssLength | undefined);
    /**
     * Gets or sets the `maxWidth` property.
     *
     * @public
     * @attr max-width
     */
    get maxWidth(): CssLength | undefined;
    set maxWidth(value: CssLength | undefined);
    /**
     * Called when the open state changes.
     *
     * @public
     * @readonly
     * @eventProperty
     */
    get openChanged(): IEventEmitter<{
        open: boolean;
        reason: DropdownChangeReason;
    }>;
    /**
     * Opens the dropdown.
     *
     * @param reason - The reason for opening.
     * @public
     */
    openDropdown(reason?: DropdownChangeReason): void;
    /**
     * Closes the dropdown.
     *
     * @param reason - The reason for closing.
     * @public
     */
    closeDropdown(reason?: DropdownChangeReason): void;
    /**
     * Toggles the dropdown.
     *
     * @param reason - The reason for toggling.
     * @public
     */
    toggleDropdown(reason?: DropdownChangeReason): void;
    /**
     * Updates the panel position. With native CSS Anchor Positioning,
     * this is usually not needed but serves as an imperative escape hatch.
     *
     * @public
     */
    updatePosition(): void;
    /**
     * @public
     * @override
     */
    connectedCallback(): void;
    /**
     * @public
     * @override
     */
    disconnectedCallback(): void;
    /**
     * Handles anchor slot changes.
     *
     * @public
     */
    onAnchorSlotChange(_event: Event): void;
    /**
     * Handles panel slot changes.
     *
     * @public
     */
    onPanelSlotChange(_event: Event): void;
    /**
     * @protected
     */
    protected onOpenPropertyChanged(_prev?: boolean, next?: boolean): void;
    /**
     * @protected
     */
    protected onDisabledPropertyChanged(_prev: boolean, next?: boolean): void;
    /**
     * @protected
     */
    protected onTriggerPropertyChanged(_prev?: string, next?: string): void;
    /**
     * @protected
     */
    protected onPositioningPropertyChanged(): void;
    private onClickedOutside;
    private onAnchorClick;
    private isAnchorEventPath;
    private onAnchorMouseEnter;
    private onAnchorMouseLeave;
    private onAnchorFocusIn;
    private onAnchorFocusOut;
    private onPanelMouseEnter;
    private onPanelMouseLeave;
    private onPanelClick;
    private onPanelKeydown;
    private showPanel;
    private showNativePopover;
    private hidePanel;
    private hideNativePopover;
    private startPositioning;
    private stopPositioning;
    private applyPositioning;
    private applyDimensions;
    private applyAriaAttributes;
    private setupPanelListeners;
    private setupAnchorListeners;
    private clearHoverTimeout;
    private clearFocusTimeout;
}
/**
 * @public
 */
export declare namespace DropdownElement {
    type Props = IDropdownElementProps;
}
/**
 * @public
 */
declare global {
    interface HTMLElementTagNameMap {
        'mosaik-dropdown': DropdownElement;
    }
}
export {};
//# sourceMappingURL=DropdownElement.d.ts.map