import type { FieldSuggestionsFacet } from '../../../api/commerce/search/query-suggest/query-suggest-response.js';
import type { CommerceEngine } from '../../../app/commerce-engine/commerce-engine.js';
import { type Controller } from '../../controller/headless-controller.js';
import type { CategoryFieldSuggestionsValue, CategoryFieldSuggestionsState as CoreCategoryFieldSuggestionsState } from '../../field-suggestions/category-facet/headless-category-field-suggestions.js';
import type { CategoryFacetOptions } from '../core/facets/category/headless-commerce-category-facet.js';
import type { FacetControllerType } from '../core/facets/headless-core-commerce-facet.js';
/**
 * The state of the `CategoryFilterSuggestions` controller.
 *
 * @group Buildable controllers
 * @category CategoryFilterSuggestions
 */
export type CategoryFilterSuggestionsState = CoreCategoryFieldSuggestionsState & Pick<FieldSuggestionsFacet, 'facetId' | 'displayName' | 'field'>;
/**
 * The `CategoryFilterSuggestions` controller provides methods to request and interact with category facet suggestions
 * based on a specific field for a given search query.
 *
 * @alpha  This controller relies on a Commerce API functionality that is not yet generally available. If you wish to
 * use this feature in an implementation, please contact your Coveo representative.
 *
 * @group Buildable controllers
 * @category CategoryFilterSuggestions
 */
export interface CategoryFilterSuggestions extends Controller, FacetControllerType<'hierarchical'> {
    /**
     * Resets the query in the controller state and clears the category filter suggestions.
     */
    clear(): void;
    /**
     * Returns the serialized search parameters for the current search query and specified category filter suggestion.
     *
     * For example, `q=jeans&cf-ec-category=Clothes,Pants`.
     *
     * In a typical scenario, this method should called when the user selects a category filter suggestion from a
     * standalone search box. The returned string is then used to pass the correct URL query parameters or fragment when
     * redirecting the browser to the search page.
     *
     * When the user selects a category filter suggestion from the main search box on the search page, use the `select`
     * method instead.
     *
     * @param value - The category filter suggestion to serialize.
     * @returns The serialized search parameters for the current search query and specified category filter suggestion.
     */
    getSearchParameters(value: CategoryFieldSuggestionsValue): string;
    /**
     * Clears all facet values, selects the specified category filter suggestion, updates the query, and executes a new
     * search request.
     *
     * In a typical scenario, this method should be called when the user selects a category filter suggestion from the
     * main search box on the search page.
     *
     * When the user selects a category filter suggestion from a standalone search box, use the `getSearchParameters`
     * method instead.
     *
     * @param value - The category filter suggestion to select.
     */
    select(value: CategoryFieldSuggestionsValue): void;
    /**
     * Sets the query in the controller state to the specified value and requests category filter suggestions based on the
     * updated query.
     *
     * For example, if this method is called with `jeans` as an argument, it will request values from the controller's
     * field (e.g., `ec_category`) that would return results if selected when the search query is `jeans` (such as
     * `Clothing`, `Clothing;Pants`, and `Clothing;Shorts`).
     *
     * @param query - The search query to use as context to request the category filter suggestions. In a typical
     * scenario, this should set to the current value of the search box input.
     */
    updateQuery(query: string): void;
    state: CategoryFilterSuggestionsState;
}
/**
 * The `CategoryFilterSuggestions` controller provides methods to request and interact with category facet suggestions
 * based on a specific field for a given search query.
 *
 * @alpha  This controller relies on a Commerce API functionality that is not yet generally available. If you wish to
 * use this feature in an implementation, please contact your Coveo representative.
 *
 * @param engine - The headless commerce engine.
 * @param options - The options for the `CategoryFilterSuggestions` controller.
 * @returns A `CategoryFilterSuggestions` controller instance.
 *
 * @group Buildable controllers
 * @category CategoryFilterSuggestions
 */
export declare function buildCategoryFilterSuggestions(engine: CommerceEngine, options: CategoryFacetOptions): CategoryFilterSuggestions;
