/**
 * @typedef {Object} SettingsModalConfigInput
 * @property {'haiku' | 'sonnet' | 'opus'} defaultModel
 * @property {string} reviewSkill
 * @property {string} reviewFollowupSkill
 * @property {'en' | 'fr'} language
 * @property {string} [externalLink]
 * @property {number} [qualityThreshold]
 * @property {number} [maxConcurrentReviews]
 * @property {boolean} [github]
 * @property {boolean} [gitlab]
 * @property {number} [retentionDays]
 */
/**
 * @typedef {Object} SettingsModalBuildInput
 * @property {SettingsModalConfigInput} config
 * @property {string} [projectName]
 */
/**
 * @typedef {Object} SettingsModalViewModel
 * @property {'en' | 'fr'} language
 * @property {'haiku' | 'sonnet' | 'opus'} defaultModel
 * @property {string} reviewSkill
 * @property {string} reviewFollowupSkill
 * @property {string} externalLink
 * @property {string} qualityThreshold
 * @property {string} maxConcurrentReviews
 * @property {string} projectName
 */
/**
 * @param {SettingsModalBuildInput} input
 * @returns {SettingsModalViewModel}
 */
export function buildSettingsViewModel(input: SettingsModalBuildInput): SettingsModalViewModel;
/**
 * @param {SettingsModalViewModel} viewModel
 * @returns {string}
 */
export function renderSettingsModalHtml(viewModel: SettingsModalViewModel): string;
/**
 * Validates qualityThreshold input: empty string means "clear", otherwise must
 * parse as an integer in [0, 10]. Mirrors server-side validation.
 *
 * @param {string} value
 * @returns {{ ok: true } | { ok: false; message: string }}
 */
export function validateQualityThreshold(value: string): {
    ok: true;
} | {
    ok: false;
    message: string;
};
/**
 * Mirrors the server-side validation in projectConcurrencyCap.valueObject.ts.
 * Empty value is required; non-integer or out-of-range [1, 10] are rejected.
 *
 * @param {string} value
 * @returns {{ ok: true } | { ok: false; message: string }}
 */
export function validateMaxConcurrentReviews(value: string): {
    ok: true;
} | {
    ok: false;
    message: string;
};
/**
 * Mirrors the server-side regex from updateProjectConfig.usecase.ts.
 *
 * @param {string} value
 * @returns {{ ok: true } | { ok: false; message: string }}
 */
export function validateExternalLink(value: string): {
    ok: true;
} | {
    ok: false;
    message: string;
};
/**
 * Extracts a whitelisted payload from a FormData-like object (FormData or Map).
 *
 * @param {FormData | Map<string, string>} form
 * @returns {Record<string, string>}
 */
export function extractFormPayload(form: FormData | Map<string, string>): Record<string, string>;
export type SettingsModalConfigInput = {
    defaultModel: "haiku" | "sonnet" | "opus";
    reviewSkill: string;
    reviewFollowupSkill: string;
    language: "en" | "fr";
    externalLink?: string | undefined;
    qualityThreshold?: number | undefined;
    maxConcurrentReviews?: number | undefined;
    github?: boolean | undefined;
    gitlab?: boolean | undefined;
    retentionDays?: number | undefined;
};
export type SettingsModalBuildInput = {
    config: SettingsModalConfigInput;
    projectName?: string | undefined;
};
export type SettingsModalViewModel = {
    language: "en" | "fr";
    defaultModel: "haiku" | "sonnet" | "opus";
    reviewSkill: string;
    reviewFollowupSkill: string;
    externalLink: string;
    qualityThreshold: string;
    maxConcurrentReviews: string;
    projectName: string;
};
//# sourceMappingURL=settingsModal.d.ts.map