/**
 * Layout component with header and footer
 *
 * Renders site header and footer around content. Fetches site data if not provided.
 */
import { buildMenu, buildFooterMenu, buildLogo } from '../../navigation';
import type { RiverbankClient, SiteResponse } from '../../client/types';
export type HeaderData = {
    menu: ReturnType<typeof buildMenu>;
    logo: ReturnType<typeof buildLogo>;
    site: SiteResponse['site'];
    theme: SiteResponse['theme'];
    routes: SiteResponse['routes'];
};
export type FooterData = {
    menu: ReturnType<typeof buildMenu>;
    footerMenu: ReturnType<typeof buildFooterMenu>;
    logo: ReturnType<typeof buildLogo>;
    site: SiteResponse['site'];
    theme: SiteResponse['theme'];
    routes: SiteResponse['routes'];
};
export type LayoutProps = {
    siteData?: SiteResponse;
    client?: RiverbankClient;
    siteId?: string;
    slug?: string;
    domain?: string;
    children: React.ReactNode;
    header?: boolean | ((data: HeaderData) => React.ReactNode);
    footer?: boolean | ((data: FooterData) => React.ReactNode);
    headerVariant?: 'classic' | 'centered' | 'transparent' | 'floating' | 'editorial';
    /**
     * Whether the current request has an active portal session.
     * Used to resolve portal navigation labels (e.g. "Login" vs "My account").
     *
     * @default false
     */
    hasPortalSession?: boolean;
    /** Render stage for internal links and block transforms. */
    previewStage?: 'published' | 'preview';
    /**
     * Wrap layout content in ThemeScope to inject theme CSS variables and styles.
     * Enable this to use built-in theme styling from the CMS.
     * Disable if you're bringing your own styles and want to avoid SDK-injected theme variables.
     *
     * Note: Disabling this while using the default header/footer (blocks) may result in unstyled output.
     *
     * @default true
     */
    useThemeScope?: boolean;
};
/**
 * Layout component that wraps content with site header and footer.
 *
 * This is a server/RSC-safe component. The default `@riverbankcms/sdk/rendering`
 * `Page` and `Block` surfaces mount CMS island hydration automatically, while
 * the strict `@riverbankcms/sdk/rendering/server` surface stays bootstrap-free.
 * If a custom host renders hydratable CMS islands through the strict server
 * surface, mount `BlocksIslandsHydrator` from
 * `@riverbankcms/sdk/rendering/client` explicitly.
 *
 * @example With pre-fetched site data (recommended)
 * ```tsx
 * import { Layout } from '@riverbankcms/sdk/rendering/server';
 * import { Page } from '@riverbankcms/sdk/rendering';
 *
 * const site = await client.getSite({ slug: 'my-site' });
 *
 * <Layout siteData={site}>
 *   <Page {...pageData} />
 * </Layout>
 * ```
 *
 * @example With strict server rendering
 * ```tsx
 * import { Layout, Page } from '@riverbankcms/sdk/rendering/server';
 * import { BlocksIslandsHydrator } from '@riverbankcms/sdk/rendering/client';
 *
 * const site = await client.getSite({ slug: 'my-site' });
 *
 * <Layout siteData={site}>
 *   <BlocksIslandsHydrator siteId={site.site.id} supabaseUrl={site.supabaseUrl} />
 *   <Page {...pageData} />
 * </Layout>
 * ```
 */
export declare function Layout({ siteData: providedSiteData, client, siteId, slug, domain, children, header, footer, headerVariant, hasPortalSession, previewStage, useThemeScope, }: LayoutProps): Promise<import("react/jsx-runtime").JSX.Element>;
