import { GestureResponderEvent } from 'react-native';
import { BehaviorSubject } from 'rxjs';
import { CustomFieldModelOptions, DateInputFieldModelOptions, FieldModel, FieldModelOptions, InputFieldModelOptions, KeyboardInputFieldModelOptions, LabelFieldModelOptions, LineBreakFieldModelOptions, OptionInputFieldModelOptions, SwitchInputFieldModelOptions, TimeInputFieldModelOptions } from './FieldModel';
import { ButtonFieldModelOptions } from './FieldModel/ButtonFieldModel';
import { ErrorFieldModelOptions } from './FieldModel/ErrorFieldModel';
import FormElement, { FormElementOptions } from './FormElement';
export declare type ModifierType = 'margin';
export declare type RowOnPressCallback = (row: RowModel, event: GestureResponderEvent) => any;
export interface RowModelOptions extends FormElementOptions {
    onPress?: RowOnPressCallback;
    sectionIndex: number;
    rowIndex: number;
}
declare type AddFieldModelOverrideKeys = 'form' | 'sectionIndex' | 'rowIndex' | 'fieldIndex';
export declare type AddFieldModelOptions = Omit<FieldModelOptions, AddFieldModelOverrideKeys>;
export interface FormModifier {
    type: ModifierType;
    value: any;
}
export default class RowModel extends FormElement {
    onPress: RowOnPressCallback | undefined;
    fields: FieldModel[];
    sectionIndex: number;
    rowIndex: number;
    private _modifiers;
    constructor(options: RowModelOptions);
    get lastField(): FieldModel | undefined;
    getSection(): import("./SectionModel").default;
    isFirstRow(): boolean;
    isLastRow(): boolean;
    addField(field: FieldModel): this;
    addFlex(optionsOrFlex?: Omit<FieldModelOptions, AddFieldModelOverrideKeys> | FieldModelOptions['flex']): this;
    /** Add a new line. */
    addLine(options?: Omit<LineBreakFieldModelOptions, AddFieldModelOverrideKeys>): this;
    /** Modify the current line. */
    setLine(options?: Omit<LineBreakFieldModelOptions, AddFieldModelOverrideKeys>): this;
    addLabel(optionsOrTitle: Omit<LabelFieldModelOptions, AddFieldModelOverrideKeys> | LabelFieldModelOptions['title']): this;
    addErrorLabel(options?: Omit<ErrorFieldModelOptions, AddFieldModelOverrideKeys>): this;
    addErrorLine(options?: Omit<ErrorFieldModelOptions & LineBreakFieldModelOptions, AddFieldModelOverrideKeys>): this;
    addCustom(optionsOrRender: Omit<CustomFieldModelOptions, AddFieldModelOverrideKeys> | CustomFieldModelOptions['render']): this;
    addKeyboardInput<T>(options: Omit<KeyboardInputFieldModelOptions<T>, AddFieldModelOverrideKeys>): this;
    addButton(options: Omit<ButtonFieldModelOptions, AddFieldModelOverrideKeys>): this;
    addDateInput(options: Omit<DateInputFieldModelOptions, AddFieldModelOverrideKeys>): this;
    addTimeInput(options: Omit<TimeInputFieldModelOptions, AddFieldModelOverrideKeys>): this;
    addOptionInput<T>(options: Omit<OptionInputFieldModelOptions<T>, AddFieldModelOverrideKeys>): this;
    addSwitchInput(options: Omit<SwitchInputFieldModelOptions, AddFieldModelOverrideKeys> | BehaviorSubject<boolean>): this;
    addInputLabel<T, I = T>(options: Omit<InputFieldModelOptions<T, I>, AddFieldModelOverrideKeys>): this;
    /** Set margin between two fields (once). */
    setMargin(margin: number): this;
    private _applyModifiers;
    private _applyMarginModifier;
    private _fieldOptionsOverrides;
}
export {};
