import type { Locator } from 'playwright-core';
import type { z } from 'zod/v4';
import type { FakerDataType } from '../../tools/InputFakerTool';
import type { SelectorBasedSchema } from '../../tools/ReplayableInteraction';
import type { DonobuExtendedPage } from './DonobuExtendedPage';
/**
 * Action-centric facade produced by {@link DonobuExtendedPage.find}. A smart selector captures a
 * prioritized list of CSS/XPath selectors (plus an optional frame selector). Every method listed
 * below automatically attempts the selectors in order, promotes the first unique locator Playwright
 * can resolve, and fails over to progressively broader selectors whenever an element is missing,
 * detached, or otherwise unusable.
 */
export interface SmartSelector {
    /**
     * Choose <option> values for a particular <select> HTML element.
     */
    selectOption(optionValues: string[]): Promise<void>;
    /**
     * Click an element on a webpage.
     */
    click(button?: 'left' | 'right' | 'middle'): Promise<void>;
    /**
     * Double-click an element on a webpage.
     */
    dblclick(): Promise<void>;
    /**
     * Hover the mouse over a specified element on a webpage.
     */
    hover(): Promise<void>;
    /**
     * Create a new randomized email address based on a given email and inputs it to a specific input text field.
     * For example if passed "foo@gmail.com", this tool will create "foo+SOMETHING_RANDOM@gmail.com", where
     * SOMETHING_RANDOM is a random string of characters safe for use in an email address, and input it in the
     * specified text field.
     *
     * Returns the randomized email address used.
     *
     * NOTE: 'options.finalizeWithSubmit' is deprecated (use 'options.submit' instead).
     */
    inputRandomizedEmailAddress(baseEmail: string, options?: {
        submit?: boolean;
        finalizeWithSubmit?: boolean;
    }): Promise<string>;
    /**
     * Input text to a webpage's text input box.
     *
     * NOTE: 'options.finalizeWithSubmit' is deprecated (use 'options.submit' instead).
     */
    inputText(text: string, options?: {
        append?: boolean;
        submit?: boolean;
        finalizeWithSubmit?: boolean;
    }): Promise<void>;
    /**
     * Press a single key. Note that if there is existing text in the element, it is appended rather than cleared.
     *
     * Generally, prefer using the 'inputText' tool instead as it automatically clears existing text
     * and it allows the input of multiple characters at a time. The only advantage this tool has is
     * that it allows the passing of control keys like "Tab", "Backspace", etc.
     */
    pressKey(key: string): Promise<void>;
    /**
     * Scroll the given element.
     */
    scroll(direction: 'UP' | 'DOWN' | 'LEFT' | 'RIGHT', options?: {
        maxScroll?: boolean;
    }): Promise<void>;
    /**
     * Waits for one of the candidate locators to satisfy the requested state.
     * Mirrors {@link Locator.waitFor}: resolves with the locator that passed
     * the check or throws a Playwright `TimeoutError` when none do before the
     * timeout elapses.
     */
    waitFor(options?: Parameters<Locator['waitFor']>[0]): Promise<Locator>;
}
export declare class SmartSelectorImpl implements SmartSelector {
    page: DonobuExtendedPage;
    selector: z.infer<typeof SelectorBasedSchema.shape.selector>;
    constructor(page: DonobuExtendedPage, selector: z.infer<typeof SelectorBasedSchema.shape.selector>);
    selectOption(optionValues: string[]): Promise<void>;
    dblclick(): Promise<void>;
    click(button?: 'left' | 'right' | 'middle'): Promise<void>;
    hover(): Promise<void>;
    inputRandomizedEmailAddress(baseEmail: string, options?: {
        submit?: boolean;
        finalizeWithSubmit?: boolean;
    }): Promise<string>;
    inputText(text: string, options?: {
        append?: boolean;
        submit?: boolean;
        finalizeWithSubmit?: boolean;
    }): Promise<void>;
    inputFaker(dataType: FakerDataType, options?: {
        append?: boolean;
        submit?: boolean;
        finalizeWithSubmit?: boolean;
    }): Promise<void>;
    pressKey(key: string): Promise<void>;
    scroll(direction: 'UP' | 'DOWN' | 'LEFT' | 'RIGHT', options?: {
        maxScroll?: boolean;
    }): Promise<void>;
    waitFor(options?: Parameters<Locator['waitFor']>[0]): Promise<Locator>;
    private getLocatorCandidates;
}
//# sourceMappingURL=SmartSelector.d.ts.map