import type { BrowserClientWindow, BrowserUserContext } from './browser.js';
import type { EmptyResult, JsInt, JsUint } from './common.js';
import type { ScriptNodeRemoteValue, ScriptSerializationOptions, ScriptSharedReference } from './script.js';
import type { SessionUserPromptHandlerType } from './session.js';
export type BrowsingContextCommand = BrowsingContextActivate | BrowsingContextCaptureScreenshot | BrowsingContextClose | BrowsingContextCreate | BrowsingContextGetTree | BrowsingContextHandleUserPrompt | BrowsingContextLocateNodes | BrowsingContextNavigate | BrowsingContextPrint | BrowsingContextReload | BrowsingContextSetBypassCsp | BrowsingContextSetViewport | BrowsingContextStartScreencast | BrowsingContextStopScreencast | BrowsingContextTraverseHistory;
export type BrowsingContextResult = BrowsingContextActivateResult | BrowsingContextCaptureScreenshotResult | BrowsingContextCloseResult | BrowsingContextCreateResult | BrowsingContextGetTreeResult | BrowsingContextHandleUserPromptResult | BrowsingContextLocateNodesResult | BrowsingContextNavigateResult | BrowsingContextPrintResult | BrowsingContextReloadResult | BrowsingContextSetBypassCspResult | BrowsingContextSetViewportResult | BrowsingContextStartScreencastResult | BrowsingContextStopScreencastResult | BrowsingContextTraverseHistoryResult;
export type BrowsingContextEvent = BrowsingContextContextCreated | BrowsingContextContextDestroyed | BrowsingContextDomContentLoaded | BrowsingContextDownloadEnd | BrowsingContextDownloadWillBegin | BrowsingContextFragmentNavigated | BrowsingContextHistoryUpdated | BrowsingContextLoad | BrowsingContextNavigationAborted | BrowsingContextNavigationCommitted | BrowsingContextNavigationFailed | BrowsingContextNavigationStarted | BrowsingContextUserPromptClosed | BrowsingContextUserPromptOpened;
export type BrowsingContextBrowsingContext = string;
export type BrowsingContextInfoList = BrowsingContextInfo[];
export interface BrowsingContextInfo {
    children: BrowsingContextInfoList | null;
    clientWindow: BrowserClientWindow;
    context: BrowsingContextBrowsingContext;
    originalOpener: BrowsingContextBrowsingContext | null;
    url: string;
    userContext: BrowserUserContext;
    parent?: BrowsingContextBrowsingContext | null;
}
export type BrowsingContextLocator = BrowsingContextAccessibilityLocator | BrowsingContextCssLocator | BrowsingContextContextLocator | BrowsingContextInnerTextLocator | BrowsingContextXPathLocator;
export interface BrowsingContextAccessibilityLocator {
    type: "accessibility";
    value: {
        name?: string;
        role?: string;
    };
}
export interface BrowsingContextCssLocator {
    type: "css";
    value: string;
}
export interface BrowsingContextContextLocator {
    type: "context";
    value: {
        context: BrowsingContextBrowsingContext;
    };
}
export interface BrowsingContextInnerTextLocator {
    type: "innerText";
    value: string;
    ignoreCase?: boolean;
    matchType?: "full" | "partial";
    maxDepth?: JsUint;
}
export interface BrowsingContextXPathLocator {
    type: "xpath";
    value: string;
}
export type BrowsingContextNavigation = string;
export type BrowsingContextDownload = string;
export interface BrowsingContextBaseNavigationInfo {
    context: BrowsingContextBrowsingContext;
    navigation: BrowsingContextNavigation | null;
    timestamp: JsUint;
    url: string;
    userContext?: BrowserUserContext;
}
export type BrowsingContextNavigationInfo = BrowsingContextBaseNavigationInfo;
export type BrowsingContextReadinessState = "none" | "interactive" | "complete";
export type BrowsingContextUserPromptType = "alert" | "beforeunload" | "confirm" | "prompt";
export interface BrowsingContextActivate {
    method: "browsingContext.activate";
    params: BrowsingContextActivateParameters;
}
export interface BrowsingContextActivateParameters {
    context: BrowsingContextBrowsingContext;
}
export type BrowsingContextActivateResult = EmptyResult;
export interface BrowsingContextCaptureScreenshot {
    method: "browsingContext.captureScreenshot";
    params: BrowsingContextCaptureScreenshotParameters;
}
export interface BrowsingContextCaptureScreenshotParameters {
    context: BrowsingContextBrowsingContext;
    /**
     * @default 'viewport'
     */
    origin?: "viewport" | "document";
    format?: BrowsingContextImageFormat;
    clip?: BrowsingContextClipRectangle;
}
export interface BrowsingContextImageFormat {
    type: string;
    quality?: number;
}
export type BrowsingContextClipRectangle = BrowsingContextBoxClipRectangle | BrowsingContextElementClipRectangle;
export interface BrowsingContextElementClipRectangle {
    type: "element";
    element: ScriptSharedReference;
}
export interface BrowsingContextBoxClipRectangle {
    type: "box";
    x: number;
    y: number;
    width: number;
    height: number;
}
export interface BrowsingContextCaptureScreenshotResult {
    data: string;
}
export interface BrowsingContextClose {
    method: "browsingContext.close";
    params: BrowsingContextCloseParameters;
}
export interface BrowsingContextCloseParameters {
    context: BrowsingContextBrowsingContext;
    promptUnload?: boolean;
}
export type BrowsingContextCloseResult = EmptyResult;
export interface BrowsingContextCreate {
    method: "browsingContext.create";
    params: BrowsingContextCreateParameters;
}
export type BrowsingContextCreateType = "tab" | "window";
export interface BrowsingContextCreateParameters {
    type: BrowsingContextCreateType;
    referenceContext?: BrowsingContextBrowsingContext;
    background?: boolean;
    userContext?: BrowserUserContext;
}
export interface BrowsingContextCreateResult {
    context: BrowsingContextBrowsingContext;
    userContext?: BrowserUserContext;
}
export interface BrowsingContextGetTree {
    method: "browsingContext.getTree";
    params: BrowsingContextGetTreeParameters;
}
export interface BrowsingContextGetTreeParameters {
    maxDepth?: JsUint;
    root?: BrowsingContextBrowsingContext;
}
export interface BrowsingContextGetTreeResult {
    contexts: BrowsingContextInfoList;
}
export interface BrowsingContextHandleUserPrompt {
    method: "browsingContext.handleUserPrompt";
    params: BrowsingContextHandleUserPromptParameters;
}
export interface BrowsingContextHandleUserPromptParameters {
    context: BrowsingContextBrowsingContext;
    accept?: boolean;
    userText?: string;
}
export type BrowsingContextHandleUserPromptResult = EmptyResult;
export interface BrowsingContextLocateNodes {
    method: "browsingContext.locateNodes";
    params: BrowsingContextLocateNodesParameters;
}
export interface BrowsingContextLocateNodesParameters {
    context: BrowsingContextBrowsingContext;
    locator: BrowsingContextLocator;
    maxNodeCount?: JsUint;
    serializationOptions?: ScriptSerializationOptions;
    startNodes?: ScriptSharedReference[];
}
export interface BrowsingContextLocateNodesResult {
    nodes: ScriptNodeRemoteValue[];
}
export interface BrowsingContextNavigate {
    method: "browsingContext.navigate";
    params: BrowsingContextNavigateParameters;
}
export interface BrowsingContextNavigateParameters {
    context: BrowsingContextBrowsingContext;
    url: string;
    wait?: BrowsingContextReadinessState;
}
export interface BrowsingContextNavigateResult {
    navigation: BrowsingContextNavigation | null;
    url: string;
}
export interface BrowsingContextPrint {
    method: "browsingContext.print";
    params: BrowsingContextPrintParameters;
}
export interface BrowsingContextPrintParameters {
    context: BrowsingContextBrowsingContext;
    background?: boolean;
    margin?: BrowsingContextPrintMarginParameters;
    /**
     * @default 'portrait'
     */
    orientation?: "portrait" | "landscape";
    page?: BrowsingContextPrintPageParameters;
    pageRanges?: (JsUint | string)[];
    /**
     * @default 1
     */
    scale?: number;
    /**
     * @default true
     */
    shrinkToFit?: boolean;
}
export interface BrowsingContextPrintMarginParameters {
    /**
     * @default 1
     */
    bottom?: number;
    /**
     * @default 1
     */
    left?: number;
    /**
     * @default 1
     */
    right?: number;
    /**
     * @default 1
     */
    top?: number;
}
export interface BrowsingContextPrintPageParameters {
    /**
     * @default 27.94
     */
    height?: number;
    /**
     * @default 21.59
     */
    width?: number;
}
export interface BrowsingContextPrintResult {
    data: string;
}
export interface BrowsingContextReload {
    method: "browsingContext.reload";
    params: BrowsingContextReloadParameters;
}
export interface BrowsingContextReloadParameters {
    context: BrowsingContextBrowsingContext;
    ignoreCache?: boolean;
    wait?: BrowsingContextReadinessState;
}
export type BrowsingContextReloadResult = BrowsingContextNavigateResult;
export interface BrowsingContextSetBypassCsp {
    method: "browsingContext.setBypassCSP";
    params: BrowsingContextSetBypassCspParameters;
}
export interface BrowsingContextSetBypassCspParameters {
    bypass: true | null;
    contexts?: BrowsingContextBrowsingContext[];
    userContexts?: BrowserUserContext[];
}
export type BrowsingContextSetBypassCspResult = EmptyResult;
export interface BrowsingContextSetViewport {
    method: "browsingContext.setViewport";
    params: BrowsingContextSetViewportParameters;
}
export interface BrowsingContextSetViewportParameters {
    context?: BrowsingContextBrowsingContext;
    viewport?: BrowsingContextViewport | null;
    devicePixelRatio?: number | null;
    userContexts?: BrowserUserContext[];
}
export interface BrowsingContextViewport {
    width: JsUint;
    height: JsUint;
}
export type BrowsingContextSetViewportResult = EmptyResult;
export interface BrowsingContextStartScreencast {
    method: "browsingContext.startScreencast";
    params: BrowsingContextStartScreencastParameters;
}
export interface BrowsingContextStartScreencastParameters {
    context: BrowsingContextBrowsingContext;
    mimeType?: string;
    video?: BrowsingContextMediaTrackConstraints;
    audio?: boolean;
}
export interface BrowsingContextMediaTrackConstraints {
    width?: JsUint;
    height?: JsUint;
    frameRate?: JsUint;
}
export interface BrowsingContextStartScreencastResult {
    screencast: BrowsingContextScreencast;
    path: string;
}
export type BrowsingContextScreencast = string;
export interface BrowsingContextStopScreencast {
    method: "browsingContext.stopScreencast";
    params: BrowsingContextStopScreencastParameters;
}
export interface BrowsingContextStopScreencastParameters {
    screencast: BrowsingContextScreencast;
}
export interface BrowsingContextStopScreencastResult {
    path: string;
    error?: string;
}
export interface BrowsingContextTraverseHistory {
    method: "browsingContext.traverseHistory";
    params: BrowsingContextTraverseHistoryParameters;
}
export interface BrowsingContextTraverseHistoryParameters {
    context: BrowsingContextBrowsingContext;
    delta: JsInt;
}
export type BrowsingContextTraverseHistoryResult = EmptyResult;
export interface BrowsingContextContextCreated {
    method: "browsingContext.contextCreated";
    params: BrowsingContextInfo;
}
export interface BrowsingContextContextDestroyed {
    method: "browsingContext.contextDestroyed";
    params: BrowsingContextInfo;
}
export interface BrowsingContextNavigationStarted {
    method: "browsingContext.navigationStarted";
    params: BrowsingContextNavigationInfo;
}
export interface BrowsingContextFragmentNavigated {
    method: "browsingContext.fragmentNavigated";
    params: BrowsingContextNavigationInfo;
}
export interface BrowsingContextHistoryUpdated {
    method: "browsingContext.historyUpdated";
    params: BrowsingContextHistoryUpdatedParameters;
}
export interface BrowsingContextHistoryUpdatedParameters {
    context: BrowsingContextBrowsingContext;
    timestamp: JsUint;
    url: string;
    userContext?: BrowserUserContext;
}
export interface BrowsingContextDomContentLoaded {
    method: "browsingContext.domContentLoaded";
    params: BrowsingContextNavigationInfo;
}
export interface BrowsingContextLoad {
    method: "browsingContext.load";
    params: BrowsingContextNavigationInfo;
}
export interface BrowsingContextDownloadWillBegin {
    method: "browsingContext.downloadWillBegin";
    params: BrowsingContextDownloadWillBeginParams;
}
export type BrowsingContextDownloadWillBeginParams = BrowsingContextBaseNavigationInfo & {
    download: BrowsingContextDownload;
    suggestedFilename: string;
};
export interface BrowsingContextDownloadEnd {
    method: "browsingContext.downloadEnd";
    params: BrowsingContextDownloadEndParams;
}
export type BrowsingContextDownloadEndParams = (BrowsingContextDownloadCanceledParams | BrowsingContextDownloadCompleteParams);
export type BrowsingContextDownloadCanceledParams = BrowsingContextBaseNavigationInfo & {
    status: "canceled";
    download: BrowsingContextDownload;
};
export type BrowsingContextDownloadCompleteParams = BrowsingContextBaseNavigationInfo & {
    status: "complete";
    download: BrowsingContextDownload;
    filepath: string | null;
};
export interface BrowsingContextNavigationAborted {
    method: "browsingContext.navigationAborted";
    params: BrowsingContextNavigationInfo;
}
export interface BrowsingContextNavigationCommitted {
    method: "browsingContext.navigationCommitted";
    params: BrowsingContextNavigationInfo;
}
export interface BrowsingContextNavigationFailed {
    method: "browsingContext.navigationFailed";
    params: BrowsingContextNavigationInfo;
}
export interface BrowsingContextUserPromptClosed {
    method: "browsingContext.userPromptClosed";
    params: BrowsingContextUserPromptClosedParameters;
}
export interface BrowsingContextUserPromptClosedParameters {
    context: BrowsingContextBrowsingContext;
    accepted: boolean;
    type: BrowsingContextUserPromptType;
    userContext?: BrowserUserContext;
    userText?: string;
}
export interface BrowsingContextUserPromptOpened {
    method: "browsingContext.userPromptOpened";
    params: BrowsingContextUserPromptOpenedParameters;
}
export interface BrowsingContextUserPromptOpenedParameters {
    context: BrowsingContextBrowsingContext;
    handler: SessionUserPromptHandlerType;
    message: string;
    type: BrowsingContextUserPromptType;
    userContext?: BrowserUserContext;
    defaultValue?: string;
}
/** @deprecated Use {@link BrowsingContext.create} instead — will be removed in a future major version. */
export declare function getBrowsingContextInstance(driver: unknown): Promise<BrowsingContext>;
export declare class BrowsingContext {
    private readonly bidi;
    private constructor();
    static create(driver: unknown): Promise<BrowsingContext>;
    activate(params: BrowsingContextActivateParameters): Promise<void>;
    captureScreenshot(params: BrowsingContextCaptureScreenshotParameters): Promise<BrowsingContextCaptureScreenshotResult>;
    close(params: BrowsingContextCloseParameters): Promise<void>;
    create(params: BrowsingContextCreateParameters): Promise<BrowsingContextCreateResult>;
    getTree(params: BrowsingContextGetTreeParameters): Promise<BrowsingContextGetTreeResult>;
    handleUserPrompt(params: BrowsingContextHandleUserPromptParameters): Promise<void>;
    locateNodes(params: BrowsingContextLocateNodesParameters): Promise<BrowsingContextLocateNodesResult>;
    navigate(params: BrowsingContextNavigateParameters): Promise<BrowsingContextNavigateResult>;
    print(params: BrowsingContextPrintParameters): Promise<BrowsingContextPrintResult>;
    reload(params: BrowsingContextReloadParameters): Promise<BrowsingContextReloadResult>;
    setBypassCSP(params: BrowsingContextSetBypassCspParameters): Promise<void>;
    setViewport(params: BrowsingContextSetViewportParameters): Promise<void>;
    startScreencast(params: BrowsingContextStartScreencastParameters): Promise<BrowsingContextStartScreencastResult>;
    stopScreencast(params: BrowsingContextStopScreencastParameters): Promise<BrowsingContextStopScreencastResult>;
    traverseHistory(params: BrowsingContextTraverseHistoryParameters): Promise<void>;
    onContextCreated(callback: (params: BrowsingContextInfo) => void): Promise<void>;
    onContextDestroyed(callback: (params: BrowsingContextInfo) => void): Promise<void>;
    onDomContentLoaded(callback: (params: BrowsingContextNavigationInfo) => void): Promise<void>;
    onDownloadEnd(callback: (params: BrowsingContextDownloadEndParams) => void): Promise<void>;
    onDownloadWillBegin(callback: (params: BrowsingContextDownloadWillBeginParams) => void): Promise<void>;
    onFragmentNavigated(callback: (params: BrowsingContextNavigationInfo) => void): Promise<void>;
    onHistoryUpdated(callback: (params: BrowsingContextHistoryUpdatedParameters) => void): Promise<void>;
    onLoad(callback: (params: BrowsingContextNavigationInfo) => void): Promise<void>;
    onNavigationAborted(callback: (params: BrowsingContextNavigationInfo) => void): Promise<void>;
    onNavigationCommitted(callback: (params: BrowsingContextNavigationInfo) => void): Promise<void>;
    onNavigationFailed(callback: (params: BrowsingContextNavigationInfo) => void): Promise<void>;
    onNavigationStarted(callback: (params: BrowsingContextNavigationInfo) => void): Promise<void>;
    onUserPromptClosed(callback: (params: BrowsingContextUserPromptClosedParameters) => void): Promise<void>;
    onUserPromptOpened(callback: (params: BrowsingContextUserPromptOpenedParameters) => void): Promise<void>;
    back(context: BrowsingContextBrowsingContext): Promise<void>;
    forward(context: BrowsingContextBrowsingContext): Promise<void>;
    getTopLevelContexts(): Promise<BrowsingContextGetTreeResult>;
    printPage(params: BrowsingContextPrintParameters): Promise<BrowsingContextPrintResult>;
}
