import { BehaviorSubject, Subject } from 'rxjs';
import { SearchBuilderComponentDefinition } from './interfaces/component-definition.interface';
import { SearchBuilderQuery } from './interfaces/query.interface';
import * as i0 from "@angular/core";
export declare class SearchBuilderService {
    query: SearchBuilderQuery;
    queryChange: Subject<SearchBuilderQuery>;
    validationChange: BehaviorSubject<boolean>;
    private _componentId;
    private readonly _components;
    private _validation;
    /**
     * Add a component to the internal list of components
     */
    registerComponent(component: SearchBuilderComponentDefinition): void;
    /**
     * Bulk registration of components
     * (Just a helper method)
     */
    registerComponents(components: SearchBuilderComponentDefinition[]): void;
    /**
     * Get a registered component class
     */
    getComponent(name: string): SearchBuilderComponentDefinition;
    /**
     * Update the internal search query state
     * note that the query will be immutable
     */
    setQuery(query: SearchBuilderQuery): void;
    /**
     * Return the current query state
     */
    getQuery(): SearchBuilderQuery;
    /**
     * Trigger the observable to indicate the query has been updated
     */
    queryHasChanged(): void;
    /**
     * Store the validation state of the query
     */
    setValid(id: number, valid: boolean): void;
    /**
     * Generate a unique id for each component
     */
    generateComponentId(): number;
    static ɵfac: i0.ɵɵFactoryDeclaration<SearchBuilderService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SearchBuilderService>;
}
