/**
 * The named colour roles the markdown / diff / syntax-highlight render path
 * resolves against. Each value is a colour-key into the adapter's flat
 * {@link InkThemeAdapter.colors} Record; a consumer asks the adapter for a role,
 * the adapter looks the key up in `colors`, and falls back gracefully when the
 * host theme has not supplied that key. Keeping the role → key indirection here
 * means a host theme (e.g. the console) only has to populate the matching keys
 * in its `colors` Record — it never has to re-implement an accessor.
 *
 * Roles:
 *   - `codeInline`      — inline `` `code` `` spans.
 *   - `heading`         — markdown heading text.
 *   - `blockquoteBar`   — the dim bar/gutter drawn beside a blockquote.
 *   - `diffAddedBg`     — background tint for an added (`+`) diff line.
 *   - `diffRemovedBg`   — background tint for a removed (`-`) diff line.
 *   - `diffAddedText`   — foreground for added-line content / `+` marker.
 *   - `diffRemovedText` — foreground for removed-line content / `-` marker.
 *   - `synKeyword`      — syntax scope: keywords.
 *   - `synString`       — syntax scope: string literals.
 *   - `synNumber`       — syntax scope: numeric literals.
 *   - `synComment`      — syntax scope: comments.
 *   - `synType`         — syntax scope: types / classes / built-ins.
 */
export interface ThemeRoleKeys {
    codeInline: string;
    heading: string;
    blockquoteBar: string;
    diffAddedBg: string;
    diffRemovedBg: string;
    diffAddedText: string;
    diffRemovedText: string;
    synKeyword: string;
    synString: string;
    synNumber: string;
    synComment: string;
    synType: string;
}
/** A role name the markdown / diff / highlight path can ask the adapter for. */
export type ThemeRole = keyof ThemeRoleKeys;
export interface InkThemeAdapter {
    name: string;
    colors: Record<string, string>;
    color: (key: string, text: string) => string;
    background: (key: string, text: string, textKey?: string) => string;
    dim: (text: string) => string;
    muted: (text: string) => string;
    /**
     * The colour-key each markdown/diff/syntax role maps to in {@link colors}.
     * Always present — {@link createThemeAdapter} seeds it with sensible defaults
     * so existing consumers and host themes that predate these roles keep working.
     */
    roles: ThemeRoleKeys;
    /**
     * Paint `text` in the foreground colour of a named markdown/diff/syntax
     * {@link ThemeRole}, resolving the role's colour-key through {@link colors}.
     */
    role: (role: ThemeRole, text: string) => string;
    /**
     * Paint `text` on the background colour of a named {@link ThemeRole} (the diff
     * backgrounds in practice), optionally tinting the foreground via a second
     * role. Unlike {@link background} it does not pad or strip the text — the diff
     * block owns its own spacing — so highlighted spans survive unmolested.
     */
    roleBackground: (role: ThemeRole, text: string, foregroundRole?: ThemeRole) => string;
}
export declare function createThemeAdapter(themeName: string, colors: Record<string, string>, roleOverrides?: Partial<ThemeRoleKeys>): InkThemeAdapter;
