/** Scope at which a theme can be applied. */
import type { DocBlock } from './docs/types';
import type { OwnerShipMeta } from './ownership';
import { SpecContractRegistry } from './registry';
import type { VersionedSpecRef } from './versioning';
export { assertThemeSpecValid, ThemeValidationError, type ThemeValidationIssue, type ThemeValidationLevel, type ThemeValidationResult, validateThemeSpec, } from './themes.validation';
export type ThemeScope = 'global' | 'tenant' | 'user';
export type ThemeColorFormat = 'hex' | 'rgb' | 'hsl' | 'oklch' | 'css' | (string & {});
export type ThemeTokenUsage = 'semantic' | 'palette' | 'component' | (string & {});
export interface ThemeToken<T> {
    value: T;
    description?: string;
    format?: ThemeColorFormat;
    usage?: ThemeTokenUsage;
}
export interface ThemeTokens {
    colors?: Record<string, ThemeToken<string>>;
    radii?: Record<string, ThemeToken<number>>;
    space?: Record<string, ThemeToken<number>>;
    typography?: Record<string, ThemeToken<number>>;
    shadows?: Record<string, ThemeToken<string>>;
    motion?: Record<string, ThemeToken<string>>;
}
export interface ComponentVariantDefinition {
    props?: Record<string, unknown>;
    tokens?: ThemeTokens;
}
export interface ComponentVariantSpec {
    component: string;
    variants: Record<string, ComponentVariantDefinition>;
}
export type ThemeModeName = 'light' | 'dark' | (string & {});
export interface ThemeModeSpec {
    tokens?: ThemeTokens;
    components?: ComponentVariantSpec[];
    description?: string;
}
export interface ThemeOverride {
    scope: ThemeScope;
    target: string;
    tokens?: ThemeTokens;
    components?: ComponentVariantSpec[];
    modes?: Record<string, ThemeModeSpec>;
}
export interface ThemeMeta extends OwnerShipMeta {
    extends?: ThemeRef;
    scopes?: ThemeScope[];
}
export interface ThemeSpec {
    meta: ThemeMeta;
    tokens: ThemeTokens;
    components?: ComponentVariantSpec[];
    overrides?: ThemeOverride[];
    modes?: Record<string, ThemeModeSpec>;
}
/**
 * Reference to a theme spec.
 * Uses key and version to identify a specific theme.
 */
export type ThemeRef = VersionedSpecRef;
export declare class ThemeRegistry extends SpecContractRegistry<'theme', ThemeSpec> {
    constructor(items?: ThemeSpec[]);
}
export declare function makeThemeRef(spec: ThemeSpec): ThemeRef;
export declare const defineTheme: (spec: ThemeSpec) => ThemeSpec;
export declare const tech_contracts_themes_DocBlocks: DocBlock[];
