@saas-ui/forms 0.8.0-next.3 → 0.8.0-next.4

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @saas-ui/forms
2
2
 
3
+ ## 0.8.0-next.4
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated Chakra to 2.1.2
8
+ - Updated dependencies
9
+ - @saas-ui/button@0.5.0-next.4
10
+ - @saas-ui/input-right-button@0.4.0-next.4
11
+ - @saas-ui/number-input@0.4.0-next.4
12
+ - @saas-ui/password-input@0.4.0-next.4
13
+ - @saas-ui/pin-input@0.4.0-next.4
14
+ - @saas-ui/radio@0.4.0-next.4
15
+ - @saas-ui/react-utils@0.2.0-next.4
16
+ - @saas-ui/select@0.5.0-next.4
17
+ - @saas-ui/stepper@0.3.0-next.4
18
+
3
19
  ## 0.8.0-next.3
4
20
 
5
21
  ### Patch Changes
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"],"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} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { NumberInput } from '@saas-ui/number-input'\nimport { PasswordInput } from '@saas-ui/password-input'\nimport { RadioInput } from '@saas-ui/radio'\nimport { PinInput } from '@saas-ui/pin-input'\nimport { Select, NativeSelect } from '@saas-ui/select'\nimport { FocusableElement } from '@chakra-ui/utils'\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 type FieldTypes =\n | 'text'\n | 'number'\n | 'password'\n | 'textarea'\n | 'select'\n | 'native-select'\n | 'checkbox'\n | 'radio'\n | 'switch'\n | 'pin'\n | string\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 * Options used for selects and radio fields\n */\n options?: Option[]\n /**\n * The field type\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 * @default 'text'\n */\n type?: FieldTypes\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<FieldTypes, 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, variant, hideLabel, children, ...controlProps } =\n props\n\n const { formState } = useFormContext()\n\n const error = getError(name, formState)\n\n return (\n <FormControl variant={variant} {...controlProps} isInvalid={!!error}>\n {label && !hideLabel ? (\n <FormLabel variant={variant}>{label}</FormLabel>\n ) : 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 const Field = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> & {\n [key: string]: unknown // Make sure attributes of custom components work. Need to change this to a global typedef at some point.\n },\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 [key: string]: unknown\n } & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement\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<FieldProps, typeof FormControl>((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n rules,\n variant,\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 variant={variant}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={label}\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: 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 ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: 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 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 checkbox or switch field.\n */\nexport const registerFieldType = (\n type: string,\n component: React.FC<any>,\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 })\n\n inputTypes[type] = Field\n\n return Field\n}\n\n// @todo Consider not registering all fields by default to lower the package size and computations.\n// Not all types may be required in a project.\nexport const InputField = registerFieldType('text', Input)\nexport const NumberInputField = registerFieldType('number', NumberInput, {\n isControlled: true,\n})\nexport const PasswordInputFIeld = registerFieldType('password', PasswordInput)\nexport const TextareaField = registerFieldType('textarea', Textarea)\nexport const SwitchField = registerFieldType(\n 'switch',\n forwardRef(({ label, ...props }: { label?: string }, ref) => {\n return (\n <Switch ref={ref} {...props}>\n {label}\n </Switch>\n )\n }),\n {\n isControlled: true,\n hideLabel: true,\n }\n)\nexport const SelectField = registerFieldType('select', Select, {\n isControlled: true,\n})\nexport const CheckboxField = registerFieldType(\n 'checkbox',\n forwardRef(({ label, ...props }: { label?: string }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n }),\n {\n hideLabel: true,\n }\n)\nexport const RadioField = registerFieldType('radio', RadioInput, {\n isControlled: true,\n})\nexport const PinField = registerFieldType('pin', PinInput, {\n isControlled: true,\n})\nexport const NativeSelectField = registerFieldType(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\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) =>\n schema &&\n Object.entries(schema).map(([name, field]) => {\n return {\n ...field,\n name,\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, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n useForm,\n FormProvider,\n UseFormProps,\n UseFormReturn,\n FieldValues,\n SubmitHandler,\n SubmitErrorHandler,\n UnpackNestedValue,\n ResolverOptions,\n ResolverResult,\n} from 'react-hook-form'\nimport { objectFieldResolver, FieldResolver } from './field-resolver'\nimport { css } from '@emotion/react'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\ninterface FormOptions<TFieldValues extends FieldValues = FieldValues> {\n /**\n * The form schema, currently supports Yup schema only.\n */\n schema?: any\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.MutableRefObject<HTMLFormElement>\n}\n\n/**\n * @todo Figure out how to pass down FieldValues to all Field components,\n * if at all possible.\n */\nexport interface FormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseFormProps<TFieldValues>,\n Omit<HTMLChakraProps<'form'>, 'onSubmit' | 'onError'>,\n FormOptions<TFieldValues> {}\n\nexport const Form = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\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 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?.(schema)\n }\n\n const methods = useForm<TFieldValues>(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 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 {children}\n </chakra.form>\n </FormProvider>\n )\n }\n) as (<TFieldValues extends FieldValues>(\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 schema: any\n) => <TFieldValues extends FieldValues, TContext>(\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 } 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 } 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 {\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 children: React.ReactNode\n}\n\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n columns,\n spacing,\n index,\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields columns={columns} spacing={spacing}>\n {children}\n </ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n\n children: React.ReactNode\n}\n\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n columns,\n spacing,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout\n flex=\"1\"\n columns={columns}\n gridGap={spacing}\n mr=\"2\"\n {...layoutProps}\n >\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 = React.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)\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 useStyles,\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 = useStyles()\n return <FormLabel as=\"legend\" sx={styles.legend} {...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'\n\nexport interface FieldsProps {\n schema: any\n fieldResolver?: FieldResolver\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 ...props\n}) => {\n const resolver = React.useMemo(\n () => fieldResolver || Form.getFieldResolver(schema),\n [schema, fieldResolver]\n )\n\n return (\n <FormLayout {...props}>\n {resolver\n .getFields()\n .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 { forwardRef } from '@chakra-ui/system'\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 = forwardRef<SubmitButtonProps, 'button'>(\n (props, ref) => {\n const { children, disableIfUntouched, disableIfInvalid, ...rest } = props\n const { formState } = useFormContext()\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid)\n\n return (\n <Button\n type=\"submit\"\n isLoading={formState.isSubmitting}\n isPrimary\n ref={ref}\n isDisabled={isDisabled}\n {...rest}\n >\n {children}\n </Button>\n )\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 submitLabel?: false | string\n schema: any\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema'>,\n AutoFormOptions {}\n\nexport const AutoForm = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: AutoFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { schema, submitLabel = 'Submit', fieldResolver, ...rest } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton label={submitLabel} />}\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<TFieldValues> {\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 } 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}\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 UseStepperProps,\n Omit<FormProps<TFieldValues>, 'children'> {\n children:\n | React.ReactNode\n | ((stepper: UseStepFormReturn<TFieldValues>) => React.ReactElement)\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 stepper = useStepper(props)\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 if (isLastStep) {\n return props\n .onSubmit?.(data)\n .then(() => {\n const step = steps[activeStep]\n updateStep({\n ...step,\n isCompleted: true,\n })\n })\n .then(nextStep) // Show completed step\n }\n\n nextStep()\n },\n [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}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver })\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 {\n chakra,\n HTMLChakraProps,\n useMultiStyleConfig,\n StylesProvider,\n SystemStyleObject,\n} 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} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form, FormProps } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n UseStepFormReturn,\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: FormProps<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 const FormStepper: React.FC<StepperStepsProps> = (props) => {\n const styles = useMultiStyleConfig('Stepper', props) as Record<\n string,\n SystemStyleObject\n >\n\n const { children } = props\n\n const elements = React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child?.type === FormStep) {\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 >\n {child.props.children}\n </StepperStep>\n )\n }\n return child\n })\n\n return (\n <StylesProvider value={styles}>\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StylesProvider>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n HTMLChakraProps<'div'> {}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, ...rest } = props\n const step = useFormStep({ name, schema, resolver })\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 isDisabled={isCompleted}\n label={isLastStep || isCompleted ? submitLabel : label}\n {...rest}\n className={cx('saas-form__next-button', props.className)}\n />\n )\n}\n\nif (__DEV__) {\n NextButton.displayName = 'NextButton'\n}\n"],"names":["DisplayField","name","label","props","React","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","getValues","useFormContext","inputTypes","BaseField","help","variant","hideLabel","children","controlProps","error","formState","get","errors","getError","isInvalid","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","type","withControlledInput","InputComponent","rules","inputProps","Controller","control","render","field","_ref","useMergeRefs","withUncontrolledInput","register","registerFieldType","component","options","id","isDisabled","isReadOnly","isRequired","inputRules","required","createField","isControlled","split","map","part","charAt","toUpperCase","slice","join","InputField","Input","NumberInputField","NumberInput","PasswordInputFIeld","PasswordInput","TextareaField","Textarea","SwitchField","Switch","SelectField","Select","CheckboxField","Checkbox","RadioField","RadioInput","PinField","PinInput","NativeSelectField","NativeSelect","mapFields","schema","Object","entries","objectFieldResolver","getFields","getNestedFields","items","properties","Form","mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","rest","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","FormProvider","chakra","className","cx","getFieldResolver","FormLayoutItem","div","FormLayout","gridProps","useTheme","components","_theme$components","_theme$components$For2","defaultProps","spacing","SimpleGrid","Children","child","isValidElement","mapNestedFields","cloneElement","createContext","ArrayFieldProvider","useArrayFieldContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","defaultValue","keyName","min","max","useFieldArray","useArrayFieldRow","index","clearErrors","remove","fields","useEffect","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","ArrayFieldRowContainer","ArrayFieldRowFields","columns","ArrayFieldRemoveButton","layoutProps","flex","gridGap","mr","context","value","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","key","fieldProps","FormLegend","styles","useStyles","as","sx","legend","ObjectField","_resolver$getNestedFi","i","nestedFieldProps","Fields","fieldResolver","useMemo","SubmitButton","disableIfUntouched","disableIfInvalid","Button","isLoading","isSubmitting","isPrimary","isDirty","isValid","AutoForm","submitLabel","DisplayIf","condition","useWatch","disabled","exact","isExact","errorMessage","StepFormProvider","useStepFormContext","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","useState","steps","updateSteps","onSubmitStep","data","then","updateStep","isCompleted","getFormProps","step","useFormStep","useStep","StepForm","ctx","StepperProvider","runIfFn","FormStep","isActive","PrevButton","useStepperContext","prevStep","isFirstStep","callAllHandlers","NextButton","useMultiStyleConfig","elements","StepperStep","title","StylesProvider","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"],"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} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { NumberInput } from '@saas-ui/number-input'\nimport { PasswordInput } from '@saas-ui/password-input'\nimport { RadioInput } from '@saas-ui/radio'\nimport { PinInput } from '@saas-ui/pin-input'\nimport { Select, NativeSelect } from '@saas-ui/select'\nimport { FocusableElement } from '@chakra-ui/utils'\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 type FieldTypes =\n | 'text'\n | 'number'\n | 'password'\n | 'textarea'\n | 'select'\n | 'native-select'\n | 'checkbox'\n | 'radio'\n | 'switch'\n | 'pin'\n | string\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 * Options used for selects and radio fields\n */\n options?: Option[]\n /**\n * The field type\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 * @default 'text'\n */\n type?: FieldTypes\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<FieldTypes, 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, variant, hideLabel, children, ...controlProps } =\n props\n\n const { formState } = useFormContext()\n\n const error = getError(name, formState)\n\n return (\n <FormControl variant={variant} {...controlProps} isInvalid={!!error}>\n {label && !hideLabel ? (\n <FormLabel variant={variant}>{label}</FormLabel>\n ) : 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 const Field = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> & {\n [key: string]: unknown // Make sure attributes of custom components work. Need to change this to a global typedef at some point.\n },\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 [key: string]: unknown\n } & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement\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<FieldProps, typeof FormControl>((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n rules,\n variant,\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 variant={variant}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={label}\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: 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 ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: 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 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 checkbox or switch field.\n */\nexport const registerFieldType = (\n type: string,\n component: React.FC<any>,\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 })\n\n inputTypes[type] = Field\n\n return Field\n}\n\n// @todo Consider not registering all fields by default to lower the package size and computations.\n// Not all types may be required in a project.\nexport const InputField = registerFieldType('text', Input)\nexport const NumberInputField = registerFieldType('number', NumberInput, {\n isControlled: true,\n})\nexport const PasswordInputFIeld = registerFieldType('password', PasswordInput)\nexport const TextareaField = registerFieldType('textarea', Textarea)\nexport const SwitchField = registerFieldType(\n 'switch',\n forwardRef(({ label, ...props }: { label?: string }, ref) => {\n return (\n <Switch ref={ref} {...props}>\n {label}\n </Switch>\n )\n }),\n {\n isControlled: true,\n hideLabel: true,\n }\n)\nexport const SelectField = registerFieldType('select', Select, {\n isControlled: true,\n})\nexport const CheckboxField = registerFieldType(\n 'checkbox',\n forwardRef(({ label, ...props }: { label?: string }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n }),\n {\n hideLabel: true,\n }\n)\nexport const RadioField = registerFieldType('radio', RadioInput, {\n isControlled: true,\n})\nexport const PinField = registerFieldType('pin', PinInput, {\n isControlled: true,\n})\nexport const NativeSelectField = registerFieldType(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\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) =>\n schema &&\n Object.entries(schema).map(([name, field]) => {\n return {\n ...field,\n name,\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, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n useForm,\n FormProvider,\n UseFormProps,\n UseFormReturn,\n FieldValues,\n SubmitHandler,\n SubmitErrorHandler,\n UnpackNestedValue,\n ResolverOptions,\n ResolverResult,\n} from 'react-hook-form'\nimport { objectFieldResolver, FieldResolver } from './field-resolver'\nimport { css } from '@emotion/react'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\ninterface FormOptions<TFieldValues extends FieldValues = FieldValues> {\n /**\n * The form schema, currently supports Yup schema only.\n */\n schema?: any\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.MutableRefObject<HTMLFormElement>\n}\n\n/**\n * @todo Figure out how to pass down FieldValues to all Field components,\n * if at all possible.\n */\nexport interface FormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseFormProps<TFieldValues>,\n Omit<HTMLChakraProps<'form'>, 'onSubmit' | 'onError'>,\n FormOptions<TFieldValues> {}\n\nexport const Form = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\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 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?.(schema)\n }\n\n const methods = useForm<TFieldValues>(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 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 {children}\n </chakra.form>\n </FormProvider>\n )\n }\n) as (<TFieldValues extends FieldValues>(\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 schema: any\n) => <TFieldValues extends FieldValues, TContext>(\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 } 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 } 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 {\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 children: React.ReactNode\n}\n\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n columns,\n spacing,\n index,\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields columns={columns} spacing={spacing}>\n {children}\n </ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n\n children: React.ReactNode\n}\n\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n columns,\n spacing,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout\n flex=\"1\"\n columns={columns}\n gridGap={spacing}\n mr=\"2\"\n {...layoutProps}\n >\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 = React.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)\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 useStyles,\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 = useStyles()\n return <FormLabel as=\"legend\" sx={styles.legend} {...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'\n\nexport interface FieldsProps {\n schema: any\n fieldResolver?: FieldResolver\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 ...props\n}) => {\n const resolver = React.useMemo(\n () => fieldResolver || Form.getFieldResolver(schema),\n [schema, fieldResolver]\n )\n\n return (\n <FormLayout {...props}>\n {resolver\n .getFields()\n .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 { forwardRef } from '@chakra-ui/system'\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 = forwardRef<SubmitButtonProps, 'button'>(\n (props, ref) => {\n const { children, disableIfUntouched, disableIfInvalid, ...rest } = props\n const { formState } = useFormContext()\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid)\n\n return (\n <Button\n type=\"submit\"\n isLoading={formState.isSubmitting}\n isPrimary\n ref={ref}\n isDisabled={isDisabled}\n {...rest}\n >\n {children}\n </Button>\n )\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 submitLabel?: false | string\n schema: any\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema'>,\n AutoFormOptions {}\n\nexport const AutoForm = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: AutoFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { schema, submitLabel = 'Submit', fieldResolver, ...rest } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton label={submitLabel} />}\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<TFieldValues> {\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 } 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}\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 UseStepperProps,\n Omit<FormProps<TFieldValues>, 'children'> {\n children:\n | React.ReactNode\n | ((stepper: UseStepFormReturn<TFieldValues>) => React.ReactElement)\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 stepper = useStepper(props)\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 if (isLastStep) {\n return props\n .onSubmit?.(data)\n .then(() => {\n const step = steps[activeStep]\n updateStep({\n ...step,\n isCompleted: true,\n })\n })\n .then(nextStep) // Show completed step\n }\n\n nextStep()\n },\n [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}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver })\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 {\n chakra,\n HTMLChakraProps,\n useMultiStyleConfig,\n StylesProvider,\n SystemStyleObject,\n} 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} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form, FormProps } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n UseStepFormReturn,\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: FormProps<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 const FormStepper: React.FC<StepperStepsProps> = (props) => {\n const styles = useMultiStyleConfig('Stepper', props)\n\n const { children } = props\n\n const elements = React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child?.type === FormStep) {\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 >\n {child.props.children}\n </StepperStep>\n )\n }\n return child\n })\n\n return (\n <StylesProvider value={styles}>\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StylesProvider>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n HTMLChakraProps<'div'> {}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, ...rest } = props\n const step = useFormStep({ name, schema, resolver })\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 isDisabled={isCompleted}\n label={isLastStep || isCompleted ? submitLabel : label}\n {...rest}\n className={cx('saas-form__next-button', props.className)}\n />\n )\n}\n\nif (__DEV__) {\n NextButton.displayName = 'NextButton'\n}\n"],"names":["DisplayField","name","label","props","React","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","getValues","useFormContext","inputTypes","BaseField","help","variant","hideLabel","children","controlProps","error","formState","get","errors","getError","isInvalid","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","type","withControlledInput","InputComponent","rules","inputProps","Controller","control","render","field","_ref","useMergeRefs","withUncontrolledInput","register","registerFieldType","component","options","id","isDisabled","isReadOnly","isRequired","inputRules","required","createField","isControlled","split","map","part","charAt","toUpperCase","slice","join","InputField","Input","NumberInputField","NumberInput","PasswordInputFIeld","PasswordInput","TextareaField","Textarea","SwitchField","Switch","SelectField","Select","CheckboxField","Checkbox","RadioField","RadioInput","PinField","PinInput","NativeSelectField","NativeSelect","mapFields","schema","Object","entries","objectFieldResolver","getFields","getNestedFields","items","properties","Form","mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","rest","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","FormProvider","chakra","className","cx","getFieldResolver","FormLayoutItem","div","FormLayout","gridProps","useTheme","components","_theme$components","_theme$components$For2","defaultProps","spacing","SimpleGrid","Children","child","isValidElement","mapNestedFields","cloneElement","createContext","ArrayFieldProvider","useArrayFieldContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","defaultValue","keyName","min","max","useFieldArray","useArrayFieldRow","index","clearErrors","remove","fields","useEffect","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","ArrayFieldRowContainer","ArrayFieldRowFields","columns","ArrayFieldRemoveButton","layoutProps","flex","gridGap","mr","context","value","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","key","fieldProps","FormLegend","styles","useStyles","as","sx","legend","ObjectField","_resolver$getNestedFi","i","nestedFieldProps","Fields","fieldResolver","useMemo","SubmitButton","disableIfUntouched","disableIfInvalid","Button","isLoading","isSubmitting","isPrimary","isDirty","isValid","AutoForm","submitLabel","DisplayIf","condition","useWatch","disabled","exact","isExact","errorMessage","StepFormProvider","useStepFormContext","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","useState","steps","updateSteps","onSubmitStep","data","then","updateStep","isCompleted","getFormProps","step","useFormStep","useStep","StepForm","ctx","StepperProvider","runIfFn","FormStep","isActive","PrevButton","useStepperContext","prevStep","isFirstStep","callAllHandlers","NextButton","useMultiStyleConfig","elements","StepperStep","title","StylesProvider","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"],"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} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { NumberInput } from '@saas-ui/number-input'\nimport { PasswordInput } from '@saas-ui/password-input'\nimport { RadioInput } from '@saas-ui/radio'\nimport { PinInput } from '@saas-ui/pin-input'\nimport { Select, NativeSelect } from '@saas-ui/select'\nimport { FocusableElement } from '@chakra-ui/utils'\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 type FieldTypes =\n | 'text'\n | 'number'\n | 'password'\n | 'textarea'\n | 'select'\n | 'native-select'\n | 'checkbox'\n | 'radio'\n | 'switch'\n | 'pin'\n | string\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 * Options used for selects and radio fields\n */\n options?: Option[]\n /**\n * The field type\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 * @default 'text'\n */\n type?: FieldTypes\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<FieldTypes, 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, variant, hideLabel, children, ...controlProps } =\n props\n\n const { formState } = useFormContext()\n\n const error = getError(name, formState)\n\n return (\n <FormControl variant={variant} {...controlProps} isInvalid={!!error}>\n {label && !hideLabel ? (\n <FormLabel variant={variant}>{label}</FormLabel>\n ) : 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 const Field = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> & {\n [key: string]: unknown // Make sure attributes of custom components work. Need to change this to a global typedef at some point.\n },\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 [key: string]: unknown\n } & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement\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<FieldProps, typeof FormControl>((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n rules,\n variant,\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 variant={variant}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={label}\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: 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 ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: 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 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 checkbox or switch field.\n */\nexport const registerFieldType = (\n type: string,\n component: React.FC<any>,\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 })\n\n inputTypes[type] = Field\n\n return Field\n}\n\n// @todo Consider not registering all fields by default to lower the package size and computations.\n// Not all types may be required in a project.\nexport const InputField = registerFieldType('text', Input)\nexport const NumberInputField = registerFieldType('number', NumberInput, {\n isControlled: true,\n})\nexport const PasswordInputFIeld = registerFieldType('password', PasswordInput)\nexport const TextareaField = registerFieldType('textarea', Textarea)\nexport const SwitchField = registerFieldType(\n 'switch',\n forwardRef(({ label, ...props }: { label?: string }, ref) => {\n return (\n <Switch ref={ref} {...props}>\n {label}\n </Switch>\n )\n }),\n {\n isControlled: true,\n hideLabel: true,\n }\n)\nexport const SelectField = registerFieldType('select', Select, {\n isControlled: true,\n})\nexport const CheckboxField = registerFieldType(\n 'checkbox',\n forwardRef(({ label, ...props }: { label?: string }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n }),\n {\n hideLabel: true,\n }\n)\nexport const RadioField = registerFieldType('radio', RadioInput, {\n isControlled: true,\n})\nexport const PinField = registerFieldType('pin', PinInput, {\n isControlled: true,\n})\nexport const NativeSelectField = registerFieldType(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\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) =>\n schema &&\n Object.entries(schema).map(([name, field]) => {\n return {\n ...field,\n name,\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, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n useForm,\n FormProvider,\n UseFormProps,\n UseFormReturn,\n FieldValues,\n SubmitHandler,\n SubmitErrorHandler,\n UnpackNestedValue,\n ResolverOptions,\n ResolverResult,\n} from 'react-hook-form'\nimport { objectFieldResolver, FieldResolver } from './field-resolver'\nimport { css } from '@emotion/react'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\ninterface FormOptions<TFieldValues extends FieldValues = FieldValues> {\n /**\n * The form schema, currently supports Yup schema only.\n */\n schema?: any\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.MutableRefObject<HTMLFormElement>\n}\n\n/**\n * @todo Figure out how to pass down FieldValues to all Field components,\n * if at all possible.\n */\nexport interface FormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseFormProps<TFieldValues>,\n Omit<HTMLChakraProps<'form'>, 'onSubmit' | 'onError'>,\n FormOptions<TFieldValues> {}\n\nexport const Form = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\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 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?.(schema)\n }\n\n const methods = useForm<TFieldValues>(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 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 {children}\n </chakra.form>\n </FormProvider>\n )\n }\n) as (<TFieldValues extends FieldValues>(\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 schema: any\n) => <TFieldValues extends FieldValues, TContext>(\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 } 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 } 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 {\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 children: React.ReactNode\n}\n\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n columns,\n spacing,\n index,\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields columns={columns} spacing={spacing}>\n {children}\n </ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n\n children: React.ReactNode\n}\n\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n columns,\n spacing,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout\n flex=\"1\"\n columns={columns}\n gridGap={spacing}\n mr=\"2\"\n {...layoutProps}\n >\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 = React.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)\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 useStyles,\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 = useStyles()\n return <FormLabel as=\"legend\" sx={styles.legend} {...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'\n\nexport interface FieldsProps {\n schema: any\n fieldResolver?: FieldResolver\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 ...props\n}) => {\n const resolver = React.useMemo(\n () => fieldResolver || Form.getFieldResolver(schema),\n [schema, fieldResolver]\n )\n\n return (\n <FormLayout {...props}>\n {resolver\n .getFields()\n .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 { forwardRef } from '@chakra-ui/system'\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 = forwardRef<SubmitButtonProps, 'button'>(\n (props, ref) => {\n const { children, disableIfUntouched, disableIfInvalid, ...rest } = props\n const { formState } = useFormContext()\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid)\n\n return (\n <Button\n type=\"submit\"\n isLoading={formState.isSubmitting}\n isPrimary\n ref={ref}\n isDisabled={isDisabled}\n {...rest}\n >\n {children}\n </Button>\n )\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 submitLabel?: false | string\n schema: any\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema'>,\n AutoFormOptions {}\n\nexport const AutoForm = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: AutoFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { schema, submitLabel = 'Submit', fieldResolver, ...rest } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton label={submitLabel} />}\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<TFieldValues> {\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 } 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}\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 UseStepperProps,\n Omit<FormProps<TFieldValues>, 'children'> {\n children:\n | React.ReactNode\n | ((stepper: UseStepFormReturn<TFieldValues>) => React.ReactElement)\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 stepper = useStepper(props)\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 if (isLastStep) {\n return props\n .onSubmit?.(data)\n .then(() => {\n const step = steps[activeStep]\n updateStep({\n ...step,\n isCompleted: true,\n })\n })\n .then(nextStep) // Show completed step\n }\n\n nextStep()\n },\n [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}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver })\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 {\n chakra,\n HTMLChakraProps,\n useMultiStyleConfig,\n StylesProvider,\n SystemStyleObject,\n} 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} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form, FormProps } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n UseStepFormReturn,\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: FormProps<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 const FormStepper: React.FC<StepperStepsProps> = (props) => {\n const styles = useMultiStyleConfig('Stepper', props) as Record<\n string,\n SystemStyleObject\n >\n\n const { children } = props\n\n const elements = React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child?.type === FormStep) {\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 >\n {child.props.children}\n </StepperStep>\n )\n }\n return child\n })\n\n return (\n <StylesProvider value={styles}>\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StylesProvider>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n HTMLChakraProps<'div'> {}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, ...rest } = props\n const step = useFormStep({ name, schema, resolver })\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 isDisabled={isCompleted}\n label={isLastStep || isCompleted ? submitLabel : label}\n {...rest}\n className={cx('saas-form__next-button', props.className)}\n />\n )\n}\n\nif (__DEV__) {\n NextButton.displayName = 'NextButton'\n}\n"],"names":["DisplayField","_ref","name","label","props","React","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","getValues","useFormContext","inputTypes","defaultInputType","BaseField","help","variant","hideLabel","children","controlProps","formState","error","get","errors","getError","isInvalid","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","type","InputComponent","getInput","withControlledInput","rules","inputProps","control","Controller","render","_ref3","field","useMergeRefs","withUncontrolledInput","register","registerFieldType","component","options","isControlled","id","isDisabled","isReadOnly","isRequired","inputRules","required","createField","split","map","part","charAt","toUpperCase","slice","join","InputField","Input","NumberInputField","NumberInput","PasswordInputFIeld","PasswordInput","TextareaField","Textarea","SwitchField","Switch","SelectField","Select","CheckboxField","Checkbox","RadioField","RadioInput","PinField","PinInput","NativeSelectField","NativeSelect","mapFields","schema","Object","entries","objectFieldResolver","getFields","getNestedFields","items","properties","Form","mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","rest","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","FormProvider","chakra","className","cx","getFieldResolver","FormLayoutItem","div","FormLayout","gridProps","useTheme","components","_theme$components","_theme$components$For2","defaultProps","spacing","SimpleGrid","Children","child","isValidElement","mapNestedFields","cloneElement","ArrayFieldProvider","useArrayFieldContext","createContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","defaultValue","keyName","min","max","useFieldArray","useArrayFieldRow","index","clearErrors","remove","fields","useEffect","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","columns","ArrayFieldRowContainer","ArrayFieldRowFields","ArrayFieldRemoveButton","layoutProps","flex","gridGap","mr","context","value","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","key","fieldProps","FormLegend","styles","useStyles","as","sx","legend","ObjectField","_resolver$getNestedFi","i","nestedFieldProps","Fields","_ref2","fieldResolver","useMemo","SubmitButton","disableIfUntouched","disableIfInvalid","Button","isLoading","isSubmitting","isPrimary","isDirty","isValid","AutoForm","submitLabel","DisplayIf","isExact","condition","useWatch","disabled","exact","StepFormProvider","useStepFormContext","errorMessage","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","steps","updateSteps","useState","onSubmitStep","async","data","then","updateStep","isCompleted","getFormProps","step","useFormStep","useStep","StepForm","ctx","StepperProvider","runIfFn","FormStepper","useMultiStyleConfig","elements","FormStep","StepperStep","title","StylesProvider","StepperSteps","isActive","PrevButton","isFirstStep","prevStep","useStepperContext","callAllHandlers","NextButton"],"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"],"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} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { NumberInput } from '@saas-ui/number-input'\nimport { PasswordInput } from '@saas-ui/password-input'\nimport { RadioInput } from '@saas-ui/radio'\nimport { PinInput } from '@saas-ui/pin-input'\nimport { Select, NativeSelect } from '@saas-ui/select'\nimport { FocusableElement } from '@chakra-ui/utils'\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 type FieldTypes =\n | 'text'\n | 'number'\n | 'password'\n | 'textarea'\n | 'select'\n | 'native-select'\n | 'checkbox'\n | 'radio'\n | 'switch'\n | 'pin'\n | string\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 * Options used for selects and radio fields\n */\n options?: Option[]\n /**\n * The field type\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 * @default 'text'\n */\n type?: FieldTypes\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<FieldTypes, 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, variant, hideLabel, children, ...controlProps } =\n props\n\n const { formState } = useFormContext()\n\n const error = getError(name, formState)\n\n return (\n <FormControl variant={variant} {...controlProps} isInvalid={!!error}>\n {label && !hideLabel ? (\n <FormLabel variant={variant}>{label}</FormLabel>\n ) : 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 const Field = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> & {\n [key: string]: unknown // Make sure attributes of custom components work. Need to change this to a global typedef at some point.\n },\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 [key: string]: unknown\n } & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement\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<FieldProps, typeof FormControl>((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n rules,\n variant,\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 variant={variant}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={label}\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: 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 ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: 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 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 checkbox or switch field.\n */\nexport const registerFieldType = (\n type: string,\n component: React.FC<any>,\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 })\n\n inputTypes[type] = Field\n\n return Field\n}\n\n// @todo Consider not registering all fields by default to lower the package size and computations.\n// Not all types may be required in a project.\nexport const InputField = registerFieldType('text', Input)\nexport const NumberInputField = registerFieldType('number', NumberInput, {\n isControlled: true,\n})\nexport const PasswordInputFIeld = registerFieldType('password', PasswordInput)\nexport const TextareaField = registerFieldType('textarea', Textarea)\nexport const SwitchField = registerFieldType(\n 'switch',\n forwardRef(({ label, ...props }: { label?: string }, ref) => {\n return (\n <Switch ref={ref} {...props}>\n {label}\n </Switch>\n )\n }),\n {\n isControlled: true,\n hideLabel: true,\n }\n)\nexport const SelectField = registerFieldType('select', Select, {\n isControlled: true,\n})\nexport const CheckboxField = registerFieldType(\n 'checkbox',\n forwardRef(({ label, ...props }: { label?: string }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n }),\n {\n hideLabel: true,\n }\n)\nexport const RadioField = registerFieldType('radio', RadioInput, {\n isControlled: true,\n})\nexport const PinField = registerFieldType('pin', PinInput, {\n isControlled: true,\n})\nexport const NativeSelectField = registerFieldType(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\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) =>\n schema &&\n Object.entries(schema).map(([name, field]) => {\n return {\n ...field,\n name,\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, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n useForm,\n FormProvider,\n UseFormProps,\n UseFormReturn,\n FieldValues,\n SubmitHandler,\n SubmitErrorHandler,\n UnpackNestedValue,\n ResolverOptions,\n ResolverResult,\n} from 'react-hook-form'\nimport { objectFieldResolver, FieldResolver } from './field-resolver'\nimport { css } from '@emotion/react'\n\nexport type { UseFormReturn, FieldValues, SubmitHandler }\n\ninterface FormOptions<TFieldValues extends FieldValues = FieldValues> {\n /**\n * The form schema, currently supports Yup schema only.\n */\n schema?: any\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.MutableRefObject<HTMLFormElement>\n}\n\n/**\n * @todo Figure out how to pass down FieldValues to all Field components,\n * if at all possible.\n */\nexport interface FormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseFormProps<TFieldValues>,\n Omit<HTMLChakraProps<'form'>, 'onSubmit' | 'onError'>,\n FormOptions<TFieldValues> {}\n\nexport const Form = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\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 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?.(schema)\n }\n\n const methods = useForm<TFieldValues>(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 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 {children}\n </chakra.form>\n </FormProvider>\n )\n }\n) as (<TFieldValues extends FieldValues>(\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 schema: any\n) => <TFieldValues extends FieldValues, TContext>(\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 } 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 } 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 {\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 children: React.ReactNode\n}\n\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n columns,\n spacing,\n index,\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields columns={columns} spacing={spacing}>\n {children}\n </ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n\n children: React.ReactNode\n}\n\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n columns,\n spacing,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout\n flex=\"1\"\n columns={columns}\n gridGap={spacing}\n mr=\"2\"\n {...layoutProps}\n >\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 = React.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)\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 useStyles,\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 = useStyles()\n return <FormLabel as=\"legend\" sx={styles.legend} {...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'\n\nexport interface FieldsProps {\n schema: any\n fieldResolver?: FieldResolver\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 ...props\n}) => {\n const resolver = React.useMemo(\n () => fieldResolver || Form.getFieldResolver(schema),\n [schema, fieldResolver]\n )\n\n return (\n <FormLayout {...props}>\n {resolver\n .getFields()\n .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 { forwardRef } from '@chakra-ui/system'\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 = forwardRef<SubmitButtonProps, 'button'>(\n (props, ref) => {\n const { children, disableIfUntouched, disableIfInvalid, ...rest } = props\n const { formState } = useFormContext()\n\n const isDisabled =\n (disableIfUntouched && !formState.isDirty) ||\n (disableIfInvalid && !formState.isValid)\n\n return (\n <Button\n type=\"submit\"\n isLoading={formState.isSubmitting}\n isPrimary\n ref={ref}\n isDisabled={isDisabled}\n {...rest}\n >\n {children}\n </Button>\n )\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 submitLabel?: false | string\n schema: any\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema'>,\n AutoFormOptions {}\n\nexport const AutoForm = forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: AutoFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { schema, submitLabel = 'Submit', fieldResolver, ...rest } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton label={submitLabel} />}\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<TFieldValues> {\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 } 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}\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 UseStepperProps,\n Omit<FormProps<TFieldValues>, 'children'> {\n children:\n | React.ReactNode\n | ((stepper: UseStepFormReturn<TFieldValues>) => React.ReactElement)\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 stepper = useStepper(props)\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 if (isLastStep) {\n return props\n .onSubmit?.(data)\n .then(() => {\n const step = steps[activeStep]\n updateStep({\n ...step,\n isCompleted: true,\n })\n })\n .then(nextStep) // Show completed step\n }\n\n nextStep()\n },\n [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}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver })\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 {\n chakra,\n HTMLChakraProps,\n useMultiStyleConfig,\n StylesProvider,\n SystemStyleObject,\n} 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} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form, FormProps } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n UseStepFormReturn,\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: FormProps<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 const FormStepper: React.FC<StepperStepsProps> = (props) => {\n const styles = useMultiStyleConfig('Stepper', props)\n\n const { children } = props\n\n const elements = React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child?.type === FormStep) {\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 >\n {child.props.children}\n </StepperStep>\n )\n }\n return child\n })\n\n return (\n <StylesProvider value={styles}>\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StylesProvider>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n HTMLChakraProps<'div'> {}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, ...rest } = props\n const step = useFormStep({ name, schema, resolver })\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 isDisabled={isCompleted}\n label={isLastStep || isCompleted ? submitLabel : label}\n {...rest}\n className={cx('saas-form__next-button', props.className)}\n />\n )\n}\n\nif (__DEV__) {\n NextButton.displayName = 'NextButton'\n}\n"],"names":["DisplayField","_ref","name","label","props","React","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","getValues","useFormContext","inputTypes","defaultInputType","BaseField","help","variant","hideLabel","children","controlProps","formState","error","get","errors","getError","isInvalid","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","type","InputComponent","getInput","withControlledInput","rules","inputProps","control","Controller","render","_ref3","field","useMergeRefs","withUncontrolledInput","register","registerFieldType","component","options","isControlled","id","isDisabled","isReadOnly","isRequired","inputRules","required","createField","split","map","part","charAt","toUpperCase","slice","join","InputField","Input","NumberInputField","NumberInput","PasswordInputFIeld","PasswordInput","TextareaField","Textarea","SwitchField","Switch","SelectField","Select","CheckboxField","Checkbox","RadioField","RadioInput","PinField","PinInput","NativeSelectField","NativeSelect","mapFields","schema","Object","entries","objectFieldResolver","getFields","getNestedFields","items","properties","Form","mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","rest","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","FormProvider","chakra","className","cx","getFieldResolver","FormLayoutItem","div","FormLayout","gridProps","useTheme","components","_theme$components","_theme$components$For2","defaultProps","spacing","SimpleGrid","Children","child","isValidElement","mapNestedFields","cloneElement","ArrayFieldProvider","useArrayFieldContext","createContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","defaultValue","keyName","min","max","useFieldArray","useArrayFieldRow","index","clearErrors","remove","fields","useEffect","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","columns","ArrayFieldRowContainer","ArrayFieldRowFields","ArrayFieldRemoveButton","layoutProps","flex","gridGap","mr","context","value","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","key","fieldProps","FormLegend","styles","useStyles","as","sx","legend","ObjectField","_resolver$getNestedFi","i","nestedFieldProps","Fields","_ref2","fieldResolver","useMemo","SubmitButton","disableIfUntouched","disableIfInvalid","Button","isLoading","isSubmitting","isPrimary","isDirty","isValid","AutoForm","submitLabel","DisplayIf","isExact","condition","useWatch","disabled","exact","StepFormProvider","useStepFormContext","errorMessage","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","steps","updateSteps","useState","onSubmitStep","async","data","then","updateStep","isCompleted","getFormProps","step","useFormStep","useStep","StepForm","ctx","StepperProvider","runIfFn","FormStepper","useMultiStyleConfig","elements","FormStep","StepperStep","title","StylesProvider","StepperSteps","isActive","PrevButton","isFirstStep","prevStep","useStepperContext","callAllHandlers","NextButton"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"step-form.d.ts","sourceRoot":"","sources":["../src/step-form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE5D,OAAO,EAEL,eAAe,EAIhB,MAAM,mBAAmB,CAAA;AAI1B,OAAO,EAGL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAU,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAQ,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGxC,OAAO,EAIL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAA;AAExB,MAAM,WAAW,aAAa,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,CAC3E,SAAQ,gBAAgB,CAAC,YAAY,CAAC;CAAG;AAE3C,eAAO,MAAM,QAAQ;;MA2BhB,MAAM,YAAY,CAAA;AAEvB,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAA;CACf;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+BnD,CAAA;AAED,MAAM,WAAW,aACf,SAAQ,eAAe,EACrB,eAAe,CAAC,KAAK,CAAC;CAAG;AAE7B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAW5C,CAAA;AAMD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAY5C,CAAA;AAMD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAYhD,CAAA"}
1
+ {"version":3,"file":"step-form.d.ts","sourceRoot":"","sources":["../src/step-form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE5D,OAAO,EAEL,eAAe,EAIhB,MAAM,mBAAmB,CAAA;AAI1B,OAAO,EAGL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAU,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAQ,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGxC,OAAO,EAIL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAA;AAExB,MAAM,WAAW,aAAa,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,CAC3E,SAAQ,gBAAgB,CAAC,YAAY,CAAC;CAAG;AAE3C,eAAO,MAAM,QAAQ;;MA2BhB,MAAM,YAAY,CAAA;AAEvB,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAA;CACf;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA4BnD,CAAA;AAED,MAAM,WAAW,aACf,SAAQ,eAAe,EACrB,eAAe,CAAC,KAAK,CAAC;CAAG;AAE7B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAW5C,CAAA;AAMD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAY5C,CAAA;AAMD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAYhD,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saas-ui/forms",
3
- "version": "0.8.0-next.3",
3
+ "version": "0.8.0-next.4",
4
4
  "description": "Fully functional forms for Chakra UI.",
5
5
  "source": "src/index.ts",
6
6
  "exports": {
@@ -83,15 +83,15 @@
83
83
  "@chakra-ui/react-utils": "^2.0.0",
84
84
  "@chakra-ui/utils": "^2.0.0",
85
85
  "@hookform/resolvers": "^2.8.10",
86
- "@saas-ui/button": "0.5.0-next.3",
87
- "@saas-ui/input-right-button": "0.4.0-next.3",
88
- "@saas-ui/number-input": "0.4.0-next.3",
89
- "@saas-ui/password-input": "0.4.0-next.3",
90
- "@saas-ui/pin-input": "0.4.0-next.3",
91
- "@saas-ui/radio": "0.4.0-next.3",
92
- "@saas-ui/react-utils": "0.2.0-next.3",
93
- "@saas-ui/select": "0.5.0-next.3",
94
- "@saas-ui/stepper": "0.3.0-next.3",
86
+ "@saas-ui/button": "0.5.0-next.4",
87
+ "@saas-ui/input-right-button": "0.4.0-next.4",
88
+ "@saas-ui/number-input": "0.4.0-next.4",
89
+ "@saas-ui/password-input": "0.4.0-next.4",
90
+ "@saas-ui/pin-input": "0.4.0-next.4",
91
+ "@saas-ui/radio": "0.4.0-next.4",
92
+ "@saas-ui/react-utils": "0.2.0-next.4",
93
+ "@saas-ui/select": "0.5.0-next.4",
94
+ "@saas-ui/stepper": "0.3.0-next.4",
95
95
  "react-hook-form": "^7.31.2"
96
96
  },
97
97
  "peerDependencies": {
package/src/step-form.tsx CHANGED
@@ -80,10 +80,7 @@ export interface FormStepOptions {
80
80
  }
81
81
 
82
82
  export const FormStepper: React.FC<StepperStepsProps> = (props) => {
83
- const styles = useMultiStyleConfig('Stepper', props) as Record<
84
- string,
85
- SystemStyleObject
86
- >
83
+ const styles = useMultiStyleConfig('Stepper', props)
87
84
 
88
85
  const { children } = props
89
86