import { BooleanOperator } from '../boolean-operator';
import { Subject } from 'rxjs';
import { IncrementingCounter } from '../../../utility/incrementing-counter';
import { Query } from '../query/query';
import { EditablePredicate } from './editable-predicate';
import { Predicate } from './predicate';
/**
 * A complex, editable `Predicate`. Represents an inner node in the predicate tree, that can process changes of `Query` objects
 * held by its child nodes. It can notify the parent tree node about changes to the held `Query`.
 */
export declare class EditableClausePredicate extends EditablePredicate {
    protected _operator: BooleanOperator;
    protected _bracketSubPredicateText: boolean;
    protected _predicates: Map<number, Predicate>;
    protected _childUpdated$: Subject<void>;
    protected _childCounter: IncrementingCounter;
    protected _query: Query;
    constructor(_operator: BooleanOperator, parentNotifier?: Subject<void>, initiallyVisible?: boolean, _bracketSubPredicateText?: boolean);
    get query(): Query;
    destroy(): void;
    show(): void;
    /**
     * Shows the predicates with the given ids. Skips ids that don't exist.
     * @param predicateIds the ids of the predicates that should be shown.
     */
    showPredicates(predicateIds: Array<number>): void;
    /**
     * Adds new child predicate of type {@link EditableElementaryPredicate}
     * @param initiallyVisible whether the new predicate should be initially visible
     */
    addNewElementaryPredicate(initiallyVisible?: boolean): number;
    /**
     * Adds new child predicate of type {@link EditableClausePredicate}
     * @param operator the operator of the child clause predicate
     * @param initiallyVisible whether the new predicate should be initially visible
     */
    addNewClausePredicate(operator: BooleanOperator, initiallyVisible?: boolean): number;
    /**
     * Generates an id for the new predicate, adds it into the map and updates the query
     *
     * If you want to add an editable predicate, use one of the other methods, so that this predicate can react to changes.
     * @param predicate the new predicate
     */
    addPredicate(predicate: Predicate): number;
    removePredicate(id: number): boolean;
    getPredicateMap(): Map<number, Predicate>;
    /**
     * Updates the `Query` and notifies the parent.
     */
    protected updateQueryAndNotify(): void;
    /**
     * Updates the value of the [_query]{@link ClausePredicate#_query} attribute.
     *
     * See [combineQueries()]{@link Query#combineQueries} for more information.
     */
    protected updateQuery(): void;
    /**
     * @returns the `Array` of {@link Query} objects stored within this object's [_predicates]{@link ClausePredicate#_predicates} attribute.
     */
    protected get queries(): Array<Query>;
    /**
     * Sets this predicate and all its sub-predicates to visible.
     */
    protected showAll(): void;
    private initializeFilterTextSegmentsGenerator;
}
