import { type Recommendations, type RecommendationsState, type RecommendationsSummaryState, type Summary } from '@coveo/headless/commerce';
import { type CSSResultGroup, LitElement } from 'lit';
import { type ItemRenderingFunction } from '../../common/item-list/item-list-common';
import { type ItemDisplayBasicLayout, type ItemDisplayDensity, type ItemDisplayImageSize } from '../../common/layout/item-layout-utils';
import type { InitializableComponent } from '../../../decorators/types';
import type { CommerceBindings } from '../atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface';
import '../atomic-product/atomic-product';
import '../atomic-product-template/atomic-product-template';
declare const AtomicCommerceRecommendationList_base: typeof LitElement;
/**
 * The `atomic-commerce-recommendation-list` component displays a list of product recommendations by applying one or more product templates.
 *
 * @part result-list - The element containing the list of product recommendations.
 * @part result-list-grid-clickable-container - The parent of a recommended product and the clickable link encompassing it.
 * @part result-list-grid-clickable - The clickable link encompassing a recommended product.
 * @part outline - The outline of a recommended product.
 * @part label - The label of the recommendation list.
 * @part previous-button - The previous button.
 * @part next-button - The next button.
 * @part indicators - The list of indicators.
 * @part indicator - A single indicator.
 * @part active-indicator - The active indicator.
 *
 * @slot default - The default slot where the product templates are defined.
 *
 * @cssprop --atomic-recs-number-of-columns - The number of columns in the grid.
 * @cssprop --atomic-recs-number-of-rows - The number of rows in the grid.
 */
export declare class AtomicCommerceRecommendationList extends AtomicCommerceRecommendationList_base implements InitializableComponent<CommerceBindings> {
    static styles: CSSResultGroup;
    recommendations: Recommendations;
    summary: Summary<RecommendationsSummaryState>;
    private itemRenderingFunction;
    private loadingFlag;
    private nextNewProductTarget?;
    private productListCommon;
    private productTemplateProvider;
    private unsubscribeSummary;
    bindings: CommerceBindings;
    error: Error;
    private isAppLoaded;
    private productTemplateRegistered;
    private templateHasError;
    private isEveryProductReady;
    recommendationsState: RecommendationsState;
    summaryState: RecommendationsSummaryState;
    private currentPage;
    /**
     * The identifier used by the Commerce API to retrieve the desired recommendation list for the component.
     * You can configure recommendation lists and get their respective slot IDs through the Coveo Merchandising Hub (CMH).
     * You can include multiple `atomic-commerce-recommendation-list` components with different slot IDs in the same page to display several recommendation lists.
     */
    slotId?: string;
    /**
     * The unique identifier of the product to use for seeded recommendations.
     */
    productId?: string;
    /**
     * The layout to apply when displaying the products. This does not affect the display of the surrounding list itself.
     * To modify the number of products per column and row, modify the `--atomic-recs-number-of-columns` and `--atomic-recs-number-of-rows` CSS variables.
     */
    display: ItemDisplayBasicLayout;
    /**
     * 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 the parts of a product.
     */
    density: ItemDisplayDensity;
    /**
     * The expected size of the image displayed on the recommended products.
     */
    imageSize: ItemDisplayImageSize;
    /**
     * The number of products to display per page.
     * The products will be displayed in a carousel if this property is set.
     * This does not affect the display of the list itself, only the number of recommendation pages.
     * If you want to display the recommendations in a carousel with a single row, set the `--atomic-recs-number-of-columns` CSS variable to the same value as this property.
     */
    productsPerPage?: number;
    /**
     * The [heading level](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) to use for the heading label, from 1 to 6.
     * When set to 0, a `div` will be used instead of an Heading Element.
     */
    headingLevel: number;
    watchNumberOfRecommendationsPerPage(): Promise<void>;
    /**
     * Sets a rendering function to bypass the standard HTML template mechanism when 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 implementation.
     *
     * @param productRenderingFunction
     */
    setRenderFunction(productRenderingFunction: ItemRenderingFunction): Promise<void>;
    /**
     * Moves to the previous page, when the carousel is activated.
     */
    previousPage(): Promise<void>;
    /**
     * Moves to the next page, when the carousel is activated.
     */
    nextPage(): Promise<void>;
    initialize(): void;
    disconnectedCallback(): void;
    updated(changedProperties: Map<string, unknown>): Promise<void>;
    private updateProductsReadyState;
    private get focusTarget();
    private get augmentedRecommendationListState();
    private validateProps;
    private validateSlotID;
    private renderListHeading;
    private get subsetRecommendations();
    private get numberOfPages();
    private get currentIndex();
    private get hasNoProducts();
    private initRecommendations;
    private initSummary;
    private getAtomicProductProps;
    private initProductTemplateProvider;
    private initProductListCommon;
    private createSelectChildProductListener;
    private selectChildProductCallback;
    private computeListDisplayClasses;
    render(): import("lit-html").TemplateResult<1>;
    private renderAsGrid;
    private renderRecommendationList;
    private get shouldRender();
}
declare global {
    interface HTMLElementTagNameMap {
        'atomic-commerce-recommendation-list': AtomicCommerceRecommendationList;
    }
}
export {};
