import { CommerceEngine } from '../../../../../app/commerce-engine/commerce-engine.js';
import { CategoryFacetValueRequest } from '../../../../../features/commerce/facets/facet-set/interfaces/request.js';
import { categoryFacetSearchStateSelector } from '../../../../../features/facets/facet-search-set/category/category-facet-search-state-selector.js';
import { CategoryFacetValue, CoreCommerceFacet, CoreCommerceFacetOptions, CoreCommerceFacetState, FacetControllerType } from '../headless-core-commerce-facet.js';
import { SearchableFacetOptions } from '../searchable/headless-commerce-searchable-facet.js';
import { CategoryFacetSearch, CategoryFacetSearchState } from './headless-commerce-category-facet-search.js';
export type CategoryFacetOptions = Omit<CoreCommerceFacetOptions, 'toggleExcludeActionCreator' | 'toggleSelectActionCreator'> & SearchableFacetOptions;
/**
 * The state of the `CategoryFacet` sub-controller.
 *
 * @group Sub-controllers
 * @category CategoryFacet
 * */
export type CategoryFacetState = Omit<CoreCommerceFacetState<CategoryFacetValue>, 'type'> & {
    activeValue?: CategoryFacetValue;
    canShowLessValues: boolean;
    canShowMoreValues: boolean;
    hasActiveValues: boolean;
    selectedValueAncestry?: CategoryFacetValue[];
    facetSearch: CategoryFacetSearchState;
    type: 'hierarchical';
};
/**
 * The `CategoryFacet` sub-controller offers a high-level programming interface for implementing a commerce category
 * facet UI component.
 *
 * @group Sub-controllers
 * @category CategoryFacet
 */
export type CategoryFacet = Omit<CoreCommerceFacet<CategoryFacetValueRequest, CategoryFacetValue>, 'isValueExcluded' | 'toggleExclude' | 'toggleSingleExclude' | 'toggleSingleSelect'> & {
    facetSearch: Omit<CategoryFacetSearch, 'state'>;
    state: CategoryFacetState;
} & FacetControllerType<'hierarchical'>;
/**
 * @internal
 *
 * **Important:** This initializer is meant for internal use by headless only.
 * As an implementer, you must not import or use this initializer directly in your code.
 * You will instead interact with `CategoryFacet` sub-controller instances through the state of a `FacetGenerator`
 * sub-controller.
 *
 * @param engine - The headless commerce engine.
 * @param options - The `CategoryFacet` options used internally.
 * @returns A `CategoryFacet` sub-controller instance.
 * */
export declare function buildCategoryFacet(engine: CommerceEngine, options: CategoryFacetOptions): CategoryFacet;
export declare const getCategoryFacetState: (coreState: CoreCommerceFacetState<CategoryFacetValue>, facetSearchSelector: ReturnType<typeof categoryFacetSearchStateSelector>) => CategoryFacetState;
