import type { ClassValue, TransformKey, ItFn, RestrictedVariantsKey, KlassFn } from ".";
type StrictGroupVariantsSchema<B extends string, E extends string = RestrictedVariantsKey> = {
    [variant: string]: {
        [type: string]: {
            [key in B]?: ClassValue;
        };
    };
} & {
    [variant in E]?: undefined;
};
type ToVariantsSchema<B extends string, T extends StrictGroupVariantsSchema<B>> = {
    [variant in keyof Omit<T, RestrictedVariantsKey>]: {
        [type in keyof Omit<T, RestrictedVariantsKey>[variant]]: ClassValue;
    };
};
type GroupCompoundVariant<B extends string, T extends StrictGroupVariantsSchema<B>> = Omit<{
    [K in keyof ToVariantsSchema<B, T>]?: TransformKey<keyof ToVariantsSchema<B, T>[K]>;
}, RestrictedVariantsKey> & {
    class: {
        [key in B]?: ClassValue;
    };
};
type GroupOptions<B extends string, T extends StrictGroupVariantsSchema<B>> = {
    base: {
        [key in B]: ClassValue;
    };
    variants: T;
    defaultVariants?: {
        [K in keyof T]?: TransformKey<keyof T[K]>;
    };
    compoundVariants?: GroupCompoundVariant<B, T>[];
};
type GroupResult<B extends string, T extends StrictGroupVariantsSchema<B>> = {
    [key in B]: KlassFn<ToVariantsSchema<B, T>>;
};
/**
 *
 * @param options group options
 * @param config additional config
 * @returns multiple klass
 *
 * @see {@link https://klass.pages.dev/klass/core.html#group | group}
 */
declare const group: <B extends string, T extends StrictGroupVariantsSchema<B, "class">>(options: GroupOptions<B, T>, config?: {
    it?: ItFn;
}) => GroupResult<B, T>;
export type { StrictGroupVariantsSchema, GroupCompoundVariant, GroupOptions, GroupResult };
export default group;
