import { ObjectKeyPicker, ObjectKeyArrayPicker } from './utils/types';
import { cx, ClassValue } from './cx';
export type ClassVariantRecord = Record<string, Record<string, ClassValue>>;
export type ClassVariantExtendProps = {
    className: ClassValue;
};
export interface ClassVariantDefinition<T extends ClassVariantRecord | undefined> {
    base?: ClassValue;
    variants?: T;
    compoundVariants?: (ObjectKeyArrayPicker<T> & ClassVariantExtendProps)[];
    defaultVariants?: ObjectKeyPicker<T>;
    classNameResolver?: typeof cx;
}
export type ClassVariantFnProps<T extends ClassVariantRecord | undefined> = T extends undefined ? Partial<ClassVariantExtendProps> : ObjectKeyPicker<T> & Partial<ClassVariantExtendProps>;
export type ClassVariantFn<T extends ClassVariantRecord | undefined> = (props?: ClassVariantFnProps<T>) => string;
export type ClassVariantCreatorFn = <T extends ClassVariantRecord | undefined>(config: ClassVariantDefinition<T>) => ClassVariantFn<T>;
/**
 * Creates a class variant function that combines base classes, variants, compound variants, and default variants.
 *
 * @template T - Type of the variant record
 * @param config - Configuration object for creating class variants
 * @returns A function that accepts variant props and returns a combined class string
 *
 * @example
 * ```typescript
 * const button = cv({
 *   base: 'px-4 py-2 rounded',
 *   variants: {
 *     color: {
 *       primary: 'bg-blue-500 text-white',
 *       secondary: 'bg-gray-500 text-white'
 *     },
 *     size: {
 *       sm: 'text-sm',
 *       lg: 'text-lg'
 *     }
 *   },
 *   defaultVariants: {
 *     color: 'primary',
 *     size: 'sm'
 *   }
 * });
 *
 * button(); // => 'px-4 py-2 rounded bg-blue-500 text-white text-sm'
 * button({ color: 'secondary' }); // => 'px-4 py-2 rounded bg-gray-500 text-white text-sm'
 * ```
 */
export declare const cv: ClassVariantCreatorFn;
export default cv;
