import type { TopLevelDataSchema } from '../context/StateContext/types';
import type { BaseOuterFormProps } from '../hooks/useForm/types';
import type { Scenario } from './models/api/get-scenarios';
import type { LegalEntityTrustedFields } from './models/api/legal-entity';
import type { LegalEntityType } from './models/api/legal-entity-type';
import type { VerificationError } from './models/api/verification-error';
import type { Remediation } from '../types/errors/remediation';
import type { FormList } from '../types/form';
import type { FieldSettings, FormConfiguration, FormConfigurationWithoutRules, PerScenarioFormConfiguration } from '../types/form-configuration';
import type { FormRules } from '../types/form-rules';
import type { AnyTLDSFieldName } from '../utils/getFieldsWithExistingData';
export declare const composePerScenarioFormConfigurations: <TLDS extends TopLevelDataSchema>(scenarios: Scenario[] | undefined, configurations: PerScenarioFormConfiguration<TLDS, string>) => FormConfiguration<TLDS, string>;
export declare const augmentWithCountryConfigs: <OuterFormSchema extends TopLevelDataSchema>(countrySpecificConfig: FormConfigurationWithoutRules<OuterFormSchema> | undefined, baseFormConfig: FormConfiguration<OuterFormSchema, string>) => FormConfiguration<OuterFormSchema, string>;
export declare const isFieldRequired: (fieldSettings: FieldSettings<string>, customRules: FormRules<string>, reasons?: string[]) => boolean;
export declare const isFieldOptional: (fieldSettings: FieldSettings<string>, customRules: FormRules<string>, reasons?: string[]) => boolean;
export type PropsFromConfiguration<OuterFormSchema> = Required<Pick<BaseOuterFormProps<OuterFormSchema>, 'allFields' | 'requiredFields' | 'optionalFields' | 'obscuredFields' | 'trustedFields'>>;
/**
 * function: getPropsFromScenarios
 *
 * Configurations are stored as a flat list of fields and their properties.(see identity.ts), they
 * should be agnostic of how forms are structured and implemented. While parsing the configurations
 * the form structure information will be used to generate props specific to the passed form.
 * This also means the field names in configurations and forms should match.
 *
 * @returns value Eg:
 * ```
 * {
 *     requiredFields: {
 *         personalDetails: ['firstName', 'lastName', 'idNumber', 'residencyCountry' ],
 *         contactDetails: ['phoneNumber', 'email']
 *     },
 *     optionalFields: {
 *         contactDetails: ['email']
 *     },
 *     labels: {
 *         personalDetails: {
 *             firstName: 'givenName',
 *             lastName: 'surName'
 *         }
 *     },
 *     validators: {
 *         phoneNumber: {
 *              validate: (value, context?) => boolean;
 *              errorMessage?: string | ErrorMessageObject;
 *              modes: 'blur' | 'input';
 *        }
 *     }
 *
 * }
 * ```
 */
export declare function getPropsFromConfigurations<OuterFormSchema extends TopLevelDataSchema>({ scenarioConfiguration, forms, remediationActions, dataMissingErrors, fieldsWithExistingData, // TODO can type more strictly as `MappingKey<FormSchema>`
customRules, legalEntityType, legalEntityTrustedFields, remediationFieldAsOptional, }: {
    scenarioConfiguration: FormConfiguration<OuterFormSchema, string> | undefined;
    forms: FormList;
    remediationActions: Remediation[];
    dataMissingErrors: VerificationError[];
    fieldsWithExistingData: AnyTLDSFieldName[];
    customRules: FormRules<string>;
    legalEntityType: LegalEntityType | undefined;
    legalEntityTrustedFields?: LegalEntityTrustedFields[];
    remediationFieldAsOptional?: boolean;
}): PropsFromConfiguration<OuterFormSchema> | undefined;
export declare const makeTLDSFieldName: (formId: string, fieldName: string) => AnyTLDSFieldName;
export declare const isFieldRequiredToRemediateDataMissingError: (formId: string, field: string, dataMissingErrors: VerificationError[]) => boolean;
