@klass/core
Version:
Class variant utility
67 lines (66 loc) • 2.1 kB
TypeScript
import type { ClassValue, TransformKey, ItFn, RestrictedVariantsKey, KlassFn } from ".";
type StrictSlotsVariantsSchema<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 StrictSlotsVariantsSchema<B>> = {
[variant in keyof Omit<T, RestrictedVariantsKey>]: {
[type in keyof Omit<T, RestrictedVariantsKey>[variant]]: ClassValue;
};
};
type SlotsCompoundVariant<B extends string, T extends StrictSlotsVariantsSchema<B>> = Omit<{
[K in keyof ToVariantsSchema<B, T>]?: TransformKey<keyof ToVariantsSchema<B, T>[K]>;
}, RestrictedVariantsKey> & {
class: {
[key in B]?: ClassValue;
};
};
type SlotsOptions<B extends string, T extends StrictSlotsVariantsSchema<B>> = {
base: {
[key in B]: ClassValue;
};
variants: T;
defaultVariants?: {
[K in keyof T]?: TransformKey<keyof T[K]>;
};
compoundVariants?: SlotsCompoundVariant<B, T>[];
};
type KlassOnlyFn<B extends string, T extends StrictSlotsVariantsSchema<B>> = (props?: {
[K in keyof T]?: TransformKey<keyof T[K]>;
}, classes?: ClassValue) => string;
type SlotsFn<B extends string, T extends StrictSlotsVariantsSchema<B>> = {
(props?: {
[K in keyof T]?: TransformKey<keyof T[K]>;
}): {
[key in B]: KlassOnlyFn<B, T>;
};
} & {
/**
* options
*/
o: SlotsOptions<B, T>;
/**
* klasses
*/
klass: {
[key in B]: KlassFn<ToVariantsSchema<B, T>>;
};
};
/**
*
* @param options slots options
* @param config additional config
* @returns slots function
*
* @see {@link https://klass.pages.dev/klass/core.html#slots | slots}
*/
declare const slots: <B extends string, T extends StrictSlotsVariantsSchema<B, "class">>(options: SlotsOptions<B, T>, config?: {
it?: ItFn;
}) => SlotsFn<B, T>;
export type { StrictSlotsVariantsSchema, SlotsCompoundVariant, SlotsOptions, SlotsFn };
export default slots;