@mehdashti/forms 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +224 -1
- package/dist/index.js +467 -7
- package/dist/index.js.map +1 -1
- package/package.json +9 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/use-smart-form.ts","../src/form-field.tsx","../src/form-select.tsx","../src/form-checkbox.tsx","../src/form-textarea.tsx","../src/form-file-upload.tsx","../src/form-date-picker.tsx","../src/form-multi-select.tsx","../src/form-layout.tsx","../src/form-section.tsx","../src/form-grid.tsx","../src/form-wizard.tsx","../src/use-field-array.ts","../src/validation-schemas.ts","../src/validation-helpers.ts"],"names":["errors","jsx","Controller","jsxs","React","formatFileSize","spacingClasses","columnClasses","rhfUseFieldArray","z"],"mappings":"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","file":"index.js","sourcesContent":["import { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { FieldValues, Path, DefaultValues } from 'react-hook-form'\nimport type { z } from 'zod'\n\nexport interface SmartFormOptions<TFieldValues extends FieldValues = FieldValues> {\n schema: z.ZodSchema<TFieldValues>\n onSubmit: (data: TFieldValues) => void | Promise<void>\n onError?: (errors: Record<string, unknown>) => void\n realtimeValidation?: boolean\n defaultValues?: DefaultValues<TFieldValues>\n mode?: 'onSubmit' | 'onBlur' | 'onChange' | 'onTouched' | 'all'\n}\n\n/**\n * Enhanced React Hook Form with Zod validation and smart defaults\n */\nexport function useSmartForm<TFieldValues extends FieldValues = FieldValues>(\n options: SmartFormOptions<TFieldValues>\n) {\n const { schema, onSubmit, onError, realtimeValidation = true, ...formOptions } = options\n\n const form = useForm<TFieldValues>({\n resolver: zodResolver(schema),\n mode: realtimeValidation ? 'onChange' : (formOptions.mode || 'onSubmit'),\n ...formOptions,\n })\n\n const {\n handleSubmit: rhfHandleSubmit,\n formState: { isSubmitting, errors },\n } = form\n\n const hasErrors = Object.keys(errors).length > 0\n\n const getError = (name: Path<TFieldValues>): string | undefined => {\n const error = errors[name]\n return error?.message as string | undefined\n }\n\n const handleSubmit = rhfHandleSubmit(\n async (data) => {\n try {\n await onSubmit(data)\n } catch (error) {\n if (onError) {\n onError(error as Record<string, unknown>)\n } else {\n console.error('Form submission error:', error)\n }\n }\n },\n (errors) => {\n if (onError) {\n onError(errors)\n }\n }\n )\n\n return {\n ...form,\n handleSubmit,\n isSubmitting,\n hasErrors,\n getError,\n }\n}\n\nexport type SmartFormReturn<TFieldValues extends FieldValues = FieldValues> = ReturnType<typeof useSmartForm<TFieldValues>>\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues } from 'react-hook-form'\nimport type { FormFieldProps } from './form-types'\n\n/**\n * Smart Form Field component with automatic error handling\n *\n * @example\n * ```tsx\n * <FormField\n * name=\"email\"\n * label=\"Email\"\n * type=\"email\"\n * required\n * control={form.control}\n * placeholder=\"Enter your email\"\n * />\n * ```\n */\nexport function FormField<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n type = 'text',\n placeholder,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n render,\n}: FormFieldProps<TFieldValues>) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <label htmlFor={String(name)} className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n {render ? (\n render(field)\n ) : (\n <input\n id={String(name)}\n type={type}\n placeholder={placeholder}\n disabled={disabled}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n {...field}\n value={field.value || ''}\n />\n )}\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues } from 'react-hook-form'\nimport type { FormSelectProps } from './form-types'\n\n/**\n * Smart Form Select component\n *\n * @example\n * ```tsx\n * <FormSelect\n * name=\"country\"\n * label=\"Country\"\n * required\n * control={form.control}\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * />\n * ```\n */\nexport function FormSelect<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n options,\n placeholder,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n}: FormSelectProps<TFieldValues>) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <label htmlFor={String(name)} className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <select\n id={String(name)}\n disabled={disabled}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n {...field}\n value={field.value || ''}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={String(option.value)}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues } from 'react-hook-form'\nimport type { FormCheckboxProps } from './form-types'\n\n/**\n * Smart Form Checkbox component\n *\n * @example\n * ```tsx\n * <FormCheckbox\n * name=\"acceptTerms\"\n * label=\"I accept the terms and conditions\"\n * required\n * control={form.control}\n * description=\"You must accept the terms to continue\"\n * />\n * ```\n */\nexport function FormCheckbox<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n description,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n}: FormCheckboxProps<TFieldValues>) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <div className=\"flex items-start space-x-3\">\n <input\n id={String(name)}\n type=\"checkbox\"\n disabled={disabled}\n className={`h-4 w-4 rounded border-input ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n checked={field.value || false}\n onChange={(e) => field.onChange(e.target.checked)}\n onBlur={field.onBlur}\n />\n <div className=\"flex-1 space-y-1 leading-none\">\n <label\n htmlFor={String(name)}\n className=\"text-sm font-medium cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n </div>\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues, Control, Path } from 'react-hook-form'\n\nexport interface FormTextareaProps<TFieldValues extends FieldValues = FieldValues> {\n name: Path<TFieldValues>\n label: string\n placeholder?: string\n required?: boolean\n helpText?: string\n disabled?: boolean\n className?: string\n control: Control<TFieldValues>\n rows?: number\n maxLength?: number\n showCharacterCount?: boolean\n resize?: 'none' | 'vertical' | 'horizontal' | 'both'\n}\n\n/**\n * Smart Form Textarea component with character counter\n *\n * @example\n * ```tsx\n * <FormTextarea\n * name=\"description\"\n * label=\"Description\"\n * control={form.control}\n * rows={4}\n * maxLength={500}\n * showCharacterCount\n * />\n * ```\n */\nexport function FormTextarea<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n placeholder,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n rows = 4,\n maxLength,\n showCharacterCount = false,\n resize = 'vertical',\n}: FormTextareaProps<TFieldValues>) {\n const resizeClass = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n }[resize]\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => {\n const currentLength = (field.value as string)?.length || 0\n const showCount = showCharacterCount || maxLength\n\n return (\n <div className={`space-y-2 ${className || ''}`}>\n <label\n htmlFor={String(name)}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <textarea\n id={String(name)}\n placeholder={placeholder}\n disabled={disabled}\n rows={rows}\n maxLength={maxLength}\n className={`flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${resizeClass} ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n {...field}\n value={field.value || ''}\n />\n\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1\">\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n\n {showCount && (\n <p className=\"text-xs text-muted-foreground\">\n {currentLength}\n {maxLength && ` / ${maxLength}`}\n </p>\n )}\n </div>\n </div>\n )\n }}\n />\n )\n}\n","import * as React from 'react'\nimport { Controller } from 'react-hook-form'\nimport type { FieldValues, Control, Path } from 'react-hook-form'\n\nexport interface FormFileUploadProps<TFieldValues extends FieldValues = FieldValues> {\n name: Path<TFieldValues>\n label: string\n required?: boolean\n helpText?: string\n disabled?: boolean\n className?: string\n control: Control<TFieldValues>\n accept?: string\n multiple?: boolean\n maxSize?: number // in bytes\n showPreview?: boolean\n onFileChange?: (files: FileList | null) => void\n}\n\n/**\n * Smart Form File Upload component with preview\n *\n * @example\n * ```tsx\n * <FormFileUpload\n * name=\"avatar\"\n * label=\"Profile Picture\"\n * control={form.control}\n * accept=\"image/*\"\n * maxSize={5 * 1024 * 1024} // 5MB\n * showPreview\n * />\n * ```\n */\nexport function FormFileUpload<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n accept,\n multiple = false,\n maxSize,\n showPreview = true,\n onFileChange,\n}: FormFileUploadProps<TFieldValues>) {\n const [previews, setPreviews] = React.useState<string[]>([])\n\n const handleFileChange = (\n files: FileList | null,\n onChange: (value: any) => void\n ) => {\n if (!files || files.length === 0) {\n setPreviews([])\n onChange(null)\n onFileChange?.(null)\n return\n }\n\n // Validate file size\n if (maxSize) {\n const invalidFiles = Array.from(files).filter((file) => file.size > maxSize)\n if (invalidFiles.length > 0) {\n alert(`Some files exceed the maximum size of ${formatFileSize(maxSize)}`)\n return\n }\n }\n\n // Generate previews for images\n if (showPreview && accept?.includes('image')) {\n const fileArray = Array.from(files)\n const newPreviews: string[] = []\n\n fileArray.forEach((file) => {\n const reader = new FileReader()\n reader.onloadend = () => {\n newPreviews.push(reader.result as string)\n if (newPreviews.length === fileArray.length) {\n setPreviews(newPreviews)\n }\n }\n reader.readAsDataURL(file)\n })\n }\n\n onChange(multiple ? files : files[0])\n onFileChange?.(files)\n }\n\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes'\n const k = 1024\n const sizes = ['Bytes', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i]\n }\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ...field }, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <label\n htmlFor={String(name)}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <div\n className={`flex items-center justify-center w-full ${\n error ? 'border-destructive' : ''\n }`}\n >\n <label\n htmlFor={String(name)}\n className=\"flex flex-col items-center justify-center w-full h-32 border-2 border-dashed rounded-lg cursor-pointer bg-background hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex flex-col items-center justify-center pt-5 pb-6\">\n <svg\n className=\"w-8 h-8 mb-4 text-muted-foreground\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 20 16\"\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2\"\n />\n </svg>\n <p className=\"mb-2 text-sm text-muted-foreground\">\n <span className=\"font-semibold\">Click to upload</span> or drag and drop\n </p>\n {accept && (\n <p className=\"text-xs text-muted-foreground\">\n {accept.split(',').join(', ')}\n </p>\n )}\n {maxSize && (\n <p className=\"text-xs text-muted-foreground\">\n Max size: {formatFileSize(maxSize)}\n </p>\n )}\n </div>\n <input\n id={String(name)}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"hidden\"\n onChange={(e) => handleFileChange(e.target.files, onChange)}\n {...field}\n />\n </label>\n </div>\n\n {/* File Preview */}\n {showPreview && previews.length > 0 && (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4 mt-4\">\n {previews.map((preview, index) => (\n <div key={index} className=\"relative group\">\n <img\n src={preview}\n alt={`Preview ${index + 1}`}\n className=\"w-full h-24 object-cover rounded-md border\"\n />\n <button\n type=\"button\"\n onClick={() => {\n const newPreviews = previews.filter((_, i) => i !== index)\n setPreviews(newPreviews)\n if (newPreviews.length === 0) {\n onChange(null)\n }\n }}\n className=\"absolute top-1 right-1 bg-destructive text-destructive-foreground rounded-full p-1 opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* File Info */}\n {value && !showPreview && (\n <div className=\"text-sm text-muted-foreground\">\n {multiple && (value as FileList).length > 0\n ? `${(value as FileList).length} file(s) selected`\n : (value as File)?.name}\n </div>\n )}\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues, Control, Path } from 'react-hook-form'\n\nexport interface FormDatePickerProps<TFieldValues extends FieldValues = FieldValues> {\n name: Path<TFieldValues>\n label: string\n placeholder?: string\n required?: boolean\n helpText?: string\n disabled?: boolean\n className?: string\n control: Control<TFieldValues>\n min?: string\n max?: string\n mode?: 'single' | 'range'\n}\n\n/**\n * Smart Form Date Picker component\n *\n * @example\n * ```tsx\n * <FormDatePicker\n * name=\"birthDate\"\n * label=\"Birth Date\"\n * control={form.control}\n * max={new Date().toISOString().split('T')[0]}\n * />\n * ```\n */\nexport function FormDatePicker<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n placeholder,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n min,\n max,\n mode = 'single',\n}: FormDatePickerProps<TFieldValues>) {\n if (mode === 'range') {\n return (\n <FormDateRangePicker\n name={name}\n label={label}\n required={required}\n helpText={helpText}\n disabled={disabled}\n className={className}\n control={control}\n min={min}\n max={max}\n />\n )\n }\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <label\n htmlFor={String(name)}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <input\n id={String(name)}\n type=\"date\"\n placeholder={placeholder}\n disabled={disabled}\n min={min}\n max={max}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n {...field}\n value={field.value || ''}\n />\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n\n/**\n * Form Date Range Picker component\n */\nfunction FormDateRangePicker<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n min,\n max,\n}: Omit<FormDatePickerProps<TFieldValues>, 'mode' | 'placeholder'>) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => {\n const range = (field.value as { from?: string; to?: string }) || {}\n\n const handleFromChange = (value: string) => {\n field.onChange({ ...range, from: value })\n }\n\n const handleToChange = (value: string) => {\n field.onChange({ ...range, to: value })\n }\n\n return (\n <div className={`space-y-2 ${className || ''}`}>\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <div className=\"grid grid-cols-2 gap-2\">\n <div>\n <label htmlFor={`${String(name)}-from`} className=\"text-xs text-muted-foreground\">\n From\n </label>\n <input\n id={`${String(name)}-from`}\n type=\"date\"\n disabled={disabled}\n min={min}\n max={range.to || max}\n value={range.from || ''}\n onChange={(e) => handleFromChange(e.target.value)}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n />\n </div>\n\n <div>\n <label htmlFor={`${String(name)}-to`} className=\"text-xs text-muted-foreground\">\n To\n </label>\n <input\n id={`${String(name)}-to`}\n type=\"date\"\n disabled={disabled}\n min={range.from || min}\n max={max}\n value={range.to || ''}\n onChange={(e) => handleToChange(e.target.value)}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n />\n </div>\n </div>\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )\n }}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues, Control, Path } from 'react-hook-form'\n\nexport interface MultiSelectOption {\n value: string | number\n label: string\n disabled?: boolean\n}\n\nexport interface FormMultiSelectProps<TFieldValues extends FieldValues = FieldValues> {\n name: Path<TFieldValues>\n label: string\n options: MultiSelectOption[]\n required?: boolean\n helpText?: string\n disabled?: boolean\n className?: string\n control: Control<TFieldValues>\n layout?: 'vertical' | 'horizontal' | 'grid'\n maxSelection?: number\n}\n\n/**\n * Smart Form Multi-Select component\n *\n * @example\n * ```tsx\n * <FormMultiSelect\n * name=\"interests\"\n * label=\"Interests\"\n * control={form.control}\n * options={[\n * { value: 'sports', label: 'Sports' },\n * { value: 'music', label: 'Music' },\n * { value: 'tech', label: 'Technology' },\n * ]}\n * layout=\"grid\"\n * />\n * ```\n */\nexport function FormMultiSelect<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n options,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n layout = 'vertical',\n maxSelection,\n}: FormMultiSelectProps<TFieldValues>) {\n const layoutClasses = {\n vertical: 'flex flex-col space-y-2',\n horizontal: 'flex flex-wrap gap-4',\n grid: 'grid grid-cols-2 sm:grid-cols-3 gap-2',\n }\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => {\n const selectedValues = (field.value as Array<string | number>) || []\n\n const handleToggle = (optionValue: string | number) => {\n const newValues = selectedValues.includes(optionValue)\n ? selectedValues.filter((v) => v !== optionValue)\n : maxSelection && selectedValues.length >= maxSelection\n ? selectedValues\n : [...selectedValues, optionValue]\n\n field.onChange(newValues)\n }\n\n const isSelected = (optionValue: string | number) =>\n selectedValues.includes(optionValue)\n\n const isMaxReached = maxSelection !== undefined && selectedValues.length >= maxSelection\n\n return (\n <div className={`space-y-3 ${className || ''}`}>\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n {maxSelection && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n ({selectedValues.length}/{maxSelection})\n </span>\n )}\n </label>\n\n <div className={layoutClasses[layout]}>\n {options.map((option) => {\n const id = `${String(name)}-${option.value}`\n const isOptionDisabled =\n disabled ||\n option.disabled ||\n (isMaxReached && !isSelected(option.value))\n\n return (\n <label\n key={String(option.value)}\n htmlFor={id}\n className={`flex items-center space-x-2 cursor-pointer ${\n isOptionDisabled ? 'opacity-50 cursor-not-allowed' : ''\n }`}\n >\n <input\n id={id}\n type=\"checkbox\"\n checked={isSelected(option.value)}\n disabled={isOptionDisabled}\n onChange={() => handleToggle(option.value)}\n className=\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <span className=\"text-sm\">{option.label}</span>\n </label>\n )\n })}\n </div>\n\n {maxSelection && isMaxReached && (\n <p className=\"text-xs text-muted-foreground\">\n Maximum {maxSelection} {maxSelection === 1 ? 'item' : 'items'} can be selected\n </p>\n )}\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )\n }}\n />\n )\n}\n","import * as React from 'react'\n\nexport interface FormLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Number of columns for the form layout\n * @default 1\n */\n columns?: 1 | 2 | 3 | 4\n\n /**\n * Spacing between form fields\n * @default \"md\"\n */\n spacing?: 'sm' | 'md' | 'lg'\n\n /**\n * Make the layout responsive (mobile: 1 col, tablet: 2 cols, desktop: specified cols)\n * @default true\n */\n responsive?: boolean\n}\n\nconst spacingClasses = {\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst columnClasses = {\n responsive: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n },\n fixed: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n },\n}\n\n/**\n * FormLayout - Ready-to-use form grid layout\n *\n * @example\n * ```tsx\n * <FormLayout columns={2}>\n * <FormField name=\"firstName\" label=\"First Name\" control={form.control} />\n * <FormField name=\"lastName\" label=\"Last Name\" control={form.control} />\n * </FormLayout>\n * ```\n */\nexport function FormLayout({\n columns = 1,\n spacing = 'md',\n responsive = true,\n className = '',\n children,\n ...props\n}: FormLayoutProps) {\n const gridClasses = responsive ? columnClasses.responsive[columns] : columnClasses.fixed[columns]\n\n return (\n <div\n className={`grid ${gridClasses} ${spacingClasses[spacing]} ${className}`}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nFormLayout.displayName = 'FormLayout'\n","import * as React from 'react'\n\nexport interface FormSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Section title\n */\n title?: string\n\n /**\n * Section description\n */\n description?: string\n\n /**\n * Number of columns for this section\n * @default 1\n */\n columns?: 1 | 2 | 3 | 4\n\n /**\n * Spacing between fields\n * @default \"md\"\n */\n spacing?: 'sm' | 'md' | 'lg'\n}\n\nconst spacingClasses = {\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst columnClasses = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n}\n\n/**\n * FormSection - Section with title and grid layout\n *\n * @example\n * ```tsx\n * <FormSection title=\"Personal Info\" description=\"Enter your details\" columns={2}>\n * <FormField name=\"name\" label=\"Name\" control={form.control} />\n * <FormField name=\"email\" label=\"Email\" control={form.control} />\n * </FormSection>\n * ```\n */\nexport function FormSection({\n title,\n description,\n columns = 1,\n spacing = 'md',\n className = '',\n children,\n ...props\n}: FormSectionProps) {\n return (\n <div className={`space-y-4 ${className}`} {...props}>\n {(title || description) && (\n <div className=\"space-y-1\">\n {title && (\n <h3 className=\"text-lg font-semibold leading-none tracking-tight\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n <div className={`grid ${columnClasses[columns]} ${spacingClasses[spacing]}`}>\n {children}\n </div>\n </div>\n )\n}\n\nFormSection.displayName = 'FormSection'\n","import * as React from 'react'\n\nexport interface FormGridProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Spacing between items\n * @default \"md\"\n */\n spacing?: 'sm' | 'md' | 'lg'\n}\n\nexport interface FormGridItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Column span for the item\n * @default 1\n */\n colSpan?: 1 | 2 | 3 | 4 | 'full'\n}\n\nconst spacingClasses = {\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst colSpanClasses = {\n 1: 'col-span-1',\n 2: 'col-span-1 sm:col-span-2',\n 3: 'col-span-1 sm:col-span-2 lg:col-span-3',\n 4: 'col-span-1 sm:col-span-2 lg:col-span-4',\n full: 'col-span-full',\n}\n\n/**\n * FormGrid - Advanced grid layout with col-span support\n *\n * @example\n * ```tsx\n * <FormGrid>\n * <FormGridItem>\n * <FormField name=\"firstName\" label=\"First Name\" control={form.control} />\n * </FormGridItem>\n * <FormGridItem>\n * <FormField name=\"lastName\" label=\"Last Name\" control={form.control} />\n * </FormGridItem>\n * <FormGridItem colSpan=\"full\">\n * <FormField name=\"bio\" label=\"Bio\" control={form.control} />\n * </FormGridItem>\n * </FormGrid>\n * ```\n */\nexport function FormGrid({\n spacing = 'md',\n className = '',\n children,\n ...props\n}: FormGridProps) {\n return (\n <div\n className={`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 ${spacingClasses[spacing]} ${className}`}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nFormGrid.displayName = 'FormGrid'\n\n/**\n * FormGridItem - Item within FormGrid with custom column span\n */\nexport function FormGridItem({\n colSpan = 1,\n className = '',\n children,\n ...props\n}: FormGridItemProps) {\n return (\n <div className={`${colSpanClasses[colSpan]} ${className}`} {...props}>\n {children}\n </div>\n )\n}\n\nFormGridItem.displayName = 'FormGridItem'\n","/**\n * Form Wizard Component\n *\n * Multi-step form with navigation and validation.\n */\n\nimport * as React from 'react'\n\nexport interface FormWizardStep {\n title: string\n description?: string\n content: React.ReactNode\n onValidate?: () => boolean | Promise<boolean>\n}\n\nexport interface FormWizardProps {\n steps: FormWizardStep[]\n onComplete: () => void | Promise<void>\n onCancel?: () => void\n className?: string\n showStepNumbers?: boolean\n}\n\n/**\n * Form Wizard component for multi-step forms\n *\n * @example\n * ```tsx\n * <FormWizard\n * steps={[\n * {\n * title: 'Personal Info',\n * content: <PersonalInfoForm />,\n * onValidate: () => form.trigger(['name', 'email']),\n * },\n * {\n * title: 'Address',\n * content: <AddressForm />,\n * },\n * ]}\n * onComplete={() => form.handleSubmit(onSubmit)()}\n * />\n * ```\n */\nexport function FormWizard({\n steps,\n onComplete,\n onCancel,\n className,\n showStepNumbers = true,\n}: FormWizardProps) {\n const [currentStep, setCurrentStep] = React.useState(0)\n const [isValidating, setIsValidating] = React.useState(false)\n const [isCompleting, setIsCompleting] = React.useState(false)\n\n const isFirstStep = currentStep === 0\n const isLastStep = currentStep === steps.length - 1\n\n const handleNext = async () => {\n const step = steps[currentStep]\n\n if (step.onValidate) {\n setIsValidating(true)\n try {\n const isValid = await step.onValidate()\n if (!isValid) {\n setIsValidating(false)\n return\n }\n } catch (error) {\n console.error('Validation error:', error)\n setIsValidating(false)\n return\n }\n setIsValidating(false)\n }\n\n if (isLastStep) {\n setIsCompleting(true)\n try {\n await onComplete()\n } finally {\n setIsCompleting(false)\n }\n } else {\n setCurrentStep((prev) => prev + 1)\n }\n }\n\n const handleBack = () => {\n if (!isFirstStep) {\n setCurrentStep((prev) => prev - 1)\n }\n }\n\n const handleStepClick = (stepIndex: number) => {\n // Only allow going back to previous steps\n if (stepIndex < currentStep) {\n setCurrentStep(stepIndex)\n }\n }\n\n return (\n <div className={`space-y-8 ${className || ''}`}>\n {/* Stepper */}\n <nav aria-label=\"Progress\">\n <ol className=\"flex items-center justify-between\">\n {steps.map((step, index) => {\n const isActive = index === currentStep\n const isCompleted = index < currentStep\n const isClickable = index < currentStep\n\n return (\n <li\n key={index}\n className={`flex items-center ${\n index !== steps.length - 1 ? 'flex-1' : ''\n }`}\n >\n <button\n type=\"button\"\n onClick={() => isClickable && handleStepClick(index)}\n disabled={!isClickable}\n className={`flex items-center space-x-3 ${\n isClickable ? 'cursor-pointer' : 'cursor-default'\n }`}\n >\n <div\n className={`flex h-10 w-10 items-center justify-center rounded-full border-2 transition-colors ${\n isActive\n ? 'border-primary bg-primary text-primary-foreground'\n : isCompleted\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-muted-foreground text-muted-foreground'\n }`}\n >\n {isCompleted ? (\n <svg\n className=\"h-5 w-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : showStepNumbers ? (\n <span>{index + 1}</span>\n ) : null}\n </div>\n <div className=\"hidden sm:block text-left\">\n <p\n className={`text-sm font-medium ${\n isActive ? 'text-foreground' : 'text-muted-foreground'\n }`}\n >\n {step.title}\n </p>\n {step.description && (\n <p className=\"text-xs text-muted-foreground\">\n {step.description}\n </p>\n )}\n </div>\n </button>\n\n {index !== steps.length - 1 && (\n <div\n className={`mx-2 h-0.5 flex-1 transition-colors ${\n isCompleted ? 'bg-primary' : 'bg-muted'\n }`}\n />\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n\n {/* Step Content */}\n <div className=\"mt-8\">{steps[currentStep].content}</div>\n\n {/* Navigation */}\n <div className=\"flex justify-between pt-6 border-t\">\n <div>\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2\"\n >\n Cancel\n </button>\n )}\n </div>\n\n <div className=\"flex space-x-2\">\n {!isFirstStep && (\n <button\n type=\"button\"\n onClick={handleBack}\n disabled={isValidating || isCompleting}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2\"\n >\n Back\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={handleNext}\n disabled={isValidating || isCompleting}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\n >\n {isValidating || isCompleting\n ? 'Loading...'\n : isLastStep\n ? 'Complete'\n : 'Next'}\n </button>\n </div>\n </div>\n </div>\n )\n}\n","import { useFieldArray as rhfUseFieldArray } from 'react-hook-form'\nimport type { FieldValues, ArrayPath } from 'react-hook-form'\nimport type { UseFormReturn } from 'react-hook-form'\n\n/**\n * Field array options\n */\nexport interface FieldArrayOptions<TFieldValues extends FieldValues = FieldValues> {\n /**\n * Field array name\n */\n name: ArrayPath<TFieldValues>\n\n /**\n * Form control instance\n */\n control: UseFormReturn<TFieldValues>['control']\n\n /**\n * Default value for new items\n */\n defaultValue?: unknown\n}\n\n/**\n * Wrapper around React Hook Form's useFieldArray with smart defaults\n *\n * @example\n * ```tsx\n * const { fields, append, remove } = useSmartFieldArray({\n * name: 'items',\n * control: form.control,\n * defaultValue: { name: '', quantity: 0 }\n * })\n * ```\n */\nexport function useSmartFieldArray<TFieldValues extends FieldValues = FieldValues>({\n name,\n control,\n defaultValue,\n}: FieldArrayOptions<TFieldValues>) {\n const fieldArray = rhfUseFieldArray({\n name,\n control,\n })\n\n const { append: rhfAppend, ...rest } = fieldArray\n\n // Enhanced append with default value\n const append = (value?: unknown) => {\n rhfAppend((value || defaultValue) as never)\n }\n\n return {\n ...rest,\n append,\n }\n}\n","/**\n * Common Validation Schemas\n *\n * Reusable Zod schemas for common validation patterns.\n */\n\nimport { z } from 'zod'\n\n/**\n * Email validation schema\n */\nexport const emailSchema = z\n .string()\n .min(1, 'Email is required')\n .email('Invalid email address')\n\n/**\n * Password validation schema\n * At least 8 characters, 1 uppercase, 1 lowercase, 1 number\n */\nexport const passwordSchema = z\n .string()\n .min(8, 'Password must be at least 8 characters')\n .regex(/[A-Z]/, 'Password must contain at least one uppercase letter')\n .regex(/[a-z]/, 'Password must contain at least one lowercase letter')\n .regex(/[0-9]/, 'Password must contain at least one number')\n\n/**\n * Strong password validation schema\n * At least 12 characters, 1 uppercase, 1 lowercase, 1 number, 1 special character\n */\nexport const strongPasswordSchema = z\n .string()\n .min(12, 'Password must be at least 12 characters')\n .regex(/[A-Z]/, 'Password must contain at least one uppercase letter')\n .regex(/[a-z]/, 'Password must contain at least one lowercase letter')\n .regex(/[0-9]/, 'Password must contain at least one number')\n .regex(/[^A-Za-z0-9]/, 'Password must contain at least one special character')\n\n/**\n * Phone number validation schema (international format)\n */\nexport const phoneSchema = z\n .string()\n .min(1, 'Phone number is required')\n .regex(/^\\+?[1-9]\\d{1,14}$/, 'Invalid phone number format')\n\n/**\n * URL validation schema\n */\nexport const urlSchema = z\n .string()\n .min(1, 'URL is required')\n .url('Invalid URL format')\n\n/**\n * Username validation schema\n * 3-20 characters, alphanumeric and underscores only\n */\nexport const usernameSchema = z\n .string()\n .min(3, 'Username must be at least 3 characters')\n .max(20, 'Username must be at most 20 characters')\n .regex(/^[a-zA-Z0-9_]+$/, 'Username can only contain letters, numbers, and underscores')\n\n/**\n * Slug validation schema\n * Lowercase letters, numbers, and hyphens only\n */\nexport const slugSchema = z\n .string()\n .min(1, 'Slug is required')\n .regex(/^[a-z0-9-]+$/, 'Slug can only contain lowercase letters, numbers, and hyphens')\n\n/**\n * Positive number schema\n */\nexport const positiveNumberSchema = z\n .number()\n .positive('Must be a positive number')\n\n/**\n * Positive integer schema\n */\nexport const positiveIntegerSchema = z\n .number()\n .int('Must be an integer')\n .positive('Must be a positive number')\n\n/**\n * Price schema (two decimal places)\n */\nexport const priceSchema = z\n .number()\n .nonnegative('Price cannot be negative')\n .multipleOf(0.01, 'Price can have at most 2 decimal places')\n\n/**\n * Percentage schema (0-100)\n */\nexport const percentageSchema = z\n .number()\n .min(0, 'Percentage must be at least 0')\n .max(100, 'Percentage cannot exceed 100')\n\n/**\n * Date string schema (ISO format)\n */\nexport const dateStringSchema = z\n .string()\n .min(1, 'Date is required')\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Date must be in YYYY-MM-DD format')\n\n/**\n * Future date schema\n */\nexport const futureDateSchema = z\n .string()\n .refine((date) => new Date(date) > new Date(), {\n message: 'Date must be in the future',\n })\n\n/**\n * Past date schema\n */\nexport const pastDateSchema = z\n .string()\n .refine((date) => new Date(date) < new Date(), {\n message: 'Date must be in the past',\n })\n\n/**\n * File size validation helper\n */\nexport const createFileSizeSchema = (maxSizeInBytes: number, message?: string) =>\n z.instanceof(File).refine((file) => file.size <= maxSizeInBytes, {\n message: message || `File size must be less than ${formatFileSize(maxSizeInBytes)}`,\n })\n\n/**\n * File type validation helper\n */\nexport const createFileTypeSchema = (allowedTypes: string[], message?: string) =>\n z.instanceof(File).refine((file) => allowedTypes.includes(file.type), {\n message: message || `File type must be one of: ${allowedTypes.join(', ')}`,\n })\n\n/**\n * Image file schema (common image types, max 5MB)\n */\nexport const imageFileSchema = z\n .instanceof(File)\n .refine((file) => file.size <= 5 * 1024 * 1024, {\n message: 'Image must be less than 5MB',\n })\n .refine(\n (file) => ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif'].includes(file.type),\n {\n message: 'File must be an image (JPEG, PNG, WebP, or GIF)',\n }\n )\n\n/**\n * Confirm password schema helper\n */\nexport const createConfirmPasswordSchema = (passwordField: string) =>\n z.object({\n [passwordField]: z.string(),\n confirmPassword: z.string(),\n }).refine((data) => data[passwordField] === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n })\n\n/**\n * Optional email schema (can be empty or valid email)\n */\nexport const optionalEmailSchema = z.union([\n z.string().length(0),\n emailSchema,\n])\n\n/**\n * Optional URL schema\n */\nexport const optionalUrlSchema = z.union([\n z.string().length(0),\n urlSchema,\n])\n\n// Helper function\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes'\n const k = 1024\n const sizes = ['Bytes', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i]\n}\n","/**\n * Validation Helper Utilities\n *\n * Helper functions for common validation patterns.\n */\n\nimport { z, type ZodTypeAny } from 'zod'\nimport type { FieldErrors } from 'react-hook-form'\n\n/**\n * Get error message from field errors\n */\nexport function getErrorMessage(\n errors: FieldErrors,\n fieldName: string\n): string | undefined {\n const fieldError = errors[fieldName]\n if (!fieldError) return undefined\n if (typeof fieldError.message === 'string') return fieldError.message\n return 'Invalid value'\n}\n\n/**\n * Check if field has error\n */\nexport function hasError(errors: FieldErrors, fieldName: string): boolean {\n return !!errors[fieldName]\n}\n\n/**\n * Get all error messages as array\n */\nexport function getAllErrors(errors: FieldErrors): string[] {\n const messages: string[] = []\n\n Object.keys(errors).forEach((key) => {\n const error = errors[key]\n if (error && typeof error.message === 'string') {\n messages.push(error.message)\n }\n })\n\n return messages\n}\n\n/**\n * Create a conditional schema based on another field\n *\n * @example\n * ```ts\n * const schema = z.object({\n * type: z.enum(['individual', 'company']),\n * companyName: conditionalSchema(\n * 'type',\n * (type) => type === 'company',\n * z.string().min(1, 'Company name is required')\n * ),\n * })\n * ```\n */\nexport function conditionalSchema<T extends ZodTypeAny>(\n _dependentField: string,\n _condition: (value: any) => boolean,\n schema: T\n): ZodTypeAny {\n return z.any().superRefine((value, ctx) => {\n const parent = ctx.path[ctx.path.length - 2]\n if (!parent) return\n\n // This is a simplified version - in real use, you'd access the form data\n // through the validation context\n return schema.parse(value)\n })\n}\n\n/**\n * Create min/max length message\n */\nexport function lengthMessage(\n field: string,\n min?: number,\n max?: number\n): string {\n if (min && max) {\n return `${field} must be between ${min} and ${max} characters`\n }\n if (min) {\n return `${field} must be at least ${min} characters`\n }\n if (max) {\n return `${field} must be at most ${max} characters`\n }\n return `Invalid ${field.toLowerCase()}`\n}\n\n/**\n * Create required field message\n */\nexport function requiredMessage(field: string): string {\n return `${field} is required`\n}\n\n/**\n * Create invalid format message\n */\nexport function invalidFormatMessage(field: string): string {\n return `Invalid ${field.toLowerCase()} format`\n}\n\n/**\n * Validate credit card using Luhn algorithm\n */\nexport function validateCreditCard(cardNumber: string): boolean {\n const sanitized = cardNumber.replace(/\\s/g, '')\n if (!/^\\d+$/.test(sanitized)) return false\n\n let sum = 0\n let isEven = false\n\n for (let i = sanitized.length - 1; i >= 0; i--) {\n let digit = parseInt(sanitized[i], 10)\n\n if (isEven) {\n digit *= 2\n if (digit > 9) {\n digit -= 9\n }\n }\n\n sum += digit\n isEven = !isEven\n }\n\n return sum % 10 === 0\n}\n\n/**\n * Validate IBAN (International Bank Account Number)\n */\nexport function validateIBAN(iban: string): boolean {\n const sanitized = iban.replace(/\\s/g, '').toUpperCase()\n if (!/^[A-Z]{2}\\d{2}[A-Z0-9]+$/.test(sanitized)) return false\n if (sanitized.length < 15 || sanitized.length > 34) return false\n\n const rearranged = sanitized.slice(4) + sanitized.slice(0, 4)\n const numeric = rearranged.replace(/[A-Z]/g, (char) =>\n String(char.charCodeAt(0) - 55)\n )\n\n let remainder = numeric\n while (remainder.length > 2) {\n const block = remainder.slice(0, 9)\n remainder = (parseInt(block, 10) % 97) + remainder.slice(block.length)\n }\n\n return parseInt(remainder, 10) % 97 === 1\n}\n\n/**\n * Validate strong password requirements\n */\nexport function validatePasswordStrength(password: string): {\n isStrong: boolean\n missingRequirements: string[]\n} {\n const requirements = []\n\n if (password.length < 12) {\n requirements.push('At least 12 characters')\n }\n if (!/[A-Z]/.test(password)) {\n requirements.push('One uppercase letter')\n }\n if (!/[a-z]/.test(password)) {\n requirements.push('One lowercase letter')\n }\n if (!/[0-9]/.test(password)) {\n requirements.push('One number')\n }\n if (!/[^A-Za-z0-9]/.test(password)) {\n requirements.push('One special character')\n }\n\n return {\n isStrong: requirements.length === 0,\n missingRequirements: requirements,\n }\n}\n\n/**\n * Sanitize string input (remove HTML, trim, normalize whitespace)\n */\nexport function sanitizeString(input: string): string {\n return input\n .replace(/<[^>]*>/g, '') // Remove HTML tags\n .replace(/\\s+/g, ' ') // Normalize whitespace\n .trim()\n}\n\n/**\n * Validate file extension\n */\nexport function validateFileExtension(\n filename: string,\n allowedExtensions: string[]\n): boolean {\n const extension = filename.split('.').pop()?.toLowerCase()\n return extension ? allowedExtensions.includes(extension) : false\n}\n\n/**\n * Format validation error for display\n */\nexport function formatValidationError(error: z.ZodError): Record<string, string> {\n const formatted: Record<string, string> = {}\n\n error.errors.forEach((err) => {\n const path = err.path.join('.')\n formatted[path] = err.message\n })\n\n return formatted\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/use-smart-form.ts","../src/form-field.tsx","../src/form-select.tsx","../src/form-checkbox.tsx","../src/form-textarea.tsx","../src/form-file-upload.tsx","../src/form-date-picker.tsx","../src/form-multi-select.tsx","../src/components/FormRadioGroup.tsx","../src/components/FormSwitch.tsx","../src/components/FormTagInput.tsx","../src/components/FormErrorSummary.tsx","../src/form-layout.tsx","../src/form-section.tsx","../src/form-grid.tsx","../src/form-wizard.tsx","../src/use-field-array.ts","../src/hooks/useUnsavedChanges.ts","../src/validation-schemas.ts","../src/validation-helpers.ts"],"names":["errors","jsx","Controller","jsxs","React","formatFileSize","useFormContext","React2","React3","spacingClasses","columnClasses","rhfUseFieldArray","React5","z"],"mappings":"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","file":"index.js","sourcesContent":["import { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { FieldValues, Path, DefaultValues } from 'react-hook-form'\nimport type { z } from 'zod'\n\nexport interface SmartFormOptions<TFieldValues extends FieldValues = FieldValues> {\n schema: z.ZodSchema<TFieldValues>\n onSubmit: (data: TFieldValues) => void | Promise<void>\n onError?: (errors: Record<string, unknown>) => void\n realtimeValidation?: boolean\n defaultValues?: DefaultValues<TFieldValues>\n mode?: 'onSubmit' | 'onBlur' | 'onChange' | 'onTouched' | 'all'\n}\n\n/**\n * Enhanced React Hook Form with Zod validation and smart defaults\n */\nexport function useSmartForm<TFieldValues extends FieldValues = FieldValues>(\n options: SmartFormOptions<TFieldValues>\n) {\n const { schema, onSubmit, onError, realtimeValidation = true, ...formOptions } = options\n\n const form = useForm<TFieldValues>({\n resolver: zodResolver(schema),\n mode: realtimeValidation ? 'onChange' : (formOptions.mode || 'onSubmit'),\n ...formOptions,\n })\n\n const {\n handleSubmit: rhfHandleSubmit,\n formState: { isSubmitting, errors },\n } = form\n\n const hasErrors = Object.keys(errors).length > 0\n\n const getError = (name: Path<TFieldValues>): string | undefined => {\n const error = errors[name]\n return error?.message as string | undefined\n }\n\n const handleSubmit = rhfHandleSubmit(\n async (data) => {\n try {\n await onSubmit(data)\n } catch (error) {\n if (onError) {\n onError(error as Record<string, unknown>)\n } else {\n console.error('Form submission error:', error)\n }\n }\n },\n (errors) => {\n if (onError) {\n onError(errors)\n }\n }\n )\n\n return {\n ...form,\n handleSubmit,\n isSubmitting,\n hasErrors,\n getError,\n }\n}\n\nexport type SmartFormReturn<TFieldValues extends FieldValues = FieldValues> = ReturnType<typeof useSmartForm<TFieldValues>>\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues } from 'react-hook-form'\nimport type { FormFieldProps } from './form-types'\n\n/**\n * Smart Form Field component with automatic error handling\n *\n * @example\n * ```tsx\n * <FormField\n * name=\"email\"\n * label=\"Email\"\n * type=\"email\"\n * required\n * control={form.control}\n * placeholder=\"Enter your email\"\n * />\n * ```\n */\nexport function FormField<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n type = 'text',\n placeholder,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n render,\n}: FormFieldProps<TFieldValues>) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <label htmlFor={String(name)} className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n {render ? (\n render(field)\n ) : (\n <input\n id={String(name)}\n type={type}\n placeholder={placeholder}\n disabled={disabled}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n {...field}\n value={field.value || ''}\n />\n )}\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues } from 'react-hook-form'\nimport type { FormSelectProps } from './form-types'\n\n/**\n * Smart Form Select component\n *\n * @example\n * ```tsx\n * <FormSelect\n * name=\"country\"\n * label=\"Country\"\n * required\n * control={form.control}\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * />\n * ```\n */\nexport function FormSelect<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n options,\n placeholder,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n}: FormSelectProps<TFieldValues>) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <label htmlFor={String(name)} className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <select\n id={String(name)}\n disabled={disabled}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n {...field}\n value={field.value || ''}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={String(option.value)}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues } from 'react-hook-form'\nimport type { FormCheckboxProps } from './form-types'\n\n/**\n * Smart Form Checkbox component\n *\n * @example\n * ```tsx\n * <FormCheckbox\n * name=\"acceptTerms\"\n * label=\"I accept the terms and conditions\"\n * required\n * control={form.control}\n * description=\"You must accept the terms to continue\"\n * />\n * ```\n */\nexport function FormCheckbox<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n description,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n}: FormCheckboxProps<TFieldValues>) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <div className=\"flex items-start space-x-3\">\n <input\n id={String(name)}\n type=\"checkbox\"\n disabled={disabled}\n className={`h-4 w-4 rounded border-input ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n checked={field.value || false}\n onChange={(e) => field.onChange(e.target.checked)}\n onBlur={field.onBlur}\n />\n <div className=\"flex-1 space-y-1 leading-none\">\n <label\n htmlFor={String(name)}\n className=\"text-sm font-medium cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n </div>\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues, Control, Path } from 'react-hook-form'\n\nexport interface FormTextareaProps<TFieldValues extends FieldValues = FieldValues> {\n name: Path<TFieldValues>\n label: string\n placeholder?: string\n required?: boolean\n helpText?: string\n disabled?: boolean\n className?: string\n control: Control<TFieldValues>\n rows?: number\n maxLength?: number\n showCharacterCount?: boolean\n resize?: 'none' | 'vertical' | 'horizontal' | 'both'\n}\n\n/**\n * Smart Form Textarea component with character counter\n *\n * @example\n * ```tsx\n * <FormTextarea\n * name=\"description\"\n * label=\"Description\"\n * control={form.control}\n * rows={4}\n * maxLength={500}\n * showCharacterCount\n * />\n * ```\n */\nexport function FormTextarea<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n placeholder,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n rows = 4,\n maxLength,\n showCharacterCount = false,\n resize = 'vertical',\n}: FormTextareaProps<TFieldValues>) {\n const resizeClass = {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n }[resize]\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => {\n const currentLength = (field.value as string)?.length || 0\n const showCount = showCharacterCount || maxLength\n\n return (\n <div className={`space-y-2 ${className || ''}`}>\n <label\n htmlFor={String(name)}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <textarea\n id={String(name)}\n placeholder={placeholder}\n disabled={disabled}\n rows={rows}\n maxLength={maxLength}\n className={`flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${resizeClass} ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n {...field}\n value={field.value || ''}\n />\n\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1\">\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n\n {showCount && (\n <p className=\"text-xs text-muted-foreground\">\n {currentLength}\n {maxLength && ` / ${maxLength}`}\n </p>\n )}\n </div>\n </div>\n )\n }}\n />\n )\n}\n","import * as React from 'react'\nimport { Controller } from 'react-hook-form'\nimport type { FieldValues, Control, Path } from 'react-hook-form'\n\nexport interface FormFileUploadProps<TFieldValues extends FieldValues = FieldValues> {\n name: Path<TFieldValues>\n label: string\n required?: boolean\n helpText?: string\n disabled?: boolean\n className?: string\n control: Control<TFieldValues>\n accept?: string\n multiple?: boolean\n maxSize?: number // in bytes\n showPreview?: boolean\n onFileChange?: (files: FileList | null) => void\n}\n\n/**\n * Smart Form File Upload component with preview\n *\n * @example\n * ```tsx\n * <FormFileUpload\n * name=\"avatar\"\n * label=\"Profile Picture\"\n * control={form.control}\n * accept=\"image/*\"\n * maxSize={5 * 1024 * 1024} // 5MB\n * showPreview\n * />\n * ```\n */\nexport function FormFileUpload<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n accept,\n multiple = false,\n maxSize,\n showPreview = true,\n onFileChange,\n}: FormFileUploadProps<TFieldValues>) {\n const [previews, setPreviews] = React.useState<string[]>([])\n\n const handleFileChange = (\n files: FileList | null,\n onChange: (value: any) => void\n ) => {\n if (!files || files.length === 0) {\n setPreviews([])\n onChange(null)\n onFileChange?.(null)\n return\n }\n\n // Validate file size\n if (maxSize) {\n const invalidFiles = Array.from(files).filter((file) => file.size > maxSize)\n if (invalidFiles.length > 0) {\n alert(`Some files exceed the maximum size of ${formatFileSize(maxSize)}`)\n return\n }\n }\n\n // Generate previews for images\n if (showPreview && accept?.includes('image')) {\n const fileArray = Array.from(files)\n const newPreviews: string[] = []\n\n fileArray.forEach((file) => {\n const reader = new FileReader()\n reader.onloadend = () => {\n newPreviews.push(reader.result as string)\n if (newPreviews.length === fileArray.length) {\n setPreviews(newPreviews)\n }\n }\n reader.readAsDataURL(file)\n })\n }\n\n onChange(multiple ? files : files[0])\n onFileChange?.(files)\n }\n\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes'\n const k = 1024\n const sizes = ['Bytes', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i]\n }\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ...field }, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <label\n htmlFor={String(name)}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <div\n className={`flex items-center justify-center w-full ${\n error ? 'border-destructive' : ''\n }`}\n >\n <label\n htmlFor={String(name)}\n className=\"flex flex-col items-center justify-center w-full h-32 border-2 border-dashed rounded-lg cursor-pointer bg-background hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex flex-col items-center justify-center pt-5 pb-6\">\n <svg\n className=\"w-8 h-8 mb-4 text-muted-foreground\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 20 16\"\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2\"\n />\n </svg>\n <p className=\"mb-2 text-sm text-muted-foreground\">\n <span className=\"font-semibold\">Click to upload</span> or drag and drop\n </p>\n {accept && (\n <p className=\"text-xs text-muted-foreground\">\n {accept.split(',').join(', ')}\n </p>\n )}\n {maxSize && (\n <p className=\"text-xs text-muted-foreground\">\n Max size: {formatFileSize(maxSize)}\n </p>\n )}\n </div>\n <input\n id={String(name)}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"hidden\"\n onChange={(e) => handleFileChange(e.target.files, onChange)}\n {...field}\n />\n </label>\n </div>\n\n {/* File Preview */}\n {showPreview && previews.length > 0 && (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4 mt-4\">\n {previews.map((preview, index) => (\n <div key={index} className=\"relative group\">\n <img\n src={preview}\n alt={`Preview ${index + 1}`}\n className=\"w-full h-24 object-cover rounded-md border\"\n />\n <button\n type=\"button\"\n onClick={() => {\n const newPreviews = previews.filter((_, i) => i !== index)\n setPreviews(newPreviews)\n if (newPreviews.length === 0) {\n onChange(null)\n }\n }}\n className=\"absolute top-1 right-1 bg-destructive text-destructive-foreground rounded-full p-1 opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* File Info */}\n {value && !showPreview && (\n <div className=\"text-sm text-muted-foreground\">\n {multiple && (value as FileList).length > 0\n ? `${(value as FileList).length} file(s) selected`\n : (value as File)?.name}\n </div>\n )}\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues, Control, Path } from 'react-hook-form'\n\nexport interface FormDatePickerProps<TFieldValues extends FieldValues = FieldValues> {\n name: Path<TFieldValues>\n label: string\n placeholder?: string\n required?: boolean\n helpText?: string\n disabled?: boolean\n className?: string\n control: Control<TFieldValues>\n min?: string\n max?: string\n mode?: 'single' | 'range'\n}\n\n/**\n * Smart Form Date Picker component\n *\n * @example\n * ```tsx\n * <FormDatePicker\n * name=\"birthDate\"\n * label=\"Birth Date\"\n * control={form.control}\n * max={new Date().toISOString().split('T')[0]}\n * />\n * ```\n */\nexport function FormDatePicker<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n placeholder,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n min,\n max,\n mode = 'single',\n}: FormDatePickerProps<TFieldValues>) {\n if (mode === 'range') {\n return (\n <FormDateRangePicker\n name={name}\n label={label}\n required={required}\n helpText={helpText}\n disabled={disabled}\n className={className}\n control={control}\n min={min}\n max={max}\n />\n )\n }\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => (\n <div className={`space-y-2 ${className || ''}`}>\n <label\n htmlFor={String(name)}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <input\n id={String(name)}\n type=\"date\"\n placeholder={placeholder}\n disabled={disabled}\n min={min}\n max={max}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n aria-invalid={!!error}\n {...field}\n value={field.value || ''}\n />\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )}\n />\n )\n}\n\n/**\n * Form Date Range Picker component\n */\nfunction FormDateRangePicker<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n min,\n max,\n}: Omit<FormDatePickerProps<TFieldValues>, 'mode' | 'placeholder'>) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => {\n const range = (field.value as { from?: string; to?: string }) || {}\n\n const handleFromChange = (value: string) => {\n field.onChange({ ...range, from: value })\n }\n\n const handleToChange = (value: string) => {\n field.onChange({ ...range, to: value })\n }\n\n return (\n <div className={`space-y-2 ${className || ''}`}>\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </label>\n\n <div className=\"grid grid-cols-2 gap-2\">\n <div>\n <label htmlFor={`${String(name)}-from`} className=\"text-xs text-muted-foreground\">\n From\n </label>\n <input\n id={`${String(name)}-from`}\n type=\"date\"\n disabled={disabled}\n min={min}\n max={range.to || max}\n value={range.from || ''}\n onChange={(e) => handleFromChange(e.target.value)}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n />\n </div>\n\n <div>\n <label htmlFor={`${String(name)}-to`} className=\"text-xs text-muted-foreground\">\n To\n </label>\n <input\n id={`${String(name)}-to`}\n type=\"date\"\n disabled={disabled}\n min={range.from || min}\n max={max}\n value={range.to || ''}\n onChange={(e) => handleToChange(e.target.value)}\n className={`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error ? 'border-destructive' : ''\n }`}\n />\n </div>\n </div>\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )\n }}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { FieldValues, Control, Path } from 'react-hook-form'\n\nexport interface MultiSelectOption {\n value: string | number\n label: string\n disabled?: boolean\n}\n\nexport interface FormMultiSelectProps<TFieldValues extends FieldValues = FieldValues> {\n name: Path<TFieldValues>\n label: string\n options: MultiSelectOption[]\n required?: boolean\n helpText?: string\n disabled?: boolean\n className?: string\n control: Control<TFieldValues>\n layout?: 'vertical' | 'horizontal' | 'grid'\n maxSelection?: number\n}\n\n/**\n * Smart Form Multi-Select component\n *\n * @example\n * ```tsx\n * <FormMultiSelect\n * name=\"interests\"\n * label=\"Interests\"\n * control={form.control}\n * options={[\n * { value: 'sports', label: 'Sports' },\n * { value: 'music', label: 'Music' },\n * { value: 'tech', label: 'Technology' },\n * ]}\n * layout=\"grid\"\n * />\n * ```\n */\nexport function FormMultiSelect<TFieldValues extends FieldValues = FieldValues>({\n name,\n label,\n options,\n required = false,\n helpText,\n disabled = false,\n className,\n control,\n layout = 'vertical',\n maxSelection,\n}: FormMultiSelectProps<TFieldValues>) {\n const layoutClasses = {\n vertical: 'flex flex-col space-y-2',\n horizontal: 'flex flex-wrap gap-4',\n grid: 'grid grid-cols-2 sm:grid-cols-3 gap-2',\n }\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState: { error } }) => {\n const selectedValues = (field.value as Array<string | number>) || []\n\n const handleToggle = (optionValue: string | number) => {\n const newValues = selectedValues.includes(optionValue)\n ? selectedValues.filter((v) => v !== optionValue)\n : maxSelection && selectedValues.length >= maxSelection\n ? selectedValues\n : [...selectedValues, optionValue]\n\n field.onChange(newValues)\n }\n\n const isSelected = (optionValue: string | number) =>\n selectedValues.includes(optionValue)\n\n const isMaxReached = maxSelection !== undefined && selectedValues.length >= maxSelection\n\n return (\n <div className={`space-y-3 ${className || ''}`}>\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n {maxSelection && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n ({selectedValues.length}/{maxSelection})\n </span>\n )}\n </label>\n\n <div className={layoutClasses[layout]}>\n {options.map((option) => {\n const id = `${String(name)}-${option.value}`\n const isOptionDisabled =\n disabled ||\n option.disabled ||\n (isMaxReached && !isSelected(option.value))\n\n return (\n <label\n key={String(option.value)}\n htmlFor={id}\n className={`flex items-center space-x-2 cursor-pointer ${\n isOptionDisabled ? 'opacity-50 cursor-not-allowed' : ''\n }`}\n >\n <input\n id={id}\n type=\"checkbox\"\n checked={isSelected(option.value)}\n disabled={isOptionDisabled}\n onChange={() => handleToggle(option.value)}\n className=\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <span className=\"text-sm\">{option.label}</span>\n </label>\n )\n })}\n </div>\n\n {maxSelection && isMaxReached && (\n <p className=\"text-xs text-muted-foreground\">\n Maximum {maxSelection} {maxSelection === 1 ? 'item' : 'items'} can be selected\n </p>\n )}\n\n {error && (\n <p className=\"text-sm text-destructive\">{error.message}</p>\n )}\n\n {helpText && !error && (\n <p className=\"text-xs text-muted-foreground\">{helpText}</p>\n )}\n </div>\n )\n }}\n />\n )\n}\n","/**\n * FormRadioGroup Component\n *\n * Radio button group with react-hook-form integration.\n */\n\nimport { useFormContext, type FieldValues, type Path } from \"react-hook-form\";\n\nexport interface RadioOption {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface FormRadioGroupProps<TFieldValues extends FieldValues> {\n /**\n * Field name (registered with react-hook-form)\n */\n name: Path<TFieldValues>;\n\n /**\n * Radio group label\n */\n label?: string;\n\n /**\n * Radio options\n */\n options: RadioOption[];\n\n /**\n * Layout orientation\n */\n orientation?: \"vertical\" | \"horizontal\";\n\n /**\n * Help text shown below the radio group\n */\n helperText?: string;\n\n /**\n * Whether the field is required\n */\n required?: boolean;\n\n /**\n * Whether the field is disabled\n */\n disabled?: boolean;\n\n /**\n * Custom className\n */\n className?: string;\n}\n\nexport function FormRadioGroup<TFieldValues extends FieldValues>({\n name,\n label,\n options,\n orientation = \"vertical\",\n helperText,\n required,\n disabled,\n className,\n}: FormRadioGroupProps<TFieldValues>) {\n const {\n register,\n formState: { errors },\n } = useFormContext<TFieldValues>();\n\n const error = errors[name]?.message as string | undefined;\n const fieldId = `field-${name}`;\n\n return (\n <div className={className}>\n {label && (\n <div className=\"mb-2\">\n <label id={fieldId} className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n </div>\n )}\n\n <div\n role=\"radiogroup\"\n aria-labelledby={label ? fieldId : undefined}\n className={\n orientation === \"horizontal\"\n ? \"flex flex-wrap gap-4\"\n : \"space-y-3\"\n }\n >\n {options.map((option) => {\n const optionId = `${fieldId}-${option.value}`;\n const isDisabled = disabled || option.disabled;\n\n return (\n <div key={option.value} className=\"flex items-start\">\n <div className=\"flex items-center h-5\">\n <input\n {...register(name)}\n type=\"radio\"\n id={optionId}\n value={option.value}\n disabled={isDisabled}\n className={`\n h-4 w-4 border-gray-300 text-blue-600\n focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\n disabled:opacity-50 disabled:cursor-not-allowed\n dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-offset-gray-900\n `}\n />\n </div>\n <div className=\"ml-3\">\n <label\n htmlFor={optionId}\n className={`\n text-sm font-medium\n ${isDisabled ? \"text-gray-400 cursor-not-allowed\" : \"text-gray-700 dark:text-gray-300 cursor-pointer\"}\n `}\n >\n {option.label}\n </label>\n {option.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\n {option.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {helperText && !error && (\n <p className=\"mt-2 text-sm text-gray-500 dark:text-gray-400\">\n {helperText}\n </p>\n )}\n\n {error && (\n <p className=\"mt-2 text-sm text-red-600 dark:text-red-400\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n}\n","/**\n * FormSwitch Component\n *\n * Toggle switch with react-hook-form integration.\n */\n\nimport * as React from \"react\";\nimport { useFormContext, type FieldValues, type Path } from \"react-hook-form\";\n\nexport interface FormSwitchProps<TFieldValues extends FieldValues> {\n /**\n * Field name (registered with react-hook-form)\n */\n name: Path<TFieldValues>;\n\n /**\n * Switch label\n */\n label?: string;\n\n /**\n * Description shown below the label\n */\n description?: string;\n\n /**\n * Help text shown below the switch\n */\n helperText?: string;\n\n /**\n * Whether the field is required\n */\n required?: boolean;\n\n /**\n * Whether the field is disabled\n */\n disabled?: boolean;\n\n /**\n * Custom className\n */\n className?: string;\n\n /**\n * Callback when value changes\n */\n onChange?: (checked: boolean) => void;\n}\n\nexport function FormSwitch<TFieldValues extends FieldValues>({\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n className,\n onChange,\n}: FormSwitchProps<TFieldValues>) {\n const {\n register,\n watch,\n setValue,\n formState: { errors },\n } = useFormContext<TFieldValues>();\n\n const value = watch(name);\n const checked = Boolean(value);\n const error = errors[name]?.message as string | undefined;\n const fieldId = `field-${name}`;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.checked;\n setValue(name, newValue as any, { shouldValidate: true, shouldDirty: true });\n onChange?.(newValue);\n };\n\n return (\n <div className={className}>\n <div className=\"flex items-start\">\n <div className=\"flex items-center h-5\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-labelledby={label ? `${fieldId}-label` : undefined}\n aria-describedby={description ? `${fieldId}-description` : undefined}\n disabled={disabled}\n onClick={() => {\n if (!disabled) {\n const newValue = !checked;\n setValue(name, newValue as any, { shouldValidate: true, shouldDirty: true });\n onChange?.(newValue);\n }\n }}\n className={`\n relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent\n transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\n disabled:opacity-50 disabled:cursor-not-allowed\n dark:focus:ring-offset-gray-900\n ${checked ? \"bg-blue-600\" : \"bg-gray-200 dark:bg-gray-700\"}\n `}\n >\n <span className=\"sr-only\">{label}</span>\n <span\n className={`\n pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0\n transition duration-200 ease-in-out\n ${checked ? \"translate-x-5\" : \"translate-x-0\"}\n `}\n />\n </button>\n <input\n {...register(name)}\n type=\"checkbox\"\n id={fieldId}\n checked={checked}\n onChange={handleChange}\n className=\"sr-only\"\n disabled={disabled}\n />\n </div>\n\n {(label || description) && (\n <div className=\"ml-3\">\n {label && (\n <label\n id={`${fieldId}-label`}\n htmlFor={fieldId}\n className={`\n text-sm font-medium\n ${disabled ? \"text-gray-400\" : \"text-gray-700 dark:text-gray-300\"}\n `}\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n {description && (\n <p\n id={`${fieldId}-description`}\n className=\"text-xs text-gray-500 dark:text-gray-400\"\n >\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n\n {helperText && !error && (\n <p className=\"mt-2 text-sm text-gray-500 dark:text-gray-400\">\n {helperText}\n </p>\n )}\n\n {error && (\n <p className=\"mt-2 text-sm text-red-600 dark:text-red-400\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n}\n","/**\n * FormTagInput Component\n *\n * Tag/chip input with react-hook-form integration.\n */\n\nimport * as React from \"react\";\nimport { useFormContext, type FieldValues, type Path } from \"react-hook-form\";\n\nexport interface FormTagInputProps<TFieldValues extends FieldValues> {\n /**\n * Field name (registered with react-hook-form)\n */\n name: Path<TFieldValues>;\n\n /**\n * Field label\n */\n label?: string;\n\n /**\n * Placeholder text\n */\n placeholder?: string;\n\n /**\n * Help text shown below the input\n */\n helperText?: string;\n\n /**\n * Whether the field is required\n */\n required?: boolean;\n\n /**\n * Whether the field is disabled\n */\n disabled?: boolean;\n\n /**\n * Maximum number of tags allowed\n */\n maxTags?: number;\n\n /**\n * Separator keys (default: Enter, comma)\n */\n separators?: string[];\n\n /**\n * Validate individual tags before adding\n */\n validateTag?: (tag: string) => boolean | string;\n\n /**\n * Custom className\n */\n className?: string;\n}\n\nexport function FormTagInput<TFieldValues extends FieldValues>({\n name,\n label,\n placeholder = \"Type and press Enter...\",\n helperText,\n required,\n disabled,\n maxTags,\n separators = [\"Enter\", \",\"],\n validateTag,\n className,\n}: FormTagInputProps<TFieldValues>) {\n const {\n watch,\n setValue,\n formState: { errors },\n } = useFormContext<TFieldValues>();\n\n const [inputValue, setInputValue] = React.useState(\"\");\n const [tagError, setTagError] = React.useState(\"\");\n\n const tags = (watch(name) as string[] | undefined) || [];\n const error = errors[name]?.message as string | undefined;\n const fieldId = `field-${name}`;\n\n const addTag = (tag: string) => {\n const trimmed = tag.trim();\n\n if (!trimmed) return;\n\n // Check if tag already exists\n if (tags.includes(trimmed)) {\n setTagError(\"Tag already exists\");\n return;\n }\n\n // Check max tags limit\n if (maxTags && tags.length >= maxTags) {\n setTagError(`Maximum ${maxTags} tags allowed`);\n return;\n }\n\n // Validate tag if validator provided\n if (validateTag) {\n const validation = validateTag(trimmed);\n if (validation === false) {\n setTagError(\"Invalid tag\");\n return;\n }\n if (typeof validation === \"string\") {\n setTagError(validation);\n return;\n }\n }\n\n setValue(name, [...tags, trimmed] as any, {\n shouldValidate: true,\n shouldDirty: true,\n });\n setInputValue(\"\");\n setTagError(\"\");\n };\n\n const removeTag = (index: number) => {\n const newTags = tags.filter((_, i) => i !== index);\n setValue(name, newTags as any, {\n shouldValidate: true,\n shouldDirty: true,\n });\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (separators.includes(e.key)) {\n e.preventDefault();\n addTag(inputValue);\n } else if (e.key === \"Backspace\" && !inputValue && tags.length > 0) {\n removeTag(tags.length - 1);\n }\n };\n\n const handleBlur = () => {\n if (inputValue.trim()) {\n addTag(inputValue);\n }\n };\n\n return (\n <div className={className}>\n {label && (\n <label\n htmlFor={fieldId}\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n >\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n\n <div\n className={`\n flex flex-wrap gap-2 p-2 border rounded-md min-h-[42px]\n ${disabled ? \"bg-gray-50 dark:bg-gray-900 cursor-not-allowed\" : \"bg-white dark:bg-gray-800\"}\n ${error || tagError ? \"border-red-300 dark:border-red-700\" : \"border-gray-300 dark:border-gray-600\"}\n focus-within:ring-2 focus-within:ring-blue-500 focus-within:border-blue-500\n dark:focus-within:ring-blue-400 dark:focus-within:border-blue-400\n `}\n >\n {tags.map((tag, index) => (\n <span\n key={index}\n className=\"inline-flex items-center gap-1 px-2 py-1 text-sm bg-blue-100 text-blue-800 rounded dark:bg-blue-900 dark:text-blue-200\"\n >\n {tag}\n {!disabled && (\n <button\n type=\"button\"\n onClick={() => removeTag(index)}\n className=\"ml-1 hover:text-blue-600 dark:hover:text-blue-300\"\n aria-label={`Remove ${tag}`}\n >\n ×\n </button>\n )}\n </span>\n ))}\n\n <input\n id={fieldId}\n type=\"text\"\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n setTagError(\"\");\n }}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={tags.length === 0 ? placeholder : \"\"}\n disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n className=\"flex-1 min-w-[120px] outline-none bg-transparent text-sm text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 disabled:cursor-not-allowed\"\n />\n </div>\n\n {helperText && !error && !tagError && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {helperText}\n </p>\n )}\n\n {(error || tagError) && (\n <p className=\"mt-1 text-sm text-red-600 dark:text-red-400\" role=\"alert\">\n {error || tagError}\n </p>\n )}\n\n {maxTags && (\n <p className=\"mt-1 text-xs text-gray-500 dark:text-gray-400\">\n {tags.length} / {maxTags} tags\n </p>\n )}\n </div>\n );\n}\n","/**\n * FormErrorSummary Component\n *\n * Displays all form errors in a summary box with links to fields.\n */\n\nimport * as React from \"react\";\nimport { useFormContext, type FieldErrors } from \"react-hook-form\";\n\nexport interface FormErrorSummaryProps {\n /**\n * Title for the error summary\n */\n title?: string;\n\n /**\n * Custom field labels (for better error messages)\n */\n fieldLabels?: Record<string, string>;\n\n /**\n * Whether to show the error summary\n * Defaults to showing when there are errors\n */\n show?: boolean;\n\n /**\n * Custom className\n */\n className?: string;\n\n /**\n * Callback when an error link is clicked\n */\n onErrorClick?: (fieldName: string) => void;\n}\n\nexport function FormErrorSummary({\n title = \"Please fix the following errors:\",\n fieldLabels = {},\n show,\n className,\n onErrorClick,\n}: FormErrorSummaryProps) {\n const {\n formState: { errors },\n } = useFormContext();\n\n const errorList = React.useMemo(() => {\n return flattenErrors(errors, fieldLabels);\n }, [errors, fieldLabels]);\n\n const shouldShow = show !== undefined ? show : errorList.length > 0;\n\n if (!shouldShow) {\n return null;\n }\n\n const handleErrorClick = (fieldName: string) => {\n // Try to focus the field\n const field = document.getElementById(`field-${fieldName}`) ||\n document.querySelector(`[name=\"${fieldName}\"]`);\n\n if (field) {\n field.focus();\n field.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n\n onErrorClick?.(fieldName);\n };\n\n return (\n <div\n role=\"alert\"\n aria-live=\"polite\"\n className={`\n rounded-md bg-red-50 dark:bg-red-900/20 p-4 border border-red-200 dark:border-red-800\n ${className}\n `}\n >\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg\n className=\"h-5 w-5 text-red-400 dark:text-red-600\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3 flex-1\">\n <h3 className=\"text-sm font-medium text-red-800 dark:text-red-300\">\n {title}\n </h3>\n <div className=\"mt-2 text-sm text-red-700 dark:text-red-400\">\n <ul className=\"list-disc space-y-1 pl-5\">\n {errorList.map(({ fieldName, fieldLabel, message }) => (\n <li key={fieldName}>\n <button\n type=\"button\"\n onClick={() => handleErrorClick(fieldName)}\n className=\"hover:underline focus:outline-none focus:underline text-left\"\n >\n <strong>{fieldLabel}:</strong> {message}\n </button>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Helper to flatten nested errors into a flat list\n */\nfunction flattenErrors(\n errors: FieldErrors,\n fieldLabels: Record<string, string>,\n prefix = \"\"\n): Array<{ fieldName: string; fieldLabel: string; message: string }> {\n const result: Array<{ fieldName: string; fieldLabel: string; message: string }> = [];\n\n for (const [key, value] of Object.entries(errors)) {\n const fieldName = prefix ? `${prefix}.${key}` : key;\n\n if (value && typeof value === \"object\") {\n if (\"message\" in value && typeof value.message === \"string\") {\n result.push({\n fieldName,\n fieldLabel: fieldLabels[fieldName] || formatFieldName(fieldName),\n message: value.message,\n });\n } else {\n // Nested errors (for arrays or objects)\n result.push(...flattenErrors(value as FieldErrors, fieldLabels, fieldName));\n }\n }\n }\n\n return result;\n}\n\n/**\n * Format field name to human-readable label\n */\nfunction formatFieldName(name: string): string {\n return name\n .split(\".\")\n .pop()!\n .replace(/([A-Z])/g, \" $1\")\n .replace(/_/g, \" \")\n .replace(/^\\w/, (c) => c.toUpperCase())\n .trim();\n}\n","import * as React from 'react'\n\nexport interface FormLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Number of columns for the form layout\n * @default 1\n */\n columns?: 1 | 2 | 3 | 4\n\n /**\n * Spacing between form fields\n * @default \"md\"\n */\n spacing?: 'sm' | 'md' | 'lg'\n\n /**\n * Make the layout responsive (mobile: 1 col, tablet: 2 cols, desktop: specified cols)\n * @default true\n */\n responsive?: boolean\n}\n\nconst spacingClasses = {\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst columnClasses = {\n responsive: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n },\n fixed: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n },\n}\n\n/**\n * FormLayout - Ready-to-use form grid layout\n *\n * @example\n * ```tsx\n * <FormLayout columns={2}>\n * <FormField name=\"firstName\" label=\"First Name\" control={form.control} />\n * <FormField name=\"lastName\" label=\"Last Name\" control={form.control} />\n * </FormLayout>\n * ```\n */\nexport function FormLayout({\n columns = 1,\n spacing = 'md',\n responsive = true,\n className = '',\n children,\n ...props\n}: FormLayoutProps) {\n const gridClasses = responsive ? columnClasses.responsive[columns] : columnClasses.fixed[columns]\n\n return (\n <div\n className={`grid ${gridClasses} ${spacingClasses[spacing]} ${className}`}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nFormLayout.displayName = 'FormLayout'\n","import * as React from 'react'\n\nexport interface FormSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Section title\n */\n title?: string\n\n /**\n * Section description\n */\n description?: string\n\n /**\n * Number of columns for this section\n * @default 1\n */\n columns?: 1 | 2 | 3 | 4\n\n /**\n * Spacing between fields\n * @default \"md\"\n */\n spacing?: 'sm' | 'md' | 'lg'\n}\n\nconst spacingClasses = {\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst columnClasses = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n}\n\n/**\n * FormSection - Section with title and grid layout\n *\n * @example\n * ```tsx\n * <FormSection title=\"Personal Info\" description=\"Enter your details\" columns={2}>\n * <FormField name=\"name\" label=\"Name\" control={form.control} />\n * <FormField name=\"email\" label=\"Email\" control={form.control} />\n * </FormSection>\n * ```\n */\nexport function FormSection({\n title,\n description,\n columns = 1,\n spacing = 'md',\n className = '',\n children,\n ...props\n}: FormSectionProps) {\n return (\n <div className={`space-y-4 ${className}`} {...props}>\n {(title || description) && (\n <div className=\"space-y-1\">\n {title && (\n <h3 className=\"text-lg font-semibold leading-none tracking-tight\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n <div className={`grid ${columnClasses[columns]} ${spacingClasses[spacing]}`}>\n {children}\n </div>\n </div>\n )\n}\n\nFormSection.displayName = 'FormSection'\n","import * as React from 'react'\n\nexport interface FormGridProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Spacing between items\n * @default \"md\"\n */\n spacing?: 'sm' | 'md' | 'lg'\n}\n\nexport interface FormGridItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Column span for the item\n * @default 1\n */\n colSpan?: 1 | 2 | 3 | 4 | 'full'\n}\n\nconst spacingClasses = {\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n}\n\nconst colSpanClasses = {\n 1: 'col-span-1',\n 2: 'col-span-1 sm:col-span-2',\n 3: 'col-span-1 sm:col-span-2 lg:col-span-3',\n 4: 'col-span-1 sm:col-span-2 lg:col-span-4',\n full: 'col-span-full',\n}\n\n/**\n * FormGrid - Advanced grid layout with col-span support\n *\n * @example\n * ```tsx\n * <FormGrid>\n * <FormGridItem>\n * <FormField name=\"firstName\" label=\"First Name\" control={form.control} />\n * </FormGridItem>\n * <FormGridItem>\n * <FormField name=\"lastName\" label=\"Last Name\" control={form.control} />\n * </FormGridItem>\n * <FormGridItem colSpan=\"full\">\n * <FormField name=\"bio\" label=\"Bio\" control={form.control} />\n * </FormGridItem>\n * </FormGrid>\n * ```\n */\nexport function FormGrid({\n spacing = 'md',\n className = '',\n children,\n ...props\n}: FormGridProps) {\n return (\n <div\n className={`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 ${spacingClasses[spacing]} ${className}`}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nFormGrid.displayName = 'FormGrid'\n\n/**\n * FormGridItem - Item within FormGrid with custom column span\n */\nexport function FormGridItem({\n colSpan = 1,\n className = '',\n children,\n ...props\n}: FormGridItemProps) {\n return (\n <div className={`${colSpanClasses[colSpan]} ${className}`} {...props}>\n {children}\n </div>\n )\n}\n\nFormGridItem.displayName = 'FormGridItem'\n","/**\n * Form Wizard Component\n *\n * Multi-step form with navigation and validation.\n */\n\nimport * as React from 'react'\n\nexport interface FormWizardStep {\n title: string\n description?: string\n content: React.ReactNode\n onValidate?: () => boolean | Promise<boolean>\n}\n\nexport interface FormWizardProps {\n steps: FormWizardStep[]\n onComplete: () => void | Promise<void>\n onCancel?: () => void\n className?: string\n showStepNumbers?: boolean\n}\n\n/**\n * Form Wizard component for multi-step forms\n *\n * @example\n * ```tsx\n * <FormWizard\n * steps={[\n * {\n * title: 'Personal Info',\n * content: <PersonalInfoForm />,\n * onValidate: () => form.trigger(['name', 'email']),\n * },\n * {\n * title: 'Address',\n * content: <AddressForm />,\n * },\n * ]}\n * onComplete={() => form.handleSubmit(onSubmit)()}\n * />\n * ```\n */\nexport function FormWizard({\n steps,\n onComplete,\n onCancel,\n className,\n showStepNumbers = true,\n}: FormWizardProps) {\n const [currentStep, setCurrentStep] = React.useState(0)\n const [isValidating, setIsValidating] = React.useState(false)\n const [isCompleting, setIsCompleting] = React.useState(false)\n\n const isFirstStep = currentStep === 0\n const isLastStep = currentStep === steps.length - 1\n\n const handleNext = async () => {\n const step = steps[currentStep]\n\n if (step.onValidate) {\n setIsValidating(true)\n try {\n const isValid = await step.onValidate()\n if (!isValid) {\n setIsValidating(false)\n return\n }\n } catch (error) {\n console.error('Validation error:', error)\n setIsValidating(false)\n return\n }\n setIsValidating(false)\n }\n\n if (isLastStep) {\n setIsCompleting(true)\n try {\n await onComplete()\n } finally {\n setIsCompleting(false)\n }\n } else {\n setCurrentStep((prev) => prev + 1)\n }\n }\n\n const handleBack = () => {\n if (!isFirstStep) {\n setCurrentStep((prev) => prev - 1)\n }\n }\n\n const handleStepClick = (stepIndex: number) => {\n // Only allow going back to previous steps\n if (stepIndex < currentStep) {\n setCurrentStep(stepIndex)\n }\n }\n\n return (\n <div className={`space-y-8 ${className || ''}`}>\n {/* Stepper */}\n <nav aria-label=\"Progress\">\n <ol className=\"flex items-center justify-between\">\n {steps.map((step, index) => {\n const isActive = index === currentStep\n const isCompleted = index < currentStep\n const isClickable = index < currentStep\n\n return (\n <li\n key={index}\n className={`flex items-center ${\n index !== steps.length - 1 ? 'flex-1' : ''\n }`}\n >\n <button\n type=\"button\"\n onClick={() => isClickable && handleStepClick(index)}\n disabled={!isClickable}\n className={`flex items-center space-x-3 ${\n isClickable ? 'cursor-pointer' : 'cursor-default'\n }`}\n >\n <div\n className={`flex h-10 w-10 items-center justify-center rounded-full border-2 transition-colors ${\n isActive\n ? 'border-primary bg-primary text-primary-foreground'\n : isCompleted\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-muted-foreground text-muted-foreground'\n }`}\n >\n {isCompleted ? (\n <svg\n className=\"h-5 w-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : showStepNumbers ? (\n <span>{index + 1}</span>\n ) : null}\n </div>\n <div className=\"hidden sm:block text-left\">\n <p\n className={`text-sm font-medium ${\n isActive ? 'text-foreground' : 'text-muted-foreground'\n }`}\n >\n {step.title}\n </p>\n {step.description && (\n <p className=\"text-xs text-muted-foreground\">\n {step.description}\n </p>\n )}\n </div>\n </button>\n\n {index !== steps.length - 1 && (\n <div\n className={`mx-2 h-0.5 flex-1 transition-colors ${\n isCompleted ? 'bg-primary' : 'bg-muted'\n }`}\n />\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n\n {/* Step Content */}\n <div className=\"mt-8\">{steps[currentStep].content}</div>\n\n {/* Navigation */}\n <div className=\"flex justify-between pt-6 border-t\">\n <div>\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2\"\n >\n Cancel\n </button>\n )}\n </div>\n\n <div className=\"flex space-x-2\">\n {!isFirstStep && (\n <button\n type=\"button\"\n onClick={handleBack}\n disabled={isValidating || isCompleting}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2\"\n >\n Back\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={handleNext}\n disabled={isValidating || isCompleting}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2\"\n >\n {isValidating || isCompleting\n ? 'Loading...'\n : isLastStep\n ? 'Complete'\n : 'Next'}\n </button>\n </div>\n </div>\n </div>\n )\n}\n","import { useFieldArray as rhfUseFieldArray } from 'react-hook-form'\nimport type { FieldValues, ArrayPath } from 'react-hook-form'\nimport type { UseFormReturn } from 'react-hook-form'\n\n/**\n * Field array options\n */\nexport interface FieldArrayOptions<TFieldValues extends FieldValues = FieldValues> {\n /**\n * Field array name\n */\n name: ArrayPath<TFieldValues>\n\n /**\n * Form control instance\n */\n control: UseFormReturn<TFieldValues>['control']\n\n /**\n * Default value for new items\n */\n defaultValue?: unknown\n}\n\n/**\n * Wrapper around React Hook Form's useFieldArray with smart defaults\n *\n * @example\n * ```tsx\n * const { fields, append, remove } = useSmartFieldArray({\n * name: 'items',\n * control: form.control,\n * defaultValue: { name: '', quantity: 0 }\n * })\n * ```\n */\nexport function useSmartFieldArray<TFieldValues extends FieldValues = FieldValues>({\n name,\n control,\n defaultValue,\n}: FieldArrayOptions<TFieldValues>) {\n const fieldArray = rhfUseFieldArray({\n name,\n control,\n })\n\n const { append: rhfAppend, ...rest } = fieldArray\n\n // Enhanced append with default value\n const append = (value?: unknown) => {\n rhfAppend((value || defaultValue) as never)\n }\n\n return {\n ...rest,\n append,\n }\n}\n","/**\n * useUnsavedChanges Hook\n *\n * Warns users before leaving the page if form has unsaved changes.\n */\n\nimport * as React from \"react\";\nimport { useFormContext } from \"react-hook-form\";\n\nexport interface UseUnsavedChangesOptions {\n /**\n * Custom message for the confirmation dialog\n */\n message?: string;\n\n /**\n * Whether to enable the warning\n * Defaults to true\n */\n enabled?: boolean;\n\n /**\n * Callback when user tries to leave with unsaved changes\n */\n onBeforeUnload?: (isDirty: boolean) => void;\n}\n\n/**\n * Hook to warn users before leaving the page with unsaved form changes\n *\n * @example\n * ```tsx\n * function MyForm() {\n * const form = useSmartForm({ schema: mySchema });\n *\n * useUnsavedChanges({\n * message: \"You have unsaved changes. Are you sure you want to leave?\",\n * enabled: true\n * });\n *\n * return <FormProvider {...form}>...</FormProvider>;\n * }\n * ```\n */\nexport function useUnsavedChanges(options: UseUnsavedChangesOptions = {}) {\n const {\n message = \"You have unsaved changes. Are you sure you want to leave?\",\n enabled = true,\n onBeforeUnload,\n } = options;\n\n const {\n formState: { isDirty, isSubmitting, isSubmitSuccessful },\n } = useFormContext();\n\n const hasUnsavedChanges = isDirty && !isSubmitting && !isSubmitSuccessful;\n\n React.useEffect(() => {\n if (!enabled) return;\n\n const handleBeforeUnload = (event: BeforeUnloadEvent) => {\n if (hasUnsavedChanges) {\n event.preventDefault();\n event.returnValue = message; // Required for Chrome\n onBeforeUnload?.(hasUnsavedChanges);\n return message;\n }\n };\n\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n\n return () => {\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n };\n }, [hasUnsavedChanges, message, enabled, onBeforeUnload]);\n\n return {\n hasUnsavedChanges,\n isDirty,\n };\n}\n\n/**\n * Hook variant for React Router integration\n *\n * @example\n * ```tsx\n * function MyForm() {\n * const form = useSmartForm({ schema: mySchema });\n * const blocker = useUnsavedChangesBlocker();\n *\n * if (blocker.state === \"blocked\") {\n * return (\n * <ConfirmDialog\n * title=\"Unsaved changes\"\n * message=\"You have unsaved changes. Are you sure you want to leave?\"\n * onConfirm={blocker.proceed}\n * onCancel={blocker.reset}\n * />\n * );\n * }\n *\n * return <FormProvider {...form}>...</FormProvider>;\n * }\n * ```\n */\nexport function useUnsavedChangesBlocker() {\n const {\n formState: { isDirty, isSubmitting, isSubmitSuccessful },\n } = useFormContext();\n\n const hasUnsavedChanges = isDirty && !isSubmitting && !isSubmitSuccessful;\n\n return {\n hasUnsavedChanges,\n isDirty,\n shouldBlock: hasUnsavedChanges,\n };\n}\n","/**\n * Common Validation Schemas\n *\n * Reusable Zod schemas for common validation patterns.\n */\n\nimport { z } from 'zod'\n\n/**\n * Email validation schema\n */\nexport const emailSchema = z\n .string()\n .min(1, 'Email is required')\n .email('Invalid email address')\n\n/**\n * Password validation schema\n * At least 8 characters, 1 uppercase, 1 lowercase, 1 number\n */\nexport const passwordSchema = z\n .string()\n .min(8, 'Password must be at least 8 characters')\n .regex(/[A-Z]/, 'Password must contain at least one uppercase letter')\n .regex(/[a-z]/, 'Password must contain at least one lowercase letter')\n .regex(/[0-9]/, 'Password must contain at least one number')\n\n/**\n * Strong password validation schema\n * At least 12 characters, 1 uppercase, 1 lowercase, 1 number, 1 special character\n */\nexport const strongPasswordSchema = z\n .string()\n .min(12, 'Password must be at least 12 characters')\n .regex(/[A-Z]/, 'Password must contain at least one uppercase letter')\n .regex(/[a-z]/, 'Password must contain at least one lowercase letter')\n .regex(/[0-9]/, 'Password must contain at least one number')\n .regex(/[^A-Za-z0-9]/, 'Password must contain at least one special character')\n\n/**\n * Phone number validation schema (international format)\n */\nexport const phoneSchema = z\n .string()\n .min(1, 'Phone number is required')\n .regex(/^\\+?[1-9]\\d{1,14}$/, 'Invalid phone number format')\n\n/**\n * URL validation schema\n */\nexport const urlSchema = z\n .string()\n .min(1, 'URL is required')\n .url('Invalid URL format')\n\n/**\n * Username validation schema\n * 3-20 characters, alphanumeric and underscores only\n */\nexport const usernameSchema = z\n .string()\n .min(3, 'Username must be at least 3 characters')\n .max(20, 'Username must be at most 20 characters')\n .regex(/^[a-zA-Z0-9_]+$/, 'Username can only contain letters, numbers, and underscores')\n\n/**\n * Slug validation schema\n * Lowercase letters, numbers, and hyphens only\n */\nexport const slugSchema = z\n .string()\n .min(1, 'Slug is required')\n .regex(/^[a-z0-9-]+$/, 'Slug can only contain lowercase letters, numbers, and hyphens')\n\n/**\n * Positive number schema\n */\nexport const positiveNumberSchema = z\n .number()\n .positive('Must be a positive number')\n\n/**\n * Positive integer schema\n */\nexport const positiveIntegerSchema = z\n .number()\n .int('Must be an integer')\n .positive('Must be a positive number')\n\n/**\n * Price schema (two decimal places)\n */\nexport const priceSchema = z\n .number()\n .nonnegative('Price cannot be negative')\n .multipleOf(0.01, 'Price can have at most 2 decimal places')\n\n/**\n * Percentage schema (0-100)\n */\nexport const percentageSchema = z\n .number()\n .min(0, 'Percentage must be at least 0')\n .max(100, 'Percentage cannot exceed 100')\n\n/**\n * Date string schema (ISO format)\n */\nexport const dateStringSchema = z\n .string()\n .min(1, 'Date is required')\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Date must be in YYYY-MM-DD format')\n\n/**\n * Future date schema\n */\nexport const futureDateSchema = z\n .string()\n .refine((date) => new Date(date) > new Date(), {\n message: 'Date must be in the future',\n })\n\n/**\n * Past date schema\n */\nexport const pastDateSchema = z\n .string()\n .refine((date) => new Date(date) < new Date(), {\n message: 'Date must be in the past',\n })\n\n/**\n * File size validation helper\n */\nexport const createFileSizeSchema = (maxSizeInBytes: number, message?: string) =>\n z.instanceof(File).refine((file) => file.size <= maxSizeInBytes, {\n message: message || `File size must be less than ${formatFileSize(maxSizeInBytes)}`,\n })\n\n/**\n * File type validation helper\n */\nexport const createFileTypeSchema = (allowedTypes: string[], message?: string) =>\n z.instanceof(File).refine((file) => allowedTypes.includes(file.type), {\n message: message || `File type must be one of: ${allowedTypes.join(', ')}`,\n })\n\n/**\n * Image file schema (common image types, max 5MB)\n */\nexport const imageFileSchema = z\n .instanceof(File)\n .refine((file) => file.size <= 5 * 1024 * 1024, {\n message: 'Image must be less than 5MB',\n })\n .refine(\n (file) => ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif'].includes(file.type),\n {\n message: 'File must be an image (JPEG, PNG, WebP, or GIF)',\n }\n )\n\n/**\n * Confirm password schema helper\n */\nexport const createConfirmPasswordSchema = (passwordField: string) =>\n z.object({\n [passwordField]: z.string(),\n confirmPassword: z.string(),\n }).refine((data) => data[passwordField] === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n })\n\n/**\n * Optional email schema (can be empty or valid email)\n */\nexport const optionalEmailSchema = z.union([\n z.string().length(0),\n emailSchema,\n])\n\n/**\n * Optional URL schema\n */\nexport const optionalUrlSchema = z.union([\n z.string().length(0),\n urlSchema,\n])\n\n// Helper function\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes'\n const k = 1024\n const sizes = ['Bytes', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i]\n}\n","/**\n * Validation Helper Utilities\n *\n * Helper functions for common validation patterns.\n */\n\nimport { z, type ZodTypeAny } from 'zod'\nimport type { FieldErrors } from 'react-hook-form'\n\n/**\n * Get error message from field errors\n */\nexport function getErrorMessage(\n errors: FieldErrors,\n fieldName: string\n): string | undefined {\n const fieldError = errors[fieldName]\n if (!fieldError) return undefined\n if (typeof fieldError.message === 'string') return fieldError.message\n return 'Invalid value'\n}\n\n/**\n * Check if field has error\n */\nexport function hasError(errors: FieldErrors, fieldName: string): boolean {\n return !!errors[fieldName]\n}\n\n/**\n * Get all error messages as array\n */\nexport function getAllErrors(errors: FieldErrors): string[] {\n const messages: string[] = []\n\n Object.keys(errors).forEach((key) => {\n const error = errors[key]\n if (error && typeof error.message === 'string') {\n messages.push(error.message)\n }\n })\n\n return messages\n}\n\n/**\n * Create a conditional schema based on another field\n *\n * @example\n * ```ts\n * const schema = z.object({\n * type: z.enum(['individual', 'company']),\n * companyName: conditionalSchema(\n * 'type',\n * (type) => type === 'company',\n * z.string().min(1, 'Company name is required')\n * ),\n * })\n * ```\n */\nexport function conditionalSchema<T extends ZodTypeAny>(\n _dependentField: string,\n _condition: (value: any) => boolean,\n schema: T\n): ZodTypeAny {\n return z.any().superRefine((value, ctx) => {\n const parent = ctx.path[ctx.path.length - 2]\n if (!parent) return\n\n // This is a simplified version - in real use, you'd access the form data\n // through the validation context\n return schema.parse(value)\n })\n}\n\n/**\n * Create min/max length message\n */\nexport function lengthMessage(\n field: string,\n min?: number,\n max?: number\n): string {\n if (min && max) {\n return `${field} must be between ${min} and ${max} characters`\n }\n if (min) {\n return `${field} must be at least ${min} characters`\n }\n if (max) {\n return `${field} must be at most ${max} characters`\n }\n return `Invalid ${field.toLowerCase()}`\n}\n\n/**\n * Create required field message\n */\nexport function requiredMessage(field: string): string {\n return `${field} is required`\n}\n\n/**\n * Create invalid format message\n */\nexport function invalidFormatMessage(field: string): string {\n return `Invalid ${field.toLowerCase()} format`\n}\n\n/**\n * Validate credit card using Luhn algorithm\n */\nexport function validateCreditCard(cardNumber: string): boolean {\n const sanitized = cardNumber.replace(/\\s/g, '')\n if (!/^\\d+$/.test(sanitized)) return false\n\n let sum = 0\n let isEven = false\n\n for (let i = sanitized.length - 1; i >= 0; i--) {\n let digit = parseInt(sanitized[i], 10)\n\n if (isEven) {\n digit *= 2\n if (digit > 9) {\n digit -= 9\n }\n }\n\n sum += digit\n isEven = !isEven\n }\n\n return sum % 10 === 0\n}\n\n/**\n * Validate IBAN (International Bank Account Number)\n */\nexport function validateIBAN(iban: string): boolean {\n const sanitized = iban.replace(/\\s/g, '').toUpperCase()\n if (!/^[A-Z]{2}\\d{2}[A-Z0-9]+$/.test(sanitized)) return false\n if (sanitized.length < 15 || sanitized.length > 34) return false\n\n const rearranged = sanitized.slice(4) + sanitized.slice(0, 4)\n const numeric = rearranged.replace(/[A-Z]/g, (char) =>\n String(char.charCodeAt(0) - 55)\n )\n\n let remainder = numeric\n while (remainder.length > 2) {\n const block = remainder.slice(0, 9)\n remainder = (parseInt(block, 10) % 97) + remainder.slice(block.length)\n }\n\n return parseInt(remainder, 10) % 97 === 1\n}\n\n/**\n * Validate strong password requirements\n */\nexport function validatePasswordStrength(password: string): {\n isStrong: boolean\n missingRequirements: string[]\n} {\n const requirements = []\n\n if (password.length < 12) {\n requirements.push('At least 12 characters')\n }\n if (!/[A-Z]/.test(password)) {\n requirements.push('One uppercase letter')\n }\n if (!/[a-z]/.test(password)) {\n requirements.push('One lowercase letter')\n }\n if (!/[0-9]/.test(password)) {\n requirements.push('One number')\n }\n if (!/[^A-Za-z0-9]/.test(password)) {\n requirements.push('One special character')\n }\n\n return {\n isStrong: requirements.length === 0,\n missingRequirements: requirements,\n }\n}\n\n/**\n * Sanitize string input (remove HTML, trim, normalize whitespace)\n */\nexport function sanitizeString(input: string): string {\n return input\n .replace(/<[^>]*>/g, '') // Remove HTML tags\n .replace(/\\s+/g, ' ') // Normalize whitespace\n .trim()\n}\n\n/**\n * Validate file extension\n */\nexport function validateFileExtension(\n filename: string,\n allowedExtensions: string[]\n): boolean {\n const extension = filename.split('.').pop()?.toLowerCase()\n return extension ? allowedExtensions.includes(extension) : false\n}\n\n/**\n * Format validation error for display\n */\nexport function formatValidationError(error: z.ZodError): Record<string, string> {\n const formatted: Record<string, string> = {}\n\n error.errors.forEach((err) => {\n const path = err.path.join('.')\n formatted[path] = err.message\n })\n\n return formatted\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mehdashti/forms",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "Enterprise-grade form management with validation, error handling, and advanced components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.js",
|
|
@@ -37,7 +37,13 @@
|
|
|
37
37
|
"validation",
|
|
38
38
|
"react-hook-form",
|
|
39
39
|
"zod",
|
|
40
|
-
"smart-platform"
|
|
40
|
+
"smart-platform",
|
|
41
|
+
"enterprise",
|
|
42
|
+
"radio-group",
|
|
43
|
+
"switch",
|
|
44
|
+
"tag-input",
|
|
45
|
+
"error-summary",
|
|
46
|
+
"unsaved-changes"
|
|
41
47
|
],
|
|
42
48
|
"author": "mehdashti",
|
|
43
49
|
"license": "MIT",
|