{"version":3,"sources":["../../src/Input/utils.tsx","../../src/utils.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport { useCallback, useState } from 'react';\nimport type { CSSModule } from 'reactstrap/types/lib/utils';\nimport { mapToCssModules } from '../utils';\nimport type { InputProps } from './Input';\n\ntype ValidationProps = Pick<InputProps, 'valid'>;\ntype TypeProps = Pick<InputProps, 'plaintext' | 'type'> & {\n  staticInput?: boolean;\n};\ntype FormControlProps = Pick<InputProps, 'normalized'> & TypeProps;\n\nfunction getFormControlClassInternal({ plaintext, staticInput, type = 'text', normalized }: FormControlProps) {\n  const formControlClass = 'form-control';\n  if (plaintext || staticInput || normalized) {\n    return `${formControlClass}-plaintext`;\n  }\n  if (type === 'file') {\n    return `${formControlClass}-file`;\n  }\n  if (['radio', 'checkbox'].indexOf(type) > -1) {\n    return null;\n  }\n  return formControlClass;\n}\n\nexport function getFormControlClass(props: FormControlProps, cssModule?: CSSModule) {\n  return mapToCssModules(getFormControlClassInternal(props), cssModule);\n}\n\nexport function getValidationTextControlClass({ valid }: ValidationProps, cssModule?: CSSModule) {\n  return mapToCssModules(\n    classNames({\n      'form-text': true,\n      'form-feedback just-validate-error-label': valid == false\n    }),\n    cssModule\n  );\n}\n\nexport function getTag({ tag, plaintext, staticInput, type = 'text' }: Pick<InputProps, 'tag'> & TypeProps) {\n  if (tag) {\n    return tag;\n  }\n  if (['radio', 'checkbox'].indexOf(type) > -1) {\n    return 'input';\n  }\n  if (plaintext || staticInput) {\n    return 'p';\n  }\n  return 'input';\n}\n\ntype InputClassesParams = ValidationProps &\n  Pick<InputProps, 'bsSize' | 'placeholder' | 'value' | 'label' | 'validationText' | 'normalized'> & {\n    isFocused: boolean;\n    inputPassword?: boolean;\n    formControlClass?: string;\n    validationTextControlClass?: string;\n    originalWrapperClass: InputProps['wrapperClassName'];\n  };\n\nexport function getClasses(\n  className: string | undefined,\n  type: string,\n  {\n    isFocused,\n    valid,\n    bsSize,\n    placeholder,\n    value,\n    label,\n    validationText,\n    normalized,\n    inputPassword,\n    formControlClass,\n    validationTextControlClass,\n    originalWrapperClass\n  }: InputClassesParams,\n  cssModule?: CSSModule\n) {\n  const hasPlainCondition = placeholder || label || validationText;\n  const baseCondition = hasPlainCondition && !normalized && !inputPassword;\n  const passwordOnlyCondition = inputPassword && !hasPlainCondition && !normalized;\n  const normalizedOnlyCondition = normalized && !hasPlainCondition && !inputPassword;\n\n  const classes = mapToCssModules(\n    classNames(\n      className,\n      {\n        'is-invalid': valid == false,\n        'just-validate-success-field': valid,\n        [`form-control-${bsSize}`]: bsSize\n      },\n      formControlClass\n    ),\n    cssModule\n  );\n  const wrapperClass = mapToCssModules(classNames(originalWrapperClass, 'form-group'), cssModule);\n  const validationTextClass = mapToCssModules(\n    classNames(\n      {\n        'valid-feedback': valid,\n        'invalid-feedback form-feedback just-validate-error-label': valid == false\n      },\n      validationTextControlClass\n    ),\n    cssModule\n  );\n\n  const inputClasses = mapToCssModules(\n    classNames(\n      classes,\n      !baseCondition && {\n        // we can model here only if stylings\n        'form-control-plaintext': normalizedOnlyCondition,\n        'form-control': passwordOnlyCondition,\n        'input-password': passwordOnlyCondition\n      }\n    ),\n    cssModule\n  );\n\n  const activeClass = mapToCssModules(\n    classNames({\n      active: isFocused || placeholder || value || ['date', 'time'].includes(type)\n    }),\n    cssModule\n  );\n\n  const extraLabelClass = mapToCssModules(\n    classNames({\n      'input-number-label': ['number', 'currency', 'adaptive', 'percentage'].includes(type)\n    })\n  );\n\n  return {\n    wrapperClass,\n    inputClasses,\n    activeClass,\n    extraLabelClass,\n    validationTextClass\n  };\n}\n\nexport function useFocus<T extends HTMLInputElement | HTMLTextAreaElement>({\n  onFocus,\n  onBlur\n}: {\n  onFocus: React.FocusEventHandler<T> | undefined;\n  onBlur: React.FocusEventHandler<T> | undefined;\n}) {\n  const [isFocused, setFocus] = useState(false);\n\n  const toggleFocusLabel = useCallback(\n    (e: React.FocusEvent<T>) => {\n      setFocus(true);\n      onFocus?.(e);\n    },\n    [onFocus]\n  );\n\n  const toggleBlurLabel = useCallback(\n    (e: React.FocusEvent<T>) => {\n      if (e.target.value === '') {\n        setFocus(!isFocused);\n      }\n      onBlur?.(e);\n    },\n    [isFocused, onBlur]\n  );\n\n  return { toggleFocusLabel, toggleBlurLabel, isFocused };\n}\n","export const noop = () => {};\n\nexport const logError = (message: string) => {\n  if (typeof console !== 'undefined') {\n    if (console.error) {\n      console.error(message);\n    } else {\n      console.log(message);\n    }\n  }\n};\n\n// @internal Used for testing purposes only\nexport const flushMessageCache = () => {\n  for (const key in messages) {\n    delete messages[key];\n  }\n};\n\nconst messages: Record<string, 1> = {};\nexport const notifyDeprecation = (message: string, options: { once: boolean } = { once: true }) => {\n  if (!options.once) {\n    logError(message);\n  } else {\n    if (!messages[message]) {\n      logError(message);\n      messages[message] = 1;\n    }\n  }\n};\n\nexport function mapToCssModules(className: string | null, cssModules?: Record<string, string>) {\n  const finalClassNames = className == null ? '' : className;\n  if (!cssModules) {\n    return finalClassNames;\n  }\n  return finalClassNames\n    .split(' ')\n    .map((klass) => cssModules[klass] ?? klass)\n    .join(' ');\n}\n\ntype UnknownObject = Record<string, unknown>;\n\nexport function pick<T extends UnknownObject>(obj: T, keys: keyof T | Array<keyof T>): Partial<T> {\n  const keysArray = Array.isArray(keys) ? keys : [keys];\n  const newObj: Partial<T> = {};\n  for (const key of keysArray) {\n    if (key in obj) {\n      newObj[key] = obj[key];\n    }\n  }\n  return newObj;\n}\n\nexport function omit<T extends UnknownObject>(obj: T, keys: keyof T | Array<keyof T>): Partial<T> {\n  const keysLookup = new Set(Array.isArray(keys) ? keys : [keys]);\n\n  const newObj: Partial<T> = {};\n  for (const key in obj) {\n    if (!keysLookup.has(key)) {\n      newObj[key] = obj[key];\n    }\n  }\n  return newObj;\n}\n"],"mappings":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,wBAAAC,EAAA,WAAAC,EAAA,kCAAAC,EAAA,aAAAC,IAAA,eAAAC,EAAAP,GAAA,IAAAQ,EAAuB,2BACvBC,EAAsC,iBC8B/B,SAASC,EAAgBC,EAA0BC,EAAqC,CAC7F,IAAMC,EAAkBF,GAAoB,GAC5C,OAAKC,EAGEC,EACJ,MAAM,GAAG,EACT,IAAKC,GAAUF,EAAWE,CAAK,GAAKA,CAAK,EACzC,KAAK,GAAG,EALFD,CAMX,CD5BA,SAASE,EAA4B,CAAE,UAAAC,EAAW,YAAAC,EAAa,KAAAC,EAAO,OAAQ,WAAAC,CAAW,EAAqB,CAC5G,IAAMC,EAAmB,eACzB,OAAIJ,GAAaC,GAAeE,EACvB,GAAGC,CAAgB,aAExBF,IAAS,OACJ,GAAGE,CAAgB,QAExB,CAAC,QAAS,UAAU,EAAE,QAAQF,CAAI,EAAI,GACjC,KAEFE,CACT,CAEO,SAASC,EAAoBC,EAAyBC,EAAuB,CAClF,OAAOC,EAAgBT,EAA4BO,CAAK,EAAGC,CAAS,CACtE,CAEO,SAASE,EAA8B,CAAE,MAAAC,CAAM,EAAoBH,EAAuB,CAC/F,OAAOC,KACL,EAAAG,SAAW,CACT,YAAa,GACb,0CAA2CD,GAAS,EACtD,CAAC,EACDH,CACF,CACF,CAEO,SAASK,EAAO,CAAE,IAAAC,EAAK,UAAAb,EAAW,YAAAC,EAAa,KAAAC,EAAO,MAAO,EAAwC,CAC1G,OAAIW,IAGA,CAAC,QAAS,UAAU,EAAE,QAAQX,CAAI,EAAI,GACjC,QAELF,GAAaC,EACR,IAEF,QACT,CAWO,SAASa,EACdC,EACAb,EACA,CACE,UAAAc,EACA,MAAAN,EACA,OAAAO,EACA,YAAAC,EACA,MAAAC,EACA,MAAAC,EACA,eAAAC,EACA,WAAAlB,EACA,cAAAmB,EACA,iBAAAlB,EACA,2BAAAmB,EACA,qBAAAC,CACF,EACAjB,EACA,CACA,IAAMkB,EAAoBP,GAAeE,GAASC,EAC5CK,EAAgBD,GAAqB,CAACtB,GAAc,CAACmB,EACrDK,EAAwBL,GAAiB,CAACG,GAAqB,CAACtB,EAChEyB,EAA0BzB,GAAc,CAACsB,GAAqB,CAACH,EAE/DO,EAAUrB,KACd,EAAAG,SACEI,EACA,CACE,aAAcL,GAAS,GACvB,8BAA+BA,EAC/B,CAAC,gBAAgBO,CAAM,EAAE,EAAGA,CAC9B,EACAb,CACF,EACAG,CACF,EACMuB,EAAetB,KAAgB,EAAAG,SAAWa,EAAsB,YAAY,EAAGjB,CAAS,EACxFwB,EAAsBvB,KAC1B,EAAAG,SACE,CACE,iBAAkBD,EAClB,2DAA4DA,GAAS,EACvE,EACAa,CACF,EACAhB,CACF,EAEMyB,EAAexB,KACnB,EAAAG,SACEkB,EACA,CAACH,GAAiB,CAEhB,yBAA0BE,EAC1B,eAAgBD,EAChB,iBAAkBA,CACpB,CACF,EACApB,CACF,EAEM0B,EAAczB,KAClB,EAAAG,SAAW,CACT,OAAQK,GAAaE,GAAeC,GAAS,CAAC,OAAQ,MAAM,EAAE,SAASjB,CAAI,CAC7E,CAAC,EACDK,CACF,EAEM2B,EAAkB1B,KACtB,EAAAG,SAAW,CACT,qBAAsB,CAAC,SAAU,WAAY,WAAY,YAAY,EAAE,SAAST,CAAI,CACtF,CAAC,CACH,EAEA,MAAO,CACL,aAAA4B,EACA,aAAAE,EACA,YAAAC,EACA,gBAAAC,EACA,oBAAAH,CACF,CACF,CAEO,SAASI,EAA2D,CACzE,QAAAC,EACA,OAAAC,CACF,EAGG,CACD,GAAM,CAACrB,EAAWsB,CAAQ,KAAI,YAAS,EAAK,EAEtCC,KAAmB,eACtBC,GAA2B,CAC1BF,EAAS,EAAI,EACbF,IAAUI,CAAC,CACb,EACA,CAACJ,CAAO,CACV,EAEMK,KAAkB,eACrBD,GAA2B,CACtBA,EAAE,OAAO,QAAU,IACrBF,EAAS,CAACtB,CAAS,EAErBqB,IAASG,CAAC,CACZ,EACA,CAACxB,EAAWqB,CAAM,CACpB,EAEA,MAAO,CAAE,iBAAAE,EAAkB,gBAAAE,EAAiB,UAAAzB,CAAU,CACxD","names":["utils_exports","__export","getClasses","getFormControlClass","getTag","getValidationTextControlClass","useFocus","__toCommonJS","import_classnames","import_react","mapToCssModules","className","cssModules","finalClassNames","klass","getFormControlClassInternal","plaintext","staticInput","type","normalized","formControlClass","getFormControlClass","props","cssModule","mapToCssModules","getValidationTextControlClass","valid","classNames","getTag","tag","getClasses","className","isFocused","bsSize","placeholder","value","label","validationText","inputPassword","validationTextControlClass","originalWrapperClass","hasPlainCondition","baseCondition","passwordOnlyCondition","normalizedOnlyCondition","classes","wrapperClass","validationTextClass","inputClasses","activeClass","extraLabelClass","useFocus","onFocus","onBlur","setFocus","toggleFocusLabel","e","toggleBlurLabel"]}