import type { ElicitationQuestion } from '../elicitation.js';
/** How a text channel words a question. English defaults; override any (`texts.questions`). */
export interface ChannelQuestionTexts {
    /** Above the first question of a set with more than one: `(1/3)`. */
    counter(index: number, total: number): string;
    /** Under single-choice options. */
    pickOne: string;
    /** Under multiple-choice options. */
    pickMany: string;
    /** Under options a typed answer may replace. */
    orWrite: string;
    /** The word that keeps a question's pre-picked answers (or leaves it unanswered). */
    skipWord: string;
    /** How to keep the pre-picked answers, shown when a question has some. */
    keep(skipWord: string, labels: string): string;
    /** The answer could not be read; the question follows. */
    invalid(problem: string): string;
}
export declare const DEFAULT_CHANNEL_QUESTION_TEXTS: ChannelQuestionTexts;
/** Brazilian Portuguese question texts — part of `ptBrChannelTexts`. */
export declare const ptBrChannelQuestionTexts: ChannelQuestionTexts;
/** One question as a text message: its prompt, numbered options, and how to answer. */
export declare function formatChannelQuestion(question: ElicitationQuestion, position: {
    index: number;
    total: number;
    preamble?: string;
}, texts?: ChannelQuestionTexts): string;
export type ChannelAnswer = {
    status: 'answer';
    values: string[];
}
/** Keep the question's defaults: its id is left out of the reply. */
 | {
    status: 'skip';
} | {
    status: 'invalid';
    problem: string;
};
/**
 * Read a chat message as the answer to `question`: an option's number or label (several, separated
 * by commas, for a multiple choice), a typed value for a typed question or one that allows free
 * text, or the skip word. Checked against the question's own rules.
 */
export declare function parseChannelAnswer(question: ElicitationQuestion, text: string, skipWord?: string): ChannelAnswer;
//# sourceMappingURL=questions.d.ts.map