import type { Page } from '@playwright/test'; import { type CaptureOptions } from './capture.js'; export type HarvestRoute = { /** Stable route/surface key in the generated manifest. */ key: string; /** Absolute URL or path resolved against `baseUrl`. */ url: string; }; export type HarvestAction = 'click' | 'select-option' | 'submit-empty'; export type HarvestedVariant = { key: string; action: HarvestAction; selector: string; reason: string; label: string; findings: number; diffHash: string; value?: string; }; export type HarvestedLiveState = { key: string; selector: string; reason: string; label: string; fixtureRequired: true; role?: string; ariaLive?: string; ariaBusy?: string; }; export type HarvestSkip = { reason: 'unsafe-label' | 'navigated' | 'action-failed'; selector: string; label: string; detail?: string; }; export type HarvestedRoute = { key: string; url: string; variants: HarvestedVariant[]; liveStates: HarvestedLiveState[]; skipped: HarvestSkip[]; }; export type VariantHarvest = { routes: HarvestedRoute[]; }; export type VariantHarvestOptions = { baseUrl?: string; routes: HarvestRoute[]; /** Max attempted actions per route. Default 40. */ maxActionsPerRoute?: number; /** Extra selectors to skip during capture. */ ignore?: string[]; /** Forwarded to the cheap discovery captures; forced states stay off here. */ stabilize?: CaptureOptions['stabilize']; }; /** * Discover one-step UI states by trying semantic controls and keeping only * actions whose rendered computed-style map differs from the route baseline. */ export declare function harvestStyleVariants(page: Page, options: VariantHarvestOptions): Promise;