import { FilterManager, KlevuMerchandisingOptions, KlevuRecord, KlevuSearchSorting } from "@klevu/core";
import { KlevuProductCustomEvent } from "../../components";
import { KlevuProductOnProductClick, KlevuProductSlots } from "../klevu-product/klevu-product";
import { ViewportSize } from "../klevu-util-viewport/klevu-util-viewport";
/**
 * Full merchandising app to power up your product grid pages
 */
export declare class KlevuMerchandising {
  #private;
  /**
   * Should display pagination instead of load next
   */
  usePagination?: boolean;
  /**
   * Count of products for page
   */
  limit: number;
  /**
   * Which category products
   */
  category: string;
  /**
   * Category title
   */
  categoryTitle: string;
  /**
   * Order of results
   */
  sort?: KlevuSearchSorting;
  /**
   * How many filters per facet to show
   */
  filterCount?: number;
  /**
   * Object to override and settings on search options
   */
  options?: KlevuMerchandisingOptions;
  /**
   * Order filters in given order
   */
  filterCustomOrder?: {
    [key: string]: string[];
  };
  /**
   * Pass custom options for the sort dropdown
   */
  sortOptions?: Array<{
    value: KlevuSearchSorting;
    text: string;
  }>;
  currentViewPortSize?: ViewportSize;
  results: Array<KlevuRecord | undefined>;
  manager: FilterManager;
  el: HTMLElement;
  connectedCallback(): Promise<void>;
  watchPropHandler(newValue: string, oldValue: string): Promise<void>;
  productClickHandler(event: KlevuProductCustomEvent<KlevuProductOnProductClick>): void;
  componentDidLoad(): Promise<void>;
  /**
   * Rendering function created to put custom content to klevu-product slots. Provides a product being rendered.
   * This function is called for each slot (top, image, info and bottom) of the component. Second parameter provides
   * slot requested. Return null for slots that you do not want to render.
   */
  renderProductSlot?: (product: KlevuRecord, productSlot: KlevuProductSlots) => HTMLElement | string | null;
  render(): any;
}
