import * as React from 'react';
import { TextFieldProps } from '@mui/material/TextField';
import type { DataModel, DataSource, OmitId } from './types';
interface CrudFormState<D extends DataModel> {
  values: Partial<OmitId<D>>;
  errors: Partial<Record<keyof D, string>>;
}
export interface CrudFormSlotProps {
  textField?: TextFieldProps;
}
export interface CrudFormSlots {
  /**
   * The text field component used in the form.
   * @default TextField
   */
  textField?: React.JSXElementConstructor<TextFieldProps>;
}
export interface CrudFormProps<D extends DataModel> {
  /**
   * Server-side [data source](https://mui.com/toolpad/core/react-crud/#data-sources).
   */
  dataSource?: DataSource<D>;
  /**
   * Form state object, including field values and errors.
   */
  formState: CrudFormState<D>;
  /**
   * Callback fired when a form field is changed.
   */
  onFieldChange: (name: keyof D, value: string | number | boolean | File | null) => void | Promise<void>;
  /**
   * Callback fired when the form is submitted.
   */
  onSubmit: (formValues: Partial<OmitId<D>>) => void | Promise<void>;
  /**
   * Callback fired when the form is reset.
   */
  onReset?: (formValues: Partial<OmitId<D>>) => void | Promise<void>;
  /**
   * The components used for each slot inside.
   * @default {}
   */
  slots?: CrudFormSlots;
  /**
   * The props used for each slot inside.
   * @default {}
   */
  slotProps?: CrudFormSlotProps;
  /**
   * Text for form submit button.
   */
  submitButtonLabel: string;
}
/**
 *
 * Demos:
 *
 * - [CRUD](https://mui.com/toolpad/core/react-crud/)
 *
 * API:
 *
 * - [CrudForm API](https://mui.com/toolpad/core/api/crud-form)
 */
declare function CrudForm<D extends DataModel>(props: CrudFormProps<D>): React.JSX.Element;
declare namespace CrudForm {
  var propTypes: any;
}
export { CrudForm };