/**
 * Copyright (c) OpenLens Maintainers. All rights reserved.
 * Licensed under MIT License. See LICENSE in root directory for more information.
 */
import type { Disposer } from "@openlens/utilities";
import type { CatalogCategory, CatalogEntityData, CatalogEntityKindData } from "./catalog-entity";
export type CategoryFilter = (category: CatalogCategory) => any;
export declare class CatalogCategoryRegistry {
    protected readonly categories: import("mobx").ObservableSet<CatalogCategory>;
    protected readonly groupKinds: Map<string, Map<string, CatalogCategory>>;
    protected readonly filters: import("mobx").ObservableSet<CategoryFilter>;
    constructor();
    add(category: CatalogCategory): Disposer;
    getById(id: string): CatalogCategory | undefined;
    get items(): CatalogCategory[];
    get filteredItems(): CatalogCategory[];
    getForGroupKind<T extends CatalogCategory>(group: string, kind: string): T | undefined;
    getEntityForData(data: CatalogEntityData & CatalogEntityKindData): import("./catalog-entity").CatalogEntity<import("./catalog-entity").CatalogEntityMetadata, import("./catalog-entity").CatalogEntityStatus, import("./catalog-entity").CatalogEntitySpec> | null;
    hasCategoryForEntity({ kind, apiVersion }: CatalogEntityData & CatalogEntityKindData): boolean;
    getCategoryForEntity<T extends CatalogCategory>(data: CatalogEntityData & CatalogEntityKindData): T | undefined;
    getByName(name: string): CatalogCategory | undefined;
    /**
     * Add a new filter to the set of category filters
     * @param fn The function that should return a truthy value if that category should be displayed
     * @returns A function to remove that filter
     */
    addCatalogCategoryFilter(fn: CategoryFilter): Disposer;
}
