UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

122 lines • 4.86 kB
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