import { IconProps } from "../../Icon/type.mjs";
import "../../Icon/index.mjs";
import { FormLayout, FormVariant } from "../Form/type.mjs";
import { ValidateOn } from "./engine/types.mjs";
import { FieldValidate, StandardSchema } from "./schema.mjs";
import { CSSProperties, FormHTMLAttributes, ReactElement, ReactNode, Ref } from "react";
//#region src/base-ui/FormKit/type.d.ts
type Depth = [never, 0, 1, 2, 3, 4, 5];
type IsAny<T> = 0 extends 1 & T ? true : false;
type FieldPath<T, D extends number = 6> = [D] extends [never] ? string : IsAny<T> extends true ? string : T extends readonly (infer U)[] ? `${number}` | `${number}.${FieldPath<U, Depth[D]>}` : T extends object ? { [K in keyof T & string]: K | (NonNullable<T[K]> extends object ? `${K}.${FieldPath<NonNullable<T[K]>, Depth[D]>}` : never); }[keyof T & string] : never;
type FieldPathValue<T, P extends string> = IsAny<T> extends true ? any : P extends `${infer K}.${infer Rest}` ? K extends keyof T ? FieldPathValue<NonNullable<T[K]>, Rest> : T extends readonly (infer U)[] ? FieldPathValue<U, Rest> : unknown : P extends keyof T ? T[P] : T extends readonly (infer U)[] ? U : unknown;
type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]>; } : T;
type FormValues = Record<string, any>;
interface SetValueOptions {
  asUser?: boolean;
}
interface FormValidateResult<T> {
  errors: Partial<Record<FieldPath<T>, string>>;
  valid: boolean;
}
interface FormInstance<T extends FormValues = FormValues> {
  getValue: <P extends FieldPath<T>>(name: P) => FieldPathValue<T, P>;
  getValues: () => T;
  isDirty: () => boolean;
  isTouched: (name: FieldPath<T>) => boolean;
  reset: (values?: T) => void;
  resetField: (name: FieldPath<T>) => void;
  setErrors: (errors: Partial<Record<FieldPath<T>, string | undefined>>) => void;
  setSchema: (schema: StandardSchema | undefined) => void;
  setValue: <P extends FieldPath<T>>(name: P, value: FieldPathValue<T, P>, options?: SetValueOptions) => void;
  setValues: (values: DeepPartial<T>, options?: SetValueOptions) => void;
  submit: () => Promise<FormValidateResult<T>>;
  subscribe: <S>(selector: (values: T) => S, callback: (selected: S) => void) => () => void;
  validate: (names?: FieldPath<T>[]) => Promise<FormValidateResult<T>>;
}
interface UseFormOptions<T extends FormValues> {
  initialValues?: T;
  onSubmit?: (values: T) => unknown;
  onValuesChange?: (changed: DeepPartial<T>, values: T) => void;
  schema?: StandardSchema;
  validateOn?: ValidateOn;
  values?: T;
  valuesChangeDebounce?: number;
}
interface FieldBinding {
  emptyValue?: unknown;
  getValue?: (...args: any[]) => unknown;
  trigger?: string;
  valueProp?: string;
}
interface FieldRenderProps<V = any> {
  error: string | undefined;
  name: string;
  onBlur: () => void;
  onChange: (value: V) => void;
  touched: boolean;
  validating: boolean;
  value: V;
}
interface FormGroupItem<T extends FormValues = FormValues> {
  children: FormFieldProps<T>[] | ReactNode;
  collapsible?: boolean;
  defaultActive?: boolean;
  desc?: ReactNode;
  extra?: ReactNode;
  icon?: IconProps['icon'];
  key?: string;
  title: ReactNode;
  variant?: FormVariant;
}
interface FormProps<T extends FormValues = FormValues> extends Omit<FormHTMLAttributes<HTMLFormElement>, 'children' | 'className' | 'onSubmit' | 'style'> {
  activeKey?: (string | number)[];
  children?: ReactNode;
  className?: string;
  classNames?: {
    group?: string;
    item?: string;
  };
  collapsible?: boolean;
  defaultActiveKey?: (string | number)[];
  footer?: ReactNode;
  form: FormInstance<T>;
  gap?: number | string;
  itemMinWidth?: string | number;
  items?: FormGroupItem<T>[] | FormFieldProps<T>[];
  itemsType?: 'group' | 'flat';
  layout?: FormLayout;
  onCollapse?: (keys: (string | number)[]) => void;
  ref?: Ref<HTMLFormElement>;
  style?: CSSProperties;
  styles?: {
    group?: CSSProperties;
    item?: CSSProperties;
  };
  variant?: FormVariant;
}
interface FormFieldProps<T extends FormValues = FormValues> extends FieldBinding {
  avatar?: ReactNode;
  bare?: boolean;
  children?: ReactElement | ReactNode;
  className?: string;
  deps?: FieldPath<T>[];
  desc?: ReactNode;
  divider?: boolean;
  extra?: ReactNode;
  hidden?: boolean;
  label?: ReactNode;
  layout?: FormLayout;
  minWidth?: string | number;
  name?: FieldPath<T>;
  render?: (field: FieldRenderProps) => ReactNode;
  required?: boolean | string;
  style?: CSSProperties;
  tag?: string;
  validate?: FieldValidate;
  validateDebounce?: number;
  validateOn?: ValidateOn;
  variant?: FormVariant;
}
//#endregion
export { DeepPartial, FieldBinding, FieldPath, FieldPathValue, FieldRenderProps, type FieldValidate, FormFieldProps, FormGroupItem, FormInstance, FormProps, FormValidateResult, FormValues, SetValueOptions, type StandardSchema, UseFormOptions };
//# sourceMappingURL=type.d.mts.map