export interface FontBinding { /** CSS custom property the font is exposed as (next/font's `variable` * option, or geist's fixed names); null when only `.className` exists. */ variable: string | null; family: string; /** The font's `.className`/`.variable` is attached to a JSX attribute AND * the reference's SYMBOL is the font's own declaration — actually applied * to markup, not merely imported, configured, referenced in dead code, or * shadowed. */ applied: boolean; } /** Tailwind's default sans stack — identical in v3's * `tailwindcss/defaultTheme` fontFamily.sans and v4's default `--font-sans` * theme value (tailwindcss.com/docs/font-family). */ export declare const TAILWIND_DEFAULT_SANS: readonly string[]; /** Font bindings declared IN the given source (conventionally the root * layout — fonts wired through a separate module are invisible here and the * derivation simply doesn't fire, leaving the slot to the model pass). */ export declare function layoutFontBindings(source: string): FontBinding[]; /** A config's `fontFamily.sans` read has THREE outcomes, and the difference * is load-bearing: `{ declared: false }` (the located config declares no * sans — other derivation rules may apply), `{ declared: true, entries }` * (parsed), and `{ declared: true, entries: null }` (a config exists but * its sans — or the config object itself — is unprovable: authoritative, * fail CLOSED to the model stage, never fall through to a guess). */ export type TailwindSansRead = { declared: false; } | { declared: true; entries: string[] | null; }; /** The config's sans array, located STRUCTURALLY through the exported config * object only — config root (theme fragment files), `theme.fontFamily`, or * `theme.extend.fontFamily`. An unrelated object elsewhere in the file that * happens to carry a fontFamily key is never read. */ export declare function tailwindConfigSansStack(config: string): TailwindSansRead; export interface DerivedFontStack { /** Raw comma-joined stack — callers normalize (extract-theme's * normalizeFontStack owns quoting canonicalization). */ value: string; /** Provenance string for ThemeSummary.matched. */ provenance: string; } export declare function deriveBodyFontStack(input: { layout: string | null; tailwindConfig: string | null; /** Concatenated gathered CSS — only used for the Tailwind v4 marker. */ cssText: string; /** Resolve a CSS custom property from the gathered sheets (light scope). */ resolveCssVar: (name: string) => string | null; /** Raw value of a CSS `--font-sans` declaration whose var() refs the exact * read could not resolve from the sheets alone (next/font variables live * in the layout, not the CSS). */ cssFontSans?: string; }): DerivedFontStack | null; /** The mono family the body derivation deliberately filters OUT of its sans * candidates. It used to be found and dropped on the floor, so a host that * ships a real code font (geist's Geist Mono, `next/font`'s Geist_Mono) got * the generic system stack back. Same two rules as the body read: a declared * `--font-mono` wins, else the single applied mono binding. */ export declare function deriveMonoFontStack(input: { layout: string | null; resolveCssVar: (name: string) => string | null; /** Raw value of a CSS `--font-mono` declaration, when one is declared. */ cssFontMono?: string; }): DerivedFontStack | null;