{"version":3,"file":"classnames.mjs","names":["classesArray: string[]"],"sources":["../../src/exports/classnames.ts"],"sourcesContent":["import { isFunction, makeBrand } from 'vest-utils';\n\nimport {\n  SuiteResult,\n  TFieldName,\n  TGroupName,\n  TSchema,\n} from '../suiteResult/SuiteResultTypes';\n\nimport { ParsedVestObject, parse } from './parser';\n\n/**\n * Creates a function that returns class names that match the validation result\n */\nexport default function classnames<\n  F extends TFieldName,\n  G extends TGroupName,\n  S extends TSchema,\n>(\n  res: SuiteResult<F, G, S>,\n  classes: SupportedClasses = {},\n): (fieldName: string) => string {\n  const selectors = parse(res);\n\n  // eslint-disable-next-line complexity\n  return function cn(fieldName: string): string {\n    const safeFieldName = makeBrand<TFieldName>(fieldName);\n    const classesArray: string[] = [];\n\n    for (const selector of Object.keys(classes) as Array<\n      keyof ParsedVestObject<TFieldName>\n    >) {\n      const sel = selector as keyof ParsedVestObject<TFieldName>;\n      const selectorFn = selectors[sel];\n      const className = classes[sel];\n\n      if (isFunction(selectorFn) && className && selectorFn?.(safeFieldName)) {\n        classesArray.push(className);\n      }\n    }\n\n    return classesArray.join(' ');\n  };\n}\n\ntype SupportedClasses = Partial<\n  Record<keyof ParsedVestObject<TFieldName>, string>\n>;\n"],"mappings":";;;;;;;;;AAcA,SAAwB,WAKtB,KACA,UAA4B,EAAE,EACC;CAC/B,MAAM,YAAY,MAAM,IAAI;AAG5B,QAAO,SAAS,GAAG,WAA2B;EAC5C,MAAM,gBAAgB,UAAsB,UAAU;EACtD,MAAMA,eAAyB,EAAE;AAEjC,OAAK,MAAM,YAAY,OAAO,KAAK,QAAQ,EAExC;GACD,MAAM,MAAM;GACZ,MAAM,aAAa,UAAU;GAC7B,MAAM,YAAY,QAAQ;AAE1B,OAAI,WAAW,WAAW,IAAI,aAAa,aAAa,cAAc,CACpE,cAAa,KAAK,UAAU;;AAIhC,SAAO,aAAa,KAAK,IAAI"}