import { ElementData, Options } from "./types";
/**
 * RabbitBrowser provides a simple API for detecting and highlighting interactive elements on web pages
 */
export declare class RabbitBrowser {
    private browser;
    private page;
    private cdpClient;
    private cdpSession;
    private isCDP;
    private initialized;
    private elements;
    private textBlocks;
    private pageContext;
    private currentUrl;
    private options;
    /**
     * Create a new RabbitBrowser instance
     */
    constructor(options?: Partial<Options>);
    /**
     * Initialize the browser if it hasn't been initialized yet
     */
    private ensureBrowserInitialized;
    /**
     * Initialize browser and page
     */
    init(): Promise<void>;
    /**
     * Connect to an existing Chrome instance via CDP
     * @param options CDP connection options
     */
    connectCDP(options?: {
        browserWSEndpoint?: string;
        browserURL?: string;
    }): Promise<void>;
    /**
     * Execute JavaScript in the page context via CDP
     * @param script JavaScript code to execute
     * @returns Result of the script execution
     */
    evaluateWithCDP(script: string): Promise<any>;
    /**
     * Navigate to a URL and initialize the element detector
     * @param url The URL to navigate to
     * @param options Optional settings for this navigation
     * @returns Promise resolving when navigation and initialization are complete
     */
    go(url: string): Promise<void>;
    /**
     * Get all detected elements
     * @returns Promise resolving to an array of detected elements with their properties
     */
    getElements(): Promise<ElementData[]>;
    /**
     * Get all detected text blocks
     * @returns Promise resolving to an array of text blocks with their content
     */
    getTextBlocks(): Promise<any[]>;
    /**
     * Get page context information including text content
     * @returns Promise resolving to page context object with text content
     */
    getPageContext(): Promise<any>;
    /**
     * Get complete data with elements, text blocks and page context
     * @returns Promise resolving to object containing elements, text blocks and page context
     */
    getCompleteData(): Promise<{
        elements: ElementData[];
        textBlocks: any[];
        pageContext: any;
    }>;
    /**
     * Get element count
     * @returns Promise resolving to number of detected elements
     */
    getElementCount(): Promise<number>;
    /**
     * Get the current URL from the page using CDP
     * @returns The current URL
     */
    getCurrentPageUrl(): Promise<string>;
    /**
     * Get the current URL
     * @returns Promise resolving to the current URL
     */
    getCurrentUrl(): Promise<string>;
    /**
     * Get elements that match certain criteria
     * @param filter Function that returns true for elements to include
     * @returns Promise resolving to filtered elements
     */
    filterElements(filter: (element: ElementData) => boolean): Promise<ElementData[]>;
    /**
     * Find elements by text content
     * @param text Text to search for
     * @returns Promise resolving to elements that contain the specified text
     */
    findElementsByText(text: string): Promise<ElementData[]>;
    /**
     * Find elements by tag name
     * @param tagName Tag name to search for
     * @returns Promise resolving to elements with the specified tag name
     */
    findElementsByTagName(tagName: string): Promise<ElementData[]>;
    /**
     * Click on an element
     * @param elementOrIndex The element data or index of the element to click
     * @returns Promise resolving when the click is complete
     */
    clickElement(elementOrIndex: ElementData | number): Promise<void>;
    /**
     * Fill an input element with text
     * @param elementOrIndex The element data or index of the input element to fill
     * @param value The text value to fill in
     * @returns Promise resolving when the input is filled
     */
    fillInput(elementOrIndex: ElementData | number, value: string): Promise<void>;
    /**
     * Submit a form
     * @param formElementOrIndex The form element data or index to submit
     * @returns Promise resolving when the form is submitted
     */
    submitForm(formElementOrIndex: ElementData | number): Promise<void>;
    /**
     * Select an option in a dropdown
     * @param selectElementOrIndex The select element data or index
     * @param optionValue The value of the option to select
     * @returns Promise resolving when the option is selected
     */
    selectOption(selectElementOrIndex: ElementData | number, optionValue: string): Promise<void>;
    /**
     * Takes a screenshot of the current page
     * @param path File path to save the screenshot
     */
    takeScreenshot(path: string): Promise<void>;
    /**
     * Close the browser
     */
    close(): Promise<void>;
    /**
     * Check if the browser is initialized
     */
    isInitialized(): boolean;
}
export declare const rabbitBrowser: RabbitBrowser;
declare global {
    interface Window {
        highlightedElements: Array<{
            element: Element;
            highlight: HTMLElement;
            number: HTMLElement;
        }>;
        highlightedTextBlocks: Array<{
            element: Element;
            highlight: HTMLElement;
            number: HTMLElement;
            text: string;
        }>;
        processedElements: Set<Element>;
        processedTextBlocks: Set<Element>;
        elementObserver: IntersectionObserver;
        textObserver: IntersectionObserver;
        updateHighlights: () => void;
        highlightClickableElement: (element: Element, index: number) => void;
        highlightTextBlock: (element: Element, index: number) => void;
        startObservingNewElements: () => void;
        getClickableElements: () => Element[];
    }
}
