/** * Represents a rectangular region on the screen. * Used for targeted screen capture and element location. */ export interface ScreenRegion { x: number; y: number; width: number; height: number; } /** * Represents a point on the screen with x,y coordinates. */ export interface Point { x: number; y: number; } /** * Represents the location of a detected UI element on screen. * Contains the center point, bounding box, and confidence score. */ export interface ElementLocation { center: Point; bounds: ScreenRegion; confidence: number; } /** * Result of login state detection via screen recognition. */ export interface LoginDetectionResult { isLoggedIn: boolean; confidence: number; detectedIndicators: string[]; error?: string; } /** * Create a ScreenRegion from coordinates. */ export function createScreenRegion(x: number, y: number, width: number, height: number): ScreenRegion { return { x, y, width, height }; } /** * Create a Point from coordinates. */ export function createPoint(x: number, y: number): Point { return { x, y }; } /** * Calculate the center point of a ScreenRegion. */ export function getRegionCenter(region: ScreenRegion): Point { return { x: region.x + Math.floor(region.width / 2), y: region.y + Math.floor(region.height / 2), }; } /** * Check if a point is within a screen region. */ export function isPointInRegion(point: Point, region: ScreenRegion): boolean { return ( point.x >= region.x && point.x <= region.x + region.width && point.y >= region.y && point.y <= region.y + region.height ); } /** * Check if two screen regions overlap. */ export function regionsOverlap(a: ScreenRegion, b: ScreenRegion): boolean { return !( a.x + a.width < b.x || b.x + b.width < a.x || a.y + a.height < b.y || b.y + b.height < a.y ); }