98 lines
2.5 KiB
TypeScript
98 lines
2.5 KiB
TypeScript
import type { ScreenRegion } from './ScreenRegion';
|
|
|
|
/**
|
|
* Represents an image template used for visual element detection.
|
|
* Templates are reference images that are matched against screen captures
|
|
* to locate UI elements without relying on CSS selectors or DOM access.
|
|
*/
|
|
export interface ImageTemplate {
|
|
/** Unique identifier for the template */
|
|
id: string;
|
|
/** Path to the template image file (relative to resources directory) */
|
|
imagePath: string;
|
|
/** Confidence threshold for matching (0.0-1.0, higher = more strict) */
|
|
confidence: number;
|
|
/** Optional region to limit search area for better performance */
|
|
searchRegion?: ScreenRegion;
|
|
/** Human-readable description of what this template represents */
|
|
description: string;
|
|
}
|
|
|
|
/**
|
|
* Template categories for organization and filtering.
|
|
*/
|
|
export type TemplateCategory =
|
|
| 'login'
|
|
| 'navigation'
|
|
| 'wizard'
|
|
| 'button'
|
|
| 'field'
|
|
| 'modal'
|
|
| 'indicator';
|
|
|
|
/**
|
|
* Extended template with category metadata.
|
|
*/
|
|
export interface CategorizedTemplate extends ImageTemplate {
|
|
category: TemplateCategory;
|
|
stepId?: number;
|
|
}
|
|
|
|
/**
|
|
* Create an ImageTemplate with default confidence.
|
|
*/
|
|
export function createImageTemplate(
|
|
id: string,
|
|
imagePath: string,
|
|
description: string,
|
|
options?: {
|
|
confidence?: number;
|
|
searchRegion?: ScreenRegion;
|
|
}
|
|
): ImageTemplate {
|
|
return {
|
|
id,
|
|
imagePath,
|
|
description,
|
|
confidence: options?.confidence ?? 0.9,
|
|
searchRegion: options?.searchRegion,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Validate that an ImageTemplate has all required fields.
|
|
*/
|
|
export function isValidTemplate(template: unknown): template is ImageTemplate {
|
|
if (typeof template !== 'object' || template === null) {
|
|
return false;
|
|
}
|
|
|
|
const t = template as Record<string, unknown>;
|
|
|
|
return (
|
|
typeof t.id === 'string' &&
|
|
t.id.length > 0 &&
|
|
typeof t.imagePath === 'string' &&
|
|
t.imagePath.length > 0 &&
|
|
typeof t.confidence === 'number' &&
|
|
t.confidence >= 0 &&
|
|
t.confidence <= 1 &&
|
|
typeof t.description === 'string'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Default confidence thresholds for different template types.
|
|
*/
|
|
export const DEFAULT_CONFIDENCE = {
|
|
/** High confidence for exact matches (buttons, icons) */
|
|
HIGH: 0.95,
|
|
/** Standard confidence for most UI elements */
|
|
STANDARD: 0.9,
|
|
/** Lower confidence for variable elements (text fields with content) */
|
|
LOW: 0.8,
|
|
/** Minimum acceptable confidence */
|
|
MINIMUM: 0.7,
|
|
/** Very low confidence for testing/debugging template matching issues */
|
|
DEBUG: 0.5,
|
|
} as const; |