import { JinjaVariable } from '../context/JinjaVariable.js';
import { FormContextValue } from './FormContextValue.js';
import { FieldConfig, FieldGroupConfig, FieldState } from './types.js';
type FieldStateListener = (state: FieldState) => void;
export declare class FormVariable extends JinjaVariable {
    private state;
    private stateListeners;
    readonly config: FieldConfig;
    constructor(config: FieldConfig, parent?: string);
    getState(): FieldState;
    setState(state: FieldState): void;
    patchState(state: Partial<FieldState>): void;
    onChangeState(listener: FieldStateListener): () => void;
    isValid(context: FormContextValue): Promise<boolean>;
}
export declare class FormObjectVariable extends FormVariable {
    readonly children: Record<string, FormVariable[]>;
    constructor(config: FieldGroupConfig, children?: Record<string, FormVariable[]>, parent?: string);
}
interface RepeatableConstructor {
    condensed: FormVariable;
    expanded: Record<string, FormContextValue>;
    config: FieldConfig;
    parent?: string;
}
export declare class FormRepeatableVariable extends FormVariable {
    private repeating;
    condensed: FormVariable;
    expanded: Record<string, FormContextValue>;
    private repeatListeners;
    constructor({ condensed, expanded, config, parent }: RepeatableConstructor);
    setRepeating(value: boolean): void;
    isRepeating(): boolean;
    onChangeRepeat(listener: (value: boolean) => void): () => void;
}
export {};
//# sourceMappingURL=FormVariable.d.ts.map