import { InjectionToken, Injector } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs';
import { GenericHookType, ExtensionPointForPlugins, GenericHookOptions } from '../common/extension-hooks';
import { PluginsResolveService } from '../plugins';
import { Search } from './search.model';
import * as i0 from "@angular/core";
/**
 * A hook to use for Multi Provider extension.
 * Consider using the `hookSearch` function instead.
 * @deprecated Please don't use the search factory. It will be refactored soon.
 */
export declare const HOOK_SEARCH: InjectionToken<unknown>;
/**
 * You can either provide a single `Search` as parameter:
 * ```typescript
 *  hookSearch(...)
 * ```
 *
 * Or an array to directly register multiple:
 * ```typescript
 *  hookSearch([...])
 * ```
 *
 * Or you provide an Service that implements `ExtensionFactory<Search>`
 * ```typescript
 *  export class MySearchFactory implements ExtensionFactory<Search> {...}
 *  ...
 *  hookSearch(MySearchFactory)
 * ```
 * A typed alternative to `HOOK_SEARCH`.
 * @param search The `Search`'s or `ExtensionFactory` to be provided.
 * @returns An `Provider` to be provided in your module.
 * @deprecated Please don't use the search factory. It will be refactored soon.
 */
export declare function hookSearch(search: GenericHookType<Search>, options?: Partial<GenericHookOptions>): import("@angular/core").ValueProvider | import("@angular/core").ClassProvider | import("@angular/core").ExistingProvider;
export declare enum SearchFilters {
    ONLY_DEVICES = "onlyDevices",
    ONLY_GROUPS_AND_ASSETS = "onlyGroupsAndAssets",
    ALL_FILTERS = "allFilters"
}
/**
 * A service which defines the search function.
 */
export declare class SearchService extends ExtensionPointForPlugins<Search> {
    private router;
    constructor(rootInjector: Injector, router: Router, plugins: PluginsResolveService);
    /**
     * Returns the current state.
     * @readonly
     * @returns The current set of actions.
     */
    get state(): Set<Search>;
    /**
     * Adds a new item to the search in the header.
     * @param item The item to add.
     */
    add(item: Search): void;
    /**
     * Removes an search from the header.
     * @param item The item to remove.
     */
    remove(item: Search): void;
    protected setupItemsObservable(): Observable<Search[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<SearchService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SearchService>;
}
//# sourceMappingURL=search.service.d.ts.map