import type { ElicitationInputType, ElicitationQuestion } from '../../../index.js';
export { type ElicitationInput, type ElicitationInputType, validateElicitationAnswer as validateAnswer, validateElicitationValue as validateAnswerValue, } from '../../../elicitation-input.js';
/** What a form control can hand over: a field's value, a checkbox's state, a picked date, a list. */
export type RawAnswer = string | number | boolean | Date | null | undefined | readonly RawAnswer[];
/** The question fields {@link coerceAnswer} reads. A transcript question and a core one both fit. */
export type CoercibleQuestion = Pick<ElicitationQuestion, 'multiple'> & {
    input?: {
        type: ElicitationInputType;
    } | null;
};
/**
 * Turn whatever a form control produced into the `string[]` the answer route takes, in the
 * question's canonical form: numbers as decimals, booleans as `"true"`/`"false"`, dates as
 * `YYYY-MM-DD` (a `Date` is read as the local calendar day), trimmed where whitespace means
 * nothing. An empty value becomes `[]` — no answer, not an empty string. A single-choice question
 * keeps the first value.
 *
 * Coercion never judges: pair it with {@link validateAnswer} (the same rules the server applies) to
 * say what is wrong before sending.
 */
export declare function coerceAnswer(question: CoercibleQuestion, raw: RawAnswer): string[];
//# sourceMappingURL=answers.d.ts.map