import * as i0 from '@angular/core';
import { OnInit, ModuleWithProviders } from '@angular/core';
import * as i3 from '@angular/forms';
import { ControlValueAccessor } from '@angular/forms';
import * as i4 from '@ngx-translate/core';
import { TranslateService } from '@ngx-translate/core';
import { HttpClient } from '@angular/common/http';
import * as i2 from '@angular/common';

interface QueryBuilderFieldMap {
    [key: string]: QueryField;
}
interface QueryBuilderSettings {
    allowRuleSets?: boolean;
}
interface QueryRule {
    field: string;
    type: string;
    operator: string;
    value?: any;
}
interface QueryRuleSet {
    condition: string;
    rules: Array<QueryRuleSet | QueryRule>;
}
interface QueryField {
    name: string;
    type: string;
    value?: string;
    options?: SelectOption[];
    settings?: QueryFieldSettings;
}
interface QueryFieldSettings {
    nullableOperators?: boolean;
    emptyOperators?: boolean;
}
interface SelectOption {
    name: string;
    value: any;
}

declare class OperatorsService {
    private translate;
    readonly INPUT_TYPE_STRING = "string";
    readonly INPUT_TYPE_INTEGER = "integer";
    readonly INPUT_TYPE_DOUBLE = "double";
    readonly INPUT_TYPE_TIME = "time";
    readonly INPUT_TYPE_DATE = "date";
    readonly INPUT_TYPE_SELECT = "select";
    readonly INPUT_TYPE_BOOLEAN = "boolean";
    readonly INPUT_TYPE_MULTI_SELECT = "multi_select";
    readonly NULLABLE_OPERATORS: string[];
    readonly EMPTY_OPERATORS: string[];
    readonly MULTI_SELECT_OPERATORS: string[];
    private readonly defaultOperator;
    private readonly operatorsMap;
    private readonly operatorsDisplayNames;
    private readonly operatorsDisplayNames___old;
    constructor(translate: TranslateService);
    getOperators(rule: QueryRule, fieldMap: QueryBuilderFieldMap): string[];
    getDefaultOperator(): string;
    getOperatorsWithoutInput(): string[];
    getOperatorDisplayName(operator: string): string;
    private getAvailableTypes;
    static ɵfac: i0.ɵɵFactoryDeclaration<OperatorsService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<OperatorsService>;
}

declare class TranslateUiService {
    private translateService;
    private http;
    private availableLanguages;
    private translationPath;
    constructor(translateService: TranslateService, http: HttpClient);
    init(language?: string): void;
    private loadTranslation;
    setLanguage(language: string): void;
    getCurrentLanguage(): string;
    getAvailableLanguages(): string[];
    static ɵfac: i0.ɵɵFactoryDeclaration<TranslateUiService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TranslateUiService>;
}

declare class NgxQueryBuilderComponent implements OnInit, ControlValueAccessor {
    translate: TranslateService;
    private translateUiService;
    operatorsService: OperatorsService;
    private _language;
    set language(value: string);
    get language(): string;
    fieldMap: QueryBuilderFieldMap;
    settings: QueryBuilderSettings;
    disabled: boolean;
    data: QueryRuleSet;
    parent: QueryRuleSet;
    index: number;
    constructor(translate: TranslateService, translateUiService: TranslateUiService, operatorsService: OperatorsService);
    ngOnInit(): void;
    /**** ControlValueAccessor START ****/
    onChange: (data: QueryRuleSet) => void;
    onTouched: () => void;
    writeValue(data: any): void;
    registerOnChange(fn: (data: QueryRuleSet) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    /**** ControlValueAccessor END ****/
    addRule(): void;
    removeRule(index: number): void;
    addRuleSet(): void;
    removeRuleSet(index: number): void;
    changeCondition(value: string): void;
    changeField(rule: QueryRule, index: number): void;
    hasParentRuleSet(): boolean;
    getEmptyRuleSetData(): QueryRuleSet;
    getFields(): QueryField[];
    getInputType(rule: QueryRule): string;
    getRuleOptions(rule: QueryRule): any;
    convertToRuleSet(model: QueryRuleSet | QueryRule): QueryRuleSet;
    convertToRule(model: QueryRuleSet | QueryRule): QueryRule;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxQueryBuilderComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NgxQueryBuilderComponent, "ngx-ntk-query-builder", never, { "language": { "alias": "language"; "required": false; }; "fieldMap": { "alias": "fieldMap"; "required": false; }; "settings": { "alias": "settings"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "data": { "alias": "data"; "required": false; }; "parent": { "alias": "parent"; "required": false; }; "index": { "alias": "index"; "required": false; }; }, {}, never, never, false, never>;
}

declare class NgxNtkQueryBuilderModule {
    static forRoot(): ModuleWithProviders<NgxNtkQueryBuilderModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxNtkQueryBuilderModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NgxNtkQueryBuilderModule, [typeof NgxQueryBuilderComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i4.TranslateModule], [typeof NgxQueryBuilderComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NgxNtkQueryBuilderModule>;
}

export { NgxNtkQueryBuilderModule, NgxQueryBuilderComponent };
export type { QueryBuilderFieldMap, QueryBuilderSettings, QueryField, QueryFieldSettings, QueryRule, QueryRuleSet, SelectOption };
