export type ClassValue = string | number | undefined | null;
export type ClassProps = Record<string, ClassValue>;
export type ThemeDataAttributes = Record<`data-${string}`, string | undefined>;
export type ThemeProps = {
    className: string;
} & ThemeDataAttributes;
/**
 * Reflect Astryx visual props as `data-*` attributes.
 *
 * Keys are kebab-cased (`listStyle` → `data-list-style`) and values are the
 * literal prop values, including numeric values (`level: 1` → `data-level="1"`).
 * Nullish values are omitted.
 */
export declare function themeDataAttributes(props?: ClassProps): ThemeDataAttributes;
/**
 * Build the props object components should spread onto the same element that
 * receives the stable Astryx class name.
 *
 * This emits the stable astryx class plus the data-attribute reflection
 * surface. For example:
 *
 * ```ts
 * themeProps('button', { variant: 'primary', size: 'sm' })
 * // → { className: 'astryx-button primary sm', data-variant: 'primary', data-size: 'sm' }
 * ```
 */
/**
 * Options for {@link themeProps}.
 */
export type ThemePropsOptions = {
    /**
     * Stable class names to emit ALONGSIDE the component's own, for targets that
     * have been renamed.
     *
     * A theme target is public API: renaming one silently breaks every theme
     * that styles it. Emitting the old name beside the new one keeps those
     * themes working through a deprecation window, at the cost of one extra
     * class on the element until the old name is dropped in a major.
     *
     * Pass plain string literals — the theming guards scan for them statically.
     * Document the old name with `deprecated` in the component's
     * `theming.targets` so the docsite says which to use.
     */
    legacyNames?: ReadonlyArray<string>;
};
export declare function themeProps(component: string, props?: ClassProps, options?: ThemePropsOptions): ThemeProps;
//# sourceMappingURL=themeProps.d.ts.map