{"version":3,"file":"Form.mjs","names":[],"sources":["../../../../../../../react-form/src/components/Form.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { forwardRef, useImperativeHandle } from \"react\";\nimport { getFormConfig } from \"../configurations\";\nimport { FormContext } from \"../contexts/FormContext\";\nimport { FormEngine } from \"../engine/FormEngine\";\nimport { StandardSchemaV1 } from \"../standard-schema/types\";\nimport { FormInterface, FormProps } from \"../types\";\nimport { useFormEngine } from \"./useFormEngine\";\n\n/**\n * Web submit trigger. Dispatches a native `submit` event (so the browser-style\n * pipeline runs), falling back to the engine pipeline if there is no host\n * element.\n */\nfunction webSubmit(engine: FormEngine) {\n  const element: HTMLFormElement | null = engine.formElement;\n\n  if (!element) {\n    engine.handleSubmit();\n    return;\n  }\n\n  if (engine.isSubmitting()) return;\n\n  if (element.requestSubmit) {\n    element.requestSubmit();\n  } else {\n    // polyfill for Edge and bloody safari\n    const submitter = document.createElement(\"input\");\n    submitter.type = \"submit\";\n    submitter.style.display = \"none\";\n    element.appendChild(submitter);\n    submitter.click();\n    element.removeChild(submitter);\n  }\n}\n\n/**\n * Generic call signature preserving schema inference and `ref` support.\n */\ntype FormComponent = <\n  Schema extends StandardSchemaV1 | undefined = undefined,\n>(\n  props: FormProps<Schema> & { ref?: React.Ref<FormInterface> }\n) => React.ReactElement | null;\n\n/**\n * Web form. Renders an HTML `<form>` element by default, built over the\n * React-free {@link FormEngine}. The engine instance is exposed via `ref`.\n */\nexport const Form = forwardRef(function Form(\n  props: FormProps<any>,\n  ref: React.Ref<FormInterface>\n) {\n  const { engine, id } = useFormEngine(props, webSubmit);\n\n  useImperativeHandle(ref, () => engine, [engine]);\n\n  const {\n    onError: _onError,\n    onSubmit: _onSubmit,\n    component: Component = getFormConfig(\"formComponent\", \"form\"),\n    children,\n    ignoreEmptyValues: _ignoreEmptyValues,\n    defaultValue: _defaultValue,\n    values: _values,\n    schema: _schema,\n    validateOn: _validateOn,\n    focusFirstError: _focusFirstError,\n    id: _id,\n    ...otherProps\n  } = props;\n\n  const handleSubmit = async (event: React.FormEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    await engine.handleSubmit(event);\n  };\n\n  return (\n    <FormContext.Provider value={engine}>\n      <Component\n        ref={(form: any) => {\n          engine.formElement = form ? form.root || form : form;\n        }}\n        id={id}\n        noValidate\n        onSubmit={handleSubmit}\n        {...otherProps}\n      >\n        {children}\n      </Component>\n    </FormContext.Provider>\n  );\n}) as unknown as FormComponent;\n"],"mappings":";;;;;;;;;;;;;;AAeA,SAAS,UAAU,QAAoB;CACrC,MAAM,UAAkC,OAAO;CAE/C,IAAI,CAAC,SAAS;EACZ,OAAO,aAAa;EACpB;CACF;CAEA,IAAI,OAAO,aAAa,GAAG;CAE3B,IAAI,QAAQ,eACV,QAAQ,cAAc;MACjB;EAEL,MAAM,YAAY,SAAS,cAAc,OAAO;EAChD,UAAU,OAAO;EACjB,UAAU,MAAM,UAAU;EAC1B,QAAQ,YAAY,SAAS;EAC7B,UAAU,MAAM;EAChB,QAAQ,YAAY,SAAS;CAC/B;AACF;;;;;AAeA,MAAa,OAAO,WAAW,SAAS,KACtC,OACA,KACA;CACA,MAAM,EAAE,QAAQ,OAAO,cAAc,OAAO,SAAS;CAErD,oBAAoB,WAAW,QAAQ,CAAC,MAAM,CAAC;CAE/C,MAAM,EACJ,SAAS,UACT,UAAU,WACV,WAAW,YAAY,cAAc,iBAAiB,MAAM,GAC5D,UACA,mBAAmB,oBACnB,cAAc,eACd,QAAQ,SACR,QAAQ,SACR,YAAY,aACZ,iBAAiB,kBACjB,IAAI,KACJ,GAAG,eACD;CAEJ,MAAM,eAAe,OAAO,UAA2B;EACrD,MAAM,eAAe;EACrB,MAAM,gBAAgB;EAEtB,MAAM,OAAO,aAAa,KAAK;CACjC;CAEA,OACE,oBAAC,YAAY,UAAb;EAAsB,OAAO;YAC3B,oBAAC,WAAD;GACE,MAAM,SAAc;IAClB,OAAO,cAAc,OAAO,KAAK,QAAQ,OAAO;GAClD;GACI;GACJ;GACA,UAAU;GACV,GAAI;GAEH;EACQ;CACS;AAE1B,CAAC"}