import * as Data from "../Data/Interfaces.js";
import { default as BaseModel, IBaseModelOptions } from "./BaseModel.js";
import ContextModel from "./ContextModel.js";
import FeatureModel, { ISetValueOptions } from "./FeatureModel.js";
import GroupModel from "./GroupModel.js";
import ControllerModel from "./ControllerModel.js";
export interface ISetModelOptions extends IBaseModelOptions {
    parent: ContextModel;
    data: Data.ISetData;
}
export interface IValueChangedArgs {
    group: GroupModel;
    feature: FeatureModel;
    name: string;
    value: any;
}
export default class SetModel extends BaseModel {
    private m_parent;
    private m_controller;
    private m_groups;
    private m_valueChangesAreSilent;
    constructor(options: ISetModelOptions);
    get parent(): ContextModel;
    get groups(): Array<GroupModel>;
    get controller(): ControllerModel;
    private get controllerTypeName();
    get valueChangesAreSilent(): boolean;
    set valueChangesAreSilent(value: boolean);
    valueChanged(args: IValueChangedArgs): void;
    onValueChanged(subscriber: (args: IValueChangedArgs) => void): Jade.EventBusSubscription;
    toJSON(): Data.ISetData;
    hasChanges(): boolean;
    getValue(key: string, defaultValue?: any): any;
    setValue(key: string, value: any, options?: ISetValueOptions): any;
    setErrors(): void;
    private ensureController;
    private createController;
}
