@saas-ui/forms 3.0.0-next.13 → 3.0.0-next.14

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,18 @@
1
1
  # @saas-ui/forms
2
2
 
3
+ ## 3.0.0-next.14
4
+
5
+ ### Minor Changes
6
+
7
+ - 546dca1: BREAKING: Form onSubmit prop moved to useForm, Form onSubmit now accepts the native onSubmit handler and will override the build in form handler.
8
+ - 546dca1: BREAKING: Form onError moved to useForm and renamed to onInvalid
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies [78d7999]
13
+ - Updated dependencies [042ec4f]
14
+ - @saas-ui/react@3.0.0-next.14
15
+
3
16
  ## 3.0.0-next.13
4
17
 
5
18
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -555,6 +555,8 @@ type FormType<FieldDefs, ExtraProps = object, ExtraFieldProps extends object = o
555
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>;
556
556
 
557
557
  interface UseFormProps<TFieldValues extends FieldValues, TContext extends object> extends UseFormProps$1<TFieldValues, TContext> {
558
+ onSubmit: SubmitHandler<TFieldValues>;
559
+ onInvalid?: SubmitErrorHandler<FieldValues>;
558
560
  }
559
561
  interface UseFormReturn$1<TFieldValues extends FieldValues, TContext extends object> extends UseFormReturn$2<TFieldValues, TContext> {
560
562
  Form: React.FC<Omit<FormProps<TFieldValues, TContext>, 'form'>>;
@@ -563,18 +565,18 @@ interface UseFormReturn$1<TFieldValues extends FieldValues, TContext extends obj
563
565
  ArrayField: React.FC<ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>>;
564
566
  ObjectField: React.FC<ObjectFieldProps<TFieldValues>>;
565
567
  }
566
- declare function useForm<TFieldValues extends FieldValues, TContext extends object>(props?: UseFormProps<TFieldValues, TContext>): UseFormReturn$1<TFieldValues, TContext>;
568
+ declare function useForm<TFieldValues extends FieldValues, TContext extends object>(props: UseFormProps<TFieldValues, TContext>): UseFormReturn$1<TFieldValues, TContext>;
567
569
  interface FormProps<TFieldValues extends FieldValues = FieldValues, TContext extends object = object> extends HTMLChakraProps<'form'> {
568
570
  children: React.ReactNode;
569
571
  form: ReturnType<typeof useForm$1<TFieldValues, TContext>>;
570
- onSubmit: (data: any) => void;
571
- onError?: (errors: any) => void;
572
572
  }
573
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
574
  schema: TSchema;
575
- defaultValues?: DefaultValues<InferObjectSchema<TSchema>> | AsyncDefaultValues<InferObjectSchema<TSchema>>;
575
+ onSubmit: SubmitHandler<TFieldValues>;
576
+ onInvalid?: SubmitErrorHandler<FieldValues>;
577
+ defaultValues?: DefaultValues<TFieldValues> | AsyncDefaultValues<TFieldValues>;
576
578
  }
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>;
579
+ 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<TFieldValues, TContext>;
578
580
  type InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> = T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>;
579
581
  type AsyncDefaultValues<TFieldValues> = (payload?: unknown) => Promise<TFieldValues>;
580
582
 
package/dist/index.d.ts CHANGED
@@ -555,6 +555,8 @@ type FormType<FieldDefs, ExtraProps = object, ExtraFieldProps extends object = o
555
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>;
556
556
 
557
557
  interface UseFormProps<TFieldValues extends FieldValues, TContext extends object> extends UseFormProps$1<TFieldValues, TContext> {
558
+ onSubmit: SubmitHandler<TFieldValues>;
559
+ onInvalid?: SubmitErrorHandler<FieldValues>;
558
560
  }
559
561
  interface UseFormReturn$1<TFieldValues extends FieldValues, TContext extends object> extends UseFormReturn$2<TFieldValues, TContext> {
560
562
  Form: React.FC<Omit<FormProps<TFieldValues, TContext>, 'form'>>;
@@ -563,18 +565,18 @@ interface UseFormReturn$1<TFieldValues extends FieldValues, TContext extends obj
563
565
  ArrayField: React.FC<ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>>;
564
566
  ObjectField: React.FC<ObjectFieldProps<TFieldValues>>;
565
567
  }
566
- declare function useForm<TFieldValues extends FieldValues, TContext extends object>(props?: UseFormProps<TFieldValues, TContext>): UseFormReturn$1<TFieldValues, TContext>;
568
+ declare function useForm<TFieldValues extends FieldValues, TContext extends object>(props: UseFormProps<TFieldValues, TContext>): UseFormReturn$1<TFieldValues, TContext>;
567
569
  interface FormProps<TFieldValues extends FieldValues = FieldValues, TContext extends object = object> extends HTMLChakraProps<'form'> {
568
570
  children: React.ReactNode;
569
571
  form: ReturnType<typeof useForm$1<TFieldValues, TContext>>;
570
- onSubmit: (data: any) => void;
571
- onError?: (errors: any) => void;
572
572
  }
573
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
574
  schema: TSchema;
575
- defaultValues?: DefaultValues<InferObjectSchema<TSchema>> | AsyncDefaultValues<InferObjectSchema<TSchema>>;
575
+ onSubmit: SubmitHandler<TFieldValues>;
576
+ onInvalid?: SubmitErrorHandler<FieldValues>;
577
+ defaultValues?: DefaultValues<TFieldValues> | AsyncDefaultValues<TFieldValues>;
576
578
  }
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>;
579
+ 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<TFieldValues, TContext>;
578
580
  type InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> = T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>;
579
581
  type AsyncDefaultValues<TFieldValues> = (payload?: unknown) => Promise<TFieldValues>;
580
582
 
package/dist/index.js CHANGED
@@ -998,11 +998,20 @@ var import_zod = require("@hookform/resolvers/zod");
998
998
  var import_utils10 = require("@saas-ui/core/utils");
999
999
  var import_react_hook_form8 = require("react-hook-form");
1000
1000
  var import_jsx_runtime14 = require("react/jsx-runtime");
1001
- function useForm2(props = {}) {
1002
- const form = (0, import_react_hook_form8.useForm)(props);
1001
+ function useForm2(props) {
1002
+ const { onSubmit, onInvalid, ...rest } = props;
1003
+ const form = (0, import_react_hook_form8.useForm)(rest);
1003
1004
  const FormComponent = (0, import_react15.forwardRef)(
1004
1005
  function FormComponent2(props2, ref) {
1005
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Form2, { ...props2, form, ref });
1006
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1007
+ Form2,
1008
+ {
1009
+ ...props2,
1010
+ form,
1011
+ onSubmit: props2.onSubmit ?? form.handleSubmit(onSubmit, onInvalid),
1012
+ ref
1013
+ }
1014
+ );
1006
1015
  }
1007
1016
  );
1008
1017
  return {
@@ -1016,12 +1025,11 @@ function useForm2(props = {}) {
1016
1025
  }
1017
1026
  var Form2 = (0, import_react15.forwardRef)(
1018
1027
  function Form3(props, ref) {
1019
- const { children, form, onSubmit, onError, ...rest } = props;
1028
+ const { children, form, ...rest } = props;
1020
1029
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FormProvider, { ...form, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1021
1030
  import_react16.chakra.form,
1022
1031
  {
1023
1032
  ref,
1024
- onSubmit: form.handleSubmit(onSubmit, onError),
1025
1033
  ...rest,
1026
1034
  className: (0, import_utils10.cx)("sui-form", props.className),
1027
1035
  children: props.children
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/create-form.tsx","../src/default-fields.tsx","../src/create-field.tsx","../src/base-field.tsx","../src/form-context.tsx","../src/fields-context.tsx","../src/field-resolver.ts","../src/form.tsx","../src/array-field.tsx","../src/form-layout.tsx","../src/use-array-field.tsx","../src/utils.ts","../src/display-if.tsx","../src/field.tsx","../src/fields.tsx","../src/object-field.tsx","../src/submit-button.tsx","../src/use-form.tsx","../src/display-field.tsx","../src/watch-field.tsx"],"sourcesContent":["// Import and export Form and StepForm\nimport { createForm } from './create-form'\n\nexport { useForm, useZodForm } from './use-form'\nexport type { UseZodFormProps, UseFormReturn, UseFormProps } from './use-form'\n\n// import { createStepForm } from './create-step-form'\n\n// Exporting from './display-field'\nexport { DisplayField } from './display-field'\nexport type { DisplayFieldProps } from './display-field'\nexport { FormValue } from './display-field'\n\n// Exporting from './field'\nexport { Field } from './field'\nexport type { FieldRules } from './field'\n\n// Exporting from './fields'\nexport { AutoFields } from './fields'\nexport type { FieldsProps } from './fields'\n\n// Exporting from './fields-context'\nexport { FieldsProvider, useField } from './fields-context'\n\n// Exporting from './layout'\nexport { FormLayout } from './form-layout'\nexport type { FormLayoutProps } from './form-layout'\n\n// Exporting from './submit-button'\nexport { SubmitButton } from './submit-button'\nexport type { SubmitButtonProps } from './submit-button'\n\n// Exporting from './array-field'\nexport {\n ArrayField,\n ArrayFieldAddButton,\n ArrayFieldContainer,\n ArrayFieldRemoveButton,\n ArrayFieldRow,\n ArrayFieldRowContainer,\n ArrayFieldRowFields,\n ArrayFieldRows,\n} from './array-field'\n\nexport type {\n ArrayFieldButtonProps,\n ArrayFieldContainerProps,\n ArrayFieldProps,\n ArrayFieldRowFieldsProps,\n ArrayFieldRowsProps,\n} from './array-field'\n\n// Exporting from './use-array-field'\nexport {\n ArrayFieldProvider,\n ArrayFieldRowProvider,\n useArrayField,\n useArrayFieldAddButton,\n useArrayFieldContext,\n useArrayFieldRemoveButton,\n useArrayFieldRow,\n useArrayFieldRowContext,\n} from './use-array-field'\n\nexport type {\n ArrayFieldOptions,\n UseArrayFieldReturn,\n UseArrayFieldRowProps,\n UseArrayFieldRowReturn,\n} from './use-array-field'\n\n// Exporting from './object-field'\nexport { FormLegend, ObjectField } from './object-field'\nexport type { ObjectFieldProps } from './object-field'\n\n// Exporting from './display-if'\nexport { DisplayIf } from './display-if'\nexport type { DisplayIfProps } from './display-if'\n\n// Exporting from './step-form'\n// export { FormStep, FormStepper, NextButton, PrevButton } from './step-form'\n\n// export type {\n// FormStepOptions,\n// FormStepProps,\n// FormStepperProps,\n// NextButtonProps,\n// StepFormProps,\n// StepsOptions,\n// } from './step-form'\n\n// Exporting from './use-step-form'\n// export {\n// StepFormProvider,\n// useFormStep,\n// useStepForm,\n// useStepFormContext,\n// } from './use-step-form'\n\n// export type {\n// FormStepSubmitHandler,\n// StepFormContext,\n// StepFormRenderContext,\n// StepState,\n// UseFormStepProps,\n// UseStepFormProps,\n// UseStepFormReturn,\n// } from './use-step-form'\n\n// Exporting from './field-resolver'\nexport { objectFieldResolver } from './field-resolver'\nexport type {\n FieldResolver,\n GetFieldResolver,\n ObjectSchema,\n} from './field-resolver'\n\n// Exporting from './watch-field'\nexport { WatchField } from './watch-field'\nexport type { WatchFieldProps } from './watch-field'\n\n// Exporting BaseField from './base-field'\nexport { BaseField, useBaseField } from './base-field'\n\n// Exporting from './default-fields'\nexport {\n // CheckboxField,\n InputField,\n // NativeSelectField,\n // NumberInputField,\n // PasswordInputField,\n // PinField,\n // RadioField,\n // SelectField,\n // SwitchField,\n TextareaField,\n defaultFieldTypes,\n} from './default-fields'\n\nexport type {\n DefaultFields,\n InputFieldProps,\n // NumberInputFieldProps,\n // PinFieldProps,\n // SelectFieldProps,\n // SwitchFieldProps,\n TextareaFieldProps,\n // CheckboxFieldProps,\n // NativeSelectFieldProps,\n // RadioFieldProps,\n} from './default-fields'\n\n// Exporting types from './types'\nexport type {\n FieldProps,\n WithFields,\n BaseFieldProps,\n FieldOptions,\n DefaultFieldOverrides,\n // WithStepFields,\n GetBaseField,\n ArrayFieldPath,\n MergeFieldProps,\n FieldOption,\n FieldOverrides,\n FormChildren,\n ShallowMerge,\n StepFormChildren,\n ValueOf,\n} from './types'\n\n// Exporting from './create-form'\nexport { createForm } from './create-form'\nexport type { CreateFormProps, FormType } from './create-form'\n\n// Exporting from './create-field'\nexport { createField } from './create-field'\nexport type { CreateFieldOptions } from './create-field'\n\n// Exporting from './form'\nexport { Form as BaseForm } from './form'\nexport type { FormProps, FormRenderContext, FormComponent } from './form'\n\n// Exporting from './form-context'\nexport { FormProvider, useFormContext } from './form-context'\n\n// export { createStepForm } from './create-step-form'\n// export type { CreateStepFormProps } from './create-step-form'\n\n/**\n * Form component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const Form = createForm()\n\n/**\n * Multi-step form component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/step-form\n */\n// export const StepForm = createStepForm()\n\nexport type {\n BatchFieldArrayUpdate,\n ChangeHandler,\n Control,\n ControllerFieldState,\n ControllerProps,\n ControllerRenderProps,\n CriteriaMode,\n CustomElement,\n DeepMap,\n DeepPartial,\n DeepPartialSkipArrayKey,\n DefaultValues,\n DelayCallback,\n EmptyObject,\n ErrorOption,\n EventType,\n Field as FieldDef,\n FieldArray,\n FieldArrayMethodProps,\n FieldArrayWithId,\n FieldElement,\n FieldError,\n FieldErrors,\n FieldName,\n FieldNamesMarkedBoolean,\n FieldRefs,\n FieldValue,\n FieldValues,\n FormProviderProps,\n FormState,\n FormStateProxy,\n FormStateSubjectRef,\n GetIsDirty,\n InternalFieldErrors,\n InternalFieldName,\n InternalNameSet,\n IsAny,\n IsFlatObject,\n KeepStateOptions,\n LiteralUnion,\n Message,\n Mode,\n MultipleFieldErrors,\n Names,\n NativeFieldValue,\n NestedValue,\n NonUndefined,\n Noop,\n Primitive,\n ReadFormState,\n Ref,\n RefCallBack,\n RegisterOptions,\n Resolver,\n ResolverError,\n ResolverOptions,\n ResolverResult,\n ResolverSuccess,\n SetFieldValue,\n SetValueConfig,\n Subjects,\n SubmitErrorHandler,\n SubmitHandler,\n TriggerConfig,\n UnpackNestedValue,\n UseControllerProps,\n UseControllerReturn,\n UseFieldArrayProps,\n UseFieldArrayReturn,\n UseFormClearErrors,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormRegister,\n UseFormRegisterReturn,\n UseFormReset,\n UseFormResetField,\n UseFormSetError,\n UseFormSetFocus,\n UseFormSetValue,\n UseFormStateProps,\n UseFormStateReturn,\n UseFormTrigger,\n UseFormUnregister,\n UseFormWatch,\n UseWatchProps,\n Validate,\n ValidateResult,\n ValidationMode,\n ValidationRule,\n ValidationValue,\n ValidationValueMessage,\n WatchInternal,\n WatchObserver,\n ArrayPath,\n BrowserNativeObject,\n DeepRequired,\n ExtractObjects,\n FieldArrayPath,\n FieldArrayPathValue,\n FieldErrorsImpl,\n FieldPath,\n FieldPathByValue,\n FieldPathValue,\n FieldPathValues,\n} from 'react-hook-form'\n\nexport {\n appendErrors,\n useController,\n useFieldArray,\n useFormState,\n useWatch,\n Controller,\n} from 'react-hook-form'\n","import React, { ForwardedRef, forwardRef, useMemo } from 'react'\n\nimport { defaultFieldTypes } from './default-fields'\nimport { objectFieldResolver } from './field-resolver'\nimport type { GetFieldResolver } from './field-resolver'\nimport { FieldsProvider } from './fields-context'\nimport { FieldValues, Form, FormProps, GetResolver } from './form'\nimport { GetBaseField, WithFields } from './types'\n\nexport interface CreateFormProps<\n FieldDefs,\n TGetBaseField extends GetBaseField = GetBaseField,\n> {\n resolver?: GetResolver\n fieldResolver?: GetFieldResolver\n fields?: FieldDefs extends Record<string, React.FC<any>> ? FieldDefs : never\n getBaseField?: TGetBaseField\n}\n\nexport type FormType<\n FieldDefs,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n> = (<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n>(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs,\n ExtraOverrides\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps,\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport function createForm<\n FieldDefs,\n TGetBaseField extends GetBaseField<any> = GetBaseField<any>,\n>({\n resolver,\n fieldResolver = objectFieldResolver,\n fields,\n getBaseField,\n}: CreateFormProps<FieldDefs, TGetBaseField> = {}) {\n type ExtraFieldProps =\n TGetBaseField extends GetBaseField<infer ExtraFieldProps>\n ? ExtraFieldProps\n : object\n\n const DefaultForm = forwardRef(\n <\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n >(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs\n >,\n ref: ForwardedRef<HTMLFormElement>,\n ) => {\n const {\n schema,\n resolver: resolverProp,\n fieldResolver: fieldResolverProp,\n ...rest\n } = props\n\n const fieldsContext = useMemo(\n () => ({\n fields: { ...defaultFieldTypes, ...fields },\n getBaseField,\n }),\n [fields, getBaseField],\n )\n\n return (\n <FieldsProvider value={fieldsContext}>\n <Form\n ref={ref}\n resolver={resolverProp ?? resolver?.(props.schema)}\n fieldResolver={fieldResolverProp ?? fieldResolver?.(schema)}\n {...rest}\n />\n </FieldsProvider>\n )\n },\n ) as FormType<FieldDefs, object, ExtraFieldProps>\n\n DefaultForm.displayName = 'Form'\n DefaultForm.id = 'Form'\n\n return DefaultForm\n}\n","import React, { useMemo } from 'react'\n\nimport {\n Input,\n InputProps,\n Stack,\n type SystemStyleObject,\n Textarea,\n TextareaProps,\n createListCollection,\n} from '@chakra-ui/react'\nimport { Checkbox, type CheckboxProps } from '@saas-ui/react/checkbox'\nimport { InputGroup } from '@saas-ui/react/input'\nimport { NumberInput, type NumberInputProps } from '@saas-ui/react/number-input'\nimport {\n PasswordInput,\n type PasswordInputProps,\n} from '@saas-ui/react/password-input'\nimport { PinInput, type PinInputProps } from '@saas-ui/react/pin-input'\nimport { Radio } from '@saas-ui/react/radio'\nimport { RadioGroup } from '@saas-ui/react/radio-group'\nimport { Select } from '@saas-ui/react/select'\nimport { Switch, type SwitchProps } from '@saas-ui/react/switch'\n\nimport { createField } from './create-field.tsx'\nimport type { FieldOption, FieldOptions } from './types.ts'\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n startElement?: React.ReactNode\n endElement?: React.ReactNode\n}\n\nexport const InputField = createField<HTMLInputElement, InputFieldProps>(\n ({ type = 'text', startElement, endElement, size, ...rest }, ref) => {\n return (\n <InputGroup\n startElement={startElement}\n endElement={endElement}\n width=\"full\"\n >\n <Input type={type} size={size} {...rest} ref={ref} />\n </InputGroup>\n )\n },\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = createField<\n HTMLInputElement,\n NumberInputFieldProps\n>((props, ref) => <NumberInput {...props} ref={ref} />, {\n isControlled: true,\n})\n\nexport const PasswordInputField = createField<\n HTMLInputElement,\n PasswordInputProps\n>(({ type = 'password', ...props }, ref) => (\n <PasswordInput ref={ref} {...props} />\n))\n\nexport interface TextareaFieldProps extends TextareaProps {}\n\nexport const TextareaField = createField<\n HTMLTextAreaElement,\n TextareaFieldProps\n>((props, ref) => <Textarea {...props} ref={ref} />)\n\nexport interface SwitchFieldProps extends SwitchProps {\n type: 'switch'\n}\n\nexport const SwitchField = createField<HTMLInputElement, SwitchFieldProps>(\n ({ type, value, ...rest }, ref) => {\n return <Switch checked={!!value} {...rest} ref={ref} />\n },\n {\n isControlled: true,\n },\n)\n\nexport interface SelectFieldProps<Multiple extends boolean = boolean>\n extends Omit<\n Select.RootProps<FieldOption>,\n 'collection' | 'value' | 'multiple' | 'onChange' | 'onValueChange'\n > {\n multiple?: Multiple\n value?: Multiple extends true ? Array<string> : string\n onChange?: (value: Multiple extends true ? Array<string> : string) => void\n options: FieldOptions\n placeholder?: string\n triggerProps?: Select.TriggerProps\n contentProps?: Select.ContentProps\n}\n\nexport const SelectField = createField<HTMLDivElement, SelectFieldProps>(\n (props, ref) => {\n const {\n triggerProps,\n contentProps,\n options,\n placeholder,\n onChange,\n onBlur,\n multiple = false,\n value: valueProp,\n ...rest\n } = props\n\n const collection = useMemo(\n () =>\n createListCollection({\n items: options,\n }),\n [options],\n )\n\n const value = multiple\n ? [...(valueProp ?? [])]\n : valueProp\n ? [valueProp as string]\n : []\n\n return (\n <Select.Root\n ref={ref}\n collection={collection}\n onValueChange={(details) => {\n onChange(multiple ? details.value : details.value[0])\n }}\n onInteractOutside={() => onBlur()}\n value={value}\n {...rest}\n >\n <Select.Trigger {...triggerProps}>\n <Select.ValueText placeholder={placeholder} />\n </Select.Trigger>\n <Select.Content {...contentProps}>\n {collection.items.map((option) => (\n <Select.Item key={option.value} item={option}>\n {option.label || option.value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport interface CheckboxFieldProps extends CheckboxProps {\n type: 'checkbox'\n label?: string\n}\n\nexport const CheckboxField = createField<HTMLInputElement, CheckboxFieldProps>(\n ({ label, type, ...props }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n },\n {\n hideLabel: true,\n },\n)\n\nexport interface RadioFieldProps extends RadioGroup.RootProps {\n type: 'radio'\n options: FieldOptions\n flexDirection?: SystemStyleObject['flexDirection']\n gap?: SystemStyleObject['gap']\n}\n\nexport const RadioField = createField<HTMLInputElement, RadioFieldProps>(\n (props, ref) => {\n const { options, onChange, flexDirection = 'column', gap, ...rest } = props\n return (\n <RadioGroup.Root\n ref={ref}\n onValueChange={({ value }) => {\n onChange?.(value)\n }}\n {...rest}\n >\n <Stack flexDirection={flexDirection} gap={gap}>\n {options.map((option) => (\n <Radio key={option.value} value={option.value}>\n {option.label || option.value}\n </Radio>\n ))}\n </Stack>\n </RadioGroup.Root>\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport interface PinFieldProps\n extends Omit<PinInputProps, 'type' | 'value' | 'onChange'> {\n type: 'pin'\n pinLength?: number\n pinType?: PinInputProps['type']\n value?: string\n onChange?: (value: string) => void\n}\n\nexport const PinField = createField<HTMLInputElement, PinFieldProps>(\n (props, ref) => {\n const { pinType, value: valueProp, onChange, ...inputProps } = props\n\n const value = valueProp?.split('') || []\n\n return (\n <PinInput\n ref={ref}\n {...inputProps}\n value={value}\n onValueChange={(details) => {\n onChange(details.valueAsString)\n }}\n type={pinType}\n />\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport const defaultFieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n time: InputField,\n number: NumberInputField,\n pin: PinField,\n checkbox: CheckboxField,\n radio: RadioField,\n password: PasswordInputField,\n select: SelectField,\n switch: SwitchField,\n textarea: TextareaField,\n}\n\nexport type DefaultFields = typeof defaultFieldTypes\n","import React, {\n type ForwardRefRenderFunction,\n type PropsWithoutRef,\n forwardRef,\n} from 'react'\n\nimport { callAll, mergeRefs, splitProps } from '@saas-ui/core/utils'\nimport { Controller, type RegisterOptions } from 'react-hook-form'\n\nimport { BaseField } from './base-field'\nimport { useFieldsContext } from './fields-context'\nimport { useFormContext } from './form-context'\nimport { BaseFieldProps, GetBaseField } from './types'\n\ninterface CreateFieldProps<ExtraFieldProps extends object = object> {\n displayName: string\n hideLabel?: boolean\n getBaseField: GetBaseField<ExtraFieldProps>\n}\n\nconst _createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, getBaseField: getBaseFieldProp }: CreateFieldProps,\n) => {\n const Field = forwardRef<HTMLDivElement, any>((props, ref) => {\n const { id, label, required, rules } = props\n\n const inputRules = {\n required,\n ...rules,\n }\n\n const fieldContext = useFieldsContext()\n\n const getBaseField = fieldContext?.getBaseField ?? getBaseFieldProp\n\n const { props: extraProps, Component } = React.useMemo(\n () => getBaseField(),\n [getBaseField],\n )\n\n const rootProps = {\n name: props.name,\n label: props.label,\n disabled: props.disabled,\n invalid: props.invalid,\n readOnly: props.readOnly,\n required: props.required,\n }\n\n const [baseFieldProps, inputProps] = splitProps(\n props,\n ['orientation', 'help', 'hideLabel'].concat(extraProps),\n )\n\n return (\n <Component {...rootProps} {...baseFieldProps}>\n <InputComponent\n ref={ref}\n id={id}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n {...inputProps}\n rules={inputRules}\n />\n </Component>\n )\n })\n\n Field.displayName = displayName\n\n return Field\n}\n\nconst withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<typeof InputComponent, ControlProps>((props, ref) => {\n const { name, rules, ...inputProps } = props\n const { control } = useFormContext()\n\n const onChange = inputProps.onChange as (...event: any[]) => void\n\n return (\n <Controller\n name={name}\n control={control}\n rules={rules}\n render={({ field: { ref: _ref, ...field } }) => (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAll(onChange, field.onChange)}\n onBlur={callAll(inputProps.onBlur, field.onBlur)}\n ref={mergeRefs(ref, _ref)}\n />\n )}\n />\n )\n })\n}\n\nconst withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<typeof InputComponent, ControlProps>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n const onChange = inputProps.onChange as (...event: any[]) => void\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAll(onChange, field.onChange)}\n onBlur={callAll(inputProps.onBlur, field.onBlur)}\n ref={mergeRefs(ref, _ref)}\n />\n )\n },\n )\n}\n\nexport interface CreateFieldOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\n}\n\ninterface ControlProps {\n name: string\n onChange: (...event: any[]) => void\n onBlur: (...event: any[]) => void\n value: unknown\n disabled?: boolean\n rules?: RegisterOptions\n}\n\n/**\n * Register a new field type\n * @param type The name for this field in kebab-case, eg `email` or `array-field`\n * @param component The React component\n * @param options\n * @param options.isControlled Set this to true if this is a controlled field.\n * @param options.hideLabel Hide the field label, for example for the checkbox field.\n */\nexport const createField = <TType = unknown, TProps extends object = object>(\n component: ForwardRefRenderFunction<\n TType,\n PropsWithoutRef<TProps & ControlProps>\n >,\n options?: CreateFieldOptions,\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(forwardRef(component))\n } else {\n InputComponent = withUncontrolledInput(forwardRef(component))\n }\n\n const Field = _createField(InputComponent, {\n displayName: `${component.displayName ?? 'Custom'}Field`,\n hideLabel: options?.hideLabel,\n getBaseField: () =>\n ({\n props: [],\n Component: BaseField,\n }) as any,\n }) as React.ForwardRefExoticComponent<\n Omit<BaseFieldProps, keyof TProps> & TProps & React.RefAttributes<TType>\n >\n\n return Field\n}\n","import * as React from 'react'\n\nimport { Field } from '@chakra-ui/react'\nimport { splitProps } from '@saas-ui/core/utils'\nimport { FormState, get } from 'react-hook-form'\n\nimport { useFormContext } from './form-context'\nimport type { BaseFieldProps } from './types'\n\nconst getError = (name: string, formState: FormState<{ [x: string]: any }>) => {\n return get(formState.errors, name)\n}\n\nconst isTouched = (\n name: string,\n formState: FormState<{ [x: string]: any }>,\n) => {\n return get(formState.touchedFields, name)\n}\n\nexport const useBaseField = (props: BaseFieldProps) => {\n // TODO: Clean up these props / types\n const [fieldProps, rootProps] = splitProps(props, [\n 'name',\n 'label',\n 'help',\n 'hideLabel',\n 'placeholder',\n 'rules',\n 'type',\n 'children',\n ])\n\n const { formState } = useFormContext()\n\n const error = getError(fieldProps.name, formState)\n const touched = isTouched(fieldProps.name, formState)\n\n return {\n ...fieldProps,\n rootProps,\n error,\n touched,\n }\n}\n\n/**\n * The default BaseField component\n * Composes the Chakra UI Field component, with Label, HelperText and ErrorText.\n */\nexport const BaseField: React.FC<BaseFieldProps> = (props) => {\n const { rootProps, label, hideLabel, help, error } = useBaseField(props)\n\n const isInvalid = !!error\n\n return (\n <Field.Root invalid={isInvalid} {...rootProps}>\n {label && !hideLabel ? (\n <Field.Label>\n {label} <Field.RequiredIndicator />\n </Field.Label>\n ) : null}\n\n {props.children}\n {help && !error?.message ? (\n <Field.HelperText>{help}</Field.HelperText>\n ) : null}\n {error?.message && <Field.ErrorText>{error?.message}</Field.ErrorText>}\n </Field.Root>\n )\n}\n\nBaseField.displayName = 'BaseField'\n","import * as React from 'react'\n\nimport {\n FieldValues,\n FormProvider as HookFormProvider,\n FormProviderProps as HookFormProviderProps,\n useFormContext as useHookFormContext,\n} from 'react-hook-form'\n\nimport type { FieldResolver } from './field-resolver'\nimport type { BaseFieldProps } from './types'\n\nexport type FormContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = {\n fieldResolver?: FieldResolver\n schema?: TSchema\n fields?: {\n [key: string]: unknown\n }\n}\n\nexport type FormProviderProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = HookFormProviderProps<TFieldValues, TContext> & {\n fieldResolver?: FieldResolver\n schema?: TSchema\n fields?: {\n [key: string]: unknown\n }\n}\n\nconst FormContext = React.createContext<FormContextValue | null>(null)\n\nexport const useFormContext = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n>() => {\n const context = React.useContext(FormContext)\n const hookContext = useHookFormContext<TFieldValues, TContext>()\n\n return {\n ...hookContext,\n ...context,\n }\n}\n\nexport const useFieldProps = <TFieldValues extends FieldValues = FieldValues>(\n name: string,\n): BaseFieldProps<TFieldValues> | undefined => {\n const parsedName = name?.replace(/\\.[0-9]/g, '.$')\n const context = useFormContext()\n return (context?.fields?.[parsedName] as any) || {}\n}\n\nexport type UseFormReturn<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = ReturnType<typeof useFormContext<TFieldValues, TContext, TSchema>>\n\nexport const FormProvider = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n>(\n props: FormProviderProps<TFieldValues, TContext, TSchema>,\n) => {\n const { children, fieldResolver, schema, fields, ...rest } = props\n return (\n <HookFormProvider {...rest}>\n <FormContext.Provider value={{ fieldResolver, schema, fields }}>\n {children}\n </FormContext.Provider>\n </HookFormProvider>\n )\n}\n","import React from 'react'\n\nimport type { GetBaseField } from './types'\n\nexport interface FieldsContextValue<\n TFields = any,\n TBaseFieldProps extends object = object,\n> {\n fields: Record<string, React.FC<TFields>>\n getBaseField?: GetBaseField<TBaseFieldProps>\n}\n\nconst FieldsContext = React.createContext<FieldsContextValue | null>(null)\n\nexport const FieldsProvider: React.FC<{\n value: FieldsContextValue\n children: React.ReactNode\n}> = (props) => {\n return (\n <FieldsContext.Provider value={props.value}>\n {props.children}\n </FieldsContext.Provider>\n )\n}\n\nexport const useFieldsContext = () => {\n return React.useContext(FieldsContext)\n}\n\nexport const useField = (\n type: string,\n fallback: React.FC<any>,\n): React.FC<any> => {\n const context = React.useContext(FieldsContext)\n return context?.fields?.[type] || fallback\n}\n","import { get } from '@saas-ui/core/utils'\n\nimport { ArrayFieldProps } from './array-field.tsx'\nimport { DefaultFields } from './default-fields.tsx'\nimport { ObjectFieldProps } from './object-field.tsx'\nimport { BaseFieldProps, ValueOf } from './types.ts'\n\nexport type FieldResolver = {\n getFields(): BaseFieldProps[]\n getNestedFields(name: string): BaseFieldProps[]\n}\n\nexport type GetFieldResolver<TSchema = any> = (schema: TSchema) => FieldResolver\n\ntype FieldTypes<FieldDefs = DefaultFields> = ValueOf<{\n [K in keyof FieldDefs]: FieldDefs[K] extends React.FC<infer Props>\n ? { type?: K } & Omit<Props, 'name'>\n : never\n}>\n\ntype SchemaField<FieldDefs = DefaultFields> =\n | FieldTypes<FieldDefs>\n | (Omit<ObjectFieldProps, 'name' | 'children'> & {\n type: 'object'\n properties?: Record<string, SchemaField<FieldDefs>>\n })\n | (Omit<ArrayFieldProps, 'name' | 'children'> & {\n type: 'array'\n items?: SchemaField<FieldDefs>\n })\n\nexport type ObjectSchema<FieldDefs = DefaultFields> = Record<\n string,\n SchemaField<FieldDefs>\n>\n\nconst mapFields = (schema: ObjectSchema): BaseFieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, props]) => {\n const { items, label, title, ...field } = props as any\n return {\n ...field,\n name,\n label: label || title || name, // json schema compatibility\n }\n })\n\nexport const objectFieldResolver: GetFieldResolver<ObjectSchema> = (schema) => {\n const getFields = (): BaseFieldProps[] => {\n return mapFields(schema)\n }\n const getNestedFields = (name: string): BaseFieldProps[] => {\n const field = get(schema, name)\n\n if (!field) return []\n\n if (field.items?.type === 'object') {\n return mapFields(field.items.properties)\n } else if (field.type === 'object') {\n return mapFields(field.properties)\n }\n return [field.items]\n }\n\n return { getFields, getNestedFields }\n}\n","import React, { forwardRef } from 'react'\n\nimport { HTMLChakraProps, chakra } from '@chakra-ui/react'\nimport { type MaybeRenderProp, cx, runIfFn } from '@saas-ui/core/utils'\nimport {\n FieldValues,\n ResolverOptions,\n ResolverResult,\n SubmitErrorHandler,\n SubmitHandler,\n UseFormProps,\n UseFormReturn,\n WatchObserver,\n useForm,\n} from 'react-hook-form'\n\nimport { ArrayField, ArrayFieldProps } from './array-field.tsx'\nimport { DisplayIf, DisplayIfProps } from './display-if.tsx'\nimport type { FieldResolver } from './field-resolver.tsx'\nimport { Field as DefaultField } from './field.tsx'\nimport { AutoFields } from './fields.tsx'\nimport { FormProvider } from './form-context.tsx'\nimport { FormLayout } from './form-layout.tsx'\nimport { ObjectField, ObjectFieldProps } from './object-field.tsx'\nimport { SubmitButton } from './submit-button.tsx'\nimport {\n DefaultFieldOverrides,\n FieldProps,\n type FocusableElement,\n} from './types.ts'\nimport { UseArrayFieldReturn } from './use-array-field.tsx'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\nexport interface FormRenderContext<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n> extends UseFormReturn<TFieldValues, TContext> {\n Field: React.FC<TFieldTypes & React.RefAttributes<FocusableElement>>\n DisplayIf: React.FC<DisplayIfProps<TFieldValues>>\n ArrayField: React.FC<\n ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>\n >\n ObjectField: React.FC<ObjectFieldProps<TFieldValues>>\n}\n\ninterface FormOptions<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>,\n> {\n /**\n * The form schema.\n */\n schema?: TSchema\n /**\n * Triggers when any of the field change.\n */\n onChange?: WatchObserver<TFieldValues>\n /**\n * The submit handler.\n */\n onSubmit: SubmitHandler<TFieldValues>\n /**\n * Triggers when there are validation errors.\n */\n onError?: SubmitErrorHandler<TFieldValues>\n /**\n * The Hook Form state ref.\n */\n formRef?: React.Ref<UseFormReturn<TFieldValues, TContext>>\n /**\n * The form children, can be a render prop or a ReactNode.\n */\n children?: MaybeRenderProp<\n FormRenderContext<TFieldValues, TContext, TFieldTypes>\n >\n /**\n * The field resolver, used to resolve the fields from schemas.\n */\n fieldResolver?: FieldResolver\n /**\n * Field overrides\n */\n fields?: DefaultFieldOverrides\n}\n\nexport interface FormProps<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>,\n> extends UseFormProps<TFieldValues, TContext>,\n Omit<\n HTMLChakraProps<'form'>,\n 'children' | 'onChange' | 'onSubmit' | 'onError'\n >,\n FormOptions<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n > {}\n\n/**\n * The wrapper component provides context, state, and focus management.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const Form = forwardRef(\n <\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n >(\n props: FormProps<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n >,\n ref: React.ForwardedRef<HTMLFormElement>,\n ) => {\n const {\n mode = 'all',\n resolver,\n fieldResolver,\n fields,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n schema,\n defaultValues,\n values,\n context,\n resetOptions,\n onChange,\n onSubmit,\n onError,\n formRef,\n children,\n ...rest\n } = props\n\n const form = {\n mode,\n resolver,\n defaultValues,\n values,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n context,\n resetOptions,\n }\n\n const methods = useForm<TFieldValues, TContext>(form)\n const { handleSubmit } = methods\n\n // This exposes the useForm api through the forwarded ref\n React.useImperativeHandle(formRef, () => methods, [formRef, methods])\n\n React.useEffect(() => {\n let subscription: any\n if (onChange) {\n subscription = methods.watch(onChange)\n }\n return () => subscription?.unsubscribe()\n }, [methods, onChange])\n\n let _children = children\n if (!_children && fieldResolver) {\n _children = (\n <FormLayout>\n <AutoFields />\n <SubmitButton {...fields?.submit} />\n </FormLayout>\n )\n }\n\n return (\n <FormProvider\n {...methods}\n schema={schema}\n fieldResolver={fieldResolver}\n fields={fields}\n >\n <chakra.form\n ref={ref}\n onSubmit={handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('sui-form', props.className)}\n >\n {runIfFn(_children, {\n Field: DefaultField as any,\n DisplayIf: DisplayIf as any,\n ArrayField: ArrayField as any,\n ObjectField: ObjectField as any,\n ...methods,\n })}\n </chakra.form>\n </FormProvider>\n )\n },\n) as FormComponent\n\nexport type FormComponent = (<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n>(\n props: FormProps<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n },\n) => React.ReactElement) & {\n displayName?: string\n}\n\nForm.displayName = 'Form'\n\nexport type GetResolver = <\n TFieldValues extends FieldValues,\n TContext extends object,\n>(\n schema: unknown,\n) => (\n values: TFieldValues,\n context: TContext | undefined,\n options: ResolverOptions<TFieldValues>,\n) => ResolverResult<TFieldValues> | Promise<ResolverResult<TFieldValues>>\n","import React, { forwardRef } from 'react'\n\nimport { Button, ButtonProps, chakra } from '@chakra-ui/react'\nimport type { MaybeRenderProp } from '@saas-ui/core/utils'\nimport { MinusIcon, PlusIcon } from '@saas-ui/react/icons'\nimport { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { BaseField } from './base-field'\nimport { useFieldProps } from './form-context'\nimport { FormLayout, FormLayoutProps } from './form-layout'\nimport { BaseFieldProps } from './types'\nimport {\n ArrayFieldOptions,\n ArrayFieldProvider,\n ArrayFieldRowProvider,\n UseArrayFieldReturn,\n useArrayField,\n useArrayFieldAddButton,\n useArrayFieldContext,\n useArrayFieldRemoveButton,\n useArrayFieldRow,\n useArrayFieldRowContext,\n} from './use-array-field'\nimport { mapNestedFields } from './utils'\n\nexport interface ArrayFieldButtonProps extends ButtonProps {}\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\n\n/**\n * Render prop component, to get access to the internal fields state. Must be a child of ArrayFieldContainer.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rowFieldsProps\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields {...rowFieldsProps}>{children}</ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nArrayFieldRow.displayName = 'ArrayFieldRow'\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * The fields\n */\n children: React.ReactNode\n}\n/**\n * Add the name prefix to the fields and acts as a horizontal form layout by default.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout flex=\"1\" mr=\"2\" {...layoutProps}>\n {mapNestedFields(name, children)}\n </FormLayout>\n )\n}\n\nArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n\n/**\n * The row container component providers row context.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rest\n}) => {\n const context = useArrayFieldRow({ index })\n\n const styles = {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-end',\n width: '100%',\n mb: 4,\n }\n\n return (\n <ArrayFieldRowProvider value={context}>\n <chakra.div {...rest} css={styles}>\n {children}\n </chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n\n/**\n * The default remove button.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRemoveButton: React.FC<ArrayFieldButtonProps> = (\n props,\n) => {\n return (\n <Button aria-label=\"Remove row\" {...useArrayFieldRemoveButton()} {...props}>\n {props.children || <MinusIcon />}\n </Button>\n )\n}\n\nArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n\n/**\n * The default add button.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldAddButton: React.FC<ArrayFieldButtonProps> = (props) => {\n return (\n <Button\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n >\n {props.children || <PlusIcon />}\n </Button>\n )\n}\n\nArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n\nexport interface ArrayFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends ArrayFieldOptions<TFieldValues, TName>,\n Omit<\n BaseFieldProps<TFieldValues, TName>,\n 'name' | 'defaultValue' | 'children'\n > {\n children: MaybeRenderProp<ArrayField[]>\n}\n\n/**\n * The wrapper component that composes the default ArrayField functionality.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n const rowFn =\n typeof children === 'function'\n ? children\n : (fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n )) || null}\n </>\n )\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>{rowFn as any}</ArrayFieldRows>\n <ArrayFieldAddButton />\n </ArrayFieldContainer>\n )\n },\n) as ((\n props: ArrayFieldProps & {\n ref?: React.ForwardedRef<UseArrayFieldReturn>\n },\n) => React.ReactElement) & {\n displayName: string\n}\n\nArrayField.displayName = 'ArrayField'\n\nexport interface ArrayFieldRowsProps {\n children: (fields: ArrayField[]) => React.ReactElement | null\n}\n\nexport const ArrayFieldRows = ({\n children,\n}: ArrayFieldRowsProps): React.ReactElement | null => {\n const { fields } = useArrayFieldContext()\n return children(fields)\n}\n\nArrayFieldRows.displayName = 'ArrayFieldRows'\n\nexport interface ArrayFieldContainerProps\n extends Omit<ArrayFieldProps, 'children'> {\n children: React.ReactNode\n}\n\n/**\n * The container component provides context and state management.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldContainerProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>,\n ) => {\n const overrides = useFieldProps(name)\n\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min: min || (overrides as any)?.min,\n max: max || (overrides as any)?.max,\n })\n\n // This exposes the useArrayField api through the forwarded ref\n React.useImperativeHandle(ref, () => context, [ref, context])\n\n return (\n <ArrayFieldProvider value={context}>\n <BaseField name={name} {...fieldProps} {...overrides}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n },\n)\n\nArrayFieldContainer.displayName = 'ArrayFieldContainer'\n","import { forwardRef } from 'react'\n\nimport {\n type RecipeProps,\n SimpleGrid,\n SimpleGridProps,\n useRecipe,\n} from '@chakra-ui/react'\nimport { cx } from '@saas-ui/core/utils'\n\nexport interface FormLayoutOptions {\n columns?: SimpleGridProps['columns']\n gap?: SimpleGridProps['gap']\n}\n\nexport interface FormLayoutProps\n extends RecipeProps<'suiFormLayout'>,\n SimpleGridProps {}\n\n/**\n * Create consistent field spacing and positioning.\n *\n * Renders form items in a `SimpleGrid`\n * @see https://chakra-ui.com/docs/components/simple-grid\n *\n * @see https://saas-ui.dev/docs/components/forms/form\n */\nexport const FormLayout = forwardRef<HTMLDivElement, FormLayoutProps>(\n ({ children, gap = 4, ...props }, ref) => {\n const recipe = useRecipe({\n key: 'suiFormLayout',\n })\n\n const [variantProps, gridProps] = recipe.splitVariantProps(props)\n\n const styles = recipe(variantProps)\n\n return (\n <SimpleGrid\n ref={ref}\n {...gridProps}\n className={cx('sui-form-layout', props.className)}\n css={[\n {\n gap,\n },\n styles,\n props.css,\n ]}\n >\n {children}\n </SimpleGrid>\n )\n },\n)\n\nFormLayout.displayName = 'FormLayout'\n","import * as React from 'react'\n\nimport { createContext } from '@saas-ui/core/utils'\nimport {\n FieldPath,\n FieldValues,\n UseFieldArrayReturn,\n useFieldArray,\n} from 'react-hook-form'\n\nimport { useFormContext } from './form-context'\n\nexport interface UseArrayFieldReturn extends UseFieldArrayReturn {\n /**\n * The array field name\n */\n name: string\n /**\n * The default value for new items\n */\n defaultValue: Record<string, any>\n /**\n * Min amount of items\n */\n min?: number\n /**\n * Max amount of items\n */\n max?: number\n}\n\nexport const [ArrayFieldProvider, useArrayFieldContext] =\n createContext<UseArrayFieldReturn>({\n name: 'ArrayFieldContext',\n })\n\nexport interface UseArrayFieldRowReturn {\n /**\n * Name of the array field including the index, eg 'field.0'\n */\n name: string\n /**\n * The field index\n */\n index: number\n /**\n * Remove this array item\n */\n remove: () => void\n /**\n * True if this is the first item\n */\n isFirst: boolean\n /**\n * True if this is the last item\n */\n isLast: boolean\n}\n\nexport const [ArrayFieldRowProvider, useArrayFieldRowContext] =\n createContext<UseArrayFieldRowReturn>({\n name: 'ArrayFieldRowContext',\n })\n\nexport interface ArrayFieldOptions<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n /**\n * The field name\n */\n name: TName\n /**\n * Default value for new values in the array\n */\n defaultValue?: Record<string, any>\n /**\n * Default key name for rows, change this if your data uses a different 'id' field\n * @default \"id\"\n */\n keyName?: string\n min?: number\n max?: number\n}\n\nexport const useArrayField = ({\n name,\n defaultValue = {},\n keyName,\n min,\n max,\n}: ArrayFieldOptions) => {\n const { control } = useFormContext()\n\n const context = useFieldArray({\n control,\n name,\n keyName,\n })\n return {\n ...context,\n name,\n defaultValue,\n min,\n max,\n }\n}\n\nexport interface UseArrayFieldRowProps {\n index: number\n}\n\nexport const useArrayFieldRow = ({ index }: UseArrayFieldRowProps) => {\n const { clearErrors } = useFormContext()\n const { name, remove, fields } = useArrayFieldContext()\n\n React.useEffect(() => {\n // reset errors, to make sure min/max errors reset correctly\n clearErrors(name)\n }, [])\n\n return {\n index,\n isFirst: index === 0,\n isLast: index === fields.length - 1,\n name: `${name}.${index}`,\n remove: React.useCallback(() => {\n clearErrors(name)\n remove(index)\n }, [index]),\n }\n}\n\nexport const useArrayFieldRemoveButton = () => {\n const { isFirst, remove } = useArrayFieldRowContext()\n const { min, fields } = useArrayFieldContext()\n\n const isDisabled = isFirst && !!(min && fields.length <= min)\n\n return {\n onClick: () => remove(),\n isDisabled,\n }\n}\n\nexport const useArrayFieldAddButton = () => {\n const { append, defaultValue, max, fields } = useArrayFieldContext()\n\n const isDisabled = !!(max && fields.length >= max)\n\n return {\n onClick: () =>\n append(defaultValue, {\n shouldFocus: false,\n }),\n isDisabled,\n }\n}\n","import * as React from 'react'\n\nimport { FieldOption, FieldOptions } from './types'\n\nexport const mapNestedFields = (name: string, children: React.ReactNode) => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement<any>(child)) {\n const props = child.props as any\n\n if (!props.name) {\n return child\n }\n\n let childName = props.name\n if (childName.includes('.')) {\n childName = childName.replace(/^.*\\.(.*)/, '$1')\n } else if (childName.includes('.$')) {\n childName = childName.replace(/^.*\\.\\$(.*)/, '$1')\n }\n\n return React.cloneElement(child, {\n ...props,\n name: `${name}.${childName}`,\n })\n }\n\n return child\n })\n}\n\nexport const mapOptions = <TOption extends FieldOption = FieldOption>(\n options: FieldOptions<TOption>,\n) => {\n return options.map((option) => {\n if (typeof option === 'string') {\n return {\n label: option,\n value: option,\n }\n }\n return option\n })\n}\n","import * as React from 'react'\n\nimport {\n FieldPath,\n FieldValues,\n UseFormReturn,\n useWatch,\n} from 'react-hook-form'\n\nimport { useFormContext } from './form-context.tsx'\n\nexport interface DisplayIfProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n children: React.ReactElement\n name: TName\n defaultValue?: unknown\n isDisabled?: boolean\n isExact?: boolean\n condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean\n onToggle?: (\n conditionMatched: boolean,\n context: UseFormReturn<TFieldValues>,\n ) => void\n}\n/**\n * Conditionally render parts of a form.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const DisplayIf = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n children,\n name,\n defaultValue,\n isDisabled,\n isExact,\n condition = (value) => !!value,\n onToggle,\n}: DisplayIfProps<TFieldValues, TName>) => {\n const initializedRef = React.useRef(false)\n const matchesRef = React.useRef(false)\n\n const value = useWatch<TFieldValues>({\n name,\n defaultValue: defaultValue as any,\n disabled: isDisabled,\n exact: isExact,\n })\n const context = useFormContext() as any\n\n const matches = condition(value, context)\n\n React.useEffect(() => {\n if (!initializedRef.current) {\n initializedRef.current = true\n return\n }\n if (matchesRef.current === matches) return\n matchesRef.current = matches\n onToggle?.(matches, context)\n }, [value])\n\n return matches ? children : null\n}\n\nDisplayIf.displayName = 'DisplayIf'\n","import * as React from 'react'\n\nimport { FieldValues, RegisterOptions } from 'react-hook-form'\n\nimport { InputField } from './default-fields'\nimport { useField } from './fields-context'\nimport { useFieldProps } from './form-context'\nimport { FieldProps, type FocusableElement } from './types'\n\nexport type FieldRules = Pick<\n RegisterOptions,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength' | 'pattern'\n>\n\nconst defaultInputType = 'text'\n\n/**\n * Form field component.\n * \n * Build-in types:\n * text, number, password, textarea, select, native-select, checkbox, radio, switch, pin\n *\n * Will default to a text field if there is no matching type.\n\n * @see Docs https://saas-ui.dev/docs/components/forms/field\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues>,\n ref: React.ForwardedRef<FocusableElement>,\n ) => {\n const { type = defaultInputType, name } = props\n const overrides = useFieldProps(name)\n const InputComponent = useField(overrides?.type || type, InputField)\n\n return <InputComponent ref={ref} {...props} {...overrides} />\n },\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> & {\n ref?: React.ForwardedRef<FocusableElement>\n },\n) => React.ReactElement) & {\n displayName?: string\n}\n","import * as React from 'react'\n\nimport { ArrayField } from './array-field'\nimport { Field } from './field'\nimport type { FieldResolver } from './field-resolver'\nimport { useFormContext } from './form-context'\nimport { FormLayout } from './form-layout'\nimport { ObjectField } from './object-field'\nimport { BaseFieldProps } from './types'\n\nexport interface FieldsProps<TSchema = any> {\n schema?: TSchema\n fieldResolver?: FieldResolver\n focusFirstField?: boolean\n}\n\nconst mapNestedFields = (resolver: FieldResolver, name: string) => {\n return resolver\n .getNestedFields(name)\n ?.map(\n (\n { name, type, ...nestedFieldProps }: BaseFieldProps,\n i,\n ): React.ReactNode => (\n <Field\n key={name || i}\n name={name}\n type={type as any}\n {...nestedFieldProps}\n />\n ),\n )\n}\n\nexport const AutoFields: React.FC<FieldsProps> = ({\n schema: schemaProp,\n fieldResolver: fieldResolverProp,\n focusFirstField,\n ...props\n}) => {\n const context = useFormContext()\n const schema = schemaProp || context.schema\n const fieldResolver = fieldResolverProp || context.fieldResolver\n const resolver = React.useMemo(() => fieldResolver, [schema, fieldResolver])\n\n const fields = React.useMemo(() => resolver?.getFields(), [resolver])\n\n const form = useFormContext()\n\n React.useEffect(() => {\n if (focusFirstField && fields?.[0]?.name) {\n form.setFocus(fields[0].name)\n }\n }, [schema, fieldResolver, focusFirstField])\n\n if (!resolver) {\n return null\n }\n\n return (\n <FormLayout {...props}>\n {fields?.map(\n ({ name, type, ...fieldProps }: BaseFieldProps): React.ReactNode => {\n if (type === 'array') {\n return (\n <ArrayField key={name} name={name} {...fieldProps}>\n {mapNestedFields(resolver, name)}\n </ArrayField>\n )\n } else if (type === 'object') {\n return (\n <ObjectField key={name} name={name} {...fieldProps}>\n {mapNestedFields(resolver, name)}\n </ObjectField>\n )\n }\n\n return (\n <Field\n key={name}\n name={name}\n type={type as any}\n // defaultValue={defaultValue}\n {...fieldProps}\n />\n )\n },\n )}\n </FormLayout>\n )\n}\n\nAutoFields.displayName = 'Fields'\n","import * as React from 'react'\n\nimport { Field as FieldPrimivite } from '@chakra-ui/react'\nimport { dataAttr } from '@saas-ui/core/utils'\nimport { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { useFieldProps } from './form-context'\nimport { FormLayout, type FormLayoutOptions } from './form-layout'\nimport { BaseFieldProps } from './types'\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<BaseFieldProps, keyof FormLayoutOptions>,\n FormLayoutOptions {\n name: TName\n children: React.ReactNode\n}\n\nexport const FormLegend = (props: FieldPrimivite.LabelProps) => {\n return <FieldPrimivite.Label as=\"legend\" {...props} />\n}\n\n/**\n * The object field component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/object-field\n */\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const {\n name,\n label,\n hideLabel: hideLabelProp,\n children,\n columns: columnsProp,\n gap: gapProp,\n ...fieldProps\n } = props\n\n const { hideLabel, columns, gap, ...overrides } = useFieldProps(name) as Omit<\n ObjectFieldProps,\n 'name'\n >\n\n const hidden = hideLabelProp || hideLabel\n\n return (\n <FieldPrimivite.Root as=\"fieldset\" {...fieldProps} {...overrides}>\n <FormLegend data-hidden={dataAttr(hidden)}>{label}</FormLegend>\n <FormLayout columns={columnsProp || columns} gridGap={gapProp || gap}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FieldPrimivite.Root>\n )\n}\n\nObjectField.displayName = 'ObjectField'\n","import { forwardRef } from 'react'\n\nimport { Button, ButtonProps } from '@saas-ui/react/button'\nimport { useFormContext } from 'react-hook-form'\n\nimport { useFieldProps } from './form-context.tsx'\n\nexport interface SubmitButtonProps extends ButtonProps {\n /**\n * Disable the submit button if the form is untouched.\n */\n disableIfUntouched?: boolean\n /**\n * Disable the submit button if the form is invalid.\n */\n disableIfInvalid?: boolean\n}\n\n/**\n * A button with type submit and default color scheme primary and isLoading state when the form is submitting.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const SubmitButton = forwardRef<HTMLButtonElement, SubmitButtonProps>(\n (props, ref) => {\n const {\n variant = 'glass',\n colorPalette = 'accent',\n children = 'Submit',\n disableIfUntouched: disableIfUntouchedProp = false,\n disableIfInvalid: disableIfInvalidProp = false,\n disabled: disabledProp,\n loading,\n ...rest\n } = props\n const { formState } = useFormContext()\n\n const field = useFieldProps('submit') as SubmitButtonProps\n\n const {\n disableIfUntouched: disableIfUntouchedOverride,\n disableIfInvalid: disableIfInvalidOverride,\n ...fieldProps\n } = field\n\n const disableIfUntouched =\n disableIfUntouchedOverride ?? disableIfUntouchedProp\n const disableIfInvalid = disableIfInvalidOverride ?? disableIfInvalidProp\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid) ||\n disabledProp\n\n return (\n <Button\n ref={ref}\n variant={variant as any}\n colorPalette={colorPalette}\n type=\"submit\"\n loading={formState.isSubmitting || loading}\n disabled={isDisabled}\n children={children}\n {...rest}\n {...fieldProps}\n />\n )\n },\n)\n\nSubmitButton.displayName = 'SubmitButton'\n","import { forwardRef } from 'react'\n\nimport { type HTMLChakraProps, chakra } from '@chakra-ui/react'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { cx } from '@saas-ui/core/utils'\nimport {\n type DefaultValues,\n type FieldValues,\n UseFormProps as UseHookFormProps,\n type UseFormReturn as UseHookFormReturn,\n useForm as useHookForm,\n} from 'react-hook-form'\nimport type { z } from 'zod'\n\nimport { ArrayField, type ArrayFieldProps } from './array-field'\nimport { DisplayIf, type DisplayIfProps } from './display-if'\nimport { Field } from './field.tsx'\nimport { FormProvider } from './form-context'\nimport { ObjectField, type ObjectFieldProps } from './object-field'\nimport type { FieldProps } from './types'\nimport type { UseArrayFieldReturn } from './use-array-field'\n\nexport interface UseFormProps<\n TFieldValues extends FieldValues,\n TContext extends object,\n> extends UseHookFormProps<TFieldValues, TContext> {}\n\nexport interface UseFormReturn<\n TFieldValues extends FieldValues,\n TContext extends object,\n> extends UseHookFormReturn<TFieldValues, TContext> {\n Form: React.FC<Omit<FormProps<TFieldValues, TContext>, 'form'>>\n Field: React.FC<FieldProps<TFieldValues>>\n DisplayIf: React.FC<DisplayIfProps<TFieldValues>>\n ArrayField: React.FC<\n ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>\n >\n ObjectField: React.FC<ObjectFieldProps<TFieldValues>>\n}\n\nexport function useForm<\n TFieldValues extends FieldValues,\n TContext extends object,\n>(props: UseFormProps<TFieldValues, TContext> = {}) {\n const form = useHookForm<TFieldValues, TContext>(props)\n\n const FormComponent = forwardRef<HTMLFormElement, Omit<FormProps, 'form'>>(\n function FormComponent(props, ref) {\n return <Form {...props} form={form} ref={ref} />\n },\n )\n\n return {\n ...form,\n Form: FormComponent,\n Field,\n DisplayIf,\n ArrayField,\n ObjectField,\n } as UseFormReturn<TFieldValues, TContext>\n}\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n> extends HTMLChakraProps<'form'> {\n children: React.ReactNode\n form: ReturnType<typeof useHookForm<TFieldValues, TContext>>\n onSubmit: (data: any) => void\n onError?: (errors: any) => void\n}\n\nexport const Form = forwardRef<HTMLFormElement, FormProps>(\n function Form(props, ref) {\n const { children, form, onSubmit, onError, ...rest } = props\n return (\n <FormProvider {...form}>\n <chakra.form\n ref={ref}\n onSubmit={form.handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('sui-form', props.className)}\n >\n {props.children}\n </chakra.form>\n </FormProvider>\n )\n },\n) as <TFieldValues extends FieldValues, TContext extends object>(\n props: FormProps<TFieldValues, TContext> & {\n ref?: React.Ref<HTMLFormElement>\n },\n) => React.ReactElement\n\nexport interface UseZodFormProps<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n> extends Omit<UseHookFormProps<TFieldValues, TContext>, 'defaultValues'> {\n schema: TSchema\n defaultValues?:\n | DefaultValues<InferObjectSchema<TSchema>>\n | AsyncDefaultValues<InferObjectSchema<TSchema>>\n}\n\nexport function useZodForm<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n>(props: UseZodFormProps<TSchema, TFieldValues, TContext>) {\n const { schema, ...rest } = props\n\n return useForm({\n resolver: zodResolver(schema) as any,\n ...rest,\n })\n}\n\ntype InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> =\n T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>\n\ntype AsyncDefaultValues<TFieldValues> = (\n payload?: unknown,\n) => Promise<TFieldValues>\n","import * as React from 'react'\n\nimport { Field as FieldPrimivite, Text } from '@chakra-ui/react'\nimport type { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { useFormContext } from './form-context.tsx'\nimport type { ArrayFieldPath } from './types.ts'\n\nexport interface DisplayFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<FieldPrimivite.RootProps, 'type' | 'onChange' | 'defaultValue'> {\n name: TName | ArrayFieldPath<TName>\n label?: string\n}\n\n/**\n * Display a field value.\n *\n * @see Docs https://saas-ui.dev/\n */\nexport const DisplayField: React.FC<DisplayFieldProps> = ({\n name,\n label,\n ...props\n}) => {\n return (\n <FieldPrimivite.Root {...props}>\n {label ? (\n <FieldPrimivite.Label htmlFor={name}>{label}</FieldPrimivite.Label>\n ) : null}\n <Text fontSize=\"md\">\n <FormValue name={name} />\n </Text>\n </FieldPrimivite.Root>\n )\n}\n\nDisplayField.displayName = 'DisplayField'\n\nexport const FormValue: React.FC<{ name: string }> = ({ name }) => {\n const { getValues } = useFormContext()\n return getValues(name) || null\n}\n\nFormValue.displayName = 'FormValue'\n","import { FieldValues, useWatch } from 'react-hook-form'\nimport { useFormContext, UseFormReturn } from './form-context'\n\nexport interface WatchFieldProps<\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n> {\n name: string\n defaultValue?: Value\n isDisabled?: boolean\n isExact?: boolean\n children: (\n value: Value,\n form: UseFormReturn<TFieldValues, TContext>\n ) => React.ReactElement | void\n}\n\nexport const WatchField = <\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n>(\n props: WatchFieldProps<Value, TFieldValues, TContext>\n) => {\n const { name, defaultValue, isDisabled, isExact } = props\n const form = useFormContext<TFieldValues, TContext>()\n\n const field = useWatch({\n name,\n defaultValue,\n disabled: isDisabled,\n exact: isExact,\n })\n\n return props.children(field, form) || null\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAAA;AAAA,EAAA;AAAA,cAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBAAyD;;;ACAzD,IAAAC,gBAA+B;AAE/B,IAAAA,gBAQO;AACP,sBAA6C;AAC7C,mBAA2B;AAC3B,0BAAmD;AACnD,4BAGO;AACP,uBAA6C;AAC7C,mBAAsB;AACtB,yBAA2B;AAC3B,oBAAuB;AACvB,oBAAyC;;;ACtBzC,IAAAC,gBAIO;AAEP,IAAAC,gBAA+C;AAC/C,IAAAC,0BAAiD;;;ACLjD,mBAAsB;AACtB,mBAA2B;AAC3B,IAAAC,0BAA+B;;;ACJ/B,YAAuB;AAEvB,6BAKO;AAqED;AAxCN,IAAM,cAAoB,oBAAuC,IAAI;AAE9D,IAAM,iBAAiB,MAIvB;AACL,QAAM,UAAgB,iBAAW,WAAW;AAC5C,QAAM,kBAAc,uBAAAC,gBAA2C;AAE/D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AAEO,IAAM,gBAAgB,CAC3B,SAC6C;AAC7C,QAAM,aAAa,MAAM,QAAQ,YAAY,IAAI;AACjD,QAAM,UAAU,eAAe;AAC/B,SAAQ,SAAS,SAAS,UAAU,KAAa,CAAC;AACpD;AAQO,IAAM,eAAe,CAK1B,UACG;AACH,QAAM,EAAE,UAAU,eAAe,QAAQ,QAAQ,GAAG,KAAK,IAAI;AAC7D,SACE,4CAAC,uBAAAC,cAAA,EAAkB,GAAG,MACpB,sDAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,eAAe,QAAQ,OAAO,GAC1D,UACH,GACF;AAEJ;;;ADvBQ,IAAAC,sBAAA;AAjDR,IAAM,WAAW,CAAC,MAAc,cAA+C;AAC7E,aAAO,6BAAI,UAAU,QAAQ,IAAI;AACnC;AAEA,IAAM,YAAY,CAChB,MACA,cACG;AACH,aAAO,6BAAI,UAAU,eAAe,IAAI;AAC1C;AAEO,IAAM,eAAe,CAAC,UAA0B;AAErD,QAAM,CAAC,YAAY,SAAS,QAAI,yBAAW,OAAO;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,EAAE,UAAU,IAAI,eAAe;AAErC,QAAM,QAAQ,SAAS,WAAW,MAAM,SAAS;AACjD,QAAM,UAAU,UAAU,WAAW,MAAM,SAAS;AAEpD,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAMO,IAAM,YAAsC,CAAC,UAAU;AAC5D,QAAM,EAAE,WAAW,OAAO,WAAW,MAAM,MAAM,IAAI,aAAa,KAAK;AAEvE,QAAM,YAAY,CAAC,CAAC;AAEpB,SACE,8CAAC,mBAAM,MAAN,EAAW,SAAS,WAAY,GAAG,WACjC;AAAA,aAAS,CAAC,YACT,8CAAC,mBAAM,OAAN,EACE;AAAA;AAAA,MAAM;AAAA,MAAC,6CAAC,mBAAM,mBAAN,EAAwB;AAAA,OACnC,IACE;AAAA,IAEH,MAAM;AAAA,IACN,QAAQ,CAAC,OAAO,UACf,6CAAC,mBAAM,YAAN,EAAkB,gBAAK,IACtB;AAAA,IACH,OAAO,WAAW,6CAAC,mBAAM,WAAN,EAAiB,iBAAO,SAAQ;AAAA,KACtD;AAEJ;AAEA,UAAU,cAAc;;;AExExB,IAAAC,gBAAkB;AAmBd,IAAAC,sBAAA;AAPJ,IAAM,gBAAgB,cAAAC,QAAM,cAAyC,IAAI;AAElE,IAAM,iBAGR,CAAC,UAAU;AACd,SACE,6CAAC,cAAc,UAAd,EAAuB,OAAO,MAAM,OAClC,gBAAM,UACT;AAEJ;AAEO,IAAM,mBAAmB,MAAM;AACpC,SAAO,cAAAA,QAAM,WAAW,aAAa;AACvC;AAEO,IAAM,WAAW,CACtB,MACA,aACkB;AAClB,QAAM,UAAU,cAAAA,QAAM,WAAW,aAAa;AAC9C,SAAO,SAAS,SAAS,IAAI,KAAK;AACpC;;;AHsBQ,IAAAC,sBAAA;AArCR,IAAM,eAAe,CACnB,gBACA,EAAE,aAAa,WAAW,cAAc,iBAAiB,MACtD;AACH,QAAMC,aAAQ,0BAAgC,CAAC,OAAO,QAAQ;AAC5D,UAAM,EAAE,IAAI,OAAO,UAAU,MAAM,IAAI;AAEvC,UAAM,aAAa;AAAA,MACjB;AAAA,MACA,GAAG;AAAA,IACL;AAEA,UAAM,eAAe,iBAAiB;AAEtC,UAAM,eAAe,cAAc,gBAAgB;AAEnD,UAAM,EAAE,OAAO,YAAY,UAAU,IAAI,cAAAC,QAAM;AAAA,MAC7C,MAAM,aAAa;AAAA,MACnB,CAAC,YAAY;AAAA,IACf;AAEA,UAAM,YAAY;AAAA,MAChB,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,SAAS,MAAM;AAAA,MACf,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM;AAAA,IAClB;AAEA,UAAM,CAAC,gBAAgB,UAAU,QAAI;AAAA,MACnC;AAAA,MACA,CAAC,eAAe,QAAQ,WAAW,EAAE,OAAO,UAAU;AAAA,IACxD;AAEA,WACE,6CAAC,aAAW,GAAG,WAAY,GAAG,gBAC5B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,OAAO,YAAY,QAAQ;AAAA,QAC1B,GAAG;AAAA,QACJ,OAAO;AAAA;AAAA,IACT,GACF;AAAA,EAEJ,CAAC;AAED,EAAAD,OAAM,cAAc;AAEpB,SAAOA;AACT;AAEA,IAAM,sBAAsB,CAAC,mBAAkC;AAC7D,aAAO,0BAAgD,CAAC,OAAO,QAAQ;AACrE,UAAM,EAAE,MAAM,OAAO,GAAG,WAAW,IAAI;AACvC,UAAM,EAAE,QAAQ,IAAI,eAAe;AAEnC,UAAM,WAAW,WAAW;AAE5B,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,MACxC;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACH,GAAG;AAAA,YACJ,cAAU,uBAAQ,UAAU,MAAM,QAAQ;AAAA,YAC1C,YAAQ,uBAAQ,WAAW,QAAQ,MAAM,MAAM;AAAA,YAC/C,SAAK,yBAAU,KAAK,IAAI;AAAA;AAAA,QAC1B;AAAA;AAAA,IAEJ;AAAA,EAEJ,CAAC;AACH;AAEA,IAAM,wBAAwB,CAAC,mBAAkC;AAC/D,aAAO;AAAA,IACL,CAAC,EAAE,MAAM,OAAO,GAAG,WAAW,GAAG,QAAQ;AACvC,YAAM,EAAE,SAAS,IAAI,eAAe;AAEpC,YAAM,EAAE,KAAK,MAAM,GAAG,MAAM,IAAI,SAAS,MAAM,KAAK;AAEpD,YAAM,WAAW,WAAW;AAE5B,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACH,GAAG;AAAA,UACJ,cAAU,uBAAQ,UAAU,MAAM,QAAQ;AAAA,UAC1C,YAAQ,uBAAQ,WAAW,QAAQ,MAAM,MAAM;AAAA,UAC/C,SAAK,yBAAU,KAAK,IAAI;AAAA;AAAA,MAC1B;AAAA,IAEJ;AAAA,EACF;AACF;AAyBO,IAAM,cAAc,CACzB,WAIA,YACG;AACH,MAAI;AACJ,MAAI,SAAS,cAAc;AACzB,qBAAiB,wBAAoB,0BAAW,SAAS,CAAC;AAAA,EAC5D,OAAO;AACL,qBAAiB,0BAAsB,0BAAW,SAAS,CAAC;AAAA,EAC9D;AAEA,QAAMA,SAAQ,aAAa,gBAAgB;AAAA,IACzC,aAAa,GAAG,UAAU,eAAe,QAAQ;AAAA,IACjD,WAAW,SAAS;AAAA,IACpB,cAAc,OACX;AAAA,MACC,OAAO,CAAC;AAAA,MACR,WAAW;AAAA,IACb;AAAA,EACJ,CAAC;AAID,SAAOA;AACT;;;ADlIQ,IAAAE,sBAAA;AARD,IAAM,aAAa;AAAA,EACxB,CAAC,EAAE,OAAO,QAAQ,cAAc,YAAY,MAAM,GAAG,KAAK,GAAG,QAAQ;AACnE,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,OAAM;AAAA,QAEN,uDAAC,uBAAM,MAAY,MAAa,GAAG,MAAM,KAAU;AAAA;AAAA,IACrD;AAAA,EAEJ;AACF;AAMO,IAAM,mBAAmB,YAG9B,CAAC,OAAO,QAAQ,6CAAC,mCAAa,GAAG,OAAO,KAAU,GAAI;AAAA,EACtD,cAAc;AAChB,CAAC;AAEM,IAAM,qBAAqB,YAGhC,CAAC,EAAE,OAAO,YAAY,GAAG,MAAM,GAAG,QAClC,6CAAC,uCAAc,KAAW,GAAG,OAAO,CACrC;AAIM,IAAM,gBAAgB,YAG3B,CAAC,OAAO,QAAQ,6CAAC,0BAAU,GAAG,OAAO,KAAU,CAAE;AAM5C,IAAM,cAAc;AAAA,EACzB,CAAC,EAAE,MAAM,OAAO,GAAG,KAAK,GAAG,QAAQ;AACjC,WAAO,6CAAC,wBAAO,SAAS,CAAC,CAAC,OAAQ,GAAG,MAAM,KAAU;AAAA,EACvD;AAAA,EACA;AAAA,IACE,cAAc;AAAA,EAChB;AACF;AAgBO,IAAM,cAAc;AAAA,EACzB,CAAC,OAAO,QAAQ;AACd,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,OAAO;AAAA,MACP,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,iBAAa;AAAA,MACjB,UACE,oCAAqB;AAAA,QACnB,OAAO;AAAA,MACT,CAAC;AAAA,MACH,CAAC,OAAO;AAAA,IACV;AAEA,UAAM,QAAQ,WACV,CAAC,GAAI,aAAa,CAAC,CAAE,IACrB,YACE,CAAC,SAAmB,IACpB,CAAC;AAEP,WACE;AAAA,MAAC,qBAAO;AAAA,MAAP;AAAA,QACC;AAAA,QACA;AAAA,QACA,eAAe,CAAC,YAAY;AAC1B,mBAAS,WAAW,QAAQ,QAAQ,QAAQ,MAAM,CAAC,CAAC;AAAA,QACtD;AAAA,QACA,mBAAmB,MAAM,OAAO;AAAA,QAChC;AAAA,QACC,GAAG;AAAA,QAEJ;AAAA,uDAAC,qBAAO,SAAP,EAAgB,GAAG,cAClB,uDAAC,qBAAO,WAAP,EAAiB,aAA0B,GAC9C;AAAA,UACA,6CAAC,qBAAO,SAAP,EAAgB,GAAG,cACjB,qBAAW,MAAM,IAAI,CAAC,WACrB,6CAAC,qBAAO,MAAP,EAA+B,MAAM,QACnC,iBAAO,SAAS,OAAO,SADR,OAAO,KAEzB,CACD,GACH;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAAA,EACA;AAAA,IACE,cAAc;AAAA,EAChB;AACF;AAOO,IAAM,gBAAgB;AAAA,EAC3B,CAAC,EAAE,OAAO,MAAM,GAAG,MAAM,GAAG,QAAQ;AAClC,WACE,6CAAC,4BAAS,KAAW,GAAG,OACrB,iBACH;AAAA,EAEJ;AAAA,EACA;AAAA,IACE,WAAW;AAAA,EACb;AACF;AASO,IAAM,aAAa;AAAA,EACxB,CAAC,OAAO,QAAQ;AACd,UAAM,EAAE,SAAS,UAAU,gBAAgB,UAAU,KAAK,GAAG,KAAK,IAAI;AACtE,WACE;AAAA,MAAC,8BAAW;AAAA,MAAX;AAAA,QACC;AAAA,QACA,eAAe,CAAC,EAAE,MAAM,MAAM;AAC5B,qBAAW,KAAK;AAAA,QAClB;AAAA,QACC,GAAG;AAAA,QAEJ,uDAAC,uBAAM,eAA8B,KAClC,kBAAQ,IAAI,CAAC,WACZ,6CAAC,sBAAyB,OAAO,OAAO,OACrC,iBAAO,SAAS,OAAO,SADd,OAAO,KAEnB,CACD,GACH;AAAA;AAAA,IACF;AAAA,EAEJ;AAAA,EACA;AAAA,IACE,cAAc;AAAA,EAChB;AACF;AAWO,IAAM,WAAW;AAAA,EACtB,CAAC,OAAO,QAAQ;AACd,UAAM,EAAE,SAAS,OAAO,WAAW,UAAU,GAAG,WAAW,IAAI;AAE/D,UAAM,QAAQ,WAAW,MAAM,EAAE,KAAK,CAAC;AAEvC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA,eAAe,CAAC,YAAY;AAC1B,mBAAS,QAAQ,aAAa;AAAA,QAChC;AAAA,QACA,MAAM;AAAA;AAAA,IACR;AAAA,EAEJ;AAAA,EACA;AAAA,IACE,cAAc;AAAA,EAChB;AACF;AAEO,IAAM,oBAAoB;AAAA,EAC/B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AACZ;;;AK7PA,IAAAC,gBAAoB;AAoCpB,IAAM,YAAY,CAAC,WACjB,UACA,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;AAC5C,QAAM,EAAE,OAAO,OAAO,OAAO,GAAG,MAAM,IAAI;AAC1C,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,OAAO,SAAS,SAAS;AAAA;AAAA,EAC3B;AACF,CAAC;AAEI,IAAM,sBAAsD,CAAC,WAAW;AAC7E,QAAM,YAAY,MAAwB;AACxC,WAAO,UAAU,MAAM;AAAA,EACzB;AACA,QAAM,kBAAkB,CAAC,SAAmC;AAC1D,UAAM,YAAQ,mBAAI,QAAQ,IAAI;AAE9B,QAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,QAAI,MAAM,OAAO,SAAS,UAAU;AAClC,aAAO,UAAU,MAAM,MAAM,UAAU;AAAA,IACzC,WAAW,MAAM,SAAS,UAAU;AAClC,aAAO,UAAU,MAAM,UAAU;AAAA,IACnC;AACA,WAAO,CAAC,MAAM,KAAK;AAAA,EACrB;AAEA,SAAO,EAAE,WAAW,gBAAgB;AACtC;;;ACjEA,IAAAC,iBAAkC;AAElC,IAAAA,iBAAwC;AACxC,IAAAC,gBAAkD;AAClD,IAAAC,0BAUO;;;ACdP,IAAAC,gBAAkC;AAElC,IAAAA,gBAA4C;AAE5C,mBAAoC;;;ACJpC,IAAAC,gBAA2B;AAE3B,IAAAA,gBAKO;AACP,IAAAC,gBAAmB;AA8Bb,IAAAC,sBAAA;AAXC,IAAM,iBAAa;AAAA,EACxB,CAAC,EAAE,UAAU,MAAM,GAAG,GAAG,MAAM,GAAG,QAAQ;AACxC,UAAM,aAAS,yBAAU;AAAA,MACvB,KAAK;AAAA,IACP,CAAC;AAED,UAAM,CAAC,cAAc,SAAS,IAAI,OAAO,kBAAkB,KAAK;AAEhE,UAAM,SAAS,OAAO,YAAY;AAElC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAG;AAAA,QACJ,eAAW,kBAAG,mBAAmB,MAAM,SAAS;AAAA,QAChD,KAAK;AAAA,UACH;AAAA,YACE;AAAA,UACF;AAAA,UACA;AAAA,UACA,MAAM;AAAA,QACR;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;;;ACxDzB,IAAAC,SAAuB;AAEvB,IAAAC,gBAA8B;AAC9B,IAAAC,0BAKO;AAuBA,IAAM,CAAC,oBAAoB,oBAAoB,QACpD,6BAAmC;AAAA,EACjC,MAAM;AACR,CAAC;AAyBI,IAAM,CAAC,uBAAuB,uBAAuB,QAC1D,6BAAsC;AAAA,EACpC,MAAM;AACR,CAAC;AAuBI,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA,eAAe,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AACF,MAAyB;AACvB,QAAM,EAAE,QAAQ,IAAI,eAAe;AAEnC,QAAM,cAAU,uCAAc;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAMO,IAAM,mBAAmB,CAAC,EAAE,MAAM,MAA6B;AACpE,QAAM,EAAE,YAAY,IAAI,eAAe;AACvC,QAAM,EAAE,MAAM,QAAQ,OAAO,IAAI,qBAAqB;AAEtD,EAAM,iBAAU,MAAM;AAEpB,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL;AAAA,IACA,SAAS,UAAU;AAAA,IACnB,QAAQ,UAAU,OAAO,SAAS;AAAA,IAClC,MAAM,GAAG,IAAI,IAAI,KAAK;AAAA,IACtB,QAAc,mBAAY,MAAM;AAC9B,kBAAY,IAAI;AAChB,aAAO,KAAK;AAAA,IACd,GAAG,CAAC,KAAK,CAAC;AAAA,EACZ;AACF;AAEO,IAAM,4BAA4B,MAAM;AAC7C,QAAM,EAAE,SAAS,OAAO,IAAI,wBAAwB;AACpD,QAAM,EAAE,KAAK,OAAO,IAAI,qBAAqB;AAE7C,QAAM,aAAa,WAAW,CAAC,EAAE,OAAO,OAAO,UAAU;AAEzD,SAAO;AAAA,IACL,SAAS,MAAM,OAAO;AAAA,IACtB;AAAA,EACF;AACF;AAEO,IAAM,yBAAyB,MAAM;AAC1C,QAAM,EAAE,QAAQ,cAAc,KAAK,OAAO,IAAI,qBAAqB;AAEnE,QAAM,aAAa,CAAC,EAAE,OAAO,OAAO,UAAU;AAE9C,SAAO;AAAA,IACL,SAAS,MACP,OAAO,cAAc;AAAA,MACnB,aAAa;AAAA,IACf,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AC7JA,IAAAC,SAAuB;AAIhB,IAAM,kBAAkB,CAAC,MAAc,aAA8B;AAC1E,SAAa,gBAAS,IAAI,UAAU,CAAC,UAAU;AAC7C,QAAU,sBAAoB,KAAK,GAAG;AACpC,YAAM,QAAQ,MAAM;AAEpB,UAAI,CAAC,MAAM,MAAM;AACf,eAAO;AAAA,MACT;AAEA,UAAI,YAAY,MAAM;AACtB,UAAI,UAAU,SAAS,GAAG,GAAG;AAC3B,oBAAY,UAAU,QAAQ,aAAa,IAAI;AAAA,MACjD,WAAW,UAAU,SAAS,IAAI,GAAG;AACnC,oBAAY,UAAU,QAAQ,eAAe,IAAI;AAAA,MACnD;AAEA,aAAa,oBAAa,OAAO;AAAA,QAC/B,GAAG;AAAA,QACH,MAAM,GAAG,IAAI,IAAI,SAAS;AAAA,MAC5B,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT,CAAC;AACH;;;AH0BI,IAAAC,sBAAA;AANG,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE,8CAAC,0BAAuB,OACtB;AAAA,iDAAC,uBAAqB,GAAG,gBAAiB,UAAS;AAAA,IACnD,6CAAC,0BAAuB;AAAA,KAC1B;AAEJ;AAEA,cAAc,cAAc;AAarB,IAAM,sBAA0D,CAAC;AAAA,EACtE;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,EAAE,KAAK,IAAI,wBAAwB;AACzC,SACE,6CAAC,cAAW,MAAK,KAAI,IAAG,KAAK,GAAG,aAC7B,0BAAgB,MAAM,QAAQ,GACjC;AAEJ;AAEA,oBAAoB,cAAc;AAO3B,IAAM,yBAAuD,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,UAAU,iBAAiB,EAAE,MAAM,CAAC;AAE1C,QAAM,SAAS;AAAA,IACb,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,IAAI;AAAA,EACN;AAEA,SACE,6CAAC,yBAAsB,OAAO,SAC5B,uDAAC,qBAAO,KAAP,EAAY,GAAG,MAAM,KAAK,QACxB,UACH,GACF;AAEJ;AAEA,uBAAuB,cAAc;AAO9B,IAAM,yBAA0D,CACrE,UACG;AACH,SACE,6CAAC,wBAAO,cAAW,cAAc,GAAG,0BAA0B,GAAI,GAAG,OAClE,gBAAM,YAAY,6CAAC,0BAAU,GAChC;AAEJ;AAEA,uBAAuB,cAAc;AAO9B,IAAM,sBAAuD,CAAC,UAAU;AAC7E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,OAAM;AAAA,MACL,GAAG,uBAAuB;AAAA,MAC1B,GAAG;AAAA,MAEH,gBAAM,YAAY,6CAAC,yBAAS;AAAA;AAAA,EAC/B;AAEJ;AAEA,oBAAoB,cAAc;AAkB3B,IAAM,iBAAa;AAAA,EACxB,CAAC,OAAwB,QAAiD;AACxE,UAAM,EAAE,UAAU,GAAG,eAAe,IAAI;AAExC,UAAM,QACJ,OAAO,aAAa,aAChB,WACA,CAAC,WACC,6EACG,iBAAO,IAAI,CAAC,EAAE,GAAG,GAAG,UACnB,6CAAC,iBAAuB,OACrB,YADiB,EAEpB,CACD,KAAK,MACR;AAGR,WACE,8CAAC,uBAAoB,KAAW,GAAG,gBACjC;AAAA,mDAAC,kBAAgB,iBAAa;AAAA,MAC9B,6CAAC,uBAAoB;AAAA,OACvB;AAAA,EAEJ;AACF;AAQA,WAAW,cAAc;AAMlB,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AACF,MAAsD;AACpD,QAAM,EAAE,OAAO,IAAI,qBAAqB;AACxC,SAAO,SAAS,MAAM;AACxB;AAEA,eAAe,cAAc;AAYtB,IAAM,sBAAsB,cAAAC,QAAM;AAAA,EACvC,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,YAAY,cAAc,IAAI;AAEpC,UAAM,UAAU,cAAc;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,OAAQ,WAAmB;AAAA,MAChC,KAAK,OAAQ,WAAmB;AAAA,IAClC,CAAC;AAGD,kBAAAA,QAAM,oBAAoB,KAAK,MAAM,SAAS,CAAC,KAAK,OAAO,CAAC;AAE5D,WACE,6CAAC,sBAAmB,OAAO,SACzB,uDAAC,aAAU,MAAa,GAAG,YAAa,GAAG,WACxC,UACH,GACF;AAAA,EAEJ;AACF;AAEA,oBAAoB,cAAc;;;AIzQlC,IAAAC,SAAuB;AAEvB,IAAAC,0BAKO;AAwBA,IAAM,YAAY,CAGvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,CAAC,UAAU,CAAC,CAAC;AAAA,EACzB;AACF,MAA2C;AACzC,QAAM,iBAAuB,cAAO,KAAK;AACzC,QAAM,aAAmB,cAAO,KAAK;AAErC,QAAM,YAAQ,kCAAuB;AAAA,IACnC;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EACT,CAAC;AACD,QAAM,UAAU,eAAe;AAE/B,QAAM,UAAU,UAAU,OAAO,OAAO;AAExC,EAAM,iBAAU,MAAM;AACpB,QAAI,CAAC,eAAe,SAAS;AAC3B,qBAAe,UAAU;AACzB;AAAA,IACF;AACA,QAAI,WAAW,YAAY,QAAS;AACpC,eAAW,UAAU;AACrB,eAAW,SAAS,OAAO;AAAA,EAC7B,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO,UAAU,WAAW;AAC9B;AAEA,UAAU,cAAc;;;ACrExB,IAAAC,SAAuB;AAmCZ,IAAAC,sBAAA;AArBX,IAAM,mBAAmB;AAYlB,IAAMC,SAAc;AAAA,EACzB,CACE,OACA,QACG;AACH,UAAM,EAAE,OAAO,kBAAkB,KAAK,IAAI;AAC1C,UAAM,YAAY,cAAc,IAAI;AACpC,UAAM,iBAAiB,SAAS,WAAW,QAAQ,MAAM,UAAU;AAEnE,WAAO,6CAAC,kBAAe,KAAW,GAAG,OAAQ,GAAG,WAAW;AAAA,EAC7D;AACF;;;ACrCA,IAAAC,UAAuB;;;ACEvB,IAAAC,iBAAwC;AACxC,IAAAC,gBAAyB;AAkBhB,IAAAC,sBAAA;AADF,IAAM,aAAa,CAAC,UAAqC;AAC9D,SAAO,6CAAC,eAAAC,MAAe,OAAf,EAAqB,IAAG,UAAU,GAAG,OAAO;AACtD;AAOO,IAAM,cAA0C,CAAC,UAAU;AAChE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,SAAS;AAAA,IACT,KAAK;AAAA,IACL,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,EAAE,WAAW,SAAS,KAAK,GAAG,UAAU,IAAI,cAAc,IAAI;AAKpE,QAAM,SAAS,iBAAiB;AAEhC,SACE,8CAAC,eAAAA,MAAe,MAAf,EAAoB,IAAG,YAAY,GAAG,YAAa,GAAG,WACrD;AAAA,iDAAC,cAAW,mBAAa,wBAAS,MAAM,GAAI,iBAAM;AAAA,IAClD,6CAAC,cAAW,SAAS,eAAe,SAAS,SAAS,WAAW,KAC9D,0BAAgB,MAAM,QAAQ,GACjC;AAAA,KACF;AAEJ;AAEA,YAAY,cAAc;;;ADjClB,IAAAC,uBAAA;AARR,IAAMC,mBAAkB,CAAC,UAAyB,SAAiB;AACjE,SAAO,SACJ,gBAAgB,IAAI,GACnB;AAAA,IACA,CACE,EAAE,MAAAC,OAAM,MAAM,GAAG,iBAAiB,GAClC,MAEA;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,MAAMD;AAAA,QACN;AAAA,QACC,GAAG;AAAA;AAAA,MAHCA,SAAQ;AAAA,IAIf;AAAA,EAEJ;AACJ;AAEO,IAAM,aAAoC,CAAC;AAAA,EAChD,QAAQ;AAAA,EACR,eAAe;AAAA,EACf;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,UAAU,eAAe;AAC/B,QAAM,SAAS,cAAc,QAAQ;AACrC,QAAM,gBAAgB,qBAAqB,QAAQ;AACnD,QAAM,WAAiB,gBAAQ,MAAM,eAAe,CAAC,QAAQ,aAAa,CAAC;AAE3E,QAAM,SAAe,gBAAQ,MAAM,UAAU,UAAU,GAAG,CAAC,QAAQ,CAAC;AAEpE,QAAM,OAAO,eAAe;AAE5B,EAAM,kBAAU,MAAM;AACpB,QAAI,mBAAmB,SAAS,CAAC,GAAG,MAAM;AACxC,WAAK,SAAS,OAAO,CAAC,EAAE,IAAI;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,QAAQ,eAAe,eAAe,CAAC;AAE3C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,SACE,8CAAC,cAAY,GAAG,OACb,kBAAQ;AAAA,IACP,CAAC,EAAE,MAAM,MAAM,GAAG,WAAW,MAAuC;AAClE,UAAI,SAAS,SAAS;AACpB,eACE,8CAAC,cAAsB,MAAa,GAAG,YACpC,UAAAD,iBAAgB,UAAU,IAAI,KADhB,IAEjB;AAAA,MAEJ,WAAW,SAAS,UAAU;AAC5B,eACE,8CAAC,eAAuB,MAAa,GAAG,YACrC,UAAAA,iBAAgB,UAAU,IAAI,KADf,IAElB;AAAA,MAEJ;AAEA,aACE;AAAA,QAACE;AAAA,QAAA;AAAA,UAEC;AAAA,UACA;AAAA,UAEC,GAAG;AAAA;AAAA,QAJC;AAAA,MAKP;AAAA,IAEJ;AAAA,EACF,GACF;AAEJ;AAEA,WAAW,cAAc;;;AE5FzB,IAAAC,iBAA2B;AAE3B,oBAAoC;AACpC,IAAAC,0BAA+B;AAoDzB,IAAAC,uBAAA;AAhCC,IAAM,mBAAe;AAAA,EAC1B,CAAC,OAAO,QAAQ;AACd,UAAM;AAAA,MACJ,UAAU;AAAA,MACV,eAAe;AAAA,MACf,WAAW;AAAA,MACX,oBAAoB,yBAAyB;AAAA,MAC7C,kBAAkB,uBAAuB;AAAA,MACzC,UAAU;AAAA,MACV;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,UAAM,EAAE,UAAU,QAAI,wCAAe;AAErC,UAAM,QAAQ,cAAc,QAAQ;AAEpC,UAAM;AAAA,MACJ,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,qBACJ,8BAA8B;AAChC,UAAM,mBAAmB,4BAA4B;AAErD,UAAM,aACH,sBAAsB,CAAC,UAAU,WACjC,oBAAoB,CAAC,UAAU,WAChC;AAEF,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAK;AAAA,QACL,SAAS,UAAU,gBAAgB;AAAA,QACnC,UAAU;AAAA,QACV;AAAA,QACC,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,aAAa,cAAc;;;ATqHnB,IAAAC,uBAAA;AAzED,IAAM,WAAO;AAAA,EAClB,CAOE,OAOA,QACG;AACH,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,cAAU,iCAAgC,IAAI;AACpD,UAAM,EAAE,aAAa,IAAI;AAGzB,mBAAAC,QAAM,oBAAoB,SAAS,MAAM,SAAS,CAAC,SAAS,OAAO,CAAC;AAEpE,mBAAAA,QAAM,UAAU,MAAM;AACpB,UAAI;AACJ,UAAI,UAAU;AACZ,uBAAe,QAAQ,MAAM,QAAQ;AAAA,MACvC;AACA,aAAO,MAAM,cAAc,YAAY;AAAA,IACzC,GAAG,CAAC,SAAS,QAAQ,CAAC;AAEtB,QAAI,YAAY;AAChB,QAAI,CAAC,aAAa,eAAe;AAC/B,kBACE,+CAAC,cACC;AAAA,sDAAC,cAAW;AAAA,QACZ,8CAAC,gBAAc,GAAG,QAAQ,QAAQ;AAAA,SACpC;AAAA,IAEJ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,UAAC,sBAAO;AAAA,UAAP;AAAA,YACC;AAAA,YACA,UAAU,aAAa,UAAU,OAAO;AAAA,YACvC,GAAG;AAAA,YACJ,eAAW,kBAAG,YAAY,MAAM,SAAS;AAAA,YAExC,qCAAQ,WAAW;AAAA,cAClB,OAAOC;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,cACA,GAAG;AAAA,YACL,CAAC;AAAA;AAAA,QACH;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAsBA,KAAK,cAAc;;;AP5JT,IAAAC,uBAAA;AA3CH,SAAS,WAGd;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AACF,IAA+C,CAAC,GAAG;AAMjD,QAAM,kBAAc;AAAA,IAClB,CAKE,OAIA,QACG;AACH,YAAM;AAAA,QACJ;AAAA,QACA,UAAU;AAAA,QACV,eAAe;AAAA,QACf,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,oBAAgB;AAAA,QACpB,OAAO;AAAA,UACL,QAAQ,EAAE,GAAG,mBAAmB,GAAG,OAAO;AAAA,UAC1C;AAAA,QACF;AAAA,QACA,CAAC,QAAQ,YAAY;AAAA,MACvB;AAEA,aACE,8CAAC,kBAAe,OAAO,eACrB;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,UAAU,gBAAgB,WAAW,MAAM,MAAM;AAAA,UACjD,eAAe,qBAAqB,gBAAgB,MAAM;AAAA,UACzD,GAAG;AAAA;AAAA,MACN,GACF;AAAA,IAEJ;AAAA,EACF;AAEA,cAAY,cAAc;AAC1B,cAAY,KAAK;AAEjB,SAAO;AACT;;;AiBnGA,IAAAC,iBAA2B;AAE3B,IAAAA,iBAA6C;AAC7C,iBAA4B;AAC5B,IAAAC,iBAAmB;AACnB,IAAAC,0BAMO;AAqCM,IAAAC,uBAAA;AARN,SAASC,SAGd,QAA8C,CAAC,GAAG;AAClD,QAAM,WAAO,wBAAAC,SAAoC,KAAK;AAEtD,QAAM,oBAAgB;AAAA,IACpB,SAASC,eAAcC,QAAO,KAAK;AACjC,aAAO,8CAACC,OAAA,EAAM,GAAGD,QAAO,MAAY,KAAU;AAAA,IAChD;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM;AAAA,IACN,OAAAE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAYO,IAAMD,YAAO;AAAA,EAClB,SAASA,MAAK,OAAO,KAAK;AACxB,UAAM,EAAE,UAAU,MAAM,UAAU,SAAS,GAAG,KAAK,IAAI;AACvD,WACE,8CAAC,gBAAc,GAAG,MAChB;AAAA,MAAC,sBAAO;AAAA,MAAP;AAAA,QACC;AAAA,QACA,UAAU,KAAK,aAAa,UAAU,OAAO;AAAA,QAC5C,GAAG;AAAA,QACJ,eAAW,mBAAG,YAAY,MAAM,SAAS;AAAA,QAExC,gBAAM;AAAA;AAAA,IACT,GACF;AAAA,EAEJ;AACF;AAmBO,SAAS,WAMd,OAAyD;AACzD,QAAM,EAAE,QAAQ,GAAG,KAAK,IAAI;AAE5B,SAAOJ,SAAQ;AAAA,IACb,cAAU,wBAAY,MAAM;AAAA,IAC5B,GAAG;AAAA,EACL,CAAC;AACH;;;ACtHA,IAAAM,iBAA8C;AAyB1C,IAAAC,uBAAA;AANG,IAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE,+CAAC,eAAAC,MAAe,MAAf,EAAqB,GAAG,OACtB;AAAA,YACC,8CAAC,eAAAA,MAAe,OAAf,EAAqB,SAAS,MAAO,iBAAM,IAC1C;AAAA,IACJ,8CAAC,uBAAK,UAAS,MACb,wDAAC,aAAU,MAAY,GACzB;AAAA,KACF;AAEJ;AAEA,aAAa,cAAc;AAEpB,IAAM,YAAwC,CAAC,EAAE,KAAK,MAAM;AACjE,QAAM,EAAE,UAAU,IAAI,eAAe;AACrC,SAAO,UAAU,IAAI,KAAK;AAC5B;AAEA,UAAU,cAAc;;;AC7CxB,IAAAC,0BAAsC;AAkB/B,IAAM,aAAa,CAKxB,UACG;AACH,QAAM,EAAE,MAAM,cAAc,YAAY,QAAQ,IAAI;AACpD,QAAM,OAAO,eAAuC;AAEpD,QAAM,YAAQ,kCAAS;AAAA,IACrB;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EACT,CAAC;AAED,SAAO,MAAM,SAAS,OAAO,IAAI,KAAK;AACxC;;;ApBkRA,IAAAC,2BAOO;AA3HA,IAAMC,QAAO,WAAW;","names":["Field","Form","useForm","import_react","import_react","import_react","import_utils","import_react_hook_form","import_react_hook_form","useHookFormContext","HookFormProvider","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","Field","React","import_jsx_runtime","import_utils","import_react","import_utils","import_react_hook_form","import_react","import_react","import_utils","import_jsx_runtime","React","import_utils","import_react_hook_form","React","import_jsx_runtime","React","React","import_react_hook_form","React","import_jsx_runtime","Field","React","import_react","import_utils","import_jsx_runtime","FieldPrimivite","import_jsx_runtime","mapNestedFields","name","Field","import_react","import_react_hook_form","import_jsx_runtime","import_jsx_runtime","React","Field","import_jsx_runtime","import_react","import_utils","import_react_hook_form","import_jsx_runtime","useForm","useHookForm","FormComponent","props","Form","Field","import_react","import_jsx_runtime","FieldPrimivite","import_react_hook_form","import_react_hook_form","Form"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/create-form.tsx","../src/default-fields.tsx","../src/create-field.tsx","../src/base-field.tsx","../src/form-context.tsx","../src/fields-context.tsx","../src/field-resolver.ts","../src/form.tsx","../src/array-field.tsx","../src/form-layout.tsx","../src/use-array-field.tsx","../src/utils.ts","../src/display-if.tsx","../src/field.tsx","../src/fields.tsx","../src/object-field.tsx","../src/submit-button.tsx","../src/use-form.tsx","../src/display-field.tsx","../src/watch-field.tsx"],"sourcesContent":["// Import and export Form and StepForm\nimport { createForm } from './create-form'\n\nexport { useForm, useZodForm } from './use-form'\nexport type { UseZodFormProps, UseFormReturn, UseFormProps } from './use-form'\n\n// import { createStepForm } from './create-step-form'\n\n// Exporting from './display-field'\nexport { DisplayField } from './display-field'\nexport type { DisplayFieldProps } from './display-field'\nexport { FormValue } from './display-field'\n\n// Exporting from './field'\nexport { Field } from './field'\nexport type { FieldRules } from './field'\n\n// Exporting from './fields'\nexport { AutoFields } from './fields'\nexport type { FieldsProps } from './fields'\n\n// Exporting from './fields-context'\nexport { FieldsProvider, useField } from './fields-context'\n\n// Exporting from './layout'\nexport { FormLayout } from './form-layout'\nexport type { FormLayoutProps } from './form-layout'\n\n// Exporting from './submit-button'\nexport { SubmitButton } from './submit-button'\nexport type { SubmitButtonProps } from './submit-button'\n\n// Exporting from './array-field'\nexport {\n ArrayField,\n ArrayFieldAddButton,\n ArrayFieldContainer,\n ArrayFieldRemoveButton,\n ArrayFieldRow,\n ArrayFieldRowContainer,\n ArrayFieldRowFields,\n ArrayFieldRows,\n} from './array-field'\n\nexport type {\n ArrayFieldButtonProps,\n ArrayFieldContainerProps,\n ArrayFieldProps,\n ArrayFieldRowFieldsProps,\n ArrayFieldRowsProps,\n} from './array-field'\n\n// Exporting from './use-array-field'\nexport {\n ArrayFieldProvider,\n ArrayFieldRowProvider,\n useArrayField,\n useArrayFieldAddButton,\n useArrayFieldContext,\n useArrayFieldRemoveButton,\n useArrayFieldRow,\n useArrayFieldRowContext,\n} from './use-array-field'\n\nexport type {\n ArrayFieldOptions,\n UseArrayFieldReturn,\n UseArrayFieldRowProps,\n UseArrayFieldRowReturn,\n} from './use-array-field'\n\n// Exporting from './object-field'\nexport { FormLegend, ObjectField } from './object-field'\nexport type { ObjectFieldProps } from './object-field'\n\n// Exporting from './display-if'\nexport { DisplayIf } from './display-if'\nexport type { DisplayIfProps } from './display-if'\n\n// Exporting from './step-form'\n// export { FormStep, FormStepper, NextButton, PrevButton } from './step-form'\n\n// export type {\n// FormStepOptions,\n// FormStepProps,\n// FormStepperProps,\n// NextButtonProps,\n// StepFormProps,\n// StepsOptions,\n// } from './step-form'\n\n// Exporting from './use-step-form'\n// export {\n// StepFormProvider,\n// useFormStep,\n// useStepForm,\n// useStepFormContext,\n// } from './use-step-form'\n\n// export type {\n// FormStepSubmitHandler,\n// StepFormContext,\n// StepFormRenderContext,\n// StepState,\n// UseFormStepProps,\n// UseStepFormProps,\n// UseStepFormReturn,\n// } from './use-step-form'\n\n// Exporting from './field-resolver'\nexport { objectFieldResolver } from './field-resolver'\nexport type {\n FieldResolver,\n GetFieldResolver,\n ObjectSchema,\n} from './field-resolver'\n\n// Exporting from './watch-field'\nexport { WatchField } from './watch-field'\nexport type { WatchFieldProps } from './watch-field'\n\n// Exporting BaseField from './base-field'\nexport { BaseField, useBaseField } from './base-field'\n\n// Exporting from './default-fields'\nexport {\n // CheckboxField,\n InputField,\n // NativeSelectField,\n // NumberInputField,\n // PasswordInputField,\n // PinField,\n // RadioField,\n // SelectField,\n // SwitchField,\n TextareaField,\n defaultFieldTypes,\n} from './default-fields'\n\nexport type {\n DefaultFields,\n InputFieldProps,\n // NumberInputFieldProps,\n // PinFieldProps,\n // SelectFieldProps,\n // SwitchFieldProps,\n TextareaFieldProps,\n // CheckboxFieldProps,\n // NativeSelectFieldProps,\n // RadioFieldProps,\n} from './default-fields'\n\n// Exporting types from './types'\nexport type {\n FieldProps,\n WithFields,\n BaseFieldProps,\n FieldOptions,\n DefaultFieldOverrides,\n // WithStepFields,\n GetBaseField,\n ArrayFieldPath,\n MergeFieldProps,\n FieldOption,\n FieldOverrides,\n FormChildren,\n ShallowMerge,\n StepFormChildren,\n ValueOf,\n} from './types'\n\n// Exporting from './create-form'\nexport { createForm } from './create-form'\nexport type { CreateFormProps, FormType } from './create-form'\n\n// Exporting from './create-field'\nexport { createField } from './create-field'\nexport type { CreateFieldOptions } from './create-field'\n\n// Exporting from './form'\nexport { Form as BaseForm } from './form'\nexport type { FormProps, FormRenderContext, FormComponent } from './form'\n\n// Exporting from './form-context'\nexport { FormProvider, useFormContext } from './form-context'\n\n// export { createStepForm } from './create-step-form'\n// export type { CreateStepFormProps } from './create-step-form'\n\n/**\n * Form component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const Form = createForm()\n\n/**\n * Multi-step form component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/step-form\n */\n// export const StepForm = createStepForm()\n\nexport type {\n BatchFieldArrayUpdate,\n ChangeHandler,\n Control,\n ControllerFieldState,\n ControllerProps,\n ControllerRenderProps,\n CriteriaMode,\n CustomElement,\n DeepMap,\n DeepPartial,\n DeepPartialSkipArrayKey,\n DefaultValues,\n DelayCallback,\n EmptyObject,\n ErrorOption,\n EventType,\n Field as FieldDef,\n FieldArray,\n FieldArrayMethodProps,\n FieldArrayWithId,\n FieldElement,\n FieldError,\n FieldErrors,\n FieldName,\n FieldNamesMarkedBoolean,\n FieldRefs,\n FieldValue,\n FieldValues,\n FormProviderProps,\n FormState,\n FormStateProxy,\n FormStateSubjectRef,\n GetIsDirty,\n InternalFieldErrors,\n InternalFieldName,\n InternalNameSet,\n IsAny,\n IsFlatObject,\n KeepStateOptions,\n LiteralUnion,\n Message,\n Mode,\n MultipleFieldErrors,\n Names,\n NativeFieldValue,\n NestedValue,\n NonUndefined,\n Noop,\n Primitive,\n ReadFormState,\n Ref,\n RefCallBack,\n RegisterOptions,\n Resolver,\n ResolverError,\n ResolverOptions,\n ResolverResult,\n ResolverSuccess,\n SetFieldValue,\n SetValueConfig,\n Subjects,\n SubmitErrorHandler,\n SubmitHandler,\n TriggerConfig,\n UnpackNestedValue,\n UseControllerProps,\n UseControllerReturn,\n UseFieldArrayProps,\n UseFieldArrayReturn,\n UseFormClearErrors,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormRegister,\n UseFormRegisterReturn,\n UseFormReset,\n UseFormResetField,\n UseFormSetError,\n UseFormSetFocus,\n UseFormSetValue,\n UseFormStateProps,\n UseFormStateReturn,\n UseFormTrigger,\n UseFormUnregister,\n UseFormWatch,\n UseWatchProps,\n Validate,\n ValidateResult,\n ValidationMode,\n ValidationRule,\n ValidationValue,\n ValidationValueMessage,\n WatchInternal,\n WatchObserver,\n ArrayPath,\n BrowserNativeObject,\n DeepRequired,\n ExtractObjects,\n FieldArrayPath,\n FieldArrayPathValue,\n FieldErrorsImpl,\n FieldPath,\n FieldPathByValue,\n FieldPathValue,\n FieldPathValues,\n} from 'react-hook-form'\n\nexport {\n appendErrors,\n useController,\n useFieldArray,\n useFormState,\n useWatch,\n Controller,\n} from 'react-hook-form'\n","import React, { ForwardedRef, forwardRef, useMemo } from 'react'\n\nimport { defaultFieldTypes } from './default-fields'\nimport { objectFieldResolver } from './field-resolver'\nimport type { GetFieldResolver } from './field-resolver'\nimport { FieldsProvider } from './fields-context'\nimport { FieldValues, Form, FormProps, GetResolver } from './form'\nimport { GetBaseField, WithFields } from './types'\n\nexport interface CreateFormProps<\n FieldDefs,\n TGetBaseField extends GetBaseField = GetBaseField,\n> {\n resolver?: GetResolver\n fieldResolver?: GetFieldResolver\n fields?: FieldDefs extends Record<string, React.FC<any>> ? FieldDefs : never\n getBaseField?: TGetBaseField\n}\n\nexport type FormType<\n FieldDefs,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n> = (<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n>(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs,\n ExtraOverrides\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps,\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport function createForm<\n FieldDefs,\n TGetBaseField extends GetBaseField<any> = GetBaseField<any>,\n>({\n resolver,\n fieldResolver = objectFieldResolver,\n fields,\n getBaseField,\n}: CreateFormProps<FieldDefs, TGetBaseField> = {}) {\n type ExtraFieldProps =\n TGetBaseField extends GetBaseField<infer ExtraFieldProps>\n ? ExtraFieldProps\n : object\n\n const DefaultForm = forwardRef(\n <\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n >(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs\n >,\n ref: ForwardedRef<HTMLFormElement>,\n ) => {\n const {\n schema,\n resolver: resolverProp,\n fieldResolver: fieldResolverProp,\n ...rest\n } = props\n\n const fieldsContext = useMemo(\n () => ({\n fields: { ...defaultFieldTypes, ...fields },\n getBaseField,\n }),\n [fields, getBaseField],\n )\n\n return (\n <FieldsProvider value={fieldsContext}>\n <Form\n ref={ref}\n resolver={resolverProp ?? resolver?.(props.schema)}\n fieldResolver={fieldResolverProp ?? fieldResolver?.(schema)}\n {...rest}\n />\n </FieldsProvider>\n )\n },\n ) as FormType<FieldDefs, object, ExtraFieldProps>\n\n DefaultForm.displayName = 'Form'\n DefaultForm.id = 'Form'\n\n return DefaultForm\n}\n","import React, { useMemo } from 'react'\n\nimport {\n Input,\n InputProps,\n Stack,\n type SystemStyleObject,\n Textarea,\n TextareaProps,\n createListCollection,\n} from '@chakra-ui/react'\nimport { Checkbox, type CheckboxProps } from '@saas-ui/react/checkbox'\nimport { InputGroup } from '@saas-ui/react/input'\nimport { NumberInput, type NumberInputProps } from '@saas-ui/react/number-input'\nimport {\n PasswordInput,\n type PasswordInputProps,\n} from '@saas-ui/react/password-input'\nimport { PinInput, type PinInputProps } from '@saas-ui/react/pin-input'\nimport { Radio } from '@saas-ui/react/radio'\nimport { RadioGroup } from '@saas-ui/react/radio-group'\nimport { Select } from '@saas-ui/react/select'\nimport { Switch, type SwitchProps } from '@saas-ui/react/switch'\n\nimport { createField } from './create-field.tsx'\nimport type { FieldOption, FieldOptions } from './types.ts'\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n startElement?: React.ReactNode\n endElement?: React.ReactNode\n}\n\nexport const InputField = createField<HTMLInputElement, InputFieldProps>(\n ({ type = 'text', startElement, endElement, size, ...rest }, ref) => {\n return (\n <InputGroup\n startElement={startElement}\n endElement={endElement}\n width=\"full\"\n >\n <Input type={type} size={size} {...rest} ref={ref} />\n </InputGroup>\n )\n },\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = createField<\n HTMLInputElement,\n NumberInputFieldProps\n>((props, ref) => <NumberInput {...props} ref={ref} />, {\n isControlled: true,\n})\n\nexport const PasswordInputField = createField<\n HTMLInputElement,\n PasswordInputProps\n>(({ type = 'password', ...props }, ref) => (\n <PasswordInput ref={ref} {...props} />\n))\n\nexport interface TextareaFieldProps extends TextareaProps {}\n\nexport const TextareaField = createField<\n HTMLTextAreaElement,\n TextareaFieldProps\n>((props, ref) => <Textarea {...props} ref={ref} />)\n\nexport interface SwitchFieldProps extends SwitchProps {\n type: 'switch'\n}\n\nexport const SwitchField = createField<HTMLInputElement, SwitchFieldProps>(\n ({ type, value, ...rest }, ref) => {\n return <Switch checked={!!value} {...rest} ref={ref} />\n },\n {\n isControlled: true,\n },\n)\n\nexport interface SelectFieldProps<Multiple extends boolean = boolean>\n extends Omit<\n Select.RootProps<FieldOption>,\n 'collection' | 'value' | 'multiple' | 'onChange' | 'onValueChange'\n > {\n multiple?: Multiple\n value?: Multiple extends true ? Array<string> : string\n onChange?: (value: Multiple extends true ? Array<string> : string) => void\n options: FieldOptions\n placeholder?: string\n triggerProps?: Select.TriggerProps\n contentProps?: Select.ContentProps\n}\n\nexport const SelectField = createField<HTMLDivElement, SelectFieldProps>(\n (props, ref) => {\n const {\n triggerProps,\n contentProps,\n options,\n placeholder,\n onChange,\n onBlur,\n multiple = false,\n value: valueProp,\n ...rest\n } = props\n\n const collection = useMemo(\n () =>\n createListCollection({\n items: options,\n }),\n [options],\n )\n\n const value = multiple\n ? [...(valueProp ?? [])]\n : valueProp\n ? [valueProp as string]\n : []\n\n return (\n <Select.Root\n ref={ref}\n collection={collection}\n onValueChange={(details) => {\n onChange(multiple ? details.value : details.value[0])\n }}\n onInteractOutside={() => onBlur()}\n value={value}\n {...rest}\n >\n <Select.Trigger {...triggerProps}>\n <Select.ValueText placeholder={placeholder} />\n </Select.Trigger>\n <Select.Content {...contentProps}>\n {collection.items.map((option) => (\n <Select.Item key={option.value} item={option}>\n {option.label || option.value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport interface CheckboxFieldProps extends CheckboxProps {\n type: 'checkbox'\n label?: string\n}\n\nexport const CheckboxField = createField<HTMLInputElement, CheckboxFieldProps>(\n ({ label, type, ...props }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n },\n {\n hideLabel: true,\n },\n)\n\nexport interface RadioFieldProps extends RadioGroup.RootProps {\n type: 'radio'\n options: FieldOptions\n flexDirection?: SystemStyleObject['flexDirection']\n gap?: SystemStyleObject['gap']\n}\n\nexport const RadioField = createField<HTMLInputElement, RadioFieldProps>(\n (props, ref) => {\n const { options, onChange, flexDirection = 'column', gap, ...rest } = props\n return (\n <RadioGroup.Root\n ref={ref}\n onValueChange={({ value }) => {\n onChange?.(value)\n }}\n {...rest}\n >\n <Stack flexDirection={flexDirection} gap={gap}>\n {options.map((option) => (\n <Radio key={option.value} value={option.value}>\n {option.label || option.value}\n </Radio>\n ))}\n </Stack>\n </RadioGroup.Root>\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport interface PinFieldProps\n extends Omit<PinInputProps, 'type' | 'value' | 'onChange'> {\n type: 'pin'\n pinLength?: number\n pinType?: PinInputProps['type']\n value?: string\n onChange?: (value: string) => void\n}\n\nexport const PinField = createField<HTMLInputElement, PinFieldProps>(\n (props, ref) => {\n const { pinType, value: valueProp, onChange, ...inputProps } = props\n\n const value = valueProp?.split('') || []\n\n return (\n <PinInput\n ref={ref}\n {...inputProps}\n value={value}\n onValueChange={(details) => {\n onChange(details.valueAsString)\n }}\n type={pinType}\n />\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport const defaultFieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n time: InputField,\n number: NumberInputField,\n pin: PinField,\n checkbox: CheckboxField,\n radio: RadioField,\n password: PasswordInputField,\n select: SelectField,\n switch: SwitchField,\n textarea: TextareaField,\n}\n\nexport type DefaultFields = typeof defaultFieldTypes\n","import React, {\n type ForwardRefRenderFunction,\n type PropsWithoutRef,\n forwardRef,\n} from 'react'\n\nimport { callAll, mergeRefs, splitProps } from '@saas-ui/core/utils'\nimport { Controller, type RegisterOptions } from 'react-hook-form'\n\nimport { BaseField } from './base-field'\nimport { useFieldsContext } from './fields-context'\nimport { useFormContext } from './form-context'\nimport { BaseFieldProps, GetBaseField } from './types'\n\ninterface CreateFieldProps<ExtraFieldProps extends object = object> {\n displayName: string\n hideLabel?: boolean\n getBaseField: GetBaseField<ExtraFieldProps>\n}\n\nconst _createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, getBaseField: getBaseFieldProp }: CreateFieldProps,\n) => {\n const Field = forwardRef<HTMLDivElement, any>((props, ref) => {\n const { id, label, required, rules } = props\n\n const inputRules = {\n required,\n ...rules,\n }\n\n const fieldContext = useFieldsContext()\n\n const getBaseField = fieldContext?.getBaseField ?? getBaseFieldProp\n\n const { props: extraProps, Component } = React.useMemo(\n () => getBaseField(),\n [getBaseField],\n )\n\n const rootProps = {\n name: props.name,\n label: props.label,\n disabled: props.disabled,\n invalid: props.invalid,\n readOnly: props.readOnly,\n required: props.required,\n }\n\n const [baseFieldProps, inputProps] = splitProps(\n props,\n ['orientation', 'help', 'hideLabel'].concat(extraProps),\n )\n\n return (\n <Component {...rootProps} {...baseFieldProps}>\n <InputComponent\n ref={ref}\n id={id}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n {...inputProps}\n rules={inputRules}\n />\n </Component>\n )\n })\n\n Field.displayName = displayName\n\n return Field\n}\n\nconst withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<typeof InputComponent, ControlProps>((props, ref) => {\n const { name, rules, ...inputProps } = props\n const { control } = useFormContext()\n\n const onChange = inputProps.onChange as (...event: any[]) => void\n\n return (\n <Controller\n name={name}\n control={control}\n rules={rules}\n render={({ field: { ref: _ref, ...field } }) => (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAll(onChange, field.onChange)}\n onBlur={callAll(inputProps.onBlur, field.onBlur)}\n ref={mergeRefs(ref, _ref)}\n />\n )}\n />\n )\n })\n}\n\nconst withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<typeof InputComponent, ControlProps>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n const onChange = inputProps.onChange as (...event: any[]) => void\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAll(onChange, field.onChange)}\n onBlur={callAll(inputProps.onBlur, field.onBlur)}\n ref={mergeRefs(ref, _ref)}\n />\n )\n },\n )\n}\n\nexport interface CreateFieldOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\n}\n\ninterface ControlProps {\n name: string\n onChange: (...event: any[]) => void\n onBlur: (...event: any[]) => void\n value: unknown\n disabled?: boolean\n rules?: RegisterOptions\n}\n\n/**\n * Register a new field type\n * @param type The name for this field in kebab-case, eg `email` or `array-field`\n * @param component The React component\n * @param options\n * @param options.isControlled Set this to true if this is a controlled field.\n * @param options.hideLabel Hide the field label, for example for the checkbox field.\n */\nexport const createField = <TType = unknown, TProps extends object = object>(\n component: ForwardRefRenderFunction<\n TType,\n PropsWithoutRef<TProps & ControlProps>\n >,\n options?: CreateFieldOptions,\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(forwardRef(component))\n } else {\n InputComponent = withUncontrolledInput(forwardRef(component))\n }\n\n const Field = _createField(InputComponent, {\n displayName: `${component.displayName ?? 'Custom'}Field`,\n hideLabel: options?.hideLabel,\n getBaseField: () =>\n ({\n props: [],\n Component: BaseField,\n }) as any,\n }) as React.ForwardRefExoticComponent<\n Omit<BaseFieldProps, keyof TProps> & TProps & React.RefAttributes<TType>\n >\n\n return Field\n}\n","import * as React from 'react'\n\nimport { Field } from '@chakra-ui/react'\nimport { splitProps } from '@saas-ui/core/utils'\nimport { FormState, get } from 'react-hook-form'\n\nimport { useFormContext } from './form-context'\nimport type { BaseFieldProps } from './types'\n\nconst getError = (name: string, formState: FormState<{ [x: string]: any }>) => {\n return get(formState.errors, name)\n}\n\nconst isTouched = (\n name: string,\n formState: FormState<{ [x: string]: any }>,\n) => {\n return get(formState.touchedFields, name)\n}\n\nexport const useBaseField = (props: BaseFieldProps) => {\n // TODO: Clean up these props / types\n const [fieldProps, rootProps] = splitProps(props, [\n 'name',\n 'label',\n 'help',\n 'hideLabel',\n 'placeholder',\n 'rules',\n 'type',\n 'children',\n ])\n\n const { formState } = useFormContext()\n\n const error = getError(fieldProps.name, formState)\n const touched = isTouched(fieldProps.name, formState)\n\n return {\n ...fieldProps,\n rootProps,\n error,\n touched,\n }\n}\n\n/**\n * The default BaseField component\n * Composes the Chakra UI Field component, with Label, HelperText and ErrorText.\n */\nexport const BaseField: React.FC<BaseFieldProps> = (props) => {\n const { rootProps, label, hideLabel, help, error } = useBaseField(props)\n\n const isInvalid = !!error\n\n return (\n <Field.Root invalid={isInvalid} {...rootProps}>\n {label && !hideLabel ? (\n <Field.Label>\n {label} <Field.RequiredIndicator />\n </Field.Label>\n ) : null}\n\n {props.children}\n {help && !error?.message ? (\n <Field.HelperText>{help}</Field.HelperText>\n ) : null}\n {error?.message && <Field.ErrorText>{error?.message}</Field.ErrorText>}\n </Field.Root>\n )\n}\n\nBaseField.displayName = 'BaseField'\n","import * as React from 'react'\n\nimport {\n FieldValues,\n FormProvider as HookFormProvider,\n FormProviderProps as HookFormProviderProps,\n useFormContext as useHookFormContext,\n} from 'react-hook-form'\n\nimport type { FieldResolver } from './field-resolver'\nimport type { BaseFieldProps } from './types'\n\nexport type FormContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = {\n fieldResolver?: FieldResolver\n schema?: TSchema\n fields?: {\n [key: string]: unknown\n }\n}\n\nexport type FormProviderProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = HookFormProviderProps<TFieldValues, TContext> & {\n fieldResolver?: FieldResolver\n schema?: TSchema\n fields?: {\n [key: string]: unknown\n }\n}\n\nconst FormContext = React.createContext<FormContextValue | null>(null)\n\nexport const useFormContext = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n>() => {\n const context = React.useContext(FormContext)\n const hookContext = useHookFormContext<TFieldValues, TContext>()\n\n return {\n ...hookContext,\n ...context,\n }\n}\n\nexport const useFieldProps = <TFieldValues extends FieldValues = FieldValues>(\n name: string,\n): BaseFieldProps<TFieldValues> | undefined => {\n const parsedName = name?.replace(/\\.[0-9]/g, '.$')\n const context = useFormContext()\n return (context?.fields?.[parsedName] as any) || {}\n}\n\nexport type UseFormReturn<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = ReturnType<typeof useFormContext<TFieldValues, TContext, TSchema>>\n\nexport const FormProvider = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n>(\n props: FormProviderProps<TFieldValues, TContext, TSchema>,\n) => {\n const { children, fieldResolver, schema, fields, ...rest } = props\n return (\n <HookFormProvider {...rest}>\n <FormContext.Provider value={{ fieldResolver, schema, fields }}>\n {children}\n </FormContext.Provider>\n </HookFormProvider>\n )\n}\n","import React from 'react'\n\nimport type { GetBaseField } from './types'\n\nexport interface FieldsContextValue<\n TFields = any,\n TBaseFieldProps extends object = object,\n> {\n fields: Record<string, React.FC<TFields>>\n getBaseField?: GetBaseField<TBaseFieldProps>\n}\n\nconst FieldsContext = React.createContext<FieldsContextValue | null>(null)\n\nexport const FieldsProvider: React.FC<{\n value: FieldsContextValue\n children: React.ReactNode\n}> = (props) => {\n return (\n <FieldsContext.Provider value={props.value}>\n {props.children}\n </FieldsContext.Provider>\n )\n}\n\nexport const useFieldsContext = () => {\n return React.useContext(FieldsContext)\n}\n\nexport const useField = (\n type: string,\n fallback: React.FC<any>,\n): React.FC<any> => {\n const context = React.useContext(FieldsContext)\n return context?.fields?.[type] || fallback\n}\n","import { get } from '@saas-ui/core/utils'\n\nimport { ArrayFieldProps } from './array-field.tsx'\nimport { DefaultFields } from './default-fields.tsx'\nimport { ObjectFieldProps } from './object-field.tsx'\nimport { BaseFieldProps, ValueOf } from './types.ts'\n\nexport type FieldResolver = {\n getFields(): BaseFieldProps[]\n getNestedFields(name: string): BaseFieldProps[]\n}\n\nexport type GetFieldResolver<TSchema = any> = (schema: TSchema) => FieldResolver\n\ntype FieldTypes<FieldDefs = DefaultFields> = ValueOf<{\n [K in keyof FieldDefs]: FieldDefs[K] extends React.FC<infer Props>\n ? { type?: K } & Omit<Props, 'name'>\n : never\n}>\n\ntype SchemaField<FieldDefs = DefaultFields> =\n | FieldTypes<FieldDefs>\n | (Omit<ObjectFieldProps, 'name' | 'children'> & {\n type: 'object'\n properties?: Record<string, SchemaField<FieldDefs>>\n })\n | (Omit<ArrayFieldProps, 'name' | 'children'> & {\n type: 'array'\n items?: SchemaField<FieldDefs>\n })\n\nexport type ObjectSchema<FieldDefs = DefaultFields> = Record<\n string,\n SchemaField<FieldDefs>\n>\n\nconst mapFields = (schema: ObjectSchema): BaseFieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, props]) => {\n const { items, label, title, ...field } = props as any\n return {\n ...field,\n name,\n label: label || title || name, // json schema compatibility\n }\n })\n\nexport const objectFieldResolver: GetFieldResolver<ObjectSchema> = (schema) => {\n const getFields = (): BaseFieldProps[] => {\n return mapFields(schema)\n }\n const getNestedFields = (name: string): BaseFieldProps[] => {\n const field = get(schema, name)\n\n if (!field) return []\n\n if (field.items?.type === 'object') {\n return mapFields(field.items.properties)\n } else if (field.type === 'object') {\n return mapFields(field.properties)\n }\n return [field.items]\n }\n\n return { getFields, getNestedFields }\n}\n","import React, { forwardRef } from 'react'\n\nimport { HTMLChakraProps, chakra } from '@chakra-ui/react'\nimport { type MaybeRenderProp, cx, runIfFn } from '@saas-ui/core/utils'\nimport {\n FieldValues,\n ResolverOptions,\n ResolverResult,\n SubmitErrorHandler,\n SubmitHandler,\n UseFormProps,\n UseFormReturn,\n WatchObserver,\n useForm,\n} from 'react-hook-form'\n\nimport { ArrayField, ArrayFieldProps } from './array-field.tsx'\nimport { DisplayIf, DisplayIfProps } from './display-if.tsx'\nimport type { FieldResolver } from './field-resolver.tsx'\nimport { Field as DefaultField } from './field.tsx'\nimport { AutoFields } from './fields.tsx'\nimport { FormProvider } from './form-context.tsx'\nimport { FormLayout } from './form-layout.tsx'\nimport { ObjectField, ObjectFieldProps } from './object-field.tsx'\nimport { SubmitButton } from './submit-button.tsx'\nimport {\n DefaultFieldOverrides,\n FieldProps,\n type FocusableElement,\n} from './types.ts'\nimport { UseArrayFieldReturn } from './use-array-field.tsx'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\nexport interface FormRenderContext<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n> extends UseFormReturn<TFieldValues, TContext> {\n Field: React.FC<TFieldTypes & React.RefAttributes<FocusableElement>>\n DisplayIf: React.FC<DisplayIfProps<TFieldValues>>\n ArrayField: React.FC<\n ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>\n >\n ObjectField: React.FC<ObjectFieldProps<TFieldValues>>\n}\n\ninterface FormOptions<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>,\n> {\n /**\n * The form schema.\n */\n schema?: TSchema\n /**\n * Triggers when any of the field change.\n */\n onChange?: WatchObserver<TFieldValues>\n /**\n * The submit handler.\n */\n onSubmit: SubmitHandler<TFieldValues>\n /**\n * Triggers when there are validation errors.\n */\n onError?: SubmitErrorHandler<TFieldValues>\n /**\n * The Hook Form state ref.\n */\n formRef?: React.Ref<UseFormReturn<TFieldValues, TContext>>\n /**\n * The form children, can be a render prop or a ReactNode.\n */\n children?: MaybeRenderProp<\n FormRenderContext<TFieldValues, TContext, TFieldTypes>\n >\n /**\n * The field resolver, used to resolve the fields from schemas.\n */\n fieldResolver?: FieldResolver\n /**\n * Field overrides\n */\n fields?: DefaultFieldOverrides\n}\n\nexport interface FormProps<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>,\n> extends UseFormProps<TFieldValues, TContext>,\n Omit<\n HTMLChakraProps<'form'>,\n 'children' | 'onChange' | 'onSubmit' | 'onError'\n >,\n FormOptions<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n > {}\n\n/**\n * The wrapper component provides context, state, and focus management.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const Form = forwardRef(\n <\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n >(\n props: FormProps<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n >,\n ref: React.ForwardedRef<HTMLFormElement>,\n ) => {\n const {\n mode = 'all',\n resolver,\n fieldResolver,\n fields,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n schema,\n defaultValues,\n values,\n context,\n resetOptions,\n onChange,\n onSubmit,\n onError,\n formRef,\n children,\n ...rest\n } = props\n\n const form = {\n mode,\n resolver,\n defaultValues,\n values,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n context,\n resetOptions,\n }\n\n const methods = useForm<TFieldValues, TContext>(form)\n const { handleSubmit } = methods\n\n // This exposes the useForm api through the forwarded ref\n React.useImperativeHandle(formRef, () => methods, [formRef, methods])\n\n React.useEffect(() => {\n let subscription: any\n if (onChange) {\n subscription = methods.watch(onChange)\n }\n return () => subscription?.unsubscribe()\n }, [methods, onChange])\n\n let _children = children\n if (!_children && fieldResolver) {\n _children = (\n <FormLayout>\n <AutoFields />\n <SubmitButton {...fields?.submit} />\n </FormLayout>\n )\n }\n\n return (\n <FormProvider\n {...methods}\n schema={schema}\n fieldResolver={fieldResolver}\n fields={fields}\n >\n <chakra.form\n ref={ref}\n onSubmit={handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('sui-form', props.className)}\n >\n {runIfFn(_children, {\n Field: DefaultField as any,\n DisplayIf: DisplayIf as any,\n ArrayField: ArrayField as any,\n ObjectField: ObjectField as any,\n ...methods,\n })}\n </chakra.form>\n </FormProvider>\n )\n },\n) as FormComponent\n\nexport type FormComponent = (<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n>(\n props: FormProps<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n },\n) => React.ReactElement) & {\n displayName?: string\n}\n\nForm.displayName = 'Form'\n\nexport type GetResolver = <\n TFieldValues extends FieldValues,\n TContext extends object,\n>(\n schema: unknown,\n) => (\n values: TFieldValues,\n context: TContext | undefined,\n options: ResolverOptions<TFieldValues>,\n) => ResolverResult<TFieldValues> | Promise<ResolverResult<TFieldValues>>\n","import React, { forwardRef } from 'react'\n\nimport { Button, ButtonProps, chakra } from '@chakra-ui/react'\nimport type { MaybeRenderProp } from '@saas-ui/core/utils'\nimport { MinusIcon, PlusIcon } from '@saas-ui/react/icons'\nimport { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { BaseField } from './base-field'\nimport { useFieldProps } from './form-context'\nimport { FormLayout, FormLayoutProps } from './form-layout'\nimport { BaseFieldProps } from './types'\nimport {\n ArrayFieldOptions,\n ArrayFieldProvider,\n ArrayFieldRowProvider,\n UseArrayFieldReturn,\n useArrayField,\n useArrayFieldAddButton,\n useArrayFieldContext,\n useArrayFieldRemoveButton,\n useArrayFieldRow,\n useArrayFieldRowContext,\n} from './use-array-field'\nimport { mapNestedFields } from './utils'\n\nexport interface ArrayFieldButtonProps extends ButtonProps {}\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\n\n/**\n * Render prop component, to get access to the internal fields state. Must be a child of ArrayFieldContainer.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rowFieldsProps\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields {...rowFieldsProps}>{children}</ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nArrayFieldRow.displayName = 'ArrayFieldRow'\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * The fields\n */\n children: React.ReactNode\n}\n/**\n * Add the name prefix to the fields and acts as a horizontal form layout by default.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout flex=\"1\" mr=\"2\" {...layoutProps}>\n {mapNestedFields(name, children)}\n </FormLayout>\n )\n}\n\nArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n\n/**\n * The row container component providers row context.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rest\n}) => {\n const context = useArrayFieldRow({ index })\n\n const styles = {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-end',\n width: '100%',\n mb: 4,\n }\n\n return (\n <ArrayFieldRowProvider value={context}>\n <chakra.div {...rest} css={styles}>\n {children}\n </chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n\n/**\n * The default remove button.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRemoveButton: React.FC<ArrayFieldButtonProps> = (\n props,\n) => {\n return (\n <Button aria-label=\"Remove row\" {...useArrayFieldRemoveButton()} {...props}>\n {props.children || <MinusIcon />}\n </Button>\n )\n}\n\nArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n\n/**\n * The default add button.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldAddButton: React.FC<ArrayFieldButtonProps> = (props) => {\n return (\n <Button\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n >\n {props.children || <PlusIcon />}\n </Button>\n )\n}\n\nArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n\nexport interface ArrayFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends ArrayFieldOptions<TFieldValues, TName>,\n Omit<\n BaseFieldProps<TFieldValues, TName>,\n 'name' | 'defaultValue' | 'children'\n > {\n children: MaybeRenderProp<ArrayField[]>\n}\n\n/**\n * The wrapper component that composes the default ArrayField functionality.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n const rowFn =\n typeof children === 'function'\n ? children\n : (fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n )) || null}\n </>\n )\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>{rowFn as any}</ArrayFieldRows>\n <ArrayFieldAddButton />\n </ArrayFieldContainer>\n )\n },\n) as ((\n props: ArrayFieldProps & {\n ref?: React.ForwardedRef<UseArrayFieldReturn>\n },\n) => React.ReactElement) & {\n displayName: string\n}\n\nArrayField.displayName = 'ArrayField'\n\nexport interface ArrayFieldRowsProps {\n children: (fields: ArrayField[]) => React.ReactElement | null\n}\n\nexport const ArrayFieldRows = ({\n children,\n}: ArrayFieldRowsProps): React.ReactElement | null => {\n const { fields } = useArrayFieldContext()\n return children(fields)\n}\n\nArrayFieldRows.displayName = 'ArrayFieldRows'\n\nexport interface ArrayFieldContainerProps\n extends Omit<ArrayFieldProps, 'children'> {\n children: React.ReactNode\n}\n\n/**\n * The container component provides context and state management.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldContainerProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>,\n ) => {\n const overrides = useFieldProps(name)\n\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min: min || (overrides as any)?.min,\n max: max || (overrides as any)?.max,\n })\n\n // This exposes the useArrayField api through the forwarded ref\n React.useImperativeHandle(ref, () => context, [ref, context])\n\n return (\n <ArrayFieldProvider value={context}>\n <BaseField name={name} {...fieldProps} {...overrides}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n },\n)\n\nArrayFieldContainer.displayName = 'ArrayFieldContainer'\n","import { forwardRef } from 'react'\n\nimport {\n type RecipeProps,\n SimpleGrid,\n SimpleGridProps,\n useRecipe,\n} from '@chakra-ui/react'\nimport { cx } from '@saas-ui/core/utils'\n\nexport interface FormLayoutOptions {\n columns?: SimpleGridProps['columns']\n gap?: SimpleGridProps['gap']\n}\n\nexport interface FormLayoutProps\n extends RecipeProps<'suiFormLayout'>,\n SimpleGridProps {}\n\n/**\n * Create consistent field spacing and positioning.\n *\n * Renders form items in a `SimpleGrid`\n * @see https://chakra-ui.com/docs/components/simple-grid\n *\n * @see https://saas-ui.dev/docs/components/forms/form\n */\nexport const FormLayout = forwardRef<HTMLDivElement, FormLayoutProps>(\n ({ children, gap = 4, ...props }, ref) => {\n const recipe = useRecipe({\n key: 'suiFormLayout',\n })\n\n const [variantProps, gridProps] = recipe.splitVariantProps(props)\n\n const styles = recipe(variantProps)\n\n return (\n <SimpleGrid\n ref={ref}\n {...gridProps}\n className={cx('sui-form-layout', props.className)}\n css={[\n {\n gap,\n },\n styles,\n props.css,\n ]}\n >\n {children}\n </SimpleGrid>\n )\n },\n)\n\nFormLayout.displayName = 'FormLayout'\n","import * as React from 'react'\n\nimport { createContext } from '@saas-ui/core/utils'\nimport {\n FieldPath,\n FieldValues,\n UseFieldArrayReturn,\n useFieldArray,\n} from 'react-hook-form'\n\nimport { useFormContext } from './form-context'\n\nexport interface UseArrayFieldReturn extends UseFieldArrayReturn {\n /**\n * The array field name\n */\n name: string\n /**\n * The default value for new items\n */\n defaultValue: Record<string, any>\n /**\n * Min amount of items\n */\n min?: number\n /**\n * Max amount of items\n */\n max?: number\n}\n\nexport const [ArrayFieldProvider, useArrayFieldContext] =\n createContext<UseArrayFieldReturn>({\n name: 'ArrayFieldContext',\n })\n\nexport interface UseArrayFieldRowReturn {\n /**\n * Name of the array field including the index, eg 'field.0'\n */\n name: string\n /**\n * The field index\n */\n index: number\n /**\n * Remove this array item\n */\n remove: () => void\n /**\n * True if this is the first item\n */\n isFirst: boolean\n /**\n * True if this is the last item\n */\n isLast: boolean\n}\n\nexport const [ArrayFieldRowProvider, useArrayFieldRowContext] =\n createContext<UseArrayFieldRowReturn>({\n name: 'ArrayFieldRowContext',\n })\n\nexport interface ArrayFieldOptions<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n /**\n * The field name\n */\n name: TName\n /**\n * Default value for new values in the array\n */\n defaultValue?: Record<string, any>\n /**\n * Default key name for rows, change this if your data uses a different 'id' field\n * @default \"id\"\n */\n keyName?: string\n min?: number\n max?: number\n}\n\nexport const useArrayField = ({\n name,\n defaultValue = {},\n keyName,\n min,\n max,\n}: ArrayFieldOptions) => {\n const { control } = useFormContext()\n\n const context = useFieldArray({\n control,\n name,\n keyName,\n })\n return {\n ...context,\n name,\n defaultValue,\n min,\n max,\n }\n}\n\nexport interface UseArrayFieldRowProps {\n index: number\n}\n\nexport const useArrayFieldRow = ({ index }: UseArrayFieldRowProps) => {\n const { clearErrors } = useFormContext()\n const { name, remove, fields } = useArrayFieldContext()\n\n React.useEffect(() => {\n // reset errors, to make sure min/max errors reset correctly\n clearErrors(name)\n }, [])\n\n return {\n index,\n isFirst: index === 0,\n isLast: index === fields.length - 1,\n name: `${name}.${index}`,\n remove: React.useCallback(() => {\n clearErrors(name)\n remove(index)\n }, [index]),\n }\n}\n\nexport const useArrayFieldRemoveButton = () => {\n const { isFirst, remove } = useArrayFieldRowContext()\n const { min, fields } = useArrayFieldContext()\n\n const isDisabled = isFirst && !!(min && fields.length <= min)\n\n return {\n onClick: () => remove(),\n isDisabled,\n }\n}\n\nexport const useArrayFieldAddButton = () => {\n const { append, defaultValue, max, fields } = useArrayFieldContext()\n\n const isDisabled = !!(max && fields.length >= max)\n\n return {\n onClick: () =>\n append(defaultValue, {\n shouldFocus: false,\n }),\n isDisabled,\n }\n}\n","import * as React from 'react'\n\nimport { FieldOption, FieldOptions } from './types'\n\nexport const mapNestedFields = (name: string, children: React.ReactNode) => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement<any>(child)) {\n const props = child.props as any\n\n if (!props.name) {\n return child\n }\n\n let childName = props.name\n if (childName.includes('.')) {\n childName = childName.replace(/^.*\\.(.*)/, '$1')\n } else if (childName.includes('.$')) {\n childName = childName.replace(/^.*\\.\\$(.*)/, '$1')\n }\n\n return React.cloneElement(child, {\n ...props,\n name: `${name}.${childName}`,\n })\n }\n\n return child\n })\n}\n\nexport const mapOptions = <TOption extends FieldOption = FieldOption>(\n options: FieldOptions<TOption>,\n) => {\n return options.map((option) => {\n if (typeof option === 'string') {\n return {\n label: option,\n value: option,\n }\n }\n return option\n })\n}\n","import * as React from 'react'\n\nimport {\n FieldPath,\n FieldValues,\n UseFormReturn,\n useWatch,\n} from 'react-hook-form'\n\nimport { useFormContext } from './form-context.tsx'\n\nexport interface DisplayIfProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n children: React.ReactElement\n name: TName\n defaultValue?: unknown\n isDisabled?: boolean\n isExact?: boolean\n condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean\n onToggle?: (\n conditionMatched: boolean,\n context: UseFormReturn<TFieldValues>,\n ) => void\n}\n/**\n * Conditionally render parts of a form.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const DisplayIf = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n children,\n name,\n defaultValue,\n isDisabled,\n isExact,\n condition = (value) => !!value,\n onToggle,\n}: DisplayIfProps<TFieldValues, TName>) => {\n const initializedRef = React.useRef(false)\n const matchesRef = React.useRef(false)\n\n const value = useWatch<TFieldValues>({\n name,\n defaultValue: defaultValue as any,\n disabled: isDisabled,\n exact: isExact,\n })\n const context = useFormContext() as any\n\n const matches = condition(value, context)\n\n React.useEffect(() => {\n if (!initializedRef.current) {\n initializedRef.current = true\n return\n }\n if (matchesRef.current === matches) return\n matchesRef.current = matches\n onToggle?.(matches, context)\n }, [value])\n\n return matches ? children : null\n}\n\nDisplayIf.displayName = 'DisplayIf'\n","import * as React from 'react'\n\nimport { FieldValues, RegisterOptions } from 'react-hook-form'\n\nimport { InputField } from './default-fields'\nimport { useField } from './fields-context'\nimport { useFieldProps } from './form-context'\nimport { FieldProps, type FocusableElement } from './types'\n\nexport type FieldRules = Pick<\n RegisterOptions,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength' | 'pattern'\n>\n\nconst defaultInputType = 'text'\n\n/**\n * Form field component.\n * \n * Build-in types:\n * text, number, password, textarea, select, native-select, checkbox, radio, switch, pin\n *\n * Will default to a text field if there is no matching type.\n\n * @see Docs https://saas-ui.dev/docs/components/forms/field\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues>,\n ref: React.ForwardedRef<FocusableElement>,\n ) => {\n const { type = defaultInputType, name } = props\n const overrides = useFieldProps(name)\n const InputComponent = useField(overrides?.type || type, InputField)\n\n return <InputComponent ref={ref} {...props} {...overrides} />\n },\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> & {\n ref?: React.ForwardedRef<FocusableElement>\n },\n) => React.ReactElement) & {\n displayName?: string\n}\n","import * as React from 'react'\n\nimport { ArrayField } from './array-field'\nimport { Field } from './field'\nimport type { FieldResolver } from './field-resolver'\nimport { useFormContext } from './form-context'\nimport { FormLayout } from './form-layout'\nimport { ObjectField } from './object-field'\nimport { BaseFieldProps } from './types'\n\nexport interface FieldsProps<TSchema = any> {\n schema?: TSchema\n fieldResolver?: FieldResolver\n focusFirstField?: boolean\n}\n\nconst mapNestedFields = (resolver: FieldResolver, name: string) => {\n return resolver\n .getNestedFields(name)\n ?.map(\n (\n { name, type, ...nestedFieldProps }: BaseFieldProps,\n i,\n ): React.ReactNode => (\n <Field\n key={name || i}\n name={name}\n type={type as any}\n {...nestedFieldProps}\n />\n ),\n )\n}\n\nexport const AutoFields: React.FC<FieldsProps> = ({\n schema: schemaProp,\n fieldResolver: fieldResolverProp,\n focusFirstField,\n ...props\n}) => {\n const context = useFormContext()\n const schema = schemaProp || context.schema\n const fieldResolver = fieldResolverProp || context.fieldResolver\n const resolver = React.useMemo(() => fieldResolver, [schema, fieldResolver])\n\n const fields = React.useMemo(() => resolver?.getFields(), [resolver])\n\n const form = useFormContext()\n\n React.useEffect(() => {\n if (focusFirstField && fields?.[0]?.name) {\n form.setFocus(fields[0].name)\n }\n }, [schema, fieldResolver, focusFirstField])\n\n if (!resolver) {\n return null\n }\n\n return (\n <FormLayout {...props}>\n {fields?.map(\n ({ name, type, ...fieldProps }: BaseFieldProps): React.ReactNode => {\n if (type === 'array') {\n return (\n <ArrayField key={name} name={name} {...fieldProps}>\n {mapNestedFields(resolver, name)}\n </ArrayField>\n )\n } else if (type === 'object') {\n return (\n <ObjectField key={name} name={name} {...fieldProps}>\n {mapNestedFields(resolver, name)}\n </ObjectField>\n )\n }\n\n return (\n <Field\n key={name}\n name={name}\n type={type as any}\n // defaultValue={defaultValue}\n {...fieldProps}\n />\n )\n },\n )}\n </FormLayout>\n )\n}\n\nAutoFields.displayName = 'Fields'\n","import * as React from 'react'\n\nimport { Field as FieldPrimivite } from '@chakra-ui/react'\nimport { dataAttr } from '@saas-ui/core/utils'\nimport { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { useFieldProps } from './form-context'\nimport { FormLayout, type FormLayoutOptions } from './form-layout'\nimport { BaseFieldProps } from './types'\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<BaseFieldProps, keyof FormLayoutOptions>,\n FormLayoutOptions {\n name: TName\n children: React.ReactNode\n}\n\nexport const FormLegend = (props: FieldPrimivite.LabelProps) => {\n return <FieldPrimivite.Label as=\"legend\" {...props} />\n}\n\n/**\n * The object field component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/object-field\n */\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const {\n name,\n label,\n hideLabel: hideLabelProp,\n children,\n columns: columnsProp,\n gap: gapProp,\n ...fieldProps\n } = props\n\n const { hideLabel, columns, gap, ...overrides } = useFieldProps(name) as Omit<\n ObjectFieldProps,\n 'name'\n >\n\n const hidden = hideLabelProp || hideLabel\n\n return (\n <FieldPrimivite.Root as=\"fieldset\" {...fieldProps} {...overrides}>\n <FormLegend data-hidden={dataAttr(hidden)}>{label}</FormLegend>\n <FormLayout columns={columnsProp || columns} gridGap={gapProp || gap}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FieldPrimivite.Root>\n )\n}\n\nObjectField.displayName = 'ObjectField'\n","import { forwardRef } from 'react'\n\nimport { Button, ButtonProps } from '@saas-ui/react/button'\nimport { useFormContext } from 'react-hook-form'\n\nimport { useFieldProps } from './form-context.tsx'\n\nexport interface SubmitButtonProps extends ButtonProps {\n /**\n * Disable the submit button if the form is untouched.\n */\n disableIfUntouched?: boolean\n /**\n * Disable the submit button if the form is invalid.\n */\n disableIfInvalid?: boolean\n}\n\n/**\n * A button with type submit and default color scheme primary and isLoading state when the form is submitting.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const SubmitButton = forwardRef<HTMLButtonElement, SubmitButtonProps>(\n (props, ref) => {\n const {\n variant = 'glass',\n colorPalette = 'accent',\n children = 'Submit',\n disableIfUntouched: disableIfUntouchedProp = false,\n disableIfInvalid: disableIfInvalidProp = false,\n disabled: disabledProp,\n loading,\n ...rest\n } = props\n const { formState } = useFormContext()\n\n const field = useFieldProps('submit') as SubmitButtonProps\n\n const {\n disableIfUntouched: disableIfUntouchedOverride,\n disableIfInvalid: disableIfInvalidOverride,\n ...fieldProps\n } = field\n\n const disableIfUntouched =\n disableIfUntouchedOverride ?? disableIfUntouchedProp\n const disableIfInvalid = disableIfInvalidOverride ?? disableIfInvalidProp\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid) ||\n disabledProp\n\n return (\n <Button\n ref={ref}\n variant={variant as any}\n colorPalette={colorPalette}\n type=\"submit\"\n loading={formState.isSubmitting || loading}\n disabled={isDisabled}\n children={children}\n {...rest}\n {...fieldProps}\n />\n )\n },\n)\n\nSubmitButton.displayName = 'SubmitButton'\n","import { forwardRef } from 'react'\n\nimport { type HTMLChakraProps, chakra } from '@chakra-ui/react'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { cx } from '@saas-ui/core/utils'\nimport {\n type DefaultValues,\n type FieldValues,\n type SubmitErrorHandler,\n type SubmitHandler,\n UseFormProps as UseHookFormProps,\n type UseFormReturn as UseHookFormReturn,\n useForm as useHookForm,\n} from 'react-hook-form'\nimport type { z } from 'zod'\n\nimport { ArrayField, type ArrayFieldProps } from './array-field'\nimport { DisplayIf, type DisplayIfProps } from './display-if'\nimport { Field } from './field.tsx'\nimport { FormProvider } from './form-context'\nimport { ObjectField, type ObjectFieldProps } from './object-field'\nimport type { FieldProps } from './types'\nimport type { UseArrayFieldReturn } from './use-array-field'\n\nexport interface UseFormProps<\n TFieldValues extends FieldValues,\n TContext extends object,\n> extends UseHookFormProps<TFieldValues, TContext> {\n onSubmit: SubmitHandler<TFieldValues>\n onInvalid?: SubmitErrorHandler<FieldValues>\n}\n\nexport interface UseFormReturn<\n TFieldValues extends FieldValues,\n TContext extends object,\n> extends UseHookFormReturn<TFieldValues, TContext> {\n Form: React.FC<Omit<FormProps<TFieldValues, TContext>, 'form'>>\n Field: React.FC<FieldProps<TFieldValues>>\n DisplayIf: React.FC<DisplayIfProps<TFieldValues>>\n ArrayField: React.FC<\n ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>\n >\n ObjectField: React.FC<ObjectFieldProps<TFieldValues>>\n}\n\nexport function useForm<\n TFieldValues extends FieldValues,\n TContext extends object,\n>(props: UseFormProps<TFieldValues, TContext>) {\n const { onSubmit, onInvalid, ...rest } = props\n\n const form = useHookForm<TFieldValues, TContext>(rest)\n\n const FormComponent = forwardRef<HTMLFormElement, Omit<FormProps, 'form'>>(\n function FormComponent(props, ref) {\n return (\n <Form\n {...props}\n form={form}\n onSubmit={props.onSubmit ?? form.handleSubmit(onSubmit, onInvalid)}\n ref={ref}\n />\n )\n },\n )\n\n return {\n ...form,\n Form: FormComponent,\n Field,\n DisplayIf,\n ArrayField,\n ObjectField,\n } as UseFormReturn<TFieldValues, TContext>\n}\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n> extends HTMLChakraProps<'form'> {\n children: React.ReactNode\n form: ReturnType<typeof useHookForm<TFieldValues, TContext>>\n}\n\nexport const Form = forwardRef<HTMLFormElement, FormProps>(\n function Form(props, ref) {\n const { children, form, ...rest } = props\n return (\n <FormProvider {...form}>\n <chakra.form\n ref={ref}\n {...rest}\n className={cx('sui-form', props.className)}\n >\n {props.children}\n </chakra.form>\n </FormProvider>\n )\n },\n) as <TFieldValues extends FieldValues, TContext extends object>(\n props: FormProps<TFieldValues, TContext> & {\n ref?: React.Ref<HTMLFormElement>\n },\n) => React.ReactElement\n\nexport interface UseZodFormProps<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n> extends Omit<UseHookFormProps<TFieldValues, TContext>, 'defaultValues'> {\n schema: TSchema\n onSubmit: SubmitHandler<TFieldValues>\n onInvalid?: SubmitErrorHandler<FieldValues>\n defaultValues?: DefaultValues<TFieldValues> | AsyncDefaultValues<TFieldValues>\n}\n\nexport function useZodForm<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n>(props: UseZodFormProps<TSchema, TFieldValues, TContext>) {\n const { schema, ...rest } = props\n\n return useForm<TFieldValues, TContext>({\n resolver: zodResolver(schema as any),\n ...rest,\n })\n}\n\ntype InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> =\n T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>\n\ntype AsyncDefaultValues<TFieldValues> = (\n payload?: unknown,\n) => Promise<TFieldValues>\n","import * as React from 'react'\n\nimport { Field as FieldPrimivite, Text } from '@chakra-ui/react'\nimport type { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { useFormContext } from './form-context.tsx'\nimport type { ArrayFieldPath } from './types.ts'\n\nexport interface DisplayFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<FieldPrimivite.RootProps, 'type' | 'onChange' | 'defaultValue'> {\n name: TName | ArrayFieldPath<TName>\n label?: string\n}\n\n/**\n * Display a field value.\n *\n * @see Docs https://saas-ui.dev/\n */\nexport const DisplayField: React.FC<DisplayFieldProps> = ({\n name,\n label,\n ...props\n}) => {\n return (\n <FieldPrimivite.Root {...props}>\n {label ? (\n <FieldPrimivite.Label htmlFor={name}>{label}</FieldPrimivite.Label>\n ) : null}\n <Text fontSize=\"md\">\n <FormValue name={name} />\n </Text>\n </FieldPrimivite.Root>\n )\n}\n\nDisplayField.displayName = 'DisplayField'\n\nexport const FormValue: React.FC<{ name: string }> = ({ name }) => {\n const { getValues } = useFormContext()\n return getValues(name) || null\n}\n\nFormValue.displayName = 'FormValue'\n","import { FieldValues, useWatch } from 'react-hook-form'\nimport { useFormContext, UseFormReturn } from './form-context'\n\nexport interface WatchFieldProps<\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n> {\n name: string\n defaultValue?: Value\n isDisabled?: boolean\n isExact?: boolean\n children: (\n value: Value,\n form: UseFormReturn<TFieldValues, TContext>\n ) => React.ReactElement | void\n}\n\nexport const WatchField = <\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n>(\n props: WatchFieldProps<Value, TFieldValues, TContext>\n) => {\n const { name, defaultValue, isDisabled, isExact } = props\n const form = useFormContext<TFieldValues, TContext>()\n\n const field = useWatch({\n name,\n defaultValue,\n disabled: isDisabled,\n exact: isExact,\n })\n\n return props.children(field, form) || null\n}\n"],"mappings":"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","names":["Field","Form","useForm","import_react","import_react","import_react","import_utils","import_react_hook_form","import_react_hook_form","useHookFormContext","HookFormProvider","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","Field","React","import_jsx_runtime","import_utils","import_react","import_utils","import_react_hook_form","import_react","import_react","import_utils","import_jsx_runtime","React","import_utils","import_react_hook_form","React","import_jsx_runtime","React","React","import_react_hook_form","React","import_jsx_runtime","Field","React","import_react","import_utils","import_jsx_runtime","FieldPrimivite","import_jsx_runtime","mapNestedFields","name","Field","import_react","import_react_hook_form","import_jsx_runtime","import_jsx_runtime","React","Field","import_jsx_runtime","import_react","import_utils","import_react_hook_form","import_jsx_runtime","useForm","useHookForm","FormComponent","props","Form","Field","import_react","import_jsx_runtime","FieldPrimivite","import_react_hook_form","import_react_hook_form","Form"]}
package/dist/index.mjs CHANGED
@@ -939,11 +939,20 @@ import {
939
939
  useForm as useHookForm
940
940
  } from "react-hook-form";
941
941
  import { jsx as jsx14 } from "react/jsx-runtime";
942
- function useForm2(props = {}) {
943
- const form = useHookForm(props);
942
+ function useForm2(props) {
943
+ const { onSubmit, onInvalid, ...rest } = props;
944
+ const form = useHookForm(rest);
944
945
  const FormComponent = forwardRef8(
945
946
  function FormComponent2(props2, ref) {
946
- return /* @__PURE__ */ jsx14(Form2, { ...props2, form, ref });
947
+ return /* @__PURE__ */ jsx14(
948
+ Form2,
949
+ {
950
+ ...props2,
951
+ form,
952
+ onSubmit: props2.onSubmit ?? form.handleSubmit(onSubmit, onInvalid),
953
+ ref
954
+ }
955
+ );
947
956
  }
948
957
  );
949
958
  return {
@@ -957,12 +966,11 @@ function useForm2(props = {}) {
957
966
  }
958
967
  var Form2 = forwardRef8(
959
968
  function Form3(props, ref) {
960
- const { children, form, onSubmit, onError, ...rest } = props;
969
+ const { children, form, ...rest } = props;
961
970
  return /* @__PURE__ */ jsx14(FormProvider, { ...form, children: /* @__PURE__ */ jsx14(
962
971
  chakra3.form,
963
972
  {
964
973
  ref,
965
- onSubmit: form.handleSubmit(onSubmit, onError),
966
974
  ...rest,
967
975
  className: cx3("sui-form", props.className),
968
976
  children: props.children
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/create-form.tsx","../src/default-fields.tsx","../src/create-field.tsx","../src/base-field.tsx","../src/form-context.tsx","../src/fields-context.tsx","../src/field-resolver.ts","../src/form.tsx","../src/array-field.tsx","../src/form-layout.tsx","../src/use-array-field.tsx","../src/utils.ts","../src/display-if.tsx","../src/field.tsx","../src/fields.tsx","../src/object-field.tsx","../src/submit-button.tsx","../src/use-form.tsx","../src/display-field.tsx","../src/watch-field.tsx","../src/index.ts"],"sourcesContent":["import React, { ForwardedRef, forwardRef, useMemo } from 'react'\n\nimport { defaultFieldTypes } from './default-fields'\nimport { objectFieldResolver } from './field-resolver'\nimport type { GetFieldResolver } from './field-resolver'\nimport { FieldsProvider } from './fields-context'\nimport { FieldValues, Form, FormProps, GetResolver } from './form'\nimport { GetBaseField, WithFields } from './types'\n\nexport interface CreateFormProps<\n FieldDefs,\n TGetBaseField extends GetBaseField = GetBaseField,\n> {\n resolver?: GetResolver\n fieldResolver?: GetFieldResolver\n fields?: FieldDefs extends Record<string, React.FC<any>> ? FieldDefs : never\n getBaseField?: TGetBaseField\n}\n\nexport type FormType<\n FieldDefs,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n> = (<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n>(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs,\n ExtraOverrides\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps,\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport function createForm<\n FieldDefs,\n TGetBaseField extends GetBaseField<any> = GetBaseField<any>,\n>({\n resolver,\n fieldResolver = objectFieldResolver,\n fields,\n getBaseField,\n}: CreateFormProps<FieldDefs, TGetBaseField> = {}) {\n type ExtraFieldProps =\n TGetBaseField extends GetBaseField<infer ExtraFieldProps>\n ? ExtraFieldProps\n : object\n\n const DefaultForm = forwardRef(\n <\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n >(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs\n >,\n ref: ForwardedRef<HTMLFormElement>,\n ) => {\n const {\n schema,\n resolver: resolverProp,\n fieldResolver: fieldResolverProp,\n ...rest\n } = props\n\n const fieldsContext = useMemo(\n () => ({\n fields: { ...defaultFieldTypes, ...fields },\n getBaseField,\n }),\n [fields, getBaseField],\n )\n\n return (\n <FieldsProvider value={fieldsContext}>\n <Form\n ref={ref}\n resolver={resolverProp ?? resolver?.(props.schema)}\n fieldResolver={fieldResolverProp ?? fieldResolver?.(schema)}\n {...rest}\n />\n </FieldsProvider>\n )\n },\n ) as FormType<FieldDefs, object, ExtraFieldProps>\n\n DefaultForm.displayName = 'Form'\n DefaultForm.id = 'Form'\n\n return DefaultForm\n}\n","import React, { useMemo } from 'react'\n\nimport {\n Input,\n InputProps,\n Stack,\n type SystemStyleObject,\n Textarea,\n TextareaProps,\n createListCollection,\n} from '@chakra-ui/react'\nimport { Checkbox, type CheckboxProps } from '@saas-ui/react/checkbox'\nimport { InputGroup } from '@saas-ui/react/input'\nimport { NumberInput, type NumberInputProps } from '@saas-ui/react/number-input'\nimport {\n PasswordInput,\n type PasswordInputProps,\n} from '@saas-ui/react/password-input'\nimport { PinInput, type PinInputProps } from '@saas-ui/react/pin-input'\nimport { Radio } from '@saas-ui/react/radio'\nimport { RadioGroup } from '@saas-ui/react/radio-group'\nimport { Select } from '@saas-ui/react/select'\nimport { Switch, type SwitchProps } from '@saas-ui/react/switch'\n\nimport { createField } from './create-field.tsx'\nimport type { FieldOption, FieldOptions } from './types.ts'\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n startElement?: React.ReactNode\n endElement?: React.ReactNode\n}\n\nexport const InputField = createField<HTMLInputElement, InputFieldProps>(\n ({ type = 'text', startElement, endElement, size, ...rest }, ref) => {\n return (\n <InputGroup\n startElement={startElement}\n endElement={endElement}\n width=\"full\"\n >\n <Input type={type} size={size} {...rest} ref={ref} />\n </InputGroup>\n )\n },\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = createField<\n HTMLInputElement,\n NumberInputFieldProps\n>((props, ref) => <NumberInput {...props} ref={ref} />, {\n isControlled: true,\n})\n\nexport const PasswordInputField = createField<\n HTMLInputElement,\n PasswordInputProps\n>(({ type = 'password', ...props }, ref) => (\n <PasswordInput ref={ref} {...props} />\n))\n\nexport interface TextareaFieldProps extends TextareaProps {}\n\nexport const TextareaField = createField<\n HTMLTextAreaElement,\n TextareaFieldProps\n>((props, ref) => <Textarea {...props} ref={ref} />)\n\nexport interface SwitchFieldProps extends SwitchProps {\n type: 'switch'\n}\n\nexport const SwitchField = createField<HTMLInputElement, SwitchFieldProps>(\n ({ type, value, ...rest }, ref) => {\n return <Switch checked={!!value} {...rest} ref={ref} />\n },\n {\n isControlled: true,\n },\n)\n\nexport interface SelectFieldProps<Multiple extends boolean = boolean>\n extends Omit<\n Select.RootProps<FieldOption>,\n 'collection' | 'value' | 'multiple' | 'onChange' | 'onValueChange'\n > {\n multiple?: Multiple\n value?: Multiple extends true ? Array<string> : string\n onChange?: (value: Multiple extends true ? Array<string> : string) => void\n options: FieldOptions\n placeholder?: string\n triggerProps?: Select.TriggerProps\n contentProps?: Select.ContentProps\n}\n\nexport const SelectField = createField<HTMLDivElement, SelectFieldProps>(\n (props, ref) => {\n const {\n triggerProps,\n contentProps,\n options,\n placeholder,\n onChange,\n onBlur,\n multiple = false,\n value: valueProp,\n ...rest\n } = props\n\n const collection = useMemo(\n () =>\n createListCollection({\n items: options,\n }),\n [options],\n )\n\n const value = multiple\n ? [...(valueProp ?? [])]\n : valueProp\n ? [valueProp as string]\n : []\n\n return (\n <Select.Root\n ref={ref}\n collection={collection}\n onValueChange={(details) => {\n onChange(multiple ? details.value : details.value[0])\n }}\n onInteractOutside={() => onBlur()}\n value={value}\n {...rest}\n >\n <Select.Trigger {...triggerProps}>\n <Select.ValueText placeholder={placeholder} />\n </Select.Trigger>\n <Select.Content {...contentProps}>\n {collection.items.map((option) => (\n <Select.Item key={option.value} item={option}>\n {option.label || option.value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport interface CheckboxFieldProps extends CheckboxProps {\n type: 'checkbox'\n label?: string\n}\n\nexport const CheckboxField = createField<HTMLInputElement, CheckboxFieldProps>(\n ({ label, type, ...props }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n },\n {\n hideLabel: true,\n },\n)\n\nexport interface RadioFieldProps extends RadioGroup.RootProps {\n type: 'radio'\n options: FieldOptions\n flexDirection?: SystemStyleObject['flexDirection']\n gap?: SystemStyleObject['gap']\n}\n\nexport const RadioField = createField<HTMLInputElement, RadioFieldProps>(\n (props, ref) => {\n const { options, onChange, flexDirection = 'column', gap, ...rest } = props\n return (\n <RadioGroup.Root\n ref={ref}\n onValueChange={({ value }) => {\n onChange?.(value)\n }}\n {...rest}\n >\n <Stack flexDirection={flexDirection} gap={gap}>\n {options.map((option) => (\n <Radio key={option.value} value={option.value}>\n {option.label || option.value}\n </Radio>\n ))}\n </Stack>\n </RadioGroup.Root>\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport interface PinFieldProps\n extends Omit<PinInputProps, 'type' | 'value' | 'onChange'> {\n type: 'pin'\n pinLength?: number\n pinType?: PinInputProps['type']\n value?: string\n onChange?: (value: string) => void\n}\n\nexport const PinField = createField<HTMLInputElement, PinFieldProps>(\n (props, ref) => {\n const { pinType, value: valueProp, onChange, ...inputProps } = props\n\n const value = valueProp?.split('') || []\n\n return (\n <PinInput\n ref={ref}\n {...inputProps}\n value={value}\n onValueChange={(details) => {\n onChange(details.valueAsString)\n }}\n type={pinType}\n />\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport const defaultFieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n time: InputField,\n number: NumberInputField,\n pin: PinField,\n checkbox: CheckboxField,\n radio: RadioField,\n password: PasswordInputField,\n select: SelectField,\n switch: SwitchField,\n textarea: TextareaField,\n}\n\nexport type DefaultFields = typeof defaultFieldTypes\n","import React, {\n type ForwardRefRenderFunction,\n type PropsWithoutRef,\n forwardRef,\n} from 'react'\n\nimport { callAll, mergeRefs, splitProps } from '@saas-ui/core/utils'\nimport { Controller, type RegisterOptions } from 'react-hook-form'\n\nimport { BaseField } from './base-field'\nimport { useFieldsContext } from './fields-context'\nimport { useFormContext } from './form-context'\nimport { BaseFieldProps, GetBaseField } from './types'\n\ninterface CreateFieldProps<ExtraFieldProps extends object = object> {\n displayName: string\n hideLabel?: boolean\n getBaseField: GetBaseField<ExtraFieldProps>\n}\n\nconst _createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, getBaseField: getBaseFieldProp }: CreateFieldProps,\n) => {\n const Field = forwardRef<HTMLDivElement, any>((props, ref) => {\n const { id, label, required, rules } = props\n\n const inputRules = {\n required,\n ...rules,\n }\n\n const fieldContext = useFieldsContext()\n\n const getBaseField = fieldContext?.getBaseField ?? getBaseFieldProp\n\n const { props: extraProps, Component } = React.useMemo(\n () => getBaseField(),\n [getBaseField],\n )\n\n const rootProps = {\n name: props.name,\n label: props.label,\n disabled: props.disabled,\n invalid: props.invalid,\n readOnly: props.readOnly,\n required: props.required,\n }\n\n const [baseFieldProps, inputProps] = splitProps(\n props,\n ['orientation', 'help', 'hideLabel'].concat(extraProps),\n )\n\n return (\n <Component {...rootProps} {...baseFieldProps}>\n <InputComponent\n ref={ref}\n id={id}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n {...inputProps}\n rules={inputRules}\n />\n </Component>\n )\n })\n\n Field.displayName = displayName\n\n return Field\n}\n\nconst withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<typeof InputComponent, ControlProps>((props, ref) => {\n const { name, rules, ...inputProps } = props\n const { control } = useFormContext()\n\n const onChange = inputProps.onChange as (...event: any[]) => void\n\n return (\n <Controller\n name={name}\n control={control}\n rules={rules}\n render={({ field: { ref: _ref, ...field } }) => (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAll(onChange, field.onChange)}\n onBlur={callAll(inputProps.onBlur, field.onBlur)}\n ref={mergeRefs(ref, _ref)}\n />\n )}\n />\n )\n })\n}\n\nconst withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<typeof InputComponent, ControlProps>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n const onChange = inputProps.onChange as (...event: any[]) => void\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAll(onChange, field.onChange)}\n onBlur={callAll(inputProps.onBlur, field.onBlur)}\n ref={mergeRefs(ref, _ref)}\n />\n )\n },\n )\n}\n\nexport interface CreateFieldOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\n}\n\ninterface ControlProps {\n name: string\n onChange: (...event: any[]) => void\n onBlur: (...event: any[]) => void\n value: unknown\n disabled?: boolean\n rules?: RegisterOptions\n}\n\n/**\n * Register a new field type\n * @param type The name for this field in kebab-case, eg `email` or `array-field`\n * @param component The React component\n * @param options\n * @param options.isControlled Set this to true if this is a controlled field.\n * @param options.hideLabel Hide the field label, for example for the checkbox field.\n */\nexport const createField = <TType = unknown, TProps extends object = object>(\n component: ForwardRefRenderFunction<\n TType,\n PropsWithoutRef<TProps & ControlProps>\n >,\n options?: CreateFieldOptions,\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(forwardRef(component))\n } else {\n InputComponent = withUncontrolledInput(forwardRef(component))\n }\n\n const Field = _createField(InputComponent, {\n displayName: `${component.displayName ?? 'Custom'}Field`,\n hideLabel: options?.hideLabel,\n getBaseField: () =>\n ({\n props: [],\n Component: BaseField,\n }) as any,\n }) as React.ForwardRefExoticComponent<\n Omit<BaseFieldProps, keyof TProps> & TProps & React.RefAttributes<TType>\n >\n\n return Field\n}\n","import * as React from 'react'\n\nimport { Field } from '@chakra-ui/react'\nimport { splitProps } from '@saas-ui/core/utils'\nimport { FormState, get } from 'react-hook-form'\n\nimport { useFormContext } from './form-context'\nimport type { BaseFieldProps } from './types'\n\nconst getError = (name: string, formState: FormState<{ [x: string]: any }>) => {\n return get(formState.errors, name)\n}\n\nconst isTouched = (\n name: string,\n formState: FormState<{ [x: string]: any }>,\n) => {\n return get(formState.touchedFields, name)\n}\n\nexport const useBaseField = (props: BaseFieldProps) => {\n // TODO: Clean up these props / types\n const [fieldProps, rootProps] = splitProps(props, [\n 'name',\n 'label',\n 'help',\n 'hideLabel',\n 'placeholder',\n 'rules',\n 'type',\n 'children',\n ])\n\n const { formState } = useFormContext()\n\n const error = getError(fieldProps.name, formState)\n const touched = isTouched(fieldProps.name, formState)\n\n return {\n ...fieldProps,\n rootProps,\n error,\n touched,\n }\n}\n\n/**\n * The default BaseField component\n * Composes the Chakra UI Field component, with Label, HelperText and ErrorText.\n */\nexport const BaseField: React.FC<BaseFieldProps> = (props) => {\n const { rootProps, label, hideLabel, help, error } = useBaseField(props)\n\n const isInvalid = !!error\n\n return (\n <Field.Root invalid={isInvalid} {...rootProps}>\n {label && !hideLabel ? (\n <Field.Label>\n {label} <Field.RequiredIndicator />\n </Field.Label>\n ) : null}\n\n {props.children}\n {help && !error?.message ? (\n <Field.HelperText>{help}</Field.HelperText>\n ) : null}\n {error?.message && <Field.ErrorText>{error?.message}</Field.ErrorText>}\n </Field.Root>\n )\n}\n\nBaseField.displayName = 'BaseField'\n","import * as React from 'react'\n\nimport {\n FieldValues,\n FormProvider as HookFormProvider,\n FormProviderProps as HookFormProviderProps,\n useFormContext as useHookFormContext,\n} from 'react-hook-form'\n\nimport type { FieldResolver } from './field-resolver'\nimport type { BaseFieldProps } from './types'\n\nexport type FormContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = {\n fieldResolver?: FieldResolver\n schema?: TSchema\n fields?: {\n [key: string]: unknown\n }\n}\n\nexport type FormProviderProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = HookFormProviderProps<TFieldValues, TContext> & {\n fieldResolver?: FieldResolver\n schema?: TSchema\n fields?: {\n [key: string]: unknown\n }\n}\n\nconst FormContext = React.createContext<FormContextValue | null>(null)\n\nexport const useFormContext = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n>() => {\n const context = React.useContext(FormContext)\n const hookContext = useHookFormContext<TFieldValues, TContext>()\n\n return {\n ...hookContext,\n ...context,\n }\n}\n\nexport const useFieldProps = <TFieldValues extends FieldValues = FieldValues>(\n name: string,\n): BaseFieldProps<TFieldValues> | undefined => {\n const parsedName = name?.replace(/\\.[0-9]/g, '.$')\n const context = useFormContext()\n return (context?.fields?.[parsedName] as any) || {}\n}\n\nexport type UseFormReturn<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = ReturnType<typeof useFormContext<TFieldValues, TContext, TSchema>>\n\nexport const FormProvider = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n>(\n props: FormProviderProps<TFieldValues, TContext, TSchema>,\n) => {\n const { children, fieldResolver, schema, fields, ...rest } = props\n return (\n <HookFormProvider {...rest}>\n <FormContext.Provider value={{ fieldResolver, schema, fields }}>\n {children}\n </FormContext.Provider>\n </HookFormProvider>\n )\n}\n","import React from 'react'\n\nimport type { GetBaseField } from './types'\n\nexport interface FieldsContextValue<\n TFields = any,\n TBaseFieldProps extends object = object,\n> {\n fields: Record<string, React.FC<TFields>>\n getBaseField?: GetBaseField<TBaseFieldProps>\n}\n\nconst FieldsContext = React.createContext<FieldsContextValue | null>(null)\n\nexport const FieldsProvider: React.FC<{\n value: FieldsContextValue\n children: React.ReactNode\n}> = (props) => {\n return (\n <FieldsContext.Provider value={props.value}>\n {props.children}\n </FieldsContext.Provider>\n )\n}\n\nexport const useFieldsContext = () => {\n return React.useContext(FieldsContext)\n}\n\nexport const useField = (\n type: string,\n fallback: React.FC<any>,\n): React.FC<any> => {\n const context = React.useContext(FieldsContext)\n return context?.fields?.[type] || fallback\n}\n","import { get } from '@saas-ui/core/utils'\n\nimport { ArrayFieldProps } from './array-field.tsx'\nimport { DefaultFields } from './default-fields.tsx'\nimport { ObjectFieldProps } from './object-field.tsx'\nimport { BaseFieldProps, ValueOf } from './types.ts'\n\nexport type FieldResolver = {\n getFields(): BaseFieldProps[]\n getNestedFields(name: string): BaseFieldProps[]\n}\n\nexport type GetFieldResolver<TSchema = any> = (schema: TSchema) => FieldResolver\n\ntype FieldTypes<FieldDefs = DefaultFields> = ValueOf<{\n [K in keyof FieldDefs]: FieldDefs[K] extends React.FC<infer Props>\n ? { type?: K } & Omit<Props, 'name'>\n : never\n}>\n\ntype SchemaField<FieldDefs = DefaultFields> =\n | FieldTypes<FieldDefs>\n | (Omit<ObjectFieldProps, 'name' | 'children'> & {\n type: 'object'\n properties?: Record<string, SchemaField<FieldDefs>>\n })\n | (Omit<ArrayFieldProps, 'name' | 'children'> & {\n type: 'array'\n items?: SchemaField<FieldDefs>\n })\n\nexport type ObjectSchema<FieldDefs = DefaultFields> = Record<\n string,\n SchemaField<FieldDefs>\n>\n\nconst mapFields = (schema: ObjectSchema): BaseFieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, props]) => {\n const { items, label, title, ...field } = props as any\n return {\n ...field,\n name,\n label: label || title || name, // json schema compatibility\n }\n })\n\nexport const objectFieldResolver: GetFieldResolver<ObjectSchema> = (schema) => {\n const getFields = (): BaseFieldProps[] => {\n return mapFields(schema)\n }\n const getNestedFields = (name: string): BaseFieldProps[] => {\n const field = get(schema, name)\n\n if (!field) return []\n\n if (field.items?.type === 'object') {\n return mapFields(field.items.properties)\n } else if (field.type === 'object') {\n return mapFields(field.properties)\n }\n return [field.items]\n }\n\n return { getFields, getNestedFields }\n}\n","import React, { forwardRef } from 'react'\n\nimport { HTMLChakraProps, chakra } from '@chakra-ui/react'\nimport { type MaybeRenderProp, cx, runIfFn } from '@saas-ui/core/utils'\nimport {\n FieldValues,\n ResolverOptions,\n ResolverResult,\n SubmitErrorHandler,\n SubmitHandler,\n UseFormProps,\n UseFormReturn,\n WatchObserver,\n useForm,\n} from 'react-hook-form'\n\nimport { ArrayField, ArrayFieldProps } from './array-field.tsx'\nimport { DisplayIf, DisplayIfProps } from './display-if.tsx'\nimport type { FieldResolver } from './field-resolver.tsx'\nimport { Field as DefaultField } from './field.tsx'\nimport { AutoFields } from './fields.tsx'\nimport { FormProvider } from './form-context.tsx'\nimport { FormLayout } from './form-layout.tsx'\nimport { ObjectField, ObjectFieldProps } from './object-field.tsx'\nimport { SubmitButton } from './submit-button.tsx'\nimport {\n DefaultFieldOverrides,\n FieldProps,\n type FocusableElement,\n} from './types.ts'\nimport { UseArrayFieldReturn } from './use-array-field.tsx'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\nexport interface FormRenderContext<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n> extends UseFormReturn<TFieldValues, TContext> {\n Field: React.FC<TFieldTypes & React.RefAttributes<FocusableElement>>\n DisplayIf: React.FC<DisplayIfProps<TFieldValues>>\n ArrayField: React.FC<\n ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>\n >\n ObjectField: React.FC<ObjectFieldProps<TFieldValues>>\n}\n\ninterface FormOptions<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>,\n> {\n /**\n * The form schema.\n */\n schema?: TSchema\n /**\n * Triggers when any of the field change.\n */\n onChange?: WatchObserver<TFieldValues>\n /**\n * The submit handler.\n */\n onSubmit: SubmitHandler<TFieldValues>\n /**\n * Triggers when there are validation errors.\n */\n onError?: SubmitErrorHandler<TFieldValues>\n /**\n * The Hook Form state ref.\n */\n formRef?: React.Ref<UseFormReturn<TFieldValues, TContext>>\n /**\n * The form children, can be a render prop or a ReactNode.\n */\n children?: MaybeRenderProp<\n FormRenderContext<TFieldValues, TContext, TFieldTypes>\n >\n /**\n * The field resolver, used to resolve the fields from schemas.\n */\n fieldResolver?: FieldResolver\n /**\n * Field overrides\n */\n fields?: DefaultFieldOverrides\n}\n\nexport interface FormProps<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>,\n> extends UseFormProps<TFieldValues, TContext>,\n Omit<\n HTMLChakraProps<'form'>,\n 'children' | 'onChange' | 'onSubmit' | 'onError'\n >,\n FormOptions<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n > {}\n\n/**\n * The wrapper component provides context, state, and focus management.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const Form = forwardRef(\n <\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n >(\n props: FormProps<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n >,\n ref: React.ForwardedRef<HTMLFormElement>,\n ) => {\n const {\n mode = 'all',\n resolver,\n fieldResolver,\n fields,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n schema,\n defaultValues,\n values,\n context,\n resetOptions,\n onChange,\n onSubmit,\n onError,\n formRef,\n children,\n ...rest\n } = props\n\n const form = {\n mode,\n resolver,\n defaultValues,\n values,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n context,\n resetOptions,\n }\n\n const methods = useForm<TFieldValues, TContext>(form)\n const { handleSubmit } = methods\n\n // This exposes the useForm api through the forwarded ref\n React.useImperativeHandle(formRef, () => methods, [formRef, methods])\n\n React.useEffect(() => {\n let subscription: any\n if (onChange) {\n subscription = methods.watch(onChange)\n }\n return () => subscription?.unsubscribe()\n }, [methods, onChange])\n\n let _children = children\n if (!_children && fieldResolver) {\n _children = (\n <FormLayout>\n <AutoFields />\n <SubmitButton {...fields?.submit} />\n </FormLayout>\n )\n }\n\n return (\n <FormProvider\n {...methods}\n schema={schema}\n fieldResolver={fieldResolver}\n fields={fields}\n >\n <chakra.form\n ref={ref}\n onSubmit={handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('sui-form', props.className)}\n >\n {runIfFn(_children, {\n Field: DefaultField as any,\n DisplayIf: DisplayIf as any,\n ArrayField: ArrayField as any,\n ObjectField: ObjectField as any,\n ...methods,\n })}\n </chakra.form>\n </FormProvider>\n )\n },\n) as FormComponent\n\nexport type FormComponent = (<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n>(\n props: FormProps<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n },\n) => React.ReactElement) & {\n displayName?: string\n}\n\nForm.displayName = 'Form'\n\nexport type GetResolver = <\n TFieldValues extends FieldValues,\n TContext extends object,\n>(\n schema: unknown,\n) => (\n values: TFieldValues,\n context: TContext | undefined,\n options: ResolverOptions<TFieldValues>,\n) => ResolverResult<TFieldValues> | Promise<ResolverResult<TFieldValues>>\n","import React, { forwardRef } from 'react'\n\nimport { Button, ButtonProps, chakra } from '@chakra-ui/react'\nimport type { MaybeRenderProp } from '@saas-ui/core/utils'\nimport { MinusIcon, PlusIcon } from '@saas-ui/react/icons'\nimport { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { BaseField } from './base-field'\nimport { useFieldProps } from './form-context'\nimport { FormLayout, FormLayoutProps } from './form-layout'\nimport { BaseFieldProps } from './types'\nimport {\n ArrayFieldOptions,\n ArrayFieldProvider,\n ArrayFieldRowProvider,\n UseArrayFieldReturn,\n useArrayField,\n useArrayFieldAddButton,\n useArrayFieldContext,\n useArrayFieldRemoveButton,\n useArrayFieldRow,\n useArrayFieldRowContext,\n} from './use-array-field'\nimport { mapNestedFields } from './utils'\n\nexport interface ArrayFieldButtonProps extends ButtonProps {}\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\n\n/**\n * Render prop component, to get access to the internal fields state. Must be a child of ArrayFieldContainer.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rowFieldsProps\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields {...rowFieldsProps}>{children}</ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nArrayFieldRow.displayName = 'ArrayFieldRow'\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * The fields\n */\n children: React.ReactNode\n}\n/**\n * Add the name prefix to the fields and acts as a horizontal form layout by default.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout flex=\"1\" mr=\"2\" {...layoutProps}>\n {mapNestedFields(name, children)}\n </FormLayout>\n )\n}\n\nArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n\n/**\n * The row container component providers row context.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rest\n}) => {\n const context = useArrayFieldRow({ index })\n\n const styles = {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-end',\n width: '100%',\n mb: 4,\n }\n\n return (\n <ArrayFieldRowProvider value={context}>\n <chakra.div {...rest} css={styles}>\n {children}\n </chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n\n/**\n * The default remove button.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRemoveButton: React.FC<ArrayFieldButtonProps> = (\n props,\n) => {\n return (\n <Button aria-label=\"Remove row\" {...useArrayFieldRemoveButton()} {...props}>\n {props.children || <MinusIcon />}\n </Button>\n )\n}\n\nArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n\n/**\n * The default add button.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldAddButton: React.FC<ArrayFieldButtonProps> = (props) => {\n return (\n <Button\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n >\n {props.children || <PlusIcon />}\n </Button>\n )\n}\n\nArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n\nexport interface ArrayFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends ArrayFieldOptions<TFieldValues, TName>,\n Omit<\n BaseFieldProps<TFieldValues, TName>,\n 'name' | 'defaultValue' | 'children'\n > {\n children: MaybeRenderProp<ArrayField[]>\n}\n\n/**\n * The wrapper component that composes the default ArrayField functionality.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n const rowFn =\n typeof children === 'function'\n ? children\n : (fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n )) || null}\n </>\n )\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>{rowFn as any}</ArrayFieldRows>\n <ArrayFieldAddButton />\n </ArrayFieldContainer>\n )\n },\n) as ((\n props: ArrayFieldProps & {\n ref?: React.ForwardedRef<UseArrayFieldReturn>\n },\n) => React.ReactElement) & {\n displayName: string\n}\n\nArrayField.displayName = 'ArrayField'\n\nexport interface ArrayFieldRowsProps {\n children: (fields: ArrayField[]) => React.ReactElement | null\n}\n\nexport const ArrayFieldRows = ({\n children,\n}: ArrayFieldRowsProps): React.ReactElement | null => {\n const { fields } = useArrayFieldContext()\n return children(fields)\n}\n\nArrayFieldRows.displayName = 'ArrayFieldRows'\n\nexport interface ArrayFieldContainerProps\n extends Omit<ArrayFieldProps, 'children'> {\n children: React.ReactNode\n}\n\n/**\n * The container component provides context and state management.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldContainerProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>,\n ) => {\n const overrides = useFieldProps(name)\n\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min: min || (overrides as any)?.min,\n max: max || (overrides as any)?.max,\n })\n\n // This exposes the useArrayField api through the forwarded ref\n React.useImperativeHandle(ref, () => context, [ref, context])\n\n return (\n <ArrayFieldProvider value={context}>\n <BaseField name={name} {...fieldProps} {...overrides}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n },\n)\n\nArrayFieldContainer.displayName = 'ArrayFieldContainer'\n","import { forwardRef } from 'react'\n\nimport {\n type RecipeProps,\n SimpleGrid,\n SimpleGridProps,\n useRecipe,\n} from '@chakra-ui/react'\nimport { cx } from '@saas-ui/core/utils'\n\nexport interface FormLayoutOptions {\n columns?: SimpleGridProps['columns']\n gap?: SimpleGridProps['gap']\n}\n\nexport interface FormLayoutProps\n extends RecipeProps<'suiFormLayout'>,\n SimpleGridProps {}\n\n/**\n * Create consistent field spacing and positioning.\n *\n * Renders form items in a `SimpleGrid`\n * @see https://chakra-ui.com/docs/components/simple-grid\n *\n * @see https://saas-ui.dev/docs/components/forms/form\n */\nexport const FormLayout = forwardRef<HTMLDivElement, FormLayoutProps>(\n ({ children, gap = 4, ...props }, ref) => {\n const recipe = useRecipe({\n key: 'suiFormLayout',\n })\n\n const [variantProps, gridProps] = recipe.splitVariantProps(props)\n\n const styles = recipe(variantProps)\n\n return (\n <SimpleGrid\n ref={ref}\n {...gridProps}\n className={cx('sui-form-layout', props.className)}\n css={[\n {\n gap,\n },\n styles,\n props.css,\n ]}\n >\n {children}\n </SimpleGrid>\n )\n },\n)\n\nFormLayout.displayName = 'FormLayout'\n","import * as React from 'react'\n\nimport { createContext } from '@saas-ui/core/utils'\nimport {\n FieldPath,\n FieldValues,\n UseFieldArrayReturn,\n useFieldArray,\n} from 'react-hook-form'\n\nimport { useFormContext } from './form-context'\n\nexport interface UseArrayFieldReturn extends UseFieldArrayReturn {\n /**\n * The array field name\n */\n name: string\n /**\n * The default value for new items\n */\n defaultValue: Record<string, any>\n /**\n * Min amount of items\n */\n min?: number\n /**\n * Max amount of items\n */\n max?: number\n}\n\nexport const [ArrayFieldProvider, useArrayFieldContext] =\n createContext<UseArrayFieldReturn>({\n name: 'ArrayFieldContext',\n })\n\nexport interface UseArrayFieldRowReturn {\n /**\n * Name of the array field including the index, eg 'field.0'\n */\n name: string\n /**\n * The field index\n */\n index: number\n /**\n * Remove this array item\n */\n remove: () => void\n /**\n * True if this is the first item\n */\n isFirst: boolean\n /**\n * True if this is the last item\n */\n isLast: boolean\n}\n\nexport const [ArrayFieldRowProvider, useArrayFieldRowContext] =\n createContext<UseArrayFieldRowReturn>({\n name: 'ArrayFieldRowContext',\n })\n\nexport interface ArrayFieldOptions<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n /**\n * The field name\n */\n name: TName\n /**\n * Default value for new values in the array\n */\n defaultValue?: Record<string, any>\n /**\n * Default key name for rows, change this if your data uses a different 'id' field\n * @default \"id\"\n */\n keyName?: string\n min?: number\n max?: number\n}\n\nexport const useArrayField = ({\n name,\n defaultValue = {},\n keyName,\n min,\n max,\n}: ArrayFieldOptions) => {\n const { control } = useFormContext()\n\n const context = useFieldArray({\n control,\n name,\n keyName,\n })\n return {\n ...context,\n name,\n defaultValue,\n min,\n max,\n }\n}\n\nexport interface UseArrayFieldRowProps {\n index: number\n}\n\nexport const useArrayFieldRow = ({ index }: UseArrayFieldRowProps) => {\n const { clearErrors } = useFormContext()\n const { name, remove, fields } = useArrayFieldContext()\n\n React.useEffect(() => {\n // reset errors, to make sure min/max errors reset correctly\n clearErrors(name)\n }, [])\n\n return {\n index,\n isFirst: index === 0,\n isLast: index === fields.length - 1,\n name: `${name}.${index}`,\n remove: React.useCallback(() => {\n clearErrors(name)\n remove(index)\n }, [index]),\n }\n}\n\nexport const useArrayFieldRemoveButton = () => {\n const { isFirst, remove } = useArrayFieldRowContext()\n const { min, fields } = useArrayFieldContext()\n\n const isDisabled = isFirst && !!(min && fields.length <= min)\n\n return {\n onClick: () => remove(),\n isDisabled,\n }\n}\n\nexport const useArrayFieldAddButton = () => {\n const { append, defaultValue, max, fields } = useArrayFieldContext()\n\n const isDisabled = !!(max && fields.length >= max)\n\n return {\n onClick: () =>\n append(defaultValue, {\n shouldFocus: false,\n }),\n isDisabled,\n }\n}\n","import * as React from 'react'\n\nimport { FieldOption, FieldOptions } from './types'\n\nexport const mapNestedFields = (name: string, children: React.ReactNode) => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement<any>(child)) {\n const props = child.props as any\n\n if (!props.name) {\n return child\n }\n\n let childName = props.name\n if (childName.includes('.')) {\n childName = childName.replace(/^.*\\.(.*)/, '$1')\n } else if (childName.includes('.$')) {\n childName = childName.replace(/^.*\\.\\$(.*)/, '$1')\n }\n\n return React.cloneElement(child, {\n ...props,\n name: `${name}.${childName}`,\n })\n }\n\n return child\n })\n}\n\nexport const mapOptions = <TOption extends FieldOption = FieldOption>(\n options: FieldOptions<TOption>,\n) => {\n return options.map((option) => {\n if (typeof option === 'string') {\n return {\n label: option,\n value: option,\n }\n }\n return option\n })\n}\n","import * as React from 'react'\n\nimport {\n FieldPath,\n FieldValues,\n UseFormReturn,\n useWatch,\n} from 'react-hook-form'\n\nimport { useFormContext } from './form-context.tsx'\n\nexport interface DisplayIfProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n children: React.ReactElement\n name: TName\n defaultValue?: unknown\n isDisabled?: boolean\n isExact?: boolean\n condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean\n onToggle?: (\n conditionMatched: boolean,\n context: UseFormReturn<TFieldValues>,\n ) => void\n}\n/**\n * Conditionally render parts of a form.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const DisplayIf = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n children,\n name,\n defaultValue,\n isDisabled,\n isExact,\n condition = (value) => !!value,\n onToggle,\n}: DisplayIfProps<TFieldValues, TName>) => {\n const initializedRef = React.useRef(false)\n const matchesRef = React.useRef(false)\n\n const value = useWatch<TFieldValues>({\n name,\n defaultValue: defaultValue as any,\n disabled: isDisabled,\n exact: isExact,\n })\n const context = useFormContext() as any\n\n const matches = condition(value, context)\n\n React.useEffect(() => {\n if (!initializedRef.current) {\n initializedRef.current = true\n return\n }\n if (matchesRef.current === matches) return\n matchesRef.current = matches\n onToggle?.(matches, context)\n }, [value])\n\n return matches ? children : null\n}\n\nDisplayIf.displayName = 'DisplayIf'\n","import * as React from 'react'\n\nimport { FieldValues, RegisterOptions } from 'react-hook-form'\n\nimport { InputField } from './default-fields'\nimport { useField } from './fields-context'\nimport { useFieldProps } from './form-context'\nimport { FieldProps, type FocusableElement } from './types'\n\nexport type FieldRules = Pick<\n RegisterOptions,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength' | 'pattern'\n>\n\nconst defaultInputType = 'text'\n\n/**\n * Form field component.\n * \n * Build-in types:\n * text, number, password, textarea, select, native-select, checkbox, radio, switch, pin\n *\n * Will default to a text field if there is no matching type.\n\n * @see Docs https://saas-ui.dev/docs/components/forms/field\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues>,\n ref: React.ForwardedRef<FocusableElement>,\n ) => {\n const { type = defaultInputType, name } = props\n const overrides = useFieldProps(name)\n const InputComponent = useField(overrides?.type || type, InputField)\n\n return <InputComponent ref={ref} {...props} {...overrides} />\n },\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> & {\n ref?: React.ForwardedRef<FocusableElement>\n },\n) => React.ReactElement) & {\n displayName?: string\n}\n","import * as React from 'react'\n\nimport { ArrayField } from './array-field'\nimport { Field } from './field'\nimport type { FieldResolver } from './field-resolver'\nimport { useFormContext } from './form-context'\nimport { FormLayout } from './form-layout'\nimport { ObjectField } from './object-field'\nimport { BaseFieldProps } from './types'\n\nexport interface FieldsProps<TSchema = any> {\n schema?: TSchema\n fieldResolver?: FieldResolver\n focusFirstField?: boolean\n}\n\nconst mapNestedFields = (resolver: FieldResolver, name: string) => {\n return resolver\n .getNestedFields(name)\n ?.map(\n (\n { name, type, ...nestedFieldProps }: BaseFieldProps,\n i,\n ): React.ReactNode => (\n <Field\n key={name || i}\n name={name}\n type={type as any}\n {...nestedFieldProps}\n />\n ),\n )\n}\n\nexport const AutoFields: React.FC<FieldsProps> = ({\n schema: schemaProp,\n fieldResolver: fieldResolverProp,\n focusFirstField,\n ...props\n}) => {\n const context = useFormContext()\n const schema = schemaProp || context.schema\n const fieldResolver = fieldResolverProp || context.fieldResolver\n const resolver = React.useMemo(() => fieldResolver, [schema, fieldResolver])\n\n const fields = React.useMemo(() => resolver?.getFields(), [resolver])\n\n const form = useFormContext()\n\n React.useEffect(() => {\n if (focusFirstField && fields?.[0]?.name) {\n form.setFocus(fields[0].name)\n }\n }, [schema, fieldResolver, focusFirstField])\n\n if (!resolver) {\n return null\n }\n\n return (\n <FormLayout {...props}>\n {fields?.map(\n ({ name, type, ...fieldProps }: BaseFieldProps): React.ReactNode => {\n if (type === 'array') {\n return (\n <ArrayField key={name} name={name} {...fieldProps}>\n {mapNestedFields(resolver, name)}\n </ArrayField>\n )\n } else if (type === 'object') {\n return (\n <ObjectField key={name} name={name} {...fieldProps}>\n {mapNestedFields(resolver, name)}\n </ObjectField>\n )\n }\n\n return (\n <Field\n key={name}\n name={name}\n type={type as any}\n // defaultValue={defaultValue}\n {...fieldProps}\n />\n )\n },\n )}\n </FormLayout>\n )\n}\n\nAutoFields.displayName = 'Fields'\n","import * as React from 'react'\n\nimport { Field as FieldPrimivite } from '@chakra-ui/react'\nimport { dataAttr } from '@saas-ui/core/utils'\nimport { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { useFieldProps } from './form-context'\nimport { FormLayout, type FormLayoutOptions } from './form-layout'\nimport { BaseFieldProps } from './types'\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<BaseFieldProps, keyof FormLayoutOptions>,\n FormLayoutOptions {\n name: TName\n children: React.ReactNode\n}\n\nexport const FormLegend = (props: FieldPrimivite.LabelProps) => {\n return <FieldPrimivite.Label as=\"legend\" {...props} />\n}\n\n/**\n * The object field component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/object-field\n */\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const {\n name,\n label,\n hideLabel: hideLabelProp,\n children,\n columns: columnsProp,\n gap: gapProp,\n ...fieldProps\n } = props\n\n const { hideLabel, columns, gap, ...overrides } = useFieldProps(name) as Omit<\n ObjectFieldProps,\n 'name'\n >\n\n const hidden = hideLabelProp || hideLabel\n\n return (\n <FieldPrimivite.Root as=\"fieldset\" {...fieldProps} {...overrides}>\n <FormLegend data-hidden={dataAttr(hidden)}>{label}</FormLegend>\n <FormLayout columns={columnsProp || columns} gridGap={gapProp || gap}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FieldPrimivite.Root>\n )\n}\n\nObjectField.displayName = 'ObjectField'\n","import { forwardRef } from 'react'\n\nimport { Button, ButtonProps } from '@saas-ui/react/button'\nimport { useFormContext } from 'react-hook-form'\n\nimport { useFieldProps } from './form-context.tsx'\n\nexport interface SubmitButtonProps extends ButtonProps {\n /**\n * Disable the submit button if the form is untouched.\n */\n disableIfUntouched?: boolean\n /**\n * Disable the submit button if the form is invalid.\n */\n disableIfInvalid?: boolean\n}\n\n/**\n * A button with type submit and default color scheme primary and isLoading state when the form is submitting.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const SubmitButton = forwardRef<HTMLButtonElement, SubmitButtonProps>(\n (props, ref) => {\n const {\n variant = 'glass',\n colorPalette = 'accent',\n children = 'Submit',\n disableIfUntouched: disableIfUntouchedProp = false,\n disableIfInvalid: disableIfInvalidProp = false,\n disabled: disabledProp,\n loading,\n ...rest\n } = props\n const { formState } = useFormContext()\n\n const field = useFieldProps('submit') as SubmitButtonProps\n\n const {\n disableIfUntouched: disableIfUntouchedOverride,\n disableIfInvalid: disableIfInvalidOverride,\n ...fieldProps\n } = field\n\n const disableIfUntouched =\n disableIfUntouchedOverride ?? disableIfUntouchedProp\n const disableIfInvalid = disableIfInvalidOverride ?? disableIfInvalidProp\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid) ||\n disabledProp\n\n return (\n <Button\n ref={ref}\n variant={variant as any}\n colorPalette={colorPalette}\n type=\"submit\"\n loading={formState.isSubmitting || loading}\n disabled={isDisabled}\n children={children}\n {...rest}\n {...fieldProps}\n />\n )\n },\n)\n\nSubmitButton.displayName = 'SubmitButton'\n","import { forwardRef } from 'react'\n\nimport { type HTMLChakraProps, chakra } from '@chakra-ui/react'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { cx } from '@saas-ui/core/utils'\nimport {\n type DefaultValues,\n type FieldValues,\n UseFormProps as UseHookFormProps,\n type UseFormReturn as UseHookFormReturn,\n useForm as useHookForm,\n} from 'react-hook-form'\nimport type { z } from 'zod'\n\nimport { ArrayField, type ArrayFieldProps } from './array-field'\nimport { DisplayIf, type DisplayIfProps } from './display-if'\nimport { Field } from './field.tsx'\nimport { FormProvider } from './form-context'\nimport { ObjectField, type ObjectFieldProps } from './object-field'\nimport type { FieldProps } from './types'\nimport type { UseArrayFieldReturn } from './use-array-field'\n\nexport interface UseFormProps<\n TFieldValues extends FieldValues,\n TContext extends object,\n> extends UseHookFormProps<TFieldValues, TContext> {}\n\nexport interface UseFormReturn<\n TFieldValues extends FieldValues,\n TContext extends object,\n> extends UseHookFormReturn<TFieldValues, TContext> {\n Form: React.FC<Omit<FormProps<TFieldValues, TContext>, 'form'>>\n Field: React.FC<FieldProps<TFieldValues>>\n DisplayIf: React.FC<DisplayIfProps<TFieldValues>>\n ArrayField: React.FC<\n ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>\n >\n ObjectField: React.FC<ObjectFieldProps<TFieldValues>>\n}\n\nexport function useForm<\n TFieldValues extends FieldValues,\n TContext extends object,\n>(props: UseFormProps<TFieldValues, TContext> = {}) {\n const form = useHookForm<TFieldValues, TContext>(props)\n\n const FormComponent = forwardRef<HTMLFormElement, Omit<FormProps, 'form'>>(\n function FormComponent(props, ref) {\n return <Form {...props} form={form} ref={ref} />\n },\n )\n\n return {\n ...form,\n Form: FormComponent,\n Field,\n DisplayIf,\n ArrayField,\n ObjectField,\n } as UseFormReturn<TFieldValues, TContext>\n}\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n> extends HTMLChakraProps<'form'> {\n children: React.ReactNode\n form: ReturnType<typeof useHookForm<TFieldValues, TContext>>\n onSubmit: (data: any) => void\n onError?: (errors: any) => void\n}\n\nexport const Form = forwardRef<HTMLFormElement, FormProps>(\n function Form(props, ref) {\n const { children, form, onSubmit, onError, ...rest } = props\n return (\n <FormProvider {...form}>\n <chakra.form\n ref={ref}\n onSubmit={form.handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('sui-form', props.className)}\n >\n {props.children}\n </chakra.form>\n </FormProvider>\n )\n },\n) as <TFieldValues extends FieldValues, TContext extends object>(\n props: FormProps<TFieldValues, TContext> & {\n ref?: React.Ref<HTMLFormElement>\n },\n) => React.ReactElement\n\nexport interface UseZodFormProps<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n> extends Omit<UseHookFormProps<TFieldValues, TContext>, 'defaultValues'> {\n schema: TSchema\n defaultValues?:\n | DefaultValues<InferObjectSchema<TSchema>>\n | AsyncDefaultValues<InferObjectSchema<TSchema>>\n}\n\nexport function useZodForm<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n>(props: UseZodFormProps<TSchema, TFieldValues, TContext>) {\n const { schema, ...rest } = props\n\n return useForm({\n resolver: zodResolver(schema) as any,\n ...rest,\n })\n}\n\ntype InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> =\n T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>\n\ntype AsyncDefaultValues<TFieldValues> = (\n payload?: unknown,\n) => Promise<TFieldValues>\n","import * as React from 'react'\n\nimport { Field as FieldPrimivite, Text } from '@chakra-ui/react'\nimport type { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { useFormContext } from './form-context.tsx'\nimport type { ArrayFieldPath } from './types.ts'\n\nexport interface DisplayFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<FieldPrimivite.RootProps, 'type' | 'onChange' | 'defaultValue'> {\n name: TName | ArrayFieldPath<TName>\n label?: string\n}\n\n/**\n * Display a field value.\n *\n * @see Docs https://saas-ui.dev/\n */\nexport const DisplayField: React.FC<DisplayFieldProps> = ({\n name,\n label,\n ...props\n}) => {\n return (\n <FieldPrimivite.Root {...props}>\n {label ? (\n <FieldPrimivite.Label htmlFor={name}>{label}</FieldPrimivite.Label>\n ) : null}\n <Text fontSize=\"md\">\n <FormValue name={name} />\n </Text>\n </FieldPrimivite.Root>\n )\n}\n\nDisplayField.displayName = 'DisplayField'\n\nexport const FormValue: React.FC<{ name: string }> = ({ name }) => {\n const { getValues } = useFormContext()\n return getValues(name) || null\n}\n\nFormValue.displayName = 'FormValue'\n","import { FieldValues, useWatch } from 'react-hook-form'\nimport { useFormContext, UseFormReturn } from './form-context'\n\nexport interface WatchFieldProps<\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n> {\n name: string\n defaultValue?: Value\n isDisabled?: boolean\n isExact?: boolean\n children: (\n value: Value,\n form: UseFormReturn<TFieldValues, TContext>\n ) => React.ReactElement | void\n}\n\nexport const WatchField = <\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n>(\n props: WatchFieldProps<Value, TFieldValues, TContext>\n) => {\n const { name, defaultValue, isDisabled, isExact } = props\n const form = useFormContext<TFieldValues, TContext>()\n\n const field = useWatch({\n name,\n defaultValue,\n disabled: isDisabled,\n exact: isExact,\n })\n\n return props.children(field, form) || null\n}\n","// Import and export Form and StepForm\nimport { createForm } from './create-form'\n\nexport { useForm, useZodForm } from './use-form'\nexport type { UseZodFormProps, UseFormReturn, UseFormProps } from './use-form'\n\n// import { createStepForm } from './create-step-form'\n\n// Exporting from './display-field'\nexport { DisplayField } from './display-field'\nexport type { DisplayFieldProps } from './display-field'\nexport { FormValue } from './display-field'\n\n// Exporting from './field'\nexport { Field } from './field'\nexport type { FieldRules } from './field'\n\n// Exporting from './fields'\nexport { AutoFields } from './fields'\nexport type { FieldsProps } from './fields'\n\n// Exporting from './fields-context'\nexport { FieldsProvider, useField } from './fields-context'\n\n// Exporting from './layout'\nexport { FormLayout } from './form-layout'\nexport type { FormLayoutProps } from './form-layout'\n\n// Exporting from './submit-button'\nexport { SubmitButton } from './submit-button'\nexport type { SubmitButtonProps } from './submit-button'\n\n// Exporting from './array-field'\nexport {\n ArrayField,\n ArrayFieldAddButton,\n ArrayFieldContainer,\n ArrayFieldRemoveButton,\n ArrayFieldRow,\n ArrayFieldRowContainer,\n ArrayFieldRowFields,\n ArrayFieldRows,\n} from './array-field'\n\nexport type {\n ArrayFieldButtonProps,\n ArrayFieldContainerProps,\n ArrayFieldProps,\n ArrayFieldRowFieldsProps,\n ArrayFieldRowsProps,\n} from './array-field'\n\n// Exporting from './use-array-field'\nexport {\n ArrayFieldProvider,\n ArrayFieldRowProvider,\n useArrayField,\n useArrayFieldAddButton,\n useArrayFieldContext,\n useArrayFieldRemoveButton,\n useArrayFieldRow,\n useArrayFieldRowContext,\n} from './use-array-field'\n\nexport type {\n ArrayFieldOptions,\n UseArrayFieldReturn,\n UseArrayFieldRowProps,\n UseArrayFieldRowReturn,\n} from './use-array-field'\n\n// Exporting from './object-field'\nexport { FormLegend, ObjectField } from './object-field'\nexport type { ObjectFieldProps } from './object-field'\n\n// Exporting from './display-if'\nexport { DisplayIf } from './display-if'\nexport type { DisplayIfProps } from './display-if'\n\n// Exporting from './step-form'\n// export { FormStep, FormStepper, NextButton, PrevButton } from './step-form'\n\n// export type {\n// FormStepOptions,\n// FormStepProps,\n// FormStepperProps,\n// NextButtonProps,\n// StepFormProps,\n// StepsOptions,\n// } from './step-form'\n\n// Exporting from './use-step-form'\n// export {\n// StepFormProvider,\n// useFormStep,\n// useStepForm,\n// useStepFormContext,\n// } from './use-step-form'\n\n// export type {\n// FormStepSubmitHandler,\n// StepFormContext,\n// StepFormRenderContext,\n// StepState,\n// UseFormStepProps,\n// UseStepFormProps,\n// UseStepFormReturn,\n// } from './use-step-form'\n\n// Exporting from './field-resolver'\nexport { objectFieldResolver } from './field-resolver'\nexport type {\n FieldResolver,\n GetFieldResolver,\n ObjectSchema,\n} from './field-resolver'\n\n// Exporting from './watch-field'\nexport { WatchField } from './watch-field'\nexport type { WatchFieldProps } from './watch-field'\n\n// Exporting BaseField from './base-field'\nexport { BaseField, useBaseField } from './base-field'\n\n// Exporting from './default-fields'\nexport {\n // CheckboxField,\n InputField,\n // NativeSelectField,\n // NumberInputField,\n // PasswordInputField,\n // PinField,\n // RadioField,\n // SelectField,\n // SwitchField,\n TextareaField,\n defaultFieldTypes,\n} from './default-fields'\n\nexport type {\n DefaultFields,\n InputFieldProps,\n // NumberInputFieldProps,\n // PinFieldProps,\n // SelectFieldProps,\n // SwitchFieldProps,\n TextareaFieldProps,\n // CheckboxFieldProps,\n // NativeSelectFieldProps,\n // RadioFieldProps,\n} from './default-fields'\n\n// Exporting types from './types'\nexport type {\n FieldProps,\n WithFields,\n BaseFieldProps,\n FieldOptions,\n DefaultFieldOverrides,\n // WithStepFields,\n GetBaseField,\n ArrayFieldPath,\n MergeFieldProps,\n FieldOption,\n FieldOverrides,\n FormChildren,\n ShallowMerge,\n StepFormChildren,\n ValueOf,\n} from './types'\n\n// Exporting from './create-form'\nexport { createForm } from './create-form'\nexport type { CreateFormProps, FormType } from './create-form'\n\n// Exporting from './create-field'\nexport { createField } from './create-field'\nexport type { CreateFieldOptions } from './create-field'\n\n// Exporting from './form'\nexport { Form as BaseForm } from './form'\nexport type { FormProps, FormRenderContext, FormComponent } from './form'\n\n// Exporting from './form-context'\nexport { FormProvider, useFormContext } from './form-context'\n\n// export { createStepForm } from './create-step-form'\n// export type { CreateStepFormProps } from './create-step-form'\n\n/**\n * Form component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const Form = createForm()\n\n/**\n * Multi-step form component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/step-form\n */\n// export const StepForm = createStepForm()\n\nexport type {\n BatchFieldArrayUpdate,\n ChangeHandler,\n Control,\n ControllerFieldState,\n ControllerProps,\n ControllerRenderProps,\n CriteriaMode,\n CustomElement,\n DeepMap,\n DeepPartial,\n DeepPartialSkipArrayKey,\n DefaultValues,\n DelayCallback,\n EmptyObject,\n ErrorOption,\n EventType,\n Field as FieldDef,\n FieldArray,\n FieldArrayMethodProps,\n FieldArrayWithId,\n FieldElement,\n FieldError,\n FieldErrors,\n FieldName,\n FieldNamesMarkedBoolean,\n FieldRefs,\n FieldValue,\n FieldValues,\n FormProviderProps,\n FormState,\n FormStateProxy,\n FormStateSubjectRef,\n GetIsDirty,\n InternalFieldErrors,\n InternalFieldName,\n InternalNameSet,\n IsAny,\n IsFlatObject,\n KeepStateOptions,\n LiteralUnion,\n Message,\n Mode,\n MultipleFieldErrors,\n Names,\n NativeFieldValue,\n NestedValue,\n NonUndefined,\n Noop,\n Primitive,\n ReadFormState,\n Ref,\n RefCallBack,\n RegisterOptions,\n Resolver,\n ResolverError,\n ResolverOptions,\n ResolverResult,\n ResolverSuccess,\n SetFieldValue,\n SetValueConfig,\n Subjects,\n SubmitErrorHandler,\n SubmitHandler,\n TriggerConfig,\n UnpackNestedValue,\n UseControllerProps,\n UseControllerReturn,\n UseFieldArrayProps,\n UseFieldArrayReturn,\n UseFormClearErrors,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormRegister,\n UseFormRegisterReturn,\n UseFormReset,\n UseFormResetField,\n UseFormSetError,\n UseFormSetFocus,\n UseFormSetValue,\n UseFormStateProps,\n UseFormStateReturn,\n UseFormTrigger,\n UseFormUnregister,\n UseFormWatch,\n UseWatchProps,\n Validate,\n ValidateResult,\n ValidationMode,\n ValidationRule,\n ValidationValue,\n ValidationValueMessage,\n WatchInternal,\n WatchObserver,\n ArrayPath,\n BrowserNativeObject,\n DeepRequired,\n ExtractObjects,\n FieldArrayPath,\n FieldArrayPathValue,\n FieldErrorsImpl,\n FieldPath,\n FieldPathByValue,\n FieldPathValue,\n FieldPathValues,\n} from 'react-hook-form'\n\nexport {\n appendErrors,\n useController,\n useFieldArray,\n useFormState,\n useWatch,\n Controller,\n} from 'react-hook-form'\n"],"mappings":"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","names":["forwardRef","useMemo","React","splitProps","jsx","React","jsx","jsx","Field","React","splitProps","jsx","jsxs","get","React","forwardRef","chakra","cx","React","forwardRef","forwardRef","jsx","React","createContext","createContext","React","jsx","jsxs","forwardRef","React","React","React","jsx","Field","React","jsx","jsxs","jsx","mapNestedFields","name","Field","forwardRef","Button","useFormContext","jsx","forwardRef","useFormContext","Button","jsx","jsxs","forwardRef","React","chakra","cx","Field","jsx","forwardRef","useMemo","forwardRef","chakra","cx","jsx","useForm","forwardRef","FormComponent","props","Form","Field","chakra","cx","FieldPrimivite","jsx","jsxs","FieldPrimivite","useWatch","useWatch","useFieldArray","useWatch","Controller","Form"]}
1
+ {"version":3,"sources":["../src/create-form.tsx","../src/default-fields.tsx","../src/create-field.tsx","../src/base-field.tsx","../src/form-context.tsx","../src/fields-context.tsx","../src/field-resolver.ts","../src/form.tsx","../src/array-field.tsx","../src/form-layout.tsx","../src/use-array-field.tsx","../src/utils.ts","../src/display-if.tsx","../src/field.tsx","../src/fields.tsx","../src/object-field.tsx","../src/submit-button.tsx","../src/use-form.tsx","../src/display-field.tsx","../src/watch-field.tsx","../src/index.ts"],"sourcesContent":["import React, { ForwardedRef, forwardRef, useMemo } from 'react'\n\nimport { defaultFieldTypes } from './default-fields'\nimport { objectFieldResolver } from './field-resolver'\nimport type { GetFieldResolver } from './field-resolver'\nimport { FieldsProvider } from './fields-context'\nimport { FieldValues, Form, FormProps, GetResolver } from './form'\nimport { GetBaseField, WithFields } from './types'\n\nexport interface CreateFormProps<\n FieldDefs,\n TGetBaseField extends GetBaseField = GetBaseField,\n> {\n resolver?: GetResolver\n fieldResolver?: GetFieldResolver\n fields?: FieldDefs extends Record<string, React.FC<any>> ? FieldDefs : never\n getBaseField?: TGetBaseField\n}\n\nexport type FormType<\n FieldDefs,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n> = (<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n>(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs,\n ExtraOverrides\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps,\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport function createForm<\n FieldDefs,\n TGetBaseField extends GetBaseField<any> = GetBaseField<any>,\n>({\n resolver,\n fieldResolver = objectFieldResolver,\n fields,\n getBaseField,\n}: CreateFormProps<FieldDefs, TGetBaseField> = {}) {\n type ExtraFieldProps =\n TGetBaseField extends GetBaseField<infer ExtraFieldProps>\n ? ExtraFieldProps\n : object\n\n const DefaultForm = forwardRef(\n <\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n >(\n props: WithFields<\n FormProps<TSchema, TFieldValues, TContext, ExtraFieldProps>,\n FieldDefs\n >,\n ref: ForwardedRef<HTMLFormElement>,\n ) => {\n const {\n schema,\n resolver: resolverProp,\n fieldResolver: fieldResolverProp,\n ...rest\n } = props\n\n const fieldsContext = useMemo(\n () => ({\n fields: { ...defaultFieldTypes, ...fields },\n getBaseField,\n }),\n [fields, getBaseField],\n )\n\n return (\n <FieldsProvider value={fieldsContext}>\n <Form\n ref={ref}\n resolver={resolverProp ?? resolver?.(props.schema)}\n fieldResolver={fieldResolverProp ?? fieldResolver?.(schema)}\n {...rest}\n />\n </FieldsProvider>\n )\n },\n ) as FormType<FieldDefs, object, ExtraFieldProps>\n\n DefaultForm.displayName = 'Form'\n DefaultForm.id = 'Form'\n\n return DefaultForm\n}\n","import React, { useMemo } from 'react'\n\nimport {\n Input,\n InputProps,\n Stack,\n type SystemStyleObject,\n Textarea,\n TextareaProps,\n createListCollection,\n} from '@chakra-ui/react'\nimport { Checkbox, type CheckboxProps } from '@saas-ui/react/checkbox'\nimport { InputGroup } from '@saas-ui/react/input'\nimport { NumberInput, type NumberInputProps } from '@saas-ui/react/number-input'\nimport {\n PasswordInput,\n type PasswordInputProps,\n} from '@saas-ui/react/password-input'\nimport { PinInput, type PinInputProps } from '@saas-ui/react/pin-input'\nimport { Radio } from '@saas-ui/react/radio'\nimport { RadioGroup } from '@saas-ui/react/radio-group'\nimport { Select } from '@saas-ui/react/select'\nimport { Switch, type SwitchProps } from '@saas-ui/react/switch'\n\nimport { createField } from './create-field.tsx'\nimport type { FieldOption, FieldOptions } from './types.ts'\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n startElement?: React.ReactNode\n endElement?: React.ReactNode\n}\n\nexport const InputField = createField<HTMLInputElement, InputFieldProps>(\n ({ type = 'text', startElement, endElement, size, ...rest }, ref) => {\n return (\n <InputGroup\n startElement={startElement}\n endElement={endElement}\n width=\"full\"\n >\n <Input type={type} size={size} {...rest} ref={ref} />\n </InputGroup>\n )\n },\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = createField<\n HTMLInputElement,\n NumberInputFieldProps\n>((props, ref) => <NumberInput {...props} ref={ref} />, {\n isControlled: true,\n})\n\nexport const PasswordInputField = createField<\n HTMLInputElement,\n PasswordInputProps\n>(({ type = 'password', ...props }, ref) => (\n <PasswordInput ref={ref} {...props} />\n))\n\nexport interface TextareaFieldProps extends TextareaProps {}\n\nexport const TextareaField = createField<\n HTMLTextAreaElement,\n TextareaFieldProps\n>((props, ref) => <Textarea {...props} ref={ref} />)\n\nexport interface SwitchFieldProps extends SwitchProps {\n type: 'switch'\n}\n\nexport const SwitchField = createField<HTMLInputElement, SwitchFieldProps>(\n ({ type, value, ...rest }, ref) => {\n return <Switch checked={!!value} {...rest} ref={ref} />\n },\n {\n isControlled: true,\n },\n)\n\nexport interface SelectFieldProps<Multiple extends boolean = boolean>\n extends Omit<\n Select.RootProps<FieldOption>,\n 'collection' | 'value' | 'multiple' | 'onChange' | 'onValueChange'\n > {\n multiple?: Multiple\n value?: Multiple extends true ? Array<string> : string\n onChange?: (value: Multiple extends true ? Array<string> : string) => void\n options: FieldOptions\n placeholder?: string\n triggerProps?: Select.TriggerProps\n contentProps?: Select.ContentProps\n}\n\nexport const SelectField = createField<HTMLDivElement, SelectFieldProps>(\n (props, ref) => {\n const {\n triggerProps,\n contentProps,\n options,\n placeholder,\n onChange,\n onBlur,\n multiple = false,\n value: valueProp,\n ...rest\n } = props\n\n const collection = useMemo(\n () =>\n createListCollection({\n items: options,\n }),\n [options],\n )\n\n const value = multiple\n ? [...(valueProp ?? [])]\n : valueProp\n ? [valueProp as string]\n : []\n\n return (\n <Select.Root\n ref={ref}\n collection={collection}\n onValueChange={(details) => {\n onChange(multiple ? details.value : details.value[0])\n }}\n onInteractOutside={() => onBlur()}\n value={value}\n {...rest}\n >\n <Select.Trigger {...triggerProps}>\n <Select.ValueText placeholder={placeholder} />\n </Select.Trigger>\n <Select.Content {...contentProps}>\n {collection.items.map((option) => (\n <Select.Item key={option.value} item={option}>\n {option.label || option.value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport interface CheckboxFieldProps extends CheckboxProps {\n type: 'checkbox'\n label?: string\n}\n\nexport const CheckboxField = createField<HTMLInputElement, CheckboxFieldProps>(\n ({ label, type, ...props }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n },\n {\n hideLabel: true,\n },\n)\n\nexport interface RadioFieldProps extends RadioGroup.RootProps {\n type: 'radio'\n options: FieldOptions\n flexDirection?: SystemStyleObject['flexDirection']\n gap?: SystemStyleObject['gap']\n}\n\nexport const RadioField = createField<HTMLInputElement, RadioFieldProps>(\n (props, ref) => {\n const { options, onChange, flexDirection = 'column', gap, ...rest } = props\n return (\n <RadioGroup.Root\n ref={ref}\n onValueChange={({ value }) => {\n onChange?.(value)\n }}\n {...rest}\n >\n <Stack flexDirection={flexDirection} gap={gap}>\n {options.map((option) => (\n <Radio key={option.value} value={option.value}>\n {option.label || option.value}\n </Radio>\n ))}\n </Stack>\n </RadioGroup.Root>\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport interface PinFieldProps\n extends Omit<PinInputProps, 'type' | 'value' | 'onChange'> {\n type: 'pin'\n pinLength?: number\n pinType?: PinInputProps['type']\n value?: string\n onChange?: (value: string) => void\n}\n\nexport const PinField = createField<HTMLInputElement, PinFieldProps>(\n (props, ref) => {\n const { pinType, value: valueProp, onChange, ...inputProps } = props\n\n const value = valueProp?.split('') || []\n\n return (\n <PinInput\n ref={ref}\n {...inputProps}\n value={value}\n onValueChange={(details) => {\n onChange(details.valueAsString)\n }}\n type={pinType}\n />\n )\n },\n {\n isControlled: true,\n },\n)\n\nexport const defaultFieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n time: InputField,\n number: NumberInputField,\n pin: PinField,\n checkbox: CheckboxField,\n radio: RadioField,\n password: PasswordInputField,\n select: SelectField,\n switch: SwitchField,\n textarea: TextareaField,\n}\n\nexport type DefaultFields = typeof defaultFieldTypes\n","import React, {\n type ForwardRefRenderFunction,\n type PropsWithoutRef,\n forwardRef,\n} from 'react'\n\nimport { callAll, mergeRefs, splitProps } from '@saas-ui/core/utils'\nimport { Controller, type RegisterOptions } from 'react-hook-form'\n\nimport { BaseField } from './base-field'\nimport { useFieldsContext } from './fields-context'\nimport { useFormContext } from './form-context'\nimport { BaseFieldProps, GetBaseField } from './types'\n\ninterface CreateFieldProps<ExtraFieldProps extends object = object> {\n displayName: string\n hideLabel?: boolean\n getBaseField: GetBaseField<ExtraFieldProps>\n}\n\nconst _createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, getBaseField: getBaseFieldProp }: CreateFieldProps,\n) => {\n const Field = forwardRef<HTMLDivElement, any>((props, ref) => {\n const { id, label, required, rules } = props\n\n const inputRules = {\n required,\n ...rules,\n }\n\n const fieldContext = useFieldsContext()\n\n const getBaseField = fieldContext?.getBaseField ?? getBaseFieldProp\n\n const { props: extraProps, Component } = React.useMemo(\n () => getBaseField(),\n [getBaseField],\n )\n\n const rootProps = {\n name: props.name,\n label: props.label,\n disabled: props.disabled,\n invalid: props.invalid,\n readOnly: props.readOnly,\n required: props.required,\n }\n\n const [baseFieldProps, inputProps] = splitProps(\n props,\n ['orientation', 'help', 'hideLabel'].concat(extraProps),\n )\n\n return (\n <Component {...rootProps} {...baseFieldProps}>\n <InputComponent\n ref={ref}\n id={id}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n {...inputProps}\n rules={inputRules}\n />\n </Component>\n )\n })\n\n Field.displayName = displayName\n\n return Field\n}\n\nconst withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<typeof InputComponent, ControlProps>((props, ref) => {\n const { name, rules, ...inputProps } = props\n const { control } = useFormContext()\n\n const onChange = inputProps.onChange as (...event: any[]) => void\n\n return (\n <Controller\n name={name}\n control={control}\n rules={rules}\n render={({ field: { ref: _ref, ...field } }) => (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAll(onChange, field.onChange)}\n onBlur={callAll(inputProps.onBlur, field.onBlur)}\n ref={mergeRefs(ref, _ref)}\n />\n )}\n />\n )\n })\n}\n\nconst withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<typeof InputComponent, ControlProps>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n const onChange = inputProps.onChange as (...event: any[]) => void\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAll(onChange, field.onChange)}\n onBlur={callAll(inputProps.onBlur, field.onBlur)}\n ref={mergeRefs(ref, _ref)}\n />\n )\n },\n )\n}\n\nexport interface CreateFieldOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\n}\n\ninterface ControlProps {\n name: string\n onChange: (...event: any[]) => void\n onBlur: (...event: any[]) => void\n value: unknown\n disabled?: boolean\n rules?: RegisterOptions\n}\n\n/**\n * Register a new field type\n * @param type The name for this field in kebab-case, eg `email` or `array-field`\n * @param component The React component\n * @param options\n * @param options.isControlled Set this to true if this is a controlled field.\n * @param options.hideLabel Hide the field label, for example for the checkbox field.\n */\nexport const createField = <TType = unknown, TProps extends object = object>(\n component: ForwardRefRenderFunction<\n TType,\n PropsWithoutRef<TProps & ControlProps>\n >,\n options?: CreateFieldOptions,\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(forwardRef(component))\n } else {\n InputComponent = withUncontrolledInput(forwardRef(component))\n }\n\n const Field = _createField(InputComponent, {\n displayName: `${component.displayName ?? 'Custom'}Field`,\n hideLabel: options?.hideLabel,\n getBaseField: () =>\n ({\n props: [],\n Component: BaseField,\n }) as any,\n }) as React.ForwardRefExoticComponent<\n Omit<BaseFieldProps, keyof TProps> & TProps & React.RefAttributes<TType>\n >\n\n return Field\n}\n","import * as React from 'react'\n\nimport { Field } from '@chakra-ui/react'\nimport { splitProps } from '@saas-ui/core/utils'\nimport { FormState, get } from 'react-hook-form'\n\nimport { useFormContext } from './form-context'\nimport type { BaseFieldProps } from './types'\n\nconst getError = (name: string, formState: FormState<{ [x: string]: any }>) => {\n return get(formState.errors, name)\n}\n\nconst isTouched = (\n name: string,\n formState: FormState<{ [x: string]: any }>,\n) => {\n return get(formState.touchedFields, name)\n}\n\nexport const useBaseField = (props: BaseFieldProps) => {\n // TODO: Clean up these props / types\n const [fieldProps, rootProps] = splitProps(props, [\n 'name',\n 'label',\n 'help',\n 'hideLabel',\n 'placeholder',\n 'rules',\n 'type',\n 'children',\n ])\n\n const { formState } = useFormContext()\n\n const error = getError(fieldProps.name, formState)\n const touched = isTouched(fieldProps.name, formState)\n\n return {\n ...fieldProps,\n rootProps,\n error,\n touched,\n }\n}\n\n/**\n * The default BaseField component\n * Composes the Chakra UI Field component, with Label, HelperText and ErrorText.\n */\nexport const BaseField: React.FC<BaseFieldProps> = (props) => {\n const { rootProps, label, hideLabel, help, error } = useBaseField(props)\n\n const isInvalid = !!error\n\n return (\n <Field.Root invalid={isInvalid} {...rootProps}>\n {label && !hideLabel ? (\n <Field.Label>\n {label} <Field.RequiredIndicator />\n </Field.Label>\n ) : null}\n\n {props.children}\n {help && !error?.message ? (\n <Field.HelperText>{help}</Field.HelperText>\n ) : null}\n {error?.message && <Field.ErrorText>{error?.message}</Field.ErrorText>}\n </Field.Root>\n )\n}\n\nBaseField.displayName = 'BaseField'\n","import * as React from 'react'\n\nimport {\n FieldValues,\n FormProvider as HookFormProvider,\n FormProviderProps as HookFormProviderProps,\n useFormContext as useHookFormContext,\n} from 'react-hook-form'\n\nimport type { FieldResolver } from './field-resolver'\nimport type { BaseFieldProps } from './types'\n\nexport type FormContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = {\n fieldResolver?: FieldResolver\n schema?: TSchema\n fields?: {\n [key: string]: unknown\n }\n}\n\nexport type FormProviderProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = HookFormProviderProps<TFieldValues, TContext> & {\n fieldResolver?: FieldResolver\n schema?: TSchema\n fields?: {\n [key: string]: unknown\n }\n}\n\nconst FormContext = React.createContext<FormContextValue | null>(null)\n\nexport const useFormContext = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n>() => {\n const context = React.useContext(FormContext)\n const hookContext = useHookFormContext<TFieldValues, TContext>()\n\n return {\n ...hookContext,\n ...context,\n }\n}\n\nexport const useFieldProps = <TFieldValues extends FieldValues = FieldValues>(\n name: string,\n): BaseFieldProps<TFieldValues> | undefined => {\n const parsedName = name?.replace(/\\.[0-9]/g, '.$')\n const context = useFormContext()\n return (context?.fields?.[parsedName] as any) || {}\n}\n\nexport type UseFormReturn<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n> = ReturnType<typeof useFormContext<TFieldValues, TContext, TSchema>>\n\nexport const FormProvider = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TSchema = any,\n>(\n props: FormProviderProps<TFieldValues, TContext, TSchema>,\n) => {\n const { children, fieldResolver, schema, fields, ...rest } = props\n return (\n <HookFormProvider {...rest}>\n <FormContext.Provider value={{ fieldResolver, schema, fields }}>\n {children}\n </FormContext.Provider>\n </HookFormProvider>\n )\n}\n","import React from 'react'\n\nimport type { GetBaseField } from './types'\n\nexport interface FieldsContextValue<\n TFields = any,\n TBaseFieldProps extends object = object,\n> {\n fields: Record<string, React.FC<TFields>>\n getBaseField?: GetBaseField<TBaseFieldProps>\n}\n\nconst FieldsContext = React.createContext<FieldsContextValue | null>(null)\n\nexport const FieldsProvider: React.FC<{\n value: FieldsContextValue\n children: React.ReactNode\n}> = (props) => {\n return (\n <FieldsContext.Provider value={props.value}>\n {props.children}\n </FieldsContext.Provider>\n )\n}\n\nexport const useFieldsContext = () => {\n return React.useContext(FieldsContext)\n}\n\nexport const useField = (\n type: string,\n fallback: React.FC<any>,\n): React.FC<any> => {\n const context = React.useContext(FieldsContext)\n return context?.fields?.[type] || fallback\n}\n","import { get } from '@saas-ui/core/utils'\n\nimport { ArrayFieldProps } from './array-field.tsx'\nimport { DefaultFields } from './default-fields.tsx'\nimport { ObjectFieldProps } from './object-field.tsx'\nimport { BaseFieldProps, ValueOf } from './types.ts'\n\nexport type FieldResolver = {\n getFields(): BaseFieldProps[]\n getNestedFields(name: string): BaseFieldProps[]\n}\n\nexport type GetFieldResolver<TSchema = any> = (schema: TSchema) => FieldResolver\n\ntype FieldTypes<FieldDefs = DefaultFields> = ValueOf<{\n [K in keyof FieldDefs]: FieldDefs[K] extends React.FC<infer Props>\n ? { type?: K } & Omit<Props, 'name'>\n : never\n}>\n\ntype SchemaField<FieldDefs = DefaultFields> =\n | FieldTypes<FieldDefs>\n | (Omit<ObjectFieldProps, 'name' | 'children'> & {\n type: 'object'\n properties?: Record<string, SchemaField<FieldDefs>>\n })\n | (Omit<ArrayFieldProps, 'name' | 'children'> & {\n type: 'array'\n items?: SchemaField<FieldDefs>\n })\n\nexport type ObjectSchema<FieldDefs = DefaultFields> = Record<\n string,\n SchemaField<FieldDefs>\n>\n\nconst mapFields = (schema: ObjectSchema): BaseFieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, props]) => {\n const { items, label, title, ...field } = props as any\n return {\n ...field,\n name,\n label: label || title || name, // json schema compatibility\n }\n })\n\nexport const objectFieldResolver: GetFieldResolver<ObjectSchema> = (schema) => {\n const getFields = (): BaseFieldProps[] => {\n return mapFields(schema)\n }\n const getNestedFields = (name: string): BaseFieldProps[] => {\n const field = get(schema, name)\n\n if (!field) return []\n\n if (field.items?.type === 'object') {\n return mapFields(field.items.properties)\n } else if (field.type === 'object') {\n return mapFields(field.properties)\n }\n return [field.items]\n }\n\n return { getFields, getNestedFields }\n}\n","import React, { forwardRef } from 'react'\n\nimport { HTMLChakraProps, chakra } from '@chakra-ui/react'\nimport { type MaybeRenderProp, cx, runIfFn } from '@saas-ui/core/utils'\nimport {\n FieldValues,\n ResolverOptions,\n ResolverResult,\n SubmitErrorHandler,\n SubmitHandler,\n UseFormProps,\n UseFormReturn,\n WatchObserver,\n useForm,\n} from 'react-hook-form'\n\nimport { ArrayField, ArrayFieldProps } from './array-field.tsx'\nimport { DisplayIf, DisplayIfProps } from './display-if.tsx'\nimport type { FieldResolver } from './field-resolver.tsx'\nimport { Field as DefaultField } from './field.tsx'\nimport { AutoFields } from './fields.tsx'\nimport { FormProvider } from './form-context.tsx'\nimport { FormLayout } from './form-layout.tsx'\nimport { ObjectField, ObjectFieldProps } from './object-field.tsx'\nimport { SubmitButton } from './submit-button.tsx'\nimport {\n DefaultFieldOverrides,\n FieldProps,\n type FocusableElement,\n} from './types.ts'\nimport { UseArrayFieldReturn } from './use-array-field.tsx'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\nexport interface FormRenderContext<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n> extends UseFormReturn<TFieldValues, TContext> {\n Field: React.FC<TFieldTypes & React.RefAttributes<FocusableElement>>\n DisplayIf: React.FC<DisplayIfProps<TFieldValues>>\n ArrayField: React.FC<\n ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>\n >\n ObjectField: React.FC<ObjectFieldProps<TFieldValues>>\n}\n\ninterface FormOptions<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>,\n> {\n /**\n * The form schema.\n */\n schema?: TSchema\n /**\n * Triggers when any of the field change.\n */\n onChange?: WatchObserver<TFieldValues>\n /**\n * The submit handler.\n */\n onSubmit: SubmitHandler<TFieldValues>\n /**\n * Triggers when there are validation errors.\n */\n onError?: SubmitErrorHandler<TFieldValues>\n /**\n * The Hook Form state ref.\n */\n formRef?: React.Ref<UseFormReturn<TFieldValues, TContext>>\n /**\n * The form children, can be a render prop or a ReactNode.\n */\n children?: MaybeRenderProp<\n FormRenderContext<TFieldValues, TContext, TFieldTypes>\n >\n /**\n * The field resolver, used to resolve the fields from schemas.\n */\n fieldResolver?: FieldResolver\n /**\n * Field overrides\n */\n fields?: DefaultFieldOverrides\n}\n\nexport interface FormProps<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues, TExtraFieldProps>,\n> extends UseFormProps<TFieldValues, TContext>,\n Omit<\n HTMLChakraProps<'form'>,\n 'children' | 'onChange' | 'onSubmit' | 'onError'\n >,\n FormOptions<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n > {}\n\n/**\n * The wrapper component provides context, state, and focus management.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const Form = forwardRef(\n <\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n >(\n props: FormProps<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n >,\n ref: React.ForwardedRef<HTMLFormElement>,\n ) => {\n const {\n mode = 'all',\n resolver,\n fieldResolver,\n fields,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n schema,\n defaultValues,\n values,\n context,\n resetOptions,\n onChange,\n onSubmit,\n onError,\n formRef,\n children,\n ...rest\n } = props\n\n const form = {\n mode,\n resolver,\n defaultValues,\n values,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n context,\n resetOptions,\n }\n\n const methods = useForm<TFieldValues, TContext>(form)\n const { handleSubmit } = methods\n\n // This exposes the useForm api through the forwarded ref\n React.useImperativeHandle(formRef, () => methods, [formRef, methods])\n\n React.useEffect(() => {\n let subscription: any\n if (onChange) {\n subscription = methods.watch(onChange)\n }\n return () => subscription?.unsubscribe()\n }, [methods, onChange])\n\n let _children = children\n if (!_children && fieldResolver) {\n _children = (\n <FormLayout>\n <AutoFields />\n <SubmitButton {...fields?.submit} />\n </FormLayout>\n )\n }\n\n return (\n <FormProvider\n {...methods}\n schema={schema}\n fieldResolver={fieldResolver}\n fields={fields}\n >\n <chakra.form\n ref={ref}\n onSubmit={handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('sui-form', props.className)}\n >\n {runIfFn(_children, {\n Field: DefaultField as any,\n DisplayIf: DisplayIf as any,\n ArrayField: ArrayField as any,\n ObjectField: ObjectField as any,\n ...methods,\n })}\n </chakra.form>\n </FormProvider>\n )\n },\n) as FormComponent\n\nexport type FormComponent = (<\n TSchema = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n>(\n props: FormProps<\n TSchema,\n TFieldValues,\n TContext,\n TExtraFieldProps,\n TFieldTypes\n > & {\n ref?: React.ForwardedRef<HTMLFormElement>\n },\n) => React.ReactElement) & {\n displayName?: string\n}\n\nForm.displayName = 'Form'\n\nexport type GetResolver = <\n TFieldValues extends FieldValues,\n TContext extends object,\n>(\n schema: unknown,\n) => (\n values: TFieldValues,\n context: TContext | undefined,\n options: ResolverOptions<TFieldValues>,\n) => ResolverResult<TFieldValues> | Promise<ResolverResult<TFieldValues>>\n","import React, { forwardRef } from 'react'\n\nimport { Button, ButtonProps, chakra } from '@chakra-ui/react'\nimport type { MaybeRenderProp } from '@saas-ui/core/utils'\nimport { MinusIcon, PlusIcon } from '@saas-ui/react/icons'\nimport { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { BaseField } from './base-field'\nimport { useFieldProps } from './form-context'\nimport { FormLayout, FormLayoutProps } from './form-layout'\nimport { BaseFieldProps } from './types'\nimport {\n ArrayFieldOptions,\n ArrayFieldProvider,\n ArrayFieldRowProvider,\n UseArrayFieldReturn,\n useArrayField,\n useArrayFieldAddButton,\n useArrayFieldContext,\n useArrayFieldRemoveButton,\n useArrayFieldRow,\n useArrayFieldRowContext,\n} from './use-array-field'\nimport { mapNestedFields } from './utils'\n\nexport interface ArrayFieldButtonProps extends ButtonProps {}\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\n\n/**\n * Render prop component, to get access to the internal fields state. Must be a child of ArrayFieldContainer.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rowFieldsProps\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields {...rowFieldsProps}>{children}</ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nArrayFieldRow.displayName = 'ArrayFieldRow'\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * The fields\n */\n children: React.ReactNode\n}\n/**\n * Add the name prefix to the fields and acts as a horizontal form layout by default.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout flex=\"1\" mr=\"2\" {...layoutProps}>\n {mapNestedFields(name, children)}\n </FormLayout>\n )\n}\n\nArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n\n/**\n * The row container component providers row context.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rest\n}) => {\n const context = useArrayFieldRow({ index })\n\n const styles = {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-end',\n width: '100%',\n mb: 4,\n }\n\n return (\n <ArrayFieldRowProvider value={context}>\n <chakra.div {...rest} css={styles}>\n {children}\n </chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n\n/**\n * The default remove button.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldRemoveButton: React.FC<ArrayFieldButtonProps> = (\n props,\n) => {\n return (\n <Button aria-label=\"Remove row\" {...useArrayFieldRemoveButton()} {...props}>\n {props.children || <MinusIcon />}\n </Button>\n )\n}\n\nArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n\n/**\n * The default add button.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldAddButton: React.FC<ArrayFieldButtonProps> = (props) => {\n return (\n <Button\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n >\n {props.children || <PlusIcon />}\n </Button>\n )\n}\n\nArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n\nexport interface ArrayFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends ArrayFieldOptions<TFieldValues, TName>,\n Omit<\n BaseFieldProps<TFieldValues, TName>,\n 'name' | 'defaultValue' | 'children'\n > {\n children: MaybeRenderProp<ArrayField[]>\n}\n\n/**\n * The wrapper component that composes the default ArrayField functionality.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n const rowFn =\n typeof children === 'function'\n ? children\n : (fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n )) || null}\n </>\n )\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>{rowFn as any}</ArrayFieldRows>\n <ArrayFieldAddButton />\n </ArrayFieldContainer>\n )\n },\n) as ((\n props: ArrayFieldProps & {\n ref?: React.ForwardedRef<UseArrayFieldReturn>\n },\n) => React.ReactElement) & {\n displayName: string\n}\n\nArrayField.displayName = 'ArrayField'\n\nexport interface ArrayFieldRowsProps {\n children: (fields: ArrayField[]) => React.ReactElement | null\n}\n\nexport const ArrayFieldRows = ({\n children,\n}: ArrayFieldRowsProps): React.ReactElement | null => {\n const { fields } = useArrayFieldContext()\n return children(fields)\n}\n\nArrayFieldRows.displayName = 'ArrayFieldRows'\n\nexport interface ArrayFieldContainerProps\n extends Omit<ArrayFieldProps, 'children'> {\n children: React.ReactNode\n}\n\n/**\n * The container component provides context and state management.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/array-field\n */\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldContainerProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>,\n ) => {\n const overrides = useFieldProps(name)\n\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min: min || (overrides as any)?.min,\n max: max || (overrides as any)?.max,\n })\n\n // This exposes the useArrayField api through the forwarded ref\n React.useImperativeHandle(ref, () => context, [ref, context])\n\n return (\n <ArrayFieldProvider value={context}>\n <BaseField name={name} {...fieldProps} {...overrides}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n },\n)\n\nArrayFieldContainer.displayName = 'ArrayFieldContainer'\n","import { forwardRef } from 'react'\n\nimport {\n type RecipeProps,\n SimpleGrid,\n SimpleGridProps,\n useRecipe,\n} from '@chakra-ui/react'\nimport { cx } from '@saas-ui/core/utils'\n\nexport interface FormLayoutOptions {\n columns?: SimpleGridProps['columns']\n gap?: SimpleGridProps['gap']\n}\n\nexport interface FormLayoutProps\n extends RecipeProps<'suiFormLayout'>,\n SimpleGridProps {}\n\n/**\n * Create consistent field spacing and positioning.\n *\n * Renders form items in a `SimpleGrid`\n * @see https://chakra-ui.com/docs/components/simple-grid\n *\n * @see https://saas-ui.dev/docs/components/forms/form\n */\nexport const FormLayout = forwardRef<HTMLDivElement, FormLayoutProps>(\n ({ children, gap = 4, ...props }, ref) => {\n const recipe = useRecipe({\n key: 'suiFormLayout',\n })\n\n const [variantProps, gridProps] = recipe.splitVariantProps(props)\n\n const styles = recipe(variantProps)\n\n return (\n <SimpleGrid\n ref={ref}\n {...gridProps}\n className={cx('sui-form-layout', props.className)}\n css={[\n {\n gap,\n },\n styles,\n props.css,\n ]}\n >\n {children}\n </SimpleGrid>\n )\n },\n)\n\nFormLayout.displayName = 'FormLayout'\n","import * as React from 'react'\n\nimport { createContext } from '@saas-ui/core/utils'\nimport {\n FieldPath,\n FieldValues,\n UseFieldArrayReturn,\n useFieldArray,\n} from 'react-hook-form'\n\nimport { useFormContext } from './form-context'\n\nexport interface UseArrayFieldReturn extends UseFieldArrayReturn {\n /**\n * The array field name\n */\n name: string\n /**\n * The default value for new items\n */\n defaultValue: Record<string, any>\n /**\n * Min amount of items\n */\n min?: number\n /**\n * Max amount of items\n */\n max?: number\n}\n\nexport const [ArrayFieldProvider, useArrayFieldContext] =\n createContext<UseArrayFieldReturn>({\n name: 'ArrayFieldContext',\n })\n\nexport interface UseArrayFieldRowReturn {\n /**\n * Name of the array field including the index, eg 'field.0'\n */\n name: string\n /**\n * The field index\n */\n index: number\n /**\n * Remove this array item\n */\n remove: () => void\n /**\n * True if this is the first item\n */\n isFirst: boolean\n /**\n * True if this is the last item\n */\n isLast: boolean\n}\n\nexport const [ArrayFieldRowProvider, useArrayFieldRowContext] =\n createContext<UseArrayFieldRowReturn>({\n name: 'ArrayFieldRowContext',\n })\n\nexport interface ArrayFieldOptions<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n /**\n * The field name\n */\n name: TName\n /**\n * Default value for new values in the array\n */\n defaultValue?: Record<string, any>\n /**\n * Default key name for rows, change this if your data uses a different 'id' field\n * @default \"id\"\n */\n keyName?: string\n min?: number\n max?: number\n}\n\nexport const useArrayField = ({\n name,\n defaultValue = {},\n keyName,\n min,\n max,\n}: ArrayFieldOptions) => {\n const { control } = useFormContext()\n\n const context = useFieldArray({\n control,\n name,\n keyName,\n })\n return {\n ...context,\n name,\n defaultValue,\n min,\n max,\n }\n}\n\nexport interface UseArrayFieldRowProps {\n index: number\n}\n\nexport const useArrayFieldRow = ({ index }: UseArrayFieldRowProps) => {\n const { clearErrors } = useFormContext()\n const { name, remove, fields } = useArrayFieldContext()\n\n React.useEffect(() => {\n // reset errors, to make sure min/max errors reset correctly\n clearErrors(name)\n }, [])\n\n return {\n index,\n isFirst: index === 0,\n isLast: index === fields.length - 1,\n name: `${name}.${index}`,\n remove: React.useCallback(() => {\n clearErrors(name)\n remove(index)\n }, [index]),\n }\n}\n\nexport const useArrayFieldRemoveButton = () => {\n const { isFirst, remove } = useArrayFieldRowContext()\n const { min, fields } = useArrayFieldContext()\n\n const isDisabled = isFirst && !!(min && fields.length <= min)\n\n return {\n onClick: () => remove(),\n isDisabled,\n }\n}\n\nexport const useArrayFieldAddButton = () => {\n const { append, defaultValue, max, fields } = useArrayFieldContext()\n\n const isDisabled = !!(max && fields.length >= max)\n\n return {\n onClick: () =>\n append(defaultValue, {\n shouldFocus: false,\n }),\n isDisabled,\n }\n}\n","import * as React from 'react'\n\nimport { FieldOption, FieldOptions } from './types'\n\nexport const mapNestedFields = (name: string, children: React.ReactNode) => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement<any>(child)) {\n const props = child.props as any\n\n if (!props.name) {\n return child\n }\n\n let childName = props.name\n if (childName.includes('.')) {\n childName = childName.replace(/^.*\\.(.*)/, '$1')\n } else if (childName.includes('.$')) {\n childName = childName.replace(/^.*\\.\\$(.*)/, '$1')\n }\n\n return React.cloneElement(child, {\n ...props,\n name: `${name}.${childName}`,\n })\n }\n\n return child\n })\n}\n\nexport const mapOptions = <TOption extends FieldOption = FieldOption>(\n options: FieldOptions<TOption>,\n) => {\n return options.map((option) => {\n if (typeof option === 'string') {\n return {\n label: option,\n value: option,\n }\n }\n return option\n })\n}\n","import * as React from 'react'\n\nimport {\n FieldPath,\n FieldValues,\n UseFormReturn,\n useWatch,\n} from 'react-hook-form'\n\nimport { useFormContext } from './form-context.tsx'\n\nexport interface DisplayIfProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n children: React.ReactElement\n name: TName\n defaultValue?: unknown\n isDisabled?: boolean\n isExact?: boolean\n condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean\n onToggle?: (\n conditionMatched: boolean,\n context: UseFormReturn<TFieldValues>,\n ) => void\n}\n/**\n * Conditionally render parts of a form.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const DisplayIf = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n children,\n name,\n defaultValue,\n isDisabled,\n isExact,\n condition = (value) => !!value,\n onToggle,\n}: DisplayIfProps<TFieldValues, TName>) => {\n const initializedRef = React.useRef(false)\n const matchesRef = React.useRef(false)\n\n const value = useWatch<TFieldValues>({\n name,\n defaultValue: defaultValue as any,\n disabled: isDisabled,\n exact: isExact,\n })\n const context = useFormContext() as any\n\n const matches = condition(value, context)\n\n React.useEffect(() => {\n if (!initializedRef.current) {\n initializedRef.current = true\n return\n }\n if (matchesRef.current === matches) return\n matchesRef.current = matches\n onToggle?.(matches, context)\n }, [value])\n\n return matches ? children : null\n}\n\nDisplayIf.displayName = 'DisplayIf'\n","import * as React from 'react'\n\nimport { FieldValues, RegisterOptions } from 'react-hook-form'\n\nimport { InputField } from './default-fields'\nimport { useField } from './fields-context'\nimport { useFieldProps } from './form-context'\nimport { FieldProps, type FocusableElement } from './types'\n\nexport type FieldRules = Pick<\n RegisterOptions,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength' | 'pattern'\n>\n\nconst defaultInputType = 'text'\n\n/**\n * Form field component.\n * \n * Build-in types:\n * text, number, password, textarea, select, native-select, checkbox, radio, switch, pin\n *\n * Will default to a text field if there is no matching type.\n\n * @see Docs https://saas-ui.dev/docs/components/forms/field\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues>,\n ref: React.ForwardedRef<FocusableElement>,\n ) => {\n const { type = defaultInputType, name } = props\n const overrides = useFieldProps(name)\n const InputComponent = useField(overrides?.type || type, InputField)\n\n return <InputComponent ref={ref} {...props} {...overrides} />\n },\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> & {\n ref?: React.ForwardedRef<FocusableElement>\n },\n) => React.ReactElement) & {\n displayName?: string\n}\n","import * as React from 'react'\n\nimport { ArrayField } from './array-field'\nimport { Field } from './field'\nimport type { FieldResolver } from './field-resolver'\nimport { useFormContext } from './form-context'\nimport { FormLayout } from './form-layout'\nimport { ObjectField } from './object-field'\nimport { BaseFieldProps } from './types'\n\nexport interface FieldsProps<TSchema = any> {\n schema?: TSchema\n fieldResolver?: FieldResolver\n focusFirstField?: boolean\n}\n\nconst mapNestedFields = (resolver: FieldResolver, name: string) => {\n return resolver\n .getNestedFields(name)\n ?.map(\n (\n { name, type, ...nestedFieldProps }: BaseFieldProps,\n i,\n ): React.ReactNode => (\n <Field\n key={name || i}\n name={name}\n type={type as any}\n {...nestedFieldProps}\n />\n ),\n )\n}\n\nexport const AutoFields: React.FC<FieldsProps> = ({\n schema: schemaProp,\n fieldResolver: fieldResolverProp,\n focusFirstField,\n ...props\n}) => {\n const context = useFormContext()\n const schema = schemaProp || context.schema\n const fieldResolver = fieldResolverProp || context.fieldResolver\n const resolver = React.useMemo(() => fieldResolver, [schema, fieldResolver])\n\n const fields = React.useMemo(() => resolver?.getFields(), [resolver])\n\n const form = useFormContext()\n\n React.useEffect(() => {\n if (focusFirstField && fields?.[0]?.name) {\n form.setFocus(fields[0].name)\n }\n }, [schema, fieldResolver, focusFirstField])\n\n if (!resolver) {\n return null\n }\n\n return (\n <FormLayout {...props}>\n {fields?.map(\n ({ name, type, ...fieldProps }: BaseFieldProps): React.ReactNode => {\n if (type === 'array') {\n return (\n <ArrayField key={name} name={name} {...fieldProps}>\n {mapNestedFields(resolver, name)}\n </ArrayField>\n )\n } else if (type === 'object') {\n return (\n <ObjectField key={name} name={name} {...fieldProps}>\n {mapNestedFields(resolver, name)}\n </ObjectField>\n )\n }\n\n return (\n <Field\n key={name}\n name={name}\n type={type as any}\n // defaultValue={defaultValue}\n {...fieldProps}\n />\n )\n },\n )}\n </FormLayout>\n )\n}\n\nAutoFields.displayName = 'Fields'\n","import * as React from 'react'\n\nimport { Field as FieldPrimivite } from '@chakra-ui/react'\nimport { dataAttr } from '@saas-ui/core/utils'\nimport { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { useFieldProps } from './form-context'\nimport { FormLayout, type FormLayoutOptions } from './form-layout'\nimport { BaseFieldProps } from './types'\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<BaseFieldProps, keyof FormLayoutOptions>,\n FormLayoutOptions {\n name: TName\n children: React.ReactNode\n}\n\nexport const FormLegend = (props: FieldPrimivite.LabelProps) => {\n return <FieldPrimivite.Label as=\"legend\" {...props} />\n}\n\n/**\n * The object field component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/object-field\n */\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const {\n name,\n label,\n hideLabel: hideLabelProp,\n children,\n columns: columnsProp,\n gap: gapProp,\n ...fieldProps\n } = props\n\n const { hideLabel, columns, gap, ...overrides } = useFieldProps(name) as Omit<\n ObjectFieldProps,\n 'name'\n >\n\n const hidden = hideLabelProp || hideLabel\n\n return (\n <FieldPrimivite.Root as=\"fieldset\" {...fieldProps} {...overrides}>\n <FormLegend data-hidden={dataAttr(hidden)}>{label}</FormLegend>\n <FormLayout columns={columnsProp || columns} gridGap={gapProp || gap}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FieldPrimivite.Root>\n )\n}\n\nObjectField.displayName = 'ObjectField'\n","import { forwardRef } from 'react'\n\nimport { Button, ButtonProps } from '@saas-ui/react/button'\nimport { useFormContext } from 'react-hook-form'\n\nimport { useFieldProps } from './form-context.tsx'\n\nexport interface SubmitButtonProps extends ButtonProps {\n /**\n * Disable the submit button if the form is untouched.\n */\n disableIfUntouched?: boolean\n /**\n * Disable the submit button if the form is invalid.\n */\n disableIfInvalid?: boolean\n}\n\n/**\n * A button with type submit and default color scheme primary and isLoading state when the form is submitting.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const SubmitButton = forwardRef<HTMLButtonElement, SubmitButtonProps>(\n (props, ref) => {\n const {\n variant = 'glass',\n colorPalette = 'accent',\n children = 'Submit',\n disableIfUntouched: disableIfUntouchedProp = false,\n disableIfInvalid: disableIfInvalidProp = false,\n disabled: disabledProp,\n loading,\n ...rest\n } = props\n const { formState } = useFormContext()\n\n const field = useFieldProps('submit') as SubmitButtonProps\n\n const {\n disableIfUntouched: disableIfUntouchedOverride,\n disableIfInvalid: disableIfInvalidOverride,\n ...fieldProps\n } = field\n\n const disableIfUntouched =\n disableIfUntouchedOverride ?? disableIfUntouchedProp\n const disableIfInvalid = disableIfInvalidOverride ?? disableIfInvalidProp\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid) ||\n disabledProp\n\n return (\n <Button\n ref={ref}\n variant={variant as any}\n colorPalette={colorPalette}\n type=\"submit\"\n loading={formState.isSubmitting || loading}\n disabled={isDisabled}\n children={children}\n {...rest}\n {...fieldProps}\n />\n )\n },\n)\n\nSubmitButton.displayName = 'SubmitButton'\n","import { forwardRef } from 'react'\n\nimport { type HTMLChakraProps, chakra } from '@chakra-ui/react'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { cx } from '@saas-ui/core/utils'\nimport {\n type DefaultValues,\n type FieldValues,\n type SubmitErrorHandler,\n type SubmitHandler,\n UseFormProps as UseHookFormProps,\n type UseFormReturn as UseHookFormReturn,\n useForm as useHookForm,\n} from 'react-hook-form'\nimport type { z } from 'zod'\n\nimport { ArrayField, type ArrayFieldProps } from './array-field'\nimport { DisplayIf, type DisplayIfProps } from './display-if'\nimport { Field } from './field.tsx'\nimport { FormProvider } from './form-context'\nimport { ObjectField, type ObjectFieldProps } from './object-field'\nimport type { FieldProps } from './types'\nimport type { UseArrayFieldReturn } from './use-array-field'\n\nexport interface UseFormProps<\n TFieldValues extends FieldValues,\n TContext extends object,\n> extends UseHookFormProps<TFieldValues, TContext> {\n onSubmit: SubmitHandler<TFieldValues>\n onInvalid?: SubmitErrorHandler<FieldValues>\n}\n\nexport interface UseFormReturn<\n TFieldValues extends FieldValues,\n TContext extends object,\n> extends UseHookFormReturn<TFieldValues, TContext> {\n Form: React.FC<Omit<FormProps<TFieldValues, TContext>, 'form'>>\n Field: React.FC<FieldProps<TFieldValues>>\n DisplayIf: React.FC<DisplayIfProps<TFieldValues>>\n ArrayField: React.FC<\n ArrayFieldProps<TFieldValues> & React.RefAttributes<UseArrayFieldReturn>\n >\n ObjectField: React.FC<ObjectFieldProps<TFieldValues>>\n}\n\nexport function useForm<\n TFieldValues extends FieldValues,\n TContext extends object,\n>(props: UseFormProps<TFieldValues, TContext>) {\n const { onSubmit, onInvalid, ...rest } = props\n\n const form = useHookForm<TFieldValues, TContext>(rest)\n\n const FormComponent = forwardRef<HTMLFormElement, Omit<FormProps, 'form'>>(\n function FormComponent(props, ref) {\n return (\n <Form\n {...props}\n form={form}\n onSubmit={props.onSubmit ?? form.handleSubmit(onSubmit, onInvalid)}\n ref={ref}\n />\n )\n },\n )\n\n return {\n ...form,\n Form: FormComponent,\n Field,\n DisplayIf,\n ArrayField,\n ObjectField,\n } as UseFormReturn<TFieldValues, TContext>\n}\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n> extends HTMLChakraProps<'form'> {\n children: React.ReactNode\n form: ReturnType<typeof useHookForm<TFieldValues, TContext>>\n}\n\nexport const Form = forwardRef<HTMLFormElement, FormProps>(\n function Form(props, ref) {\n const { children, form, ...rest } = props\n return (\n <FormProvider {...form}>\n <chakra.form\n ref={ref}\n {...rest}\n className={cx('sui-form', props.className)}\n >\n {props.children}\n </chakra.form>\n </FormProvider>\n )\n },\n) as <TFieldValues extends FieldValues, TContext extends object>(\n props: FormProps<TFieldValues, TContext> & {\n ref?: React.Ref<HTMLFormElement>\n },\n) => React.ReactElement\n\nexport interface UseZodFormProps<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n> extends Omit<UseHookFormProps<TFieldValues, TContext>, 'defaultValues'> {\n schema: TSchema\n onSubmit: SubmitHandler<TFieldValues>\n onInvalid?: SubmitErrorHandler<FieldValues>\n defaultValues?: DefaultValues<TFieldValues> | AsyncDefaultValues<TFieldValues>\n}\n\nexport function useZodForm<\n TSchema extends\n | z.AnyZodObject\n | z.ZodEffects<z.AnyZodObject> = z.AnyZodObject,\n TFieldValues extends InferObjectSchema<TSchema> = InferObjectSchema<TSchema>,\n TContext extends object = object,\n>(props: UseZodFormProps<TSchema, TFieldValues, TContext>) {\n const { schema, ...rest } = props\n\n return useForm<TFieldValues, TContext>({\n resolver: zodResolver(schema as any),\n ...rest,\n })\n}\n\ntype InferObjectSchema<T extends z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>> =\n T extends z.ZodEffects<infer TSchema> ? z.infer<TSchema> : z.infer<T>\n\ntype AsyncDefaultValues<TFieldValues> = (\n payload?: unknown,\n) => Promise<TFieldValues>\n","import * as React from 'react'\n\nimport { Field as FieldPrimivite, Text } from '@chakra-ui/react'\nimport type { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { useFormContext } from './form-context.tsx'\nimport type { ArrayFieldPath } from './types.ts'\n\nexport interface DisplayFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<FieldPrimivite.RootProps, 'type' | 'onChange' | 'defaultValue'> {\n name: TName | ArrayFieldPath<TName>\n label?: string\n}\n\n/**\n * Display a field value.\n *\n * @see Docs https://saas-ui.dev/\n */\nexport const DisplayField: React.FC<DisplayFieldProps> = ({\n name,\n label,\n ...props\n}) => {\n return (\n <FieldPrimivite.Root {...props}>\n {label ? (\n <FieldPrimivite.Label htmlFor={name}>{label}</FieldPrimivite.Label>\n ) : null}\n <Text fontSize=\"md\">\n <FormValue name={name} />\n </Text>\n </FieldPrimivite.Root>\n )\n}\n\nDisplayField.displayName = 'DisplayField'\n\nexport const FormValue: React.FC<{ name: string }> = ({ name }) => {\n const { getValues } = useFormContext()\n return getValues(name) || null\n}\n\nFormValue.displayName = 'FormValue'\n","import { FieldValues, useWatch } from 'react-hook-form'\nimport { useFormContext, UseFormReturn } from './form-context'\n\nexport interface WatchFieldProps<\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n> {\n name: string\n defaultValue?: Value\n isDisabled?: boolean\n isExact?: boolean\n children: (\n value: Value,\n form: UseFormReturn<TFieldValues, TContext>\n ) => React.ReactElement | void\n}\n\nexport const WatchField = <\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n>(\n props: WatchFieldProps<Value, TFieldValues, TContext>\n) => {\n const { name, defaultValue, isDisabled, isExact } = props\n const form = useFormContext<TFieldValues, TContext>()\n\n const field = useWatch({\n name,\n defaultValue,\n disabled: isDisabled,\n exact: isExact,\n })\n\n return props.children(field, form) || null\n}\n","// Import and export Form and StepForm\nimport { createForm } from './create-form'\n\nexport { useForm, useZodForm } from './use-form'\nexport type { UseZodFormProps, UseFormReturn, UseFormProps } from './use-form'\n\n// import { createStepForm } from './create-step-form'\n\n// Exporting from './display-field'\nexport { DisplayField } from './display-field'\nexport type { DisplayFieldProps } from './display-field'\nexport { FormValue } from './display-field'\n\n// Exporting from './field'\nexport { Field } from './field'\nexport type { FieldRules } from './field'\n\n// Exporting from './fields'\nexport { AutoFields } from './fields'\nexport type { FieldsProps } from './fields'\n\n// Exporting from './fields-context'\nexport { FieldsProvider, useField } from './fields-context'\n\n// Exporting from './layout'\nexport { FormLayout } from './form-layout'\nexport type { FormLayoutProps } from './form-layout'\n\n// Exporting from './submit-button'\nexport { SubmitButton } from './submit-button'\nexport type { SubmitButtonProps } from './submit-button'\n\n// Exporting from './array-field'\nexport {\n ArrayField,\n ArrayFieldAddButton,\n ArrayFieldContainer,\n ArrayFieldRemoveButton,\n ArrayFieldRow,\n ArrayFieldRowContainer,\n ArrayFieldRowFields,\n ArrayFieldRows,\n} from './array-field'\n\nexport type {\n ArrayFieldButtonProps,\n ArrayFieldContainerProps,\n ArrayFieldProps,\n ArrayFieldRowFieldsProps,\n ArrayFieldRowsProps,\n} from './array-field'\n\n// Exporting from './use-array-field'\nexport {\n ArrayFieldProvider,\n ArrayFieldRowProvider,\n useArrayField,\n useArrayFieldAddButton,\n useArrayFieldContext,\n useArrayFieldRemoveButton,\n useArrayFieldRow,\n useArrayFieldRowContext,\n} from './use-array-field'\n\nexport type {\n ArrayFieldOptions,\n UseArrayFieldReturn,\n UseArrayFieldRowProps,\n UseArrayFieldRowReturn,\n} from './use-array-field'\n\n// Exporting from './object-field'\nexport { FormLegend, ObjectField } from './object-field'\nexport type { ObjectFieldProps } from './object-field'\n\n// Exporting from './display-if'\nexport { DisplayIf } from './display-if'\nexport type { DisplayIfProps } from './display-if'\n\n// Exporting from './step-form'\n// export { FormStep, FormStepper, NextButton, PrevButton } from './step-form'\n\n// export type {\n// FormStepOptions,\n// FormStepProps,\n// FormStepperProps,\n// NextButtonProps,\n// StepFormProps,\n// StepsOptions,\n// } from './step-form'\n\n// Exporting from './use-step-form'\n// export {\n// StepFormProvider,\n// useFormStep,\n// useStepForm,\n// useStepFormContext,\n// } from './use-step-form'\n\n// export type {\n// FormStepSubmitHandler,\n// StepFormContext,\n// StepFormRenderContext,\n// StepState,\n// UseFormStepProps,\n// UseStepFormProps,\n// UseStepFormReturn,\n// } from './use-step-form'\n\n// Exporting from './field-resolver'\nexport { objectFieldResolver } from './field-resolver'\nexport type {\n FieldResolver,\n GetFieldResolver,\n ObjectSchema,\n} from './field-resolver'\n\n// Exporting from './watch-field'\nexport { WatchField } from './watch-field'\nexport type { WatchFieldProps } from './watch-field'\n\n// Exporting BaseField from './base-field'\nexport { BaseField, useBaseField } from './base-field'\n\n// Exporting from './default-fields'\nexport {\n // CheckboxField,\n InputField,\n // NativeSelectField,\n // NumberInputField,\n // PasswordInputField,\n // PinField,\n // RadioField,\n // SelectField,\n // SwitchField,\n TextareaField,\n defaultFieldTypes,\n} from './default-fields'\n\nexport type {\n DefaultFields,\n InputFieldProps,\n // NumberInputFieldProps,\n // PinFieldProps,\n // SelectFieldProps,\n // SwitchFieldProps,\n TextareaFieldProps,\n // CheckboxFieldProps,\n // NativeSelectFieldProps,\n // RadioFieldProps,\n} from './default-fields'\n\n// Exporting types from './types'\nexport type {\n FieldProps,\n WithFields,\n BaseFieldProps,\n FieldOptions,\n DefaultFieldOverrides,\n // WithStepFields,\n GetBaseField,\n ArrayFieldPath,\n MergeFieldProps,\n FieldOption,\n FieldOverrides,\n FormChildren,\n ShallowMerge,\n StepFormChildren,\n ValueOf,\n} from './types'\n\n// Exporting from './create-form'\nexport { createForm } from './create-form'\nexport type { CreateFormProps, FormType } from './create-form'\n\n// Exporting from './create-field'\nexport { createField } from './create-field'\nexport type { CreateFieldOptions } from './create-field'\n\n// Exporting from './form'\nexport { Form as BaseForm } from './form'\nexport type { FormProps, FormRenderContext, FormComponent } from './form'\n\n// Exporting from './form-context'\nexport { FormProvider, useFormContext } from './form-context'\n\n// export { createStepForm } from './create-step-form'\n// export type { CreateStepFormProps } from './create-step-form'\n\n/**\n * Form component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n */\nexport const Form = createForm()\n\n/**\n * Multi-step form component.\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/step-form\n */\n// export const StepForm = createStepForm()\n\nexport type {\n BatchFieldArrayUpdate,\n ChangeHandler,\n Control,\n ControllerFieldState,\n ControllerProps,\n ControllerRenderProps,\n CriteriaMode,\n CustomElement,\n DeepMap,\n DeepPartial,\n DeepPartialSkipArrayKey,\n DefaultValues,\n DelayCallback,\n EmptyObject,\n ErrorOption,\n EventType,\n Field as FieldDef,\n FieldArray,\n FieldArrayMethodProps,\n FieldArrayWithId,\n FieldElement,\n FieldError,\n FieldErrors,\n FieldName,\n FieldNamesMarkedBoolean,\n FieldRefs,\n FieldValue,\n FieldValues,\n FormProviderProps,\n FormState,\n FormStateProxy,\n FormStateSubjectRef,\n GetIsDirty,\n InternalFieldErrors,\n InternalFieldName,\n InternalNameSet,\n IsAny,\n IsFlatObject,\n KeepStateOptions,\n LiteralUnion,\n Message,\n Mode,\n MultipleFieldErrors,\n Names,\n NativeFieldValue,\n NestedValue,\n NonUndefined,\n Noop,\n Primitive,\n ReadFormState,\n Ref,\n RefCallBack,\n RegisterOptions,\n Resolver,\n ResolverError,\n ResolverOptions,\n ResolverResult,\n ResolverSuccess,\n SetFieldValue,\n SetValueConfig,\n Subjects,\n SubmitErrorHandler,\n SubmitHandler,\n TriggerConfig,\n UnpackNestedValue,\n UseControllerProps,\n UseControllerReturn,\n UseFieldArrayProps,\n UseFieldArrayReturn,\n UseFormClearErrors,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormRegister,\n UseFormRegisterReturn,\n UseFormReset,\n UseFormResetField,\n UseFormSetError,\n UseFormSetFocus,\n UseFormSetValue,\n UseFormStateProps,\n UseFormStateReturn,\n UseFormTrigger,\n UseFormUnregister,\n UseFormWatch,\n UseWatchProps,\n Validate,\n ValidateResult,\n ValidationMode,\n ValidationRule,\n ValidationValue,\n ValidationValueMessage,\n WatchInternal,\n WatchObserver,\n ArrayPath,\n BrowserNativeObject,\n DeepRequired,\n ExtractObjects,\n FieldArrayPath,\n FieldArrayPathValue,\n FieldErrorsImpl,\n FieldPath,\n FieldPathByValue,\n FieldPathValue,\n FieldPathValues,\n} from 'react-hook-form'\n\nexport {\n appendErrors,\n useController,\n useFieldArray,\n useFormState,\n useWatch,\n Controller,\n} from 'react-hook-form'\n"],"mappings":"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","names":["forwardRef","useMemo","React","splitProps","jsx","React","jsx","jsx","Field","React","splitProps","jsx","jsxs","get","React","forwardRef","chakra","cx","React","forwardRef","forwardRef","jsx","React","createContext","createContext","React","jsx","jsxs","forwardRef","React","React","React","jsx","Field","React","jsx","jsxs","jsx","mapNestedFields","name","Field","forwardRef","Button","useFormContext","jsx","forwardRef","useFormContext","Button","jsx","jsxs","forwardRef","React","chakra","cx","Field","jsx","forwardRef","useMemo","forwardRef","chakra","cx","jsx","useForm","forwardRef","FormComponent","props","Form","Field","chakra","cx","FieldPrimivite","jsx","jsxs","FieldPrimivite","useWatch","useWatch","useFieldArray","useWatch","Controller","Form"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saas-ui/forms",
3
- "version": "3.0.0-next.13",
3
+ "version": "3.0.0-next.14",
4
4
  "description": "Fully functional forms for Chakra UI.",
5
5
  "exports": {
6
6
  ".": {
@@ -83,7 +83,7 @@
83
83
  "dependencies": {
84
84
  "@hookform/resolvers": "^4.1.3",
85
85
  "@saas-ui/core": "3.0.0-next.2",
86
- "@saas-ui/react": "3.0.0-next.13",
86
+ "@saas-ui/react": "3.0.0-next.14",
87
87
  "react-hook-form": "^7.54.2",
88
88
  "zod": "^3.24.2"
89
89
  },