import type { ElementRef } from '../../types/change-request-types';
import type { Target } from './contracts';
/**
 * Map a comment's ElementRef to a single `propose_variants` target.
 *
 * Rules (first non-empty wins, no concatenation):
 *  1. `rivetId` → `{ type: 'element', ref: '[data-rivet-id="<id>"]' }`
 *  2. `id` (no whitespace) → `{ type: 'element', ref: '#<id>' }`
 *  3. `xpath` → `{ type: 'element', ref: '<xpath>' }`
 *  4. `className` (single dominant token) → `{ type: 'element', ref: '.<token>' }`
 *
 * If `element.filePaths.length === 1`, prefer `{ type: 'file', ref: filePaths[0] }`
 * for refinement scope. The original ElementRef selector should still appear
 * verbatim in the LLM brief prompt — callers are responsible for that.
 *
 * Returns null when none of the four rules produce a usable ref. Callers should
 * surface a structured error to the user rather than calling propose_variants
 * with a fabricated target.
 */
export declare const elementRefToTarget: (ref: ElementRef) => Target | null;
//# sourceMappingURL=elementRefToTarget.d.ts.map