import type { ExperienceCheck, ExperienceCheckCallback } from './ExperienceCheck';
/**
 * Popup check type determines how popups are observed based on their DOM location:
 * - 'inline': Popups appearing in toolbar button-groups (emoji, media, table selector, image)
 * - 'editorRoot': Popups attached to editor root (e.g., mention popups)
 * - 'editorContent': Content-level popups or modals in portal containers (e.g., block menu)
 * - 'portalRoot': Popups in body > .atlaskit-portal-container (e.g., flags, modals)
 */
export type PopupCheckType = 'inline' | 'editorRoot' | 'editorContent' | 'portalRoot';
type InlineConfig = {
    getTarget: () => HTMLElement | undefined | null;
    nestedElementQuery: string;
    /**
     * Observe the entire subtree for mutations, not just direct children.
     * Use with caution — only enable when the observed DOM subtree is small/lightweight
     * (e.g. a single toolbar button). Enabling on large subtrees can cause performance issues.
     */
    subtree?: boolean;
    type: 'inline';
};
type EditorRootConfig = {
    getEditorDom: () => HTMLElement | undefined | null;
    nestedElementQuery: string;
    type: 'editorRoot';
};
type EditorContentConfig = {
    getTarget: () => HTMLElement | undefined | null;
    nestedElementQuery: string;
    type: 'editorContent';
};
type PortalRootConfig = {
    nestedElementQuery: string;
    type: 'portalRoot';
};
export type ExperienceCheckPopupMutationConfig = InlineConfig | EditorRootConfig | EditorContentConfig | PortalRootConfig;
export declare class ExperienceCheckPopupMutation implements ExperienceCheck {
    private config;
    private observers;
    constructor(config: ExperienceCheckPopupMutationConfig);
    /**
     * Returns the list of DOM elements to observe based on popup type.
     */
    private getObserveTargets;
    /**
     * For 'portalRoot' type: observe .atlaskit-portal-container.
     * Popups like flags and modals render in body > .atlaskit-portal-container.
     */
    private getPortalRootTargets;
    /**
     * For 'editorContent' type: observe the target (mount point) and any existing
     * [data-editor-popup] wrappers within it. Content-level popups and modals
     * appear in portal containers.
     */
    private getEditorContentTargets;
    /**
     * For 'inline' type: observe the target element directly.
     * The caller is responsible for resolving the correct container
     * (e.g. the toolbar button-group) via the getTarget function.
     */
    private getInlineTargets;
    /**
     * For 'editorRoot' type: observe the actual editor root container.
     * The editorDom is the ProseMirror element, but popups appear as direct children
     * of the parent .akEditor container. So we observe the parent of editorDom.
     */
    private getEditorRootTargets;
    start(callback: ExperienceCheckCallback): void;
    stop(): void;
}
export {};
