import type { InteractiveProduct, Product } from '@coveo/headless/commerce';
import { type CSSResultGroup, LitElement } from 'lit';
import type { CommerceStore } from '../atomic-commerce-interface/store';
import type { CommerceRecommendationStore } from '../atomic-commerce-recommendation-interface/store';
import type { InteractiveProductContextEvent, ProductContextEvent } from '../product-template-component-utils/context/product-context-controller';
import type { DisplayConfig } from '../../common/item-list/context/item-display-config-context-controller';
import { type ItemRenderingFunction } from '../../common/item-list/item-list-common';
import type { ItemDisplayDensity, ItemDisplayImageSize, ItemDisplayLayout } from '../../common/layout/item-layout-utils';
import '../atomic-product-text/atomic-product-text';
import '../atomic-product-link/atomic-product-link';
import '../atomic-product-image/atomic-product-image';
declare const AtomicProduct_base: typeof LitElement;
/**
 * The `atomic-product` component is used internally by the `atomic-commerce-product-list` and `atomic-commerce-recommendation-list` components.
 */
export declare class AtomicProduct extends AtomicProduct_base {
    private productRootRef?;
    private linkContainerRef?;
    private itemLayoutController;
    static styles: CSSResultGroup;
    /**
     * Whether `atomic-product-link` components nested in the `atomic-product` should stop click event propagation.
     */
    stopPropagation?: boolean;
    /**
     * The product item.
     */
    product: Product;
    /**
     * The InteractiveProduct item.
     */
    interactiveProduct: InteractiveProduct;
    /**
     * Global Atomic state.
     */
    store?: CommerceStore | CommerceRecommendationStore;
    /**
     * The product content to display.
     */
    content?: ParentNode;
    /**
     * The product link to use when the product is clicked in a grid layout.
     *
     * @default - An `atomic-product-link` without any customization.
     */
    linkContent: ParentNode;
    /**
     * How products should be displayed.
     */
    display: ItemDisplayLayout;
    /**
     * How large or small products should be.
     */
    density: ItemDisplayDensity;
    /**
     * The size of the visual section in product list items.
     *
     * This is overwritten by the image size defined in the product content, if it exists.
     */
    imageSize: ItemDisplayImageSize;
    /**
     * The classes to add to the product element.
     */
    classes: string;
    /**
     * A unique identifier for tracking the loading state of this product component.
     * When set, this flag is added to the global loading flags array and automatically
     * removed when the component finishes its initial render. This allows the framework
     * to determine when all components have finished loading.
     *
     * @internal
     */
    loadingFlag?: string;
    /**
     * Internal function used in advanced setups, which lets you bypass the standard HTML template system.
     * Particularly useful for Atomic React.
     *
     * @internal
     */
    renderingFunction: ItemRenderingFunction;
    resolveProduct: (event: ProductContextEvent) => void;
    resolveInteractiveProduct: (event: InteractiveProductContextEvent) => void;
    resolveStopPropagation: (event: CustomEvent) => void;
    resolveProductDisplayConfig: (event: ProductContextEvent<DisplayConfig>) => void;
    handleClick: (event: MouseEvent) => void;
    clickLinkContainer: () => void;
    connectedCallback(): Promise<void>;
    disconnectedCallback(): void;
    private getContentHTML;
    private getLinkHTML;
    render(): import("lit-html").TemplateResult<1>;
    firstUpdated(_changedProperties: Map<string, unknown>): void;
}
declare global {
    interface HTMLElementTagNameMap {
        'atomic-product': AtomicProduct;
    }
}
export {};
