UNPKG

@klass/core

Version:

Class variant utility

67 lines (66 loc) 2.1 kB
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;