ynotsoft-dynamic-form 1.0.13 → 1.0.15

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/index.jsx","../src/MyButton.jsx","../src/DynamicForm/DynamicForm.jsx","../src/services/Interceptors.jsx","../src/config.jsx","../src/DynamicForm/fields/HiddenField.jsx","../src/DynamicForm/fields/MultiSelectField.jsx","../src/DynamicForm/fields/SelectField.jsx","../src/DynamicForm/fields/EmailField.jsx","../src/DynamicForm/fields/InputField.jsx","../src/DynamicForm/fields/HtmlField.jsx","../src/DynamicForm/fields/CheckboxField.jsx","../src/DynamicForm/fields/DateRangePickerField.jsx","../src/DynamicForm/fields/FileField.jsx","../src/DynamicForm/fields/TextArea.jsx","../src/DynamicForm/fields/DayTimePickerField.jsx","../src/DynamicForm/fields/LineBreakField.jsx","../src/DynamicForm/fields/RadioGroups.jsx","../src/DynamicForm/fields/HeaderField.jsx","../src/DynamicForm/fields/DatePickerField.jsx","../src/DynamicForm/fields/timeField.jsx","../src/DynamicForm/fields/AlertMessageField.jsx","../src/DynamicForm/components/formats/alerts/Alerts.jsx"],"sourcesContent":["// Named exports\nexport { default as MyButton } from './MyButton.jsx';\nexport { default as DynamicForm } from './DynamicForm/DynamicForm.jsx';\n\n// Default exports for backward compatibility\nimport MyButtonComponent from './MyButton.jsx';\nimport DynamicFormComponent from './DynamicForm/DynamicForm.jsx';\n\n// Export default as DynamicForm (main component)\nexport default DynamicFormComponent;\n\n// Also export a default MyButton for direct import\nexport { MyButtonComponent, DynamicFormComponent };","// src/MyButton.jsx\nexport default function MyButton({ children, onClick }) {\n return <button onClick={onClick}>{children}</button>;\n}","import { useState, useEffect, useRef, useMemo } from \"react\";\nimport { toast } from \"react-hot-toast\";\nimport dayjs from \"dayjs\";\n// import \"dayjs/locale/de\"; // Remove this to avoid module resolution issues\nimport apiClient from \"../services/Interceptors.jsx\";\nimport { default as RenderHiddenField } from \"./fields/HiddenField\";\nimport { default as RenderMultiSelectField } from \"./fields/MultiSelectField\";\nimport { default as RenderSelectField } from \"./fields/SelectField\";\nimport { default as RenderEmailField } from \"./fields/EmailField\";\nimport { default as RenderInputField } from \"./fields/InputField\";\nimport { default as RenderHtmlField } from \"./fields/HtmlField\";\nimport { default as RenderCheckboxField } from \"./fields/CheckboxField\";\nimport { default as RenderDayPickerField } from \"./fields/DateRangePickerField\";\nimport { default as RenderFileInputField } from \"./fields/FileField\";\nimport { default as RenderTextAreaField } from \"./fields/TextArea\";\nimport { default as DayTimePickerField } from \"./fields/DayTimePickerField\";\nimport { default as RenderLineBreakField } from \"./fields/LineBreakField\";\nimport { default as RenderRadioGroupField } from \"./fields/RadioGroups\";\nimport { default as RenderHeaderField } from \"./fields/HeaderField\";\nimport { default as RenderDatePickerField } from \"./fields/DatePickerField\";\nimport { default as RenderTimeField } from \"./fields/timeField\";\nimport { default as RenderAlertMessageField } from \"./fields/AlertMessageField\";\nimport { Label } from \"@radix-ui/react-label\";\nconst DynamicForm = ({\n formDefinition,\n sendFormValues,\n children,\n defaultValues = {},\n onFieldsChange = () => { },\n}) => {\n\n const [formValues, setFormValues] = useState({ ...defaultValues });\n const [errors, setErrors] = useState({});\n const [touched, setTouched] = useState({});\n const [charCounts, setCharCounts] = useState({});\n const excludeFromFieldFormat = [\"hidden\", \"html\", \"linebreak\", \"header\", \"alert\"];\n const FIELD_RENDERERS = useMemo(() => ({\n file: RenderFileInputField,\n multifile: RenderFileInputField,\n dateRange: RenderDayPickerField,\n date: RenderDatePickerField,\n dayTimePicker: DayTimePickerField,\n time: RenderTimeField,\n hidden: RenderHiddenField,\n multiselect: RenderMultiSelectField,\n select: RenderSelectField,\n email: RenderEmailField,\n litertext: RenderHtmlField,\n checkbox: RenderCheckboxField,\n radiogroup: RenderRadioGroupField,\n input: RenderInputField,\n textarea: RenderTextAreaField,\n header: RenderHeaderField,\n alert: RenderAlertMessageField,\n linebreak: RenderLineBreakField,\n\n }), []);\n\n\n const FIELD_FORMATTERS = {\n\n\n }\n\n const loadOptionsForField = async (field, dependentValue = null) => {\n\n try {\n const response = await apiClient(`/${field.optionsUrl}`);\n console.log(response)\n // Add empty option at the beginning if not exists\n let options = [];\n if (field.type === \"select\") {\n options = [\n { value: \"\", label: `Select ${field.label.toLowerCase()}` },\n ...response.data,\n ];\n } else {\n options = [...response.data.map((item) => (\n { value: item.value, label: item.label }\n ))];\n }\n formDefinition.fields.forEach((f) => {\n if (f.name === field.name) {\n f.options = options;\n }\n });\n //setFieldOptions((prev) => ({ ...prev, [field.name]: options }));\n } catch (error) {\n console.error(`Failed to load options for ${field.name}:`, error);\n } finally {\n }\n };\n\n\n useEffect(() => {\n if (formDefinition?.fields && formDefinition.fields.length > 0) {\n // Wait until at least one field has a non-empty value\n const hasData = formDefinition.fields.some((f) => f.value);\n if (!hasData) return; // Don't set empty values early\n\n // Load async options\n formDefinition.fields.forEach((field) => {\n if (field.optionsUrl) loadOptionsForField(field);\n });\n\n // Initialise form values\n const initialValues = {};\n formDefinition.fields.forEach((field) => {\n initialValues[field.name] =\n defaultValues[field.name] ??\n field.value ??\n (field.type === \"multiselect\" ? [] : \"\");\n });\n\n setFormValues(initialValues);\n }\n }, [formDefinition]);\n\n\n\n\n\n const validateField = (field, value, allValues) => {\n if (field.disabled && field.disabled(allValues)) {\n return null;\n }\n\n if (field.required) {\n if (!value) {\n return `${field.label} is required`;\n }\n if (Array.isArray(value) && value.length === 0) {\n return `Please select at least one ${field.label.toLowerCase()}`;\n }\n }\n\n if (field.validate) {\n const error = field.validate(value, allValues);\n if (error) return error;\n }\n\n // Email validation addition\n if (field.type === \"email\") {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) return \"Please enter a valid email address\";\n }\n\n if (field.type === \"number\") {\n if (field.min !== undefined && value < field.min) {\n return `${field.label} must be at least ${field.min}`;\n }\n if (field.max !== undefined && value > field.max) {\n return `${field.label} must be no more than ${field.max}`;\n }\n }\n\n if (field.type === \"date\") {\n // Ensure the value is a valid date\n if (!dayjs(value).isValid()) {\n return `${field.label} must be a valid date`;\n }\n }\n\n if (field.maxLength && value && value.length > field.maxLength) {\n return `${field.label} must not exceed ${field.maxLength} characters`;\n }\n\n return null;\n };\n\n\n const handleChange = (fieldName, value) => {\n const field = formDefinition.fields.find((f) => f.name === fieldName);\n if (!field) return;\n\n const newValues = { ...formValues };\n console.log(value)\n // Handle multiselect values\n if (field.type === \"multiselect\") {\n newValues[fieldName] = Array.isArray(value)\n ? value\n : Array.from(value.target.selectedOptions).map((option) => option.value);\n }\n // Handle DateRangePicker (dayPicker)\n\n else if (field.type === \"dateRange\") {\n console.log(value)\n newValues[fieldName] = [\n {\n startDate: value[0].from,\n endDate: value[0].to,\n key: \"selection\",\n },\n ];\n\n }\n // Handle DateTime Picker\n else if (field.type === \"dayTimePicker\") {\n newValues[fieldName] = value ? dayjs(value).format(\"YYYY-MM-DD HH:mm:ss\") : \"\";\n }\n else {\n newValues[fieldName] = value;\n }\n\n // Clear dependent fields when parent selection changes\n if (field.type === \"select\") {\n formDefinition.fields.forEach((f) => {\n if (f.showIf && !f.showIf(newValues)) {\n newValues[f.name] = f.type === \"multiselect\" ? [] : \"\";\n }\n });\n }\n\n formDefinition.fields.forEach((f) => {\n if (f.disabled && f.disabled(newValues)) {\n newValues[f.name] = f.type === \"multiselect\" ? [] : \"\";\n }\n });\n\n setFormValues(newValues);\n\n // Validate all fields\n const newErrors = {};\n formDefinition.fields.forEach((f) => {\n if (!f.showIf || f.showIf(newValues)) {\n const error = validateField(f, newValues[f.name], newValues);\n if (error) newErrors[f.name] = error;\n }\n });\n\n setErrors(newErrors);\n };\n\n\n const handleBlur = (fieldName) => {\n setTouched({ ...touched, [fieldName]: true });\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n\n const allTouched = {};\n formDefinition.fields.forEach((field) => {\n allTouched[field.name] = true;\n });\n setTouched(allTouched);\n\n const newErrors = {};\n formDefinition.fields.forEach((field) => {\n if (\n (!field.showIf || field.showIf(formValues)) &&\n (!field.disabled || !field.disabled(formValues))\n ) {\n const error = validateField(field, formValues[field.name], formValues);\n if (error) newErrors[field.name] = error;\n }\n });\n\n setErrors(newErrors);\n\n if (Object.keys(newErrors).length === 0) {\n sendFormValues(formValues);\n } else {\n toast.error(\"Please correct the errors in the form\");\n }\n };\n\n\n useEffect(() => {\n\n onFieldsChange(formValues);\n\n }, [formValues, onFieldsChange]);\n\n\n // Color variants for field card container\n const FIELD_COLOR_VARIANTS = {\n green: 'border-green-500 bg-green-50',\n blue: 'border-blue-500 bg-blue-50',\n red: 'border-red-500 bg-red-50',\n yellow: 'border-yellow-500 bg-yellow-50',\n purple: 'border-purple-500 bg-purple-50',\n indigo: 'border-indigo-500 bg-indigo-50',\n gray: 'border-gray-500 bg-gray-50',\n pink: 'border-pink-500 bg-pink-50',\n orange: 'border-orange-500 bg-orange-50',\n };\n\n\n function fieldFormat(children, field, error) {\n if (excludeFromFieldFormat.includes(field.type)) {\n return <div className={field.fieldClass || \"col-span-8\"}>{children}</div>;\n }\n\n const containerStyle = field.containerStyle;\n const color = field.color || 'blue';\n const containerClasses = containerStyle === 'card'\n ? `rounded-lg border text-card-foreground shadow-sm p-4 ${field.containerClassName || FIELD_COLOR_VARIANTS[color] || FIELD_COLOR_VARIANTS.blue}`\n : '';\n\n const content = (\n <>\n {field.label && (\n <Label\n htmlFor={field.name}\n className=\"block text-sm font-medium mb-1\"\n >\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </Label>\n )}\n\n {/* InputField or any other field goes here */}\n <div>{children}</div>\n\n {error && (\n <p className=\"mt-1 text-sm text-red-500\">\n {error}\n </p>\n )}\n </>\n );\n\n return (\n <div className={`mb-4 ${field.fieldClass || \"col-span-8\"}`}>\n {containerStyle === 'card' ? (\n <div className={containerClasses}>\n {content}\n </div>\n ) : content}\n </div>\n );\n }\n\n const renderField = (field) => {\n if (field.showIf && !field.showIf(formValues)) return null;\n\n const FieldComponent = FIELD_RENDERERS[field.type] || RenderInputField;\n if (formValues[field.name] === undefined) {\n formValues[field.name] =\n field.value !== undefined\n ? field.value\n : field.type === \"multiselect\"\n ? []\n : \"\";\n }\n\n const error = touched[field.name] && errors[field.name] ? errors[field.name] : null;\n\n return (fieldFormat(\n <FieldComponent\n field={field}\n formValues={formValues}\n handleChange={handleChange}\n handleBlur={() => handleBlur(field.name)}\n setCharCounts={setCharCounts}\n charCount={charCounts[field.name] || 0}\n //error={error}\n />, field\n )\n );\n };\n\n\n return (\n <form onSubmit={handleSubmit} className=\"grid grid-cols-12 gap-x-4 mx-auto\">\n {formDefinition ? (\n formDefinition.fields.map(renderField)\n ) : (\n <div>Loading...</div>\n )}\n {children}\n </form>\n );\n};\n\nexport default DynamicForm;","import axios from 'axios';\nimport toast from 'react-hot-toast';\nimport {config} from '../config';\nconst apiClient = axios.create({\n baseURL: config.REACT_API_URL,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n \n apiClient.interceptors.response.use(\n (response) => response.data,\n (error) => {\n if (error.response && error.response.status === 403) {\n toast.error( 'You are not authorized to access this resource.');\n return Promise.reject('You are not authorized to access this resource.');\n }else if (error.response) {\n toast.error( 'An error occurred' );\n return Promise.reject(error.response.data?.message || 'An error occurred');\n } else{\n toast.error(error.message);\n }\n \n\n }\n );\n export default apiClient;","export const config = {\"REACT_API_URL\": \"http://localhost:5000/\"};","\n// This component renders a hidden input field for forms. This used to include data in form submissions without displaying it to the user.\nfunction HiddenField(field) {\n return <input type=\"hidden\" name={field.name} value={field.value} key={field.name} />;\n}\nexport default HiddenField;","import Select from 'react-select'\nimport makeAnimated from 'react-select/animated'\n\nfunction MultiSelectField({ field, formValues, handleChange, touched, errors, handleBlur }) {\n //const error = touched[field.name] && errors[field.name];\n const isDisabled = field.disabled && field.disabled(formValues);\n const options = field.options || [];\n\n const animatedComponents = makeAnimated();\n\n const currentValues = formValues[field.name] || [];\n\n return (\n\n <Select\n components={animatedComponents}\n isMulti\n isDisabled={isDisabled}\n name={field.label}\n value={currentValues}\n onChange={(selected) => handleChange(field.name, selected)}\n options={options}\n placeholder={field.placeholder}\n closeMenuOnSelect={false}\n />\n\n );\n}\nexport default MultiSelectField;","import * as Select from \"@radix-ui/react-select\";\nimport React from \"react\";\n// get arrow down icon from icon hero icon\nimport { ChevronDownIcon } from \"@heroicons/react/20/solid\";\n\nfunction SelectField({ field, formValues, handleChange, handleBlur }) {\n const value = formValues[field.name] || \"\";\n const isDisabled =\n typeof field.disabled === \"function\"\n ? field.disabled(formValues)\n : field.disabled;\n const options = field.options || [];\n\n return (\n <Select.Root\n value={value}\n onValueChange={(val) => handleChange(field.name, val)}\n disabled={isDisabled}\n >\n {/* --- Trigger --- */}\n <Select.Trigger\n id={field.name}\n onBlur={() => handleBlur(field.name)}\n className={`inline-flex items-center justify-between w-full px-3 py-2 border rounded-md text-sm transition-all\n ${isDisabled\n ? \"bg-gray-100 text-gray-500 cursor-not-allowed\"\n : \"border-gray-300 hover:border-gray-400 focus:ring-2 focus:ring-blue-500\"}\n `}\n >\n <Select.Value\n placeholder={\n field.placeholder || `Select ${field.label?.toLowerCase() || \"\"}`\n }\n />\n <Select.Icon className=\"ml-2 text-gray-500\">\n <ChevronDownIcon className=\"w-4 h-4\" />\n </Select.Icon>\n </Select.Trigger>\n\n {/* --- Dropdown --- */}\n <Select.Portal>\n <Select.Content\n className=\"bg-white border border-gray-200 rounded-md shadow-lg z-50 min-w-[var(--radix-select-trigger-width)]\"\n position=\"popper\"\n sideOffset={5}\n >\n {/* Scroll Up */}\n <Select.ScrollUpButton className=\"flex items-center justify-center h-6 text-gray-500 bg-gray-50\">\n <Select.Arrow className=\"fill-white stroke-gray-200\" />\n </Select.ScrollUpButton>\n\n <Select.Viewport className=\"p-1\">\n {/* Optional grouped items */}\n {field.groupLabel && (\n <Select.Group>\n <Select.Label className=\"px-2 py-1 text-xs text-gray-500 uppercase tracking-wide\">\n {field.groupLabel}\n </Select.Label>\n </Select.Group>\n )}\n\n {/* List of options */}\n {options.map((option) => (\n <Select.Item\n key={option.value}\n value={option.value}\n className={`relative flex items-center px-3 py-2 text-sm rounded cursor-pointer select-none\n data-[state=checked]:bg-blue-50\n data-[state=checked]:text-blue-600\n `}\n >\n <Select.ItemText>{option.label}</Select.ItemText>\n\n </Select.Item>\n ))}\n\n {/* Optional separator */}\n {field.separator && (\n <Select.Separator className=\"my-1 h-px bg-gray-200\" />\n )}\n </Select.Viewport>\n\n {/* Scroll Down */}\n\n {/* Optional arrow */}\n <Select.Arrow className=\"fill-white stroke-gray-200\" />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n}\n\nexport default SelectField;\n","import React from 'react';\n\nfunction EmailField({ field, formValues, handleChange, handleBlur, touched, errors }) {\n //const error = touched[field.name] && errors[field.name];\n const isDisabled = field.readOnly && field.disabled;\n const error = false;\n return (\n <input\n {...field.props}\n type=\"email\"\n value={formValues[field.name] || \"\"}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n name={field.name}\n placeholder={field.placeholder}\n className={`w-full px-3 py-2 border rounded-md ${\n error ? \"border-red-500\" : \"border-gray-300\"\n } ${isDisabled ? \"bg-gray-100 text-gray-500 cursor-not-allowed\" : \"\"}`}\n />\n );\n}\n\nexport default EmailField;","import React from \"react\";\n\nfunction InputField({ field, formValues, handleChange, handleBlur, touched, errors }) {\n console.log(\"Rendering InputField for\", field);\n const isDisabled = field.readOnly || field.disabled;\n const error = false\n return (\n <input\n {...field.props}\n id={field.name}\n type={field.type || \"text\"}\n value={formValues[field.name] || \"\"}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n name={field.name}\n placeholder={field.placeholder}\n min={field.minLength}\n max={field.maxLength}\n className={`flex h-10 w-full rounded-md border px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error \n ? \"border-red-500 focus-visible:ring-red-500\" \n : \"border-input focus-visible:ring-blue-500\"\n } ${\n isDisabled \n ? \"bg-gray-50 text-gray-500\" \n : \"bg-background\"\n }`}\n />\n\n );\n}\n\nexport default InputField;","import React from 'react'\n\n\nfunction HtmlField({ field, formValues }) {\n const htmlContent = formValues[field.name] || field.content || \"\";\n \n return (\n <div key={field.name} className={`mb-4 ${field.fieldClass ? field.fieldClass : \"col-span-full\"}`} id={field.name.toLowerCase() + \"_id\"}>\n <div \n className=\"w-full px-3 py-2 border rounded-md overflow-y-auto max-h-40 prose prose-sm max-w-none\" \n dangerouslySetInnerHTML={{ __html: htmlContent }} \n />\n </div>\n )\n}\n\nexport default HtmlField\n","\n\nfunction CheckboxField({field, formValues, handleChange, handleBlur, touched, errors}) {\n //const error = touched[field.name] && errors[field.name];\n const isDisabled = field.disabled && field.disabled(formValues);\n const error = false \n return (\n <div className=\"mt-1 space-x-2\">\n <input\n {...field.props}\n id={\"id_\" + field.name}\n type=\"checkbox\"\n checked={formValues[field.name] || false}\n onChange={(e) => handleChange(field.name, e.target.checked)}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n className={`rounded border-gray-300 ${\n isDisabled ? \"opacity-50 cursor-not-allowed\" : \"\"\n }`}\n />\n <label className=\"\" htmlFor={\"id_\" + field.name}>\n {field.label}\n {field.required && <span className=\"text-red-500\">*</span>}\n </label>\n {error && <p className=\"mt-1 text-sm text-red-500\">{error}</p>}\n </div>\n )\n}\n\nexport default CheckboxField","import * as Popover from \"@radix-ui/react-popover\";\nimport { useState } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport \"react-day-picker/dist/style.css\";\n\nfunction DateRangeField({ field, formValues, handleChange, handleBlur }) {\n const [open, setOpen] = useState(false);\n const selected = formValues[field.name] ?? { from: null, to: null };\n\n const handleSelect = (range) => handleChange(field.name, range);\n const handleClear = () => handleChange(field.name, { from: null, to: null });\n\n return (\n <div>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n id={field.name}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n onKeyDown={(e) => e.key === \"Enter\" && setOpen(true)}\n className=\"\n inline-flex items-center justify-between gap-2\n w-full h-9 rounded-md border border-gray-300 bg-white\n px-3 py-2 text-sm font-normal shadow-sm\n hover:bg-gray-50 hover:text-gray-900\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\n disabled:cursor-not-allowed disabled:opacity-50\n \"\n >\n {selected.from ? (\n selected.to ? (\n <span>\n {selected.from.toLocaleDateString()} – {selected.to.toLocaleDateString()}\n </span>\n ) : (\n <span>{selected.from.toLocaleDateString()}</span>\n )\n ) : (\n <span className=\"text-muted-foreground\">\n {field.placeholder || \"Select date range\"}\n </span>\n )}\n\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down opacity-70\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={2}\n className=\"z-50 rounded-md border border-gray-200 bg-white p-0 shadow-md w-auto\"\n >\n <DayPicker\n mode=\"range\"\n selected={selected}\n onSelect={handleSelect}\n showOutsideDays\n className=\"rounded-md bg-white p-3 text-xs\"\n />\n \n {/* Action buttons */}\n <div className=\"flex items-center justify-between gap-2 border-t border-gray-200 p-3\">\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-gray-300 bg-white hover:bg-gray-100 hover:text-gray-900 h-9 px-4 py-2\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-blue-600 text-white hover:bg-blue-700 h-9 px-4 py-2\"\n >\n Done\n </button>\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n}\n\nexport default DateRangeField;\n","import React from 'react'\nimport { toast } from \"react-hot-toast\";\nimport { config } from \"../../config.jsx\";\n\nfunction FileField({\n field,\n formValues,\n touched,\n errors,\n fileUploads,\n setFileUploads,\n fileInputRefs,\n handleChange,\n onFieldsChange\n}) {\n const error = touched[field.name] && errors[field.name];\n const isMultiple = field.type === \"multifile\";\n const uploads = fileUploads[field.name] || {};\n const currentValues = formValues[field.name];\n const values = isMultiple\n ? currentValues || []\n : [currentValues].filter(Boolean);\n const isDisabled = field.disabled && field.disabled(formValues);\n const disablebtnClasses = `px-4 py-2 bg-gray-100 border rounded hover:bg-gray-200 ${isDisabled ? \"cursor-not-allowed\" : \"\"\n }`;\n\n const uploadUrl = `${config.REACT_API_URL}uploads`;\n\n const formatFileSize = (bytes) => {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i];\n };\n\n const uploadFile = async (file, fieldName) => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const response = await fetch(`${uploadUrl}`, {\n method: \"POST\",\n body: formData,\n });\n\n if (!response.ok) {\n toast.error(\"Upload failed\");\n throw new Error(\"Upload failed\");\n }\n\n const data = await response.json();\n return data;\n };\n\n const handleSingleFileUpload = async (field, file) => {\n if (!file) return;\n\n // Validate file size\n if (field.maxSize && file.size > field.maxSize) {\n throw new Error(\n `File size must not exceed ${formatFileSize(field.maxSize)}`\n );\n }\n\n // Upload the file\n const uploadedData = await uploadFile(file, field.name);\n\n // Update form values with the uploaded URL\n const newValues = { ...formValues, [field.name]: uploadedData };\n handleChange(field.name, uploadedData);\n onFieldsChange(newValues);\n };\n\n const handleMultiFileUpload = async (field, files) => {\n const currentUrls = formValues[field.name] || [];\n if (currentUrls.length + files.length > field.maxFiles) {\n throw new Error(`Maximum ${field.maxFiles} files allowed`);\n }\n\n // Validate each file size\n files.forEach((file) => {\n if (field.maxSize && file.size > field.maxSize) {\n throw new Error(\n `Each file must not exceed ${formatFileSize(field.maxSize)}`\n );\n }\n });\n\n // Upload all files\n const uploadedUrls = await Promise.all(\n files.map((file) => uploadFile(file, field.name))\n );\n\n // Update form values with the new URLs\n const newUrls = [...currentUrls, ...uploadedUrls];\n handleChange(field.name, newUrls);\n onFieldsChange({ ...formValues, [field.name]: newUrls });\n };\n\n const handleFileChange = async (fieldName, files) => {\n const fileList = Array.from(files);\n\n try {\n if (field.type === \"file\") {\n await handleSingleFileUpload(field, fileList[0]);\n } else if (field.type === \"multifile\") {\n await handleMultiFileUpload(field, fileList);\n }\n\n // Clear file input after processing\n if (fileInputRefs.current[fieldName]) {\n fileInputRefs.current[fieldName].value = \"\"; // This resets the file input field\n }\n } catch (error) {\n toast.error(`Upload failed: ${error.message}`);\n }\n };\n\n const removeFile = async (fieldName, urlToRemove) => {\n let newValue;\n\n if (field.type === \"file\") {\n newValue = \"\";\n } else {\n const urls = formValues[fieldName] || [];\n newValue = urls.filter((url) => url !== urlToRemove);\n }\n\n handleChange(fieldName, newValue);\n onFieldsChange({ ...formValues, [fieldName]: newValue });\n\n // Reset the file input field after removing the file\n if (fileInputRefs.current[fieldName]) {\n fileInputRefs.current[fieldName].value = \"\"; // Reset file input after removing\n }\n };\n\n return (\n <div key={field.name} className={`mb-4 ${field.fieldClass || 'col-span-full'}`}>\n <label className=\"block font-medium mb-1\">\n {field.label}\n {field.required && <span className=\"text-red-500\">*</span>}\n </label>\n\n <div className=\"space-y-2\">\n <div className=\"items-center space-x-2\">\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={() => fileInputRefs.current[field.name].click()}\n className={disablebtnClasses}\n >\n Choose {isMultiple ? \"Files\" : \"File\"}\n </button>\n {isMultiple && values.length > 0 && (\n <span className=\"text-sm text-gray-600\">\n {values.length} of {field.maxFiles} files uploaded\n </span>\n )}\n </div>\n\n <input\n ref={(el) => (fileInputRefs.current[field.name] = el)}\n type=\"file\"\n accept={field.accept}\n multiple={isMultiple}\n className=\"hidden\"\n onChange={(e) => handleFileChange(field.name, e.target.files)}\n />\n\n {/* Uploaded Files List */}\n <div className=\"space-y-2\">\n {values.map((file, index) => {\n const upload = Object.values(uploads).find(\n (u) => u.file === file\n );\n return (\n <div\n key={file}\n className=\"flex items-center justify-between p-2 bg-gray-50 rounded\"\n >\n <div className=\"flex items-center space-x-2\">\n {upload && (\n <>\n <span className=\"text-sm\">{upload.fileName}</span>\n <span className=\"text-xs text-gray-500\">\n ({formatFileSize(upload.fileSize)})\n </span>\n </>\n )}\n {!upload && (\n <span className=\"text-sm\">{file.original_name}</span>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => removeFile(field.name, file)}\n className=\"text-red-500 hover:text-red-700 ml-3\"\n >\n Remove\n </button>\n </div>\n );\n })}\n </div>\n\n {/* Upload Progress */}\n {Object.entries(uploads).map(([fileName, upload]) => {\n if (upload.status === \"uploading\") {\n return (\n <div key={fileName} className=\"relative pt-1\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-semibold inline-block text-blue-600\">\n Uploading {fileName}\n </span>\n <span className=\"text-xs font-semibold inline-block text-blue-600\">\n {upload.progress}%\n </span>\n </div>\n <div className=\"overflow-hidden h-2 mt-1 text-xs flex rounded bg-blue-200\">\n <div\n className=\"shadow-none flex flex-col text-center whitespace-nowrap text-white justify-center bg-blue-500\"\n style={{ width: `${upload.progress}%` }}\n />\n </div>\n </div>\n );\n }\n return null;\n })}\n </div>\n\n {error && <p className=\"mt-1 text-sm text-red-500\">{error}</p>}\n </div>\n );\n}\n\nexport default FileField;","import React, { useRef, useEffect } from \"react\";\n\nfunction TextAreaField({\n field,\n formValues,\n handleChange,\n handleBlur,\n touched,\n errors,\n charCount,\n setCharCounts,\n}) {\n const textareaRef = useRef(null);\n const value = formValues[field.name] || \"\";\n const isDisabled =\n typeof field.disabled === \"function\"\n ? field.disabled(formValues)\n : field.disabled || field.readOnly;\n const error = touched?.[field.name] && errors?.[field.name] ? errors[field.name] : null;\n\n // Auto-resize logic\n const autoResize = () => {\n const el = textareaRef.current;\n if (el) {\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight + 2}px`;\n }\n };\n\n // Auto-resize on mount & when value changes\n useEffect(() => {\n autoResize();\n }, [value]);\n\n const handleTextareaChange = (e) => {\n handleChange(field.name, e.target.value);\n autoResize();\n\n if (setCharCounts) {\n setCharCounts((prev) => ({\n ...prev,\n [field.name]: e.target.value.length,\n }));\n }\n };\n\n return (\n <div className=\"space-y-2\">\n <textarea\n {...field.props}\n ref={textareaRef}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder || \"\"}\n value={value}\n onChange={handleTextareaChange}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n maxLength={field.maxLength}\n rows={field.rows || 3}\n className={`flex w-full rounded-md border px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 resize-none overflow-y-auto ${\n error \n ? \"border-red-500 focus-visible:ring-red-500\" \n : \"border-input focus-visible:ring-blue-500\"\n } ${\n isDisabled \n ? \"bg-gray-50 text-gray-500\" \n : \"bg-background\"\n }`}\n style={{\n minHeight: \"80px\",\n maxHeight: \"400px\",\n }}\n />\n\n <div className=\"flex justify-between items-center\">\n {/* Character counter */}\n {field.maxLength && !field.readOnly && (\n <span className=\"text-xs text-gray-500\">\n {charCount || 0}/{field.maxLength} characters\n </span>\n )}\n\n </div>\n </div>\n );\n}\n\nexport default TextAreaField;\n","import React from 'react'\n\nfunction DayTimePickerField({ field, formValues, handleChange, handleBlur, touched, errors }) {\n // Fallback component if MUI Date Pickers are not available\n return (\n <div>\n <input\n type=\"datetime-local\"\n value={field.value || ''}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={handleBlur}\n className=\"border rounded px-3 py-2 w-full\"\n placeholder=\"Select date and time\"\n />\n <p className=\"text-sm text-gray-500 mt-1\">\n Note: Install @mui/x-date-pickers for enhanced date picker functionality\n </p>\n </div>\n )\n}\nexport default DayTimePickerField\n\n\n\n","\nimport { Separator } from \"@radix-ui/react-separator\"\n\nfunction LineBreakField({ field }) {\n if (!field?.label) return <Separator className=\"my-4 h-px bg-gray-300\" />;\n\n return (\n <div className=\"relative flex items-center py-4\">\n <Separator className=\"flex-1 h-px bg-gray-300\" />\n <span className=\"px-3 font-medium text-gray-600 bg-white\">\n {field.label}\n </span>\n <Separator className=\"flex-1 h-px bg-gray-300\" />\n </div>\n );\n}\n\nexport default LineBreakField;","/**\n * RadioGroupField Component\n * \n * A Radix UI-based radio group field for DynamicForm\n * \n * @example\n * // Basic usage (stacked layout)\n * {\n * type: 'radio',\n * name: 'plan',\n * label: 'Select Plan',\n * options: [\n * { value: 'basic', label: 'Basic Plan', description: 'Perfect for individuals' },\n * { value: 'pro', label: 'Pro Plan', description: 'For professionals' },\n * { value: 'enterprise', label: 'Enterprise', description: 'For large teams' }\n * ]\n * }\n * \n * @example\n * // Inline layout\n * {\n * type: 'radio',\n * name: 'size',\n * label: 'Select Size',\n * inline: true,\n * options: ['Small', 'Medium', 'Large']\n * }\n * \n * @example\n * // Simple string options\n * {\n * type: 'radio',\n * name: 'color',\n * label: 'Choose Color',\n * options: ['Red', 'Green', 'Blue']\n * }\n * \n * @example\n * // With disabled state\n * {\n * type: 'radio',\n * name: 'subscription',\n * label: 'Subscription Type',\n * disabled: (formValues) => formValues.hasActiveSubscription,\n * options: [\n * { value: 'monthly', label: 'Monthly' },\n * { value: 'yearly', label: 'Yearly' }\n * ]\n * }\n */\n\nimport React from 'react';\nimport * as RadioGroup from '@radix-ui/react-radio-group';\n\nfunction RadioGroupField({ field, formValues, handleChange, handleBlur }) {\n const value = formValues[field.name] || '';\n const isDisabled = typeof field.disabled === 'function' \n ? field.disabled(formValues) \n : field.disabled;\n const options = field.options || [];\n const isInline = field.inline || false;\n\n return (\n <RadioGroup.Root\n value={value}\n onValueChange={(val) => handleChange(field.name, val)}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n className={isInline ? 'flex flex-wrap gap-4' : 'space-y-3'}\n aria-label={field.label || field.name}\n >\n {options.map((option) => {\n const optionValue = typeof option === 'object' ? option.value : option;\n const optionLabel = typeof option === 'object' ? option.label : option;\n\n const optionDescription = typeof option === 'object' ? option.description : null;\n const itemId = `${field.name}-${optionValue}`;\n\n return (\n <div key={optionValue} className=\"relative flex items-start\">\n <div className=\"flex h-6 items-center\">\n <RadioGroup.Item\n value={optionValue}\n id={itemId}\n disabled={isDisabled}\n className={`\n relative size-4 rounded-full border transition-all\n ${isDisabled \n ? 'border-gray-300 bg-gray-100 cursor-not-allowed' \n : 'border-gray-300 bg-white hover:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2'\n }\n data-[state=checked]:border-blue-600 data-[state=checked]:bg-blue-600\n `}\n >\n <RadioGroup.Indicator className=\"flex items-center justify-center w-full h-full relative after:content-[''] after:block after:w-1.5 after:h-1.5 after:rounded-full after:bg-white\" />\n </RadioGroup.Item>\n </div>\n <div className=\"ml-3 text-sm\">\n <label \n htmlFor={itemId} \n className={`font-medium ${isDisabled ? 'text-gray-500' : 'text-gray-900 cursor-pointer'}`}\n >\n {optionLabel}\n </label>\n {optionDescription && !isInline && (\n <p className={`text-sm ${isDisabled ? 'text-gray-400' : 'text-gray-500'}`}>\n {optionDescription}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </RadioGroup.Root>\n );\n}\n\nexport default RadioGroupField;\n","/**\n * HeaderField Component\n * \n * A header/title field for DynamicForm to display section headers, titles, or dividers\n * \n * @example\n * // Large header (h1)\n * {\n * type: 'header',\n * text: 'Personal Information',\n * size: 'xl' // or '2xl', '3xl', '4xl'\n * }\n * \n * @example\n * // Medium header with description (h2)\n * {\n * type: 'header',\n * text: 'Contact Details',\n * description: 'Please provide your contact information',\n * size: 'lg'\n * }\n * \n * @example\n * // Small header (h3)\n * {\n * type: 'header',\n * text: 'Account Settings',\n * size: 'md'\n * }\n * \n * @example\n * // Header with underline\n * {\n * type: 'header',\n * text: 'Billing Information',\n * underline: true,\n * size: 'lg'\n * }\n * \n * @example\n * // Header with custom styling\n * {\n * type: 'header',\n * text: 'Important Section',\n * size: 'xl',\n * className: 'text-blue-600',\n * align: 'center' // 'left', 'center', 'right'\n * }\n */\n\nimport React from 'react';\n\nfunction HeaderField({ field }) {\n const text = field.text || field.label || '';\n const description = field.description || '';\n const size = field.size || 'lg'; // 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl'\n const underline = field.underline || false;\n const align = field.align || 'left'; // 'left', 'center', 'right'\n const customClass = field.className || '';\n\n // Size mappings\n const sizeClasses = {\n sm: 'text-base font-semibold',\n md: 'text-lg font-semibold',\n lg: 'text-xl font-bold',\n xl: 'text-2xl font-bold',\n '2xl': 'text-3xl font-bold',\n '3xl': 'text-4xl font-bold',\n '4xl': 'text-5xl font-bold',\n };\n\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n\n const headerClass = `\n ${sizeClasses[size] || sizeClasses.lg}\n ${alignClasses[align] || alignClasses.left}\n ${underline ? 'border-b-2 border-gray-300 pb-2' : ''}\n ${customClass}\n text-gray-900\n `.trim();\n\n const descriptionClass = `\n mt-1 text-sm text-gray-600\n ${alignClasses[align] || alignClasses.left}\n `.trim();\n\n return (\n <div className=\"my-4\">\n <h2 className={headerClass}>\n {text}\n </h2>\n {description && (\n <p className={descriptionClass}>\n {description}\n </p>\n )}\n </div>\n );\n}\n\nexport default HeaderField;\n","import * as Popover from \"@radix-ui/react-popover\";\nimport { useState } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport \"react-day-picker/dist/style.css\";\n\nfunction DateRangeField({ field, formValues, handleChange, handleBlur }) {\n const [open, setOpen] = useState(false);\n const selected = formValues[field.name] ?? null;\n\n const handleSelect = (date) => handleChange(field.name, date);\n const handleClear = () => handleChange(field.name, null);\n\n return (\n <div>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n id={field.name}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n onKeyDown={(e) => e.key === \"Enter\" && setOpen(true)}\n className=\"\n inline-flex items-center justify-between gap-2\n w-full h-9 rounded-md border border-gray-300 bg-white\n px-3 py-2 text-sm font-normal shadow-sm\n hover:bg-gray-50 hover:text-gray-900\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\n disabled:cursor-not-allowed disabled:opacity-50\n \"\n >\n {selected ? (\n <span>{selected.toLocaleDateString()}</span>\n ) : (\n <span className=\"text-muted-foreground\">\n {field.placeholder || \"Select date\"}\n </span>\n )}\n\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down opacity-70\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={2}\n className=\"z-50 rounded-md border border-gray-200 bg-white p-0 shadow-md w-auto\"\n >\n <DayPicker\n mode=\"single\"\n selected={selected}\n onSelect={handleSelect}\n showOutsideDays\n className=\"rounded-md bg-white p-3 text-xs\"\n />\n \n {/* Action buttons */}\n <div className=\"flex items-center justify-between gap-2 border-t border-gray-200 p-3\">\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-gray-300 bg-white hover:bg-gray-100 hover:text-gray-900 h-9 px-4 py-2\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-blue-600 text-white hover:bg-blue-700 h-9 px-4 py-2\"\n >\n Done\n </button>\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n}\n\nexport default DateRangeField;\n","import React, { useState } from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\n\nfunction TimeField({ field, formValues, handleChange, handleBlur }) {\n const [open, setOpen] = useState(false);\n const [hours, setHours] = useState(\"12\");\n const [minutes, setMinutes] = useState(\"00\");\n const [period, setPeriod] = useState(\"PM\");\n\n const value = formValues[field.name] || \"\";\n\n // Parse existing value if present\n React.useEffect(() => {\n if (value) {\n const timeMatch = value.match(/(\\d{1,2}):(\\d{2})\\s*(AM|PM)/i);\n if (timeMatch) {\n setHours(timeMatch[1].padStart(2, \"0\"));\n setMinutes(timeMatch[2]);\n setPeriod(timeMatch[3].toUpperCase());\n }\n }\n }, [value]);\n\n const handleApply = () => {\n const timeString = `${hours}:${minutes} ${period}`;\n handleChange(field.name, timeString);\n setOpen(false);\n };\n\n const handleClear = () => {\n handleChange(field.name, \"\");\n setHours(\"12\");\n setMinutes(\"00\");\n setPeriod(\"PM\");\n };\n\n const incrementHours = () => {\n const h = parseInt(hours);\n setHours(((h % 12) + 1).toString().padStart(2, \"0\"));\n };\n\n const decrementHours = () => {\n const h = parseInt(hours);\n setHours((h === 1 ? 12 : h - 1).toString().padStart(2, \"0\"));\n };\n\n const incrementMinutes = () => {\n const m = parseInt(minutes);\n setMinutes(((m + 5) % 60).toString().padStart(2, \"0\"));\n };\n\n const decrementMinutes = () => {\n const m = parseInt(minutes);\n setMinutes((m === 0 ? 55 : m - 5).toString().padStart(2, \"0\"));\n };\n\n return (\n <div>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n id={field.name}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n className=\"\n inline-flex items-center justify-between gap-2\n w-full h-9 rounded-md border border-gray-300 bg-white\n px-3 py-2 text-sm font-normal shadow-sm\n hover:bg-gray-50 hover:text-gray-900\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\n disabled:cursor-not-allowed disabled:opacity-50\n \"\n >\n {value ? (\n <span>{value}</span>\n ) : (\n <span className=\"text-gray-400\">\n {field.placeholder || \"Select time\"}\n </span>\n )}\n\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-clock opacity-70\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={2}\n className=\"z-50 rounded-md border border-gray-200 bg-white p-4 shadow-md w-64\"\n >\n <div className=\"flex flex-col gap-4\">\n {/* Time picker */}\n <div className=\"flex items-center justify-center gap-2\">\n {/* Hours */}\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n onClick={incrementHours}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <input\n type=\"text\"\n value={hours}\n onChange={(e) => {\n const val = e.target.value.replace(/\\D/g, \"\");\n if (val === \"\" || (parseInt(val) >= 1 && parseInt(val) <= 12)) {\n setHours(val.padStart(2, \"0\"));\n }\n }}\n className=\"w-14 text-center text-2xl font-semibold border-0 focus:outline-none focus:ring-2 focus:ring-blue-500 rounded py-2\"\n maxLength=\"2\"\n />\n <button\n type=\"button\"\n onClick={decrementHours}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n\n <span className=\"text-2xl font-semibold\">:</span>\n\n {/* Minutes */}\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n onClick={incrementMinutes}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <input\n type=\"text\"\n value={minutes}\n onChange={(e) => {\n const val = e.target.value.replace(/\\D/g, \"\");\n if (val === \"\" || (parseInt(val) >= 0 && parseInt(val) <= 59)) {\n setMinutes(val.padStart(2, \"0\"));\n }\n }}\n className=\"w-14 text-center text-2xl font-semibold border-0 focus:outline-none focus:ring-2 focus:ring-blue-500 rounded py-2\"\n maxLength=\"2\"\n />\n <button\n type=\"button\"\n onClick={decrementMinutes}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n\n {/* AM/PM */}\n <div className=\"flex flex-col gap-1 ml-2\">\n <button\n type=\"button\"\n onClick={() => setPeriod(\"AM\")}\n className={`\n px-3 py-1 text-sm font-medium rounded\n ${\n period === \"AM\"\n ? \"bg-blue-600 text-white\"\n : \"bg-gray-100 text-gray-700 hover:bg-gray-200\"\n }\n `}\n >\n AM\n </button>\n <button\n type=\"button\"\n onClick={() => setPeriod(\"PM\")}\n className={`\n px-3 py-1 text-sm font-medium rounded\n ${\n period === \"PM\"\n ? \"bg-blue-600 text-white\"\n : \"bg-gray-100 text-gray-700 hover:bg-gray-200\"\n }\n `}\n >\n PM\n </button>\n </div>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center justify-between gap-2 border-t border-gray-200 pt-3\">\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-gray-300 bg-white hover:bg-gray-100 hover:text-gray-900 h-9 px-4 py-2\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n onClick={handleApply}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-blue-600 text-white hover:bg-blue-700 h-9 px-4 py-2\"\n >\n Done\n </button>\n </div>\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n}\n\nexport default TimeField;","import React from \"react\";\nimport { Error, Success, Warning, Info } from \"../components/formats/alerts/Alerts.jsx\";\n\nfunction AlertMessageField({ field }) {\n const { variant = \"info\", message, content } = field;\n\n const alertMessage = message || content || \"\";\n\n // Render based on variant type\n switch (variant.toLowerCase()) {\n case \"error\":\n case \"danger\":\n return <Error message={alertMessage} />;\n\n case \"success\":\n return <Success message={alertMessage} />;\n\n case \"warning\":\n case \"warn\":\n return <Warning message={alertMessage} />;\n\n case \"info\":\n case \"information\":\n default:\n return <Info message={alertMessage} />;\n }\n}\n\nexport default AlertMessageField;","import { InformationCircleIcon, XCircleIcon } from \"@heroicons/react/20/solid\";\nimport { CheckCircleIcon } from \"@heroicons/react/20/solid\";\nimport { ExclamationCircleIcon } from \"@heroicons/react/24/outline\";\nimport { htmlMarkup } from \"../../../../utils/html_markup\";\n\nfunction Error({ message }) {\n return (\n <div className=\"rounded-lg bg-red-50 border border-red-100 p-4 shadow-sm\">\n <div className=\"flex items-center gap-3\">\n <XCircleIcon aria-hidden=\"true\" className=\"size-5 text-red-500 shrink-0\" />\n <span className=\"text-sm font-medium text-red-900\">{message}</span>\n </div>\n </div>\n );\n}\nfunction Warning({ message }) {\n return (\n <div className=\"rounded-lg bg-amber-50 border border-amber-100 p-4 shadow-sm\">\n <div className=\"flex items-center gap-3\">\n <ExclamationCircleIcon\n aria-hidden=\"true\"\n className=\"size-5 text-amber-600 shrink-0\"\n />\n <span className=\"text-sm font-medium text-amber-900\">{message}</span>\n </div>\n </div>\n );\n}\n\nfunction Success({ message }) {\n return (\n <div className=\"rounded-lg bg-green-50 border border-green-100 p-4 shadow-sm\">\n <div className=\"flex items-center gap-3\">\n <CheckCircleIcon\n aria-hidden=\"true\"\n className=\"size-5 text-green-600 shrink-0\"\n />\n <span className=\"text-sm font-medium text-green-900\">{message}</span>\n </div>\n </div>\n );\n}\n\nfunction Info({ message }) {\n return (\n <div className=\"rounded-lg bg-blue-50 border border-blue-100 p-4 shadow-sm\">\n <div className=\"flex items-center gap-3\">\n <InformationCircleIcon\n aria-hidden=\"true\"\n className=\"size-5 text-blue-600 shrink-0\"\n />\n <span className=\"text-sm font-medium text-blue-900\">{message}</span>\n </div>\n </div>\n );\n}\n\nexport { Error, Success, Warning, Info };"],"mappings":"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","names":["index_exports","__export","DynamicForm_default","MyButton","index_default","__toCommonJS","import_jsx_runtime","MyButton","children","onClick","import_react","import_react_hot_toast","import_dayjs","import_axios","import_react_hot_toast","config","apiClient","axios","config","response","error","_a","toast","Interceptors_default","import_jsx_runtime","HiddenField","field","HiddenField_default","import_react_select","import_animated","import_jsx_runtime","MultiSelectField","field","formValues","handleChange","touched","errors","handleBlur","isDisabled","options","animatedComponents","makeAnimated","currentValues","Select","selected","MultiSelectField_default","Select","import_react","import_solid","import_jsx_runtime","SelectField","field","formValues","handleChange","handleBlur","_a","value","isDisabled","options","val","option","SelectField_default","import_react","import_jsx_runtime","EmailField","field","formValues","handleChange","handleBlur","touched","errors","isDisabled","e","EmailField_default","import_react","import_jsx_runtime","InputField","field","formValues","handleChange","handleBlur","touched","errors","isDisabled","e","InputField_default","import_react","import_jsx_runtime","HtmlField","field","formValues","htmlContent","HtmlField_default","import_jsx_runtime","CheckboxField","field","formValues","handleChange","handleBlur","touched","errors","isDisabled","error","e","CheckboxField_default","Popover","import_react","import_react_day_picker","import_style","import_jsx_runtime","DateRangeField","field","formValues","handleChange","handleBlur","open","setOpen","selected","handleSelect","range","handleClear","e","DateRangePickerField_default","import_react","import_react_hot_toast","import_jsx_runtime","FileField","field","formValues","touched","errors","fileUploads","setFileUploads","fileInputRefs","handleChange","onFieldsChange","error","isMultiple","uploads","currentValues","values","isDisabled","disablebtnClasses","uploadUrl","config","formatFileSize","bytes","k","sizes","i","uploadFile","file","fieldName","formData","response","handleSingleFileUpload","uploadedData","newValues","handleMultiFileUpload","files","currentUrls","uploadedUrls","newUrls","handleFileChange","fileList","removeFile","urlToRemove","newValue","url","el","e","index","upload","u","fileName","FileField_default","import_react","import_jsx_runtime","TextAreaField","field","formValues","handleChange","handleBlur","touched","errors","charCount","setCharCounts","textareaRef","value","isDisabled","error","autoResize","el","handleTextareaChange","e","prev","TextArea_default","import_react","import_jsx_runtime","DayTimePickerField","field","formValues","handleChange","handleBlur","touched","errors","e","DayTimePickerField_default","import_react_separator","import_jsx_runtime","LineBreakField","field","LineBreakField_default","import_react","RadioGroup","import_jsx_runtime","RadioGroupField","field","formValues","handleChange","handleBlur","value","isDisabled","options","isInline","val","option","optionValue","optionLabel","optionDescription","itemId","RadioGroups_default","import_react","import_jsx_runtime","HeaderField","field","text","description","size","underline","align","customClass","sizeClasses","alignClasses","headerClass","descriptionClass","HeaderField_default","Popover","import_react","import_react_day_picker","import_style","import_jsx_runtime","DateRangeField","field","formValues","handleChange","handleBlur","open","setOpen","selected","handleSelect","date","handleClear","e","DatePickerField_default","import_react","Popover","import_jsx_runtime","TimeField","field","formValues","handleChange","handleBlur","open","setOpen","hours","setHours","minutes","setMinutes","period","setPeriod","value","React","timeMatch","handleApply","timeString","handleClear","incrementHours","h","decrementHours","incrementMinutes","m","decrementMinutes","e","val","timeField_default","import_react","import_solid","import_outline","import_jsx_runtime","Error","message","Warning","Success","Info","import_jsx_runtime","AlertMessageField","field","variant","message","content","alertMessage","Error","Success","Warning","Info","AlertMessageField_default","import_react_label","import_jsx_runtime","DynamicForm","formDefinition","sendFormValues","children","defaultValues","onFieldsChange","formValues","setFormValues","errors","setErrors","touched","setTouched","charCounts","setCharCounts","excludeFromFieldFormat","FIELD_RENDERERS","FileField_default","DateRangePickerField_default","DatePickerField_default","DayTimePickerField_default","timeField_default","HiddenField_default","MultiSelectField_default","SelectField_default","EmailField_default","HtmlField_default","CheckboxField_default","RadioGroups_default","InputField_default","TextArea_default","HeaderField_default","AlertMessageField_default","LineBreakField_default","FIELD_FORMATTERS","loadOptionsForField","field","dependentValue","response","Interceptors_default","options","item","f","error","initialValues","validateField","value","allValues","dayjs","handleChange","fieldName","newValues","option","newErrors","handleBlur","handleSubmit","e","allTouched","FIELD_COLOR_VARIANTS","fieldFormat","containerStyle","color","containerClasses","content","renderField","FieldComponent","DynamicForm_default","index_default","DynamicForm_default"]}
1
+ {"version":3,"sources":["../src/index.jsx","#style-inject:#style-inject","../src/styles.css","../src/DynamicForm/DynamicForm.jsx","../src/DynamicForm/fields/HiddenField.jsx","../src/DynamicForm/fields/MultiSelectField.jsx","../src/DynamicForm/fields/SelectField.jsx","../src/DynamicForm/fields/EmailField.jsx","../src/DynamicForm/fields/InputField.jsx","../src/DynamicForm/fields/HtmlField.jsx","../src/DynamicForm/fields/CheckboxField.jsx","../src/DynamicForm/fields/DateRangePickerField.jsx","../src/DynamicForm/fields/FileField.jsx","../src/DynamicForm/fields/TextArea.jsx","../src/DynamicForm/fields/DayTimePickerField.jsx","../src/DynamicForm/fields/LineBreakField.jsx","../src/DynamicForm/fields/RadioGroups.jsx","../src/DynamicForm/fields/HeaderField.jsx","../src/DynamicForm/fields/DatePickerField.jsx","../src/DynamicForm/fields/timeField.jsx","../src/DynamicForm/fields/AlertMessageField.jsx","../src/DynamicForm/components/formats/alerts/Alerts.jsx"],"sourcesContent":["import './styles.css';\n\nexport { default as DynamicForm } from './DynamicForm/DynamicForm.jsx';\n\n// Default exports for backward compatibility\n\nimport DynamicFormComponent from './DynamicForm/DynamicForm.jsx';\n\n// Export default as DynamicForm (main component)\nexport default DynamicFormComponent;\n\n// Also export a default MyButton for direct import\nexport { DynamicFormComponent };","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"/*! tailwindcss v4.1.15 | MIT License | https://tailwindcss.com */@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: ui-sans-serif, system-ui, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\";--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;--color-red-50: oklch(97.1% .013 17.38);--color-red-100: oklch(93.6% .032 17.717);--color-red-500: oklch(63.7% .237 25.331);--color-red-700: oklch(50.5% .213 27.518);--color-red-900: oklch(39.6% .141 25.723);--color-orange-50: oklch(98% .016 73.684);--color-orange-500: oklch(70.5% .213 47.604);--color-amber-50: oklch(98.7% .022 95.277);--color-amber-100: oklch(96.2% .059 95.617);--color-amber-600: oklch(66.6% .179 58.318);--color-amber-900: oklch(41.4% .112 45.904);--color-yellow-50: oklch(98.7% .026 102.212);--color-yellow-500: oklch(79.5% .184 86.047);--color-green-50: oklch(98.2% .018 155.826);--color-green-100: oklch(96.2% .044 156.743);--color-green-500: oklch(72.3% .219 149.579);--color-green-600: oklch(62.7% .194 149.214);--color-green-900: oklch(39.3% .095 152.535);--color-blue-50: oklch(97% .014 254.604);--color-blue-100: oklch(93.2% .032 255.585);--color-blue-200: oklch(88.2% .059 254.128);--color-blue-400: oklch(70.7% .165 254.624);--color-blue-500: oklch(62.3% .214 259.815);--color-blue-600: oklch(54.6% .245 262.881);--color-blue-700: oklch(48.8% .243 264.376);--color-blue-900: oklch(37.9% .146 265.522);--color-indigo-50: oklch(96.2% .018 272.314);--color-indigo-500: oklch(58.5% .233 277.117);--color-purple-50: oklch(97.7% .014 308.299);--color-purple-500: oklch(62.7% .265 303.9);--color-pink-50: oklch(97.1% .014 343.198);--color-pink-500: oklch(65.6% .241 354.308);--color-gray-50: oklch(98.5% .002 247.839);--color-gray-100: oklch(96.7% .003 264.542);--color-gray-200: oklch(92.8% .006 264.531);--color-gray-300: oklch(87.2% .01 258.338);--color-gray-400: oklch(70.7% .022 261.325);--color-gray-500: oklch(55.1% .027 264.364);--color-gray-600: oklch(44.6% .03 256.802);--color-gray-700: oklch(37.3% .034 259.733);--color-gray-900: oklch(21% .034 264.665);--color-black: #000;--color-white: #fff;--spacing: .25rem;--container-2xl: 42rem;--container-4xl: 56rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-base: 1rem;--text-base--line-height: 1.5 ;--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--text-xl: 1.25rem;--text-xl--line-height: calc(1.75 / 1.25);--text-2xl: 1.5rem;--text-2xl--line-height: calc(2 / 1.5);--text-3xl: 1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl: 2.25rem;--text-4xl--line-height: calc(2.5 / 2.25);--text-5xl: 3rem;--text-5xl--line-height: 1;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--tracking-wide: .025em;--radius-md: .375rem;--radius-lg: .5rem;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--font-sans);--default-mono-font-family: var(--font-mono)}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor;@supports (color: color-mix(in lab,red,red)){&{color:color-mix(in oklab,currentcolor 50%,transparent)}}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.z-50{z-index:50}.col-span-8{grid-column:span 8 / span 8}.col-span-full{grid-column:1 / -1}.container{width:100%;@media(width>=40rem){max-width:40rem}@media(width>=48rem){max-width:48rem}@media(width>=64rem){max-width:64rem}@media(width>=80rem){max-width:80rem}@media(width>=96rem){max-width:96rem}}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-2{height:calc(var(--spacing) * 2)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-\\\\[70vh\\\\]{max-height:70vh}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-14{width:calc(var(--spacing) * 14)}.w-64{width:calc(var(--spacing) * 64)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-none{max-width:none}.min-w-\\\\[var\\\\(--radix-select-trigger-width\\\\)\\\\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}}.space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.space-x-2{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-amber-100{border-color:var(--color-amber-100)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-500{border-color:var(--color-blue-500)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-500{border-color:var(--color-gray-500)}.border-green-100{border-color:var(--color-green-100)}.border-green-500{border-color:var(--color-green-500)}.border-indigo-500{border-color:var(--color-indigo-500)}.border-orange-500{border-color:var(--color-orange-500)}.border-pink-500{border-color:var(--color-pink-500)}.border-purple-500{border-color:var(--color-purple-500)}.border-red-100{border-color:var(--color-red-100)}.border-red-500{border-color:var(--color-red-500)}.border-yellow-500{border-color:var(--color-yellow-500)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-black\\\\/30{background-color:color-mix(in srgb,#000 30%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-50{background-color:var(--color-green-50)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-red-50{background-color:var(--color-red-50)}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.fill-white{fill:var(--color-white)}.stroke-gray-200{stroke:var(--color-gray-200)}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading, var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading, var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading, var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading, var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading, var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading, var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.font-bold{--tw-font-weight: var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight: var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking: var(--tracking-wide);letter-spacing:var(--tracking-wide)}.whitespace-nowrap{white-space:nowrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-900{color:var(--color-amber-900)}.text-blue-600{color:var(--color-blue-600)}.text-blue-900{color:var(--color-blue-900)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-600{color:var(--color-green-600)}.text-green-900{color:var(--color-green-900)}.text-red-500{color:var(--color-red-500)}.text-red-900{color:var(--color-red-900)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.opacity-50{opacity:50%}.opacity-70{opacity:70%}.shadow{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}.file\\\\:border-0{&::file-selector-button{border-style:var(--tw-border-style);border-width:0px}}.file\\\\:bg-transparent{&::file-selector-button{background-color:transparent}}.file\\\\:text-sm{&::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}}.file\\\\:font-medium{&::file-selector-button{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}}.after\\\\:block{&:after{content:var(--tw-content);display:block}}.after\\\\:h-1\\\\.5{&:after{content:var(--tw-content);height:calc(var(--spacing) * 1.5)}}.after\\\\:w-1\\\\.5{&:after{content:var(--tw-content);width:calc(var(--spacing) * 1.5)}}.after\\\\:rounded-full{&:after{content:var(--tw-content);border-radius:calc(infinity * 1px)}}.after\\\\:bg-white{&:after{content:var(--tw-content);background-color:var(--color-white)}}.after\\\\:content-\\\\[\\\\'\\\\'\\\\]{&:after{--tw-content: \\\"\\\";content:var(--tw-content)}}.hover\\\\:border-blue-400{&:hover{@media(hover:hover){border-color:var(--color-blue-400)}}}.hover\\\\:border-gray-400{&:hover{@media(hover:hover){border-color:var(--color-gray-400)}}}.hover\\\\:bg-blue-700{&:hover{@media(hover:hover){background-color:var(--color-blue-700)}}}.hover\\\\:bg-gray-50{&:hover{@media(hover:hover){background-color:var(--color-gray-50)}}}.hover\\\\:bg-gray-100{&:hover{@media(hover:hover){background-color:var(--color-gray-100)}}}.hover\\\\:bg-gray-200{&:hover{@media(hover:hover){background-color:var(--color-gray-200)}}}.hover\\\\:text-gray-500{&:hover{@media(hover:hover){color:var(--color-gray-500)}}}.hover\\\\:text-gray-900{&:hover{@media(hover:hover){color:var(--color-gray-900)}}}.hover\\\\:text-red-700{&:hover{@media(hover:hover){color:var(--color-red-700)}}}.focus\\\\:ring-2{&:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\\\\:ring-blue-500{&:focus{--tw-ring-color: var(--color-blue-500)}}.focus\\\\:ring-offset-2{&:focus{--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.focus\\\\:outline-none{&:focus{--tw-outline-style: none;outline-style:none}}.focus-visible\\\\:ring-2{&:focus-visible{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus-visible\\\\:ring-blue-500{&:focus-visible{--tw-ring-color: var(--color-blue-500)}}.focus-visible\\\\:ring-red-500{&:focus-visible{--tw-ring-color: var(--color-red-500)}}.focus-visible\\\\:ring-offset-2{&:focus-visible{--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.focus-visible\\\\:outline-none{&:focus-visible{--tw-outline-style: none;outline-style:none}}.disabled\\\\:pointer-events-none{&:disabled{pointer-events:none}}.disabled\\\\:cursor-not-allowed{&:disabled{cursor:not-allowed}}.disabled\\\\:opacity-50{&:disabled{opacity:50%}}.data-\\\\[state\\\\=checked\\\\]\\\\:border-blue-600{&[data-state=checked]{border-color:var(--color-blue-600)}}.data-\\\\[state\\\\=checked\\\\]\\\\:bg-blue-50{&[data-state=checked]{background-color:var(--color-blue-50)}}.data-\\\\[state\\\\=checked\\\\]\\\\:bg-blue-600{&[data-state=checked]{background-color:var(--color-blue-600)}}.data-\\\\[state\\\\=checked\\\\]\\\\:text-blue-600{&[data-state=checked]{color:var(--color-blue-600)}}}@property --tw-space-y-reverse{syntax: \\\"*\\\"; inherits: false; initial-value: 0;}@property --tw-space-x-reverse{syntax: \\\"*\\\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \\\"*\\\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \\\"*\\\"; inherits: false;}@property --tw-tracking{syntax: \\\"*\\\"; inherits: false;}@property --tw-shadow{syntax: \\\"*\\\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \\\"*\\\"; inherits: false;}@property --tw-shadow-alpha{syntax: \\\"<percentage>\\\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \\\"*\\\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \\\"*\\\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \\\"<percentage>\\\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \\\"*\\\"; inherits: false;}@property --tw-ring-shadow{syntax: \\\"*\\\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \\\"*\\\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \\\"*\\\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \\\"*\\\"; inherits: false;}@property --tw-ring-offset-width{syntax: \\\"<length>\\\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \\\"*\\\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \\\"*\\\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-blur{syntax: \\\"*\\\"; inherits: false;}@property --tw-brightness{syntax: \\\"*\\\"; inherits: false;}@property --tw-contrast{syntax: \\\"*\\\"; inherits: false;}@property --tw-grayscale{syntax: \\\"*\\\"; inherits: false;}@property --tw-hue-rotate{syntax: \\\"*\\\"; inherits: false;}@property --tw-invert{syntax: \\\"*\\\"; inherits: false;}@property --tw-opacity{syntax: \\\"*\\\"; inherits: false;}@property --tw-saturate{syntax: \\\"*\\\"; inherits: false;}@property --tw-sepia{syntax: \\\"*\\\"; inherits: false;}@property --tw-drop-shadow{syntax: \\\"*\\\"; inherits: false;}@property --tw-drop-shadow-color{syntax: \\\"*\\\"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: \\\"<percentage>\\\"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: \\\"*\\\"; inherits: false;}@property --tw-content{syntax: \\\"*\\\"; initial-value: \\\"\\\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse: 0;--tw-space-x-reverse: 0;--tw-border-style: solid;--tw-font-weight: initial;--tw-tracking: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-content: \\\"\\\"}}}\\n\")","import { useState, useEffect, useRef, useMemo } from \"react\";\nimport { toast } from \"react-hot-toast\";\nimport dayjs from \"dayjs\";\n// import \"dayjs/locale/de\"; // Remove this to avoid module resolution issues\n// Removed: import apiClient from \"../services/Interceptors.jsx\"; - now passed as prop\nimport { default as RenderHiddenField } from \"./fields/HiddenField.jsx\";\nimport { default as RenderMultiSelectField } from \"./fields/MultiSelectField.jsx\";\nimport { default as RenderSelectField } from \"./fields/SelectField.jsx\";\nimport { default as RenderEmailField } from \"./fields/EmailField.jsx\";\nimport { default as RenderInputField } from \"./fields/InputField.jsx\";\nimport { default as RenderHtmlField } from \"./fields/HtmlField.jsx\";\nimport { default as RenderCheckboxField } from \"./fields/CheckboxField.jsx\";\nimport { default as RenderDayPickerField } from \"./fields/DateRangePickerField.jsx\";\nimport { default as RenderFileInputField } from \"./fields/FileField.jsx\";\nimport { default as RenderTextAreaField } from \"./fields/TextArea.jsx\";\nimport { default as DayTimePickerField } from \"./fields/DayTimePickerField.jsx\";\nimport { default as RenderLineBreakField } from \"./fields/LineBreakField.jsx\";\nimport { default as RenderRadioGroupField } from \"./fields/RadioGroups.jsx\";\nimport { default as RenderHeaderField } from \"./fields/HeaderField.jsx\";\nimport { default as RenderDatePickerField } from \"./fields/DatePickerField.jsx\";\nimport { default as RenderTimeField } from \"./fields/timeField.jsx\";\nimport { default as RenderAlertMessageField } from \"./fields/AlertMessageField.jsx\";\nimport { Label } from \"@radix-ui/react-label\";\nconst DynamicForm = ({\n apiClient,\n api_URL,\n formDefinition,\n sendFormValues,\n children,\n defaultValues = {},\n onFieldsChange = () => { },\n}) => {\n\n const [formValues, setFormValues] = useState({ ...defaultValues });\n const [errors, setErrors] = useState({});\n const [touched, setTouched] = useState({});\n const [charCounts, setCharCounts] = useState({});\n const excludeFromFieldFormat = [\"hidden\", \"html\", \"linebreak\", \"header\", \"alert\"];\n const FIELD_RENDERERS = useMemo(() => ({\n file: RenderFileInputField,\n multifile: RenderFileInputField,\n dateRange: RenderDayPickerField,\n date: RenderDatePickerField,\n dayTimePicker: DayTimePickerField,\n time: RenderTimeField,\n hidden: RenderHiddenField,\n multiselect: RenderMultiSelectField,\n select: RenderSelectField,\n email: RenderEmailField,\n litertext: RenderHtmlField,\n checkbox: RenderCheckboxField,\n radiogroup: RenderRadioGroupField,\n input: RenderInputField,\n textarea: RenderTextAreaField,\n header: RenderHeaderField,\n alert: RenderAlertMessageField,\n linebreak: RenderLineBreakField,\n\n }), []);\n\n\n const loadOptionsForField = async (field, dependentValue = null) => {\n // Check if apiClient is provided, if not throw an error\n if (!apiClient) {\n const errorMsg = `apiClient prop is required when using fields with optionsUrl. Field \"${field.name}\" requires optionsUrl but no apiClient was provided.`;\n console.error(errorMsg);\n toast.error(errorMsg);\n return;\n }\n\n try {\n const response = await apiClient(`/${field.optionsUrl}`);\n // Add empty option at the beginning if not exists\n let options = [];\n if (field.type === \"select\") {\n options = [\n { value: \"\", label: `Select ${field.label.toLowerCase()}` },\n ...response.data,\n ];\n } else {\n options = [...response.data.map((item) => (\n { value: item.value, label: item.label }\n ))];\n }\n formDefinition.fields.forEach((f) => {\n if (f.name === field.name) {\n f.options = options;\n }\n });\n //setFieldOptions((prev) => ({ ...prev, [field.name]: options }));\n } catch (error) {\n console.error(`Failed to load options for ${field.name}:`, error);\n } finally {\n }\n };\n\n\n useEffect(() => {\n if (formDefinition?.fields && formDefinition.fields.length > 0) {\n // Wait until at least one field has a non-empty value\n const hasData = formDefinition.fields.some((f) => f.value);\n if (!hasData) return; // Don't set empty values early\n\n // Load async options\n formDefinition.fields.forEach((field) => {\n if (field.optionsUrl) loadOptionsForField(field);\n });\n\n // Initialise form values\n const initialValues = {};\n formDefinition.fields.forEach((field) => {\n initialValues[field.name] =\n defaultValues[field.name] ??\n field.value ??\n (field.type === \"multiselect\" ? [] : \"\");\n });\n\n setFormValues(initialValues);\n }\n }, [formDefinition]);\n\n\n\n\n\n const validateField = (field, value, allValues) => {\n if (field.disabled && field.disabled(allValues)) {\n return null;\n }\n\n if (field.required) {\n if (!value) {\n return `${field.label} is required`;\n }\n if (Array.isArray(value) && value.length === 0) {\n return `Please select at least one ${field.label.toLowerCase()}`;\n }\n }\n\n if (field.validate) {\n const error = field.validate(value, allValues);\n if (error) return error;\n }\n\n // Email validation addition\n if (field.type === \"email\") {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) return \"Please enter a valid email address\";\n }\n\n if (field.type === \"number\") {\n if (field.min !== undefined && value < field.min) {\n return `${field.label} must be at least ${field.min}`;\n }\n if (field.max !== undefined && value > field.max) {\n return `${field.label} must be no more than ${field.max}`;\n }\n }\n\n if (field.type === \"date\") {\n // Ensure the value is a valid date\n if (!dayjs(value).isValid()) {\n return `${field.label} must be a valid date`;\n }\n }\n\n if (field.maxLength && value && value.length > field.maxLength) {\n return `${field.label} must not exceed ${field.maxLength} characters`;\n }\n\n return null;\n };\n\n\n const handleChange = (fieldName, value) => {\n const field = formDefinition.fields.find((f) => f.name === fieldName);\n if (!field) return;\n\n const newValues = { ...formValues };\n // Handle multiselect values\n if (field.type === \"multiselect\") {\n newValues[fieldName] = Array.isArray(value)\n ? value\n : Array.from(value.target.selectedOptions).map((option) => option.value);\n }\n // Handle DateRangePicker (dayPicker)\n\n else if (field.type === \"dateRange\") {\n newValues[fieldName] = [\n {\n startDate: value[0].from,\n endDate: value[0].to,\n key: \"selection\",\n },\n ];\n\n }\n // Handle DateTime Picker\n else if (field.type === \"dayTimePicker\") {\n newValues[fieldName] = value ? dayjs(value).format(\"YYYY-MM-DD HH:mm:ss\") : \"\";\n }\n else {\n newValues[fieldName] = value;\n }\n\n // Clear dependent fields when parent selection changes\n if (field.type === \"select\") {\n formDefinition.fields.forEach((f) => {\n if (f.showIf && !f.showIf(newValues)) {\n newValues[f.name] = f.type === \"multiselect\" ? [] : \"\";\n }\n });\n }\n\n formDefinition.fields.forEach((f) => {\n if (f.disabled && f.disabled(newValues)) {\n newValues[f.name] = f.type === \"multiselect\" ? [] : \"\";\n }\n });\n\n setFormValues(newValues);\n\n // Validate all fields\n const newErrors = {};\n formDefinition.fields.forEach((f) => {\n if (!f.showIf || f.showIf(newValues)) {\n const error = validateField(f, newValues[f.name], newValues);\n if (error) newErrors[f.name] = error;\n }\n });\n\n setErrors(newErrors);\n };\n\n\n const handleBlur = (fieldName) => {\n setTouched({ ...touched, [fieldName]: true });\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n\n const allTouched = {};\n formDefinition.fields.forEach((field) => {\n allTouched[field.name] = true;\n });\n setTouched(allTouched);\n\n const newErrors = {};\n formDefinition.fields.forEach((field) => {\n if (\n (!field.showIf || field.showIf(formValues)) &&\n (!field.disabled || !field.disabled(formValues))\n ) {\n const error = validateField(field, formValues[field.name], formValues);\n if (error) newErrors[field.name] = error;\n }\n });\n\n setErrors(newErrors);\n\n if (Object.keys(newErrors).length === 0) {\n sendFormValues(formValues);\n } else {\n toast.error(\"Please correct the errors in the form\");\n }\n };\n\n\n useEffect(() => {\n\n onFieldsChange(formValues);\n\n }, [formValues, onFieldsChange]);\n\n\n // Color variants for field card container\n const FIELD_COLOR_VARIANTS = {\n green: 'border-green-500 bg-green-50',\n blue: 'border-blue-500 bg-blue-50',\n red: 'border-red-500 bg-red-50',\n yellow: 'border-yellow-500 bg-yellow-50',\n purple: 'border-purple-500 bg-purple-50',\n indigo: 'border-indigo-500 bg-indigo-50',\n gray: 'border-gray-500 bg-gray-50',\n pink: 'border-pink-500 bg-pink-50',\n orange: 'border-orange-500 bg-orange-50',\n };\n\n\n function fieldFormat(children, field, error) {\n if (excludeFromFieldFormat.includes(field.type)) {\n return <div className={field.fieldClass || \"col-span-8\"}>{children}</div>;\n }\n\n const containerStyle = field.containerStyle;\n const color = field.color || 'blue';\n const containerClasses = containerStyle === 'card'\n ? `rounded-lg border text-card-foreground shadow-sm p-4 ${field.containerClassName || FIELD_COLOR_VARIANTS[color] || FIELD_COLOR_VARIANTS.blue}`\n : '';\n\n const content = (\n <>\n {field.label && (\n <Label\n htmlFor={field.name}\n className=\"block text-sm font-medium mb-1\"\n >\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </Label>\n )}\n\n {/* InputField or any other field goes here */}\n <div>{children}</div>\n\n {error && (\n <p className=\"mt-1 text-sm text-red-500\">\n {error}\n </p>\n )}\n </>\n );\n\n return (\n <div className={`mb-4 ${field.fieldClass || \"col-span-8\"}`}>\n {containerStyle === 'card' ? (\n <div className={containerClasses}>\n {content}\n </div>\n ) : content}\n </div>\n );\n }\n\n const renderField = (field) => {\n if (field.showIf && !field.showIf(formValues)) return null;\n\n const FieldComponent = FIELD_RENDERERS[field.type] || RenderInputField;\n if (formValues[field.name] === undefined) {\n formValues[field.name] =\n field.value !== undefined\n ? field.value\n : field.type === \"multiselect\"\n ? []\n : \"\";\n }\n\n const error = touched[field.name] && errors[field.name] ? errors[field.name] : null;\n\n return (fieldFormat(\n <FieldComponent\n field={field}\n formValues={formValues}\n handleChange={handleChange}\n handleBlur={() => handleBlur(field.name)}\n setCharCounts={setCharCounts}\n charCount={charCounts[field.name] || 0}\n api_URL={api_URL}\n //error={error}\n />, field\n )\n );\n };\n\n\n return (\n <form onSubmit={handleSubmit} className=\"grid grid-cols-12 gap-x-4 mx-auto\">\n {formDefinition ? (\n formDefinition.fields.map(renderField)\n ) : (\n <div>Loading...</div>\n )}\n {children}\n </form>\n );\n};\n\nexport default DynamicForm;","\n// This component renders a hidden input field for forms. This used to include data in form submissions without displaying it to the user.\nfunction HiddenField(field) {\n return <input type=\"hidden\" name={field.name} value={field.value} key={field.name} />;\n}\nexport default HiddenField;","import Select from 'react-select'\nimport makeAnimated from 'react-select/animated'\n\nfunction MultiSelectField({ field, formValues, handleChange, touched, errors, handleBlur }) {\n //const error = touched[field.name] && errors[field.name];\n const isDisabled = field.disabled && field.disabled(formValues);\n const options = field.options || [];\n\n const animatedComponents = makeAnimated();\n\n const currentValues = formValues[field.name] || [];\n\n return (\n\n <Select\n components={animatedComponents}\n isMulti\n isDisabled={isDisabled}\n name={field.label}\n value={currentValues}\n onChange={(selected) => handleChange(field.name, selected)}\n options={options}\n placeholder={field.placeholder}\n closeMenuOnSelect={false}\n />\n\n );\n}\nexport default MultiSelectField;","import * as Select from \"@radix-ui/react-select\";\nimport React from \"react\";\n// get arrow down icon from icon hero icon\nimport { ChevronDownIcon } from \"@heroicons/react/20/solid\";\n\nfunction SelectField({ field, formValues, handleChange, handleBlur }) {\n const value = formValues[field.name] || \"\";\n const isDisabled =\n typeof field.disabled === \"function\"\n ? field.disabled(formValues)\n : field.disabled;\n const options = field.options || [];\n\n return (\n <Select.Root\n value={value}\n onValueChange={(val) => handleChange(field.name, val)}\n disabled={isDisabled}\n >\n {/* --- Trigger --- */}\n <Select.Trigger\n id={field.name}\n onBlur={() => handleBlur(field.name)}\n className={`inline-flex items-center justify-between w-full px-3 py-2 border rounded-md text-sm transition-all\n ${isDisabled\n ? \"bg-gray-100 text-gray-500 cursor-not-allowed\"\n : \"border-gray-300 hover:border-gray-400 focus:ring-2 focus:ring-blue-500\"}\n `}\n >\n <Select.Value\n placeholder={\n field.placeholder || `Select ${field.label?.toLowerCase() || \"\"}`\n }\n />\n <Select.Icon className=\"ml-2 text-gray-500\">\n <ChevronDownIcon className=\"w-4 h-4\" />\n </Select.Icon>\n </Select.Trigger>\n\n {/* --- Dropdown --- */}\n <Select.Portal>\n <Select.Content\n className=\"bg-white border border-gray-200 rounded-md shadow-lg z-50 min-w-[var(--radix-select-trigger-width)]\"\n position=\"popper\"\n sideOffset={5}\n >\n {/* Scroll Up */}\n <Select.ScrollUpButton className=\"flex items-center justify-center h-6 text-gray-500 bg-gray-50\">\n <Select.Arrow className=\"fill-white stroke-gray-200\" />\n </Select.ScrollUpButton>\n\n <Select.Viewport className=\"p-1\">\n {/* Optional grouped items */}\n {field.groupLabel && (\n <Select.Group>\n <Select.Label className=\"px-2 py-1 text-xs text-gray-500 uppercase tracking-wide\">\n {field.groupLabel}\n </Select.Label>\n </Select.Group>\n )}\n\n {/* List of options */}\n {options.map((option) => (\n <Select.Item\n key={option.value}\n value={option.value}\n className={`relative flex items-center px-3 py-2 text-sm rounded cursor-pointer select-none\n data-[state=checked]:bg-blue-50\n data-[state=checked]:text-blue-600\n `}\n >\n <Select.ItemText>{option.label}</Select.ItemText>\n\n </Select.Item>\n ))}\n\n {/* Optional separator */}\n {field.separator && (\n <Select.Separator className=\"my-1 h-px bg-gray-200\" />\n )}\n </Select.Viewport>\n\n {/* Scroll Down */}\n\n {/* Optional arrow */}\n <Select.Arrow className=\"fill-white stroke-gray-200\" />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n}\n\nexport default SelectField;\n","import React from 'react';\n\nfunction EmailField({ field, formValues, handleChange, handleBlur, touched, errors }) {\n //const error = touched[field.name] && errors[field.name];\n const isDisabled = field.readOnly && field.disabled;\n const error = false;\n return (\n <input\n {...field.props}\n type=\"email\"\n value={formValues[field.name] || \"\"}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n name={field.name}\n placeholder={field.placeholder}\n className={`w-full px-3 py-2 border rounded-md ${\n error ? \"border-red-500\" : \"border-gray-300\"\n } ${isDisabled ? \"bg-gray-100 text-gray-500 cursor-not-allowed\" : \"\"}`}\n />\n );\n}\n\nexport default EmailField;","import React from \"react\";\n\nfunction InputField({ field, formValues, handleChange, handleBlur, touched, errors }) {\n const isDisabled = field.readOnly || field.disabled;\n const error = false\n return (\n <input\n {...field.props}\n id={field.name}\n type={field.type || \"text\"}\n value={formValues[field.name] || \"\"}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n name={field.name}\n placeholder={field.placeholder}\n min={field.minLength}\n max={field.maxLength}\n className={`flex h-10 w-full rounded-md border px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ${\n error \n ? \"border-red-500 focus-visible:ring-red-500\" \n : \"border-input focus-visible:ring-blue-500\"\n } ${\n isDisabled \n ? \"bg-gray-50 text-gray-500\" \n : \"bg-background\"\n }`}\n />\n\n );\n}\n\nexport default InputField;","import React from 'react'\n\n\nfunction HtmlField({ field, formValues }) {\n const htmlContent = formValues[field.name] || field.content || \"\";\n \n return (\n <div key={field.name} className={`mb-4 ${field.fieldClass ? field.fieldClass : \"col-span-full\"}`} id={field.name.toLowerCase() + \"_id\"}>\n <div \n className=\"w-full px-3 py-2 border rounded-md overflow-y-auto max-h-40 prose prose-sm max-w-none\" \n dangerouslySetInnerHTML={{ __html: htmlContent }} \n />\n </div>\n )\n}\n\nexport default HtmlField\n","\n\nfunction CheckboxField({field, formValues, handleChange, handleBlur, touched, errors}) {\n //const error = touched[field.name] && errors[field.name];\n const isDisabled = field.disabled && field.disabled(formValues);\n const error = false \n return (\n <div className=\"mt-1 space-x-2\">\n <input\n {...field.props}\n id={\"id_\" + field.name}\n type=\"checkbox\"\n checked={formValues[field.name] || false}\n onChange={(e) => handleChange(field.name, e.target.checked)}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n className={`rounded border-gray-300 ${\n isDisabled ? \"opacity-50 cursor-not-allowed\" : \"\"\n }`}\n />\n <label className=\"\" htmlFor={\"id_\" + field.name}>\n {field.label}\n {field.required && <span className=\"text-red-500\">*</span>}\n </label>\n {error && <p className=\"mt-1 text-sm text-red-500\">{error}</p>}\n </div>\n )\n}\n\nexport default CheckboxField","import * as Popover from \"@radix-ui/react-popover\";\nimport { useState } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport \"react-day-picker/dist/style.css\";\n\nfunction DateRangeField({ field, formValues, handleChange, handleBlur }) {\n const [open, setOpen] = useState(false);\n const selected = formValues[field.name] ?? { from: null, to: null };\n\n const handleSelect = (range) => handleChange(field.name, range);\n const handleClear = () => handleChange(field.name, { from: null, to: null });\n\n return (\n <div>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n id={field.name}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n onKeyDown={(e) => e.key === \"Enter\" && setOpen(true)}\n className=\"\n inline-flex items-center justify-between gap-2\n w-full h-9 rounded-md border border-gray-300 bg-white\n px-3 py-2 text-sm font-normal shadow-sm\n hover:bg-gray-50 hover:text-gray-900\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\n disabled:cursor-not-allowed disabled:opacity-50\n \"\n >\n {selected.from ? (\n selected.to ? (\n <span>\n {selected.from.toLocaleDateString()} – {selected.to.toLocaleDateString()}\n </span>\n ) : (\n <span>{selected.from.toLocaleDateString()}</span>\n )\n ) : (\n <span className=\"text-muted-foreground\">\n {field.placeholder || \"Select date range\"}\n </span>\n )}\n\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down opacity-70\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={2}\n className=\"z-50 rounded-md border border-gray-200 bg-white p-0 shadow-md w-auto\"\n >\n <DayPicker\n mode=\"range\"\n selected={selected}\n onSelect={handleSelect}\n showOutsideDays\n className=\"rounded-md bg-white p-3 text-xs\"\n />\n \n {/* Action buttons */}\n <div className=\"flex items-center justify-between gap-2 border-t border-gray-200 p-3\">\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-gray-300 bg-white hover:bg-gray-100 hover:text-gray-900 h-9 px-4 py-2\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-blue-600 text-white hover:bg-blue-700 h-9 px-4 py-2\"\n >\n Done\n </button>\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n}\n\nexport default DateRangeField;\n","import React from 'react'\nimport { toast } from \"react-hot-toast\";\n\nfunction FileField({\n field,\n formValues,\n touched,\n errors,\n fileUploads,\n setFileUploads,\n fileInputRefs,\n handleChange,\n onFieldsChange,\n api_URL\n}) {\n const error = touched[field.name] && errors[field.name];\n const isMultiple = field.type === \"multifile\";\n const uploads = fileUploads[field.name] || {};\n const currentValues = formValues[field.name];\n const values = isMultiple\n ? currentValues || []\n : [currentValues].filter(Boolean);\n const isDisabled = field.disabled && field.disabled(formValues);\n const disablebtnClasses = `px-4 py-2 bg-gray-100 border rounded hover:bg-gray-200 ${isDisabled ? \"cursor-not-allowed\" : \"\"\n }`;\n\n // Check if api_URL is provided when file uploads are needed\n const uploadUrl = api_URL ? `${api_URL}uploads` : null;\n\n if (!uploadUrl && field.uploadEndpoint) {\n console.error(`api_URL prop is required when using FileField with upload functionality for field \"${field.name}\"`);\n }\n\n const formatFileSize = (bytes) => {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i];\n };\n\n const uploadFile = async (file, fieldName) => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const response = await fetch(`${uploadUrl}`, {\n method: \"POST\",\n body: formData,\n });\n\n if (!response.ok) {\n toast.error(\"Upload failed\");\n throw new Error(\"Upload failed\");\n }\n\n const data = await response.json();\n return data;\n };\n\n const handleSingleFileUpload = async (field, file) => {\n if (!file) return;\n\n // Validate file size\n if (field.maxSize && file.size > field.maxSize) {\n throw new Error(\n `File size must not exceed ${formatFileSize(field.maxSize)}`\n );\n }\n\n // Upload the file\n const uploadedData = await uploadFile(file, field.name);\n\n // Update form values with the uploaded URL\n const newValues = { ...formValues, [field.name]: uploadedData };\n handleChange(field.name, uploadedData);\n onFieldsChange(newValues);\n };\n\n const handleMultiFileUpload = async (field, files) => {\n const currentUrls = formValues[field.name] || [];\n if (currentUrls.length + files.length > field.maxFiles) {\n throw new Error(`Maximum ${field.maxFiles} files allowed`);\n }\n\n // Validate each file size\n files.forEach((file) => {\n if (field.maxSize && file.size > field.maxSize) {\n throw new Error(\n `Each file must not exceed ${formatFileSize(field.maxSize)}`\n );\n }\n });\n\n // Upload all files\n const uploadedUrls = await Promise.all(\n files.map((file) => uploadFile(file, field.name))\n );\n\n // Update form values with the new URLs\n const newUrls = [...currentUrls, ...uploadedUrls];\n handleChange(field.name, newUrls);\n onFieldsChange({ ...formValues, [field.name]: newUrls });\n };\n\n const handleFileChange = async (fieldName, files) => {\n const fileList = Array.from(files);\n\n try {\n if (field.type === \"file\") {\n await handleSingleFileUpload(field, fileList[0]);\n } else if (field.type === \"multifile\") {\n await handleMultiFileUpload(field, fileList);\n }\n\n // Clear file input after processing\n if (fileInputRefs.current[fieldName]) {\n fileInputRefs.current[fieldName].value = \"\"; // This resets the file input field\n }\n } catch (error) {\n toast.error(`Upload failed: ${error.message}`);\n }\n };\n\n const removeFile = async (fieldName, urlToRemove) => {\n let newValue;\n\n if (field.type === \"file\") {\n newValue = \"\";\n } else {\n const urls = formValues[fieldName] || [];\n newValue = urls.filter((url) => url !== urlToRemove);\n }\n\n handleChange(fieldName, newValue);\n onFieldsChange({ ...formValues, [fieldName]: newValue });\n\n // Reset the file input field after removing the file\n if (fileInputRefs.current[fieldName]) {\n fileInputRefs.current[fieldName].value = \"\"; // Reset file input after removing\n }\n };\n\n return (\n <div key={field.name} className={`mb-4 ${field.fieldClass || 'col-span-full'}`}>\n <label className=\"block font-medium mb-1\">\n {field.label}\n {field.required && <span className=\"text-red-500\">*</span>}\n </label>\n\n <div className=\"space-y-2\">\n <div className=\"items-center space-x-2\">\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={() => fileInputRefs.current[field.name].click()}\n className={disablebtnClasses}\n >\n Choose {isMultiple ? \"Files\" : \"File\"}\n </button>\n {isMultiple && values.length > 0 && (\n <span className=\"text-sm text-gray-600\">\n {values.length} of {field.maxFiles} files uploaded\n </span>\n )}\n </div>\n\n <input\n ref={(el) => (fileInputRefs.current[field.name] = el)}\n type=\"file\"\n accept={field.accept}\n multiple={isMultiple}\n className=\"hidden\"\n onChange={(e) => handleFileChange(field.name, e.target.files)}\n />\n\n {/* Uploaded Files List */}\n <div className=\"space-y-2\">\n {values.map((file, index) => {\n const upload = Object.values(uploads).find(\n (u) => u.file === file\n );\n return (\n <div\n key={file}\n className=\"flex items-center justify-between p-2 bg-gray-50 rounded\"\n >\n <div className=\"flex items-center space-x-2\">\n {upload && (\n <>\n <span className=\"text-sm\">{upload.fileName}</span>\n <span className=\"text-xs text-gray-500\">\n ({formatFileSize(upload.fileSize)})\n </span>\n </>\n )}\n {!upload && (\n <span className=\"text-sm\">{file.original_name}</span>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => removeFile(field.name, file)}\n className=\"text-red-500 hover:text-red-700 ml-3\"\n >\n Remove\n </button>\n </div>\n );\n })}\n </div>\n\n {/* Upload Progress */}\n {Object.entries(uploads).map(([fileName, upload]) => {\n if (upload.status === \"uploading\") {\n return (\n <div key={fileName} className=\"relative pt-1\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-semibold inline-block text-blue-600\">\n Uploading {fileName}\n </span>\n <span className=\"text-xs font-semibold inline-block text-blue-600\">\n {upload.progress}%\n </span>\n </div>\n <div className=\"overflow-hidden h-2 mt-1 text-xs flex rounded bg-blue-200\">\n <div\n className=\"shadow-none flex flex-col text-center whitespace-nowrap text-white justify-center bg-blue-500\"\n style={{ width: `${upload.progress}%` }}\n />\n </div>\n </div>\n );\n }\n return null;\n })}\n </div>\n\n {error && <p className=\"mt-1 text-sm text-red-500\">{error}</p>}\n </div>\n );\n}\n\nexport default FileField;","import React, { useRef, useEffect } from \"react\";\n\nfunction TextAreaField({\n field,\n formValues,\n handleChange,\n handleBlur,\n touched,\n errors,\n charCount,\n setCharCounts,\n}) {\n const textareaRef = useRef(null);\n const value = formValues[field.name] || \"\";\n const isDisabled =\n typeof field.disabled === \"function\"\n ? field.disabled(formValues)\n : field.disabled || field.readOnly;\n const error = touched?.[field.name] && errors?.[field.name] ? errors[field.name] : null;\n\n // Auto-resize logic\n const autoResize = () => {\n const el = textareaRef.current;\n if (el) {\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight + 2}px`;\n }\n };\n\n // Auto-resize on mount & when value changes\n useEffect(() => {\n autoResize();\n }, [value]);\n\n const handleTextareaChange = (e) => {\n handleChange(field.name, e.target.value);\n autoResize();\n\n if (setCharCounts) {\n setCharCounts((prev) => ({\n ...prev,\n [field.name]: e.target.value.length,\n }));\n }\n };\n\n return (\n <div className=\"space-y-2\">\n <textarea\n {...field.props}\n ref={textareaRef}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder || \"\"}\n value={value}\n onChange={handleTextareaChange}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n maxLength={field.maxLength}\n rows={field.rows || 3}\n className={`flex w-full rounded-md border px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 resize-none overflow-y-auto ${\n error \n ? \"border-red-500 focus-visible:ring-red-500\" \n : \"border-input focus-visible:ring-blue-500\"\n } ${\n isDisabled \n ? \"bg-gray-50 text-gray-500\" \n : \"bg-background\"\n }`}\n style={{\n minHeight: \"80px\",\n maxHeight: \"400px\",\n }}\n />\n\n <div className=\"flex justify-between items-center\">\n {/* Character counter */}\n {field.maxLength && !field.readOnly && (\n <span className=\"text-xs text-gray-500\">\n {charCount || 0}/{field.maxLength} characters\n </span>\n )}\n\n </div>\n </div>\n );\n}\n\nexport default TextAreaField;\n","import React from 'react'\n\nfunction DayTimePickerField({ field, formValues, handleChange, handleBlur, touched, errors }) {\n // Fallback component if MUI Date Pickers are not available\n return (\n <div>\n <input\n type=\"datetime-local\"\n value={field.value || ''}\n onChange={(e) => handleChange(field.name, e.target.value)}\n onBlur={handleBlur}\n className=\"border rounded px-3 py-2 w-full\"\n placeholder=\"Select date and time\"\n />\n <p className=\"text-sm text-gray-500 mt-1\">\n Note: Install @mui/x-date-pickers for enhanced date picker functionality\n </p>\n </div>\n )\n}\nexport default DayTimePickerField\n\n\n\n","\nimport { Separator } from \"@radix-ui/react-separator\"\n\nfunction LineBreakField({ field }) {\n if (!field?.label) return <Separator className=\"my-4 h-px bg-gray-300\" />;\n\n return (\n <div className=\"relative flex items-center py-4\">\n <Separator className=\"flex-1 h-px bg-gray-300\" />\n <span className=\"px-3 font-medium text-gray-600 bg-white\">\n {field.label}\n </span>\n <Separator className=\"flex-1 h-px bg-gray-300\" />\n </div>\n );\n}\n\nexport default LineBreakField;","/**\n * RadioGroupField Component\n * \n * A Radix UI-based radio group field for DynamicForm\n * \n * @example\n * // Basic usage (stacked layout)\n * {\n * type: 'radio',\n * name: 'plan',\n * label: 'Select Plan',\n * options: [\n * { value: 'basic', label: 'Basic Plan', description: 'Perfect for individuals' },\n * { value: 'pro', label: 'Pro Plan', description: 'For professionals' },\n * { value: 'enterprise', label: 'Enterprise', description: 'For large teams' }\n * ]\n * }\n * \n * @example\n * // Inline layout\n * {\n * type: 'radio',\n * name: 'size',\n * label: 'Select Size',\n * inline: true,\n * options: ['Small', 'Medium', 'Large']\n * }\n * \n * @example\n * // Simple string options\n * {\n * type: 'radio',\n * name: 'color',\n * label: 'Choose Color',\n * options: ['Red', 'Green', 'Blue']\n * }\n * \n * @example\n * // With disabled state\n * {\n * type: 'radio',\n * name: 'subscription',\n * label: 'Subscription Type',\n * disabled: (formValues) => formValues.hasActiveSubscription,\n * options: [\n * { value: 'monthly', label: 'Monthly' },\n * { value: 'yearly', label: 'Yearly' }\n * ]\n * }\n */\n\nimport React from 'react';\nimport * as RadioGroup from '@radix-ui/react-radio-group';\n\nfunction RadioGroupField({ field, formValues, handleChange, handleBlur }) {\n const value = formValues[field.name] || '';\n const isDisabled = typeof field.disabled === 'function' \n ? field.disabled(formValues) \n : field.disabled;\n const options = field.options || [];\n const isInline = field.inline || false;\n\n return (\n <RadioGroup.Root\n value={value}\n onValueChange={(val) => handleChange(field.name, val)}\n onBlur={() => handleBlur(field.name)}\n disabled={isDisabled}\n className={isInline ? 'flex flex-wrap gap-4' : 'space-y-3'}\n aria-label={field.label || field.name}\n >\n {options.map((option) => {\n const optionValue = typeof option === 'object' ? option.value : option;\n const optionLabel = typeof option === 'object' ? option.label : option;\n\n const optionDescription = typeof option === 'object' ? option.description : null;\n const itemId = `${field.name}-${optionValue}`;\n\n return (\n <div key={optionValue} className=\"relative flex items-start\">\n <div className=\"flex h-6 items-center\">\n <RadioGroup.Item\n value={optionValue}\n id={itemId}\n disabled={isDisabled}\n className={`\n relative size-4 rounded-full border transition-all\n ${isDisabled \n ? 'border-gray-300 bg-gray-100 cursor-not-allowed' \n : 'border-gray-300 bg-white hover:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2'\n }\n data-[state=checked]:border-blue-600 data-[state=checked]:bg-blue-600\n `}\n >\n <RadioGroup.Indicator className=\"flex items-center justify-center w-full h-full relative after:content-[''] after:block after:w-1.5 after:h-1.5 after:rounded-full after:bg-white\" />\n </RadioGroup.Item>\n </div>\n <div className=\"ml-3 text-sm\">\n <label \n htmlFor={itemId} \n className={`font-medium ${isDisabled ? 'text-gray-500' : 'text-gray-900 cursor-pointer'}`}\n >\n {optionLabel}\n </label>\n {optionDescription && !isInline && (\n <p className={`text-sm ${isDisabled ? 'text-gray-400' : 'text-gray-500'}`}>\n {optionDescription}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </RadioGroup.Root>\n );\n}\n\nexport default RadioGroupField;\n","/**\n * HeaderField Component\n * \n * A header/title field for DynamicForm to display section headers, titles, or dividers\n * \n * @example\n * // Large header (h1)\n * {\n * type: 'header',\n * text: 'Personal Information',\n * size: 'xl' // or '2xl', '3xl', '4xl'\n * }\n * \n * @example\n * // Medium header with description (h2)\n * {\n * type: 'header',\n * text: 'Contact Details',\n * description: 'Please provide your contact information',\n * size: 'lg'\n * }\n * \n * @example\n * // Small header (h3)\n * {\n * type: 'header',\n * text: 'Account Settings',\n * size: 'md'\n * }\n * \n * @example\n * // Header with underline\n * {\n * type: 'header',\n * text: 'Billing Information',\n * underline: true,\n * size: 'lg'\n * }\n * \n * @example\n * // Header with custom styling\n * {\n * type: 'header',\n * text: 'Important Section',\n * size: 'xl',\n * className: 'text-blue-600',\n * align: 'center' // 'left', 'center', 'right'\n * }\n */\n\nimport React from 'react';\n\nfunction HeaderField({ field }) {\n const text = field.text || field.label || '';\n const description = field.description || '';\n const size = field.size || 'lg'; // 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl'\n const underline = field.underline || false;\n const align = field.align || 'left'; // 'left', 'center', 'right'\n const customClass = field.className || '';\n\n // Size mappings\n const sizeClasses = {\n sm: 'text-base font-semibold',\n md: 'text-lg font-semibold',\n lg: 'text-xl font-bold',\n xl: 'text-2xl font-bold',\n '2xl': 'text-3xl font-bold',\n '3xl': 'text-4xl font-bold',\n '4xl': 'text-5xl font-bold',\n };\n\n const alignClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n\n const headerClass = `\n ${sizeClasses[size] || sizeClasses.lg}\n ${alignClasses[align] || alignClasses.left}\n ${underline ? 'border-b-2 border-gray-300 pb-2' : ''}\n ${customClass}\n text-gray-900\n `.trim();\n\n const descriptionClass = `\n mt-1 text-sm text-gray-600\n ${alignClasses[align] || alignClasses.left}\n `.trim();\n\n return (\n <div className=\"my-4\">\n <h2 className={headerClass}>\n {text}\n </h2>\n {description && (\n <p className={descriptionClass}>\n {description}\n </p>\n )}\n </div>\n );\n}\n\nexport default HeaderField;\n","import * as Popover from \"@radix-ui/react-popover\";\nimport { useState } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport \"react-day-picker/dist/style.css\";\n\nfunction DateRangeField({ field, formValues, handleChange, handleBlur }) {\n const [open, setOpen] = useState(false);\n const selected = formValues[field.name] ?? null;\n\n const handleSelect = (date) => handleChange(field.name, date);\n const handleClear = () => handleChange(field.name, null);\n\n return (\n <div>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n id={field.name}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n onKeyDown={(e) => e.key === \"Enter\" && setOpen(true)}\n className=\"\n inline-flex items-center justify-between gap-2\n w-full h-9 rounded-md border border-gray-300 bg-white\n px-3 py-2 text-sm font-normal shadow-sm\n hover:bg-gray-50 hover:text-gray-900\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\n disabled:cursor-not-allowed disabled:opacity-50\n \"\n >\n {selected ? (\n <span>{selected.toLocaleDateString()}</span>\n ) : (\n <span className=\"text-muted-foreground\">\n {field.placeholder || \"Select date\"}\n </span>\n )}\n\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down opacity-70\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={2}\n className=\"z-50 rounded-md border border-gray-200 bg-white p-0 shadow-md w-auto\"\n >\n <DayPicker\n mode=\"single\"\n selected={selected}\n onSelect={handleSelect}\n showOutsideDays\n className=\"rounded-md bg-white p-3 text-xs\"\n />\n \n {/* Action buttons */}\n <div className=\"flex items-center justify-between gap-2 border-t border-gray-200 p-3\">\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-gray-300 bg-white hover:bg-gray-100 hover:text-gray-900 h-9 px-4 py-2\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-blue-600 text-white hover:bg-blue-700 h-9 px-4 py-2\"\n >\n Done\n </button>\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n}\n\nexport default DateRangeField;\n","import React, { useState } from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\n\nfunction TimeField({ field, formValues, handleChange, handleBlur }) {\n const [open, setOpen] = useState(false);\n const [hours, setHours] = useState(\"12\");\n const [minutes, setMinutes] = useState(\"00\");\n const [period, setPeriod] = useState(\"PM\");\n\n const value = formValues[field.name] || \"\";\n\n // Parse existing value if present\n React.useEffect(() => {\n if (value) {\n const timeMatch = value.match(/(\\d{1,2}):(\\d{2})\\s*(AM|PM)/i);\n if (timeMatch) {\n setHours(timeMatch[1].padStart(2, \"0\"));\n setMinutes(timeMatch[2]);\n setPeriod(timeMatch[3].toUpperCase());\n }\n }\n }, [value]);\n\n const handleApply = () => {\n const timeString = `${hours}:${minutes} ${period}`;\n handleChange(field.name, timeString);\n setOpen(false);\n };\n\n const handleClear = () => {\n handleChange(field.name, \"\");\n setHours(\"12\");\n setMinutes(\"00\");\n setPeriod(\"PM\");\n };\n\n const incrementHours = () => {\n const h = parseInt(hours);\n setHours(((h % 12) + 1).toString().padStart(2, \"0\"));\n };\n\n const decrementHours = () => {\n const h = parseInt(hours);\n setHours((h === 1 ? 12 : h - 1).toString().padStart(2, \"0\"));\n };\n\n const incrementMinutes = () => {\n const m = parseInt(minutes);\n setMinutes(((m + 5) % 60).toString().padStart(2, \"0\"));\n };\n\n const decrementMinutes = () => {\n const m = parseInt(minutes);\n setMinutes((m === 0 ? 55 : m - 5).toString().padStart(2, \"0\"));\n };\n\n return (\n <div>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n id={field.name}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n className=\"\n inline-flex items-center justify-between gap-2\n w-full h-9 rounded-md border border-gray-300 bg-white\n px-3 py-2 text-sm font-normal shadow-sm\n hover:bg-gray-50 hover:text-gray-900\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\n disabled:cursor-not-allowed disabled:opacity-50\n \"\n >\n {value ? (\n <span>{value}</span>\n ) : (\n <span className=\"text-gray-400\">\n {field.placeholder || \"Select time\"}\n </span>\n )}\n\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-clock opacity-70\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={2}\n className=\"z-50 rounded-md border border-gray-200 bg-white p-4 shadow-md w-64\"\n >\n <div className=\"flex flex-col gap-4\">\n {/* Time picker */}\n <div className=\"flex items-center justify-center gap-2\">\n {/* Hours */}\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n onClick={incrementHours}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <input\n type=\"text\"\n value={hours}\n onChange={(e) => {\n const val = e.target.value.replace(/\\D/g, \"\");\n if (val === \"\" || (parseInt(val) >= 1 && parseInt(val) <= 12)) {\n setHours(val.padStart(2, \"0\"));\n }\n }}\n className=\"w-14 text-center text-2xl font-semibold border-0 focus:outline-none focus:ring-2 focus:ring-blue-500 rounded py-2\"\n maxLength=\"2\"\n />\n <button\n type=\"button\"\n onClick={decrementHours}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n\n <span className=\"text-2xl font-semibold\">:</span>\n\n {/* Minutes */}\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n onClick={incrementMinutes}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <input\n type=\"text\"\n value={minutes}\n onChange={(e) => {\n const val = e.target.value.replace(/\\D/g, \"\");\n if (val === \"\" || (parseInt(val) >= 0 && parseInt(val) <= 59)) {\n setMinutes(val.padStart(2, \"0\"));\n }\n }}\n className=\"w-14 text-center text-2xl font-semibold border-0 focus:outline-none focus:ring-2 focus:ring-blue-500 rounded py-2\"\n maxLength=\"2\"\n />\n <button\n type=\"button\"\n onClick={decrementMinutes}\n className=\"p-1 hover:bg-gray-100 rounded\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n\n {/* AM/PM */}\n <div className=\"flex flex-col gap-1 ml-2\">\n <button\n type=\"button\"\n onClick={() => setPeriod(\"AM\")}\n className={`\n px-3 py-1 text-sm font-medium rounded\n ${\n period === \"AM\"\n ? \"bg-blue-600 text-white\"\n : \"bg-gray-100 text-gray-700 hover:bg-gray-200\"\n }\n `}\n >\n AM\n </button>\n <button\n type=\"button\"\n onClick={() => setPeriod(\"PM\")}\n className={`\n px-3 py-1 text-sm font-medium rounded\n ${\n period === \"PM\"\n ? \"bg-blue-600 text-white\"\n : \"bg-gray-100 text-gray-700 hover:bg-gray-200\"\n }\n `}\n >\n PM\n </button>\n </div>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center justify-between gap-2 border-t border-gray-200 pt-3\">\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-gray-300 bg-white hover:bg-gray-100 hover:text-gray-900 h-9 px-4 py-2\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n onClick={handleApply}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-blue-600 text-white hover:bg-blue-700 h-9 px-4 py-2\"\n >\n Done\n </button>\n </div>\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n}\n\nexport default TimeField;","import React from \"react\";\nimport { Error, Success, Warning, Info } from \"../components/formats/alerts/Alerts.jsx\";\n\nfunction AlertMessageField({ field }) {\n const { variant = \"info\", message, content } = field;\n\n const alertMessage = message || content || \"\";\n\n // Render based on variant type\n switch (variant.toLowerCase()) {\n case \"error\":\n case \"danger\":\n return <Error message={alertMessage} />;\n\n case \"success\":\n return <Success message={alertMessage} />;\n\n case \"warning\":\n case \"warn\":\n return <Warning message={alertMessage} />;\n\n case \"info\":\n case \"information\":\n default:\n return <Info message={alertMessage} />;\n }\n}\n\nexport default AlertMessageField;","import { InformationCircleIcon, XCircleIcon } from \"@heroicons/react/20/solid\";\nimport { CheckCircleIcon } from \"@heroicons/react/20/solid\";\nimport { ExclamationCircleIcon } from \"@heroicons/react/24/outline\";\nimport { htmlMarkup } from \"../../../../utils/html_markup\";\n\nfunction Error({ message }) {\n return (\n <div className=\"rounded-lg bg-red-50 border border-red-100 p-4 shadow-sm\">\n <div className=\"flex items-center gap-3\">\n <XCircleIcon aria-hidden=\"true\" className=\"size-5 text-red-500 shrink-0\" />\n <span className=\"text-sm font-medium text-red-900\">{message}</span>\n </div>\n </div>\n );\n}\nfunction Warning({ message }) {\n return (\n <div className=\"rounded-lg bg-amber-50 border border-amber-100 p-4 shadow-sm\">\n <div className=\"flex items-center gap-3\">\n <ExclamationCircleIcon\n aria-hidden=\"true\"\n className=\"size-5 text-amber-600 shrink-0\"\n />\n <span className=\"text-sm font-medium text-amber-900\">{message}</span>\n </div>\n </div>\n );\n}\n\nfunction Success({ message }) {\n return (\n <div className=\"rounded-lg bg-green-50 border border-green-100 p-4 shadow-sm\">\n <div className=\"flex items-center gap-3\">\n <CheckCircleIcon\n aria-hidden=\"true\"\n className=\"size-5 text-green-600 shrink-0\"\n />\n <span className=\"text-sm font-medium text-green-900\">{message}</span>\n </div>\n </div>\n );\n}\n\nfunction Info({ message }) {\n return (\n <div className=\"rounded-lg bg-blue-50 border border-blue-100 p-4 shadow-sm\">\n <div className=\"flex items-center gap-3\">\n <InformationCircleIcon\n aria-hidden=\"true\"\n className=\"size-5 text-blue-600 shrink-0\"\n />\n <span className=\"text-sm font-medium text-blue-900\">{message}</span>\n </div>\n </div>\n );\n}\n\nexport { Error, Success, Warning, Info };"],"mappings":"4jBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,iBAAAE,GAAA,yBAAAA,GAAA,YAAAC,KAAA,eAAAC,GAAAJ,ICCyB,SAARK,GAA6BC,EAAK,CAAE,SAAAC,CAAS,EAAI,CAAC,EAAG,CAC1D,GAAI,CAACD,GAAO,OAAO,SAAa,IAAa,OAE7C,IAAME,EAAO,SAAS,MAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAC/DC,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,KAAO,WAETF,IAAa,OACXC,EAAK,WACPA,EAAK,aAAaC,EAAOD,EAAK,UAAU,EAK1CA,EAAK,YAAYC,CAAK,EAGpBA,EAAM,WACRA,EAAM,WAAW,QAAUH,EAE3BG,EAAM,YAAY,SAAS,eAAeH,CAAG,CAAC,CAElD,CCvB8BI,GAAY;AAAA,CAAwnvB,ECA5qvB,IAAAC,EAAqD,iBACrDC,GAAsB,2BACtBC,GAAkB,sBCCT,IAAAC,GAAA,6BADT,SAASC,GAAYC,EAAO,CAC1B,SAAO,QAAC,SAAM,KAAK,SAAS,KAAMA,EAAM,KAAM,MAAOA,EAAM,OAAYA,EAAM,IAAM,CACrF,CACA,IAAOC,GAAQF,GCLf,IAAAG,GAAmB,6BACnBC,GAAyB,sCAajBC,GAAA,6BAXR,SAASC,GAAiB,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,QAAAC,EAAS,OAAAC,EAAQ,WAAAC,CAAW,EAAG,CAExF,IAAMC,EAAaN,EAAM,UAAYA,EAAM,SAASC,CAAU,EACxDM,EAAUP,EAAM,SAAW,CAAC,EAE5BQ,KAAqB,GAAAC,SAAa,EAElCC,EAAgBT,EAAWD,EAAM,IAAI,GAAK,CAAC,EAEjD,SAEI,QAAC,GAAAW,QAAA,CACC,WAAYH,EACZ,QAAO,GACP,WAAYF,EACZ,KAAMN,EAAM,MACZ,MAAOU,EACP,SAAWE,GAAaV,EAAaF,EAAM,KAAMY,CAAQ,EACzD,QAASL,EACT,YAAaP,EAAM,YACnB,kBAAmB,GACrB,CAGR,CACA,IAAOa,GAAQd,GC5Bf,IAAAe,EAAwB,uCACxBC,GAAkB,iBAElBC,GAAgC,qCAiB1BC,EAAA,6BAfN,SAASC,GAAY,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,CAAW,EAAG,CALtE,IAAAC,EAME,IAAMC,EAAQJ,EAAWD,EAAM,IAAI,GAAK,GAClCM,EACJ,OAAON,EAAM,UAAa,WACtBA,EAAM,SAASC,CAAU,EACzBD,EAAM,SACNO,EAAUP,EAAM,SAAW,CAAC,EAElC,SACE,QAAQ,OAAP,CACC,MAAOK,EACP,cAAgBG,GAAQN,EAAaF,EAAM,KAAMQ,CAAG,EACpD,SAAUF,EAGV,qBAAQ,UAAP,CACC,GAAIN,EAAM,KACV,OAAQ,IAAMG,EAAWH,EAAM,IAAI,EACnC,UAAW;AAAA,YACPM,EACE,+CACA,wEAAwE;AAAA,UAG9E,oBAAQ,QAAP,CACC,YACEN,EAAM,aAAe,YAAUI,EAAAJ,EAAM,QAAN,YAAAI,EAAa,gBAAiB,EAAE,GAEnE,KACA,OAAQ,OAAP,CAAY,UAAU,qBACrB,mBAAC,oBAAgB,UAAU,UAAU,EACvC,GACF,KAGA,OAAQ,SAAP,CACC,oBAAQ,UAAP,CACC,UAAU,sGACV,SAAS,SACT,WAAY,EAGZ,oBAAQ,iBAAP,CAAsB,UAAU,gEAC/B,mBAAQ,QAAP,CAAa,UAAU,6BAA6B,EACvD,KAEA,QAAQ,WAAP,CAAgB,UAAU,MAExB,UAAAJ,EAAM,eACL,OAAQ,QAAP,CACC,mBAAQ,QAAP,CAAa,UAAU,0DACrB,SAAAA,EAAM,WACT,EACF,EAIDO,EAAQ,IAAKE,MACZ,OAAQ,OAAP,CAEC,MAAOA,EAAO,MACd,UAAW;AAAA;AAAA;AAAA,kBAKX,mBAAQ,WAAP,CAAiB,SAAAA,EAAO,MAAM,GAP1BA,EAAO,KASd,CACD,EAGAT,EAAM,cACL,OAAQ,YAAP,CAAiB,UAAU,wBAAwB,GAExD,KAKA,OAAQ,QAAP,CAAa,UAAU,6BAA6B,GACvD,EACF,GACF,CAEJ,CAEA,IAAOU,GAAQX,GC5Ff,IAAAY,GAAkB,iBAOZC,GAAA,6BALN,SAASC,GAAW,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,EAAY,QAAAC,EAAS,OAAAC,CAAO,EAAG,CAEpF,IAAMC,EAAaN,EAAM,UAAYA,EAAM,SAE3C,SACI,QAAC,SACE,GAAGA,EAAM,MACV,KAAK,QACL,MAAOC,EAAWD,EAAM,IAAI,GAAK,GACjC,SAAWO,GAAML,EAAaF,EAAM,KAAMO,EAAE,OAAO,KAAK,EACxD,OAAQ,IAAMJ,EAAWH,EAAM,IAAI,EACnC,SAAUM,EACV,KAAMN,EAAM,KACZ,YAAaA,EAAM,YACnB,UAAW,sCAXD,GAYA,iBAAmB,iBAC7B,IAAIM,EAAa,+CAAiD,EAAE,GACtE,CAEN,CAEA,IAAOE,GAAQT,GCvBf,IAAAU,GAAkB,iBAMZC,GAAA,6BAJN,SAASC,GAAW,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,EAAY,QAAAC,EAAS,OAAAC,CAAO,EAAG,CACpF,IAAMC,EAAaN,EAAM,UAAYA,EAAM,SAE3C,SACI,QAAC,SACE,GAAGA,EAAM,MACV,GAAIA,EAAM,KACV,KAAMA,EAAM,MAAQ,OACpB,MAAOC,EAAWD,EAAM,IAAI,GAAK,GACjC,SAAWO,GAAML,EAAaF,EAAM,KAAMO,EAAE,OAAO,KAAK,EACxD,OAAQ,IAAMJ,EAAWH,EAAM,IAAI,EACnC,SAAUM,EACV,KAAMN,EAAM,KACZ,YAAaA,EAAM,YACnB,IAAKA,EAAM,UACX,IAAKA,EAAM,UACX,UAAW,qUAdH,GAgBF,4CACA,0CACN,IACEM,EACI,2BACA,eACN,GACF,CAGN,CAEA,IAAOE,GAAQT,GChCf,IAAAU,GAAkB,iBAQZC,GAAA,6BALN,SAASC,GAAU,CAAE,MAAAC,EAAO,WAAAC,CAAW,EAAG,CACxC,IAAMC,EAAcD,EAAWD,EAAM,IAAI,GAAKA,EAAM,SAAW,GAE/D,SACE,QAAC,OAAqB,UAAW,QAAQA,EAAM,WAAaA,EAAM,WAAa,eAAe,GAAI,GAAIA,EAAM,KAAK,YAAY,EAAI,MAC/H,oBAAC,OACC,UAAU,wFACV,wBAAyB,CAAE,OAAQE,CAAY,EACjD,GAJQF,EAAM,IAKhB,CAEJ,CAEA,IAAOG,GAAQJ,GCRT,IAAAK,EAAA,6BANN,SAASC,GAAc,CAAC,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,EAAY,QAAAC,EAAS,OAAAC,CAAM,EAAG,CAErF,IAAMC,EAAaN,EAAM,UAAYA,EAAM,SAASC,CAAU,EACxDM,EAAQ,GACd,SACE,QAAC,OAAI,UAAU,iBACb,oBAAC,SACE,GAAGP,EAAM,MACV,GAAI,MAAQA,EAAM,KAClB,KAAK,WACL,QAASC,EAAWD,EAAM,IAAI,GAAK,GACnC,SAAWQ,GAAMN,EAAaF,EAAM,KAAMQ,EAAE,OAAO,OAAO,EAC1D,OAAQ,IAAML,EAAWH,EAAM,IAAI,EACnC,SAAUM,EACV,UAAW,2BACTA,EAAa,gCAAkC,EACjD,GACF,KACA,QAAC,SAAM,UAAU,GAAG,QAAS,MAAQN,EAAM,KACxC,UAAAA,EAAM,MACNA,EAAM,aAAY,OAAC,QAAK,UAAU,eAAe,aAAC,GACrD,EACCO,MAAS,OAAC,KAAE,UAAU,4BAA6B,SAAAA,EAAM,GAC5D,CAEJ,CAEA,IAAOE,GAAQV,GC7Bf,IAAAW,EAAyB,wCACzBC,GAAyB,iBACzBC,GAA0B,4BAC1BC,GAAO,2CA+BSC,EAAA,6BA7BhB,SAASC,GAAe,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,CAAW,EAAG,CACvE,GAAM,CAACC,EAAMC,CAAO,KAAI,aAAS,EAAK,EAChCC,EAAWL,EAAWD,EAAM,IAAI,GAAK,CAAE,KAAM,KAAM,GAAI,IAAK,EAE5DO,EAAgBC,GAAUN,EAAaF,EAAM,KAAMQ,CAAK,EACxDC,EAAc,IAAMP,EAAaF,EAAM,KAAM,CAAE,KAAM,KAAM,GAAI,IAAK,CAAC,EAE3E,SACE,OAAC,OACC,oBAAS,OAAR,CAAa,KAAMI,EAAM,aAAcC,EACtC,oBAAS,UAAR,CAAgB,QAAO,GACtB,oBAAC,UACC,KAAK,SACL,GAAIL,EAAM,KACV,gBAAc,SACd,gBAAeI,EACf,QAAS,IAAMC,EAAQ,EAAI,EAC3B,UAAYK,GAAMA,EAAE,MAAQ,SAAWL,EAAQ,EAAI,EACnD,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAST,UAAAC,EAAS,KACRA,EAAS,MACP,QAAC,QACE,UAAAA,EAAS,KAAK,mBAAmB,EAAE,WAAIA,EAAS,GAAG,mBAAmB,GACzE,KAEA,OAAC,QAAM,SAAAA,EAAS,KAAK,mBAAmB,EAAE,KAG5C,OAAC,QAAK,UAAU,wBACb,SAAAN,EAAM,aAAe,oBACxB,KAGF,OAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAU,wCAEV,mBAAC,QAAK,EAAE,eAAe,EACzB,GACF,EACF,KAEA,QAAS,UAAR,CACC,MAAM,QACN,WAAY,EACZ,UAAU,uEAEV,oBAAC,cACC,KAAK,QACL,SAAUM,EACV,SAAUC,EACV,gBAAe,GACf,UAAU,kCACZ,KAGA,QAAC,OAAI,UAAU,uEACb,oBAAC,UACC,KAAK,SACL,QAASE,EACT,UAAU,4SACX,iBAED,KACA,OAAC,UACC,KAAK,SACL,QAAS,IAAMJ,EAAQ,EAAK,EAC5B,UAAU,+QACX,gBAED,GACF,GACF,GACF,EACF,CAEJ,CAEA,IAAOM,GAAQZ,GCnGf,IAAAa,GAAkB,iBAClBC,GAAsB,2BA+IhBC,EAAA,6BA7IN,SAASC,GAAU,CACjB,MAAAC,EACA,WAAAC,EACA,QAAAC,EACA,OAAAC,EACA,YAAAC,EACA,eAAAC,EACA,cAAAC,EACA,aAAAC,EACA,eAAAC,EACA,QAAAC,CACF,EAAG,CACD,IAAMC,EAAQR,EAAQF,EAAM,IAAI,GAAKG,EAAOH,EAAM,IAAI,EAChDW,EAAaX,EAAM,OAAS,YAC5BY,EAAUR,EAAYJ,EAAM,IAAI,GAAK,CAAC,EACtCa,EAAgBZ,EAAWD,EAAM,IAAI,EACrCc,EAASH,EACXE,GAAiB,CAAC,EAClB,CAACA,CAAa,EAAE,OAAO,OAAO,EAC5BE,EAAaf,EAAM,UAAYA,EAAM,SAASC,CAAU,EACxDe,EAAoB,0DAA0DD,EAAa,qBAAuB,EACtH,GAGIE,EAAYR,EAAU,GAAGA,CAAO,UAAY,KAE9C,CAACQ,GAAajB,EAAM,gBACtB,QAAQ,MAAM,sFAAsFA,EAAM,IAAI,GAAG,EAGnH,IAAMkB,EAAkBC,GAAU,CAChC,GAAIA,IAAU,EAAG,MAAO,UACxB,IAAMC,EAAI,KACJC,EAAQ,CAAC,QAAS,KAAM,KAAM,IAAI,EAClCC,EAAI,KAAK,MAAM,KAAK,IAAIH,CAAK,EAAI,KAAK,IAAIC,CAAC,CAAC,EAClD,OAAO,YAAYD,EAAQ,KAAK,IAAIC,EAAGE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAI,IAAMD,EAAMC,CAAC,CACxE,EAEMC,EAAa,MAAOC,EAAMC,IAAc,CAC5C,IAAMC,EAAW,IAAI,SACrBA,EAAS,OAAO,OAAQF,CAAI,EAE5B,IAAMG,EAAW,MAAM,MAAM,GAAGV,CAAS,GAAI,CAC3C,OAAQ,OACR,KAAMS,CACR,CAAC,EAED,GAAI,CAACC,EAAS,GACZ,eAAM,MAAM,eAAe,EACrB,IAAI,MAAM,eAAe,EAIjC,OADa,MAAMA,EAAS,KAAK,CAEnC,EAEMC,EAAyB,MAAO5B,EAAOwB,IAAS,CACpD,GAAI,CAACA,EAAM,OAGX,GAAIxB,EAAM,SAAWwB,EAAK,KAAOxB,EAAM,QACrC,MAAM,IAAI,MACR,6BAA6BkB,EAAelB,EAAM,OAAO,CAAC,EAC5D,EAIF,IAAM6B,EAAe,MAAMN,EAAWC,EAAMxB,EAAM,IAAI,EAGhD8B,EAAY,CAAE,GAAG7B,EAAY,CAACD,EAAM,IAAI,EAAG6B,CAAa,EAC9DtB,EAAaP,EAAM,KAAM6B,CAAY,EACrCrB,EAAesB,CAAS,CAC1B,EAEMC,GAAwB,MAAO/B,EAAOgC,IAAU,CACpD,IAAMC,EAAchC,EAAWD,EAAM,IAAI,GAAK,CAAC,EAC/C,GAAIiC,EAAY,OAASD,EAAM,OAAShC,EAAM,SAC5C,MAAM,IAAI,MAAM,WAAWA,EAAM,QAAQ,gBAAgB,EAI3DgC,EAAM,QAASR,GAAS,CACtB,GAAIxB,EAAM,SAAWwB,EAAK,KAAOxB,EAAM,QACrC,MAAM,IAAI,MACR,6BAA6BkB,EAAelB,EAAM,OAAO,CAAC,EAC5D,CAEJ,CAAC,EAGD,IAAMkC,EAAe,MAAM,QAAQ,IACjCF,EAAM,IAAKR,GAASD,EAAWC,EAAMxB,EAAM,IAAI,CAAC,CAClD,EAGMmC,EAAU,CAAC,GAAGF,EAAa,GAAGC,CAAY,EAChD3B,EAAaP,EAAM,KAAMmC,CAAO,EAChC3B,EAAe,CAAE,GAAGP,EAAY,CAACD,EAAM,IAAI,EAAGmC,CAAQ,CAAC,CACzD,EAEMC,EAAmB,MAAOX,EAAWO,IAAU,CACnD,IAAMK,EAAW,MAAM,KAAKL,CAAK,EAEjC,GAAI,CACEhC,EAAM,OAAS,OACjB,MAAM4B,EAAuB5B,EAAOqC,EAAS,CAAC,CAAC,EACtCrC,EAAM,OAAS,aACxB,MAAM+B,GAAsB/B,EAAOqC,CAAQ,EAIzC/B,EAAc,QAAQmB,CAAS,IACjCnB,EAAc,QAAQmB,CAAS,EAAE,MAAQ,GAE7C,OAASf,EAAO,CACd,SAAM,MAAM,kBAAkBA,EAAM,OAAO,EAAE,CAC/C,CACF,EAEM4B,GAAa,MAAOb,EAAWc,IAAgB,CACnD,IAAIC,EAEAxC,EAAM,OAAS,OACjBwC,EAAW,GAGXA,GADavC,EAAWwB,CAAS,GAAK,CAAC,GACvB,OAAQgB,GAAQA,IAAQF,CAAW,EAGrDhC,EAAakB,EAAWe,CAAQ,EAChChC,EAAe,CAAE,GAAGP,EAAY,CAACwB,CAAS,EAAGe,CAAS,CAAC,EAGnDlC,EAAc,QAAQmB,CAAS,IACjCnB,EAAc,QAAQmB,CAAS,EAAE,MAAQ,GAE7C,EAEA,SACE,QAAC,OAAqB,UAAW,QAAQzB,EAAM,YAAc,eAAe,GAC1E,qBAAC,SAAM,UAAU,yBACd,UAAAA,EAAM,MACNA,EAAM,aAAY,OAAC,QAAK,UAAU,eAAe,aAAC,GACrD,KAEA,QAAC,OAAI,UAAU,YACb,qBAAC,OAAI,UAAU,yBACb,qBAAC,UACC,KAAK,SACL,SAAUe,EACV,QAAS,IAAMT,EAAc,QAAQN,EAAM,IAAI,EAAE,MAAM,EACvD,UAAWgB,EACZ,oBACSL,EAAa,QAAU,QACjC,EACCA,GAAcG,EAAO,OAAS,MAC7B,QAAC,QAAK,UAAU,wBACb,UAAAA,EAAO,OAAO,OAAKd,EAAM,SAAS,mBACrC,GAEJ,KAEA,OAAC,SACC,IAAM0C,GAAQpC,EAAc,QAAQN,EAAM,IAAI,EAAI0C,EAClD,KAAK,OACL,OAAQ1C,EAAM,OACd,SAAUW,EACV,UAAU,SACV,SAAWgC,GAAMP,EAAiBpC,EAAM,KAAM2C,EAAE,OAAO,KAAK,EAC9D,KAGA,OAAC,OAAI,UAAU,YACZ,SAAA7B,EAAO,IAAI,CAACU,EAAMoB,IAAU,CAC3B,IAAMC,EAAS,OAAO,OAAOjC,CAAO,EAAE,KACnCkC,GAAMA,EAAE,OAAStB,CACpB,EACA,SACE,QAAC,OAEC,UAAU,2DAEV,qBAAC,OAAI,UAAU,8BACZ,UAAAqB,MACC,oBACE,oBAAC,QAAK,UAAU,UAAW,SAAAA,EAAO,SAAS,KAC3C,QAAC,QAAK,UAAU,wBAAwB,cACpC3B,EAAe2B,EAAO,QAAQ,EAAE,KACpC,GACF,EAED,CAACA,MACA,OAAC,QAAK,UAAU,UAAW,SAAArB,EAAK,cAAc,GAElD,KACA,OAAC,UACC,KAAK,SACL,QAAS,IAAMc,GAAWtC,EAAM,KAAMwB,CAAI,EAC1C,UAAU,uCACX,kBAED,IAtBKA,CAuBP,CAEJ,CAAC,EACH,EAGC,OAAO,QAAQZ,CAAO,EAAE,IAAI,CAAC,CAACmC,EAAUF,CAAM,IACzCA,EAAO,SAAW,eAElB,QAAC,OAAmB,UAAU,gBAC5B,qBAAC,OAAI,UAAU,oCACb,qBAAC,QAAK,UAAU,mDAAmD,uBACtDE,GACb,KACA,QAAC,QAAK,UAAU,mDACb,UAAAF,EAAO,SAAS,KACnB,GACF,KACA,OAAC,OAAI,UAAU,4DACb,mBAAC,OACC,UAAU,gGACV,MAAO,CAAE,MAAO,GAAGA,EAAO,QAAQ,GAAI,EACxC,EACF,IAdQE,CAeV,EAGG,IACR,GACH,EAECrC,MAAS,OAAC,KAAE,UAAU,4BAA6B,SAAAA,EAAM,IA9FlDV,EAAM,IA+FhB,CAEJ,CAEA,IAAOgD,GAAQjD,GClPf,IAAAkD,EAAyC,iBAgDnCC,EAAA,6BA9CN,SAASC,GAAc,CACrB,MAAAC,EACA,WAAAC,EACA,aAAAC,EACA,WAAAC,EACA,QAAAC,EACA,OAAAC,EACA,UAAAC,EACA,cAAAC,CACF,EAAG,CACD,IAAMC,KAAc,UAAO,IAAI,EACzBC,EAAQR,EAAWD,EAAM,IAAI,GAAK,GAClCU,EACJ,OAAOV,EAAM,UAAa,WACtBA,EAAM,SAASC,CAAU,EACzBD,EAAM,UAAYA,EAAM,SACxBW,EAAQP,GAAA,MAAAA,EAAUJ,EAAM,QAASK,GAAA,MAAAA,EAASL,EAAM,OAAQK,EAAOL,EAAM,IAAI,EAAI,KAG7EY,EAAa,IAAM,CACvB,IAAMC,EAAKL,EAAY,QACnBK,IACFA,EAAG,MAAM,OAAS,OAClBA,EAAG,MAAM,OAAS,GAAGA,EAAG,aAAe,CAAC,KAE5C,KAGA,aAAU,IAAM,CACdD,EAAW,CACb,EAAG,CAACH,CAAK,CAAC,EAEV,IAAMK,EAAwBC,GAAM,CAClCb,EAAaF,EAAM,KAAMe,EAAE,OAAO,KAAK,EACvCH,EAAW,EAEPL,GACFA,EAAeS,IAAU,CACvB,GAAGA,EACH,CAAChB,EAAM,IAAI,EAAGe,EAAE,OAAO,MAAM,MAC/B,EAAE,CAEN,EAEA,SACE,QAAC,OAAI,UAAU,YACb,oBAAC,YACE,GAAGf,EAAM,MACV,IAAKQ,EACL,GAAIR,EAAM,KACV,KAAMA,EAAM,KACZ,YAAaA,EAAM,aAAe,GAClC,MAAOS,EACP,SAAUK,EACV,OAAQ,IAAMX,EAAWH,EAAM,IAAI,EACnC,SAAUU,EACV,UAAWV,EAAM,UACjB,KAAMA,EAAM,MAAQ,EACpB,UAAW,4RACTW,EACI,4CACA,0CACN,IACED,EACI,2BACA,eACN,GACA,MAAO,CACL,UAAW,OACX,UAAW,OACb,EACF,KAEA,OAAC,OAAI,UAAU,oCAEZ,SAAAV,EAAM,WAAa,CAACA,EAAM,aACzB,QAAC,QAAK,UAAU,wBACb,UAAAM,GAAa,EAAE,IAAEN,EAAM,UAAU,eACpC,EAGJ,GACF,CAEJ,CAEA,IAAOiB,GAAQlB,GCxFf,IAAAmB,GAAkB,iBAKdC,EAAA,6BAHJ,SAASC,GAAmB,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,EAAY,QAAAC,EAAS,OAAAC,CAAO,EAAG,CAE5F,SACE,QAAC,OACC,oBAAC,SACC,KAAK,iBACL,MAAOL,EAAM,OAAS,GACtB,SAAWM,GAAMJ,EAAaF,EAAM,KAAMM,EAAE,OAAO,KAAK,EACxD,OAAQH,EACR,UAAU,kCACV,YAAY,uBACd,KACA,OAAC,KAAE,UAAU,6BAA6B,oFAE1C,GACF,CAEJ,CACA,IAAOI,GAAQR,GCnBf,IAAAS,GAA0B,qCAGEC,EAAA,6BAD5B,SAASC,GAAe,CAAE,MAAAC,CAAM,EAAG,CACjC,OAAKA,GAAA,MAAAA,EAAO,SAGV,QAAC,OAAI,UAAU,kCACb,oBAAC,cAAU,UAAU,0BAA0B,KAC/C,OAAC,QAAK,UAAU,0CACb,SAAAA,EAAM,MACT,KACA,OAAC,cAAU,UAAU,0BAA0B,GACjD,KATwB,OAAC,cAAU,UAAU,wBAAwB,CAWzE,CAEA,IAAOC,GAAQF,GCkCf,IAAAG,GAAkB,iBAClBC,EAA4B,4CA0CZC,EAAA,6BAxChB,SAASC,GAAgB,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,CAAW,EAAG,CACxE,IAAMC,EAAQH,EAAWD,EAAM,IAAI,GAAK,GAClCK,EAAa,OAAOL,EAAM,UAAa,WACzCA,EAAM,SAASC,CAAU,EACzBD,EAAM,SACJM,EAAUN,EAAM,SAAW,CAAC,EAC5BO,EAAWP,EAAM,QAAU,GAEjC,SACE,OAAY,OAAX,CACC,MAAOI,EACP,cAAgBI,GAAQN,EAAaF,EAAM,KAAMQ,CAAG,EACpD,OAAQ,IAAML,EAAWH,EAAM,IAAI,EACnC,SAAUK,EACV,UAAWE,EAAW,uBAAyB,YAC/C,aAAYP,EAAM,OAASA,EAAM,KAEhC,SAAAM,EAAQ,IAAKG,GAAW,CACvB,IAAMC,EAAc,OAAOD,GAAW,SAAWA,EAAO,MAAQA,EAC1DE,EAAc,OAAOF,GAAW,SAAWA,EAAO,MAAQA,EAE1DG,EAAoB,OAAOH,GAAW,SAAWA,EAAO,YAAc,KACtEI,EAAS,GAAGb,EAAM,IAAI,IAAIU,CAAW,GAE3C,SACE,QAAC,OAAsB,UAAU,4BAC/B,oBAAC,OAAI,UAAU,wBACb,mBAAY,OAAX,CACC,MAAOA,EACP,GAAIG,EACJ,SAAUR,EACV,UAAW;AAAA;AAAA,oBAEPA,EACE,iDACA,wHACJ;AAAA;AAAA,kBAIF,mBAAY,YAAX,CAAqB,UAAU,mJAAmJ,EACrL,EACF,KACA,QAAC,OAAI,UAAU,eACb,oBAAC,SACC,QAASQ,EACT,UAAW,eAAeR,EAAa,gBAAkB,8BAA8B,GAEtF,SAAAM,EACH,EACCC,GAAqB,CAACL,MACrB,OAAC,KAAE,UAAW,WAAWF,EAAa,gBAAkB,eAAe,GACpE,SAAAO,EACH,GAEJ,IA9BQF,CA+BV,CAEJ,CAAC,EACH,CAEJ,CAEA,IAAOI,GAAQf,GCnEf,IAAAgB,GAAkB,iBAyCdC,EAAA,6BAvCJ,SAASC,GAAY,CAAE,MAAAC,CAAM,EAAG,CAC9B,IAAMC,EAAOD,EAAM,MAAQA,EAAM,OAAS,GACpCE,EAAcF,EAAM,aAAe,GACnCG,EAAOH,EAAM,MAAQ,KACrBI,EAAYJ,EAAM,WAAa,GAC/BK,EAAQL,EAAM,OAAS,OACvBM,EAAcN,EAAM,WAAa,GAGjCO,EAAc,CAClB,GAAI,0BACJ,GAAI,wBACJ,GAAI,oBACJ,GAAI,qBACJ,MAAO,qBACP,MAAO,qBACP,MAAO,oBACT,EAEMC,EAAe,CACnB,KAAM,YACN,OAAQ,cACR,MAAO,YACT,EAEMC,EAAc;AAAA,MAChBF,EAAYJ,CAAI,GAAKI,EAAY,EAAE;AAAA,MACnCC,EAAaH,CAAK,GAAKG,EAAa,IAAI;AAAA,MACxCJ,EAAY,kCAAoC,EAAE;AAAA,MAClDE,CAAW;AAAA;AAAA,IAEb,KAAK,EAEDI,EAAmB;AAAA;AAAA,MAErBF,EAAaH,CAAK,GAAKG,EAAa,IAAI;AAAA,IAC1C,KAAK,EAEP,SACE,QAAC,OAAI,UAAU,OACb,oBAAC,MAAG,UAAWC,EACZ,SAAAR,EACH,EACCC,MACC,OAAC,KAAE,UAAWQ,EACX,SAAAR,EACH,GAEJ,CAEJ,CAEA,IAAOS,GAAQZ,GCxGf,IAAAa,EAAyB,wCACzBC,GAAyB,iBACzBC,GAA0B,4BAC1BC,GAAO,2CAaGC,EAAA,6BAXV,SAASC,GAAe,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,CAAW,EAAG,CACvE,GAAM,CAACC,EAAMC,CAAO,KAAI,aAAS,EAAK,EAChCC,EAAWL,EAAWD,EAAM,IAAI,GAAK,KAErCO,EAAgBC,GAASN,EAAaF,EAAM,KAAMQ,CAAI,EACtDC,EAAc,IAAMP,EAAaF,EAAM,KAAM,IAAI,EAEvD,SACE,OAAC,OACC,oBAAS,OAAR,CAAa,KAAMI,EAAM,aAAcC,EACtC,oBAAS,UAAR,CAAgB,QAAO,GACtB,oBAAC,UACC,KAAK,SACL,GAAIL,EAAM,KACV,gBAAc,SACd,gBAAeI,EACf,QAAS,IAAMC,EAAQ,EAAI,EAC3B,UAAYK,GAAMA,EAAE,MAAQ,SAAWL,EAAQ,EAAI,EACnD,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAST,UAAAC,KACC,OAAC,QAAM,SAAAA,EAAS,mBAAmB,EAAE,KAErC,OAAC,QAAK,UAAU,wBACb,SAAAN,EAAM,aAAe,cACxB,KAGF,OAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAU,wCAEV,mBAAC,QAAK,EAAE,eAAe,EACzB,GACF,EACF,KAEA,QAAS,UAAR,CACC,MAAM,QACN,WAAY,EACZ,UAAU,uEAEV,oBAAC,cACC,KAAK,SACL,SAAUM,EACV,SAAUC,EACV,gBAAe,GACf,UAAU,kCACZ,KAGA,QAAC,OAAI,UAAU,uEACb,oBAAC,UACC,KAAK,SACL,QAASE,EACT,UAAU,4SACX,iBAED,KACA,OAAC,UACC,KAAK,SACL,QAAS,IAAMJ,EAAQ,EAAK,EAC5B,UAAU,+QACX,gBAED,GACF,GACF,GACF,EACF,CAEJ,CAEA,IAAOM,GAAQZ,GC7Ff,IAAAa,EAAgC,sBAChCC,EAAyB,wCA2EXC,EAAA,6BAzEd,SAASC,GAAU,CAAE,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,WAAAC,CAAW,EAAG,CAClE,GAAM,CAACC,EAAMC,CAAO,KAAI,YAAS,EAAK,EAChC,CAACC,EAAOC,CAAQ,KAAI,YAAS,IAAI,EACjC,CAACC,EAASC,CAAU,KAAI,YAAS,IAAI,EACrC,CAACC,EAAQC,CAAS,KAAI,YAAS,IAAI,EAEnCC,EAAQX,EAAWD,EAAM,IAAI,GAAK,GAGxC,EAAAa,QAAM,UAAU,IAAM,CACpB,GAAID,EAAO,CACT,IAAME,EAAYF,EAAM,MAAM,8BAA8B,EACxDE,IACFP,EAASO,EAAU,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,EACtCL,EAAWK,EAAU,CAAC,CAAC,EACvBH,EAAUG,EAAU,CAAC,EAAE,YAAY,CAAC,EAExC,CACF,EAAG,CAACF,CAAK,CAAC,EAEV,IAAMG,EAAc,IAAM,CACxB,IAAMC,EAAa,GAAGV,CAAK,IAAIE,CAAO,IAAIE,CAAM,GAChDR,EAAaF,EAAM,KAAMgB,CAAU,EACnCX,EAAQ,EAAK,CACf,EAEMY,EAAc,IAAM,CACxBf,EAAaF,EAAM,KAAM,EAAE,EAC3BO,EAAS,IAAI,EACbE,EAAW,IAAI,EACfE,EAAU,IAAI,CAChB,EAEMO,EAAiB,IAAM,CAC3B,IAAMC,EAAI,SAASb,CAAK,EACxBC,GAAWY,EAAI,GAAM,GAAG,SAAS,EAAE,SAAS,EAAG,GAAG,CAAC,CACrD,EAEMC,EAAiB,IAAM,CAC3B,IAAMD,EAAI,SAASb,CAAK,EACxBC,GAAUY,IAAM,EAAI,GAAKA,EAAI,GAAG,SAAS,EAAE,SAAS,EAAG,GAAG,CAAC,CAC7D,EAEME,EAAmB,IAAM,CAC7B,IAAMC,EAAI,SAASd,CAAO,EAC1BC,IAAaa,EAAI,GAAK,IAAI,SAAS,EAAE,SAAS,EAAG,GAAG,CAAC,CACvD,EAEMC,EAAmB,IAAM,CAC7B,IAAMD,EAAI,SAASd,CAAO,EAC1BC,GAAYa,IAAM,EAAI,GAAKA,EAAI,GAAG,SAAS,EAAE,SAAS,EAAG,GAAG,CAAC,CAC/D,EAEA,SACE,OAAC,OACC,oBAAS,OAAR,CAAa,KAAMlB,EAAM,aAAcC,EACtC,oBAAS,UAAR,CAAgB,QAAO,GACtB,oBAAC,UACC,KAAK,SACL,GAAIL,EAAM,KACV,gBAAc,SACd,gBAAeI,EACf,QAAS,IAAMC,EAAQ,EAAI,EAC3B,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAST,UAAAO,KACC,OAAC,QAAM,SAAAA,EAAM,KAEb,OAAC,QAAK,UAAU,gBACb,SAAAZ,EAAM,aAAe,cACxB,KAGF,QAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAU,iCAEV,oBAAC,UAAO,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,KAC/B,OAAC,YAAS,OAAO,mBAAmB,GACtC,GACF,EACF,KAEA,OAAS,UAAR,CACC,MAAM,QACN,WAAY,EACZ,UAAU,qEAEV,oBAAC,OAAI,UAAU,sBAEb,qBAAC,OAAI,UAAU,yCAEb,qBAAC,OAAI,UAAU,6BACb,oBAAC,UACC,KAAK,SACL,QAASkB,EACT,UAAU,gCAEV,mBAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IAEZ,mBAAC,YAAS,OAAO,kBAAkB,EACrC,EACF,KACA,OAAC,SACC,KAAK,OACL,MAAOZ,EACP,SAAWkB,GAAM,CACf,IAAMC,EAAMD,EAAE,OAAO,MAAM,QAAQ,MAAO,EAAE,GACxCC,IAAQ,IAAO,SAASA,CAAG,GAAK,GAAK,SAASA,CAAG,GAAK,KACxDlB,EAASkB,EAAI,SAAS,EAAG,GAAG,CAAC,CAEjC,EACA,UAAU,oHACV,UAAU,IACZ,KACA,OAAC,UACC,KAAK,SACL,QAASL,EACT,UAAU,gCAEV,mBAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IAEZ,mBAAC,YAAS,OAAO,iBAAiB,EACpC,EACF,GACF,KAEA,OAAC,QAAK,UAAU,yBAAyB,aAAC,KAG1C,QAAC,OAAI,UAAU,6BACb,oBAAC,UACC,KAAK,SACL,QAASC,EACT,UAAU,gCAEV,mBAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IAEZ,mBAAC,YAAS,OAAO,kBAAkB,EACrC,EACF,KACA,OAAC,SACC,KAAK,OACL,MAAOb,EACP,SAAWgB,GAAM,CACf,IAAMC,EAAMD,EAAE,OAAO,MAAM,QAAQ,MAAO,EAAE,GACxCC,IAAQ,IAAO,SAASA,CAAG,GAAK,GAAK,SAASA,CAAG,GAAK,KACxDhB,EAAWgB,EAAI,SAAS,EAAG,GAAG,CAAC,CAEnC,EACA,UAAU,oHACV,UAAU,IACZ,KACA,OAAC,UACC,KAAK,SACL,QAASF,EACT,UAAU,gCAEV,mBAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IAEZ,mBAAC,YAAS,OAAO,iBAAiB,EACpC,EACF,GACF,KAGA,QAAC,OAAI,UAAU,2BACb,oBAAC,UACC,KAAK,SACL,QAAS,IAAMZ,EAAU,IAAI,EAC7B,UAAW;AAAA;AAAA,sBAGPD,IAAW,KACP,yBACA,6CACN;AAAA,oBAEH,cAED,KACA,OAAC,UACC,KAAK,SACL,QAAS,IAAMC,EAAU,IAAI,EAC7B,UAAW;AAAA;AAAA,sBAGPD,IAAW,KACP,yBACA,6CACN;AAAA,oBAEH,cAED,GACF,GACF,KAGA,QAAC,OAAI,UAAU,wEACb,oBAAC,UACC,KAAK,SACL,QAASO,EACT,UAAU,4SACX,iBAED,KACA,OAAC,UACC,KAAK,SACL,QAASF,EACT,UAAU,+QACX,gBAED,GACF,GACF,EACF,GACF,EACF,CAEJ,CAEA,IAAOW,GAAQ3B,GC5Qf,IAAA4B,GAAkB,iBCAlB,IAAAC,GAAmD,qCACnDA,GAAgC,qCAChCC,GAAsC,uCAM1B,IAAAC,EAAA,6BAHZ,SAASC,GAAM,CAAE,QAAAC,CAAQ,EAAG,CACxB,SACI,OAAC,OAAI,UAAU,2DACX,oBAAC,OAAI,UAAU,0BACX,oBAAC,gBAAY,cAAY,OAAO,UAAU,+BAA+B,KACzE,OAAC,QAAK,UAAU,mCAAoC,SAAAA,EAAQ,GAChE,EACJ,CAER,CACA,SAASC,GAAQ,CAAE,QAAAD,CAAQ,EAAG,CAC1B,SACI,OAAC,OAAI,UAAU,+DACX,oBAAC,OAAI,UAAU,0BACX,oBAAC,0BACG,cAAY,OACZ,UAAU,iCACd,KACA,OAAC,QAAK,UAAU,qCAAsC,SAAAA,EAAQ,GAClE,EACJ,CAER,CAEA,SAASE,GAAQ,CAAE,QAAAF,CAAQ,EAAG,CAC1B,SACI,OAAC,OAAI,UAAU,+DACX,oBAAC,OAAI,UAAU,0BACX,oBAAC,oBACG,cAAY,OACZ,UAAU,iCACd,KACA,OAAC,QAAK,UAAU,qCAAsC,SAAAA,EAAQ,GAClE,EACJ,CAER,CAEA,SAASG,GAAK,CAAE,QAAAH,CAAQ,EAAG,CACvB,SACI,OAAC,OAAI,UAAU,6DACX,oBAAC,OAAI,UAAU,0BACX,oBAAC,0BACG,cAAY,OACZ,UAAU,gCACd,KACA,OAAC,QAAK,UAAU,oCAAqC,SAAAA,EAAQ,GACjE,EACJ,CAER,CD3Ca,IAAAI,EAAA,6BATb,SAASC,GAAkB,CAAE,MAAAC,CAAM,EAAG,CACpC,GAAM,CAAE,QAAAC,EAAU,OAAQ,QAAAC,EAAS,QAAAC,CAAQ,EAAIH,EAEzCI,EAAeF,GAAWC,GAAW,GAG3C,OAAQF,EAAQ,YAAY,EAAG,CAC7B,IAAK,QACL,IAAK,SACH,SAAO,OAACI,GAAA,CAAM,QAASD,EAAc,EAEvC,IAAK,UACH,SAAO,OAACE,GAAA,CAAQ,QAASF,EAAc,EAEzC,IAAK,UACL,IAAK,OACH,SAAO,OAACG,GAAA,CAAQ,QAASH,EAAc,EAEzC,IAAK,OACL,IAAK,cACL,QACE,SAAO,OAACI,GAAA,CAAK,QAASJ,EAAc,CACxC,CACF,CAEA,IAAOK,GAAQV,GjBNf,IAAAW,GAAsB,iCA8QHC,EAAA,6BA7QbC,GAAc,CAAC,CACjB,UAAAC,EACA,QAAAC,EACA,eAAAC,EACA,eAAAC,EACA,SAAAC,EACA,cAAAC,EAAgB,CAAC,EACjB,eAAAC,EAAiB,IAAM,CAAE,CAC7B,IAAM,CAEF,GAAM,CAACC,EAAYC,CAAa,KAAI,YAAS,CAAE,GAAGH,CAAc,CAAC,EAC3D,CAACI,EAAQC,CAAS,KAAI,YAAS,CAAC,CAAC,EACjC,CAACC,EAASC,CAAU,KAAI,YAAS,CAAC,CAAC,EACnC,CAACC,EAAYC,CAAa,KAAI,YAAS,CAAC,CAAC,EACzCC,EAAyB,CAAC,SAAU,OAAQ,YAAa,SAAU,OAAO,EAC1EC,KAAkB,WAAQ,KAAO,CACnC,KAAMC,GACN,UAAWA,GACX,UAAWC,GACX,KAAMC,GACN,cAAeC,GACf,KAAMC,GACN,OAAQC,GACR,YAAaC,GACb,OAAQC,GACR,MAAOC,GACP,UAAWC,GACX,SAAUC,GACV,WAAYC,GACZ,MAAOC,GACP,SAAUC,GACV,OAAQC,GACR,MAAOC,GACP,UAAWC,EAEf,GAAI,CAAC,CAAC,EAGAC,EAAsB,MAAOC,EAAOC,EAAiB,OAAS,CAEhE,GAAI,CAACpC,EAAW,CACZ,IAAMqC,EAAW,wEAAwEF,EAAM,IAAI,uDACnG,QAAQ,MAAME,CAAQ,EACtB,SAAM,MAAMA,CAAQ,EACpB,MACJ,CAEA,GAAI,CACA,IAAMC,EAAW,MAAMtC,EAAU,IAAImC,EAAM,UAAU,EAAE,EAEnDI,EAAU,CAAC,EACXJ,EAAM,OAAS,SACfI,EAAU,CACN,CAAE,MAAO,GAAI,MAAO,UAAUJ,EAAM,MAAM,YAAY,CAAC,EAAG,EAC1D,GAAGG,EAAS,IAChB,EAEAC,EAAU,CAAC,GAAGD,EAAS,KAAK,IAAKE,IAC7B,CAAE,MAAOA,EAAK,MAAO,MAAOA,EAAK,KAAM,EAC1C,CAAC,EAENtC,EAAe,OAAO,QAASuC,GAAM,CAC7BA,EAAE,OAASN,EAAM,OACjBM,EAAE,QAAUF,EAEpB,CAAC,CAEL,OAASG,EAAO,CACZ,QAAQ,MAAM,8BAA8BP,EAAM,IAAI,IAAKO,CAAK,CACpE,QAAE,CACF,CACJ,KAGA,aAAU,IAAM,CACZ,GAAIxC,GAAA,MAAAA,EAAgB,QAAUA,EAAe,OAAO,OAAS,EAAG,CAG5D,GAAI,CADYA,EAAe,OAAO,KAAMuC,GAAMA,EAAE,KAAK,EAC3C,OAGdvC,EAAe,OAAO,QAASiC,GAAU,CACjCA,EAAM,YAAYD,EAAoBC,CAAK,CACnD,CAAC,EAGD,IAAMQ,EAAgB,CAAC,EACvBzC,EAAe,OAAO,QAASiC,GAAU,CACrCQ,EAAcR,EAAM,IAAI,EACpB9B,EAAc8B,EAAM,IAAI,GACxBA,EAAM,QACLA,EAAM,OAAS,cAAgB,CAAC,EAAI,GAC7C,CAAC,EAED3B,EAAcmC,CAAa,CAC/B,CACJ,EAAG,CAACzC,CAAc,CAAC,EAMnB,IAAM0C,EAAgB,CAACT,EAAOU,EAAOC,IAAc,CAC/C,GAAIX,EAAM,UAAYA,EAAM,SAASW,CAAS,EAC1C,OAAO,KAGX,GAAIX,EAAM,SAAU,CAChB,GAAI,CAACU,EACD,MAAO,GAAGV,EAAM,KAAK,eAEzB,GAAI,MAAM,QAAQU,CAAK,GAAKA,EAAM,SAAW,EACzC,MAAO,8BAA8BV,EAAM,MAAM,YAAY,CAAC,EAEtE,CAEA,GAAIA,EAAM,SAAU,CAChB,IAAMO,EAAQP,EAAM,SAASU,EAAOC,CAAS,EAC7C,GAAIJ,EAAO,OAAOA,CACtB,CAGA,GAAIP,EAAM,OAAS,SAEX,CADe,6BACH,KAAKU,CAAK,EAAG,MAAO,qCAGxC,GAAIV,EAAM,OAAS,SAAU,CACzB,GAAIA,EAAM,MAAQ,QAAaU,EAAQV,EAAM,IACzC,MAAO,GAAGA,EAAM,KAAK,qBAAqBA,EAAM,GAAG,GAEvD,GAAIA,EAAM,MAAQ,QAAaU,EAAQV,EAAM,IACzC,MAAO,GAAGA,EAAM,KAAK,yBAAyBA,EAAM,GAAG,EAE/D,CAEA,OAAIA,EAAM,OAAS,QAEX,IAAC,GAAAY,SAAMF,CAAK,EAAE,QAAQ,EACf,GAAGV,EAAM,KAAK,wBAIzBA,EAAM,WAAaU,GAASA,EAAM,OAASV,EAAM,UAC1C,GAAGA,EAAM,KAAK,oBAAoBA,EAAM,SAAS,cAGrD,IACX,EAGMa,EAAe,CAACC,EAAWJ,IAAU,CACvC,IAAMV,EAAQjC,EAAe,OAAO,KAAM,GAAM,EAAE,OAAS+C,CAAS,EACpE,GAAI,CAACd,EAAO,OAEZ,IAAMe,EAAY,CAAE,GAAG3C,CAAW,EAE9B4B,EAAM,OAAS,cACfe,EAAUD,CAAS,EAAI,MAAM,QAAQJ,CAAK,EACpCA,EACA,MAAM,KAAKA,EAAM,OAAO,eAAe,EAAE,IAAKM,GAAWA,EAAO,KAAK,EAItEhB,EAAM,OAAS,YACpBe,EAAUD,CAAS,EAAI,CACnB,CACI,UAAWJ,EAAM,CAAC,EAAE,KACpB,QAASA,EAAM,CAAC,EAAE,GAClB,IAAK,WACT,CACJ,EAIKV,EAAM,OAAS,gBACpBe,EAAUD,CAAS,EAAIJ,KAAQ,GAAAE,SAAMF,CAAK,EAAE,OAAO,qBAAqB,EAAI,GAG5EK,EAAUD,CAAS,EAAIJ,EAIvBV,EAAM,OAAS,UACfjC,EAAe,OAAO,QAAS,GAAM,CAC7B,EAAE,QAAU,CAAC,EAAE,OAAOgD,CAAS,IAC/BA,EAAU,EAAE,IAAI,EAAI,EAAE,OAAS,cAAgB,CAAC,EAAI,GAE5D,CAAC,EAGLhD,EAAe,OAAO,QAAS,GAAM,CAC7B,EAAE,UAAY,EAAE,SAASgD,CAAS,IAClCA,EAAU,EAAE,IAAI,EAAI,EAAE,OAAS,cAAgB,CAAC,EAAI,GAE5D,CAAC,EAED1C,EAAc0C,CAAS,EAGvB,IAAME,EAAY,CAAC,EACnBlD,EAAe,OAAO,QAAS,GAAM,CACjC,GAAI,CAAC,EAAE,QAAU,EAAE,OAAOgD,CAAS,EAAG,CAClC,IAAMR,EAAQE,EAAc,EAAGM,EAAU,EAAE,IAAI,EAAGA,CAAS,EACvDR,IAAOU,EAAU,EAAE,IAAI,EAAIV,EACnC,CACJ,CAAC,EAEDhC,EAAU0C,CAAS,CACvB,EAGMC,EAAcJ,GAAc,CAC9BrC,EAAW,CAAE,GAAGD,EAAS,CAACsC,CAAS,EAAG,EAAK,CAAC,CAChD,EAEMK,GAAgBC,GAAM,CACxBA,EAAE,eAAe,EAEjB,IAAMC,EAAa,CAAC,EACpBtD,EAAe,OAAO,QAASiC,GAAU,CACrCqB,EAAWrB,EAAM,IAAI,EAAI,EAC7B,CAAC,EACDvB,EAAW4C,CAAU,EAErB,IAAMJ,EAAY,CAAC,EACnBlD,EAAe,OAAO,QAASiC,GAAU,CACrC,IACK,CAACA,EAAM,QAAUA,EAAM,OAAO5B,CAAU,KACxC,CAAC4B,EAAM,UAAY,CAACA,EAAM,SAAS5B,CAAU,GAChD,CACE,IAAMmC,EAAQE,EAAcT,EAAO5B,EAAW4B,EAAM,IAAI,EAAG5B,CAAU,EACjEmC,IAAOU,EAAUjB,EAAM,IAAI,EAAIO,EACvC,CACJ,CAAC,EAEDhC,EAAU0C,CAAS,EAEf,OAAO,KAAKA,CAAS,EAAE,SAAW,EAClCjD,EAAeI,CAAU,EAEzB,SAAM,MAAM,uCAAuC,CAE3D,KAGA,aAAU,IAAM,CAEZD,EAAeC,CAAU,CAE7B,EAAG,CAACA,EAAYD,CAAc,CAAC,EAI/B,IAAMmD,EAAuB,CACzB,MAAO,+BACP,KAAM,6BACN,IAAK,2BACL,OAAQ,iCACR,OAAQ,iCACR,OAAQ,iCACR,KAAM,6BACN,KAAM,6BACN,OAAQ,gCACZ,EAGA,SAASC,GAAYtD,EAAU+B,EAAOO,EAAO,CACzC,GAAI3B,EAAuB,SAASoB,EAAM,IAAI,EAC1C,SAAO,OAAC,OAAI,UAAWA,EAAM,YAAc,aAAe,SAAA/B,EAAS,EAGvE,IAAMuD,EAAiBxB,EAAM,eACvByB,EAAQzB,EAAM,OAAS,OACvB0B,EAAmBF,IAAmB,OACtC,wDAAwDxB,EAAM,oBAAsBsB,EAAqBG,CAAK,GAAKH,EAAqB,IAAI,GAC5I,GAEAK,KACF,oBACK,UAAA3B,EAAM,UACH,QAAC,UACG,QAASA,EAAM,KACf,UAAU,iCAET,UAAAA,EAAM,MACNA,EAAM,aAAY,OAAC,QAAK,UAAU,oBAAoB,aAAC,GAC5D,KAIJ,OAAC,OAAK,SAAA/B,EAAS,EAEdsC,MACG,OAAC,KAAE,UAAU,4BACR,SAAAA,EACL,GAER,EAGJ,SACI,OAAC,OAAI,UAAW,QAAQP,EAAM,YAAc,YAAY,GACnD,SAAAwB,IAAmB,UAChB,OAAC,OAAI,UAAWE,EACX,SAAAC,EACL,EACAA,EACR,CAER,CAEA,IAAMC,EAAe5B,GAAU,CAC3B,GAAIA,EAAM,QAAU,CAACA,EAAM,OAAO5B,CAAU,EAAG,OAAO,KAEtD,IAAMyD,EAAiBhD,EAAgBmB,EAAM,IAAI,GAAKN,GAClDtB,EAAW4B,EAAM,IAAI,IAAM,SAC3B5B,EAAW4B,EAAM,IAAI,EACjBA,EAAM,QAAU,OACVA,EAAM,MACNA,EAAM,OAAS,cACX,CAAC,EACD,IAGlB,IAAMO,EAAQ/B,EAAQwB,EAAM,IAAI,GAAK1B,EAAO0B,EAAM,IAAI,EAAI1B,EAAO0B,EAAM,IAAI,EAAI,KAE/E,OAAQuB,MACJ,OAACM,EAAA,CACG,MAAO7B,EACP,WAAY5B,EACZ,aAAcyC,EACd,WAAY,IAAMK,EAAWlB,EAAM,IAAI,EACvC,cAAerB,EACf,UAAWD,EAAWsB,EAAM,IAAI,GAAK,EACrC,QAASlC,EAEb,EAAIkC,CACR,CAEJ,EAGA,SACI,QAAC,QAAK,SAAUmB,GAAc,UAAU,oCACnC,UAAApD,EACGA,EAAe,OAAO,IAAI6D,CAAW,KAErC,OAAC,OAAI,sBAAU,EAElB3D,GACL,CAER,EAEO6D,GAAQlE,GHjXf,IAAOmE,GAAQC","names":["index_exports","__export","DynamicForm_default","index_default","__toCommonJS","styleInject","css","insertAt","head","style","styleInject","import_react","import_react_hot_toast","import_dayjs","import_jsx_runtime","HiddenField","field","HiddenField_default","import_react_select","import_animated","import_jsx_runtime","MultiSelectField","field","formValues","handleChange","touched","errors","handleBlur","isDisabled","options","animatedComponents","makeAnimated","currentValues","Select","selected","MultiSelectField_default","Select","import_react","import_solid","import_jsx_runtime","SelectField","field","formValues","handleChange","handleBlur","_a","value","isDisabled","options","val","option","SelectField_default","import_react","import_jsx_runtime","EmailField","field","formValues","handleChange","handleBlur","touched","errors","isDisabled","e","EmailField_default","import_react","import_jsx_runtime","InputField","field","formValues","handleChange","handleBlur","touched","errors","isDisabled","e","InputField_default","import_react","import_jsx_runtime","HtmlField","field","formValues","htmlContent","HtmlField_default","import_jsx_runtime","CheckboxField","field","formValues","handleChange","handleBlur","touched","errors","isDisabled","error","e","CheckboxField_default","Popover","import_react","import_react_day_picker","import_style","import_jsx_runtime","DateRangeField","field","formValues","handleChange","handleBlur","open","setOpen","selected","handleSelect","range","handleClear","e","DateRangePickerField_default","import_react","import_react_hot_toast","import_jsx_runtime","FileField","field","formValues","touched","errors","fileUploads","setFileUploads","fileInputRefs","handleChange","onFieldsChange","api_URL","error","isMultiple","uploads","currentValues","values","isDisabled","disablebtnClasses","uploadUrl","formatFileSize","bytes","k","sizes","i","uploadFile","file","fieldName","formData","response","handleSingleFileUpload","uploadedData","newValues","handleMultiFileUpload","files","currentUrls","uploadedUrls","newUrls","handleFileChange","fileList","removeFile","urlToRemove","newValue","url","el","e","index","upload","u","fileName","FileField_default","import_react","import_jsx_runtime","TextAreaField","field","formValues","handleChange","handleBlur","touched","errors","charCount","setCharCounts","textareaRef","value","isDisabled","error","autoResize","el","handleTextareaChange","e","prev","TextArea_default","import_react","import_jsx_runtime","DayTimePickerField","field","formValues","handleChange","handleBlur","touched","errors","e","DayTimePickerField_default","import_react_separator","import_jsx_runtime","LineBreakField","field","LineBreakField_default","import_react","RadioGroup","import_jsx_runtime","RadioGroupField","field","formValues","handleChange","handleBlur","value","isDisabled","options","isInline","val","option","optionValue","optionLabel","optionDescription","itemId","RadioGroups_default","import_react","import_jsx_runtime","HeaderField","field","text","description","size","underline","align","customClass","sizeClasses","alignClasses","headerClass","descriptionClass","HeaderField_default","Popover","import_react","import_react_day_picker","import_style","import_jsx_runtime","DateRangeField","field","formValues","handleChange","handleBlur","open","setOpen","selected","handleSelect","date","handleClear","e","DatePickerField_default","import_react","Popover","import_jsx_runtime","TimeField","field","formValues","handleChange","handleBlur","open","setOpen","hours","setHours","minutes","setMinutes","period","setPeriod","value","React","timeMatch","handleApply","timeString","handleClear","incrementHours","h","decrementHours","incrementMinutes","m","decrementMinutes","e","val","timeField_default","import_react","import_solid","import_outline","import_jsx_runtime","Error","message","Warning","Success","Info","import_jsx_runtime","AlertMessageField","field","variant","message","content","alertMessage","Error","Success","Warning","Info","AlertMessageField_default","import_react_label","import_jsx_runtime","DynamicForm","apiClient","api_URL","formDefinition","sendFormValues","children","defaultValues","onFieldsChange","formValues","setFormValues","errors","setErrors","touched","setTouched","charCounts","setCharCounts","excludeFromFieldFormat","FIELD_RENDERERS","FileField_default","DateRangePickerField_default","DatePickerField_default","DayTimePickerField_default","timeField_default","HiddenField_default","MultiSelectField_default","SelectField_default","EmailField_default","HtmlField_default","CheckboxField_default","RadioGroups_default","InputField_default","TextArea_default","HeaderField_default","AlertMessageField_default","LineBreakField_default","loadOptionsForField","field","dependentValue","errorMsg","response","options","item","f","error","initialValues","validateField","value","allValues","dayjs","handleChange","fieldName","newValues","option","newErrors","handleBlur","handleSubmit","e","allTouched","FIELD_COLOR_VARIANTS","fieldFormat","containerStyle","color","containerClasses","content","renderField","FieldComponent","DynamicForm_default","index_default","DynamicForm_default"]}