import { LitElement, type PropertyValues } from 'lit';
/**
 * A focus ring component that provides a visible focus indicator.
 * This component automatically manages the visibility of the focus ring
 * based on the focus state of its control element.
 *
 * @fires visibility-changed - Dispatched when the focus ring visibility changes.
 *                           - `detail`: An object with a `visible` property (boolean).
 */
export default class UiFocusRing extends LitElement {
    /**
     * The control element that this focus ring is associated with.
     * When the control gains or loses focus, the focus ring will show or hide.
     */
    accessor control: HTMLElement | undefined;
    /**
     * An element to attach the focus ring to. Defaults to the parent element.
     * This is typically used when the focus ring should be positioned relative
     * to a different element than the control.
     */
    accessor attach: HTMLElement | undefined;
    /**
     * An ID of an element that this focus ring is for.
     * Alternative to setting the `control` property directly.
     * @attribute
     */
    accessor for: string | undefined;
    /**
     * Whether the focus ring should render inward instead of outward.
     * When true, the focus ring will be positioned inside the control bounds.
     * @attribute
     */
    accessor inward: boolean;
    /**
     * The internal visibility state of the focus ring.
     */
    accessor visible: boolean;
    private abortController?;
    constructor();
    connectedCallback(): void;
    disconnectedCallback(): void;
    protected willUpdate(changedProperties: PropertyValues<this>): void;
    /**
     * Sets up the control element and event listeners.
     */
    private setupControl;
    /**
     * Cleans up event listeners.
     */
    private cleanupListeners;
    /**
     * Gets the control element from either the `control` property,
     * the `for` attribute, or defaults to the parent element.
     */
    private getControl;
    /**
     * Handles focus events from the control element.
     */
    private handleFocus;
    /**
     * Handles blur events from the control element.
     */
    private handleBlur;
    /**
     * Handles pointer down events to hide focus ring during mouse interaction.
     */
    private handlePointerDown;
    /**
     * Determines if the focus ring should be shown based on the focus event.
     * The focus ring should only show for keyboard navigation, not mouse clicks.
     */
    private shouldShowFocusRing;
    /**
     * Shows the focus ring.
     */
    show(): void;
    /**
     * Hides the focus ring.
     */
    hide(): void;
    /**
     * Handles the visibility changed event.
     */
    private onVisibilityChanged;
    protected updated(changedProperties: PropertyValues<this>): void;
}
//# sourceMappingURL=focus-ring.d.ts.map