@saas-ui/forms 1.0.0-rc.1 → 1.0.0-rc.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/README.md +29 -0
  3. package/ajv/package.json +18 -0
  4. package/dist/ajv/ajv-resolver.d.ts +11 -0
  5. package/dist/ajv/ajv-resolver.d.ts.map +1 -0
  6. package/dist/ajv/index.d.ts +2 -0
  7. package/dist/ajv/index.d.ts.map +1 -0
  8. package/dist/ajv/index.js +97 -0
  9. package/dist/ajv/index.js.map +1 -0
  10. package/dist/ajv/index.modern.mjs +97 -0
  11. package/dist/ajv/index.modern.mjs.map +1 -0
  12. package/dist/array-field.d.ts +14 -3
  13. package/dist/array-field.d.ts.map +1 -1
  14. package/dist/auto-form.d.ts +13 -1
  15. package/dist/auto-form.d.ts.map +1 -1
  16. package/dist/field.d.ts +82 -27
  17. package/dist/field.d.ts.map +1 -1
  18. package/dist/form.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.modern.mjs +1 -1
  22. package/dist/index.modern.mjs.map +1 -1
  23. package/dist/layout.d.ts +0 -1
  24. package/dist/layout.d.ts.map +1 -1
  25. package/dist/step-form.d.ts +4 -4
  26. package/dist/step-form.d.ts.map +1 -1
  27. package/dist/use-step-form.d.ts +7 -3
  28. package/dist/use-step-form.d.ts.map +1 -1
  29. package/dist/zod/index.js +1 -1
  30. package/dist/zod/index.js.map +1 -1
  31. package/dist/zod/index.modern.mjs +1 -1
  32. package/dist/zod/index.modern.mjs.map +1 -1
  33. package/package.json +32 -17
  34. package/src/array-field.tsx +21 -22
  35. package/src/auto-form.tsx +22 -3
  36. package/src/field-resolver.ts +2 -2
  37. package/src/field.tsx +186 -71
  38. package/src/form.tsx +0 -1
  39. package/src/object-field.tsx +3 -3
  40. package/src/step-form.tsx +23 -17
  41. package/src/submit-button.tsx +1 -1
  42. package/src/use-step-form.tsx +27 -12
  43. package/yup/package.json +2 -2
  44. package/zod/package.json +4 -4
@@ -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)\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","_objectWithoutPropertiesLoose","_excluded","React","createElement","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","_extends","withControlledInput","rules","inputProps","_ref2","_excluded3","control","Controller","render","_ref3","field","_excluded4","useMergeRefs","withUncontrolledInput","_ref4","_excluded5","register","registerFieldType","component","options","isControlled","id","isDisabled","isReadOnly","isRequired","_excluded2","inputRules","required","createField","split","map","part","charAt","toUpperCase","slice","join","Input","NumberInputField","NumberInput","PasswordInputFIeld","PasswordInput","TextareaField","Textarea","SwitchField","_ref5","_excluded7","Switch","SelectField","Select","CheckboxField","Checkbox","RadioField","RadioInput","PinField","PinInput","NativeSelect","mapFields","schema","Object","entries","objectFieldResolver","getFields","getNestedFields","_field$items","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","_theme$components$For","_theme$components","_theme$components$For2","defaultProps","theme","useTheme","components","spacing","SimpleGrid","gridProps","Children","child","isValidElement","mapNestedFields","cloneElement","ArrayFieldProvider","useArrayFieldContext","createContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","defaultValue","keyName","min","max","context","useFieldArray","useArrayFieldRow","index","clearErrors","remove","fields","useEffect","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","onClick","useArrayFieldAddButton","append","shouldFocus","columns","ArrayFieldRowContainer","ArrayFieldRowFields","ArrayFieldRemoveButton","ArrayFieldRow","layoutProps","flex","gridGap","mr","value","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","Fragment","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","isExact","condition","useWatch","disabled","exact","StepFormProvider","useStepFormContext","errorMessage","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","steps","updateSteps","useState","onSubmitStep","async","data","then","updateStep","step","isCompleted","getFormProps","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 InputGroup,\n InputProps,\n TextareaProps,\n SwitchProps,\n CheckboxProps,\n PinInputProps,\n PinInputField,\n HStack,\n PinInput,\n UsePinInputProps,\n SystemProps,\n} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { NumberInput, NumberInputProps } from '@saas-ui/number-input'\nimport { PasswordInput, PasswordInputProps } from '@saas-ui/password-input'\nimport { RadioInput, RadioInputProps } from '@saas-ui/radio'\n\nimport {\n Select,\n SelectProps,\n NativeSelect,\n NativeSelectProps,\n} from '@saas-ui/select'\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 interface FieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<FormControlProps, 'label' | 'type'> {\n /**\n * The field name\n */\n name: TName\n /**\n * The field label\n */\n label?: string\n /**\n * Hide the field label\n */\n hideLabel?: boolean\n /**\n * Field help text\n */\n help?: string\n /**\n * React hook form rules\n */\n rules?: Omit<\n RegisterOptions<TFieldValues, TName>,\n 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'\n >\n /**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\n type?: string\n /**\n * The input placeholder\n */\n placeholder?: string\n}\n\nconst inputTypes: Record<string, React.FC<any>> = {}\n\nconst defaultInputType = 'text'\n\nconst getInput = (type: string) => {\n return inputTypes[type] || inputTypes[defaultInputType]\n}\n\nconst getError = (name: string, formState: FormState<{ [x: string]: any }>) => {\n return get(formState.errors, name)\n}\n\nconst isTouched = (\n name: string,\n formState: FormState<{ [x: string]: any }>\n) => {\n return get(formState.touchedFields, name)\n}\n\nexport const BaseField: React.FC<FieldProps> = (props) => {\n const { name, label, help, 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 type As<Props = any> = React.ElementType<Props>\n\nexport type PropsOf<T extends As> = React.ComponentPropsWithoutRef<T> & {\n type?: FieldTypes\n}\n\n/**\n * Build-in types:\n * - text\n * - number\n * - password\n * - textarea\n * - select\n * - native-select\n * - checkbox\n * - radio\n * - switch\n * - pin\n *\n * Will default to a text field if there is no matching type.\n */\nexport const Field = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: FieldProps<TFieldValues> | FieldTypeProps,\n ref: React.ForwardedRef<FocusableElement>\n ) => {\n const { type = defaultInputType } = props\n const InputComponent = getInput(type)\n\n return <InputComponent ref={ref} {...props} />\n }\n) as (<TFieldValues extends FieldValues>(\n props: FieldProps<TFieldValues> &\n FieldTypeProps & {\n ref?: React.ForwardedRef<FocusableElement>\n }\n) => React.ReactElement) & {\n displayName?: string\n}\n\ninterface CreateFieldProps {\n displayName: string\n hideLabel?: boolean\n BaseField: React.FC<any>\n}\n\nconst createField = (\n InputComponent: React.FC<any>,\n { displayName, hideLabel, BaseField }: CreateFieldProps\n) => {\n const Field = forwardRef((props, ref) => {\n const {\n id,\n name,\n label,\n help,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n isOptional,\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 isOptional={isOptional}\n variant={variant}\n >\n <InputComponent\n ref={ref}\n id={id}\n name={name}\n label={hideLabel ? label : undefined} // Only pass down the label when it should be inline.\n rules={inputRules}\n {...inputProps}\n />\n </BaseField>\n )\n })\n Field.displayName = displayName\n\n return Field\n}\n\nexport const withControlledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { control } = useFormContext()\n\n return (\n <Controller\n name={name}\n control={control}\n rules={rules}\n render={({ field: { ref: _ref, ...field } }) => (\n <InputComponent\n {...field}\n {...inputProps}\n ref={useMergeRefs(ref, _ref)}\n />\n )}\n />\n )\n }\n )\n}\n\nexport const withUncontrolledInput = (InputComponent: React.FC<any>) => {\n return forwardRef<FieldProps, typeof InputComponent>(\n ({ name, rules, ...inputProps }, ref) => {\n const { register } = useFormContext()\n\n const { ref: _ref, ...field } = register(name, rules)\n\n return (\n <InputComponent\n {...field}\n {...inputProps}\n ref={useMergeRefs(ref, _ref)}\n />\n )\n }\n )\n}\n\nexport interface RegisterFieldTypeOptions {\n isControlled?: boolean\n hideLabel?: boolean\n BaseField?: React.FC<any>\n}\n\n/**\n * Register a new field type\n * @param type The name for this field in kebab-case, eg `email` or `array-field`\n * @param component The React component\n * @param options\n * @param options.isControlled Set this to true if this is a controlled field.\n * @param options.hideLabel Hide the field label, for example for the checkbox field.\n */\nexport const registerFieldType = <T extends object>(\n type: string,\n component: React.FC<T>,\n options?: RegisterFieldTypeOptions\n) => {\n let InputComponent\n if (options?.isControlled) {\n InputComponent = withControlledInput(component)\n } else {\n InputComponent = withUncontrolledInput(component)\n }\n\n const Field = createField(InputComponent, {\n displayName: `${type\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')}Field`,\n hideLabel: options?.hideLabel,\n BaseField: options?.BaseField || BaseField,\n }) as React.FC<T & FieldProps>\n\n inputTypes[type] = Field\n\n return Field\n}\n\nexport interface InputFieldProps extends InputProps {\n type?: string\n leftAddon?: React.ReactNode\n rightAddon?: React.ReactNode\n}\n\nexport const InputField = registerFieldType<InputFieldProps>(\n 'text',\n forwardRef(({ type = 'text', leftAddon, rightAddon, size, ...rest }, ref) => {\n const input = <Input type={type} size={size} {...rest} ref={ref} />\n if (leftAddon || rightAddon) {\n return (\n <InputGroup size={size}>\n {leftAddon}\n {input}\n {rightAddon}\n </InputGroup>\n )\n }\n return input\n })\n)\n\nexport interface NumberInputFieldProps extends NumberInputProps {\n type: 'number'\n}\n\nexport const NumberInputField = registerFieldType<NumberInputFieldProps>(\n 'number',\n NumberInput,\n {\n isControlled: true,\n }\n)\n\nexport const PasswordInputField = registerFieldType<PasswordInputProps>(\n 'password',\n forwardRef((props, ref) => <PasswordInput ref={ref} {...props} />)\n)\n\nexport const TextareaField = registerFieldType<TextareaProps>(\n 'textarea',\n Textarea\n)\n\nexport const SwitchField = registerFieldType<SwitchProps>(\n 'switch',\n forwardRef(({ type, ...rest }, ref) => {\n return <Switch {...rest} ref={ref} />\n }),\n {\n isControlled: true,\n }\n)\n\nexport const SelectField = registerFieldType<SelectProps>('select', Select, {\n isControlled: true,\n})\n\nexport const CheckboxField = registerFieldType<CheckboxProps>(\n 'checkbox',\n forwardRef(({ label, type, ...props }, ref) => {\n return (\n <Checkbox ref={ref} {...props}>\n {label}\n </Checkbox>\n )\n }),\n {\n hideLabel: true,\n }\n)\n\nexport const RadioField = registerFieldType<RadioInputProps>(\n 'radio',\n RadioInput,\n {\n isControlled: true,\n }\n)\n\nexport const NativeSelectField = registerFieldType<NativeSelectProps>(\n 'native-select',\n NativeSelect,\n { isControlled: true }\n)\n\nexport interface PinFieldProps extends Omit<UsePinInputProps, 'type'> {\n pinLength?: number\n pinType?: 'alphanumeric' | 'number'\n spacing?: SystemProps['margin']\n}\n\nexport const PinField = registerFieldType<PinFieldProps>(\n 'pin',\n forwardRef((props, ref) => {\n const { pinLength = 4, pinType, spacing, ...inputProps } = props\n\n const inputs: React.ReactNode[] = []\n for (let i = 0; i < pinLength; i++) {\n inputs.push(<PinInputField key={i} ref={ref} />)\n }\n\n return (\n <HStack spacing={spacing}>\n <PinInput {...inputProps} type={pinType}>\n {inputs}\n </PinInput>\n </HStack>\n )\n }),\n {\n isControlled: true,\n }\n)\n\nconst fieldTypes = {\n text: InputField,\n email: InputField,\n url: InputField,\n phone: InputField,\n number: NumberInputField,\n password: PasswordInputField,\n textarea: TextareaField,\n switch: SwitchField,\n checkbox: CheckboxField,\n radio: RadioField,\n pin: PinField,\n select: SelectField,\n 'native-select': NativeSelectField,\n}\n\ntype FieldTypes = typeof fieldTypes\n\ntype FieldType<Props = any> = React.ElementType<Props>\n\ntype TypeProps<P extends FieldType, T> = React.ComponentPropsWithoutRef<P> & {\n type: T\n}\n\ntype FieldTypeProps =\n | {\n [Property in keyof FieldTypes]: TypeProps<FieldTypes[Property], Property>\n }[keyof FieldTypes]\n | { type?: string }\n","import { FieldProps } from './field'\n\nimport { get } from '@chakra-ui/utils'\n\nexport type FieldResolver = {\n getFields(): FieldProps[]\n getNestedFields(name: string): FieldProps[]\n}\n\ninterface SchemaField extends FieldProps {\n items?: SchemaField[]\n properties?: Record<string, SchemaField>\n}\n\nexport type ObjectSchema = Record<string, SchemaField>\n\nconst mapFields = (schema: ObjectSchema): FieldProps[] =>\n schema &&\n Object.entries(schema).map(([name, { items, ...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'\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, forwardRef } from '@chakra-ui/system'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { AddIcon, MinusIcon } from '@chakra-ui/icons'\nimport { IconButton, ButtonProps } from '@saas-ui/button'\n\nimport { FormLayout, FormLayoutProps } from './layout'\nimport { BaseField, FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nimport {\n useArrayField,\n useArrayFieldRow,\n useArrayFieldContext,\n ArrayFieldProvider,\n ArrayFieldOptions,\n ArrayFieldRowProvider,\n useArrayFieldRowContext,\n useArrayFieldRemoveButton,\n useArrayFieldAddButton,\n UseArrayFieldReturn,\n} from './use-array-field'\n\ninterface ArrayField {\n id: string\n [key: string]: unknown\n}\n\ninterface ArrayFieldRowProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The array index\n */\n index: number\n /**\n * The fields\n */\n children: React.ReactNode\n}\n\nexport const ArrayFieldRow: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n ...rowFieldsProps\n}) => {\n return (\n <ArrayFieldRowContainer index={index}>\n <ArrayFieldRowFields {...rowFieldsProps}>{children}</ArrayFieldRowFields>\n <ArrayFieldRemoveButton />\n </ArrayFieldRowContainer>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRow.displayName = 'ArrayFieldRow'\n}\n\nexport interface ArrayFieldRowFieldsProps extends FormLayoutProps {\n /**\n * Amount of field columns\n */\n columns?: ResponsiveValue<number>\n /**\n * Spacing between fields\n */\n spacing?: ResponsiveValue<string | number>\n /**\n * The fields\n */\n children: React.ReactNode\n}\n\nexport const ArrayFieldRowFields: React.FC<ArrayFieldRowFieldsProps> = ({\n children,\n ...layoutProps\n}) => {\n const { name } = useArrayFieldRowContext()\n return (\n <FormLayout flex=\"1\" mr=\"2\" {...layoutProps}>\n {mapNestedFields(name, children)}\n </FormLayout>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRowFields.displayName = 'ArrayFieldRowFields'\n}\n\nexport const ArrayFieldRowContainer: React.FC<ArrayFieldRowProps> = ({\n children,\n index,\n}) => {\n const context = useArrayFieldRow({ index })\n\n const styles = {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-end',\n width: '100%',\n mb: 4,\n }\n\n return (\n <ArrayFieldRowProvider value={context}>\n <chakra.div __css={styles}>{children}</chakra.div>\n </ArrayFieldRowProvider>\n )\n}\n\nif (__DEV__) {\n ArrayFieldRowContainer.displayName = 'ArrayFieldRowContainer'\n}\n\nexport const ArrayFieldRemoveButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<MinusIcon />}\n aria-label=\"Remove row\"\n {...useArrayFieldRemoveButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldRemoveButton.displayName = 'ArrayFieldRemoveButton'\n}\n\nexport const ArrayFieldAddButton: React.FC<ButtonProps> = (props) => {\n return (\n <IconButton\n icon={<AddIcon />}\n aria-label=\"Add row\"\n float=\"right\"\n {...useArrayFieldAddButton()}\n {...props}\n />\n )\n}\n\nif (__DEV__) {\n ArrayFieldAddButton.displayName = 'ArrayFieldAddButton'\n}\n\nexport interface ArrayFieldProps\n extends ArrayFieldOptions,\n Omit<FieldProps, 'defaultValue'> {}\n\nexport const ArrayField = forwardRef(\n (props: ArrayFieldProps, ref: React.ForwardedRef<UseArrayFieldReturn>) => {\n const { children, ...containerProps } = props\n\n return (\n <ArrayFieldContainer ref={ref} {...containerProps}>\n <ArrayFieldRows>\n {(fields: ArrayField[]) => (\n <>\n {fields.map(({ id }, index: number) => (\n <ArrayFieldRow key={id} index={index}>\n {children}\n </ArrayFieldRow>\n ))}\n </>\n )}\n </ArrayFieldRows>\n <ArrayFieldAddButton />\n </ArrayFieldContainer>\n )\n }\n) as ((\n props: ArrayFieldProps & {\n ref?: React.ForwardedRef<UseArrayFieldReturn>\n }\n) => React.ReactElement) & {\n displayName: string\n}\n\nif (__DEV__) {\n ArrayField.displayName = 'ArrayField'\n}\n\nexport interface ArrayFieldRowsProps {\n children: (fields: ArrayField[]) => React.ReactElement | null\n}\n\nexport const ArrayFieldRows = ({\n children,\n}: ArrayFieldRowsProps): React.ReactElement | null => {\n const { fields } = useArrayFieldContext()\n return children(fields)\n}\n\nif (__DEV__) {\n ArrayFieldRows.displayName = 'ArrayFieldRows'\n}\n\nexport const ArrayFieldContainer = React.forwardRef(\n (\n {\n name,\n defaultValue,\n keyName,\n min,\n max,\n children,\n ...fieldProps\n }: ArrayFieldProps,\n ref: React.ForwardedRef<UseArrayFieldReturn>\n ) => {\n const context = useArrayField({\n name,\n defaultValue,\n keyName,\n min,\n max,\n })\n\n // This exposes the useArrayField api through the forwarded ref\n React.useImperativeHandle(ref, () => context, [ref, context])\n\n return (\n <ArrayFieldProvider value={context}>\n <BaseField name={name} {...fieldProps}>\n {children}\n </BaseField>\n </ArrayFieldProvider>\n )\n }\n)\n\nif (__DEV__) {\n ArrayFieldContainer.displayName = 'ArrayFieldContainer'\n}\n","import * as React from 'react'\nimport {\n FormControl,\n FormLabel,\n FormLabelProps,\n ResponsiveValue,\n useStyleConfig,\n} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { FormLayout } from './layout'\nimport { FieldProps } from './field'\n\nimport { mapNestedFields } from './utils'\n\nexport interface ObjectFieldProps extends FieldProps {\n name: string\n children: React.ReactNode\n columns?: ResponsiveValue<number>\n spacing?: ResponsiveValue<string | number>\n}\n\nexport const FormLegend = (props: FormLabelProps) => {\n const styles = useStyleConfig('FormLegend')\n return <FormLabel as=\"legend\" sx={styles} {...props} />\n}\n\nexport const ObjectField: React.FC<ObjectFieldProps> = (props) => {\n const { name, label, hideLabel, children, columns, spacing, ...fieldProps } =\n props\n\n return (\n <FormControl name={name} as=\"fieldset\" {...fieldProps}>\n <FormLegend display={hideLabel ? 'none' : 'block'}>{label}</FormLegend>\n <FormLayout columns={columns} gridGap={spacing}>\n {mapNestedFields(name, children)}\n </FormLayout>\n </FormControl>\n )\n}\n\nif (__DEV__) {\n ObjectField.displayName = 'ObjectField'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\n\nimport { Form } from './form'\nimport { FormLayout } from './layout'\nimport { Field, FieldProps } from './field'\n\nimport { ArrayField } from './array-field'\nimport { ObjectField } from './object-field'\nimport { FieldResolver } from './field-resolver'\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 colorScheme=\"primary\"\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, SubmitButtonProps } from './submit-button'\nimport { FieldResolver } from '.'\n\ninterface AutoFormOptions {\n /**\n * The submit button label.\n * Pass `null` to render no submit button.\n */\n submitLabel?: React.ReactNode\n /**\n * The schema.\n * Supports object schema, Yup or Zod.\n * @see https://www.saas-ui.dev/docs/forms/auto-form\n */\n schema: any\n /**\n * The field resolver.\n */\n fieldResolver?: any\n}\n\nexport interface AutoFormProps<TFieldValues extends FieldValues>\n extends Omit<FormProps<TFieldValues>, 'schema'>,\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 {\n schema,\n submitLabel = 'Submit',\n fieldResolver,\n children,\n ...rest\n } = props\n\n return (\n <Form {...rest} schema={schema} ref={ref}>\n <FormLayout>\n {<Fields schema={schema} fieldResolver={fieldResolver} />}\n {submitLabel && <SubmitButton label={submitLabel} />}\n {children}\n </FormLayout>\n </Form>\n )\n }\n) as (<TFieldValues extends FieldValues>(\n props: AutoFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement) & {\n displayName?: string\n getFieldResolver?: (schema: any) => FieldResolver\n}\n\nif (__DEV__) {\n AutoForm.displayName = 'AutoForm'\n}\n","import * as React from 'react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport {\n useFormContext,\n useWatch,\n FieldValues,\n UseFormReturn,\n} from 'react-hook-form'\n\nexport interface DisplayIfProps<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, UnpackNestedValue } from 'react-hook-form'\nimport { createContext, MaybeRenderProp } from '@chakra-ui/react-utils'\nimport {\n useStepper,\n useStep,\n UseStepperProps,\n UseStepperReturn,\n} from '@saas-ui/stepper'\n\nexport interface StepState {\n name: string\n schema?: any\n resolver?: any\n isActive?: boolean\n isCompleted?: boolean\n onSubmit?: FormStepSubmitHandler\n}\n\nexport type FormStepSubmitHandler<\n TFieldValues extends FieldValues = FieldValues\n> = (\n data: UnpackNestedValue<TFieldValues>,\n stepper: UseStepperReturn\n) => Promise<void>\n\nexport interface StepFormContext extends UseStepperReturn {\n updateStep(state: StepState): void\n steps: Record<string, StepState>\n}\n\nexport const [StepFormProvider, useStepFormContext] =\n createContext<StepFormContext>({\n name: 'StepFormContext',\n errorMessage:\n 'useStepFormContext: `context` is undefined. Seems you forgot to wrap step form components in `<StepForm />`',\n })\n\nimport { FormProps } from './form'\n\nexport interface UseStepFormProps<\n TFieldValues extends FieldValues = FieldValues\n> extends Omit<UseStepperProps, 'onChange'>,\n Omit<FormProps<TFieldValues>, 'children'> {\n children: MaybeRenderProp<UseStepFormReturn<TFieldValues>>\n}\n\nexport interface UseStepFormReturn<\n TFieldValues extends FieldValues = FieldValues\n> extends UseStepperReturn {\n getFormProps(): {\n onSubmit: SubmitHandler<TFieldValues>\n schema?: any\n resolver?: any\n }\n updateStep(step: any): void\n steps: Record<string, any>\n}\n\nexport function useStepForm<TFieldValues extends FieldValues = FieldValues>(\n props: UseStepFormProps<TFieldValues>\n): UseStepFormReturn<TFieldValues> {\n const { onChange, ...rest } = props\n const stepper = useStepper(rest)\n\n const { activeStep, isLastStep, nextStep } = stepper\n\n const [steps, updateSteps] = React.useState<Record<string, StepState>>({})\n\n const onSubmitStep: SubmitHandler<TFieldValues> = React.useCallback(\n async (data) => {\n const step = steps[activeStep]\n\n if (isLastStep) {\n return props\n .onSubmit?.(data)\n .then(() => {\n updateStep({\n ...step,\n isCompleted: true,\n })\n })\n .then(nextStep) // Show completed step\n }\n\n try {\n await step.onSubmit?.(data, stepper)\n\n nextStep()\n } catch (e) {\n // Step submission failed.\n }\n },\n [steps, activeStep, isLastStep]\n )\n\n const getFormProps = React.useCallback(() => {\n const step = steps[activeStep]\n return {\n onSubmit: onSubmitStep,\n schema: step?.schema,\n resolver: step?.resolver,\n }\n }, [steps, onSubmitStep, activeStep])\n\n const updateStep = React.useCallback(\n (step: StepState) => {\n updateSteps((steps) => {\n return {\n ...steps,\n [step.name]: step,\n }\n })\n },\n [steps]\n )\n\n return {\n getFormProps,\n updateStep,\n steps,\n ...stepper,\n }\n}\n\nexport interface UseFormStepProps {\n name: string\n schema?: any\n resolver?: any\n onSubmit?: FormStepSubmitHandler\n}\n\nexport function useFormStep(props: UseFormStepProps): StepState {\n const { name, schema, resolver, onSubmit } = props\n const step = useStep({ name })\n\n const { steps, updateStep } = useStepFormContext()\n\n React.useEffect(() => {\n updateStep({ name, schema, resolver, onSubmit })\n }, [name, schema])\n\n return {\n ...step,\n ...(steps[name] || { name, schema }),\n }\n}\n","import * as React from 'react'\n\nimport { FieldValues, UseFormReturn } from 'react-hook-form'\n\nimport { chakra, HTMLChakraProps } from '@chakra-ui/system'\n\nimport { callAllHandlers, runIfFn, cx, __DEV__ } from '@chakra-ui/utils'\n\nimport {\n StepperProvider,\n StepperSteps,\n StepperStepsProps,\n StepperStep,\n useStepperContext,\n StepperContainer,\n} from '@saas-ui/stepper'\nimport { Button, ButtonProps } from '@saas-ui/button'\n\nimport { Form } from './form'\nimport { SubmitButton } from './submit-button'\n\nimport {\n useStepForm,\n useFormStep,\n StepFormProvider,\n UseStepFormProps,\n FormStepSubmitHandler,\n} from './use-step-form'\n\nexport interface StepFormProps<TFieldValues extends FieldValues = FieldValues>\n extends UseStepFormProps<TFieldValues> {}\n\nexport const StepForm = React.forwardRef(\n <TFieldValues extends FieldValues = FieldValues>(\n props: StepFormProps<TFieldValues>,\n ref: React.ForwardedRef<UseFormReturn<TFieldValues>>\n ) => {\n const { children, ...rest } = props\n\n const stepper = useStepForm<TFieldValues>(props)\n\n const { getFormProps, ...ctx } = stepper\n\n const context = React.useMemo(() => ctx, [ctx])\n\n return (\n <StepperProvider value={context}>\n <StepFormProvider value={context}>\n <Form ref={ref} {...rest} {...getFormProps()}>\n {runIfFn(children, stepper)}\n </Form>\n </StepFormProvider>\n </StepperProvider>\n )\n }\n) as <TFieldValues extends FieldValues>(\n props: StepFormProps<TFieldValues> & {\n ref?: React.ForwardedRef<UseFormReturn<TFieldValues>>\n }\n) => React.ReactElement\n\nexport interface FormStepOptions {\n /**\n * The step name\n */\n name: string\n /**\n * Schema\n */\n schema?: any\n /**\n * Hook Form Resolver\n */\n resolver?: any\n}\n\nexport const FormStepper: React.FC<StepperStepsProps> = (props) => {\n const { activeIndex, setIndex } = useStepperContext()\n\n const { children, orientation } = 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 const onChange = React.useCallback((i: number) => {\n setIndex(i)\n }, [])\n\n return (\n <StepperContainer\n orientation={orientation}\n step={activeIndex}\n onChange={onChange}\n >\n <StepperSteps mb=\"4\" {...props}>\n {elements}\n </StepperSteps>\n </StepperContainer>\n )\n}\n\nexport interface FormStepProps\n extends FormStepOptions,\n Omit<HTMLChakraProps<'div'>, 'onSubmit'> {\n onSubmit?: FormStepSubmitHandler\n}\n\nexport const FormStep: React.FC<FormStepProps> = (props) => {\n const { name, schema, resolver, children, className, onSubmit, ...rest } =\n props\n const step = useFormStep({ name, schema, resolver, onSubmit })\n\n const { isActive } = step\n\n return isActive ? (\n <chakra.div {...rest} className={cx('saas-form__step', className)}>\n {children}\n </chakra.div>\n ) : null\n}\n\nif (__DEV__) {\n FormStep.displayName = 'FormStep'\n}\n\nexport const PrevButton: React.FC<ButtonProps> = (props) => {\n const { isFirstStep, isCompleted, prevStep } = useStepperContext()\n\n return (\n <Button\n isDisabled={isFirstStep || isCompleted}\n label=\"Back\"\n {...props}\n className={cx('saas-form__prev-button', props.className)}\n onClick={callAllHandlers(props.onClick, prevStep)}\n />\n )\n}\n\nif (__DEV__) {\n PrevButton.displayName = 'PrevButton'\n}\n\nexport interface NextButtonProps extends ButtonProps {\n submitLabel?: string\n}\n\nexport const NextButton: React.FC<NextButtonProps> = (props) => {\n const { label = 'Next', submitLabel = 'Complete', ...rest } = props\n const { isLastStep, isCompleted } = useStepperContext()\n\n return (\n <SubmitButton\n 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","_objectWithoutPropertiesLoose","_excluded","React","createElement","FormControl","FormLabel","htmlFor","Text","fontSize","FormValue","__DEV__","displayName","getValues","useFormContext","_excluded2","_excluded3","_excluded4","_excluded5","_excluded6","_excluded7","_excluded8","_excluded9","_excluded10","inputTypes","defaultInputType","BaseField","help","variant","hideLabel","children","controlProps","formState","error","errors","getError","_extends","isInvalid","Box","message","FormHelperText","FormErrorMessage","Field","forwardRef","ref","type","InputComponent","getInput","withControlledInput","_ref2","rules","inputProps","control","Controller","render","_ref3","field","useMergeRefs","withUncontrolledInput","_ref4","register","_register","component","options","isControlled","id","isDisabled","isReadOnly","isRequired","isOptional","required","undefined","inputRules","createField","split","map","part","charAt","toUpperCase","slice","join","InputField","registerFieldType","leftAddon","rightAddon","size","_ref5","rest","input","Input","InputGroup","NumberInputField","NumberInput","PasswordInput","Textarea","SwitchField","_ref6","Switch","SelectField","Select","CheckboxField","Checkbox","RadioField","RadioInput","NativeSelectField","NativeSelect","PinField","pinLength","pinType","spacing","i","inputs","push","PinInputField","key","HStack","PinInput","mapFields","schema","Object","entries","objectFieldResolver","getFields","getNestedFields","_field$items","get","items","properties","Form","mode","resolver","reValidateMode","shouldFocusError","shouldUnregister","shouldUseNativeValidation","criteriaMode","delayError","defaultValues","onSubmit","onError","formRef","form","getResolver","methods","useForm","handleSubmit","useImperativeHandle","FormProvider","chakra","className","cx","getFieldResolver","FormLayoutItem","div","FormLayout","_theme$components$For","_theme$components","_theme$components$For2","defaultProps","theme","useTheme","components","SimpleGrid","gridProps","Children","child","isValidElement","mapNestedFields","cloneElement","ArrayFieldProvider","useArrayFieldContext","createContext","ArrayFieldRowProvider","useArrayFieldRowContext","useArrayField","defaultValue","keyName","min","max","context","useFieldArray","useArrayFieldRow","index","clearErrors","remove","fields","useEffect","isFirst","isLast","length","useCallback","useArrayFieldRemoveButton","onClick","useArrayFieldAddButton","append","shouldFocus","ArrayFieldRow","rowFieldsProps","ArrayFieldRowContainer","ArrayFieldRowFields","ArrayFieldRemoveButton","layoutProps","flex","mr","value","__css","display","flexDirection","alignItems","width","mb","IconButton","icon","MinusIcon","ArrayFieldAddButton","AddIcon","float","ArrayField","containerProps","ArrayFieldContainer","ArrayFieldRows","fieldProps","FormLegend","styles","useStyleConfig","as","sx","ObjectField","columns","gridGap","_resolver$getNestedFi","nestedFieldProps","Fields","fieldResolver","useMemo","SubmitButton","disableIfUntouched","disableIfInvalid","Button","isLoading","isSubmitting","colorScheme","isDirty","isValid","AutoForm","submitLabel","DisplayIf","isExact","condition","useWatch","disabled","exact","StepFormProvider","useStepFormContext","errorMessage","useStepForm","stepper","useStepper","activeStep","isLastStep","nextStep","steps","updateSteps","useState","onSubmitStep","async","step","data","then","updateStep","isCompleted","e","getFormProps","useFormStep","useStep","StepForm","ctx","StepperProvider","runIfFn","FormStepper","activeIndex","setIndex","useStepperContext","orientation","elements","FormStep","StepperStep","title","onChange","StepperContainer","StepperSteps","isActive","PrevButton","isFirstStep","prevStep","callAllHandlers","NextButton"],"mappings":"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"}
package/dist/layout.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { SimpleGridProps } from '@chakra-ui/react';
3
2
  export declare type FormLayoutProps = SimpleGridProps;
4
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAsB,eAAe,EAAY,MAAM,kBAAkB,CAAA;AAGhF,oBAAY,eAAe,GAAG,eAAe,CAAA;AAc7C;;;;;GAKG;AACH,eAAO,MAAM,UAAU;6BAA4B,eAAe;;CAyBjE,CAAA"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,eAAe,EAAY,MAAM,kBAAkB,CAAA;AAGhF,oBAAY,eAAe,GAAG,eAAe,CAAA;AAc7C;;;;;GAKG;AACH,eAAO,MAAM,UAAU;6BAA4B,eAAe;;CAyBjE,CAAA"}
@@ -3,11 +3,10 @@ import { FieldValues, UseFormReturn } from 'react-hook-form';
3
3
  import { HTMLChakraProps } from '@chakra-ui/system';
4
4
  import { StepperStepsProps } from '@saas-ui/stepper';
5
5
  import { ButtonProps } from '@saas-ui/button';
6
- import { FormProps } from './form';
7
- import { UseStepFormProps } from './use-step-form';
6
+ import { UseStepFormProps, FormStepSubmitHandler } from './use-step-form';
8
7
  export interface StepFormProps<TFieldValues extends FieldValues = FieldValues> extends UseStepFormProps<TFieldValues> {
9
8
  }
10
- export declare const StepForm: <TFieldValues extends FieldValues>(props: FormProps<TFieldValues> & {
9
+ export declare const StepForm: <TFieldValues extends FieldValues>(props: StepFormProps<TFieldValues> & {
11
10
  ref?: React.ForwardedRef<UseFormReturn<TFieldValues, any>> | undefined;
12
11
  }) => React.ReactElement;
13
12
  export interface FormStepOptions {
@@ -25,7 +24,8 @@ export interface FormStepOptions {
25
24
  resolver?: any;
26
25
  }
27
26
  export declare const FormStepper: React.FC<StepperStepsProps>;
28
- export interface FormStepProps extends FormStepOptions, HTMLChakraProps<'div'> {
27
+ export interface FormStepProps extends FormStepOptions, Omit<HTMLChakraProps<'div'>, 'onSubmit'> {
28
+ onSubmit?: FormStepSubmitHandler;
29
29
  }
30
30
  export declare const FormStep: React.FC<FormStepProps>;
31
31
  export declare const PrevButton: React.FC<ButtonProps>;
@@ -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,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"}
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,EAAU,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAI3D,OAAO,EAGL,iBAAiB,EAIlB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAU,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAKrD,OAAO,EAIL,gBAAgB,EAChB,qBAAqB,EACtB,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,CAoCnD,CAAA;AAED,MAAM,WAAW,aACf,SAAQ,eAAe,EACrB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC1C,QAAQ,CAAC,EAAE,qBAAqB,CAAA;CACjC;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAY5C,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,5 +1,6 @@
1
1
  import * as React from 'react';
2
- import { FieldValues, SubmitHandler } from 'react-hook-form';
2
+ import { FieldValues, SubmitHandler, UnpackNestedValue } from 'react-hook-form';
3
+ import { MaybeRenderProp } from '@chakra-ui/react-utils';
3
4
  import { UseStepperProps, UseStepperReturn } from '@saas-ui/stepper';
4
5
  export interface StepState {
5
6
  name: string;
@@ -7,15 +8,17 @@ export interface StepState {
7
8
  resolver?: any;
8
9
  isActive?: boolean;
9
10
  isCompleted?: boolean;
11
+ onSubmit?: FormStepSubmitHandler;
10
12
  }
13
+ export declare type FormStepSubmitHandler<TFieldValues extends FieldValues = FieldValues> = (data: UnpackNestedValue<TFieldValues>, stepper: UseStepperReturn) => Promise<void>;
11
14
  export interface StepFormContext extends UseStepperReturn {
12
15
  updateStep(state: StepState): void;
13
16
  steps: Record<string, StepState>;
14
17
  }
15
18
  export declare const StepFormProvider: React.Provider<StepFormContext>, useStepFormContext: () => StepFormContext;
16
19
  import { FormProps } from './form';
17
- export interface UseStepFormProps<TFieldValues extends FieldValues = FieldValues> extends UseStepperProps, Omit<FormProps<TFieldValues>, 'children'> {
18
- children: React.ReactNode | ((stepper: UseStepFormReturn<TFieldValues>) => React.ReactElement);
20
+ export interface UseStepFormProps<TFieldValues extends FieldValues = FieldValues> extends Omit<UseStepperProps, 'onChange'>, Omit<FormProps<TFieldValues>, 'children'> {
21
+ children: MaybeRenderProp<UseStepFormReturn<TFieldValues>>;
19
22
  }
20
23
  export interface UseStepFormReturn<TFieldValues extends FieldValues = FieldValues> extends UseStepperReturn {
21
24
  getFormProps(): {
@@ -31,6 +34,7 @@ export interface UseFormStepProps {
31
34
  name: string;
32
35
  schema?: any;
33
36
  resolver?: any;
37
+ onSubmit?: FormStepSubmitHandler;
34
38
  }
35
39
  export declare function useFormStep(props: UseFormStepProps): StepState;
36
40
  //# sourceMappingURL=use-step-form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-step-form.d.ts","sourceRoot":"","sources":["../src/use-step-form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE5D,OAAO,EAGL,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CACjC;AAED,eAAO,MAAO,gBAAgB,mCAAE,kBAAkB,uBAK9C,CAAA;AAEJ,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,WAAW,gBAAgB,CAC/B,YAAY,SAAS,WAAW,GAAG,WAAW,CAC9C,SAAQ,eAAe,EACrB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;IAC3C,QAAQ,EACJ,KAAK,CAAC,SAAS,GACf,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,CAAA;CACvE;AAED,MAAM,WAAW,iBAAiB,CAChC,YAAY,SAAS,WAAW,GAAG,WAAW,CAC9C,SAAQ,gBAAgB;IACxB,YAAY,IAAI;QACd,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;QACrC,MAAM,CAAC,EAAE,GAAG,CAAA;QACZ,QAAQ,CAAC,EAAE,GAAG,CAAA;KACf,CAAA;IACD,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC3B;AAED,wBAAgB,WAAW,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,EACxE,KAAK,EAAE,gBAAgB,CAAC,YAAY,CAAC,GACpC,iBAAiB,CAAC,YAAY,CAAC,CAsDjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAA;CACf;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAc9D"}
1
+ {"version":3,"file":"use-step-form.d.ts","sourceRoot":"","sources":["../src/use-step-form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAiB,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAGL,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,qBAAqB,CAAA;CACjC;AAED,oBAAY,qBAAqB,CAC/B,YAAY,SAAS,WAAW,GAAG,WAAW,IAC5C,CACF,IAAI,EAAE,iBAAiB,CAAC,YAAY,CAAC,EACrC,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC,IAAI,CAAC,CAAA;AAElB,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CACjC;AAED,eAAO,MAAO,gBAAgB,mCAAE,kBAAkB,uBAK9C,CAAA;AAEJ,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,WAAW,gBAAgB,CAC/B,YAAY,SAAS,WAAW,GAAG,WAAW,CAC9C,SAAQ,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;IAC3C,QAAQ,EAAE,eAAe,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;CAC3D;AAED,MAAM,WAAW,iBAAiB,CAChC,YAAY,SAAS,WAAW,GAAG,WAAW,CAC9C,SAAQ,gBAAgB;IACxB,YAAY,IAAI;QACd,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;QACrC,MAAM,CAAC,EAAE,GAAG,CAAA;QACZ,QAAQ,CAAC,EAAE,GAAG,CAAA;KACf,CAAA;IACD,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC3B;AAED,wBAAgB,WAAW,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,EACxE,KAAK,EAAE,gBAAgB,CAAC,YAAY,CAAC,GACpC,iBAAiB,CAAC,YAAY,CAAC,CA8DjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,QAAQ,CAAC,EAAE,qBAAqB,CAAA;CACjC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAc9D"}
package/dist/zod/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("@hookform/resolvers/zod"),r=require("@chakra-ui/utils");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},t.apply(this,arguments)}var n=function(e){switch(e._def.typeName){case"ZodArray":return"array";case"ZodObject":return"object";case"ZodNumber":return"number";case"ZodDate":return"date";default:return"text"}},o=function(e,r){var t;return null==(t=e._def[r])?void 0:t.value},a=function(e){var r=[],a={};if("ZodArray"===e._def.typeName)a=e._def.type.shape;else{if("ZodObject"!==e._def.typeName)return r;a=e._def.shape()}for(var i in a){var s=a[i],d={};"ZodArray"===s._def.typeName&&(d.min=o(s,"minLength"),d.max=o(s,"maxLength"));var c=s.description&&u(s.description);r.push(t({name:i,label:c.label||s.description||i,type:c.type||n(s)},d))}return r},i=function(e,t){return r.get(e._def.shape(),t)},s=function(e){return{getFields:function(){return a(e)},getNestedFields:function(r){return a(i(e,r))}}},u=function(e){try{return JSON.parse(e)}catch(r){return e}};Object.defineProperty(exports,"zodResolver",{enumerable:!0,get:function(){return e.zodResolver}}),exports.getFieldsFromSchema=a,exports.getNestedSchema=i,exports.zodFieldResolver=s,exports.zodForm=function(r,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),{schema:r,resolver:e.zodResolver(r,t,n),fieldResolver:s(r)}},exports.zodMeta=function(e){return JSON.stringify(e)},exports.zodParseMeta=u;
1
+ var e=require("@hookform/resolvers/zod"),r=require("@chakra-ui/utils");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},t.apply(this,arguments)}var n=function(e){switch(e._def.typeName){case"ZodArray":return"array";case"ZodObject":return"object";case"ZodNumber":return"number";case"ZodDate":return"date";default:return"text"}},o=function(e,r){var t;return null==(t=e._def[r])?void 0:t.value},a=function(e){var r=[],a={};if("ZodArray"===e._def.typeName)a=e._def.type.shape;else{if("ZodObject"!==e._def.typeName)return r;a=e._def.shape()}for(var i in a){var u=a[i],d={};"ZodArray"===u._def.typeName&&(d.min=o(u,"minLength"),d.max=o(u,"maxLength"));var c=u.description&&s(u.description);r.push(t({name:i,label:(null==c?void 0:c.label)||u.description||i,type:(null==c?void 0:c.type)||n(u)},d))}return r},i=function(e,t){return r.get(e._def.shape(),t)},u=function(e){return{getFields:function(){return a(e)},getNestedFields:function(r){return a(i(e,r))}}},s=function(e){try{return JSON.parse(e)}catch(r){return e}};Object.defineProperty(exports,"zodResolver",{enumerable:!0,get:function(){return e.zodResolver}}),exports.getFieldsFromSchema=a,exports.getNestedSchema=i,exports.zodFieldResolver=u,exports.zodForm=function(r,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),{schema:r,resolver:e.zodResolver(r,t,n),fieldResolver:u(r)}},exports.zodMeta=function(e){return JSON.stringify(e)},exports.zodParseMeta=s;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../zod/src/zod-resolver.ts"],"sourcesContent":["import * as z from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { get } from '@chakra-ui/utils'\nimport { FieldProps, FieldTypes } from '@saas-ui/forms'\n\nexport { zodResolver }\n\nexport type Options = {\n min?: number\n max?: number\n}\n\nconst getType = (field: z.ZodTypeAny) => {\n switch (field._def.typeName) {\n case 'ZodArray':\n return 'array'\n case 'ZodObject':\n return 'object'\n case 'ZodNumber':\n return 'number'\n case 'ZodDate':\n return 'date'\n case 'ZodString':\n default:\n return 'text'\n }\n}\n\nconst getArrayOption = (field: any, name: string) => {\n return field._def[name]?.value\n}\n\n/**\n * A helper function to render forms automatically based on a Yup schema\n *\n * @param schema The Yup schema\n * @returns {FieldProps[]}\n */\nexport const getFieldsFromSchema = (schema: z.ZodTypeAny): FieldProps[] => {\n const fields: FieldProps[] = []\n\n let schemaFields: Record<string, any> = {}\n if (schema._def.typeName === 'ZodArray') {\n schemaFields = schema._def.type.shape\n } else if (schema._def.typeName === 'ZodObject') {\n schemaFields = schema._def.shape()\n } else {\n return fields\n }\n\n for (const name in schemaFields) {\n const field = schemaFields[name]\n\n const options: Options = {}\n if (field._def.typeName === 'ZodArray') {\n options.min = getArrayOption(field, 'minLength')\n options.max = getArrayOption(field, 'maxLength')\n }\n\n const meta = field.description && zodParseMeta(field.description)\n\n fields.push({\n name,\n label: meta.label || field.description || name,\n type: meta.type || getType(field),\n ...options,\n })\n }\n return fields\n}\n\nexport const getNestedSchema = (schema: z.ZodTypeAny, path: string) => {\n return get(schema._def.shape(), path)\n}\n\nexport const zodFieldResolver = <T extends z.ZodTypeAny>(schema: T) => {\n return {\n getFields() {\n return getFieldsFromSchema(schema)\n },\n getNestedFields(name: string) {\n return getFieldsFromSchema(getNestedSchema(schema, name))\n },\n }\n}\n\nexport const zodForm = <T extends z.ZodTypeAny>(\n schema: T,\n schemaOptions = {},\n resolverOptions = {}\n) => {\n return {\n schema,\n resolver: zodResolver(schema, schemaOptions, resolverOptions),\n fieldResolver: zodFieldResolver(schema),\n }\n}\n\nexport interface ZodMeta {\n label: string\n type?: FieldTypes\n}\n\nexport const zodMeta = (meta: ZodMeta) => {\n return JSON.stringify(meta)\n}\n\nexport const zodParseMeta = (meta: string) => {\n try {\n return JSON.parse(meta)\n } catch (e) {\n return meta\n }\n}\n"],"names":["getType","field","_def","typeName","name","_field$_def$name","value","getFieldsFromSchema","schema","schemaFields","type","shape","fields","options","min","getArrayOption","max","meta","description","zodParseMeta","push","_extends","label","getNestedSchema","path","get","zodFieldResolver","getFields","getNestedFields","JSON","parse","e","schemaOptions","resolverOptions","resolver","zodResolver","fieldResolver","stringify"],"mappings":"2SAYA,IAAMA,EAAU,SAACC,GACf,OAAQA,EAAMC,KAAKC,UACjB,IAAK,WACH,MAAO,QACT,IAAK,YACH,MAAO,SACT,IAAK,YACH,MAAO,SACT,IAAK,UACH,MAAO,OAET,QACE,MAAO,WAIU,SAACF,EAAYG,GAClC,IAAAC,EAAA,OAAO,OAAPA,EAAOJ,EAAMC,KAAKE,SAAX,EAAAC,EAAkBC,OASKC,EAAG,SAACC,GAClC,MAA6B,GAEbC,EAAwB,GACxC,GAA6B,aAAzBD,EAAON,KAAKC,SACdM,EAAeD,EAAON,KAAKQ,KAAKC,UAC3B,CAAA,GAA6B,cAAzBH,EAAON,KAAKC,SAGrB,OAAOS,EAFPH,EAAeD,EAAON,KAAKS,QAK7B,IAAK,IAALP,KAAAK,EAAiC,CAC/B,IAAMR,EAAQQ,EAAaL,GAErBS,EAAmB,GACG,aAAxBZ,EAAMC,KAAKC,WACbU,EAAQC,IAAMC,EAAed,EAAO,aACpCY,EAAQG,IAAMD,EAAed,EAAO,cAGtC,IAAUgB,EAAGhB,EAAMiB,aAAeC,EAAalB,EAAMiB,aAErDN,EAAOQ,KAAPC,EAAA,CACEjB,KAAAA,EACAkB,MAAOL,EAAKK,OAASrB,EAAMiB,aAAed,EAC1CM,KAAMO,EAAKP,MAAQV,EAAQC,IACxBY,IAGP,OACDD,GAE2BW,EAAG,SAACf,EAAsBgB,GACpD,OAAOC,EAAGA,IAACjB,EAAON,KAAKS,QAASa,IAGLE,EAAG,SAAyBlB,GACvD,MAAO,CACLmB,UADK,WAEH,OAAOpB,EAAoBC,IAE7BoB,gBAJK,SAIWxB,GACd,SAA2BmB,EAAgBf,EAAQJ,SA0B7B,SAACa,GAC3B,IACE,OAAWY,KAACC,MAAMb,GAClB,MAAOc,GACP,OACDd,yMA1BoB,SACrBT,EACAwB,EACAC,GAEA,YADE,IAFFD,IAAAA,EAAgB,SAChBC,IAAAA,IAAAA,EAAkB,IAEX,CACLzB,OAAAA,EACA0B,SAAUC,cAAY3B,EAAQwB,EAAeC,GAC7CG,cAAeV,EAAiBlB,qBASb,SAACS,GACtB,YAAYoB,UAAUpB"}
1
+ {"version":3,"file":"index.js","sources":["../../zod/src/zod-resolver.ts"],"sourcesContent":["import * as z from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { get } from '@chakra-ui/utils'\nimport { FieldProps, FieldTypes } from '@saas-ui/forms'\n\nexport { zodResolver }\n\nexport type Options = {\n min?: number\n max?: number\n}\n\nconst getType = (field: z.ZodTypeAny) => {\n switch (field._def.typeName) {\n case 'ZodArray':\n return 'array'\n case 'ZodObject':\n return 'object'\n case 'ZodNumber':\n return 'number'\n case 'ZodDate':\n return 'date'\n case 'ZodString':\n default:\n return 'text'\n }\n}\n\nconst getArrayOption = (field: any, name: string) => {\n return field._def[name]?.value\n}\n\n/**\n * A helper function to render forms automatically based on a Yup schema\n *\n * @param schema The Yup schema\n * @returns {FieldProps[]}\n */\nexport const getFieldsFromSchema = (schema: z.ZodTypeAny): FieldProps[] => {\n const fields: FieldProps[] = []\n\n let schemaFields: Record<string, any> = {}\n if (schema._def.typeName === 'ZodArray') {\n schemaFields = schema._def.type.shape\n } else if (schema._def.typeName === 'ZodObject') {\n schemaFields = schema._def.shape()\n } else {\n return fields\n }\n\n for (const name in schemaFields) {\n const field = schemaFields[name]\n\n const options: Options = {}\n if (field._def.typeName === 'ZodArray') {\n options.min = getArrayOption(field, 'minLength')\n options.max = getArrayOption(field, 'maxLength')\n }\n\n const meta = field.description && zodParseMeta(field.description)\n\n fields.push({\n name,\n label: meta?.label || field.description || name,\n type: meta?.type || getType(field),\n ...options,\n })\n }\n return fields\n}\n\nexport const getNestedSchema = (schema: z.ZodTypeAny, path: string) => {\n return get(schema._def.shape(), path)\n}\n\nexport const zodFieldResolver = <T extends z.ZodTypeAny>(schema: T) => {\n return {\n getFields() {\n return getFieldsFromSchema(schema)\n },\n getNestedFields(name: string) {\n return getFieldsFromSchema(getNestedSchema(schema, name))\n },\n }\n}\n\nexport const zodForm = <T extends z.ZodTypeAny>(\n schema: T,\n schemaOptions = {},\n resolverOptions = {}\n) => {\n return {\n schema,\n resolver: zodResolver(schema, schemaOptions, resolverOptions),\n fieldResolver: zodFieldResolver(schema),\n }\n}\n\nexport interface ZodMeta {\n label: string\n type?: FieldTypes\n}\n\nexport const zodMeta = (meta: ZodMeta) => {\n return JSON.stringify(meta)\n}\n\nexport const zodParseMeta = (meta: string) => {\n try {\n return JSON.parse(meta)\n } catch (e) {\n return meta\n }\n}\n"],"names":["getType","field","_def","typeName","getArrayOption","name","_field$_def$name","value","getFieldsFromSchema","schema","fields","schemaFields","type","shape","options","min","max","meta","description","zodParseMeta","push","label","getNestedSchema","path","get","zodFieldResolver","getFields","getNestedFields","JSON","parse","e","schemaOptions","resolverOptions","resolver","zodResolver","fieldResolver","stringify"],"mappings":"2SAYA,IAAMA,EAAU,SAACC,GACf,OAAQA,EAAMC,KAAKC,UACjB,IAAK,WACH,MAAO,QACT,IAAK,YACH,MAAO,SACT,IAAK,YACH,MAAO,SACT,IAAK,UACH,MAAO,OAET,QACE,MAAO,SAIPC,EAAiB,SAACH,EAAYI,GAClC,IAAAC,EAAA,OAAA,OAAAA,EAAOL,EAAMC,KAAKG,SAAlB,EAAOC,EAAkBC,OASKC,EAAG,SAACC,GAClC,IAAYC,EAAiB,GAEbC,EAAwB,GACxC,GAA6B,aAAzBF,EAAOP,KAAKC,SACdQ,EAAeF,EAAOP,KAAKU,KAAKC,UACvBJ,CAAAA,GAAyB,cAAzBA,EAAOP,KAAKC,SAGrB,OACDO,EAHCC,EAAeF,EAAOP,KAAKW,QAK7B,IAAK,SAAcF,EAAc,CAC/B,IAAMV,EAAQU,EAAaN,GAEdS,EAAY,GACG,aAAxBb,EAAMC,KAAKC,WACbW,EAAQC,IAAMX,EAAeH,EAAO,aACpCa,EAAQE,IAAMZ,EAAeH,EAAO,cAGtC,IAAMgB,EAAOhB,EAAMiB,aAAeC,EAAalB,EAAMiB,aAErDR,EAAOU,QACLf,KAAAA,EACAgB,OAAW,MAAJJ,OAAAA,EAAAA,EAAMI,QAASpB,EAAMiB,aAAeb,EAC3CO,MAAM,MAAAK,OAAA,EAAAA,EAAML,OAAQZ,EAAQC,IACzBa,IAGP,OAAOJ,GAGIY,EAAkB,SAACb,EAAsBc,GACpD,OAAOC,MAAIf,EAAOP,KAAKW,QAASU,IAGLE,EAAG,SAAyBhB,GACvD,MAAO,CACLiB,UAAS,WACP,OAAOlB,EAAoBC,IAE7BkB,gBAJK,SAIWtB,GACd,OAAOG,EAAoBc,EAAgBb,EAAQJ,SA0B7B,SAACY,GAC3B,IACE,OAAWW,KAACC,MAAMZ,GAClB,MAAOa,GACP,OACDb,yMA1BoB,SACrBR,EACAsB,EACAC,GAEA,YAHAD,IAAAA,IAAAA,EAAgB,SAEd,IADFC,IAAAA,EAAkB,IAEX,CACLvB,OAAAA,EACAwB,SAAUC,EAAAA,YAAYzB,EAAQsB,EAAeC,GAC7CG,cAAeV,EAAiBhB,qBASb,SAACQ,GACtB,OAAOW,KAAKQ,UAAUnB"}
@@ -1,2 +1,2 @@
1
- import{zodResolver as e}from"@hookform/resolvers/zod";export{zodResolver}from"@hookform/resolvers/zod";import{get as r}from"@chakra-ui/utils";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},t.apply(this,arguments)}const o=e=>{switch(e._def.typeName){case"ZodArray":return"array";case"ZodObject":return"object";case"ZodNumber":return"number";case"ZodDate":return"date";default:return"text"}},a=(e,r)=>{var t;return null==(t=e._def[r])?void 0:t.value},n=e=>{const r=[];let n={};if("ZodArray"===e._def.typeName)n=e._def.type.shape;else{if("ZodObject"!==e._def.typeName)return r;n=e._def.shape()}for(const e in n){const s=n[e],d={};"ZodArray"===s._def.typeName&&(d.min=a(s,"minLength"),d.max=a(s,"maxLength"));const i=s.description&&p(s.description);r.push(t({name:e,label:i.label||s.description||e,type:i.type||o(s)},d))}return r},s=(e,t)=>r(e._def.shape(),t),d=e=>({getFields:()=>n(e),getNestedFields:r=>n(s(e,r))}),i=(r,t={},o={})=>({schema:r,resolver:e(r,t,o),fieldResolver:d(r)}),c=e=>JSON.stringify(e),p=e=>{try{return JSON.parse(e)}catch(r){return e}};export{n as getFieldsFromSchema,s as getNestedSchema,d as zodFieldResolver,i as zodForm,c as zodMeta,p as zodParseMeta};
1
+ import{zodResolver as e}from"@hookform/resolvers/zod";export{zodResolver}from"@hookform/resolvers/zod";import{get as r}from"@chakra-ui/utils";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},t.apply(this,arguments)}const o=e=>{switch(e._def.typeName){case"ZodArray":return"array";case"ZodObject":return"object";case"ZodNumber":return"number";case"ZodDate":return"date";default:return"text"}},n=(e,r)=>{var t;return null==(t=e._def[r])?void 0:t.value},a=e=>{const r=[];let a={};if("ZodArray"===e._def.typeName)a=e._def.type.shape;else{if("ZodObject"!==e._def.typeName)return r;a=e._def.shape()}for(const e in a){const s=a[e],d={};"ZodArray"===s._def.typeName&&(d.min=n(s,"minLength"),d.max=n(s,"maxLength"));const i=s.description&&c(s.description);r.push(t({name:e,label:(null==i?void 0:i.label)||s.description||e,type:(null==i?void 0:i.type)||o(s)},d))}return r},s=(e,t)=>r(e._def.shape(),t),d=e=>({getFields:()=>a(e),getNestedFields:r=>a(s(e,r))}),i=(r,t={},o={})=>({schema:r,resolver:e(r,t,o),fieldResolver:d(r)}),l=e=>JSON.stringify(e),c=e=>{try{return JSON.parse(e)}catch(r){return e}};export{a as getFieldsFromSchema,s as getNestedSchema,d as zodFieldResolver,i as zodForm,l as zodMeta,c as zodParseMeta};
2
2
  //# sourceMappingURL=index.modern.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.mjs","sources":["../../zod/src/zod-resolver.ts"],"sourcesContent":["import * as z from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { get } from '@chakra-ui/utils'\nimport { FieldProps, FieldTypes } from '@saas-ui/forms'\n\nexport { zodResolver }\n\nexport type Options = {\n min?: number\n max?: number\n}\n\nconst getType = (field: z.ZodTypeAny) => {\n switch (field._def.typeName) {\n case 'ZodArray':\n return 'array'\n case 'ZodObject':\n return 'object'\n case 'ZodNumber':\n return 'number'\n case 'ZodDate':\n return 'date'\n case 'ZodString':\n default:\n return 'text'\n }\n}\n\nconst getArrayOption = (field: any, name: string) => {\n return field._def[name]?.value\n}\n\n/**\n * A helper function to render forms automatically based on a Yup schema\n *\n * @param schema The Yup schema\n * @returns {FieldProps[]}\n */\nexport const getFieldsFromSchema = (schema: z.ZodTypeAny): FieldProps[] => {\n const fields: FieldProps[] = []\n\n let schemaFields: Record<string, any> = {}\n if (schema._def.typeName === 'ZodArray') {\n schemaFields = schema._def.type.shape\n } else if (schema._def.typeName === 'ZodObject') {\n schemaFields = schema._def.shape()\n } else {\n return fields\n }\n\n for (const name in schemaFields) {\n const field = schemaFields[name]\n\n const options: Options = {}\n if (field._def.typeName === 'ZodArray') {\n options.min = getArrayOption(field, 'minLength')\n options.max = getArrayOption(field, 'maxLength')\n }\n\n const meta = field.description && zodParseMeta(field.description)\n\n fields.push({\n name,\n label: meta.label || field.description || name,\n type: meta.type || getType(field),\n ...options,\n })\n }\n return fields\n}\n\nexport const getNestedSchema = (schema: z.ZodTypeAny, path: string) => {\n return get(schema._def.shape(), path)\n}\n\nexport const zodFieldResolver = <T extends z.ZodTypeAny>(schema: T) => {\n return {\n getFields() {\n return getFieldsFromSchema(schema)\n },\n getNestedFields(name: string) {\n return getFieldsFromSchema(getNestedSchema(schema, name))\n },\n }\n}\n\nexport const zodForm = <T extends z.ZodTypeAny>(\n schema: T,\n schemaOptions = {},\n resolverOptions = {}\n) => {\n return {\n schema,\n resolver: zodResolver(schema, schemaOptions, resolverOptions),\n fieldResolver: zodFieldResolver(schema),\n }\n}\n\nexport interface ZodMeta {\n label: string\n type?: FieldTypes\n}\n\nexport const zodMeta = (meta: ZodMeta) => {\n return JSON.stringify(meta)\n}\n\nexport const zodParseMeta = (meta: string) => {\n try {\n return JSON.parse(meta)\n } catch (e) {\n return meta\n }\n}\n"],"names":["field","_def","typeName","getArrayOption","name","_field$_def$name","value","schema","schemaFields","type","shape","fields","options","min","max","meta","description","zodParseMeta","push","label","getType","getNestedSchema","path","get","zodFieldResolver","getFields","getFieldsFromSchema","getNestedFields","schemaOptions","resolverOptions","resolver","zodResolver","fieldResolver","stringify","parse","e"],"mappings":"kXAYA,QAAiBA,IACf,OAAQA,EAAMC,KAAKC,UACjB,IAAK,WACH,MAAO,QACT,IAAK,YACH,MAAO,SACT,IAAK,YACH,MAAO,SACT,IAAK,UACH,MAAO,OAET,QACE,MAAO,SAIPC,EAAiB,CAACH,EAAYI,WAClC,OAAA,OAAOJ,EAAAA,EAAMC,KAAKG,SAAlB,EAAOC,EAAkBC,SASSC,IAClC,QAA6B,GAE7B,IAAgBC,EAAwB,GACxC,GAA6B,aAAzBD,EAAON,KAAKC,SACdM,EAAeD,EAAON,KAAKQ,KAAKC,UAC3B,CAAA,GAA6B,cAAzBH,EAAON,KAAKC,SAGrB,OACDS,EAHCH,EAAeD,EAAON,KAAKS,QAK7B,IAAK,WAAcF,EAAc,CAC/B,QAAcA,EAAaJ,GAErBQ,EAAmB,GACG,aAAxBZ,EAAMC,KAAKC,WACbU,EAAQC,IAAMV,EAAeH,EAAO,aACpCY,EAAQE,IAAMX,EAAeH,EAAO,cAGtC,MAAMe,EAAOf,EAAMgB,aAAeC,EAAajB,EAAMgB,aAErDL,EAAOO,QACLd,KAAAA,EACAe,MAAOJ,EAAKI,OAASnB,EAAMgB,aAAeZ,EAC1CK,KAAMM,EAAKN,MAAQW,EAAQpB,IACxBY,IAGP,UAGWS,EAAkB,CAACd,EAAsBe,IAC7CC,EAAIhB,EAAON,KAAKS,QAASY,GAGrBE,EAA4CjB,IAChD,CACLkB,UAAS,IACmBC,EAACnB,GAE7BoB,gBAAgBvB,KACaiB,EAAgBd,EAAQH,QAKlC,CACrBG,EACAqB,EAAgB,GAChBC,EAAkB,MAEX,CACLtB,OAAAA,EACAuB,SAAUC,EAAYxB,EAAQqB,EAAeC,GAC7CG,cAAeR,EAAiBjB,OASZQ,QACVkB,UAAUlB,GAGCE,EAAIF,IAC3B,IACE,YAAYmB,MAAMnB,GAClB,MAAOoB,GACP,OACDpB"}
1
+ {"version":3,"file":"index.modern.mjs","sources":["../../zod/src/zod-resolver.ts"],"sourcesContent":["import * as z from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { get } from '@chakra-ui/utils'\nimport { FieldProps, FieldTypes } from '@saas-ui/forms'\n\nexport { zodResolver }\n\nexport type Options = {\n min?: number\n max?: number\n}\n\nconst getType = (field: z.ZodTypeAny) => {\n switch (field._def.typeName) {\n case 'ZodArray':\n return 'array'\n case 'ZodObject':\n return 'object'\n case 'ZodNumber':\n return 'number'\n case 'ZodDate':\n return 'date'\n case 'ZodString':\n default:\n return 'text'\n }\n}\n\nconst getArrayOption = (field: any, name: string) => {\n return field._def[name]?.value\n}\n\n/**\n * A helper function to render forms automatically based on a Yup schema\n *\n * @param schema The Yup schema\n * @returns {FieldProps[]}\n */\nexport const getFieldsFromSchema = (schema: z.ZodTypeAny): FieldProps[] => {\n const fields: FieldProps[] = []\n\n let schemaFields: Record<string, any> = {}\n if (schema._def.typeName === 'ZodArray') {\n schemaFields = schema._def.type.shape\n } else if (schema._def.typeName === 'ZodObject') {\n schemaFields = schema._def.shape()\n } else {\n return fields\n }\n\n for (const name in schemaFields) {\n const field = schemaFields[name]\n\n const options: Options = {}\n if (field._def.typeName === 'ZodArray') {\n options.min = getArrayOption(field, 'minLength')\n options.max = getArrayOption(field, 'maxLength')\n }\n\n const meta = field.description && zodParseMeta(field.description)\n\n fields.push({\n name,\n label: meta?.label || field.description || name,\n type: meta?.type || getType(field),\n ...options,\n })\n }\n return fields\n}\n\nexport const getNestedSchema = (schema: z.ZodTypeAny, path: string) => {\n return get(schema._def.shape(), path)\n}\n\nexport const zodFieldResolver = <T extends z.ZodTypeAny>(schema: T) => {\n return {\n getFields() {\n return getFieldsFromSchema(schema)\n },\n getNestedFields(name: string) {\n return getFieldsFromSchema(getNestedSchema(schema, name))\n },\n }\n}\n\nexport const zodForm = <T extends z.ZodTypeAny>(\n schema: T,\n schemaOptions = {},\n resolverOptions = {}\n) => {\n return {\n schema,\n resolver: zodResolver(schema, schemaOptions, resolverOptions),\n fieldResolver: zodFieldResolver(schema),\n }\n}\n\nexport interface ZodMeta {\n label: string\n type?: FieldTypes\n}\n\nexport const zodMeta = (meta: ZodMeta) => {\n return JSON.stringify(meta)\n}\n\nexport const zodParseMeta = (meta: string) => {\n try {\n return JSON.parse(meta)\n } catch (e) {\n return meta\n }\n}\n"],"names":["field","_def","typeName","getArrayOption","name","_field$_def$name","value","getFieldsFromSchema","schema","fields","schemaFields","type","shape","options","min","max","meta","description","zodParseMeta","push","_extends","label","getType","getNestedSchema","path","get","zodFieldResolver","getFields","getNestedFields","zodForm","schemaOptions","resolverOptions","resolver","zodResolver","fieldResolver","zodMeta","JSON","stringify","parse","e"],"mappings":"kXAYA,QAAiBA,IACf,OAAQA,EAAMC,KAAKC,UACjB,IAAK,WACH,MAAO,QACT,IAAK,YACH,MAAO,SACT,IAAK,YACH,MAAO,SACT,IAAK,UACH,MAAO,OAET,QACE,MAAO,SAIOC,EAAG,CAACH,EAAYI,KAAgB,IAAAC,EAClD,cAAOL,EAAAA,EAAMC,KAAKG,WAAXC,EAAkBC,OASKC,EAAIC,IAClC,MAAYC,EAAiB,GAE7B,IAAgBC,EAAwB,GACxC,GAA6B,aAAzBF,EAAOP,KAAKC,SACdQ,EAAeF,EAAOP,KAAKU,KAAKC,UACvBJ,CAAAA,GAAyB,cAAzBA,EAAOP,KAAKC,SAGrB,SAFAQ,EAAeF,EAAOP,KAAKW,QAK7B,IAAK,MAAMR,KAAQM,EAAc,CAC/B,QAAcA,EAAaN,GAErBS,EAAmB,GACG,aAAxBb,EAAMC,KAAKC,WACbW,EAAQC,IAAMX,EAAeH,EAAO,aACpCa,EAAQE,IAAMZ,EAAeH,EAAO,cAGtC,MAAUgB,EAAGhB,EAAMiB,aAAeC,EAAalB,EAAMiB,aAErDR,EAAOU,KAAPC,EAAA,CACEhB,KAAAA,EACAiB,aAAOL,OAAAA,EAAAA,EAAMK,QAASrB,EAAMiB,aAAeb,EAC3CO,MAAM,MAAAK,OAAA,EAAAA,EAAML,OAAQW,EAAQtB,IACzBa,IAGP,UAGWU,EAAkB,CAACf,EAAsBgB,IAC7CC,EAAIjB,EAAOP,KAAKW,QAASY,GAGLE,EAA4BlB,IAChD,CACLmB,UAAS,MACoBnB,GAE7BoB,gBAAgBxB,GACPG,EAAoBgB,EAAgBf,EAAQJ,MAK5CyB,EAAU,CACrBrB,EACAsB,EAAgB,GAChBC,EAAkB,MAEX,CACLvB,OAAAA,EACAwB,SAAUC,EAAYzB,EAAQsB,EAAeC,GAC7CG,cAAeR,EAAiBlB,KAShB2B,EAAInB,GACXoB,KAACC,UAAUrB,GAGCE,EAAIF,IAC3B,IACE,YAAYsB,MAAMtB,GAClB,MAAOuB,GACP,OACDvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saas-ui/forms",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0-rc.10",
4
4
  "description": "Fully functional forms for Chakra UI.",
5
5
  "source": "src/index.ts",
6
6
  "exports": {
@@ -24,6 +24,13 @@
24
24
  },
25
25
  "./zod/src": {
26
26
  "default": "./zod/src/index.ts"
27
+ },
28
+ "./ajv": {
29
+ "require": "./dist/ajv/index.js",
30
+ "default": "./dist/ajv/index.modern.mjs"
31
+ },
32
+ "./ajv/src": {
33
+ "default": "./ajv/src/index.ts"
27
34
  }
28
35
  },
29
36
  "main": "./dist/index.js",
@@ -31,10 +38,11 @@
31
38
  "types": "./dist/index.d.ts",
32
39
  "scripts": {
33
40
  "clean": "rimraf --no-glob ./dist",
34
- "build": "yarn build:package && yarn build:yup && yarn build:zod",
41
+ "build": "yarn build:package && yarn build:yup && yarn build:zod && yarn build:ajv",
35
42
  "build:package": "yarn clean && cross-env NODE_ENV=production microbundle --tsconfig ./tsconfig.json --jsx React.createElement --jsxFragment React.Fragment -f cjs,modern --compress",
36
43
  "build:yup": "cross-env NODE_ENV=production microbundle --cwd yup --tsconfig ./yup/tsconfig.json -f cjs,modern --compress",
37
44
  "build:zod": "cross-env NODE_ENV=production microbundle --cwd zod --tsconfig ./zod/tsconfig.json -f cjs,modern --compress",
45
+ "build:ajv": "cross-env NODE_ENV=production microbundle --cwd ajv --tsconfig ./ajv/tsconfig.json -f cjs,modern --compress",
38
46
  "lint": "eslint src --ext .ts,.tsx,.js,.jsx --config ../../.eslintrc.js",
39
47
  "lint:staged": "lint-staged --allow-empty --config ../../lint-staged.config.js",
40
48
  "typecheck": "tsc --noEmit"
@@ -45,7 +53,9 @@
45
53
  "yup/package.json",
46
54
  "yup/src",
47
55
  "zod/package.json",
48
- "zod/src"
56
+ "zod/src",
57
+ "ajv/package.json",
58
+ "ajv/src"
49
59
  ],
50
60
  "sideEffects": false,
51
61
  "publishConfig": {
@@ -79,24 +89,29 @@
79
89
  "url": "https://storybook.saas-ui.dev"
80
90
  },
81
91
  "dependencies": {
82
- "@chakra-ui/icons": "^2.0.0",
83
- "@chakra-ui/react-utils": "^2.0.0",
84
- "@chakra-ui/utils": "^2.0.0",
85
- "@hookform/resolvers": "^2.8.10",
86
- "@saas-ui/button": "1.0.0-rc.0",
87
- "@saas-ui/input-right-button": "1.0.0-rc.0",
88
- "@saas-ui/number-input": "1.0.0-rc.0",
89
- "@saas-ui/password-input": "1.0.0-rc.0",
90
- "@saas-ui/pin-input": "1.0.0-rc.1",
91
- "@saas-ui/radio": "1.0.0-rc.0",
92
- "@saas-ui/react-utils": "1.0.0-rc.0",
93
- "@saas-ui/select": "1.0.0-rc.0",
94
- "@saas-ui/stepper": "1.0.0-rc.0",
95
- "react-hook-form": "^7.31.2"
92
+ "@chakra-ui/icons": "^2.0.2",
93
+ "@chakra-ui/react-utils": "^2.0.1",
94
+ "@chakra-ui/utils": "^2.0.2",
95
+ "@hookform/resolvers": "^2.9.0",
96
+ "@saas-ui/button": "1.0.0-rc.4",
97
+ "@saas-ui/input-right-button": "1.0.0-rc.4",
98
+ "@saas-ui/number-input": "1.0.0-rc.3",
99
+ "@saas-ui/password-input": "1.0.0-rc.4",
100
+ "@saas-ui/pin-input": "1.0.0-rc.4",
101
+ "@saas-ui/radio": "1.0.0-rc.3",
102
+ "@saas-ui/react-utils": "1.0.0-rc.3",
103
+ "@saas-ui/select": "1.0.0-rc.3",
104
+ "@saas-ui/stepper": "1.0.0-rc.4",
105
+ "react-hook-form": "^7.31.3"
96
106
  },
97
107
  "peerDependencies": {
98
108
  "@chakra-ui/react": ">=2.1.0",
99
109
  "@chakra-ui/system": ">=2.1.0",
100
110
  "react": ">=18.0.0"
111
+ },
112
+ "devDependencies": {
113
+ "ajv": "^8.11.0",
114
+ "yup": "^0.32.11",
115
+ "zod": "^3.17.3"
101
116
  }
102
117
  }