import type { LayoutConfig } from "@seekora-ai/ui-sdk-types";
import type { SeekoraClient, TrackContext } from "@seekora-ai/search-sdk";
import type { PageContext } from "./page-sentinels";
import type { SearchStateManager } from "@seekora-ai/ui-sdk-core";
import type { SwapMap } from "../theme-cards/swap";
export interface MountLayoutOptions {
    config: LayoutConfig;
    client: SeekoraClient;
    pageContext?: PageContext;
    /**
     * V4 analytics emission context (SCRUM-259). When supplied, threaded into
     * SearchProvider so ui-sdk descendants (Object Clicked / Search Impression
     * / Facet Applied) fire through the consumer's analytics-next instance.
     * Storefront callers pass `{ analytics: window.SeekoraAnalytics, orgcode,
     * xstoreid }` after the theme bootstrap finishes loading analytics-next.
     */
    trackContext?: TrackContext | null;
    /**
     * Called once after the SearchProvider mounts, with the live
     * SearchStateManager instance. Used by v4.js to wire the theme input
     * value to Seekora's search state (predictive surface). SCRUM-268.
     */
    onStateManagerReady?: (mgr: SearchStateManager) => void;
    /**
     * A Promise already holding the first search response, pre-fired by the
     * boot.js proxy route server-side (SCRUM-268 early-fire optimisation).
     * Threaded into LayoutRenderer → SearchProvider → SearchStateManager so
     * the first render skips one backend RTT. Consumed exactly once.
     */
    initialResultsPromise?: Promise<import("@seekora-ai/search-sdk").SearchResponse | null> | null;
    /**
     * The query string used when `initialResultsPromise` was pre-fired.
     * Must match the surface's initial query exactly for the optimisation
     * to engage (e.g. URL `?q` for search, "" for collection).
     */
    initialQuery?: string;
    /**
     * Called once after the first render with search results populated.
     * Storefront callers use this to delay anti-flash CSS reveal.
     */
    onReady?: () => void;
    /**
     * Shopify Hydrogen React provider config. When both shopDomain and
     * storefrontToken are supplied, children are wrapped in
     * `<ShopifyProvider>` from @shopify/hydrogen-react so that
     * hydrogen hooks (useCart, useShop, etc.) work inside the layout
     * tree. Non-Shopify storefronts omit this entirely.
     */
    shopifyConfig?: {
        shopDomain?: string;
        storefrontToken?: string;
        storefrontApiVersion?: string;
        countryCode?: string;
        languageCode?: string;
    };
    /**
     * Server-harvested theme card template and swap map from boot config
     * (boot.themeHarvest). When present, threaded into LayoutRenderer so
     * SearchResults renders the merchant's real card HTML instead of the
     * React-replica fallback. SCRUM-267.
     */
    themeHarvest?: {
        cardTemplateHtml?: string;
        swapMap?: SwapMap;
        /** Merchant's Shopify money_format (e.g. "Rs. {{amount}}") for price swap. */
        moneyFormat?: string;
        /** Harvested predictive-search row template HTML (null when unavailable). */
        predictiveCardTemplateHtml?: string | null;
        /** Swap map for predictive rows — form is always null. */
        predictiveSwapMap?: SwapMap | null;
        /** CSS class of the theme's product-rows <ul> (predictive grid sizing). */
        predictiveListClass?: string | null;
        /** outerHTML of one harvested theme query-suggestion chip. */
        suggestionChipTemplateHtml?: string | null;
        /** CSS class of the theme's chips <ul>. */
        suggestionListClass?: string | null;
        /** CSS selectors inside the chip for text node(s) and anchor(s). */
        suggestionChipSwap?: {
            text: string;
            link: string;
        } | null;
    } | null;
}
export declare function mountLayout(host: HTMLElement, opts: MountLayoutOptions): {
    unmount: () => void;
};
//# sourceMappingURL=mount.d.ts.map