@saas-ui/forms 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +6 -0
- package/dist/auto-form.d.ts +1 -1
- package/dist/form.d.ts +3 -3
- package/dist/form.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.modern.mjs.map +1 -1
- package/dist/step-form.d.ts +1 -1
- package/dist/use-array-field.d.ts +8 -8
- package/dist/yup/yup-resolver.d.ts +1 -1
- package/dist/zod/zod-resolver.d.ts +1 -1
- package/package.json +1 -1
- package/src/form.tsx +1 -2
package/CHANGELOG.md
CHANGED
package/dist/auto-form.d.ts
CHANGED
@@ -23,7 +23,7 @@ export interface AutoFormProps<TFieldValues extends FieldValues> extends Omit<Fo
|
|
23
23
|
children?: React.ReactNode;
|
24
24
|
}
|
25
25
|
export declare const AutoForm: (<TFieldValues extends FieldValues>(props: AutoFormProps<TFieldValues> & {
|
26
|
-
ref?: React.ForwardedRef<UseFormReturn<TFieldValues,
|
26
|
+
ref?: React.ForwardedRef<UseFormReturn<TFieldValues, any>> | undefined;
|
27
27
|
}) => React.ReactElement) & {
|
28
28
|
displayName?: string | undefined;
|
29
29
|
getFieldResolver?: ((schema: any) => FieldResolver) | undefined;
|
package/dist/form.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import { HTMLChakraProps } from '@chakra-ui/react';
|
3
|
-
import { UseFormProps, UseFormReturn, FieldValues, SubmitHandler, SubmitErrorHandler, ResolverOptions, ResolverResult, WatchObserver
|
3
|
+
import { UseFormProps, UseFormReturn, FieldValues, SubmitHandler, SubmitErrorHandler, ResolverOptions, ResolverResult, WatchObserver } from 'react-hook-form';
|
4
4
|
import { FieldResolver } from './field-resolver';
|
5
5
|
import { MaybeRenderProp } from '@chakra-ui/react-utils';
|
6
6
|
export type { UseFormReturn, FieldValues, SubmitHandler };
|
@@ -33,12 +33,12 @@ interface FormOptions<TFieldValues extends FieldValues = FieldValues, TContext e
|
|
33
33
|
export interface FormProps<TFieldValues extends FieldValues = FieldValues, TContext extends object = object> extends UseFormProps<TFieldValues, TContext>, Omit<HTMLChakraProps<'form'>, 'children' | 'onChange' | 'onSubmit' | 'onError'>, FormOptions<TFieldValues, TContext> {
|
34
34
|
}
|
35
35
|
export declare const Form: (<TFieldValues extends FieldValues, TContext extends object = object>(props: FormProps<TFieldValues, object> & {
|
36
|
-
ref?: React.ForwardedRef<UseFormReturn<TFieldValues,
|
36
|
+
ref?: React.ForwardedRef<UseFormReturn<TFieldValues, any>> | undefined;
|
37
37
|
}) => React.ReactElement) & {
|
38
38
|
displayName?: string | undefined;
|
39
39
|
getResolver?: GetResolver | undefined;
|
40
40
|
getFieldResolver: GetFieldResolver;
|
41
41
|
};
|
42
|
-
export type GetResolver = <TFieldValues extends FieldValues, TContext extends object>(schema: any) => (values:
|
42
|
+
export type GetResolver = <TFieldValues extends FieldValues, TContext extends object>(schema: any) => (values: TFieldValues, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;
|
43
43
|
export type GetFieldResolver = (schema: any) => FieldResolver;
|
44
44
|
//# sourceMappingURL=form.d.ts.map
|
package/dist/form.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAU,eAAe,EAAc,MAAM,kBAAkB,CAAA;AAGtE,OAAO,EAGL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,cAAc,EAEd,aAAa,
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAU,eAAe,EAAc,MAAM,kBAAkB,CAAA;AAGtE,OAAO,EAGL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,cAAc,EAEd,aAAa,EACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAuB,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAA;AAEzD,UAAU,WAAW,CACnB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,SAAS,MAAM,GAAG,MAAM;IAEhC;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IACtC;;OAEG;IACH,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IACrC;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAA;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IAC1C;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;CAClE;AAID,MAAM,WAAW,SAAS,CACxB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,SAAS,MAAM,GAAG,MAAM,CAChC,SAAQ,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,EAC1C,IAAI,CACF,eAAe,CAAC,MAAM,CAAC,EACvB,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CACjD,EACD,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC;CAAG;AAE1C,eAAO,MAAM,IAAI;;MA0EZ,MAAM,YAAY;;;sBAGH,gBAAgB;CACnC,CAAA;AAQD,MAAM,MAAM,WAAW,GAAG,CACxB,YAAY,SAAS,WAAW,EAChC,QAAQ,SAAS,MAAM,EAEvB,MAAM,EAAE,GAAG,KACR,CACH,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,QAAQ,GAAG,SAAS,EAC7B,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,KACnC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAA;AAE1C,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,aAAa,CAAA"}
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/display-field.tsx","../src/field.tsx","../src/field-resolver.ts","../src/form.tsx","../src/layout.tsx","../src/utils.ts","../src/use-array-field.tsx","../src/array-field.tsx","../src/object-field.tsx","../src/fields.tsx","../src/submit-button.tsx","../src/auto-form.tsx","../src/display-if.tsx","../src/use-step-form.tsx","../src/step-form.tsx","../src/watch-field.tsx"],"sourcesContent":["import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { useFormContext } from 'react-hook-form'\n\nimport {\n Text,\n FormControl,\n FormControlProps,\n FormLabel,\n} from '@chakra-ui/react'\n\nimport { FieldProps } from './field'\n\nexport interface DisplayFieldProps\n extends FormControlProps,\n Omit<FieldProps, 'type' | 'label'> {}\n\nexport const DisplayField: React.FC<DisplayFieldProps> = ({\n name,\n label,\n placeholder,\n ...props\n}) => {\n return (\n <FormControl {...props}>\n {label ? <FormLabel htmlFor={name}>{label}</FormLabel> : null}\n <Text fontSize=\"md\">\n <FormValue name={name} />\n </Text>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n DisplayField.displayName = 'DisplayField'\n}\n\nexport const FormValue: React.FC<{ name: string }> = ({ name }) => {\n const { getValues } = useFormContext()\n return getValues(name) || null\n}\n\nif (__DEV__) {\n FormValue.displayName = 'FormValue'\n}\n","import * as React from 'react'\nimport {\n useFormContext,\n FormState,\n Controller,\n get,\n RegisterOptions,\n FieldValues,\n FieldPath,\n} from 'react-hook-form'\n\nimport {\n forwardRef,\n Box,\n FormControl,\n FormControlProps,\n FormLabel,\n FormHelperText,\n FormErrorMessage,\n Input,\n Textarea,\n Checkbox,\n Switch,\n useMergeRefs,\n InputGroup,\n InputProps,\n TextareaProps,\n SwitchProps,\n CheckboxProps,\n PinInputField,\n HStack,\n PinInput,\n UsePinInputProps,\n SystemProps,\n} from '@chakra-ui/react'\nimport { __DEV__, FocusableElement, callAllHandlers } from '@chakra-ui/utils'\n\nimport { NumberInput, NumberInputProps } from '@saas-ui/number-input'\nimport { PasswordInput, PasswordInputProps } from '@saas-ui/password-input'\nimport { RadioInput, RadioInputProps } from '@saas-ui/radio'\n\nimport {\n Select,\n SelectProps,\n NativeSelect,\n NativeSelectProps,\n} from '@saas-ui/select'\n\nexport interface Option {\n value: string\n label?: string\n [key: string]: unknown\n}\n\nexport type FieldRules = Pick<\n RegisterOptions,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength' | 'pattern'\n>\n\nexport interface FieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<FormControlProps, 'label' | 'type'> {\n /**\n * The field name\n */\n name: TName\n /**\n * The field label\n */\n label?: string\n /**\n * Hide the field label\n */\n hideLabel?: boolean\n /**\n * Field help text\n */\n help?: string\n /**\n * React hook form rules\n */\n rules?: Omit<\n RegisterOptions<TFieldValues, TName>,\n 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'\n >\n /**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\n type?: string\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<string, React.FC<any>> = {}\n\nconst defaultInputType = 'text'\n\nconst getInput = (type: string) => {\n return inputTypes[type] || inputTypes[defaultInputType]\n}\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 BaseField: React.FC<FieldProps> = (props) => {\n const { name, label, help, hideLabel, children, ...controlProps } = props\n\n const { formState } = useFormContext()\n\n const error = getError(name, formState)\n\n return (\n <FormControl {...controlProps} isInvalid={!!error}>\n {label && !hideLabel ? <FormLabel>{label}</FormLabel> : null}\n <Box>\n {children}\n {help && !error?.message ? (\n <FormHelperText>{help}</FormHelperText>\n ) : null}\n {error?.message && (\n <FormErrorMessage>{error?.message}</FormErrorMessage>\n )}\n </Box>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n BaseField.displayName = 'BaseField'\n}\n\nexport type As<Props = any> = React.ElementType<Props>\n\nexport type PropsOf<T extends As> = React.ComponentPropsWithoutRef<T> & {\n type?: FieldTypes\n}\n\n/**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> | FieldTypeProps,\n ref: React.ForwardedRef<FocusableElement>\n ) => {\n const { type = defaultInputType } = props\n const InputComponent = getInput(type)\n\n return <InputComponent ref={ref} {...props} />\n }\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> &\n FieldTypeProps & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement) & {\n displayName?: string\n}\n\ninterface CreateFieldProps {\n displayName: string\n hideLabel?: boolean\n BaseField: React.FC<any>\n}\n\nconst createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, BaseField }: CreateFieldProps\n) => {\n const Field = forwardRef((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n rules,\n ...inputProps\n } = props\n\n const inputRules = {\n required: isRequired,\n ...rules,\n }\n\n return (\n <BaseField\n id={id}\n name={name}\n label={label}\n help={help}\n hideLabel={hideLabel}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { control } = useFormContext()\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={callAllHandlers(inputProps.onChange, field.onChange)}\n onBlur={callAllHandlers(inputProps.onBlur, field.onBlur)}\n ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAllHandlers(inputProps.onChange, field.onChange)}\n onBlur={callAllHandlers(inputProps.onBlur, field.onBlur)}\n ref={useMergeRefs(ref, _ref)}\n />\n )\n }\n )\n}\n\nexport interface RegisterFieldTypeOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\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 registerFieldType = <T extends object>(\n type: string,\n component: React.FC<T>,\n options?: RegisterFieldTypeOptions\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(component)\n } else {\n InputComponent = withUncontrolledInput(component)\n }\n\n const Field = createField(InputComponent, {\n displayName: `${type\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')}Field`,\n hideLabel: options?.hideLabel,\n BaseField: options?.BaseField || BaseField,\n }) as React.FC<T & FieldProps>\n\n inputTypes[type] = Field\n\n return Field\n}\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n leftAddon?: React.ReactNode\n rightAddon?: React.ReactNode\n}\n\nexport const InputField = registerFieldType<InputFieldProps>(\n 'text',\n forwardRef(({ type = 'text', leftAddon, rightAddon, size, ...rest }, ref) => {\n const input = <Input type={type} size={size} {...rest} ref={ref} />\n if (leftAddon || rightAddon) {\n return (\n <InputGroup size={size}>\n {leftAddon}\n {input}\n {rightAddon}\n </InputGroup>\n )\n }\n return input\n })\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = registerFieldType<NumberInputFieldProps>(\n 'number',\n NumberInput,\n {\n isControlled: true,\n }\n)\n\nexport const PasswordInputField = registerFieldType<PasswordInputProps>(\n 'password',\n forwardRef((props, ref) => <PasswordInput ref={ref} {...props} />)\n)\n\nexport const TextareaField = registerFieldType<TextareaProps>(\n 'textarea',\n Textarea\n)\n\nexport const SwitchField = registerFieldType<SwitchProps>(\n 'switch',\n forwardRef(({ type, value, ...rest }, ref) => {\n return <Switch isChecked={!!value} {...rest} ref={ref} />\n }),\n {\n isControlled: true,\n }\n)\n\nexport const SelectField = registerFieldType<SelectProps>('select', Select, {\n isControlled: true,\n})\n\nexport const CheckboxField = registerFieldType<CheckboxProps>(\n 'checkbox',\n forwardRef(({ 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 const RadioField = registerFieldType<RadioInputProps>(\n 'radio',\n RadioInput,\n {\n isControlled: true,\n }\n)\n\nexport const NativeSelectField = registerFieldType<NativeSelectProps>(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\n\nexport interface PinFieldProps extends Omit<UsePinInputProps, 'type'> {\n pinLength?: number\n pinType?: 'alphanumeric' | 'number'\n spacing?: SystemProps['margin']\n}\n\nexport const PinField = registerFieldType<PinFieldProps>(\n 'pin',\n forwardRef((props, ref) => {\n const { pinLength = 4, pinType, spacing, ...inputProps } = props\n\n const inputs: React.ReactNode[] = []\n for (let i = 0; i < pinLength; i++) {\n inputs.push(<PinInputField key={i} ref={ref} />)\n }\n\n return (\n <HStack spacing={spacing}>\n <PinInput {...inputProps} type={pinType}>\n {inputs}\n </PinInput>\n </HStack>\n )\n }),\n {\n isControlled: true,\n }\n)\n\nconst fieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n number: NumberInputField,\n password: PasswordInputField,\n textarea: TextareaField,\n switch: SwitchField,\n checkbox: CheckboxField,\n radio: RadioField,\n pin: PinField,\n select: SelectField,\n 'native-select': NativeSelectField,\n}\n\ntype FieldTypes = typeof fieldTypes\n\ntype FieldType<Props = any> = React.ElementType<Props>\n\ntype TypeProps<P extends FieldType, T> = React.ComponentPropsWithoutRef<P> & {\n type: T\n}\n\ntype FieldTypeProps =\n | {\n [Property in keyof FieldTypes]: TypeProps<FieldTypes[Property], Property>\n }[keyof FieldTypes]\n | { type?: string }\n","import { FieldProps } from './field'\n\nimport { get } from '@chakra-ui/utils'\n\nexport type FieldResolver = {\n getFields(): FieldProps[]\n getNestedFields(name: string): FieldProps[]\n}\n\ninterface SchemaField extends FieldProps {\n items?: SchemaField[]\n properties?: Record<string, SchemaField>\n}\n\nexport type ObjectSchema = Record<string, SchemaField>\n\nconst mapFields = (schema: ObjectSchema): FieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, { items, label, title, ...field }]) => {\n return {\n ...field,\n name,\n label: label || title, // json schema compatibility\n }\n })\n\nexport const objectFieldResolver = (schema: ObjectSchema): FieldResolver => {\n const getFields = () => {\n return mapFields(schema)\n }\n const getNestedFields = (name: string) => {\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 * as React from 'react'\n\nimport { chakra, HTMLChakraProps, forwardRef } from '@chakra-ui/react'\nimport { cx, MaybeFunction, runIfFn, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n useForm,\n FormProvider,\n UseFormProps,\n UseFormReturn,\n FieldValues,\n SubmitHandler,\n SubmitErrorHandler,\n ResolverOptions,\n ResolverResult,\n ChangeHandler,\n WatchObserver,\n UnpackNestedValue,\n} from 'react-hook-form'\nimport { objectFieldResolver, FieldResolver } from './field-resolver'\nimport { MaybeRenderProp } from '@chakra-ui/react-utils'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\ninterface FormOptions<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n> {\n /**\n * The form schema, currently supports Yup schema only.\n */\n schema?: any\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 * Ref on the HTMLFormElement.\n */\n formRef?: React.RefObject<HTMLFormElement>\n /**\n * The form children, can be a render prop or a ReactNode.\n */\n children?: MaybeRenderProp<UseFormReturn<TFieldValues, TContext>>\n}\n\n// @todo Figure out how to pass down FieldValues to all Field components, if at all possible.\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n> extends UseFormProps<TFieldValues, TContext>,\n Omit<\n HTMLChakraProps<'form'>,\n 'children' | 'onChange' | 'onSubmit' | 'onError'\n >,\n FormOptions<TFieldValues, TContext> {}\n\nexport const Form = forwardRef(\n <\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n >(\n props: FormProps<TFieldValues, TContext>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues, TContext>>\n ) => {\n const {\n mode = 'all',\n resolver,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n schema,\n defaultValues,\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 reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n }\n\n if (schema && !resolver) {\n form.resolver = Form.getResolver?.<TFieldValues, TContext>(schema)\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(ref, () => methods, [ref, 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 return (\n <FormProvider {...methods}>\n <chakra.form\n ref={formRef}\n onSubmit={handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('saas-form', props.className)}\n >\n {runIfFn(children, methods)}\n </chakra.form>\n </FormProvider>\n )\n }\n) as (<TFieldValues extends FieldValues, TContext extends object = object>(\n props: FormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getResolver?: GetResolver\n getFieldResolver: GetFieldResolver\n}\n\nForm.getFieldResolver = objectFieldResolver\n\nif (__DEV__) {\n Form.displayName = 'Form'\n}\n\nexport type GetResolver = <\n TFieldValues extends FieldValues,\n TContext extends object\n>(\n schema: any\n) => (\n values: UnpackNestedValue<TFieldValues>,\n context: TContext | undefined,\n options: ResolverOptions<TFieldValues>\n) => Promise<ResolverResult<TFieldValues>>\n\nexport type GetFieldResolver = (schema: any) => FieldResolver\n","import * as React from 'react'\n\nimport { chakra, SimpleGrid, SimpleGridProps, useTheme } from '@chakra-ui/react'\nimport { cx, __DEV__ } from '@chakra-ui/utils'\n\nexport type FormLayoutProps = SimpleGridProps\n\ninterface FormLayoutItemProps {\n children: React.ReactNode\n}\n\nconst FormLayoutItem: React.FC<FormLayoutItemProps> = ({ children }) => {\n return <chakra.div>{children}</chakra.div>\n}\n\nif (__DEV__) {\n FormLayoutItem.displayName = 'FormLayoutItem'\n}\n\n/**\n * FormLayout\n *\n * Renders form items in a `SimpleGrid`\n * @see https://chakra-ui.com/docs/layout/simple-grid\n */\nexport const FormLayout = ({ children, ...props }: FormLayoutProps) => {\n const theme = useTheme()\n\n const defaultProps = theme.components?.FormLayout?.defaultProps ?? {\n spacing: 4,\n }\n\n const gridProps = {\n ...defaultProps,\n ...props,\n }\n\n return (\n <SimpleGrid\n {...gridProps}\n className={cx('saas-form__layout', props.className)}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return <FormLayoutItem>{child}</FormLayoutItem>\n }\n return child\n })}\n </SimpleGrid>\n )\n}\n\nif (__DEV__) {\n FormLayout.displayName = 'FormLayout'\n}\n","import * as React from 'react'\n\nexport const mapNestedFields = (name: string, children: React.ReactNode) => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child.props.name) {\n return React.cloneElement(child, {\n ...child.props,\n name: `${name}.${child.props.name}`,\n })\n }\n return child\n })\n}\n","import * as React from 'react'\nimport {\n useFieldArray,\n useFormContext,\n UseFieldArrayReturn,\n} from 'react-hook-form'\n\nimport { createContext } from '@chakra-ui/react-utils'\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 /**\n * The field name\n */\n name: string\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 const context = useFieldArray({\n control,\n name,\n keyName,\n })\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 { chakra, ResponsiveValue, forwardRef } from '@chakra-ui/system'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { AddIcon, MinusIcon } from '@chakra-ui/icons'\nimport { IconButton, ButtonProps } from '@saas-ui/button'\n\nimport { FormLayout, FormLayoutProps } from './layout'\nimport { BaseField, FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nimport {\n useArrayField,\n useArrayFieldRow,\n useArrayFieldContext,\n ArrayFieldProvider,\n ArrayFieldOptions,\n ArrayFieldRowProvider,\n useArrayFieldRowContext,\n useArrayFieldRemoveButton,\n useArrayFieldAddButton,\n UseArrayFieldReturn,\n} from './use-array-field'\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\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\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The fields\n */\n children: React.ReactNode\n}\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\nif (__DEV__) {\n ArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n}\n\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\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 __css={styles}>{children}</chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n}\n\nexport const ArrayFieldRemoveButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<MinusIcon />}\n aria-label=\"Remove row\"\n {...useArrayFieldRemoveButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n}\n\nexport const ArrayFieldAddButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<AddIcon />}\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n}\n\nexport interface ArrayFieldProps\n extends ArrayFieldOptions,\n Omit<FieldProps, 'defaultValue'> {}\n\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>\n {(fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n ))}\n </>\n )}\n </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\nif (__DEV__) {\n ArrayField.displayName = 'ArrayField'\n}\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\nif (__DEV__) {\n ArrayFieldRows.displayName = 'ArrayFieldRows'\n}\n\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>\n ) => {\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min,\n 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}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n }\n)\n\nif (__DEV__) {\n ArrayFieldContainer.displayName = 'ArrayFieldContainer'\n}\n","import * as React from 'react'\nimport {\n FormControl,\n FormLabel,\n FormLabelProps,\n ResponsiveValue,\n useStyleConfig,\n} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { FormLayout } from './layout'\nimport { FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps extends FieldProps {\n name: string\n children: React.ReactNode\n columns?: ResponsiveValue<number>\n spacing?: ResponsiveValue<string | number>\n}\n\nexport const FormLegend = (props: FormLabelProps) => {\n const styles = useStyleConfig('FormLegend')\n return <FormLabel as=\"legend\" sx={styles} {...props} />\n}\n\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const { name, label, hideLabel, children, columns, spacing, ...fieldProps } =\n props\n\n return (\n <FormControl name={name} as=\"fieldset\" {...fieldProps}>\n <FormLegend display={hideLabel ? 'none' : 'block'}>{label}</FormLegend>\n <FormLayout columns={columns} gridGap={spacing}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n ObjectField.displayName = 'ObjectField'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form } from './form'\nimport { FormLayout } from './layout'\nimport { Field, FieldProps } from './field'\n\nimport { ArrayField } from './array-field'\nimport { ObjectField } from './object-field'\nimport { FieldResolver } from './field-resolver'\nimport { useFormContext } from 'react-hook-form'\n\nexport interface FieldsProps {\n schema: any\n fieldResolver?: FieldResolver\n focusFirstField?: boolean\n}\n\nconst mapNestedFields = (resolver: FieldResolver, name: string) => {\n return resolver\n .getNestedFields(name)\n ?.map(\n ({ name, type, ...nestedFieldProps }: FieldProps, i): React.ReactNode => (\n <Field key={name || i} name={name} type={type} {...nestedFieldProps} />\n )\n )\n}\n\nexport const Fields: React.FC<FieldsProps> = ({\n schema,\n fieldResolver,\n focusFirstField,\n ...props\n}) => {\n const resolver = React.useMemo(\n () => fieldResolver || Form.getFieldResolver(schema),\n [schema, fieldResolver]\n )\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 return (\n <FormLayout {...props}>\n {fields.map(\n ({\n name,\n type,\n defaultValue,\n ...fieldProps\n }: FieldProps): 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 <Field key={name} name={name} type={type} {...fieldProps} />\n }\n )}\n </FormLayout>\n )\n}\n\nif (__DEV__) {\n Fields.displayName = 'Fields'\n}\n","import * as React from 'react'\n\nimport { useFormContext } from 'react-hook-form'\n\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { __DEV__ } from '@chakra-ui/utils'\n\nexport interface SubmitButtonProps extends ButtonProps {\n /**\n * Disable the submit button if the form is untouched.\n *\n * Change the default behavior by updating\n * `SubmitButton.defaultProps.disableIfUntouched`\n */\n disableIfUntouched?: boolean\n /**\n * Disable the submit button if the form is invalid.\n *\n * Change the default behavior by updating\n * `SubmitButton.defaultProps.disableIfInvalid`\n */\n disableIfInvalid?: boolean\n}\n\nexport const SubmitButton = React.forwardRef<\n HTMLButtonElement,\n SubmitButtonProps\n>((props, ref) => {\n const {\n children,\n disableIfUntouched,\n disableIfInvalid,\n isDisabled: isDisabledProp,\n isLoading,\n ...rest\n } = props\n const { formState } = useFormContext()\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid) ||\n isDisabledProp\n\n return (\n <Button\n {...rest}\n ref={ref}\n variant=\"primary\"\n type=\"submit\"\n isLoading={formState.isSubmitting || isLoading}\n isDisabled={isDisabled}\n >\n {children}\n </Button>\n )\n})\n\nSubmitButton.defaultProps = {\n label: 'Submit',\n disableIfUntouched: false,\n disableIfInvalid: false,\n}\n\nif (__DEV__) {\n SubmitButton.displayName = 'SubmitButton'\n}\n","import * as React from 'react'\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\nimport { forwardRef } from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form, FormProps } from './form'\nimport { FormLayout } from './layout'\nimport { Fields } from './fields'\nimport { SubmitButton } from './submit-button'\nimport { FieldResolver } from '.'\n\ninterface AutoFormOptions {\n /**\n * The submit button label.\n * Pass `null` to render no submit button.\n */\n submitLabel?: React.ReactNode\n /**\n * The schema.\n * Supports object schema, Zod, Yup or Ajv (JSON Schema).\n * @see https://www.saas-ui.dev/docs/forms/auto-form\n */\n schema: any\n /**\n * The field resolver.\n */\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema' | 'children'>,\n AutoFormOptions {\n children?: React.ReactNode\n}\n\nexport const AutoForm = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: AutoFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const {\n schema,\n submitLabel = 'Submit',\n fieldResolver,\n children,\n ...rest\n } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton>{submitLabel}</SubmitButton>}\n {children}\n </FormLayout>\n </Form>\n )\n }\n) as (<TFieldValues extends FieldValues>(\n props: AutoFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getFieldResolver?: (schema: any) => FieldResolver\n}\n\nif (__DEV__) {\n AutoForm.displayName = 'AutoForm'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport {\n useFormContext,\n useWatch,\n FieldValues,\n UseFormReturn,\n} from 'react-hook-form'\n\nexport interface DisplayIfProps<\n TFieldValues extends FieldValues = FieldValues\n> {\n children: React.ReactElement\n name: string\n defaultValue?: unknown\n isDisabled?: boolean\n isExact?: boolean\n condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean\n}\n\nexport const DisplayIf = <TFieldValues extends FieldValues = FieldValues>({\n children,\n name,\n defaultValue,\n isDisabled,\n isExact,\n condition = (value) => !!value,\n}: DisplayIfProps<TFieldValues>) => {\n const value = useWatch({\n name,\n defaultValue,\n disabled: isDisabled,\n exact: isExact,\n })\n const context = useFormContext<TFieldValues>()\n return condition(value, context) ? children : null\n}\n\nif (__DEV__) {\n DisplayIf.displayName = 'DisplayIf'\n}\n","import * as React from 'react'\nimport { FieldValues, SubmitHandler } from 'react-hook-form'\nimport { createContext, MaybeRenderProp } from '@chakra-ui/react-utils'\nimport {\n useStepper,\n useStep,\n UseStepperProps,\n UseStepperReturn,\n} from '@saas-ui/stepper'\n\nexport interface StepState {\n name: string\n schema?: any\n resolver?: any\n isActive?: boolean\n isCompleted?: boolean\n onSubmit?: FormStepSubmitHandler\n}\n\nexport type FormStepSubmitHandler<\n TFieldValues extends FieldValues = FieldValues\n> = (data: TFieldValues, stepper: UseStepperReturn) => Promise<void>\n\nexport interface StepFormContext extends UseStepperReturn {\n updateStep(state: StepState): void\n steps: Record<string, StepState>\n}\n\nexport const [StepFormProvider, useStepFormContext] =\n createContext<StepFormContext>({\n name: 'StepFormContext',\n errorMessage:\n 'useStepFormContext: `context` is undefined. Seems you forgot to wrap step form components in `<StepForm />`',\n })\n\nimport { FormProps } from './form'\n\nexport interface UseStepFormProps<\n TFieldValues extends FieldValues = FieldValues\n> extends Omit<UseStepperProps, 'onChange'>,\n Omit<FormProps<TFieldValues>, 'children'> {\n children: MaybeRenderProp<UseStepFormReturn<TFieldValues>>\n}\n\nexport interface UseStepFormReturn<\n TFieldValues extends FieldValues = FieldValues\n> extends UseStepperReturn {\n getFormProps(): {\n onSubmit: SubmitHandler<TFieldValues>\n schema?: any\n resolver?: any\n }\n updateStep(step: any): void\n steps: Record<string, any>\n}\n\nexport function useStepForm<TFieldValues extends FieldValues = FieldValues>(\n props: UseStepFormProps<TFieldValues>\n): UseStepFormReturn<TFieldValues> {\n const { onChange, ...rest } = props\n const stepper = useStepper(rest)\n\n const { activeStep, isLastStep, nextStep } = stepper\n\n const [steps, updateSteps] = React.useState<Record<string, StepState>>({})\n\n const onSubmitStep: SubmitHandler<TFieldValues> = React.useCallback(\n async (data) => {\n try {\n const step = steps[activeStep]\n\n if (isLastStep) {\n await props.onSubmit?.(data)\n\n updateStep({\n ...step,\n isCompleted: true,\n })\n\n nextStep() // show completed step\n return\n }\n\n await step.onSubmit?.(data, stepper)\n\n nextStep()\n } catch (e) {\n // Step submission failed.\n }\n },\n [steps, activeStep, isLastStep]\n )\n\n const getFormProps = React.useCallback(() => {\n const step = steps[activeStep]\n return {\n onSubmit: onSubmitStep,\n schema: step?.schema,\n resolver: step?.resolver,\n }\n }, [steps, onSubmitStep, activeStep])\n\n const updateStep = React.useCallback(\n (step: StepState) => {\n updateSteps((steps) => {\n return {\n ...steps,\n [step.name]: step,\n }\n })\n },\n [steps]\n )\n\n return {\n getFormProps,\n updateStep,\n steps,\n ...stepper,\n }\n}\n\nexport interface UseFormStepProps {\n name: string\n schema?: any\n resolver?: any\n onSubmit?: FormStepSubmitHandler\n}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver, onSubmit } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver, onSubmit })\n }, [name, schema])\n\n return {\n ...step,\n ...(steps[name] || { name, schema }),\n }\n}\n","import * as React from 'react'\n\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\n\nimport { chakra, HTMLChakraProps, ThemingProps } from '@chakra-ui/system'\n\nimport { callAllHandlers, runIfFn, cx, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n StepperProvider,\n StepperSteps,\n StepperStepsProps,\n StepperStep,\n useStepperContext,\n StepperContainer,\n StepperProps,\n} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n FormStepSubmitHandler,\n} from './use-step-form'\n\nexport interface StepFormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseStepFormProps<TFieldValues> {}\n\nexport const StepForm = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: StepFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { children, ...rest } = props\n\n const stepper = useStepForm<TFieldValues>(props)\n\n const { getFormProps, ...ctx } = stepper\n\n const context = React.useMemo(() => ctx, [ctx])\n\n return (\n <StepperProvider value={context}>\n <StepFormProvider value={context}>\n <Form ref={ref} {...rest} {...getFormProps()}>\n {runIfFn(children, stepper)}\n </Form>\n </StepFormProvider>\n </StepperProvider>\n )\n }\n) as <TFieldValues extends FieldValues>(\n props: StepFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement\n\nexport interface FormStepOptions {\n /**\n * The step name\n */\n name: string\n /**\n * Schema\n */\n schema?: any\n /**\n * Hook Form Resolver\n */\n resolver?: any\n}\n\nexport interface FormStepperProps\n extends StepperStepsProps,\n ThemingProps<'Stepper'> {}\n\nexport const FormStepper: React.FC<FormStepperProps> = (props) => {\n const { activeIndex, setIndex } = useStepperContext()\n\n const { children, orientation, variant, colorScheme, size, ...rest } = props\n\n const elements = React.Children.map(children, (child) => {\n if (\n React.isValidElement<FormStepProps>(child) &&\n child?.type === FormStep\n ) {\n const { isCompleted } = useFormStep(child.props) // Register this step\n return (\n <StepperStep\n name={child.props.name}\n title={child.props.title}\n isCompleted={isCompleted}\n {...rest}\n >\n {child.props.children}\n </StepperStep>\n )\n }\n return child\n })\n\n const onChange = React.useCallback((i: number) => {\n setIndex(i)\n }, [])\n\n return (\n <StepperContainer\n orientation={orientation}\n step={activeIndex}\n variant={variant}\n colorScheme={colorScheme}\n size={size}\n onChange={onChange}\n >\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StepperContainer>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n Omit<HTMLChakraProps<'div'>, 'onSubmit'> {\n onSubmit?: FormStepSubmitHandler\n}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, onSubmit, ...rest } =\n props\n const step = useFormStep({ name, schema, resolver, onSubmit })\n\n const { isActive } = step\n\n return isActive ? (\n <chakra.div {...rest} className={cx('saas-form__step', className)}>\n {children}\n </chakra.div>\n ) : null\n}\n\nif (__DEV__) {\n FormStep.displayName = 'FormStep'\n}\n\nexport const PrevButton: React.FC<ButtonProps> = (props) => {\n const { isFirstStep, isCompleted, prevStep } = useStepperContext()\n\n return (\n <Button\n isDisabled={isFirstStep || isCompleted}\n label=\"Back\"\n {...props}\n className={cx('saas-form__prev-button', props.className)}\n onClick={callAllHandlers(props.onClick, prevStep)}\n />\n )\n}\n\nif (__DEV__) {\n PrevButton.displayName = 'PrevButton'\n}\n\nexport interface NextButtonProps extends ButtonProps {\n submitLabel?: string\n}\n\nexport const NextButton: React.FC<NextButtonProps> = (props) => {\n const { label = 'Next', submitLabel = 'Complete', ...rest } = props\n const { isLastStep, isCompleted } = useStepperContext()\n\n return (\n <SubmitButton\n {...rest}\n isDisabled={isCompleted}\n className={cx('saas-form__next-button', props.className)}\n >\n {isLastStep || isCompleted ? submitLabel : label}\n </SubmitButton>\n )\n}\n\nif (__DEV__) {\n NextButton.displayName = 'NextButton'\n}\n","import {\n FieldValues,\n useFormContext,\n UseFormReturn,\n useWatch,\n} from 'react-hook-form'\n\nexport interface WatchFieldProps<\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues\n> {\n name: string\n defaultValue?: Value\n isDisabled?: boolean\n isExact?: boolean\n children: (\n value: Value,\n form: UseFormReturn<TFieldValues>\n ) => React.ReactElement | void\n}\n\nexport const WatchField = <\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues\n>(\n props: WatchFieldProps<Value, TFieldValues>\n) => {\n const { name, defaultValue, isDisabled, isExact } = props\n const form = useFormContext<TFieldValues>()\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"],"names":["_excluded","DisplayField","_ref","name","label","props","React","createElement","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","_ref2","getValues","useFormContext","_excluded2","_excluded3","_excluded4","_excluded5","_excluded6","_excluded7","_excluded8","_excluded9","_excluded10","inputTypes","BaseField","help","hideLabel","children","controlProps","formState","errors","getError","_extends","isInvalid","error","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","_props$type","type","withControlledInput","InputComponent","rules","_ref3","inputProps","_objectWithoutPropertiesLoose","_useFormContext2","Controller","control","render","_ref4","_ref4$field","field","onChange","callAllHandlers","onBlur","useMergeRefs","withUncontrolledInput","_ref5","register","_register","registerFieldType","component","options","id","isDisabled","isReadOnly","isRequired","inputRules","required","undefined","createField","isControlled","split","map","part","charAt","toUpperCase","slice","join","InputField","_ref6","_ref6$type","leftAddon","rightAddon","size","rest","input","Input","InputGroup","NumberInput","PasswordInputField","PasswordInput","TextareaField","Textarea","SwitchField","_ref7","value","Switch","isChecked","SelectField","Select","_ref8","Checkbox","RadioField","RadioInput","NativeSelectField","NativeSelect","PinField","pinLength","_props$pinLength","pinType","spacing","inputs","i","push","PinInputField","key","HStack","PinInput","schema","Object","entries","title","_ref$","objectFieldResolver","getFields","mapFields","getNestedFields","get","items","_field$items","properties","Form","mode","_props$mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","useEffect","subscription","watch","_subscription","unsubscribe","FormProvider","chakra","className","cx","runIfFn","getFieldResolver","FormLayoutItem","div","FormLayout","_theme$components$For","_theme$components","_theme$components$For2","gridProps","theme","useTheme","components","defaultProps","SimpleGrid","Children","child","isValidElement","mapNestedFields","cloneElement","createContext","ArrayFieldProvider","useArrayFieldContext","_createContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","_ref$defaultValue","defaultValue","keyName","min","max","_useFormContext","useFieldArray","useArrayFieldRow","index","clearErrors","remove","_useArrayFieldContext","fields","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","_useArrayFieldRowCont","_useArrayFieldContext2","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","rowFieldsProps","ArrayFieldRowContainer","ArrayFieldRowFields","ArrayFieldRemoveButton","layoutProps","flex","mr","context","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","Fragment","fieldProps","FormLegend","styles","useStyleConfig","as","sx","columns","gridGap","ObjectField","_resolver$getNestedFi","nestedFieldProps","Fields","fieldResolver","focusFirstField","useMemo","_fields$","setFocus","SubmitButton","disableIfUntouched","disableIfInvalid","isDisabledProp","isLoading","Button","variant","isSubmitting","isDirty","isValid","AutoForm","submitLabel","_props$submitLabel","DisplayIf","condition","_ref$condition","useWatch","disabled","exact","isExact","errorMessage","StepFormProvider","useStepFormContext","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","_React$useState","useState","steps","updateSteps","onSubmitStep","data","_exit","Promise","resolve","step","updateStep","isCompleted","_temp","then","_temp2","_catch","getFormProps","_extends2","useStep","_useStepFormContext","StepForm","ctx","StepperProvider","FormStep","useFormStep","isActive","PrevButton","useStepperContext","prevStep","isFirstStep","_useStepperContext2","NextButton","_props$label","_useStepperContext3","activeIndex","setIndex","_useStepperContext","orientation","colorScheme","elements","StepperStep","_useFormStep","StepperContainer","StepperSteps"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/display-field.tsx","../src/field.tsx","../src/field-resolver.ts","../src/form.tsx","../src/layout.tsx","../src/utils.ts","../src/use-array-field.tsx","../src/array-field.tsx","../src/object-field.tsx","../src/fields.tsx","../src/submit-button.tsx","../src/auto-form.tsx","../src/display-if.tsx","../src/use-step-form.tsx","../src/step-form.tsx","../src/watch-field.tsx"],"sourcesContent":["import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { useFormContext } from 'react-hook-form'\n\nimport {\n Text,\n FormControl,\n FormControlProps,\n FormLabel,\n} from '@chakra-ui/react'\n\nimport { FieldProps } from './field'\n\nexport interface DisplayFieldProps\n extends FormControlProps,\n Omit<FieldProps, 'type' | 'label'> {}\n\nexport const DisplayField: React.FC<DisplayFieldProps> = ({\n name,\n label,\n placeholder,\n ...props\n}) => {\n return (\n <FormControl {...props}>\n {label ? <FormLabel htmlFor={name}>{label}</FormLabel> : null}\n <Text fontSize=\"md\">\n <FormValue name={name} />\n </Text>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n DisplayField.displayName = 'DisplayField'\n}\n\nexport const FormValue: React.FC<{ name: string }> = ({ name }) => {\n const { getValues } = useFormContext()\n return getValues(name) || null\n}\n\nif (__DEV__) {\n FormValue.displayName = 'FormValue'\n}\n","import * as React from 'react'\nimport {\n useFormContext,\n FormState,\n Controller,\n get,\n RegisterOptions,\n FieldValues,\n FieldPath,\n} from 'react-hook-form'\n\nimport {\n forwardRef,\n Box,\n FormControl,\n FormControlProps,\n FormLabel,\n FormHelperText,\n FormErrorMessage,\n Input,\n Textarea,\n Checkbox,\n Switch,\n useMergeRefs,\n InputGroup,\n InputProps,\n TextareaProps,\n SwitchProps,\n CheckboxProps,\n PinInputField,\n HStack,\n PinInput,\n UsePinInputProps,\n SystemProps,\n} from '@chakra-ui/react'\nimport { __DEV__, FocusableElement, callAllHandlers } from '@chakra-ui/utils'\n\nimport { NumberInput, NumberInputProps } from '@saas-ui/number-input'\nimport { PasswordInput, PasswordInputProps } from '@saas-ui/password-input'\nimport { RadioInput, RadioInputProps } from '@saas-ui/radio'\n\nimport {\n Select,\n SelectProps,\n NativeSelect,\n NativeSelectProps,\n} from '@saas-ui/select'\n\nexport interface Option {\n value: string\n label?: string\n [key: string]: unknown\n}\n\nexport type FieldRules = Pick<\n RegisterOptions,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength' | 'pattern'\n>\n\nexport interface FieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<FormControlProps, 'label' | 'type'> {\n /**\n * The field name\n */\n name: TName\n /**\n * The field label\n */\n label?: string\n /**\n * Hide the field label\n */\n hideLabel?: boolean\n /**\n * Field help text\n */\n help?: string\n /**\n * React hook form rules\n */\n rules?: Omit<\n RegisterOptions<TFieldValues, TName>,\n 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'\n >\n /**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\n type?: string\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<string, React.FC<any>> = {}\n\nconst defaultInputType = 'text'\n\nconst getInput = (type: string) => {\n return inputTypes[type] || inputTypes[defaultInputType]\n}\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 BaseField: React.FC<FieldProps> = (props) => {\n const { name, label, help, hideLabel, children, ...controlProps } = props\n\n const { formState } = useFormContext()\n\n const error = getError(name, formState)\n\n return (\n <FormControl {...controlProps} isInvalid={!!error}>\n {label && !hideLabel ? <FormLabel>{label}</FormLabel> : null}\n <Box>\n {children}\n {help && !error?.message ? (\n <FormHelperText>{help}</FormHelperText>\n ) : null}\n {error?.message && (\n <FormErrorMessage>{error?.message}</FormErrorMessage>\n )}\n </Box>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n BaseField.displayName = 'BaseField'\n}\n\nexport type As<Props = any> = React.ElementType<Props>\n\nexport type PropsOf<T extends As> = React.ComponentPropsWithoutRef<T> & {\n type?: FieldTypes\n}\n\n/**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> | FieldTypeProps,\n ref: React.ForwardedRef<FocusableElement>\n ) => {\n const { type = defaultInputType } = props\n const InputComponent = getInput(type)\n\n return <InputComponent ref={ref} {...props} />\n }\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> &\n FieldTypeProps & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement) & {\n displayName?: string\n}\n\ninterface CreateFieldProps {\n displayName: string\n hideLabel?: boolean\n BaseField: React.FC<any>\n}\n\nconst createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, BaseField }: CreateFieldProps\n) => {\n const Field = forwardRef((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n rules,\n ...inputProps\n } = props\n\n const inputRules = {\n required: isRequired,\n ...rules,\n }\n\n return (\n <BaseField\n id={id}\n name={name}\n label={label}\n help={help}\n hideLabel={hideLabel}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { control } = useFormContext()\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={callAllHandlers(inputProps.onChange, field.onChange)}\n onBlur={callAllHandlers(inputProps.onBlur, field.onBlur)}\n ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAllHandlers(inputProps.onChange, field.onChange)}\n onBlur={callAllHandlers(inputProps.onBlur, field.onBlur)}\n ref={useMergeRefs(ref, _ref)}\n />\n )\n }\n )\n}\n\nexport interface RegisterFieldTypeOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\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 registerFieldType = <T extends object>(\n type: string,\n component: React.FC<T>,\n options?: RegisterFieldTypeOptions\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(component)\n } else {\n InputComponent = withUncontrolledInput(component)\n }\n\n const Field = createField(InputComponent, {\n displayName: `${type\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')}Field`,\n hideLabel: options?.hideLabel,\n BaseField: options?.BaseField || BaseField,\n }) as React.FC<T & FieldProps>\n\n inputTypes[type] = Field\n\n return Field\n}\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n leftAddon?: React.ReactNode\n rightAddon?: React.ReactNode\n}\n\nexport const InputField = registerFieldType<InputFieldProps>(\n 'text',\n forwardRef(({ type = 'text', leftAddon, rightAddon, size, ...rest }, ref) => {\n const input = <Input type={type} size={size} {...rest} ref={ref} />\n if (leftAddon || rightAddon) {\n return (\n <InputGroup size={size}>\n {leftAddon}\n {input}\n {rightAddon}\n </InputGroup>\n )\n }\n return input\n })\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = registerFieldType<NumberInputFieldProps>(\n 'number',\n NumberInput,\n {\n isControlled: true,\n }\n)\n\nexport const PasswordInputField = registerFieldType<PasswordInputProps>(\n 'password',\n forwardRef((props, ref) => <PasswordInput ref={ref} {...props} />)\n)\n\nexport const TextareaField = registerFieldType<TextareaProps>(\n 'textarea',\n Textarea\n)\n\nexport const SwitchField = registerFieldType<SwitchProps>(\n 'switch',\n forwardRef(({ type, value, ...rest }, ref) => {\n return <Switch isChecked={!!value} {...rest} ref={ref} />\n }),\n {\n isControlled: true,\n }\n)\n\nexport const SelectField = registerFieldType<SelectProps>('select', Select, {\n isControlled: true,\n})\n\nexport const CheckboxField = registerFieldType<CheckboxProps>(\n 'checkbox',\n forwardRef(({ 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 const RadioField = registerFieldType<RadioInputProps>(\n 'radio',\n RadioInput,\n {\n isControlled: true,\n }\n)\n\nexport const NativeSelectField = registerFieldType<NativeSelectProps>(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\n\nexport interface PinFieldProps extends Omit<UsePinInputProps, 'type'> {\n pinLength?: number\n pinType?: 'alphanumeric' | 'number'\n spacing?: SystemProps['margin']\n}\n\nexport const PinField = registerFieldType<PinFieldProps>(\n 'pin',\n forwardRef((props, ref) => {\n const { pinLength = 4, pinType, spacing, ...inputProps } = props\n\n const inputs: React.ReactNode[] = []\n for (let i = 0; i < pinLength; i++) {\n inputs.push(<PinInputField key={i} ref={ref} />)\n }\n\n return (\n <HStack spacing={spacing}>\n <PinInput {...inputProps} type={pinType}>\n {inputs}\n </PinInput>\n </HStack>\n )\n }),\n {\n isControlled: true,\n }\n)\n\nconst fieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n number: NumberInputField,\n password: PasswordInputField,\n textarea: TextareaField,\n switch: SwitchField,\n checkbox: CheckboxField,\n radio: RadioField,\n pin: PinField,\n select: SelectField,\n 'native-select': NativeSelectField,\n}\n\ntype FieldTypes = typeof fieldTypes\n\ntype FieldType<Props = any> = React.ElementType<Props>\n\ntype TypeProps<P extends FieldType, T> = React.ComponentPropsWithoutRef<P> & {\n type: T\n}\n\ntype FieldTypeProps =\n | {\n [Property in keyof FieldTypes]: TypeProps<FieldTypes[Property], Property>\n }[keyof FieldTypes]\n | { type?: string }\n","import { FieldProps } from './field'\n\nimport { get } from '@chakra-ui/utils'\n\nexport type FieldResolver = {\n getFields(): FieldProps[]\n getNestedFields(name: string): FieldProps[]\n}\n\ninterface SchemaField extends FieldProps {\n items?: SchemaField[]\n properties?: Record<string, SchemaField>\n}\n\nexport type ObjectSchema = Record<string, SchemaField>\n\nconst mapFields = (schema: ObjectSchema): FieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, { items, label, title, ...field }]) => {\n return {\n ...field,\n name,\n label: label || title, // json schema compatibility\n }\n })\n\nexport const objectFieldResolver = (schema: ObjectSchema): FieldResolver => {\n const getFields = () => {\n return mapFields(schema)\n }\n const getNestedFields = (name: string) => {\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 * as React from 'react'\n\nimport { chakra, HTMLChakraProps, forwardRef } from '@chakra-ui/react'\nimport { cx, MaybeFunction, runIfFn, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n useForm,\n FormProvider,\n UseFormProps,\n UseFormReturn,\n FieldValues,\n SubmitHandler,\n SubmitErrorHandler,\n ResolverOptions,\n ResolverResult,\n ChangeHandler,\n WatchObserver,\n} from 'react-hook-form'\nimport { objectFieldResolver, FieldResolver } from './field-resolver'\nimport { MaybeRenderProp } from '@chakra-ui/react-utils'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\ninterface FormOptions<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n> {\n /**\n * The form schema, currently supports Yup schema only.\n */\n schema?: any\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 * Ref on the HTMLFormElement.\n */\n formRef?: React.RefObject<HTMLFormElement>\n /**\n * The form children, can be a render prop or a ReactNode.\n */\n children?: MaybeRenderProp<UseFormReturn<TFieldValues, TContext>>\n}\n\n// @todo Figure out how to pass down FieldValues to all Field components, if at all possible.\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n> extends UseFormProps<TFieldValues, TContext>,\n Omit<\n HTMLChakraProps<'form'>,\n 'children' | 'onChange' | 'onSubmit' | 'onError'\n >,\n FormOptions<TFieldValues, TContext> {}\n\nexport const Form = forwardRef(\n <\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n >(\n props: FormProps<TFieldValues, TContext>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues, TContext>>\n ) => {\n const {\n mode = 'all',\n resolver,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n schema,\n defaultValues,\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 reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n }\n\n if (schema && !resolver) {\n form.resolver = Form.getResolver?.<TFieldValues, TContext>(schema)\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(ref, () => methods, [ref, 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 return (\n <FormProvider {...methods}>\n <chakra.form\n ref={formRef}\n onSubmit={handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('saas-form', props.className)}\n >\n {runIfFn(children, methods)}\n </chakra.form>\n </FormProvider>\n )\n }\n) as (<TFieldValues extends FieldValues, TContext extends object = object>(\n props: FormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getResolver?: GetResolver\n getFieldResolver: GetFieldResolver\n}\n\nForm.getFieldResolver = objectFieldResolver\n\nif (__DEV__) {\n Form.displayName = 'Form'\n}\n\nexport type GetResolver = <\n TFieldValues extends FieldValues,\n TContext extends object\n>(\n schema: any\n) => (\n values: TFieldValues,\n context: TContext | undefined,\n options: ResolverOptions<TFieldValues>\n) => Promise<ResolverResult<TFieldValues>>\n\nexport type GetFieldResolver = (schema: any) => FieldResolver\n","import * as React from 'react'\n\nimport { chakra, SimpleGrid, SimpleGridProps, useTheme } from '@chakra-ui/react'\nimport { cx, __DEV__ } from '@chakra-ui/utils'\n\nexport type FormLayoutProps = SimpleGridProps\n\ninterface FormLayoutItemProps {\n children: React.ReactNode\n}\n\nconst FormLayoutItem: React.FC<FormLayoutItemProps> = ({ children }) => {\n return <chakra.div>{children}</chakra.div>\n}\n\nif (__DEV__) {\n FormLayoutItem.displayName = 'FormLayoutItem'\n}\n\n/**\n * FormLayout\n *\n * Renders form items in a `SimpleGrid`\n * @see https://chakra-ui.com/docs/layout/simple-grid\n */\nexport const FormLayout = ({ children, ...props }: FormLayoutProps) => {\n const theme = useTheme()\n\n const defaultProps = theme.components?.FormLayout?.defaultProps ?? {\n spacing: 4,\n }\n\n const gridProps = {\n ...defaultProps,\n ...props,\n }\n\n return (\n <SimpleGrid\n {...gridProps}\n className={cx('saas-form__layout', props.className)}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return <FormLayoutItem>{child}</FormLayoutItem>\n }\n return child\n })}\n </SimpleGrid>\n )\n}\n\nif (__DEV__) {\n FormLayout.displayName = 'FormLayout'\n}\n","import * as React from 'react'\n\nexport const mapNestedFields = (name: string, children: React.ReactNode) => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child.props.name) {\n return React.cloneElement(child, {\n ...child.props,\n name: `${name}.${child.props.name}`,\n })\n }\n return child\n })\n}\n","import * as React from 'react'\nimport {\n useFieldArray,\n useFormContext,\n UseFieldArrayReturn,\n} from 'react-hook-form'\n\nimport { createContext } from '@chakra-ui/react-utils'\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 /**\n * The field name\n */\n name: string\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 const context = useFieldArray({\n control,\n name,\n keyName,\n })\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 { chakra, ResponsiveValue, forwardRef } from '@chakra-ui/system'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { AddIcon, MinusIcon } from '@chakra-ui/icons'\nimport { IconButton, ButtonProps } from '@saas-ui/button'\n\nimport { FormLayout, FormLayoutProps } from './layout'\nimport { BaseField, FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nimport {\n useArrayField,\n useArrayFieldRow,\n useArrayFieldContext,\n ArrayFieldProvider,\n ArrayFieldOptions,\n ArrayFieldRowProvider,\n useArrayFieldRowContext,\n useArrayFieldRemoveButton,\n useArrayFieldAddButton,\n UseArrayFieldReturn,\n} from './use-array-field'\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\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\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The fields\n */\n children: React.ReactNode\n}\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\nif (__DEV__) {\n ArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n}\n\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\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 __css={styles}>{children}</chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n}\n\nexport const ArrayFieldRemoveButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<MinusIcon />}\n aria-label=\"Remove row\"\n {...useArrayFieldRemoveButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n}\n\nexport const ArrayFieldAddButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<AddIcon />}\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n}\n\nexport interface ArrayFieldProps\n extends ArrayFieldOptions,\n Omit<FieldProps, 'defaultValue'> {}\n\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>\n {(fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n ))}\n </>\n )}\n </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\nif (__DEV__) {\n ArrayField.displayName = 'ArrayField'\n}\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\nif (__DEV__) {\n ArrayFieldRows.displayName = 'ArrayFieldRows'\n}\n\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>\n ) => {\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min,\n 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}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n }\n)\n\nif (__DEV__) {\n ArrayFieldContainer.displayName = 'ArrayFieldContainer'\n}\n","import * as React from 'react'\nimport {\n FormControl,\n FormLabel,\n FormLabelProps,\n ResponsiveValue,\n useStyleConfig,\n} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { FormLayout } from './layout'\nimport { FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps extends FieldProps {\n name: string\n children: React.ReactNode\n columns?: ResponsiveValue<number>\n spacing?: ResponsiveValue<string | number>\n}\n\nexport const FormLegend = (props: FormLabelProps) => {\n const styles = useStyleConfig('FormLegend')\n return <FormLabel as=\"legend\" sx={styles} {...props} />\n}\n\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const { name, label, hideLabel, children, columns, spacing, ...fieldProps } =\n props\n\n return (\n <FormControl name={name} as=\"fieldset\" {...fieldProps}>\n <FormLegend display={hideLabel ? 'none' : 'block'}>{label}</FormLegend>\n <FormLayout columns={columns} gridGap={spacing}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n ObjectField.displayName = 'ObjectField'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form } from './form'\nimport { FormLayout } from './layout'\nimport { Field, FieldProps } from './field'\n\nimport { ArrayField } from './array-field'\nimport { ObjectField } from './object-field'\nimport { FieldResolver } from './field-resolver'\nimport { useFormContext } from 'react-hook-form'\n\nexport interface FieldsProps {\n schema: any\n fieldResolver?: FieldResolver\n focusFirstField?: boolean\n}\n\nconst mapNestedFields = (resolver: FieldResolver, name: string) => {\n return resolver\n .getNestedFields(name)\n ?.map(\n ({ name, type, ...nestedFieldProps }: FieldProps, i): React.ReactNode => (\n <Field key={name || i} name={name} type={type} {...nestedFieldProps} />\n )\n )\n}\n\nexport const Fields: React.FC<FieldsProps> = ({\n schema,\n fieldResolver,\n focusFirstField,\n ...props\n}) => {\n const resolver = React.useMemo(\n () => fieldResolver || Form.getFieldResolver(schema),\n [schema, fieldResolver]\n )\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 return (\n <FormLayout {...props}>\n {fields.map(\n ({\n name,\n type,\n defaultValue,\n ...fieldProps\n }: FieldProps): 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 <Field key={name} name={name} type={type} {...fieldProps} />\n }\n )}\n </FormLayout>\n )\n}\n\nif (__DEV__) {\n Fields.displayName = 'Fields'\n}\n","import * as React from 'react'\n\nimport { useFormContext } from 'react-hook-form'\n\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { __DEV__ } from '@chakra-ui/utils'\n\nexport interface SubmitButtonProps extends ButtonProps {\n /**\n * Disable the submit button if the form is untouched.\n *\n * Change the default behavior by updating\n * `SubmitButton.defaultProps.disableIfUntouched`\n */\n disableIfUntouched?: boolean\n /**\n * Disable the submit button if the form is invalid.\n *\n * Change the default behavior by updating\n * `SubmitButton.defaultProps.disableIfInvalid`\n */\n disableIfInvalid?: boolean\n}\n\nexport const SubmitButton = React.forwardRef<\n HTMLButtonElement,\n SubmitButtonProps\n>((props, ref) => {\n const {\n children,\n disableIfUntouched,\n disableIfInvalid,\n isDisabled: isDisabledProp,\n isLoading,\n ...rest\n } = props\n const { formState } = useFormContext()\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid) ||\n isDisabledProp\n\n return (\n <Button\n {...rest}\n ref={ref}\n variant=\"primary\"\n type=\"submit\"\n isLoading={formState.isSubmitting || isLoading}\n isDisabled={isDisabled}\n >\n {children}\n </Button>\n )\n})\n\nSubmitButton.defaultProps = {\n label: 'Submit',\n disableIfUntouched: false,\n disableIfInvalid: false,\n}\n\nif (__DEV__) {\n SubmitButton.displayName = 'SubmitButton'\n}\n","import * as React from 'react'\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\nimport { forwardRef } from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form, FormProps } from './form'\nimport { FormLayout } from './layout'\nimport { Fields } from './fields'\nimport { SubmitButton } from './submit-button'\nimport { FieldResolver } from '.'\n\ninterface AutoFormOptions {\n /**\n * The submit button label.\n * Pass `null` to render no submit button.\n */\n submitLabel?: React.ReactNode\n /**\n * The schema.\n * Supports object schema, Zod, Yup or Ajv (JSON Schema).\n * @see https://www.saas-ui.dev/docs/forms/auto-form\n */\n schema: any\n /**\n * The field resolver.\n */\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema' | 'children'>,\n AutoFormOptions {\n children?: React.ReactNode\n}\n\nexport const AutoForm = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: AutoFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const {\n schema,\n submitLabel = 'Submit',\n fieldResolver,\n children,\n ...rest\n } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton>{submitLabel}</SubmitButton>}\n {children}\n </FormLayout>\n </Form>\n )\n }\n) as (<TFieldValues extends FieldValues>(\n props: AutoFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getFieldResolver?: (schema: any) => FieldResolver\n}\n\nif (__DEV__) {\n AutoForm.displayName = 'AutoForm'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport {\n useFormContext,\n useWatch,\n FieldValues,\n UseFormReturn,\n} from 'react-hook-form'\n\nexport interface DisplayIfProps<\n TFieldValues extends FieldValues = FieldValues\n> {\n children: React.ReactElement\n name: string\n defaultValue?: unknown\n isDisabled?: boolean\n isExact?: boolean\n condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean\n}\n\nexport const DisplayIf = <TFieldValues extends FieldValues = FieldValues>({\n children,\n name,\n defaultValue,\n isDisabled,\n isExact,\n condition = (value) => !!value,\n}: DisplayIfProps<TFieldValues>) => {\n const value = useWatch({\n name,\n defaultValue,\n disabled: isDisabled,\n exact: isExact,\n })\n const context = useFormContext<TFieldValues>()\n return condition(value, context) ? children : null\n}\n\nif (__DEV__) {\n DisplayIf.displayName = 'DisplayIf'\n}\n","import * as React from 'react'\nimport { FieldValues, SubmitHandler } from 'react-hook-form'\nimport { createContext, MaybeRenderProp } from '@chakra-ui/react-utils'\nimport {\n useStepper,\n useStep,\n UseStepperProps,\n UseStepperReturn,\n} from '@saas-ui/stepper'\n\nexport interface StepState {\n name: string\n schema?: any\n resolver?: any\n isActive?: boolean\n isCompleted?: boolean\n onSubmit?: FormStepSubmitHandler\n}\n\nexport type FormStepSubmitHandler<\n TFieldValues extends FieldValues = FieldValues\n> = (data: TFieldValues, stepper: UseStepperReturn) => Promise<void>\n\nexport interface StepFormContext extends UseStepperReturn {\n updateStep(state: StepState): void\n steps: Record<string, StepState>\n}\n\nexport const [StepFormProvider, useStepFormContext] =\n createContext<StepFormContext>({\n name: 'StepFormContext',\n errorMessage:\n 'useStepFormContext: `context` is undefined. Seems you forgot to wrap step form components in `<StepForm />`',\n })\n\nimport { FormProps } from './form'\n\nexport interface UseStepFormProps<\n TFieldValues extends FieldValues = FieldValues\n> extends Omit<UseStepperProps, 'onChange'>,\n Omit<FormProps<TFieldValues>, 'children'> {\n children: MaybeRenderProp<UseStepFormReturn<TFieldValues>>\n}\n\nexport interface UseStepFormReturn<\n TFieldValues extends FieldValues = FieldValues\n> extends UseStepperReturn {\n getFormProps(): {\n onSubmit: SubmitHandler<TFieldValues>\n schema?: any\n resolver?: any\n }\n updateStep(step: any): void\n steps: Record<string, any>\n}\n\nexport function useStepForm<TFieldValues extends FieldValues = FieldValues>(\n props: UseStepFormProps<TFieldValues>\n): UseStepFormReturn<TFieldValues> {\n const { onChange, ...rest } = props\n const stepper = useStepper(rest)\n\n const { activeStep, isLastStep, nextStep } = stepper\n\n const [steps, updateSteps] = React.useState<Record<string, StepState>>({})\n\n const onSubmitStep: SubmitHandler<TFieldValues> = React.useCallback(\n async (data) => {\n try {\n const step = steps[activeStep]\n\n if (isLastStep) {\n await props.onSubmit?.(data)\n\n updateStep({\n ...step,\n isCompleted: true,\n })\n\n nextStep() // show completed step\n return\n }\n\n await step.onSubmit?.(data, stepper)\n\n nextStep()\n } catch (e) {\n // Step submission failed.\n }\n },\n [steps, activeStep, isLastStep]\n )\n\n const getFormProps = React.useCallback(() => {\n const step = steps[activeStep]\n return {\n onSubmit: onSubmitStep,\n schema: step?.schema,\n resolver: step?.resolver,\n }\n }, [steps, onSubmitStep, activeStep])\n\n const updateStep = React.useCallback(\n (step: StepState) => {\n updateSteps((steps) => {\n return {\n ...steps,\n [step.name]: step,\n }\n })\n },\n [steps]\n )\n\n return {\n getFormProps,\n updateStep,\n steps,\n ...stepper,\n }\n}\n\nexport interface UseFormStepProps {\n name: string\n schema?: any\n resolver?: any\n onSubmit?: FormStepSubmitHandler\n}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver, onSubmit } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver, onSubmit })\n }, [name, schema])\n\n return {\n ...step,\n ...(steps[name] || { name, schema }),\n }\n}\n","import * as React from 'react'\n\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\n\nimport { chakra, HTMLChakraProps, ThemingProps } from '@chakra-ui/system'\n\nimport { callAllHandlers, runIfFn, cx, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n StepperProvider,\n StepperSteps,\n StepperStepsProps,\n StepperStep,\n useStepperContext,\n StepperContainer,\n StepperProps,\n} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n FormStepSubmitHandler,\n} from './use-step-form'\n\nexport interface StepFormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseStepFormProps<TFieldValues> {}\n\nexport const StepForm = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: StepFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { children, ...rest } = props\n\n const stepper = useStepForm<TFieldValues>(props)\n\n const { getFormProps, ...ctx } = stepper\n\n const context = React.useMemo(() => ctx, [ctx])\n\n return (\n <StepperProvider value={context}>\n <StepFormProvider value={context}>\n <Form ref={ref} {...rest} {...getFormProps()}>\n {runIfFn(children, stepper)}\n </Form>\n </StepFormProvider>\n </StepperProvider>\n )\n }\n) as <TFieldValues extends FieldValues>(\n props: StepFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement\n\nexport interface FormStepOptions {\n /**\n * The step name\n */\n name: string\n /**\n * Schema\n */\n schema?: any\n /**\n * Hook Form Resolver\n */\n resolver?: any\n}\n\nexport interface FormStepperProps\n extends StepperStepsProps,\n ThemingProps<'Stepper'> {}\n\nexport const FormStepper: React.FC<FormStepperProps> = (props) => {\n const { activeIndex, setIndex } = useStepperContext()\n\n const { children, orientation, variant, colorScheme, size, ...rest } = props\n\n const elements = React.Children.map(children, (child) => {\n if (\n React.isValidElement<FormStepProps>(child) &&\n child?.type === FormStep\n ) {\n const { isCompleted } = useFormStep(child.props) // Register this step\n return (\n <StepperStep\n name={child.props.name}\n title={child.props.title}\n isCompleted={isCompleted}\n {...rest}\n >\n {child.props.children}\n </StepperStep>\n )\n }\n return child\n })\n\n const onChange = React.useCallback((i: number) => {\n setIndex(i)\n }, [])\n\n return (\n <StepperContainer\n orientation={orientation}\n step={activeIndex}\n variant={variant}\n colorScheme={colorScheme}\n size={size}\n onChange={onChange}\n >\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StepperContainer>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n Omit<HTMLChakraProps<'div'>, 'onSubmit'> {\n onSubmit?: FormStepSubmitHandler\n}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, onSubmit, ...rest } =\n props\n const step = useFormStep({ name, schema, resolver, onSubmit })\n\n const { isActive } = step\n\n return isActive ? (\n <chakra.div {...rest} className={cx('saas-form__step', className)}>\n {children}\n </chakra.div>\n ) : null\n}\n\nif (__DEV__) {\n FormStep.displayName = 'FormStep'\n}\n\nexport const PrevButton: React.FC<ButtonProps> = (props) => {\n const { isFirstStep, isCompleted, prevStep } = useStepperContext()\n\n return (\n <Button\n isDisabled={isFirstStep || isCompleted}\n label=\"Back\"\n {...props}\n className={cx('saas-form__prev-button', props.className)}\n onClick={callAllHandlers(props.onClick, prevStep)}\n />\n )\n}\n\nif (__DEV__) {\n PrevButton.displayName = 'PrevButton'\n}\n\nexport interface NextButtonProps extends ButtonProps {\n submitLabel?: string\n}\n\nexport const NextButton: React.FC<NextButtonProps> = (props) => {\n const { label = 'Next', submitLabel = 'Complete', ...rest } = props\n const { isLastStep, isCompleted } = useStepperContext()\n\n return (\n <SubmitButton\n {...rest}\n isDisabled={isCompleted}\n className={cx('saas-form__next-button', props.className)}\n >\n {isLastStep || isCompleted ? submitLabel : label}\n </SubmitButton>\n )\n}\n\nif (__DEV__) {\n NextButton.displayName = 'NextButton'\n}\n","import {\n FieldValues,\n useFormContext,\n UseFormReturn,\n useWatch,\n} from 'react-hook-form'\n\nexport interface WatchFieldProps<\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues\n> {\n name: string\n defaultValue?: Value\n isDisabled?: boolean\n isExact?: boolean\n children: (\n value: Value,\n form: UseFormReturn<TFieldValues>\n ) => React.ReactElement | void\n}\n\nexport const WatchField = <\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues\n>(\n props: WatchFieldProps<Value, TFieldValues>\n) => {\n const { name, defaultValue, isDisabled, isExact } = props\n const form = useFormContext<TFieldValues>()\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"],"names":["_excluded","DisplayField","_ref","name","label","props","React","createElement","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","_ref2","getValues","useFormContext","_excluded2","_excluded3","_excluded4","_excluded5","_excluded6","_excluded7","_excluded8","_excluded9","_excluded10","inputTypes","BaseField","help","hideLabel","children","controlProps","formState","errors","getError","_extends","isInvalid","error","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","_props$type","type","withControlledInput","InputComponent","rules","_ref3","inputProps","_objectWithoutPropertiesLoose","_useFormContext2","Controller","control","render","_ref4","_ref4$field","field","onChange","callAllHandlers","onBlur","useMergeRefs","withUncontrolledInput","_ref5","register","_register","registerFieldType","component","options","id","isDisabled","isReadOnly","isRequired","inputRules","required","undefined","createField","isControlled","split","map","part","charAt","toUpperCase","slice","join","InputField","_ref6","_ref6$type","leftAddon","rightAddon","size","rest","input","Input","InputGroup","NumberInput","PasswordInputField","PasswordInput","TextareaField","Textarea","SwitchField","_ref7","value","Switch","isChecked","SelectField","Select","_ref8","Checkbox","RadioField","RadioInput","NativeSelectField","NativeSelect","PinField","pinLength","_props$pinLength","pinType","spacing","inputs","i","push","PinInputField","key","HStack","PinInput","schema","Object","entries","title","_ref$","objectFieldResolver","getFields","mapFields","getNestedFields","get","items","_field$items","properties","Form","mode","_props$mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","useEffect","subscription","watch","_subscription","unsubscribe","FormProvider","chakra","className","cx","runIfFn","getFieldResolver","FormLayoutItem","div","FormLayout","_theme$components$For","_theme$components","_theme$components$For2","gridProps","theme","useTheme","components","defaultProps","SimpleGrid","Children","child","isValidElement","mapNestedFields","cloneElement","createContext","ArrayFieldProvider","useArrayFieldContext","_createContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","_ref$defaultValue","defaultValue","keyName","min","max","_useFormContext","useFieldArray","useArrayFieldRow","index","clearErrors","remove","_useArrayFieldContext","fields","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","_useArrayFieldRowCont","_useArrayFieldContext2","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","rowFieldsProps","ArrayFieldRowContainer","ArrayFieldRowFields","ArrayFieldRemoveButton","layoutProps","flex","mr","context","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","Fragment","fieldProps","FormLegend","styles","useStyleConfig","as","sx","columns","gridGap","ObjectField","_resolver$getNestedFi","nestedFieldProps","Fields","fieldResolver","focusFirstField","useMemo","_fields$","setFocus","SubmitButton","disableIfUntouched","disableIfInvalid","isDisabledProp","isLoading","Button","variant","isSubmitting","isDirty","isValid","AutoForm","submitLabel","_props$submitLabel","DisplayIf","condition","_ref$condition","useWatch","disabled","exact","isExact","errorMessage","StepFormProvider","useStepFormContext","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","_React$useState","useState","steps","updateSteps","onSubmitStep","data","_exit","Promise","resolve","step","updateStep","isCompleted","_temp","then","_temp2","_catch","getFormProps","_extends2","useStep","_useStepFormContext","StepForm","ctx","StepperProvider","FormStep","useFormStep","isActive","PrevButton","useStepperContext","prevStep","isFirstStep","_useStepperContext2","NextButton","_props$label","_useStepperContext3","activeIndex","setIndex","_useStepperContext","orientation","colorScheme","elements","StepperStep","_useFormStep","StepperContainer","StepperSteps"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.modern.mjs","sources":["../src/display-field.tsx","../src/field.tsx","../src/field-resolver.ts","../src/form.tsx","../src/layout.tsx","../src/utils.ts","../src/use-array-field.tsx","../src/array-field.tsx","../src/object-field.tsx","../src/fields.tsx","../src/submit-button.tsx","../src/auto-form.tsx","../src/display-if.tsx","../src/use-step-form.tsx","../src/step-form.tsx","../src/watch-field.tsx"],"sourcesContent":["import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { useFormContext } from 'react-hook-form'\n\nimport {\n Text,\n FormControl,\n FormControlProps,\n FormLabel,\n} from '@chakra-ui/react'\n\nimport { FieldProps } from './field'\n\nexport interface DisplayFieldProps\n extends FormControlProps,\n Omit<FieldProps, 'type' | 'label'> {}\n\nexport const DisplayField: React.FC<DisplayFieldProps> = ({\n name,\n label,\n placeholder,\n ...props\n}) => {\n return (\n <FormControl {...props}>\n {label ? <FormLabel htmlFor={name}>{label}</FormLabel> : null}\n <Text fontSize=\"md\">\n <FormValue name={name} />\n </Text>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n DisplayField.displayName = 'DisplayField'\n}\n\nexport const FormValue: React.FC<{ name: string }> = ({ name }) => {\n const { getValues } = useFormContext()\n return getValues(name) || null\n}\n\nif (__DEV__) {\n FormValue.displayName = 'FormValue'\n}\n","import * as React from 'react'\nimport {\n useFormContext,\n FormState,\n Controller,\n get,\n RegisterOptions,\n FieldValues,\n FieldPath,\n} from 'react-hook-form'\n\nimport {\n forwardRef,\n Box,\n FormControl,\n FormControlProps,\n FormLabel,\n FormHelperText,\n FormErrorMessage,\n Input,\n Textarea,\n Checkbox,\n Switch,\n useMergeRefs,\n InputGroup,\n InputProps,\n TextareaProps,\n SwitchProps,\n CheckboxProps,\n PinInputField,\n HStack,\n PinInput,\n UsePinInputProps,\n SystemProps,\n} from '@chakra-ui/react'\nimport { __DEV__, FocusableElement, callAllHandlers } from '@chakra-ui/utils'\n\nimport { NumberInput, NumberInputProps } from '@saas-ui/number-input'\nimport { PasswordInput, PasswordInputProps } from '@saas-ui/password-input'\nimport { RadioInput, RadioInputProps } from '@saas-ui/radio'\n\nimport {\n Select,\n SelectProps,\n NativeSelect,\n NativeSelectProps,\n} from '@saas-ui/select'\n\nexport interface Option {\n value: string\n label?: string\n [key: string]: unknown\n}\n\nexport type FieldRules = Pick<\n RegisterOptions,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength' | 'pattern'\n>\n\nexport interface FieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<FormControlProps, 'label' | 'type'> {\n /**\n * The field name\n */\n name: TName\n /**\n * The field label\n */\n label?: string\n /**\n * Hide the field label\n */\n hideLabel?: boolean\n /**\n * Field help text\n */\n help?: string\n /**\n * React hook form rules\n */\n rules?: Omit<\n RegisterOptions<TFieldValues, TName>,\n 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'\n >\n /**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\n type?: string\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<string, React.FC<any>> = {}\n\nconst defaultInputType = 'text'\n\nconst getInput = (type: string) => {\n return inputTypes[type] || inputTypes[defaultInputType]\n}\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 BaseField: React.FC<FieldProps> = (props) => {\n const { name, label, help, hideLabel, children, ...controlProps } = props\n\n const { formState } = useFormContext()\n\n const error = getError(name, formState)\n\n return (\n <FormControl {...controlProps} isInvalid={!!error}>\n {label && !hideLabel ? <FormLabel>{label}</FormLabel> : null}\n <Box>\n {children}\n {help && !error?.message ? (\n <FormHelperText>{help}</FormHelperText>\n ) : null}\n {error?.message && (\n <FormErrorMessage>{error?.message}</FormErrorMessage>\n )}\n </Box>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n BaseField.displayName = 'BaseField'\n}\n\nexport type As<Props = any> = React.ElementType<Props>\n\nexport type PropsOf<T extends As> = React.ComponentPropsWithoutRef<T> & {\n type?: FieldTypes\n}\n\n/**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> | FieldTypeProps,\n ref: React.ForwardedRef<FocusableElement>\n ) => {\n const { type = defaultInputType } = props\n const InputComponent = getInput(type)\n\n return <InputComponent ref={ref} {...props} />\n }\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> &\n FieldTypeProps & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement) & {\n displayName?: string\n}\n\ninterface CreateFieldProps {\n displayName: string\n hideLabel?: boolean\n BaseField: React.FC<any>\n}\n\nconst createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, BaseField }: CreateFieldProps\n) => {\n const Field = forwardRef((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n rules,\n ...inputProps\n } = props\n\n const inputRules = {\n required: isRequired,\n ...rules,\n }\n\n return (\n <BaseField\n id={id}\n name={name}\n label={label}\n help={help}\n hideLabel={hideLabel}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { control } = useFormContext()\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={callAllHandlers(inputProps.onChange, field.onChange)}\n onBlur={callAllHandlers(inputProps.onBlur, field.onBlur)}\n ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAllHandlers(inputProps.onChange, field.onChange)}\n onBlur={callAllHandlers(inputProps.onBlur, field.onBlur)}\n ref={useMergeRefs(ref, _ref)}\n />\n )\n }\n )\n}\n\nexport interface RegisterFieldTypeOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\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 registerFieldType = <T extends object>(\n type: string,\n component: React.FC<T>,\n options?: RegisterFieldTypeOptions\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(component)\n } else {\n InputComponent = withUncontrolledInput(component)\n }\n\n const Field = createField(InputComponent, {\n displayName: `${type\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')}Field`,\n hideLabel: options?.hideLabel,\n BaseField: options?.BaseField || BaseField,\n }) as React.FC<T & FieldProps>\n\n inputTypes[type] = Field\n\n return Field\n}\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n leftAddon?: React.ReactNode\n rightAddon?: React.ReactNode\n}\n\nexport const InputField = registerFieldType<InputFieldProps>(\n 'text',\n forwardRef(({ type = 'text', leftAddon, rightAddon, size, ...rest }, ref) => {\n const input = <Input type={type} size={size} {...rest} ref={ref} />\n if (leftAddon || rightAddon) {\n return (\n <InputGroup size={size}>\n {leftAddon}\n {input}\n {rightAddon}\n </InputGroup>\n )\n }\n return input\n })\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = registerFieldType<NumberInputFieldProps>(\n 'number',\n NumberInput,\n {\n isControlled: true,\n }\n)\n\nexport const PasswordInputField = registerFieldType<PasswordInputProps>(\n 'password',\n forwardRef((props, ref) => <PasswordInput ref={ref} {...props} />)\n)\n\nexport const TextareaField = registerFieldType<TextareaProps>(\n 'textarea',\n Textarea\n)\n\nexport const SwitchField = registerFieldType<SwitchProps>(\n 'switch',\n forwardRef(({ type, value, ...rest }, ref) => {\n return <Switch isChecked={!!value} {...rest} ref={ref} />\n }),\n {\n isControlled: true,\n }\n)\n\nexport const SelectField = registerFieldType<SelectProps>('select', Select, {\n isControlled: true,\n})\n\nexport const CheckboxField = registerFieldType<CheckboxProps>(\n 'checkbox',\n forwardRef(({ 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 const RadioField = registerFieldType<RadioInputProps>(\n 'radio',\n RadioInput,\n {\n isControlled: true,\n }\n)\n\nexport const NativeSelectField = registerFieldType<NativeSelectProps>(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\n\nexport interface PinFieldProps extends Omit<UsePinInputProps, 'type'> {\n pinLength?: number\n pinType?: 'alphanumeric' | 'number'\n spacing?: SystemProps['margin']\n}\n\nexport const PinField = registerFieldType<PinFieldProps>(\n 'pin',\n forwardRef((props, ref) => {\n const { pinLength = 4, pinType, spacing, ...inputProps } = props\n\n const inputs: React.ReactNode[] = []\n for (let i = 0; i < pinLength; i++) {\n inputs.push(<PinInputField key={i} ref={ref} />)\n }\n\n return (\n <HStack spacing={spacing}>\n <PinInput {...inputProps} type={pinType}>\n {inputs}\n </PinInput>\n </HStack>\n )\n }),\n {\n isControlled: true,\n }\n)\n\nconst fieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n number: NumberInputField,\n password: PasswordInputField,\n textarea: TextareaField,\n switch: SwitchField,\n checkbox: CheckboxField,\n radio: RadioField,\n pin: PinField,\n select: SelectField,\n 'native-select': NativeSelectField,\n}\n\ntype FieldTypes = typeof fieldTypes\n\ntype FieldType<Props = any> = React.ElementType<Props>\n\ntype TypeProps<P extends FieldType, T> = React.ComponentPropsWithoutRef<P> & {\n type: T\n}\n\ntype FieldTypeProps =\n | {\n [Property in keyof FieldTypes]: TypeProps<FieldTypes[Property], Property>\n }[keyof FieldTypes]\n | { type?: string }\n","import { FieldProps } from './field'\n\nimport { get } from '@chakra-ui/utils'\n\nexport type FieldResolver = {\n getFields(): FieldProps[]\n getNestedFields(name: string): FieldProps[]\n}\n\ninterface SchemaField extends FieldProps {\n items?: SchemaField[]\n properties?: Record<string, SchemaField>\n}\n\nexport type ObjectSchema = Record<string, SchemaField>\n\nconst mapFields = (schema: ObjectSchema): FieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, { items, label, title, ...field }]) => {\n return {\n ...field,\n name,\n label: label || title, // json schema compatibility\n }\n })\n\nexport const objectFieldResolver = (schema: ObjectSchema): FieldResolver => {\n const getFields = () => {\n return mapFields(schema)\n }\n const getNestedFields = (name: string) => {\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 * as React from 'react'\n\nimport { chakra, HTMLChakraProps, forwardRef } from '@chakra-ui/react'\nimport { cx, MaybeFunction, runIfFn, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n useForm,\n FormProvider,\n UseFormProps,\n UseFormReturn,\n FieldValues,\n SubmitHandler,\n SubmitErrorHandler,\n ResolverOptions,\n ResolverResult,\n ChangeHandler,\n WatchObserver,\n UnpackNestedValue,\n} from 'react-hook-form'\nimport { objectFieldResolver, FieldResolver } from './field-resolver'\nimport { MaybeRenderProp } from '@chakra-ui/react-utils'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\ninterface FormOptions<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n> {\n /**\n * The form schema, currently supports Yup schema only.\n */\n schema?: any\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 * Ref on the HTMLFormElement.\n */\n formRef?: React.RefObject<HTMLFormElement>\n /**\n * The form children, can be a render prop or a ReactNode.\n */\n children?: MaybeRenderProp<UseFormReturn<TFieldValues, TContext>>\n}\n\n// @todo Figure out how to pass down FieldValues to all Field components, if at all possible.\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n> extends UseFormProps<TFieldValues, TContext>,\n Omit<\n HTMLChakraProps<'form'>,\n 'children' | 'onChange' | 'onSubmit' | 'onError'\n >,\n FormOptions<TFieldValues, TContext> {}\n\nexport const Form = forwardRef(\n <\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n >(\n props: FormProps<TFieldValues, TContext>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues, TContext>>\n ) => {\n const {\n mode = 'all',\n resolver,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n schema,\n defaultValues,\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 reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n }\n\n if (schema && !resolver) {\n form.resolver = Form.getResolver?.<TFieldValues, TContext>(schema)\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(ref, () => methods, [ref, 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 return (\n <FormProvider {...methods}>\n <chakra.form\n ref={formRef}\n onSubmit={handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('saas-form', props.className)}\n >\n {runIfFn(children, methods)}\n </chakra.form>\n </FormProvider>\n )\n }\n) as (<TFieldValues extends FieldValues, TContext extends object = object>(\n props: FormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getResolver?: GetResolver\n getFieldResolver: GetFieldResolver\n}\n\nForm.getFieldResolver = objectFieldResolver\n\nif (__DEV__) {\n Form.displayName = 'Form'\n}\n\nexport type GetResolver = <\n TFieldValues extends FieldValues,\n TContext extends object\n>(\n schema: any\n) => (\n values: UnpackNestedValue<TFieldValues>,\n context: TContext | undefined,\n options: ResolverOptions<TFieldValues>\n) => Promise<ResolverResult<TFieldValues>>\n\nexport type GetFieldResolver = (schema: any) => FieldResolver\n","import * as React from 'react'\n\nimport { chakra, SimpleGrid, SimpleGridProps, useTheme } from '@chakra-ui/react'\nimport { cx, __DEV__ } from '@chakra-ui/utils'\n\nexport type FormLayoutProps = SimpleGridProps\n\ninterface FormLayoutItemProps {\n children: React.ReactNode\n}\n\nconst FormLayoutItem: React.FC<FormLayoutItemProps> = ({ children }) => {\n return <chakra.div>{children}</chakra.div>\n}\n\nif (__DEV__) {\n FormLayoutItem.displayName = 'FormLayoutItem'\n}\n\n/**\n * FormLayout\n *\n * Renders form items in a `SimpleGrid`\n * @see https://chakra-ui.com/docs/layout/simple-grid\n */\nexport const FormLayout = ({ children, ...props }: FormLayoutProps) => {\n const theme = useTheme()\n\n const defaultProps = theme.components?.FormLayout?.defaultProps ?? {\n spacing: 4,\n }\n\n const gridProps = {\n ...defaultProps,\n ...props,\n }\n\n return (\n <SimpleGrid\n {...gridProps}\n className={cx('saas-form__layout', props.className)}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return <FormLayoutItem>{child}</FormLayoutItem>\n }\n return child\n })}\n </SimpleGrid>\n )\n}\n\nif (__DEV__) {\n FormLayout.displayName = 'FormLayout'\n}\n","import * as React from 'react'\n\nexport const mapNestedFields = (name: string, children: React.ReactNode) => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child.props.name) {\n return React.cloneElement(child, {\n ...child.props,\n name: `${name}.${child.props.name}`,\n })\n }\n return child\n })\n}\n","import * as React from 'react'\nimport {\n useFieldArray,\n useFormContext,\n UseFieldArrayReturn,\n} from 'react-hook-form'\n\nimport { createContext } from '@chakra-ui/react-utils'\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 /**\n * The field name\n */\n name: string\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 const context = useFieldArray({\n control,\n name,\n keyName,\n })\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 { chakra, ResponsiveValue, forwardRef } from '@chakra-ui/system'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { AddIcon, MinusIcon } from '@chakra-ui/icons'\nimport { IconButton, ButtonProps } from '@saas-ui/button'\n\nimport { FormLayout, FormLayoutProps } from './layout'\nimport { BaseField, FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nimport {\n useArrayField,\n useArrayFieldRow,\n useArrayFieldContext,\n ArrayFieldProvider,\n ArrayFieldOptions,\n ArrayFieldRowProvider,\n useArrayFieldRowContext,\n useArrayFieldRemoveButton,\n useArrayFieldAddButton,\n UseArrayFieldReturn,\n} from './use-array-field'\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\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\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The fields\n */\n children: React.ReactNode\n}\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\nif (__DEV__) {\n ArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n}\n\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\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 __css={styles}>{children}</chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n}\n\nexport const ArrayFieldRemoveButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<MinusIcon />}\n aria-label=\"Remove row\"\n {...useArrayFieldRemoveButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n}\n\nexport const ArrayFieldAddButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<AddIcon />}\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n}\n\nexport interface ArrayFieldProps\n extends ArrayFieldOptions,\n Omit<FieldProps, 'defaultValue'> {}\n\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>\n {(fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n ))}\n </>\n )}\n </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\nif (__DEV__) {\n ArrayField.displayName = 'ArrayField'\n}\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\nif (__DEV__) {\n ArrayFieldRows.displayName = 'ArrayFieldRows'\n}\n\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>\n ) => {\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min,\n 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}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n }\n)\n\nif (__DEV__) {\n ArrayFieldContainer.displayName = 'ArrayFieldContainer'\n}\n","import * as React from 'react'\nimport {\n FormControl,\n FormLabel,\n FormLabelProps,\n ResponsiveValue,\n useStyleConfig,\n} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { FormLayout } from './layout'\nimport { FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps extends FieldProps {\n name: string\n children: React.ReactNode\n columns?: ResponsiveValue<number>\n spacing?: ResponsiveValue<string | number>\n}\n\nexport const FormLegend = (props: FormLabelProps) => {\n const styles = useStyleConfig('FormLegend')\n return <FormLabel as=\"legend\" sx={styles} {...props} />\n}\n\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const { name, label, hideLabel, children, columns, spacing, ...fieldProps } =\n props\n\n return (\n <FormControl name={name} as=\"fieldset\" {...fieldProps}>\n <FormLegend display={hideLabel ? 'none' : 'block'}>{label}</FormLegend>\n <FormLayout columns={columns} gridGap={spacing}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n ObjectField.displayName = 'ObjectField'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form } from './form'\nimport { FormLayout } from './layout'\nimport { Field, FieldProps } from './field'\n\nimport { ArrayField } from './array-field'\nimport { ObjectField } from './object-field'\nimport { FieldResolver } from './field-resolver'\nimport { useFormContext } from 'react-hook-form'\n\nexport interface FieldsProps {\n schema: any\n fieldResolver?: FieldResolver\n focusFirstField?: boolean\n}\n\nconst mapNestedFields = (resolver: FieldResolver, name: string) => {\n return resolver\n .getNestedFields(name)\n ?.map(\n ({ name, type, ...nestedFieldProps }: FieldProps, i): React.ReactNode => (\n <Field key={name || i} name={name} type={type} {...nestedFieldProps} />\n )\n )\n}\n\nexport const Fields: React.FC<FieldsProps> = ({\n schema,\n fieldResolver,\n focusFirstField,\n ...props\n}) => {\n const resolver = React.useMemo(\n () => fieldResolver || Form.getFieldResolver(schema),\n [schema, fieldResolver]\n )\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 return (\n <FormLayout {...props}>\n {fields.map(\n ({\n name,\n type,\n defaultValue,\n ...fieldProps\n }: FieldProps): 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 <Field key={name} name={name} type={type} {...fieldProps} />\n }\n )}\n </FormLayout>\n )\n}\n\nif (__DEV__) {\n Fields.displayName = 'Fields'\n}\n","import * as React from 'react'\n\nimport { useFormContext } from 'react-hook-form'\n\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { __DEV__ } from '@chakra-ui/utils'\n\nexport interface SubmitButtonProps extends ButtonProps {\n /**\n * Disable the submit button if the form is untouched.\n *\n * Change the default behavior by updating\n * `SubmitButton.defaultProps.disableIfUntouched`\n */\n disableIfUntouched?: boolean\n /**\n * Disable the submit button if the form is invalid.\n *\n * Change the default behavior by updating\n * `SubmitButton.defaultProps.disableIfInvalid`\n */\n disableIfInvalid?: boolean\n}\n\nexport const SubmitButton = React.forwardRef<\n HTMLButtonElement,\n SubmitButtonProps\n>((props, ref) => {\n const {\n children,\n disableIfUntouched,\n disableIfInvalid,\n isDisabled: isDisabledProp,\n isLoading,\n ...rest\n } = props\n const { formState } = useFormContext()\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid) ||\n isDisabledProp\n\n return (\n <Button\n {...rest}\n ref={ref}\n variant=\"primary\"\n type=\"submit\"\n isLoading={formState.isSubmitting || isLoading}\n isDisabled={isDisabled}\n >\n {children}\n </Button>\n )\n})\n\nSubmitButton.defaultProps = {\n label: 'Submit',\n disableIfUntouched: false,\n disableIfInvalid: false,\n}\n\nif (__DEV__) {\n SubmitButton.displayName = 'SubmitButton'\n}\n","import * as React from 'react'\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\nimport { forwardRef } from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form, FormProps } from './form'\nimport { FormLayout } from './layout'\nimport { Fields } from './fields'\nimport { SubmitButton } from './submit-button'\nimport { FieldResolver } from '.'\n\ninterface AutoFormOptions {\n /**\n * The submit button label.\n * Pass `null` to render no submit button.\n */\n submitLabel?: React.ReactNode\n /**\n * The schema.\n * Supports object schema, Zod, Yup or Ajv (JSON Schema).\n * @see https://www.saas-ui.dev/docs/forms/auto-form\n */\n schema: any\n /**\n * The field resolver.\n */\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema' | 'children'>,\n AutoFormOptions {\n children?: React.ReactNode\n}\n\nexport const AutoForm = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: AutoFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const {\n schema,\n submitLabel = 'Submit',\n fieldResolver,\n children,\n ...rest\n } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton>{submitLabel}</SubmitButton>}\n {children}\n </FormLayout>\n </Form>\n )\n }\n) as (<TFieldValues extends FieldValues>(\n props: AutoFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getFieldResolver?: (schema: any) => FieldResolver\n}\n\nif (__DEV__) {\n AutoForm.displayName = 'AutoForm'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport {\n useFormContext,\n useWatch,\n FieldValues,\n UseFormReturn,\n} from 'react-hook-form'\n\nexport interface DisplayIfProps<\n TFieldValues extends FieldValues = FieldValues\n> {\n children: React.ReactElement\n name: string\n defaultValue?: unknown\n isDisabled?: boolean\n isExact?: boolean\n condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean\n}\n\nexport const DisplayIf = <TFieldValues extends FieldValues = FieldValues>({\n children,\n name,\n defaultValue,\n isDisabled,\n isExact,\n condition = (value) => !!value,\n}: DisplayIfProps<TFieldValues>) => {\n const value = useWatch({\n name,\n defaultValue,\n disabled: isDisabled,\n exact: isExact,\n })\n const context = useFormContext<TFieldValues>()\n return condition(value, context) ? children : null\n}\n\nif (__DEV__) {\n DisplayIf.displayName = 'DisplayIf'\n}\n","import * as React from 'react'\nimport { FieldValues, SubmitHandler } from 'react-hook-form'\nimport { createContext, MaybeRenderProp } from '@chakra-ui/react-utils'\nimport {\n useStepper,\n useStep,\n UseStepperProps,\n UseStepperReturn,\n} from '@saas-ui/stepper'\n\nexport interface StepState {\n name: string\n schema?: any\n resolver?: any\n isActive?: boolean\n isCompleted?: boolean\n onSubmit?: FormStepSubmitHandler\n}\n\nexport type FormStepSubmitHandler<\n TFieldValues extends FieldValues = FieldValues\n> = (data: TFieldValues, stepper: UseStepperReturn) => Promise<void>\n\nexport interface StepFormContext extends UseStepperReturn {\n updateStep(state: StepState): void\n steps: Record<string, StepState>\n}\n\nexport const [StepFormProvider, useStepFormContext] =\n createContext<StepFormContext>({\n name: 'StepFormContext',\n errorMessage:\n 'useStepFormContext: `context` is undefined. Seems you forgot to wrap step form components in `<StepForm />`',\n })\n\nimport { FormProps } from './form'\n\nexport interface UseStepFormProps<\n TFieldValues extends FieldValues = FieldValues\n> extends Omit<UseStepperProps, 'onChange'>,\n Omit<FormProps<TFieldValues>, 'children'> {\n children: MaybeRenderProp<UseStepFormReturn<TFieldValues>>\n}\n\nexport interface UseStepFormReturn<\n TFieldValues extends FieldValues = FieldValues\n> extends UseStepperReturn {\n getFormProps(): {\n onSubmit: SubmitHandler<TFieldValues>\n schema?: any\n resolver?: any\n }\n updateStep(step: any): void\n steps: Record<string, any>\n}\n\nexport function useStepForm<TFieldValues extends FieldValues = FieldValues>(\n props: UseStepFormProps<TFieldValues>\n): UseStepFormReturn<TFieldValues> {\n const { onChange, ...rest } = props\n const stepper = useStepper(rest)\n\n const { activeStep, isLastStep, nextStep } = stepper\n\n const [steps, updateSteps] = React.useState<Record<string, StepState>>({})\n\n const onSubmitStep: SubmitHandler<TFieldValues> = React.useCallback(\n async (data) => {\n try {\n const step = steps[activeStep]\n\n if (isLastStep) {\n await props.onSubmit?.(data)\n\n updateStep({\n ...step,\n isCompleted: true,\n })\n\n nextStep() // show completed step\n return\n }\n\n await step.onSubmit?.(data, stepper)\n\n nextStep()\n } catch (e) {\n // Step submission failed.\n }\n },\n [steps, activeStep, isLastStep]\n )\n\n const getFormProps = React.useCallback(() => {\n const step = steps[activeStep]\n return {\n onSubmit: onSubmitStep,\n schema: step?.schema,\n resolver: step?.resolver,\n }\n }, [steps, onSubmitStep, activeStep])\n\n const updateStep = React.useCallback(\n (step: StepState) => {\n updateSteps((steps) => {\n return {\n ...steps,\n [step.name]: step,\n }\n })\n },\n [steps]\n )\n\n return {\n getFormProps,\n updateStep,\n steps,\n ...stepper,\n }\n}\n\nexport interface UseFormStepProps {\n name: string\n schema?: any\n resolver?: any\n onSubmit?: FormStepSubmitHandler\n}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver, onSubmit } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver, onSubmit })\n }, [name, schema])\n\n return {\n ...step,\n ...(steps[name] || { name, schema }),\n }\n}\n","import * as React from 'react'\n\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\n\nimport { chakra, HTMLChakraProps, ThemingProps } from '@chakra-ui/system'\n\nimport { callAllHandlers, runIfFn, cx, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n StepperProvider,\n StepperSteps,\n StepperStepsProps,\n StepperStep,\n useStepperContext,\n StepperContainer,\n StepperProps,\n} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n FormStepSubmitHandler,\n} from './use-step-form'\n\nexport interface StepFormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseStepFormProps<TFieldValues> {}\n\nexport const StepForm = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: StepFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { children, ...rest } = props\n\n const stepper = useStepForm<TFieldValues>(props)\n\n const { getFormProps, ...ctx } = stepper\n\n const context = React.useMemo(() => ctx, [ctx])\n\n return (\n <StepperProvider value={context}>\n <StepFormProvider value={context}>\n <Form ref={ref} {...rest} {...getFormProps()}>\n {runIfFn(children, stepper)}\n </Form>\n </StepFormProvider>\n </StepperProvider>\n )\n }\n) as <TFieldValues extends FieldValues>(\n props: StepFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement\n\nexport interface FormStepOptions {\n /**\n * The step name\n */\n name: string\n /**\n * Schema\n */\n schema?: any\n /**\n * Hook Form Resolver\n */\n resolver?: any\n}\n\nexport interface FormStepperProps\n extends StepperStepsProps,\n ThemingProps<'Stepper'> {}\n\nexport const FormStepper: React.FC<FormStepperProps> = (props) => {\n const { activeIndex, setIndex } = useStepperContext()\n\n const { children, orientation, variant, colorScheme, size, ...rest } = props\n\n const elements = React.Children.map(children, (child) => {\n if (\n React.isValidElement<FormStepProps>(child) &&\n child?.type === FormStep\n ) {\n const { isCompleted } = useFormStep(child.props) // Register this step\n return (\n <StepperStep\n name={child.props.name}\n title={child.props.title}\n isCompleted={isCompleted}\n {...rest}\n >\n {child.props.children}\n </StepperStep>\n )\n }\n return child\n })\n\n const onChange = React.useCallback((i: number) => {\n setIndex(i)\n }, [])\n\n return (\n <StepperContainer\n orientation={orientation}\n step={activeIndex}\n variant={variant}\n colorScheme={colorScheme}\n size={size}\n onChange={onChange}\n >\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StepperContainer>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n Omit<HTMLChakraProps<'div'>, 'onSubmit'> {\n onSubmit?: FormStepSubmitHandler\n}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, onSubmit, ...rest } =\n props\n const step = useFormStep({ name, schema, resolver, onSubmit })\n\n const { isActive } = step\n\n return isActive ? (\n <chakra.div {...rest} className={cx('saas-form__step', className)}>\n {children}\n </chakra.div>\n ) : null\n}\n\nif (__DEV__) {\n FormStep.displayName = 'FormStep'\n}\n\nexport const PrevButton: React.FC<ButtonProps> = (props) => {\n const { isFirstStep, isCompleted, prevStep } = useStepperContext()\n\n return (\n <Button\n isDisabled={isFirstStep || isCompleted}\n label=\"Back\"\n {...props}\n className={cx('saas-form__prev-button', props.className)}\n onClick={callAllHandlers(props.onClick, prevStep)}\n />\n )\n}\n\nif (__DEV__) {\n PrevButton.displayName = 'PrevButton'\n}\n\nexport interface NextButtonProps extends ButtonProps {\n submitLabel?: string\n}\n\nexport const NextButton: React.FC<NextButtonProps> = (props) => {\n const { label = 'Next', submitLabel = 'Complete', ...rest } = props\n const { isLastStep, isCompleted } = useStepperContext()\n\n return (\n <SubmitButton\n {...rest}\n isDisabled={isCompleted}\n className={cx('saas-form__next-button', props.className)}\n >\n {isLastStep || isCompleted ? submitLabel : label}\n </SubmitButton>\n )\n}\n\nif (__DEV__) {\n NextButton.displayName = 'NextButton'\n}\n","import {\n FieldValues,\n useFormContext,\n UseFormReturn,\n useWatch,\n} from 'react-hook-form'\n\nexport interface WatchFieldProps<\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues\n> {\n name: string\n defaultValue?: Value\n isDisabled?: boolean\n isExact?: boolean\n children: (\n value: Value,\n form: UseFormReturn<TFieldValues>\n ) => React.ReactElement | void\n}\n\nexport const WatchField = <\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues\n>(\n props: WatchFieldProps<Value, TFieldValues>\n) => {\n const { name, defaultValue, isDisabled, isExact } = props\n const form = useFormContext<TFieldValues>()\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"],"names":["DisplayField","_ref","name","label","props","_objectWithoutPropertiesLoose","_excluded","React","createElement","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","getValues","useFormContext","_excluded2","_excluded3","_excluded4","_excluded5","_excluded6","_excluded7","_excluded8","_excluded9","_excluded10","inputTypes","defaultInputType","BaseField","help","hideLabel","children","controlProps","formState","error","get","errors","getError","isInvalid","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","type","InputComponent","getInput","_extends","withControlledInput","_ref2","rules","inputProps","control","Controller","render","_ref3","field","onChange","callAllHandlers","onBlur","useMergeRefs","withUncontrolledInput","_ref4","register","_register","component","options","isControlled","id","isDisabled","isReadOnly","isRequired","inputRules","required","undefined","createField","split","map","part","charAt","toUpperCase","slice","join","registerFieldType","leftAddon","rightAddon","size","_ref5","rest","input","Input","InputGroup","NumberInput","PasswordInputField","PasswordInput","TextareaField","Textarea","SwitchField","_ref6","value","Switch","isChecked","SelectField","Select","_ref7","Checkbox","RadioField","RadioInput","NativeSelectField","NativeSelect","pinLength","pinType","spacing","i","inputs","push","PinInputField","key","HStack","PinInput","mapFields","schema","Object","entries","title","objectFieldResolver","getFields","getNestedFields","_field$items","items","properties","Form","mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","useEffect","subscription","watch","_subscription","unsubscribe","FormProvider","chakra","className","cx","runIfFn","getFieldResolver","FormLayoutItem","div","FormLayout","_theme$components$For","_theme$components","_theme$components$For2","defaultProps","theme","useTheme","components","SimpleGrid","gridProps","Children","child","isValidElement","mapNestedFields","cloneElement","ArrayFieldProvider","useArrayFieldContext","createContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","defaultValue","keyName","min","max","context","useFieldArray","useArrayFieldRow","index","clearErrors","remove","fields","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","rowFieldsProps","ArrayFieldRowContainer","ArrayFieldRowFields","ArrayFieldRemoveButton","layoutProps","flex","mr","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","Fragment","fieldProps","FormLegend","styles","useStyleConfig","as","sx","ObjectField","columns","gridGap","_resolver$getNestedFi","nestedFieldProps","fieldResolver","focusFirstField","useMemo","_fields$","setFocus","Fields","disableIfUntouched","disableIfInvalid","isDisabledProp","isLoading","Button","variant","isSubmitting","isDirty","isValid","SubmitButton","AutoForm","submitLabel","DisplayIf","isExact","condition","useWatch","disabled","exact","StepFormProvider","useStepFormContext","errorMessage","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","steps","updateSteps","useState","onSubmitStep","async","step","data","updateStep","isCompleted","e","getFormProps","useStep","StepForm","ctx","StepperProvider","FormStepper","activeIndex","setIndex","useStepperContext","orientation","colorScheme","elements","FormStep","useFormStep","StepperStep","StepperContainer","StepperSteps","isActive","PrevButton","isFirstStep","prevStep","NextButton","WatchField"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.modern.mjs","sources":["../src/display-field.tsx","../src/field.tsx","../src/field-resolver.ts","../src/form.tsx","../src/layout.tsx","../src/utils.ts","../src/use-array-field.tsx","../src/array-field.tsx","../src/object-field.tsx","../src/fields.tsx","../src/submit-button.tsx","../src/auto-form.tsx","../src/display-if.tsx","../src/use-step-form.tsx","../src/step-form.tsx","../src/watch-field.tsx"],"sourcesContent":["import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { useFormContext } from 'react-hook-form'\n\nimport {\n Text,\n FormControl,\n FormControlProps,\n FormLabel,\n} from '@chakra-ui/react'\n\nimport { FieldProps } from './field'\n\nexport interface DisplayFieldProps\n extends FormControlProps,\n Omit<FieldProps, 'type' | 'label'> {}\n\nexport const DisplayField: React.FC<DisplayFieldProps> = ({\n name,\n label,\n placeholder,\n ...props\n}) => {\n return (\n <FormControl {...props}>\n {label ? <FormLabel htmlFor={name}>{label}</FormLabel> : null}\n <Text fontSize=\"md\">\n <FormValue name={name} />\n </Text>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n DisplayField.displayName = 'DisplayField'\n}\n\nexport const FormValue: React.FC<{ name: string }> = ({ name }) => {\n const { getValues } = useFormContext()\n return getValues(name) || null\n}\n\nif (__DEV__) {\n FormValue.displayName = 'FormValue'\n}\n","import * as React from 'react'\nimport {\n useFormContext,\n FormState,\n Controller,\n get,\n RegisterOptions,\n FieldValues,\n FieldPath,\n} from 'react-hook-form'\n\nimport {\n forwardRef,\n Box,\n FormControl,\n FormControlProps,\n FormLabel,\n FormHelperText,\n FormErrorMessage,\n Input,\n Textarea,\n Checkbox,\n Switch,\n useMergeRefs,\n InputGroup,\n InputProps,\n TextareaProps,\n SwitchProps,\n CheckboxProps,\n PinInputField,\n HStack,\n PinInput,\n UsePinInputProps,\n SystemProps,\n} from '@chakra-ui/react'\nimport { __DEV__, FocusableElement, callAllHandlers } from '@chakra-ui/utils'\n\nimport { NumberInput, NumberInputProps } from '@saas-ui/number-input'\nimport { PasswordInput, PasswordInputProps } from '@saas-ui/password-input'\nimport { RadioInput, RadioInputProps } from '@saas-ui/radio'\n\nimport {\n Select,\n SelectProps,\n NativeSelect,\n NativeSelectProps,\n} from '@saas-ui/select'\n\nexport interface Option {\n value: string\n label?: string\n [key: string]: unknown\n}\n\nexport type FieldRules = Pick<\n RegisterOptions,\n 'required' | 'min' | 'max' | 'maxLength' | 'minLength' | 'pattern'\n>\n\nexport interface FieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<FormControlProps, 'label' | 'type'> {\n /**\n * The field name\n */\n name: TName\n /**\n * The field label\n */\n label?: string\n /**\n * Hide the field label\n */\n hideLabel?: boolean\n /**\n * Field help text\n */\n help?: string\n /**\n * React hook form rules\n */\n rules?: Omit<\n RegisterOptions<TFieldValues, TName>,\n 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'\n >\n /**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\n type?: string\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<string, React.FC<any>> = {}\n\nconst defaultInputType = 'text'\n\nconst getInput = (type: string) => {\n return inputTypes[type] || inputTypes[defaultInputType]\n}\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 BaseField: React.FC<FieldProps> = (props) => {\n const { name, label, help, hideLabel, children, ...controlProps } = props\n\n const { formState } = useFormContext()\n\n const error = getError(name, formState)\n\n return (\n <FormControl {...controlProps} isInvalid={!!error}>\n {label && !hideLabel ? <FormLabel>{label}</FormLabel> : null}\n <Box>\n {children}\n {help && !error?.message ? (\n <FormHelperText>{help}</FormHelperText>\n ) : null}\n {error?.message && (\n <FormErrorMessage>{error?.message}</FormErrorMessage>\n )}\n </Box>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n BaseField.displayName = 'BaseField'\n}\n\nexport type As<Props = any> = React.ElementType<Props>\n\nexport type PropsOf<T extends As> = React.ComponentPropsWithoutRef<T> & {\n type?: FieldTypes\n}\n\n/**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> | FieldTypeProps,\n ref: React.ForwardedRef<FocusableElement>\n ) => {\n const { type = defaultInputType } = props\n const InputComponent = getInput(type)\n\n return <InputComponent ref={ref} {...props} />\n }\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> &\n FieldTypeProps & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement) & {\n displayName?: string\n}\n\ninterface CreateFieldProps {\n displayName: string\n hideLabel?: boolean\n BaseField: React.FC<any>\n}\n\nconst createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, BaseField }: CreateFieldProps\n) => {\n const Field = forwardRef((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n rules,\n ...inputProps\n } = props\n\n const inputRules = {\n required: isRequired,\n ...rules,\n }\n\n return (\n <BaseField\n id={id}\n name={name}\n label={label}\n help={help}\n hideLabel={hideLabel}\n isDisabled={isDisabled}\n isInvalid={isInvalid}\n isReadOnly={isReadOnly}\n isRequired={isRequired}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { control } = useFormContext()\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={callAllHandlers(inputProps.onChange, field.onChange)}\n onBlur={callAllHandlers(inputProps.onBlur, field.onBlur)}\n ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n onChange={callAllHandlers(inputProps.onChange, field.onChange)}\n onBlur={callAllHandlers(inputProps.onBlur, field.onBlur)}\n ref={useMergeRefs(ref, _ref)}\n />\n )\n }\n )\n}\n\nexport interface RegisterFieldTypeOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\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 registerFieldType = <T extends object>(\n type: string,\n component: React.FC<T>,\n options?: RegisterFieldTypeOptions\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(component)\n } else {\n InputComponent = withUncontrolledInput(component)\n }\n\n const Field = createField(InputComponent, {\n displayName: `${type\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')}Field`,\n hideLabel: options?.hideLabel,\n BaseField: options?.BaseField || BaseField,\n }) as React.FC<T & FieldProps>\n\n inputTypes[type] = Field\n\n return Field\n}\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n leftAddon?: React.ReactNode\n rightAddon?: React.ReactNode\n}\n\nexport const InputField = registerFieldType<InputFieldProps>(\n 'text',\n forwardRef(({ type = 'text', leftAddon, rightAddon, size, ...rest }, ref) => {\n const input = <Input type={type} size={size} {...rest} ref={ref} />\n if (leftAddon || rightAddon) {\n return (\n <InputGroup size={size}>\n {leftAddon}\n {input}\n {rightAddon}\n </InputGroup>\n )\n }\n return input\n })\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = registerFieldType<NumberInputFieldProps>(\n 'number',\n NumberInput,\n {\n isControlled: true,\n }\n)\n\nexport const PasswordInputField = registerFieldType<PasswordInputProps>(\n 'password',\n forwardRef((props, ref) => <PasswordInput ref={ref} {...props} />)\n)\n\nexport const TextareaField = registerFieldType<TextareaProps>(\n 'textarea',\n Textarea\n)\n\nexport const SwitchField = registerFieldType<SwitchProps>(\n 'switch',\n forwardRef(({ type, value, ...rest }, ref) => {\n return <Switch isChecked={!!value} {...rest} ref={ref} />\n }),\n {\n isControlled: true,\n }\n)\n\nexport const SelectField = registerFieldType<SelectProps>('select', Select, {\n isControlled: true,\n})\n\nexport const CheckboxField = registerFieldType<CheckboxProps>(\n 'checkbox',\n forwardRef(({ 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 const RadioField = registerFieldType<RadioInputProps>(\n 'radio',\n RadioInput,\n {\n isControlled: true,\n }\n)\n\nexport const NativeSelectField = registerFieldType<NativeSelectProps>(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\n\nexport interface PinFieldProps extends Omit<UsePinInputProps, 'type'> {\n pinLength?: number\n pinType?: 'alphanumeric' | 'number'\n spacing?: SystemProps['margin']\n}\n\nexport const PinField = registerFieldType<PinFieldProps>(\n 'pin',\n forwardRef((props, ref) => {\n const { pinLength = 4, pinType, spacing, ...inputProps } = props\n\n const inputs: React.ReactNode[] = []\n for (let i = 0; i < pinLength; i++) {\n inputs.push(<PinInputField key={i} ref={ref} />)\n }\n\n return (\n <HStack spacing={spacing}>\n <PinInput {...inputProps} type={pinType}>\n {inputs}\n </PinInput>\n </HStack>\n )\n }),\n {\n isControlled: true,\n }\n)\n\nconst fieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n number: NumberInputField,\n password: PasswordInputField,\n textarea: TextareaField,\n switch: SwitchField,\n checkbox: CheckboxField,\n radio: RadioField,\n pin: PinField,\n select: SelectField,\n 'native-select': NativeSelectField,\n}\n\ntype FieldTypes = typeof fieldTypes\n\ntype FieldType<Props = any> = React.ElementType<Props>\n\ntype TypeProps<P extends FieldType, T> = React.ComponentPropsWithoutRef<P> & {\n type: T\n}\n\ntype FieldTypeProps =\n | {\n [Property in keyof FieldTypes]: TypeProps<FieldTypes[Property], Property>\n }[keyof FieldTypes]\n | { type?: string }\n","import { FieldProps } from './field'\n\nimport { get } from '@chakra-ui/utils'\n\nexport type FieldResolver = {\n getFields(): FieldProps[]\n getNestedFields(name: string): FieldProps[]\n}\n\ninterface SchemaField extends FieldProps {\n items?: SchemaField[]\n properties?: Record<string, SchemaField>\n}\n\nexport type ObjectSchema = Record<string, SchemaField>\n\nconst mapFields = (schema: ObjectSchema): FieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, { items, label, title, ...field }]) => {\n return {\n ...field,\n name,\n label: label || title, // json schema compatibility\n }\n })\n\nexport const objectFieldResolver = (schema: ObjectSchema): FieldResolver => {\n const getFields = () => {\n return mapFields(schema)\n }\n const getNestedFields = (name: string) => {\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 * as React from 'react'\n\nimport { chakra, HTMLChakraProps, forwardRef } from '@chakra-ui/react'\nimport { cx, MaybeFunction, runIfFn, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n useForm,\n FormProvider,\n UseFormProps,\n UseFormReturn,\n FieldValues,\n SubmitHandler,\n SubmitErrorHandler,\n ResolverOptions,\n ResolverResult,\n ChangeHandler,\n WatchObserver,\n} from 'react-hook-form'\nimport { objectFieldResolver, FieldResolver } from './field-resolver'\nimport { MaybeRenderProp } from '@chakra-ui/react-utils'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\ninterface FormOptions<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n> {\n /**\n * The form schema, currently supports Yup schema only.\n */\n schema?: any\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 * Ref on the HTMLFormElement.\n */\n formRef?: React.RefObject<HTMLFormElement>\n /**\n * The form children, can be a render prop or a ReactNode.\n */\n children?: MaybeRenderProp<UseFormReturn<TFieldValues, TContext>>\n}\n\n// @todo Figure out how to pass down FieldValues to all Field components, if at all possible.\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n> extends UseFormProps<TFieldValues, TContext>,\n Omit<\n HTMLChakraProps<'form'>,\n 'children' | 'onChange' | 'onSubmit' | 'onError'\n >,\n FormOptions<TFieldValues, TContext> {}\n\nexport const Form = forwardRef(\n <\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n >(\n props: FormProps<TFieldValues, TContext>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues, TContext>>\n ) => {\n const {\n mode = 'all',\n resolver,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n schema,\n defaultValues,\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 reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n }\n\n if (schema && !resolver) {\n form.resolver = Form.getResolver?.<TFieldValues, TContext>(schema)\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(ref, () => methods, [ref, 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 return (\n <FormProvider {...methods}>\n <chakra.form\n ref={formRef}\n onSubmit={handleSubmit(onSubmit, onError)}\n {...rest}\n className={cx('saas-form', props.className)}\n >\n {runIfFn(children, methods)}\n </chakra.form>\n </FormProvider>\n )\n }\n) as (<TFieldValues extends FieldValues, TContext extends object = object>(\n props: FormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getResolver?: GetResolver\n getFieldResolver: GetFieldResolver\n}\n\nForm.getFieldResolver = objectFieldResolver\n\nif (__DEV__) {\n Form.displayName = 'Form'\n}\n\nexport type GetResolver = <\n TFieldValues extends FieldValues,\n TContext extends object\n>(\n schema: any\n) => (\n values: TFieldValues,\n context: TContext | undefined,\n options: ResolverOptions<TFieldValues>\n) => Promise<ResolverResult<TFieldValues>>\n\nexport type GetFieldResolver = (schema: any) => FieldResolver\n","import * as React from 'react'\n\nimport { chakra, SimpleGrid, SimpleGridProps, useTheme } from '@chakra-ui/react'\nimport { cx, __DEV__ } from '@chakra-ui/utils'\n\nexport type FormLayoutProps = SimpleGridProps\n\ninterface FormLayoutItemProps {\n children: React.ReactNode\n}\n\nconst FormLayoutItem: React.FC<FormLayoutItemProps> = ({ children }) => {\n return <chakra.div>{children}</chakra.div>\n}\n\nif (__DEV__) {\n FormLayoutItem.displayName = 'FormLayoutItem'\n}\n\n/**\n * FormLayout\n *\n * Renders form items in a `SimpleGrid`\n * @see https://chakra-ui.com/docs/layout/simple-grid\n */\nexport const FormLayout = ({ children, ...props }: FormLayoutProps) => {\n const theme = useTheme()\n\n const defaultProps = theme.components?.FormLayout?.defaultProps ?? {\n spacing: 4,\n }\n\n const gridProps = {\n ...defaultProps,\n ...props,\n }\n\n return (\n <SimpleGrid\n {...gridProps}\n className={cx('saas-form__layout', props.className)}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return <FormLayoutItem>{child}</FormLayoutItem>\n }\n return child\n })}\n </SimpleGrid>\n )\n}\n\nif (__DEV__) {\n FormLayout.displayName = 'FormLayout'\n}\n","import * as React from 'react'\n\nexport const mapNestedFields = (name: string, children: React.ReactNode) => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child.props.name) {\n return React.cloneElement(child, {\n ...child.props,\n name: `${name}.${child.props.name}`,\n })\n }\n return child\n })\n}\n","import * as React from 'react'\nimport {\n useFieldArray,\n useFormContext,\n UseFieldArrayReturn,\n} from 'react-hook-form'\n\nimport { createContext } from '@chakra-ui/react-utils'\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 /**\n * The field name\n */\n name: string\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 const context = useFieldArray({\n control,\n name,\n keyName,\n })\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 { chakra, ResponsiveValue, forwardRef } from '@chakra-ui/system'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { AddIcon, MinusIcon } from '@chakra-ui/icons'\nimport { IconButton, ButtonProps } from '@saas-ui/button'\n\nimport { FormLayout, FormLayoutProps } from './layout'\nimport { BaseField, FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nimport {\n useArrayField,\n useArrayFieldRow,\n useArrayFieldContext,\n ArrayFieldProvider,\n ArrayFieldOptions,\n ArrayFieldRowProvider,\n useArrayFieldRowContext,\n useArrayFieldRemoveButton,\n useArrayFieldAddButton,\n UseArrayFieldReturn,\n} from './use-array-field'\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\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\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The fields\n */\n children: React.ReactNode\n}\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\nif (__DEV__) {\n ArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n}\n\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\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 __css={styles}>{children}</chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n}\n\nexport const ArrayFieldRemoveButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<MinusIcon />}\n aria-label=\"Remove row\"\n {...useArrayFieldRemoveButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n}\n\nexport const ArrayFieldAddButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<AddIcon />}\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n}\n\nexport interface ArrayFieldProps\n extends ArrayFieldOptions,\n Omit<FieldProps, 'defaultValue'> {}\n\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>\n {(fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n ))}\n </>\n )}\n </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\nif (__DEV__) {\n ArrayField.displayName = 'ArrayField'\n}\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\nif (__DEV__) {\n ArrayFieldRows.displayName = 'ArrayFieldRows'\n}\n\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>\n ) => {\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min,\n 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}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n }\n)\n\nif (__DEV__) {\n ArrayFieldContainer.displayName = 'ArrayFieldContainer'\n}\n","import * as React from 'react'\nimport {\n FormControl,\n FormLabel,\n FormLabelProps,\n ResponsiveValue,\n useStyleConfig,\n} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { FormLayout } from './layout'\nimport { FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps extends FieldProps {\n name: string\n children: React.ReactNode\n columns?: ResponsiveValue<number>\n spacing?: ResponsiveValue<string | number>\n}\n\nexport const FormLegend = (props: FormLabelProps) => {\n const styles = useStyleConfig('FormLegend')\n return <FormLabel as=\"legend\" sx={styles} {...props} />\n}\n\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const { name, label, hideLabel, children, columns, spacing, ...fieldProps } =\n props\n\n return (\n <FormControl name={name} as=\"fieldset\" {...fieldProps}>\n <FormLegend display={hideLabel ? 'none' : 'block'}>{label}</FormLegend>\n <FormLayout columns={columns} gridGap={spacing}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n ObjectField.displayName = 'ObjectField'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form } from './form'\nimport { FormLayout } from './layout'\nimport { Field, FieldProps } from './field'\n\nimport { ArrayField } from './array-field'\nimport { ObjectField } from './object-field'\nimport { FieldResolver } from './field-resolver'\nimport { useFormContext } from 'react-hook-form'\n\nexport interface FieldsProps {\n schema: any\n fieldResolver?: FieldResolver\n focusFirstField?: boolean\n}\n\nconst mapNestedFields = (resolver: FieldResolver, name: string) => {\n return resolver\n .getNestedFields(name)\n ?.map(\n ({ name, type, ...nestedFieldProps }: FieldProps, i): React.ReactNode => (\n <Field key={name || i} name={name} type={type} {...nestedFieldProps} />\n )\n )\n}\n\nexport const Fields: React.FC<FieldsProps> = ({\n schema,\n fieldResolver,\n focusFirstField,\n ...props\n}) => {\n const resolver = React.useMemo(\n () => fieldResolver || Form.getFieldResolver(schema),\n [schema, fieldResolver]\n )\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 return (\n <FormLayout {...props}>\n {fields.map(\n ({\n name,\n type,\n defaultValue,\n ...fieldProps\n }: FieldProps): 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 <Field key={name} name={name} type={type} {...fieldProps} />\n }\n )}\n </FormLayout>\n )\n}\n\nif (__DEV__) {\n Fields.displayName = 'Fields'\n}\n","import * as React from 'react'\n\nimport { useFormContext } from 'react-hook-form'\n\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { __DEV__ } from '@chakra-ui/utils'\n\nexport interface SubmitButtonProps extends ButtonProps {\n /**\n * Disable the submit button if the form is untouched.\n *\n * Change the default behavior by updating\n * `SubmitButton.defaultProps.disableIfUntouched`\n */\n disableIfUntouched?: boolean\n /**\n * Disable the submit button if the form is invalid.\n *\n * Change the default behavior by updating\n * `SubmitButton.defaultProps.disableIfInvalid`\n */\n disableIfInvalid?: boolean\n}\n\nexport const SubmitButton = React.forwardRef<\n HTMLButtonElement,\n SubmitButtonProps\n>((props, ref) => {\n const {\n children,\n disableIfUntouched,\n disableIfInvalid,\n isDisabled: isDisabledProp,\n isLoading,\n ...rest\n } = props\n const { formState } = useFormContext()\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid) ||\n isDisabledProp\n\n return (\n <Button\n {...rest}\n ref={ref}\n variant=\"primary\"\n type=\"submit\"\n isLoading={formState.isSubmitting || isLoading}\n isDisabled={isDisabled}\n >\n {children}\n </Button>\n )\n})\n\nSubmitButton.defaultProps = {\n label: 'Submit',\n disableIfUntouched: false,\n disableIfInvalid: false,\n}\n\nif (__DEV__) {\n SubmitButton.displayName = 'SubmitButton'\n}\n","import * as React from 'react'\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\nimport { forwardRef } from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form, FormProps } from './form'\nimport { FormLayout } from './layout'\nimport { Fields } from './fields'\nimport { SubmitButton } from './submit-button'\nimport { FieldResolver } from '.'\n\ninterface AutoFormOptions {\n /**\n * The submit button label.\n * Pass `null` to render no submit button.\n */\n submitLabel?: React.ReactNode\n /**\n * The schema.\n * Supports object schema, Zod, Yup or Ajv (JSON Schema).\n * @see https://www.saas-ui.dev/docs/forms/auto-form\n */\n schema: any\n /**\n * The field resolver.\n */\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema' | 'children'>,\n AutoFormOptions {\n children?: React.ReactNode\n}\n\nexport const AutoForm = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: AutoFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const {\n schema,\n submitLabel = 'Submit',\n fieldResolver,\n children,\n ...rest\n } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton>{submitLabel}</SubmitButton>}\n {children}\n </FormLayout>\n </Form>\n )\n }\n) as (<TFieldValues extends FieldValues>(\n props: AutoFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getFieldResolver?: (schema: any) => FieldResolver\n}\n\nif (__DEV__) {\n AutoForm.displayName = 'AutoForm'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport {\n useFormContext,\n useWatch,\n FieldValues,\n UseFormReturn,\n} from 'react-hook-form'\n\nexport interface DisplayIfProps<\n TFieldValues extends FieldValues = FieldValues\n> {\n children: React.ReactElement\n name: string\n defaultValue?: unknown\n isDisabled?: boolean\n isExact?: boolean\n condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean\n}\n\nexport const DisplayIf = <TFieldValues extends FieldValues = FieldValues>({\n children,\n name,\n defaultValue,\n isDisabled,\n isExact,\n condition = (value) => !!value,\n}: DisplayIfProps<TFieldValues>) => {\n const value = useWatch({\n name,\n defaultValue,\n disabled: isDisabled,\n exact: isExact,\n })\n const context = useFormContext<TFieldValues>()\n return condition(value, context) ? children : null\n}\n\nif (__DEV__) {\n DisplayIf.displayName = 'DisplayIf'\n}\n","import * as React from 'react'\nimport { FieldValues, SubmitHandler } from 'react-hook-form'\nimport { createContext, MaybeRenderProp } from '@chakra-ui/react-utils'\nimport {\n useStepper,\n useStep,\n UseStepperProps,\n UseStepperReturn,\n} from '@saas-ui/stepper'\n\nexport interface StepState {\n name: string\n schema?: any\n resolver?: any\n isActive?: boolean\n isCompleted?: boolean\n onSubmit?: FormStepSubmitHandler\n}\n\nexport type FormStepSubmitHandler<\n TFieldValues extends FieldValues = FieldValues\n> = (data: TFieldValues, stepper: UseStepperReturn) => Promise<void>\n\nexport interface StepFormContext extends UseStepperReturn {\n updateStep(state: StepState): void\n steps: Record<string, StepState>\n}\n\nexport const [StepFormProvider, useStepFormContext] =\n createContext<StepFormContext>({\n name: 'StepFormContext',\n errorMessage:\n 'useStepFormContext: `context` is undefined. Seems you forgot to wrap step form components in `<StepForm />`',\n })\n\nimport { FormProps } from './form'\n\nexport interface UseStepFormProps<\n TFieldValues extends FieldValues = FieldValues\n> extends Omit<UseStepperProps, 'onChange'>,\n Omit<FormProps<TFieldValues>, 'children'> {\n children: MaybeRenderProp<UseStepFormReturn<TFieldValues>>\n}\n\nexport interface UseStepFormReturn<\n TFieldValues extends FieldValues = FieldValues\n> extends UseStepperReturn {\n getFormProps(): {\n onSubmit: SubmitHandler<TFieldValues>\n schema?: any\n resolver?: any\n }\n updateStep(step: any): void\n steps: Record<string, any>\n}\n\nexport function useStepForm<TFieldValues extends FieldValues = FieldValues>(\n props: UseStepFormProps<TFieldValues>\n): UseStepFormReturn<TFieldValues> {\n const { onChange, ...rest } = props\n const stepper = useStepper(rest)\n\n const { activeStep, isLastStep, nextStep } = stepper\n\n const [steps, updateSteps] = React.useState<Record<string, StepState>>({})\n\n const onSubmitStep: SubmitHandler<TFieldValues> = React.useCallback(\n async (data) => {\n try {\n const step = steps[activeStep]\n\n if (isLastStep) {\n await props.onSubmit?.(data)\n\n updateStep({\n ...step,\n isCompleted: true,\n })\n\n nextStep() // show completed step\n return\n }\n\n await step.onSubmit?.(data, stepper)\n\n nextStep()\n } catch (e) {\n // Step submission failed.\n }\n },\n [steps, activeStep, isLastStep]\n )\n\n const getFormProps = React.useCallback(() => {\n const step = steps[activeStep]\n return {\n onSubmit: onSubmitStep,\n schema: step?.schema,\n resolver: step?.resolver,\n }\n }, [steps, onSubmitStep, activeStep])\n\n const updateStep = React.useCallback(\n (step: StepState) => {\n updateSteps((steps) => {\n return {\n ...steps,\n [step.name]: step,\n }\n })\n },\n [steps]\n )\n\n return {\n getFormProps,\n updateStep,\n steps,\n ...stepper,\n }\n}\n\nexport interface UseFormStepProps {\n name: string\n schema?: any\n resolver?: any\n onSubmit?: FormStepSubmitHandler\n}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver, onSubmit } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver, onSubmit })\n }, [name, schema])\n\n return {\n ...step,\n ...(steps[name] || { name, schema }),\n }\n}\n","import * as React from 'react'\n\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\n\nimport { chakra, HTMLChakraProps, ThemingProps } from '@chakra-ui/system'\n\nimport { callAllHandlers, runIfFn, cx, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n StepperProvider,\n StepperSteps,\n StepperStepsProps,\n StepperStep,\n useStepperContext,\n StepperContainer,\n StepperProps,\n} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n FormStepSubmitHandler,\n} from './use-step-form'\n\nexport interface StepFormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseStepFormProps<TFieldValues> {}\n\nexport const StepForm = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: StepFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { children, ...rest } = props\n\n const stepper = useStepForm<TFieldValues>(props)\n\n const { getFormProps, ...ctx } = stepper\n\n const context = React.useMemo(() => ctx, [ctx])\n\n return (\n <StepperProvider value={context}>\n <StepFormProvider value={context}>\n <Form ref={ref} {...rest} {...getFormProps()}>\n {runIfFn(children, stepper)}\n </Form>\n </StepFormProvider>\n </StepperProvider>\n )\n }\n) as <TFieldValues extends FieldValues>(\n props: StepFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement\n\nexport interface FormStepOptions {\n /**\n * The step name\n */\n name: string\n /**\n * Schema\n */\n schema?: any\n /**\n * Hook Form Resolver\n */\n resolver?: any\n}\n\nexport interface FormStepperProps\n extends StepperStepsProps,\n ThemingProps<'Stepper'> {}\n\nexport const FormStepper: React.FC<FormStepperProps> = (props) => {\n const { activeIndex, setIndex } = useStepperContext()\n\n const { children, orientation, variant, colorScheme, size, ...rest } = props\n\n const elements = React.Children.map(children, (child) => {\n if (\n React.isValidElement<FormStepProps>(child) &&\n child?.type === FormStep\n ) {\n const { isCompleted } = useFormStep(child.props) // Register this step\n return (\n <StepperStep\n name={child.props.name}\n title={child.props.title}\n isCompleted={isCompleted}\n {...rest}\n >\n {child.props.children}\n </StepperStep>\n )\n }\n return child\n })\n\n const onChange = React.useCallback((i: number) => {\n setIndex(i)\n }, [])\n\n return (\n <StepperContainer\n orientation={orientation}\n step={activeIndex}\n variant={variant}\n colorScheme={colorScheme}\n size={size}\n onChange={onChange}\n >\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StepperContainer>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n Omit<HTMLChakraProps<'div'>, 'onSubmit'> {\n onSubmit?: FormStepSubmitHandler\n}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, onSubmit, ...rest } =\n props\n const step = useFormStep({ name, schema, resolver, onSubmit })\n\n const { isActive } = step\n\n return isActive ? (\n <chakra.div {...rest} className={cx('saas-form__step', className)}>\n {children}\n </chakra.div>\n ) : null\n}\n\nif (__DEV__) {\n FormStep.displayName = 'FormStep'\n}\n\nexport const PrevButton: React.FC<ButtonProps> = (props) => {\n const { isFirstStep, isCompleted, prevStep } = useStepperContext()\n\n return (\n <Button\n isDisabled={isFirstStep || isCompleted}\n label=\"Back\"\n {...props}\n className={cx('saas-form__prev-button', props.className)}\n onClick={callAllHandlers(props.onClick, prevStep)}\n />\n )\n}\n\nif (__DEV__) {\n PrevButton.displayName = 'PrevButton'\n}\n\nexport interface NextButtonProps extends ButtonProps {\n submitLabel?: string\n}\n\nexport const NextButton: React.FC<NextButtonProps> = (props) => {\n const { label = 'Next', submitLabel = 'Complete', ...rest } = props\n const { isLastStep, isCompleted } = useStepperContext()\n\n return (\n <SubmitButton\n {...rest}\n isDisabled={isCompleted}\n className={cx('saas-form__next-button', props.className)}\n >\n {isLastStep || isCompleted ? submitLabel : label}\n </SubmitButton>\n )\n}\n\nif (__DEV__) {\n NextButton.displayName = 'NextButton'\n}\n","import {\n FieldValues,\n useFormContext,\n UseFormReturn,\n useWatch,\n} from 'react-hook-form'\n\nexport interface WatchFieldProps<\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues\n> {\n name: string\n defaultValue?: Value\n isDisabled?: boolean\n isExact?: boolean\n children: (\n value: Value,\n form: UseFormReturn<TFieldValues>\n ) => React.ReactElement | void\n}\n\nexport const WatchField = <\n Value = unknown,\n TFieldValues extends FieldValues = FieldValues\n>(\n props: WatchFieldProps<Value, TFieldValues>\n) => {\n const { name, defaultValue, isDisabled, isExact } = props\n const form = useFormContext<TFieldValues>()\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"],"names":["DisplayField","_ref","name","label","props","_objectWithoutPropertiesLoose","_excluded","React","createElement","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","getValues","useFormContext","_excluded2","_excluded3","_excluded4","_excluded5","_excluded6","_excluded7","_excluded8","_excluded9","_excluded10","inputTypes","defaultInputType","BaseField","help","hideLabel","children","controlProps","formState","error","get","errors","getError","isInvalid","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","type","InputComponent","getInput","_extends","withControlledInput","_ref2","rules","inputProps","control","Controller","render","_ref3","field","onChange","callAllHandlers","onBlur","useMergeRefs","withUncontrolledInput","_ref4","register","_register","component","options","isControlled","id","isDisabled","isReadOnly","isRequired","inputRules","required","undefined","createField","split","map","part","charAt","toUpperCase","slice","join","registerFieldType","leftAddon","rightAddon","size","_ref5","rest","input","Input","InputGroup","NumberInput","PasswordInputField","PasswordInput","TextareaField","Textarea","SwitchField","_ref6","value","Switch","isChecked","SelectField","Select","_ref7","Checkbox","RadioField","RadioInput","NativeSelectField","NativeSelect","pinLength","pinType","spacing","i","inputs","push","PinInputField","key","HStack","PinInput","mapFields","schema","Object","entries","title","objectFieldResolver","getFields","getNestedFields","_field$items","items","properties","Form","mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","useEffect","subscription","watch","_subscription","unsubscribe","FormProvider","chakra","className","cx","runIfFn","getFieldResolver","FormLayoutItem","div","FormLayout","_theme$components$For","_theme$components","_theme$components$For2","defaultProps","theme","useTheme","components","SimpleGrid","gridProps","Children","child","isValidElement","mapNestedFields","cloneElement","ArrayFieldProvider","useArrayFieldContext","createContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","defaultValue","keyName","min","max","context","useFieldArray","useArrayFieldRow","index","clearErrors","remove","fields","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","rowFieldsProps","ArrayFieldRowContainer","ArrayFieldRowFields","ArrayFieldRemoveButton","layoutProps","flex","mr","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","Fragment","fieldProps","FormLegend","styles","useStyleConfig","as","sx","ObjectField","columns","gridGap","_resolver$getNestedFi","nestedFieldProps","fieldResolver","focusFirstField","useMemo","_fields$","setFocus","Fields","disableIfUntouched","disableIfInvalid","isDisabledProp","isLoading","Button","variant","isSubmitting","isDirty","isValid","SubmitButton","AutoForm","submitLabel","DisplayIf","isExact","condition","useWatch","disabled","exact","StepFormProvider","useStepFormContext","errorMessage","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","steps","updateSteps","useState","onSubmitStep","async","step","data","updateStep","isCompleted","e","getFormProps","useStep","StepForm","ctx","StepperProvider","FormStepper","activeIndex","setIndex","useStepperContext","orientation","colorScheme","elements","FormStep","useFormStep","StepperStep","StepperContainer","StepperSteps","isActive","PrevButton","isFirstStep","prevStep","NextButton","WatchField"],"mappings":"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"}
|
package/dist/step-form.d.ts
CHANGED
@@ -7,7 +7,7 @@ import { UseStepFormProps, FormStepSubmitHandler } from './use-step-form';
|
|
7
7
|
export interface StepFormProps<TFieldValues extends FieldValues = FieldValues> extends UseStepFormProps<TFieldValues> {
|
8
8
|
}
|
9
9
|
export declare const StepForm: <TFieldValues extends FieldValues>(props: StepFormProps<TFieldValues> & {
|
10
|
-
ref?: React.ForwardedRef<UseFormReturn<TFieldValues,
|
10
|
+
ref?: React.ForwardedRef<UseFormReturn<TFieldValues, any>> | undefined;
|
11
11
|
}) => React.ReactElement;
|
12
12
|
export interface FormStepOptions {
|
13
13
|
/**
|
@@ -64,14 +64,14 @@ export declare const useArrayField: ({ name, defaultValue, keyName, min, max, }:
|
|
64
64
|
defaultValue: Record<string, any>;
|
65
65
|
min: number | undefined;
|
66
66
|
max: number | undefined;
|
67
|
-
swap: (
|
68
|
-
move: (
|
69
|
-
prepend: (
|
70
|
-
append: (
|
71
|
-
remove: (
|
72
|
-
insert: (
|
73
|
-
update: (
|
74
|
-
replace: (
|
67
|
+
swap: import("react-hook-form").UseFieldArraySwap;
|
68
|
+
move: import("react-hook-form").UseFieldArrayMove;
|
69
|
+
prepend: import("react-hook-form").UseFieldArrayPrepend<import("react-hook-form").FieldValues, string>;
|
70
|
+
append: import("react-hook-form").UseFieldArrayAppend<import("react-hook-form").FieldValues, string>;
|
71
|
+
remove: import("react-hook-form").UseFieldArrayRemove;
|
72
|
+
insert: import("react-hook-form").UseFieldArrayInsert<import("react-hook-form").FieldValues, string>;
|
73
|
+
update: import("react-hook-form").UseFieldArrayUpdate<import("react-hook-form").FieldValues, string>;
|
74
|
+
replace: import("react-hook-form").UseFieldArrayReplace<import("react-hook-form").FieldValues, string>;
|
75
75
|
fields: Record<string, string>[];
|
76
76
|
};
|
77
77
|
export interface UseArrayFieldRowProps {
|
@@ -20,7 +20,7 @@ export declare const yupFieldResolver: (schema: AnyObjectSchema) => {
|
|
20
20
|
};
|
21
21
|
export declare const yupForm: (schema: AnyObjectSchema, schemaOptions?: {}, resolverOptions?: {}) => {
|
22
22
|
schema: AnyObjectSchema;
|
23
|
-
resolver: <TFieldValues extends import("@saas-ui/forms").FieldValues, TContext>(values:
|
23
|
+
resolver: <TFieldValues extends import("@saas-ui/forms").FieldValues, TContext>(values: TFieldValues, context: TContext | undefined, options: import("@saas-ui/forms").ResolverOptions<TFieldValues>) => Promise<import("@saas-ui/forms").ResolverResult<TFieldValues>>;
|
24
24
|
fieldResolver: {
|
25
25
|
getFields(): FieldProps<import("@saas-ui/forms").FieldValues, string>[];
|
26
26
|
getNestedFields(name: string): FieldProps<import("@saas-ui/forms").FieldValues, string>[];
|
@@ -20,7 +20,7 @@ export declare const zodFieldResolver: <T extends z.ZodTypeAny>(schema: T) => {
|
|
20
20
|
};
|
21
21
|
export declare const zodForm: <T extends z.ZodTypeAny>(schema: T, schemaOptions?: {}, resolverOptions?: {}) => {
|
22
22
|
schema: T;
|
23
|
-
resolver: <TFieldValues extends import("@saas-ui/forms").FieldValues, TContext>(values:
|
23
|
+
resolver: <TFieldValues extends import("@saas-ui/forms").FieldValues, TContext>(values: TFieldValues, context: TContext | undefined, options: import("@saas-ui/forms").ResolverOptions<TFieldValues>) => Promise<import("@saas-ui/forms").ResolverResult<TFieldValues>>;
|
24
24
|
fieldResolver: {
|
25
25
|
getFields(): FieldProps<import("@saas-ui/forms").FieldValues, string>[];
|
26
26
|
getNestedFields(name: string): FieldProps<import("@saas-ui/forms").FieldValues, string>[];
|
package/package.json
CHANGED
package/src/form.tsx
CHANGED
@@ -15,7 +15,6 @@ import {
|
|
15
15
|
ResolverResult,
|
16
16
|
ChangeHandler,
|
17
17
|
WatchObserver,
|
18
|
-
UnpackNestedValue,
|
19
18
|
} from 'react-hook-form'
|
20
19
|
import { objectFieldResolver, FieldResolver } from './field-resolver'
|
21
20
|
import { MaybeRenderProp } from '@chakra-ui/react-utils'
|
@@ -156,7 +155,7 @@ export type GetResolver = <
|
|
156
155
|
>(
|
157
156
|
schema: any
|
158
157
|
) => (
|
159
|
-
values:
|
158
|
+
values: TFieldValues,
|
160
159
|
context: TContext | undefined,
|
161
160
|
options: ResolverOptions<TFieldValues>
|
162
161
|
) => Promise<ResolverResult<TFieldValues>>
|