import { FilterManager, KlevuKMCRecommendationOptions, KlevuMerchandisingOptions, KlevuQueryResult, KlevuSearchOptions, KlevuSearchSorting } from "@klevu/core";
import { EventEmitter } from "../../stencil-public-runtime";
import { KlevuProductCustomEvent } from "../../components";
import { KlevuProductOnProductClick } from "../klevu-product/klevu-product";
export type AllQueryOptions = KlevuMerchandisingOptions | KlevuKMCRecommendationOptions | KlevuSearchOptions;
/**
 * __klevu-query__ component is a special kind of component that makes queries to Klevu defined by the
 * __type__ parameter. It also listens to clicks to __klevu-product__ -component and sends analytical data to Klevu
 * based on that. This components gives you ability to create any kind of UI with Klevu components or by using your own
 * components! Just use __klevu-query__ to fetch the data and __klevu-product__ to render the product
 * cards. Whole content of __klevu-product__ can be replaced with your content.
 */
export declare class KlevuQuery {
  #private;
  /**
   * What kind of query
   */
  type: "search" | "merchandising" | "recommendation";
  /**
   * Should search view event be sent. View event is important for analytical cases.
   * In case of a search this should be used only when creating a landing page for search.
   */
  sendSearchViewEvent?: boolean;
  /**
   * Object to override and settings on search options
   */
  options?: AllQueryOptions;
  /**
   * How to sort
   */
  sort?: KlevuSearchSorting;
  /**
   * What's the limit on page
   */
  limit?: number;
  /**
   * Offset of results
   */
  offset?: number;
  /**
   * To how many filters limit results to
   */
  filterCount?: number;
  /**
   * Which category to do merchandising. Required for "merchandising" type
   */
  category?: string;
  /**
   * Which category title to have on page. Required for "merchandising" type
   */
  categoryTitle?: string;
  /**
   * What to search. Required for "search" type.
   */
  searchTerm?: string;
  /**
   * Which recommendation to fetch from Klevu Merchant Center. Required for "recommendation" type
   */
  recommendationId?: string;
  /**
   * @klevu/core FilterManager used for filters. If none is set, new one is created
   */
  manager: FilterManager;
  /**
   * Should component listen to changes to filters
   */
  updateOnFilterChange?: boolean;
  onPropertyChange(): void;
  /**
   * Force component to fetch results again
   */
  fetchAgain(): Promise<void>;
  klevuQueryResult: EventEmitter<{
    result: KlevuQueryResult;
    manager: FilterManager;
  }>;
  connectedCallback(): Promise<void>;
  disconnectedCallback(): void;
  onProductClick(event: KlevuProductCustomEvent<KlevuProductOnProductClick>): void;
  render(): any;
}
