UNPKG

@form-kit/form-kit

Version:

Build dynamic forms based on zod schema or JSON

1 lines 29.5 kB
{"version":3,"sources":["../src/index.ts","../src/form-kit.tsx","../src/components/form.tsx","../utils/cn.ts","../src/components/label.tsx","../src/form-field.tsx","../src/fields/input.tsx","../src/fields/date.tsx","../src/fields/index.ts","../src/components/form-context.tsx","../src/field.tsx","../src/components/button.tsx","../utils/form.ts"],"sourcesContent":["export * from './form-kit';\r\nexport type * from './types';\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useMemo } from 'react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useForm } from 'react-hook-form';\r\nimport { Form as FormProvider } from './components/form';\r\nimport FormField, { type FormFieldType } from './form-field';\r\nimport { Button } from './components/button';\r\nimport { z } from 'zod';\r\nimport type { Components, Field, FieldTransformer, FormSubmitHandler } from './types';\r\nimport { generateFields, generateGrid, getDefaultValues } from '../utils/form';\r\nimport { FormComponentsProvider } from './components/form-context';\r\n\r\ntype FormProps<Z extends z.ZodObject<any>, C extends Components> = {\r\n schema: Z;\r\n initialValues?: z.input<Z>;\r\n fields?: Field<Z, C>[];\r\n fieldTransformer?: FieldTransformer<Z, C>;\r\n onSubmit?: FormSubmitHandler<Z>;\r\n onCancel?: () => void;\r\n components?: C;\r\n};\r\n\r\nexport const FormKit = <\r\n Z extends z.ZodObject<any> = z.ZodObject<any>,\r\n C extends Components = NonNullable<unknown>,\r\n>(\r\n props: FormProps<Z, C>\r\n) => {\r\n const {\r\n schema,\r\n initialValues,\r\n fields = [],\r\n onSubmit,\r\n onCancel,\r\n fieldTransformer,\r\n components = {},\r\n } = props;\r\n\r\n const initialFormValues = useMemo<z.input<Z>>(() => {\r\n if (initialValues) return initialValues;\r\n if (!schema) return {} as z.input<Z>;\r\n return getDefaultValues(schema);\r\n }, [initialValues, schema]);\r\n\r\n const form = useForm({\r\n resolver: zodResolver(schema),\r\n values: initialFormValues,\r\n });\r\n const isSubmitting = form.formState.isSubmitting;\r\n\r\n const formFields = useMemo<Field<Z, C>[]>(() => {\r\n if (fields.length > 0) return fields;\r\n\r\n if (!schema) return [];\r\n\r\n return generateFields<Z, C>(schema, fieldTransformer);\r\n }, [fields, schema, fieldTransformer]);\r\n\r\n const rows = useMemo(() => generateGrid<Z, C>(formFields), [formFields]);\r\n\r\n const handleCancel = () => {\r\n form.reset();\r\n onCancel?.();\r\n };\r\n\r\n const handleSubmit = async (data: z.infer<Z>) => {\r\n await onSubmit?.(data);\r\n };\r\n\r\n return (\r\n <FormComponentsProvider value={components}>\r\n <FormProvider {...form}>\r\n <form onSubmit={form.handleSubmit(handleSubmit)} className=\"flex flex-col gap-6\">\r\n <div className=\"flex flex-col gap-4\">\r\n {rows.map((row, index) => (\r\n <div key={index} className=\"grid grid-cols-12 gap-4\">\r\n {row.map((col) => (\r\n <div\r\n key={col.name}\r\n className=\"w-full\"\r\n style={{\r\n gridColumn: `span ${col.size} / span ${col.size}`,\r\n }}\r\n >\r\n {col.type !== 'hidden' && (\r\n <FormField metadata={col as unknown as FormFieldType<C>} />\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <div className=\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\">\r\n <Button type=\"button\" variant=\"outline\" onClick={handleCancel} disabled={isSubmitting}>\r\n Cancel\r\n </Button>\r\n <Button type=\"submit\" disabled={isSubmitting}>\r\n {isSubmitting ? 'Saving...' : 'Save Changes'}\r\n </Button>\r\n </div>\r\n </form>\r\n </FormProvider>\r\n </FormComponentsProvider>\r\n );\r\n};\r\nexport default FormKit;\r\n","import * as React from 'react';\r\nimport * as LabelPrimitive from '@radix-ui/react-label';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport {\r\n Controller,\r\n FormProvider,\r\n useFormContext,\r\n useFormState,\r\n type ControllerProps,\r\n type FieldPath,\r\n type FieldValues,\r\n} from 'react-hook-form';\r\n\r\nimport { cn } from '../../utils/cn';\r\nimport { Label } from './label';\r\n\r\nconst Form = FormProvider;\r\n\r\ntype FormFieldContextValue<\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n name: TName;\r\n};\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\r\n\r\nconst FormField = <\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n>({\r\n ...props\r\n}: ControllerProps<TFieldValues, TName>) => {\r\n return (\r\n <FormFieldContext.Provider value={{ name: props.name }}>\r\n <Controller {...props} />\r\n </FormFieldContext.Provider>\r\n );\r\n};\r\n\r\nconst useFormField = () => {\r\n const fieldContext = React.useContext(FormFieldContext);\r\n const itemContext = React.useContext(FormItemContext);\r\n const { getFieldState } = useFormContext();\r\n const formState = useFormState({ name: fieldContext.name });\r\n const fieldState = getFieldState(fieldContext.name, formState);\r\n\r\n if (!fieldContext) {\r\n throw new Error('useFormField should be used within <FormField>');\r\n }\r\n\r\n const { id } = itemContext;\r\n\r\n return {\r\n id,\r\n name: fieldContext.name,\r\n formItemId: `${id}-form-item`,\r\n formDescriptionId: `${id}-form-item-description`,\r\n formMessageId: `${id}-form-item-message`,\r\n ...fieldState,\r\n };\r\n};\r\n\r\ntype FormItemContextValue = {\r\n id: string;\r\n};\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\r\n\r\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\r\n const id = React.useId();\r\n\r\n return (\r\n <FormItemContext.Provider value={{ id }}>\r\n <div data-slot=\"form-item\" className={cn('grid gap-2', className)} {...props} />\r\n </FormItemContext.Provider>\r\n );\r\n}\r\n\r\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\r\n const { error, formItemId } = useFormField();\r\n\r\n return (\r\n <Label\r\n data-slot=\"form-label\"\r\n data-error={!!error}\r\n className={cn('data-[error=true]:text-destructive', className)}\r\n htmlFor={formItemId}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\r\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\r\n\r\n return (\r\n <Slot\r\n data-slot=\"form-control\"\r\n id={formItemId}\r\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\r\n aria-invalid={!!error}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\r\n const { formDescriptionId } = useFormField();\r\n\r\n return (\r\n <p\r\n data-slot=\"form-description\"\r\n id={formDescriptionId}\r\n className={cn('text-muted-foreground text-sm', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\r\n const { error, formMessageId } = useFormField();\r\n const body = error ? String(error?.message ?? '') : props.children;\r\n\r\n if (!body) {\r\n return null;\r\n }\r\n\r\n return (\r\n <p\r\n data-slot=\"form-message\"\r\n id={formMessageId}\r\n className={cn('text-destructive text-sm', className)}\r\n {...props}\r\n >\r\n {body}\r\n </p>\r\n );\r\n}\r\n\r\nexport {\r\n useFormField,\r\n Form,\r\n FormItem,\r\n FormLabel,\r\n FormControl,\r\n FormDescription,\r\n FormMessage,\r\n FormField,\r\n};\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","import * as React from 'react';\r\nimport * as LabelPrimitive from '@radix-ui/react-label';\r\n\r\nimport { cn } from '../../utils/cn';\r\n\r\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\r\n return (\r\n <LabelPrimitive.Root\r\n data-slot=\"label\"\r\n className={cn(\r\n 'flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport { Label };\r\n","import {\n FormControl,\n FormDescription,\n FormField as PrimitiveFormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from './components/form';\nimport { useForm, type ControllerRenderProps } from 'react-hook-form';\nimport Field, { type FieldProps, type FieldType } from './field';\nimport type { Components } from './types';\n\ntype BaseField = {\n name: string;\n label?: string;\n placeholder?: string;\n description?: string;\n element?: React.ReactNode;\n};\n\ntype FormFieldMap<C extends Components> = {\n [K in FieldType<C>]: BaseField & {\n type: K;\n fieldProps?: Omit<FieldProps<C, K>, keyof ControllerRenderProps>;\n };\n};\n\nexport type FormFieldType<C extends Components = NonNullable<unknown>> =\n FormFieldMap<C>[FieldType<C>];\n\ntype FormInputProps<C extends Components> = {\n metadata: FormFieldType<C>;\n};\nconst FormField = <C extends Components>({ metadata }: FormInputProps<C>) => {\n const { control } = useForm();\n return (\n <PrimitiveFormField\n control={control}\n name={metadata.name}\n render={({ field }) => (\n <FormItem>\n {metadata.label && <FormLabel>{metadata.label}</FormLabel>}\n <FormControl>\n {metadata.element ? (\n metadata.element\n ) : (\n <Field\n inputType={metadata.type}\n placeholder={metadata.placeholder}\n {...metadata.fieldProps}\n {...field}\n />\n )}\n </FormControl>\n {metadata.description && <FormDescription>{metadata.description}</FormDescription>}\n <FormMessage />\n </FormItem>\n )}\n />\n );\n};\n\nexport default FormField;\n","type InputProps = React.ComponentProps<'input'>;\r\nconst Input = (props: InputProps) => {\r\n return <input type=\"text\" className=\"h-10 bg-primary\" {...props} />;\r\n};\r\n\r\nexport default Input;\r\n","import type { ControllerRenderProps } from \"react-hook-form\";\r\n\r\ntype DataProps = ControllerRenderProps;\r\n\r\nexport const DateComponent = (props: DataProps) => {\r\n return <input type=\"date\" {...props} />;\r\n};\r\n\r\nexport default DateComponent;\r\n","import Input from \"./input\";\nimport Date from \"./date\";\n\nconst BaseInputComponents = {\n text: Input,\n date: Date,\n};\n\nexport default BaseInputComponents;\n","import { createContext, useContext } from 'react';\r\nimport type { Components } from '../types';\r\n\r\nconst FormComponentsContext = createContext<Components | undefined>(undefined);\r\n\r\nexport const FormComponentsProvider = FormComponentsContext.Provider;\r\n\r\nexport const useFormComponents = () => {\r\n const ctx = useContext(FormComponentsContext);\r\n if (!ctx) throw new Error('FormComponentsContext not found');\r\n return ctx;\r\n};\r\n","import BaseInputComponents from './fields';\nimport { useFormComponents } from './components/form-context';\nimport type { Components } from './types';\n\nexport type FieldType<C extends Components> = keyof (typeof BaseInputComponents & C);\n\nexport type FieldComponentProps<\n C extends Components,\n T extends FieldType<C>,\n> = React.ComponentProps<(typeof BaseInputComponents & C)[T]>;\n\nexport type FieldProps<C extends Components, T extends FieldType<C>> = FieldComponentProps<C, T>;\n\nconst Field = <C extends Components, T extends FieldType<C>>({\n inputType,\n ...props\n}: FieldProps<C, T> & { inputType: T }) => {\n const components = useFormComponents() as C;\n const Component = { ...BaseInputComponents, ...components }[inputType];\n\n if (!Component) return null;\n\n return <Component {...props} />;\n};\n\nexport default Field;\n","import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nimport { cn } from '../../utils/cn';\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\r\n destructive:\r\n 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\r\n outline:\r\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\r\n secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\r\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\r\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\r\n icon: 'size-9',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n);\r\n\r\nfunction Button({\r\n className,\r\n variant,\r\n size,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<'button'> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean;\r\n }) {\r\n const Comp = asChild ? Slot : 'button';\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport { Button, buttonVariants };\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { z } from 'zod';\nimport type { FormFieldType } from '../src/form-field';\nimport type { Components, Field, FieldTransformer, Sizes } from '../src/types';\n\ntype InternalField<C extends Components> = Omit<Field<any, C>, 'type'> & {\n type: FormFieldType<C>['type'] | 'hidden';\n};\n\nexport function generateGrid<\n Z extends z.ZodObject<any>,\n C extends Components = NonNullable<unknown>,\n>(inputs: Field<Z, C>[]): InternalField<C>[][] {\n const GRID_WIDTH = 12;\n const result: InternalField<C>[][] = [];\n let currentRow: InternalField<C>[] = [];\n let currentWidth = 0;\n\n // Helper function to create a placeholder field\n const createPlaceholder = (size: Sizes): InternalField<C> =>\n ({\n name: `placeholder_${Math.random().toString(36).slice(2)}`,\n type: 'hidden' as const,\n size,\n label: '',\n }) as InternalField<C>;\n\n for (const item of inputs) {\n const itemWidth = item.size || 12;\n\n // Validate item size\n if (itemWidth < 1 || itemWidth > 12) {\n throw new Error(`Invalid size ${itemWidth} for field ${item.name}`);\n }\n\n // If adding this item exceeds row width or row is full, start new row\n if (\n currentWidth + itemWidth > GRID_WIDTH ||\n (currentRow.length === 0 && itemWidth === GRID_WIDTH)\n ) {\n if (currentRow.length > 0) {\n // Fill remaining space with placeholders\n while (currentWidth < GRID_WIDTH) {\n const remaining = GRID_WIDTH - currentWidth;\n currentRow.push(createPlaceholder(remaining as Sizes));\n currentWidth += remaining;\n }\n result.push(currentRow);\n }\n currentRow = [];\n currentWidth = 0;\n }\n\n // Add item to current row\n currentRow.push({ ...item, size: itemWidth } as unknown as InternalField<C>);\n currentWidth += itemWidth;\n\n // If row is exactly full, push it\n if (currentWidth === GRID_WIDTH) {\n result.push(currentRow);\n currentRow = [];\n currentWidth = 0;\n }\n }\n\n // Handle last row\n if (currentRow.length > 0) {\n while (currentWidth < GRID_WIDTH) {\n const remaining = GRID_WIDTH - currentWidth;\n currentRow.push(createPlaceholder(remaining as Sizes));\n currentWidth += remaining;\n }\n result.push(currentRow);\n }\n\n // Validate that each row sums to exactly 12\n result.forEach((row, index) => {\n const rowWidth = row.reduce((sum, item) => sum + (item.size || 12), 0);\n if (rowWidth !== GRID_WIDTH) {\n throw new Error(`Row ${index} has invalid width: ${rowWidth}`);\n }\n });\n\n return result;\n}\n\nexport function getDefaultValues<ZObject extends z.ZodObject<any>>(\n schema: ZObject\n): z.input<ZObject> {\n const shape = schema.shape;\n const defaultValues: Record<string, unknown> = {};\n\n for (const item of Object.entries(shape)) {\n const [key, value] = item as [string, z.ZodTypeAny];\n const zodType = value as z.ZodTypeAny;\n\n // Si el esquema tiene un valor por defecto explícito\n if ('_def' in zodType && 'defaultValue' in zodType._def) {\n defaultValues[key] = zodType._def.defaultValue();\n continue;\n }\n\n // Manejo de diferentes tipos de Zod\n if (zodType instanceof z.ZodString) {\n defaultValues[key] = '';\n } else if (zodType instanceof z.ZodNumber) {\n defaultValues[key] = 0;\n } else if (zodType instanceof z.ZodBoolean) {\n defaultValues[key] = false;\n } else if (zodType instanceof z.ZodArray) {\n defaultValues[key] = [];\n } else if (zodType instanceof z.ZodObject) {\n // Recursión para objetos anidados\n defaultValues[key] = getDefaultValues(zodType);\n } else if (zodType instanceof z.ZodOptional || zodType instanceof z.ZodNullable) {\n // Para tipos opcionales o anulables, asignamos undefined o null respectivamente\n defaultValues[key] = zodType instanceof z.ZodOptional ? undefined : null;\n } else {\n // Para otros tipos no manejados explícitamente, asignar undefined\n defaultValues[key] = undefined;\n }\n }\n\n return defaultValues as z.input<ZObject>;\n}\n\nexport function generateFields<\n Z extends z.ZodObject<any>,\n C extends Components = NonNullable<unknown>,\n>(schema: Z, fieldTransformer?: FieldTransformer<Z, C>): Field<Z, C>[] {\n const schemaShape = schema.shape;\n const defaultFields: Field<Z, C>[] = Object.keys(schemaShape).map(\n (key) =>\n ({\n name: key,\n size: 12,\n type: 'text',\n label: key,\n }) as unknown as Field<Z, C>\n );\n\n if (!fieldTransformer) return defaultFields;\n\n const getTransformResult = (\n field: Field<Z, C>,\n transformer: FieldTransformer<Z, C>\n ): Field<Z, C> => {\n const { name } = field;\n\n // ensure some fields are not present in the original field\n const privateValues = {\n name,\n };\n if (typeof transformer === 'function') {\n const transformResult = transformer(field);\n if (transformResult) {\n return {\n ...field,\n ...transformResult,\n ...privateValues,\n } as unknown as Field<Z, C>;\n } else return field;\n } else if (typeof transformer === 'object') {\n const transformResult = transformer[name];\n if (!transformResult) return field;\n\n return {\n ...field,\n ...(typeof transformResult === 'function' ? transformResult(field) : transformResult),\n ...privateValues,\n } as unknown as Field<Z, C>;\n }\n\n // Si el campo no tiene transformador, devolverlo tal cual\n return field;\n };\n\n return defaultFields.map((field) => {\n return getTransformResult(field, fieldTransformer);\n });\n}\n"],"mappings":"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","names":["import_react","import_zod","import_react_hook_form","React","LabelPrimitive","import_jsx_runtime","import_react_hook_form","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","FormField","React","import_react_slot","import_jsx_runtime","import_zod","import_jsx_runtime"]}