import React, { type ReactNode } from "react";
import type { Theme } from "./schema";
export type SiteTopShellBehavior = "normal-flow" | "shared-sticky-shell" | "banner-above-overlay-header";
export type SiteTopShellPlan = Readonly<{
    behavior: "normal-flow";
    contentStartsUnderHeader: boolean;
    requiresHeaderOffset: false;
}> | Readonly<{
    behavior: "shared-sticky-shell";
    contentStartsUnderHeader: false;
    requiresHeaderOffset: false;
}> | Readonly<{
    behavior: "banner-above-overlay-header";
    contentStartsUnderHeader: true;
    requiresHeaderOffset: true;
}>;
export type SiteChromeLayoutNodes = Readonly<{
    headerNode: ReactNode;
    bannerNode?: ReactNode;
    bannerShellBehavior?: SiteTopShellBehavior;
    footerNode: ReactNode;
}>;
type HeaderPositioning = NonNullable<Theme["header"]>["positioning"];
export type SiteDocumentLayoutMode = "normal-flow" | "header-overlay";
export type SiteDocumentPlan = Readonly<{
    topShell: SiteTopShellPlan;
    layoutMode: SiteDocumentLayoutMode;
}>;
export type SiteDocumentPlanInput = Readonly<{
    headerPositioning: HeaderPositioning;
    headerVariant?: Theme["header"]["variant"] | null;
    hasVisibleBanner: boolean;
}>;
export type SiteDocumentLayoutProps = Omit<SiteChromeLayoutNodes, "bannerShellBehavior"> & Readonly<{
    plan: SiteDocumentPlan;
    children: ReactNode;
    as?: "div" | "main";
    role?: string;
    className?: string | null;
    minHeightClassName?: string | null;
    contentClassName?: string | null;
    style?: React.CSSProperties;
}>;
export declare function getStandaloneHeaderShellClassName(theme: Theme): string | null;
export declare function renderSiteTopChrome({ headerNode, bannerNode, bannerShellBehavior, }: Pick<SiteChromeLayoutNodes, "headerNode" | "bannerNode" | "bannerShellBehavior">): ReactNode;
export declare function planSiteDocument(input: SiteDocumentPlanInput): SiteDocumentPlan;
export declare function SiteDocumentLayout({ plan, headerNode, bannerNode, footerNode, children, as: Root, role, className, minHeightClassName, contentClassName, style, }: SiteDocumentLayoutProps): React.ReactElement;
export declare function planSiteTopShell(input: Readonly<{
    headerPositioning: HeaderPositioning;
    headerVariant?: Theme["header"]["variant"] | null;
    hasVisibleBanner: boolean;
}>): SiteTopShellPlan;
export {};
