import type { BrowserSurfaceRect } from "./browserSurfaceStore"; export interface HostedBrowserWebviewSize { readonly width: number; readonly height: number;} export interface HostedBrowserWebviewWrapperStyle { readonly left: number; readonly top: number; readonly width: number; readonly height: number; readonly zIndex: number; readonly pointerEvents: "auto" | "none"; readonly visibility?: "visible";} export const HIDDEN_BROWSER_WEBVIEW_OFFSET = -100_000; export function resolveHostedBrowserWebviewWrapperStyle(input: { readonly active: boolean; readonly rect: BrowserSurfaceRect | null; readonly hiddenSize: HostedBrowserWebviewSize;}): HostedBrowserWebviewWrapperStyle { const { active, hiddenSize, rect } = input; if (active && rect) { return { left: rect.x, top: rect.y, width: rect.width, height: rect.height, zIndex: 30, pointerEvents: "auto", }; } return { left: HIDDEN_BROWSER_WEBVIEW_OFFSET, top: HIDDEN_BROWSER_WEBVIEW_OFFSET, width: hiddenSize.width, height: hiddenSize.height, zIndex: -1, pointerEvents: "none", // Keep the guest CSS-visible even while physically offscreen. Electron // webviews can keep metadata/status alive under `visibility:hidden` while // CDP Runtime/Input commands stall, which breaks offscreen automation. visibility: "visible", };}
import type { BrowserSurfaceRect } from "./browserSurfaceStore";
export interface HostedBrowserWebviewSize {
readonly width: number;
readonly height: number;
}
export interface HostedBrowserWebviewWrapperStyle {
readonly left: number;
readonly top: number;
readonly width: number;
readonly height: number;
readonly zIndex: number;
readonly pointerEvents: "auto" | "none";
readonly visibility?: "visible";
}
export const HIDDEN_BROWSER_WEBVIEW_OFFSET = -100_000;
export function resolveHostedBrowserWebviewWrapperStyle(input: {
readonly active: boolean;
readonly rect: BrowserSurfaceRect | null;
readonly hiddenSize: HostedBrowserWebviewSize;
}): HostedBrowserWebviewWrapperStyle {
const { active, hiddenSize, rect } = input;
if (active && rect) {
return {
left: rect.x,
top: rect.y,
width: rect.width,
height: rect.height,
zIndex: 30,
pointerEvents: "auto",
};
}
return {
left: HIDDEN_BROWSER_WEBVIEW_OFFSET,
top: HIDDEN_BROWSER_WEBVIEW_OFFSET,
width: hiddenSize.width,
height: hiddenSize.height,
zIndex: -1,
pointerEvents: "none",
// Keep the guest CSS-visible even while physically offscreen. Electron
// webviews can keep metadata/status alive under `visibility:hidden` while
// CDP Runtime/Input commands stall, which breaks offscreen automation.
visibility: "visible",
};
}