{"version":3,"file":"AutoForm.mjs","names":[],"sources":["../../src/react-hook-form/AutoForm.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport {\n  useForm,\n  FormProvider,\n} from \"react-hook-form\";\nimport type {\n  FieldValues,\n  SubmitHandler,\n  SubmitErrorHandler,\n  DefaultValues,\n} from \"react-hook-form\";\nimport { getDefaultValues, parseSchema } from \"@autoform/core\";\nimport type { AutoFormProps } from \"../types\";\nimport { AutoFormProvider } from \"../context\";\nimport { AutoFormField } from \"./AutoFormField\";\nimport { focusFirstInvalidInput, preventPropagation } from \"../utils\";\nimport { createSchemaResolver } from \"./utils\";\n\nexport function AutoForm<T extends FieldValues = FieldValues>({\n  formControl,\n  schema,\n  onSubmit = () => {},\n  values,\n  defaultValues,\n  children,\n  uiComponents,\n  formComponents,\n  withSubmit = false,\n  formProps = {},\n}: AutoFormProps<T>) {\n  const shouldFocusError = useRef(\n    formControl?.control?._options?.shouldFocusError !== false,\n  ).current;\n  const { ref: _ref, ...restFormProps } = formProps;\n  const parsedSchema = parseSchema(schema);\n  const resolver = createSchemaResolver(schema);\n\n  const methods = useForm<T, any, T>({\n    resolver,\n    defaultValues: {\n      ...(getDefaultValues(schema) as Partial<T>),\n      ...defaultValues,\n    } as DefaultValues<T>,\n    values: values as T,\n    formControl,\n    shouldFocusError: false,\n  });\n\n  const handleSubmit: SubmitHandler<T> = async (data: T, e) => {\n    await onSubmit(data, methods, e);\n  };\n\n  const handleError: SubmitErrorHandler<T> = () => {\n    if (shouldFocusError) {\n      focusFirstInvalidInput();\n    }\n  };\n\n  return (\n    <FormProvider {...methods}>\n      <AutoFormProvider\n        value={{\n          schema: parsedSchema,\n          uiComponents,\n          formComponents,\n        }}\n      >\n        <uiComponents.Form\n          onSubmit={preventPropagation(\n            methods.handleSubmit(handleSubmit, handleError),\n          )}\n          ref={_ref}\n          {...restFormProps}\n        >\n          {parsedSchema.fields.map((field) => (\n            <AutoFormField\n              key={field.key}\n              parsedField={field}\n              path={[field.key]}\n            />\n          ))}\n          {withSubmit && (\n            <uiComponents.SubmitButton>Submit</uiComponents.SubmitButton>\n          )}\n          {children}\n        </uiComponents.Form>\n      </AutoFormProvider>\n    </FormProvider>\n  );\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAgB,SAA8C,EAC5D,aACA,QACA,iBAAiB,CAAC,GAClB,QACA,eACA,UACA,cACA,gBACA,aAAa,OACb,YAAY,CAAC,KACM;CACnB,MAAM,mBAAmB,OACvB,aAAa,SAAS,UAAU,qBAAqB,KACvD,CAAC,CAAC;CACF,MAAM,EAAE,KAAK,MAAM,GAAG,kBAAkB;CACxC,MAAM,eAAe,YAAY,MAAM;CAGvC,MAAM,UAAU,QAAmB;EACjC,UAHe,qBAAqB,MAG7B;EACP,eAAe;GACb,GAAI,iBAAiB,MAAM;GAC3B,GAAG;EACL;EACQ;EACR;EACA,kBAAkB;CACpB,CAAC;CAED,MAAM,eAAiC,OAAO,MAAS,MAAM;EAC3D,MAAM,SAAS,MAAM,SAAS,CAAC;CACjC;CAEA,MAAM,oBAA2C;EAC/C,IAAI,kBACF,uBAAuB;CAE3B;CAEA,OACE,oBAAC,cAAD;EAAc,GAAI;YAChB,oBAAC,kBAAD;GACE,OAAO;IACL,QAAQ;IACR;IACA;GACF;aAEA,qBAAC,aAAa,MAAd;IACE,UAAU,mBACR,QAAQ,aAAa,cAAc,WAAW,CAChD;IACA,KAAK;IACL,GAAI;cALN;KAOG,aAAa,OAAO,KAAK,UACxB,oBAAC,eAAD;MAEE,aAAa;MACb,MAAM,CAAC,MAAM,GAAG;KACjB,GAHM,MAAM,GAGZ,CACF;KACA,cACC,oBAAC,aAAa,cAAd,EAAA,UAA2B,SAAiC,CAAA;KAE7D;IACgB;;EACH,CAAA;CACN,CAAA;AAElB"}