diff --git a/packages/react/shared.ts b/packages/react/shared.ts index f76ea78..782ee9b 100644 --- a/packages/react/shared.ts +++ b/packages/react/shared.ts @@ -1,5 +1,15 @@ import { twMerge } from "tailwind-merge"; +type BooleanString = T extends "true" + ? true + : T extends "false" + ? false + : T; + +type RawVariantProps>> = { + [VariantKey in keyof V]?: BooleanString; +}; + export function vcn>>({ base, variants, @@ -7,10 +17,10 @@ export function vcn>>({ }: { base: string; variants: V; - defaults: { [VariantKey in keyof V]: keyof V[VariantKey] }; -}): ( - variantProps: Partial & { className?: string } -) => string { + defaults: { + [VariantKey in keyof V]: BooleanString; + }; +}): (variantProps: RawVariantProps & { className?: string }) => string { return ({ className, ...variantProps }) => { return twMerge( base, @@ -19,7 +29,7 @@ export function vcn>>({ ).map( ([variantKey, defaultValue]) => variants[variantKey][ - (variantProps as unknown as Partial)[variantKey] ?? + (variantProps as unknown as RawVariantProps)[variantKey] ?? defaultValue ] ),