/**
 * Shared `<head>` + base `<style>` block for every server-rendered HTML page
 * Neotoma ships (root landing, bundled product docs, OAuth UI, future
 * surfaces).
 *
 * Surfaces import `renderBundledPageShell` and pass an options bag plus their
 * body-level HTML; the shell handles the boilerplate (`<!doctype html>`,
 * meta tags, viewport, robots policy) and provides a tokenised base `<style>`
 * sourced from
 * [src/services/bundled_pages/tokens.ts](./tokens.ts). Surface-specific styles
 * are appended via `extraHead`.
 *
 * Code coupling instead of comment coupling: when two bundled-page surfaces
 * "share a palette," they share this function — the design-system validator
 * enforces that registered surfaces emit `<!doctype html>` only through here.
 */
import { type BundledPageTokenName } from "./tokens.js";
export interface BundledPageShellOptions {
    /** Document title for `<title>`. */
    readonly title: string;
    /**
     * `<meta name="robots">` value. Defaults to `"index, follow"`. Bundled
     * surfaces (sandbox, local, install docs) typically pass `"noindex, nofollow"`.
     */
    readonly robots?: string;
    /**
     * Optional language attribute for `<html lang="...">`. Defaults to `"en"`.
     */
    readonly lang?: string;
    /**
     * Path to the favicon. Defaults to `/favicon.ico`.
     */
    readonly faviconHref?: string;
    /**
     * Optional CSS class(es) for `<body>`.
     */
    readonly bodyClassName?: string;
    /**
     * Surface-specific extra `<head>` content. The shell already emits
     * `<meta charset>`, `<meta viewport>`, `<title>`, `<link rel="icon">`, the
     * tokenised base `<style>`, and the optional surface `<style>` from
     * `extraStyles`. Use this for additional `<link>`, `<meta>`, or `<script>`
     * tags only.
     */
    readonly extraHead?: string;
    /**
     * Surface-specific CSS appended after the shared base style block. Inline
     * `${TOKENS.foo.hex}` strings sourced from
     * [tokens.ts](./tokens.ts) — never raw hex literals.
     */
    readonly extraStyles?: string;
    /**
     * Optional `<script>` body appended just before `</body>`. The shell does
     * not include a default script.
     */
    readonly inlineScript?: string;
    /**
     * Subset of canonical tokens to expose as CSS variables in `:root`. Defaults
     * to all of them. Pass a narrow list when a surface only needs a few tokens
     * to keep the inlined CSS small.
     */
    readonly tokensToExpose?: readonly BundledPageTokenName[];
}
/**
 * Render the base shared `<style>` block: CSS variables for both light and
 * dark themes, body typography, default link color, and a few utility
 * classes used across surfaces (`.muted`, `.cta`).
 */
export declare function renderBaseBundledPageStyles(tokensToExpose?: readonly BundledPageTokenName[]): string;
/**
 * Render a complete bundled-page HTML document. Body-only fragments call this
 * once at their top-level entry point.
 */
export declare function renderBundledPageShell(opts: BundledPageShellOptions, bodyHtml: string): string;
/**
 * Variant family for {@link renderBundledBanner}. Mirrors the React `Banner`
 * primitive in `frontend/src/components/ui/banner.tsx` — keep the two in sync.
 */
export type BundledBannerVariant = "info" | "success" | "warning" | "destructive" | "neutral";
export interface BundledBannerOptions {
    readonly variant?: BundledBannerVariant;
    /** Optional bold heading rendered above the body. */
    readonly title?: string;
    /**
     * Body HTML. Callers are responsible for escaping any user-supplied data
     * before passing it in.
     */
    readonly body?: string;
    /**
     * Optional inline SVG markup or text glyph rendered as the leading icon.
     * Pass `null` to omit the icon column entirely.
     */
    readonly icon?: string | null;
}
/**
 * CSS for the bundled-page `.banner` markup contract.
 *
 * Surfaces can opt in by appending the return value to their `extraStyles`
 * block. The class names match the React `Banner` primitive
 * (`frontend/src/components/ui/banner.tsx`) so server-rendered and
 * client-rendered surfaces stay visually aligned.
 */
export declare function renderBundledBannerStyles(): string;
/**
 * Render a `.banner` block matching the React `Banner` markup contract.
 *
 * The class names track `frontend/src/components/ui/banner.tsx` (`banner`,
 * `banner--<variant>`, `banner__icon`, `banner__body`, `banner__title`,
 * `banner__content`). Surfaces that emit banners must include
 * {@link renderBundledBannerStyles} in their `extraStyles`.
 */
export declare function renderBundledBanner(opts: BundledBannerOptions): string;
/**
 * Re-export the palette so consumers can `import { renderBundledPageShell, P }`
 * in one go. Most surfaces pull both the shell and a couple of token hexes.
 */
export { BUNDLED_PAGE_PALETTE as P } from "./tokens.js";
//# sourceMappingURL=html_shell.d.ts.map