import type { ElectronApplication } from 'playwright-core';
import { RetryOptions } from './utilities';
/**
 * Execute the `.click()` method on the element with the given id.
 * **NOTE:** All menu testing functions will only work with items in the
 * [application menu](https://www.electronjs.org/docs/latest/api/menu#menusetapplicationmenumenu).
 *
 * @category Menu
 *
 * @param electronApp {ElectronApplication} - the Electron application object (from Playwright)
 * @param id {string} - the id of the MenuItem to click
 * @returns {Promise<void>}
 * @fulfil {void} resolves with the result of the `click()` method - probably `undefined`
 */
export declare function clickMenuItemById(electronApp: ElectronApplication, id: string, options?: Partial<RetryOptions>): Promise<unknown>;
/**
 * Click the first matching menu item by any of its properties. This is
 * useful for menu items that don't have an id. HOWEVER, this is not as fast
 * or reliable as using `clickMenuItemById()` if the menu item has an id.
 *
 *  **NOTE:** All menu testing functions will only work with items in the
 * [application menu](https://www.electronjs.org/docs/latest/api/menu#menusetapplicationmenumenu).
 *
 * @category Menu
 *
 * @param electronApp {ElectronApplication} - the Electron application object (from Playwright)
 * @param property {String} - a property of the MenuItem to search for
 * @param value {String | Number | Boolean} - the value of the property to search for
 * @returns {Promise<void>}
 * @fulfil {void} resolves with the result of the `click()` method - probably `undefined`
 */
export declare function clickMenuItem<P extends keyof MenuItemPartial>(electronApp: ElectronApplication, property: P, value: MenuItemPartial[P], options?: Partial<RetryOptions>): Promise<unknown>;
/**
 * Get a given attribute the MenuItem with the given id.
 *
 * @category Menu
 *
 * @param electronApp {ElectronApplication} - the Electron application object (from Playwright)
 * @param menuId {string} - the id of the MenuItem to retrieve the attribute from
 * @param attribute {string} - the attribute to retrieve
 * @returns {Promise<string>}
 * @fulfil {string} resolves with the attribute value
 */
export declare function getMenuItemAttribute<T extends keyof Electron.MenuItem>(electronApp: ElectronApplication, menuId: string, attribute: T, options?: Partial<RetryOptions>): Promise<Electron.MenuItem[T]>;
/** Serializable value types that can be safely transferred via Playwright */
type SerializableValue = string | number | boolean | null | undefined | object | SerializableValue[] | {
    [key: string]: SerializableValue;
};
/** Serialized representation of an Electron.NativeImage converted successfully */
export type SerializedNativeImageSuccess = {
    type: 'NativeImage';
    dataURL: string;
    size: {
        width: number;
        height: number;
    };
    isEmpty: boolean;
};
/** Serialized representation of an Electron.NativeImage converted with an error */
export type SerializedNativeImageError = {
    type: 'NativeImage';
    error: string;
};
/** Serialized representation of an Electron.NativeImage */
export type SerializedNativeImage = SerializedNativeImageSuccess | SerializedNativeImageError;
/** Type guard to check if a SerializedNativeImage is a success case */
export declare function isSerializedNativeImageSuccess(image: SerializedNativeImage): image is SerializedNativeImageSuccess;
/** Type guard to check if a SerializedNativeImage is an error case */
export declare function isSerializedNativeImageError(image: SerializedNativeImage): image is SerializedNativeImageError;
/**
 * A MenuItemConstructorOptions-like Electron MenuItem
 * containing serializable values (primitives, objects, arrays) but no circular references
 */
export type MenuItemPartial = {
    -readonly [K in keyof Electron.MenuItem]?: K extends 'icon' ? SerializedNativeImage | undefined : Electron.MenuItem[K] extends SerializableValue ? Electron.MenuItem[K] : SerializableValue;
} & {
    submenu?: MenuItemPartial[];
};
/**
 * Get information about the MenuItem with the given id. Returns serializable values including
 * primitives, objects, arrays, and other non-recursive data structures.
 *
 * @category Menu
 *
 * @param electronApp {ElectronApplication} - the Electron application object (from Playwright)
 * @param menuId {string} - the id of the MenuItem to retrieve
 * @returns {Promise<MenuItemPartial>}
 * @fulfil {MenuItemPartial} the MenuItem with the given id
 */
export declare function getMenuItemById(electronApp: ElectronApplication, menuId: string, options?: Partial<RetryOptions>): Promise<MenuItemPartial>;
/**
 * Get the current state of the application menu. Contains serializable values including
 * primitives, objects, arrays, and other non-recursive data structures.
 * Very similar to menu
 * [construction template structure](https://www.electronjs.org/docs/latest/api/menu#examples)
 * in Electron.
 *
 * @category Menu
 *
 * @param electronApp {ElectronApplication} - the Electron application object (from Playwright)
 * @returns {Promise<MenuItemPartial[]>}
 * @fulfil {MenuItemPartial[]} an array of MenuItem-like objects
 */
export declare function getApplicationMenu(electronApp: ElectronApplication, options?: Partial<RetryOptions>): Promise<MenuItemPartial[]>;
/**
 * Find a MenuItem by any of its properties
 *
 * @category Menu
 *
 * @param electronApp {ElectronApplication} - the Electron application object (from Playwright)
 * @param property {string} - the property to search for
 * @param value {string} - the value to search for
 * @param menuItems {MenuItemPartial | MenuItemPartial[]} optional - single MenuItem or array - if not provided, will be retrieved from the application menu
 * @returns {Promise<MenuItemPartial>}
 * @fulfil {MenuItemPartial} the first MenuItem with the given property and value
 */
export declare function findMenuItem<P extends keyof MenuItemPartial>(electronApp: ElectronApplication, property: P, value: MenuItemPartial[P], menuItems?: MenuItemPartial | MenuItemPartial[]): Promise<MenuItemPartial | undefined>;
/**
 * Wait for a MenuItem to exist
 *
 * @category Menu
 *
 * @param electronApp {ElectronApplication} - the Electron application object (from Playwright)
 * @param id {string} - the id of the MenuItem to wait for
 * @returns {Promise<void>}
 * @fulfil {void} resolves when the MenuItem is found
 */
export declare function waitForMenuItem(electronApp: ElectronApplication, id: string): Promise<void>;
/**
 * Wait for a MenuItem to have a specific attribute value.
 * For example, wait for a MenuItem to be enabled... or be visible.. etc
 *
 * @category Menu
 *
 * @param electronApp {ElectronApplication} - the Electron application object (from Playwright)
 * @param id {string} - the id of the MenuItem to wait for
 * @param property {string} - the property to search for
 * @param value {string | number | boolean} - the value to search for
 * @returns {Promise<void>}
 * @fulfil {void} resolves when the MenuItem with correct status is found
 */
export declare function waitForMenuItemStatus<P extends keyof Electron.MenuItem>(electronApp: ElectronApplication, id: string, property: P, value: Electron.MenuItem[P]): Promise<void>;
export {};
//# sourceMappingURL=menu_helpers.d.ts.map