import { type ProductListing, type ProductListingState, type ProductListingSummaryState, type Search, type SearchState, type SearchSummaryState, type Summary } from '@coveo/headless/commerce';
import { type CSSResultGroup, LitElement } from 'lit';
import type { CommerceBindings } from '../atomic-commerce-interface/atomic-commerce-interface';
import { type ItemRenderingFunction } from '../../common/item-list/item-list-common';
import { type ItemDisplayDensity, type ItemDisplayImageSize, type ItemDisplayLayout } from '../../common/layout/item-layout-utils';
import type { InitializableComponent } from '../../../decorators/types';
import '../atomic-product/atomic-product';
import '../atomic-product-template/atomic-product-template';
declare const AtomicCommerceProductList_base: typeof LitElement;
/**
 * The `atomic-commerce-product-list` component is responsible for displaying products.
 *
 * @part outline - The outline of each product when the display prop is set to "grid" or "list".
 * @part result-list - The element containing all products when the display prop is set to "grid" or "list".
 * @part result-list-grid-clickable-container - The clickable wrapper containing each product when the display prop is set to "grid".
 * @part result-table - The table element when the display prop is set to "table".
 * @part result-table-heading - The thead element when the display prop is set to "table".
 * @part result-table-heading-row - The tr element nested under the thead when the display prop is set to "table".
 * @part result-table-heading-cell - The `th` elements nested under `thead` > `tr` when the display prop is set to "table".
 * @part result-table-body - The tbody element when the display prop is set to "table".
 * @part result-table-row - All tr elements nested under tbody when the display prop is set to "table".
 * @part result-table-row-even - The even tr elements nested under tbody when the display prop is set to "table".
 * @part result-table-row-odd - The odd tr elements nested under tbody when the display prop is set to "table".
 * @part result-table-cell - The `td` elements nested under each `tbody` > `tr` when the display prop is set to "table".
 *
 * @slot default - The default slot where the product templates are defined.
 */
export declare class AtomicCommerceProductList extends AtomicCommerceProductList_base implements InitializableComponent<CommerceBindings> {
    static styles: CSSResultGroup;
    searchOrListing: Search | ProductListing;
    summary: Summary<ProductListingSummaryState | SearchSummaryState>;
    private itemRenderingFunction;
    private loadingFlag;
    private nextNewResultTarget?;
    private productListCommon;
    private productTemplateProvider;
    private unsubscribeSummary;
    bindings: CommerceBindings;
    error: Error;
    private isAppLoaded;
    private isEveryProductReady;
    private resultTemplateRegistered;
    private templateHasError;
    searchOrListingState: SearchState | ProductListingState;
    summaryState: SearchSummaryState | ProductListingSummaryState;
    /**
     * The spacing of various elements in the product list, including the gap between products, the gap between parts of a
     * product, and the font sizes of different parts in a product.
     */
    density: ItemDisplayDensity;
    /**
     * The desired layout to use when displaying products. Layouts affect how many products to display per row and how
     * visually distinct they are from each other.
     */
    display: ItemDisplayLayout;
    /**
     * The expected size of the image displayed for products.
     */
    imageSize: ItemDisplayImageSize;
    /**
     * The desired number of placeholders to display while the product list is loading.
     */
    numberOfPlaceholders: number;
    /**
     * Sets a rendering function to bypass the standard HTML template mechanism for rendering products.
     * You can use this function while working with web frameworks that don't use plain HTML syntax such as React, Angular,
     * or Vue.
     *
     * Do not use this method if you integrate Atomic in a plain HTML deployment.
     *
     * @param productRenderingFunction
     */
    setRenderFunction(productRenderingFunction: ItemRenderingFunction): Promise<void>;
    initialize(): void;
    disconnectedCallback(): void;
    updated(changedProperties: Map<string, unknown>): Promise<void>;
    private updateProductsReadyState;
    render(): import("lit-html").TemplateResult<1>;
    private validateProps;
    private initSearchOrListing;
    private initSummary;
    private initProductTemplateProvider;
    private initProductListCommon;
    private createSelectChildProductListener;
    private selectChildProductCallback;
    private computeListDisplayClasses;
    private renderGrid;
    private renderList;
    private renderTable;
    private get focusTarget();
}
declare global {
    interface HTMLElementTagNameMap {
        'atomic-commerce-product-list': AtomicCommerceProductList;
    }
}
export {};
