{"version":3,"file":"Form.mjs","names":[],"sources":["../../../../../../src/components/Form.tsx"],"sourcesContent":["import {\n  type FC,\n  type FormEvent,\n  type PropsWithChildren,\n  type Ref,\n} from \"react\";\n\ntype FormProps = {\n  action?: (data: FormData) => void | Promise<void>;\n  onSubmit?: (data: FormData) => void | Promise<void>;\n  ref?: Ref<HTMLFormElement>;\n} & PropsWithChildren;\n\nexport const Form: FC<FormProps> = (props) => {\n  const {\n    action: onActionFromProps,\n    onSubmit: onSubmitFromProps,\n    ref,\n    ...rest\n  } = props;\n\n  const onSubmit = async (event: FormEvent<HTMLFormElement>) => {\n    /*\n     * React events bubble through portals, so a submit inside a Modal would\n     * reach the Form the Modal sits in and submit it too. An action-only form\n     * needs that guard as well, so the handler always runs.\n     */\n    event.stopPropagation();\n\n    if (!onSubmitFromProps) {\n      return;\n    }\n    event.preventDefault();\n    await onSubmitFromProps(new FormData(event.currentTarget));\n  };\n\n  const onAction = async (formData: FormData) => {\n    await onActionFromProps?.(formData);\n  };\n\n  return (\n    <form\n      {...rest}\n      ref={ref}\n      action={onActionFromProps ? onAction : undefined}\n      onSubmit={onSubmit}\n    />\n  );\n};\n"],"mappings":";;;;;AAaA,IAAa,QAAuB,UAAU;CAC5C,MAAM,EACJ,QAAQ,mBACR,UAAU,mBACV,KACA,GAAG,SACD;CAEJ,MAAM,WAAW,OAAO,UAAsC;EAM5D,MAAM,gBAAgB;EAEtB,IAAI,CAAC,mBACH;EAEF,MAAM,eAAe;EACrB,MAAM,kBAAkB,IAAI,SAAS,MAAM,aAAa,CAAC;CAC3D;CAEA,MAAM,WAAW,OAAO,aAAuB;EAC7C,MAAM,oBAAoB,QAAQ;CACpC;CAEA,OACE,oBAAC,QAAD;EACE,GAAI;EACC;EACL,QAAQ,oBAAoB,WAAW,KAAA;EAC7B;CACX,CAAA;AAEL"}