import { KlevuRecord } from "@klevu/core";
import { EventEmitter } from "../../stencil-public-runtime";
export type KlevuProductOnProductClick = {
  product: Partial<KlevuRecord>;
  originalEvent: MouseEvent;
};
export type KlevuProductAddToCart = {
  product: Partial<KlevuRecord>;
};
export type KlevuProductVariant = "line" | "small" | "default";
export type KlevuProductSlots = "top" | "image" | "info" | "bottom";
/**
 * Generic product component that renders product based on KlevuRecord of klevu/core
 * All parts of the component can be replaced with slots.
 *
 * By default the products fill the whole space, but it can be limited
 * with --klevu-product-width and --klevu-product-small-width css variables.
 *
 * @slot top - Empty are before any product content
 * @slot image - Image region of component
 * @slot info - Swatches, titles, brands and prices slot
 * @slot bottom - Empty are after product content
 * @slot addtocart - Add to cart button slot at the end of the component
 *
 * @csspart product-image The image element of component
 * @csspart product-base The container element of whole
 * @csspart product-swatch Single swatch element under the image
 * @csspart product-brandname The brand name of the product
 * @csspart product-name The name of the product
 * @csspart product-description The description of the product
 * @csspart product-price The price of the product
 * @csspart product-vatcaption The vat caption of the product
 * @csspart product-ooscaption The out of stock caption of the product
 * @csspart product-variants-count The number of variants
 * @csspart product-addtocart The add to cart button
 */
export declare class KlevuProduct {
  #private;
  /**
   * What variant of product to render
   */
  variant: KlevuProductVariant;
  /**
   * Product data
   */
  product?: Partial<KlevuRecord>;
  /**
   * Show add to cart button
   */
  showAddToCart?: boolean;
  /**
   * Show ratings
   */
  showRatings?: boolean;
  /**
   * Show ratings
   */
  showRatingsCount?: boolean;
  /**
   * Text for add to cart button
   */
  tAddToCart?: string;
  /**
   * Do not show swatches in products
   */
  hideSwatches?: boolean;
  /**
   * Hides price from info
   */
  hidePrice?: boolean;
  /**
   * Hides description from info
   */
  hideDescription?: boolean;
  /**
   * Hides name from info
   */
  hideName?: boolean;
  /**
   * Hides image
   */
  hideImage?: boolean;
  /**
   * Hides brand information
   */
  hideBrand?: boolean;
  /**
   * Force certain width for product. Do not use max-width
   */
  fixedWidth?: boolean;
  /**
   * When mousing over product, show hover image if available
   */
  hideHoverImage?: boolean;
  /**
   * What key to use for brand value
   */
  keyBrand: string;
  /**
   * What key to use for name value
   */
  keyName: string;
  /**
   * What key to use for description value
   */
  keyDescription: string;
  /**
   * Text to be added after the price. Usually used to indicate that does the price include VAT or not.
   */
  vatCaption?: string;
  /**
   * To show the product code next to product name.
   */
  showProductCode?: boolean;
  /**
   * Caption to show if product is out of stock
   */
  outOfStockCaption?: string;
  /**
   * Fallback image url to be used when the product image fails to load.
   */
  fallbackProductImageUrl?: string;
  /**
   * Turns the component into a product wrapper that handles events
   * automatically. It assumes that whole product is clickable.
   *
   * Component has only one main slot that can contain any content.
   *
   * To prevent product clicking use `event.stopPropagation()` in your
   * events.
   *
   * Component still requires the product parameter as it's data is used
   * send correct data to Klevu analytics
   */
  isWrapper?: boolean;
  /**
   * Show variants count
   */
  showVariantsCount: boolean;
  hoverImage?: string;
  /**
   * When products has been clicked
   */
  klevuProductClick: EventEmitter<KlevuProductOnProductClick>;
  /**
   * When the product add to cart is clicked
   */
  klevuAddToCart: EventEmitter<KlevuProductAddToCart>;
  connectedCallback(): Promise<void>;
  render(): any;
}
