import React, { ComponentType, CSSProperties, FormHTMLAttributes, ReactNode, Ref } from 'react'; import { ComponentSize } from '../ConfigProvider'; import { ButtonType, ButtonProps } from '../Button'; import { Layout, LayoutType, FooterAlign, LabelOptions } from './defs'; import { WithRef } from '../utils/type'; export interface Props extends LabelOptions { /** * 提交行为的回调函数 * Form 组件会对原生的 submit envent 进行 preventDefault 操作后再触发该回调 */ onSubmit?: () => void | Promise; /** 取消行为的回调函数 */ onCancel?: () => void; /** 表单内容尺寸 */ size?: ComponentSize; /** 表单内容布局 */ layout?: LayoutType | Layout; /** * `FormItem`、`Footer` 等内容间的垂直间距 * @default "24px" */ verticalGap?: string; /** * 表单的尾部内容,一般是提交 & 取消按钮等, * 若不传(或传 `undefined`)则使用默认尾部,若传 `null` 则尾部不会渲染; * 对于 `layout: inline` 的表单,尾部内容会被展示到右侧 */ footer?: ReactNode; /** * 获取 form 引用 * * @deprecated use formProps.ref instead */ formRef?: Ref; /** 需要传给 `form` 元素的属性 */ formProps?: WithRef, T>; /** 自定义样式名 */ className?: string; /** 自定义样式 */ style?: CSSProperties; /** 表单内容 */ children?: ReactNode; /** 指定组件实现替换 HTML form */ as?: ComponentType, T>>; } export default function Form({ onSubmit, onCancel, size: sizeFromProps, layout: layoutFromProps, verticalGap: verticalGapFromProps, footer, children, className: classNameFromProps, style: styleFromProps, formRef, formProps, as, ...labelOptionsFromProps }: Props): React.ReactElement, T>, string | ((props: any) => React.ReactElement | null) | (new (props: any) => React.Component)>; export interface FooterProps { /** 提交按钮文本 */ submitText?: string; /** 取消按钮文本 */ cancelText?: string; /** 提交按钮类型 */ submitType?: ButtonType; /** 取消按钮类型 */ cancelType?: ButtonType; /** 提交按钮的 loading 状态 */ submitLoading?: boolean; /** 提交按钮的 props */ submitButtonProps?: ButtonProps; /** 取消按钮的 props */ cancelButtonProps?: ButtonProps; /** Footer 内容的对齐方向(对 `layout: inline` 的 Form 不生效) */ align?: FooterAlign; } /** 默认的 footer 实现 */ export declare function Footer({ submitText, cancelText, submitType, cancelType, submitLoading, submitButtonProps, cancelButtonProps, align: alignFromProps }: FooterProps): React.JSX.Element;