import { ComponentInterface, EventEmitter } from '../../stencil-public-runtime';
import { type Placement } from '@floating-ui/dom';
export type TriggerType = 'hover' | 'click' | 'focus' | 'manual';
/**
* @component BcmLinked
* @description A flexible linked floating element component that displays contextual content relative to a trigger element.
* Built on the native Popover API for top-layer rendering and Floating UI for intelligent positioning.
* Supports different trigger types (click, hover, focus, manual) and comprehensive event system.
*
* @example Basic Click Trigger
*
*
*
Floating content here
*
*
* @example Hover Trigger with Delays
*
* Hover Me
*
This appears on hover
*
*
* @example Manual Control
*
*
*
Controlled content
*
*
*
* @slot trigger - The trigger element that controls the floating element visibility
* @slot - Default slot for the floating content
*
* @csspart floating - The floating container element
* @csspart arrow - The arrow element pointing to the trigger
* @csspart content - The content wrapper element
*/
export declare class BcmLinked implements ComponentInterface {
host: HTMLElement;
private floatingRef?;
private triggerRef?;
private arrowRef?;
private cleanupAutoUpdate?;
private showTimeout?;
private hideTimeout?;
private componentId;
/**
* @prop {boolean} visible - Controls the visibility state of the floating element.
* Can be set programmatically or toggled by user interaction.
* Default: false
*/
visible: boolean;
/**
* @prop {TriggerType} trigger - Defines the interaction type to show/hide the floating element.
* 'click' toggles on click, 'hover' shows on mouse enter and hides on mouse leave,
* 'focus' shows on focus and hides on blur, 'manual' requires programmatic control.
* Default: 'click'
*/
trigger: TriggerType;
/**
* @prop {Placement} placement - Defines the position of the floating element relative to the trigger.
* Default: 'bottom-start'
*/
placement: Placement;
/**
* @prop {number} showDelay - Delay in milliseconds before showing the floating element.
* Default: 0
*/
showDelay: number;
/**
* @prop {number} hideDelay - Delay in milliseconds before hiding the floating element.
* Default: 0
*/
hideDelay: number;
/**
* @prop {number} offsetDistance - Distance in pixels between the floating element and the trigger.
* Default: 8
*/
offsetDistance: number;
/**
* @prop {boolean} showArrow - Whether to show an arrow pointing to the trigger element.
* Default: true
*/
showArrow: boolean;
/**
* @prop {boolean} disabled - Disables the floating element, preventing it from showing.
* Default: false
*/
disabled: boolean;
/**
* @prop {boolean} closeOnOutsideClick - Whether to close when clicking outside.
* Default: true
*/
closeOnOutsideClick: boolean;
/**
* @prop {boolean} closeOnEscape - Whether to close when pressing Escape key.
* Default: true
*/
closeOnEscape: boolean;
isVisible: boolean;
/**
* @event bcmBeforeShow - Emitted before the floating element shows.
*/
bcmBeforeShow: EventEmitter;
/**
* @event bcmShow - Emitted when the floating element is shown.
*/
bcmShow: EventEmitter;
/**
* @event bcmBeforeHide - Emitted before the floating element hides.
*/
bcmBeforeHide: EventEmitter;
/**
* @event bcmHide - Emitted when the floating element is hidden.
*/
bcmHide: EventEmitter;
/**
* @event bcmShown - Emitted after the floating element is fully shown (after animation).
*/
bcmShown: EventEmitter;
/**
* @event bcmHidden - Emitted after the floating element is fully hidden (after animation).
*/
bcmHidden: EventEmitter;
handleVisibleChange(newValue: boolean): void;
handleDisabledChange(isDisabled: boolean): void;
handlePositionPropsChange(): void;
private showInternal;
private hideInternal;
/**
* Programmatically shows the floating element.
* Respects the showDelay prop.
*/
show(): Promise;
/**
* Programmatically hides the floating element.
* Respects the hideDelay prop.
*/
hide(): Promise;
/**
* Toggles the floating element visibility.
*/
toggle(): Promise;
/**
* Updates the position of the floating element.
* Useful when the trigger element moves or resizes.
*/
updatePosition(): Promise;
private clearTimeouts;
private handleTriggerSlotChange;
private setupAriaAttributes;
private setupTriggerListeners;
private removeTriggerListeners;
private handleMouseEnter;
private handleMouseLeave;
private handleFloatingMouseEnter;
private handleFloatingMouseLeave;
private handleTriggerClick;
private handleFocus;
private handleBlur;
handleKeyDown(event: KeyboardEvent): void;
private handleOutsideClick;
private addOutsideClickListener;
private removeOutsideClickListener;
private calculatePosition;
private startAutoUpdate;
private stopAutoUpdate;
private handleToggle;
componentDidLoad(): void;
disconnectedCallback(): void;
private linkedClass;
render(): any;
}