{"version":3,"file":"Field.mjs","names":["InputBaseComponentProps","React","ElementType","forwardRef","useCallback","ComponentType","Field","FinalField","FieldProps","FinalFieldProps","FieldRenderProps","MuiFieldComponentProps","error","helperText","ReactNode","inputProps","onChange","ChangeEventHandler","ComponentProps","FluentFieldComponentProps","hint","event","target","value","MuiFieldComponent","FieldValue","T","HTMLElement","component","valueForChange","ChangeEvent","pattern","Pick","RP","Omit","FieldComponent","isEmpty","undefined","Array","isArray","length","props","ref","$","_c","Component","afterSubmit","allowNull","beforeSubmit","componentProps","defaultValue","format","formatOnBlur","initialValue","isEqual","name","onChangeProp","parse","required","subscription","type","validate","validateFields","t0","t1","t2","t3","t4","t5","t6","t7","t8","t9","t10","render","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","fieldProps","value_0","allValues","meta","makeValidation","params","input","meta_0","fieldName","metaError","metaSubmitError","submitError","hasError","Boolean","touched","dirtySinceLastSubmit","errorMessage","errorProps","handleChange","args","displayName"],"sources":["../../../src/utilities/form/Field.tsx"],"sourcesContent":["import { InputBaseComponentProps } from '@material-ui/core';\nimport React, {\n  ElementType,\n  forwardRef,\n  useCallback,\n  ComponentType\n} from 'react';\nimport {\n  Field as FinalField,\n  FieldProps as FinalFieldProps,\n  FieldRenderProps\n} from 'react-final-form';\n\nexport interface MuiFieldComponentProps {\n  error?: boolean;\n  helperText?: React.ReactNode;\n  inputProps?: InputBaseComponentProps;\n  onChange: React.ChangeEventHandler;\n  ComponentProps?: any;\n}\n\n/**\n * Props for Fluent-style components (error string contains the message)\n */\nexport interface FluentFieldComponentProps {\n  error?: string;\n  hint?: string;\n  onChange?: (event: { target: { value: unknown } }) => void;\n}\n\nexport type MuiFieldComponent = ElementType<MuiFieldComponentProps>;\n\nexport type FieldProps<\n  FieldValue,\n  RP extends FieldRenderProps<FieldValue, T>,\n  T extends HTMLElement = HTMLElement\n> = {\n  component: ElementType;\n  // @fixme Some of the onChange handlers pass value instead\n  valueForChange?: (event: React.ChangeEvent<T>) => FieldValue;\n  pattern?: string;\n  /**\n   * Helper text shown below the input when there's no error.\n   * Passed as helperText for MUI components, or automatically converted for Fluent components.\n   */\n  helperText?: React.ReactNode;\n} & Pick<\n  FinalFieldProps<FieldValue, RP, T>,\n  | 'afterSubmit'\n  | 'allowNull'\n  | 'beforeSubmit'\n  | 'defaultValue'\n  | 'format'\n  | 'formatOnBlur'\n  | 'initialValue'\n  | 'isEqual'\n  | 'name'\n  | 'parse'\n  | 'subscription'\n  | 'type'\n  | 'validate'\n  | 'validateFields'\n  | 'value'\n  | 'required'\n> &\n  Omit<MuiFieldComponentProps, 'error' | 'helperText'>;\n\ntype FieldComponent<\n  FieldValue = any,\n  RP extends FieldRenderProps<FieldValue, T> = FieldRenderProps<\n    FieldValue,\n    HTMLElement\n  >,\n  T extends HTMLElement = HTMLElement\n> = ComponentType<FieldProps<FieldValue, RP, T>>;\n\n/**\n * Check if a value is considered empty for required validation.\n * Handles: undefined, null, empty string, empty arrays.\n * Note: 0 is considered a valid value (not empty).\n */\nfunction isEmpty(value: unknown): boolean {\n  if (value === undefined || value === null || value === '') return true;\n  if (Array.isArray(value) && value.length === 0) return true;\n  return false;\n}\n\n/**\n * Final Form Field wrapper that supports both Material UI and Fluent UI components.\n *\n * UDP Fluent components automatically detect and convert error props,\n * so you can use the same Field component for both MUI and Fluent components.\n *\n * @example\n * // MUI component\n * <Field component={TextField} name=\"email\" required />\n *\n * @example\n * // UDP Fluent component (auto-detects error style)\n * <Field component={UdpTextInput} name=\"email\" required />\n */\nexport const Field: FieldComponent = forwardRef((props, ref) => {\n  const {\n    component: Component,\n    afterSubmit,\n    allowNull,\n    beforeSubmit,\n    defaultValue,\n    format,\n    formatOnBlur,\n    initialValue,\n    isEqual,\n    name,\n    parse,\n    // @ts-ignore\n    render, // extract the render prop so it doesn't get passed to Field\n    subscription,\n    validate,\n    validateFields,\n    value, // radio/checkbox\n    helperText,\n    valueForChange,\n    required,\n    ComponentProps,\n    type,\n    onChange: onChangeProp,\n    ...componentProps\n  } = props;\n\n  const fieldProps = {\n    afterSubmit,\n    allowNull,\n    beforeSubmit,\n    defaultValue,\n    format,\n    formatOnBlur,\n    initialValue,\n    isEqual,\n    name,\n    parse,\n    subscription,\n    validate,\n    validateFields,\n    value,\n    type\n  };\n\n  const makeValidation = useCallback(\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (value: any, allValues: any, meta?: any) => {\n      // Required validation - allows 0 as a valid value\n      if (required && typeof value !== 'number' && isEmpty(value)) {\n        return 'Required';\n      }\n      // Chain to custom validation if provided\n      if (validate) {\n        return validate(value, allValues, meta);\n      }\n      return undefined;\n    },\n    [required, validate]\n  );\n\n  return (\n    <FinalField {...fieldProps} validate={makeValidation}>\n      {(params) => {\n        const { input, meta } = params;\n        const { name: fieldName, onChange, ...inputProps } = input;\n\n        // Determine if we should show an error\n        const metaError = meta.error as string | undefined;\n        const metaSubmitError = meta.submitError as string | undefined;\n        const hasError = Boolean(\n          meta.touched &&\n            ((metaSubmitError && !meta.dirtySinceLastSubmit) || metaError)\n        );\n        const errorMessage: string | undefined = metaError ?? metaSubmitError;\n\n        // Build error props - MUI style\n        // UDP Fluent components automatically convert these to Fluent style\n        const errorProps = {\n          error: hasError,\n          helperText: hasError ? errorMessage : helperText\n        };\n\n        // Wrap onChange to support valueForChange transform\n        const handleChange = (...args: unknown[]) => {\n          if (onChangeProp) {\n            (onChangeProp as (...args: unknown[]) => void)(...args);\n          }\n          if (valueForChange) {\n            onChange(valueForChange(args[0] as React.ChangeEvent<HTMLElement>));\n          } else {\n            (onChange as (...args: unknown[]) => void)(...args);\n          }\n        };\n\n        return (\n          <Component\n            ref={ref}\n            required={required}\n            {...componentProps}\n            {...ComponentProps}\n            {...errorProps}\n            onChange={handleChange}\n            name={fieldName}\n            {...inputProps}\n          />\n        );\n      }}\n    </FinalField>\n  );\n});\n\nField.displayName = 'Field';\n"],"mappings":"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"}