import { CustomElementJson } from '../core/model/custom-element-json';
import { DetectedElement } from '../core/model/annotation-result/detected-element';
import { ModelCompositionBranch } from './model-composition-branch';
import { RetryStrategy } from './retry-strategies/retry-strategy';
export declare enum Separators {
    STRING = "<|string|>"
}
export type INTERSECTION_AREA = 'element_center_line' | 'element_edge_area' | 'display_edge_area';
export declare const PC_KEY_VALUES: readonly ["backspace", "delete", "enter", "tab", "escape", "up", "down", "right", "left", "home", "end", "pageup", "pagedown", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12", "space", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "@", "[", "\\", "]", "^", "_", "`", "{", "|", "}", "~ "];
export type PC_KEY = typeof PC_KEY_VALUES[number];
export declare const ANDROID_KEY_VALUES: readonly ["backspace", "delete", "enter", "tab", "escape", "up", "down", "right", "left", "home", "end", "pageup", "pagedown", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12", "space", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "@", "[", "\\", "]", "^", "_", "`", "{", "|", "}", "~ "];
export type ANDROID_KEY = typeof ANDROID_KEY_VALUES[number];
export declare const MODIFIER_KEY_VALUES: readonly ["command", "alt", "control", "shift", "right_shift"];
export type MODIFIER_KEY = typeof MODIFIER_KEY_VALUES[number];
export type PC_AND_MODIFIER_KEY = PC_KEY | MODIFIER_KEY;
export type COLOR = 'black' | 'white' | 'red' | 'green' | 'yellow green' | 'orange' | 'yellow' | 'purple' | 'pink' | 'gray' | 'lime green' | 'royal blue';
export interface CommandExecutorContext {
    customElementsJson: CustomElementJson[];
    aiElementNames: string[];
}
export interface ExecOptions {
    modelComposition?: ModelCompositionBranch[];
    skipCache?: boolean;
    retryStrategy?: RetryStrategy;
}
declare abstract class FluentBase {
    protected prev?: FluentBase | undefined;
    constructor(prev?: FluentBase | undefined);
    protected _textStr: string;
    protected _params: Map<string, unknown>;
    protected static addParams(paramsList: Map<string, unknown[]>, params: Map<string, unknown>): Map<string, unknown[]>;
    protected fluentCommandStringBuilder(modelComposition?: ModelCompositionBranch[], skipCache?: boolean, retryStrategy?: RetryStrategy, currentInstruction?: string, paramsList?: Map<string, unknown[]>): Promise<void>;
    protected getterStringBuilder(currentInstruction?: string, paramsList?: Map<string, unknown[]>): Promise<DetectedElement[]>;
    protected get textStr(): string;
    protected get params(): Map<string, unknown>;
}
export interface Executable {
    exec(execOptions?: ExecOptions): Promise<void>;
}
export declare class Exec extends FluentBase implements Executable {
    exec(execOptions?: ExecOptions): Promise<void>;
}
export declare class FluentFilters extends FluentBase {
    /**
     * Filters for a UI element 'other element'.
     *
     * @return {FluentFiltersOrRelations}
     */
    otherElement(): FluentFiltersOrRelations;
    /**
     * Filters for a UI element 'switch'.
     *
     * @return {FluentFiltersOrRelations}
     */
    switch(): FluentFiltersOrRelations;
    /**
     * Filters for a UI element 'container'.
     *
     * @return {FluentFiltersOrRelations}
     */
    container(): FluentFiltersOrRelations;
    /**
     * Filters for a UI element 'checkbox'.
     *
     * @return {FluentFiltersOrRelations}
     */
    checkbox(): FluentFiltersOrRelations;
    /**
     * Filters for any UI element on the screen.
     *
     * **Examples:**
     * ```typescript
     * await aui.moveMouseTo().element().exec()
     * ```
     *
     * @return {FluentFiltersOrRelations}
     */
    element(): FluentFiltersOrRelations;
    /**
     * Filters special elements defined over a specifically trained custom element descriptor.
     *
     * Custom element descriptors are trained on your elements that were not detected with our
     * default models. Please contact us for further details on how to do this. We are working on
     * a solution to provide this in our User Portal.
     *
     * In the example below circle refers to a circle shaped icon with specific properties.
     *
     * **Examples:**
     * ```typescript
     * await aui.moveMouseTo().element().special("circle").exec()
     * ```
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelations}
     */
    special(text: string): FluentFiltersOrRelations;
    /**
     * Filters for a UI element 'button'.
     *
     * **Examples:**
     * ```typescript
     * await aui.click().button().contains().text().withText('Google Search').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/button.gif)
     *
     * @return {FluentFiltersOrRelations}
     */
    button(): FluentFiltersOrRelations;
    /**
     * Filters for a UI element 'table'.
     *
     * @return {FluentFiltersOrRelations}
     */
    table(): FluentFiltersOrRelations;
    /**
     * Filters for an UI element 'text'.
     *
     * Takes an optional parameter to filter for a specific text.
     * See the examples below.
     *
     * See also the filters `withTextRegex()` and `withExactText()`
     *
     * **Examples:**
     * ```typescript
     * await aui.click().text().exec();
     * await aui.click().text('Username').exec();
     *
     * // Matching with an exact text
     * await aui.click().text().withExactText('Username').exec();
     *
     * // Matching with a regex
     * await aui.click().text().withTextRegex('\b[Ss]\w+').exec();
     * ```
     *
     * @param {string} [text] - A text to be matched.
     *
     * @return {FluentFiltersOrRelations}
     */
    text(text?: string): FluentFiltersOrRelations;
    /**
     * Filters for an UI element 'wordlevel'.
     *
     * Takes an optional parameter to filter for a specific text.
     * See the examples below.
     *
     * **Examples:**
     * ```typescript
     * await aui.fluentCommandExecutor('Click on button right of wordlevel 'User_PRG in:'');
     * ```
     *
     * @param {string} [wordlevel] - A text to be matched.
     *
     * @return {FluentFiltersOrRelations}
     */
    wordlevel(wordlevel?: string): FluentFiltersOrRelations;
    /**
     * Filters for a UI element 'icon'.
     *
     * You can combine it with the element-description 'withText()' to look for a specific icon.
     *
     * **Examples:**
     * ```typescript
     * icon().withText('plus')
     * ```
     *
     * ![](https://docs.askui.com/img/gif/icon.gif)
     *
     * **Note:** This is an alpha feature. The prediction of the icon name is sometimes unstable. Use custom elements as an alternative.
     *
     * @return {FluentFiltersOrRelations}
     */
    icon(): FluentFiltersOrRelations;
    /**
     * Filters for a 'custom element', that is a UI element that is defined by providing an image and other parameters such as degree of rotation. It allows filtering for a UI element based on an image instead of using text or element descriptions like `button().withText('Submit')` in `await aui.click().button().withText('Submit').exec()`.
     *
     * See the tutorial - [Custom Element](https://docs.askui.com/docs/general/Element%20Selection/custom-elements) for more details.
     *
     * **Example**
     * ```typescript
     * await aui
     *     .click()
     *     .customElement({
     *         customImage: './logo.png', // required
     *         name: 'myLogo', // optional
     *         threshold: 0.5, // optional, defaults to 0.5
     *         stopThreshold: 0.9, // optional, defaults to 0.9
     *         rotationDegreePerStep: 0, // optional, defaults to 0
     *         imageCompareFormat: 'grayscale', // optional, defaults to 'grayscale'
     *         // mask:{x:0, y:0}[] // optional, a polygon to match only a certain area of the custom element
     *     })
     *     .exec();
     * ```
     *
     * **Arguments**
     *
     * - **customImage** (*`string`, required*):
     *     - A cropped image in the form of a base64 string or file path.
     * - **name** (*`string`, optional*):
     *     - A unique name that can be used for filtering for the custom element. If not given, any text inside the custom image will be detected via OCR.
     * - **threshold** (*`number`, optional*):
     *     - A threshold for how much a UI element needs to be similar to the custom element as defined by the image. Takes values between `0.0` (== all elements are recognized as the custom element which is probably not what you want) and `1.0` (== elements need to look exactly like the `customImage` which is unlikely to be achieved as even minor differences count). Defaults to `0.5`.
     * - **stopThreshold** (*`number`, optional*):
     *     - A threshold for when to stop searching for UI elements similar to the custom element. As soon as UI elements have been found that are at least as similar as the `stopThreshold`, the search is going to stop. After that elements are filtered using the `threshold`. Because of that the `stopThreshold` should be greater than or equal to `threshold`. It is primarily to be used as a speed improvement (by lowering the value). Takes values between `0.0` and `1.0`. Defaults to `0.9`.
     * - **rotationDegreePerStep** (*`number`, optional*):
     *     - Step size in rotation degree. Rotates the custom image by this step size until 360° is exceeded. The range is from `0` to `360`. Defaults to `0`.
     * - **imageCompareFormat** (*`'RGB' | 'grayscale' | 'edges'`, optional*):
     *     - The color compare style. `'edges'` compares only edges, `'greyscale'` compares the brightness of each pixel whereas `'RGB'` compares all three colors (red, green, blue). Defaults to `'grayscale'`.
     *
     *
     * @param {CustomElementJson} customElement - The custom element to filter for.
     *
     * @return {FluentFiltersOrRelations}
     */
    customElement(customElement: CustomElementJson): FluentFiltersOrRelations;
    /**
     * Detects an AI Element created with the [snipping workflow](https://docs.askui.com/docs/general/Element%20Selection/aielement#snipping-workflow).
     *
     * **Examples:**
     *
     * ```typescript
     * await aui.click().aiElement('askui-logo').exec();
     * ```
     *
     * @param {string} aiElementName - Name of the AI Element.
     *
     * @return {FluentFiltersOrRelations}
     */
    aiElement(aiElementName: string): FluentFiltersOrRelations;
    /**
     * Filters for a UI element 'image'.
     *
     * **Examples:**
     * ```typescript
     * // Works if there is only one image visible on the screen
     * await aui.click().image().exec();
     *
     * // Works if you have an image with
     * // a text below
     * await aui.click().image().above().text().withText('Automating WebGL').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/image.gif)
     *
     *
     *
     * @return {FluentFiltersOrRelations}
     */
    image(): FluentFiltersOrRelations;
    /**
     * Filters for a UI element 'textfield'.
     *
     * **Examples:**
     * ```typescript
     * // Works if there is only one textfield visible on the screen
     * await aui.typeIn('Oh yeah').textfield().exec();
     *
     * // Works if you have a labeled textfield
     * // Label is above the textfield
     * await aui.typeIn('Oh yeah').textfield().below().text().withText('E-Mail Address').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/textfield.gif)
     *
     *
     *
     * @return {FluentFiltersOrRelations}
     */
    textfield(): FluentFiltersOrRelations;
    /**
     * Filters for similar -- meaning >70% similar -- text.
     *
     * Takes an optional parameter to specify the similarity. Usually you need the optional parameter for long texts you want to match precisely.
     *
     * _We use [RapidFuzz](https://maxbachmann.github.io/RapidFuzz/Usage/fuzz.html#ratio) which calculates the similarity like this:_
     *
     * `1 - (distance / (lengthString1 + lengthString2))`
     *
     * **Examples:**
     * ```typescript
     * 'text' === withText('text') => true
     * 'test' === withText('text') => true
     * 'Test' === withText('text') => true
     * 'Text' === withText('text') => true
     * 'TEXT' === withText('text') => true
     * 'texst' === withText('text') => true
     * 'texts' === withText('text') => true
     *
     * // usually false
     * 'atebxtc' === withText('text') => false
     * 'other' === withText('text') => false
     *
     * // optional parameter: similarity_score
     * '978-0-201-00650-6' == withText("978-0-201-00", 90) => false with 82.76 < 90 similarity
     * '978-0-201-00650-6' == withText("978-0-201-00650", 90) => true with 93.75 > 90 similarity
     * ```
     * ![](https://docs.askui.com/img/gif/withText.gif)
     *
     * @param {string} text - A text to be matched.
     * @param {number} [similarityScore=70] - Similarity score minimum value, it should be between `0` and `100`.
     *
     * @return {FluentFiltersOrRelations}
     */
    withText(text: string, similarityScore?: number): FluentFiltersOrRelations;
    /**
     * Filters for texts, which match the regex pattern.
     *
     * **Examples:**
     *
     * ```typescript
     * 'The rain in Spain' === withTextRegex('\b[Ss]\w+') => true
     * 'The rain in Portugal' === withTextRegex('\b[Ss]\w+') => false
     * 'The rain in switzerland' === withTextRegex('\b[Ss]\w+') => true
     *
     * await aui.get().text().withTextRegex('\b[Ss]\w+').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/withTextRegex.gif)
     *
     *
     *
     * @param {string} regex_pattern - A regex pattern
     *
     * @return {FluentFiltersOrRelations}
     */
    withTextRegex(regex_pattern: string): FluentFiltersOrRelations;
    /**
     * Filters for equal text.
     *
     * **Note:** This should be only used in cases where the similarity
     *  comparison of {@link FluentFilters.withText()} allows not for
     *  specific enough filtering (too many elements).
     *
     * **Examples:**
     * ```typescript
     * 'text' === withExactText('text') => true
     * 'test' === withExactText('text') => false
     * 'other' === withExactText('text') => false
     *
     * await aui.moveMouseTo().text().withExactText('Password').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/withExactText.gif)
     *
     *
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelations}
     */
    withExactText(text: string): FluentFiltersOrRelations;
    /**
     * Filters for text containing the text provided as an argument.
     *
     * **Examples:**
     * ```typescript
     * 'This is a text' === containsText('text') => true
     * 'This is a text' === containsText('other text') => false
     * 'This is a text' === containsText('other') => false
     * ```
     * ![](https://docs.askui.com/img/gif/containsText.gif)
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelations}
     */
    containsText(text: string): FluentFiltersOrRelations;
    /**
     * Filters for PTA locating the text provided as an argument.
     *
     * @param {string} text - A text to be located.
     *
     * @return {FluentFiltersOrRelations}
     */
    pta(text: string): FluentFiltersOrRelations;
}
export declare class FluentFiltersOrRelations extends FluentFilters {
    /**
     * Logic or operator
     *
     * **Examples:**
     * ```text
     * scene 1
     * --------------  ---------------
     * |  button    |  |  icon       |
     * --------------  ---------------
     *
     * scene 2
     * --------------  ---------------
     * |  button    |  |  text       |
     * --------------  ---------------
     *
     * ```
     * In case, that your reference element can have multiple values, in the following example, the element right of the button can be either icon or text.
     * You can use **the `or()` relation**, so your instruction is valid for both scenes
     * ```typescript
     * const button = await aui.get().button().rightOf().icon().or().text().exec();
     * console.log(button);
     * ```
     * Returns the same button for both cases
     * ```text
     *  console output: [
     *   DetectedElement {
     *      name: 'BUTTON',
     *      text: 'button',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     *
     * @return {FluentFilters}
     */
    or(): FluentFilters;
    /**
     * Logic and operator
     *
     * **Examples:**
     * ```text
     * example scene:
     *  ---------------   ----------------
     *  |  icon user  |   |  icon search |
     *  ---------------   ----------------
     * ```
     * ```typescript
     * const icons = await aui.get().icon().exec();
     * console.log(icons);
     * ```
     * Using only the element-description icon, the get will return both icons
     * ```text
     * console output: [
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'user',
     *      bndbox: BoundingBox {
     *         xmin: 1000,
     *         ymin: 1010,
     *         xmax: 1020,
     *         ymax: 1030
     *      }
     *   },
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'search',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     * You can combine element-descriptions with **the `and()` relation** and specify exactly which icon you want.
     * ```typescript
     * const icons = await aui.get().icon().and().withText('user').exec()
     * console.log(icons)
     * ```
     * The get returns only the user icon although both elements are icons.
     * ```text
     *  console output: [
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'user',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     *
     * @return {FluentFilters}
     */
    and(): FluentFilters;
    /**
     * Filters for an element inside another element.
     *
     * **Examples:**
     * ```typescript
     * --------------------
     * |     outerEl      |
     * |  --------------  |
     * |  |  innerEl   |  |
     * |  --------------  |
     * |                  |
     * --------------------
     *
     * // Returns innerEl because innerEl is inside outerEl
     * ...innerEl().in().outerEl()
     * // Returns nothing because innerEl is not inside outerEl
     * ...outerEl().in().innerEl()
     * ```
     * ![](https://docs.askui.com/img/gif/in.gif)
     *
     * @return {FluentFilters}
     */
    in(): FluentFilters;
    /**
     * Filters for an element right of another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements right of the other element are filtered for based on their vertical position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered right of the other element if element's bounding box intersects with a horizontal line passing through the center of the other element
     * - `"element_edge_area"` - considered right of the other element if element's bounding box intersects with an area between the top and the bottom edge of the other element
     * - `"display_edge_area"` - considered right of the other element no matter where it is placed vertically on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ---------- ---------                     ---------
     * | button | | text0 |                     | text3 |
     * ---------- --------- ---------           ---------
     *                      | text1 | ---------
     *                      --------- | text2 |
     *                                ---------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().rightOf(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().rightOf(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().rightOf(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element rightOf button
     * ...text().rightOf().button()
     * ...text().rightOf(0).button()
     * ...text().rightOf(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // horizontal line from the center of button
     * // Notice: text1 is not touched!
     * ...text().rightOf(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area rightOf the y-axis of button
     * // Notice: text2 is not touched!
     * ...text().rightOf(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element rightOf button
     * ...text().rightOf(2, 'display_edge_area').button()
     *
     * // Returns no element because button is rightOf the texts
     * ...button().rightOf().text()
     * ```
     * ![](https://docs.askui.com/img/gif/rightOf.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFilters}
     */
    rightOf(index?: number, intersection_area?: INTERSECTION_AREA): FluentFilters;
    /**
     * Filters for an element left of another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements left of the other element are filtered for based on their vertical position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered left of the other element if element's bounding box intersects with a horizontal line passing through the center of the other element
     * - `"element_edge_area"` - considered left of the other element if element's bounding box intersects with an area between the top and the bottom edge of the other element
     * - `"display_edge_area"` - considered left of the other element no matter where it is placed vertically on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ---------                   --------- ----------
     * | text3 |                   | text0 | | button |
     * ---------         --------- --------- ----------
     *         --------- | text1 |
     *         | text2 | ---------
     *         ---------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().leftOf(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().leftOf(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().leftOf(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element leftOf button
     * ...text().leftOf().button()
     * ...text().leftOf(0).button()
     * ...text().leftOf(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // horizontal line from the center of button
     * // Notice: text1 is not touched!
     * ...text().leftOf(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area leftOf the y-axis of button
     * // Notice: text2 is not touched!
     * ...text().leftOf(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element leftOf button
     * ...text().leftOf(2, 'display_edge_area').button()
     *
     * // Returns no element because button is rightOf the texts
     * ...button().leftOf().text()
     * ```
     * ![](https://docs.askui.com/img/gif/leftOf.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFilters}
     */
    leftOf(index?: number, intersection_area?: INTERSECTION_AREA): FluentFilters;
    /**
     * Filters for an element below another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements below of the other element are filtered for based on their horizontal position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered below of the other element if element's bounding box intersects with a vertical line passing through the center of the other element
     * - `"element_edge_area"` - considered below of the other element if element's bounding box intersects with an area between the left and the right edge of the other element
     * - `"display_edge_area"` - considered below of the other element no matter where it is placed horizontally on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ------------
     * |   text   |
     * ------------
     * ------------
     * |  button0 |
     * ------------
     *          -----------
     *          | button1 |
     *          -----------
     *             -----------
     *             | button2 |
     *             -----------
     * ------------
     * |  button3 |
     * ------------
     *
     * // General explanation for element_center_line
     * // This will find button0 and button3
     * ...button().below(..., 'element_center_line').text()
     *
     * // General explanation for element_edge_area
     * // This will find button0, button1 and button3
     * ...button().below(..., 'element_edge_area').text()
     *
     * // General explanation and display_edge_area
     * // This will find button0, button1, button2 and button3
     * ...button().below(..., 'display_edge_area').text()
     *
     * // More examples:
     * // Returns button0 because button0 is the first button below text
     * ...button().below().text()
     * ...button().below(0).text()
     * ...button().below(0, 'element_edge_area').text()
     *
     * // Returns button3 because it is the second button touched by the
     * // vertical line from the center of text
     * // Notice: button1 is not touched
     * ...button().below(1, 'element_center_line').text()
     *
     * // Returns button3 because it is the third button touched by the
     * // vertical area below the x-axis of text
     * // Notice: button2 is not touched!
     * ...button().below(2, 'element_edge_area').text()
     *
     * // Returns button2 because it is the third element below text
     * ...button().below(2, 'display_edge_area').text()
     *
     * // Returns no element because text is above the buttons
     * ...text().below().button()
     * ```
     * ![](https://docs.askui.com/img/gif/below.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFilters}
     */
    below(index?: number, intersection_area?: INTERSECTION_AREA): FluentFilters;
    /**
     * Filters for an element above another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements above of the other element are filtered for based on their horizontal position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered above of the other element if element's bounding box intersects with a vertical line passing through the center of the other element
     * - `"element_edge_area"` - considered above of the other element if element's bounding box intersects with an area between the left and the right edge of the other element
     * - `"display_edge_area"` - considered above of the other element no matter where it is placed horizontally on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ------------
     * |  text3   |
     * ------------
     *             ------------
     *             |  text2   |
     *             ------------
     *     ------------
     *     |  text1   |
     *     ------------
     * ------------
     * |  text0   |
     * ------------
     * ------------
     * |  button  |
     * ------------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().above(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().above(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().above(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element above button
     * ...text().above().button()
     * ...text().above(0).button()
     * ...text().above(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // vertical line from the center of button
     * // Notice: text1 is not touched!
     * ...text().above(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area above the x-axis of button
     * // Notice: text2 is not touched!
     * ...text().above(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element above button
     * ...text().above(2, 'display_edge_area').button()
     *
     * // Returns no element because button is below the texts
     * ...button().above().text()
     * ```
     * ![](https://docs.askui.com/img/gif/above.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFilters}
     */
    above(index?: number, intersection_area?: INTERSECTION_AREA): FluentFilters;
    /**
     * Filters for an element nearest to another element.
     *
     * **Examples:**
     * ```typescript
     * --------------
     * |  button 1  |
     * --------------
     * --------------
     * |   text     |
     * --------------
     *
     *
     *
     * --------------
     * |  button 2  |
     * --------------
     *
     * // Returns button 1 because button 1 is nearer to the text than button 2
     * ...button().nearestTo().text()
     * ```
     * ![](https://docs.askui.com/img/gif/nearestTo.gif)
     *
     * @return {FluentFilters}
     */
    nearestTo(): FluentFilters;
    /**
     * Filters for an element containing another element.
     *
     * **Example:**
     * ```typescript
     * --------------------
     * |     outerEl      |
     * |  --------------  |
     * |  |  innerEl   |  |
     * |  --------------  |
     * |                  |
     * --------------------
     *
     * // Returns outerEl because outerEl contains innerEl
     * ...outerEl().contains().innerEl()
     * //  Returns no element because innerEl contains no outerEl
     * ...innerEl().contains().outerEl()
     * ```
     * ![](https://docs.askui.com/img/gif/contains.gif)
     *
     * @return {FluentFilters}
     */
    contains(): FluentFilters;
    exec(execOptions?: ExecOptions): Promise<void>;
}
export declare class FluentFiltersCondition extends FluentBase {
    /**
     * Filters for a UI element 'other element'.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    otherElement(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a UI element 'switch'.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    switch(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a UI element 'container'.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    container(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a UI element 'checkbox'.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    checkbox(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for any UI element on the screen.
     *
     * **Examples:**
     * ```typescript
     * await aui.moveMouseTo().element().exec()
     * ```
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    element(): FluentFiltersOrRelationsCondition;
    /**
     * Filters special elements defined over a specifically trained custom element descriptor.
     *
     * Custom element descriptors are trained on your elements that were not detected with our
     * default models. Please contact us for further details on how to do this. We are working on
     * a solution to provide this in our User Portal.
     *
     * In the example below circle refers to a circle shaped icon with specific properties.
     *
     * **Examples:**
     * ```typescript
     * await aui.moveMouseTo().element().special("circle").exec()
     * ```
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    special(text: string): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a UI element 'button'.
     *
     * **Examples:**
     * ```typescript
     * await aui.click().button().contains().text().withText('Google Search').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/button.gif)
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    button(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a UI element 'table'.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    table(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for an UI element 'text'.
     *
     * Takes an optional parameter to filter for a specific text.
     * See the examples below.
     *
     * See also the filters `withTextRegex()` and `withExactText()`
     *
     * **Examples:**
     * ```typescript
     * await aui.click().text().exec();
     * await aui.click().text('Username').exec();
     *
     * // Matching with an exact text
     * await aui.click().text().withExactText('Username').exec();
     *
     * // Matching with a regex
     * await aui.click().text().withTextRegex('\b[Ss]\w+').exec();
     * ```
     *
     * @param {string} [text] - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    text(text?: string): FluentFiltersOrRelationsCondition;
    /**
     * Filters for an UI element 'wordlevel'.
     *
     * Takes an optional parameter to filter for a specific text.
     * See the examples below.
     *
     * **Examples:**
     * ```typescript
     * await aui.fluentCommandExecutor('Click on button right of wordlevel 'User_PRG in:'');
     * ```
     *
     * @param {string} [wordlevel] - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    wordlevel(wordlevel?: string): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a UI element 'icon'.
     *
     * You can combine it with the element-description 'withText()' to look for a specific icon.
     *
     * **Examples:**
     * ```typescript
     * icon().withText('plus')
     * ```
     *
     * ![](https://docs.askui.com/img/gif/icon.gif)
     *
     * **Note:** This is an alpha feature. The prediction of the icon name is sometimes unstable. Use custom elements as an alternative.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    icon(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a 'custom element', that is a UI element that is defined by providing an image and other parameters such as degree of rotation. It allows filtering for a UI element based on an image instead of using text or element descriptions like `button().withText('Submit')` in `await aui.click().button().withText('Submit').exec()`.
     *
     * See the tutorial - [Custom Element](https://docs.askui.com/docs/general/Element%20Selection/custom-elements) for more details.
     *
     * **Example**
     * ```typescript
     * await aui
     *     .click()
     *     .customElement({
     *         customImage: './logo.png', // required
     *         name: 'myLogo', // optional
     *         threshold: 0.5, // optional, defaults to 0.5
     *         stopThreshold: 0.9, // optional, defaults to 0.9
     *         rotationDegreePerStep: 0, // optional, defaults to 0
     *         imageCompareFormat: 'grayscale', // optional, defaults to 'grayscale'
     *         // mask:{x:0, y:0}[] // optional, a polygon to match only a certain area of the custom element
     *     })
     *     .exec();
     * ```
     *
     * **Arguments**
     *
     * - **customImage** (*`string`, required*):
     *     - A cropped image in the form of a base64 string or file path.
     * - **name** (*`string`, optional*):
     *     - A unique name that can be used for filtering for the custom element. If not given, any text inside the custom image will be detected via OCR.
     * - **threshold** (*`number`, optional*):
     *     - A threshold for how much a UI element needs to be similar to the custom element as defined by the image. Takes values between `0.0` (== all elements are recognized as the custom element which is probably not what you want) and `1.0` (== elements need to look exactly like the `customImage` which is unlikely to be achieved as even minor differences count). Defaults to `0.5`.
     * - **stopThreshold** (*`number`, optional*):
     *     - A threshold for when to stop searching for UI elements similar to the custom element. As soon as UI elements have been found that are at least as similar as the `stopThreshold`, the search is going to stop. After that elements are filtered using the `threshold`. Because of that the `stopThreshold` should be greater than or equal to `threshold`. It is primarily to be used as a speed improvement (by lowering the value). Takes values between `0.0` and `1.0`. Defaults to `0.9`.
     * - **rotationDegreePerStep** (*`number`, optional*):
     *     - Step size in rotation degree. Rotates the custom image by this step size until 360° is exceeded. The range is from `0` to `360`. Defaults to `0`.
     * - **imageCompareFormat** (*`'RGB' | 'grayscale' | 'edges'`, optional*):
     *     - The color compare style. `'edges'` compares only edges, `'greyscale'` compares the brightness of each pixel whereas `'RGB'` compares all three colors (red, green, blue). Defaults to `'grayscale'`.
     *
     *
     * @param {CustomElementJson} customElement - The custom element to filter for.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    customElement(customElement: CustomElementJson): FluentFiltersOrRelationsCondition;
    /**
     * Detects an AI Element created with the [snipping workflow](https://docs.askui.com/docs/general/Element%20Selection/aielement#snipping-workflow).
     *
     * **Examples:**
     *
     * ```typescript
     * await aui.click().aiElement('askui-logo').exec();
     * ```
     *
     * @param {string} aiElementName - Name of the AI Element.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    aiElement(aiElementName: string): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a UI element 'image'.
     *
     * **Examples:**
     * ```typescript
     * // Works if there is only one image visible on the screen
     * await aui.click().image().exec();
     *
     * // Works if you have an image with
     * // a text below
     * await aui.click().image().above().text().withText('Automating WebGL').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/image.gif)
     *
     *
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    image(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for a UI element 'textfield'.
     *
     * **Examples:**
     * ```typescript
     * // Works if there is only one textfield visible on the screen
     * await aui.typeIn('Oh yeah').textfield().exec();
     *
     * // Works if you have a labeled textfield
     * // Label is above the textfield
     * await aui.typeIn('Oh yeah').textfield().below().text().withText('E-Mail Address').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/textfield.gif)
     *
     *
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    textfield(): FluentFiltersOrRelationsCondition;
    /**
     * Filters for similar -- meaning >70% similar -- text.
     *
     * Takes an optional parameter to specify the similarity. Usually you need the optional parameter for long texts you want to match precisely.
     *
     * _We use [RapidFuzz](https://maxbachmann.github.io/RapidFuzz/Usage/fuzz.html#ratio) which calculates the similarity like this:_
     *
     * `1 - (distance / (lengthString1 + lengthString2))`
     *
     * **Examples:**
     * ```typescript
     * 'text' === withText('text') => true
     * 'test' === withText('text') => true
     * 'Test' === withText('text') => true
     * 'Text' === withText('text') => true
     * 'TEXT' === withText('text') => true
     * 'texst' === withText('text') => true
     * 'texts' === withText('text') => true
     *
     * // usually false
     * 'atebxtc' === withText('text') => false
     * 'other' === withText('text') => false
     *
     * // optional parameter: similarity_score
     * '978-0-201-00650-6' == withText("978-0-201-00", 90) => false with 82.76 < 90 similarity
     * '978-0-201-00650-6' == withText("978-0-201-00650", 90) => true with 93.75 > 90 similarity
     * ```
     * ![](https://docs.askui.com/img/gif/withText.gif)
     *
     * @param {string} text - A text to be matched.
     * @param {number} [similarityScore=70] - Similarity score minimum value, it should be between `0` and `100`.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    withText(text: string, similarityScore?: number): FluentFiltersOrRelationsCondition;
    /**
     * Filters for texts, which match the regex pattern.
     *
     * **Examples:**
     *
     * ```typescript
     * 'The rain in Spain' === withTextRegex('\b[Ss]\w+') => true
     * 'The rain in Portugal' === withTextRegex('\b[Ss]\w+') => false
     * 'The rain in switzerland' === withTextRegex('\b[Ss]\w+') => true
     *
     * await aui.get().text().withTextRegex('\b[Ss]\w+').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/withTextRegex.gif)
     *
     *
     *
     * @param {string} regex_pattern - A regex pattern
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    withTextRegex(regex_pattern: string): FluentFiltersOrRelationsCondition;
    /**
     * Filters for equal text.
     *
     * **Note:** This should be only used in cases where the similarity
     *  comparison of {@link FluentFilters.withText()} allows not for
     *  specific enough filtering (too many elements).
     *
     * **Examples:**
     * ```typescript
     * 'text' === withExactText('text') => true
     * 'test' === withExactText('text') => false
     * 'other' === withExactText('text') => false
     *
     * await aui.moveMouseTo().text().withExactText('Password').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/withExactText.gif)
     *
     *
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    withExactText(text: string): FluentFiltersOrRelationsCondition;
    /**
     * Filters for text containing the text provided as an argument.
     *
     * **Examples:**
     * ```typescript
     * 'This is a text' === containsText('text') => true
     * 'This is a text' === containsText('other text') => false
     * 'This is a text' === containsText('other') => false
     * ```
     * ![](https://docs.askui.com/img/gif/containsText.gif)
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    containsText(text: string): FluentFiltersOrRelationsCondition;
    /**
     * Filters for PTA locating the text provided as an argument.
     *
     * @param {string} text - A text to be located.
     *
     * @return {FluentFiltersOrRelationsCondition}
     */
    pta(text: string): FluentFiltersOrRelationsCondition;
}
export declare class FluentFiltersOrRelationsCondition extends FluentFiltersCondition {
    /**
     * Logic or operator
     *
     * **Examples:**
     * ```text
     * scene 1
     * --------------  ---------------
     * |  button    |  |  icon       |
     * --------------  ---------------
     *
     * scene 2
     * --------------  ---------------
     * |  button    |  |  text       |
     * --------------  ---------------
     *
     * ```
     * In case, that your reference element can have multiple values, in the following example, the element right of the button can be either icon or text.
     * You can use **the `or()` relation**, so your instruction is valid for both scenes
     * ```typescript
     * const button = await aui.get().button().rightOf().icon().or().text().exec();
     * console.log(button);
     * ```
     * Returns the same button for both cases
     * ```text
     *  console output: [
     *   DetectedElement {
     *      name: 'BUTTON',
     *      text: 'button',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     *
     * @return {FluentFiltersCondition}
     */
    or(): FluentFiltersCondition;
    /**
     * Logic and operator
     *
     * **Examples:**
     * ```text
     * example scene:
     *  ---------------   ----------------
     *  |  icon user  |   |  icon search |
     *  ---------------   ----------------
     * ```
     * ```typescript
     * const icons = await aui.get().icon().exec();
     * console.log(icons);
     * ```
     * Using only the element-description icon, the get will return both icons
     * ```text
     * console output: [
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'user',
     *      bndbox: BoundingBox {
     *         xmin: 1000,
     *         ymin: 1010,
     *         xmax: 1020,
     *         ymax: 1030
     *      }
     *   },
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'search',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     * You can combine element-descriptions with **the `and()` relation** and specify exactly which icon you want.
     * ```typescript
     * const icons = await aui.get().icon().and().withText('user').exec()
     * console.log(icons)
     * ```
     * The get returns only the user icon although both elements are icons.
     * ```text
     *  console output: [
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'user',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     *
     * @return {FluentFiltersCondition}
     */
    and(): FluentFiltersCondition;
    /**
     * Filters for an element inside another element.
     *
     * **Examples:**
     * ```typescript
     * --------------------
     * |     outerEl      |
     * |  --------------  |
     * |  |  innerEl   |  |
     * |  --------------  |
     * |                  |
     * --------------------
     *
     * // Returns innerEl because innerEl is inside outerEl
     * ...innerEl().in().outerEl()
     * // Returns nothing because innerEl is not inside outerEl
     * ...outerEl().in().innerEl()
     * ```
     * ![](https://docs.askui.com/img/gif/in.gif)
     *
     * @return {FluentFiltersCondition}
     */
    in(): FluentFiltersCondition;
    /**
     * Filters for an element right of another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements right of the other element are filtered for based on their vertical position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered right of the other element if element's bounding box intersects with a horizontal line passing through the center of the other element
     * - `"element_edge_area"` - considered right of the other element if element's bounding box intersects with an area between the top and the bottom edge of the other element
     * - `"display_edge_area"` - considered right of the other element no matter where it is placed vertically on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ---------- ---------                     ---------
     * | button | | text0 |                     | text3 |
     * ---------- --------- ---------           ---------
     *                      | text1 | ---------
     *                      --------- | text2 |
     *                                ---------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().rightOf(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().rightOf(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().rightOf(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element rightOf button
     * ...text().rightOf().button()
     * ...text().rightOf(0).button()
     * ...text().rightOf(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // horizontal line from the center of button
     * // Notice: text1 is not touched!
     * ...text().rightOf(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area rightOf the y-axis of button
     * // Notice: text2 is not touched!
     * ...text().rightOf(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element rightOf button
     * ...text().rightOf(2, 'display_edge_area').button()
     *
     * // Returns no element because button is rightOf the texts
     * ...button().rightOf().text()
     * ```
     * ![](https://docs.askui.com/img/gif/rightOf.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFiltersCondition}
     */
    rightOf(index?: number, intersection_area?: INTERSECTION_AREA): FluentFiltersCondition;
    /**
     * Filters for an element left of another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements left of the other element are filtered for based on their vertical position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered left of the other element if element's bounding box intersects with a horizontal line passing through the center of the other element
     * - `"element_edge_area"` - considered left of the other element if element's bounding box intersects with an area between the top and the bottom edge of the other element
     * - `"display_edge_area"` - considered left of the other element no matter where it is placed vertically on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ---------                   --------- ----------
     * | text3 |                   | text0 | | button |
     * ---------         --------- --------- ----------
     *         --------- | text1 |
     *         | text2 | ---------
     *         ---------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().leftOf(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().leftOf(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().leftOf(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element leftOf button
     * ...text().leftOf().button()
     * ...text().leftOf(0).button()
     * ...text().leftOf(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // horizontal line from the center of button
     * // Notice: text1 is not touched!
     * ...text().leftOf(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area leftOf the y-axis of button
     * // Notice: text2 is not touched!
     * ...text().leftOf(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element leftOf button
     * ...text().leftOf(2, 'display_edge_area').button()
     *
     * // Returns no element because button is rightOf the texts
     * ...button().leftOf().text()
     * ```
     * ![](https://docs.askui.com/img/gif/leftOf.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFiltersCondition}
     */
    leftOf(index?: number, intersection_area?: INTERSECTION_AREA): FluentFiltersCondition;
    /**
     * Filters for an element below another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements below of the other element are filtered for based on their horizontal position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered below of the other element if element's bounding box intersects with a vertical line passing through the center of the other element
     * - `"element_edge_area"` - considered below of the other element if element's bounding box intersects with an area between the left and the right edge of the other element
     * - `"display_edge_area"` - considered below of the other element no matter where it is placed horizontally on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ------------
     * |   text   |
     * ------------
     * ------------
     * |  button0 |
     * ------------
     *          -----------
     *          | button1 |
     *          -----------
     *             -----------
     *             | button2 |
     *             -----------
     * ------------
     * |  button3 |
     * ------------
     *
     * // General explanation for element_center_line
     * // This will find button0 and button3
     * ...button().below(..., 'element_center_line').text()
     *
     * // General explanation for element_edge_area
     * // This will find button0, button1 and button3
     * ...button().below(..., 'element_edge_area').text()
     *
     * // General explanation and display_edge_area
     * // This will find button0, button1, button2 and button3
     * ...button().below(..., 'display_edge_area').text()
     *
     * // More examples:
     * // Returns button0 because button0 is the first button below text
     * ...button().below().text()
     * ...button().below(0).text()
     * ...button().below(0, 'element_edge_area').text()
     *
     * // Returns button3 because it is the second button touched by the
     * // vertical line from the center of text
     * // Notice: button1 is not touched
     * ...button().below(1, 'element_center_line').text()
     *
     * // Returns button3 because it is the third button touched by the
     * // vertical area below the x-axis of text
     * // Notice: button2 is not touched!
     * ...button().below(2, 'element_edge_area').text()
     *
     * // Returns button2 because it is the third element below text
     * ...button().below(2, 'display_edge_area').text()
     *
     * // Returns no element because text is above the buttons
     * ...text().below().button()
     * ```
     * ![](https://docs.askui.com/img/gif/below.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFiltersCondition}
     */
    below(index?: number, intersection_area?: INTERSECTION_AREA): FluentFiltersCondition;
    /**
     * Filters for an element above another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements above of the other element are filtered for based on their horizontal position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered above of the other element if element's bounding box intersects with a vertical line passing through the center of the other element
     * - `"element_edge_area"` - considered above of the other element if element's bounding box intersects with an area between the left and the right edge of the other element
     * - `"display_edge_area"` - considered above of the other element no matter where it is placed horizontally on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ------------
     * |  text3   |
     * ------------
     *             ------------
     *             |  text2   |
     *             ------------
     *     ------------
     *     |  text1   |
     *     ------------
     * ------------
     * |  text0   |
     * ------------
     * ------------
     * |  button  |
     * ------------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().above(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().above(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().above(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element above button
     * ...text().above().button()
     * ...text().above(0).button()
     * ...text().above(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // vertical line from the center of button
     * // Notice: text1 is not touched!
     * ...text().above(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area above the x-axis of button
     * // Notice: text2 is not touched!
     * ...text().above(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element above button
     * ...text().above(2, 'display_edge_area').button()
     *
     * // Returns no element because button is below the texts
     * ...button().above().text()
     * ```
     * ![](https://docs.askui.com/img/gif/above.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFiltersCondition}
     */
    above(index?: number, intersection_area?: INTERSECTION_AREA): FluentFiltersCondition;
    /**
     * Filters for an element nearest to another element.
     *
     * **Examples:**
     * ```typescript
     * --------------
     * |  button 1  |
     * --------------
     * --------------
     * |   text     |
     * --------------
     *
     *
     *
     * --------------
     * |  button 2  |
     * --------------
     *
     * // Returns button 1 because button 1 is nearer to the text than button 2
     * ...button().nearestTo().text()
     * ```
     * ![](https://docs.askui.com/img/gif/nearestTo.gif)
     *
     * @return {FluentFiltersCondition}
     */
    nearestTo(): FluentFiltersCondition;
    /**
     * Filters for an element containing another element.
     *
     * **Example:**
     * ```typescript
     * --------------------
     * |     outerEl      |
     * |  --------------  |
     * |  |  innerEl   |  |
     * |  --------------  |
     * |                  |
     * --------------------
     *
     * // Returns outerEl because outerEl contains innerEl
     * ...outerEl().contains().innerEl()
     * //  Returns no element because innerEl contains no outerEl
     * ...innerEl().contains().outerEl()
     * ```
     * ![](https://docs.askui.com/img/gif/contains.gif)
     *
     * @return {FluentFiltersCondition}
     */
    contains(): FluentFiltersCondition;
    /**
     * Expects that filtered element exists.
     *
     * Always use together with `expect()`.
     *
     * **Note** Throws an error and stops the execution when the element is not found. You can catch the error and decide what to do as in the examples below.
     *
     * **Examples:**
     * ```typescript
     * // Stops execution at this point when the element does not exist.
     * await aui.expect().text('Login').exists().exec()
     *
     * // This will catch the error and log a message
     * // But the execution will continue afterwards
     * try {
     *     await aui.expect().text('Login').exists().exec()
     * } catch (error) {
     *     console.log('Too bad we could not find the element!');
     * }
     * ```
     *
     * @return {ExecCondition}
     */
    exists(): ExecCondition;
    /**
     * Expects that filtered element not exists.
     *
     * Always use together with `expect()`.
     *
     * **Note** Throws an error and stops the execution when the element is found. You can catch the error and decide what to do as in the examples below.
     *
     * **Examples:**
     * ```typescript
     * // Stops execution at this point when the element does exist.
     * await aui.expect().text('Login').notExists().exec()
     *
     * // This will catch the error and log a message
     * // But the execution will continue afterwards
     * try {
     *     await aui.expect().text('Login').notExists().exec()
     * } catch (error) {
     *     console.log('Too bad we could find the element!');
     * }
     * ```
     *
     * @return {ExecCondition}
     */
    notExists(): ExecCondition;
}
declare class ExecCondition extends Exec {
    exec(execOptions?: ExecOptions): Promise<void>;
}
export declare abstract class FluentCommand extends FluentBase {
    constructor();
    /**
     * Expects a condition, for example, `exists()` or `notExits()`.
     *
     * Use the structure `expect().<your filter>.(exists()|notExists())` as shown in the examples below.
     *
     * **Examples:**
     * ```typescript
     * await aui.expect().text('Login').exists().exec()
     * await aui.expect().text('Login').notExists().exec()
     * ```
     *
     * @return {FluentFiltersCondition}
     */
    expect(): FluentFiltersCondition;
    /**
     * Mouse left-clicks/taps on the filtered element by moving the mouse cursor to the filtered element first.
     *
     * If you need a simple mouseleftclick/tap only, use `mouseLeftClick`.
     *
     * **Example:**
     * ```typescript
     * await aui.click().button().withText('Google Search').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/click.gif)
     *
     *
     *
     * @return {FluentFilters}
     */
    click(): FluentFilters;
    /**
     * Move mouse over the filtered element.
     *
     * **Example:**
     * ```typescript
     * await aui.moveMouseTo().text().withText('Grinning_Face').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/moveMouseTo.gif)
     *
     *
     *
     * @return {FluentFilters}
     */
    moveMouseTo(): FluentFilters;
    /**
     * Puts the focus on the filtered element and types in the text.
     *
     * **Note:** In the current version it copies the text and pastes it.
     *
     * **Examples:**
     * ```typescript
     * await aui.typeIn('Type some text').textfield().exec()
     *
     * // mask the text so it is not send to the askui-inference server
     * await aui.typeIn('Type some text', { isSecret: true, secretMask: '**' }).textfield().exec()
     * ```
     * ![](https://docs.askui.com/img/gif/typeIn.gif)
     *
     * @param {string} text - A text to type
     *
     * @return {FluentFilters}
     */
    typeIn(text: string): FluentFilters;
    /**
     * Moves mouse to the filtered element and scrolls in the x and y direction.
     *
     * **macOS**: May not work as expected!
     *
     * **Example:**
     * ```typescript
     * await aui.scrollInside(0,-500).text().withText('Bottom sheet').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/scrollInside.gif)
     *
     * @param {number} x_offset - A (positive/negative) x direction.
     * @param {number} y_offset - A (positive/negative) y direction.
     *
     * @return {FluentFilters}
     */
    scrollInside(x_offset: number, y_offset: number): FluentFilters;
    /**
     * Moves the mouse relatively to an element in the direction.
     * This can be used when the mouse should not hover over an element anymore.
     *
     * **Examples:**
     * ```typescript
     * // Move mouse 30 pixels below button
     * await aui.moveMouseRelativelyTo(0, 30).button().withText('Submit').exec()
     * ```
     * ![](https://docs.askui.com/img/gif/moveMouseRelativelyTo.gif)
     *
     * @param {number} x_offset - A (positive/negative) x direction.
     * @param {number} y_offset - A (positive/negative) y direction.
     *
     * @return {FluentFilters}
     */
    moveMouseRelativelyTo(x_offset: number, y_offset: number): FluentFilters;
    /**
     * Swipe an element in the x and y direction.
     * Holds the left mouse button down on Windows, Linux and macOS and drags the element.
     * On touch devices it taps the element and then drags it.
     *
     * **Example:**
     * ```typescript
     * // Swipe the element 500 to the right
     * await aui.swipe(500, 0).image().exec()
     * ```
     * ![](https://docs.askui.com/img/gif/swipe.gif)
     *
     * @param {number} x_offset - A x direction. positive and negative values are accepted
     * @param {number} y_offset - A y direction. positive and negative values are accepted
     *
     * @return {FluentFilters}
     */
    swipe(x_offset: number, y_offset: number): FluentFilters;
    /**
     * Types a text at the current position.
     * If you need to focus the element first, use typeIn()
     *
     * **Note:** In the current version it copies the text and pastes it.
     *
     * **Examples:**
     * ```typescript
     * await aui.type('askui@askui.com').exec()
     *
     * // mask the text so it is not send to the askui-inference server
     * await aui.type('Type some text', { isSecret: true, secretMask: '**' }).exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/type.gif)
     *
     * @param {string} text - A text to type
     *
     * @return {Exec}
     */
    type(text: string): Exec;
    /**
     * Moves the mouse from the current position (relative) in x and y direction.
     *
     * **Example:**
     * ```typescript
     * await aui.moveMouseRelatively(0, 50).exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/moveMouseRelatively.gif)
     *
     * @param {number} x_offset - A (positive/negative) x direction.
     * @param {number} y_offset - A (positive/negative) y direction.
     *
     * @return {Exec}
     */
    moveMouseRelatively(x_offset: number, y_offset: number): Exec;
    /**
     * Moves the mouse to the absolute x and y coordinates.
     *
     * If you want to move your mouse cursor to an element, use `moveMouseTo()`.
     *
     * **Example:**
     * ```typescript
     * await aui.moveMouse(500, 500).exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/moveMouse.gif)
     *
     * @param {number} x_coordinate - A (positive/negative) x coordinate.
     * @param {number} y_coordinate - A (positive/negative) y coordinate.
     *
     * @return {Exec}
     */
    moveMouse(x_coordinate: number, y_coordinate: number): Exec;
    /**
     * Scrolls based on the current mouse position in the x and y direction.
     *
     * **Important**: Mouse must be positioned in a scrollable area.
     *
     * **macOS**: May not work as expected!
     *
     * **Example:**
     * ```typescript
     * // Scroll 500 pixels down in y direction
     * await aui.scroll(0, -500).exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/scroll.gif)
     *
     * @param {number} x_offset - A (positive/negative) x direction.
     * @param {number} y_offset - A (positive/negative) y direction.
     *
     * @return {Exec}
     */
    scroll(x_offset: number, y_offset: number): Exec;
    /**
     * Executes a shell command on the device your AskUI Controller is connected to.
     *
     * **Example:**
     * ```typescript
     * // Open the lastpass app
     * await aui.execOnShell('monkey -p com.lastpass.authenticator 1').exec();
     *
     * // Open Google Chrome on Windows
     * await aui.execOnShell("start chrome").exec()
     *
     * ;// Open Google Chrome on macOS
     * await aui.execOnShell("open -a 'Google Chrome'").exec();
     *
     * // Open Google Chrome on Linux
     * await aui.execOnShell("chrome").exec();
     * ```
     *
     * @param {string} shellCommand - A shell command which is executed.
     * @param {number} [timeoutInMilliseconds=1] - A timeout in milliseconds.
     *
     * @return {Exec}
     */
    execOnShell(shellCommand: string, timeoutInMilliseconds?: number): Exec;
    /**
     * Clicks with left mouse key.
     *
     * If you need to move the mouse first, use `moveMouseTo()`.
     *
     * **Examples:**
     * ```typescript
     * // Optional: Move mouse to an element first
     * await aui.moveMouseTo().button().withText('Login').exec();
     *
     * await aui.mouseLeftClick().exec();
     * ```
     *
     * @return {Exec}
     */
    mouseLeftClick(): Exec;
    /**
     * Clicks with right mouse key.
     *
     * If you need to move the mouse first, use `moveMouseTo()`.
     *
     * **Examples:**
     * ```typescript
     * // Optional: Move mouse to an element first
     * await aui.moveMouseTo().button().withText('Login').exec();
     *
     * await aui.mouseRightClick().exec();
     * ```
     *
     * @return {Exec}
     */
    mouseRightClick(): Exec;
    /**
     * Clicks with middle mouse key.
     *
     * If you need to move the mouse first, use `moveMouseTo()`.
     *
     * **Examples:**
     * ```typescript
     * // Optional: Move mouse to an element first
     * await aui.moveMouseTo().button().withText('Login').exec();
     *
     * await aui.mouseMiddleClick().exec();
     * ```
     *
     * @return {Exec}
     */
    mouseMiddleClick(): Exec;
    /**
     * Double-clicks with left mouse key.
     *
     * If you need to move the mouse first, use `moveMouseTo()`.
     *
     * **Examples:**
     * ```typescript
     * // Optional: Move mouse to an element first
     * await aui.moveMouseTo().button().withText('Login').exec();
     *
     * await aui.mouseDoubleLeftClick().exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/mouseDoubleLeftClick.gif)
     *
     * @return {Exec}
     */
    mouseDoubleLeftClick(): Exec;
    /**
     * Double-clicks with right mouse key.
     *
     * If you need to move the mouse first, use `moveMouseTo()`.
     *
     * **Examples:**
     * ```typescript
     * // Optional: Move mouse to an element first
     * await aui.moveMouseTo().button().withText('Login').exec();
     *
     * await aui.mouseDoubleRightClick().exec();
     * ```
     *
     * @return {Exec}
     */
    mouseDoubleRightClick(): Exec;
    /**
     * Double-clicks with middle mouse key.
     *
     * If you need to move the mouse first, use `moveMouseTo()`.
     *
     * **Examples:**
     * ```typescript
     * // Optional: Move mouse to an element first
     * await aui.moveMouseTo().button().withText('Login').exec();
     *
     * await aui.mouseDoubleMiddleClick().exec();
     * ```
     *
     * @return {Exec}
     */
    mouseDoubleMiddleClick(): Exec;
    /**
     * Toggles mouse down (Left mouse key/tap).
     *
     *  This is the equivalent to **mouse-left-press-and-hold**. It holds the mouse button until the `mouseToogleUp()` is called. Often combined with `mouseToggleUP` to automate **drag-and-drop**.
     *
     * **Example:**
     * ```typescript
     * await aui.mouseToggleDown().exec();
     * await aui.moveMouseRelatively(-400,0).exec();
     * await aui.mouseToggleUp().exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/mouseToggleDownUp.gif)
     *
     * @return {Exec}
     */
    mouseToggleDown(): Exec;
    /**
     * Toggles mouse up (Left mouse key/tap).
     *
     * This is the equivalent to releasing the pressing mouse left button. Often combined with `mouseToggleDown()` to automate **drag-and-drop**.
     *
     * **Example:**
     * ```typescript
     * await aui.mouseToggleDown().exec();
     * await aui.moveMouseRelatively(-400,0).exec();
     * await aui.mouseToggleUp().exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/mouseToggleDownUp.gif)
     *
     * @return {Exec}
     */
    mouseToggleUp(): Exec;
    /**
     * Press three keys like `CTRL+ALT+DEL`
     *
     * **Operating system specific mappings:**
     * 1. Windows: `command`-key maps to `windows`-key
     *
     * **Examples:**
     * ```typescript
     * await aui.pressThreeKeys('control', 'command' 'space').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/pressThreeKeys.gif)
     *
     * @param {MODIFIER_KEY} first_key - A modifier key
     * @param {MODIFIER_KEY} second_key - A modifier key
     * @param {PC_KEY} third_key - A key
     *
     * @return {Exec}
     */
    pressThreeKeys(first_key: MODIFIER_KEY, second_key: MODIFIER_KEY, third_key: PC_KEY): Exec;
    /**
     * Press two keys like `ALT+F4`
     *
     * **Operating system specific mappings:**
     * 1. Windows: `command`-key maps to `windows`-key
     * ---
     *
     *
     * @param {MODIFIER_KEY} first_key - A modifier key
     * @param {PC_KEY} second_key - A key
     *
     * @return {Exec}
     */
    pressTwoKeys(first_key: MODIFIER_KEY, second_key: PC_KEY): Exec;
    /**
     * Press one keys like `DEL`
     *
     * **Operating system specific mappings:**
     * 1. Windows: `command`-key maps to `windows`-key
     *
     * **Examples:**
     * ```typescript
     * await aui.pressKey('tab').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/pressKey.gif)
     *
     * @param {PC_AND_MODIFIER_KEY} key - A key
     *
     * @return {Exec}
     */
    pressKey(key: PC_AND_MODIFIER_KEY): Exec;
    /**
     * Press three Android keys like `CTRL+ALT+DEL`
     *
     * @param {ANDROID_KEY} first_key - A Android key
     * @param {ANDROID_KEY} second_key - A Android key
     * @param {ANDROID_KEY} third_key - A Android key
     *
     * @return {Exec}
     */
    pressAndroidThirdKey(first_key: ANDROID_KEY, second_key: ANDROID_KEY, third_key: ANDROID_KEY): Exec;
    /**
     * Press two Android keys like `volume_down+power`
     * See [API docs](https://docs.askui.com/docs/api/Actions/pressandroidtwokey) for available keys.
     *
     * **Examples:**
     * ```typescript
     * await aui.pressAndroidTwoKey('volume_down', 'power').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/pressAndroidTwoKeys.gif)
     *
     * @param {ANDROID_KEY} first_key - A Android key
     * @param {ANDROID_KEY} second_key - A Android key
     *
     * @return {Exec}
     */
    pressAndroidTwoKey(first_key: ANDROID_KEY, second_key: ANDROID_KEY): Exec;
    /**
     * Press one Android key like `del`
     * See [API docs](https://docs.askui.com/docs/api/Actions/pressandroidtwokey) for available keys.
     *
     * **Examples:**
     * ```typescript
     * await aui.pressAndroidKey('notification').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/pressAndroidKey.gif)
     *
     * @param {ANDROID_KEY} key - A Android key
     *
     * @return {Exec}
     */
    pressAndroidKey(key: ANDROID_KEY): Exec;
    abstract fluentCommandExecutor(instruction: string, modelComposition: ModelCompositionBranch[], context: CommandExecutorContext, skipCache: boolean, retryStrategy?: RetryStrategy): Promise<void>;
}
export interface ExecutableGetter {
    exec(): Promise<DetectedElement[]>;
}
export declare class ExecGetter extends FluentBase implements ExecutableGetter {
    exec(): Promise<DetectedElement[]>;
}
export declare class FluentFiltersGetter extends FluentBase {
    /**
     * Filters for a UI element 'other element'.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    otherElement(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a UI element 'switch'.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    switch(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a UI element 'container'.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    container(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a UI element 'checkbox'.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    checkbox(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for any UI element on the screen.
     *
     * **Examples:**
     * ```typescript
     * await aui.moveMouseTo().element().exec()
     * ```
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    element(): FluentFiltersOrRelationsGetter;
    /**
     * Filters special elements defined over a specifically trained custom element descriptor.
     *
     * Custom element descriptors are trained on your elements that were not detected with our
     * default models. Please contact us for further details on how to do this. We are working on
     * a solution to provide this in our User Portal.
     *
     * In the example below circle refers to a circle shaped icon with specific properties.
     *
     * **Examples:**
     * ```typescript
     * await aui.moveMouseTo().element().special("circle").exec()
     * ```
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    special(text: string): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a UI element 'button'.
     *
     * **Examples:**
     * ```typescript
     * await aui.click().button().contains().text().withText('Google Search').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/button.gif)
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    button(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a UI element 'table'.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    table(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for an UI element 'text'.
     *
     * Takes an optional parameter to filter for a specific text.
     * See the examples below.
     *
     * See also the filters `withTextRegex()` and `withExactText()`
     *
     * **Examples:**
     * ```typescript
     * await aui.click().text().exec();
     * await aui.click().text('Username').exec();
     *
     * // Matching with an exact text
     * await aui.click().text().withExactText('Username').exec();
     *
     * // Matching with a regex
     * await aui.click().text().withTextRegex('\b[Ss]\w+').exec();
     * ```
     *
     * @param {string} [text] - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    text(text?: string): FluentFiltersOrRelationsGetter;
    /**
     * Filters for an UI element 'wordlevel'.
     *
     * Takes an optional parameter to filter for a specific text.
     * See the examples below.
     *
     * **Examples:**
     * ```typescript
     * await aui.fluentCommandExecutor('Click on button right of wordlevel 'User_PRG in:'');
     * ```
     *
     * @param {string} [wordlevel] - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    wordlevel(wordlevel?: string): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a UI element 'icon'.
     *
     * You can combine it with the element-description 'withText()' to look for a specific icon.
     *
     * **Examples:**
     * ```typescript
     * icon().withText('plus')
     * ```
     *
     * ![](https://docs.askui.com/img/gif/icon.gif)
     *
     * **Note:** This is an alpha feature. The prediction of the icon name is sometimes unstable. Use custom elements as an alternative.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    icon(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a 'custom element', that is a UI element that is defined by providing an image and other parameters such as degree of rotation. It allows filtering for a UI element based on an image instead of using text or element descriptions like `button().withText('Submit')` in `await aui.click().button().withText('Submit').exec()`.
     *
     * See the tutorial - [Custom Element](https://docs.askui.com/docs/general/Element%20Selection/custom-elements) for more details.
     *
     * **Example**
     * ```typescript
     * await aui
     *     .click()
     *     .customElement({
     *         customImage: './logo.png', // required
     *         name: 'myLogo', // optional
     *         threshold: 0.5, // optional, defaults to 0.5
     *         stopThreshold: 0.9, // optional, defaults to 0.9
     *         rotationDegreePerStep: 0, // optional, defaults to 0
     *         imageCompareFormat: 'grayscale', // optional, defaults to 'grayscale'
     *         // mask:{x:0, y:0}[] // optional, a polygon to match only a certain area of the custom element
     *     })
     *     .exec();
     * ```
     *
     * **Arguments**
     *
     * - **customImage** (*`string`, required*):
     *     - A cropped image in the form of a base64 string or file path.
     * - **name** (*`string`, optional*):
     *     - A unique name that can be used for filtering for the custom element. If not given, any text inside the custom image will be detected via OCR.
     * - **threshold** (*`number`, optional*):
     *     - A threshold for how much a UI element needs to be similar to the custom element as defined by the image. Takes values between `0.0` (== all elements are recognized as the custom element which is probably not what you want) and `1.0` (== elements need to look exactly like the `customImage` which is unlikely to be achieved as even minor differences count). Defaults to `0.5`.
     * - **stopThreshold** (*`number`, optional*):
     *     - A threshold for when to stop searching for UI elements similar to the custom element. As soon as UI elements have been found that are at least as similar as the `stopThreshold`, the search is going to stop. After that elements are filtered using the `threshold`. Because of that the `stopThreshold` should be greater than or equal to `threshold`. It is primarily to be used as a speed improvement (by lowering the value). Takes values between `0.0` and `1.0`. Defaults to `0.9`.
     * - **rotationDegreePerStep** (*`number`, optional*):
     *     - Step size in rotation degree. Rotates the custom image by this step size until 360° is exceeded. The range is from `0` to `360`. Defaults to `0`.
     * - **imageCompareFormat** (*`'RGB' | 'grayscale' | 'edges'`, optional*):
     *     - The color compare style. `'edges'` compares only edges, `'greyscale'` compares the brightness of each pixel whereas `'RGB'` compares all three colors (red, green, blue). Defaults to `'grayscale'`.
     *
     *
     * @param {CustomElementJson} customElement - The custom element to filter for.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    customElement(customElement: CustomElementJson): FluentFiltersOrRelationsGetter;
    /**
     * Detects an AI Element created with the [snipping workflow](https://docs.askui.com/docs/general/Element%20Selection/aielement#snipping-workflow).
     *
     * **Examples:**
     *
     * ```typescript
     * await aui.click().aiElement('askui-logo').exec();
     * ```
     *
     * @param {string} aiElementName - Name of the AI Element.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    aiElement(aiElementName: string): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a UI element 'image'.
     *
     * **Examples:**
     * ```typescript
     * // Works if there is only one image visible on the screen
     * await aui.click().image().exec();
     *
     * // Works if you have an image with
     * // a text below
     * await aui.click().image().above().text().withText('Automating WebGL').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/image.gif)
     *
     *
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    image(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for a UI element 'textfield'.
     *
     * **Examples:**
     * ```typescript
     * // Works if there is only one textfield visible on the screen
     * await aui.typeIn('Oh yeah').textfield().exec();
     *
     * // Works if you have a labeled textfield
     * // Label is above the textfield
     * await aui.typeIn('Oh yeah').textfield().below().text().withText('E-Mail Address').exec();
     * ```
     *
     * ![](https://docs.askui.com/img/gif/textfield.gif)
     *
     *
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    textfield(): FluentFiltersOrRelationsGetter;
    /**
     * Filters for similar -- meaning >70% similar -- text.
     *
     * Takes an optional parameter to specify the similarity. Usually you need the optional parameter for long texts you want to match precisely.
     *
     * _We use [RapidFuzz](https://maxbachmann.github.io/RapidFuzz/Usage/fuzz.html#ratio) which calculates the similarity like this:_
     *
     * `1 - (distance / (lengthString1 + lengthString2))`
     *
     * **Examples:**
     * ```typescript
     * 'text' === withText('text') => true
     * 'test' === withText('text') => true
     * 'Test' === withText('text') => true
     * 'Text' === withText('text') => true
     * 'TEXT' === withText('text') => true
     * 'texst' === withText('text') => true
     * 'texts' === withText('text') => true
     *
     * // usually false
     * 'atebxtc' === withText('text') => false
     * 'other' === withText('text') => false
     *
     * // optional parameter: similarity_score
     * '978-0-201-00650-6' == withText("978-0-201-00", 90) => false with 82.76 < 90 similarity
     * '978-0-201-00650-6' == withText("978-0-201-00650", 90) => true with 93.75 > 90 similarity
     * ```
     * ![](https://docs.askui.com/img/gif/withText.gif)
     *
     * @param {string} text - A text to be matched.
     * @param {number} [similarityScore=70] - Similarity score minimum value, it should be between `0` and `100`.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    withText(text: string, similarityScore?: number): FluentFiltersOrRelationsGetter;
    /**
     * Filters for texts, which match the regex pattern.
     *
     * **Examples:**
     *
     * ```typescript
     * 'The rain in Spain' === withTextRegex('\b[Ss]\w+') => true
     * 'The rain in Portugal' === withTextRegex('\b[Ss]\w+') => false
     * 'The rain in switzerland' === withTextRegex('\b[Ss]\w+') => true
     *
     * await aui.get().text().withTextRegex('\b[Ss]\w+').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/withTextRegex.gif)
     *
     *
     *
     * @param {string} regex_pattern - A regex pattern
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    withTextRegex(regex_pattern: string): FluentFiltersOrRelationsGetter;
    /**
     * Filters for equal text.
     *
     * **Note:** This should be only used in cases where the similarity
     *  comparison of {@link FluentFilters.withText()} allows not for
     *  specific enough filtering (too many elements).
     *
     * **Examples:**
     * ```typescript
     * 'text' === withExactText('text') => true
     * 'test' === withExactText('text') => false
     * 'other' === withExactText('text') => false
     *
     * await aui.moveMouseTo().text().withExactText('Password').exec()
     * ```
     *
     * ![](https://docs.askui.com/img/gif/withExactText.gif)
     *
     *
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    withExactText(text: string): FluentFiltersOrRelationsGetter;
    /**
     * Filters for text containing the text provided as an argument.
     *
     * **Examples:**
     * ```typescript
     * 'This is a text' === containsText('text') => true
     * 'This is a text' === containsText('other text') => false
     * 'This is a text' === containsText('other') => false
     * ```
     * ![](https://docs.askui.com/img/gif/containsText.gif)
     *
     * @param {string} text - A text to be matched.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    containsText(text: string): FluentFiltersOrRelationsGetter;
    /**
     * Filters for PTA locating the text provided as an argument.
     *
     * @param {string} text - A text to be located.
     *
     * @return {FluentFiltersOrRelationsGetter}
     */
    pta(text: string): FluentFiltersOrRelationsGetter;
}
export declare class FluentFiltersOrRelationsGetter extends FluentFiltersGetter {
    /**
     * Logic or operator
     *
     * **Examples:**
     * ```text
     * scene 1
     * --------------  ---------------
     * |  button    |  |  icon       |
     * --------------  ---------------
     *
     * scene 2
     * --------------  ---------------
     * |  button    |  |  text       |
     * --------------  ---------------
     *
     * ```
     * In case, that your reference element can have multiple values, in the following example, the element right of the button can be either icon or text.
     * You can use **the `or()` relation**, so your instruction is valid for both scenes
     * ```typescript
     * const button = await aui.get().button().rightOf().icon().or().text().exec();
     * console.log(button);
     * ```
     * Returns the same button for both cases
     * ```text
     *  console output: [
     *   DetectedElement {
     *      name: 'BUTTON',
     *      text: 'button',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     *
     * @return {FluentFiltersGetter}
     */
    or(): FluentFiltersGetter;
    /**
     * Logic and operator
     *
     * **Examples:**
     * ```text
     * example scene:
     *  ---------------   ----------------
     *  |  icon user  |   |  icon search |
     *  ---------------   ----------------
     * ```
     * ```typescript
     * const icons = await aui.get().icon().exec();
     * console.log(icons);
     * ```
     * Using only the element-description icon, the get will return both icons
     * ```text
     * console output: [
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'user',
     *      bndbox: BoundingBox {
     *         xmin: 1000,
     *         ymin: 1010,
     *         xmax: 1020,
     *         ymax: 1030
     *      }
     *   },
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'search',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     * You can combine element-descriptions with **the `and()` relation** and specify exactly which icon you want.
     * ```typescript
     * const icons = await aui.get().icon().and().withText('user').exec()
     * console.log(icons)
     * ```
     * The get returns only the user icon although both elements are icons.
     * ```text
     *  console output: [
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'user',
     *      bndbox: BoundingBox {
     *         xmin: 900,
     *         ymin: 910,
     *         xmax: 920,
     *         ymax: 930
     *      }
     *   }
     *  ]
     * ```
     *
     * @return {FluentFiltersGetter}
     */
    and(): FluentFiltersGetter;
    /**
     * Filters for an element inside another element.
     *
     * **Examples:**
     * ```typescript
     * --------------------
     * |     outerEl      |
     * |  --------------  |
     * |  |  innerEl   |  |
     * |  --------------  |
     * |                  |
     * --------------------
     *
     * // Returns innerEl because innerEl is inside outerEl
     * ...innerEl().in().outerEl()
     * // Returns nothing because innerEl is not inside outerEl
     * ...outerEl().in().innerEl()
     * ```
     * ![](https://docs.askui.com/img/gif/in.gif)
     *
     * @return {FluentFiltersGetter}
     */
    in(): FluentFiltersGetter;
    /**
     * Filters for an element right of another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements right of the other element are filtered for based on their vertical position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered right of the other element if element's bounding box intersects with a horizontal line passing through the center of the other element
     * - `"element_edge_area"` - considered right of the other element if element's bounding box intersects with an area between the top and the bottom edge of the other element
     * - `"display_edge_area"` - considered right of the other element no matter where it is placed vertically on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ---------- ---------                     ---------
     * | button | | text0 |                     | text3 |
     * ---------- --------- ---------           ---------
     *                      | text1 | ---------
     *                      --------- | text2 |
     *                                ---------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().rightOf(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().rightOf(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().rightOf(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element rightOf button
     * ...text().rightOf().button()
     * ...text().rightOf(0).button()
     * ...text().rightOf(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // horizontal line from the center of button
     * // Notice: text1 is not touched!
     * ...text().rightOf(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area rightOf the y-axis of button
     * // Notice: text2 is not touched!
     * ...text().rightOf(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element rightOf button
     * ...text().rightOf(2, 'display_edge_area').button()
     *
     * // Returns no element because button is rightOf the texts
     * ...button().rightOf().text()
     * ```
     * ![](https://docs.askui.com/img/gif/rightOf.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFiltersGetter}
     */
    rightOf(index?: number, intersection_area?: INTERSECTION_AREA): FluentFiltersGetter;
    /**
     * Filters for an element left of another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements left of the other element are filtered for based on their vertical position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered left of the other element if element's bounding box intersects with a horizontal line passing through the center of the other element
     * - `"element_edge_area"` - considered left of the other element if element's bounding box intersects with an area between the top and the bottom edge of the other element
     * - `"display_edge_area"` - considered left of the other element no matter where it is placed vertically on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ---------                   --------- ----------
     * | text3 |                   | text0 | | button |
     * ---------         --------- --------- ----------
     *         --------- | text1 |
     *         | text2 | ---------
     *         ---------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().leftOf(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().leftOf(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().leftOf(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element leftOf button
     * ...text().leftOf().button()
     * ...text().leftOf(0).button()
     * ...text().leftOf(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // horizontal line from the center of button
     * // Notice: text1 is not touched!
     * ...text().leftOf(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area leftOf the y-axis of button
     * // Notice: text2 is not touched!
     * ...text().leftOf(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element leftOf button
     * ...text().leftOf(2, 'display_edge_area').button()
     *
     * // Returns no element because button is rightOf the texts
     * ...button().leftOf().text()
     * ```
     * ![](https://docs.askui.com/img/gif/leftOf.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFiltersGetter}
     */
    leftOf(index?: number, intersection_area?: INTERSECTION_AREA): FluentFiltersGetter;
    /**
     * Filters for an element below another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements below of the other element are filtered for based on their horizontal position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered below of the other element if element's bounding box intersects with a vertical line passing through the center of the other element
     * - `"element_edge_area"` - considered below of the other element if element's bounding box intersects with an area between the left and the right edge of the other element
     * - `"display_edge_area"` - considered below of the other element no matter where it is placed horizontally on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ------------
     * |   text   |
     * ------------
     * ------------
     * |  button0 |
     * ------------
     *          -----------
     *          | button1 |
     *          -----------
     *             -----------
     *             | button2 |
     *             -----------
     * ------------
     * |  button3 |
     * ------------
     *
     * // General explanation for element_center_line
     * // This will find button0 and button3
     * ...button().below(..., 'element_center_line').text()
     *
     * // General explanation for element_edge_area
     * // This will find button0, button1 and button3
     * ...button().below(..., 'element_edge_area').text()
     *
     * // General explanation and display_edge_area
     * // This will find button0, button1, button2 and button3
     * ...button().below(..., 'display_edge_area').text()
     *
     * // More examples:
     * // Returns button0 because button0 is the first button below text
     * ...button().below().text()
     * ...button().below(0).text()
     * ...button().below(0, 'element_edge_area').text()
     *
     * // Returns button3 because it is the second button touched by the
     * // vertical line from the center of text
     * // Notice: button1 is not touched
     * ...button().below(1, 'element_center_line').text()
     *
     * // Returns button3 because it is the third button touched by the
     * // vertical area below the x-axis of text
     * // Notice: button2 is not touched!
     * ...button().below(2, 'element_edge_area').text()
     *
     * // Returns button2 because it is the third element below text
     * ...button().below(2, 'display_edge_area').text()
     *
     * // Returns no element because text is above the buttons
     * ...text().below().button()
     * ```
     * ![](https://docs.askui.com/img/gif/below.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFiltersGetter}
     */
    below(index?: number, intersection_area?: INTERSECTION_AREA): FluentFiltersGetter;
    /**
     * Filters for an element above another element.
     *
     * Takes an optional parameter `index` to select the nth element (defaults to `0`).
     *
     * Takes an optional parameter `intersection_area` to specify which elements above of the other element are filtered for based on their horizontal position (y-coordinates of bounding box):
     * - `"element_center_line"` - considered above of the other element if element's bounding box intersects with a vertical line passing through the center of the other element
     * - `"element_edge_area"` - considered above of the other element if element's bounding box intersects with an area between the left and the right edge of the other element
     * - `"display_edge_area"` - considered above of the other element no matter where it is placed horizontally on the screen (y-axis)
     *
     * **Examples:**
     * ```typescript
     * ------------
     * |  text3   |
     * ------------
     *             ------------
     *             |  text2   |
     *             ------------
     *     ------------
     *     |  text1   |
     *     ------------
     * ------------
     * |  text0   |
     * ------------
     * ------------
     * |  button  |
     * ------------
     *
     * // General explanation for element_center_line
     * // This will find text0 and text3
     * ...text().above(..., 'element_center_line').button()
     *
     * // General explanation for element_edge_area
     * // This will find text0, text1 and text3
     * ...text().above(..., 'element_edge_area').button()
     *
     * // General explanation and display_edge_area
     * // This will find text0, text1, text2 and text3
     * ...text().above(..., 'display_edge_area').button()
     *
     * // More examples:
     * // Returns text0 because it is the first element above button
     * ...text().above().button()
     * ...text().above(0).button()
     * ...text().above(0, 'element_edge_area').button()
     *
     * // Returns text3 because it is the second text touched by the
     * // vertical line from the center of button
     * // Notice: text1 is not touched!
     * ...text().above(1, 'element_center_line').button()
     *
     * // Returns text3 because it is the third text touched by the
     * // vertical area above the x-axis of button
     * // Notice: text2 is not touched!
     * ...text().above(2, 'element_edge_area').button()
     *
     * // Returns text2 because it is the third element above button
     * ...text().above(2, 'display_edge_area').button()
     *
     * // Returns no element because button is below the texts
     * ...button().above().text()
     * ```
     * ![](https://docs.askui.com/img/gif/above.gif)
     *
     * @param {number} [index=0] - Index of element to filter for going into the direction specified. Defaults to `0` which is the first element (zero-indexed) found in that direction.
     * @param {INTERSECTION_AREA} [intersection_area="element_edge_area"] - Intersecting with either `"element_center_line"`, `"element_edge_area"` or `"display_edge_area"`. Defaults to `"element_edge_area"`.
     *
     * @return {FluentFiltersGetter}
     */
    above(index?: number, intersection_area?: INTERSECTION_AREA): FluentFiltersGetter;
    /**
     * Filters for an element nearest to another element.
     *
     * **Examples:**
     * ```typescript
     * --------------
     * |  button 1  |
     * --------------
     * --------------
     * |   text     |
     * --------------
     *
     *
     *
     * --------------
     * |  button 2  |
     * --------------
     *
     * // Returns button 1 because button 1 is nearer to the text than button 2
     * ...button().nearestTo().text()
     * ```
     * ![](https://docs.askui.com/img/gif/nearestTo.gif)
     *
     * @return {FluentFiltersGetter}
     */
    nearestTo(): FluentFiltersGetter;
    /**
     * Filters for an element containing another element.
     *
     * **Example:**
     * ```typescript
     * --------------------
     * |     outerEl      |
     * |  --------------  |
     * |  |  innerEl   |  |
     * |  --------------  |
     * |                  |
     * --------------------
     *
     * // Returns outerEl because outerEl contains innerEl
     * ...outerEl().contains().innerEl()
     * //  Returns no element because innerEl contains no outerEl
     * ...innerEl().contains().outerEl()
     * ```
     * ![](https://docs.askui.com/img/gif/contains.gif)
     *
     * @return {FluentFiltersGetter}
     */
    contains(): FluentFiltersGetter;
    /**
    * Returns a list of detected elements
    *
    * @return {DetectedElement[]}
    */
    exec(): Promise<DetectedElement[]>;
}
export declare abstract class Getter extends FluentCommand {
    /**
     * Returns an array with all filtered elements.
     * A detected element has the following properties:
     * - `name` of the element
     * - `text` content of element
     * - `bndbox`: location of element described with coordinates of a bounding box
     *
     * **Examples:**
     * ```typescript
     * // ************************************ //
     * // Log the DetectedElements completely  //
     * // ************************************ //
     * const text = await aui.get().text('Sign').exec();
     * console.log(text);
     *
     * // Console output
     * [
     *   DetectedElement {
     *     name: 'TEXT',
     *     text: 'Sign In',
     *     bndbox: BoundingBox {
     *       xmin: 1128.2720982142857,
     *       ymin: 160.21332310267857,
     *       xmax: 1178.8204241071428,
     *       ymax: 180.83512834821428
     *     }
     *   }
     * ]
     * ```
     *
     * ```typescript
     * // *************************************************** //
     * // Examples on how to work with the returned elements  //
     * // *************************************************** //
     * const texts = await aui.get().text().below().textfield().exec();
     *
     * // We can get a lot of elements this way
     * console.log(texts);
     *
     * // Console output
     * [
     *   DetectedElement {
     *     name: 'TEXT',
     *     text: 'Sign In',
     *     bndbox: BoundingBox {
     *       xmin: 1128.2720982142857,
     *       ymin: 160.21332310267857,
     *       xmax: 1178.8204241071428,
     *       ymax: 180.83512834821428
     *     },
     *   },
     *   DetectedElement {
     *     name: 'TEXT',
     *     text: 'Login',
     *     bndbox: BoundingBox {
     *       xmin: 250.8204241071428,
     *       ymin: 300.21332310267857,
     *       xmax: 450.6304241071428,
     *       ymax: 950.47812834821428
     *     },
     *   },
     *   ... 10 more items
     * ]
     *
     * // Extract the FIRST element
     * // Arrays start with index 0!
     * const firstTextElement = texts[0];
     * const textOfFirstElement = firstElement.text;
     *
     * console.log(textOfFirstElement);
     *
     * // Console output
     * Sign In
     *
     * // Log the text of the SECOND element
     * // with shorter code
     * const texts = await aui.get().text().below().textfield().exec();
     * console.log(texts[1].text)
     *
     * // Console output
     * Login
     * ```
     *
     * @return {FluentFiltersGetter}
     */
    get(): FluentFiltersGetter;
    /**
     * Returns an array with all detected elements.
     * A detected element has the following properties:
     * - `name` of the element
     * - `text` content of element
     * - `bndbox`: location of element described with coordinates of a bounding box
     *
     * **Examples:**
     * ```typescript
     * const detectedElements = await aui.getAll().exec();
     * console.log(detectedElements);
     * ```
     * ```text
     *  console output: [
     *   DetectedElement {
     *      name: 'TEXT',
     *      text: 'Sign In',
     *      bndbox: BoundingBox {
     *         xmin: 1128.2720982142857,
     *         ymin: 160.21332310267857,
     *         xmax: 1178.8204241071428,
     *         ymax: 180.83512834821428
     *      },
     *   },
     *   DetectedElement {
     *      name: 'ICON',
     *      text: 'search',
     *      bndbox: BoundingBox {
     *         xmin: 250.8204241071428,
     *         ymin: 300.21332310267857,
     *         xmax: 450.6304241071428,
     *         ymax: 950.47812834821428
     *      },
     *    },
     *   ... 381 more items
     *  ]
     * ```
     *
     * @return {ExecGetter}
     */
    getAll(): ExecGetter;
    abstract getterExecutor(instruction: string, context: CommandExecutorContext): Promise<DetectedElement[]>;
}
export declare abstract class ApiCommands extends Getter {
}
export {};
