/**
 * Shared Block rendering implementation.
 *
 * The default `@riverbankcms/sdk/rendering` surface wraps this with island
 * hydration; the strict `@riverbankcms/sdk/rendering/server` surface exports it
 * directly.
 */
import * as React from 'react';
import type { MediaAssetIndexItem, RouteMap, Theme } from '../../contracts';
import type { RiverbankClient } from '../../client/types';
import type { BlockKind } from '../../types';
import type { BlockOverrideComponent } from '../overrides';
export type { BlockOverrideComponent } from '../overrides';
export type BlockProps = {
    blockKind: BlockKind;
    blockId?: string | null;
    content: Record<string, unknown>;
    theme: Theme;
    siteId?: string;
    /**
     * Supabase storage URL for direct image access in SSR output and client
     * islands.
     */
    supabaseUrl?: string;
    /**
     * Canonical media sidecar for resolving identifier-only media values.
     */
    mediaAssets?: readonly MediaAssetIndexItem[];
    /**
     * Base URL for the CMS API. Interactive blocks need this for client-side
     * form, booking, event, and commerce calls.
     */
    apiBaseUrl?: string;
    /**
     * Portal token for customer portal Bearer auth.
     */
    portalToken?: string | null;
    /** Route lookup for CMS links inside block content. */
    routeMap?: RouteMap;
    /** Page identifier to routeId lookup for { kind: 'page' } links. */
    pagesByIdentifier?: Record<string, string>;
    /** ContentType -> identifier -> routeId lookup for { kind: 'entry' } links. */
    entriesByIdentifier?: Record<string, Record<string, string>>;
    pageId?: string;
    previewStage?: 'published' | 'preview';
    client?: RiverbankClient;
    usePlaceholders?: boolean;
    /**
     * Custom component to override default block rendering. When provided, renders
     * this component instead of the manifest-based default. Override components
     * receive the same serializable runtime context as page-level block overrides.
     *
     * @example
     * ```tsx
     * <Block
     *   blockKind="block.hero"
     *   content={heroContent}
     *   theme={theme}
     *   siteId={siteId}
     *   override={MyCustomHero}
     * />
     * ```
     */
    override?: BlockOverrideComponent;
};
export type BlockHydrationBootstrapConfig = {
    siteId?: string;
    supabaseUrl?: string;
    mediaAssets?: readonly MediaAssetIndexItem[];
};
export declare function toBlockHydrationBootstrapConfig(props: Pick<BlockProps, 'siteId' | 'supabaseUrl' | 'mediaAssets'>): BlockHydrationBootstrapConfig;
/**
 * Renders a single CMS block with optional data loading.
 *
 * Use this component when you want to render individual blocks outside of a full page context,
 * or when mixing CMS blocks with custom JSX.
 */
export declare function BlockContent(props: BlockProps): Promise<React.ReactElement<unknown, string | React.JSXElementConstructor<any>>>;
