/**
 * @file Theme CSS generation utilities
 *
 * Shared logic for generating CSS rules from a resolved theme definition.
 * Used by both the runtime path (Theme injects <style>) and the build
 * path (`astryx theme build` pre-compiles to CSS files).
 *
 * Extracted from defineTheme.ts to reduce cyclomatic complexity and provide
 * a clear single-responsibility module for CSS generation.
 *
 * @input DefinedTheme (resolved theme object from defineTheme)
 * @output CSS rule strings, split by layer (component vs prose)
 * @position packages/core/src/theme/generateThemeRules.ts
 */
import type { DefinedTheme } from './defineTheme';
/**
 * Structured output from generateThemeRulesSplit.
 * Separates prose element defaults from component/token overrides
 * so callers can place them in different CSS layers.
 */
export interface ThemeRulesSplit {
    /** Token overrides + component .astryx-* overrides + prop-level color rules */
    component: string[];
    /** Prose element defaults (h1-h6, p, small, code, hr) — belongs in reset layer */
    prose: string[];
}
/**
 * Output from generateThemeCSS — two CSS blocks for different layers.
 */
export interface ThemeCSSOutput {
    /**
     * Prose element defaults (p, h1-h6, small, code, hr) scoped to the theme.
     * Should be injected into @layer reset — lowest priority, any class wins.
     * Empty string if no prose rules.
     */
    prose: string;
    /**
     * Token overrides + component .astryx-* overrides scoped to the theme.
     * Should be injected into @layer astryx-theme — above StyleX layers so
     * theme component overrides take effect. Empty string if no rules.
     */
    component: string;
}
/**
 * Generate the intermediary CSS rules for a theme.
 *
 * Returns an array of CSS rule strings — the shared format used by both
 * the runtime path (useInsertionEffect) and the build path (astryx theme build).
 */
export declare function generateThemeRules(theme: DefinedTheme): string[];
/**
 * Generate theme rules split into component and prose groups.
 *
 * Prose element rules (h1-h6, p, small, code, hr) style bare HTML elements
 * as themed defaults — conceptually the same tier as the CSS reset. They
 * belong in the reset layer so any class-based style wins.
 *
 * Component rules (tokens, .astryx-* overrides) are intentional theme overrides
 * that need to beat StyleX — they stay in astryx-theme (above StyleX layers).
 */
export declare function generateThemeRulesSplit(theme: DefinedTheme): ThemeRulesSplit;
/**
 * Generate CSS for on-media token and component overrides.
 *
 * Emitted in an unbounded @scope (no `to` limit) so the rules can reach
 * [data-astryx-media] elements. Parent theme component overrides flow through
 * to media contexts — only tokens change. Themes can further customize
 * via onDark.components / onLight.components.
 */
export declare function generateOnMediaCSS(theme: DefinedTheme): string;
/**
 * Generate layered CSS for a theme — runtime path.
 *
 * Returns two CSS blocks for injection into different layers:
 * - `prose`: @scope'd element defaults → inject into @layer reset
 * - `component`: @scope'd token + .astryx-* overrides → inject into @layer astryx-theme
 *
 * This separation ensures prose defaults (what bare HTML looks like in a theme)
 * sit at reset-layer priority where any class-based style wins, while component
 * overrides sit above StyleX so themes can restyle components intentionally.
 */
export declare function generateThemeCSS(theme: DefinedTheme): ThemeCSSOutput;
//# sourceMappingURL=generateThemeRules.d.ts.map