@saas-ui/forms 3.0.0-alpha.28 → 3.0.0-alpha.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @saas-ui/forms
2
2
 
3
+ ## 3.0.0-alpha.29
4
+
5
+ ### Major Changes
6
+
7
+ - New useForm hook that returns typed form components
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+ - @saas-ui/react@3.0.0-alpha.29
13
+
3
14
  ## 3.0.0-alpha.28
4
15
 
5
16
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -3,8 +3,8 @@ import React__default, { ForwardRefRenderFunction, PropsWithoutRef } from 'react
3
3
  import { RecipeProps, SimpleGridProps, InputProps, TextareaProps, SystemStyleObject, Field as Field$1, HTMLChakraProps, ButtonProps as ButtonProps$1 } from '@chakra-ui/react';
4
4
  import { MaybeRenderProp } from '@saas-ui/core/utils';
5
5
  import * as react_hook_form from 'react-hook-form';
6
- import { FieldValues, FieldPath, UseFormReturn as UseFormReturn$1, UseFieldArrayReturn, UseFormProps, WatchObserver, SubmitHandler, SubmitErrorHandler, ResolverOptions, ResolverResult, RegisterOptions, FormProviderProps as FormProviderProps$1 } from 'react-hook-form';
7
- export { ArrayPath, BatchFieldArrayUpdate, BrowserNativeObject, ChangeHandler, Control, Controller, ControllerFieldState, ControllerProps, ControllerRenderProps, CriteriaMode, CustomElement, DeepMap, DeepPartial, DeepPartialSkipArrayKey, DeepRequired, DefaultValues, DelayCallback, EmptyObject, ErrorOption, EventType, ExtractObjects, FieldArray, FieldArrayMethodProps, FieldArrayPath, FieldArrayPathValue, FieldArrayWithId, Field as FieldDef, FieldElement, FieldError, FieldErrors, FieldErrorsImpl, FieldName, FieldNamesMarkedBoolean, FieldPath, FieldPathByValue, FieldPathValue, FieldPathValues, FieldRefs, FieldValue, FieldValues, FormProviderProps, FormState, FormStateProxy, FormStateSubjectRef, GetIsDirty, InternalFieldErrors, InternalFieldName, InternalNameSet, IsAny, IsFlatObject, KeepStateOptions, LiteralUnion, Message, Mode, MultipleFieldErrors, Names, NativeFieldValue, NestedValue, NonUndefined, Noop, Primitive, ReadFormState, Ref, RefCallBack, RegisterOptions, Resolver, ResolverError, ResolverOptions, ResolverResult, ResolverSuccess, SetFieldValue, SetValueConfig, Subjects, SubmitErrorHandler, SubmitHandler, TriggerConfig, UnpackNestedValue, UseControllerProps, UseControllerReturn, UseFieldArrayProps, UseFieldArrayReturn, UseFormClearErrors, UseFormGetValues, UseFormHandleSubmit, UseFormProps, UseFormRegister, UseFormRegisterReturn, UseFormReset, UseFormResetField, UseFormReturn, UseFormSetError, UseFormSetFocus, UseFormSetValue, UseFormStateProps, UseFormStateReturn, UseFormTrigger, UseFormUnregister, UseFormWatch, UseWatchProps, Validate, ValidateResult, ValidationMode, ValidationRule, ValidationValue, ValidationValueMessage, WatchInternal, WatchObserver, appendErrors, useController, useFieldArray, useForm, useFormState, useWatch } from 'react-hook-form';
6
+ import { FieldValues, FieldPath, UseFormReturn as UseFormReturn$2, UseFieldArrayReturn, UseFormProps as UseFormProps$1, WatchObserver, SubmitHandler, SubmitErrorHandler, ResolverOptions, ResolverResult, RegisterOptions, useForm as useForm$1, DefaultValues, FormProviderProps as FormProviderProps$1 } from 'react-hook-form';
7
+ export { ArrayPath, BatchFieldArrayUpdate, BrowserNativeObject, ChangeHandler, Control, Controller, ControllerFieldState, ControllerProps, ControllerRenderProps, CriteriaMode, CustomElement, DeepMap, DeepPartial, DeepPartialSkipArrayKey, DeepRequired, DefaultValues, DelayCallback, EmptyObject, ErrorOption, EventType, ExtractObjects, FieldArray, FieldArrayMethodProps, FieldArrayPath, FieldArrayPathValue, FieldArrayWithId, Field as FieldDef, FieldElement, FieldError, FieldErrors, FieldErrorsImpl, FieldName, FieldNamesMarkedBoolean, FieldPath, FieldPathByValue, FieldPathValue, FieldPathValues, FieldRefs, FieldValue, FieldValues, FormProviderProps, FormState, FormStateProxy, FormStateSubjectRef, GetIsDirty, InternalFieldErrors, InternalFieldName, InternalNameSet, IsAny, IsFlatObject, KeepStateOptions, LiteralUnion, Message, Mode, MultipleFieldErrors, Names, NativeFieldValue, NestedValue, NonUndefined, Noop, Primitive, ReadFormState, Ref, RefCallBack, RegisterOptions, Resolver, ResolverError, ResolverOptions, ResolverResult, ResolverSuccess, SetFieldValue, SetValueConfig, Subjects, SubmitErrorHandler, SubmitHandler, TriggerConfig, UnpackNestedValue, UseControllerProps, UseControllerReturn, UseFieldArrayProps, UseFieldArrayReturn, UseFormClearErrors, UseFormGetValues, UseFormHandleSubmit, UseFormRegister, UseFormRegisterReturn, UseFormReset, UseFormResetField, UseFormSetError, UseFormSetFocus, UseFormSetValue, UseFormStateProps, UseFormStateReturn, UseFormTrigger, UseFormUnregister, UseFormWatch, UseWatchProps, Validate, ValidateResult, ValidationMode, ValidationRule, ValidationValue, ValidationValueMessage, WatchInternal, WatchObserver, appendErrors, useController, useFieldArray, useFormState, useWatch } from 'react-hook-form';
8
8
  import { CheckboxProps } from '@saas-ui/react/checkbox';
9
9
  import { NumberInputProps } from '@saas-ui/react/number-input';
10
10
  import { PasswordInputProps } from '@saas-ui/react/password-input';
@@ -15,6 +15,7 @@ import { SwitchProps } from '@saas-ui/react/switch';
15
15
  import * as react_jsx_runtime from 'react/jsx-runtime';
16
16
  import { UseStepperReturn } from '@saas-ui/core';
17
17
  import { ButtonProps } from '@saas-ui/react/button';
18
+ import { z } from 'zod';
18
19
 
19
20
  interface FormLayoutOptions {
20
21
  columns?: SimpleGridProps['columns'];
@@ -96,8 +97,8 @@ interface DisplayIfProps<TFieldValues extends FieldValues = FieldValues, TName e
96
97
  defaultValue?: unknown;
97
98
  isDisabled?: boolean;
98
99
  isExact?: boolean;
99
- condition?: (value: unknown, context: UseFormReturn$1<TFieldValues>) => boolean;
100
- onToggle?: (conditionMatched: boolean, context: UseFormReturn$1<TFieldValues>) => void;
100
+ condition?: (value: unknown, context: UseFormReturn$2<TFieldValues>) => boolean;
101
+ onToggle?: (conditionMatched: boolean, context: UseFormReturn$2<TFieldValues>) => void;
101
102
  }
102
103
  /**
103
104
  * Conditionally render parts of a form.
@@ -216,7 +217,7 @@ declare const useArrayFieldAddButton: () => {
216
217
  isDisabled: boolean;
217
218
  };
218
219
 
219
- interface FormRenderContext<TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TFieldTypes = FieldProps<TFieldValues>> extends UseFormReturn$1<TFieldValues, TContext> {
220
+ interface FormRenderContext<TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TFieldTypes = FieldProps<TFieldValues>> extends UseFormReturn$2<TFieldValues, TContext> {
220
221
  Field: React__default.FC<TFieldTypes & React__default.RefAttributes<FocusableElement>>;
221
222
  DisplayIf: React__default.FC<DisplayIfProps<TFieldValues>>;
222
223
  ArrayField: React__default.FC<ArrayFieldProps<TFieldValues> & React__default.RefAttributes<UseArrayFieldReturn>>;
@@ -242,7 +243,7 @@ interface FormOptions<TSchema = unknown, TFieldValues extends FieldValues = Fiel
242
243
  /**
243
244
  * The Hook Form state ref.
244
245
  */
245
- formRef?: React__default.Ref<UseFormReturn$1<TFieldValues, TContext>>;
246
+ formRef?: React__default.Ref<UseFormReturn$2<TFieldValues, TContext>>;
246
247
  /**
247
248
  * The form children, can be a render prop or a ReactNode.
248
249
  */
@@ -256,7 +257,7 @@ interface FormOptions<TSchema = unknown, TFieldValues extends FieldValues = Fiel
256
257
  */
257
258
  fields?: DefaultFieldOverrides;
258
259
  }
259
- interface FormProps<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TExtraFieldProps extends object = object, TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>> extends UseFormProps<TFieldValues, TContext>, Omit<HTMLChakraProps<'form'>, 'children' | 'onChange' | 'onSubmit' | 'onError'>, FormOptions<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes> {
260
+ interface FormProps$1<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TExtraFieldProps extends object = object, TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>> extends UseFormProps$1<TFieldValues, TContext>, Omit<HTMLChakraProps<'form'>, 'children' | 'onChange' | 'onSubmit' | 'onError'>, FormOptions<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes> {
260
261
  }
261
262
  /**
262
263
  * The wrapper component provides context, state, and focus management.
@@ -264,7 +265,7 @@ interface FormProps<TSchema = unknown, TFieldValues extends FieldValues = FieldV
264
265
  * @see Docs https://saas-ui.dev/docs/components/forms/form
265
266
  */
266
267
  declare const Form$1: FormComponent;
267
- type FormComponent = (<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TExtraFieldProps extends object = object, TFieldTypes = FieldProps<TFieldValues>>(props: FormProps<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes> & {
268
+ type FormComponent = (<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TExtraFieldProps extends object = object, TFieldTypes = FieldProps<TFieldValues>>(props: FormProps$1<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes> & {
268
269
  ref?: React__default.ForwardedRef<HTMLFormElement>;
269
270
  }) => React__default.ReactElement) & {
270
271
  displayName?: string;
@@ -429,7 +430,7 @@ type FieldOverrides<FieldDefs, TFieldValues extends FieldValues = FieldValues, T
429
430
  type?: 'array';
430
431
  } & Omit<ArrayFieldProps<TFieldValues>, 'name' | 'children'>);
431
432
  };
432
- type WithFields<TFormProps extends FormProps<any, any, any, any, any>, FieldDefs, ExtraOverrides = object> = TFormProps extends FormProps<infer _TSchema, infer TFieldValues, infer TContext, infer TExtraFieldProps> ? Omit<TFormProps, 'children' | 'fields'> & {
433
+ type WithFields<TFormProps extends FormProps$1<any, any, any, any, any>, FieldDefs, ExtraOverrides = object> = TFormProps extends FormProps$1<infer _TSchema, infer TFieldValues, infer TContext, infer TExtraFieldProps> ? Omit<TFormProps, 'children' | 'fields'> & {
433
434
  children?: FormChildren<FieldDefs, TFieldValues, TContext, TExtraFieldProps>;
434
435
  fields?: FieldOverrides<FieldDefs, TFieldValues> & {
435
436
  submit?: SubmitButtonProps;
@@ -545,7 +546,7 @@ interface CreateFormProps<FieldDefs, TGetBaseField extends GetBaseField = GetBas
545
546
  fields?: FieldDefs extends Record<string, React__default.FC<any>> ? FieldDefs : never;
546
547
  getBaseField?: TGetBaseField;
547
548
  }
548
- type FormType<FieldDefs, ExtraProps = object, ExtraFieldProps extends object = object, ExtraOverrides = object> = (<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object>(props: WithFields<FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>, FieldDefs, ExtraOverrides> & {
549
+ type FormType<FieldDefs, ExtraProps = object, ExtraFieldProps extends object = object, ExtraOverrides = object> = (<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object>(props: WithFields<FormProps$1<TSchema, TFieldValues, TContext, ExtraFieldProps>, FieldDefs, ExtraOverrides> & {
549
550
  ref?: React__default.ForwardedRef<HTMLFormElement>;
550
551
  } & ExtraProps) => React__default.ReactElement) & {
551
552
  displayName?: string;
@@ -553,6 +554,30 @@ type FormType<FieldDefs, ExtraProps = object, ExtraFieldProps extends object = o
553
554
  };
554
555
  declare function createForm<FieldDefs, TGetBaseField extends GetBaseField<any> = GetBaseField<any>>({ resolver, fieldResolver, fields, getBaseField, }?: CreateFormProps<FieldDefs, TGetBaseField>): FormType<FieldDefs, object, TGetBaseField extends GetBaseField<infer ExtraFieldProps extends object> ? ExtraFieldProps : object, object>;
555
556
 
557
+ interface UseFormProps<TFieldValues extends FieldValues, TContext extends object> extends UseFormProps$1<TFieldValues, TContext> {
558
+ }
559
+ interface UseFormReturn$1<TFieldValues extends FieldValues, TContext extends object> extends UseFormReturn$2<TFieldValues, TContext> {
560
+ Form: React.FC<Omit<FormProps<TFieldValues, TContext>, 'form'>>;
561
+ Field: React.FC<FieldProps<TFieldValues>>;
562
+ DisplayIf: React.FC<DisplayIfProps<TFieldValues>>;
563
+ ArrayField: React.FC<ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>>;
564
+ ObjectField: React.FC<ObjectFieldProps<TFieldValues>>;
565
+ }
566
+ declare function useForm<TFieldValues extends FieldValues, TContext extends object>(props?: UseFormProps<TFieldValues, TContext>): UseFormReturn$1<TFieldValues, TContext>;
567
+ interface FormProps<TFieldValues extends FieldValues = FieldValues, TContext extends object = object> extends HTMLChakraProps<'form'> {
568
+ children: React.ReactNode;
569
+ form: ReturnType<typeof useForm$1<TFieldValues, TContext>>;
570
+ onSubmit: (data: any) => void;
571
+ onError?: (errors: any) => void;
572
+ }
573
+ interface UseZodFormProps<TSchema extends z.AnyZodObject | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject, TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>, TContext extends object = object> extends Omit<UseFormProps$1<TFieldValues, TContext>, 'defaultValues'> {
574
+ schema: TSchema;
575
+ defaultValues?: DefaultValues<InferObjectSchema<TSchema>> | AsyncDefaultValues<InferObjectSchema<TSchema>>;
576
+ }
577
+ declare function useZodForm<TSchema extends z.AnyZodObject | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject, TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>, TContext extends object = object>(props: UseZodFormProps<TSchema, TFieldValues, TContext>): UseFormReturn$1<InferObjectSchema<TSchema>, TContext>;
578
+ type InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> = T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>;
579
+ type AsyncDefaultValues<TFieldValues> = (payload?: unknown) => Promise<TFieldValues>;
580
+
556
581
  interface DisplayFieldProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends Omit<Field$1.RootProps, 'type' | 'onChange' | 'defaultValue'> {
557
582
  name: TName | ArrayFieldPath<TName>;
558
583
  label?: string;
@@ -691,4 +716,4 @@ declare const createField: <TType = unknown, TProps extends object = object>(com
691
716
  */
692
717
  declare const Form: FormType<unknown, object, any, object>;
693
718
 
694
- export { ArrayField, ArrayFieldAddButton, type ArrayFieldButtonProps, ArrayFieldContainer, type ArrayFieldContainerProps, type ArrayFieldOptions, type ArrayFieldPath, type ArrayFieldProps, ArrayFieldProvider, ArrayFieldRemoveButton, ArrayFieldRow, ArrayFieldRowContainer, ArrayFieldRowFields, type ArrayFieldRowFieldsProps, ArrayFieldRowProvider, ArrayFieldRows, type ArrayFieldRowsProps, AutoFields, BaseField, type BaseFieldProps, Form$1 as BaseForm, type CreateFieldOptions, type CreateFormProps, type DefaultFieldOverrides, type DefaultFields, DisplayField, type DisplayFieldProps, DisplayIf, type DisplayIfProps, Field, type FieldOption, type FieldOptions, type FieldOverrides, type FieldProps, type FieldResolver, type FieldRules, type FieldsProps, FieldsProvider, Form, type FormChildren, type FormComponent, FormLayout, type FormLayoutProps, FormLegend, type FormProps, FormProvider, type FormRenderContext, type FormType, FormValue, type GetBaseField, type GetFieldResolver, InputField, type InputFieldProps, type MergeFieldProps, ObjectField, type ObjectFieldProps, type ObjectSchema, type ShallowMerge, type StepFormChildren, SubmitButton, type SubmitButtonProps, TextareaField, type TextareaFieldProps, type UseArrayFieldReturn, type UseArrayFieldRowProps, type UseArrayFieldRowReturn, type ValueOf, WatchField, type WatchFieldProps, type WithFields, createField, createForm, defaultFieldTypes, objectFieldResolver, useArrayField, useArrayFieldAddButton, useArrayFieldContext, useArrayFieldRemoveButton, useArrayFieldRow, useArrayFieldRowContext, useBaseField, useField, useFormContext };
719
+ export { ArrayField, ArrayFieldAddButton, type ArrayFieldButtonProps, ArrayFieldContainer, type ArrayFieldContainerProps, type ArrayFieldOptions, type ArrayFieldPath, type ArrayFieldProps, ArrayFieldProvider, ArrayFieldRemoveButton, ArrayFieldRow, ArrayFieldRowContainer, ArrayFieldRowFields, type ArrayFieldRowFieldsProps, ArrayFieldRowProvider, ArrayFieldRows, type ArrayFieldRowsProps, AutoFields, BaseField, type BaseFieldProps, Form$1 as BaseForm, type CreateFieldOptions, type CreateFormProps, type DefaultFieldOverrides, type DefaultFields, DisplayField, type DisplayFieldProps, DisplayIf, type DisplayIfProps, Field, type FieldOption, type FieldOptions, type FieldOverrides, type FieldProps, type FieldResolver, type FieldRules, type FieldsProps, FieldsProvider, Form, type FormChildren, type FormComponent, FormLayout, type FormLayoutProps, FormLegend, type FormProps$1 as FormProps, FormProvider, type FormRenderContext, type FormType, FormValue, type GetBaseField, type GetFieldResolver, InputField, type InputFieldProps, type MergeFieldProps, ObjectField, type ObjectFieldProps, type ObjectSchema, type ShallowMerge, type StepFormChildren, SubmitButton, type SubmitButtonProps, TextareaField, type TextareaFieldProps, type UseArrayFieldReturn, type UseArrayFieldRowProps, type UseArrayFieldRowReturn, type UseFormProps, type UseFormReturn$1 as UseFormReturn, type UseZodFormProps, type ValueOf, WatchField, type WatchFieldProps, type WithFields, createField, createForm, defaultFieldTypes, objectFieldResolver, useArrayField, useArrayFieldAddButton, useArrayFieldContext, useArrayFieldRemoveButton, useArrayFieldRow, useArrayFieldRowContext, useBaseField, useField, useForm, useFormContext, useZodForm };
package/dist/index.d.ts CHANGED
@@ -3,8 +3,8 @@ import React__default, { ForwardRefRenderFunction, PropsWithoutRef } from 'react
3
3
  import { RecipeProps, SimpleGridProps, InputProps, TextareaProps, SystemStyleObject, Field as Field$1, HTMLChakraProps, ButtonProps as ButtonProps$1 } from '@chakra-ui/react';
4
4
  import { MaybeRenderProp } from '@saas-ui/core/utils';
5
5
  import * as react_hook_form from 'react-hook-form';
6
- import { FieldValues, FieldPath, UseFormReturn as UseFormReturn$1, UseFieldArrayReturn, UseFormProps, WatchObserver, SubmitHandler, SubmitErrorHandler, ResolverOptions, ResolverResult, RegisterOptions, FormProviderProps as FormProviderProps$1 } from 'react-hook-form';
7
- export { ArrayPath, BatchFieldArrayUpdate, BrowserNativeObject, ChangeHandler, Control, Controller, ControllerFieldState, ControllerProps, ControllerRenderProps, CriteriaMode, CustomElement, DeepMap, DeepPartial, DeepPartialSkipArrayKey, DeepRequired, DefaultValues, DelayCallback, EmptyObject, ErrorOption, EventType, ExtractObjects, FieldArray, FieldArrayMethodProps, FieldArrayPath, FieldArrayPathValue, FieldArrayWithId, Field as FieldDef, FieldElement, FieldError, FieldErrors, FieldErrorsImpl, FieldName, FieldNamesMarkedBoolean, FieldPath, FieldPathByValue, FieldPathValue, FieldPathValues, FieldRefs, FieldValue, FieldValues, FormProviderProps, FormState, FormStateProxy, FormStateSubjectRef, GetIsDirty, InternalFieldErrors, InternalFieldName, InternalNameSet, IsAny, IsFlatObject, KeepStateOptions, LiteralUnion, Message, Mode, MultipleFieldErrors, Names, NativeFieldValue, NestedValue, NonUndefined, Noop, Primitive, ReadFormState, Ref, RefCallBack, RegisterOptions, Resolver, ResolverError, ResolverOptions, ResolverResult, ResolverSuccess, SetFieldValue, SetValueConfig, Subjects, SubmitErrorHandler, SubmitHandler, TriggerConfig, UnpackNestedValue, UseControllerProps, UseControllerReturn, UseFieldArrayProps, UseFieldArrayReturn, UseFormClearErrors, UseFormGetValues, UseFormHandleSubmit, UseFormProps, UseFormRegister, UseFormRegisterReturn, UseFormReset, UseFormResetField, UseFormReturn, UseFormSetError, UseFormSetFocus, UseFormSetValue, UseFormStateProps, UseFormStateReturn, UseFormTrigger, UseFormUnregister, UseFormWatch, UseWatchProps, Validate, ValidateResult, ValidationMode, ValidationRule, ValidationValue, ValidationValueMessage, WatchInternal, WatchObserver, appendErrors, useController, useFieldArray, useForm, useFormState, useWatch } from 'react-hook-form';
6
+ import { FieldValues, FieldPath, UseFormReturn as UseFormReturn$2, UseFieldArrayReturn, UseFormProps as UseFormProps$1, WatchObserver, SubmitHandler, SubmitErrorHandler, ResolverOptions, ResolverResult, RegisterOptions, useForm as useForm$1, DefaultValues, FormProviderProps as FormProviderProps$1 } from 'react-hook-form';
7
+ export { ArrayPath, BatchFieldArrayUpdate, BrowserNativeObject, ChangeHandler, Control, Controller, ControllerFieldState, ControllerProps, ControllerRenderProps, CriteriaMode, CustomElement, DeepMap, DeepPartial, DeepPartialSkipArrayKey, DeepRequired, DefaultValues, DelayCallback, EmptyObject, ErrorOption, EventType, ExtractObjects, FieldArray, FieldArrayMethodProps, FieldArrayPath, FieldArrayPathValue, FieldArrayWithId, Field as FieldDef, FieldElement, FieldError, FieldErrors, FieldErrorsImpl, FieldName, FieldNamesMarkedBoolean, FieldPath, FieldPathByValue, FieldPathValue, FieldPathValues, FieldRefs, FieldValue, FieldValues, FormProviderProps, FormState, FormStateProxy, FormStateSubjectRef, GetIsDirty, InternalFieldErrors, InternalFieldName, InternalNameSet, IsAny, IsFlatObject, KeepStateOptions, LiteralUnion, Message, Mode, MultipleFieldErrors, Names, NativeFieldValue, NestedValue, NonUndefined, Noop, Primitive, ReadFormState, Ref, RefCallBack, RegisterOptions, Resolver, ResolverError, ResolverOptions, ResolverResult, ResolverSuccess, SetFieldValue, SetValueConfig, Subjects, SubmitErrorHandler, SubmitHandler, TriggerConfig, UnpackNestedValue, UseControllerProps, UseControllerReturn, UseFieldArrayProps, UseFieldArrayReturn, UseFormClearErrors, UseFormGetValues, UseFormHandleSubmit, UseFormRegister, UseFormRegisterReturn, UseFormReset, UseFormResetField, UseFormSetError, UseFormSetFocus, UseFormSetValue, UseFormStateProps, UseFormStateReturn, UseFormTrigger, UseFormUnregister, UseFormWatch, UseWatchProps, Validate, ValidateResult, ValidationMode, ValidationRule, ValidationValue, ValidationValueMessage, WatchInternal, WatchObserver, appendErrors, useController, useFieldArray, useFormState, useWatch } from 'react-hook-form';
8
8
  import { CheckboxProps } from '@saas-ui/react/checkbox';
9
9
  import { NumberInputProps } from '@saas-ui/react/number-input';
10
10
  import { PasswordInputProps } from '@saas-ui/react/password-input';
@@ -15,6 +15,7 @@ import { SwitchProps } from '@saas-ui/react/switch';
15
15
  import * as react_jsx_runtime from 'react/jsx-runtime';
16
16
  import { UseStepperReturn } from '@saas-ui/core';
17
17
  import { ButtonProps } from '@saas-ui/react/button';
18
+ import { z } from 'zod';
18
19
 
19
20
  interface FormLayoutOptions {
20
21
  columns?: SimpleGridProps['columns'];
@@ -96,8 +97,8 @@ interface DisplayIfProps<TFieldValues extends FieldValues = FieldValues, TName e
96
97
  defaultValue?: unknown;
97
98
  isDisabled?: boolean;
98
99
  isExact?: boolean;
99
- condition?: (value: unknown, context: UseFormReturn$1<TFieldValues>) => boolean;
100
- onToggle?: (conditionMatched: boolean, context: UseFormReturn$1<TFieldValues>) => void;
100
+ condition?: (value: unknown, context: UseFormReturn$2<TFieldValues>) => boolean;
101
+ onToggle?: (conditionMatched: boolean, context: UseFormReturn$2<TFieldValues>) => void;
101
102
  }
102
103
  /**
103
104
  * Conditionally render parts of a form.
@@ -216,7 +217,7 @@ declare const useArrayFieldAddButton: () => {
216
217
  isDisabled: boolean;
217
218
  };
218
219
 
219
- interface FormRenderContext<TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TFieldTypes = FieldProps<TFieldValues>> extends UseFormReturn$1<TFieldValues, TContext> {
220
+ interface FormRenderContext<TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TFieldTypes = FieldProps<TFieldValues>> extends UseFormReturn$2<TFieldValues, TContext> {
220
221
  Field: React__default.FC<TFieldTypes & React__default.RefAttributes<FocusableElement>>;
221
222
  DisplayIf: React__default.FC<DisplayIfProps<TFieldValues>>;
222
223
  ArrayField: React__default.FC<ArrayFieldProps<TFieldValues> & React__default.RefAttributes<UseArrayFieldReturn>>;
@@ -242,7 +243,7 @@ interface FormOptions<TSchema = unknown, TFieldValues extends FieldValues = Fiel
242
243
  /**
243
244
  * The Hook Form state ref.
244
245
  */
245
- formRef?: React__default.Ref<UseFormReturn$1<TFieldValues, TContext>>;
246
+ formRef?: React__default.Ref<UseFormReturn$2<TFieldValues, TContext>>;
246
247
  /**
247
248
  * The form children, can be a render prop or a ReactNode.
248
249
  */
@@ -256,7 +257,7 @@ interface FormOptions<TSchema = unknown, TFieldValues extends FieldValues = Fiel
256
257
  */
257
258
  fields?: DefaultFieldOverrides;
258
259
  }
259
- interface FormProps<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TExtraFieldProps extends object = object, TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>> extends UseFormProps<TFieldValues, TContext>, Omit<HTMLChakraProps<'form'>, 'children' | 'onChange' | 'onSubmit' | 'onError'>, FormOptions<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes> {
260
+ interface FormProps$1<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TExtraFieldProps extends object = object, TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>> extends UseFormProps$1<TFieldValues, TContext>, Omit<HTMLChakraProps<'form'>, 'children' | 'onChange' | 'onSubmit' | 'onError'>, FormOptions<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes> {
260
261
  }
261
262
  /**
262
263
  * The wrapper component provides context, state, and focus management.
@@ -264,7 +265,7 @@ interface FormProps<TSchema = unknown, TFieldValues extends FieldValues = FieldV
264
265
  * @see Docs https://saas-ui.dev/docs/components/forms/form
265
266
  */
266
267
  declare const Form$1: FormComponent;
267
- type FormComponent = (<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TExtraFieldProps extends object = object, TFieldTypes = FieldProps<TFieldValues>>(props: FormProps<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes> & {
268
+ type FormComponent = (<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TExtraFieldProps extends object = object, TFieldTypes = FieldProps<TFieldValues>>(props: FormProps$1<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes> & {
268
269
  ref?: React__default.ForwardedRef<HTMLFormElement>;
269
270
  }) => React__default.ReactElement) & {
270
271
  displayName?: string;
@@ -429,7 +430,7 @@ type FieldOverrides<FieldDefs, TFieldValues extends FieldValues = FieldValues, T
429
430
  type?: 'array';
430
431
  } & Omit<ArrayFieldProps<TFieldValues>, 'name' | 'children'>);
431
432
  };
432
- type WithFields<TFormProps extends FormProps<any, any, any, any, any>, FieldDefs, ExtraOverrides = object> = TFormProps extends FormProps<infer _TSchema, infer TFieldValues, infer TContext, infer TExtraFieldProps> ? Omit<TFormProps, 'children' | 'fields'> & {
433
+ type WithFields<TFormProps extends FormProps$1<any, any, any, any, any>, FieldDefs, ExtraOverrides = object> = TFormProps extends FormProps$1<infer _TSchema, infer TFieldValues, infer TContext, infer TExtraFieldProps> ? Omit<TFormProps, 'children' | 'fields'> & {
433
434
  children?: FormChildren<FieldDefs, TFieldValues, TContext, TExtraFieldProps>;
434
435
  fields?: FieldOverrides<FieldDefs, TFieldValues> & {
435
436
  submit?: SubmitButtonProps;
@@ -545,7 +546,7 @@ interface CreateFormProps<FieldDefs, TGetBaseField extends GetBaseField = GetBas
545
546
  fields?: FieldDefs extends Record<string, React__default.FC<any>> ? FieldDefs : never;
546
547
  getBaseField?: TGetBaseField;
547
548
  }
548
- type FormType<FieldDefs, ExtraProps = object, ExtraFieldProps extends object = object, ExtraOverrides = object> = (<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object>(props: WithFields<FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>, FieldDefs, ExtraOverrides> & {
549
+ type FormType<FieldDefs, ExtraProps = object, ExtraFieldProps extends object = object, ExtraOverrides = object> = (<TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object>(props: WithFields<FormProps$1<TSchema, TFieldValues, TContext, ExtraFieldProps>, FieldDefs, ExtraOverrides> & {
549
550
  ref?: React__default.ForwardedRef<HTMLFormElement>;
550
551
  } & ExtraProps) => React__default.ReactElement) & {
551
552
  displayName?: string;
@@ -553,6 +554,30 @@ type FormType<FieldDefs, ExtraProps = object, ExtraFieldProps extends object = o
553
554
  };
554
555
  declare function createForm<FieldDefs, TGetBaseField extends GetBaseField<any> = GetBaseField<any>>({ resolver, fieldResolver, fields, getBaseField, }?: CreateFormProps<FieldDefs, TGetBaseField>): FormType<FieldDefs, object, TGetBaseField extends GetBaseField<infer ExtraFieldProps extends object> ? ExtraFieldProps : object, object>;
555
556
 
557
+ interface UseFormProps<TFieldValues extends FieldValues, TContext extends object> extends UseFormProps$1<TFieldValues, TContext> {
558
+ }
559
+ interface UseFormReturn$1<TFieldValues extends FieldValues, TContext extends object> extends UseFormReturn$2<TFieldValues, TContext> {
560
+ Form: React.FC<Omit<FormProps<TFieldValues, TContext>, 'form'>>;
561
+ Field: React.FC<FieldProps<TFieldValues>>;
562
+ DisplayIf: React.FC<DisplayIfProps<TFieldValues>>;
563
+ ArrayField: React.FC<ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>>;
564
+ ObjectField: React.FC<ObjectFieldProps<TFieldValues>>;
565
+ }
566
+ declare function useForm<TFieldValues extends FieldValues, TContext extends object>(props?: UseFormProps<TFieldValues, TContext>): UseFormReturn$1<TFieldValues, TContext>;
567
+ interface FormProps<TFieldValues extends FieldValues = FieldValues, TContext extends object = object> extends HTMLChakraProps<'form'> {
568
+ children: React.ReactNode;
569
+ form: ReturnType<typeof useForm$1<TFieldValues, TContext>>;
570
+ onSubmit: (data: any) => void;
571
+ onError?: (errors: any) => void;
572
+ }
573
+ interface UseZodFormProps<TSchema extends z.AnyZodObject | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject, TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>, TContext extends object = object> extends Omit<UseFormProps$1<TFieldValues, TContext>, 'defaultValues'> {
574
+ schema: TSchema;
575
+ defaultValues?: DefaultValues<InferObjectSchema<TSchema>> | AsyncDefaultValues<InferObjectSchema<TSchema>>;
576
+ }
577
+ declare function useZodForm<TSchema extends z.AnyZodObject | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject, TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>, TContext extends object = object>(props: UseZodFormProps<TSchema, TFieldValues, TContext>): UseFormReturn$1<InferObjectSchema<TSchema>, TContext>;
578
+ type InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> = T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>;
579
+ type AsyncDefaultValues<TFieldValues> = (payload?: unknown) => Promise<TFieldValues>;
580
+
556
581
  interface DisplayFieldProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends Omit<Field$1.RootProps, 'type' | 'onChange' | 'defaultValue'> {
557
582
  name: TName | ArrayFieldPath<TName>;
558
583
  label?: string;
@@ -691,4 +716,4 @@ declare const createField: <TType = unknown, TProps extends object = object>(com
691
716
  */
692
717
  declare const Form: FormType<unknown, object, any, object>;
693
718
 
694
- export { ArrayField, ArrayFieldAddButton, type ArrayFieldButtonProps, ArrayFieldContainer, type ArrayFieldContainerProps, type ArrayFieldOptions, type ArrayFieldPath, type ArrayFieldProps, ArrayFieldProvider, ArrayFieldRemoveButton, ArrayFieldRow, ArrayFieldRowContainer, ArrayFieldRowFields, type ArrayFieldRowFieldsProps, ArrayFieldRowProvider, ArrayFieldRows, type ArrayFieldRowsProps, AutoFields, BaseField, type BaseFieldProps, Form$1 as BaseForm, type CreateFieldOptions, type CreateFormProps, type DefaultFieldOverrides, type DefaultFields, DisplayField, type DisplayFieldProps, DisplayIf, type DisplayIfProps, Field, type FieldOption, type FieldOptions, type FieldOverrides, type FieldProps, type FieldResolver, type FieldRules, type FieldsProps, FieldsProvider, Form, type FormChildren, type FormComponent, FormLayout, type FormLayoutProps, FormLegend, type FormProps, FormProvider, type FormRenderContext, type FormType, FormValue, type GetBaseField, type GetFieldResolver, InputField, type InputFieldProps, type MergeFieldProps, ObjectField, type ObjectFieldProps, type ObjectSchema, type ShallowMerge, type StepFormChildren, SubmitButton, type SubmitButtonProps, TextareaField, type TextareaFieldProps, type UseArrayFieldReturn, type UseArrayFieldRowProps, type UseArrayFieldRowReturn, type ValueOf, WatchField, type WatchFieldProps, type WithFields, createField, createForm, defaultFieldTypes, objectFieldResolver, useArrayField, useArrayFieldAddButton, useArrayFieldContext, useArrayFieldRemoveButton, useArrayFieldRow, useArrayFieldRowContext, useBaseField, useField, useFormContext };
719
+ export { ArrayField, ArrayFieldAddButton, type ArrayFieldButtonProps, ArrayFieldContainer, type ArrayFieldContainerProps, type ArrayFieldOptions, type ArrayFieldPath, type ArrayFieldProps, ArrayFieldProvider, ArrayFieldRemoveButton, ArrayFieldRow, ArrayFieldRowContainer, ArrayFieldRowFields, type ArrayFieldRowFieldsProps, ArrayFieldRowProvider, ArrayFieldRows, type ArrayFieldRowsProps, AutoFields, BaseField, type BaseFieldProps, Form$1 as BaseForm, type CreateFieldOptions, type CreateFormProps, type DefaultFieldOverrides, type DefaultFields, DisplayField, type DisplayFieldProps, DisplayIf, type DisplayIfProps, Field, type FieldOption, type FieldOptions, type FieldOverrides, type FieldProps, type FieldResolver, type FieldRules, type FieldsProps, FieldsProvider, Form, type FormChildren, type FormComponent, FormLayout, type FormLayoutProps, FormLegend, type FormProps$1 as FormProps, FormProvider, type FormRenderContext, type FormType, FormValue, type GetBaseField, type GetFieldResolver, InputField, type InputFieldProps, type MergeFieldProps, ObjectField, type ObjectFieldProps, type ObjectSchema, type ShallowMerge, type StepFormChildren, SubmitButton, type SubmitButtonProps, TextareaField, type TextareaFieldProps, type UseArrayFieldReturn, type UseArrayFieldRowProps, type UseArrayFieldRowReturn, type UseFormProps, type UseFormReturn$1 as UseFormReturn, type UseZodFormProps, type ValueOf, WatchField, type WatchFieldProps, type WithFields, createField, createForm, defaultFieldTypes, objectFieldResolver, useArrayField, useArrayFieldAddButton, useArrayFieldContext, useArrayFieldRemoveButton, useArrayFieldRow, useArrayFieldRowContext, useBaseField, useField, useForm, useFormContext, useZodForm };
package/dist/index.js CHANGED
@@ -44,12 +44,12 @@ __export(src_exports, {
44
44
  AutoFields: () => AutoFields,
45
45
  BaseField: () => BaseField,
46
46
  BaseForm: () => Form,
47
- Controller: () => import_react_hook_form9.Controller,
47
+ Controller: () => import_react_hook_form10.Controller,
48
48
  DisplayField: () => DisplayField,
49
49
  DisplayIf: () => DisplayIf,
50
50
  Field: () => Field2,
51
51
  FieldsProvider: () => FieldsProvider,
52
- Form: () => Form2,
52
+ Form: () => Form4,
53
53
  FormLayout: () => FormLayout,
54
54
  FormLegend: () => FormLegend,
55
55
  FormProvider: () => FormProvider,
@@ -59,7 +59,7 @@ __export(src_exports, {
59
59
  SubmitButton: () => SubmitButton,
60
60
  TextareaField: () => TextareaField,
61
61
  WatchField: () => WatchField,
62
- appendErrors: () => import_react_hook_form9.appendErrors,
62
+ appendErrors: () => import_react_hook_form10.appendErrors,
63
63
  createField: () => createField,
64
64
  createForm: () => createForm,
65
65
  defaultFieldTypes: () => defaultFieldTypes,
@@ -71,13 +71,14 @@ __export(src_exports, {
71
71
  useArrayFieldRow: () => useArrayFieldRow,
72
72
  useArrayFieldRowContext: () => useArrayFieldRowContext,
73
73
  useBaseField: () => useBaseField,
74
- useController: () => import_react_hook_form9.useController,
74
+ useController: () => import_react_hook_form10.useController,
75
75
  useField: () => useField,
76
- useFieldArray: () => import_react_hook_form9.useFieldArray,
77
- useForm: () => import_react_hook_form9.useForm,
76
+ useFieldArray: () => import_react_hook_form10.useFieldArray,
77
+ useForm: () => useForm2,
78
78
  useFormContext: () => useFormContext,
79
- useFormState: () => import_react_hook_form9.useFormState,
80
- useWatch: () => import_react_hook_form9.useWatch
79
+ useFormState: () => import_react_hook_form10.useFormState,
80
+ useWatch: () => import_react_hook_form10.useWatch,
81
+ useZodForm: () => useZodForm
81
82
  });
82
83
  module.exports = __toCommonJS(src_exports);
83
84
 
@@ -992,17 +993,63 @@ function createForm({
992
993
  return DefaultForm;
993
994
  }
994
995
 
995
- // src/display-field.tsx
996
- var import_react15 = require("@chakra-ui/react");
996
+ // src/use-form.tsx
997
+ var import_react15 = require("react");
998
+ var import_react16 = require("@chakra-ui/react");
999
+ var import_zod = require("@hookform/resolvers/zod");
1000
+ var import_utils10 = require("@saas-ui/core/utils");
1001
+ var import_react_hook_form8 = require("react-hook-form");
997
1002
  var import_jsx_runtime14 = require("react/jsx-runtime");
1003
+ function useForm2(props = {}) {
1004
+ const form = (0, import_react_hook_form8.useForm)(props);
1005
+ const FormComponent = (0, import_react15.forwardRef)(
1006
+ function FormComponent2(props2, ref) {
1007
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Form2, { ...props2, form, ref });
1008
+ }
1009
+ );
1010
+ return {
1011
+ ...form,
1012
+ Form: FormComponent,
1013
+ Field: Field2,
1014
+ DisplayIf,
1015
+ ArrayField,
1016
+ ObjectField
1017
+ };
1018
+ }
1019
+ var Form2 = (0, import_react15.forwardRef)(
1020
+ function Form3(props, ref) {
1021
+ const { children, form, onSubmit, onError, ...rest } = props;
1022
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FormProvider, { ...form, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1023
+ import_react16.chakra.form,
1024
+ {
1025
+ ref,
1026
+ onSubmit: form.handleSubmit(onSubmit, onError),
1027
+ ...rest,
1028
+ className: (0, import_utils10.cx)("sui-form", props.className),
1029
+ children: props.children
1030
+ }
1031
+ ) });
1032
+ }
1033
+ );
1034
+ function useZodForm(props) {
1035
+ const { schema, ...rest } = props;
1036
+ return useForm2({
1037
+ resolver: (0, import_zod.zodResolver)(schema),
1038
+ ...rest
1039
+ });
1040
+ }
1041
+
1042
+ // src/display-field.tsx
1043
+ var import_react17 = require("@chakra-ui/react");
1044
+ var import_jsx_runtime15 = require("react/jsx-runtime");
998
1045
  var DisplayField = ({
999
1046
  name,
1000
1047
  label,
1001
1048
  ...props
1002
1049
  }) => {
1003
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_react15.Field.Root, { ...props, children: [
1004
- label ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react15.Field.Label, { htmlFor: name, children: label }) : null,
1005
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react15.Text, { fontSize: "md", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FormValue, { name }) })
1050
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_react17.Field.Root, { ...props, children: [
1051
+ label ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react17.Field.Label, { htmlFor: name, children: label }) : null,
1052
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react17.Text, { fontSize: "md", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormValue, { name }) })
1006
1053
  ] });
1007
1054
  };
1008
1055
  DisplayField.displayName = "DisplayField";
@@ -1013,11 +1060,11 @@ var FormValue = ({ name }) => {
1013
1060
  FormValue.displayName = "FormValue";
1014
1061
 
1015
1062
  // src/watch-field.tsx
1016
- var import_react_hook_form8 = require("react-hook-form");
1063
+ var import_react_hook_form9 = require("react-hook-form");
1017
1064
  var WatchField = (props) => {
1018
1065
  const { name, defaultValue, isDisabled, isExact } = props;
1019
1066
  const form = useFormContext();
1020
- const field = (0, import_react_hook_form8.useWatch)({
1067
+ const field = (0, import_react_hook_form9.useWatch)({
1021
1068
  name,
1022
1069
  defaultValue,
1023
1070
  disabled: isDisabled,
@@ -1027,8 +1074,8 @@ var WatchField = (props) => {
1027
1074
  };
1028
1075
 
1029
1076
  // src/index.ts
1030
- var import_react_hook_form9 = require("react-hook-form");
1031
- var Form2 = createForm();
1077
+ var import_react_hook_form10 = require("react-hook-form");
1078
+ var Form4 = createForm();
1032
1079
  // Annotate the CommonJS export names for ESM import in node:
1033
1080
  0 && (module.exports = {
1034
1081
  ArrayField,
@@ -1077,6 +1124,7 @@ var Form2 = createForm();
1077
1124
  useForm,
1078
1125
  useFormContext,
1079
1126
  useFormState,
1080
- useWatch
1127
+ useWatch,
1128
+ useZodForm
1081
1129
  });
1082
1130
  //# sourceMappingURL=index.js.map