import type { AppHeadConfig } from './types/config-types';
/**
 * Generate the full HTML document shell wrapping page content.
 *
 * @param content - The rendered page/layout HTML (no document wrapper)
 * @param headConfig - Head configuration from stx.config.ts
 * @param options - Additional options for script/style injection
 * @returns Complete HTML document
 */
export declare function generateDocumentShell(content: string, headConfig?: AppHeadConfig, options?: {
    /** Page-specific title (overrides config) */
    title?: string
    /** Extra styles to inject in <head> (e.g. Crosswind CSS, scoped styles) */
    styles?: string[]
    /** Extra scripts to inject before </body> (e.g. signals runtime, router) */
    bodyScripts?: string[]
    /** Extra scripts/tags for <head> */
    headScripts?: string[]
    /** Stacks to inject (from @push directives) */
    headStack?: string
    bodyStack?: string
  }): string;
/**
 * Check if HTML already has a document shell (<!DOCTYPE> or <html>).
 * Templates that extend layouts with document shells should not be double-wrapped.
 */
export declare function hasDocumentShell(html: string): boolean;
/**
 * Wrap HTML in a document shell if it doesn't already have one.
 * This is the main entry point — called at the top level after all
 * directive processing is complete.
 */
export declare function ensureDocumentShell(html: string, headConfig?: AppHeadConfig, options?: Parameters<typeof generateDocumentShell>[2]): string;
