{"version":3,"sources":["../src/cx.ts","../src/utils/merge-props.ts","../src/cv.ts"],"names":["toVal","input","result","i","tmpClassValue","tmpClassName","key","cx","args","mergeProps","defaultProps","props","omitKeys","merged","k","cv","config","base","variants","compoundVariants","defaultVariants","classNameResolver","mergedProps","classValues","classValue","compound","matches","value","propValue","cv_default"],"mappings":"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","file":"cv.cjs","sourcesContent":["// credit: https://github.com/lukeed/clsx\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ClassDictionary = Record<string, any>\nexport type ClassValue = ClassValue[] | string | number | bigint | ClassDictionary | null | boolean | undefined\nexport type ClassArray = ClassValue[]\n\nfunction toVal(input: ClassValue): string {\n  if (typeof input === 'string') {\n    return input\n  }\n\n  if (typeof input === 'number' || typeof input === 'bigint') {\n    return String(input)\n  }\n\n  if (input === null || input === undefined || typeof input === 'boolean') {\n    return ''\n  }\n\n  let result = ''\n\n  if (Array.isArray(input)) {\n    let i = 0\n    let tmpClassValue: ClassValue\n    let tmpClassName: string\n    for (; i < input.length; i++) {\n      if ((tmpClassValue = input[i])) {\n        if ((tmpClassName = toVal(tmpClassValue))) {\n          if (result) result += ' '\n          result += tmpClassName\n        }\n      }\n    }\n\n    return result\n  }\n\n  for (const key in input) {\n    if (input[key]) {\n      if (result) result += ' '\n      result += key\n    }\n  }\n\n  return result\n}\n\nexport function cx(...args: ClassValue[]): string {\n  let result = ''\n  let i = 0\n  let tmpClassValue: ClassValue\n  let tmpClassName: string\n\n  for (; i < args.length; i++) {\n    if ((tmpClassValue = args[i])) {\n      if ((tmpClassName = toVal(tmpClassValue))) {\n        if (result) result += ' '\n        result += tmpClassName\n      }\n    }\n  }\n\n  return result\n}\n\nexport default cx\n","export function mergeProps<T extends Record<string, unknown>, P extends Record<string, unknown>>(\n  defaultProps: T | undefined,\n  props: P | undefined,\n  omitKeys?: (keyof P)[]\n): Record<string, unknown> {\n  const merged: Record<string, unknown> = { ...defaultProps }\n\n  if (props) {\n    for (const k in props) {\n      if (props[k] !== undefined && (!omitKeys || !omitKeys.includes(k))) {\n        merged[k] = props[k]\n      }\n    }\n  }\n\n  return merged\n}\n","import { ObjectKeyPicker, ObjectKeyArrayPicker } from './utils/types'\nimport { cx, ClassValue } from './cx'\nimport { mergeProps } from './utils/merge-props'\n\nexport type ClassVariantRecord = Record<string, Record<string, ClassValue>>\n\nexport type ClassVariantExtendProps = { className: ClassValue }\n\nexport interface ClassVariantDefinition<T extends ClassVariantRecord | undefined> {\n  base?: ClassValue\n  variants?: T\n  compoundVariants?: (ObjectKeyArrayPicker<T> & ClassVariantExtendProps)[]\n  defaultVariants?: ObjectKeyPicker<T>\n  classNameResolver?: typeof cx\n}\n\nexport type ClassVariantFnProps<T extends ClassVariantRecord | undefined> = T extends undefined\n  ? Partial<ClassVariantExtendProps>\n  : ObjectKeyPicker<T> & Partial<ClassVariantExtendProps>\n\nexport type ClassVariantFn<T extends ClassVariantRecord | undefined> = (props?: ClassVariantFnProps<T>) => string\n\nexport type ClassVariantCreatorFn = <T extends ClassVariantRecord | undefined>(\n  config: ClassVariantDefinition<T>\n) => ClassVariantFn<T>\n\n/**\n * Creates a class variant function that combines base classes, variants, compound variants, and default variants.\n *\n * @template T - Type of the variant record\n * @param config - Configuration object for creating class variants\n * @returns A function that accepts variant props and returns a combined class string\n *\n * @example\n * ```typescript\n * const button = cv({\n *   base: 'px-4 py-2 rounded',\n *   variants: {\n *     color: {\n *       primary: 'bg-blue-500 text-white',\n *       secondary: 'bg-gray-500 text-white'\n *     },\n *     size: {\n *       sm: 'text-sm',\n *       lg: 'text-lg'\n *     }\n *   },\n *   defaultVariants: {\n *     color: 'primary',\n *     size: 'sm'\n *   }\n * });\n *\n * button(); // => 'px-4 py-2 rounded bg-blue-500 text-white text-sm'\n * button({ color: 'secondary' }); // => 'px-4 py-2 rounded bg-gray-500 text-white text-sm'\n * ```\n */\nexport const cv: ClassVariantCreatorFn = (config) => {\n  const { base, variants, compoundVariants, defaultVariants, classNameResolver = cx } = config\n\n  if (!variants) {\n    return (props) => classNameResolver(base, props?.className)\n  }\n\n  return (props) => {\n    const mergedProps = mergeProps(defaultVariants, props, ['className'])\n\n    const classValues: ClassValue[] = []\n\n    for (const key in mergedProps) {\n      const classValue = variants[key]?.[mergedProps[key] as string]\n      if (classValue) {\n        classValues.push(classValue)\n      }\n    }\n\n    if (compoundVariants) {\n      for (let i = 0; i < compoundVariants.length; i++) {\n        const compound = compoundVariants[i]\n        let matches = true\n        for (const key in compound) {\n          if (key === 'className') continue\n          const value = compound[key as keyof typeof compound]\n          const propValue = mergedProps[key]\n          if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {\n            matches = false\n            break\n          }\n        }\n        if (matches && compound.className) {\n          classValues.push(compound.className)\n        }\n      }\n    }\n\n    return classNameResolver(base, classValues, props?.className)\n  }\n}\n\nexport default cv\n"]}