performa 1.0.0 → 1.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/context.tsx","../src/core/utils.ts","../src/core/theme.tsx","../src/components/Alert.tsx","../src/components/DateTimeInput.tsx","../src/components/TextInput.tsx","../src/components/SelectInput.tsx","../src/components/TextAreaInput.tsx","../src/components/CheckboxInput.tsx","../src/components/ToggleInput.tsx","../src/components/RadioInput.tsx","../src/core/types.ts","../src/components/FileInput.tsx","../src/components/HiddenInput.tsx","../src/components/SubmitInput.tsx","../src/components/NoneInput.tsx","../src/components/Form.tsx","../src/adapters/react-router.tsx"],"names":["createContext","useContext","jsx","memo","useState","useRef","useEffect","jsxs","Calendar","ChevronLeft","ChevronRight","Clock","Eye","EyeOff","Fragment","useFetcher"],"mappings":"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","file":"react-router.cjs","sourcesContent":["import { createContext, useContext } from 'react';\nimport type { FormContextValue, FormState, ResolvedFormConfig } from './types';\n\n/**\n * Form context for sharing form state and configuration with child components\n */\nexport const FormContext = createContext<FormContextValue | null>(null);\n\n/**\n * Hook to access form context\n * @throws Error if used outside of a Form component\n */\nexport function useFormContext(): FormContextValue {\n const context = useContext(FormContext);\n if (!context) {\n throw new Error('useFormContext must be used within a Form component');\n }\n return context;\n}\n\n/**\n * Hook to get the current form state\n */\nexport function useFormState(): FormState {\n const { state } = useFormContext();\n return state;\n}\n\n/**\n * Hook to get the form configuration\n */\nexport function useFormConfig(): ResolvedFormConfig {\n const { config } = useFormContext();\n return config;\n}\n\n/**\n * Hook to get errors for a specific field\n */\nexport function useFieldError(fieldName: string): string | undefined {\n const { state } = useFormContext();\n return state.errors?.[fieldName];\n}\n","/**\n * Utility functions for the form library\n */\n\n/**\n * Convert bytes to human-readable format\n */\nexport function bytesToHumanReadable(bytes: number): string {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n if (bytes === 0) return '0 Bytes';\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return Math.round((bytes / Math.pow(1024, i)) * 100) / 100 + ' ' + sizes[i];\n}\n\n/**\n * Check if a filename represents an image based on extension\n */\nexport function isImage(filename: string): boolean {\n const imageExtensions = [\n '.jpg',\n '.jpeg',\n '.png',\n '.gif',\n '.webp',\n '.svg',\n '.bmp',\n '.tiff',\n '.ico',\n ];\n const ext = filename.toLowerCase().slice(filename.lastIndexOf('.'));\n return imageExtensions.includes(ext);\n}\n\n/**\n * Grid width classes for responsive layouts\n */\nexport const widthClasses = {\n 1: 'col-span-12 @lg:col-span-1',\n 2: 'col-span-4 @lg:col-span-2',\n 3: 'col-span-6 @lg:col-span-3',\n 4: 'col-span-8 @lg:col-span-4',\n 5: 'col-span-12 @lg:col-span-5',\n 6: 'col-span-12 @lg:col-span-6',\n 7: 'col-span-12 @lg:col-span-7',\n 8: 'col-span-12 @lg:col-span-8',\n 9: 'col-span-12 @lg:col-span-9',\n 10: 'col-span-12 @lg:col-span-10',\n 11: 'col-span-12 @lg:col-span-11',\n 12: 'col-span-12',\n} as const;\n","import { createContext, useContext, useMemo, type ReactNode } from 'react';\n\n/**\n * Theme configuration for form components\n */\nexport type FormTheme = {\n /**\n * Whether to include dark mode styles\n * @default true\n */\n darkMode?: boolean;\n\n /**\n * Base classes applied to all form groups\n */\n formGroup?: string;\n\n /**\n * Classes for the form container\n */\n form?: string;\n\n /**\n * Classes for the fieldset/grid container\n */\n fieldset?: string;\n\n /**\n * Label styling\n */\n label?: {\n base?: string;\n required?: string;\n };\n\n /**\n * Input styling\n */\n input?: {\n base?: string;\n error?: string;\n disabled?: string;\n focus?: string;\n };\n\n /**\n * Select styling\n */\n select?: {\n base?: string;\n error?: string;\n disabled?: string;\n option?: string;\n };\n\n /**\n * Textarea styling\n */\n textarea?: {\n base?: string;\n error?: string;\n disabled?: string;\n };\n\n /**\n * Checkbox styling\n */\n checkbox?: {\n base?: string;\n error?: string;\n label?: string;\n };\n\n /**\n * Toggle/switch styling\n */\n toggle?: {\n track?: string;\n trackActive?: string;\n thumb?: string;\n label?: string;\n };\n\n /**\n * Radio button styling\n */\n radio?: {\n base?: string;\n label?: string;\n group?: string;\n };\n\n /**\n * File input styling\n */\n file?: {\n dropzone?: string;\n dropzoneActive?: string;\n dropzoneError?: string;\n icon?: string;\n text?: string;\n hint?: string;\n };\n\n /**\n * Submit button styling\n */\n submit?: {\n base?: string;\n loading?: string;\n spinner?: string;\n };\n\n /**\n * Error message styling\n */\n error?: string;\n\n /**\n * Alert styling\n */\n alert?: {\n base?: string;\n error?: string;\n success?: string;\n warning?: string;\n info?: string;\n };\n\n /**\n * DateTime picker styling\n */\n datetime?: {\n input?: string;\n dropdown?: string;\n picker?: string;\n calendar?: string;\n day?: string;\n daySelected?: string;\n dayButton?: string;\n dayButtonSelected?: string;\n timeInput?: string;\n timeLabel?: string;\n periodButton?: string;\n periodButtonActive?: string;\n iconButton?: string;\n navButton?: string;\n monthYear?: string;\n weekday?: string;\n formatButton?: string;\n };\n\n /**\n * Button styling\n */\n button?: {\n primary?: string;\n secondary?: string;\n };\n\n /**\n * Readonly display styling\n */\n readonly?: string;\n\n /**\n * None/display field styling\n */\n none?: {\n container?: string;\n label?: string;\n value?: string;\n };\n};\n\n/**\n * Labels/text customization\n */\nexport type FormLabels = {\n required?: string;\n loading?: string;\n fileUpload?: {\n clickToUpload?: string;\n dragAndDrop?: string;\n allowedTypes?: string;\n maxSize?: string;\n };\n datetime?: {\n clear?: string;\n done?: string;\n timeFormat?: string;\n weekdays?: string[];\n };\n select?: {\n loading?: string;\n noOptions?: string;\n };\n};\n\n/**\n * Complete form configuration\n */\nexport type FormThemeConfig = {\n theme?: FormTheme;\n labels?: FormLabels;\n};\n\n/**\n * Default theme with Tailwind classes\n */\nexport const defaultTheme: FormTheme = {\n darkMode: true,\n formGroup: 'form-group',\n form: 'w-full',\n fieldset: '@container grid grid-cols-12 gap-4',\n label: {\n base: 'block text-sm font-medium text-gray-700 dark:text-gray-300',\n required: 'text-red-500 ml-1',\n },\n input: {\n base: 'block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring focus:ring-primary focus:border-primary',\n error: 'border-red-500 dark:border-red-400',\n disabled:\n 'disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n focus: 'focus:outline-none focus:ring focus:ring-primary focus:border-primary',\n },\n select: {\n base: 'mt-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring focus:ring-primary focus:border-primary disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n error: 'border-red-500 dark:border-red-400',\n disabled:\n 'disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n option: 'bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100',\n },\n textarea: {\n base: 'mt-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring focus:ring-primary focus:border-primary disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n error: 'border-red-500 dark:border-red-400',\n disabled:\n 'disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n },\n checkbox: {\n base: 'h-4 w-4 text-primary focus:ring-primary border-gray-300 dark:border-gray-600 dark:bg-gray-800 rounded disabled:cursor-not-allowed',\n error: 'border-red-500 dark:border-red-400',\n label: 'ml-2 block text-sm font-medium text-gray-700 dark:text-gray-300',\n },\n toggle: {\n track: 'absolute inset-0 rounded-full transition-colors duration-200 bg-gray-300 dark:bg-gray-600 peer-focus:ring-2 peer-focus:ring-primary peer-focus:ring-offset-2 dark:peer-focus:ring-offset-gray-800',\n trackActive:\n 'peer-checked:bg-primary peer-checked:dark:bg-primary-light',\n thumb: 'absolute left-1 top-1 w-4 h-4 bg-white dark:bg-gray-200 rounded-full transition-transform duration-200 peer-checked:translate-x-5',\n label: 'block text-sm font-medium text-gray-700 dark:text-gray-300',\n },\n radio: {\n base: 'h-4 w-4 text-primary focus:ring-primary border-gray-300 dark:border-gray-600 dark:bg-gray-800 disabled:cursor-not-allowed',\n label: 'ml-2 text-sm text-gray-700 dark:text-gray-300',\n group: 'mt-1',\n },\n file: {\n dropzone:\n 'flex flex-col items-center justify-center w-full p-6 border-2 border-dashed rounded-md cursor-pointer border-gray-300 dark:border-gray-600 hover:border-primary dark:hover:border-primary transition-colors duration-200',\n dropzoneActive: 'border-primary bg-primary-50 dark:bg-primary-900/20',\n dropzoneError:\n 'border-red-500 dark:border-red-400 hover:border-red-500 dark:hover:border-red-400',\n icon: 'w-8 h-8 text-gray-400 dark:text-gray-500',\n text: 'mt-2 text-sm text-gray-500 dark:text-gray-400',\n hint: 'mt-1 text-xs text-gray-500 dark:text-gray-400',\n },\n submit: {\n base: 'mt-1 flex items-center justify-center w-full px-4 py-2 border border-transparent rounded-md shadow-sm text-white bg-primary hover:bg-primary-dark dark:bg-primary-light dark:hover:bg-primary focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-800 focus:ring-primary transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed',\n loading: 'opacity-75',\n spinner: 'mr-3 -ml-1 size-5 animate-spin text-white',\n },\n error: 'mt-1 text-sm text-red-600 dark:text-red-400',\n alert: {\n base: 'p-4 mb-4 border rounded-md',\n error: 'bg-red-50 dark:bg-red-900/20 text-red-800 dark:text-red-200 border-red-200 dark:border-red-800',\n success:\n 'bg-green-50 dark:bg-green-900/20 text-green-800 dark:text-green-200 border-green-200 dark:border-green-800',\n warning:\n 'bg-yellow-50 dark:bg-yellow-900/20 text-yellow-800 dark:text-yellow-200 border-yellow-200 dark:border-yellow-800',\n info: 'bg-blue-50 dark:bg-blue-900/20 text-blue-800 dark:text-blue-200 border-blue-200 dark:border-blue-800',\n },\n datetime: {\n input: 'block w-full px-3 py-2 pr-10 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring focus:ring-primary focus:border-primary disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed cursor-pointer',\n dropdown: 'absolute z-50 mt-2 p-4 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg shadow-lg w-80',\n picker: 'absolute z-50 mt-2 p-4 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg shadow-lg w-80',\n calendar: 'grid grid-cols-7 gap-1 mb-4',\n day: 'p-2 text-sm rounded hover:bg-primary hover:text-white transition-colors text-gray-700 dark:text-gray-300',\n daySelected: 'bg-primary text-white',\n dayButton:\n 'p-2 text-sm rounded hover:bg-primary hover:text-white transition-colors text-gray-700 dark:text-gray-300',\n dayButtonSelected: 'bg-primary text-white',\n timeInput:\n 'w-14 px-2 py-1 text-center border border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n timeLabel: 'text-xs font-medium text-gray-700 dark:text-gray-300',\n periodButton:\n 'px-3 py-1 text-xs rounded bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300',\n periodButtonActive: 'bg-primary text-white',\n iconButton: 'absolute right-2 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400',\n navButton: 'p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded text-gray-700 dark:text-white',\n monthYear: 'text-sm font-medium text-gray-900 dark:text-gray-100',\n weekday: 'text-center text-xs font-medium text-gray-500 dark:text-gray-400 p-2',\n formatButton: 'px-2 py-1 text-xs bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded hover:bg-gray-200 dark:hover:bg-gray-600',\n },\n button: {\n primary: 'flex-1 px-3 py-2 text-sm bg-primary text-white rounded hover:bg-primary-dark focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2',\n secondary: 'flex-1 px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300',\n },\n readonly: 'mt-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n none: {\n container: 'form-group',\n label: 'block text-sm font-medium text-gray-700 dark:text-gray-300',\n value: 'mt-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n },\n};\n\n/**\n * Theme without dark mode classes\n */\nexport const lightOnlyTheme: FormTheme = {\n darkMode: false,\n formGroup: 'form-group',\n form: 'w-full',\n fieldset: '@container grid grid-cols-12 gap-4',\n label: {\n base: 'block text-sm font-medium text-gray-700',\n required: 'text-red-500 ml-1',\n },\n input: {\n base: 'block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-white text-gray-900 placeholder-gray-400 focus:outline-none focus:ring focus:ring-primary focus:border-primary',\n error: 'border-red-500',\n disabled: 'disabled:bg-gray-100 disabled:cursor-not-allowed',\n focus: 'focus:outline-none focus:ring focus:ring-primary focus:border-primary',\n },\n select: {\n base: 'mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-white text-gray-900 focus:outline-none focus:ring focus:ring-primary focus:border-primary disabled:bg-gray-100 disabled:cursor-not-allowed',\n error: 'border-red-500',\n disabled: 'disabled:bg-gray-100 disabled:cursor-not-allowed',\n option: 'bg-white text-gray-900',\n },\n textarea: {\n base: 'mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-white text-gray-900 placeholder-gray-400 focus:outline-none focus:ring focus:ring-primary focus:border-primary disabled:bg-gray-100 disabled:cursor-not-allowed',\n error: 'border-red-500',\n disabled: 'disabled:bg-gray-100 disabled:cursor-not-allowed',\n },\n checkbox: {\n base: 'h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded disabled:cursor-not-allowed',\n error: 'border-red-500',\n label: 'ml-2 block text-sm font-medium text-gray-700',\n },\n toggle: {\n track: 'absolute inset-0 rounded-full transition-colors duration-200 bg-gray-300 peer-focus:ring-2 peer-focus:ring-primary peer-focus:ring-offset-2',\n trackActive: 'peer-checked:bg-primary',\n thumb: 'absolute left-1 top-1 w-4 h-4 bg-white rounded-full transition-transform duration-200 peer-checked:translate-x-5',\n label: 'block text-sm font-medium text-gray-700',\n },\n radio: {\n base: 'h-4 w-4 text-primary focus:ring-primary border-gray-300 disabled:cursor-not-allowed',\n label: 'ml-2 text-sm text-gray-700',\n group: 'mt-1',\n },\n file: {\n dropzone:\n 'flex flex-col items-center justify-center w-full p-6 border-2 border-dashed rounded-md cursor-pointer border-gray-300 hover:border-primary transition-colors duration-200',\n dropzoneActive: 'border-primary bg-primary-50',\n dropzoneError: 'border-red-500 hover:border-red-500',\n icon: 'w-8 h-8 text-gray-400',\n text: 'mt-2 text-sm text-gray-500',\n hint: 'mt-1 text-xs text-gray-500',\n },\n submit: {\n base: 'mt-1 flex items-center justify-center w-full px-4 py-2 border border-transparent rounded-md shadow-sm text-white bg-primary hover:bg-primary-dark focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed',\n loading: 'opacity-75',\n spinner: 'mr-3 -ml-1 size-5 animate-spin text-white',\n },\n error: 'mt-1 text-sm text-red-600',\n alert: {\n base: 'p-4 mb-4 border rounded-md',\n error: 'bg-red-50 text-red-800 border-red-200',\n success:\n 'bg-green-50 text-green-800 border-green-200',\n warning:\n 'bg-yellow-50 text-yellow-800 border-yellow-200',\n info: 'bg-blue-50 text-blue-800 border-blue-200',\n },\n datetime: {\n input: 'block w-full px-3 py-2 pr-10 border border-gray-300 rounded-md shadow-sm bg-white text-gray-900 placeholder-gray-400 focus:outline-none focus:ring focus:ring-primary focus:border-primary disabled:bg-gray-100 disabled:cursor-not-allowed cursor-pointer',\n dropdown: 'absolute z-50 mt-2 p-4 bg-white border border-gray-300 rounded-lg shadow-lg w-80',\n picker: 'absolute z-50 mt-2 p-4 bg-white border border-gray-300 rounded-lg shadow-lg w-80',\n calendar: 'grid grid-cols-7 gap-1 mb-4',\n day: 'p-2 text-sm rounded hover:bg-primary hover:text-white transition-colors text-gray-700',\n daySelected: 'bg-primary text-white',\n dayButton:\n 'p-2 text-sm rounded hover:bg-primary hover:text-white transition-colors text-gray-700',\n dayButtonSelected: 'bg-primary text-white',\n timeInput:\n 'w-14 px-2 py-1 text-center border border-gray-300 rounded bg-white text-gray-900',\n timeLabel: 'text-xs font-medium text-gray-700',\n periodButton: 'px-3 py-1 text-xs rounded bg-gray-100 text-gray-700',\n periodButtonActive: 'bg-primary text-white',\n iconButton: 'absolute right-2 top-1/2 -translate-y-1/2 text-gray-500',\n navButton: 'p-1 hover:bg-gray-100 rounded text-gray-700',\n monthYear: 'text-sm font-medium text-gray-900',\n weekday: 'text-center text-xs font-medium text-gray-500 p-2',\n formatButton: 'px-2 py-1 text-xs bg-gray-100 text-gray-700 rounded hover:bg-gray-200',\n },\n button: {\n primary: 'flex-1 px-3 py-2 text-sm bg-primary text-white rounded hover:bg-primary-dark focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2',\n secondary: 'flex-1 px-3 py-2 text-sm border border-gray-300 rounded hover:bg-gray-50 text-gray-700',\n },\n readonly: 'mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-gray-100 text-gray-900',\n none: {\n container: 'form-group',\n label: 'block text-sm font-medium text-gray-700',\n value: 'mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-gray-100 text-gray-900',\n },\n};\n\n/**\n * Default labels\n */\nexport const defaultLabels: FormLabels = {\n required: '*',\n loading: 'Loading...',\n fileUpload: {\n clickToUpload: 'Click to upload',\n dragAndDrop: 'or drag and drop',\n allowedTypes: 'Allowed types:',\n maxSize: 'Max size:',\n },\n datetime: {\n clear: 'Clear',\n done: 'Done',\n timeFormat: 'Time Format',\n },\n select: {\n loading: 'Loading options...',\n noOptions: 'No options available',\n },\n};\n\n/**\n * Theme context type\n */\ntype ThemeContextType = {\n theme: FormTheme;\n labels: FormLabels;\n};\n\n/**\n * Theme context\n */\nconst ThemeContext = createContext<ThemeContextType>({\n theme: defaultTheme,\n labels: defaultLabels,\n});\n\n/**\n * Hook to access the current theme\n */\nexport function useFormTheme(): FormTheme {\n const { theme } = useContext(ThemeContext);\n return theme;\n}\n\n/**\n * Hook to access the current labels\n */\nexport function useFormLabels(): FormLabels {\n const { labels } = useContext(ThemeContext);\n return labels;\n}\n\n/**\n * Hook to access both theme and labels\n */\nexport function useFormThemeConfig(): ThemeContextType {\n return useContext(ThemeContext);\n}\n\n/**\n * Deep merge utility for theme objects\n */\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] !== undefined) {\n if (\n typeof source[key] === 'object' &&\n source[key] !== null &&\n !Array.isArray(source[key]) &&\n typeof target[key] === 'object' &&\n target[key] !== null\n ) {\n result[key] = deepMerge(\n target[key] as object,\n source[key] as object\n ) as T[Extract<keyof T, string>];\n } else {\n result[key] = source[key] as T[Extract<keyof T, string>];\n }\n }\n }\n\n return result;\n}\n\nexport type FormThemeProviderProps = {\n children: ReactNode;\n /**\n * Custom theme configuration (will be merged with default)\n */\n theme?: Partial<FormTheme>;\n /**\n * Custom labels (will be merged with default)\n */\n labels?: Partial<FormLabels>;\n /**\n * Use light-only theme as base (no dark mode classes)\n */\n lightOnly?: boolean;\n};\n\n/**\n * Theme provider component\n * Wrap your app or form container with this to customize styling\n *\n * @example\n * ```tsx\n * <FormThemeProvider\n * theme={{\n * input: { base: 'my-custom-input-class' },\n * submit: { base: 'btn btn-primary' }\n * }}\n * labels={{\n * fileUpload: { clickToUpload: 'Upload a file' }\n * }}\n * >\n * <Form config={formConfig} />\n * </FormThemeProvider>\n * ```\n */\nexport function FormThemeProvider({\n children,\n theme,\n labels,\n lightOnly = false,\n}: FormThemeProviderProps) {\n const baseTheme = lightOnly ? lightOnlyTheme : defaultTheme;\n\n const mergedTheme = useMemo(\n () => (theme ? deepMerge(baseTheme, theme) : baseTheme),\n [theme, baseTheme]\n );\n\n const mergedLabels = useMemo(\n () => (labels ? deepMerge(defaultLabels, labels) : defaultLabels),\n [labels]\n );\n\n const contextValue = useMemo(\n () => ({ theme: mergedTheme, labels: mergedLabels }),\n [mergedTheme, mergedLabels]\n );\n\n return (\n <ThemeContext.Provider value={contextValue}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\n/**\n * Utility to create a complete custom theme\n */\nexport function createTheme(\n customTheme: Partial<FormTheme>,\n basedOn: 'default' | 'lightOnly' = 'default'\n): FormTheme {\n const baseTheme = basedOn === 'lightOnly' ? lightOnlyTheme : defaultTheme;\n return deepMerge(baseTheme, customTheme);\n}\n\n/**\n * Utility to combine class names, filtering out undefined/null values\n */\nexport function cx(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","import { memo } from 'react';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type AlertProps = {\n type: 'error' | 'success' | 'warning' | 'info';\n message: string;\n className?: string;\n};\n\nfunction Alert({ type, message, className = '' }: AlertProps) {\n const theme = useFormTheme();\n\n const alertClass = theme.alert?.[type] ?? '';\n\n return (\n <div\n className={cx(theme.alert?.base, alertClass, className)}\n role=\"alert\"\n >\n {message}\n </div>\n );\n}\n\nexport default memo(Alert);\n","import { useEffect, useState, useRef, memo } from 'react';\nimport { Calendar, ChevronLeft, ChevronRight, Clock } from 'lucide-react';\nimport type { FormField } from '../core/types';\nimport { useFormTheme, useFormLabels, cx } from '../core/theme';\n\nexport type DateTimeInputProps = Omit<\n FormField,\n 'type' | 'options' | 'defaultChecked'\n> & {\n name: string;\n};\n\nfunction DateTimeInput({\n label,\n name,\n placeholder,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: DateTimeInputProps) {\n const [selectedDate, setSelectedDate] = useState<Date | null>(null);\n const [displayValue, setDisplayValue] = useState('');\n const [showPicker, setShowPicker] = useState(false);\n const [currentMonth, setCurrentMonth] = useState(new Date());\n const [hours, setHours] = useState('12');\n const [minutes, setMinutes] = useState('00');\n const [period, setPeriod] = useState<'AM' | 'PM'>('PM');\n const [use24Hour, setUse24Hour] = useState(true);\n const pickerRef = useRef<HTMLDivElement>(null);\n const theme = useFormTheme();\n const labels = useFormLabels();\n\n useEffect(() => {\n if (defaultValue) {\n const date = new Date(defaultValue.toString());\n if (!isNaN(date.getTime())) {\n setSelectedDate(date);\n setCurrentMonth(date);\n updateDisplayValue(date);\n\n // Set time\n const h24 = date.getHours();\n const m = date.getMinutes();\n const p = h24 >= 12 ? 'PM' : 'AM';\n const h12 = h24 % 12 || 12;\n\n if (use24Hour) {\n setHours(String(h24).padStart(2, '0'));\n } else {\n setHours(String(h12).padStart(2, '0'));\n }\n setMinutes(String(m).padStart(2, '0'));\n setPeriod(p);\n }\n }\n }, [defaultValue, use24Hour]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n pickerRef.current &&\n !pickerRef.current.contains(event.target as Node)\n ) {\n setShowPicker(false);\n }\n };\n\n if (showPicker) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [showPicker]);\n\n const updateDisplayValue = (date: Date) => {\n setDisplayValue(date.toLocaleString());\n };\n\n const getDaysInMonth = (date: Date) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const daysInMonth = lastDay.getDate();\n const startingDayOfWeek = firstDay.getDay();\n\n return { daysInMonth, startingDayOfWeek };\n };\n\n const handleDateSelect = (day: number) => {\n let hour24 = parseInt(hours, 10);\n if (!use24Hour) {\n if (period === 'PM' && hour24 !== 12) hour24 += 12;\n if (period === 'AM' && hour24 === 12) hour24 = 0;\n }\n\n const newDate = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth(),\n day,\n hour24,\n parseInt(minutes, 10)\n );\n setSelectedDate(newDate);\n updateDisplayValue(newDate);\n };\n\n const handleTimeChange = () => {\n if (selectedDate) {\n const newDate = new Date(selectedDate);\n let h = parseInt(hours, 10);\n if (!use24Hour) {\n if (period === 'PM' && h !== 12) h += 12;\n if (period === 'AM' && h === 12) h = 0;\n }\n newDate.setHours(h, parseInt(minutes, 10));\n setSelectedDate(newDate);\n updateDisplayValue(newDate);\n }\n };\n\n const changeMonth = (offset: number) => {\n setCurrentMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() + offset, 1)\n );\n };\n\n const renderCalendar = () => {\n const { daysInMonth, startingDayOfWeek } = getDaysInMonth(currentMonth);\n const days = [];\n\n // Empty cells for days before month starts\n for (let i = 0; i < startingDayOfWeek; i++) {\n days.push(<div key={`empty-${i}`} className=\"p-2\" />);\n }\n\n // Days of the month\n for (let day = 1; day <= daysInMonth; day++) {\n const isSelected =\n selectedDate &&\n selectedDate.getDate() === day &&\n selectedDate.getMonth() === currentMonth.getMonth() &&\n selectedDate.getFullYear() === currentMonth.getFullYear();\n\n days.push(\n <button\n key={day}\n type=\"button\"\n onClick={() => handleDateSelect(day)}\n className={cx(\n theme.datetime?.day,\n isSelected && theme.datetime?.daySelected\n )}\n >\n {day}\n </button>\n );\n }\n\n return days;\n };\n\n return (\n <div className={cx(theme.formGroup, className)} ref={pickerRef}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <label htmlFor={name} className={theme.label?.base}>\n {label}{' '}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <div className=\"relative mt-1\">\n <input\n type=\"text\"\n value={displayValue}\n placeholder={placeholder}\n readOnly\n onFocus={() => !disabled && setShowPicker(true)}\n onClick={() => !disabled && setShowPicker(true)}\n className={cx(\n theme.datetime?.input,\n error && theme.input?.error\n )}\n />\n <button\n type=\"button\"\n onClick={() => !disabled && setShowPicker(true)}\n disabled={disabled}\n className={theme.datetime?.iconButton}\n >\n <Calendar className=\"h-5 w-5\" />\n </button>\n\n {/* Hidden input for form submission */}\n <input\n type=\"hidden\"\n name={name}\n id={name}\n value={selectedDate ? selectedDate.toISOString() : ''}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n />\n\n {/* DateTime Picker Dropdown */}\n {showPicker && (\n <div className={theme.datetime?.dropdown}>\n {/* Month Navigation */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={() => changeMonth(-1)}\n className={theme.datetime?.navButton}\n >\n <ChevronLeft className=\"w-5 h-5\" />\n </button>\n <span className={theme.datetime?.monthYear}>\n {currentMonth.toLocaleDateString('en-GB', {\n month: 'long',\n year: 'numeric',\n })}\n </span>\n <button\n type=\"button\"\n onClick={() => changeMonth(1)}\n className={theme.datetime?.navButton}\n >\n <ChevronRight className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Weekday Headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {(\n labels.datetime?.weekdays ?? [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa',\n ]\n ).map((day: string) => (\n <div\n key={day}\n className={theme.datetime?.weekday}\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar Days */}\n <div className=\"grid grid-cols-7 gap-1 mb-4\">\n {renderCalendar()}\n </div>\n\n {/* Time Picker */}\n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className={theme.datetime?.timeLabel}>\n {labels.datetime?.timeFormat}\n </span>\n <button\n type=\"button\"\n onClick={() => {\n const newFormat = !use24Hour;\n setUse24Hour(newFormat);\n\n // Convert current time to new format\n if (selectedDate) {\n const h24 = selectedDate.getHours();\n if (newFormat) {\n setHours(\n String(h24).padStart(2, '0')\n );\n } else {\n const h12 = h24 % 12 || 12;\n setHours(\n String(h12).padStart(2, '0')\n );\n setPeriod(\n h24 >= 12 ? 'PM' : 'AM'\n );\n }\n }\n }}\n className={theme.datetime?.formatButton}\n >\n {use24Hour ? '24hr' : '12hr'}\n </button>\n </div>\n <div className=\"flex items-center justify-center gap-2\">\n <Clock className=\"h-4 w-4 text-gray-500 dark:text-gray-400\" />\n <input\n type=\"number\"\n min={use24Hour ? '0' : '1'}\n max={use24Hour ? '23' : '12'}\n value={hours}\n onChange={(e) => {\n const val = parseInt(e.target.value, 10);\n const max = use24Hour ? 23 : 12;\n const min = use24Hour ? 0 : 1;\n if (val >= min && val <= max) {\n setHours(\n e.target.value.padStart(2, '0')\n );\n handleTimeChange();\n }\n }}\n className={theme.datetime?.timeInput}\n />\n <span className=\"text-gray-900 dark:text-gray-100\">\n :\n </span>\n <input\n type=\"number\"\n min=\"0\"\n max=\"59\"\n value={minutes}\n onChange={(e) => {\n const val = parseInt(e.target.value, 10);\n if (val >= 0 && val <= 59) {\n setMinutes(\n e.target.value.padStart(2, '0')\n );\n handleTimeChange();\n }\n }}\n className={theme.datetime?.timeInput}\n />\n {!use24Hour && (\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => {\n setPeriod('AM');\n handleTimeChange();\n }}\n className={cx(\n theme.datetime?.periodButton,\n period === 'AM' &&\n theme.datetime\n ?.periodButtonActive\n )}\n >\n AM\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setPeriod('PM');\n handleTimeChange();\n }}\n className={cx(\n theme.datetime?.periodButton,\n period === 'PM' &&\n theme.datetime\n ?.periodButtonActive\n )}\n >\n PM\n </button>\n </div>\n )}\n </div>\n </div>\n\n {/* Clear and Done buttons */}\n <div className=\"flex gap-2 mt-4\">\n <button\n type=\"button\"\n onClick={() => {\n setSelectedDate(null);\n setDisplayValue('');\n setShowPicker(false);\n }}\n className={theme.button?.secondary}\n >\n {labels.datetime?.clear}\n </button>\n <button\n type=\"button\"\n onClick={() => setShowPicker(false)}\n className={theme.button?.primary}\n >\n {labels.datetime?.done}\n </button>\n </div>\n </div>\n )}\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(DateTimeInput);\n","import { Eye, EyeOff } from 'lucide-react';\nimport { useState, memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type TextInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultChecked'\n> & {\n type: 'text' | 'email' | 'password' | 'number';\n name: string;\n};\n\nfunction TextInput({\n label,\n placeholder,\n name,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n type = 'text',\n before,\n beforeClassName,\n after,\n afterClassName,\n}: TextInputProps) {\n const [passwordVisible, setPasswordVisible] = useState(false);\n const theme = useFormTheme();\n\n const onTogglePassword = () => {\n setPasswordVisible((prev) => !prev);\n };\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <label htmlFor={name} className={theme.label?.base}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <div className=\"relative mt-1\">\n <input\n type={\n type === 'password'\n ? passwordVisible\n ? 'text'\n : 'password'\n : type\n }\n name={name}\n id={name}\n placeholder={placeholder}\n defaultValue={defaultValue?.toString()}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className={cx(\n theme.input?.base,\n error && theme.input?.error,\n theme.input?.disabled\n )}\n />\n {type === 'password' && (\n <button\n type=\"button\"\n onClick={onTogglePassword}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 z-10\"\n aria-label={\n passwordVisible ? 'Hide password' : 'Show password'\n }\n >\n {passwordVisible ? (\n <Eye className=\"h-5 w-5\" />\n ) : (\n <EyeOff className=\"h-5 w-5 opacity-50\" />\n )}\n <span className=\"sr-only\">\n {passwordVisible\n ? 'Hide password'\n : 'Show password'}\n </span>\n </button>\n )}\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(TextInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, useFormLabels, cx } from '../core/theme';\n\nexport type SelectInputProps = Omit<\n ResolvedFormField,\n 'type' | 'defaultChecked'\n> & {\n name: string;\n};\n\nfunction SelectInput({\n label,\n name,\n options,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: SelectInputProps) {\n const theme = useFormTheme();\n const labels = useFormLabels();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <label htmlFor={name} className={theme.label?.base}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <select\n name={name}\n id={name}\n defaultValue={defaultValue?.toString()}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className={cx(\n theme.select?.base,\n error && theme.select?.error\n )}\n >\n {!options || options.length === 0 ? (\n <option value=\"\" disabled className={theme.select?.option}>\n {!options\n ? labels.select?.loading\n : labels.select?.noOptions}\n </option>\n ) : (\n options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n className={theme.select?.option}\n >\n {option.label}\n </option>\n ))\n )}\n </select>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(SelectInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type TextAreaInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultChecked'\n> & {\n name: string;\n};\n\nfunction TextAreaInput({\n label,\n name,\n placeholder,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: TextAreaInputProps) {\n const theme = useFormTheme();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <label htmlFor={name} className={theme.label?.base}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <textarea\n name={name}\n id={name}\n placeholder={placeholder}\n defaultValue={defaultValue?.toString()}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className={cx(\n theme.textarea?.base,\n error && theme.textarea?.error\n )}\n rows={4}\n />\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(TextAreaInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type CheckboxInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultValue'\n> & {\n name: string;\n};\n\nfunction CheckboxInput({\n label,\n name,\n defaultChecked,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: CheckboxInputProps) {\n const theme = useFormTheme();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n name={name}\n id={name}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className={cx(\n theme.checkbox?.base,\n error && theme.checkbox?.error\n )}\n />\n <label htmlFor={name} className={theme.checkbox?.label}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(CheckboxInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type ToggleInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultValue'\n> & {\n name: string;\n};\n\nfunction ToggleInput({\n label,\n name,\n defaultChecked,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: ToggleInputProps) {\n const theme = useFormTheme();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <div className=\"flex items-center justify-between\">\n <label htmlFor={name} className={theme.toggle?.label}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <label\n htmlFor={name}\n className=\"relative inline-block w-11 h-6 cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n name={name}\n id={name}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className=\"sr-only peer\"\n />\n <span\n className={cx(\n theme.toggle?.track,\n !disabled && theme.toggle?.trackActive,\n disabled && 'cursor-not-allowed'\n )}\n ></span>\n <span className={theme.toggle?.thumb}></span>\n </label>\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(ToggleInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type RadioInputProps = Omit<\n ResolvedFormField,\n 'type' | 'defaultChecked'\n> & {\n name: string;\n};\n\nfunction RadioInput({\n label,\n name,\n options,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: RadioInputProps) {\n const theme = useFormTheme();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <div id={`${name}-group`} className={theme.label?.base}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </div>\n <div\n className={theme.radio?.group}\n role=\"radiogroup\"\n aria-labelledby={`${name}-group`}\n >\n {options?.map((option) => (\n <div key={option.value} className=\"flex items-center mb-2\">\n <input\n type=\"radio\"\n name={name}\n id={`${name}-${option.value}`}\n value={option.value}\n defaultChecked={defaultValue === option.value}\n disabled={disabled}\n aria-invalid={!!error}\n className={theme.radio?.base}\n />\n <label\n htmlFor={`${name}-${option.value}`}\n className={theme.radio?.label}\n >\n {option.label}\n </label>\n </div>\n ))}\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(RadioInput);\n","/**\n * Common MIME types for file validation\n */\nexport const mimeTypes = {\n JPG: 'image/jpeg',\n JPEG: 'image/jpeg',\n PNG: 'image/png',\n GIF: 'image/gif',\n WEBP: 'image/webp',\n SVG: 'image/svg+xml',\n BMP: 'image/bmp',\n TIFF: 'image/tiff',\n ICO: 'image/x-icon',\n PDF: 'application/pdf',\n DOC: 'application/msword',\n DOCX: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n XLS: 'application/vnd.ms-excel',\n XLSX: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n PPT: 'application/vnd.ms-powerpoint',\n PPTX: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ZIP: 'application/zip',\n RAR: 'application/x-rar-compressed',\n '7Z': 'application/x-7z-compressed',\n TAR: 'application/x-tar',\n GZ: 'application/x-gzip',\n BZ2: 'application/x-bzip2',\n ISO: 'application/x-iso9660-image',\n SWF: 'application/x-shockwave-flash',\n TTF: 'application/x-font-ttf',\n MP4: 'video/mp4',\n MP3: 'audio/mpeg',\n MOV: 'video/quicktime',\n AVI: 'video/x-msvideo',\n WMV: 'video/x-ms-wmv',\n MPEG: 'video/mpeg',\n TXT: 'text/plain',\n CSV: 'text/csv',\n} as const;\n\nexport type MimeTypeKey = keyof typeof mimeTypes;\n\n/**\n * Validation rules that can be applied to form fields\n */\nexport type ValidationRules = {\n required?: boolean;\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n isEmail?: boolean;\n isNumber?: boolean;\n isPhone?: boolean;\n isUrl?: boolean;\n isDate?: boolean;\n isTime?: boolean;\n weakPasswordCheck?: boolean;\n matches?: string;\n denyHtml?: boolean;\n isAlphanumeric?: boolean;\n mimeTypes?: Array<MimeTypeKey>;\n maxFileSize?: number;\n mustBeEither?: Array<string | number>;\n minValue?: number;\n maxValue?: number;\n isInteger?: boolean;\n isSlug?: boolean;\n isUUID?: boolean;\n};\n\n/**\n * File metadata returned after upload\n */\nexport type FileMetaData = {\n success: boolean;\n fileName?: string;\n fileType?: string;\n fileSize?: number;\n etag?: string;\n lastModified?: string;\n error?: string;\n};\n\n/**\n * Supported field types (excluding markdown which is unfinished)\n */\nexport type FieldType =\n | 'text'\n | 'email'\n | 'password'\n | 'select'\n | 'textarea'\n | 'checkbox'\n | 'toggle'\n | 'radio'\n | 'file'\n | 'hidden'\n | 'number'\n | 'datetime'\n | 'none'\n | 'submit';\n\n/**\n * Option type for select, radio, and similar fields\n */\nexport type FieldOption = {\n label: string;\n value: string;\n};\n\n/**\n * Grid width options (12-column grid system)\n */\nexport type GridWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\n/**\n * Form field configuration\n */\nexport type FormField = {\n label: string;\n placeholder?: string;\n options?: Array<FieldOption>;\n type: FieldType;\n defaultValue?: string | number;\n defaultChecked?: boolean;\n className?: string;\n disabled?: boolean;\n before?: string;\n beforeClassName?: string;\n after?: string;\n afterClassName?: string;\n error?: string;\n hideSpinner?: boolean;\n width?: GridWidth;\n rules?: ValidationRules;\n metaData?: FileMetaData;\n uploadDir?: string;\n};\n\n/**\n * Form configuration object\n */\nexport type FormConfig = {\n key: string;\n method?: 'get' | 'post';\n encType?:\n | 'application/x-www-form-urlencoded'\n | 'multipart/form-data'\n | 'text/plain';\n action?: string;\n fields: {\n [key: string]: FormField;\n };\n};\n\n/**\n * Resolved form field with options always as array\n */\nexport type ResolvedFormField = FormField;\n\n/**\n * Resolved form config with resolved options\n */\nexport type ResolvedFormConfig = FormConfig;\n\n/**\n * Form errors object\n */\nexport type FormErrors = {\n [key: string]: string | undefined;\n __server?: string;\n};\n\n/**\n * Form context state\n */\nexport type FormState = {\n errors?: FormErrors;\n isSubmitting: boolean;\n};\n\n/**\n * Form context value type\n */\nexport type FormContextValue = {\n state: FormState;\n config: ResolvedFormConfig;\n};\n","import { useState, useRef, memo } from 'react';\nimport { isImage } from '../core/utils';\nimport type { ResolvedFormField, FileMetaData } from '../core/types';\nimport { mimeTypes } from '../core/types';\nimport { useFormTheme, useFormLabels, cx } from '../core/theme';\n\nexport type FileInputProps = Omit<ResolvedFormField, 'type' | 'options'> & {\n name: string;\n metaData?: FileMetaData;\n /**\n * Optional base URL for displaying existing files\n * If provided along with defaultValue, will show preview for images\n */\n baseUrl?: string;\n};\n\nfunction FileInput({\n label,\n name,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n defaultValue,\n metaData,\n uploadDir,\n baseUrl,\n}: FileInputProps) {\n const [fileName, setFileName] = useState<string | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const theme = useFormTheme();\n const labels = useFormLabels();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n setFileName(e.target.files[0].name);\n } else {\n setFileName(null);\n }\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n if (disabled) return;\n\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n if (inputRef.current) {\n inputRef.current.files = e.dataTransfer.files;\n setFileName(e.dataTransfer.files[0].name);\n\n // Trigger change event manually\n const event = new Event('change', { bubbles: true });\n inputRef.current.dispatchEvent(event);\n }\n }\n };\n\n // Build the file URL for preview\n const getFileUrl = () => {\n if (!defaultValue) return null;\n if (baseUrl && uploadDir) {\n return `${baseUrl}/${uploadDir}/${defaultValue}`;\n }\n if (baseUrl) {\n return `${baseUrl}/${defaultValue}`;\n }\n return null;\n };\n\n const fileUrl = getFileUrl();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <div className={cx(theme.label?.base, 'mb-1')}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </div>\n <div className=\"relative\">\n <input\n ref={inputRef}\n type=\"file\"\n name={name}\n id={name}\n disabled={disabled}\n onChange={handleChange}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className=\"sr-only\"\n accept={\n rules?.mimeTypes\n ? rules.mimeTypes.map(type => mimeTypes[type]).join(',')\n : '*'\n }\n />\n <label\n htmlFor={name}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n className={cx(\n theme.file?.dropzone,\n disabled && 'cursor-not-allowed',\n isDragging && theme.file?.dropzoneActive,\n error && theme.file?.dropzoneError\n )}\n >\n <div className=\"flex flex-col items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={theme.file?.icon}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\"\n />\n </svg>\n <p className={theme.file?.text}>\n {fileName ? (\n <span className=\"font-medium text-primary\">\n {fileName}\n </span>\n ) : (\n <>\n <span className=\"font-medium\">\n {labels.fileUpload?.clickToUpload}\n </span>{' '}\n {labels.fileUpload?.dragAndDrop}\n </>\n )}\n </p>\n {rules?.mimeTypes && (\n <p className={theme.file?.hint}>\n {labels.fileUpload?.allowedTypes}{' '}\n {Object.values(rules.mimeTypes).join(', ')}\n </p>\n )}\n {rules?.maxFileSize && (\n <p className={theme.file?.hint}>\n {labels.fileUpload?.maxSize}{' '}\n {Math.round(\n (rules.maxFileSize / 1024 / 1024) * 10\n ) / 10}{' '}\n MB\n </p>\n )}\n </div>\n </label>\n {fileUrl && defaultValue && isImage(defaultValue.toString()) && (\n <>\n <img\n src={fileUrl}\n alt=\"\"\n className=\"mt-2 max-h-40 object-contain rounded-md border border-gray-300 dark:border-gray-600\"\n />\n <a\n href={fileUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-2 inline-flex items-center text-xs text-primary hover:underline dark:text-gray-50\"\n >\n View Current {label}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"ml-1 h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n </a>\n </>\n )}\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(FileInput);\n","import type { ResolvedFormField } from '../core/types';\n\nexport type HiddenInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultChecked' | 'label'\n> & {\n name: string;\n};\n\nexport default function HiddenInput({\n name,\n defaultValue,\n className,\n disabled,\n}: HiddenInputProps) {\n return (\n <input\n type=\"hidden\"\n name={name}\n defaultValue={defaultValue?.toString()}\n disabled={disabled}\n className={className}\n />\n );\n}\n","import type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type SubmitInputProps = Omit<ResolvedFormField, 'type' | 'options'> & {\n name: string;\n loading: boolean;\n};\n\nexport default function SubmitInput({\n label,\n name,\n className,\n disabled,\n loading,\n defaultValue,\n hideSpinner,\n}: SubmitInputProps) {\n const theme = useFormTheme();\n\n return (\n <button\n type=\"submit\"\n name={name}\n disabled={disabled || loading}\n value={defaultValue?.toString() ?? ''}\n className={cx(\n theme.submit?.base,\n loading && theme.submit?.loading,\n className\n )}\n >\n {loading && hideSpinner !== true && (\n <svg\n className={theme.submit?.spinner}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n {label}\n </button>\n );\n}\n","import { memo } from 'react';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type NoneInputProps = {\n label: string;\n value: string;\n className?: string;\n};\n\nfunction NoneInput({ label, value, className }: NoneInputProps) {\n const theme = useFormTheme();\n\n const isJsonString = (str: string) => {\n try {\n JSON.parse(str);\n return true;\n } catch {\n return false;\n }\n };\n\n return (\n <div className={cx(theme.formGroup, className)}>\n <span className={theme.label?.base}>{label}</span>\n <div className={theme.readonly}>\n {isJsonString(value) ? (\n <ul className=\"list-disc list-inside space-y-1\">\n {Object.entries(JSON.parse(value)).map(([key, val]) => (\n <li key={key} className=\"text-sm\">\n <span className=\"font-medium\">{key}:</span>{' '}\n {String(val)}\n </li>\n ))}\n </ul>\n ) : (\n value\n )}\n </div>\n </div>\n );\n}\n\nexport default memo(NoneInput);\n","import type { ReactNode, FormHTMLAttributes } from 'react';\nimport { FormContext } from '../core/context';\nimport { widthClasses } from '../core/utils';\nimport type { ResolvedFormConfig, FormErrors, FormState } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\nimport Alert from './Alert';\nimport DateTimeInput from './DateTimeInput';\nimport TextInput from './TextInput';\nimport SelectInput from './SelectInput';\nimport TextAreaInput from './TextAreaInput';\nimport CheckboxInput from './CheckboxInput';\nimport ToggleInput from './ToggleInput';\nimport RadioInput from './RadioInput';\nimport FileInput from './FileInput';\nimport HiddenInput from './HiddenInput';\nimport SubmitInput from './SubmitInput';\nimport NoneInput from './NoneInput';\n\nexport type FormProps = {\n /**\n * Form configuration object\n */\n config: ResolvedFormConfig;\n /**\n * Additional CSS class names\n */\n className?: string;\n /**\n * Form errors from server validation\n */\n errors?: FormErrors;\n /**\n * Whether the form is currently submitting\n */\n isSubmitting?: boolean;\n /**\n * Custom form element to use (e.g., from a router library)\n * If not provided, uses native <form>\n */\n formElement?: React.ComponentType<\n FormHTMLAttributes<HTMLFormElement> & { children: ReactNode }\n >;\n /**\n * Additional props to pass to the form element\n */\n formProps?: FormHTMLAttributes<HTMLFormElement>;\n /**\n * Base URL for file uploads preview\n */\n fileBaseUrl?: string;\n};\n\n/**\n * Framework-agnostic Form component\n * Renders form fields based on configuration and handles error display\n */\nexport default function Form({\n config,\n className,\n errors,\n isSubmitting = false,\n formElement: FormElement,\n formProps = {},\n fileBaseUrl,\n}: FormProps) {\n const theme = useFormTheme();\n const {\n method = 'post',\n encType = config.encType || 'application/x-www-form-urlencoded',\n action = '',\n fields,\n } = config;\n\n const state: FormState = {\n errors,\n isSubmitting,\n };\n\n const contextValue = {\n state,\n config,\n };\n\n const FormTag = FormElement || 'form';\n\n const formContent = (\n <>\n {errors && '__server' in errors && errors.__server ? (\n <Alert type=\"error\" message={errors.__server} />\n ) : null}\n <fieldset\n className={theme.fieldset}\n disabled={isSubmitting}\n >\n {Object.entries(fields).map(([key, field]) => {\n const fieldError = errors?.[key];\n\n switch (field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'number':\n return (\n <TextInput\n key={key}\n label={field.label}\n placeholder={field.placeholder}\n name={key}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n type={field.type}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'datetime':\n return (\n <DateTimeInput\n key={key}\n label={field.label}\n placeholder={field.placeholder}\n name={key}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'select':\n return (\n <SelectInput\n key={key}\n label={field.label}\n name={key}\n options={field.options}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'textarea':\n return (\n <TextAreaInput\n key={key}\n label={field.label}\n placeholder={field.placeholder}\n name={key}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'checkbox':\n return (\n <CheckboxInput\n key={key}\n label={field.label}\n name={key}\n defaultChecked={field.defaultChecked}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'toggle':\n return (\n <ToggleInput\n key={key}\n label={field.label}\n name={key}\n defaultChecked={field.defaultChecked}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'radio':\n return (\n <RadioInput\n key={key}\n label={field.label}\n name={key}\n options={field.options}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'file':\n return (\n <FileInput\n key={key}\n label={field.label}\n name={key}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n defaultValue={field.defaultValue}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n metaData={field.metaData}\n uploadDir={field.uploadDir}\n baseUrl={fileBaseUrl}\n />\n );\n case 'hidden':\n return (\n <HiddenInput\n key={key}\n name={key}\n defaultValue={field.defaultValue}\n disabled={field.disabled}\n />\n );\n case 'submit':\n return (\n <SubmitInput\n key={key}\n label={field.label}\n name={key}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n rules={field.rules}\n loading={isSubmitting}\n defaultValue={field.defaultValue}\n hideSpinner={field.hideSpinner}\n />\n );\n case 'none':\n return (\n <NoneInput\n key={key}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n value={field.defaultValue?.toString() ?? ''}\n label={field.label}\n />\n );\n default:\n return null;\n }\n })}\n </fieldset>\n </>\n );\n\n return (\n <FormContext.Provider value={contextValue}>\n <FormTag\n method={method}\n encType={encType}\n action={action}\n className={cx(theme.form, className)}\n noValidate\n {...formProps}\n >\n {formContent}\n </FormTag>\n </FormContext.Provider>\n );\n}\n\nexport type { ResolvedFormConfig, FormErrors } from '../core/types';\n","import { useFetcher } from 'react-router';\nimport Form from '../components/Form';\nimport type { ResolvedFormConfig, FormErrors } from '../core/types';\n\nexport type ReactRouterFormProps = {\n /**\n * Form configuration object\n */\n config: ResolvedFormConfig;\n /**\n * Additional CSS class names\n */\n className?: string;\n /**\n * Base URL for file uploads preview\n */\n fileBaseUrl?: string;\n};\n\n/**\n * React Router Form component that integrates with useFetcher\n * Automatically handles form submission state and error display\n *\n * @example\n * ```tsx\n * import { ReactRouterForm } from 'react-formkit/react-router';\n *\n * function MyComponent() {\n * return <ReactRouterForm config={formConfig} />;\n * }\n * ```\n */\nexport function ReactRouterForm({\n config,\n className,\n fileBaseUrl,\n}: ReactRouterFormProps) {\n const fetcher = useFetcher({ key: config.key });\n const errors = fetcher.data?.errors as FormErrors | undefined;\n const isSubmitting = fetcher.state !== 'idle';\n\n return (\n <Form\n config={config}\n className={className}\n errors={errors}\n isSubmitting={isSubmitting}\n formElement={fetcher.Form as any}\n fileBaseUrl={fileBaseUrl}\n />\n );\n}\n\n/**\n * Hook to access React Router fetcher state for a specific form\n * Useful when you need more control over the form submission\n *\n * @example\n * ```tsx\n * const { fetcher, errors, isSubmitting } = useReactRouterForm('my-form');\n * ```\n */\nexport function useReactRouterForm(formKey: string) {\n const fetcher = useFetcher({ key: formKey });\n const errors = fetcher.data?.errors as FormErrors | undefined;\n const isSubmitting = fetcher.state !== 'idle';\n\n return {\n fetcher,\n errors,\n isSubmitting,\n data: fetcher.data,\n };\n}\n\nexport default ReactRouterForm;\n"]}
1
+ {"version":3,"sources":["../src/core/context.tsx","../src/core/utils.ts","../src/core/theme.tsx","../src/components/Alert.tsx","../src/components/DateTimeInput.tsx","../src/components/TextInput.tsx","../src/components/SelectInput.tsx","../src/components/TextAreaInput.tsx","../src/components/CheckboxInput.tsx","../src/components/ToggleInput.tsx","../src/components/RadioInput.tsx","../src/core/types.ts","../src/components/FileInput.tsx","../src/components/HiddenInput.tsx","../src/components/SubmitInput.tsx","../src/components/NoneInput.tsx","../src/components/Form.tsx","../src/adapters/react-router.tsx"],"names":["createContext","useContext","jsx","memo","useState","useRef","useEffect","jsxs","Calendar","ChevronLeft","ChevronRight","Clock","Eye","EyeOff","Fragment","useFetcher"],"mappings":"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","file":"react-router.cjs","sourcesContent":["import { createContext, useContext } from 'react';\nimport type { FormContextValue, FormState, ResolvedFormConfig } from './types';\n\n/**\n * Form context for sharing form state and configuration with child components\n */\nexport const FormContext = createContext<FormContextValue | null>(null);\n\n/**\n * Hook to access form context\n * @throws Error if used outside of a Form component\n */\nexport function useFormContext(): FormContextValue {\n const context = useContext(FormContext);\n if (!context) {\n throw new Error('useFormContext must be used within a Form component');\n }\n return context;\n}\n\n/**\n * Hook to get the current form state\n */\nexport function useFormState(): FormState {\n const { state } = useFormContext();\n return state;\n}\n\n/**\n * Hook to get the form configuration\n */\nexport function useFormConfig(): ResolvedFormConfig {\n const { config } = useFormContext();\n return config;\n}\n\n/**\n * Hook to get errors for a specific field\n */\nexport function useFieldError(fieldName: string): string | undefined {\n const { state } = useFormContext();\n return state.errors?.[fieldName];\n}\n","/**\n * Utility functions for the form library\n */\n\n/**\n * Convert bytes to human-readable format\n */\nexport function bytesToHumanReadable(bytes: number): string {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n if (bytes === 0) return '0 Bytes';\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return Math.round((bytes / Math.pow(1024, i)) * 100) / 100 + ' ' + sizes[i];\n}\n\n/**\n * Check if a filename represents an image based on extension\n */\nexport function isImage(filename: string): boolean {\n const imageExtensions = [\n '.jpg',\n '.jpeg',\n '.png',\n '.gif',\n '.webp',\n '.svg',\n '.bmp',\n '.tiff',\n '.ico',\n ];\n const ext = filename.toLowerCase().slice(filename.lastIndexOf('.'));\n return imageExtensions.includes(ext);\n}\n\n/**\n * Grid width classes for responsive layouts\n */\nexport const widthClasses = {\n 1: 'col-span-12 @lg:col-span-1',\n 2: 'col-span-4 @lg:col-span-2',\n 3: 'col-span-6 @lg:col-span-3',\n 4: 'col-span-8 @lg:col-span-4',\n 5: 'col-span-12 @lg:col-span-5',\n 6: 'col-span-12 @lg:col-span-6',\n 7: 'col-span-12 @lg:col-span-7',\n 8: 'col-span-12 @lg:col-span-8',\n 9: 'col-span-12 @lg:col-span-9',\n 10: 'col-span-12 @lg:col-span-10',\n 11: 'col-span-12 @lg:col-span-11',\n 12: 'col-span-12',\n} as const;\n","import { createContext, useContext, useMemo, type ReactNode } from 'react';\n\n/**\n * Theme configuration for form components\n */\nexport type FormTheme = {\n /**\n * Whether to include dark mode styles\n * @default true\n */\n darkMode?: boolean;\n\n /**\n * Base classes applied to all form groups\n */\n formGroup?: string;\n\n /**\n * Classes for the form container\n */\n form?: string;\n\n /**\n * Classes for the fieldset/grid container\n */\n fieldset?: string;\n\n /**\n * Label styling\n */\n label?: {\n base?: string;\n required?: string;\n };\n\n /**\n * Input styling\n */\n input?: {\n base?: string;\n error?: string;\n disabled?: string;\n focus?: string;\n };\n\n /**\n * Select styling\n */\n select?: {\n base?: string;\n error?: string;\n disabled?: string;\n option?: string;\n };\n\n /**\n * Textarea styling\n */\n textarea?: {\n base?: string;\n error?: string;\n disabled?: string;\n };\n\n /**\n * Checkbox styling\n */\n checkbox?: {\n base?: string;\n error?: string;\n label?: string;\n };\n\n /**\n * Toggle/switch styling\n */\n toggle?: {\n track?: string;\n trackActive?: string;\n thumb?: string;\n label?: string;\n };\n\n /**\n * Radio button styling\n */\n radio?: {\n base?: string;\n label?: string;\n group?: string;\n };\n\n /**\n * File input styling\n */\n file?: {\n dropzone?: string;\n dropzoneActive?: string;\n dropzoneError?: string;\n icon?: string;\n text?: string;\n hint?: string;\n };\n\n /**\n * Submit button styling\n */\n submit?: {\n base?: string;\n loading?: string;\n spinner?: string;\n };\n\n /**\n * Error message styling\n */\n error?: string;\n\n /**\n * Alert styling\n */\n alert?: {\n base?: string;\n error?: string;\n success?: string;\n warning?: string;\n info?: string;\n };\n\n /**\n * DateTime picker styling\n */\n datetime?: {\n input?: string;\n dropdown?: string;\n picker?: string;\n calendar?: string;\n day?: string;\n daySelected?: string;\n dayButton?: string;\n dayButtonSelected?: string;\n timeInput?: string;\n timeLabel?: string;\n periodButton?: string;\n periodButtonActive?: string;\n iconButton?: string;\n navButton?: string;\n monthYear?: string;\n weekday?: string;\n formatButton?: string;\n };\n\n /**\n * Button styling\n */\n button?: {\n primary?: string;\n secondary?: string;\n };\n\n /**\n * Readonly display styling\n */\n readonly?: string;\n\n /**\n * None/display field styling\n */\n none?: {\n container?: string;\n label?: string;\n value?: string;\n };\n};\n\n/**\n * Labels/text customization\n */\nexport type FormLabels = {\n required?: string;\n loading?: string;\n fileUpload?: {\n clickToUpload?: string;\n dragAndDrop?: string;\n allowedTypes?: string;\n maxSize?: string;\n };\n datetime?: {\n clear?: string;\n done?: string;\n timeFormat?: string;\n weekdays?: string[];\n };\n select?: {\n loading?: string;\n noOptions?: string;\n };\n};\n\n/**\n * Complete form configuration\n */\nexport type FormThemeConfig = {\n theme?: FormTheme;\n labels?: FormLabels;\n};\n\n/**\n * Default theme with Tailwind classes\n */\nexport const defaultTheme: FormTheme = {\n darkMode: true,\n formGroup: 'form-group',\n form: 'w-full',\n fieldset: '@container grid grid-cols-12 gap-4',\n label: {\n base: 'block text-sm font-medium text-gray-700 dark:text-gray-300',\n required: 'text-red-500 ml-1',\n },\n input: {\n base: 'block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500',\n error: 'border-red-500 dark:border-red-400',\n disabled:\n 'disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n focus: 'focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500',\n },\n select: {\n base: 'mt-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n error: 'border-red-500 dark:border-red-400',\n disabled:\n 'disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n option: 'bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100',\n },\n textarea: {\n base: 'mt-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n error: 'border-red-500 dark:border-red-400',\n disabled:\n 'disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed',\n },\n checkbox: {\n base: 'h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 dark:border-gray-600 dark:bg-gray-800 rounded disabled:cursor-not-allowed',\n error: 'border-red-500 dark:border-red-400',\n label: 'ml-2 block text-sm font-medium text-gray-700 dark:text-gray-300',\n },\n toggle: {\n track: 'absolute inset-0 rounded-full transition-colors duration-200 bg-gray-300 dark:bg-gray-600 peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2 dark:peer-focus:ring-offset-gray-800',\n trackActive:\n 'peer-checked:bg-blue-600 peer-checked:dark:bg-blue-500',\n thumb: 'absolute left-1 top-1 w-4 h-4 bg-white dark:bg-gray-200 rounded-full transition-transform duration-200 peer-checked:translate-x-5',\n label: 'block text-sm font-medium text-gray-700 dark:text-gray-300',\n },\n radio: {\n base: 'h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 dark:border-gray-600 dark:bg-gray-800 disabled:cursor-not-allowed',\n label: 'ml-2 text-sm text-gray-700 dark:text-gray-300',\n group: 'mt-1',\n },\n file: {\n dropzone:\n 'flex flex-col items-center justify-center w-full p-6 border-2 border-dashed rounded-md cursor-pointer border-gray-300 dark:border-gray-600 hover:border-blue-500 dark:hover:border-blue-500 transition-colors duration-200',\n dropzoneActive: 'border-blue-500 bg-blue-50 dark:bg-blue-900/20',\n dropzoneError:\n 'border-red-500 dark:border-red-400 hover:border-red-500 dark:hover:border-red-400',\n icon: 'w-8 h-8 text-gray-400 dark:text-gray-500',\n text: 'mt-2 text-sm text-gray-500 dark:text-gray-400',\n hint: 'mt-1 text-xs text-gray-500 dark:text-gray-400',\n },\n submit: {\n base: 'mt-1 flex items-center justify-center w-full px-4 py-2 border border-transparent rounded-md shadow-sm text-white bg-blue-600 hover:bg-blue-700 dark:bg-blue-500 dark:hover:bg-blue-500 focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-800 focus:ring-blue-500 transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed',\n loading: 'opacity-75',\n spinner: 'mr-3 -ml-1 size-5 animate-spin text-white',\n },\n error: 'mt-1 text-sm text-red-600 dark:text-red-400',\n alert: {\n base: 'p-4 mb-4 border rounded-md',\n error: 'bg-red-50 dark:bg-red-900/20 text-red-800 dark:text-red-200 border-red-200 dark:border-red-800',\n success:\n 'bg-green-50 dark:bg-green-900/20 text-green-800 dark:text-green-200 border-green-200 dark:border-green-800',\n warning:\n 'bg-yellow-50 dark:bg-yellow-900/20 text-yellow-800 dark:text-yellow-200 border-yellow-200 dark:border-yellow-800',\n info: 'bg-blue-50 dark:bg-blue-900/20 text-blue-800 dark:text-blue-200 border-blue-200 dark:border-blue-800',\n },\n datetime: {\n input: 'block w-full px-3 py-2 pr-10 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 dark:disabled:bg-gray-700 disabled:cursor-not-allowed cursor-pointer',\n dropdown: 'absolute z-50 mt-2 p-4 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg shadow-lg w-80',\n picker: 'absolute z-50 mt-2 p-4 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg shadow-lg w-80',\n calendar: 'grid grid-cols-7 gap-1 mb-4',\n day: 'p-2 text-sm rounded hover:bg-blue-600 hover:text-white transition-colors text-gray-700 dark:text-gray-300',\n daySelected: 'bg-blue-600 text-white',\n dayButton:\n 'p-2 text-sm rounded hover:bg-blue-600 hover:text-white transition-colors text-gray-700 dark:text-gray-300',\n dayButtonSelected: 'bg-blue-600 text-white',\n timeInput:\n 'w-14 px-2 py-1 text-center border border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n timeLabel: 'text-xs font-medium text-gray-700 dark:text-gray-300',\n periodButton:\n 'px-3 py-1 text-xs rounded bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300',\n periodButtonActive: 'bg-blue-600 text-white',\n iconButton: 'absolute right-2 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400',\n navButton: 'p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded text-gray-700 dark:text-white',\n monthYear: 'text-sm font-medium text-gray-900 dark:text-gray-100',\n weekday: 'text-center text-xs font-medium text-gray-500 dark:text-gray-400 p-2',\n formatButton: 'px-2 py-1 text-xs bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded hover:bg-gray-200 dark:hover:bg-gray-600',\n },\n button: {\n primary: 'flex-1 px-3 py-2 text-sm bg-blue-600 text-white rounded hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2',\n secondary: 'flex-1 px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300',\n },\n readonly: 'mt-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n none: {\n container: 'form-group',\n label: 'block text-sm font-medium text-gray-700 dark:text-gray-300',\n value: 'mt-1 block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n },\n};\n\n/**\n * Theme without dark mode classes\n */\nexport const lightOnlyTheme: FormTheme = {\n darkMode: false,\n formGroup: 'form-group',\n form: 'w-full',\n fieldset: '@container grid grid-cols-12 gap-4',\n label: {\n base: 'block text-sm font-medium text-gray-700',\n required: 'text-red-500 ml-1',\n },\n input: {\n base: 'block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-white text-gray-900 placeholder-gray-400 focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500',\n error: 'border-red-500',\n disabled: 'disabled:bg-gray-100 disabled:cursor-not-allowed',\n focus: 'focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500',\n },\n select: {\n base: 'mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-white text-gray-900 focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed',\n error: 'border-red-500',\n disabled: 'disabled:bg-gray-100 disabled:cursor-not-allowed',\n option: 'bg-white text-gray-900',\n },\n textarea: {\n base: 'mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-white text-gray-900 placeholder-gray-400 focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed',\n error: 'border-red-500',\n disabled: 'disabled:bg-gray-100 disabled:cursor-not-allowed',\n },\n checkbox: {\n base: 'h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded disabled:cursor-not-allowed',\n error: 'border-red-500',\n label: 'ml-2 block text-sm font-medium text-gray-700',\n },\n toggle: {\n track: 'absolute inset-0 rounded-full transition-colors duration-200 bg-gray-300 peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2',\n trackActive: 'peer-checked:bg-blue-600',\n thumb: 'absolute left-1 top-1 w-4 h-4 bg-white rounded-full transition-transform duration-200 peer-checked:translate-x-5',\n label: 'block text-sm font-medium text-gray-700',\n },\n radio: {\n base: 'h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 disabled:cursor-not-allowed',\n label: 'ml-2 text-sm text-gray-700',\n group: 'mt-1',\n },\n file: {\n dropzone:\n 'flex flex-col items-center justify-center w-full p-6 border-2 border-dashed rounded-md cursor-pointer border-gray-300 hover:border-blue-500 transition-colors duration-200',\n dropzoneActive: 'border-blue-500 bg-blue-50',\n dropzoneError: 'border-red-500 hover:border-red-500',\n icon: 'w-8 h-8 text-gray-400',\n text: 'mt-2 text-sm text-gray-500',\n hint: 'mt-1 text-xs text-gray-500',\n },\n submit: {\n base: 'mt-1 flex items-center justify-center w-full px-4 py-2 border border-transparent rounded-md shadow-sm text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed',\n loading: 'opacity-75',\n spinner: 'mr-3 -ml-1 size-5 animate-spin text-white',\n },\n error: 'mt-1 text-sm text-red-600',\n alert: {\n base: 'p-4 mb-4 border rounded-md',\n error: 'bg-red-50 text-red-800 border-red-200',\n success:\n 'bg-green-50 text-green-800 border-green-200',\n warning:\n 'bg-yellow-50 text-yellow-800 border-yellow-200',\n info: 'bg-blue-50 text-blue-800 border-blue-200',\n },\n datetime: {\n input: 'block w-full px-3 py-2 pr-10 border border-gray-300 rounded-md shadow-sm bg-white text-gray-900 placeholder-gray-400 focus:outline-none focus:ring focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed cursor-pointer',\n dropdown: 'absolute z-50 mt-2 p-4 bg-white border border-gray-300 rounded-lg shadow-lg w-80',\n picker: 'absolute z-50 mt-2 p-4 bg-white border border-gray-300 rounded-lg shadow-lg w-80',\n calendar: 'grid grid-cols-7 gap-1 mb-4',\n day: 'p-2 text-sm rounded hover:bg-blue-600 hover:text-white transition-colors text-gray-700',\n daySelected: 'bg-blue-600 text-white',\n dayButton:\n 'p-2 text-sm rounded hover:bg-blue-600 hover:text-white transition-colors text-gray-700',\n dayButtonSelected: 'bg-blue-600 text-white',\n timeInput:\n 'w-14 px-2 py-1 text-center border border-gray-300 rounded bg-white text-gray-900',\n timeLabel: 'text-xs font-medium text-gray-700',\n periodButton: 'px-3 py-1 text-xs rounded bg-gray-100 text-gray-700',\n periodButtonActive: 'bg-blue-600 text-white',\n iconButton: 'absolute right-2 top-1/2 -translate-y-1/2 text-gray-500',\n navButton: 'p-1 hover:bg-gray-100 rounded text-gray-700',\n monthYear: 'text-sm font-medium text-gray-900',\n weekday: 'text-center text-xs font-medium text-gray-500 p-2',\n formatButton: 'px-2 py-1 text-xs bg-gray-100 text-gray-700 rounded hover:bg-gray-200',\n },\n button: {\n primary: 'flex-1 px-3 py-2 text-sm bg-blue-600 text-white rounded hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2',\n secondary: 'flex-1 px-3 py-2 text-sm border border-gray-300 rounded hover:bg-gray-50 text-gray-700',\n },\n readonly: 'mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-gray-100 text-gray-900',\n none: {\n container: 'form-group',\n label: 'block text-sm font-medium text-gray-700',\n value: 'mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-gray-100 text-gray-900',\n },\n};\n\n/**\n * Default labels\n */\nexport const defaultLabels: FormLabels = {\n required: '*',\n loading: 'Loading...',\n fileUpload: {\n clickToUpload: 'Click to upload',\n dragAndDrop: 'or drag and drop',\n allowedTypes: 'Allowed types:',\n maxSize: 'Max size:',\n },\n datetime: {\n clear: 'Clear',\n done: 'Done',\n timeFormat: 'Time Format',\n },\n select: {\n loading: 'Loading options...',\n noOptions: 'No options available',\n },\n};\n\n/**\n * Theme context type\n */\ntype ThemeContextType = {\n theme: FormTheme;\n labels: FormLabels;\n};\n\n/**\n * Theme context\n */\nconst ThemeContext = createContext<ThemeContextType>({\n theme: defaultTheme,\n labels: defaultLabels,\n});\n\n/**\n * Hook to access the current theme\n */\nexport function useFormTheme(): FormTheme {\n const { theme } = useContext(ThemeContext);\n return theme;\n}\n\n/**\n * Hook to access the current labels\n */\nexport function useFormLabels(): FormLabels {\n const { labels } = useContext(ThemeContext);\n return labels;\n}\n\n/**\n * Hook to access both theme and labels\n */\nexport function useFormThemeConfig(): ThemeContextType {\n return useContext(ThemeContext);\n}\n\n/**\n * Deep merge utility for theme objects\n */\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] !== undefined) {\n if (\n typeof source[key] === 'object' &&\n source[key] !== null &&\n !Array.isArray(source[key]) &&\n typeof target[key] === 'object' &&\n target[key] !== null\n ) {\n result[key] = deepMerge(\n target[key] as object,\n source[key] as object\n ) as T[Extract<keyof T, string>];\n } else {\n result[key] = source[key] as T[Extract<keyof T, string>];\n }\n }\n }\n\n return result;\n}\n\nexport type FormThemeProviderProps = {\n children: ReactNode;\n /**\n * Custom theme configuration (will be merged with default)\n */\n theme?: Partial<FormTheme>;\n /**\n * Custom labels (will be merged with default)\n */\n labels?: Partial<FormLabels>;\n /**\n * Use light-only theme as base (no dark mode classes)\n */\n lightOnly?: boolean;\n};\n\n/**\n * Theme provider component\n * Wrap your app or form container with this to customize styling\n *\n * @example\n * ```tsx\n * <FormThemeProvider\n * theme={{\n * input: { base: 'my-custom-input-class' },\n * submit: { base: 'btn btn-primary' }\n * }}\n * labels={{\n * fileUpload: { clickToUpload: 'Upload a file' }\n * }}\n * >\n * <Form config={formConfig} />\n * </FormThemeProvider>\n * ```\n */\nexport function FormThemeProvider({\n children,\n theme,\n labels,\n lightOnly = false,\n}: FormThemeProviderProps) {\n const baseTheme = lightOnly ? lightOnlyTheme : defaultTheme;\n\n const mergedTheme = useMemo(\n () => (theme ? deepMerge(baseTheme, theme) : baseTheme),\n [theme, baseTheme]\n );\n\n const mergedLabels = useMemo(\n () => (labels ? deepMerge(defaultLabels, labels) : defaultLabels),\n [labels]\n );\n\n const contextValue = useMemo(\n () => ({ theme: mergedTheme, labels: mergedLabels }),\n [mergedTheme, mergedLabels]\n );\n\n return (\n <ThemeContext.Provider value={contextValue}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\n/**\n * Utility to create a complete custom theme\n */\nexport function createTheme(\n customTheme: Partial<FormTheme>,\n basedOn: 'default' | 'lightOnly' = 'default'\n): FormTheme {\n const baseTheme = basedOn === 'lightOnly' ? lightOnlyTheme : defaultTheme;\n return deepMerge(baseTheme, customTheme);\n}\n\n/**\n * Utility to combine class names, filtering out undefined/null values\n */\nexport function cx(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","import { memo } from 'react';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type AlertProps = {\n type: 'error' | 'success' | 'warning' | 'info';\n message: string;\n className?: string;\n};\n\nfunction Alert({ type, message, className = '' }: AlertProps) {\n const theme = useFormTheme();\n\n const alertClass = theme.alert?.[type] ?? '';\n\n return (\n <div\n className={cx(theme.alert?.base, alertClass, className)}\n role=\"alert\"\n >\n {message}\n </div>\n );\n}\n\nexport default memo(Alert);\n","import { useEffect, useState, useRef, memo } from 'react';\nimport { Calendar, ChevronLeft, ChevronRight, Clock } from 'lucide-react';\nimport type { FormField } from '../core/types';\nimport { useFormTheme, useFormLabels, cx } from '../core/theme';\n\nexport type DateTimeInputProps = Omit<\n FormField,\n 'type' | 'options' | 'defaultChecked'\n> & {\n name: string;\n};\n\nfunction DateTimeInput({\n label,\n name,\n placeholder,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: DateTimeInputProps) {\n const [selectedDate, setSelectedDate] = useState<Date | null>(null);\n const [displayValue, setDisplayValue] = useState('');\n const [showPicker, setShowPicker] = useState(false);\n const [currentMonth, setCurrentMonth] = useState(new Date());\n const [hours, setHours] = useState('12');\n const [minutes, setMinutes] = useState('00');\n const [period, setPeriod] = useState<'AM' | 'PM'>('PM');\n const [use24Hour, setUse24Hour] = useState(true);\n const pickerRef = useRef<HTMLDivElement>(null);\n const theme = useFormTheme();\n const labels = useFormLabels();\n\n useEffect(() => {\n if (defaultValue) {\n const date = new Date(defaultValue.toString());\n if (!isNaN(date.getTime())) {\n setSelectedDate(date);\n setCurrentMonth(date);\n updateDisplayValue(date);\n\n // Set time\n const h24 = date.getHours();\n const m = date.getMinutes();\n const p = h24 >= 12 ? 'PM' : 'AM';\n const h12 = h24 % 12 || 12;\n\n if (use24Hour) {\n setHours(String(h24).padStart(2, '0'));\n } else {\n setHours(String(h12).padStart(2, '0'));\n }\n setMinutes(String(m).padStart(2, '0'));\n setPeriod(p);\n }\n }\n }, [defaultValue, use24Hour]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n pickerRef.current &&\n !pickerRef.current.contains(event.target as Node)\n ) {\n setShowPicker(false);\n }\n };\n\n if (showPicker) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [showPicker]);\n\n const updateDisplayValue = (date: Date) => {\n setDisplayValue(date.toLocaleString());\n };\n\n const getDaysInMonth = (date: Date) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const daysInMonth = lastDay.getDate();\n const startingDayOfWeek = firstDay.getDay();\n\n return { daysInMonth, startingDayOfWeek };\n };\n\n const handleDateSelect = (day: number) => {\n let hour24 = parseInt(hours, 10);\n if (!use24Hour) {\n if (period === 'PM' && hour24 !== 12) hour24 += 12;\n if (period === 'AM' && hour24 === 12) hour24 = 0;\n }\n\n const newDate = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth(),\n day,\n hour24,\n parseInt(minutes, 10)\n );\n setSelectedDate(newDate);\n updateDisplayValue(newDate);\n };\n\n const handleTimeChange = () => {\n if (selectedDate) {\n const newDate = new Date(selectedDate);\n let h = parseInt(hours, 10);\n if (!use24Hour) {\n if (period === 'PM' && h !== 12) h += 12;\n if (period === 'AM' && h === 12) h = 0;\n }\n newDate.setHours(h, parseInt(minutes, 10));\n setSelectedDate(newDate);\n updateDisplayValue(newDate);\n }\n };\n\n const changeMonth = (offset: number) => {\n setCurrentMonth(\n (prev) => new Date(prev.getFullYear(), prev.getMonth() + offset, 1)\n );\n };\n\n const renderCalendar = () => {\n const { daysInMonth, startingDayOfWeek } = getDaysInMonth(currentMonth);\n const days = [];\n\n // Empty cells for days before month starts\n for (let i = 0; i < startingDayOfWeek; i++) {\n days.push(<div key={`empty-${i}`} className=\"p-2\" />);\n }\n\n // Days of the month\n for (let day = 1; day <= daysInMonth; day++) {\n const isSelected =\n selectedDate &&\n selectedDate.getDate() === day &&\n selectedDate.getMonth() === currentMonth.getMonth() &&\n selectedDate.getFullYear() === currentMonth.getFullYear();\n\n days.push(\n <button\n key={day}\n type=\"button\"\n onClick={() => handleDateSelect(day)}\n className={cx(\n theme.datetime?.day,\n isSelected && theme.datetime?.daySelected\n )}\n >\n {day}\n </button>\n );\n }\n\n return days;\n };\n\n return (\n <div className={cx(theme.formGroup, className)} ref={pickerRef}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <label htmlFor={name} className={theme.label?.base}>\n {label}{' '}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <div className=\"relative mt-1\">\n <input\n type=\"text\"\n value={displayValue}\n placeholder={placeholder}\n readOnly\n onFocus={() => !disabled && setShowPicker(true)}\n onClick={() => !disabled && setShowPicker(true)}\n className={cx(\n theme.datetime?.input,\n error && theme.input?.error\n )}\n />\n <button\n type=\"button\"\n onClick={() => !disabled && setShowPicker(true)}\n disabled={disabled}\n className={theme.datetime?.iconButton}\n >\n <Calendar className=\"h-5 w-5\" />\n </button>\n\n {/* Hidden input for form submission */}\n <input\n type=\"hidden\"\n name={name}\n id={name}\n value={selectedDate ? selectedDate.toISOString() : ''}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n />\n\n {/* DateTime Picker Dropdown */}\n {showPicker && (\n <div className={theme.datetime?.dropdown}>\n {/* Month Navigation */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={() => changeMonth(-1)}\n className={theme.datetime?.navButton}\n >\n <ChevronLeft className=\"w-5 h-5\" />\n </button>\n <span className={theme.datetime?.monthYear}>\n {currentMonth.toLocaleDateString('en-GB', {\n month: 'long',\n year: 'numeric',\n })}\n </span>\n <button\n type=\"button\"\n onClick={() => changeMonth(1)}\n className={theme.datetime?.navButton}\n >\n <ChevronRight className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Weekday Headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {(\n labels.datetime?.weekdays ?? [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa',\n ]\n ).map((day: string) => (\n <div\n key={day}\n className={theme.datetime?.weekday}\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar Days */}\n <div className=\"grid grid-cols-7 gap-1 mb-4\">\n {renderCalendar()}\n </div>\n\n {/* Time Picker */}\n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className={theme.datetime?.timeLabel}>\n {labels.datetime?.timeFormat}\n </span>\n <button\n type=\"button\"\n onClick={() => {\n const newFormat = !use24Hour;\n setUse24Hour(newFormat);\n\n // Convert current time to new format\n if (selectedDate) {\n const h24 = selectedDate.getHours();\n if (newFormat) {\n setHours(\n String(h24).padStart(2, '0')\n );\n } else {\n const h12 = h24 % 12 || 12;\n setHours(\n String(h12).padStart(2, '0')\n );\n setPeriod(\n h24 >= 12 ? 'PM' : 'AM'\n );\n }\n }\n }}\n className={theme.datetime?.formatButton}\n >\n {use24Hour ? '24hr' : '12hr'}\n </button>\n </div>\n <div className=\"flex items-center justify-center gap-2\">\n <Clock className=\"h-4 w-4 text-gray-500 dark:text-gray-400\" />\n <input\n type=\"number\"\n min={use24Hour ? '0' : '1'}\n max={use24Hour ? '23' : '12'}\n value={hours}\n onChange={(e) => {\n const val = parseInt(e.target.value, 10);\n const max = use24Hour ? 23 : 12;\n const min = use24Hour ? 0 : 1;\n if (val >= min && val <= max) {\n setHours(\n e.target.value.padStart(2, '0')\n );\n handleTimeChange();\n }\n }}\n className={theme.datetime?.timeInput}\n />\n <span className=\"text-gray-900 dark:text-gray-100\">\n :\n </span>\n <input\n type=\"number\"\n min=\"0\"\n max=\"59\"\n value={minutes}\n onChange={(e) => {\n const val = parseInt(e.target.value, 10);\n if (val >= 0 && val <= 59) {\n setMinutes(\n e.target.value.padStart(2, '0')\n );\n handleTimeChange();\n }\n }}\n className={theme.datetime?.timeInput}\n />\n {!use24Hour && (\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => {\n setPeriod('AM');\n handleTimeChange();\n }}\n className={cx(\n theme.datetime?.periodButton,\n period === 'AM' &&\n theme.datetime\n ?.periodButtonActive\n )}\n >\n AM\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setPeriod('PM');\n handleTimeChange();\n }}\n className={cx(\n theme.datetime?.periodButton,\n period === 'PM' &&\n theme.datetime\n ?.periodButtonActive\n )}\n >\n PM\n </button>\n </div>\n )}\n </div>\n </div>\n\n {/* Clear and Done buttons */}\n <div className=\"flex gap-2 mt-4\">\n <button\n type=\"button\"\n onClick={() => {\n setSelectedDate(null);\n setDisplayValue('');\n setShowPicker(false);\n }}\n className={theme.button?.secondary}\n >\n {labels.datetime?.clear}\n </button>\n <button\n type=\"button\"\n onClick={() => setShowPicker(false)}\n className={theme.button?.primary}\n >\n {labels.datetime?.done}\n </button>\n </div>\n </div>\n )}\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(DateTimeInput);\n","import { Eye, EyeOff } from 'lucide-react';\nimport { useState, memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type TextInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultChecked'\n> & {\n type: 'text' | 'email' | 'password' | 'number';\n name: string;\n};\n\nfunction TextInput({\n label,\n placeholder,\n name,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n type = 'text',\n before,\n beforeClassName,\n after,\n afterClassName,\n}: TextInputProps) {\n const [passwordVisible, setPasswordVisible] = useState(false);\n const theme = useFormTheme();\n\n const onTogglePassword = () => {\n setPasswordVisible((prev) => !prev);\n };\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <label htmlFor={name} className={theme.label?.base}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <div className=\"relative mt-1\">\n <input\n type={\n type === 'password'\n ? passwordVisible\n ? 'text'\n : 'password'\n : type\n }\n name={name}\n id={name}\n placeholder={placeholder}\n defaultValue={defaultValue?.toString()}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className={cx(\n theme.input?.base,\n error && theme.input?.error,\n theme.input?.disabled\n )}\n />\n {type === 'password' && (\n <button\n type=\"button\"\n onClick={onTogglePassword}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 z-10\"\n aria-label={\n passwordVisible ? 'Hide password' : 'Show password'\n }\n >\n {passwordVisible ? (\n <Eye className=\"h-5 w-5\" />\n ) : (\n <EyeOff className=\"h-5 w-5 opacity-50\" />\n )}\n <span className=\"sr-only\">\n {passwordVisible\n ? 'Hide password'\n : 'Show password'}\n </span>\n </button>\n )}\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(TextInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, useFormLabels, cx } from '../core/theme';\n\nexport type SelectInputProps = Omit<\n ResolvedFormField,\n 'type' | 'defaultChecked'\n> & {\n name: string;\n};\n\nfunction SelectInput({\n label,\n name,\n options,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: SelectInputProps) {\n const theme = useFormTheme();\n const labels = useFormLabels();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <label htmlFor={name} className={theme.label?.base}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <select\n name={name}\n id={name}\n defaultValue={defaultValue?.toString()}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className={cx(\n theme.select?.base,\n error && theme.select?.error\n )}\n >\n {!options || options.length === 0 ? (\n <option value=\"\" disabled className={theme.select?.option}>\n {!options\n ? labels.select?.loading\n : labels.select?.noOptions}\n </option>\n ) : (\n options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n className={theme.select?.option}\n >\n {option.label}\n </option>\n ))\n )}\n </select>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(SelectInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type TextAreaInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultChecked'\n> & {\n name: string;\n};\n\nfunction TextAreaInput({\n label,\n name,\n placeholder,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: TextAreaInputProps) {\n const theme = useFormTheme();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <label htmlFor={name} className={theme.label?.base}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <textarea\n name={name}\n id={name}\n placeholder={placeholder}\n defaultValue={defaultValue?.toString()}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className={cx(\n theme.textarea?.base,\n error && theme.textarea?.error\n )}\n rows={4}\n />\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(TextAreaInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type CheckboxInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultValue'\n> & {\n name: string;\n};\n\nfunction CheckboxInput({\n label,\n name,\n defaultChecked,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: CheckboxInputProps) {\n const theme = useFormTheme();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n name={name}\n id={name}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className={cx(\n theme.checkbox?.base,\n error && theme.checkbox?.error\n )}\n />\n <label htmlFor={name} className={theme.checkbox?.label}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(CheckboxInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type ToggleInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultValue'\n> & {\n name: string;\n};\n\nfunction ToggleInput({\n label,\n name,\n defaultChecked,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: ToggleInputProps) {\n const theme = useFormTheme();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <div className=\"flex items-center justify-between\">\n <label htmlFor={name} className={theme.toggle?.label}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </label>\n <label\n htmlFor={name}\n className=\"relative inline-block w-11 h-6 cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n name={name}\n id={name}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className=\"sr-only peer\"\n />\n <span\n className={cx(\n theme.toggle?.track,\n !disabled && theme.toggle?.trackActive,\n disabled && 'cursor-not-allowed'\n )}\n ></span>\n <span className={theme.toggle?.thumb}></span>\n </label>\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(ToggleInput);\n","import { memo } from 'react';\nimport type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type RadioInputProps = Omit<\n ResolvedFormField,\n 'type' | 'defaultChecked'\n> & {\n name: string;\n};\n\nfunction RadioInput({\n label,\n name,\n options,\n defaultValue,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n}: RadioInputProps) {\n const theme = useFormTheme();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <div id={`${name}-group`} className={theme.label?.base}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </div>\n <div\n className={theme.radio?.group}\n role=\"radiogroup\"\n aria-labelledby={`${name}-group`}\n >\n {options?.map((option) => (\n <div key={option.value} className=\"flex items-center mb-2\">\n <input\n type=\"radio\"\n name={name}\n id={`${name}-${option.value}`}\n value={option.value}\n defaultChecked={defaultValue === option.value}\n disabled={disabled}\n aria-invalid={!!error}\n className={theme.radio?.base}\n />\n <label\n htmlFor={`${name}-${option.value}`}\n className={theme.radio?.label}\n >\n {option.label}\n </label>\n </div>\n ))}\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(RadioInput);\n","/**\n * Common MIME types for file validation\n */\nexport const mimeTypes = {\n JPG: 'image/jpeg',\n JPEG: 'image/jpeg',\n PNG: 'image/png',\n GIF: 'image/gif',\n WEBP: 'image/webp',\n SVG: 'image/svg+xml',\n BMP: 'image/bmp',\n TIFF: 'image/tiff',\n ICO: 'image/x-icon',\n PDF: 'application/pdf',\n DOC: 'application/msword',\n DOCX: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n XLS: 'application/vnd.ms-excel',\n XLSX: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n PPT: 'application/vnd.ms-powerpoint',\n PPTX: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ZIP: 'application/zip',\n RAR: 'application/x-rar-compressed',\n '7Z': 'application/x-7z-compressed',\n TAR: 'application/x-tar',\n GZ: 'application/x-gzip',\n BZ2: 'application/x-bzip2',\n ISO: 'application/x-iso9660-image',\n SWF: 'application/x-shockwave-flash',\n TTF: 'application/x-font-ttf',\n MP4: 'video/mp4',\n MP3: 'audio/mpeg',\n MOV: 'video/quicktime',\n AVI: 'video/x-msvideo',\n WMV: 'video/x-ms-wmv',\n MPEG: 'video/mpeg',\n TXT: 'text/plain',\n CSV: 'text/csv',\n} as const;\n\nexport type MimeTypeKey = keyof typeof mimeTypes;\n\n/**\n * Validation rules that can be applied to form fields\n */\nexport type ValidationRules = {\n required?: boolean;\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n isEmail?: boolean;\n isNumber?: boolean;\n isPhone?: boolean;\n isUrl?: boolean;\n isDate?: boolean;\n isTime?: boolean;\n weakPasswordCheck?: boolean;\n matches?: string;\n denyHtml?: boolean;\n isAlphanumeric?: boolean;\n mimeTypes?: Array<MimeTypeKey>;\n maxFileSize?: number;\n mustBeEither?: Array<string | number>;\n minValue?: number;\n maxValue?: number;\n isInteger?: boolean;\n isSlug?: boolean;\n isUUID?: boolean;\n};\n\n/**\n * File metadata returned after upload\n */\nexport type FileMetaData = {\n success: boolean;\n fileName?: string;\n fileType?: string;\n fileSize?: number;\n etag?: string;\n lastModified?: string;\n error?: string;\n};\n\n/**\n * Supported field types (excluding markdown which is unfinished)\n */\nexport type FieldType =\n | 'text'\n | 'email'\n | 'password'\n | 'select'\n | 'textarea'\n | 'checkbox'\n | 'toggle'\n | 'radio'\n | 'file'\n | 'hidden'\n | 'number'\n | 'datetime'\n | 'none'\n | 'submit';\n\n/**\n * Option type for select, radio, and similar fields\n */\nexport type FieldOption = {\n label: string;\n value: string;\n};\n\n/**\n * Grid width options (12-column grid system)\n */\nexport type GridWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\n/**\n * Form field configuration\n */\nexport type FormField = {\n label: string;\n placeholder?: string;\n options?: Array<FieldOption>;\n type: FieldType;\n defaultValue?: string | number;\n defaultChecked?: boolean;\n className?: string;\n disabled?: boolean;\n before?: string;\n beforeClassName?: string;\n after?: string;\n afterClassName?: string;\n error?: string;\n hideSpinner?: boolean;\n width?: GridWidth;\n rules?: ValidationRules;\n metaData?: FileMetaData;\n uploadDir?: string;\n};\n\n/**\n * Form configuration object\n */\nexport type FormConfig = {\n key: string;\n method?: 'get' | 'post';\n encType?:\n | 'application/x-www-form-urlencoded'\n | 'multipart/form-data'\n | 'text/plain';\n action?: string;\n fields: {\n [key: string]: FormField;\n };\n};\n\n/**\n * Resolved form field with options always as array\n */\nexport type ResolvedFormField = FormField;\n\n/**\n * Resolved form config with resolved options\n */\nexport type ResolvedFormConfig = FormConfig;\n\n/**\n * Form errors object\n */\nexport type FormErrors = {\n [key: string]: string | undefined;\n __server?: string;\n};\n\n/**\n * Form context state\n */\nexport type FormState = {\n errors?: FormErrors;\n isSubmitting: boolean;\n};\n\n/**\n * Form context value type\n */\nexport type FormContextValue = {\n state: FormState;\n config: ResolvedFormConfig;\n};\n","import { useState, useRef, memo } from 'react';\nimport { isImage } from '../core/utils';\nimport type { ResolvedFormField, FileMetaData } from '../core/types';\nimport { mimeTypes } from '../core/types';\nimport { useFormTheme, useFormLabels, cx } from '../core/theme';\n\nexport type FileInputProps = Omit<ResolvedFormField, 'type' | 'options'> & {\n name: string;\n metaData?: FileMetaData;\n /**\n * Optional base URL for displaying existing files\n * If provided along with defaultValue, will show preview for images\n */\n baseUrl?: string;\n};\n\nfunction FileInput({\n label,\n name,\n className,\n disabled,\n error,\n rules,\n before,\n beforeClassName,\n after,\n afterClassName,\n defaultValue,\n metaData,\n uploadDir,\n baseUrl,\n}: FileInputProps) {\n const [fileName, setFileName] = useState<string | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const theme = useFormTheme();\n const labels = useFormLabels();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n setFileName(e.target.files[0].name);\n } else {\n setFileName(null);\n }\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n if (disabled) return;\n\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n if (inputRef.current) {\n inputRef.current.files = e.dataTransfer.files;\n setFileName(e.dataTransfer.files[0].name);\n\n // Trigger change event manually\n const event = new Event('change', { bubbles: true });\n inputRef.current.dispatchEvent(event);\n }\n }\n };\n\n // Build the file URL for preview\n const getFileUrl = () => {\n if (!defaultValue) return null;\n if (baseUrl && uploadDir) {\n return `${baseUrl}/${uploadDir}/${defaultValue}`;\n }\n if (baseUrl) {\n return `${baseUrl}/${defaultValue}`;\n }\n return null;\n };\n\n const fileUrl = getFileUrl();\n\n return (\n <div className={cx(theme.formGroup, className)}>\n {before && <p className={beforeClassName ?? ''}>{before}</p>}\n <div className={cx(theme.label?.base, 'mb-1')}>\n {label}\n {rules?.required && (\n <span className={theme.label?.required}>*</span>\n )}\n </div>\n <div className=\"relative\">\n <input\n ref={inputRef}\n type=\"file\"\n name={name}\n id={name}\n disabled={disabled}\n onChange={handleChange}\n aria-invalid={!!error}\n aria-describedby={error ? `${name}-error` : undefined}\n className=\"sr-only\"\n accept={\n rules?.mimeTypes\n ? rules.mimeTypes.map(type => mimeTypes[type]).join(',')\n : '*'\n }\n />\n <label\n htmlFor={name}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n className={cx(\n theme.file?.dropzone,\n disabled && 'cursor-not-allowed',\n isDragging && theme.file?.dropzoneActive,\n error && theme.file?.dropzoneError\n )}\n >\n <div className=\"flex flex-col items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={theme.file?.icon}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\"\n />\n </svg>\n <p className={theme.file?.text}>\n {fileName ? (\n <span className=\"font-medium text-blue-600 dark:text-blue-400\">\n {fileName}\n </span>\n ) : (\n <>\n <span className=\"font-medium\">\n {labels.fileUpload?.clickToUpload}\n </span>{' '}\n {labels.fileUpload?.dragAndDrop}\n </>\n )}\n </p>\n {rules?.mimeTypes && (\n <p className={theme.file?.hint}>\n {labels.fileUpload?.allowedTypes}{' '}\n {Object.values(rules.mimeTypes).join(', ')}\n </p>\n )}\n {rules?.maxFileSize && (\n <p className={theme.file?.hint}>\n {labels.fileUpload?.maxSize}{' '}\n {Math.round(\n (rules.maxFileSize / 1024 / 1024) * 10\n ) / 10}{' '}\n MB\n </p>\n )}\n </div>\n </label>\n {fileUrl && defaultValue && isImage(defaultValue.toString()) && (\n <>\n <img\n src={fileUrl}\n alt=\"\"\n className=\"mt-2 max-h-40 object-contain rounded-md border border-gray-300 dark:border-gray-600\"\n />\n <a\n href={fileUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-2 inline-flex items-center text-xs text-blue-600 hover:underline dark:text-blue-400\"\n >\n View Current {label}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"ml-1 h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n </a>\n </>\n )}\n </div>\n {error && (\n <p id={`${name}-error`} className={theme.error}>\n {error}\n </p>\n )}\n {after && <p className={afterClassName ?? ''}>{after}</p>}\n </div>\n );\n}\n\nexport default memo(FileInput);\n","import type { ResolvedFormField } from '../core/types';\n\nexport type HiddenInputProps = Omit<\n ResolvedFormField,\n 'type' | 'options' | 'defaultChecked' | 'label'\n> & {\n name: string;\n};\n\nexport default function HiddenInput({\n name,\n defaultValue,\n className,\n disabled,\n}: HiddenInputProps) {\n return (\n <input\n type=\"hidden\"\n name={name}\n defaultValue={defaultValue?.toString()}\n disabled={disabled}\n className={className}\n />\n );\n}\n","import type { ResolvedFormField } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type SubmitInputProps = Omit<ResolvedFormField, 'type' | 'options'> & {\n name: string;\n loading: boolean;\n};\n\nexport default function SubmitInput({\n label,\n name,\n className,\n disabled,\n loading,\n defaultValue,\n hideSpinner,\n}: SubmitInputProps) {\n const theme = useFormTheme();\n\n return (\n <button\n type=\"submit\"\n name={name}\n disabled={disabled || loading}\n value={defaultValue?.toString() ?? ''}\n className={cx(\n theme.submit?.base,\n loading && theme.submit?.loading,\n className\n )}\n >\n {loading && hideSpinner !== true && (\n <svg\n className={theme.submit?.spinner}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n {label}\n </button>\n );\n}\n","import { memo } from 'react';\nimport { useFormTheme, cx } from '../core/theme';\n\nexport type NoneInputProps = {\n label: string;\n value: string;\n className?: string;\n};\n\nfunction NoneInput({ label, value, className }: NoneInputProps) {\n const theme = useFormTheme();\n\n const isJsonString = (str: string) => {\n try {\n JSON.parse(str);\n return true;\n } catch {\n return false;\n }\n };\n\n return (\n <div className={cx(theme.formGroup, className)}>\n <span className={theme.label?.base}>{label}</span>\n <div className={theme.readonly}>\n {isJsonString(value) ? (\n <ul className=\"list-disc list-inside space-y-1\">\n {Object.entries(JSON.parse(value)).map(([key, val]) => (\n <li key={key} className=\"text-sm\">\n <span className=\"font-medium\">{key}:</span>{' '}\n {String(val)}\n </li>\n ))}\n </ul>\n ) : (\n value\n )}\n </div>\n </div>\n );\n}\n\nexport default memo(NoneInput);\n","import type { ReactNode, FormHTMLAttributes } from 'react';\nimport { FormContext } from '../core/context';\nimport { widthClasses } from '../core/utils';\nimport type { ResolvedFormConfig, FormErrors, FormState } from '../core/types';\nimport { useFormTheme, cx } from '../core/theme';\nimport Alert from './Alert';\nimport DateTimeInput from './DateTimeInput';\nimport TextInput from './TextInput';\nimport SelectInput from './SelectInput';\nimport TextAreaInput from './TextAreaInput';\nimport CheckboxInput from './CheckboxInput';\nimport ToggleInput from './ToggleInput';\nimport RadioInput from './RadioInput';\nimport FileInput from './FileInput';\nimport HiddenInput from './HiddenInput';\nimport SubmitInput from './SubmitInput';\nimport NoneInput from './NoneInput';\n\nexport type FormProps = {\n /**\n * Form configuration object\n */\n config: ResolvedFormConfig;\n /**\n * Additional CSS class names\n */\n className?: string;\n /**\n * Form errors from server validation\n */\n errors?: FormErrors;\n /**\n * Whether the form is currently submitting\n */\n isSubmitting?: boolean;\n /**\n * Custom form element to use (e.g., from a router library)\n * If not provided, uses native <form>\n */\n formElement?: React.ComponentType<\n FormHTMLAttributes<HTMLFormElement> & { children: ReactNode }\n >;\n /**\n * Additional props to pass to the form element\n */\n formProps?: FormHTMLAttributes<HTMLFormElement>;\n /**\n * Base URL for file uploads preview\n */\n fileBaseUrl?: string;\n};\n\n/**\n * Framework-agnostic Form component\n * Renders form fields based on configuration and handles error display\n */\nexport default function Form({\n config,\n className,\n errors,\n isSubmitting = false,\n formElement: FormElement,\n formProps = {},\n fileBaseUrl,\n}: FormProps) {\n const theme = useFormTheme();\n const {\n method = 'post',\n encType = config.encType || 'application/x-www-form-urlencoded',\n action = '',\n fields,\n } = config;\n\n const state: FormState = {\n errors,\n isSubmitting,\n };\n\n const contextValue = {\n state,\n config,\n };\n\n const FormTag = FormElement || 'form';\n\n const formContent = (\n <>\n {errors && '__server' in errors && errors.__server ? (\n <Alert type=\"error\" message={errors.__server} />\n ) : null}\n <fieldset\n className={theme.fieldset}\n disabled={isSubmitting}\n >\n {Object.entries(fields).map(([key, field]) => {\n const fieldError = errors?.[key];\n\n switch (field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'number':\n return (\n <TextInput\n key={key}\n label={field.label}\n placeholder={field.placeholder}\n name={key}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n type={field.type}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'datetime':\n return (\n <DateTimeInput\n key={key}\n label={field.label}\n placeholder={field.placeholder}\n name={key}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'select':\n return (\n <SelectInput\n key={key}\n label={field.label}\n name={key}\n options={field.options}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'textarea':\n return (\n <TextAreaInput\n key={key}\n label={field.label}\n placeholder={field.placeholder}\n name={key}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'checkbox':\n return (\n <CheckboxInput\n key={key}\n label={field.label}\n name={key}\n defaultChecked={field.defaultChecked}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'toggle':\n return (\n <ToggleInput\n key={key}\n label={field.label}\n name={key}\n defaultChecked={field.defaultChecked}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'radio':\n return (\n <RadioInput\n key={key}\n label={field.label}\n name={key}\n options={field.options}\n defaultValue={field.defaultValue}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n />\n );\n case 'file':\n return (\n <FileInput\n key={key}\n label={field.label}\n name={key}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n defaultValue={field.defaultValue}\n error={fieldError}\n rules={field.rules}\n before={field.before}\n beforeClassName={field.beforeClassName}\n after={field.after}\n afterClassName={field.afterClassName}\n metaData={field.metaData}\n uploadDir={field.uploadDir}\n baseUrl={fileBaseUrl}\n />\n );\n case 'hidden':\n return (\n <HiddenInput\n key={key}\n name={key}\n defaultValue={field.defaultValue}\n disabled={field.disabled}\n />\n );\n case 'submit':\n return (\n <SubmitInput\n key={key}\n label={field.label}\n name={key}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n disabled={field.disabled}\n rules={field.rules}\n loading={isSubmitting}\n defaultValue={field.defaultValue}\n hideSpinner={field.hideSpinner}\n />\n );\n case 'none':\n return (\n <NoneInput\n key={key}\n className={`${\n widthClasses[field.width || 12]\n } ${field.className || ''}`}\n value={field.defaultValue?.toString() ?? ''}\n label={field.label}\n />\n );\n default:\n return null;\n }\n })}\n </fieldset>\n </>\n );\n\n return (\n <FormContext.Provider value={contextValue}>\n <FormTag\n method={method}\n encType={encType}\n action={action}\n className={cx(theme.form, className)}\n noValidate\n {...formProps}\n >\n {formContent}\n </FormTag>\n </FormContext.Provider>\n );\n}\n\nexport type { ResolvedFormConfig, FormErrors } from '../core/types';\n","import { useFetcher } from 'react-router';\nimport Form from '../components/Form';\nimport type { ResolvedFormConfig, FormErrors } from '../core/types';\n\nexport type ReactRouterFormProps = {\n /**\n * Form configuration object\n */\n config: ResolvedFormConfig;\n /**\n * Additional CSS class names\n */\n className?: string;\n /**\n * Base URL for file uploads preview\n */\n fileBaseUrl?: string;\n};\n\n/**\n * React Router Form component that integrates with useFetcher\n * Automatically handles form submission state and error display\n *\n * @example\n * ```tsx\n * import { ReactRouterForm } from 'react-formkit/react-router';\n *\n * function MyComponent() {\n * return <ReactRouterForm config={formConfig} />;\n * }\n * ```\n */\nexport function ReactRouterForm({\n config,\n className,\n fileBaseUrl,\n}: ReactRouterFormProps) {\n const fetcher = useFetcher({ key: config.key });\n const errors = fetcher.data?.errors as FormErrors | undefined;\n const isSubmitting = fetcher.state !== 'idle';\n\n return (\n <Form\n config={config}\n className={className}\n errors={errors}\n isSubmitting={isSubmitting}\n formElement={fetcher.Form as any}\n fileBaseUrl={fileBaseUrl}\n />\n );\n}\n\n/**\n * Hook to access React Router fetcher state for a specific form\n * Useful when you need more control over the form submission\n *\n * @example\n * ```tsx\n * const { fetcher, errors, isSubmitting } = useReactRouterForm('my-form');\n * ```\n */\nexport function useReactRouterForm(formKey: string) {\n const fetcher = useFetcher({ key: formKey });\n const errors = fetcher.data?.errors as FormErrors | undefined;\n const isSubmitting = fetcher.state !== 'idle';\n\n return {\n fetcher,\n errors,\n isSubmitting,\n data: fetcher.data,\n };\n}\n\nexport default ReactRouterForm;\n"]}