import * as _c8y_client from '@c8y/client';
import { IManagedObject, QueriesUtil, InventoryService, UserService, IResult, Paging, IIdentified } from '@c8y/client';
import * as i1 from '@c8y/ngx-components';
import { NavigatorNode, GroupService, ModalService, AlertService, BreadcrumbService, AppStateService, OptionsService, NavigatorNodeData, GroupFragment, ClickOptions } from '@c8y/ngx-components';
import { Observable, BehaviorSubject, Subject } from 'rxjs';
import { Router, ActivatedRouteSnapshot } from '@angular/router';
import { ApiService } from '@c8y/ngx-components/api';
import * as i0 from '@angular/core';
import { InjectionToken, OnInit, EventEmitter, ChangeDetectorRef, SimpleChanges, ElementRef, ModuleWithProviders } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import * as i2 from 'ngx-bootstrap/collapse';
import * as i3 from 'ngx-bootstrap/dropdown';
import * as i4 from '@angular/forms';
import { AbstractControl, ValidationErrors } from '@angular/forms';
import * as _c8y_ngx_components_assets_navigator from '@c8y/ngx-components/assets-navigator';

declare enum AssetsNavigatorAction {
    FETCH = 0,
    NEXT = 1,
    REFRESH = 2,
    LOADING_DONE = 3
}

declare const ASSET_NAVIGATOR_CONFIG: InjectionToken<AssetNavigatorConfig>;
/**
 * Configuration object of the AssetsNavigatorModule.
 */
interface AssetNavigatorConfig {
    /**
     * Allows to enable smart groups in the module.
     * Default value: false.
     */
    smartGroups?: boolean;
    /**
     * Expands the root navigator node when the navigator is initialized.
     * Default value: false
     */
    openOnStart?: boolean;
    /**
     * Allows to change the position of the root group in the navigator.
     * The higher the value, the higher the position in navigation.
     * Default value: 2000.
     */
    rootNodePriority?: number;
    /**
     * Allows to drag and drop items in the asset navigator.
     * Default value: true.
     */
    disableDragAndDrop?: boolean;
    /**
     * Allows to override properies of the root group or hide it.
     * Setup examples:
     * - `rootNavigatorNode: true` - shows the default navigator node (default),
     * - `rootNavigatorNode: false` - hides the navigator node,
     * - `rootNavigatorNode: { label: 'New name', ... }` - overrides default navigator node,
     * - `rootNavigatorNode: new NavigatorNode({ label: 'New name', ... })` - overrides default navigator node,
     */
    rootNavigatorNode?: boolean | Partial<NavigatorNode | AssetNode>;
}

declare class DeviceGroupService {
    private migratedDeviceGroupService;
    constructor(migratedDeviceGroupService: GroupService);
    icon(mo: IManagedObject, open?: boolean): Promise<string>;
    isGroup(mo: IManagedObject): boolean;
    isDynamicGroup(mo: IManagedObject): boolean;
    isDataBroker(mo: IManagedObject): boolean;
    isDataBrokerActive(mo: IManagedObject): boolean;
    isAsset(mo: IManagedObject): boolean;
    isAnyGroup(mo: IManagedObject): boolean;
    isDevice(mo: IManagedObject): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<DeviceGroupService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DeviceGroupService>;
}

interface AssetNodeMo {
    id: string;
    type: string;
}
declare class AssetNodeService {
    rootNode: AssetNode;
    firstUrl: boolean;
    draggedData: AssetNode;
    queriesUtil: QueriesUtil;
    protected PAGE_SIZE: number;
    private refreshTrigger$;
    private rootGroupsFetched;
    rootGroups$: Observable<any>;
    inventory: InventoryService;
    apiService: ApiService;
    modal: ModalService;
    alert: AlertService;
    translateService: TranslateService;
    protected breadcrumbService: BreadcrumbService;
    protected user: UserService;
    protected appState: AppStateService;
    protected optionsService: OptionsService;
    moduleConfig: AssetNavigatorConfig;
    protected deviceGroupService: DeviceGroupService;
    protected router: Router;
    constructor();
    /**
     * Expands the navigator nodes on first navigation.
     * @param snapshot The current navigation snapshot.
     */
    expandNodesOnStart(snapshot: ActivatedRouteSnapshot): Promise<void>;
    /**
     * Expands all the given ids recursively. Stops if it does not find any.
     * @param node The node where the expanding should be started
     * @param ids The ids that should be expanded.
     */
    expandAll(node: AssetNode, ids: string[]): void;
    label(mo: IManagedObject): string;
    icon(mo: IManagedObject, open?: boolean): Promise<string>;
    isGroup(mo: IManagedObject): boolean;
    isDynamicGroup(mo: IManagedObject): boolean;
    isDataBroker(mo: IManagedObject): boolean;
    isDataBrokerActive(mo: IManagedObject): boolean;
    isAsset(mo: IManagedObject): boolean;
    isAnyGroup(mo: IManagedObject): boolean;
    isDevice(mo: IManagedObject): boolean;
    createRootNode(config?: NavigatorNodeData): AssetNode;
    createDynamicGroupNode(config: any): DynamicGroupNode;
    createAssetNode(config: Partial<AssetNode>): AssetNode;
    createChildNode(managedObject: any, config: Partial<AssetNode>): AssetNode | DynamicGroupNode;
    getRootNodes(customFilter?: any): Promise<any>;
    refresh(): void;
    fetchRootGroups(customFilter?: any): Promise<any>;
    getAllInventories(customFilter?: any): Promise<any>;
    getGroupItems(moId: string, extraFilter?: object, withChildren?: boolean, filterQuery?: string): Promise<_c8y_client.IResultList<IManagedObject>>;
    getUnassignedDevices(withChildren?: boolean, filterQuery?: string): Promise<_c8y_client.IResultList<IManagedObject>>;
    getDynamicGroupItems(groupQuery: string, filterObj?: any): Promise<_c8y_client.IResultList<IManagedObject>>;
    getDeviceChildren(moId: string, extraFilter?: object, filterQuery?: string, withChildren?: boolean): Promise<_c8y_client.IResultList<IManagedObject>>;
    getUnassignedDevicesQueryStr(filterQuery: any): string;
    groupQueryFilter(moId: string, filterQuery?: string): string;
    navRootQueryFilter(): {
        __filter: {
            type: GroupFragment;
            __has?: undefined;
        };
        __orderby: any[];
    } | {
        __filter: {
            __has: GroupFragment;
            type?: undefined;
        };
        __orderby: any[];
    };
    rootQueryFilter(): {
        __filter: {
            type: GroupFragment;
            __has?: undefined;
        };
        __orderby: any[];
    } | {
        __filter: {
            __has: GroupFragment;
            type?: undefined;
        };
        __orderby: any[];
    };
    onUpdate({ mo, root }: {
        mo: any;
        root: any;
    }): Observable<{
        data: IManagedObject;
        method: string;
        url: string;
    }>;
    isNewManagedObjectRoot(response?: Partial<IResult<IManagedObject>>): boolean;
    /**
     * Check if it is possible to drop a node after dragging.
     * @param dropOnRoot Is the drop performed on the root node
     */
    canDropNode(dropOnRoot: boolean): boolean;
    /**
     * There could be multiple breadcrumbs for devices,
     * so we set a preferred one on click on a device.
     * @param parents The parent nodes of the device to select the prefered one.
     */
    preferBreadcrumb(parents: NavigatorNode[]): void;
    protected createFilter(extraParams?: any): any;
    private buildCombinedQuery;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetNodeService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AssetNodeService>;
}

declare class LoadMoreNode extends NavigatorNode {
    static NAME: string;
    label: "Load more";
    icon: string;
    droppable: boolean;
    constructor();
    toString(): string;
    isGroup(): boolean;
}

declare class AssetNode extends NavigatorNode {
    protected service: AssetNodeService;
    protected config: NavigatorNodeData;
    static NAME: string;
    root: boolean;
    mo: any;
    hideDevices: boolean;
    filterQuery$: BehaviorSubject<string>;
    showChildDevices: boolean;
    /**
     * Asset node children (subentries).
     */
    children: AssetNode[];
    get hasChildren(): boolean;
    get isDevice(): boolean;
    get isDeviceOrProbablyChildDevice(): boolean;
    get isNeitherDeviceOrGroup(): boolean;
    events: Subject<AssetsNavigatorAction>;
    nodesFetched: Subject<void>;
    protected paging: Paging<AssetNodeMo>;
    protected loadMoreNode: LoadMoreNode;
    private onUpdateSubscription;
    constructor(service: AssetNodeService, config?: NavigatorNodeData);
    getPath(): string;
    refresh(mo?: any, method?: string): void;
    setLabel(): void;
    click(options?: ClickOptions): void;
    sort(): void;
    addManagedObject(mo: any): void;
    isChildAddition(childAdditions: any, mo: any): any;
    destroy(): void;
    get canDrop(): boolean;
    dragStart($event: any): void;
    dragEnd($event: any): void;
    drop($event: any): Promise<void>;
    hookEvents(): void;
    toString(): string;
    /**
     * Checks if the current node has child devices.
     */
    hasChildDevices(): boolean;
    protected fetch(): Promise<any>;
    protected updateIcon(open: any): Promise<void>;
    protected countChildren(): number;
    protected handleEvent(evt: AssetsNavigatorAction): Promise<void>;
    protected addNodes(res: any): void;
    protected toggleLoadMore(show: boolean): void;
    private moveNode;
    private showDropConfirm;
    private verifyNodeAccess;
    private addMovedNode;
    private isAsset;
    private removeMovedNode;
}

declare class DynamicGroupNode extends AssetNode {
    protected service: AssetNodeService;
    constructor(service: AssetNodeService, config?: {});
    get hasChildren(): boolean;
    get query(): any;
    protected fetch(): any;
}

interface AssetStatus {
    sendStatus: {
        icon: string;
        class: string;
        status: string;
        label: string;
        tooltip: string;
    };
    pushStatus: {
        icon: string;
        class: string;
        status: string;
        label: string;
        tooltip: string;
    };
    maintenanceStatus: boolean;
}
interface MaintenanceStatus {
    sendStatus: boolean;
    pushStatus: boolean;
    maintenanceStatus: {
        icon: string;
        class: string;
        tooltip: string;
    };
}

interface AssetSelectionChangeEvent {
    items: IIdentified | IIdentified[];
    change: {
        item: IManagedObject;
        isSelected: boolean;
    };
}
interface GroupNodeConfig {
    root?: boolean;
    mo?: IManagedObject;
    groupsOnly?: boolean;
    groupsSelectable?: boolean;
    showChildDevices?: boolean;
}
declare const CONFIG_OPTIONS_DEFAULT: AssetSelectorOptions;
interface AssetSelectorOptions {
    /**
     * Already selected devices.
     */
    selectedDevices?: IIdentified | IIdentified[];
    /**
     * Defines a label to be shown to the user.
     */
    label?: string;
    /**
     * Can the user select multiple assets.
     */
    multi?: boolean;
    /**
     * displays a filter input on every column when using the miller view.
     */
    showFilter?: boolean;
    /**
     * displays a column header on every column when using the miller view.
     */
    columnHeaders?: boolean;
    /**
     * Displays only the select column.
     */
    singleColumn?: boolean;
    /**
     * Set to true to mark it as required on a form.
     */
    required?: boolean;
    /**
     * In simple model-mode the result will only contain the IDs and name of the selected
     * assets. In full mode, everything is contained.
     */
    modelMode?: 'simple' | 'full';
    /**
     * Set this to true, if the selector should only show groups.
     */
    groupsOnly?: any;
    /**
     * Set this true, if groups should be selectable.
     */
    groupsSelectable?: any;
    /**
     * Enable to display global search in the asset-selector (only possible whithout device context).
     */
    search?: boolean;
    /**
     * Displays all unassigned devices in a custom root group.
     */
    showUnassignedDevices?: boolean;
    /**
     * Set the view of the asset selector with tree view as default.
     */
    view?: 'tree' | 'miller';
    /**
     * Used only for miller-view, displays the column level for the current node.
     * E.g if the index is one, this will be second column.
     */
    index?: number;
    /**
     * Used only for single column, the array contains all selected columns.
     */
    selectedColumns?: IIdentified[] | IIdentified;
    /**
     * Devices with children can be selected to show their child devices.
     */
    showChildDevices?: boolean;
    /**
     * Allows to show chips at the top with the currently selected asset for multi select.
     * For single select it shows the currently selected asset.
     */
    showSelected?: boolean;
    /**
     * Prevents automatic asset selection on component initialization.
     */
    preventInitialSelect?: boolean;
}

declare class GroupNodeService extends AssetNodeService {
    protected PAGE_SIZE: number;
    createGroupNode(config: GroupNodeConfig): GroupNode;
    createChildNode(config: GroupNodeConfig): GroupNode;
    static ɵfac: i0.ɵɵFactoryDeclaration<GroupNodeService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<GroupNodeService>;
}

declare class GroupNode extends AssetNode {
    protected service: GroupNodeService;
    static NAME: string;
    /**
     * Set this true, if only groups should be shown.
     */
    groupsOnly: boolean;
    /**
     * Set this true, if it groups are also selectable.
     */
    groupsSelectable: boolean;
    /**
     * Devices with children can be selected to show their child devices.
     */
    showChildDevices: boolean;
    /**
     * Group node children (subentries).
     */
    children: GroupNode[];
    /**
     * Creates a new node which shows only groups.
     *
     * @param service The service to use.
     * @param config  The default configuration of the node.
     * @param groupsOnly Set this true, if only groups should be shown.
     * @param selectable Set this true, if it is selectable.
     */
    constructor(service: GroupNodeService, config?: GroupNodeConfig);
    /**
     * Adds the MO as a child node.
     * @param mo ManagedObject
     */
    addManagedObject(mo: any): void;
    /**
     * Counts the number of children for the current node (with the exception of the UnassignedDevicesNode).
     */
    countChildren(): number;
    /**
     * Removes all child nodes except the UnassignedDevicesNode.
     */
    empty(): void;
    fetch(): Promise<any>;
    toString(): string;
    isGroup(): boolean;
}

declare class AssetSelectorService extends AssetNodeService {
    /**
     * Function which will check if the node is selectable.
     */
    private isNodeSelectableFn;
    /**
     * Sets the function that will decide if the node is selectable.
     * @param fn A boolean or a function that will decide if the node is selectable.
     */
    setIsNodeSelectable(fn: boolean | ((node: GroupNode) => boolean)): void;
    /**
     * Checks if the node is selectable.
     * @param node The node to check.
     */
    isNodeSelectable(node: GroupNode): boolean;
    /**
     * Simplifies the object model based on the selected mode.
     * @param obj The selected asset.
     * @param mode The mode which will decide what type of model will be returned.
     */
    normalizeValue(obj: Partial<IManagedObject>, modelMode: 'simple' | 'full'): Partial<IManagedObject> | IIdentified;
    simplifyModel(model: Partial<IManagedObject> | IIdentified[], mode: 'simple' | 'full'): Partial<IManagedObject> | IIdentified;
    /**
     * Returns the index of the currently selected item.
     * @param selected All selected items
     * @param selectedMo The new selected item-
     * @returns An index, or -1 if not found.
     */
    getIndexOfSelected(selected: Array<Partial<IIdentified>> | Partial<IIdentified>, selectedMo: IIdentified): any;
    private normalizeModelValue;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetSelectorService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AssetSelectorService>;
}

declare class AssetSelectorNodeComponent implements OnInit {
    private translateService;
    private cd;
    assetSelectorService: AssetSelectorService;
    /**
     * The current node.
     */
    node: GroupNode;
    /**
     * Root node. Node found at the top of the hierarchy.
     */
    rootNode: GroupNode;
    /**
     * All preselected items.
     */
    preselected: IIdentified | IIdentified[];
    /**
     * Should the path be shown.
     */
    showPath: boolean;
    /**
     * Can the user select multiple assets.
     */
    multi: boolean;
    /**
     * The current path to the node.
     */
    view: 'tree' | 'miller';
    /**
     * Used only for miller-view, displays the column level for the current node.
     * E.g if the index is one, this will be second column.
     */
    index: any;
    /**
     * Sets the active node.
     */
    active: GroupNode;
    /**
     * A function that should verify the need to add a column when a node is clicked.
     */
    handleNextMillerViewColumn: (node: GroupNode, index: number) => boolean;
    disabled: boolean;
    /**
     * Event, which indicates whether the loading of the node has completed.
     */
    isLoadingState: EventEmitter<boolean>;
    /**
     * Event that emits when a node is selected.
     */
    onSelect: EventEmitter<IManagedObject>;
    /**
     * Event that emits when a node is deselected.
     */
    onDeselect: EventEmitter<{
        deselectMode: 'single' | 'all';
        mo: IManagedObject;
    }>;
    breadcrumb: string;
    /**
     * @ignore
     */
    level: number;
    /**
     * @ignore
     */
    unsubscribe$: Subject<void>;
    isNodeSelectable: boolean;
    /** sets the `btn-pending` class in the load more button */
    isLoading: boolean;
    /**
     * @ignore
     */
    get expandTitle(): "Expand" | "Collapse";
    /**
     * @ignore only di
     */
    constructor(translateService: TranslateService, cd: ChangeDetectorRef, assetSelectorService: AssetSelectorService);
    /**
     * @ignore
     */
    ngOnInit(): Promise<void>;
    /**
     * Opens a node.
     */
    click(): void;
    setupBreadcrumbsAndLevel(node: GroupNode): void;
    /**
     * Selects the node and emits a change on the parent component.
     * @param node The node to select.
     */
    selected(node: GroupNode): void;
    /**
     * Handles clicks on a item in Miller View.
     * @param node The node that was clicked.
     */
    millerViewClick(node: GroupNode): void;
    /**
     * @ignore
     */
    ngOnDestroy(): void;
    isSelected(): boolean;
    isActive(): boolean;
    private updateSelection;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetSelectorNodeComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AssetSelectorNodeComponent, "c8y-asset-selector-node", never, { "node": { "alias": "node"; "required": false; }; "rootNode": { "alias": "rootNode"; "required": false; }; "preselected": { "alias": "preselected"; "required": false; }; "showPath": { "alias": "showPath"; "required": false; }; "multi": { "alias": "multi"; "required": false; }; "view": { "alias": "view"; "required": false; }; "index": { "alias": "index"; "required": false; }; "active": { "alias": "active"; "required": false; }; "handleNextMillerViewColumn": { "alias": "handleNextMillerViewColumn"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "isLoadingState": "isLoadingState"; "onSelect": "onSelect"; "onDeselect": "onDeselect"; }, never, never, true, never>;
}

declare class AssetSelectorBase {
    protected groupNodeService: GroupNodeService;
    protected inventory: InventoryService;
    protected assetSelectorService: AssetSelectorService;
    /**
     * Config object containing all options for the asset selector.
     */
    config: AssetSelectorOptions;
    /**
     * An array of predefined nodes.
     */
    selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified;
    /**
     * The loading state of the current node.
     */
    isLoading: boolean;
    /**
     * Emit the selected asset or assets.
     */
    onSelected: EventEmitter<AssetSelectionChangeEvent>;
    /**
     * Emits if the currently selected asset is cleared.
     */
    onClearSelected: EventEmitter<void>;
    private onChange;
    private onTouched;
    constructor(groupNodeService: GroupNodeService, inventory: InventoryService, assetSelectorService: AssetSelectorService);
    /**
     * @ignore
     */
    validate(control: AbstractControl): ValidationErrors;
    /**
     * @ignore
     */
    writeValue(obj: any): void;
    /**
     * @ignore
     */
    registerOnChange(fn: any): void;
    /**
     * @ignore
     */
    registerOnTouched(fn: any): void;
    /**
     * @ignore
     */
    doBlur(): void;
    /**
     * Deselects all expect the given one.
     * @param selectedMo The selected asset (optional, if empty -> just deselect all).
     */
    deselectAll(selectedMo?: IManagedObject): void;
    /**
     * Adds an managed object to the selected array and emits the change.
     * @param selectedMo The selected asset.
     */
    select(selectedMo: IManagedObject): void;
    /**
     * Removes a managed object from the selected array and emits the change.
     * @param selectedMo The selected asset.
     */
    deselect(selectedMo: IManagedObject): void;
    /**
     * Returns the index of the currently selected item.
     * @param selected All selected items
     * @param selectedMo The new selected item-
     * @returns An index, or -1 if not found.
     */
    getIndexOfSelected(selected: Array<Partial<IIdentified>> | Partial<IIdentified>, selectedMo: IIdentified): any;
    emitChange(selected: IIdentified | IIdentified[], item: IManagedObject, isSelected: boolean): void;
    createDefaultRootNode(): _c8y_ngx_components_assets_navigator.GroupNode;
    createManagedObjectRootNode(asset: IIdentified): Promise<_c8y_ngx_components_assets_navigator.GroupNode>;
}

/**
 * Displays a hierarchical tree selector for assets.
 */
declare class AssetSelectorComponent extends AssetSelectorBase implements OnInit {
    protected groupNodeService: GroupNodeService;
    protected inventory: InventoryService;
    protected assetSelectorService: AssetSelectorService;
    protected cd: ChangeDetectorRef;
    /**
     * Config object containing all options for the asset selector.
     */
    config: AssetSelectorOptions;
    /**
     * Defines the node, which should be displayed as active.
     */
    active: GroupNode;
    /**
     * Used only for miller-view, displays the column level for the current node.
     * E.g if the index is one, this will be second column.
     */
    index: number;
    /**
     * The asset to use as root.
     */
    asset: IIdentified;
    /**
     * The selected device.
     */
    selectedDevice: IManagedObject;
    /**
     * An array of predefined nodes.
     */
    selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified;
    /**
     * The node to use as root. You can either set this, or the asset to start from.
     */
    rootNode: GroupNode;
    /**
     * All currently selected assets.
     */
    selectedItems: IIdentified[] | IIdentified;
    container: '' | 'body';
    isNodeSelectable: boolean | ((node: IIdentified) => boolean);
    disabled: boolean;
    /**
     * Emits if one item was selected (all currently selected nodes).
     */
    onSelected: EventEmitter<AssetSelectionChangeEvent>;
    /**
     * Emits if the currently selected asset is cleared.
     */
    onClearSelected: EventEmitter<void>;
    /**
     * Used only for miller view. Emit the selected node and use it as a 'rootNode' for the new column.
     */
    onRowSelected: EventEmitter<any>;
    /**
     * Emits the current loading state of the node.
     */
    onLoad: EventEmitter<any>;
    /**
     * The current filter applied.
     */
    filterText: string;
    /**
     * Displays the global search at all times if the miller view is used
     * on root group level.
     */
    root: boolean;
    /**
     * @ignore
     */
    unsubscribe$: Subject<void>;
    /**
     * Returns the current header hight in pixel.
     */
    getHeaderHeight$: BehaviorSubject<number>;
    readonly ASSET_CONST: "Asset {{ assetId }}";
    private header;
    /**
     * @ignore only DI
     */
    constructor(groupNodeService: GroupNodeService, inventory: InventoryService, assetSelectorService: AssetSelectorService, cd: ChangeDetectorRef);
    /**
     * Checks when a node was selected, if a new column needs to be added.
     * @param node The node that was clicked.
     * @param index The current index of this node.
     * @returns True if the click was handled and a new column was added.
     */
    handleNextMillerViewColumn(node: GroupNode, index: number): boolean;
    /**
     * @ignore
     */
    ngOnInit(): Promise<void>;
    ngOnChanges(changes: SimpleChanges): Promise<void>;
    /**
     * @ignore
     */
    ngAfterViewInit(): void;
    /**
     * Changes the current root to one level back.
     */
    back(): void;
    /**
     * Clears the current filter.
     */
    clearFilters(): void;
    /**
     * Clears the currently selected device.
     */
    clearSelectedDevices(): void;
    isGroupSelected(): boolean;
    /**
     * @param nameFilter The name filter to apply.
     * @param moId The managed object ID to filter by.
     * @param showUnassignedDevices If true, it will show unassigned devices.
     * @return The filter query to apply.
     * @description
     * This method builds a filter query based on the provided name filter and managed object ID.
     */
    groupNameFilter(nameFilter: string, moId: any, showUnassignedDevices?: boolean): string;
    /**
     * Applies a filter.
     * @param filter The filter to apply.
     */
    applyFilter(filter: string): Promise<void>;
    /**
     * Check if the UnassignedDevice node is the rootNode.
     */
    isUnassignedDevicesNode(): boolean;
    /**
     * Called when the user resets the search result.
     */
    onSearchResultReset(selectedItem: any): void;
    /**
     * Called if the user clicks on a search result.
     */
    onSearchResultClick(mo: IManagedObject): Promise<void>;
    onLoading(isLoading: boolean): void;
    onSelect(mo: IManagedObject): void;
    onDeselect(config: {
        deselectMode: 'single' | 'all';
        mo: IManagedObject;
    }): void;
    private updateHeaderHeight;
    private isElementOrParentHidden;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetSelectorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AssetSelectorComponent, "c8y-asset-selector", never, { "config": { "alias": "config"; "required": false; }; "active": { "alias": "active"; "required": false; }; "index": { "alias": "index"; "required": false; }; "asset": { "alias": "asset"; "required": false; }; "selectedDevice": { "alias": "selectedDevice"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "rootNode": { "alias": "rootNode"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "container": { "alias": "container"; "required": false; }; "isNodeSelectable": { "alias": "isNodeSelectable"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "onSelected": "onSelected"; "onClearSelected": "onClearSelected"; "onRowSelected": "onRowSelected"; "onLoad": "onLoad"; }, never, never, true, never>;
}

declare class MillerViewComponent extends AssetSelectorBase implements OnInit {
    protected groupNodeService: GroupNodeService;
    protected inventory: InventoryService;
    protected assetSelectorService: AssetSelectorService;
    protected cd: ChangeDetectorRef;
    /**
     * Config object containing all options for the asset selector.
     */
    config: AssetSelectorOptions;
    /**
     * The asset to use as root.
     */
    asset: IIdentified;
    /**
     * The selected devices.
     */
    selectedDevice: IManagedObject;
    /**
     * The node to use as root. You can either set this, or the asset to start from.
     */
    rootNode: GroupNode;
    /**
     * Emits if the selection changes
     */
    onSelected: EventEmitter<AssetSelectionChangeEvent>;
    /**
     * Emits if the currently selected asset is cleared.
     */
    onClearSelected: EventEmitter<void>;
    /**
     * @ignore
     */
    millerViewWrapper: ElementRef;
    /**
     * The column array will contain all currently selected nodes
     *  which will form the miller view columns (only one per level).
     */
    columns: any[];
    /**
     * The current filter applied. Used for the empty state text in the view.
     */
    filterText: string;
    /**
     * Index of the column used to check where to show the loading state.
     */
    columnIndex: number;
    container: '' | 'body';
    configOptionsDefault: AssetSelectorOptions;
    /**
     * Cached padding top value to avoid recalculating on every change detection cycle.
     */
    private _cachedPaddingTop;
    constructor(groupNodeService: GroupNodeService, inventory: InventoryService, assetSelectorService: AssetSelectorService, cd: ChangeDetectorRef);
    /**
     * @ignore
     */
    ngOnInit(): Promise<void>;
    /**
     * @ignore
     */
    ngOnChanges(changes: SimpleChanges): Promise<void>;
    /**
     * Returns the cached padding top value for the miller view header.
     * The value is calculated once during initialization and when config changes.
     *
     * @returns A unit value (as string) that is multiplied by --c8y-unit-base CSS custom property
     */
    getPaddingTop(): string;
    /**
     * Create a new column with the selected node as root.
     */
    addNewColumn(node: any): void;
    /**
     * Change the loading state of the asset selector.
     */
    onLoad(event: any): void;
    /**
     * Add the selected node to the selected array.
     */
    onSelectionChange(event: AssetSelectionChangeEvent): void;
    /**
     * Calculates and caches the padding top value based on configuration options.
     *
     * The method determines the appropriate header height by considering:
     * - Whether selected items are shown (showSelected)
     * - Whether search functionality is enabled (search)
     * - Whether single column mode is active (singleColumn)
     * - Whether a label is present (label length > 0)
     */
    private _calculatePaddingTop;
    static ɵfac: i0.ɵɵFactoryDeclaration<MillerViewComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MillerViewComponent, "c8y-asset-selector-miller", never, { "config": { "alias": "config"; "required": false; }; "asset": { "alias": "asset"; "required": false; }; "selectedDevice": { "alias": "selectedDevice"; "required": false; }; "rootNode": { "alias": "rootNode"; "required": false; }; "container": { "alias": "container"; "required": false; }; }, { "onSelected": "onSelected"; "onClearSelected": "onClearSelected"; }, never, never, true, never>;
}

declare class AssetSelectorModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetSelectorModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AssetSelectorModule, never, [typeof i1.CoreModule, typeof i1.CommonModule, typeof i2.CollapseModule, typeof i3.BsDropdownModule, typeof i1.CoreSearchModule, typeof i4.FormsModule, typeof AssetSelectorNodeComponent, typeof AssetSelectorComponent, typeof MillerViewComponent], [typeof AssetSelectorNodeComponent, typeof AssetSelectorComponent, typeof MillerViewComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AssetSelectorModule>;
}

/**
 * @deprecated The AssetsNavigatorModule is now loaded as a plugin from the dtm-plugins remote.
 * A future version will remove this module from this library.
 */
declare class AssetsNavigatorModule {
    static config(config?: AssetNavigatorConfig): ModuleWithProviders<AssetsNavigatorModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetsNavigatorModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AssetsNavigatorModule, never, [typeof i1.ModalModule, typeof AssetSelectorModule, typeof i1.DeviceStatusModule], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AssetsNavigatorModule>;
}

declare class AssetNodeFactory {
    private service;
    moduleConfig: AssetNavigatorConfig;
    constructor(service: AssetNodeService, moduleConfig: AssetNavigatorConfig);
    get(): AssetNode;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetNodeFactory, [null, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AssetNodeFactory>;
}

export { ASSET_NAVIGATOR_CONFIG, AssetNode, AssetNodeFactory, AssetNodeService, AssetSelectorComponent, AssetSelectorModule, AssetSelectorNodeComponent, AssetsNavigatorAction, AssetsNavigatorModule, CONFIG_OPTIONS_DEFAULT, DeviceGroupService, DynamicGroupNode, GroupNode, GroupNodeService, LoadMoreNode, MillerViewComponent };
export type { AssetNavigatorConfig, AssetNodeMo, AssetSelectionChangeEvent, AssetSelectorOptions, AssetStatus, GroupNodeConfig, MaintenanceStatus };
//# sourceMappingURL=index.d.ts.map
