@react-solutions/inputs 0.1.4 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +6026 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6089 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +19 -22
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../lib/index.ts","../lib/pkg/HookFormFields/index.ts","../lib/pkg/FormFields/TextFields/TextInputField.tsx","../lib/pkg/HookFormFields/FormInputTextField.tsx","../lib/pkg/HookFormFields/FormInputTextArea.tsx","../lib/pkg/FormFields/TextFields/PasswordField.tsx","../lib/pkg/HookFormFields/FormInputPasswordField.tsx","../lib/pkg/FormFields/TextFields/NumberField.tsx","../lib/pkg/HookFormFields/FormInputNumberField.tsx","../lib/pkg/FormFields/TextFields/TelInputField.tsx","../lib/pkg/HookFormFields/FormInputTelField.tsx","../lib/pkg/FormFields/TextFields/SearchInputField.tsx","../lib/pkg/HookFormFields/FormInputSearchField.tsx","../lib/pkg/FormFields/TextFields/OTPField.tsx","../lib/pkg/HookFormFields/FormInputOTPField.tsx","../lib/pkg/FormFields/DropdownFields/SelectInputField.tsx","../lib/pkg/HookFormFields/FormInputSelect.tsx","../lib/pkg/HookFormFields/FormInputMultiSelect.tsx","../lib/pkg/FormFields/DropdownFields/AutoCompleteField.tsx","../lib/pkg/HookFormFields/FormInputAutoComplete.tsx","../lib/pkg/HookFormFields/FormInputMultiAutoComplete.tsx","../lib/pkg/FormFields/DropdownFields/ColorPickerField.tsx","../lib/pkg/HookFormFields/FormInputColorPicker.tsx","../lib/pkg/FormFields/DropdownFields/FileUploadField.tsx","../lib/pkg/HookFormFields/FormInputFileUpload.tsx","../lib/pkg/FormFields/DateFields/DatePickerField.tsx","../lib/pkg/HookFormFields/FormInputDatePicker.tsx","../lib/pkg/FormFields/DateFields/TimePickerField.tsx","../lib/pkg/HookFormFields/FormInputTimePicker.tsx","../lib/pkg/FormFields/DateFields/TimeClockField.tsx","../lib/pkg/HookFormFields/FormInputTimeClock.tsx","../lib/pkg/FormFields/DateFields/DateCalendarField.tsx","../lib/pkg/HookFormFields/FormInputCalender.tsx","../lib/pkg/FormFields/BoxFields/CheckBoxField.tsx","../lib/pkg/HookFormFields/FormInputCheckBox.tsx","../lib/pkg/FormFields/BoxFields/CheckBoxFieldGroup.tsx","../lib/pkg/HookFormFields/FormInputCheckBoxGroup.tsx","../lib/pkg/FormFields/BoxFields/SwitchField.tsx","../lib/pkg/HookFormFields/FormInputSwitch.tsx","../lib/pkg/FormFields/BoxFields/SliderField.tsx","../lib/pkg/HookFormFields/FormInputSlider.tsx","../lib/pkg/FormFields/BoxFields/RadioButtonField.tsx","../lib/pkg/HookFormFields/FormInputRadioButton.tsx","../lib/pkg/FormFields/BoxFields/RadioButtonFieldGroup.tsx","../lib/pkg/HookFormFields/FormInputRadioButtonGroup.tsx"],"sourcesContent":["// Export all HookFormFields\r\nexport * from \"./pkg/HookFormFields\";\r\n\r\n// Export all FormFields\r\nexport { default as TextInputField } from \"./pkg/FormFields/TextFields/TextInputField\";\r\nexport { default as PasswordField } from \"./pkg/FormFields/TextFields/PasswordField\";\r\nexport { default as NumberField } from \"./pkg/FormFields/TextFields/NumberField\";\r\nexport { default as TelInputField } from \"./pkg/FormFields/TextFields/TelInputField\";\r\nexport { default as SearchInputField } from \"./pkg/FormFields/TextFields/SearchInputField\";\r\nexport { default as OTPField } from \"./pkg/FormFields/TextFields/OTPField\";\r\n\r\nexport { default as SelectInputField } from \"./pkg/FormFields/DropdownFields/SelectInputField\";\r\nexport { default as AutoCompleteField } from \"./pkg/FormFields/DropdownFields/AutoCompleteField\";\r\nexport { default as ColorPickerField } from \"./pkg/FormFields/DropdownFields/ColorPickerField\";\r\nexport { default as FileUploadField } from \"./pkg/FormFields/DropdownFields/FileUploadField\";\r\n\r\nexport { default as DatePickerField } from \"./pkg/FormFields/DateFields/DatePickerField\";\r\nexport { default as TimePickerField } from \"./pkg/FormFields/DateFields/TimePickerField\";\r\nexport { default as TimeClockField } from \"./pkg/FormFields/DateFields/TimeClockField\";\r\nexport { default as DateCalendarField } from \"./pkg/FormFields/DateFields/DateCalendarField\";\r\n\r\nexport { default as CheckBoxField } from \"./pkg/FormFields/BoxFields/CheckBoxField\";\r\nexport { default as CheckBoxFieldGroup } from \"./pkg/FormFields/BoxFields/CheckBoxFieldGroup\";\r\nexport { default as RadioButtonField } from \"./pkg/FormFields/BoxFields/RadioButtonField\";\r\nexport { default as RadioButtonFieldGroup } from \"./pkg/FormFields/BoxFields/RadioButtonFieldGroup\";\r\nexport { default as SwitchField } from \"./pkg/FormFields/BoxFields/SwitchField\";\r\nexport { default as SliderField } from \"./pkg/FormFields/BoxFields/SliderField\";\r\n\r\n// Default export with all exports\r\nimport * as HookFormFields from \"./pkg/HookFormFields\";\r\nimport TextInputField from \"./pkg/FormFields/TextFields/TextInputField\";\r\nimport PasswordField from \"./pkg/FormFields/TextFields/PasswordField\";\r\nimport NumberField from \"./pkg/FormFields/TextFields/NumberField\";\r\nimport TelInputField from \"./pkg/FormFields/TextFields/TelInputField\";\r\nimport SearchInputField from \"./pkg/FormFields/TextFields/SearchInputField\";\r\nimport OTPField from \"./pkg/FormFields/TextFields/OTPField\";\r\nimport SelectInputField from \"./pkg/FormFields/DropdownFields/SelectInputField\";\r\nimport AutoCompleteField from \"./pkg/FormFields/DropdownFields/AutoCompleteField\";\r\nimport ColorPickerField from \"./pkg/FormFields/DropdownFields/ColorPickerField\";\r\nimport FileUploadField from \"./pkg/FormFields/DropdownFields/FileUploadField\";\r\nimport DatePickerField from \"./pkg/FormFields/DateFields/DatePickerField\";\r\nimport TimePickerField from \"./pkg/FormFields/DateFields/TimePickerField\";\r\nimport TimeClockField from \"./pkg/FormFields/DateFields/TimeClockField\";\r\nimport DateCalendarField from \"./pkg/FormFields/DateFields/DateCalendarField\";\r\nimport CheckBoxField from \"./pkg/FormFields/BoxFields/CheckBoxField\";\r\nimport CheckBoxFieldGroup from \"./pkg/FormFields/BoxFields/CheckBoxFieldGroup\";\r\nimport RadioButtonField from \"./pkg/FormFields/BoxFields/RadioButtonField\";\r\nimport RadioButtonFieldGroup from \"./pkg/FormFields/BoxFields/RadioButtonFieldGroup\";\r\nimport SwitchField from \"./pkg/FormFields/BoxFields/SwitchField\";\r\nimport SliderField from \"./pkg/FormFields/BoxFields/SliderField\";\r\n\r\nconst FormFields = {\r\n\t// HookFormFields\r\n\t...HookFormFields,\r\n\t// FormFields - Text\r\n\tTextInputField,\r\n\tPasswordField,\r\n\tNumberField,\r\n\tTelInputField,\r\n\tSearchInputField,\r\n\tOTPField,\r\n\t// FormFields - Dropdown\r\n\tSelectInputField,\r\n\tAutoCompleteField,\r\n\tColorPickerField,\r\n\tFileUploadField,\r\n\t// FormFields - Date/Time\r\n\tDatePickerField,\r\n\tTimePickerField,\r\n\tTimeClockField,\r\n\tDateCalendarField,\r\n\t// FormFields - Box\r\n\tCheckBoxField,\r\n\tCheckBoxFieldGroup,\r\n\tRadioButtonField,\r\n\tRadioButtonFieldGroup,\r\n\tSwitchField,\r\n\tSliderField,\r\n};\r\n\r\nexport default FormFields;\r\n","// Text inputs\r\nexport { default as FormInputTextField } from \"./FormInputTextField\";\r\nexport { default as FormInputTextArea } from \"./FormInputTextArea\";\r\nexport { default as FormInputPasswordField } from \"./FormInputPasswordField\";\r\nexport { default as FormInputNumberField } from \"./FormInputNumberField\";\r\nexport { default as FormInputTelField } from \"./FormInputTelField\";\r\nexport { default as FormInputSearchField } from \"./FormInputSearchField\";\r\nexport { default as FormInputOTPField } from \"./FormInputOTPField\";\r\n\r\n// Dropdown inputs\r\nexport { default as FormInputSelect } from \"./FormInputSelect\";\r\nexport { default as FormInputMultiSelect } from \"./FormInputMultiSelect\";\r\nexport { default as FormInputAutoComplete } from \"./FormInputAutoComplete\";\r\nexport { default as FormInputMultiAutoComplete } from \"./FormInputMultiAutoComplete\";\r\nexport { default as FormInputColorPicker } from \"./FormInputColorPicker\";\r\nexport { default as FormInputFileUpload } from \"./FormInputFileUpload\";\r\n\r\n// Date/Time inputs\r\nexport { default as FormInputDatePicker } from \"./FormInputDatePicker\";\r\nexport { default as FormInputTimePicker } from \"./FormInputTimePicker\";\r\nexport { default as FormInputTimeClock } from \"./FormInputTimeClock\";\r\nexport { default as FormInputCalendar } from \"./FormInputCalender\";\r\n\r\n// Box inputs\r\nexport { default as FormInputCheckBox } from \"./FormInputCheckBox\";\r\nexport { default as FormInputCheckBoxGroup } from \"./FormInputCheckBoxGroup\";\r\nexport { default as FormInputSwitch } from \"./FormInputSwitch\";\r\nexport { default as FormInputSlider } from \"./FormInputSlider\";\r\nexport { default as FormInputSingleRadio } from \"./FormInputRadioButton\";\r\nexport { default as FormInputRadioButtonGroup } from \"./FormInputRadioButtonGroup\";\r\n\r\n// Export types\r\nexport type {\r\n IFormInputFields,\r\n IFormInputFieldsWithOptions,\r\n IFormInputDateFields,\r\n IFormInputNumberFields,\r\n IFormInputTextAreaFields,\r\n IFormInputRadioFields,\r\n IFormInputCheckBoxGroupFields,\r\n Option,\r\n} from \"./types\";\r\n","import { FormControl, InputAdornment, TextField, type TextFieldProps } from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, memo, useCallback, useMemo } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Resize options for textarea\r\n */\r\nexport type ResizeOption = \"none\" | \"both\" | \"horizontal\" | \"vertical\";\r\n\r\n/**\r\n * Extended Text Input Field Props\r\n * Extends MUI TextFieldProps with custom text field props\r\n */\r\nexport interface ITextInputFieldProps\r\n\textends Omit<\r\n\t\tTextFieldProps,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\" | \"multiline\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the text field */\r\n\tlabel?: string;\r\n\t/** Current text value */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Whether to enable multiline input (textarea) */\r\n\tmultiline?: boolean;\r\n\t/** Number of rows for multiline input */\r\n\trows?: number;\r\n\t/** Minimum number of rows for multiline input */\r\n\tminRows?: number;\r\n\t/** Maximum number of rows for multiline input */\r\n\tmaxRows?: number;\r\n\t/** Resize option for textarea (none, both, horizontal, vertical) */\r\n\tresize?: ResizeOption;\r\n\t/** Maximum length of input */\r\n\tmaxLength?: number;\r\n\t/** Minimum length of input */\r\n\tminLength?: number;\r\n\t/** Input type (text, email, number, tel, url, etc.) */\r\n\ttype?: string;\r\n\t/** Auto complete attribute */\r\n\tautoComplete?: string;\r\n\t/** Start adornment (icon or element before input) */\r\n\tstartAdornment?: React.ReactNode;\r\n\t/** End adornment (icon or element after input) */\r\n\tendAdornment?: React.ReactNode;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst TextInputField = memo(\r\n\tforwardRef<HTMLDivElement, ITextInputFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tmultiline = false,\r\n\t\t\t\trows,\r\n\t\t\t\tminRows,\r\n\t\t\t\tmaxRows,\r\n\t\t\t\tresize = \"both\",\r\n\t\t\t\tmaxLength,\r\n\t\t\t\tminLength,\r\n\t\t\t\ttype = \"text\",\r\n\t\t\t\tautoComplete = \"off\",\r\n\t\t\t\tstartAdornment,\r\n\t\t\t\tendAdornment,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\t// Handle Enter key press\r\n\t\t\tconst handleKeyDown = useCallback(\r\n\t\t\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\t\tif (event.key === \"Enter\" && !multiline && onEnterPress) {\r\n\t\t\t\t\t\tonEnterPress(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Call original onKeyDown if provided\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[multiline, onEnterPress, value, textFieldProps.onKeyDown]\r\n\t\t\t);\r\n\r\n\t\t\t// Build input props\r\n\t\t\tconst inputProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\tmaxLength,\r\n\t\t\t\t\tminLength,\r\n\t\t\t\t\t...((textFieldProps as any).inputProps || {}),\r\n\t\t\t\t}),\r\n\t\t\t\t[maxLength, minLength, textFieldProps]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize adornments\r\n\t\t\tconst startAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tstartAdornment ?\r\n\t\t\t\t\t\t<InputAdornment position=\"start\">{startAdornment}</InputAdornment>\r\n\t\t\t\t\t:\tundefined,\r\n\t\t\t\t[startAdornment]\r\n\t\t\t);\r\n\r\n\t\t\tconst endAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tendAdornment ? <InputAdornment position=\"end\">{endAdornment}</InputAdornment> : undefined,\r\n\t\t\t\t[endAdornment]\r\n\t\t\t);\r\n\r\n\t\t\t// Build slotProps for MUI v7\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\tinputProps,\r\n\t\t\t\t\t\t...(startAdornmentElement && {\r\n\t\t\t\t\t\t\tstartAdornment: startAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t...(endAdornmentElement && {\r\n\t\t\t\t\t\t\tendAdornment: endAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, inputProps, startAdornmentElement, endAdornmentElement]\r\n\t\t\t);\r\n\r\n\t\t\t// Build sx styles with resize for textarea\r\n\t\t\tconst finalInputStyles = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tmultiline ?\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t...inputStyles,\r\n\t\t\t\t\t\t\t\"& textarea\": {\r\n\t\t\t\t\t\t\t\tresize: resize,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t:\tinputStyles,\r\n\t\t\t\t[multiline, inputStyles, resize]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\tonChange={onChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tmultiline={multiline}\r\n\t\t\t\t\t\trows={rows}\r\n\t\t\t\t\t\tminRows={minRows}\r\n\t\t\t\t\t\tmaxRows={maxRows}\r\n\t\t\t\t\t\ttype={multiline ? undefined : type}\r\n\t\t\t\t\t\tautoComplete={autoComplete}\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={finalInputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nTextInputField.displayName = \"TextInputField\";\r\n\r\nexport default TextInputField;\r\n","import TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputTextField = memo(\r\n\t({ name, label, control, errors, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<TextInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTextField.displayName = \"FormInputTextField\";\r\n\r\nexport default FormInputTextField;\r\n","import TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputTextAreaFields } from \"./types\";\r\n\r\nconst FormInputTextArea = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\trows,\r\n\t\tminRows,\r\n\t\tmaxRows,\r\n\t\tresize,\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputTextAreaFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<TextInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tmultiline\r\n\t\t\t\t\t\t\trows={rows}\r\n\t\t\t\t\t\t\tminRows={minRows}\r\n\t\t\t\t\t\t\tmaxRows={maxRows}\r\n\t\t\t\t\t\t\tresize={resize}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTextArea.displayName = \"FormInputTextArea\";\r\n\r\nexport default FormInputTextArea;\r\n","import { Visibility, VisibilityOff } from \"@mui/icons-material\";\r\nimport {\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tIconButton,\r\n\ttype IconButtonProps,\r\n\tInputAdornment,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, useState, memo, useCallback, useMemo } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Password strength level\r\n */\r\nexport type PasswordStrength = \"weak\" | \"medium\" | \"strong\" | \"very-strong\";\r\n\r\n/**\r\n * Extended Password Field Props\r\n * Extends MUI TextFieldProps with custom password field props\r\n */\r\nexport interface IPasswordFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the password field */\r\n\tlabel?: string;\r\n\t/** Current password value */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Whether to show password strength indicator */\r\n\tshowPasswordStrength?: boolean;\r\n\t/** Minimum password length */\r\n\tminLength?: number;\r\n\t/** Maximum password length */\r\n\tmaxLength?: number;\r\n\t/** Whether to show password by default */\r\n\tdefaultShowPassword?: boolean;\r\n\t/** Custom visibility toggle icon (when password is visible) */\r\n\tvisibilityIcon?: React.ReactNode;\r\n\t/** Custom visibility off icon (when password is hidden) */\r\n\tvisibilityOffIcon?: React.ReactNode;\r\n\t/** Custom icon button props */\r\n\ticonButtonProps?: IconButtonProps;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when password visibility toggles */\r\n\tonVisibilityToggle?: (isVisible: boolean) => void;\r\n\t/** Custom function to calculate password strength */\r\n\tgetPasswordStrength?: (password: string) => PasswordStrength;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\n/**\r\n * Calculate password strength\r\n */\r\nconst calculatePasswordStrength = (password: string): PasswordStrength => {\r\n\tif (!password) return \"weak\";\r\n\r\n\tlet strength = 0;\r\n\r\n\t// Length check\r\n\tif (password.length >= 8) strength++;\r\n\tif (password.length >= 12) strength++;\r\n\r\n\t// Character variety checks\r\n\tif (/[a-z]/.test(password)) strength++;\r\n\tif (/[A-Z]/.test(password)) strength++;\r\n\tif (/[0-9]/.test(password)) strength++;\r\n\tif (/[^a-zA-Z0-9]/.test(password)) strength++;\r\n\r\n\tif (strength <= 2) return \"weak\";\r\n\tif (strength <= 4) return \"medium\";\r\n\tif (strength <= 5) return \"strong\";\r\n\treturn \"very-strong\";\r\n};\r\n\r\n/**\r\n * Get password strength color\r\n */\r\nconst getPasswordStrengthColor = (strength: PasswordStrength): string => {\r\n\tswitch (strength) {\r\n\t\tcase \"weak\":\r\n\t\t\treturn \"#f44336\"; // red\r\n\t\tcase \"medium\":\r\n\t\t\treturn \"#ff9800\"; // orange\r\n\t\tcase \"strong\":\r\n\t\t\treturn \"#4caf50\"; // green\r\n\t\tcase \"very-strong\":\r\n\t\t\treturn \"#2196f3\"; // blue\r\n\t\tdefault:\r\n\t\t\treturn \"#9e9e9e\"; // grey\r\n\t}\r\n};\r\n\r\nconst PasswordField = memo(\r\n\tforwardRef<HTMLInputElement, IPasswordFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonVisibilityToggle,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor,\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tshowPasswordStrength = false,\r\n\t\t\t\tminLength,\r\n\t\t\t\tmaxLength,\r\n\t\t\t\tdefaultShowPassword = false,\r\n\t\t\t\tvisibilityIcon = <Visibility />,\r\n\t\t\t\tvisibilityOffIcon = <VisibilityOff />,\r\n\t\t\t\ticonButtonProps,\r\n\t\t\t\tgetPasswordStrength = calculatePasswordStrength,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLInputElement>\r\n\t\t) => {\r\n\t\t\tconst [showPassword, setShowPassword] = useState<boolean>(defaultShowPassword);\r\n\r\n\t\t\t// Toggle password visibility\r\n\t\t\tconst togglePasswordVisibility = useCallback(() => {\r\n\t\t\t\tsetShowPassword((prev) => {\r\n\t\t\t\t\tconst newVisibility = !prev;\r\n\t\t\t\t\tif (onVisibilityToggle) {\r\n\t\t\t\t\t\tonVisibilityToggle(newVisibility);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn newVisibility;\r\n\t\t\t\t});\r\n\t\t\t}, [onVisibilityToggle]);\r\n\r\n\t\t\t// Calculate password strength\r\n\t\t\tconst passwordStrength = useMemo(\r\n\t\t\t\t() => (showPasswordStrength ? getPasswordStrength(value) : null),\r\n\t\t\t\t[showPasswordStrength, value]\r\n\t\t\t);\r\n\r\n\t\t\t// Get strength indicator\r\n\t\t\tconst getStrengthIndicator = () => {\r\n\t\t\t\tif (!passwordStrength || !value) return null;\r\n\r\n\t\t\t\tconst strengthColor = getPasswordStrengthColor(passwordStrength);\r\n\t\t\t\tconst strengthText =\r\n\t\t\t\t\tpasswordStrength.charAt(0).toUpperCase() + passwordStrength.slice(1).replace(\"-\", \" \");\r\n\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<div style={{ marginTop: \"4px\", fontSize: \"0.75rem\" }}>\r\n\t\t\t\t\t\t<span style={{ color: strengthColor, fontWeight: 500 }}>Strength: {strengthText}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t);\r\n\t\t\t};\r\n\r\n\t\t\t// Handle onChange with validation\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tconst newValue = event.target.value;\r\n\r\n\t\t\t\t\t// Check max length\r\n\t\t\t\t\tif (maxLength && newValue.length > maxLength) {\r\n\t\t\t\t\t\treturn; // Don't update if exceeds max length\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[maxLength, onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize end adornment\r\n\t\t\tconst endAdornmentElement = useMemo(\r\n\t\t\t\t() => (\r\n\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tonClick={togglePasswordVisibility}\r\n\t\t\t\t\t\t\tonMouseDown={(e) => e.preventDefault()}\r\n\t\t\t\t\t\t\tedge=\"end\"\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t{...iconButtonProps}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{showPassword ? visibilityOffIcon : visibilityIcon}\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t),\r\n\t\t\t\t[\r\n\t\t\t\t\ttogglePasswordVisibility,\r\n\t\t\t\t\tdisabled,\r\n\t\t\t\t\ticonButtonProps,\r\n\t\t\t\t\tshowPassword,\r\n\t\t\t\t\tvisibilityOffIcon,\r\n\t\t\t\t\tvisibilityIcon,\r\n\t\t\t\t]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize slot props\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\t...(minLength || maxLength ?\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tinputProps: {\r\n\t\t\t\t\t\t\t\t\tminLength,\r\n\t\t\t\t\t\t\t\t\tmaxLength,\r\n\t\t\t\t\t\t\t\t\t...((slotProps?.input as any)?.inputProps || {}),\r\n\t\t\t\t\t\t\t\t\t...((textFieldProps as any).inputProps || {}),\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t:\t{}),\r\n\t\t\t\t\t\tendAdornment: endAdornmentElement,\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, minLength, maxLength, textFieldProps, endAdornmentElement]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\ttype={showPassword ? \"text\" : \"password\"}\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{showPasswordStrength && getStrengthIndicator()}\r\n\t\t\t\t\t{error && !helperText && error.message && (\r\n\t\t\t\t\t\t<FormHelperText>{error.message}</FormHelperText>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nPasswordField.displayName = \"PasswordField\";\r\n\r\nexport default PasswordField;\r\n","import PasswordField from \"../FormFields/TextFields/PasswordField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputPasswordField = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tsize,\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size: sizeProp, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<PasswordField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t\tsize={(size ?? sizeProp) as any}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputPasswordField.displayName = \"FormInputPasswordField\";\r\n\r\nexport default FormInputPasswordField;\r\n","import { FormControl, InputAdornment, TextField, type TextFieldProps } from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport {\r\n\ttype ForwardedRef,\r\n\tforwardRef,\r\n\tuseState,\r\n\tuseEffect,\r\n\tuseCallback,\r\n\tmemo,\r\n\tuseMemo,\r\n} from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Number pattern types\r\n */\r\nexport type NumberPattern =\r\n\t| \"phone\"\r\n\t| \"credit-card\"\r\n\t| \"currency\"\r\n\t| \"ssn\"\r\n\t| \"zip-code\"\r\n\t| \"decimal\"\r\n\t| \"integer\"\r\n\t| \"percentage\"\r\n\t| \"custom\";\r\n\r\n/**\r\n * Extract only digits from a string\r\n */\r\nconst extractDigits = (value: string): string => {\r\n\treturn value.replace(/\\D/g, \"\");\r\n};\r\n\r\n/**\r\n * Format value according to pattern (X represents digits)\r\n * Example: pattern \"XXX-XXXX\" with digits \"1234567\" -> \"123-4567\"\r\n */\r\nconst formatByPattern = (digits: string, pattern: string): string => {\r\n\tif (!pattern || !digits) return digits;\r\n\tlet formatted = \"\";\r\n\tlet digitIndex = 0;\r\n\tfor (let i = 0; i < pattern.length && digitIndex < digits.length; i++) {\r\n\t\tif (pattern[i] === \"X\") {\r\n\t\t\tformatted += digits[digitIndex];\r\n\t\t\tdigitIndex++;\r\n\t\t} else {\r\n\t\t\tformatted += pattern[i];\r\n\t\t}\r\n\t}\r\n\treturn formatted;\r\n};\r\n\r\n/**\r\n * Generate placeholder from pattern\r\n */\r\nconst generatePlaceholderFromPattern = (pattern: string): string => {\r\n\tif (!pattern) return \"\";\r\n\treturn pattern.replace(/X/g, \"0\");\r\n};\r\n\r\n/**\r\n * Format phone number (XXX) XXX-XXXX\r\n */\r\nconst formatPhoneNumber = (value: string): string => {\r\n\tconst numbers = extractDigits(value);\r\n\tif (numbers.length <= 3) return numbers;\r\n\tif (numbers.length <= 6) return `(${numbers.slice(0, 3)}) ${numbers.slice(3)}`;\r\n\treturn `(${numbers.slice(0, 3)}) ${numbers.slice(3, 6)}-${numbers.slice(6, 10)}`;\r\n};\r\n\r\n/**\r\n * Format credit card XXXX XXXX XXXX XXXX\r\n */\r\nconst formatCreditCard = (value: string): string => {\r\n\tconst numbers = value.replace(/\\D/g, \"\");\r\n\tconst formatted = numbers.match(/.{1,4}/g)?.join(\" \") || numbers;\r\n\treturn formatted.slice(0, 19); // Max 16 digits + 3 spaces\r\n};\r\n\r\n/**\r\n * Format currency $X,XXX.XX\r\n */\r\nconst formatCurrency = (value: string, allowDecimals: boolean = true): string => {\r\n\tconst numbers = value.replace(/[^\\d.]/g, \"\");\r\n\tif (!allowDecimals) {\r\n\t\treturn numbers.replace(/\\D/g, \"\");\r\n\t}\r\n\t// Allow only one decimal point\r\n\tconst parts = numbers.split(\".\");\r\n\tif (parts.length > 2) {\r\n\t\treturn parts[0] + \".\" + parts.slice(1).join(\"\");\r\n\t}\r\n\tif (parts.length === 2 && parts[1].length > 2) {\r\n\t\treturn parts[0] + \".\" + parts[1].slice(0, 2);\r\n\t}\r\n\treturn numbers;\r\n};\r\n\r\n/**\r\n * Format SSN XXX-XX-XXXX\r\n */\r\nconst formatSSN = (value: string): string => {\r\n\tconst numbers = value.replace(/\\D/g, \"\");\r\n\tif (numbers.length <= 3) return numbers;\r\n\tif (numbers.length <= 5) return `${numbers.slice(0, 3)}-${numbers.slice(3)}`;\r\n\treturn `${numbers.slice(0, 3)}-${numbers.slice(3, 5)}-${numbers.slice(5, 9)}`;\r\n};\r\n\r\n/**\r\n * Format ZIP code XXXXX or XXXXX-XXXX\r\n */\r\nconst formatZipCode = (value: string): string => {\r\n\tconst numbers = value.replace(/\\D/g, \"\");\r\n\tif (numbers.length <= 5) return numbers;\r\n\treturn `${numbers.slice(0, 5)}-${numbers.slice(5, 9)}`;\r\n};\r\n\r\n/**\r\n * Format percentage XX%\r\n */\r\nconst formatPercentage = (value: string): string => {\r\n\tconst numbers = value.replace(/\\D/g, \"\");\r\n\treturn numbers.slice(0, 3); // Max 100%\r\n};\r\n\r\n/**\r\n * Extended Number Input Field Props\r\n * Extends MUI TextFieldProps with custom number field props\r\n */\r\nexport interface INumberInputFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the number field */\r\n\tlabel?: string;\r\n\t/** Current number value (as string to support formatted values) */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Number pattern type or pattern string (e.g., \"XXX-XXXX\" where X represents digits) */\r\n\tpattern?: NumberPattern | string;\r\n\t/** Custom regex pattern (used when pattern is \"custom\") */\r\n\tcustomPattern?: RegExp;\r\n\t/** Custom formatter function */\r\n\tcustomFormatter?: (value: string) => string;\r\n\t/** Minimum value */\r\n\tmin?: number;\r\n\t/** Maximum value */\r\n\tmax?: number;\r\n\t/** Step value for number input */\r\n\tstep?: number;\r\n\t/** Allow decimal numbers (for decimal pattern) */\r\n\tallowDecimals?: boolean;\r\n\t/** Number of decimal places */\r\n\tdecimalPlaces?: number;\r\n\t/** Start adornment (icon or element before input) */\r\n\tstartAdornment?: React.ReactNode;\r\n\t/** End adornment (icon or element after input) */\r\n\tendAdornment?: React.ReactNode;\r\n\t/** Callback fired when the value changes (returns formatted string) */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst NumberField = memo(\r\n\tforwardRef<HTMLDivElement, INumberInputFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tpattern = \"integer\",\r\n\t\t\t\tcustomPattern,\r\n\t\t\t\tcustomFormatter,\r\n\t\t\t\tmin,\r\n\t\t\t\tmax,\r\n\t\t\t\tstep,\r\n\t\t\t\tallowDecimals = true,\r\n\t\t\t\tdecimalPlaces = 2,\r\n\t\t\t\tstartAdornment,\r\n\t\t\t\tendAdornment,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\tconst [displayValue, setDisplayValue] = useState<string>(value);\r\n\r\n\t\t\t// Check if pattern is a string (pattern string) or a NumberPattern type\r\n\t\t\tconst isPatternString = typeof pattern === \"string\" && pattern.includes(\"X\");\r\n\t\t\tconst activePatternString = isPatternString ? pattern : undefined;\r\n\t\t\tconst activePatternType =\r\n\t\t\t\tisPatternString ? undefined : (pattern as NumberPattern | undefined);\r\n\r\n\t\t\t// Format value based on pattern\r\n\t\t\tconst formatValue = useCallback(\r\n\t\t\t\t(inputValue: string): string => {\r\n\t\t\t\t\tif (!inputValue) return \"\";\r\n\r\n\t\t\t\t\t// If pattern string is provided (from pattern prop), use it for formatting\r\n\t\t\t\t\tif (activePatternString) {\r\n\t\t\t\t\t\tconst digits = extractDigits(inputValue);\r\n\t\t\t\t\t\treturn formatByPattern(digits, activePatternString);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Use predefined pattern types\r\n\t\t\t\t\tswitch (activePatternType) {\r\n\t\t\t\t\t\tcase \"phone\":\r\n\t\t\t\t\t\t\treturn formatPhoneNumber(inputValue);\r\n\t\t\t\t\t\tcase \"credit-card\":\r\n\t\t\t\t\t\t\treturn formatCreditCard(inputValue);\r\n\t\t\t\t\t\tcase \"currency\":\r\n\t\t\t\t\t\t\treturn formatCurrency(inputValue, allowDecimals);\r\n\t\t\t\t\t\tcase \"ssn\":\r\n\t\t\t\t\t\t\treturn formatSSN(inputValue);\r\n\t\t\t\t\t\tcase \"zip-code\":\r\n\t\t\t\t\t\t\treturn formatZipCode(inputValue);\r\n\t\t\t\t\t\tcase \"percentage\":\r\n\t\t\t\t\t\t\treturn formatPercentage(inputValue);\r\n\t\t\t\t\t\tcase \"decimal\":\r\n\t\t\t\t\t\t\treturn formatCurrency(inputValue, allowDecimals);\r\n\t\t\t\t\t\tcase \"integer\":\r\n\t\t\t\t\t\t\treturn extractDigits(inputValue);\r\n\t\t\t\t\t\tcase \"custom\":\r\n\t\t\t\t\t\t\tif (customFormatter) {\r\n\t\t\t\t\t\t\t\treturn customFormatter(inputValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (customPattern) {\r\n\t\t\t\t\t\t\t\tconst numbers = extractDigits(inputValue);\r\n\t\t\t\t\t\t\t\treturn numbers;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn extractDigits(inputValue);\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\treturn extractDigits(inputValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[activePatternString, activePatternType, allowDecimals, customFormatter, customPattern]\r\n\t\t\t);\r\n\r\n\t\t\t// Update display value when value prop changes\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\tconst formatted = formatValue(value);\r\n\t\t\t\tsetDisplayValue((prev) => {\r\n\t\t\t\t\tif (prev !== formatted) {\r\n\t\t\t\t\t\treturn formatted;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn prev;\r\n\t\t\t\t});\r\n\t\t\t}, [value, formatValue]);\r\n\r\n\t\t\t// Validate input based on pattern\r\n\t\t\tconst isValidInput = (inputValue: string, key: string): boolean => {\r\n\t\t\t\t// Allow backspace, delete, tab, escape, enter\r\n\t\t\t\tif ([\"Backspace\", \"Delete\", \"Tab\", \"Escape\", \"Enter\"].includes(key)) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Allow Ctrl/Cmd + A, C, V, X\r\n\t\t\t\tif (key === \"a\" || key === \"c\" || key === \"v\" || key === \"x\") {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// For decimal pattern, allow decimal point\r\n\t\t\t\tif (\r\n\t\t\t\t\t(activePatternType === \"decimal\" || activePatternType === \"currency\") &&\r\n\t\t\t\t\tallowDecimals &&\r\n\t\t\t\t\tkey === \".\"\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check if it's a number\r\n\t\t\t\tif (!/^\\d$/.test(key)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Pattern string validation - check if we've reached max digits\r\n\t\t\t\tif (activePatternString) {\r\n\t\t\t\t\tconst maxDigits = (activePatternString.match(/X/g) || []).length;\r\n\t\t\t\t\tconst currentDigits = extractDigits(inputValue);\r\n\t\t\t\t\treturn currentDigits.length < maxDigits;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Custom pattern validation\r\n\t\t\t\tif (activePatternType === \"custom\" && customPattern) {\r\n\t\t\t\t\tconst testValue = inputValue + key;\r\n\t\t\t\t\treturn customPattern.test(testValue);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t};\r\n\r\n\t\t\t// Handle input change\r\n\t\t\tconst handleChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\tconst inputValue = event.target.value;\r\n\t\t\t\tconst formattedValue = formatValue(inputValue);\r\n\t\t\t\tsetDisplayValue(formattedValue);\r\n\r\n\t\t\t\t// For pattern-based formatting, return only digits in onChange\r\n\t\t\t\tconst digitsOnly = activePatternString ? extractDigits(inputValue) : formattedValue;\r\n\r\n\t\t\t\t// Create synthetic event with formatted value\r\n\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\t...event,\r\n\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t...event.target,\r\n\t\t\t\t\t\tvalue: digitsOnly,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcurrentTarget: {\r\n\t\t\t\t\t\t...event.currentTarget,\r\n\t\t\t\t\t\tvalue: digitsOnly,\r\n\t\t\t\t\t},\r\n\t\t\t\t} as ChangeEvent<HTMLInputElement>;\r\n\r\n\t\t\t\tif (onChange) {\r\n\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Handle paste event\r\n\t\t\tconst handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\r\n\t\t\t\tif (disabled) return;\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst pastedText = event.clipboardData.getData(\"text\");\r\n\t\t\t\tconst digits = extractDigits(pastedText);\r\n\r\n\t\t\t\t// Limit by pattern string if provided\r\n\t\t\t\tconst maxDigits =\r\n\t\t\t\t\tactivePatternString ? (activePatternString.match(/X/g) || []).length : undefined;\r\n\t\t\t\tconst limitedDigits = maxDigits ? digits.slice(0, maxDigits) : digits;\r\n\r\n\t\t\t\tconst formattedValue =\r\n\t\t\t\t\tactivePatternString ?\r\n\t\t\t\t\t\tformatByPattern(limitedDigits, activePatternString)\r\n\t\t\t\t\t:\tformatValue(limitedDigits);\r\n\r\n\t\t\t\tsetDisplayValue(formattedValue);\r\n\r\n\t\t\t\t// Create synthetic event\r\n\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\t...event,\r\n\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t...event.target,\r\n\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcurrentTarget: {\r\n\t\t\t\t\t\t...event.currentTarget,\r\n\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t},\r\n\t\t\t\t} as unknown as ChangeEvent<HTMLInputElement>;\r\n\r\n\t\t\t\tif (onChange) {\r\n\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Handle key down to prevent non-numeric input\r\n\t\t\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\tconst input = event.currentTarget.querySelector(\"input\");\r\n\t\t\t\tif (!input) return;\r\n\r\n\t\t\t\tconst currentValue = input.value || \"\";\r\n\t\t\t\tconst key = event.key;\r\n\r\n\t\t\t\t// Allow special keys\r\n\t\t\t\tif (\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t\"Backspace\",\r\n\t\t\t\t\t\t\"Delete\",\r\n\t\t\t\t\t\t\"Tab\",\r\n\t\t\t\t\t\t\"Escape\",\r\n\t\t\t\t\t\t\"Enter\",\r\n\t\t\t\t\t\t\"ArrowLeft\",\r\n\t\t\t\t\t\t\"ArrowRight\",\r\n\t\t\t\t\t\t\"ArrowUp\",\r\n\t\t\t\t\t\t\"ArrowDown\",\r\n\t\t\t\t\t\t\"Home\",\r\n\t\t\t\t\t\t\"End\",\r\n\t\t\t\t\t].includes(key)\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (key === \"Enter\" && onEnterPress) {\r\n\t\t\t\t\t\tonEnterPress(displayValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Allow Ctrl/Cmd combinations\r\n\t\t\t\tif (event.ctrlKey || event.metaKey) {\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Validate input\r\n\t\t\t\tif (!isValidInput(currentValue, key)) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Build input props\r\n\t\t\tconst inputProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\tmin,\r\n\t\t\t\t\tmax,\r\n\t\t\t\t\tstep,\r\n\t\t\t\t\tinputMode:\r\n\t\t\t\t\t\tactivePatternType === \"phone\" ? \"tel\"\r\n\t\t\t\t\t\t: activePatternType === \"decimal\" || activePatternType === \"currency\" ? \"decimal\"\r\n\t\t\t\t\t\t: \"numeric\",\r\n\t\t\t\t\tmaxLength: activePatternString ? activePatternString.length : undefined,\r\n\t\t\t\t\t...((textFieldProps as any).inputProps || {}),\r\n\t\t\t\t}),\r\n\t\t\t\t[min, max, step, activePatternType, activePatternString, textFieldProps]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize adornments\r\n\t\t\tconst startAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tstartAdornment ?\r\n\t\t\t\t\t\t<InputAdornment position=\"start\">{startAdornment}</InputAdornment>\r\n\t\t\t\t\t:\tundefined,\r\n\t\t\t\t[startAdornment]\r\n\t\t\t);\r\n\r\n\t\t\tconst endAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tendAdornment ? <InputAdornment position=\"end\">{endAdornment}</InputAdornment> : undefined,\r\n\t\t\t\t[endAdornment]\r\n\t\t\t);\r\n\r\n\t\t\t// Build slotProps for MUI v7\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\tinputProps,\r\n\t\t\t\t\t\t...(startAdornmentElement && {\r\n\t\t\t\t\t\t\tstartAdornment: startAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t...(endAdornmentElement && {\r\n\t\t\t\t\t\t\tendAdornment: endAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, inputProps, startAdornmentElement, endAdornmentElement]\r\n\t\t\t);\r\n\r\n\t\t\t// Determine input type\r\n\t\t\tconst inputType = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tactivePatternType === \"phone\" ? \"tel\"\r\n\t\t\t\t\t: activePatternType === \"decimal\" || activePatternType === \"currency\" ?\r\n\t\t\t\t\t\t\"text\" // Use text to allow formatting\r\n\t\t\t\t\t:\t\"text\", // Use text for all patterns to allow formatting\r\n\t\t\t\t[activePatternType]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize placeholder\r\n\t\t\tconst displayPlaceholder = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tplaceholder ||\r\n\t\t\t\t\t(activePatternString ? generatePlaceholderFromPattern(activePatternString) : placeholder),\r\n\t\t\t\t[placeholder, activePatternString]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={displayValue}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tonPaste={handlePaste}\r\n\t\t\t\t\t\tplaceholder={displayPlaceholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\ttype={inputType}\r\n\t\t\t\t\t\tautoComplete=\"off\"\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nNumberField.displayName = \"NumberField\";\r\n\r\nexport default NumberField;\r\n","import NumberField from \"../FormFields/TextFields/NumberField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputNumberFields } from \"./types\";\r\n\r\nconst FormInputNumberField = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tpattern,\r\n\t\tmin,\r\n\t\tmax,\r\n\t\tstep,\r\n\t\tallowDecimals,\r\n\t\tdecimalPlaces,\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputNumberFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<NumberField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tpattern={pattern}\r\n\t\t\t\t\t\t\tmin={min}\r\n\t\t\t\t\t\t\tmax={max}\r\n\t\t\t\t\t\t\tstep={step}\r\n\t\t\t\t\t\t\tallowDecimals={allowDecimals}\r\n\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputNumberField.displayName = \"FormInputNumberField\";\r\n\r\nexport default FormInputNumberField;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tInputAdornment,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport {\r\n\ttype ForwardedRef,\r\n\tforwardRef,\r\n\tuseState,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tmemo,\r\n\tuseCallback,\r\n\tuseMemo,\r\n} from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extract only digits from a string\r\n */\r\nconst extractDigits = (value: string): string => {\r\n\treturn value.replace(/\\D/g, \"\");\r\n};\r\n\r\n/**\r\n * Format phone number according to pattern\r\n * Example: pattern \"XXX-XXXX\" with digits \"1234567\" -> \"123-4567\"\r\n */\r\nconst formatByPattern = (digits: string, pattern: string): string => {\r\n\tif (!pattern || !digits) return digits;\r\n\tlet formatted = \"\";\r\n\tlet digitIndex = 0;\r\n\tfor (let i = 0; i < pattern.length && digitIndex < digits.length; i++) {\r\n\t\tif (pattern[i] === \"X\") {\r\n\t\t\tformatted += digits[digitIndex];\r\n\t\t\tdigitIndex++;\r\n\t\t} else {\r\n\t\t\tformatted += pattern[i];\r\n\t\t}\r\n\t}\r\n\treturn formatted;\r\n};\r\n\r\n/**\r\n * Generate placeholder from pattern\r\n */\r\nconst generatePlaceholder = (pattern: string): string => {\r\n\tif (!pattern) return \"0000000000\";\r\n\treturn pattern.replace(/X/g, \"0\");\r\n};\r\n\r\n/**\r\n * Extended Tel Input Field Props\r\n * Extends MUI TextFieldProps with custom tel field props\r\n */\r\nexport interface ITelInputFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the tel field */\r\n\tlabel?: string;\r\n\t/** Current tel value (digits only, formatting is handled internally) */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text (auto-generated from pattern if not provided) */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Pattern string (e.g., \"XXX-XXXX\" where X represents digits) */\r\n\tpattern?: string;\r\n\t/** Maximum length (defaults to pattern length if pattern provided) */\r\n\tmaxLength?: number;\r\n\t/** Country code to display */\r\n\tcountryCode?: string;\r\n\t/** Whether to show country code */\r\n\tshowCountryCode?: boolean;\r\n\t/** Start adornment (icon or element before input) */\r\n\tstartAdornment?: React.ReactNode;\r\n\t/** End adornment (icon or element after input) */\r\n\tendAdornment?: React.ReactNode;\r\n\t/** Callback fired when the value changes (returns digits only) */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for country code display */\r\n\tcountryCodeStyles?: React.CSSProperties;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst TeliField = memo(\r\n\tforwardRef<HTMLDivElement, ITelInputFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tpattern = \"XXXXXXXXXX\",\r\n\t\t\t\tmaxLength,\r\n\t\t\t\tcountryCode = \"+1\",\r\n\t\t\t\tshowCountryCode = false,\r\n\t\t\t\tstartAdornment,\r\n\t\t\t\tendAdornment,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tcountryCodeStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\tconst [displayValue, setDisplayValue] = useState<string>(\"\");\r\n\t\t\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\r\n\t\t\t// Calculate max length from pattern if not provided\r\n\t\t\tconst calculatedMaxLength = maxLength || (pattern ? pattern.length : 15);\r\n\r\n\t\t\t// Update display value when value prop changes\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\tconst digits = extractDigits(value);\r\n\t\t\t\tconst formatted = pattern ? formatByPattern(digits, pattern) : digits;\r\n\t\t\t\tsetDisplayValue((prev) => {\r\n\t\t\t\t\tif (prev !== formatted) {\r\n\t\t\t\t\t\treturn formatted;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn prev;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Set cursor position to end when value changes externally\r\n\t\t\t\tif (inputRef.current) {\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tif (inputRef.current) {\r\n\t\t\t\t\t\t\tconst cursorPosition = formatted.length;\r\n\t\t\t\t\t\t\tinputRef.current.setSelectionRange(cursorPosition, cursorPosition);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t}\r\n\t\t\t}, [value, pattern]);\r\n\r\n\t\t\t// Handle input change\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\r\n\t\t\t\t\tconst inputValue = event.target.value;\r\n\t\t\t\t\tconst digits = extractDigits(inputValue);\r\n\r\n\t\t\t\t\t// Enforce maxLength\r\n\t\t\t\t\tconst limitedDigits = calculatedMaxLength ? digits.slice(0, calculatedMaxLength) : digits;\r\n\r\n\t\t\t\t\t// Format the value\r\n\t\t\t\t\tconst formattedValue = pattern ? formatByPattern(limitedDigits, pattern) : limitedDigits;\r\n\r\n\t\t\t\t\tsetDisplayValue(formattedValue);\r\n\r\n\t\t\t\t\t// Create synthetic event with digits only\r\n\t\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\t\t...event,\r\n\t\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t\t...event.target,\r\n\t\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcurrentTarget: {\r\n\t\t\t\t\t\t\t...event.currentTarget,\r\n\t\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t} as ChangeEvent<HTMLInputElement>;\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[disabled, calculatedMaxLength, pattern, onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle paste event\r\n\t\t\tconst handlePaste = useCallback(\r\n\t\t\t\t(event: React.ClipboardEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tconst pastedText = event.clipboardData.getData(\"text\");\r\n\t\t\t\t\tconst digits = extractDigits(pastedText);\r\n\t\t\t\t\tconst limitedDigits = calculatedMaxLength ? digits.slice(0, calculatedMaxLength) : digits;\r\n\r\n\t\t\t\t\tconst formattedValue = pattern ? formatByPattern(limitedDigits, pattern) : limitedDigits;\r\n\r\n\t\t\t\t\tsetDisplayValue(formattedValue);\r\n\r\n\t\t\t\t\t// Create synthetic event\r\n\t\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\t\t...event,\r\n\t\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t\t...event.target,\r\n\t\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcurrentTarget: {\r\n\t\t\t\t\t\t\t...event.currentTarget,\r\n\t\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t} as unknown as ChangeEvent<HTMLInputElement>;\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[disabled, calculatedMaxLength, pattern, onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle key down to prevent non-numeric input\r\n\t\t\tconst handleKeyDown = useCallback(\r\n\t\t\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\r\n\t\t\t\t\tconst key = event.key;\r\n\t\t\t\t\tconst isNumber = /[0-9]/.test(key);\r\n\t\t\t\t\tconst isAllowedKey =\r\n\t\t\t\t\t\tkey === \"Backspace\" ||\r\n\t\t\t\t\t\tkey === \"Delete\" ||\r\n\t\t\t\t\t\tkey === \"Tab\" ||\r\n\t\t\t\t\t\tkey === \"Escape\" ||\r\n\t\t\t\t\t\tkey === \"Enter\" ||\r\n\t\t\t\t\t\tkey === \"ArrowLeft\" ||\r\n\t\t\t\t\t\tkey === \"ArrowRight\" ||\r\n\t\t\t\t\t\tkey === \"ArrowUp\" ||\r\n\t\t\t\t\t\tkey === \"ArrowDown\" ||\r\n\t\t\t\t\t\tkey === \"Home\" ||\r\n\t\t\t\t\t\tkey === \"End\" ||\r\n\t\t\t\t\t\t((event.ctrlKey || event.metaKey) &&\r\n\t\t\t\t\t\t\t(key === \"a\" || key === \"c\" || key === \"v\" || key === \"x\"));\r\n\r\n\t\t\t\t\tif (!isNumber && !isAllowedKey) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (key === \"Enter\" && onEnterPress) {\r\n\t\t\t\t\t\tonEnterPress(extractDigits(displayValue));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[disabled, onEnterPress, displayValue, textFieldProps.onKeyDown]\r\n\t\t\t);\r\n\r\n\t\t\t// Build input props\r\n\t\t\tconst inputProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\tmaxLength: calculatedMaxLength,\r\n\t\t\t\t\tinputMode: \"tel\",\r\n\t\t\t\t\tautoComplete: \"tel\",\r\n\t\t\t\t\t...((textFieldProps as any).inputProps || {}),\r\n\t\t\t\t}),\r\n\t\t\t\t[calculatedMaxLength, textFieldProps]\r\n\t\t\t);\r\n\r\n\t\t\t// Build start adornment with country code if needed\r\n\t\t\tconst finalStartAdornment = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tshowCountryCode ?\r\n\t\t\t\t\t\t<InputAdornment\r\n\t\t\t\t\t\t\tposition=\"start\"\r\n\t\t\t\t\t\t\tsx={countryCodeStyles}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{countryCode}\r\n\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t: startAdornment ? <InputAdornment position=\"start\">{startAdornment}</InputAdornment>\r\n\t\t\t\t\t: undefined,\r\n\t\t\t\t[showCountryCode, countryCodeStyles, countryCode, startAdornment]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize end adornment\r\n\t\t\tconst endAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tendAdornment ? <InputAdornment position=\"end\">{endAdornment}</InputAdornment> : undefined,\r\n\t\t\t\t[endAdornment]\r\n\t\t\t);\r\n\r\n\t\t\t// Build slotProps for MUI v7\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\tinputProps,\r\n\t\t\t\t\t\t...(finalStartAdornment && {\r\n\t\t\t\t\t\t\tstartAdornment: finalStartAdornment,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t...(endAdornmentElement && {\r\n\t\t\t\t\t\t\tendAdornment: endAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, inputProps, finalStartAdornment, endAdornmentElement]\r\n\t\t\t);\r\n\r\n\t\t\t// Generate placeholder from pattern if not provided\r\n\t\t\tconst displayPlaceholder = useMemo(\r\n\t\t\t\t() => placeholder || (pattern ? generatePlaceholder(pattern) : \"\"),\r\n\t\t\t\t[placeholder, pattern]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={displayValue}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tonPaste={handlePaste}\r\n\t\t\t\t\t\tplaceholder={displayPlaceholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\ttype=\"tel\"\r\n\t\t\t\t\t\tautoComplete=\"tel\"\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tinputRef={inputRef}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nTeliField.displayName = \"TeliField\";\r\n\r\nexport default TeliField;\r\n","import TelInputField from \"../FormFields/TextFields/TelInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputTelField = memo(\r\n\t({ name, label, control, errors, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<TelInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTelField.displayName = \"FormInputTelField\";\r\n\r\nexport default FormInputTelField;\r\n","import { Close, Search } from \"@mui/icons-material\";\r\nimport {\r\n\tFormControl,\r\n\tIconButton,\r\n\ttype IconButtonProps,\r\n\tInputAdornment,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport {\r\n\ttype ForwardedRef,\r\n\tforwardRef,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tmemo,\r\n\tuseCallback,\r\n\tuseMemo,\r\n} from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Search Input Field Props\r\n * Extends MUI TextFieldProps with custom search field props\r\n */\r\nexport interface ISearchInputFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the search field */\r\n\tlabel?: string;\r\n\t/** Current search value */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Whether to show clear button */\r\n\tshowClearButton?: boolean;\r\n\t/** Whether to show search button */\r\n\tshowSearchButton?: boolean;\r\n\t/** Custom clear icon */\r\n\tclearIcon?: React.ReactNode;\r\n\t/** Custom search icon */\r\n\tsearchIcon?: React.ReactNode;\r\n\t/** Custom icon button props for clear button */\r\n\tclearButtonProps?: IconButtonProps;\r\n\t/** Custom icon button props for search button */\r\n\tsearchButtonProps?: IconButtonProps;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when search button is clicked */\r\n\tonSearch?: (value: string) => void;\r\n\t/** Callback fired when clear button is clicked */\r\n\tonClear?: () => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Enable debounce for search (default: true) */\r\n\tenableDebounce?: boolean;\r\n\t/** Debounce delay in milliseconds (default: 300) */\r\n\tdebounceDelay?: number;\r\n\t/** Enable throttle for search (default: false) */\r\n\tenableThrottle?: boolean;\r\n\t/** Throttle delay in milliseconds (default: 300) */\r\n\tthrottleDelay?: number;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst SearchField = memo(\r\n\tforwardRef<HTMLInputElement, ISearchInputFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonSearch,\r\n\t\t\t\tonClear,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tshowClearButton = true,\r\n\t\t\t\tshowSearchButton = true,\r\n\t\t\t\tclearIcon,\r\n\t\t\t\tsearchIcon,\r\n\t\t\t\tclearButtonProps,\r\n\t\t\t\tsearchButtonProps,\r\n\t\t\t\tenableDebounce = true,\r\n\t\t\t\tdebounceDelay = 300,\r\n\t\t\t\tenableThrottle = false,\r\n\t\t\t\tthrottleDelay = 300,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLInputElement>\r\n\t\t) => {\r\n\t\t\t// Refs for debounce and throttle timers\r\n\t\t\tconst debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\t\t\tconst throttleTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\t\t\tconst lastThrottleCallRef = useRef<number>(0);\r\n\r\n\t\t\t// Cleanup timers on unmount\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\treturn () => {\r\n\t\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}, []);\r\n\r\n\t\t\t// Debounced search function\r\n\t\t\tconst debouncedSearch = useCallback(\r\n\t\t\t\t(searchVal: string) => {\r\n\t\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdebounceTimerRef.current = setTimeout(() => {\r\n\t\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\t\tonSearch(searchVal);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, debounceDelay);\r\n\t\t\t\t},\r\n\t\t\t\t[onSearch, debounceDelay]\r\n\t\t\t);\r\n\r\n\t\t\t// Throttled search function\r\n\t\t\tconst throttledSearch = useCallback(\r\n\t\t\t\t(searchVal: string) => {\r\n\t\t\t\t\tconst now = Date.now();\r\n\t\t\t\t\tconst timeSinceLastCall = now - lastThrottleCallRef.current;\r\n\r\n\t\t\t\t\tif (timeSinceLastCall >= throttleDelay) {\r\n\t\t\t\t\t\tlastThrottleCallRef.current = now;\r\n\t\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\t\tonSearch(searchVal);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthrottleTimerRef.current = setTimeout(() => {\r\n\t\t\t\t\t\t\tlastThrottleCallRef.current = Date.now();\r\n\t\t\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\t\t\tonSearch(searchVal);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, throttleDelay - timeSinceLastCall);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onSearch, throttleDelay]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle onChange with search callback (with debounce/throttle)\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tconst newValue = event.target.value;\r\n\r\n\t\t\t\t\t// Always call onChange immediately for controlled input\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(event);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Apply debounce or throttle to onSearch if enabled\r\n\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\tif (enableDebounce && !enableThrottle) {\r\n\t\t\t\t\t\t\tdebouncedSearch(newValue);\r\n\t\t\t\t\t\t} else if (enableThrottle && !enableDebounce) {\r\n\t\t\t\t\t\t\tthrottledSearch(newValue);\r\n\t\t\t\t\t\t} else if (enableDebounce && enableThrottle) {\r\n\t\t\t\t\t\t\t// If both are enabled, debounce takes precedence\r\n\t\t\t\t\t\t\tdebouncedSearch(newValue);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// No debounce or throttle, call immediately\r\n\t\t\t\t\t\t\tonSearch(newValue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onChange, onSearch, enableDebounce, enableThrottle, debouncedSearch, throttledSearch]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle clear button click\r\n\t\t\tconst handleClear = useCallback(() => {\r\n\t\t\t\t// Clear any pending timers\r\n\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\tdebounceTimerRef.current = null;\r\n\t\t\t\t}\r\n\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\tthrottleTimerRef.current = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onClear) {\r\n\t\t\t\t\tonClear();\r\n\t\t\t\t}\r\n\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t// Clear immediately without debounce/throttle\r\n\t\t\t\t\tonSearch(\"\");\r\n\t\t\t\t}\r\n\t\t\t\t// Create a synthetic event to trigger onChange with empty value\r\n\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\ttarget: { value: \"\", name: name || \"\" },\r\n\t\t\t\t\tcurrentTarget: { value: \"\", name: name || \"\" },\r\n\t\t\t\t} as ChangeEvent<HTMLInputElement>;\r\n\t\t\t\tif (onChange) {\r\n\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t}\r\n\t\t\t}, [onClear, onSearch, onChange, name, debounceTimerRef, throttleTimerRef]);\r\n\r\n\t\t\t// Handle search button click\r\n\t\t\tconst handleSearch = useCallback(() => {\r\n\t\t\t\t// Clear any pending timers and search immediately\r\n\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\tdebounceTimerRef.current = null;\r\n\t\t\t\t}\r\n\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\tthrottleTimerRef.current = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t// Search immediately without debounce/throttle when button is clicked\r\n\t\t\t\t\tonSearch(value);\r\n\t\t\t\t}\r\n\t\t\t}, [onSearch, value, debounceTimerRef, throttleTimerRef]);\r\n\r\n\t\t\t// Handle Enter key press\r\n\t\t\tconst handleKeyDown = useCallback(\r\n\t\t\t\t(event: React.KeyboardEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tif (event.key === \"Enter\") {\r\n\t\t\t\t\t\t// Clear any pending timers when Enter is pressed\r\n\t\t\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\t\t\tdebounceTimerRef.current = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\t\t\tthrottleTimerRef.current = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (onEnterPress) {\r\n\t\t\t\t\t\t\tonEnterPress(value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Also trigger search immediately on Enter\r\n\t\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\t\tonSearch(value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Call original onKeyDown if provided\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[\r\n\t\t\t\t\tonEnterPress,\r\n\t\t\t\t\tonSearch,\r\n\t\t\t\t\tvalue,\r\n\t\t\t\t\tdebounceTimerRef,\r\n\t\t\t\t\tthrottleTimerRef,\r\n\t\t\t\t\ttextFieldProps.onKeyDown,\r\n\t\t\t\t]\r\n\t\t\t);\r\n\r\n\t\t\t// Build end adornment with clear and search buttons\r\n\t\t\tconst endAdornment = useMemo(\r\n\t\t\t\t() => (\r\n\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t{showClearButton && value && (\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleClear}\r\n\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\tedge=\"end\"\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\t{...clearButtonProps}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{clearIcon || <Close />}\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showSearchButton && (\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleSearch}\r\n\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\tedge=\"end\"\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\t{...searchButtonProps}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{searchIcon || <Search />}\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t),\r\n\t\t\t\t[\r\n\t\t\t\t\tshowClearButton,\r\n\t\t\t\t\tvalue,\r\n\t\t\t\t\thandleClear,\r\n\t\t\t\t\tdisabled,\r\n\t\t\t\t\tsize,\r\n\t\t\t\t\tclearButtonProps,\r\n\t\t\t\t\tclearIcon,\r\n\t\t\t\t\tshowSearchButton,\r\n\t\t\t\t\thandleSearch,\r\n\t\t\t\t\tsearchButtonProps,\r\n\t\t\t\t\tsearchIcon,\r\n\t\t\t\t]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t...slotProps,\r\n\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\t\t\tendAdornment,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nSearchField.displayName = \"SearchField\";\r\n\r\nexport default SearchField;\r\n","import SearchInputField from \"../FormFields/TextFields/SearchInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputSearchField = memo(\r\n\t({ name, label, control, errors, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SearchInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputSearchField.displayName = \"FormInputSearchField\";\r\n\r\nexport default FormInputSearchField;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormHelperText,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n\tBox,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, useState, useRef, useEffect } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended OTP Input Field Props\r\n */\r\nexport interface IOTPInputFieldProps\r\n\textends Omit<\r\n\t\tTextFieldProps,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\" | \"multiline\" | \"variant\" | \"size\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the OTP field */\r\n\tlabel?: string;\r\n\t/** Current OTP value (string of digits) */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Number of OTP input boxes (default: 6) */\r\n\tlength?: number;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Spacing between OTP boxes */\r\n\tspacing?: number;\r\n\t/** Whether to auto-focus first input on mount */\r\n\tautoFocus?: boolean;\r\n\t/** Whether to auto-submit when all boxes are filled */\r\n\tautoSubmit?: boolean;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (value: string) => void;\r\n\t/** Callback fired when all OTP boxes are filled */\r\n\tonComplete?: (value: string) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the OTP container */\r\n\tcontainerStyles?: React.CSSProperties;\r\n\t/** Custom styles for individual OTP input boxes */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst OTPField = forwardRef<HTMLDivElement, IOTPInputFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonComplete,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\tonEnterPress,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tvariant = \"outlined\",\r\n\t\t\tsize,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tlength = 6,\r\n\t\t\tspacing = 1,\r\n\t\t\tautoFocus = false,\r\n\t\t\tautoSubmit = false,\r\n\t\t\tcontainerStyles,\r\n\t\t\tinputStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\t...textFieldProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\tconst [otpValues, setOtpValues] = useState<string[]>(Array(length).fill(\"\"));\r\n\t\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\r\n\t\tconst lastSentValueRef = useRef<string>(\"\");\r\n\t\tconst isInternalUpdateRef = useRef<boolean>(false);\r\n\t\tconst otpValuesRef = useRef<string[]>(Array(length).fill(\"\"));\r\n\t\tconst inputSessionActiveRef = useRef<boolean>(false);\r\n\t\tconst inputSessionTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n\t\t// Keep ref in sync with state\r\n\t\tuseEffect(() => {\r\n\t\t\totpValuesRef.current = otpValues;\r\n\t\t}, [otpValues]);\r\n\r\n\t\t// Update internal state when value prop changes (only from external changes)\r\n\t\tuseEffect(() => {\r\n\t\t\tconst currentOtpString = otpValuesRef.current.join(\"\");\r\n\r\n\t\t\t// If we're in an active input session, preserve positions unless value is clearly external\r\n\t\t\tif (inputSessionActiveRef.current) {\r\n\t\t\t\t// If the value prop matches what we just sent, don't reset\r\n\t\t\t\tif (value === lastSentValueRef.current) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t// If value represents the same digits (even if positions differ), preserve our state\r\n\t\t\t\t// This handles cases where parent normalizes the value\r\n\t\t\t\tconst currentDigits = currentOtpString;\r\n\t\t\t\tconst incomingDigits = value || \"\";\r\n\t\t\t\tif (currentDigits === incomingDigits && currentDigits.length > 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t// If incoming value has same digit count and matches our sent value's digits, preserve\r\n\t\t\t\tif (\r\n\t\t\t\t\tincomingDigits.length === currentDigits.length &&\r\n\t\t\t\t\tincomingDigits === lastSentValueRef.current\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Skip if this update was triggered internally\r\n\t\t\tif (isInternalUpdateRef.current) {\r\n\t\t\t\tisInternalUpdateRef.current = false;\r\n\t\t\t\t// If the value prop matches what we just sent, don't reset the positions\r\n\t\t\t\tif (value === lastSentValueRef.current) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Only update if value prop is different from our current state\r\n\t\t\tif (value !== currentOtpString) {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tconst values = value.split(\"\").slice(0, length);\r\n\t\t\t\t\tconst paddedValues = [...values, ...Array(length - values.length).fill(\"\")];\r\n\t\t\t\t\tsetOtpValues(paddedValues);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetOtpValues(Array(length).fill(\"\"));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [value, length]);\r\n\r\n\t\t// Focus first input on mount if autoFocus is true\r\n\t\tuseEffect(() => {\r\n\t\t\tif (autoFocus && inputRefs.current[0]) {\r\n\t\t\t\tinputRefs.current[0].focus();\r\n\t\t\t}\r\n\t\t}, [autoFocus]);\r\n\r\n\t\t// Cleanup timeout on unmount\r\n\t\tuseEffect(() => {\r\n\t\t\treturn () => {\r\n\t\t\t\tif (inputSessionTimeoutRef.current) {\r\n\t\t\t\t\tclearTimeout(inputSessionTimeoutRef.current);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}, []);\r\n\r\n\t\t// Handle input change\r\n\t\tconst handleChange = (\r\n\t\t\tindex: number,\r\n\t\t\tevent: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\r\n\t\t) => {\r\n\t\t\tif (disabled) return;\r\n\r\n\t\t\tconst inputValue = (event.target as HTMLInputElement).value;\r\n\r\n\t\t\t// If input is empty, clear the current box\r\n\t\t\tif (inputValue === \"\") {\r\n\t\t\t\tupdateValue(index, \"\", false);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Extract the last character (handles paste or typing over selected text)\r\n\t\t\tconst lastChar = inputValue.slice(-1);\r\n\r\n\t\t\t// Only allow digits - update the value at the current index\r\n\t\t\tif (/^\\d$/.test(lastChar)) {\r\n\t\t\t\t// Always auto-focus next when entering a digit (from any box position)\r\n\t\t\t\t// This allows continuous typing from any position to the end\r\n\t\t\t\t// Values remain filled as you type through them\r\n\t\t\t\tupdateValue(index, lastChar, true);\r\n\t\t\t}\r\n\t\t\t// Non-digits are already prevented in keyDown handler, but if they somehow get through,\r\n\t\t\t// the controlled component will maintain the correct value via the value prop\r\n\t\t};\r\n\r\n\t\t// Update value at specific index\r\n\t\tconst updateValue = (index: number, newValue: string, shouldAutoFocusNext: boolean = true) => {\r\n\t\t\tconst newOtpValues = [...otpValues];\r\n\t\t\tnewOtpValues[index] = newValue;\r\n\r\n\t\t\t// Mark this as an internal update to prevent useEffect from resetting positions\r\n\t\t\tisInternalUpdateRef.current = true;\r\n\r\n\t\t\t// Activate input session to preserve positions during typing\r\n\t\t\tinputSessionActiveRef.current = true;\r\n\r\n\t\t\t// Clear existing timeout\r\n\t\t\tif (inputSessionTimeoutRef.current) {\r\n\t\t\t\tclearTimeout(inputSessionTimeoutRef.current);\r\n\t\t\t}\r\n\r\n\t\t\t// Deactivate input session after 500ms of no input\r\n\t\t\tinputSessionTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\tinputSessionActiveRef.current = false;\r\n\t\t\t}, 500);\r\n\r\n\t\t\tsetOtpValues(newOtpValues);\r\n\r\n\t\t\tconst otpString = newOtpValues.join(\"\");\r\n\t\t\t// Track the value we're sending to onChange\r\n\t\t\tlastSentValueRef.current = otpString;\r\n\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(otpString);\r\n\t\t\t}\r\n\r\n\t\t\t// Auto-focus next input if value is entered and we should auto-focus\r\n\t\t\t// Auto-focus regardless of whether it was replacing or not, to allow continuous typing\r\n\t\t\t// Use setTimeout to ensure focus happens after state update\r\n\t\t\tif (newValue && index < length - 1 && shouldAutoFocusNext) {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tinputRefs.current[index + 1]?.focus();\r\n\t\t\t\t}, 0);\r\n\t\t\t}\r\n\r\n\t\t\t// Check if all boxes are filled\r\n\t\t\tif (newOtpValues.every((val) => val !== \"\")) {\r\n\t\t\t\tif (onComplete) {\r\n\t\t\t\t\tonComplete(otpString);\r\n\t\t\t\t}\r\n\t\t\t\tif (autoSubmit && onEnterPress) {\r\n\t\t\t\t\tonEnterPress(otpString);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle key down\r\n\t\tconst handleKeyDown = (index: number, event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\tif (disabled) return;\r\n\r\n\t\t\tconst key = event.key;\r\n\r\n\t\t\t// Handle backspace\r\n\t\t\tif (key === \"Backspace\") {\r\n\t\t\t\tif (otpValues[index] === \"\" && index > 0) {\r\n\t\t\t\t\t// Move to previous input and clear it\r\n\t\t\t\t\tinputRefs.current[index - 1]?.focus();\r\n\t\t\t\t\tupdateValue(index - 1, \"\", false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Clear current input\r\n\t\t\t\t\tupdateValue(index, \"\", false);\r\n\t\t\t\t}\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle delete\r\n\t\t\tif (key === \"Delete\") {\r\n\t\t\t\tupdateValue(index, \"\", false);\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle arrow keys\r\n\t\t\tif (key === \"ArrowLeft\" && index > 0) {\r\n\t\t\t\tinputRefs.current[index - 1]?.focus();\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (key === \"ArrowRight\" && index < length - 1) {\r\n\t\t\t\tinputRefs.current[index + 1]?.focus();\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle Enter key\r\n\t\t\tif (key === \"Enter\" && onEnterPress) {\r\n\t\t\t\tconst otpString = otpValues.join(\"\");\r\n\t\t\t\tonEnterPress(otpString);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle paste\r\n\t\t\tif ((event.ctrlKey || event.metaKey) && key === \"v\") {\r\n\t\t\t\t// Let the paste event handle it\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle digit input - ensure it goes to the current box\r\n\t\t\tif (/^\\d$/.test(key)) {\r\n\t\t\t\t// The onChange handler will process this, but we ensure the value goes to current index\r\n\t\t\t\t// by allowing the default behavior which will trigger onChange\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Only allow digits and navigation keys\r\n\t\t\tif (![\"Tab\", \"Escape\", \"Home\", \"End\"].includes(key)) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle paste\r\n\t\tconst handlePaste = (index: number, event: React.ClipboardEvent<HTMLDivElement>) => {\r\n\t\t\tif (disabled) return;\r\n\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst pastedText = event.clipboardData.getData(\"text\");\r\n\t\t\tconst digits = pastedText.replace(/\\D/g, \"\").slice(0, length);\r\n\r\n\t\t\tif (digits.length === 0) return;\r\n\r\n\t\t\tconst newOtpValues = [...otpValues];\r\n\t\t\tlet startIndex = index;\r\n\r\n\t\t\t// Fill from current index or from start\r\n\t\t\tfor (let i = 0; i < digits.length && startIndex + i < length; i++) {\r\n\t\t\t\tnewOtpValues[startIndex + i] = digits[i];\r\n\t\t\t}\r\n\r\n\t\t\tsetOtpValues(newOtpValues);\r\n\r\n\t\t\tconst otpString = newOtpValues.join(\"\");\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(otpString);\r\n\t\t\t}\r\n\r\n\t\t\t// Focus the next empty input or the last input\r\n\t\t\tconst nextEmptyIndex = newOtpValues.findIndex((val) => val === \"\");\r\n\t\t\tconst focusIndex =\r\n\t\t\t\tnextEmptyIndex !== -1 ? nextEmptyIndex : Math.min(startIndex + digits.length, length - 1);\r\n\t\t\tinputRefs.current[focusIndex]?.focus();\r\n\r\n\t\t\t// Check if all boxes are filled\r\n\t\t\tif (newOtpValues.every((val) => val !== \"\")) {\r\n\t\t\t\tif (onComplete) {\r\n\t\t\t\t\tonComplete(otpString);\r\n\t\t\t\t}\r\n\t\t\t\tif (autoSubmit && onEnterPress) {\r\n\t\t\t\t\tonEnterPress(otpString);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle focus\r\n\t\tconst handleFocus = (\r\n\t\t\t_index: number,\r\n\t\t\tevent: FocusEvent<HTMLInputElement | HTMLTextAreaElement>\r\n\t\t) => {\r\n\t\t\t// Select all text on focus\r\n\t\t\t(event.target as HTMLInputElement).select();\r\n\t\t\tif (onFocus) {\r\n\t\t\t\tonFocus(event as FocusEvent<HTMLInputElement>);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle blur\r\n\t\tconst handleBlur = (\r\n\t\t\t_index: number,\r\n\t\t\tevent: FocusEvent<HTMLInputElement | HTMLTextAreaElement>\r\n\t\t) => {\r\n\t\t\tif (onBlur) {\r\n\t\t\t\tonBlur(event as FocusEvent<HTMLInputElement>);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tcomponent=\"label\"\r\n\t\t\t\t\t\tsx={{ mb: 1, display: \"block\" }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t\t{required && <span style={{ color: \"error.main\" }}> *</span>}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tgap: spacing,\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\t...containerStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{otpValues.map((otpValue, index) => (\r\n\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tinputRef={(el) => {\r\n\t\t\t\t\t\t\t\tinputRefs.current[index] = el;\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tname={name ? `${name}-${index}` : undefined}\r\n\t\t\t\t\t\t\tvalue={otpValue}\r\n\t\t\t\t\t\t\tonChange={(e) => handleChange(index, e)}\r\n\t\t\t\t\t\t\tonKeyDown={(e) => handleKeyDown(index, e)}\r\n\t\t\t\t\t\t\tonPaste={(e) => handlePaste(index, e)}\r\n\t\t\t\t\t\t\tonFocus={(e) => handleFocus(index, e)}\r\n\t\t\t\t\t\t\tonBlur={(e) => handleBlur(index, e)}\r\n\t\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t...slotProps,\r\n\t\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\t\t\t\tinputProps: {\r\n\t\t\t\t\t\t\t\t\t\tmaxLength: 1,\r\n\t\t\t\t\t\t\t\t\t\tinputMode: \"numeric\",\r\n\t\t\t\t\t\t\t\t\t\tpattern: \"[0-9]*\",\r\n\t\t\t\t\t\t\t\t\t\tstyle: {\r\n\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: size === \"small\" ? \"1rem\" : \"1.25rem\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t...((slotProps?.input as any)?.inputProps || {}),\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\twidth: size === \"small\" ? \"40px\" : \"48px\",\r\n\t\t\t\t\t\t\t\t...inputStyles,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nOTPField.displayName = \"OTPField\";\r\n\r\nexport default OTPField;\r\n","import OTPField from \"../FormFields/TextFields/OTPField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputOTPField = memo(\r\n\t({ name, label, control, errors, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<OTPField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(value) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(value);\r\n\t\t\t\t\t\t\t\tonChange?.(value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputOTPField.displayName = \"FormInputOTPField\";\r\n\r\nexport default FormInputOTPField;\r\n","import {\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tInputLabel,\r\n\tMenuItem,\r\n\ttype MenuItemProps,\r\n\tSelect,\r\n\ttype SelectChangeEvent,\r\n\ttype SelectProps,\r\n} from \"@mui/material\";\r\nimport React, { type SyntheticEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Base option type for Select\r\n */\r\nexport type SelectOption = {\r\n\tname: string;\r\n\tvalue: string | number;\r\n\tdisabled?: boolean;\r\n\t[key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Select Input Props\r\n * Extends MUI SelectProps with custom form field props\r\n */\r\nexport interface ISelectInputFieldProps\r\n\textends Omit<\r\n\t\tSelectProps<string | number | (string | number)[]>,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"error\" | \"children\" | \"renderValue\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the select field */\r\n\tlabel?: string;\r\n\t/** Current selected value(s) */\r\n\tvalue: string | number | (string | number)[] | \"\";\r\n\t/** Options array to display in dropdown */\r\n\toptions: SelectOption[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below select */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Select variant */\r\n\tvariant?: SelectProps[\"variant\"];\r\n\t/** Select size */\r\n\tsize?: SelectProps[\"size\"];\r\n\t/** Select color */\r\n\tcolor?: SelectProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Whether to allow multiple selections */\r\n\tmultiple?: boolean;\r\n\t/** Custom icon for dropdown indicator */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom render function for selected value(s) */\r\n\trenderValue?: SelectProps<string | number | (string | number)[]>[\"renderValue\"];\r\n\t/** Custom render function for menu items */\r\n\trenderMenuItem?: (option: SelectOption, index: number) => React.ReactNode;\r\n\t/** Custom styles for MenuItem - can be static styles or a function that receives (option, index) */\r\n\tmenuItemStyles?:\r\n\t\t| MenuItemProps[\"sx\"]\r\n\t\t| ((option: SelectOption, index: number) => MenuItemProps[\"sx\"]);\r\n\t/** Custom styles for the Select */\r\n\tselectStyles?: SelectProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for InputLabel */\r\n\tlabelStyles?: React.ComponentProps<typeof InputLabel>[\"sx\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (\r\n\t\tevent: SelectChangeEvent<string | number | (string | number)[]>,\r\n\t\tchild?: React.ReactNode\r\n\t) => void;\r\n\t/** Callback fired when menu opens */\r\n\tonOpen?: (event: SyntheticEvent) => void;\r\n\t/** Callback fired when menu closes */\r\n\tonClose?: (event: SyntheticEvent) => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: SelectProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: SelectProps[\"slots\"];\r\n\t/** Display empty value */\r\n\tdisplayEmpty?: boolean;\r\n\t/** Auto width for menu */\r\n\tautoWidth?: boolean;\r\n\t/** Native select element */\r\n\tnative?: boolean;\r\n\t/** Menu props */\r\n\tMenuProps?: SelectProps[\"MenuProps\"];\r\n}\r\n\r\nconst SelectInputField = forwardRef<HTMLInputElement, ISelectInputFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonOpen,\r\n\t\t\tonClose,\r\n\t\t\toptions,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tvariant = \"outlined\",\r\n\t\t\tsize,\r\n\t\t\tcolor,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tmultiple = false,\r\n\t\t\ticon,\r\n\t\t\trenderValue,\r\n\t\t\trenderMenuItem,\r\n\t\t\tmenuItemStyles,\r\n\t\t\tselectStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tdisplayEmpty = false,\r\n\t\t\tautoWidth = false,\r\n\t\t\tnative = false,\r\n\t\t\tMenuProps,\r\n\t\t\t...selectProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLInputElement>\r\n\t) => {\r\n\t\t// Default render value function\r\n\t\tconst defaultRenderValue = (\r\n\t\t\tselected: string | number | (string | number)[]\r\n\t\t): React.ReactNode => {\r\n\t\t\tif (multiple && Array.isArray(selected)) {\r\n\t\t\t\tif (selected.length === 0) return \"\";\r\n\t\t\t\treturn selected\r\n\t\t\t\t\t.map((val) => {\r\n\t\t\t\t\t\tconst option = options.find((opt) => opt.value === val);\r\n\t\t\t\t\t\treturn option?.name ?? String(val);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.join(\", \");\r\n\t\t\t}\r\n\t\t\tif (!multiple && selected !== \"\" && selected !== null && selected !== undefined) {\r\n\t\t\t\tconst option = options.find((opt) => opt.value === selected);\r\n\t\t\t\treturn option?.name ?? String(selected);\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t};\r\n\r\n\t\t// Default render menu item function\r\n\t\tconst defaultRenderMenuItem = (option: SelectOption, index: number): React.ReactNode => {\r\n\t\t\tconst menuItemSx =\r\n\t\t\t\ttypeof menuItemStyles === \"function\" ?\r\n\t\t\t\t\t(menuItemStyles as (option: SelectOption, index: number) => MenuItemProps[\"sx\"])(\r\n\t\t\t\t\t\toption,\r\n\t\t\t\t\t\tindex\r\n\t\t\t\t\t)\r\n\t\t\t\t:\tmenuItemStyles;\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<MenuItem\r\n\t\t\t\t\tkey={`${option.value}-${index}`}\r\n\t\t\t\t\tvalue={option.value}\r\n\t\t\t\t\tdisabled={option.disabled}\r\n\t\t\t\t\tsx={menuItemSx}\r\n\t\t\t\t>\r\n\t\t\t\t\t{renderMenuItem ? renderMenuItem(option, index) : option.name}\r\n\t\t\t\t</MenuItem>\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (\r\n\t\t\tevent: SelectChangeEvent<string | number | (string | number)[]>,\r\n\t\t\tchild?: React.ReactNode\r\n\t\t) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(event, child);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst labelId = label ? `${name || \"select\"}-label` : undefined;\r\n\t\tconst selectId = label ? `${name || \"select\"}-select` : undefined;\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tvariant={variant}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<InputLabel\r\n\t\t\t\t\t\tid={labelId}\r\n\t\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</InputLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Select\r\n\t\t\t\t\t{...selectProps}\r\n\t\t\t\t\tlabelId={labelId}\r\n\t\t\t\t\tid={selectId}\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tvalue={value}\r\n\t\t\t\t\tlabel={label}\r\n\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\tonOpen={onOpen}\r\n\t\t\t\t\tonClose={onClose}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tmultiple={multiple}\r\n\t\t\t\t\tdisplayEmpty={displayEmpty}\r\n\t\t\t\t\tautoWidth={autoWidth}\r\n\t\t\t\t\tnative={native}\r\n\t\t\t\t\tMenuProps={MenuProps}\r\n\t\t\t\t\tIconComponent={icon as React.ElementType}\r\n\t\t\t\t\trenderValue={renderValue ?? defaultRenderValue}\r\n\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\tslots={slots}\r\n\t\t\t\t\tsx={selectStyles}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t>\r\n\t\t\t\t\t{options &&\r\n\t\t\t\t\t\tArray.isArray(options) &&\r\n\t\t\t\t\t\toptions.map((option, index) => defaultRenderMenuItem(option, index))}\r\n\t\t\t\t</Select>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSelectInputField.displayName = \"SelectInputField\";\r\n\r\nexport default SelectInputField;\r\n","import SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputSelect = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => options, [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SelectInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputSelect.displayName = \"FormInputSelect\";\r\n\r\nexport default FormInputSelect;\r\n","import SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputMultiSelect = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdefaultValue = [],\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => options, [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\tconst fieldValue = Array.isArray(field.value) ? field.value : [];\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SelectInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tmultiple\r\n\t\t\t\t\t\t\tvalue={fieldValue}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputMultiSelect.displayName = \"FormInputMultiSelect\";\r\n\r\nexport default FormInputMultiSelect;\r\n","import {\r\n\tAutocomplete,\r\n\ttype AutocompleteProps,\r\n\ttype AutocompleteCloseReason,\r\n\ttype AutocompleteInputChangeReason,\r\n\ttype AutocompleteChangeReason,\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport type { FilterOptionsState } from \"@mui/material/useAutocomplete\";\r\nimport React, { type SyntheticEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, memo, useCallback, useMemo } from \"react\";\r\n\r\nexport type AutoCompleteOption = {\r\n\tname: string;\r\n\tvalue: string | number;\r\n\t[key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Autocomplete Input Props\r\n * Extends MUI AutocompleteProps with custom form field props\r\n */\r\nexport interface IAutoCompleteInputProps<\r\n\tT extends AutoCompleteOption = AutoCompleteOption,\r\n\tMultiple extends boolean = false,\r\n\tDisableClearable extends boolean = false,\r\n\tFreeSolo extends boolean = false,\r\n> extends Omit<\r\n\t\tAutocompleteProps<T, Multiple, DisableClearable, FreeSolo>,\r\n\t\t| \"renderInput\"\r\n\t\t| \"options\"\r\n\t\t| \"value\"\r\n\t\t| \"onChange\"\r\n\t\t| \"getOptionLabel\"\r\n\t\t| \"isOptionEqualToValue\"\r\n\t\t| \"renderOption\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the input field */\r\n\tlabel?: string;\r\n\t/** Current selected value */\r\n\tvalue: Multiple extends true ? T[] : T | null;\r\n\t/** Options array to display in dropdown */\r\n\toptions: T[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below input */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Custom function to get option label (defaults to option.name) */\r\n\tgetOptionLabel?: (option: T | string) => string;\r\n\t/** Custom function to check option equality (defaults to comparing option.name) */\r\n\tisOptionEqualToValue?: (option: T, value: T) => boolean;\r\n\t/** Custom render function for options */\r\n\trenderOption?: (\r\n\t\tprops: React.HTMLAttributes<HTMLLIElement>,\r\n\t\toption: T,\r\n\t\tstate?: { selected: boolean; inputValue: string }\r\n\t) => React.ReactNode;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (\r\n\t\tevent: SyntheticEvent,\r\n\t\tnewValue: Multiple extends true ? T[] : T | null,\r\n\t\treason?: AutocompleteChangeReason\r\n\t) => void;\r\n\t/** Callback fired when input value changes */\r\n\tonInputChange?: (\r\n\t\tevent: SyntheticEvent,\r\n\t\tnewInputValue: string,\r\n\t\treason: AutocompleteInputChangeReason\r\n\t) => void;\r\n\t/** Callback fired when popup opens */\r\n\tonOpen?: (event: SyntheticEvent) => void;\r\n\t/** Callback fired when popup closes */\r\n\tonClose?: (event: SyntheticEvent, reason: AutocompleteCloseReason) => void;\r\n\t/** Custom icon for popup indicator */\r\n\tpopupIcon?: React.ReactNode;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for the Autocomplete */\r\n\tautocompleteStyles?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Whether to show loading state */\r\n\tloading?: boolean;\r\n\t/** Text to show when loading */\r\n\tloadingText?: React.ReactNode;\r\n\t/** Text to show when no options available */\r\n\tnoOptionsText?: React.ReactNode;\r\n\t/** Text to show when options are being filtered */\r\n\tfilterText?: string;\r\n\t/** Custom filter options function */\r\n\tfilterOptions?: (options: T[], state: FilterOptionsState<T>) => T[];\r\n\t/** Whether to highlight the first option */\r\n\tautoHighlight?: boolean;\r\n\t/** Whether to select the first option on highlight */\r\n\tautoSelect?: boolean;\r\n\t/** Whether to disable portal rendering */\r\n\tdisablePortal?: boolean;\r\n\t/** Whether to disable list wrapping */\r\n\tdisableListWrap?: boolean;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"slots\"];\r\n}\r\n\r\nconst AutoCompleteField = memo(\r\n\tforwardRef<\r\n\t\tHTMLDivElement,\r\n\t\tIAutoCompleteInputProps<AutoCompleteOption, boolean, boolean, boolean>\r\n\t>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonInputChange,\r\n\t\t\t\tonOpen,\r\n\t\t\t\tonClose,\r\n\t\t\t\toptions,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor,\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tgetOptionLabel,\r\n\t\t\t\tisOptionEqualToValue,\r\n\t\t\t\trenderOption,\r\n\t\t\t\tpopupIcon,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tautocompleteStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tloading = false,\r\n\t\t\t\tloadingText = \"Loading...\",\r\n\t\t\t\tnoOptionsText = \"No options\",\r\n\t\t\t\tfilterOptions,\r\n\t\t\t\tautoHighlight = true,\r\n\t\t\t\tautoSelect = false,\r\n\t\t\t\tdisablePortal = false,\r\n\t\t\t\tdisableListWrap = false,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...autocompleteProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\t// Default getOptionLabel function\r\n\t\t\tconst defaultGetOptionLabel = useCallback((option: AutoCompleteOption | string): string => {\r\n\t\t\t\tif (typeof option === \"string\") return option;\r\n\t\t\t\treturn option?.name ?? String(option?.value ?? \"\");\r\n\t\t\t}, []);\r\n\r\n\t\t\t// Default isOptionEqualToValue function\r\n\t\t\tconst defaultIsOptionEqualToValue = useCallback(\r\n\t\t\t\t(option: AutoCompleteOption, value: AutoCompleteOption): boolean => {\r\n\t\t\t\t\treturn option?.name === value?.name && option?.value === value?.value;\r\n\t\t\t\t},\r\n\t\t\t\t[]\r\n\t\t\t);\r\n\r\n\t\t\t// Default renderOption function\r\n\t\t\tconst defaultRenderOption = useCallback(\r\n\t\t\t\t(props: React.HTMLAttributes<HTMLLIElement>, option: AutoCompleteOption) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t\t\tkey={`${option.name}-${option.value}`}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{option.name}\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t);\r\n\t\t\t\t},\r\n\t\t\t\t[]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle onChange with proper typing\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: SyntheticEvent, newValue: any, reason?: AutocompleteChangeReason) => {\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(event, newValue, reason);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Autocomplete<AutoCompleteOption, boolean, boolean, boolean>\r\n\t\t\t\t\t\t{...autocompleteProps}\r\n\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\tvalue={value as any}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonInputChange={onInputChange}\r\n\t\t\t\t\t\tonOpen={onOpen}\r\n\t\t\t\t\t\tonClose={onClose}\r\n\t\t\t\t\t\tgetOptionLabel={getOptionLabel ?? defaultGetOptionLabel}\r\n\t\t\t\t\t\tisOptionEqualToValue={isOptionEqualToValue ?? defaultIsOptionEqualToValue}\r\n\t\t\t\t\t\trenderOption={renderOption ?? defaultRenderOption}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tloading={loading}\r\n\t\t\t\t\t\tloadingText={loadingText}\r\n\t\t\t\t\t\tnoOptionsText={noOptionsText}\r\n\t\t\t\t\t\tfilterOptions={filterOptions}\r\n\t\t\t\t\t\tautoHighlight={autoHighlight}\r\n\t\t\t\t\t\tautoSelect={autoSelect}\r\n\t\t\t\t\t\tdisablePortal={disablePortal}\r\n\t\t\t\t\t\tdisableListWrap={disableListWrap}\r\n\t\t\t\t\t\tpopupIcon={popupIcon}\r\n\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={autocompleteStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t\t\t...params.InputProps,\r\n\t\t\t\t\t\t\t\t\t\tinputProps: {\r\n\t\t\t\t\t\t\t\t\t\t\t...params.inputProps,\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{error && !helperText && error.message && (\r\n\t\t\t\t\t\t<FormHelperText>{error.message}</FormHelperText>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nAutoCompleteField.displayName = \"AutoCompleteField\";\r\n\r\nexport default AutoCompleteField;\r\n","import AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputAutoComplete = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdisabled,\r\n\t\tplaceholder,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => options, [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { value, onBlur } = field;\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<AutoCompleteField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tvalue={value ?? null}\r\n\t\t\t\t\t\t\tonChange={(_, newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputAutoComplete.displayName = \"FormInputAutoComplete\";\r\n\r\nexport default FormInputAutoComplete;\r\n","import AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputMultiAutoComplete = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdisabled,\r\n\t\tplaceholder,\r\n\t\tdefaultValue = [],\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => options, [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { value, onBlur } = field;\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\tconst fieldValue = Array.isArray(value) ? value : [];\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<AutoCompleteField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tmultiple\r\n\t\t\t\t\t\t\tvalue={fieldValue}\r\n\t\t\t\t\t\t\tonChange={(_, newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputMultiAutoComplete.displayName = \"FormInputMultiAutoComplete\";\r\n\r\nexport default FormInputMultiAutoComplete;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n\tBox,\r\n\tInputAdornment,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport {\r\n\ttype ForwardedRef,\r\n\tforwardRef,\r\n\tuseState,\r\n\tuseRef,\r\n\tuseEffect,\r\n\tuseCallback,\r\n\tuseMemo,\r\n\tmemo,\r\n} from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Color format types\r\n */\r\nexport type ColorFormat = \"hex\" | \"rgb\" | \"rgba\" | \"hsl\" | \"hsla\";\r\n\r\n/**\r\n * Color value type - can be string (hex) or object (rgb/rgba/hsl/hsla)\r\n */\r\nexport type ColorValue = string | RGBColor | RGBAColor | HSLColor | HSLAColor;\r\n\r\n/**\r\n * RGB color object\r\n */\r\nexport interface RGBColor {\r\n\tr: number;\r\n\tg: number;\r\n\tb: number;\r\n}\r\n\r\n/**\r\n * RGBA color object\r\n */\r\nexport interface RGBAColor extends RGBColor {\r\n\ta: number;\r\n}\r\n\r\n/**\r\n * HSL color object\r\n */\r\nexport interface HSLColor {\r\n\th: number;\r\n\ts: number;\r\n\tl: number;\r\n}\r\n\r\n/**\r\n * HSL color object with alpha\r\n */\r\nexport interface HSLAColor extends HSLColor {\r\n\ta: number;\r\n}\r\n\r\n/**\r\n * Extended Color Picker Field Props\r\n */\r\nexport interface IColorPickerFieldProps\r\n\textends Omit<\r\n\t\tTextFieldProps,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\" | \"multiline\" | \"variant\" | \"size\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the color picker field */\r\n\tlabel?: string;\r\n\t/** Current color value (hex string or color object) */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Color format (hex, rgb, rgba, hsl, hsla) */\r\n\tformat?: ColorFormat;\r\n\t/** Whether to show color preview swatch */\r\n\tshowPreview?: boolean;\r\n\t/** Whether to show native color input */\r\n\tshowNativeInput?: boolean;\r\n\t/** Whether to show popover picker */\r\n\tshowPopoverPicker?: boolean;\r\n\t/** Preset colors to display */\r\n\tpresetColors?: string[];\r\n\t/** Whether to show preset colors */\r\n\tshowPresetColors?: boolean;\r\n\t/** Callback fired when the color changes */\r\n\tonChange?: (value: string) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the color preview swatch */\r\n\tpreviewStyles?: React.CSSProperties;\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\n/**\r\n * Convert hex to RGB (utility function for future format conversions)\r\n * @internal - Exported for potential future use with rgb/rgba formats\r\n */\r\nexport const hexToRgb = (hex: string): RGBColor | null => {\r\n\tconst result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\treturn result ?\r\n\t\t\t{\r\n\t\t\t\tr: parseInt(result[1], 16),\r\n\t\t\t\tg: parseInt(result[2], 16),\r\n\t\t\t\tb: parseInt(result[3], 16),\r\n\t\t\t}\r\n\t\t:\tnull;\r\n};\r\n\r\n/**\r\n * Convert RGB to hex (utility function for future format conversions)\r\n * @internal - Exported for potential future use with rgb/rgba formats\r\n */\r\nexport const rgbToHex = (r: number, g: number, b: number): string => {\r\n\treturn \"#\" + [r, g, b].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\r\n};\r\n\r\n/**\r\n * Validate hex color\r\n */\r\nconst isValidHex = (color: string): boolean => {\r\n\treturn /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(color);\r\n};\r\n\r\n/**\r\n * Normalize hex color (ensure # prefix and 6 digits)\r\n */\r\nconst normalizeHex = (color: string): string => {\r\n\tlet hex = color.replace(\"#\", \"\");\r\n\tif (hex.length === 3) {\r\n\t\thex = hex\r\n\t\t\t.split(\"\")\r\n\t\t\t.map((char) => char + char)\r\n\t\t\t.join(\"\");\r\n\t}\r\n\treturn \"#\" + hex;\r\n};\r\n\r\nconst ColorPickerField = memo(\r\n\tforwardRef<HTMLDivElement, IColorPickerFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder = \"#000000\",\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tformat = \"hex\",\r\n\t\t\t\tshowPreview = true,\r\n\t\t\t\tshowNativeInput = true,\r\n\t\t\t\tshowPopoverPicker = true,\r\n\t\t\t\tpresetColors = [\r\n\t\t\t\t\t\"#000000\",\r\n\t\t\t\t\t\"#FFFFFF\",\r\n\t\t\t\t\t\"#FF0000\",\r\n\t\t\t\t\t\"#00FF00\",\r\n\t\t\t\t\t\"#0000FF\",\r\n\t\t\t\t\t\"#FFFF00\",\r\n\t\t\t\t\t\"#FF00FF\",\r\n\t\t\t\t\t\"#00FFFF\",\r\n\t\t\t\t],\r\n\t\t\t\tshowPresetColors = false,\r\n\t\t\t\tpreviewStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\tconst [internalValue, setInternalValue] = useState<string>(value || \"#000000\");\r\n\t\t\tconst colorInputRef = useRef<HTMLInputElement | null>(null);\r\n\t\t\tconst popoverAnchorRef = useRef<HTMLDivElement | null>(null);\r\n\r\n\t\t\t// Update internal value when prop changes\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\tif (value !== undefined) {\r\n\t\t\t\t\tsetInternalValue(value || \"#000000\");\r\n\t\t\t\t}\r\n\t\t\t}, [value]);\r\n\r\n\t\t\t// Normalize hex value\r\n\t\t\tconst normalizedValue =\r\n\t\t\t\tisValidHex(internalValue) ? normalizeHex(internalValue) : internalValue || \"#000000\";\r\n\r\n\t\t\t// Handle input change\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\r\n\t\t\t\t\tconst newValue = (event.target as HTMLInputElement).value;\r\n\t\t\t\t\tsetInternalValue(newValue);\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(newValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle native color input change\r\n\t\t\tconst handleColorInputChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\t\t\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t\t\tconst newValue = event.target.value;\r\n\t\t\t\t\tsetInternalValue(newValue);\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(newValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle preview swatch click - directly open native color picker\r\n\t\t\tconst handlePreviewClick = useCallback(\r\n\t\t\t\t(event: React.MouseEvent<HTMLDivElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t// Trigger the hidden native color input\r\n\t\t\t\t\tif (colorInputRef.current) {\r\n\t\t\t\t\t\tcolorInputRef.current.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[disabled, colorInputRef]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle key down\r\n\t\t\tconst handleKeyDown = useCallback(\r\n\t\t\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\t\tif (event.key === \"Enter\" && onEnterPress) {\r\n\t\t\t\t\t\tonEnterPress(normalizedValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onEnterPress, normalizedValue, textFieldProps.onKeyDown]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize preview swatch\r\n\t\t\tconst previewSwatch = useMemo(\r\n\t\t\t\t() => (\r\n\t\t\t\t\t<InputAdornment position=\"start\">\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tref={popoverAnchorRef}\r\n\t\t\t\t\t\t\tonClick={!disabled ? handlePreviewClick : undefined}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\twidth: size === \"small\" ? 24 : 32,\r\n\t\t\t\t\t\t\t\theight: size === \"small\" ? 24 : 32,\r\n\t\t\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\t\t\tborder: \"1px solid\",\r\n\t\t\t\t\t\t\t\tborderColor: error ? \"error.main\" : \"divider\",\r\n\t\t\t\t\t\t\t\tbackgroundColor: normalizedValue,\r\n\t\t\t\t\t\t\t\tcursor: !disabled ? \"pointer\" : \"default\",\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\ttransition: \"all 0.2s\",\r\n\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\topacity: !disabled ? 0.8 : 1,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t...previewStyles,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\ttitle={!disabled ? \"Click to open color picker\" : undefined}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t),\r\n\t\t\t\t[\r\n\t\t\t\t\tpopoverAnchorRef,\r\n\t\t\t\t\tdisabled,\r\n\t\t\t\t\thandlePreviewClick,\r\n\t\t\t\t\tsize,\r\n\t\t\t\t\terror,\r\n\t\t\t\t\tnormalizedValue,\r\n\t\t\t\t\tpreviewStyles,\r\n\t\t\t\t]\r\n\t\t\t);\r\n\r\n\t\t\t// Build slotProps for MUI v7\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\tinputProps: {\r\n\t\t\t\t\t\t\t...((slotProps?.input as any)?.inputProps || {}),\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t...(showPreview && {\r\n\t\t\t\t\t\t\tstartAdornment: previewSwatch,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, showPreview, previewSwatch]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={normalizedValue}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{/* Hidden native color input - triggered when clicking preview swatch */}\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tref={colorInputRef}\r\n\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\tvalue={normalizedValue}\r\n\t\t\t\t\t\tonChange={handleColorInputChange}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\twidth: 0,\r\n\t\t\t\t\t\t\theight: 0,\r\n\t\t\t\t\t\t\topacity: 0,\r\n\t\t\t\t\t\t\tpointerEvents: \"none\",\r\n\t\t\t\t\t\t\tvisibility: \"hidden\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\taria-hidden=\"true\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nColorPickerField.displayName = \"ColorPickerField\";\r\n\r\nexport default ColorPickerField;\r\n","import ColorPickerField from \"../FormFields/DropdownFields/ColorPickerField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputColorPicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tdefaultValue = \"#000000\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<ColorPickerField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? defaultValue}\r\n\t\t\t\t\t\t\tonChange={(color) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(color);\r\n\t\t\t\t\t\t\t\tonChange?.(color);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputColorPicker.displayName = \"FormInputColorPicker\";\r\n\r\nexport default FormInputColorPicker;\r\n","import {\r\n\tButton,\r\n\ttype ButtonProps,\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tInputAdornment,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport { CloudUpload as CloudUploadIcon } from \"@mui/icons-material\";\r\nimport React, { type ChangeEvent, type DragEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, useRef, useState } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * File value type\r\n */\r\nexport type FileValue = File | File[] | null | undefined;\r\n\r\n/**\r\n * Extended File Upload Field Props\r\n * Extends MUI TextFieldProps with custom file upload props\r\n */\r\nexport interface IFileUploadFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"onDrop\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the file upload field */\r\n\tlabel?: string;\r\n\t/** Current file value */\r\n\tvalue?: File | File[] | { name: string } | null;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** File types to accept (e.g., \"image/*\", \".pdf,.doc\") */\r\n\taccept?: string;\r\n\t/** Whether to allow multiple file selection */\r\n\tmultiple?: boolean;\r\n\t/** Maximum file size in bytes */\r\n\tmaxSize?: number;\r\n\t/** Minimum file size in bytes */\r\n\tminSize?: number;\r\n\t/** Allowed file types (MIME types or extensions) */\r\n\tallowedTypes?: string[];\r\n\t/** Whether to show file preview */\r\n\tshowPreview?: boolean;\r\n\t/** Whether to enable drag and drop */\r\n\tenableDragDrop?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Upload button text */\r\n\tbuttonText?: string;\r\n\t/** Upload button variant */\r\n\tbuttonVariant?: ButtonProps[\"variant\"];\r\n\t/** Upload button color */\r\n\tbuttonColor?: ButtonProps[\"color\"];\r\n\t/** Upload button size */\r\n\tbuttonSize?: ButtonProps[\"size\"];\r\n\t/** Custom upload icon */\r\n\tuploadIcon?: React.ReactNode;\r\n\t/** Callback fired when file(s) change */\r\n\tonChange?: (file: File | File[] | undefined) => void;\r\n\t/** Callback fired when file is selected */\r\n\tonFileSelect?: (file: File | File[] | undefined) => void;\r\n\t/** Callback fired when file is removed */\r\n\tonFileRemove?: () => void;\r\n\t/** Callback fired on file validation error */\r\n\tonValidationError?: (error: string) => void;\r\n\t/** Callback fired when file is dropped (drag and drop) */\r\n\tonDrop?: (files: FileList) => void;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for the Button */\r\n\tbuttonStyles?: ButtonProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for the container */\r\n\tcontainerStyles?: React.CSSProperties;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst FileUploadField = forwardRef<HTMLInputElement, IFileUploadFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonFileSelect,\r\n\t\t\tonFileRemove,\r\n\t\t\tonValidationError,\r\n\t\t\tonDrop,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\taccept,\r\n\t\t\tmultiple = false,\r\n\t\t\tmaxSize,\r\n\t\t\tminSize,\r\n\t\t\tallowedTypes,\r\n\t\t\tshowPreview = true,\r\n\t\t\tenableDragDrop = false,\r\n\t\t\tplaceholder = \"No file chosen\",\r\n\t\t\tvariant = \"outlined\",\r\n\t\t\tsize,\r\n\t\t\tcolor,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tbuttonText = \"Upload\",\r\n\t\t\tbuttonVariant = \"contained\",\r\n\t\t\tbuttonColor = \"primary\",\r\n\t\t\tbuttonSize,\r\n\t\t\tuploadIcon = <CloudUploadIcon />,\r\n\t\t\tinputStyles,\r\n\t\t\tbuttonStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tcontainerStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\t...textFieldProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLInputElement>\r\n\t) => {\r\n\t\tconst internalRef = useRef<HTMLInputElement | null>(null);\r\n\t\tconst [isDragging, setIsDragging] = useState(false);\r\n\t\tconst [, setDragCounter] = useState(0);\r\n\r\n\t\t// Get the file input ref (either forwarded ref or internal ref)\r\n\t\tconst fileInputRef = ref && typeof ref === \"object\" && \"current\" in ref ? ref : internalRef;\r\n\r\n\t\t// Get file name(s) from value\r\n\t\tconst getFileName = (): string => {\r\n\t\t\tif (!value) return \"\";\r\n\t\t\tif (value instanceof File) return value.name;\r\n\t\t\tif (Array.isArray(value)) {\r\n\t\t\t\tif (value.length === 0) return \"\";\r\n\t\t\t\tif (value.length === 1) return value[0].name;\r\n\t\t\t\treturn `${value.length} files selected`;\r\n\t\t\t}\r\n\t\t\tif (typeof value === \"object\" && \"name\" in value) {\r\n\t\t\t\treturn value.name;\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t};\r\n\r\n\t\t// Validate file\r\n\t\tconst validateFile = (file: File): string | null => {\r\n\t\t\t// Check file size\r\n\t\t\tif (maxSize && file.size > maxSize) {\r\n\t\t\t\treturn `File size exceeds maximum allowed size of ${formatFileSize(maxSize)}`;\r\n\t\t\t}\r\n\t\t\tif (minSize && file.size < minSize) {\r\n\t\t\t\treturn `File size is below minimum required size of ${formatFileSize(minSize)}`;\r\n\t\t\t}\r\n\r\n\t\t\t// Check file type\r\n\t\t\tif (allowedTypes && allowedTypes.length > 0) {\r\n\t\t\t\tconst fileType = file.type || getFileExtension(file.name);\r\n\t\t\t\tconst isAllowed = allowedTypes.some((type) => {\r\n\t\t\t\t\tif (type.startsWith(\".\")) {\r\n\t\t\t\t\t\treturn file.name.toLowerCase().endsWith(type.toLowerCase());\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn fileType.includes(type) || fileType === type;\r\n\t\t\t\t});\r\n\t\t\t\tif (!isAllowed) {\r\n\t\t\t\t\treturn `File type not allowed. Allowed types: ${allowedTypes.join(\", \")}`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t};\r\n\r\n\t\t// Format file size\r\n\t\tconst formatFileSize = (bytes: number): string => {\r\n\t\t\tif (bytes === 0) return \"0 Bytes\";\r\n\t\t\tconst k = 1024;\r\n\t\t\tconst sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\r\n\t\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\t\t\treturn Math.round((bytes / Math.pow(k, i)) * 100) / 100 + \" \" + sizes[i];\r\n\t\t};\r\n\r\n\t\t// Get file extension\r\n\t\tconst getFileExtension = (filename: string): string => {\r\n\t\t\treturn filename.slice(((filename.lastIndexOf(\".\") - 1) >>> 0) + 2);\r\n\t\t};\r\n\r\n\t\t// Handle file change\r\n\t\tconst handleFileChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tconst files = event.target.files;\r\n\t\t\tif (!files || files.length === 0) {\r\n\t\t\t\tif (onChange) onChange(undefined);\r\n\t\t\t\tif (onFileSelect) onFileSelect(undefined);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst fileArray = Array.from(files);\r\n\t\t\tlet validFiles: File[] = [];\r\n\t\t\tlet hasError = false;\r\n\r\n\t\t\t// Validate each file\r\n\t\t\tfor (const file of fileArray) {\r\n\t\t\t\tconst validationError = validateFile(file);\r\n\t\t\t\tif (validationError) {\r\n\t\t\t\t\thasError = true;\r\n\t\t\t\t\tif (onValidationError) {\r\n\t\t\t\t\t\tonValidationError(validationError);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalidFiles.push(file);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (validFiles.length > 0) {\r\n\t\t\t\tconst result = multiple ? validFiles : validFiles[0];\r\n\t\t\t\tif (onChange) onChange(result);\r\n\t\t\t\tif (onFileSelect) onFileSelect(result);\r\n\t\t\t} else if (hasError && onValidationError) {\r\n\t\t\t\t// Error already handled\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle button click\r\n\t\tconst handleButtonClick = () => {\r\n\t\t\tif (!disabled) {\r\n\t\t\t\tfileInputRef.current?.click();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle file remove\r\n\t\tconst handleFileRemove = () => {\r\n\t\t\tif (fileInputRef.current) {\r\n\t\t\t\tfileInputRef.current.value = \"\";\r\n\t\t\t}\r\n\t\t\tif (onChange) onChange(undefined);\r\n\t\t\tif (onFileRemove) onFileRemove();\r\n\t\t};\r\n\r\n\t\t// Handle drag and drop\r\n\t\tconst handleDragEnter = (e: DragEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t\tsetDragCounter((prev) => prev + 1);\r\n\t\t\tif (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\r\n\t\t\t\tsetIsDragging(true);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst handleDragLeave = (e: DragEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t\tsetDragCounter((prev) => {\r\n\t\t\t\tconst newCounter = prev - 1;\r\n\t\t\t\tif (newCounter === 0) {\r\n\t\t\t\t\tsetIsDragging(false);\r\n\t\t\t\t}\r\n\t\t\t\treturn newCounter;\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tconst handleDragOver = (e: DragEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t};\r\n\r\n\t\tconst handleDrop = (e: DragEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t\tsetIsDragging(false);\r\n\t\t\tsetDragCounter(0);\r\n\r\n\t\t\tif (disabled) return;\r\n\r\n\t\t\tconst files = e.dataTransfer.files;\r\n\t\t\tif (files && files.length > 0) {\r\n\t\t\t\tif (onDrop) {\r\n\t\t\t\t\tonDrop(files);\r\n\t\t\t\t}\r\n\t\t\t\t// Create a synthetic event to reuse handleFileChange\r\n\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\ttarget: { files },\r\n\t\t\t\t} as ChangeEvent<HTMLInputElement>;\r\n\t\t\t\thandleFileChange(syntheticEvent);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst fileName = getFileName();\r\n\t\tconst displayValue = showPreview && fileName ? fileName : placeholder;\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t<div\r\n\t\t\t\t\tstyle={containerStyles}\r\n\t\t\t\t\tonDragEnter={enableDragDrop ? handleDragEnter : undefined}\r\n\t\t\t\t\tonDragLeave={enableDragDrop ? handleDragLeave : undefined}\r\n\t\t\t\t\tonDragOver={enableDragDrop ? handleDragOver : undefined}\r\n\t\t\t\t\tonDrop={enableDragDrop ? handleDrop : undefined}\r\n\t\t\t\t>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"file\"\r\n\t\t\t\t\t\taccept={accept}\r\n\t\t\t\t\t\tmultiple={multiple}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tid={name ? `file-upload-${name}` : undefined}\r\n\t\t\t\t\t\tonChange={handleFileChange}\r\n\t\t\t\t\t\tstyle={{ display: \"none\" }}\r\n\t\t\t\t\t\tref={fileInputRef}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={displayValue}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t...slotProps,\r\n\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\t\t\treadOnly: true,\r\n\t\t\t\t\t\t\t\tendAdornment: (\r\n\t\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t\t\t\t{showPreview && fileName && (\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleFileRemove}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ mr: 1 }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tClear\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\t\t\t\t\t\t\tcolor={buttonColor}\r\n\t\t\t\t\t\t\t\t\t\t\tsize={buttonSize || size}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={handleButtonClick}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={uploadIcon}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={buttonStyles}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{buttonText}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\thelperText={helperText ?? (error?.message ? error.message : undefined)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{enableDragDrop && isDragging && (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.05)\",\r\n\t\t\t\t\t\t\t\tborder: \"2px dashed\",\r\n\t\t\t\t\t\t\t\tborderColor: \"primary.main\",\r\n\t\t\t\t\t\t\t\tborderRadius: 4,\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\tzIndex: 1000,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tDrop files here\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t\t{error && !helperText && error.message && <FormHelperText>{error.message}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFileUploadField.displayName = \"FileUploadField\";\r\n\r\nexport default FileUploadField;\r\n","import FileUploadField from \"../FormFields/DropdownFields/FileUploadField\";\r\nimport React, { useRef, memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputFileUpload = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tsize,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst fileRef = useRef(null);\r\n\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => (\r\n\t\t\t\t\t<FileUploadField\r\n\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\tsize={size as TextFieldProps[\"size\"]}\r\n\t\t\t\t\t\tref={fileRef}\r\n\t\t\t\t\t\tonChange={(files) => {\r\n\t\t\t\t\t\t\tfield.onChange(files);\r\n\t\t\t\t\t\t\tonChange?.(files);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputFileUpload.displayName = \"FormInputFileUpload\";\r\n\r\nexport default FormInputFileUpload;\r\n","import {\r\n\tBox,\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tIconButton,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport { Clear as ClearIcon } from \"@mui/icons-material\";\r\nimport { DatePicker, type DatePickerProps, LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport React, { type ForwardedRef } from \"react\";\r\nimport { forwardRef, useRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Date Picker Field Props\r\n * Extends MUI DatePickerProps with custom form field props\r\n */\r\nexport interface IDatePickerFieldProps\r\n\textends Omit<\r\n\t\tDatePickerProps,\r\n\t\t\"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\" | \"renderInput\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the date picker */\r\n\tlabel?: string;\r\n\t/** Current selected date value */\r\n\tvalue: Date | null;\r\n\t/** Default date value */\r\n\tdefaultValue?: Date | null;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Minimum selectable date */\r\n\tminDate?: Date;\r\n\t/** Maximum selectable date */\r\n\tmaxDate?: Date;\r\n\t/** Function to disable specific dates */\r\n\tshouldDisableDate?: (date: Date) => boolean;\r\n\t/** Function to disable specific months */\r\n\tshouldDisableMonth?: (month: Date) => boolean;\r\n\t/** Function to disable specific years */\r\n\tshouldDisableYear?: (year: Date) => boolean;\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** Whether the field is read-only */\r\n\treadOnly?: boolean;\r\n\t/** Whether to show clear button */\r\n\tshowClearButton?: boolean;\r\n\t/** Whether to disable past dates */\r\n\tdisablePast?: boolean;\r\n\t/** Whether to disable future dates */\r\n\tdisableFuture?: boolean;\r\n\t/** Reference date for the calendar */\r\n\treferenceDate?: Date;\r\n\t/** Controlled view state */\r\n\tview?: \"day\" | \"month\" | \"year\";\r\n\t/** Format for displaying the date */\r\n\tformat?: string;\r\n\t/** Whether to open the calendar on focus */\r\n\topenTo?: \"day\" | \"month\" | \"year\";\r\n\t/** Custom styles for the DatePicker */\r\n\tpickerStyles?: DatePickerProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Custom styles for the container Box */\r\n\tcontainerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\r\n\t/** Custom styles for the TextField */\r\n\ttextFieldStyles?: TextFieldProps[\"sx\"];\r\n\t/** Callback fired when the date changes */\r\n\tonChange?: (value: Date | null) => void;\r\n\t/** Callback fired when the field receives focus */\r\n\tonFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when the field loses focus */\r\n\tonBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when a view change is requested */\r\n\tonViewChange?: (view: \"day\" | \"month\" | \"year\") => void;\r\n\t/** Callback fired when a month change is requested */\r\n\tonMonthChange?: (month: Date) => void;\r\n\t/** Callback fired when a year change is requested */\r\n\tonYearChange?: (year: Date) => void;\r\n\t/** Callback fired when the calendar opens */\r\n\tonOpen?: () => void;\r\n\t/** Callback fired when the calendar closes */\r\n\tonClose?: () => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: DatePickerProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: DatePickerProps[\"slots\"];\r\n\t/** Date adapter to use (defaults to AdapterDateFns) */\r\n\tdateAdapter?: typeof AdapterDateFns;\r\n\t/** Whether to reduce animations */\r\n\treduceAnimations?: boolean;\r\n\t/** Auto focus the input */\r\n\tautoFocus?: boolean;\r\n}\r\n\r\nconst DatePickerField = forwardRef<HTMLDivElement, IDatePickerFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue,\r\n\t\t\tonChange,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\tonViewChange,\r\n\t\t\tonMonthChange,\r\n\t\t\tonYearChange,\r\n\t\t\tonOpen,\r\n\t\t\tonClose,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tminDate,\r\n\t\t\tmaxDate,\r\n\t\t\tshouldDisableDate,\r\n\t\t\tshouldDisableMonth,\r\n\t\t\tshouldDisableYear,\r\n\t\t\tsize = \"medium\",\r\n\t\t\tvariant = \"outlined\",\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tplaceholder,\r\n\t\t\treadOnly = false,\r\n\t\t\tshowClearButton = true,\r\n\t\t\tdisablePast = false,\r\n\t\t\tdisableFuture = false,\r\n\t\t\treferenceDate,\r\n\t\t\tview,\r\n\t\t\tformat,\r\n\t\t\topenTo = \"day\",\r\n\t\t\tpickerStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tcontainerStyles,\r\n\t\t\ttextFieldStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tdateAdapter = AdapterDateFns,\r\n\t\t\treduceAnimations = false,\r\n\t\t\tautoFocus = false,\r\n\t\t\t...datePickerProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\tconst inputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (newValue: Date | null) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle clear button click\r\n\t\tconst handleClear = () => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(null);\r\n\t\t\t}\r\n\t\t\tif (inputRef.current) {\r\n\t\t\t\tinputRef.current.focus();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Default placeholder\r\n\t\tconst defaultPlaceholder = placeholder || \"MM/DD/YYYY\";\r\n\r\n\t\t// Merge slotProps with textField configuration\r\n\t\tconst mergedSlotProps = {\r\n\t\t\t...slotProps,\r\n\t\t\ttextField: {\r\n\t\t\t\t...slotProps?.textField,\r\n\t\t\t\terror: !!error,\r\n\t\t\t\tsize,\r\n\t\t\t\tvariant,\r\n\t\t\t\tcolor,\r\n\t\t\t\thelperText: error ? (helperText ?? error.message) : helperText,\r\n\t\t\t\tfullWidth,\r\n\t\t\t\tplaceholder: defaultPlaceholder,\r\n\t\t\t\tautoFocus,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tinputRef: ref || inputRef,\r\n\t\t\t\tsx: {\r\n\t\t\t\t\t...textFieldStyles,\r\n\t\t\t\t\t...((\r\n\t\t\t\t\t\tslotProps?.textField &&\r\n\t\t\t\t\t\ttypeof slotProps.textField === \"object\" &&\r\n\t\t\t\t\t\t\"sx\" in slotProps.textField\r\n\t\t\t\t\t) ?\r\n\t\t\t\t\t\tslotProps.textField.sx\r\n\t\t\t\t\t:\t{}),\r\n\t\t\t\t},\r\n\t\t\t\tInputProps: {\r\n\t\t\t\t\t...((\r\n\t\t\t\t\t\tslotProps?.textField &&\r\n\t\t\t\t\t\ttypeof slotProps.textField === \"object\" &&\r\n\t\t\t\t\t\t\"InputProps\" in slotProps.textField\r\n\t\t\t\t\t) ?\r\n\t\t\t\t\t\tslotProps.textField.InputProps\r\n\t\t\t\t\t:\t{}),\r\n\t\t\t\t\tendAdornment:\r\n\t\t\t\t\t\tshowClearButton && value ?\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleClear}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tedge=\"end\"\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\t\t\tright: 8,\r\n\t\t\t\t\t\t\t\t\ttop: \"50%\",\r\n\t\t\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\taria-label=\"clear date\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<ClearIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t:\tundefined,\r\n\t\t\t\t},\r\n\t\t\t} as Partial<TextFieldProps>,\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t...formLabelStyles,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...containerStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<LocalizationProvider dateAdapter={dateAdapter}>\r\n\t\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\t\t{...datePickerProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tonViewChange={onViewChange}\r\n\t\t\t\t\t\t\tonMonthChange={onMonthChange}\r\n\t\t\t\t\t\t\tonYearChange={onYearChange}\r\n\t\t\t\t\t\t\tonOpen={onOpen}\r\n\t\t\t\t\t\t\tonClose={onClose}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tminDate={minDate}\r\n\t\t\t\t\t\t\tmaxDate={maxDate}\r\n\t\t\t\t\t\t\tshouldDisableDate={shouldDisableDate}\r\n\t\t\t\t\t\t\tshouldDisableMonth={shouldDisableMonth}\r\n\t\t\t\t\t\t\tshouldDisableYear={shouldDisableYear}\r\n\t\t\t\t\t\t\tdisablePast={disablePast}\r\n\t\t\t\t\t\t\tdisableFuture={disableFuture}\r\n\t\t\t\t\t\t\treferenceDate={referenceDate}\r\n\t\t\t\t\t\t\tview={view}\r\n\t\t\t\t\t\t\tformat={format}\r\n\t\t\t\t\t\t\topenTo={openTo}\r\n\t\t\t\t\t\t\treduceAnimations={reduceAnimations}\r\n\t\t\t\t\t\t\tslotProps={mergedSlotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={pickerStyles}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</LocalizationProvider>\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nDatePickerField.displayName = \"DatePickerField\";\r\n\r\nexport default DatePickerField;\r\n","import DatePickerField from \"../FormFields/DateFields/DatePickerField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\n\r\nconst FormInputDatePicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tsize,\r\n\t\treadOnly,\r\n\t\tshouldDisableDate,\r\n\t\tdisabled,\r\n\t\tplaceholder,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputDateFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\t// Exclude views prop as DatePicker uses DateView[], not TimeView[]\r\n\t\t\t\t\tconst { views, ampm, ampmInClock, timezone, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<DatePickerField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\t\tonChange={(newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\tshouldDisableDate={shouldDisableDate}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t\tsize={size as TextFieldProps[\"size\"]}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\treadOnly={readOnly}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputDatePicker.displayName = \"FormInputDatePicker\";\r\n\r\nexport default FormInputDatePicker;\r\n","import {\n\tBox,\n\tFormControl,\n\tFormHelperText,\n\tFormLabel,\n\ttype FormLabelProps,\n\tIconButton,\n\ttype TextFieldProps,\n} from \"@mui/material\";\nimport { Clear as ClearIcon } from \"@mui/icons-material\";\nimport { TimePicker, type TimePickerProps, LocalizationProvider } from \"@mui/x-date-pickers\";\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\nimport React, { type ForwardedRef } from \"react\";\nimport { forwardRef, useRef } from \"react\";\n\n/**\n * Error object type\n */\nexport type FieldError = {\n\tmessage?: string;\n} | null;\n\n/**\n * Extended Time Picker Field Props\n * Extends MUI TimePickerProps with custom form field props\n */\nexport interface ITimePickerFieldProps\n\textends Omit<\n\t\tTimePickerProps,\n\t\t\"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\" | \"renderInput\" | \"onViewChange\"\n\t> {\n\t/** Field name for form identification */\n\tname?: string;\n\t/** Label text for the time picker */\n\tlabel?: string;\n\t/** Current selected time value */\n\tvalue: Date | null;\n\t/** Default time value */\n\tdefaultValue?: Date | null;\n\t/** Error object with optional message */\n\terror?: FieldError;\n\t/** Helper text to display below field */\n\thelperText?: string;\n\t/** Whether the field is disabled */\n\tdisabled?: boolean;\n\t/** Full width of the field */\n\tfullWidth?: boolean;\n\t/** Required field indicator */\n\trequired?: boolean;\n\t/** Minimum selectable time */\n\tminTime?: Date;\n\t/** Maximum selectable time */\n\tmaxTime?: Date;\n\t/** Function to disable specific times */\n\tshouldDisableTime?: (time: Date, view: \"hours\" | \"minutes\" | \"seconds\") => boolean;\n\t/** TextField size */\n\tsize?: TextFieldProps[\"size\"];\n\t/** TextField variant */\n\tvariant?: TextFieldProps[\"variant\"];\n\t/** TextField color */\n\tcolor?: TextFieldProps[\"color\"];\n\t/** Placeholder text */\n\tplaceholder?: string;\n\t/** Whether the field is read-only */\n\treadOnly?: boolean;\n\t/** Whether to show clear button */\n\tshowClearButton?: boolean;\n\t/** Whether to disable past times */\n\tdisablePast?: boolean;\n\t/** Whether to disable future times */\n\tdisableFuture?: boolean;\n\t/** Whether to use 12-hour format */\n\tampm?: boolean;\n\t/** Available views (hours, minutes, seconds) */\n\tviews?: (\"hours\" | \"minutes\" | \"seconds\")[];\n\t/** Controlled view state */\n\tview?: \"hours\" | \"minutes\" | \"seconds\";\n\t/** Default view */\n\topenTo?: \"hours\" | \"minutes\" | \"seconds\";\n\t/** Format for displaying the time */\n\tformat?: string;\n\t/** Custom styles for the TimePicker */\n\tpickerStyles?: TimePickerProps[\"sx\"];\n\t/** Custom styles for FormControl */\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\n\t/** Custom styles for FormLabel */\n\tformLabelStyles?: FormLabelProps[\"sx\"];\n\t/** Custom styles for the container Box */\n\tcontainerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\n\t/** Custom styles for the TextField */\n\ttextFieldStyles?: TextFieldProps[\"sx\"];\n\t/** Callback fired when the time changes */\n\tonChange?: (value: Date | null) => void;\n\t/** Callback fired when the field receives focus */\n\tonFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n\t/** Callback fired when the field loses focus */\n\tonBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n\t/** Callback fired when a view change is requested */\n\tonViewChange?: (view: \"hours\" | \"minutes\" | \"seconds\" | \"meridiem\") => void;\n\t/** Callback fired when the picker opens */\n\tonOpen?: () => void;\n\t/** Callback fired when the picker closes */\n\tonClose?: () => void;\n\t/** Custom slot props for MUI v7 */\n\tslotProps?: TimePickerProps[\"slotProps\"];\n\t/** Custom slots for MUI v7 */\n\tslots?: TimePickerProps[\"slots\"];\n\t/** Date adapter to use (defaults to AdapterDateFns) */\n\tdateAdapter?: typeof AdapterDateFns;\n\t/** Auto focus the input */\n\tautoFocus?: boolean;\n}\n\nconst TimePickerField = forwardRef<HTMLDivElement, ITimePickerFieldProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tonViewChange,\n\t\t\tonOpen,\n\t\t\tonClose,\n\t\t\terror,\n\t\t\thelperText,\n\t\t\tdisabled = false,\n\t\t\tfullWidth = true,\n\t\t\trequired,\n\t\t\tminTime,\n\t\t\tmaxTime,\n\t\t\tshouldDisableTime,\n\t\t\tsize = \"medium\",\n\t\t\tvariant = \"outlined\",\n\t\t\tcolor = \"primary\",\n\t\t\tplaceholder,\n\t\t\treadOnly = false,\n\t\t\tshowClearButton = true,\n\t\t\tdisablePast = false,\n\t\t\tdisableFuture = false,\n\t\t\tampm = true,\n\t\t\tviews,\n\t\t\tview,\n\t\t\topenTo = \"hours\",\n\t\t\tformat,\n\t\t\tpickerStyles,\n\t\t\tformControlStyles,\n\t\t\tformLabelStyles,\n\t\t\tcontainerStyles,\n\t\t\ttextFieldStyles,\n\t\t\tslotProps,\n\t\t\tslots,\n\t\t\tdateAdapter = AdapterDateFns,\n\t\t\tautoFocus = false,\n\t\t\t...timePickerProps\n\t\t},\n\t\tref: ForwardedRef<HTMLDivElement>\n\t) => {\n\t\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\n\t\t// Handle onChange with proper typing\n\t\tconst handleChange = (newValue: Date | null) => {\n\t\t\tif (onChange) {\n\t\t\t\tonChange(newValue);\n\t\t\t}\n\t\t};\n\n\t\t// Handle clear button click\n\t\tconst handleClear = () => {\n\t\t\tif (onChange) {\n\t\t\t\tonChange(null);\n\t\t\t}\n\t\t\tif (inputRef.current) {\n\t\t\t\tinputRef.current.focus();\n\t\t\t}\n\t\t};\n\n\t\t// Default placeholder\n\t\tconst defaultPlaceholder = placeholder || (ampm ? \"hh:mm AM/PM\" : \"hh:mm\");\n\n\t\t// Merge slotProps with textField configuration\n\t\tconst mergedSlotProps = {\n\t\t\t...slotProps,\n\t\t\ttextField: {\n\t\t\t\t...slotProps?.textField,\n\t\t\t\terror: !!error,\n\t\t\t\tsize,\n\t\t\t\tvariant,\n\t\t\t\tcolor,\n\t\t\t\thelperText: error ? (helperText ?? error.message) : helperText,\n\t\t\t\tfullWidth,\n\t\t\t\tplaceholder: defaultPlaceholder,\n\t\t\t\tautoFocus,\n\t\t\t\tonFocus,\n\t\t\t\tonBlur,\n\t\t\t\tinputRef: ref || inputRef,\n\t\t\t\tsx: {\n\t\t\t\t\t...textFieldStyles,\n\t\t\t\t\t...((\n\t\t\t\t\t\tslotProps?.textField &&\n\t\t\t\t\t\ttypeof slotProps.textField === \"object\" &&\n\t\t\t\t\t\t\"sx\" in slotProps.textField\n\t\t\t\t\t) ?\n\t\t\t\t\t\tslotProps.textField.sx\n\t\t\t\t\t:\t{}),\n\t\t\t\t},\n\t\t\t\tInputProps: {\n\t\t\t\t\t...((\n\t\t\t\t\t\tslotProps?.textField &&\n\t\t\t\t\t\ttypeof slotProps.textField === \"object\" &&\n\t\t\t\t\t\t\"InputProps\" in slotProps.textField\n\t\t\t\t\t) ?\n\t\t\t\t\t\tslotProps.textField.InputProps\n\t\t\t\t\t:\t{}),\n\t\t\t\t\tendAdornment:\n\t\t\t\t\t\tshowClearButton && value ?\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\tonClick={handleClear}\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tedge=\"end\"\n\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\tright: 8,\n\t\t\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\taria-label=\"clear time\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ClearIcon fontSize=\"small\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t:\tundefined,\n\t\t\t\t},\n\t\t\t} as Partial<TextFieldProps>,\n\t\t};\n\n\t\treturn (\n\t\t\t<FormControl\n\t\t\t\terror={!!error}\n\t\t\t\tdisabled={disabled}\n\t\t\t\trequired={required}\n\t\t\t\tfullWidth={fullWidth}\n\t\t\t\tsx={formControlStyles}\n\t\t\t>\n\t\t\t\t{label && (\n\t\t\t\t\t<FormLabel\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tmb: 1,\n\t\t\t\t\t\t\t...formLabelStyles,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</FormLabel>\n\t\t\t\t)}\n\t\t\t\t<Box\n\t\t\t\t\tref={ref}\n\t\t\t\t\tsx={{\n\t\t\t\t\t\t...containerStyles,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<LocalizationProvider dateAdapter={dateAdapter}>\n\t\t\t\t\t\t<TimePicker\n\t\t\t\t\t\t\t{...timePickerProps}\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tlabel={label ? undefined : label}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\t\tonViewChange={onViewChange}\n\t\t\t\t\t\t\tonOpen={onOpen}\n\t\t\t\t\t\t\tonClose={onClose}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tminTime={minTime}\n\t\t\t\t\t\t\tmaxTime={maxTime}\n\t\t\t\t\t\t\tshouldDisableTime={shouldDisableTime}\n\t\t\t\t\t\t\tdisablePast={disablePast}\n\t\t\t\t\t\t\tdisableFuture={disableFuture}\n\t\t\t\t\t\t\tampm={ampm}\n\t\t\t\t\t\t\tviews={views}\n\t\t\t\t\t\t\tview={view}\n\t\t\t\t\t\t\topenTo={openTo}\n\t\t\t\t\t\t\tformat={format}\n\t\t\t\t\t\t\tslotProps={mergedSlotProps}\n\t\t\t\t\t\t\tslots={slots}\n\t\t\t\t\t\t\tsx={pickerStyles}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</LocalizationProvider>\n\t\t\t\t</Box>\n\t\t\t\t{error && (\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\n\t\t\t\t)}\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\n\t\t\t</FormControl>\n\t\t);\n\t}\n);\n\nTimePickerField.displayName = \"TimePickerField\";\n\nexport default TimePickerField;\n","import TimePickerField from \"../FormFields/DateFields/TimePickerField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\n\r\nconst FormInputTimePicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tampm = true,\r\n\t\ttimezone,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputDateFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<TimePickerField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\t\tonChange={(newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tampm={ampm}\r\n\t\t\t\t\t\t\ttimezone={timezone}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTimePicker.displayName = \"FormInputTimePicker\";\r\n\r\nexport default FormInputTimePicker;\r\n","import {\r\n\tBox,\r\n\tButton,\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tStack,\r\n\ttype ButtonProps,\r\n} from \"@mui/material\";\r\nimport { TimeClock, type TimeClockProps, type TimeView } from \"@mui/x-date-pickers\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport React, { type ForwardedRef } from \"react\";\r\nimport { forwardRef, useState } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Time Clock Field Props\r\n * Extends MUI TimeClockProps with custom form field props\r\n */\r\nexport interface ITimeClockFieldProps\r\n\textends Omit<\r\n\t\tTimeClockProps<TimeView>,\r\n\t\t\"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\" | \"view\" | \"onViewChange\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the time clock */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current selected time value */\r\n\tvalue: Date | null;\r\n\t/** Default time value */\r\n\tdefaultValue?: Date | null;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below time clock */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Available views (hours, minutes, seconds) */\r\n\tviews?: TimeView[];\r\n\t/** Whether to show AM/PM in the clock */\r\n\tampmInClock?: boolean;\r\n\t/** Whether to use 12-hour format */\r\n\tampm?: boolean;\r\n\t/** Whether to disable past times */\r\n\tdisablePast?: boolean;\r\n\t/** Whether to disable future times */\r\n\tdisableFuture?: boolean;\r\n\t/** Minimum selectable time */\r\n\tminTime?: Date;\r\n\t/** Maximum selectable time */\r\n\tmaxTime?: Date;\r\n\t/** Function to disable specific times */\r\n\tshouldDisableTime?: (time: Date, view: TimeView) => boolean;\r\n\t/** Custom styles for the TimeClock */\r\n\tclockStyles?: TimeClockProps<TimeView>[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Custom styles for the container Box */\r\n\tcontainerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\r\n\t/** Custom styles for the view buttons Stack */\r\n\tbuttonsStackStyles?: React.ComponentProps<typeof Stack>[\"sx\"];\r\n\t/** Custom styles for view buttons */\r\n\tbuttonStyles?: ButtonProps[\"sx\"];\r\n\t/** Custom styles for active view button */\r\n\tactiveButtonStyles?: ButtonProps[\"sx\"];\r\n\t/** Whether to show view selector buttons */\r\n\tshowViewButtons?: boolean;\r\n\t/** Initial view */\r\n\tinitialView?: TimeView;\r\n\t/** Controlled view state */\r\n\tview?: TimeView;\r\n\t/** Callback fired when the time changes */\r\n\tonChange?: (value: Date | null) => void;\r\n\t/** Callback fired when a view change is requested */\r\n\tonViewChange?: (view: TimeView) => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TimeClockProps<TimeView>[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TimeClockProps<TimeView>[\"slots\"];\r\n\t/** Date adapter to use (defaults to AdapterDateFns) */\r\n\tdateAdapter?: typeof AdapterDateFns;\r\n\t/** Auto focus */\r\n\tautoFocus?: boolean;\r\n}\r\n\r\nconst TimeClockField = forwardRef<HTMLDivElement, ITimeClockFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue,\r\n\t\t\tonChange,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tviews = [\"hours\", \"minutes\"],\r\n\t\t\tampmInClock = false,\r\n\t\t\tampm = true,\r\n\t\t\tdisablePast = false,\r\n\t\t\tdisableFuture = false,\r\n\t\t\tminTime,\r\n\t\t\tmaxTime,\r\n\t\t\tshouldDisableTime,\r\n\t\t\tclockStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tcontainerStyles,\r\n\t\t\tbuttonsStackStyles,\r\n\t\t\tbuttonStyles,\r\n\t\t\tactiveButtonStyles,\r\n\t\t\tshowViewButtons = true,\r\n\t\t\tinitialView = \"hours\",\r\n\t\t\tview: controlledView,\r\n\t\t\tonViewChange: controlledOnViewChange,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tdateAdapter = AdapterDateFns,\r\n\t\t\tautoFocus = false,\r\n\t\t\t...timeClockProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\t// Internal view state (only used if view is not controlled)\r\n\t\tconst [internalView, setInternalView] = useState<TimeView>(initialView);\r\n\r\n\t\t// Use controlled view if provided, otherwise use internal state\r\n\t\tconst view = controlledView ?? internalView;\r\n\t\tconst setView = controlledOnViewChange ?? setInternalView;\r\n\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (newValue: Date | null) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle view change\r\n\t\tconst handleViewChange = (newView: TimeView) => {\r\n\t\t\tsetView(newView);\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t...formLabelStyles,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...containerStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{showViewButtons && views && views.length > 1 && (\r\n\t\t\t\t\t\t<Stack\r\n\t\t\t\t\t\t\tdirection=\"row\"\r\n\t\t\t\t\t\t\tjustifyContent=\"center\"\r\n\t\t\t\t\t\t\tspacing={1}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tmt: 1,\r\n\t\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t\t...buttonsStackStyles,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{views.map((v) => (\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tkey={v}\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tvariant={view === v ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\tonClick={() => handleViewChange(v)}\r\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\tview === v ?\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t...(buttonStyles as any),\r\n\t\t\t\t\t\t\t\t\t\t\t\t...(activeButtonStyles as any),\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t:\t(buttonStyles as any)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{v}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<LocalizationProvider dateAdapter={dateAdapter}>\r\n\t\t\t\t\t\t<TimeClock\r\n\t\t\t\t\t\t\t{...timeClockProps}\r\n\t\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tview={view}\r\n\t\t\t\t\t\t\tonViewChange={handleViewChange}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tviews={views}\r\n\t\t\t\t\t\t\tampmInClock={ampmInClock}\r\n\t\t\t\t\t\t\tampm={ampm}\r\n\t\t\t\t\t\t\tdisablePast={disablePast}\r\n\t\t\t\t\t\t\tdisableFuture={disableFuture}\r\n\t\t\t\t\t\t\tminTime={minTime}\r\n\t\t\t\t\t\t\tmaxTime={maxTime}\r\n\t\t\t\t\t\t\tshouldDisableTime={shouldDisableTime}\r\n\t\t\t\t\t\t\tautoFocus={autoFocus}\r\n\t\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={clockStyles}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</LocalizationProvider>\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nTimeClockField.displayName = \"TimeClockField\";\r\n\r\nexport default TimeClockField;\r\n","import TimeClockField from \"../FormFields/DateFields/TimeClockField\";\r\nimport { Box, FormHelperText, FormLabel } from \"@mui/material\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\n\r\nconst FormInputTimeClock = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\treadOnly,\r\n\t\tdisabled,\r\n\t\tampm = true,\r\n\t\tviews,\r\n\t\tampmInClock = true,\r\n\t\tdisablePast = false,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputDateFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst errorMessage = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : \"\"),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst hasError = useMemo(() => !!errors?.[name], [errors, name]);\r\n\r\n\t\tconst ampmValue = useMemo(() => (typeof ampm === \"boolean\" ? ampm : undefined), [ampm]);\r\n\r\n\t\treturn (\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tborder: (t) => `1px solid ${t.palette.grey[600]}`,\r\n\t\t\t\t\tborderRadius: (t) => t.spacing(0.5),\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<FormLabel\r\n\t\t\t\t\tsx={(t) => ({\r\n\t\t\t\t\t\tborderBottom: `1px solid ${t.palette.grey[600]}`,\r\n\t\t\t\t\t\tpadding: (t) => t.spacing(1),\r\n\t\t\t\t\t})}\r\n\t\t\t\t>\r\n\t\t\t\t\t{label}\r\n\t\t\t\t</FormLabel>\r\n\t\t\t\t<Controller\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\trender={({ field }) => (\r\n\t\t\t\t\t\t<TimeClockField\r\n\t\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\t\tonChange={(newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tampm={ampmValue}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\treadOnly={readOnly}\r\n\t\t\t\t\t\t\tampmInClock={ampmInClock}\r\n\t\t\t\t\t\t\tdisablePast={disablePast}\r\n\t\t\t\t\t\t\tviews={views}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{hasError && (\r\n\t\t\t\t\t<FormHelperText sx={{ color: \"error.main\", mt: 1 }}>{errorMessage}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTimeClock.displayName = \"FormInputTimeClock\";\r\n\r\nexport default FormInputTimeClock;\r\n","import { Box, FormControl, FormHelperText, FormLabel, type FormLabelProps } from \"@mui/material\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport { DateCalendar, type DateCalendarProps } from \"@mui/x-date-pickers/DateCalendar\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport React, { type ForwardedRef } from \"react\";\r\nimport { forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Date Calendar Field Props\r\n * Extends MUI DateCalendarProps with custom form field props\r\n */\r\nexport interface IDateCalendarFieldProps\r\n\textends Omit<DateCalendarProps, \"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the calendar */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current selected date value */\r\n\tvalue: Date | null;\r\n\t/** Default date value */\r\n\tdefaultValue?: Date | null;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below calendar */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Minimum selectable date */\r\n\tminDate?: Date;\r\n\t/** Maximum selectable date */\r\n\tmaxDate?: Date;\r\n\t/** Function to disable specific dates */\r\n\tshouldDisableDate?: (date: Date) => boolean;\r\n\t/** Function to disable specific months */\r\n\tshouldDisableMonth?: (month: Date) => boolean;\r\n\t/** Function to disable specific years */\r\n\tshouldDisableYear?: (year: Date) => boolean;\r\n\t/** Custom styles for the DateCalendar */\r\n\tcalendarStyles?: DateCalendarProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Custom styles for the container Box */\r\n\tcontainerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\r\n\t/** Callback fired when the date changes */\r\n\tonChange?: (value: Date | null) => void;\r\n\t/** Callback fired when a view change is requested */\r\n\tonViewChange?: (view: \"day\" | \"month\" | \"year\") => void;\r\n\t/** Callback fired when a month change is requested */\r\n\tonMonthChange?: (month: Date) => void;\r\n\t/** Callback fired when a year change is requested */\r\n\tonYearChange?: (year: Date) => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: DateCalendarProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: DateCalendarProps[\"slots\"];\r\n\t/** Date adapter to use (defaults to AdapterDateFns) */\r\n\tdateAdapter?: typeof AdapterDateFns;\r\n\t/** Whether to show days outside current month */\r\n\tshowDaysOutsideCurrentMonth?: boolean;\r\n\t/** Whether to disable past dates */\r\n\tdisablePast?: boolean;\r\n\t/** Whether to disable future dates */\r\n\tdisableFuture?: boolean;\r\n\t/** Reference date for the calendar */\r\n\treferenceDate?: Date;\r\n\t/** Controlled view state */\r\n\tview?: \"day\" | \"month\" | \"year\";\r\n}\r\n\r\nconst DateCalendarField = forwardRef<HTMLDivElement, IDateCalendarFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue,\r\n\t\t\tonChange,\r\n\t\t\tonViewChange,\r\n\t\t\tonMonthChange,\r\n\t\t\tonYearChange,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tminDate,\r\n\t\t\tmaxDate,\r\n\t\t\tshouldDisableDate,\r\n\t\t\tshouldDisableMonth,\r\n\t\t\tshouldDisableYear,\r\n\t\t\tcalendarStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tcontainerStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tdateAdapter = AdapterDateFns,\r\n\t\t\tshowDaysOutsideCurrentMonth = false,\r\n\t\t\tdisablePast = false,\r\n\t\t\tdisableFuture = false,\r\n\t\t\treferenceDate,\r\n\t\t\tview,\r\n\t\t\t...dateCalendarProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (newValue: Date | null) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t...formLabelStyles,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...containerStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<LocalizationProvider dateAdapter={dateAdapter}>\r\n\t\t\t\t\t\t<DateCalendar\r\n\t\t\t\t\t\t\t{...dateCalendarProps}\r\n\t\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tonViewChange={onViewChange}\r\n\t\t\t\t\t\t\tonMonthChange={onMonthChange}\r\n\t\t\t\t\t\t\tonYearChange={onYearChange}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tminDate={minDate}\r\n\t\t\t\t\t\t\tmaxDate={maxDate}\r\n\t\t\t\t\t\t\tshouldDisableDate={shouldDisableDate}\r\n\t\t\t\t\t\t\tshouldDisableMonth={shouldDisableMonth}\r\n\t\t\t\t\t\t\tshouldDisableYear={shouldDisableYear}\r\n\t\t\t\t\t\t\tshowDaysOutsideCurrentMonth={showDaysOutsideCurrentMonth}\r\n\t\t\t\t\t\t\tdisablePast={disablePast}\r\n\t\t\t\t\t\t\tdisableFuture={disableFuture}\r\n\t\t\t\t\t\t\treferenceDate={referenceDate}\r\n\t\t\t\t\t\t\tview={view}\r\n\t\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={calendarStyles}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</LocalizationProvider>\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nDateCalendarField.displayName = \"DateCalendarField\";\r\n\r\nexport default DateCalendarField;\r\n","import DateCalendarField from \"../FormFields/DateFields/DateCalendarField\";\r\nimport { Box, FormHelperText, FormLabel } from \"@mui/material\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\n\r\nconst FormInputCalendar = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\treadOnly,\r\n\t\tdisabled,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputDateFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst errorMessage = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : \"\"),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst hasError = useMemo(() => !!errors?.[name], [errors, name]);\r\n\r\n\t\treturn (\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tborder: (t) => `1px solid ${t.palette.grey[600]}`,\r\n\t\t\t\t\tborderRadius: (t) => t.spacing(0.5),\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<FormLabel\r\n\t\t\t\t\tsx={(t) => ({\r\n\t\t\t\t\t\tborderBottom: `1px solid ${t.palette.grey[600]}`,\r\n\t\t\t\t\t\tpadding: (t) => t.spacing(1),\r\n\t\t\t\t\t})}\r\n\t\t\t\t>\r\n\t\t\t\t\t{label}\r\n\t\t\t\t</FormLabel>\r\n\t\t\t\t<Controller\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\t\tconst { views, ...restProps } = props;\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<DateCalendarField\r\n\t\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\t\t\tonChange={(newValue) => {\r\n\t\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\treadOnly={readOnly}\r\n\t\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\theight: \"300px\",\r\n\t\t\t\t\t\t\t\t\t...restProps.sx,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t\t{hasError && (\r\n\t\t\t\t\t<FormHelperText sx={{ color: \"error.main\", mt: 1 }}>{errorMessage}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputCalendar.displayName = \"FormInputCalendar\";\r\n\r\nexport default FormInputCalendar;\r\n","import {\r\n\tCheckbox,\r\n\ttype CheckboxProps,\r\n\tFormControl,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tFormHelperText,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Checkbox Field Props\r\n * Extends MUI CheckboxProps with custom form field props\r\n */\r\nexport interface ICheckboxFieldProps extends Omit<CheckboxProps, \"checked\" | \"onChange\" | \"name\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the checkbox */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current checked state */\r\n\tvalue: boolean;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below checkbox */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Checkbox color */\r\n\tcolor?: CheckboxProps[\"color\"];\r\n\t/** Checkbox size */\r\n\tsize?: CheckboxProps[\"size\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Label placement */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (checked: boolean) => void;\r\n\t/** Callback fired when checkbox is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\t/** Callback fired when checkbox receives focus */\r\n\tonFocus?: CheckboxProps[\"onFocus\"];\r\n\t/** Callback fired when checkbox loses focus */\r\n\tonBlur?: CheckboxProps[\"onBlur\"];\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for the Checkbox */\r\n\tcheckboxStyles?: CheckboxProps[\"sx\"];\r\n\t/** Custom styles for FormControlLabel */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Indeterminate state */\r\n\tindeterminate?: boolean;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: CheckboxProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: CheckboxProps[\"slots\"];\r\n}\r\n\r\nconst CheckboxField = forwardRef<HTMLButtonElement, ICheckboxFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\tcheckedIcon,\r\n\t\t\ticon,\r\n\t\t\tindeterminate = false,\r\n\t\t\tcheckboxStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\t...checkboxProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLButtonElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (_event: ChangeEvent<HTMLInputElement>, checked: boolean) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(checked);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click event\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsize={size === \"large\" ? \"medium\" : size}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t<FormControlLabel\r\n\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t{...checkboxProps}\r\n\t\t\t\t\t\t\tchecked={value}\r\n\t\t\t\t\t\t\tindeterminate={indeterminate}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tonClick={handleClick}\r\n\t\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\tcheckedIcon={checkedIcon}\r\n\t\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={checkboxStyles}\r\n\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlabel={label}\r\n\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t/>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCheckboxField.displayName = \"CheckboxField\";\r\n\r\nexport default CheckboxField;\r\n","import CheckBoxField from \"../FormFields/BoxFields/CheckBoxField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputCheckBox = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tdefaultValue = false,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<CheckBoxField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? false}\r\n\t\t\t\t\t\t\tonChange={(checked) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(checked);\r\n\t\t\t\t\t\t\t\tonChange?.(checked);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputCheckBox.displayName = \"FormInputCheckBox\";\r\n\r\nexport default FormInputCheckBox;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tCheckbox,\r\n\ttype CheckboxProps,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tBox,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Checkbox option type\r\n */\r\nexport type CheckboxOption = {\r\n\tvalue: string | number;\r\n\tlabel: React.ReactNode;\r\n\tdisabled?: boolean;\r\n};\r\n\r\n/**\r\n * Extended Checkbox Group Field Props\r\n */\r\nexport interface ICheckboxFieldGroupProps\r\n\textends Omit<\r\n\t\tFormControlProps,\r\n\t\t| \"error\"\r\n\t\t| \"disabled\"\r\n\t\t| \"required\"\r\n\t\t| \"fullWidth\"\r\n\t\t| \"color\"\r\n\t\t| \"size\"\r\n\t\t| \"onChange\"\r\n\t\t| \"onFocus\"\r\n\t\t| \"onBlur\"\r\n\t\t| \"onClick\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the checkbox group */\r\n\tlabel?: React.ReactNode;\r\n\t/** Array of selected values */\r\n\tvalue: (string | number)[];\r\n\t/** Array of checkbox options */\r\n\toptions: CheckboxOption[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Checkbox color */\r\n\tcolor?: CheckboxProps[\"color\"];\r\n\t/** Checkbox size */\r\n\tsize?: CheckboxProps[\"size\"];\r\n\t/** Label placement relative to checkbox */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Whether to display checkboxes in a row */\r\n\trow?: boolean;\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for individual checkboxes */\r\n\tcheckboxStyles?: CheckboxProps[\"sx\"];\r\n\t/** Custom styles for checkbox labels */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (value: (string | number)[]) => void;\r\n\t/** Callback fired when a checkbox receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLButtonElement>, value: string | number) => void;\r\n\t/** Callback fired when a checkbox loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLButtonElement>, value: string | number) => void;\r\n\t/** Callback fired when a checkbox is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>, value: string | number) => void;\r\n\t/** Custom render function for checkboxes */\r\n\trenderCheckbox?: (\r\n\t\toption: CheckboxOption,\r\n\t\tindex: number,\r\n\t\tisChecked: boolean,\r\n\t\thandleChange: (event: ChangeEvent<HTMLInputElement>) => void\r\n\t) => React.ReactNode;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: {\r\n\t\tcheckbox?: CheckboxProps[\"slotProps\"];\r\n\t\tformControlLabel?: FormControlLabelProps[\"slotProps\"];\r\n\t};\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: {\r\n\t\tcheckbox?: CheckboxProps[\"slots\"];\r\n\t};\r\n\t/** FormLabel props */\r\n\tformLabelProps?: Omit<FormLabelProps, \"children\">;\r\n\t/** FormControlLabel props */\r\n\tformControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\" | \"value\">;\r\n}\r\n\r\nconst CheckboxFieldGroup = forwardRef<HTMLDivElement, ICheckboxFieldGroupProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\toptions,\r\n\t\t\tonChange,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\tonClick,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\trow = false,\r\n\t\t\tcheckedIcon,\r\n\t\t\ticon,\r\n\t\t\tcheckboxStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\trenderCheckbox,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformLabelProps,\r\n\t\t\tformControlLabelProps,\r\n\t\t\t...formControlProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\t// Handle checkbox change\r\n\t\tconst handleChange =\r\n\t\t\t(optionValue: string | number) => (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\tif (disabled) return;\r\n\r\n\t\t\t\tconst isChecked = event.target.checked;\r\n\t\t\t\tlet newValue: (string | number)[];\r\n\r\n\t\t\t\tif (isChecked) {\r\n\t\t\t\t\t// Add to selection\r\n\t\t\t\t\tnewValue = [...value, optionValue];\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Remove from selection\r\n\t\t\t\t\tnewValue = value.filter((val) => val !== optionValue);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onChange) {\r\n\t\t\t\t\tonChange(newValue);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t// Handle focus\r\n\t\tconst handleFocus =\r\n\t\t\t(optionValue: string | number) => (event: FocusEvent<HTMLButtonElement>) => {\r\n\t\t\t\tif (onFocus) {\r\n\t\t\t\t\tonFocus(event, optionValue);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t// Handle blur\r\n\t\tconst handleBlur = (optionValue: string | number) => (event: FocusEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onBlur) {\r\n\t\t\t\tonBlur(event, optionValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click\r\n\t\tconst handleClick =\r\n\t\t\t(optionValue: string | number) => (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\t\tif (onClick) {\r\n\t\t\t\t\tonClick(event, optionValue);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t// Default render function for checkboxes\r\n\t\tconst defaultRenderCheckbox = (\r\n\t\t\toption: CheckboxOption,\r\n\t\t\tindex: number,\r\n\t\t\tisChecked: boolean,\r\n\t\t\thandleChangeFn: (event: ChangeEvent<HTMLInputElement>) => void\r\n\t\t) => {\r\n\t\t\treturn (\r\n\t\t\t\t<FormControlLabel\r\n\t\t\t\t\tkey={`${option.value}-${index}`}\r\n\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\tname={name ? `${name}-${option.value}` : undefined}\r\n\t\t\t\t\t\t\tchecked={isChecked}\r\n\t\t\t\t\t\t\tonChange={handleChangeFn}\r\n\t\t\t\t\t\t\tonFocus={handleFocus(option.value)}\r\n\t\t\t\t\t\t\tonBlur={handleBlur(option.value)}\r\n\t\t\t\t\t\t\tonClick={handleClick(option.value)}\r\n\t\t\t\t\t\t\tdisabled={disabled || option.disabled}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\tcheckedIcon={checkedIcon}\r\n\t\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\t\tslotProps={slotProps?.checkbox}\r\n\t\t\t\t\t\t\tslots={slots?.checkbox}\r\n\t\t\t\t\t\t\tsx={checkboxStyles}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlabel={option.label}\r\n\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\tslotProps={slotProps?.formControlLabel}\r\n\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t\t{...formControlLabelProps}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\t{...(formControlProps as any)}\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tcomponent=\"fieldset\"\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tcomponent=\"legend\"\r\n\t\t\t\t\t\tsx={formLabelStyles}\r\n\t\t\t\t\t\t{...formLabelProps}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tflexDirection: row ? \"row\" : \"column\",\r\n\t\t\t\t\t\tflexWrap: row ? \"wrap\" : \"nowrap\",\r\n\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\tmt: label ? 1 : 0,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{options.map((option, index) => {\r\n\t\t\t\t\t\tconst isChecked = value.includes(option.value);\r\n\t\t\t\t\t\tconst changeHandler = handleChange(option.value);\r\n\r\n\t\t\t\t\t\tif (renderCheckbox) {\r\n\t\t\t\t\t\t\treturn renderCheckbox(option, index, isChecked, changeHandler);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn defaultRenderCheckbox(option, index, isChecked, changeHandler);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCheckboxFieldGroup.displayName = \"CheckboxFieldGroup\";\r\n\r\nexport default CheckboxFieldGroup;\r\n","import CheckBoxFieldGroup from \"../FormFields/BoxFields/CheckBoxFieldGroup\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputCheckBoxGroupFields } from \"./types\";\r\n\r\nconst FormInputCheckBoxGroup = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdefaultValue = [],\r\n\t\tonChange,\r\n\t\trow,\r\n\t\tcolor,\r\n\t\tlabelPlacement,\r\n\t\t...props\r\n\t}: IFormInputCheckBoxGroupFields) => {\r\n\t\t// Convert options to CheckboxOption format - memoized\r\n\t\tconst checkboxOptions = useMemo(\r\n\t\t\t() =>\r\n\t\t\t\toptions.map((option) => ({\r\n\t\t\t\t\tvalue: option.value,\r\n\t\t\t\t\tlabel: option.name,\r\n\t\t\t\t\tdisabled: option.disabled,\r\n\t\t\t\t})),\r\n\t\t\t[options]\r\n\t\t);\r\n\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\tconst fieldValue = Array.isArray(field.value) ? field.value : [];\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<CheckBoxFieldGroup\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={fieldValue}\r\n\t\t\t\t\t\t\toptions={checkboxOptions}\r\n\t\t\t\t\t\t\tonChange={(value) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(value);\r\n\t\t\t\t\t\t\t\tonChange?.(value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputCheckBoxGroup.displayName = \"FormInputCheckBoxGroup\";\r\n\r\nexport default FormInputCheckBoxGroup;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tFormHelperText,\r\n\tSwitch,\r\n\ttype SwitchProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Switch Field Props\r\n * Extends MUI SwitchProps with custom form field props\r\n */\r\nexport interface ISwitchFieldProps extends Omit<SwitchProps, \"checked\" | \"onChange\" | \"name\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the switch */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current checked state */\r\n\tvalue: boolean;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below switch */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Switch color */\r\n\tcolor?: SwitchProps[\"color\"];\r\n\t/** Switch size */\r\n\tsize?: SwitchProps[\"size\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Label placement */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Edge placement for the switch */\r\n\tedge?: SwitchProps[\"edge\"];\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for the Switch */\r\n\tswitchStyles?: SwitchProps[\"sx\"];\r\n\t/** Custom styles for FormControlLabel */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (checked: boolean) => void;\r\n\t/** Callback fired when switch is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\t/** Callback fired when switch receives focus */\r\n\tonFocus?: SwitchProps[\"onFocus\"];\r\n\t/** Callback fired when switch loses focus */\r\n\tonBlur?: SwitchProps[\"onBlur\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: SwitchProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: SwitchProps[\"slots\"];\r\n\t/** FormControlLabel props */\r\n\tformControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\" | \"checked\">;\r\n}\r\n\r\nconst SwitchField = forwardRef<HTMLButtonElement, ISwitchFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\tedge,\r\n\t\t\tswitchStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformControlLabelProps,\r\n\t\t\t...switchProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLButtonElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (_event: ChangeEvent<HTMLInputElement>, checked: boolean) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(checked);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click event\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst switchComponent = (\r\n\t\t\t// <Switch {...switchProps} />\r\n\t\t\t<Switch\r\n\t\t\t\t{...switchProps}\r\n\t\t\t\tchecked={value}\r\n\t\t\t\tonChange={handleChange}\r\n\t\t\t\tonClick={handleClick}\r\n\t\t\t\tonFocus={onFocus}\r\n\t\t\t\tonBlur={onBlur}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tcolor={color}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tedge={edge}\r\n\t\t\t\tname={name}\r\n\t\t\t\tslotProps={slotProps}\r\n\t\t\t\tslots={slots}\r\n\t\t\t\tsx={switchStyles}\r\n\t\t\t\tref={ref}\r\n\t\t\t/>\r\n\t\t);\r\n\r\n\t\t// If no label, just return the switch (matches standard MUI Switch)\r\n\t\tif (!label) {\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"inline-flex\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t...formControlStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{switchComponent}\r\n\t\t\t\t\t{(error || helperText) && (\r\n\t\t\t\t\t\t<FormHelperText\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tmarginLeft: 0,\r\n\t\t\t\t\t\t\t\tmarginRight: 0,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{error ? (helperText ?? (error?.message ? error.message : \"\")) : helperText}\r\n\t\t\t\t\t\t</FormHelperText>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// With label, use FormControlLabel (standard MUI pattern)\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t...formControlStyles,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<FormControlLabel\r\n\t\t\t\t\tcontrol={switchComponent}\r\n\t\t\t\t\tlabel={label}\r\n\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t\t{...formControlLabelProps}\r\n\t\t\t\t/>\r\n\t\t\t\t{(error || helperText) && (\r\n\t\t\t\t\t<FormHelperText\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmarginLeft: labelPlacement === \"start\" ? \"72px\" : 0,\r\n\t\t\t\t\t\t\tmarginRight: 0,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{error ? (helperText ?? (error?.message ? error.message : \"\")) : helperText}\r\n\t\t\t\t\t</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSwitchField.displayName = \"SwitchField\";\r\n\r\nexport default SwitchField;\r\n","import SwitchField from \"../FormFields/BoxFields/SwitchField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputSwitch = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tdefaultValue = false,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SwitchField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? false}\r\n\t\t\t\t\t\t\tonChange={(checked) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(checked);\r\n\t\t\t\t\t\t\t\tonChange?.(checked);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputSwitch.displayName = \"FormInputSwitch\";\r\n\r\nexport default FormInputSwitch;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tSlider,\r\n\ttype SliderProps,\r\n} from \"@mui/material\";\r\nimport React, { type SyntheticEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Slider Field Props\r\n * Extends MUI SliderProps with custom form field props\r\n */\r\nexport interface ISliderFieldProps\r\n\textends Omit<SliderProps, \"value\" | \"onChange\" | \"onChangeCommitted\" | \"name\" | \"orientation\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the slider */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current slider value(s) */\r\n\tvalue: number | number[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below slider */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Slider orientation - horizontal or vertical */\r\n\torientation?: \"horizontal\" | \"vertical\";\r\n\t/** Minimum value (default: 0) */\r\n\tmin?: number;\r\n\t/** Maximum value (default: 100) */\r\n\tmax?: number;\r\n\t/** Step value (default: 1) */\r\n\tstep?: number | null;\r\n\t/** Whether to show value label */\r\n\tvalueLabelDisplay?: SliderProps[\"valueLabelDisplay\"];\r\n\t/** Custom format for value label */\r\n\tvalueLabelFormat?: SliderProps[\"valueLabelFormat\"];\r\n\t/** Slider color */\r\n\tcolor?: SliderProps[\"color\"];\r\n\t/** Slider size */\r\n\tsize?: SliderProps[\"size\"];\r\n\t/** Marks on the slider */\r\n\tmarks?: boolean | SliderProps[\"marks\"];\r\n\t/** Track display mode */\r\n\ttrack?: SliderProps[\"track\"];\r\n\t/** Custom styles for the Slider */\r\n\tsliderStyles?: SliderProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Callback fired when the value changes (during drag) */\r\n\tonChange?: (value: number | number[]) => void;\r\n\t/** Callback fired when the value change is committed (on mouse up) */\r\n\tonChangeCommitted?: (value: number | number[]) => void;\r\n\t/** Callback fired when slider receives focus */\r\n\tonFocus?: (event: SyntheticEvent) => void;\r\n\t/** Callback fired when slider loses focus */\r\n\tonBlur?: (event: SyntheticEvent) => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: SliderProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: SliderProps[\"slots\"];\r\n\t/** FormLabel props */\r\n\tformLabelProps?: Omit<FormLabelProps, \"children\">;\r\n}\r\n\r\nconst SliderField = forwardRef<HTMLSpanElement, ISliderFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonChangeCommitted,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\torientation = \"horizontal\",\r\n\t\t\tmin = 0,\r\n\t\t\tmax = 100,\r\n\t\t\tstep = 1,\r\n\t\t\tvalueLabelDisplay = \"auto\",\r\n\t\t\tvalueLabelFormat,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tmarks,\r\n\t\t\ttrack = \"normal\",\r\n\t\t\tsliderStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformLabelProps,\r\n\t\t\t...sliderProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLSpanElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (_event: Event, newValue: number | number[], _activeThumb: number) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle onChangeCommitted with proper typing\r\n\t\tconst handleChangeCommitted = (_event: Event | SyntheticEvent, newValue: number | number[]) => {\r\n\t\t\tif (onChangeCommitted) {\r\n\t\t\t\tonChangeCommitted(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// For vertical sliders, we need special handling\r\n\t\tconst isVertical = orientation === \"vertical\";\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth && !isVertical}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\t...formControlStyles,\r\n\t\t\t\t\t...(isVertical && {\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\talignItems: \"flex-start\",\r\n\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\twidth: \"auto\",\r\n\t\t\t\t\t}),\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tsx={formLabelStyles}\r\n\t\t\t\t\t\t{...formLabelProps}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Slider\r\n\t\t\t\t\t{...sliderProps}\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tvalue={value}\r\n\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\tonChangeCommitted={handleChangeCommitted}\r\n\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\torientation={orientation}\r\n\t\t\t\t\tmin={min}\r\n\t\t\t\t\tmax={max}\r\n\t\t\t\t\tstep={step}\r\n\t\t\t\t\tvalueLabelDisplay={valueLabelDisplay}\r\n\t\t\t\t\tvalueLabelFormat={valueLabelFormat}\r\n\t\t\t\t\tcolor={color}\r\n\t\t\t\t\tsize={size}\r\n\t\t\t\t\tmarks={marks === true ? true : marks || false}\r\n\t\t\t\t\ttrack={track}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\tslots={slots}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...sliderStyles,\r\n\t\t\t\t\t\t...(isVertical && {\r\n\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\"& .MuiSlider-track\": {\r\n\t\t\t\t\t\t\t\twidth: \"6px\",\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\"& .MuiSlider-rail\": {\r\n\t\t\t\t\t\t\t\twidth: \"6px\",\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t/>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSliderField.displayName = \"SliderField\";\r\n\r\nexport default SliderField;\r\n","import SliderField from \"../FormFields/BoxFields/SliderField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputSlider = memo(\r\n\t({ name, label, control, errors, defaultValue = 0, onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SliderField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? defaultValue}\r\n\t\t\t\t\t\t\tonChange={(value) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(value);\r\n\t\t\t\t\t\t\t\tonChange?.(value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputSlider.displayName = \"FormInputSlider\";\r\n\r\nexport default FormInputSlider;\r\n","import {\r\n\tFormControl,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tFormHelperText,\r\n\tRadio,\r\n\ttype RadioProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Radio Button Field Props\r\n * Extends MUI RadioProps with custom form field props\r\n */\r\nexport interface IRadioButtonFieldProps extends Omit<RadioProps, \"checked\" | \"onChange\" | \"name\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the radio button */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current checked state */\r\n\tvalue: boolean;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below radio button */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Radio color */\r\n\tcolor?: RadioProps[\"color\"];\r\n\t/** Radio size */\r\n\tsize?: RadioProps[\"size\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Label placement */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (checked: boolean) => void;\r\n\t/** Callback fired when radio button is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\t/** Callback fired when radio button receives focus */\r\n\tonFocus?: RadioProps[\"onFocus\"];\r\n\t/** Callback fired when radio button loses focus */\r\n\tonBlur?: RadioProps[\"onBlur\"];\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for the Radio */\r\n\tradioStyles?: RadioProps[\"sx\"];\r\n\t/** Custom styles for FormControlLabel */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: RadioProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: RadioProps[\"slots\"];\r\n\t/** FormControlLabel props */\r\n\tformControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\" | \"value\">;\r\n}\r\n\r\nconst RadioButtonField = forwardRef<HTMLButtonElement, IRadioButtonFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\tcheckedIcon,\r\n\t\t\ticon,\r\n\t\t\tradioStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformControlLabelProps,\r\n\t\t\t...radioProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLButtonElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (_event: ChangeEvent<HTMLInputElement>, checked: boolean) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(checked);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click event\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t<FormControlLabel\r\n\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t<Radio\r\n\t\t\t\t\t\t\t{...radioProps}\r\n\t\t\t\t\t\t\tchecked={value}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tonClick={handleClick}\r\n\t\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\tcheckedIcon={checkedIcon}\r\n\t\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={radioStyles}\r\n\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlabel={label}\r\n\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t\t{...formControlLabelProps}\r\n\t\t\t\t/>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nRadioButtonField.displayName = \"RadioButtonField\";\r\n\r\nexport default RadioButtonField;\r\n","import RadioButtonField from \"../FormFields/BoxFields/RadioButtonField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputRadioFields } from \"./types\";\r\n\r\nconst FormInputRadioButton = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tchecked = false,\r\n\t\tdefaultValue = false,\r\n\t\tonChange,\r\n\t\tcolor,\r\n\t\tlabelPlacement,\r\n\t\t...props\r\n\t}: IFormInputRadioFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<RadioButtonField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? false}\r\n\t\t\t\t\t\t\tonChange={(checkedValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(checkedValue);\r\n\t\t\t\t\t\t\t\tonChange?.(checkedValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputRadioButton.displayName = \"FormInputRadioButton\";\r\n\r\nexport default FormInputRadioButton;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tRadio,\r\n\ttype RadioProps,\r\n\tRadioGroup,\r\n\ttype RadioGroupProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Base option type for Radio Button Group\r\n */\r\nexport type RadioOption = {\r\n\tname: string;\r\n\tvalue: string | number;\r\n\tdisabled?: boolean;\r\n\t[key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Radio Button Group Props\r\n * Extends MUI RadioGroupProps with custom form field props\r\n */\r\nexport interface IRadioButtonGroupFieldProps\r\n\textends Omit<\r\n\t\tRadioGroupProps,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"children\" | \"onFocus\" | \"onBlur\" | \"onClick\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the radio group */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current selected value */\r\n\tvalue: string | number | null | undefined;\r\n\t/** Options array to display as radio buttons */\r\n\toptions: RadioOption[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below radio group */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Radio color */\r\n\tcolor?: RadioProps[\"color\"];\r\n\t/** Radio size */\r\n\tsize?: RadioProps[\"size\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Label placement for each radio button */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Row layout (horizontal) or column layout (vertical) */\r\n\trow?: boolean;\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for individual Radio components */\r\n\tradioStyles?: RadioProps[\"sx\"];\r\n\t/** Custom styles for FormControlLabel components */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Custom styles for RadioGroup */\r\n\tradioGroupStyles?: RadioGroupProps[\"sx\"];\r\n\t/** Custom render function for radio buttons */\r\n\trenderRadio?: (option: RadioOption, index: number) => React.ReactNode;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (value: string | number) => void;\r\n\t/** Callback fired when a radio button is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\t/** Callback fired when a radio button receives focus */\r\n\tonFocus?: RadioProps[\"onFocus\"];\r\n\t/** Callback fired when a radio button loses focus */\r\n\tonBlur?: RadioProps[\"onBlur\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: {\r\n\t\tradio?: RadioProps[\"slotProps\"];\r\n\t\tformControlLabel?: FormControlLabelProps[\"slotProps\"];\r\n\t};\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: {\r\n\t\tradio?: RadioProps[\"slots\"];\r\n\t\tformControlLabel?: FormControlLabelProps[\"slots\"];\r\n\t};\r\n\t/** FormLabel props */\r\n\tformLabelProps?: Omit<FormLabelProps, \"children\">;\r\n\t/** FormControlLabel props */\r\n\tformControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\" | \"value\">;\r\n}\r\n\r\nconst RadioButtonFieldGroup = forwardRef<HTMLDivElement, IRadioButtonGroupFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\toptions,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\trow = false,\r\n\t\t\tcheckedIcon,\r\n\t\t\ticon,\r\n\t\t\tradioStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tradioGroupStyles,\r\n\t\t\trenderRadio,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformLabelProps,\r\n\t\t\tformControlLabelProps,\r\n\t\t\t...radioGroupProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tconst newValue = event.target.value;\r\n\t\t\t// Convert to number if the value matches a numeric option\r\n\t\t\tconst numericValue = options.find((opt) => String(opt.value) === newValue)?.value;\r\n\t\t\tconst finalValue = typeof numericValue === \"number\" ? numericValue : newValue;\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(finalValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click event\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Default render function for radio buttons\r\n\t\tconst defaultRenderRadio = (option: RadioOption) => (\r\n\t\t\t<FormControlLabel\r\n\t\t\t\tkey={option.value}\r\n\t\t\t\tvalue={String(option.value)}\r\n\t\t\t\tcontrol={\r\n\t\t\t\t\t<Radio\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tdisabled={disabled || option.disabled}\r\n\t\t\t\t\t\tcheckedIcon={checkedIcon}\r\n\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\tonClick={handleClick}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tslotProps={slotProps?.radio}\r\n\t\t\t\t\t\tslots={slots?.radio}\r\n\t\t\t\t\t\tsx={radioStyles}\r\n\t\t\t\t\t/>\r\n\t\t\t\t}\r\n\t\t\t\tlabel={option.name}\r\n\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\tdisabled={disabled || option.disabled}\r\n\t\t\t\tsx={labelStyles}\r\n\t\t\t\t{...formControlLabelProps}\r\n\t\t\t\tslotProps={slotProps?.formControlLabel}\r\n\t\t\t\tslots={slots?.formControlLabel}\r\n\t\t\t/>\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\tcomponent=\"fieldset\"\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tcomponent=\"legend\"\r\n\t\t\t\t\t\tsx={formLabelStyles}\r\n\t\t\t\t\t\t{...formLabelProps}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<RadioGroup\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tvalue={value != null ? String(value) : \"\"}\r\n\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\trow={row}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={radioGroupStyles}\r\n\t\t\t\t\t{...radioGroupProps}\r\n\t\t\t\t>\r\n\t\t\t\t\t{options &&\r\n\t\t\t\t\t\tArray.isArray(options) &&\r\n\t\t\t\t\t\toptions.map((option, index) =>\r\n\t\t\t\t\t\t\trenderRadio ? renderRadio(option, index) : defaultRenderRadio(option)\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t</RadioGroup>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nRadioButtonFieldGroup.displayName = \"RadioButtonFieldGroup\";\r\n\r\nexport default RadioButtonFieldGroup;\r\n","import RadioButtonFieldGroup from \"../FormFields/BoxFields/RadioButtonFieldGroup\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputRadioButtonGroup = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => (Array.isArray(options) ? options : []), [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<RadioButtonFieldGroup\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(value) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(value);\r\n\t\t\t\t\t\t\t\tonChange?.(value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputRadioButtonGroup.displayName = \"FormInputRadioButtonGroup\";\r\n\r\nexport default FormInputRadioButtonGroup;\r\n"],"mappings":"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","names":["index_exports","__export","AutoCompleteField_default","CheckBoxField_default","CheckBoxFieldGroup_default","ColorPickerField_default","DateCalendarField_default","DatePickerField_default","FileUploadField_default","FormInputAutoComplete_default","FormInputCalender_default","FormInputCheckBox_default","FormInputCheckBoxGroup_default","FormInputColorPicker_default","FormInputDatePicker_default","FormInputFileUpload_default","FormInputMultiAutoComplete_default","FormInputMultiSelect_default","FormInputNumberField_default","FormInputOTPField_default","FormInputPasswordField_default","FormInputRadioButtonGroup_default","FormInputSearchField_default","FormInputSelect_default","FormInputRadioButton_default","FormInputSlider_default","FormInputSwitch_default","FormInputTelField_default","FormInputTextArea_default","FormInputTextField_default","FormInputTimeClock_default","FormInputTimePicker_default","NumberField_default","OTPField_default","PasswordField_default","RadioButtonField_default","RadioButtonFieldGroup_default","SearchInputField_default","SelectInputField_default","SliderField_default","SwitchField_default","TelInputField_default","TextInputField_default","TimeClockField_default","TimePickerField_default","index_default","__toCommonJS","HookFormFields_exports","__export","FormInputAutoComplete_default","FormInputCalender_default","FormInputCheckBox_default","FormInputCheckBoxGroup_default","FormInputColorPicker_default","FormInputDatePicker_default","FormInputFileUpload_default","FormInputMultiAutoComplete_default","FormInputMultiSelect_default","FormInputNumberField_default","FormInputOTPField_default","FormInputPasswordField_default","FormInputRadioButtonGroup_default","FormInputSearchField_default","FormInputSelect_default","FormInputRadioButton_default","FormInputSlider_default","FormInputSwitch_default","FormInputTelField_default","FormInputTextArea_default","FormInputTextField_default","FormInputTimeClock_default","FormInputTimePicker_default","import_material","import_react","import_jsx_runtime","TextInputField","_a","ref","_b","name","label","value","onChange","onFocus","onBlur","onEnterPress","error","helperText","disabled","placeholder","variant","size","color","fullWidth","required","multiline","rows","minRows","maxRows","resize","maxLength","minLength","type","autoComplete","startAdornment","endAdornment","inputStyles","formControlStyles","slotProps","slots","textFieldProps","__objRest","handleKeyDown","event","inputProps","__spreadValues","startAdornmentElement","endAdornmentElement","finalSlotProps","__spreadProps","finalInputStyles","displayHelperText","TextInputField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputTextField","_a","_b","name","label","control","errors","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","TextInputField_default","__spreadProps","__spreadValues","e","FormInputTextField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputTextArea","_a","_b","name","label","control","errors","rows","minRows","maxRows","resize","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","TextInputField_default","__spreadProps","__spreadValues","e","FormInputTextArea_default","import_icons_material","import_material","import_react","import_jsx_runtime","calculatePasswordStrength","password","strength","getPasswordStrengthColor","PasswordField","_a","ref","_b","name","label","value","onChange","onFocus","onBlur","onVisibilityToggle","error","helperText","disabled","placeholder","variant","size","color","fullWidth","required","showPasswordStrength","minLength","maxLength","defaultShowPassword","visibilityIcon","visibilityOffIcon","iconButtonProps","getPasswordStrength","inputStyles","formControlStyles","slotProps","slots","textFieldProps","__objRest","showPassword","setShowPassword","togglePasswordVisibility","prev","newVisibility","passwordStrength","getStrengthIndicator","strengthColor","strengthText","handleChange","event","newValue","endAdornmentElement","__spreadProps","__spreadValues","e","finalSlotProps","displayHelperText","PasswordField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputPasswordField","_a","_b","name","label","control","errors","size","defaultValue","onChange","props","__objRest","error","helperText","field","sizeProp","restProps","PasswordField_default","__spreadProps","__spreadValues","e","FormInputPasswordField_default","import_material","import_react","import_jsx_runtime","extractDigits","value","formatByPattern","digits","pattern","formatted","digitIndex","i","generatePlaceholderFromPattern","formatPhoneNumber","numbers","formatCreditCard","_a","formatCurrency","allowDecimals","parts","formatSSN","formatZipCode","formatPercentage","NumberField","ref","_b","name","label","onChange","onFocus","onBlur","onEnterPress","error","helperText","disabled","placeholder","variant","size","color","fullWidth","required","customPattern","customFormatter","min","max","step","decimalPlaces","startAdornment","endAdornment","inputStyles","formControlStyles","slotProps","slots","textFieldProps","__objRest","displayValue","setDisplayValue","isPatternString","activePatternString","activePatternType","formatValue","inputValue","prev","isValidInput","key","maxDigits","testValue","handleChange","event","formattedValue","digitsOnly","syntheticEvent","__spreadProps","__spreadValues","handlePaste","pastedText","limitedDigits","handleKeyDown","input","currentValue","inputProps","startAdornmentElement","endAdornmentElement","finalSlotProps","inputType","displayPlaceholder","displayHelperText","NumberField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputNumberField","_a","_b","name","label","control","errors","pattern","min","max","step","allowDecimals","decimalPlaces","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","NumberField_default","__spreadProps","__spreadValues","e","FormInputNumberField_default","import_material","import_react","import_jsx_runtime","extractDigits","value","formatByPattern","digits","pattern","formatted","digitIndex","i","generatePlaceholder","TeliField","_a","ref","_b","name","label","onChange","onFocus","onBlur","onEnterPress","error","helperText","disabled","placeholder","variant","size","color","fullWidth","required","maxLength","countryCode","showCountryCode","startAdornment","endAdornment","inputStyles","formControlStyles","countryCodeStyles","slotProps","slots","textFieldProps","__objRest","displayValue","setDisplayValue","inputRef","calculatedMaxLength","prev","cursorPosition","handleChange","event","inputValue","limitedDigits","formattedValue","syntheticEvent","__spreadProps","__spreadValues","handlePaste","pastedText","handleKeyDown","key","isNumber","isAllowedKey","inputProps","finalStartAdornment","endAdornmentElement","finalSlotProps","displayPlaceholder","displayHelperText","TelInputField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputTelField","_a","_b","name","label","control","errors","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","TelInputField_default","__spreadProps","__spreadValues","e","FormInputTelField_default","import_icons_material","import_material","import_react","import_jsx_runtime","SearchField","_a","ref","_b","name","label","value","onChange","onFocus","onBlur","onSearch","onClear","onEnterPress","error","helperText","disabled","placeholder","variant","size","color","fullWidth","required","showClearButton","showSearchButton","clearIcon","searchIcon","clearButtonProps","searchButtonProps","enableDebounce","debounceDelay","enableThrottle","throttleDelay","inputStyles","formControlStyles","slotProps","slots","textFieldProps","__objRest","debounceTimerRef","throttleTimerRef","lastThrottleCallRef","debouncedSearch","searchVal","throttledSearch","now","timeSinceLastCall","handleChange","event","newValue","handleClear","handleSearch","handleKeyDown","endAdornment","__spreadProps","__spreadValues","displayHelperText","SearchInputField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputSearchField","_a","_b","name","label","control","errors","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","SearchInputField_default","__spreadProps","__spreadValues","e","FormInputSearchField_default","import_material","import_react","import_jsx_runtime","OTPField","_a","ref","_b","name","label","value","onChange","onComplete","onFocus","onBlur","onEnterPress","error","helperText","disabled","variant","size","color","fullWidth","required","length","spacing","autoFocus","autoSubmit","containerStyles","inputStyles","formControlStyles","slotProps","slots","textFieldProps","__objRest","otpValues","setOtpValues","inputRefs","lastSentValueRef","isInternalUpdateRef","otpValuesRef","inputSessionActiveRef","inputSessionTimeoutRef","currentOtpString","currentDigits","incomingDigits","values","paddedValues","handleChange","index","event","inputValue","updateValue","lastChar","newValue","shouldAutoFocusNext","newOtpValues","otpString","val","handleKeyDown","_c","key","handlePaste","digits","startIndex","i","nextEmptyIndex","focusIndex","handleFocus","_index","handleBlur","__spreadValues","otpValue","el","e","__spreadProps","OTPField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputOTPField","_a","_b","name","label","control","errors","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","OTPField_default","__spreadProps","__spreadValues","value","FormInputOTPField_default","import_material","import_react","import_jsx_runtime","SelectInputField","_a","ref","_b","name","label","value","onChange","onOpen","onClose","options","error","helperText","disabled","variant","size","color","fullWidth","required","multiple","icon","renderValue","renderMenuItem","menuItemStyles","selectStyles","formControlStyles","labelStyles","slotProps","slots","displayEmpty","autoWidth","native","MenuProps","selectProps","__objRest","defaultRenderValue","selected","val","option","opt","defaultRenderMenuItem","index","menuItemSx","handleChange","event","child","labelId","selectId","__spreadProps","__spreadValues","SelectInputField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputSelect","_a","_b","name","label","control","errors","options","defaultValue","onChange","props","__objRest","error","helperText","memoizedOptions","field","size","restProps","SelectInputField_default","__spreadProps","__spreadValues","e","FormInputSelect_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputMultiSelect","_a","_b","name","label","control","errors","options","defaultValue","onChange","props","__objRest","error","helperText","memoizedOptions","field","size","restProps","fieldValue","SelectInputField_default","__spreadProps","__spreadValues","e","FormInputMultiSelect_default","import_material","import_react","import_jsx_runtime","import_react","AutoCompleteField","_a","ref","_b","name","label","value","onChange","onInputChange","onOpen","onClose","options","error","helperText","disabled","placeholder","variant","size","color","fullWidth","required","getOptionLabel","isOptionEqualToValue","renderOption","popupIcon","inputStyles","autocompleteStyles","formControlStyles","loading","loadingText","noOptionsText","filterOptions","autoHighlight","autoSelect","disablePortal","disableListWrap","slotProps","slots","autocompleteProps","__objRest","defaultGetOptionLabel","option","defaultIsOptionEqualToValue","defaultRenderOption","props","__spreadProps","__spreadValues","handleChange","event","newValue","reason","displayHelperText","params","AutoCompleteField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputAutoComplete","_a","_b","name","label","control","errors","options","disabled","placeholder","defaultValue","onChange","props","__objRest","error","helperText","memoizedOptions","field","value","onBlur","size","restProps","AutoCompleteField_default","__spreadProps","__spreadValues","_","newValue","FormInputAutoComplete_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputMultiAutoComplete","_a","_b","name","label","control","errors","options","disabled","placeholder","defaultValue","onChange","props","__objRest","error","helperText","memoizedOptions","field","value","onBlur","size","restProps","fieldValue","AutoCompleteField_default","__spreadProps","__spreadValues","_","newValue","FormInputMultiAutoComplete_default","import_material","import_react","import_jsx_runtime","isValidHex","color","normalizeHex","hex","char","ColorPickerField","_a","ref","_b","name","label","value","onChange","onFocus","onBlur","onEnterPress","error","helperText","disabled","placeholder","variant","size","fullWidth","required","format","showPreview","showNativeInput","showPopoverPicker","presetColors","showPresetColors","previewStyles","formControlStyles","inputStyles","slotProps","slots","textFieldProps","__objRest","internalValue","setInternalValue","colorInputRef","popoverAnchorRef","normalizedValue","handleChange","event","newValue","handleColorInputChange","handlePreviewClick","handleKeyDown","previewSwatch","__spreadValues","finalSlotProps","__spreadProps","displayHelperText","ColorPickerField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputColorPicker","_a","_b","name","label","control","errors","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","ColorPickerField_default","__spreadProps","__spreadValues","color","FormInputColorPicker_default","import_material","import_icons_material","import_react","import_jsx_runtime","FileUploadField","_a","ref","_b","name","label","value","onChange","onFileSelect","onFileRemove","onValidationError","onDrop","error","helperText","disabled","accept","multiple","maxSize","minSize","allowedTypes","showPreview","enableDragDrop","placeholder","variant","size","color","fullWidth","required","buttonText","buttonVariant","buttonColor","buttonSize","uploadIcon","CloudUploadIcon","inputStyles","buttonStyles","formControlStyles","containerStyles","slotProps","slots","textFieldProps","__objRest","internalRef","isDragging","setIsDragging","setDragCounter","fileInputRef","getFileName","validateFile","file","formatFileSize","fileType","getFileExtension","type","bytes","k","sizes","i","filename","handleFileChange","event","files","fileArray","validFiles","hasError","validationError","result","handleButtonClick","handleFileRemove","handleDragEnter","e","prev","handleDragLeave","newCounter","handleDragOver","handleDrop","fileName","displayValue","__spreadProps","__spreadValues","FileUploadField_default","import_react","import_react_hook_form","import_jsx_runtime","FormInputFileUpload","_a","_b","name","label","control","errors","size","defaultValue","onChange","props","__objRest","fileRef","error","helperText","field","FileUploadField_default","__spreadProps","__spreadValues","files","FormInputFileUpload_default","import_material","import_icons_material","import_x_date_pickers","import_AdapterDateFns","import_react","import_jsx_runtime","DatePickerField","_a","ref","_b","name","label","value","defaultValue","onChange","onFocus","onBlur","onViewChange","onMonthChange","onYearChange","onOpen","onClose","error","helperText","disabled","fullWidth","required","minDate","maxDate","shouldDisableDate","shouldDisableMonth","shouldDisableYear","size","variant","color","placeholder","readOnly","showClearButton","disablePast","disableFuture","referenceDate","view","format","openTo","pickerStyles","formControlStyles","formLabelStyles","containerStyles","textFieldStyles","slotProps","slots","dateAdapter","reduceAnimations","autoFocus","datePickerProps","__objRest","inputRef","handleChange","newValue","handleClear","defaultPlaceholder","mergedSlotProps","__spreadProps","__spreadValues","ClearIcon","DatePickerField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputDatePicker","_a","_b","name","label","control","errors","size","readOnly","shouldDisableDate","disabled","placeholder","defaultValue","onChange","props","__objRest","error","helperText","field","views","ampm","ampmInClock","timezone","restProps","DatePickerField_default","__spreadProps","__spreadValues","newValue","FormInputDatePicker_default","import_material","import_icons_material","import_x_date_pickers","import_AdapterDateFns","import_react","import_jsx_runtime","TimePickerField","_a","ref","_b","name","label","value","defaultValue","onChange","onFocus","onBlur","onViewChange","onOpen","onClose","error","helperText","disabled","fullWidth","required","minTime","maxTime","shouldDisableTime","size","variant","color","placeholder","readOnly","showClearButton","disablePast","disableFuture","ampm","views","view","openTo","format","pickerStyles","formControlStyles","formLabelStyles","containerStyles","textFieldStyles","slotProps","slots","dateAdapter","autoFocus","timePickerProps","__objRest","inputRef","handleChange","newValue","handleClear","defaultPlaceholder","mergedSlotProps","__spreadProps","__spreadValues","ClearIcon","TimePickerField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputTimePicker","_a","_b","name","label","control","errors","ampm","timezone","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","TimePickerField_default","__spreadProps","__spreadValues","newValue","FormInputTimePicker_default","import_material","import_x_date_pickers","import_AdapterDateFns","import_LocalizationProvider","import_react","import_jsx_runtime","TimeClockField","_a","ref","_b","name","label","value","defaultValue","onChange","error","helperText","disabled","fullWidth","required","views","ampmInClock","ampm","disablePast","disableFuture","minTime","maxTime","shouldDisableTime","clockStyles","formControlStyles","formLabelStyles","containerStyles","buttonsStackStyles","buttonStyles","activeButtonStyles","showViewButtons","initialView","controlledView","controlledOnViewChange","slotProps","slots","dateAdapter","autoFocus","timeClockProps","__objRest","internalView","setInternalView","view","setView","handleChange","newValue","handleViewChange","newView","__spreadValues","v","__spreadProps","TimeClockField_default","import_material","import_react_hook_form","import_react","import_jsx_runtime","FormInputTimeClock","_a","_b","name","label","control","errors","readOnly","disabled","ampm","views","ampmInClock","disablePast","defaultValue","onChange","props","__objRest","error","errorMessage","hasError","ampmValue","t","field","TimeClockField_default","__spreadProps","__spreadValues","newValue","FormInputTimeClock_default","import_material","import_AdapterDateFns","import_DateCalendar","import_LocalizationProvider","import_react","import_jsx_runtime","DateCalendarField","_a","ref","_b","name","label","value","defaultValue","onChange","onViewChange","onMonthChange","onYearChange","error","helperText","disabled","fullWidth","required","minDate","maxDate","shouldDisableDate","shouldDisableMonth","shouldDisableYear","calendarStyles","formControlStyles","formLabelStyles","containerStyles","slotProps","slots","dateAdapter","showDaysOutsideCurrentMonth","disablePast","disableFuture","referenceDate","view","dateCalendarProps","__objRest","handleChange","newValue","__spreadValues","__spreadProps","DateCalendarField_default","import_material","import_react_hook_form","import_react","import_jsx_runtime","FormInputCalendar","_a","_b","name","label","control","errors","readOnly","disabled","defaultValue","onChange","props","__objRest","error","errorMessage","hasError","t","field","views","restProps","DateCalendarField_default","__spreadProps","__spreadValues","newValue","FormInputCalender_default","import_material","import_react","import_jsx_runtime","CheckboxField","_a","ref","_b","name","label","value","onChange","onClick","onFocus","onBlur","error","helperText","disabled","color","size","fullWidth","required","labelPlacement","checkedIcon","icon","indeterminate","checkboxStyles","labelStyles","formControlStyles","slotProps","slots","checkboxProps","__objRest","handleChange","_event","checked","handleClick","event","__spreadProps","__spreadValues","CheckBoxField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputCheckBox","_a","_b","name","label","control","errors","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","CheckBoxField_default","__spreadProps","__spreadValues","checked","FormInputCheckBox_default","import_material","import_react","import_jsx_runtime","CheckboxFieldGroup","_a","ref","_b","name","label","value","options","onChange","onFocus","onBlur","onClick","error","helperText","disabled","fullWidth","required","color","size","labelPlacement","row","checkedIcon","icon","checkboxStyles","labelStyles","formControlStyles","formLabelStyles","renderCheckbox","slotProps","slots","formLabelProps","formControlLabelProps","formControlProps","__objRest","handleChange","optionValue","event","isChecked","newValue","val","handleFocus","handleBlur","handleClick","defaultRenderCheckbox","option","index","handleChangeFn","__spreadValues","__spreadProps","changeHandler","CheckBoxFieldGroup_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputCheckBoxGroup","_a","_b","name","label","control","errors","options","defaultValue","onChange","row","color","labelPlacement","props","__objRest","checkboxOptions","option","error","helperText","field","size","restProps","fieldValue","CheckBoxFieldGroup_default","__spreadProps","__spreadValues","value","FormInputCheckBoxGroup_default","import_material","import_react","import_jsx_runtime","SwitchField","_a","ref","_b","name","label","value","onChange","onClick","onFocus","onBlur","error","helperText","disabled","color","size","fullWidth","required","labelPlacement","edge","switchStyles","labelStyles","formControlStyles","slotProps","slots","formControlLabelProps","switchProps","__objRest","handleChange","_event","checked","handleClick","event","switchComponent","__spreadProps","__spreadValues","SwitchField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputSwitch","_a","_b","name","label","control","errors","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","SwitchField_default","__spreadProps","__spreadValues","checked","FormInputSwitch_default","import_material","import_react","import_jsx_runtime","SliderField","_a","ref","_b","name","label","value","onChange","onChangeCommitted","onFocus","onBlur","error","helperText","disabled","fullWidth","required","orientation","min","max","step","valueLabelDisplay","valueLabelFormat","color","size","marks","track","sliderStyles","formControlStyles","formLabelStyles","slotProps","slots","formLabelProps","sliderProps","__objRest","handleChange","_event","newValue","_activeThumb","handleChangeCommitted","isVertical","__spreadValues","__spreadProps","SliderField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputSlider","_a","_b","name","label","control","errors","defaultValue","onChange","props","__objRest","error","helperText","field","size","restProps","SliderField_default","__spreadProps","__spreadValues","value","FormInputSlider_default","import_material","import_react","import_jsx_runtime","RadioButtonField","_a","ref","_b","name","label","value","onChange","onClick","onFocus","onBlur","error","helperText","disabled","color","size","fullWidth","required","labelPlacement","checkedIcon","icon","radioStyles","labelStyles","formControlStyles","slotProps","slots","formControlLabelProps","radioProps","__objRest","handleChange","_event","checked","handleClick","event","__spreadValues","__spreadProps","RadioButtonField_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputRadioButton","_a","_b","name","label","control","errors","checked","defaultValue","onChange","color","labelPlacement","props","__objRest","error","helperText","field","size","restProps","RadioButtonField_default","__spreadProps","__spreadValues","checkedValue","FormInputRadioButton_default","import_material","import_react","import_jsx_runtime","RadioButtonFieldGroup","_a","ref","_b","name","label","value","onChange","onClick","onFocus","onBlur","options","error","helperText","disabled","color","size","fullWidth","required","labelPlacement","row","checkedIcon","icon","radioStyles","labelStyles","formControlStyles","formLabelStyles","radioGroupStyles","renderRadio","slotProps","slots","formLabelProps","formControlLabelProps","radioGroupProps","__objRest","handleChange","event","newValue","numericValue","opt","handleClick","defaultRenderRadio","option","__spreadProps","__spreadValues","index","RadioButtonFieldGroup_default","import_react_hook_form","import_react","import_jsx_runtime","FormInputRadioButtonGroup","_a","_b","name","label","control","errors","options","defaultValue","onChange","props","__objRest","error","helperText","memoizedOptions","field","size","restProps","RadioButtonFieldGroup_default","__spreadProps","__spreadValues","value","FormInputRadioButtonGroup_default","FormFields","__spreadProps","__spreadValues","HookFormFields_exports","TextInputField_default","PasswordField_default","NumberField_default","TelInputField_default","SearchInputField_default","OTPField_default","SelectInputField_default","AutoCompleteField_default","ColorPickerField_default","FileUploadField_default","DatePickerField_default","TimePickerField_default","TimeClockField_default","DateCalendarField_default","CheckBoxField_default","CheckBoxFieldGroup_default","RadioButtonField_default","RadioButtonFieldGroup_default","SwitchField_default","SliderField_default","index_default"]}
|
|
1
|
+
{"version":3,"sources":["../lib/index.ts","../lib/pkg/HookFormFields/index.ts","../lib/pkg/FormFields/TextFields/TextInputField.tsx","../lib/pkg/HookFormFields/FormInputTextField.tsx","../lib/pkg/HookFormFields/FormInputTextArea.tsx","../lib/pkg/FormFields/TextFields/PasswordField.tsx","../lib/pkg/HookFormFields/FormInputPasswordField.tsx","../lib/pkg/FormFields/TextFields/NumberField.tsx","../lib/pkg/HookFormFields/FormInputNumberField.tsx","../lib/pkg/FormFields/TextFields/TelInputField.tsx","../lib/pkg/HookFormFields/FormInputTelField.tsx","../lib/pkg/FormFields/TextFields/SearchInputField.tsx","../lib/pkg/HookFormFields/FormInputSearchField.tsx","../lib/pkg/FormFields/TextFields/OTPField.tsx","../lib/pkg/HookFormFields/FormInputOTPField.tsx","../lib/pkg/FormFields/DropdownFields/SelectInputField.tsx","../lib/pkg/HookFormFields/FormInputSelect.tsx","../lib/pkg/HookFormFields/FormInputMultiSelect.tsx","../lib/pkg/FormFields/DropdownFields/AutoCompleteField.tsx","../lib/pkg/HookFormFields/FormInputAutoComplete.tsx","../lib/pkg/HookFormFields/FormInputMultiAutoComplete.tsx","../lib/pkg/FormFields/DropdownFields/ColorPickerField.tsx","../lib/pkg/HookFormFields/FormInputColorPicker.tsx","../lib/pkg/FormFields/DropdownFields/FileUploadField.tsx","../lib/pkg/HookFormFields/FormInputFileUpload.tsx","../lib/pkg/FormFields/DateFields/DatePickerField.tsx","../lib/pkg/HookFormFields/FormInputDatePicker.tsx","../lib/pkg/FormFields/DateFields/TimePickerField.tsx","../lib/pkg/HookFormFields/FormInputTimePicker.tsx","../lib/pkg/FormFields/DateFields/TimeClockField.tsx","../lib/pkg/HookFormFields/FormInputTimeClock.tsx","../lib/pkg/FormFields/DateFields/DateCalendarField.tsx","../lib/pkg/HookFormFields/FormInputCalender.tsx","../lib/pkg/FormFields/BoxFields/CheckBoxField.tsx","../lib/pkg/HookFormFields/FormInputCheckBox.tsx","../lib/pkg/FormFields/BoxFields/CheckBoxFieldGroup.tsx","../lib/pkg/HookFormFields/FormInputCheckBoxGroup.tsx","../lib/pkg/FormFields/BoxFields/SwitchField.tsx","../lib/pkg/HookFormFields/FormInputSwitch.tsx","../lib/pkg/FormFields/BoxFields/SliderField.tsx","../lib/pkg/HookFormFields/FormInputSlider.tsx","../lib/pkg/FormFields/BoxFields/RadioButtonField.tsx","../lib/pkg/HookFormFields/FormInputRadioButton.tsx","../lib/pkg/FormFields/BoxFields/RadioButtonFieldGroup.tsx","../lib/pkg/HookFormFields/FormInputRadioButtonGroup.tsx"],"sourcesContent":["// Export all HookFormFields\r\nexport * from \"./pkg/HookFormFields\";\r\n\r\n// Export all FormFields\r\nexport { default as TextInputField } from \"./pkg/FormFields/TextFields/TextInputField\";\r\nexport { default as PasswordField } from \"./pkg/FormFields/TextFields/PasswordField\";\r\nexport { default as NumberField } from \"./pkg/FormFields/TextFields/NumberField\";\r\nexport { default as TelInputField } from \"./pkg/FormFields/TextFields/TelInputField\";\r\nexport { default as SearchInputField } from \"./pkg/FormFields/TextFields/SearchInputField\";\r\nexport { default as OTPField } from \"./pkg/FormFields/TextFields/OTPField\";\r\n\r\nexport { default as SelectInputField } from \"./pkg/FormFields/DropdownFields/SelectInputField\";\r\nexport { default as AutoCompleteField } from \"./pkg/FormFields/DropdownFields/AutoCompleteField\";\r\nexport { default as ColorPickerField } from \"./pkg/FormFields/DropdownFields/ColorPickerField\";\r\nexport { default as FileUploadField } from \"./pkg/FormFields/DropdownFields/FileUploadField\";\r\n\r\nexport { default as DatePickerField } from \"./pkg/FormFields/DateFields/DatePickerField\";\r\nexport { default as TimePickerField } from \"./pkg/FormFields/DateFields/TimePickerField\";\r\nexport { default as TimeClockField } from \"./pkg/FormFields/DateFields/TimeClockField\";\r\nexport { default as DateCalendarField } from \"./pkg/FormFields/DateFields/DateCalendarField\";\r\n\r\nexport { default as CheckBoxField } from \"./pkg/FormFields/BoxFields/CheckBoxField\";\r\nexport { default as CheckBoxFieldGroup } from \"./pkg/FormFields/BoxFields/CheckBoxFieldGroup\";\r\nexport { default as RadioButtonField } from \"./pkg/FormFields/BoxFields/RadioButtonField\";\r\nexport { default as RadioButtonFieldGroup } from \"./pkg/FormFields/BoxFields/RadioButtonFieldGroup\";\r\nexport { default as SwitchField } from \"./pkg/FormFields/BoxFields/SwitchField\";\r\nexport { default as SliderField } from \"./pkg/FormFields/BoxFields/SliderField\";\r\n\r\n// Default export with all exports\r\nimport * as HookFormFields from \"./pkg/HookFormFields\";\r\nimport TextInputField from \"./pkg/FormFields/TextFields/TextInputField\";\r\nimport PasswordField from \"./pkg/FormFields/TextFields/PasswordField\";\r\nimport NumberField from \"./pkg/FormFields/TextFields/NumberField\";\r\nimport TelInputField from \"./pkg/FormFields/TextFields/TelInputField\";\r\nimport SearchInputField from \"./pkg/FormFields/TextFields/SearchInputField\";\r\nimport OTPField from \"./pkg/FormFields/TextFields/OTPField\";\r\nimport SelectInputField from \"./pkg/FormFields/DropdownFields/SelectInputField\";\r\nimport AutoCompleteField from \"./pkg/FormFields/DropdownFields/AutoCompleteField\";\r\nimport ColorPickerField from \"./pkg/FormFields/DropdownFields/ColorPickerField\";\r\nimport FileUploadField from \"./pkg/FormFields/DropdownFields/FileUploadField\";\r\nimport DatePickerField from \"./pkg/FormFields/DateFields/DatePickerField\";\r\nimport TimePickerField from \"./pkg/FormFields/DateFields/TimePickerField\";\r\nimport TimeClockField from \"./pkg/FormFields/DateFields/TimeClockField\";\r\nimport DateCalendarField from \"./pkg/FormFields/DateFields/DateCalendarField\";\r\nimport CheckBoxField from \"./pkg/FormFields/BoxFields/CheckBoxField\";\r\nimport CheckBoxFieldGroup from \"./pkg/FormFields/BoxFields/CheckBoxFieldGroup\";\r\nimport RadioButtonField from \"./pkg/FormFields/BoxFields/RadioButtonField\";\r\nimport RadioButtonFieldGroup from \"./pkg/FormFields/BoxFields/RadioButtonFieldGroup\";\r\nimport SwitchField from \"./pkg/FormFields/BoxFields/SwitchField\";\r\nimport SliderField from \"./pkg/FormFields/BoxFields/SliderField\";\r\n\r\nconst FormFields = {\r\n\t// HookFormFields\r\n\t...HookFormFields,\r\n\t// FormFields - Text\r\n\tTextInputField,\r\n\tPasswordField,\r\n\tNumberField,\r\n\tTelInputField,\r\n\tSearchInputField,\r\n\tOTPField,\r\n\t// FormFields - Dropdown\r\n\tSelectInputField,\r\n\tAutoCompleteField,\r\n\tColorPickerField,\r\n\tFileUploadField,\r\n\t// FormFields - Date/Time\r\n\tDatePickerField,\r\n\tTimePickerField,\r\n\tTimeClockField,\r\n\tDateCalendarField,\r\n\t// FormFields - Box\r\n\tCheckBoxField,\r\n\tCheckBoxFieldGroup,\r\n\tRadioButtonField,\r\n\tRadioButtonFieldGroup,\r\n\tSwitchField,\r\n\tSliderField,\r\n};\r\n\r\nexport default FormFields;\r\n","// Text inputs\r\nexport { default as FormInputTextField } from \"./FormInputTextField\";\r\nexport { default as FormInputTextArea } from \"./FormInputTextArea\";\r\nexport { default as FormInputPasswordField } from \"./FormInputPasswordField\";\r\nexport { default as FormInputNumberField } from \"./FormInputNumberField\";\r\nexport { default as FormInputTelField } from \"./FormInputTelField\";\r\nexport { default as FormInputSearchField } from \"./FormInputSearchField\";\r\nexport { default as FormInputOTPField } from \"./FormInputOTPField\";\r\n\r\n// Dropdown inputs\r\nexport { default as FormInputSelect } from \"./FormInputSelect\";\r\nexport { default as FormInputMultiSelect } from \"./FormInputMultiSelect\";\r\nexport { default as FormInputAutoComplete } from \"./FormInputAutoComplete\";\r\nexport { default as FormInputMultiAutoComplete } from \"./FormInputMultiAutoComplete\";\r\nexport { default as FormInputColorPicker } from \"./FormInputColorPicker\";\r\nexport { default as FormInputFileUpload } from \"./FormInputFileUpload\";\r\n\r\n// Date/Time inputs\r\nexport { default as FormInputDatePicker } from \"./FormInputDatePicker\";\r\nexport { default as FormInputTimePicker } from \"./FormInputTimePicker\";\r\nexport { default as FormInputTimeClock } from \"./FormInputTimeClock\";\r\nexport { default as FormInputCalendar } from \"./FormInputCalender\";\r\n\r\n// Box inputs\r\nexport { default as FormInputCheckBox } from \"./FormInputCheckBox\";\r\nexport { default as FormInputCheckBoxGroup } from \"./FormInputCheckBoxGroup\";\r\nexport { default as FormInputSwitch } from \"./FormInputSwitch\";\r\nexport { default as FormInputSlider } from \"./FormInputSlider\";\r\nexport { default as FormInputSingleRadio } from \"./FormInputRadioButton\";\r\nexport { default as FormInputRadioButtonGroup } from \"./FormInputRadioButtonGroup\";\r\n\r\n// Export types\r\nexport type {\r\n IFormInputFields,\r\n IFormInputFieldsWithOptions,\r\n IFormInputDateFields,\r\n IFormInputNumberFields,\r\n IFormInputTextAreaFields,\r\n IFormInputRadioFields,\r\n IFormInputCheckBoxGroupFields,\r\n Option,\r\n} from \"./types\";\r\n","import { FormControl, InputAdornment, TextField, type TextFieldProps } from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, memo, useCallback, useMemo } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Resize options for textarea\r\n */\r\nexport type ResizeOption = \"none\" | \"both\" | \"horizontal\" | \"vertical\";\r\n\r\n/**\r\n * Extended Text Input Field Props\r\n * Extends MUI TextFieldProps with custom text field props\r\n */\r\nexport interface ITextInputFieldProps\r\n\textends Omit<\r\n\t\tTextFieldProps,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\" | \"multiline\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the text field */\r\n\tlabel?: string;\r\n\t/** Current text value */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Whether to enable multiline input (textarea) */\r\n\tmultiline?: boolean;\r\n\t/** Number of rows for multiline input */\r\n\trows?: number;\r\n\t/** Minimum number of rows for multiline input */\r\n\tminRows?: number;\r\n\t/** Maximum number of rows for multiline input */\r\n\tmaxRows?: number;\r\n\t/** Resize option for textarea (none, both, horizontal, vertical) */\r\n\tresize?: ResizeOption;\r\n\t/** Maximum length of input */\r\n\tmaxLength?: number;\r\n\t/** Minimum length of input */\r\n\tminLength?: number;\r\n\t/** Input type (text, email, number, tel, url, etc.) */\r\n\ttype?: string;\r\n\t/** Auto complete attribute */\r\n\tautoComplete?: string;\r\n\t/** Start adornment (icon or element before input) */\r\n\tstartAdornment?: React.ReactNode;\r\n\t/** End adornment (icon or element after input) */\r\n\tendAdornment?: React.ReactNode;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst TextInputField = memo(\r\n\tforwardRef<HTMLDivElement, ITextInputFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tmultiline = false,\r\n\t\t\t\trows,\r\n\t\t\t\tminRows,\r\n\t\t\t\tmaxRows,\r\n\t\t\t\tresize = \"both\",\r\n\t\t\t\tmaxLength,\r\n\t\t\t\tminLength,\r\n\t\t\t\ttype = \"text\",\r\n\t\t\t\tautoComplete = \"off\",\r\n\t\t\t\tstartAdornment,\r\n\t\t\t\tendAdornment,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\t// Handle Enter key press\r\n\t\t\tconst handleKeyDown = useCallback(\r\n\t\t\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\t\tif (event.key === \"Enter\" && !multiline && onEnterPress) {\r\n\t\t\t\t\t\tonEnterPress(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Call original onKeyDown if provided\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[multiline, onEnterPress, value, textFieldProps.onKeyDown]\r\n\t\t\t);\r\n\r\n\t\t\t// Build input props\r\n\t\t\tconst inputProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\tmaxLength,\r\n\t\t\t\t\tminLength,\r\n\t\t\t\t\t...((textFieldProps as any).inputProps || {}),\r\n\t\t\t\t}),\r\n\t\t\t\t[maxLength, minLength, textFieldProps]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize adornments\r\n\t\t\tconst startAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tstartAdornment ?\r\n\t\t\t\t\t\t<InputAdornment position=\"start\">{startAdornment}</InputAdornment>\r\n\t\t\t\t\t:\tundefined,\r\n\t\t\t\t[startAdornment]\r\n\t\t\t);\r\n\r\n\t\t\tconst endAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tendAdornment ? <InputAdornment position=\"end\">{endAdornment}</InputAdornment> : undefined,\r\n\t\t\t\t[endAdornment]\r\n\t\t\t);\r\n\r\n\t\t\t// Build slotProps for MUI v7\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\tinputProps,\r\n\t\t\t\t\t\t...(startAdornmentElement && {\r\n\t\t\t\t\t\t\tstartAdornment: startAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t...(endAdornmentElement && {\r\n\t\t\t\t\t\t\tendAdornment: endAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, inputProps, startAdornmentElement, endAdornmentElement]\r\n\t\t\t);\r\n\r\n\t\t\t// Build sx styles with resize for textarea\r\n\t\t\tconst finalInputStyles = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tmultiline ?\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t...inputStyles,\r\n\t\t\t\t\t\t\t\"& textarea\": {\r\n\t\t\t\t\t\t\t\tresize: resize,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t:\tinputStyles,\r\n\t\t\t\t[multiline, inputStyles, resize]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\tonChange={onChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tmultiline={multiline}\r\n\t\t\t\t\t\trows={rows}\r\n\t\t\t\t\t\tminRows={minRows}\r\n\t\t\t\t\t\tmaxRows={maxRows}\r\n\t\t\t\t\t\ttype={multiline ? undefined : type}\r\n\t\t\t\t\t\tautoComplete={autoComplete}\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={finalInputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nTextInputField.displayName = \"TextInputField\";\r\n\r\nexport default TextInputField;\r\n","import TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputTextField = memo(\r\n\t({ name, label, control, errors, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<TextInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTextField.displayName = \"FormInputTextField\";\r\n\r\nexport default FormInputTextField;\r\n","import TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputTextAreaFields } from \"./types\";\r\n\r\nconst FormInputTextArea = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\trows,\r\n\t\tminRows,\r\n\t\tmaxRows,\r\n\t\tresize,\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputTextAreaFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<TextInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tmultiline\r\n\t\t\t\t\t\t\trows={rows}\r\n\t\t\t\t\t\t\tminRows={minRows}\r\n\t\t\t\t\t\t\tmaxRows={maxRows}\r\n\t\t\t\t\t\t\tresize={resize}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTextArea.displayName = \"FormInputTextArea\";\r\n\r\nexport default FormInputTextArea;\r\n","import { Visibility, VisibilityOff } from \"@mui/icons-material\";\r\nimport {\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tIconButton,\r\n\ttype IconButtonProps,\r\n\tInputAdornment,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, useState, memo, useCallback, useMemo } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Password strength level\r\n */\r\nexport type PasswordStrength = \"weak\" | \"medium\" | \"strong\" | \"very-strong\";\r\n\r\n/**\r\n * Extended Password Field Props\r\n * Extends MUI TextFieldProps with custom password field props\r\n */\r\nexport interface IPasswordFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the password field */\r\n\tlabel?: string;\r\n\t/** Current password value */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Whether to show password strength indicator */\r\n\tshowPasswordStrength?: boolean;\r\n\t/** Minimum password length */\r\n\tminLength?: number;\r\n\t/** Maximum password length */\r\n\tmaxLength?: number;\r\n\t/** Whether to show password by default */\r\n\tdefaultShowPassword?: boolean;\r\n\t/** Custom visibility toggle icon (when password is visible) */\r\n\tvisibilityIcon?: React.ReactNode;\r\n\t/** Custom visibility off icon (when password is hidden) */\r\n\tvisibilityOffIcon?: React.ReactNode;\r\n\t/** Custom icon button props */\r\n\ticonButtonProps?: IconButtonProps;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when password visibility toggles */\r\n\tonVisibilityToggle?: (isVisible: boolean) => void;\r\n\t/** Custom function to calculate password strength */\r\n\tgetPasswordStrength?: (password: string) => PasswordStrength;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\n/**\r\n * Calculate password strength\r\n */\r\nconst calculatePasswordStrength = (password: string): PasswordStrength => {\r\n\tif (!password) return \"weak\";\r\n\r\n\tlet strength = 0;\r\n\r\n\t// Length check\r\n\tif (password.length >= 8) strength++;\r\n\tif (password.length >= 12) strength++;\r\n\r\n\t// Character variety checks\r\n\tif (/[a-z]/.test(password)) strength++;\r\n\tif (/[A-Z]/.test(password)) strength++;\r\n\tif (/[0-9]/.test(password)) strength++;\r\n\tif (/[^a-zA-Z0-9]/.test(password)) strength++;\r\n\r\n\tif (strength <= 2) return \"weak\";\r\n\tif (strength <= 4) return \"medium\";\r\n\tif (strength <= 5) return \"strong\";\r\n\treturn \"very-strong\";\r\n};\r\n\r\n/**\r\n * Get password strength color\r\n */\r\nconst getPasswordStrengthColor = (strength: PasswordStrength): string => {\r\n\tswitch (strength) {\r\n\t\tcase \"weak\":\r\n\t\t\treturn \"#f44336\"; // red\r\n\t\tcase \"medium\":\r\n\t\t\treturn \"#ff9800\"; // orange\r\n\t\tcase \"strong\":\r\n\t\t\treturn \"#4caf50\"; // green\r\n\t\tcase \"very-strong\":\r\n\t\t\treturn \"#2196f3\"; // blue\r\n\t\tdefault:\r\n\t\t\treturn \"#9e9e9e\"; // grey\r\n\t}\r\n};\r\n\r\nconst PasswordField = memo(\r\n\tforwardRef<HTMLInputElement, IPasswordFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonVisibilityToggle,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor,\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tshowPasswordStrength = false,\r\n\t\t\t\tminLength,\r\n\t\t\t\tmaxLength,\r\n\t\t\t\tdefaultShowPassword = false,\r\n\t\t\t\tvisibilityIcon = <Visibility />,\r\n\t\t\t\tvisibilityOffIcon = <VisibilityOff />,\r\n\t\t\t\ticonButtonProps,\r\n\t\t\t\tgetPasswordStrength = calculatePasswordStrength,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLInputElement>\r\n\t\t) => {\r\n\t\t\tconst [showPassword, setShowPassword] = useState<boolean>(defaultShowPassword);\r\n\r\n\t\t\t// Toggle password visibility\r\n\t\t\tconst togglePasswordVisibility = useCallback(() => {\r\n\t\t\t\tsetShowPassword((prev) => {\r\n\t\t\t\t\tconst newVisibility = !prev;\r\n\t\t\t\t\tif (onVisibilityToggle) {\r\n\t\t\t\t\t\tonVisibilityToggle(newVisibility);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn newVisibility;\r\n\t\t\t\t});\r\n\t\t\t}, [onVisibilityToggle]);\r\n\r\n\t\t\t// Calculate password strength\r\n\t\t\tconst passwordStrength = useMemo(\r\n\t\t\t\t() => (showPasswordStrength ? getPasswordStrength(value) : null),\r\n\t\t\t\t[showPasswordStrength, value]\r\n\t\t\t);\r\n\r\n\t\t\t// Get strength indicator\r\n\t\t\tconst getStrengthIndicator = () => {\r\n\t\t\t\tif (!passwordStrength || !value) return null;\r\n\r\n\t\t\t\tconst strengthColor = getPasswordStrengthColor(passwordStrength);\r\n\t\t\t\tconst strengthText =\r\n\t\t\t\t\tpasswordStrength.charAt(0).toUpperCase() + passwordStrength.slice(1).replace(\"-\", \" \");\r\n\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<div style={{ marginTop: \"4px\", fontSize: \"0.75rem\" }}>\r\n\t\t\t\t\t\t<span style={{ color: strengthColor, fontWeight: 500 }}>Strength: {strengthText}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t);\r\n\t\t\t};\r\n\r\n\t\t\t// Handle onChange with validation\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tconst newValue = event.target.value;\r\n\r\n\t\t\t\t\t// Check max length\r\n\t\t\t\t\tif (maxLength && newValue.length > maxLength) {\r\n\t\t\t\t\t\treturn; // Don't update if exceeds max length\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[maxLength, onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize end adornment\r\n\t\t\tconst endAdornmentElement = useMemo(\r\n\t\t\t\t() => (\r\n\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tonClick={togglePasswordVisibility}\r\n\t\t\t\t\t\t\tonMouseDown={(e) => e.preventDefault()}\r\n\t\t\t\t\t\t\tedge=\"end\"\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t{...iconButtonProps}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{showPassword ? visibilityOffIcon : visibilityIcon}\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t),\r\n\t\t\t\t[\r\n\t\t\t\t\ttogglePasswordVisibility,\r\n\t\t\t\t\tdisabled,\r\n\t\t\t\t\ticonButtonProps,\r\n\t\t\t\t\tshowPassword,\r\n\t\t\t\t\tvisibilityOffIcon,\r\n\t\t\t\t\tvisibilityIcon,\r\n\t\t\t\t]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize slot props\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\t...(minLength || maxLength ?\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tinputProps: {\r\n\t\t\t\t\t\t\t\t\tminLength,\r\n\t\t\t\t\t\t\t\t\tmaxLength,\r\n\t\t\t\t\t\t\t\t\t...((slotProps?.input as any)?.inputProps || {}),\r\n\t\t\t\t\t\t\t\t\t...((textFieldProps as any).inputProps || {}),\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t:\t{}),\r\n\t\t\t\t\t\tendAdornment: endAdornmentElement,\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, minLength, maxLength, textFieldProps, endAdornmentElement]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\ttype={showPassword ? \"text\" : \"password\"}\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{showPasswordStrength && getStrengthIndicator()}\r\n\t\t\t\t\t{error && !helperText && error.message && (\r\n\t\t\t\t\t\t<FormHelperText>{error.message}</FormHelperText>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nPasswordField.displayName = \"PasswordField\";\r\n\r\nexport default PasswordField;\r\n","import PasswordField from \"../FormFields/TextFields/PasswordField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputPasswordField = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tsize,\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size: sizeProp, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<PasswordField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t\tsize={(size ?? sizeProp) as any}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputPasswordField.displayName = \"FormInputPasswordField\";\r\n\r\nexport default FormInputPasswordField;\r\n","import { FormControl, InputAdornment, TextField, type TextFieldProps } from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport {\r\n\ttype ForwardedRef,\r\n\tforwardRef,\r\n\tuseState,\r\n\tuseEffect,\r\n\tuseCallback,\r\n\tmemo,\r\n\tuseMemo,\r\n} from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Number pattern types\r\n */\r\nexport type NumberPattern =\r\n\t| \"phone\"\r\n\t| \"credit-card\"\r\n\t| \"currency\"\r\n\t| \"ssn\"\r\n\t| \"zip-code\"\r\n\t| \"decimal\"\r\n\t| \"integer\"\r\n\t| \"percentage\"\r\n\t| \"custom\";\r\n\r\n/**\r\n * Extract only digits from a string\r\n */\r\nconst extractDigits = (value: string): string => {\r\n\treturn value.replace(/\\D/g, \"\");\r\n};\r\n\r\n/**\r\n * Format value according to pattern (X represents digits)\r\n * Example: pattern \"XXX-XXXX\" with digits \"1234567\" -> \"123-4567\"\r\n */\r\nconst formatByPattern = (digits: string, pattern: string): string => {\r\n\tif (!pattern || !digits) return digits;\r\n\tlet formatted = \"\";\r\n\tlet digitIndex = 0;\r\n\tfor (let i = 0; i < pattern.length && digitIndex < digits.length; i++) {\r\n\t\tif (pattern[i] === \"X\") {\r\n\t\t\tformatted += digits[digitIndex];\r\n\t\t\tdigitIndex++;\r\n\t\t} else {\r\n\t\t\tformatted += pattern[i];\r\n\t\t}\r\n\t}\r\n\treturn formatted;\r\n};\r\n\r\n/**\r\n * Generate placeholder from pattern\r\n */\r\nconst generatePlaceholderFromPattern = (pattern: string): string => {\r\n\tif (!pattern) return \"\";\r\n\treturn pattern.replace(/X/g, \"0\");\r\n};\r\n\r\n/**\r\n * Format phone number (XXX) XXX-XXXX\r\n */\r\nconst formatPhoneNumber = (value: string): string => {\r\n\tconst numbers = extractDigits(value);\r\n\tif (numbers.length <= 3) return numbers;\r\n\tif (numbers.length <= 6) return `(${numbers.slice(0, 3)}) ${numbers.slice(3)}`;\r\n\treturn `(${numbers.slice(0, 3)}) ${numbers.slice(3, 6)}-${numbers.slice(6, 10)}`;\r\n};\r\n\r\n/**\r\n * Format credit card XXXX XXXX XXXX XXXX\r\n */\r\nconst formatCreditCard = (value: string): string => {\r\n\tconst numbers = value.replace(/\\D/g, \"\");\r\n\tconst formatted = numbers.match(/.{1,4}/g)?.join(\" \") || numbers;\r\n\treturn formatted.slice(0, 19); // Max 16 digits + 3 spaces\r\n};\r\n\r\n/**\r\n * Format currency $X,XXX.XX\r\n */\r\nconst formatCurrency = (value: string, allowDecimals: boolean = true): string => {\r\n\tconst numbers = value.replace(/[^\\d.]/g, \"\");\r\n\tif (!allowDecimals) {\r\n\t\treturn numbers.replace(/\\D/g, \"\");\r\n\t}\r\n\t// Allow only one decimal point\r\n\tconst parts = numbers.split(\".\");\r\n\tif (parts.length > 2) {\r\n\t\treturn parts[0] + \".\" + parts.slice(1).join(\"\");\r\n\t}\r\n\tif (parts.length === 2 && parts[1].length > 2) {\r\n\t\treturn parts[0] + \".\" + parts[1].slice(0, 2);\r\n\t}\r\n\treturn numbers;\r\n};\r\n\r\n/**\r\n * Format SSN XXX-XX-XXXX\r\n */\r\nconst formatSSN = (value: string): string => {\r\n\tconst numbers = value.replace(/\\D/g, \"\");\r\n\tif (numbers.length <= 3) return numbers;\r\n\tif (numbers.length <= 5) return `${numbers.slice(0, 3)}-${numbers.slice(3)}`;\r\n\treturn `${numbers.slice(0, 3)}-${numbers.slice(3, 5)}-${numbers.slice(5, 9)}`;\r\n};\r\n\r\n/**\r\n * Format ZIP code XXXXX or XXXXX-XXXX\r\n */\r\nconst formatZipCode = (value: string): string => {\r\n\tconst numbers = value.replace(/\\D/g, \"\");\r\n\tif (numbers.length <= 5) return numbers;\r\n\treturn `${numbers.slice(0, 5)}-${numbers.slice(5, 9)}`;\r\n};\r\n\r\n/**\r\n * Format percentage XX%\r\n */\r\nconst formatPercentage = (value: string): string => {\r\n\tconst numbers = value.replace(/\\D/g, \"\");\r\n\treturn numbers.slice(0, 3); // Max 100%\r\n};\r\n\r\n/**\r\n * Extended Number Input Field Props\r\n * Extends MUI TextFieldProps with custom number field props\r\n */\r\nexport interface INumberInputFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the number field */\r\n\tlabel?: string;\r\n\t/** Current number value (as string to support formatted values) */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Number pattern type or pattern string (e.g., \"XXX-XXXX\" where X represents digits) */\r\n\tpattern?: NumberPattern | string;\r\n\t/** Custom regex pattern (used when pattern is \"custom\") */\r\n\tcustomPattern?: RegExp;\r\n\t/** Custom formatter function */\r\n\tcustomFormatter?: (value: string) => string;\r\n\t/** Minimum value */\r\n\tmin?: number;\r\n\t/** Maximum value */\r\n\tmax?: number;\r\n\t/** Step value for number input */\r\n\tstep?: number;\r\n\t/** Allow decimal numbers (for decimal pattern) */\r\n\tallowDecimals?: boolean;\r\n\t/** Number of decimal places */\r\n\tdecimalPlaces?: number;\r\n\t/** Start adornment (icon or element before input) */\r\n\tstartAdornment?: React.ReactNode;\r\n\t/** End adornment (icon or element after input) */\r\n\tendAdornment?: React.ReactNode;\r\n\t/** Callback fired when the value changes (returns formatted string) */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst NumberField = memo(\r\n\tforwardRef<HTMLDivElement, INumberInputFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tpattern = \"integer\",\r\n\t\t\t\tcustomPattern,\r\n\t\t\t\tcustomFormatter,\r\n\t\t\t\tmin,\r\n\t\t\t\tmax,\r\n\t\t\t\tstep,\r\n\t\t\t\tallowDecimals = true,\r\n\t\t\t\tdecimalPlaces = 2,\r\n\t\t\t\tstartAdornment,\r\n\t\t\t\tendAdornment,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\tconst [displayValue, setDisplayValue] = useState<string>(value);\r\n\r\n\t\t\t// Check if pattern is a string (pattern string) or a NumberPattern type\r\n\t\t\tconst isPatternString = typeof pattern === \"string\" && pattern.includes(\"X\");\r\n\t\t\tconst activePatternString = isPatternString ? pattern : undefined;\r\n\t\t\tconst activePatternType =\r\n\t\t\t\tisPatternString ? undefined : (pattern as NumberPattern | undefined);\r\n\r\n\t\t\t// Format value based on pattern\r\n\t\t\tconst formatValue = useCallback(\r\n\t\t\t\t(inputValue: string): string => {\r\n\t\t\t\t\tif (!inputValue) return \"\";\r\n\r\n\t\t\t\t\t// If pattern string is provided (from pattern prop), use it for formatting\r\n\t\t\t\t\tif (activePatternString) {\r\n\t\t\t\t\t\tconst digits = extractDigits(inputValue);\r\n\t\t\t\t\t\treturn formatByPattern(digits, activePatternString);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Use predefined pattern types\r\n\t\t\t\t\tswitch (activePatternType) {\r\n\t\t\t\t\t\tcase \"phone\":\r\n\t\t\t\t\t\t\treturn formatPhoneNumber(inputValue);\r\n\t\t\t\t\t\tcase \"credit-card\":\r\n\t\t\t\t\t\t\treturn formatCreditCard(inputValue);\r\n\t\t\t\t\t\tcase \"currency\":\r\n\t\t\t\t\t\t\treturn formatCurrency(inputValue, allowDecimals);\r\n\t\t\t\t\t\tcase \"ssn\":\r\n\t\t\t\t\t\t\treturn formatSSN(inputValue);\r\n\t\t\t\t\t\tcase \"zip-code\":\r\n\t\t\t\t\t\t\treturn formatZipCode(inputValue);\r\n\t\t\t\t\t\tcase \"percentage\":\r\n\t\t\t\t\t\t\treturn formatPercentage(inputValue);\r\n\t\t\t\t\t\tcase \"decimal\":\r\n\t\t\t\t\t\t\treturn formatCurrency(inputValue, allowDecimals);\r\n\t\t\t\t\t\tcase \"integer\":\r\n\t\t\t\t\t\t\treturn extractDigits(inputValue);\r\n\t\t\t\t\t\tcase \"custom\":\r\n\t\t\t\t\t\t\tif (customFormatter) {\r\n\t\t\t\t\t\t\t\treturn customFormatter(inputValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (customPattern) {\r\n\t\t\t\t\t\t\t\tconst numbers = extractDigits(inputValue);\r\n\t\t\t\t\t\t\t\treturn numbers;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn extractDigits(inputValue);\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\treturn extractDigits(inputValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[activePatternString, activePatternType, allowDecimals, customFormatter, customPattern]\r\n\t\t\t);\r\n\r\n\t\t\t// Update display value when value prop changes\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\tconst formatted = formatValue(value);\r\n\t\t\t\tsetDisplayValue((prev) => {\r\n\t\t\t\t\tif (prev !== formatted) {\r\n\t\t\t\t\t\treturn formatted;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn prev;\r\n\t\t\t\t});\r\n\t\t\t}, [value, formatValue]);\r\n\r\n\t\t\t// Validate input based on pattern\r\n\t\t\tconst isValidInput = (inputValue: string, key: string): boolean => {\r\n\t\t\t\t// Allow backspace, delete, tab, escape, enter\r\n\t\t\t\tif ([\"Backspace\", \"Delete\", \"Tab\", \"Escape\", \"Enter\"].includes(key)) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Allow Ctrl/Cmd + A, C, V, X\r\n\t\t\t\tif (key === \"a\" || key === \"c\" || key === \"v\" || key === \"x\") {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// For decimal pattern, allow decimal point\r\n\t\t\t\tif (\r\n\t\t\t\t\t(activePatternType === \"decimal\" || activePatternType === \"currency\") &&\r\n\t\t\t\t\tallowDecimals &&\r\n\t\t\t\t\tkey === \".\"\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check if it's a number\r\n\t\t\t\tif (!/^\\d$/.test(key)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Pattern string validation - check if we've reached max digits\r\n\t\t\t\tif (activePatternString) {\r\n\t\t\t\t\tconst maxDigits = (activePatternString.match(/X/g) || []).length;\r\n\t\t\t\t\tconst currentDigits = extractDigits(inputValue);\r\n\t\t\t\t\treturn currentDigits.length < maxDigits;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Custom pattern validation\r\n\t\t\t\tif (activePatternType === \"custom\" && customPattern) {\r\n\t\t\t\t\tconst testValue = inputValue + key;\r\n\t\t\t\t\treturn customPattern.test(testValue);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t};\r\n\r\n\t\t\t// Handle input change\r\n\t\t\tconst handleChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\tconst inputValue = event.target.value;\r\n\t\t\t\tconst formattedValue = formatValue(inputValue);\r\n\t\t\t\tsetDisplayValue(formattedValue);\r\n\r\n\t\t\t\t// For pattern-based formatting, return only digits in onChange\r\n\t\t\t\tconst digitsOnly = activePatternString ? extractDigits(inputValue) : formattedValue;\r\n\r\n\t\t\t\t// Create synthetic event with formatted value\r\n\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\t...event,\r\n\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t...event.target,\r\n\t\t\t\t\t\tvalue: digitsOnly,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcurrentTarget: {\r\n\t\t\t\t\t\t...event.currentTarget,\r\n\t\t\t\t\t\tvalue: digitsOnly,\r\n\t\t\t\t\t},\r\n\t\t\t\t} as ChangeEvent<HTMLInputElement>;\r\n\r\n\t\t\t\tif (onChange) {\r\n\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Handle paste event\r\n\t\t\tconst handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\r\n\t\t\t\tif (disabled) return;\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst pastedText = event.clipboardData.getData(\"text\");\r\n\t\t\t\tconst digits = extractDigits(pastedText);\r\n\r\n\t\t\t\t// Limit by pattern string if provided\r\n\t\t\t\tconst maxDigits =\r\n\t\t\t\t\tactivePatternString ? (activePatternString.match(/X/g) || []).length : undefined;\r\n\t\t\t\tconst limitedDigits = maxDigits ? digits.slice(0, maxDigits) : digits;\r\n\r\n\t\t\t\tconst formattedValue =\r\n\t\t\t\t\tactivePatternString ?\r\n\t\t\t\t\t\tformatByPattern(limitedDigits, activePatternString)\r\n\t\t\t\t\t:\tformatValue(limitedDigits);\r\n\r\n\t\t\t\tsetDisplayValue(formattedValue);\r\n\r\n\t\t\t\t// Create synthetic event\r\n\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\t...event,\r\n\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t...event.target,\r\n\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcurrentTarget: {\r\n\t\t\t\t\t\t...event.currentTarget,\r\n\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t},\r\n\t\t\t\t} as unknown as ChangeEvent<HTMLInputElement>;\r\n\r\n\t\t\t\tif (onChange) {\r\n\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Handle key down to prevent non-numeric input\r\n\t\t\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\tconst input = event.currentTarget.querySelector(\"input\");\r\n\t\t\t\tif (!input) return;\r\n\r\n\t\t\t\tconst currentValue = input.value || \"\";\r\n\t\t\t\tconst key = event.key;\r\n\r\n\t\t\t\t// Allow special keys\r\n\t\t\t\tif (\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t\"Backspace\",\r\n\t\t\t\t\t\t\"Delete\",\r\n\t\t\t\t\t\t\"Tab\",\r\n\t\t\t\t\t\t\"Escape\",\r\n\t\t\t\t\t\t\"Enter\",\r\n\t\t\t\t\t\t\"ArrowLeft\",\r\n\t\t\t\t\t\t\"ArrowRight\",\r\n\t\t\t\t\t\t\"ArrowUp\",\r\n\t\t\t\t\t\t\"ArrowDown\",\r\n\t\t\t\t\t\t\"Home\",\r\n\t\t\t\t\t\t\"End\",\r\n\t\t\t\t\t].includes(key)\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (key === \"Enter\" && onEnterPress) {\r\n\t\t\t\t\t\tonEnterPress(displayValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Allow Ctrl/Cmd combinations\r\n\t\t\t\tif (event.ctrlKey || event.metaKey) {\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Validate input\r\n\t\t\t\tif (!isValidInput(currentValue, key)) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Build input props\r\n\t\t\tconst inputProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\tmin,\r\n\t\t\t\t\tmax,\r\n\t\t\t\t\tstep,\r\n\t\t\t\t\tinputMode:\r\n\t\t\t\t\t\tactivePatternType === \"phone\" ? \"tel\"\r\n\t\t\t\t\t\t: activePatternType === \"decimal\" || activePatternType === \"currency\" ? \"decimal\"\r\n\t\t\t\t\t\t: \"numeric\",\r\n\t\t\t\t\tmaxLength: activePatternString ? activePatternString.length : undefined,\r\n\t\t\t\t\t...((textFieldProps as any).inputProps || {}),\r\n\t\t\t\t}),\r\n\t\t\t\t[min, max, step, activePatternType, activePatternString, textFieldProps]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize adornments\r\n\t\t\tconst startAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tstartAdornment ?\r\n\t\t\t\t\t\t<InputAdornment position=\"start\">{startAdornment}</InputAdornment>\r\n\t\t\t\t\t:\tundefined,\r\n\t\t\t\t[startAdornment]\r\n\t\t\t);\r\n\r\n\t\t\tconst endAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tendAdornment ? <InputAdornment position=\"end\">{endAdornment}</InputAdornment> : undefined,\r\n\t\t\t\t[endAdornment]\r\n\t\t\t);\r\n\r\n\t\t\t// Build slotProps for MUI v7\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\tinputProps,\r\n\t\t\t\t\t\t...(startAdornmentElement && {\r\n\t\t\t\t\t\t\tstartAdornment: startAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t...(endAdornmentElement && {\r\n\t\t\t\t\t\t\tendAdornment: endAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, inputProps, startAdornmentElement, endAdornmentElement]\r\n\t\t\t);\r\n\r\n\t\t\t// Determine input type\r\n\t\t\tconst inputType = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tactivePatternType === \"phone\" ? \"tel\"\r\n\t\t\t\t\t: activePatternType === \"decimal\" || activePatternType === \"currency\" ?\r\n\t\t\t\t\t\t\"text\" // Use text to allow formatting\r\n\t\t\t\t\t:\t\"text\", // Use text for all patterns to allow formatting\r\n\t\t\t\t[activePatternType]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize placeholder\r\n\t\t\tconst displayPlaceholder = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tplaceholder ||\r\n\t\t\t\t\t(activePatternString ? generatePlaceholderFromPattern(activePatternString) : placeholder),\r\n\t\t\t\t[placeholder, activePatternString]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={displayValue}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tonPaste={handlePaste}\r\n\t\t\t\t\t\tplaceholder={displayPlaceholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\ttype={inputType}\r\n\t\t\t\t\t\tautoComplete=\"off\"\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nNumberField.displayName = \"NumberField\";\r\n\r\nexport default NumberField;\r\n","import NumberField from \"../FormFields/TextFields/NumberField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputNumberFields } from \"./types\";\r\n\r\nconst FormInputNumberField = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tpattern,\r\n\t\tmin,\r\n\t\tmax,\r\n\t\tstep,\r\n\t\tallowDecimals,\r\n\t\tdecimalPlaces,\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputNumberFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<NumberField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tpattern={pattern}\r\n\t\t\t\t\t\t\tmin={min}\r\n\t\t\t\t\t\t\tmax={max}\r\n\t\t\t\t\t\t\tstep={step}\r\n\t\t\t\t\t\t\tallowDecimals={allowDecimals}\r\n\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputNumberField.displayName = \"FormInputNumberField\";\r\n\r\nexport default FormInputNumberField;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tInputAdornment,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport {\r\n\ttype ForwardedRef,\r\n\tforwardRef,\r\n\tuseState,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tmemo,\r\n\tuseCallback,\r\n\tuseMemo,\r\n} from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extract only digits from a string\r\n */\r\nconst extractDigits = (value: string): string => {\r\n\treturn value.replace(/\\D/g, \"\");\r\n};\r\n\r\n/**\r\n * Format phone number according to pattern\r\n * Example: pattern \"XXX-XXXX\" with digits \"1234567\" -> \"123-4567\"\r\n */\r\nconst formatByPattern = (digits: string, pattern: string): string => {\r\n\tif (!pattern || !digits) return digits;\r\n\tlet formatted = \"\";\r\n\tlet digitIndex = 0;\r\n\tfor (let i = 0; i < pattern.length && digitIndex < digits.length; i++) {\r\n\t\tif (pattern[i] === \"X\") {\r\n\t\t\tformatted += digits[digitIndex];\r\n\t\t\tdigitIndex++;\r\n\t\t} else {\r\n\t\t\tformatted += pattern[i];\r\n\t\t}\r\n\t}\r\n\treturn formatted;\r\n};\r\n\r\n/**\r\n * Generate placeholder from pattern\r\n */\r\nconst generatePlaceholder = (pattern: string): string => {\r\n\tif (!pattern) return \"0000000000\";\r\n\treturn pattern.replace(/X/g, \"0\");\r\n};\r\n\r\n/**\r\n * Extended Tel Input Field Props\r\n * Extends MUI TextFieldProps with custom tel field props\r\n */\r\nexport interface ITelInputFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the tel field */\r\n\tlabel?: string;\r\n\t/** Current tel value (digits only, formatting is handled internally) */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text (auto-generated from pattern if not provided) */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Pattern string (e.g., \"XXX-XXXX\" where X represents digits) */\r\n\tpattern?: string;\r\n\t/** Maximum length (defaults to pattern length if pattern provided) */\r\n\tmaxLength?: number;\r\n\t/** Country code to display */\r\n\tcountryCode?: string;\r\n\t/** Whether to show country code */\r\n\tshowCountryCode?: boolean;\r\n\t/** Start adornment (icon or element before input) */\r\n\tstartAdornment?: React.ReactNode;\r\n\t/** End adornment (icon or element after input) */\r\n\tendAdornment?: React.ReactNode;\r\n\t/** Callback fired when the value changes (returns digits only) */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for country code display */\r\n\tcountryCodeStyles?: React.CSSProperties;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst TeliField = memo(\r\n\tforwardRef<HTMLDivElement, ITelInputFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tpattern = \"XXXXXXXXXX\",\r\n\t\t\t\tmaxLength,\r\n\t\t\t\tcountryCode = \"+1\",\r\n\t\t\t\tshowCountryCode = false,\r\n\t\t\t\tstartAdornment,\r\n\t\t\t\tendAdornment,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tcountryCodeStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\tconst [displayValue, setDisplayValue] = useState<string>(\"\");\r\n\t\t\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\r\n\t\t\t// Calculate max length from pattern if not provided\r\n\t\t\tconst calculatedMaxLength = maxLength || (pattern ? pattern.length : 15);\r\n\r\n\t\t\t// Update display value when value prop changes\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\tconst digits = extractDigits(value);\r\n\t\t\t\tconst formatted = pattern ? formatByPattern(digits, pattern) : digits;\r\n\t\t\t\tsetDisplayValue((prev) => {\r\n\t\t\t\t\tif (prev !== formatted) {\r\n\t\t\t\t\t\treturn formatted;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn prev;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Set cursor position to end when value changes externally\r\n\t\t\t\tif (inputRef.current) {\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tif (inputRef.current) {\r\n\t\t\t\t\t\t\tconst cursorPosition = formatted.length;\r\n\t\t\t\t\t\t\tinputRef.current.setSelectionRange(cursorPosition, cursorPosition);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t}\r\n\t\t\t}, [value, pattern]);\r\n\r\n\t\t\t// Handle input change\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\r\n\t\t\t\t\tconst inputValue = event.target.value;\r\n\t\t\t\t\tconst digits = extractDigits(inputValue);\r\n\r\n\t\t\t\t\t// Enforce maxLength\r\n\t\t\t\t\tconst limitedDigits = calculatedMaxLength ? digits.slice(0, calculatedMaxLength) : digits;\r\n\r\n\t\t\t\t\t// Format the value\r\n\t\t\t\t\tconst formattedValue = pattern ? formatByPattern(limitedDigits, pattern) : limitedDigits;\r\n\r\n\t\t\t\t\tsetDisplayValue(formattedValue);\r\n\r\n\t\t\t\t\t// Create synthetic event with digits only\r\n\t\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\t\t...event,\r\n\t\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t\t...event.target,\r\n\t\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcurrentTarget: {\r\n\t\t\t\t\t\t\t...event.currentTarget,\r\n\t\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t} as ChangeEvent<HTMLInputElement>;\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[disabled, calculatedMaxLength, pattern, onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle paste event\r\n\t\t\tconst handlePaste = useCallback(\r\n\t\t\t\t(event: React.ClipboardEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tconst pastedText = event.clipboardData.getData(\"text\");\r\n\t\t\t\t\tconst digits = extractDigits(pastedText);\r\n\t\t\t\t\tconst limitedDigits = calculatedMaxLength ? digits.slice(0, calculatedMaxLength) : digits;\r\n\r\n\t\t\t\t\tconst formattedValue = pattern ? formatByPattern(limitedDigits, pattern) : limitedDigits;\r\n\r\n\t\t\t\t\tsetDisplayValue(formattedValue);\r\n\r\n\t\t\t\t\t// Create synthetic event\r\n\t\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\t\t...event,\r\n\t\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t\t...event.target,\r\n\t\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcurrentTarget: {\r\n\t\t\t\t\t\t\t...event.currentTarget,\r\n\t\t\t\t\t\t\tvalue: limitedDigits,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t} as unknown as ChangeEvent<HTMLInputElement>;\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[disabled, calculatedMaxLength, pattern, onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle key down to prevent non-numeric input\r\n\t\t\tconst handleKeyDown = useCallback(\r\n\t\t\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\r\n\t\t\t\t\tconst key = event.key;\r\n\t\t\t\t\tconst isNumber = /[0-9]/.test(key);\r\n\t\t\t\t\tconst isAllowedKey =\r\n\t\t\t\t\t\tkey === \"Backspace\" ||\r\n\t\t\t\t\t\tkey === \"Delete\" ||\r\n\t\t\t\t\t\tkey === \"Tab\" ||\r\n\t\t\t\t\t\tkey === \"Escape\" ||\r\n\t\t\t\t\t\tkey === \"Enter\" ||\r\n\t\t\t\t\t\tkey === \"ArrowLeft\" ||\r\n\t\t\t\t\t\tkey === \"ArrowRight\" ||\r\n\t\t\t\t\t\tkey === \"ArrowUp\" ||\r\n\t\t\t\t\t\tkey === \"ArrowDown\" ||\r\n\t\t\t\t\t\tkey === \"Home\" ||\r\n\t\t\t\t\t\tkey === \"End\" ||\r\n\t\t\t\t\t\t((event.ctrlKey || event.metaKey) &&\r\n\t\t\t\t\t\t\t(key === \"a\" || key === \"c\" || key === \"v\" || key === \"x\"));\r\n\r\n\t\t\t\t\tif (!isNumber && !isAllowedKey) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (key === \"Enter\" && onEnterPress) {\r\n\t\t\t\t\t\tonEnterPress(extractDigits(displayValue));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[disabled, onEnterPress, displayValue, textFieldProps.onKeyDown]\r\n\t\t\t);\r\n\r\n\t\t\t// Build input props\r\n\t\t\tconst inputProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\tmaxLength: calculatedMaxLength,\r\n\t\t\t\t\tinputMode: \"tel\",\r\n\t\t\t\t\tautoComplete: \"tel\",\r\n\t\t\t\t\t...((textFieldProps as any).inputProps || {}),\r\n\t\t\t\t}),\r\n\t\t\t\t[calculatedMaxLength, textFieldProps]\r\n\t\t\t);\r\n\r\n\t\t\t// Build start adornment with country code if needed\r\n\t\t\tconst finalStartAdornment = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tshowCountryCode ?\r\n\t\t\t\t\t\t<InputAdornment\r\n\t\t\t\t\t\t\tposition=\"start\"\r\n\t\t\t\t\t\t\tsx={countryCodeStyles}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{countryCode}\r\n\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t: startAdornment ? <InputAdornment position=\"start\">{startAdornment}</InputAdornment>\r\n\t\t\t\t\t: undefined,\r\n\t\t\t\t[showCountryCode, countryCodeStyles, countryCode, startAdornment]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize end adornment\r\n\t\t\tconst endAdornmentElement = useMemo(\r\n\t\t\t\t() =>\r\n\t\t\t\t\tendAdornment ? <InputAdornment position=\"end\">{endAdornment}</InputAdornment> : undefined,\r\n\t\t\t\t[endAdornment]\r\n\t\t\t);\r\n\r\n\t\t\t// Build slotProps for MUI v7\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\tinputProps,\r\n\t\t\t\t\t\t...(finalStartAdornment && {\r\n\t\t\t\t\t\t\tstartAdornment: finalStartAdornment,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t...(endAdornmentElement && {\r\n\t\t\t\t\t\t\tendAdornment: endAdornmentElement,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, inputProps, finalStartAdornment, endAdornmentElement]\r\n\t\t\t);\r\n\r\n\t\t\t// Generate placeholder from pattern if not provided\r\n\t\t\tconst displayPlaceholder = useMemo(\r\n\t\t\t\t() => placeholder || (pattern ? generatePlaceholder(pattern) : \"\"),\r\n\t\t\t\t[placeholder, pattern]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={displayValue}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tonPaste={handlePaste}\r\n\t\t\t\t\t\tplaceholder={displayPlaceholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\ttype=\"tel\"\r\n\t\t\t\t\t\tautoComplete=\"tel\"\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tinputRef={inputRef}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nTeliField.displayName = \"TeliField\";\r\n\r\nexport default TeliField;\r\n","import TelInputField from \"../FormFields/TextFields/TelInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputTelField = memo(\r\n\t({ name, label, control, errors, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<TelInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTelField.displayName = \"FormInputTelField\";\r\n\r\nexport default FormInputTelField;\r\n","import { Close, Search } from \"@mui/icons-material\";\r\nimport {\r\n\tFormControl,\r\n\tIconButton,\r\n\ttype IconButtonProps,\r\n\tInputAdornment,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport {\r\n\ttype ForwardedRef,\r\n\tforwardRef,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tmemo,\r\n\tuseCallback,\r\n\tuseMemo,\r\n} from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Search Input Field Props\r\n * Extends MUI TextFieldProps with custom search field props\r\n */\r\nexport interface ISearchInputFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the search field */\r\n\tlabel?: string;\r\n\t/** Current search value */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Whether to show clear button */\r\n\tshowClearButton?: boolean;\r\n\t/** Whether to show search button */\r\n\tshowSearchButton?: boolean;\r\n\t/** Custom clear icon */\r\n\tclearIcon?: React.ReactNode;\r\n\t/** Custom search icon */\r\n\tsearchIcon?: React.ReactNode;\r\n\t/** Custom icon button props for clear button */\r\n\tclearButtonProps?: IconButtonProps;\r\n\t/** Custom icon button props for search button */\r\n\tsearchButtonProps?: IconButtonProps;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (event: ChangeEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when search button is clicked */\r\n\tonSearch?: (value: string) => void;\r\n\t/** Callback fired when clear button is clicked */\r\n\tonClear?: () => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Enable debounce for search (default: true) */\r\n\tenableDebounce?: boolean;\r\n\t/** Debounce delay in milliseconds (default: 300) */\r\n\tdebounceDelay?: number;\r\n\t/** Enable throttle for search (default: false) */\r\n\tenableThrottle?: boolean;\r\n\t/** Throttle delay in milliseconds (default: 300) */\r\n\tthrottleDelay?: number;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst SearchField = memo(\r\n\tforwardRef<HTMLInputElement, ISearchInputFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonSearch,\r\n\t\t\t\tonClear,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tshowClearButton = true,\r\n\t\t\t\tshowSearchButton = true,\r\n\t\t\t\tclearIcon,\r\n\t\t\t\tsearchIcon,\r\n\t\t\t\tclearButtonProps,\r\n\t\t\t\tsearchButtonProps,\r\n\t\t\t\tenableDebounce = true,\r\n\t\t\t\tdebounceDelay = 300,\r\n\t\t\t\tenableThrottle = false,\r\n\t\t\t\tthrottleDelay = 300,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLInputElement>\r\n\t\t) => {\r\n\t\t\t// Refs for debounce and throttle timers\r\n\t\t\tconst debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\t\t\tconst throttleTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\t\t\tconst lastThrottleCallRef = useRef<number>(0);\r\n\r\n\t\t\t// Cleanup timers on unmount\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\treturn () => {\r\n\t\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}, []);\r\n\r\n\t\t\t// Debounced search function\r\n\t\t\tconst debouncedSearch = useCallback(\r\n\t\t\t\t(searchVal: string) => {\r\n\t\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdebounceTimerRef.current = setTimeout(() => {\r\n\t\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\t\tonSearch(searchVal);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, debounceDelay);\r\n\t\t\t\t},\r\n\t\t\t\t[onSearch, debounceDelay]\r\n\t\t\t);\r\n\r\n\t\t\t// Throttled search function\r\n\t\t\tconst throttledSearch = useCallback(\r\n\t\t\t\t(searchVal: string) => {\r\n\t\t\t\t\tconst now = Date.now();\r\n\t\t\t\t\tconst timeSinceLastCall = now - lastThrottleCallRef.current;\r\n\r\n\t\t\t\t\tif (timeSinceLastCall >= throttleDelay) {\r\n\t\t\t\t\t\tlastThrottleCallRef.current = now;\r\n\t\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\t\tonSearch(searchVal);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthrottleTimerRef.current = setTimeout(() => {\r\n\t\t\t\t\t\t\tlastThrottleCallRef.current = Date.now();\r\n\t\t\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\t\t\tonSearch(searchVal);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, throttleDelay - timeSinceLastCall);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onSearch, throttleDelay]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle onChange with search callback (with debounce/throttle)\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tconst newValue = event.target.value;\r\n\r\n\t\t\t\t\t// Always call onChange immediately for controlled input\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(event);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Apply debounce or throttle to onSearch if enabled\r\n\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\tif (enableDebounce && !enableThrottle) {\r\n\t\t\t\t\t\t\tdebouncedSearch(newValue);\r\n\t\t\t\t\t\t} else if (enableThrottle && !enableDebounce) {\r\n\t\t\t\t\t\t\tthrottledSearch(newValue);\r\n\t\t\t\t\t\t} else if (enableDebounce && enableThrottle) {\r\n\t\t\t\t\t\t\t// If both are enabled, debounce takes precedence\r\n\t\t\t\t\t\t\tdebouncedSearch(newValue);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// No debounce or throttle, call immediately\r\n\t\t\t\t\t\t\tonSearch(newValue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onChange, onSearch, enableDebounce, enableThrottle, debouncedSearch, throttledSearch]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle clear button click\r\n\t\t\tconst handleClear = useCallback(() => {\r\n\t\t\t\t// Clear any pending timers\r\n\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\tdebounceTimerRef.current = null;\r\n\t\t\t\t}\r\n\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\tthrottleTimerRef.current = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onClear) {\r\n\t\t\t\t\tonClear();\r\n\t\t\t\t}\r\n\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t// Clear immediately without debounce/throttle\r\n\t\t\t\t\tonSearch(\"\");\r\n\t\t\t\t}\r\n\t\t\t\t// Create a synthetic event to trigger onChange with empty value\r\n\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\ttarget: { value: \"\", name: name || \"\" },\r\n\t\t\t\t\tcurrentTarget: { value: \"\", name: name || \"\" },\r\n\t\t\t\t} as ChangeEvent<HTMLInputElement>;\r\n\t\t\t\tif (onChange) {\r\n\t\t\t\t\tonChange(syntheticEvent);\r\n\t\t\t\t}\r\n\t\t\t}, [onClear, onSearch, onChange, name, debounceTimerRef, throttleTimerRef]);\r\n\r\n\t\t\t// Handle search button click\r\n\t\t\tconst handleSearch = useCallback(() => {\r\n\t\t\t\t// Clear any pending timers and search immediately\r\n\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\tdebounceTimerRef.current = null;\r\n\t\t\t\t}\r\n\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\tthrottleTimerRef.current = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t// Search immediately without debounce/throttle when button is clicked\r\n\t\t\t\t\tonSearch(value);\r\n\t\t\t\t}\r\n\t\t\t}, [onSearch, value, debounceTimerRef, throttleTimerRef]);\r\n\r\n\t\t\t// Handle Enter key press\r\n\t\t\tconst handleKeyDown = useCallback(\r\n\t\t\t\t(event: React.KeyboardEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tif (event.key === \"Enter\") {\r\n\t\t\t\t\t\t// Clear any pending timers when Enter is pressed\r\n\t\t\t\t\t\tif (debounceTimerRef.current) {\r\n\t\t\t\t\t\t\tclearTimeout(debounceTimerRef.current);\r\n\t\t\t\t\t\t\tdebounceTimerRef.current = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (throttleTimerRef.current) {\r\n\t\t\t\t\t\t\tclearTimeout(throttleTimerRef.current);\r\n\t\t\t\t\t\t\tthrottleTimerRef.current = null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (onEnterPress) {\r\n\t\t\t\t\t\t\tonEnterPress(value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Also trigger search immediately on Enter\r\n\t\t\t\t\t\tif (onSearch) {\r\n\t\t\t\t\t\t\tonSearch(value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Call original onKeyDown if provided\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[\r\n\t\t\t\t\tonEnterPress,\r\n\t\t\t\t\tonSearch,\r\n\t\t\t\t\tvalue,\r\n\t\t\t\t\tdebounceTimerRef,\r\n\t\t\t\t\tthrottleTimerRef,\r\n\t\t\t\t\ttextFieldProps.onKeyDown,\r\n\t\t\t\t]\r\n\t\t\t);\r\n\r\n\t\t\t// Build end adornment with clear and search buttons\r\n\t\t\tconst endAdornment = useMemo(\r\n\t\t\t\t() => (\r\n\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t{showClearButton && value && (\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleClear}\r\n\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\tedge=\"end\"\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\t{...clearButtonProps}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{clearIcon || <Close />}\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showSearchButton && (\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleSearch}\r\n\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\tedge=\"end\"\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\t{...searchButtonProps}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{searchIcon || <Search />}\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t),\r\n\t\t\t\t[\r\n\t\t\t\t\tshowClearButton,\r\n\t\t\t\t\tvalue,\r\n\t\t\t\t\thandleClear,\r\n\t\t\t\t\tdisabled,\r\n\t\t\t\t\tsize,\r\n\t\t\t\t\tclearButtonProps,\r\n\t\t\t\t\tclearIcon,\r\n\t\t\t\t\tshowSearchButton,\r\n\t\t\t\t\thandleSearch,\r\n\t\t\t\t\tsearchButtonProps,\r\n\t\t\t\t\tsearchIcon,\r\n\t\t\t\t]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t...slotProps,\r\n\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\t\t\tendAdornment,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nSearchField.displayName = \"SearchField\";\r\n\r\nexport default SearchField;\r\n","import SearchInputField from \"../FormFields/TextFields/SearchInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputSearchField = memo(\r\n\t({ name, label, control, errors, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SearchInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputSearchField.displayName = \"FormInputSearchField\";\r\n\r\nexport default FormInputSearchField;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormHelperText,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n\tBox,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, useState, useRef, useEffect } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended OTP Input Field Props\r\n */\r\nexport interface IOTPInputFieldProps\r\n\textends Omit<\r\n\t\tTextFieldProps,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\" | \"multiline\" | \"variant\" | \"size\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the OTP field */\r\n\tlabel?: string;\r\n\t/** Current OTP value (string of digits) */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Number of OTP input boxes (default: 6) */\r\n\tlength?: number;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Spacing between OTP boxes */\r\n\tspacing?: number;\r\n\t/** Whether to auto-focus first input on mount */\r\n\tautoFocus?: boolean;\r\n\t/** Whether to auto-submit when all boxes are filled */\r\n\tautoSubmit?: boolean;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (value: string) => void;\r\n\t/** Callback fired when all OTP boxes are filled */\r\n\tonComplete?: (value: string) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the OTP container */\r\n\tcontainerStyles?: React.CSSProperties;\r\n\t/** Custom styles for individual OTP input boxes */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst OTPField = forwardRef<HTMLDivElement, IOTPInputFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonComplete,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\tonEnterPress,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tvariant = \"outlined\",\r\n\t\t\tsize,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tlength = 6,\r\n\t\t\tspacing = 1,\r\n\t\t\tautoFocus = false,\r\n\t\t\tautoSubmit = false,\r\n\t\t\tcontainerStyles,\r\n\t\t\tinputStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\t...textFieldProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\tconst [otpValues, setOtpValues] = useState<string[]>(Array(length).fill(\"\"));\r\n\t\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\r\n\t\tconst lastSentValueRef = useRef<string>(\"\");\r\n\t\tconst isInternalUpdateRef = useRef<boolean>(false);\r\n\t\tconst otpValuesRef = useRef<string[]>(Array(length).fill(\"\"));\r\n\t\tconst inputSessionActiveRef = useRef<boolean>(false);\r\n\t\tconst inputSessionTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n\t\t// Keep ref in sync with state\r\n\t\tuseEffect(() => {\r\n\t\t\totpValuesRef.current = otpValues;\r\n\t\t}, [otpValues]);\r\n\r\n\t\t// Update internal state when value prop changes (only from external changes)\r\n\t\tuseEffect(() => {\r\n\t\t\tconst currentOtpString = otpValuesRef.current.join(\"\");\r\n\r\n\t\t\t// If we're in an active input session, preserve positions unless value is clearly external\r\n\t\t\tif (inputSessionActiveRef.current) {\r\n\t\t\t\t// If the value prop matches what we just sent, don't reset\r\n\t\t\t\tif (value === lastSentValueRef.current) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t// If value represents the same digits (even if positions differ), preserve our state\r\n\t\t\t\t// This handles cases where parent normalizes the value\r\n\t\t\t\tconst currentDigits = currentOtpString;\r\n\t\t\t\tconst incomingDigits = value || \"\";\r\n\t\t\t\tif (currentDigits === incomingDigits && currentDigits.length > 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t// If incoming value has same digit count and matches our sent value's digits, preserve\r\n\t\t\t\tif (\r\n\t\t\t\t\tincomingDigits.length === currentDigits.length &&\r\n\t\t\t\t\tincomingDigits === lastSentValueRef.current\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Skip if this update was triggered internally\r\n\t\t\tif (isInternalUpdateRef.current) {\r\n\t\t\t\tisInternalUpdateRef.current = false;\r\n\t\t\t\t// If the value prop matches what we just sent, don't reset the positions\r\n\t\t\t\tif (value === lastSentValueRef.current) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Only update if value prop is different from our current state\r\n\t\t\tif (value !== currentOtpString) {\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tconst values = value.split(\"\").slice(0, length);\r\n\t\t\t\t\tconst paddedValues = [...values, ...Array(length - values.length).fill(\"\")];\r\n\t\t\t\t\tsetOtpValues(paddedValues);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetOtpValues(Array(length).fill(\"\"));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [value, length]);\r\n\r\n\t\t// Focus first input on mount if autoFocus is true\r\n\t\tuseEffect(() => {\r\n\t\t\tif (autoFocus && inputRefs.current[0]) {\r\n\t\t\t\tinputRefs.current[0].focus();\r\n\t\t\t}\r\n\t\t}, [autoFocus]);\r\n\r\n\t\t// Cleanup timeout on unmount\r\n\t\tuseEffect(() => {\r\n\t\t\treturn () => {\r\n\t\t\t\tif (inputSessionTimeoutRef.current) {\r\n\t\t\t\t\tclearTimeout(inputSessionTimeoutRef.current);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}, []);\r\n\r\n\t\t// Handle input change\r\n\t\tconst handleChange = (\r\n\t\t\tindex: number,\r\n\t\t\tevent: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\r\n\t\t) => {\r\n\t\t\tif (disabled) return;\r\n\r\n\t\t\tconst inputValue = (event.target as HTMLInputElement).value;\r\n\r\n\t\t\t// If input is empty, clear the current box\r\n\t\t\tif (inputValue === \"\") {\r\n\t\t\t\tupdateValue(index, \"\", false);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Extract the last character (handles paste or typing over selected text)\r\n\t\t\tconst lastChar = inputValue.slice(-1);\r\n\r\n\t\t\t// Only allow digits - update the value at the current index\r\n\t\t\tif (/^\\d$/.test(lastChar)) {\r\n\t\t\t\t// Always auto-focus next when entering a digit (from any box position)\r\n\t\t\t\t// This allows continuous typing from any position to the end\r\n\t\t\t\t// Values remain filled as you type through them\r\n\t\t\t\tupdateValue(index, lastChar, true);\r\n\t\t\t}\r\n\t\t\t// Non-digits are already prevented in keyDown handler, but if they somehow get through,\r\n\t\t\t// the controlled component will maintain the correct value via the value prop\r\n\t\t};\r\n\r\n\t\t// Update value at specific index\r\n\t\tconst updateValue = (index: number, newValue: string, shouldAutoFocusNext: boolean = true) => {\r\n\t\t\tconst newOtpValues = [...otpValues];\r\n\t\t\tnewOtpValues[index] = newValue;\r\n\r\n\t\t\t// Mark this as an internal update to prevent useEffect from resetting positions\r\n\t\t\tisInternalUpdateRef.current = true;\r\n\r\n\t\t\t// Activate input session to preserve positions during typing\r\n\t\t\tinputSessionActiveRef.current = true;\r\n\r\n\t\t\t// Clear existing timeout\r\n\t\t\tif (inputSessionTimeoutRef.current) {\r\n\t\t\t\tclearTimeout(inputSessionTimeoutRef.current);\r\n\t\t\t}\r\n\r\n\t\t\t// Deactivate input session after 500ms of no input\r\n\t\t\tinputSessionTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\tinputSessionActiveRef.current = false;\r\n\t\t\t}, 500);\r\n\r\n\t\t\tsetOtpValues(newOtpValues);\r\n\r\n\t\t\tconst otpString = newOtpValues.join(\"\");\r\n\t\t\t// Track the value we're sending to onChange\r\n\t\t\tlastSentValueRef.current = otpString;\r\n\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(otpString);\r\n\t\t\t}\r\n\r\n\t\t\t// Auto-focus next input if value is entered and we should auto-focus\r\n\t\t\t// Auto-focus regardless of whether it was replacing or not, to allow continuous typing\r\n\t\t\t// Use setTimeout to ensure focus happens after state update\r\n\t\t\tif (newValue && index < length - 1 && shouldAutoFocusNext) {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tinputRefs.current[index + 1]?.focus();\r\n\t\t\t\t}, 0);\r\n\t\t\t}\r\n\r\n\t\t\t// Check if all boxes are filled\r\n\t\t\tif (newOtpValues.every((val) => val !== \"\")) {\r\n\t\t\t\tif (onComplete) {\r\n\t\t\t\t\tonComplete(otpString);\r\n\t\t\t\t}\r\n\t\t\t\tif (autoSubmit && onEnterPress) {\r\n\t\t\t\t\tonEnterPress(otpString);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle key down\r\n\t\tconst handleKeyDown = (index: number, event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\tif (disabled) return;\r\n\r\n\t\t\tconst key = event.key;\r\n\r\n\t\t\t// Handle backspace\r\n\t\t\tif (key === \"Backspace\") {\r\n\t\t\t\tif (otpValues[index] === \"\" && index > 0) {\r\n\t\t\t\t\t// Move to previous input and clear it\r\n\t\t\t\t\tinputRefs.current[index - 1]?.focus();\r\n\t\t\t\t\tupdateValue(index - 1, \"\", false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Clear current input\r\n\t\t\t\t\tupdateValue(index, \"\", false);\r\n\t\t\t\t}\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle delete\r\n\t\t\tif (key === \"Delete\") {\r\n\t\t\t\tupdateValue(index, \"\", false);\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle arrow keys\r\n\t\t\tif (key === \"ArrowLeft\" && index > 0) {\r\n\t\t\t\tinputRefs.current[index - 1]?.focus();\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (key === \"ArrowRight\" && index < length - 1) {\r\n\t\t\t\tinputRefs.current[index + 1]?.focus();\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle Enter key\r\n\t\t\tif (key === \"Enter\" && onEnterPress) {\r\n\t\t\t\tconst otpString = otpValues.join(\"\");\r\n\t\t\t\tonEnterPress(otpString);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle paste\r\n\t\t\tif ((event.ctrlKey || event.metaKey) && key === \"v\") {\r\n\t\t\t\t// Let the paste event handle it\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Handle digit input - ensure it goes to the current box\r\n\t\t\tif (/^\\d$/.test(key)) {\r\n\t\t\t\t// The onChange handler will process this, but we ensure the value goes to current index\r\n\t\t\t\t// by allowing the default behavior which will trigger onChange\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Only allow digits and navigation keys\r\n\t\t\tif (![\"Tab\", \"Escape\", \"Home\", \"End\"].includes(key)) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle paste\r\n\t\tconst handlePaste = (index: number, event: React.ClipboardEvent<HTMLDivElement>) => {\r\n\t\t\tif (disabled) return;\r\n\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst pastedText = event.clipboardData.getData(\"text\");\r\n\t\t\tconst digits = pastedText.replace(/\\D/g, \"\").slice(0, length);\r\n\r\n\t\t\tif (digits.length === 0) return;\r\n\r\n\t\t\tconst newOtpValues = [...otpValues];\r\n\t\t\tlet startIndex = index;\r\n\r\n\t\t\t// Fill from current index or from start\r\n\t\t\tfor (let i = 0; i < digits.length && startIndex + i < length; i++) {\r\n\t\t\t\tnewOtpValues[startIndex + i] = digits[i];\r\n\t\t\t}\r\n\r\n\t\t\tsetOtpValues(newOtpValues);\r\n\r\n\t\t\tconst otpString = newOtpValues.join(\"\");\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(otpString);\r\n\t\t\t}\r\n\r\n\t\t\t// Focus the next empty input or the last input\r\n\t\t\tconst nextEmptyIndex = newOtpValues.findIndex((val) => val === \"\");\r\n\t\t\tconst focusIndex =\r\n\t\t\t\tnextEmptyIndex !== -1 ? nextEmptyIndex : Math.min(startIndex + digits.length, length - 1);\r\n\t\t\tinputRefs.current[focusIndex]?.focus();\r\n\r\n\t\t\t// Check if all boxes are filled\r\n\t\t\tif (newOtpValues.every((val) => val !== \"\")) {\r\n\t\t\t\tif (onComplete) {\r\n\t\t\t\t\tonComplete(otpString);\r\n\t\t\t\t}\r\n\t\t\t\tif (autoSubmit && onEnterPress) {\r\n\t\t\t\t\tonEnterPress(otpString);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle focus\r\n\t\tconst handleFocus = (\r\n\t\t\t_index: number,\r\n\t\t\tevent: FocusEvent<HTMLInputElement | HTMLTextAreaElement>\r\n\t\t) => {\r\n\t\t\t// Select all text on focus\r\n\t\t\t(event.target as HTMLInputElement).select();\r\n\t\t\tif (onFocus) {\r\n\t\t\t\tonFocus(event as FocusEvent<HTMLInputElement>);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle blur\r\n\t\tconst handleBlur = (\r\n\t\t\t_index: number,\r\n\t\t\tevent: FocusEvent<HTMLInputElement | HTMLTextAreaElement>\r\n\t\t) => {\r\n\t\t\tif (onBlur) {\r\n\t\t\t\tonBlur(event as FocusEvent<HTMLInputElement>);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tcomponent=\"label\"\r\n\t\t\t\t\t\tsx={{ mb: 1, display: \"block\" }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t\t{required && <span style={{ color: \"error.main\" }}> *</span>}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tgap: spacing,\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\t...containerStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{otpValues.map((otpValue, index) => (\r\n\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\tinputRef={(el) => {\r\n\t\t\t\t\t\t\t\tinputRefs.current[index] = el;\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tname={name ? `${name}-${index}` : undefined}\r\n\t\t\t\t\t\t\tvalue={otpValue}\r\n\t\t\t\t\t\t\tonChange={(e) => handleChange(index, e)}\r\n\t\t\t\t\t\t\tonKeyDown={(e) => handleKeyDown(index, e)}\r\n\t\t\t\t\t\t\tonPaste={(e) => handlePaste(index, e)}\r\n\t\t\t\t\t\t\tonFocus={(e) => handleFocus(index, e)}\r\n\t\t\t\t\t\t\tonBlur={(e) => handleBlur(index, e)}\r\n\t\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t...slotProps,\r\n\t\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\t\t\t\tinputProps: {\r\n\t\t\t\t\t\t\t\t\t\tmaxLength: 1,\r\n\t\t\t\t\t\t\t\t\t\tinputMode: \"numeric\",\r\n\t\t\t\t\t\t\t\t\t\tpattern: \"[0-9]*\",\r\n\t\t\t\t\t\t\t\t\t\tstyle: {\r\n\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: size === \"small\" ? \"1rem\" : \"1.25rem\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t...((slotProps?.input as any)?.inputProps || {}),\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\twidth: size === \"small\" ? \"40px\" : \"48px\",\r\n\t\t\t\t\t\t\t\t...inputStyles,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nOTPField.displayName = \"OTPField\";\r\n\r\nexport default OTPField;\r\n","import OTPField from \"../FormFields/TextFields/OTPField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputOTPField = memo(\r\n\t({ name, label, control, errors, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<OTPField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(value) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(value);\r\n\t\t\t\t\t\t\t\tonChange?.(value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputOTPField.displayName = \"FormInputOTPField\";\r\n\r\nexport default FormInputOTPField;\r\n","import {\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tInputLabel,\r\n\tMenuItem,\r\n\ttype MenuItemProps,\r\n\tSelect,\r\n\ttype SelectChangeEvent,\r\n\ttype SelectProps,\r\n} from \"@mui/material\";\r\nimport React, { type SyntheticEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Base option type for Select\r\n */\r\nexport type SelectOption = {\r\n\tname: string;\r\n\tvalue: string | number;\r\n\tdisabled?: boolean;\r\n\t[key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Select Input Props\r\n * Extends MUI SelectProps with custom form field props\r\n */\r\nexport interface ISelectInputFieldProps\r\n\textends Omit<\r\n\t\tSelectProps<string | number | (string | number)[]>,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"error\" | \"children\" | \"renderValue\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the select field */\r\n\tlabel?: string;\r\n\t/** Current selected value(s) */\r\n\tvalue: string | number | (string | number)[] | \"\";\r\n\t/** Options array to display in dropdown */\r\n\toptions: SelectOption[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below select */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Select variant */\r\n\tvariant?: SelectProps[\"variant\"];\r\n\t/** Select size */\r\n\tsize?: SelectProps[\"size\"];\r\n\t/** Select color */\r\n\tcolor?: SelectProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Whether to allow multiple selections */\r\n\tmultiple?: boolean;\r\n\t/** Custom icon for dropdown indicator */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom render function for selected value(s) */\r\n\trenderValue?: SelectProps<string | number | (string | number)[]>[\"renderValue\"];\r\n\t/** Custom render function for menu items */\r\n\trenderMenuItem?: (option: SelectOption, index: number) => React.ReactNode;\r\n\t/** Custom styles for MenuItem - can be static styles or a function that receives (option, index) */\r\n\tmenuItemStyles?:\r\n\t\t| MenuItemProps[\"sx\"]\r\n\t\t| ((option: SelectOption, index: number) => MenuItemProps[\"sx\"]);\r\n\t/** Custom styles for the Select */\r\n\tselectStyles?: SelectProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for InputLabel */\r\n\tlabelStyles?: React.ComponentProps<typeof InputLabel>[\"sx\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (\r\n\t\tevent: SelectChangeEvent<string | number | (string | number)[]>,\r\n\t\tchild?: React.ReactNode\r\n\t) => void;\r\n\t/** Callback fired when menu opens */\r\n\tonOpen?: (event: SyntheticEvent) => void;\r\n\t/** Callback fired when menu closes */\r\n\tonClose?: (event: SyntheticEvent) => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: SelectProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: SelectProps[\"slots\"];\r\n\t/** Display empty value */\r\n\tdisplayEmpty?: boolean;\r\n\t/** Auto width for menu */\r\n\tautoWidth?: boolean;\r\n\t/** Native select element */\r\n\tnative?: boolean;\r\n\t/** Menu props */\r\n\tMenuProps?: SelectProps[\"MenuProps\"];\r\n}\r\n\r\nconst SelectInputField = forwardRef<HTMLInputElement, ISelectInputFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonOpen,\r\n\t\t\tonClose,\r\n\t\t\toptions,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tvariant = \"outlined\",\r\n\t\t\tsize,\r\n\t\t\tcolor,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tmultiple = false,\r\n\t\t\ticon,\r\n\t\t\trenderValue,\r\n\t\t\trenderMenuItem,\r\n\t\t\tmenuItemStyles,\r\n\t\t\tselectStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tdisplayEmpty = false,\r\n\t\t\tautoWidth = false,\r\n\t\t\tnative = false,\r\n\t\t\tMenuProps,\r\n\t\t\t...selectProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLInputElement>\r\n\t) => {\r\n\t\t// Default render value function\r\n\t\tconst defaultRenderValue = (\r\n\t\t\tselected: string | number | (string | number)[]\r\n\t\t): React.ReactNode => {\r\n\t\t\tif (multiple && Array.isArray(selected)) {\r\n\t\t\t\tif (selected.length === 0) return \"\";\r\n\t\t\t\treturn selected\r\n\t\t\t\t\t.map((val) => {\r\n\t\t\t\t\t\tconst option = options.find((opt) => opt.value === val);\r\n\t\t\t\t\t\treturn option?.name ?? String(val);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.join(\", \");\r\n\t\t\t}\r\n\t\t\tif (!multiple && selected !== \"\" && selected !== null && selected !== undefined) {\r\n\t\t\t\tconst option = options.find((opt) => opt.value === selected);\r\n\t\t\t\treturn option?.name ?? String(selected);\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t};\r\n\r\n\t\t// Default render menu item function\r\n\t\tconst defaultRenderMenuItem = (option: SelectOption, index: number): React.ReactNode => {\r\n\t\t\tconst menuItemSx =\r\n\t\t\t\ttypeof menuItemStyles === \"function\" ?\r\n\t\t\t\t\t(menuItemStyles as (option: SelectOption, index: number) => MenuItemProps[\"sx\"])(\r\n\t\t\t\t\t\toption,\r\n\t\t\t\t\t\tindex\r\n\t\t\t\t\t)\r\n\t\t\t\t:\tmenuItemStyles;\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<MenuItem\r\n\t\t\t\t\tkey={`${option.value}-${index}`}\r\n\t\t\t\t\tvalue={option.value}\r\n\t\t\t\t\tdisabled={option.disabled}\r\n\t\t\t\t\tsx={menuItemSx}\r\n\t\t\t\t>\r\n\t\t\t\t\t{renderMenuItem ? renderMenuItem(option, index) : option.name}\r\n\t\t\t\t</MenuItem>\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (\r\n\t\t\tevent: SelectChangeEvent<string | number | (string | number)[]>,\r\n\t\t\tchild?: React.ReactNode\r\n\t\t) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(event, child);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst labelId = label ? `${name || \"select\"}-label` : undefined;\r\n\t\tconst selectId = label ? `${name || \"select\"}-select` : undefined;\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tvariant={variant}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<InputLabel\r\n\t\t\t\t\t\tid={labelId}\r\n\t\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</InputLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Select\r\n\t\t\t\t\t{...selectProps}\r\n\t\t\t\t\tlabelId={labelId}\r\n\t\t\t\t\tid={selectId}\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tvalue={value}\r\n\t\t\t\t\tlabel={label}\r\n\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\tonOpen={onOpen}\r\n\t\t\t\t\tonClose={onClose}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tmultiple={multiple}\r\n\t\t\t\t\tdisplayEmpty={displayEmpty}\r\n\t\t\t\t\tautoWidth={autoWidth}\r\n\t\t\t\t\tnative={native}\r\n\t\t\t\t\tMenuProps={MenuProps}\r\n\t\t\t\t\tIconComponent={icon as React.ElementType}\r\n\t\t\t\t\trenderValue={renderValue ?? defaultRenderValue}\r\n\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\tslots={slots}\r\n\t\t\t\t\tsx={selectStyles}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t>\r\n\t\t\t\t\t{options &&\r\n\t\t\t\t\t\tArray.isArray(options) &&\r\n\t\t\t\t\t\toptions.map((option, index) => defaultRenderMenuItem(option, index))}\r\n\t\t\t\t</Select>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSelectInputField.displayName = \"SelectInputField\";\r\n\r\nexport default SelectInputField;\r\n","import SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputSelect = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => options, [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SelectInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputSelect.displayName = \"FormInputSelect\";\r\n\r\nexport default FormInputSelect;\r\n","import SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputMultiSelect = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdefaultValue = [],\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => options, [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\tconst fieldValue = Array.isArray(field.value) ? field.value : [];\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SelectInputField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tmultiple\r\n\t\t\t\t\t\t\tvalue={fieldValue}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(e);\r\n\t\t\t\t\t\t\t\tonChange?.(e.target.value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputMultiSelect.displayName = \"FormInputMultiSelect\";\r\n\r\nexport default FormInputMultiSelect;\r\n","import {\r\n\tAutocomplete,\r\n\ttype AutocompleteProps,\r\n\ttype AutocompleteCloseReason,\r\n\ttype AutocompleteInputChangeReason,\r\n\ttype AutocompleteChangeReason,\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport type { FilterOptionsState } from \"@mui/material/useAutocomplete\";\r\nimport React, { type SyntheticEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, memo, useCallback, useMemo } from \"react\";\r\n\r\nexport type AutoCompleteOption = {\r\n\tname: string;\r\n\tvalue: string | number;\r\n\t[key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Autocomplete Input Props\r\n * Extends MUI AutocompleteProps with custom form field props\r\n */\r\nexport interface IAutoCompleteInputProps<\r\n\tT extends AutoCompleteOption = AutoCompleteOption,\r\n\tMultiple extends boolean = false,\r\n\tDisableClearable extends boolean = false,\r\n\tFreeSolo extends boolean = false,\r\n> extends Omit<\r\n\t\tAutocompleteProps<T, Multiple, DisableClearable, FreeSolo>,\r\n\t\t| \"renderInput\"\r\n\t\t| \"options\"\r\n\t\t| \"value\"\r\n\t\t| \"onChange\"\r\n\t\t| \"getOptionLabel\"\r\n\t\t| \"isOptionEqualToValue\"\r\n\t\t| \"renderOption\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the input field */\r\n\tlabel?: string;\r\n\t/** Current selected value */\r\n\tvalue: Multiple extends true ? T[] : T | null;\r\n\t/** Options array to display in dropdown */\r\n\toptions: T[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below input */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Custom function to get option label (defaults to option.name) */\r\n\tgetOptionLabel?: (option: T | string) => string;\r\n\t/** Custom function to check option equality (defaults to comparing option.name) */\r\n\tisOptionEqualToValue?: (option: T, value: T) => boolean;\r\n\t/** Custom render function for options */\r\n\trenderOption?: (\r\n\t\tprops: React.HTMLAttributes<HTMLLIElement>,\r\n\t\toption: T,\r\n\t\tstate?: { selected: boolean; inputValue: string }\r\n\t) => React.ReactNode;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (\r\n\t\tevent: SyntheticEvent,\r\n\t\tnewValue: Multiple extends true ? T[] : T | null,\r\n\t\treason?: AutocompleteChangeReason\r\n\t) => void;\r\n\t/** Callback fired when input value changes */\r\n\tonInputChange?: (\r\n\t\tevent: SyntheticEvent,\r\n\t\tnewInputValue: string,\r\n\t\treason: AutocompleteInputChangeReason\r\n\t) => void;\r\n\t/** Callback fired when popup opens */\r\n\tonOpen?: (event: SyntheticEvent) => void;\r\n\t/** Callback fired when popup closes */\r\n\tonClose?: (event: SyntheticEvent, reason: AutocompleteCloseReason) => void;\r\n\t/** Custom icon for popup indicator */\r\n\tpopupIcon?: React.ReactNode;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for the Autocomplete */\r\n\tautocompleteStyles?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Whether to show loading state */\r\n\tloading?: boolean;\r\n\t/** Text to show when loading */\r\n\tloadingText?: React.ReactNode;\r\n\t/** Text to show when no options available */\r\n\tnoOptionsText?: React.ReactNode;\r\n\t/** Text to show when options are being filtered */\r\n\tfilterText?: string;\r\n\t/** Custom filter options function */\r\n\tfilterOptions?: (options: T[], state: FilterOptionsState<T>) => T[];\r\n\t/** Whether to highlight the first option */\r\n\tautoHighlight?: boolean;\r\n\t/** Whether to select the first option on highlight */\r\n\tautoSelect?: boolean;\r\n\t/** Whether to disable portal rendering */\r\n\tdisablePortal?: boolean;\r\n\t/** Whether to disable list wrapping */\r\n\tdisableListWrap?: boolean;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"slots\"];\r\n}\r\n\r\nconst AutoCompleteField = memo(\r\n\tforwardRef<\r\n\t\tHTMLDivElement,\r\n\t\tIAutoCompleteInputProps<AutoCompleteOption, boolean, boolean, boolean>\r\n\t>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonInputChange,\r\n\t\t\t\tonOpen,\r\n\t\t\t\tonClose,\r\n\t\t\t\toptions,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder,\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor,\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tgetOptionLabel,\r\n\t\t\t\tisOptionEqualToValue,\r\n\t\t\t\trenderOption,\r\n\t\t\t\tpopupIcon,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tautocompleteStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tloading = false,\r\n\t\t\t\tloadingText = \"Loading...\",\r\n\t\t\t\tnoOptionsText = \"No options\",\r\n\t\t\t\tfilterOptions,\r\n\t\t\t\tautoHighlight = true,\r\n\t\t\t\tautoSelect = false,\r\n\t\t\t\tdisablePortal = false,\r\n\t\t\t\tdisableListWrap = false,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...autocompleteProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\t// Default getOptionLabel function\r\n\t\t\tconst defaultGetOptionLabel = useCallback((option: AutoCompleteOption | string): string => {\r\n\t\t\t\tif (typeof option === \"string\") return option;\r\n\t\t\t\treturn option?.name ?? String(option?.value ?? \"\");\r\n\t\t\t}, []);\r\n\r\n\t\t\t// Default isOptionEqualToValue function\r\n\t\t\tconst defaultIsOptionEqualToValue = useCallback(\r\n\t\t\t\t(option: AutoCompleteOption, value: AutoCompleteOption): boolean => {\r\n\t\t\t\t\treturn option?.name === value?.name && option?.value === value?.value;\r\n\t\t\t\t},\r\n\t\t\t\t[]\r\n\t\t\t);\r\n\r\n\t\t\t// Default renderOption function\r\n\t\t\tconst defaultRenderOption = useCallback(\r\n\t\t\t\t(props: React.HTMLAttributes<HTMLLIElement>, option: AutoCompleteOption) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t\t\tkey={`${option.name}-${option.value}`}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{option.name}\r\n\t\t\t\t\t\t</li>\r\n\t\t\t\t\t);\r\n\t\t\t\t},\r\n\t\t\t\t[]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle onChange with proper typing\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: SyntheticEvent, newValue: any, reason?: AutocompleteChangeReason) => {\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(event, newValue, reason);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Autocomplete<AutoCompleteOption, boolean, boolean, boolean>\r\n\t\t\t\t\t\t{...autocompleteProps}\r\n\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\tvalue={value as any}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonInputChange={onInputChange}\r\n\t\t\t\t\t\tonOpen={onOpen}\r\n\t\t\t\t\t\tonClose={onClose}\r\n\t\t\t\t\t\tgetOptionLabel={getOptionLabel ?? defaultGetOptionLabel}\r\n\t\t\t\t\t\tisOptionEqualToValue={isOptionEqualToValue ?? defaultIsOptionEqualToValue}\r\n\t\t\t\t\t\trenderOption={renderOption ?? defaultRenderOption}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tloading={loading}\r\n\t\t\t\t\t\tloadingText={loadingText}\r\n\t\t\t\t\t\tnoOptionsText={noOptionsText}\r\n\t\t\t\t\t\tfilterOptions={filterOptions}\r\n\t\t\t\t\t\tautoHighlight={autoHighlight}\r\n\t\t\t\t\t\tautoSelect={autoSelect}\r\n\t\t\t\t\t\tdisablePortal={disablePortal}\r\n\t\t\t\t\t\tdisableListWrap={disableListWrap}\r\n\t\t\t\t\t\tpopupIcon={popupIcon}\r\n\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={autocompleteStyles}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t\t\t...params.InputProps,\r\n\t\t\t\t\t\t\t\t\t\tinputProps: {\r\n\t\t\t\t\t\t\t\t\t\t\t...params.inputProps,\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{error && !helperText && error.message && (\r\n\t\t\t\t\t\t<FormHelperText>{error.message}</FormHelperText>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nAutoCompleteField.displayName = \"AutoCompleteField\";\r\n\r\nexport default AutoCompleteField;\r\n","import AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputAutoComplete = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdisabled,\r\n\t\tplaceholder,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => options, [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { value, onBlur } = field;\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<AutoCompleteField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tvalue={value ?? null}\r\n\t\t\t\t\t\t\tonChange={(_, newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputAutoComplete.displayName = \"FormInputAutoComplete\";\r\n\r\nexport default FormInputAutoComplete;\r\n","import AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputMultiAutoComplete = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdisabled,\r\n\t\tplaceholder,\r\n\t\tdefaultValue = [],\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => options, [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { value, onBlur } = field;\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\tconst fieldValue = Array.isArray(value) ? value : [];\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<AutoCompleteField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tmultiple\r\n\t\t\t\t\t\t\tvalue={fieldValue}\r\n\t\t\t\t\t\t\tonChange={(_, newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputMultiAutoComplete.displayName = \"FormInputMultiAutoComplete\";\r\n\r\nexport default FormInputMultiAutoComplete;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n\tBox,\r\n\tInputAdornment,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport {\r\n\ttype ForwardedRef,\r\n\tforwardRef,\r\n\tuseState,\r\n\tuseRef,\r\n\tuseEffect,\r\n\tuseCallback,\r\n\tuseMemo,\r\n\tmemo,\r\n} from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Color format types\r\n */\r\nexport type ColorFormat = \"hex\" | \"rgb\" | \"rgba\" | \"hsl\" | \"hsla\";\r\n\r\n/**\r\n * Color value type - can be string (hex) or object (rgb/rgba/hsl/hsla)\r\n */\r\nexport type ColorValue = string | RGBColor | RGBAColor | HSLColor | HSLAColor;\r\n\r\n/**\r\n * RGB color object\r\n */\r\nexport interface RGBColor {\r\n\tr: number;\r\n\tg: number;\r\n\tb: number;\r\n}\r\n\r\n/**\r\n * RGBA color object\r\n */\r\nexport interface RGBAColor extends RGBColor {\r\n\ta: number;\r\n}\r\n\r\n/**\r\n * HSL color object\r\n */\r\nexport interface HSLColor {\r\n\th: number;\r\n\ts: number;\r\n\tl: number;\r\n}\r\n\r\n/**\r\n * HSL color object with alpha\r\n */\r\nexport interface HSLAColor extends HSLColor {\r\n\ta: number;\r\n}\r\n\r\n/**\r\n * Extended Color Picker Field Props\r\n */\r\nexport interface IColorPickerFieldProps\r\n\textends Omit<\r\n\t\tTextFieldProps,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"inputRef\" | \"multiline\" | \"variant\" | \"size\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the color picker field */\r\n\tlabel?: string;\r\n\t/** Current color value (hex string or color object) */\r\n\tvalue: string;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Color format (hex, rgb, rgba, hsl, hsla) */\r\n\tformat?: ColorFormat;\r\n\t/** Whether to show color preview swatch */\r\n\tshowPreview?: boolean;\r\n\t/** Whether to show native color input */\r\n\tshowNativeInput?: boolean;\r\n\t/** Whether to show popover picker */\r\n\tshowPopoverPicker?: boolean;\r\n\t/** Preset colors to display */\r\n\tpresetColors?: string[];\r\n\t/** Whether to show preset colors */\r\n\tshowPresetColors?: boolean;\r\n\t/** Callback fired when the color changes */\r\n\tonChange?: (value: string) => void;\r\n\t/** Callback fired when field receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when field loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired on Enter key press */\r\n\tonEnterPress?: (value: string) => void;\r\n\t/** Custom styles for the color preview swatch */\r\n\tpreviewStyles?: React.CSSProperties;\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\n/**\r\n * Convert hex to RGB (utility function for future format conversions)\r\n * @internal - Exported for potential future use with rgb/rgba formats\r\n */\r\nexport const hexToRgb = (hex: string): RGBColor | null => {\r\n\tconst result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\treturn result ?\r\n\t\t\t{\r\n\t\t\t\tr: parseInt(result[1], 16),\r\n\t\t\t\tg: parseInt(result[2], 16),\r\n\t\t\t\tb: parseInt(result[3], 16),\r\n\t\t\t}\r\n\t\t:\tnull;\r\n};\r\n\r\n/**\r\n * Convert RGB to hex (utility function for future format conversions)\r\n * @internal - Exported for potential future use with rgb/rgba formats\r\n */\r\nexport const rgbToHex = (r: number, g: number, b: number): string => {\r\n\treturn \"#\" + [r, g, b].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\r\n};\r\n\r\n/**\r\n * Validate hex color\r\n */\r\nconst isValidHex = (color: string): boolean => {\r\n\treturn /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(color);\r\n};\r\n\r\n/**\r\n * Normalize hex color (ensure # prefix and 6 digits)\r\n */\r\nconst normalizeHex = (color: string): string => {\r\n\tlet hex = color.replace(\"#\", \"\");\r\n\tif (hex.length === 3) {\r\n\t\thex = hex\r\n\t\t\t.split(\"\")\r\n\t\t\t.map((char) => char + char)\r\n\t\t\t.join(\"\");\r\n\t}\r\n\treturn \"#\" + hex;\r\n};\r\n\r\nconst ColorPickerField = memo(\r\n\tforwardRef<HTMLDivElement, IColorPickerFieldProps>(\r\n\t\t(\r\n\t\t\t{\r\n\t\t\t\tname,\r\n\t\t\t\tlabel,\r\n\t\t\t\tvalue,\r\n\t\t\t\tonChange,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tonEnterPress,\r\n\t\t\t\terror,\r\n\t\t\t\thelperText,\r\n\t\t\t\tdisabled = false,\r\n\t\t\t\tplaceholder = \"#000000\",\r\n\t\t\t\tvariant = \"outlined\",\r\n\t\t\t\tsize,\r\n\t\t\t\tcolor = \"primary\",\r\n\t\t\t\tfullWidth = true,\r\n\t\t\t\trequired,\r\n\t\t\t\tformat = \"hex\",\r\n\t\t\t\tshowPreview = true,\r\n\t\t\t\tshowNativeInput = true,\r\n\t\t\t\tshowPopoverPicker = true,\r\n\t\t\t\tpresetColors = [\r\n\t\t\t\t\t\"#000000\",\r\n\t\t\t\t\t\"#FFFFFF\",\r\n\t\t\t\t\t\"#FF0000\",\r\n\t\t\t\t\t\"#00FF00\",\r\n\t\t\t\t\t\"#0000FF\",\r\n\t\t\t\t\t\"#FFFF00\",\r\n\t\t\t\t\t\"#FF00FF\",\r\n\t\t\t\t\t\"#00FFFF\",\r\n\t\t\t\t],\r\n\t\t\t\tshowPresetColors = false,\r\n\t\t\t\tpreviewStyles,\r\n\t\t\t\tformControlStyles,\r\n\t\t\t\tinputStyles,\r\n\t\t\t\tslotProps,\r\n\t\t\t\tslots,\r\n\t\t\t\t...textFieldProps\r\n\t\t\t},\r\n\t\t\tref: ForwardedRef<HTMLDivElement>\r\n\t\t) => {\r\n\t\t\tconst [internalValue, setInternalValue] = useState<string>(value || \"#000000\");\r\n\t\t\tconst colorInputRef = useRef<HTMLInputElement | null>(null);\r\n\t\t\tconst popoverAnchorRef = useRef<HTMLDivElement | null>(null);\r\n\r\n\t\t\t// Update internal value when prop changes\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\tif (value !== undefined) {\r\n\t\t\t\t\tsetInternalValue(value || \"#000000\");\r\n\t\t\t\t}\r\n\t\t\t}, [value]);\r\n\r\n\t\t\t// Normalize hex value\r\n\t\t\tconst normalizedValue =\r\n\t\t\t\tisValidHex(internalValue) ? normalizeHex(internalValue) : internalValue || \"#000000\";\r\n\r\n\t\t\t// Handle input change\r\n\t\t\tconst handleChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\r\n\t\t\t\t\tconst newValue = (event.target as HTMLInputElement).value;\r\n\t\t\t\t\tsetInternalValue(newValue);\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(newValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle native color input change\r\n\t\t\tconst handleColorInputChange = useCallback(\r\n\t\t\t\t(event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\t\t\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t\t\tconst newValue = event.target.value;\r\n\t\t\t\t\tsetInternalValue(newValue);\r\n\r\n\t\t\t\t\tif (onChange) {\r\n\t\t\t\t\t\tonChange(newValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onChange]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle preview swatch click - directly open native color picker\r\n\t\t\tconst handlePreviewClick = useCallback(\r\n\t\t\t\t(event: React.MouseEvent<HTMLDivElement>) => {\r\n\t\t\t\t\tif (disabled) return;\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t// Trigger the hidden native color input\r\n\t\t\t\t\tif (colorInputRef.current) {\r\n\t\t\t\t\t\tcolorInputRef.current.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[disabled, colorInputRef]\r\n\t\t\t);\r\n\r\n\t\t\t// Handle key down\r\n\t\t\tconst handleKeyDown = useCallback(\r\n\t\t\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\r\n\t\t\t\t\tif (event.key === \"Enter\" && onEnterPress) {\r\n\t\t\t\t\t\tonEnterPress(normalizedValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (textFieldProps.onKeyDown) {\r\n\t\t\t\t\t\ttextFieldProps.onKeyDown(event);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t[onEnterPress, normalizedValue, textFieldProps.onKeyDown]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize preview swatch\r\n\t\t\tconst previewSwatch = useMemo(\r\n\t\t\t\t() => (\r\n\t\t\t\t\t<InputAdornment position=\"start\">\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tref={popoverAnchorRef}\r\n\t\t\t\t\t\t\tonClick={!disabled ? handlePreviewClick : undefined}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\twidth: size === \"small\" ? 24 : 32,\r\n\t\t\t\t\t\t\t\theight: size === \"small\" ? 24 : 32,\r\n\t\t\t\t\t\t\t\tborderRadius: 1,\r\n\t\t\t\t\t\t\t\tborder: \"1px solid\",\r\n\t\t\t\t\t\t\t\tborderColor: error ? \"error.main\" : \"divider\",\r\n\t\t\t\t\t\t\t\tbackgroundColor: normalizedValue,\r\n\t\t\t\t\t\t\t\tcursor: !disabled ? \"pointer\" : \"default\",\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\ttransition: \"all 0.2s\",\r\n\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\topacity: !disabled ? 0.8 : 1,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t...previewStyles,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\ttitle={!disabled ? \"Click to open color picker\" : undefined}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t),\r\n\t\t\t\t[\r\n\t\t\t\t\tpopoverAnchorRef,\r\n\t\t\t\t\tdisabled,\r\n\t\t\t\t\thandlePreviewClick,\r\n\t\t\t\t\tsize,\r\n\t\t\t\t\terror,\r\n\t\t\t\t\tnormalizedValue,\r\n\t\t\t\t\tpreviewStyles,\r\n\t\t\t\t]\r\n\t\t\t);\r\n\r\n\t\t\t// Build slotProps for MUI v7\r\n\t\t\tconst finalSlotProps = useMemo(\r\n\t\t\t\t() => ({\r\n\t\t\t\t\t...slotProps,\r\n\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\tinputProps: {\r\n\t\t\t\t\t\t\t...((slotProps?.input as any)?.inputProps || {}),\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t...(showPreview && {\r\n\t\t\t\t\t\t\tstartAdornment: previewSwatch,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t},\r\n\t\t\t\t}),\r\n\t\t\t\t[slotProps, showPreview, previewSwatch]\r\n\t\t\t);\r\n\r\n\t\t\t// Memoize helper text\r\n\t\t\tconst displayHelperText = useMemo(\r\n\t\t\t\t() => helperText ?? (error?.message ? error.message : undefined),\r\n\t\t\t\t[helperText, error?.message]\r\n\t\t\t);\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={formControlStyles}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={normalizedValue}\r\n\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tslotProps={finalSlotProps}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\thelperText={displayHelperText}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{/* Hidden native color input - triggered when clicking preview swatch */}\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tref={colorInputRef}\r\n\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\tvalue={normalizedValue}\r\n\t\t\t\t\t\tonChange={handleColorInputChange}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\twidth: 0,\r\n\t\t\t\t\t\t\theight: 0,\r\n\t\t\t\t\t\t\topacity: 0,\r\n\t\t\t\t\t\t\tpointerEvents: \"none\",\r\n\t\t\t\t\t\t\tvisibility: \"hidden\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\taria-hidden=\"true\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\t)\r\n);\r\n\r\nColorPickerField.displayName = \"ColorPickerField\";\r\n\r\nexport default ColorPickerField;\r\n","import ColorPickerField from \"../FormFields/DropdownFields/ColorPickerField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputColorPicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tdefaultValue = \"#000000\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<ColorPickerField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? defaultValue}\r\n\t\t\t\t\t\t\tonChange={(color) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(color);\r\n\t\t\t\t\t\t\t\tonChange?.(color);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputColorPicker.displayName = \"FormInputColorPicker\";\r\n\r\nexport default FormInputColorPicker;\r\n","import {\r\n\tButton,\r\n\ttype ButtonProps,\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tInputAdornment,\r\n\tTextField,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport { CloudUpload as CloudUploadIcon } from \"@mui/icons-material\";\r\nimport React, { type ChangeEvent, type DragEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef, useRef, useState } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * File value type\r\n */\r\nexport type FileValue = File | File[] | null | undefined;\r\n\r\n/**\r\n * Extended File Upload Field Props\r\n * Extends MUI TextFieldProps with custom file upload props\r\n */\r\nexport interface IFileUploadFieldProps\r\n\textends Omit<TextFieldProps, \"value\" | \"onChange\" | \"name\" | \"type\" | \"error\" | \"onDrop\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the file upload field */\r\n\tlabel?: string;\r\n\t/** Current file value */\r\n\tvalue?: File | File[] | { name: string } | null;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** File types to accept (e.g., \"image/*\", \".pdf,.doc\") */\r\n\taccept?: string;\r\n\t/** Whether to allow multiple file selection */\r\n\tmultiple?: boolean;\r\n\t/** Maximum file size in bytes */\r\n\tmaxSize?: number;\r\n\t/** Minimum file size in bytes */\r\n\tminSize?: number;\r\n\t/** Allowed file types (MIME types or extensions) */\r\n\tallowedTypes?: string[];\r\n\t/** Whether to show file preview */\r\n\tshowPreview?: boolean;\r\n\t/** Whether to enable drag and drop */\r\n\tenableDragDrop?: boolean;\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Upload button text */\r\n\tbuttonText?: string;\r\n\t/** Upload button variant */\r\n\tbuttonVariant?: ButtonProps[\"variant\"];\r\n\t/** Upload button color */\r\n\tbuttonColor?: ButtonProps[\"color\"];\r\n\t/** Upload button size */\r\n\tbuttonSize?: ButtonProps[\"size\"];\r\n\t/** Custom upload icon */\r\n\tuploadIcon?: React.ReactNode;\r\n\t/** Callback fired when file(s) change */\r\n\tonChange?: (file: File | File[] | undefined) => void;\r\n\t/** Callback fired when file is selected */\r\n\tonFileSelect?: (file: File | File[] | undefined) => void;\r\n\t/** Callback fired when file is removed */\r\n\tonFileRemove?: () => void;\r\n\t/** Callback fired on file validation error */\r\n\tonValidationError?: (error: string) => void;\r\n\t/** Callback fired when file is dropped (drag and drop) */\r\n\tonDrop?: (files: FileList) => void;\r\n\t/** Custom styles for the TextField */\r\n\tinputStyles?: TextFieldProps[\"sx\"];\r\n\t/** Custom styles for the Button */\r\n\tbuttonStyles?: ButtonProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for the container */\r\n\tcontainerStyles?: React.CSSProperties;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TextFieldProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TextFieldProps[\"slots\"];\r\n}\r\n\r\nconst FileUploadField = forwardRef<HTMLInputElement, IFileUploadFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonFileSelect,\r\n\t\t\tonFileRemove,\r\n\t\t\tonValidationError,\r\n\t\t\tonDrop,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\taccept,\r\n\t\t\tmultiple = false,\r\n\t\t\tmaxSize,\r\n\t\t\tminSize,\r\n\t\t\tallowedTypes,\r\n\t\t\tshowPreview = true,\r\n\t\t\tenableDragDrop = false,\r\n\t\t\tplaceholder = \"No file chosen\",\r\n\t\t\tvariant = \"outlined\",\r\n\t\t\tsize,\r\n\t\t\tcolor,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tbuttonText = \"Upload\",\r\n\t\t\tbuttonVariant = \"contained\",\r\n\t\t\tbuttonColor = \"primary\",\r\n\t\t\tbuttonSize,\r\n\t\t\tuploadIcon = <CloudUploadIcon />,\r\n\t\t\tinputStyles,\r\n\t\t\tbuttonStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tcontainerStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\t...textFieldProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLInputElement>\r\n\t) => {\r\n\t\tconst internalRef = useRef<HTMLInputElement | null>(null);\r\n\t\tconst [isDragging, setIsDragging] = useState(false);\r\n\t\tconst [, setDragCounter] = useState(0);\r\n\r\n\t\t// Get the file input ref (either forwarded ref or internal ref)\r\n\t\tconst fileInputRef = ref && typeof ref === \"object\" && \"current\" in ref ? ref : internalRef;\r\n\r\n\t\t// Get file name(s) from value\r\n\t\tconst getFileName = (): string => {\r\n\t\t\tif (!value) return \"\";\r\n\t\t\tif (value instanceof File) return value.name;\r\n\t\t\tif (Array.isArray(value)) {\r\n\t\t\t\tif (value.length === 0) return \"\";\r\n\t\t\t\tif (value.length === 1) return value[0].name;\r\n\t\t\t\treturn `${value.length} files selected`;\r\n\t\t\t}\r\n\t\t\tif (typeof value === \"object\" && \"name\" in value) {\r\n\t\t\t\treturn value.name;\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t};\r\n\r\n\t\t// Validate file\r\n\t\tconst validateFile = (file: File): string | null => {\r\n\t\t\t// Check file size\r\n\t\t\tif (maxSize && file.size > maxSize) {\r\n\t\t\t\treturn `File size exceeds maximum allowed size of ${formatFileSize(maxSize)}`;\r\n\t\t\t}\r\n\t\t\tif (minSize && file.size < minSize) {\r\n\t\t\t\treturn `File size is below minimum required size of ${formatFileSize(minSize)}`;\r\n\t\t\t}\r\n\r\n\t\t\t// Check file type\r\n\t\t\tif (allowedTypes && allowedTypes.length > 0) {\r\n\t\t\t\tconst fileType = file.type || getFileExtension(file.name);\r\n\t\t\t\tconst isAllowed = allowedTypes.some((type) => {\r\n\t\t\t\t\tif (type.startsWith(\".\")) {\r\n\t\t\t\t\t\treturn file.name.toLowerCase().endsWith(type.toLowerCase());\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn fileType.includes(type) || fileType === type;\r\n\t\t\t\t});\r\n\t\t\t\tif (!isAllowed) {\r\n\t\t\t\t\treturn `File type not allowed. Allowed types: ${allowedTypes.join(\", \")}`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t};\r\n\r\n\t\t// Format file size\r\n\t\tconst formatFileSize = (bytes: number): string => {\r\n\t\t\tif (bytes === 0) return \"0 Bytes\";\r\n\t\t\tconst k = 1024;\r\n\t\t\tconst sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\r\n\t\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\t\t\treturn Math.round((bytes / Math.pow(k, i)) * 100) / 100 + \" \" + sizes[i];\r\n\t\t};\r\n\r\n\t\t// Get file extension\r\n\t\tconst getFileExtension = (filename: string): string => {\r\n\t\t\treturn filename.slice(((filename.lastIndexOf(\".\") - 1) >>> 0) + 2);\r\n\t\t};\r\n\r\n\t\t// Handle file change\r\n\t\tconst handleFileChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tconst files = event.target.files;\r\n\t\t\tif (!files || files.length === 0) {\r\n\t\t\t\tif (onChange) onChange(undefined);\r\n\t\t\t\tif (onFileSelect) onFileSelect(undefined);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst fileArray = Array.from(files);\r\n\t\t\tlet validFiles: File[] = [];\r\n\t\t\tlet hasError = false;\r\n\r\n\t\t\t// Validate each file\r\n\t\t\tfor (const file of fileArray) {\r\n\t\t\t\tconst validationError = validateFile(file);\r\n\t\t\t\tif (validationError) {\r\n\t\t\t\t\thasError = true;\r\n\t\t\t\t\tif (onValidationError) {\r\n\t\t\t\t\t\tonValidationError(validationError);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalidFiles.push(file);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (validFiles.length > 0) {\r\n\t\t\t\tconst result = multiple ? validFiles : validFiles[0];\r\n\t\t\t\tif (onChange) onChange(result);\r\n\t\t\t\tif (onFileSelect) onFileSelect(result);\r\n\t\t\t} else if (hasError && onValidationError) {\r\n\t\t\t\t// Error already handled\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle button click\r\n\t\tconst handleButtonClick = () => {\r\n\t\t\tif (!disabled) {\r\n\t\t\t\tfileInputRef.current?.click();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle file remove\r\n\t\tconst handleFileRemove = () => {\r\n\t\t\tif (fileInputRef.current) {\r\n\t\t\t\tfileInputRef.current.value = \"\";\r\n\t\t\t}\r\n\t\t\tif (onChange) onChange(undefined);\r\n\t\t\tif (onFileRemove) onFileRemove();\r\n\t\t};\r\n\r\n\t\t// Handle drag and drop\r\n\t\tconst handleDragEnter = (e: DragEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t\tsetDragCounter((prev) => prev + 1);\r\n\t\t\tif (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\r\n\t\t\t\tsetIsDragging(true);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst handleDragLeave = (e: DragEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t\tsetDragCounter((prev) => {\r\n\t\t\t\tconst newCounter = prev - 1;\r\n\t\t\t\tif (newCounter === 0) {\r\n\t\t\t\t\tsetIsDragging(false);\r\n\t\t\t\t}\r\n\t\t\t\treturn newCounter;\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tconst handleDragOver = (e: DragEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t};\r\n\r\n\t\tconst handleDrop = (e: DragEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\t\t\tsetIsDragging(false);\r\n\t\t\tsetDragCounter(0);\r\n\r\n\t\t\tif (disabled) return;\r\n\r\n\t\t\tconst files = e.dataTransfer.files;\r\n\t\t\tif (files && files.length > 0) {\r\n\t\t\t\tif (onDrop) {\r\n\t\t\t\t\tonDrop(files);\r\n\t\t\t\t}\r\n\t\t\t\t// Create a synthetic event to reuse handleFileChange\r\n\t\t\t\tconst syntheticEvent = {\r\n\t\t\t\t\ttarget: { files },\r\n\t\t\t\t} as ChangeEvent<HTMLInputElement>;\r\n\t\t\t\thandleFileChange(syntheticEvent);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst fileName = getFileName();\r\n\t\tconst displayValue = showPreview && fileName ? fileName : placeholder;\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t<div\r\n\t\t\t\t\tstyle={containerStyles}\r\n\t\t\t\t\tonDragEnter={enableDragDrop ? handleDragEnter : undefined}\r\n\t\t\t\t\tonDragLeave={enableDragDrop ? handleDragLeave : undefined}\r\n\t\t\t\t\tonDragOver={enableDragDrop ? handleDragOver : undefined}\r\n\t\t\t\t\tonDrop={enableDragDrop ? handleDrop : undefined}\r\n\t\t\t\t>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"file\"\r\n\t\t\t\t\t\taccept={accept}\r\n\t\t\t\t\t\tmultiple={multiple}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tid={name ? `file-upload-${name}` : undefined}\r\n\t\t\t\t\t\tonChange={handleFileChange}\r\n\t\t\t\t\t\tstyle={{ display: \"none\" }}\r\n\t\t\t\t\t\tref={fileInputRef}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t{...textFieldProps}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={displayValue}\r\n\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\tvariant={variant}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\terror={!!error}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tsx={inputStyles}\r\n\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t...slotProps,\r\n\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t...slotProps?.input,\r\n\t\t\t\t\t\t\t\treadOnly: true,\r\n\t\t\t\t\t\t\t\tendAdornment: (\r\n\t\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t\t\t\t{showPreview && fileName && (\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleFileRemove}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ mr: 1 }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tClear\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={buttonVariant}\r\n\t\t\t\t\t\t\t\t\t\t\tcolor={buttonColor}\r\n\t\t\t\t\t\t\t\t\t\t\tsize={buttonSize || size}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={handleButtonClick}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={uploadIcon}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={buttonStyles}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{buttonText}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\thelperText={helperText ?? (error?.message ? error.message : undefined)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{enableDragDrop && isDragging && (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.05)\",\r\n\t\t\t\t\t\t\t\tborder: \"2px dashed\",\r\n\t\t\t\t\t\t\t\tborderColor: \"primary.main\",\r\n\t\t\t\t\t\t\t\tborderRadius: 4,\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\tzIndex: 1000,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tDrop files here\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t\t{error && !helperText && error.message && <FormHelperText>{error.message}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFileUploadField.displayName = \"FileUploadField\";\r\n\r\nexport default FileUploadField;\r\n","import FileUploadField from \"../FormFields/DropdownFields/FileUploadField\";\r\nimport React, { useRef, memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputFileUpload = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tsize,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst fileRef = useRef(null);\r\n\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => (\r\n\t\t\t\t\t<FileUploadField\r\n\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\tsize={size as TextFieldProps[\"size\"]}\r\n\t\t\t\t\t\tref={fileRef}\r\n\t\t\t\t\t\tonChange={(files) => {\r\n\t\t\t\t\t\t\tfield.onChange(files);\r\n\t\t\t\t\t\t\tonChange?.(files);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputFileUpload.displayName = \"FormInputFileUpload\";\r\n\r\nexport default FormInputFileUpload;\r\n","import {\r\n\tBox,\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tIconButton,\r\n\ttype TextFieldProps,\r\n} from \"@mui/material\";\r\nimport { Clear as ClearIcon } from \"@mui/icons-material\";\r\nimport { DatePicker, type DatePickerProps, LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport React, { type ForwardedRef } from \"react\";\r\nimport { forwardRef, useRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Date Picker Field Props\r\n * Extends MUI DatePickerProps with custom form field props\r\n */\r\nexport interface IDatePickerFieldProps\r\n\textends Omit<\r\n\t\tDatePickerProps,\r\n\t\t\"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\" | \"renderInput\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the date picker */\r\n\tlabel?: string;\r\n\t/** Current selected date value */\r\n\tvalue: Date | null;\r\n\t/** Default date value */\r\n\tdefaultValue?: Date | null;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Minimum selectable date */\r\n\tminDate?: Date;\r\n\t/** Maximum selectable date */\r\n\tmaxDate?: Date;\r\n\t/** Function to disable specific dates */\r\n\tshouldDisableDate?: (date: Date) => boolean;\r\n\t/** Function to disable specific months */\r\n\tshouldDisableMonth?: (month: Date) => boolean;\r\n\t/** Function to disable specific years */\r\n\tshouldDisableYear?: (year: Date) => boolean;\r\n\t/** TextField size */\r\n\tsize?: TextFieldProps[\"size\"];\r\n\t/** TextField variant */\r\n\tvariant?: TextFieldProps[\"variant\"];\r\n\t/** TextField color */\r\n\tcolor?: TextFieldProps[\"color\"];\r\n\t/** Placeholder text */\r\n\tplaceholder?: string;\r\n\t/** Whether the field is read-only */\r\n\treadOnly?: boolean;\r\n\t/** Whether to show clear button */\r\n\tshowClearButton?: boolean;\r\n\t/** Whether to disable past dates */\r\n\tdisablePast?: boolean;\r\n\t/** Whether to disable future dates */\r\n\tdisableFuture?: boolean;\r\n\t/** Reference date for the calendar */\r\n\treferenceDate?: Date;\r\n\t/** Controlled view state */\r\n\tview?: \"day\" | \"month\" | \"year\";\r\n\t/** Format for displaying the date */\r\n\tformat?: string;\r\n\t/** Whether to open the calendar on focus */\r\n\topenTo?: \"day\" | \"month\" | \"year\";\r\n\t/** Custom styles for the DatePicker */\r\n\tpickerStyles?: DatePickerProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Custom styles for the container Box */\r\n\tcontainerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\r\n\t/** Custom styles for the TextField */\r\n\ttextFieldStyles?: TextFieldProps[\"sx\"];\r\n\t/** Callback fired when the date changes */\r\n\tonChange?: (value: Date | null) => void;\r\n\t/** Callback fired when the field receives focus */\r\n\tonFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when the field loses focus */\r\n\tonBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n\t/** Callback fired when a view change is requested */\r\n\tonViewChange?: (view: \"day\" | \"month\" | \"year\") => void;\r\n\t/** Callback fired when a month change is requested */\r\n\tonMonthChange?: (month: Date) => void;\r\n\t/** Callback fired when a year change is requested */\r\n\tonYearChange?: (year: Date) => void;\r\n\t/** Callback fired when the calendar opens */\r\n\tonOpen?: () => void;\r\n\t/** Callback fired when the calendar closes */\r\n\tonClose?: () => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: DatePickerProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: DatePickerProps[\"slots\"];\r\n\t/** Date adapter to use (defaults to AdapterDateFns) */\r\n\tdateAdapter?: typeof AdapterDateFns;\r\n\t/** Whether to reduce animations */\r\n\treduceAnimations?: boolean;\r\n\t/** Auto focus the input */\r\n\tautoFocus?: boolean;\r\n}\r\n\r\nconst DatePickerField = forwardRef<HTMLDivElement, IDatePickerFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue,\r\n\t\t\tonChange,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\tonViewChange,\r\n\t\t\tonMonthChange,\r\n\t\t\tonYearChange,\r\n\t\t\tonOpen,\r\n\t\t\tonClose,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tminDate,\r\n\t\t\tmaxDate,\r\n\t\t\tshouldDisableDate,\r\n\t\t\tshouldDisableMonth,\r\n\t\t\tshouldDisableYear,\r\n\t\t\tsize = \"medium\",\r\n\t\t\tvariant = \"outlined\",\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tplaceholder,\r\n\t\t\treadOnly = false,\r\n\t\t\tshowClearButton = true,\r\n\t\t\tdisablePast = false,\r\n\t\t\tdisableFuture = false,\r\n\t\t\treferenceDate,\r\n\t\t\tview,\r\n\t\t\tformat,\r\n\t\t\topenTo = \"day\",\r\n\t\t\tpickerStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tcontainerStyles,\r\n\t\t\ttextFieldStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tdateAdapter = AdapterDateFns,\r\n\t\t\treduceAnimations = false,\r\n\t\t\tautoFocus = false,\r\n\t\t\t...datePickerProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\tconst inputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (newValue: Date | null) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle clear button click\r\n\t\tconst handleClear = () => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(null);\r\n\t\t\t}\r\n\t\t\tif (inputRef.current) {\r\n\t\t\t\tinputRef.current.focus();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Default placeholder\r\n\t\tconst defaultPlaceholder = placeholder || \"MM/DD/YYYY\";\r\n\r\n\t\t// Merge slotProps with textField configuration\r\n\t\tconst mergedSlotProps = {\r\n\t\t\t...slotProps,\r\n\t\t\ttextField: {\r\n\t\t\t\t...slotProps?.textField,\r\n\t\t\t\terror: !!error,\r\n\t\t\t\tsize,\r\n\t\t\t\tvariant,\r\n\t\t\t\tcolor,\r\n\t\t\t\thelperText: error ? (helperText ?? error.message) : helperText,\r\n\t\t\t\tfullWidth,\r\n\t\t\t\tplaceholder: defaultPlaceholder,\r\n\t\t\t\tautoFocus,\r\n\t\t\t\tonFocus,\r\n\t\t\t\tonBlur,\r\n\t\t\t\tinputRef: ref || inputRef,\r\n\t\t\t\tsx: {\r\n\t\t\t\t\t...textFieldStyles,\r\n\t\t\t\t\t...((\r\n\t\t\t\t\t\tslotProps?.textField &&\r\n\t\t\t\t\t\ttypeof slotProps.textField === \"object\" &&\r\n\t\t\t\t\t\t\"sx\" in slotProps.textField\r\n\t\t\t\t\t) ?\r\n\t\t\t\t\t\tslotProps.textField.sx\r\n\t\t\t\t\t:\t{}),\r\n\t\t\t\t},\r\n\t\t\t\tInputProps: {\r\n\t\t\t\t\t...((\r\n\t\t\t\t\t\tslotProps?.textField &&\r\n\t\t\t\t\t\ttypeof slotProps.textField === \"object\" &&\r\n\t\t\t\t\t\t\"InputProps\" in slotProps.textField\r\n\t\t\t\t\t) ?\r\n\t\t\t\t\t\tslotProps.textField.InputProps\r\n\t\t\t\t\t:\t{}),\r\n\t\t\t\t\tendAdornment:\r\n\t\t\t\t\t\tshowClearButton && value ?\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleClear}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tedge=\"end\"\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\t\t\tright: 8,\r\n\t\t\t\t\t\t\t\t\ttop: \"50%\",\r\n\t\t\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\taria-label=\"clear date\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<ClearIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t:\tundefined,\r\n\t\t\t\t},\r\n\t\t\t} as Partial<TextFieldProps>,\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t...formLabelStyles,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...containerStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<LocalizationProvider dateAdapter={dateAdapter}>\r\n\t\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\t\t{...datePickerProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tonViewChange={onViewChange}\r\n\t\t\t\t\t\t\tonMonthChange={onMonthChange}\r\n\t\t\t\t\t\t\tonYearChange={onYearChange}\r\n\t\t\t\t\t\t\tonOpen={onOpen}\r\n\t\t\t\t\t\t\tonClose={onClose}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tminDate={minDate}\r\n\t\t\t\t\t\t\tmaxDate={maxDate}\r\n\t\t\t\t\t\t\tshouldDisableDate={shouldDisableDate}\r\n\t\t\t\t\t\t\tshouldDisableMonth={shouldDisableMonth}\r\n\t\t\t\t\t\t\tshouldDisableYear={shouldDisableYear}\r\n\t\t\t\t\t\t\tdisablePast={disablePast}\r\n\t\t\t\t\t\t\tdisableFuture={disableFuture}\r\n\t\t\t\t\t\t\treferenceDate={referenceDate}\r\n\t\t\t\t\t\t\tview={view}\r\n\t\t\t\t\t\t\tformat={format}\r\n\t\t\t\t\t\t\topenTo={openTo}\r\n\t\t\t\t\t\t\treduceAnimations={reduceAnimations}\r\n\t\t\t\t\t\t\tslotProps={mergedSlotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={pickerStyles}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</LocalizationProvider>\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nDatePickerField.displayName = \"DatePickerField\";\r\n\r\nexport default DatePickerField;\r\n","import DatePickerField from \"../FormFields/DateFields/DatePickerField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { TextFieldProps } from \"@mui/material\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\n\r\nconst FormInputDatePicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tsize,\r\n\t\treadOnly,\r\n\t\tshouldDisableDate,\r\n\t\tdisabled,\r\n\t\tplaceholder,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputDateFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\t// Exclude views prop as DatePicker uses DateView[], not TimeView[]\r\n\t\t\t\t\tconst { views, ampm, ampmInClock, timezone, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<DatePickerField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\t\tonChange={(newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\tshouldDisableDate={shouldDisableDate}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t\tsize={size as TextFieldProps[\"size\"]}\r\n\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\treadOnly={readOnly}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputDatePicker.displayName = \"FormInputDatePicker\";\r\n\r\nexport default FormInputDatePicker;\r\n","import {\n\tBox,\n\tFormControl,\n\tFormHelperText,\n\tFormLabel,\n\ttype FormLabelProps,\n\tIconButton,\n\ttype TextFieldProps,\n} from \"@mui/material\";\nimport { Clear as ClearIcon } from \"@mui/icons-material\";\nimport { TimePicker, type TimePickerProps, LocalizationProvider } from \"@mui/x-date-pickers\";\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\nimport React, { type ForwardedRef } from \"react\";\nimport { forwardRef, useRef } from \"react\";\n\n/**\n * Error object type\n */\nexport type FieldError = {\n\tmessage?: string;\n} | null;\n\n/**\n * Extended Time Picker Field Props\n * Extends MUI TimePickerProps with custom form field props\n */\nexport interface ITimePickerFieldProps\n\textends Omit<\n\t\tTimePickerProps,\n\t\t\"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\" | \"renderInput\" | \"onViewChange\"\n\t> {\n\t/** Field name for form identification */\n\tname?: string;\n\t/** Label text for the time picker */\n\tlabel?: string;\n\t/** Current selected time value */\n\tvalue: Date | null;\n\t/** Default time value */\n\tdefaultValue?: Date | null;\n\t/** Error object with optional message */\n\terror?: FieldError;\n\t/** Helper text to display below field */\n\thelperText?: string;\n\t/** Whether the field is disabled */\n\tdisabled?: boolean;\n\t/** Full width of the field */\n\tfullWidth?: boolean;\n\t/** Required field indicator */\n\trequired?: boolean;\n\t/** Minimum selectable time */\n\tminTime?: Date;\n\t/** Maximum selectable time */\n\tmaxTime?: Date;\n\t/** Function to disable specific times */\n\tshouldDisableTime?: (time: Date, view: \"hours\" | \"minutes\" | \"seconds\") => boolean;\n\t/** TextField size */\n\tsize?: TextFieldProps[\"size\"];\n\t/** TextField variant */\n\tvariant?: TextFieldProps[\"variant\"];\n\t/** TextField color */\n\tcolor?: TextFieldProps[\"color\"];\n\t/** Placeholder text */\n\tplaceholder?: string;\n\t/** Whether the field is read-only */\n\treadOnly?: boolean;\n\t/** Whether to show clear button */\n\tshowClearButton?: boolean;\n\t/** Whether to disable past times */\n\tdisablePast?: boolean;\n\t/** Whether to disable future times */\n\tdisableFuture?: boolean;\n\t/** Whether to use 12-hour format */\n\tampm?: boolean;\n\t/** Available views (hours, minutes, seconds) */\n\tviews?: (\"hours\" | \"minutes\" | \"seconds\")[];\n\t/** Controlled view state */\n\tview?: \"hours\" | \"minutes\" | \"seconds\";\n\t/** Default view */\n\topenTo?: \"hours\" | \"minutes\" | \"seconds\";\n\t/** Format for displaying the time */\n\tformat?: string;\n\t/** Custom styles for the TimePicker */\n\tpickerStyles?: TimePickerProps[\"sx\"];\n\t/** Custom styles for FormControl */\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\n\t/** Custom styles for FormLabel */\n\tformLabelStyles?: FormLabelProps[\"sx\"];\n\t/** Custom styles for the container Box */\n\tcontainerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\n\t/** Custom styles for the TextField */\n\ttextFieldStyles?: TextFieldProps[\"sx\"];\n\t/** Callback fired when the time changes */\n\tonChange?: (value: Date | null) => void;\n\t/** Callback fired when the field receives focus */\n\tonFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n\t/** Callback fired when the field loses focus */\n\tonBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n\t/** Callback fired when a view change is requested */\n\tonViewChange?: (view: \"hours\" | \"minutes\" | \"seconds\" | \"meridiem\") => void;\n\t/** Callback fired when the picker opens */\n\tonOpen?: () => void;\n\t/** Callback fired when the picker closes */\n\tonClose?: () => void;\n\t/** Custom slot props for MUI v7 */\n\tslotProps?: TimePickerProps[\"slotProps\"];\n\t/** Custom slots for MUI v7 */\n\tslots?: TimePickerProps[\"slots\"];\n\t/** Date adapter to use (defaults to AdapterDateFns) */\n\tdateAdapter?: typeof AdapterDateFns;\n\t/** Auto focus the input */\n\tautoFocus?: boolean;\n}\n\nconst TimePickerField = forwardRef<HTMLDivElement, ITimePickerFieldProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tonViewChange,\n\t\t\tonOpen,\n\t\t\tonClose,\n\t\t\terror,\n\t\t\thelperText,\n\t\t\tdisabled = false,\n\t\t\tfullWidth = true,\n\t\t\trequired,\n\t\t\tminTime,\n\t\t\tmaxTime,\n\t\t\tshouldDisableTime,\n\t\t\tsize = \"medium\",\n\t\t\tvariant = \"outlined\",\n\t\t\tcolor = \"primary\",\n\t\t\tplaceholder,\n\t\t\treadOnly = false,\n\t\t\tshowClearButton = true,\n\t\t\tdisablePast = false,\n\t\t\tdisableFuture = false,\n\t\t\tampm = true,\n\t\t\tviews,\n\t\t\tview,\n\t\t\topenTo = \"hours\",\n\t\t\tformat,\n\t\t\tpickerStyles,\n\t\t\tformControlStyles,\n\t\t\tformLabelStyles,\n\t\t\tcontainerStyles,\n\t\t\ttextFieldStyles,\n\t\t\tslotProps,\n\t\t\tslots,\n\t\t\tdateAdapter = AdapterDateFns,\n\t\t\tautoFocus = false,\n\t\t\t...timePickerProps\n\t\t},\n\t\tref: ForwardedRef<HTMLDivElement>\n\t) => {\n\t\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\n\t\t// Handle onChange with proper typing\n\t\tconst handleChange = (newValue: Date | null) => {\n\t\t\tif (onChange) {\n\t\t\t\tonChange(newValue);\n\t\t\t}\n\t\t};\n\n\t\t// Handle clear button click\n\t\tconst handleClear = () => {\n\t\t\tif (onChange) {\n\t\t\t\tonChange(null);\n\t\t\t}\n\t\t\tif (inputRef.current) {\n\t\t\t\tinputRef.current.focus();\n\t\t\t}\n\t\t};\n\n\t\t// Default placeholder\n\t\tconst defaultPlaceholder = placeholder || (ampm ? \"hh:mm AM/PM\" : \"hh:mm\");\n\n\t\t// Merge slotProps with textField configuration\n\t\tconst mergedSlotProps = {\n\t\t\t...slotProps,\n\t\t\ttextField: {\n\t\t\t\t...slotProps?.textField,\n\t\t\t\terror: !!error,\n\t\t\t\tsize,\n\t\t\t\tvariant,\n\t\t\t\tcolor,\n\t\t\t\thelperText: error ? (helperText ?? error.message) : helperText,\n\t\t\t\tfullWidth,\n\t\t\t\tplaceholder: defaultPlaceholder,\n\t\t\t\tautoFocus,\n\t\t\t\tonFocus,\n\t\t\t\tonBlur,\n\t\t\t\tinputRef: ref || inputRef,\n\t\t\t\tsx: {\n\t\t\t\t\t...textFieldStyles,\n\t\t\t\t\t...((\n\t\t\t\t\t\tslotProps?.textField &&\n\t\t\t\t\t\ttypeof slotProps.textField === \"object\" &&\n\t\t\t\t\t\t\"sx\" in slotProps.textField\n\t\t\t\t\t) ?\n\t\t\t\t\t\tslotProps.textField.sx\n\t\t\t\t\t:\t{}),\n\t\t\t\t},\n\t\t\t\tInputProps: {\n\t\t\t\t\t...((\n\t\t\t\t\t\tslotProps?.textField &&\n\t\t\t\t\t\ttypeof slotProps.textField === \"object\" &&\n\t\t\t\t\t\t\"InputProps\" in slotProps.textField\n\t\t\t\t\t) ?\n\t\t\t\t\t\tslotProps.textField.InputProps\n\t\t\t\t\t:\t{}),\n\t\t\t\t\tendAdornment:\n\t\t\t\t\t\tshowClearButton && value ?\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\tonClick={handleClear}\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tedge=\"end\"\n\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\tright: 8,\n\t\t\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\taria-label=\"clear time\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ClearIcon fontSize=\"small\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t:\tundefined,\n\t\t\t\t},\n\t\t\t} as Partial<TextFieldProps>,\n\t\t};\n\n\t\treturn (\n\t\t\t<FormControl\n\t\t\t\terror={!!error}\n\t\t\t\tdisabled={disabled}\n\t\t\t\trequired={required}\n\t\t\t\tfullWidth={fullWidth}\n\t\t\t\tsx={formControlStyles}\n\t\t\t>\n\t\t\t\t{label && (\n\t\t\t\t\t<FormLabel\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tmb: 1,\n\t\t\t\t\t\t\t...formLabelStyles,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</FormLabel>\n\t\t\t\t)}\n\t\t\t\t<Box\n\t\t\t\t\tref={ref}\n\t\t\t\t\tsx={{\n\t\t\t\t\t\t...containerStyles,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<LocalizationProvider dateAdapter={dateAdapter}>\n\t\t\t\t\t\t<TimePicker\n\t\t\t\t\t\t\t{...timePickerProps}\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tlabel={label ? undefined : label}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\t\tonViewChange={onViewChange}\n\t\t\t\t\t\t\tonOpen={onOpen}\n\t\t\t\t\t\t\tonClose={onClose}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tminTime={minTime}\n\t\t\t\t\t\t\tmaxTime={maxTime}\n\t\t\t\t\t\t\tshouldDisableTime={shouldDisableTime}\n\t\t\t\t\t\t\tdisablePast={disablePast}\n\t\t\t\t\t\t\tdisableFuture={disableFuture}\n\t\t\t\t\t\t\tampm={ampm}\n\t\t\t\t\t\t\tviews={views}\n\t\t\t\t\t\t\tview={view}\n\t\t\t\t\t\t\topenTo={openTo}\n\t\t\t\t\t\t\tformat={format}\n\t\t\t\t\t\t\tslotProps={mergedSlotProps}\n\t\t\t\t\t\t\tslots={slots}\n\t\t\t\t\t\t\tsx={pickerStyles}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</LocalizationProvider>\n\t\t\t\t</Box>\n\t\t\t\t{error && (\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\n\t\t\t\t)}\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\n\t\t\t</FormControl>\n\t\t);\n\t}\n);\n\nTimePickerField.displayName = \"TimePickerField\";\n\nexport default TimePickerField;\n","import TimePickerField from \"../FormFields/DateFields/TimePickerField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\n\r\nconst FormInputTimePicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tampm = true,\r\n\t\ttimezone,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputDateFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<TimePickerField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\t\tonChange={(newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tampm={ampm}\r\n\t\t\t\t\t\t\ttimezone={timezone}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTimePicker.displayName = \"FormInputTimePicker\";\r\n\r\nexport default FormInputTimePicker;\r\n","import {\r\n\tBox,\r\n\tButton,\r\n\tFormControl,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tStack,\r\n\ttype ButtonProps,\r\n} from \"@mui/material\";\r\nimport { TimeClock, type TimeClockProps, type TimeView } from \"@mui/x-date-pickers\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport React, { type ForwardedRef } from \"react\";\r\nimport { forwardRef, useState } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Time Clock Field Props\r\n * Extends MUI TimeClockProps with custom form field props\r\n */\r\nexport interface ITimeClockFieldProps\r\n\textends Omit<\r\n\t\tTimeClockProps<TimeView>,\r\n\t\t\"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\" | \"view\" | \"onViewChange\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the time clock */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current selected time value */\r\n\tvalue: Date | null;\r\n\t/** Default time value */\r\n\tdefaultValue?: Date | null;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below time clock */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Available views (hours, minutes, seconds) */\r\n\tviews?: TimeView[];\r\n\t/** Whether to show AM/PM in the clock */\r\n\tampmInClock?: boolean;\r\n\t/** Whether to use 12-hour format */\r\n\tampm?: boolean;\r\n\t/** Whether to disable past times */\r\n\tdisablePast?: boolean;\r\n\t/** Whether to disable future times */\r\n\tdisableFuture?: boolean;\r\n\t/** Minimum selectable time */\r\n\tminTime?: Date;\r\n\t/** Maximum selectable time */\r\n\tmaxTime?: Date;\r\n\t/** Function to disable specific times */\r\n\tshouldDisableTime?: (time: Date, view: TimeView) => boolean;\r\n\t/** Custom styles for the TimeClock */\r\n\tclockStyles?: TimeClockProps<TimeView>[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Custom styles for the container Box */\r\n\tcontainerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\r\n\t/** Custom styles for the view buttons Stack */\r\n\tbuttonsStackStyles?: React.ComponentProps<typeof Stack>[\"sx\"];\r\n\t/** Custom styles for view buttons */\r\n\tbuttonStyles?: ButtonProps[\"sx\"];\r\n\t/** Custom styles for active view button */\r\n\tactiveButtonStyles?: ButtonProps[\"sx\"];\r\n\t/** Whether to show view selector buttons */\r\n\tshowViewButtons?: boolean;\r\n\t/** Initial view */\r\n\tinitialView?: TimeView;\r\n\t/** Controlled view state */\r\n\tview?: TimeView;\r\n\t/** Callback fired when the time changes */\r\n\tonChange?: (value: Date | null) => void;\r\n\t/** Callback fired when a view change is requested */\r\n\tonViewChange?: (view: TimeView) => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: TimeClockProps<TimeView>[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: TimeClockProps<TimeView>[\"slots\"];\r\n\t/** Date adapter to use (defaults to AdapterDateFns) */\r\n\tdateAdapter?: typeof AdapterDateFns;\r\n\t/** Auto focus */\r\n\tautoFocus?: boolean;\r\n}\r\n\r\nconst TimeClockField = forwardRef<HTMLDivElement, ITimeClockFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue,\r\n\t\t\tonChange,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tviews = [\"hours\", \"minutes\"],\r\n\t\t\tampmInClock = false,\r\n\t\t\tampm = true,\r\n\t\t\tdisablePast = false,\r\n\t\t\tdisableFuture = false,\r\n\t\t\tminTime,\r\n\t\t\tmaxTime,\r\n\t\t\tshouldDisableTime,\r\n\t\t\tclockStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tcontainerStyles,\r\n\t\t\tbuttonsStackStyles,\r\n\t\t\tbuttonStyles,\r\n\t\t\tactiveButtonStyles,\r\n\t\t\tshowViewButtons = true,\r\n\t\t\tinitialView = \"hours\",\r\n\t\t\tview: controlledView,\r\n\t\t\tonViewChange: controlledOnViewChange,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tdateAdapter = AdapterDateFns,\r\n\t\t\tautoFocus = false,\r\n\t\t\t...timeClockProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\t// Internal view state (only used if view is not controlled)\r\n\t\tconst [internalView, setInternalView] = useState<TimeView>(initialView);\r\n\r\n\t\t// Use controlled view if provided, otherwise use internal state\r\n\t\tconst view = controlledView ?? internalView;\r\n\t\tconst setView = controlledOnViewChange ?? setInternalView;\r\n\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (newValue: Date | null) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle view change\r\n\t\tconst handleViewChange = (newView: TimeView) => {\r\n\t\t\tsetView(newView);\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t...formLabelStyles,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...containerStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{showViewButtons && views && views.length > 1 && (\r\n\t\t\t\t\t\t<Stack\r\n\t\t\t\t\t\t\tdirection=\"row\"\r\n\t\t\t\t\t\t\tjustifyContent=\"center\"\r\n\t\t\t\t\t\t\tspacing={1}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tmt: 1,\r\n\t\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t\t...buttonsStackStyles,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{views.map((v) => (\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tkey={v}\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tvariant={view === v ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\tonClick={() => handleViewChange(v)}\r\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\tview === v ?\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t...(buttonStyles as any),\r\n\t\t\t\t\t\t\t\t\t\t\t\t...(activeButtonStyles as any),\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t:\t(buttonStyles as any)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{v}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<LocalizationProvider dateAdapter={dateAdapter}>\r\n\t\t\t\t\t\t<TimeClock\r\n\t\t\t\t\t\t\t{...timeClockProps}\r\n\t\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tview={view}\r\n\t\t\t\t\t\t\tonViewChange={handleViewChange}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tviews={views}\r\n\t\t\t\t\t\t\tampmInClock={ampmInClock}\r\n\t\t\t\t\t\t\tampm={ampm}\r\n\t\t\t\t\t\t\tdisablePast={disablePast}\r\n\t\t\t\t\t\t\tdisableFuture={disableFuture}\r\n\t\t\t\t\t\t\tminTime={minTime}\r\n\t\t\t\t\t\t\tmaxTime={maxTime}\r\n\t\t\t\t\t\t\tshouldDisableTime={shouldDisableTime}\r\n\t\t\t\t\t\t\tautoFocus={autoFocus}\r\n\t\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={clockStyles}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</LocalizationProvider>\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nTimeClockField.displayName = \"TimeClockField\";\r\n\r\nexport default TimeClockField;\r\n","import TimeClockField from \"../FormFields/DateFields/TimeClockField\";\r\nimport { Box, FormHelperText, FormLabel } from \"@mui/material\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\n\r\nconst FormInputTimeClock = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\treadOnly,\r\n\t\tdisabled,\r\n\t\tampm = true,\r\n\t\tviews,\r\n\t\tampmInClock = true,\r\n\t\tdisablePast = false,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputDateFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst errorMessage = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : \"\"),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst hasError = useMemo(() => !!errors?.[name], [errors, name]);\r\n\r\n\t\tconst ampmValue = useMemo(() => (typeof ampm === \"boolean\" ? ampm : undefined), [ampm]);\r\n\r\n\t\treturn (\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tborder: (t) => `1px solid ${t.palette.grey[600]}`,\r\n\t\t\t\t\tborderRadius: (t) => t.spacing(0.5),\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<FormLabel\r\n\t\t\t\t\tsx={(t) => ({\r\n\t\t\t\t\t\tborderBottom: `1px solid ${t.palette.grey[600]}`,\r\n\t\t\t\t\t\tpadding: (t) => t.spacing(1),\r\n\t\t\t\t\t})}\r\n\t\t\t\t>\r\n\t\t\t\t\t{label}\r\n\t\t\t\t</FormLabel>\r\n\t\t\t\t<Controller\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\trender={({ field }) => (\r\n\t\t\t\t\t\t<TimeClockField\r\n\t\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\t\tonChange={(newValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tampm={ampmValue}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\treadOnly={readOnly}\r\n\t\t\t\t\t\t\tampmInClock={ampmInClock}\r\n\t\t\t\t\t\t\tdisablePast={disablePast}\r\n\t\t\t\t\t\t\tviews={views}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{hasError && (\r\n\t\t\t\t\t<FormHelperText sx={{ color: \"error.main\", mt: 1 }}>{errorMessage}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputTimeClock.displayName = \"FormInputTimeClock\";\r\n\r\nexport default FormInputTimeClock;\r\n","import { Box, FormControl, FormHelperText, FormLabel, type FormLabelProps } from \"@mui/material\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport { DateCalendar, type DateCalendarProps } from \"@mui/x-date-pickers/DateCalendar\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport React, { type ForwardedRef } from \"react\";\r\nimport { forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Date Calendar Field Props\r\n * Extends MUI DateCalendarProps with custom form field props\r\n */\r\nexport interface IDateCalendarFieldProps\r\n\textends Omit<DateCalendarProps, \"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the calendar */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current selected date value */\r\n\tvalue: Date | null;\r\n\t/** Default date value */\r\n\tdefaultValue?: Date | null;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below calendar */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Minimum selectable date */\r\n\tminDate?: Date;\r\n\t/** Maximum selectable date */\r\n\tmaxDate?: Date;\r\n\t/** Function to disable specific dates */\r\n\tshouldDisableDate?: (date: Date) => boolean;\r\n\t/** Function to disable specific months */\r\n\tshouldDisableMonth?: (month: Date) => boolean;\r\n\t/** Function to disable specific years */\r\n\tshouldDisableYear?: (year: Date) => boolean;\r\n\t/** Custom styles for the DateCalendar */\r\n\tcalendarStyles?: DateCalendarProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Custom styles for the container Box */\r\n\tcontainerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\r\n\t/** Callback fired when the date changes */\r\n\tonChange?: (value: Date | null) => void;\r\n\t/** Callback fired when a view change is requested */\r\n\tonViewChange?: (view: \"day\" | \"month\" | \"year\") => void;\r\n\t/** Callback fired when a month change is requested */\r\n\tonMonthChange?: (month: Date) => void;\r\n\t/** Callback fired when a year change is requested */\r\n\tonYearChange?: (year: Date) => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: DateCalendarProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: DateCalendarProps[\"slots\"];\r\n\t/** Date adapter to use (defaults to AdapterDateFns) */\r\n\tdateAdapter?: typeof AdapterDateFns;\r\n\t/** Whether to show days outside current month */\r\n\tshowDaysOutsideCurrentMonth?: boolean;\r\n\t/** Whether to disable past dates */\r\n\tdisablePast?: boolean;\r\n\t/** Whether to disable future dates */\r\n\tdisableFuture?: boolean;\r\n\t/** Reference date for the calendar */\r\n\treferenceDate?: Date;\r\n\t/** Controlled view state */\r\n\tview?: \"day\" | \"month\" | \"year\";\r\n}\r\n\r\nconst DateCalendarField = forwardRef<HTMLDivElement, IDateCalendarFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue,\r\n\t\t\tonChange,\r\n\t\t\tonViewChange,\r\n\t\t\tonMonthChange,\r\n\t\t\tonYearChange,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tminDate,\r\n\t\t\tmaxDate,\r\n\t\t\tshouldDisableDate,\r\n\t\t\tshouldDisableMonth,\r\n\t\t\tshouldDisableYear,\r\n\t\t\tcalendarStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tcontainerStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tdateAdapter = AdapterDateFns,\r\n\t\t\tshowDaysOutsideCurrentMonth = false,\r\n\t\t\tdisablePast = false,\r\n\t\t\tdisableFuture = false,\r\n\t\t\treferenceDate,\r\n\t\t\tview,\r\n\t\t\t...dateCalendarProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (newValue: Date | null) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t...formLabelStyles,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...containerStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<LocalizationProvider dateAdapter={dateAdapter}>\r\n\t\t\t\t\t\t<DateCalendar\r\n\t\t\t\t\t\t\t{...dateCalendarProps}\r\n\t\t\t\t\t\t\tvalue={value}\r\n\t\t\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tonViewChange={onViewChange}\r\n\t\t\t\t\t\t\tonMonthChange={onMonthChange}\r\n\t\t\t\t\t\t\tonYearChange={onYearChange}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tminDate={minDate}\r\n\t\t\t\t\t\t\tmaxDate={maxDate}\r\n\t\t\t\t\t\t\tshouldDisableDate={shouldDisableDate}\r\n\t\t\t\t\t\t\tshouldDisableMonth={shouldDisableMonth}\r\n\t\t\t\t\t\t\tshouldDisableYear={shouldDisableYear}\r\n\t\t\t\t\t\t\tshowDaysOutsideCurrentMonth={showDaysOutsideCurrentMonth}\r\n\t\t\t\t\t\t\tdisablePast={disablePast}\r\n\t\t\t\t\t\t\tdisableFuture={disableFuture}\r\n\t\t\t\t\t\t\treferenceDate={referenceDate}\r\n\t\t\t\t\t\t\tview={view}\r\n\t\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={calendarStyles}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</LocalizationProvider>\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nDateCalendarField.displayName = \"DateCalendarField\";\r\n\r\nexport default DateCalendarField;\r\n","import DateCalendarField from \"../FormFields/DateFields/DateCalendarField\";\r\nimport { Box, FormHelperText, FormLabel } from \"@mui/material\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\n\r\nconst FormInputCalendar = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\treadOnly,\r\n\t\tdisabled,\r\n\t\tdefaultValue = null,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputDateFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst errorMessage = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : \"\"),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst hasError = useMemo(() => !!errors?.[name], [errors, name]);\r\n\r\n\t\treturn (\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tborder: (t) => `1px solid ${t.palette.grey[600]}`,\r\n\t\t\t\t\tborderRadius: (t) => t.spacing(0.5),\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<FormLabel\r\n\t\t\t\t\tsx={(t) => ({\r\n\t\t\t\t\t\tborderBottom: `1px solid ${t.palette.grey[600]}`,\r\n\t\t\t\t\t\tpadding: (t) => t.spacing(1),\r\n\t\t\t\t\t})}\r\n\t\t\t\t>\r\n\t\t\t\t\t{label}\r\n\t\t\t\t</FormLabel>\r\n\t\t\t\t<Controller\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\t\tconst { views, ...restProps } = props;\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<DateCalendarField\r\n\t\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\t\tvalue={field.value ?? null}\r\n\t\t\t\t\t\t\t\tonChange={(newValue) => {\r\n\t\t\t\t\t\t\t\t\tfield.onChange(newValue);\r\n\t\t\t\t\t\t\t\t\tonChange?.(newValue);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\treadOnly={readOnly}\r\n\t\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\theight: \"300px\",\r\n\t\t\t\t\t\t\t\t\t...restProps.sx,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t\t{hasError && (\r\n\t\t\t\t\t<FormHelperText sx={{ color: \"error.main\", mt: 1 }}>{errorMessage}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputCalendar.displayName = \"FormInputCalendar\";\r\n\r\nexport default FormInputCalendar;\r\n","import {\r\n\tCheckbox,\r\n\ttype CheckboxProps,\r\n\tFormControl,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tFormHelperText,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Checkbox Field Props\r\n * Extends MUI CheckboxProps with custom form field props\r\n */\r\nexport interface ICheckboxFieldProps extends Omit<CheckboxProps, \"checked\" | \"onChange\" | \"name\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the checkbox */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current checked state */\r\n\tvalue: boolean;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below checkbox */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Checkbox color */\r\n\tcolor?: CheckboxProps[\"color\"];\r\n\t/** Checkbox size */\r\n\tsize?: CheckboxProps[\"size\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Label placement */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (checked: boolean) => void;\r\n\t/** Callback fired when checkbox is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\t/** Callback fired when checkbox receives focus */\r\n\tonFocus?: CheckboxProps[\"onFocus\"];\r\n\t/** Callback fired when checkbox loses focus */\r\n\tonBlur?: CheckboxProps[\"onBlur\"];\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for the Checkbox */\r\n\tcheckboxStyles?: CheckboxProps[\"sx\"];\r\n\t/** Custom styles for FormControlLabel */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Indeterminate state */\r\n\tindeterminate?: boolean;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: CheckboxProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: CheckboxProps[\"slots\"];\r\n}\r\n\r\nconst CheckboxField = forwardRef<HTMLButtonElement, ICheckboxFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\tcheckedIcon,\r\n\t\t\ticon,\r\n\t\t\tindeterminate = false,\r\n\t\t\tcheckboxStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\t...checkboxProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLButtonElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (_event: ChangeEvent<HTMLInputElement>, checked: boolean) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(checked);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click event\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsize={size === \"large\" ? \"medium\" : size}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t<FormControlLabel\r\n\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t{...checkboxProps}\r\n\t\t\t\t\t\t\tchecked={value}\r\n\t\t\t\t\t\t\tindeterminate={indeterminate}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tonClick={handleClick}\r\n\t\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\tcheckedIcon={checkedIcon}\r\n\t\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={checkboxStyles}\r\n\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlabel={label}\r\n\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t/>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCheckboxField.displayName = \"CheckboxField\";\r\n\r\nexport default CheckboxField;\r\n","import CheckBoxField from \"../FormFields/BoxFields/CheckBoxField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputCheckBox = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tdefaultValue = false,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<CheckBoxField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? false}\r\n\t\t\t\t\t\t\tonChange={(checked) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(checked);\r\n\t\t\t\t\t\t\t\tonChange?.(checked);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputCheckBox.displayName = \"FormInputCheckBox\";\r\n\r\nexport default FormInputCheckBox;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tCheckbox,\r\n\ttype CheckboxProps,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tBox,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent, type FocusEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Checkbox option type\r\n */\r\nexport type CheckboxOption = {\r\n\tvalue: string | number;\r\n\tlabel: React.ReactNode;\r\n\tdisabled?: boolean;\r\n};\r\n\r\n/**\r\n * Extended Checkbox Group Field Props\r\n */\r\nexport interface ICheckboxFieldGroupProps\r\n\textends Omit<\r\n\t\tFormControlProps,\r\n\t\t| \"error\"\r\n\t\t| \"disabled\"\r\n\t\t| \"required\"\r\n\t\t| \"fullWidth\"\r\n\t\t| \"color\"\r\n\t\t| \"size\"\r\n\t\t| \"onChange\"\r\n\t\t| \"onFocus\"\r\n\t\t| \"onBlur\"\r\n\t\t| \"onClick\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the checkbox group */\r\n\tlabel?: React.ReactNode;\r\n\t/** Array of selected values */\r\n\tvalue: (string | number)[];\r\n\t/** Array of checkbox options */\r\n\toptions: CheckboxOption[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below field */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Checkbox color */\r\n\tcolor?: CheckboxProps[\"color\"];\r\n\t/** Checkbox size */\r\n\tsize?: CheckboxProps[\"size\"];\r\n\t/** Label placement relative to checkbox */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Whether to display checkboxes in a row */\r\n\trow?: boolean;\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for individual checkboxes */\r\n\tcheckboxStyles?: CheckboxProps[\"sx\"];\r\n\t/** Custom styles for checkbox labels */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (value: (string | number)[]) => void;\r\n\t/** Callback fired when a checkbox receives focus */\r\n\tonFocus?: (event: FocusEvent<HTMLButtonElement>, value: string | number) => void;\r\n\t/** Callback fired when a checkbox loses focus */\r\n\tonBlur?: (event: FocusEvent<HTMLButtonElement>, value: string | number) => void;\r\n\t/** Callback fired when a checkbox is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>, value: string | number) => void;\r\n\t/** Custom render function for checkboxes */\r\n\trenderCheckbox?: (\r\n\t\toption: CheckboxOption,\r\n\t\tindex: number,\r\n\t\tisChecked: boolean,\r\n\t\thandleChange: (event: ChangeEvent<HTMLInputElement>) => void\r\n\t) => React.ReactNode;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: {\r\n\t\tcheckbox?: CheckboxProps[\"slotProps\"];\r\n\t\tformControlLabel?: FormControlLabelProps[\"slotProps\"];\r\n\t};\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: {\r\n\t\tcheckbox?: CheckboxProps[\"slots\"];\r\n\t};\r\n\t/** FormLabel props */\r\n\tformLabelProps?: Omit<FormLabelProps, \"children\">;\r\n\t/** FormControlLabel props */\r\n\tformControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\" | \"value\">;\r\n}\r\n\r\nconst CheckboxFieldGroup = forwardRef<HTMLDivElement, ICheckboxFieldGroupProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\toptions,\r\n\t\t\tonChange,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\tonClick,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\trow = false,\r\n\t\t\tcheckedIcon,\r\n\t\t\ticon,\r\n\t\t\tcheckboxStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\trenderCheckbox,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformLabelProps,\r\n\t\t\tformControlLabelProps,\r\n\t\t\t...formControlProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\t// Handle checkbox change\r\n\t\tconst handleChange =\r\n\t\t\t(optionValue: string | number) => (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\t\tif (disabled) return;\r\n\r\n\t\t\t\tconst isChecked = event.target.checked;\r\n\t\t\t\tlet newValue: (string | number)[];\r\n\r\n\t\t\t\tif (isChecked) {\r\n\t\t\t\t\t// Add to selection\r\n\t\t\t\t\tnewValue = [...value, optionValue];\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Remove from selection\r\n\t\t\t\t\tnewValue = value.filter((val) => val !== optionValue);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onChange) {\r\n\t\t\t\t\tonChange(newValue);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t// Handle focus\r\n\t\tconst handleFocus =\r\n\t\t\t(optionValue: string | number) => (event: FocusEvent<HTMLButtonElement>) => {\r\n\t\t\t\tif (onFocus) {\r\n\t\t\t\t\tonFocus(event, optionValue);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t// Handle blur\r\n\t\tconst handleBlur = (optionValue: string | number) => (event: FocusEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onBlur) {\r\n\t\t\t\tonBlur(event, optionValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click\r\n\t\tconst handleClick =\r\n\t\t\t(optionValue: string | number) => (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\t\tif (onClick) {\r\n\t\t\t\t\tonClick(event, optionValue);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t// Default render function for checkboxes\r\n\t\tconst defaultRenderCheckbox = (\r\n\t\t\toption: CheckboxOption,\r\n\t\t\tindex: number,\r\n\t\t\tisChecked: boolean,\r\n\t\t\thandleChangeFn: (event: ChangeEvent<HTMLInputElement>) => void\r\n\t\t) => {\r\n\t\t\treturn (\r\n\t\t\t\t<FormControlLabel\r\n\t\t\t\t\tkey={`${option.value}-${index}`}\r\n\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\tname={name ? `${name}-${option.value}` : undefined}\r\n\t\t\t\t\t\t\tchecked={isChecked}\r\n\t\t\t\t\t\t\tonChange={handleChangeFn}\r\n\t\t\t\t\t\t\tonFocus={handleFocus(option.value)}\r\n\t\t\t\t\t\t\tonBlur={handleBlur(option.value)}\r\n\t\t\t\t\t\t\tonClick={handleClick(option.value)}\r\n\t\t\t\t\t\t\tdisabled={disabled || option.disabled}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\tcheckedIcon={checkedIcon}\r\n\t\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\t\tslotProps={slotProps?.checkbox}\r\n\t\t\t\t\t\t\tslots={slots?.checkbox}\r\n\t\t\t\t\t\t\tsx={checkboxStyles}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlabel={option.label}\r\n\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\tslotProps={slotProps?.formControlLabel}\r\n\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t\t{...formControlLabelProps}\r\n\t\t\t\t/>\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\t{...(formControlProps as any)}\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tcomponent=\"fieldset\"\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tcomponent=\"legend\"\r\n\t\t\t\t\t\tsx={formLabelStyles}\r\n\t\t\t\t\t\t{...formLabelProps}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Box\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tflexDirection: row ? \"row\" : \"column\",\r\n\t\t\t\t\t\tflexWrap: row ? \"wrap\" : \"nowrap\",\r\n\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\tmt: label ? 1 : 0,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{options.map((option, index) => {\r\n\t\t\t\t\t\tconst isChecked = value.includes(option.value);\r\n\t\t\t\t\t\tconst changeHandler = handleChange(option.value);\r\n\r\n\t\t\t\t\t\tif (renderCheckbox) {\r\n\t\t\t\t\t\t\treturn renderCheckbox(option, index, isChecked, changeHandler);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn defaultRenderCheckbox(option, index, isChecked, changeHandler);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</Box>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nCheckboxFieldGroup.displayName = \"CheckboxFieldGroup\";\r\n\r\nexport default CheckboxFieldGroup;\r\n","import CheckBoxFieldGroup from \"../FormFields/BoxFields/CheckBoxFieldGroup\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputCheckBoxGroupFields } from \"./types\";\r\n\r\nconst FormInputCheckBoxGroup = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdefaultValue = [],\r\n\t\tonChange,\r\n\t\trow,\r\n\t\tcolor,\r\n\t\tlabelPlacement,\r\n\t\t...props\r\n\t}: IFormInputCheckBoxGroupFields) => {\r\n\t\t// Convert options to CheckboxOption format - memoized\r\n\t\tconst checkboxOptions = useMemo(\r\n\t\t\t() =>\r\n\t\t\t\toptions.map((option) => ({\r\n\t\t\t\t\tvalue: option.value,\r\n\t\t\t\t\tlabel: option.name,\r\n\t\t\t\t\tdisabled: option.disabled,\r\n\t\t\t\t})),\r\n\t\t\t[options]\r\n\t\t);\r\n\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\tconst fieldValue = Array.isArray(field.value) ? field.value : [];\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<CheckBoxFieldGroup\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={fieldValue}\r\n\t\t\t\t\t\t\toptions={checkboxOptions}\r\n\t\t\t\t\t\t\tonChange={(value) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(value);\r\n\t\t\t\t\t\t\t\tonChange?.(value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputCheckBoxGroup.displayName = \"FormInputCheckBoxGroup\";\r\n\r\nexport default FormInputCheckBoxGroup;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tFormHelperText,\r\n\tSwitch,\r\n\ttype SwitchProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Switch Field Props\r\n * Extends MUI SwitchProps with custom form field props\r\n */\r\nexport interface ISwitchFieldProps extends Omit<SwitchProps, \"checked\" | \"onChange\" | \"name\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the switch */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current checked state */\r\n\tvalue: boolean;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below switch */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Switch color */\r\n\tcolor?: SwitchProps[\"color\"];\r\n\t/** Switch size */\r\n\tsize?: SwitchProps[\"size\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Label placement */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Edge placement for the switch */\r\n\tedge?: SwitchProps[\"edge\"];\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for the Switch */\r\n\tswitchStyles?: SwitchProps[\"sx\"];\r\n\t/** Custom styles for FormControlLabel */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (checked: boolean) => void;\r\n\t/** Callback fired when switch is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\t/** Callback fired when switch receives focus */\r\n\tonFocus?: SwitchProps[\"onFocus\"];\r\n\t/** Callback fired when switch loses focus */\r\n\tonBlur?: SwitchProps[\"onBlur\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: SwitchProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: SwitchProps[\"slots\"];\r\n\t/** FormControlLabel props */\r\n\tformControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\" | \"checked\">;\r\n}\r\n\r\nconst SwitchField = forwardRef<HTMLButtonElement, ISwitchFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\tedge,\r\n\t\t\tswitchStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformControlLabelProps,\r\n\t\t\t...switchProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLButtonElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (_event: ChangeEvent<HTMLInputElement>, checked: boolean) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(checked);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click event\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst switchComponent = (\r\n\t\t\t// <Switch {...switchProps} />\r\n\t\t\t<Switch\r\n\t\t\t\t{...switchProps}\r\n\t\t\t\tchecked={value}\r\n\t\t\t\tonChange={handleChange}\r\n\t\t\t\tonClick={handleClick}\r\n\t\t\t\tonFocus={onFocus}\r\n\t\t\t\tonBlur={onBlur}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tcolor={color}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tedge={edge}\r\n\t\t\t\tname={name}\r\n\t\t\t\tslotProps={slotProps}\r\n\t\t\t\tslots={slots}\r\n\t\t\t\tsx={switchStyles}\r\n\t\t\t\tref={ref}\r\n\t\t\t/>\r\n\t\t);\r\n\r\n\t\t// If no label, just return the switch (matches standard MUI Switch)\r\n\t\tif (!label) {\r\n\t\t\treturn (\r\n\t\t\t\t<FormControl\r\n\t\t\t\t\terror={!!error}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\trequired={required}\r\n\t\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"inline-flex\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t...formControlStyles,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{switchComponent}\r\n\t\t\t\t\t{(error || helperText) && (\r\n\t\t\t\t\t\t<FormHelperText\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tmarginLeft: 0,\r\n\t\t\t\t\t\t\t\tmarginRight: 0,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{error ? (helperText ?? (error?.message ? error.message : \"\")) : helperText}\r\n\t\t\t\t\t\t</FormHelperText>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</FormControl>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// With label, use FormControlLabel (standard MUI pattern)\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t...formControlStyles,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<FormControlLabel\r\n\t\t\t\t\tcontrol={switchComponent}\r\n\t\t\t\t\tlabel={label}\r\n\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t\t{...formControlLabelProps}\r\n\t\t\t\t/>\r\n\t\t\t\t{(error || helperText) && (\r\n\t\t\t\t\t<FormHelperText\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmarginLeft: labelPlacement === \"start\" ? \"72px\" : 0,\r\n\t\t\t\t\t\t\tmarginRight: 0,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{error ? (helperText ?? (error?.message ? error.message : \"\")) : helperText}\r\n\t\t\t\t\t</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSwitchField.displayName = \"SwitchField\";\r\n\r\nexport default SwitchField;\r\n","import SwitchField from \"../FormFields/BoxFields/SwitchField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputSwitch = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tdefaultValue = false,\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SwitchField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? false}\r\n\t\t\t\t\t\t\tonChange={(checked) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(checked);\r\n\t\t\t\t\t\t\t\tonChange?.(checked);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputSwitch.displayName = \"FormInputSwitch\";\r\n\r\nexport default FormInputSwitch;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tSlider,\r\n\ttype SliderProps,\r\n} from \"@mui/material\";\r\nimport React, { type SyntheticEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Slider Field Props\r\n * Extends MUI SliderProps with custom form field props\r\n */\r\nexport interface ISliderFieldProps\r\n\textends Omit<SliderProps, \"value\" | \"onChange\" | \"onChangeCommitted\" | \"name\" | \"orientation\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the slider */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current slider value(s) */\r\n\tvalue: number | number[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below slider */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Slider orientation - horizontal or vertical */\r\n\torientation?: \"horizontal\" | \"vertical\";\r\n\t/** Minimum value (default: 0) */\r\n\tmin?: number;\r\n\t/** Maximum value (default: 100) */\r\n\tmax?: number;\r\n\t/** Step value (default: 1) */\r\n\tstep?: number | null;\r\n\t/** Whether to show value label */\r\n\tvalueLabelDisplay?: SliderProps[\"valueLabelDisplay\"];\r\n\t/** Custom format for value label */\r\n\tvalueLabelFormat?: SliderProps[\"valueLabelFormat\"];\r\n\t/** Slider color */\r\n\tcolor?: SliderProps[\"color\"];\r\n\t/** Slider size */\r\n\tsize?: SliderProps[\"size\"];\r\n\t/** Marks on the slider */\r\n\tmarks?: boolean | SliderProps[\"marks\"];\r\n\t/** Track display mode */\r\n\ttrack?: SliderProps[\"track\"];\r\n\t/** Custom styles for the Slider */\r\n\tsliderStyles?: SliderProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Callback fired when the value changes (during drag) */\r\n\tonChange?: (value: number | number[]) => void;\r\n\t/** Callback fired when the value change is committed (on mouse up) */\r\n\tonChangeCommitted?: (value: number | number[]) => void;\r\n\t/** Callback fired when slider receives focus */\r\n\tonFocus?: (event: SyntheticEvent) => void;\r\n\t/** Callback fired when slider loses focus */\r\n\tonBlur?: (event: SyntheticEvent) => void;\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: SliderProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: SliderProps[\"slots\"];\r\n\t/** FormLabel props */\r\n\tformLabelProps?: Omit<FormLabelProps, \"children\">;\r\n}\r\n\r\nconst SliderField = forwardRef<HTMLSpanElement, ISliderFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonChangeCommitted,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tfullWidth = true,\r\n\t\t\trequired,\r\n\t\t\torientation = \"horizontal\",\r\n\t\t\tmin = 0,\r\n\t\t\tmax = 100,\r\n\t\t\tstep = 1,\r\n\t\t\tvalueLabelDisplay = \"auto\",\r\n\t\t\tvalueLabelFormat,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tmarks,\r\n\t\t\ttrack = \"normal\",\r\n\t\t\tsliderStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformLabelProps,\r\n\t\t\t...sliderProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLSpanElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (_event: Event, newValue: number | number[], _activeThumb: number) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle onChangeCommitted with proper typing\r\n\t\tconst handleChangeCommitted = (_event: Event | SyntheticEvent, newValue: number | number[]) => {\r\n\t\t\tif (onChangeCommitted) {\r\n\t\t\t\tonChangeCommitted(newValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// For vertical sliders, we need special handling\r\n\t\tconst isVertical = orientation === \"vertical\";\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth && !isVertical}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\t...formControlStyles,\r\n\t\t\t\t\t...(isVertical && {\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\talignItems: \"flex-start\",\r\n\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\twidth: \"auto\",\r\n\t\t\t\t\t}),\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tsx={formLabelStyles}\r\n\t\t\t\t\t\t{...formLabelProps}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<Slider\r\n\t\t\t\t\t{...sliderProps}\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tvalue={value}\r\n\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\tonChangeCommitted={handleChangeCommitted}\r\n\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\torientation={orientation}\r\n\t\t\t\t\tmin={min}\r\n\t\t\t\t\tmax={max}\r\n\t\t\t\t\tstep={step}\r\n\t\t\t\t\tvalueLabelDisplay={valueLabelDisplay}\r\n\t\t\t\t\tvalueLabelFormat={valueLabelFormat}\r\n\t\t\t\t\tcolor={color}\r\n\t\t\t\t\tsize={size}\r\n\t\t\t\t\tmarks={marks === true ? true : marks || false}\r\n\t\t\t\t\ttrack={track}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\tslots={slots}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...sliderStyles,\r\n\t\t\t\t\t\t...(isVertical && {\r\n\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\"& .MuiSlider-track\": {\r\n\t\t\t\t\t\t\t\twidth: \"6px\",\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\"& .MuiSlider-rail\": {\r\n\t\t\t\t\t\t\t\twidth: \"6px\",\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t/>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSliderField.displayName = \"SliderField\";\r\n\r\nexport default SliderField;\r\n","import SliderField from \"../FormFields/BoxFields/SliderField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFields } from \"./types\";\r\n\r\nconst FormInputSlider = memo(\r\n\t({ name, label, control, errors, defaultValue = 0, onChange, ...props }: IFormInputFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<SliderField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? defaultValue}\r\n\t\t\t\t\t\t\tonChange={(value) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(value);\r\n\t\t\t\t\t\t\t\tonChange?.(value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputSlider.displayName = \"FormInputSlider\";\r\n\r\nexport default FormInputSlider;\r\n","import {\r\n\tFormControl,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tFormHelperText,\r\n\tRadio,\r\n\ttype RadioProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Radio Button Field Props\r\n * Extends MUI RadioProps with custom form field props\r\n */\r\nexport interface IRadioButtonFieldProps extends Omit<RadioProps, \"checked\" | \"onChange\" | \"name\"> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the radio button */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current checked state */\r\n\tvalue: boolean;\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below radio button */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Radio color */\r\n\tcolor?: RadioProps[\"color\"];\r\n\t/** Radio size */\r\n\tsize?: RadioProps[\"size\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Label placement */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (checked: boolean) => void;\r\n\t/** Callback fired when radio button is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\t/** Callback fired when radio button receives focus */\r\n\tonFocus?: RadioProps[\"onFocus\"];\r\n\t/** Callback fired when radio button loses focus */\r\n\tonBlur?: RadioProps[\"onBlur\"];\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for the Radio */\r\n\tradioStyles?: RadioProps[\"sx\"];\r\n\t/** Custom styles for FormControlLabel */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: RadioProps[\"slotProps\"];\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: RadioProps[\"slots\"];\r\n\t/** FormControlLabel props */\r\n\tformControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\" | \"value\">;\r\n}\r\n\r\nconst RadioButtonField = forwardRef<HTMLButtonElement, IRadioButtonFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\tcheckedIcon,\r\n\t\t\ticon,\r\n\t\t\tradioStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformControlLabelProps,\r\n\t\t\t...radioProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLButtonElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (_event: ChangeEvent<HTMLInputElement>, checked: boolean) => {\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(checked);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click event\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsize={size}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t<FormControlLabel\r\n\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t<Radio\r\n\t\t\t\t\t\t\t{...radioProps}\r\n\t\t\t\t\t\t\tchecked={value}\r\n\t\t\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\t\t\tonClick={handleClick}\r\n\t\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\tcheckedIcon={checkedIcon}\r\n\t\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tslotProps={slotProps}\r\n\t\t\t\t\t\t\tslots={slots}\r\n\t\t\t\t\t\t\tsx={radioStyles}\r\n\t\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlabel={label}\r\n\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\tsx={labelStyles}\r\n\t\t\t\t\t{...formControlLabelProps}\r\n\t\t\t\t/>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nRadioButtonField.displayName = \"RadioButtonField\";\r\n\r\nexport default RadioButtonField;\r\n","import RadioButtonField from \"../FormFields/BoxFields/RadioButtonField\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputRadioFields } from \"./types\";\r\n\r\nconst FormInputRadioButton = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\tchecked = false,\r\n\t\tdefaultValue = false,\r\n\t\tonChange,\r\n\t\tcolor,\r\n\t\tlabelPlacement,\r\n\t\t...props\r\n\t}: IFormInputRadioFields) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<RadioButtonField\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? false}\r\n\t\t\t\t\t\t\tonChange={(checkedValue) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(checkedValue);\r\n\t\t\t\t\t\t\t\tonChange?.(checkedValue);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputRadioButton.displayName = \"FormInputRadioButton\";\r\n\r\nexport default FormInputRadioButton;\r\n","import {\r\n\tFormControl,\r\n\ttype FormControlProps,\r\n\tFormControlLabel,\r\n\ttype FormControlLabelProps,\r\n\tFormHelperText,\r\n\tFormLabel,\r\n\ttype FormLabelProps,\r\n\tRadio,\r\n\ttype RadioProps,\r\n\tRadioGroup,\r\n\ttype RadioGroupProps,\r\n} from \"@mui/material\";\r\nimport React, { type ChangeEvent } from \"react\";\r\nimport { type ForwardedRef, forwardRef } from \"react\";\r\n\r\n/**\r\n * Base option type for Radio Button Group\r\n */\r\nexport type RadioOption = {\r\n\tname: string;\r\n\tvalue: string | number;\r\n\tdisabled?: boolean;\r\n\t[key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n\tmessage?: string;\r\n} | null;\r\n\r\n/**\r\n * Extended Radio Button Group Props\r\n * Extends MUI RadioGroupProps with custom form field props\r\n */\r\nexport interface IRadioButtonGroupFieldProps\r\n\textends Omit<\r\n\t\tRadioGroupProps,\r\n\t\t\"value\" | \"onChange\" | \"name\" | \"children\" | \"onFocus\" | \"onBlur\" | \"onClick\"\r\n\t> {\r\n\t/** Field name for form identification */\r\n\tname?: string;\r\n\t/** Label text for the radio group */\r\n\tlabel?: React.ReactNode;\r\n\t/** Current selected value */\r\n\tvalue: string | number | null | undefined;\r\n\t/** Options array to display as radio buttons */\r\n\toptions: RadioOption[];\r\n\t/** Error object with optional message */\r\n\terror?: FieldError;\r\n\t/** Helper text to display below radio group */\r\n\thelperText?: string;\r\n\t/** Whether the field is disabled */\r\n\tdisabled?: boolean;\r\n\t/** Radio color */\r\n\tcolor?: RadioProps[\"color\"];\r\n\t/** Radio size */\r\n\tsize?: RadioProps[\"size\"];\r\n\t/** Full width of the field */\r\n\tfullWidth?: boolean;\r\n\t/** Required field indicator */\r\n\trequired?: boolean;\r\n\t/** Label placement for each radio button */\r\n\tlabelPlacement?: FormControlLabelProps[\"labelPlacement\"];\r\n\t/** Row layout (horizontal) or column layout (vertical) */\r\n\trow?: boolean;\r\n\t/** Custom icon for checked state */\r\n\tcheckedIcon?: React.ReactNode;\r\n\t/** Custom icon for unchecked state */\r\n\ticon?: React.ReactNode;\r\n\t/** Custom styles for individual Radio components */\r\n\tradioStyles?: RadioProps[\"sx\"];\r\n\t/** Custom styles for FormControlLabel components */\r\n\tlabelStyles?: FormControlLabelProps[\"sx\"];\r\n\t/** Custom styles for FormControl */\r\n\tformControlStyles?: FormControlProps[\"sx\"];\r\n\t/** Custom styles for FormLabel */\r\n\tformLabelStyles?: FormLabelProps[\"sx\"];\r\n\t/** Custom styles for RadioGroup */\r\n\tradioGroupStyles?: RadioGroupProps[\"sx\"];\r\n\t/** Custom render function for radio buttons */\r\n\trenderRadio?: (option: RadioOption, index: number) => React.ReactNode;\r\n\t/** Callback fired when the value changes */\r\n\tonChange?: (value: string | number) => void;\r\n\t/** Callback fired when a radio button is clicked */\r\n\tonClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n\t/** Callback fired when a radio button receives focus */\r\n\tonFocus?: RadioProps[\"onFocus\"];\r\n\t/** Callback fired when a radio button loses focus */\r\n\tonBlur?: RadioProps[\"onBlur\"];\r\n\t/** Custom slot props for MUI v7 */\r\n\tslotProps?: {\r\n\t\tradio?: RadioProps[\"slotProps\"];\r\n\t\tformControlLabel?: FormControlLabelProps[\"slotProps\"];\r\n\t};\r\n\t/** Custom slots for MUI v7 */\r\n\tslots?: {\r\n\t\tradio?: RadioProps[\"slots\"];\r\n\t\tformControlLabel?: FormControlLabelProps[\"slots\"];\r\n\t};\r\n\t/** FormLabel props */\r\n\tformLabelProps?: Omit<FormLabelProps, \"children\">;\r\n\t/** FormControlLabel props */\r\n\tformControlLabelProps?: Omit<FormControlLabelProps, \"control\" | \"label\" | \"value\">;\r\n}\r\n\r\nconst RadioButtonFieldGroup = forwardRef<HTMLDivElement, IRadioButtonGroupFieldProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tname,\r\n\t\t\tlabel,\r\n\t\t\tvalue,\r\n\t\t\tonChange,\r\n\t\t\tonClick,\r\n\t\t\tonFocus,\r\n\t\t\tonBlur,\r\n\t\t\toptions,\r\n\t\t\terror,\r\n\t\t\thelperText,\r\n\t\t\tdisabled = false,\r\n\t\t\tcolor = \"primary\",\r\n\t\t\tsize,\r\n\t\t\tfullWidth = false,\r\n\t\t\trequired,\r\n\t\t\tlabelPlacement = \"end\",\r\n\t\t\trow = false,\r\n\t\t\tcheckedIcon,\r\n\t\t\ticon,\r\n\t\t\tradioStyles,\r\n\t\t\tlabelStyles,\r\n\t\t\tformControlStyles,\r\n\t\t\tformLabelStyles,\r\n\t\t\tradioGroupStyles,\r\n\t\t\trenderRadio,\r\n\t\t\tslotProps,\r\n\t\t\tslots,\r\n\t\t\tformLabelProps,\r\n\t\t\tformControlLabelProps,\r\n\t\t\t...radioGroupProps\r\n\t\t},\r\n\t\tref: ForwardedRef<HTMLDivElement>\r\n\t) => {\r\n\t\t// Handle onChange with proper typing\r\n\t\tconst handleChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tconst newValue = event.target.value;\r\n\t\t\t// Convert to number if the value matches a numeric option\r\n\t\t\tconst numericValue = options.find((opt) => String(opt.value) === newValue)?.value;\r\n\t\t\tconst finalValue = typeof numericValue === \"number\" ? numericValue : newValue;\r\n\t\t\tif (onChange) {\r\n\t\t\t\tonChange(finalValue);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Handle click event\r\n\t\tconst handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n\t\t\tif (onClick) {\r\n\t\t\t\tonClick(event);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Default render function for radio buttons\r\n\t\tconst defaultRenderRadio = (option: RadioOption) => (\r\n\t\t\t<FormControlLabel\r\n\t\t\t\tkey={option.value}\r\n\t\t\t\tvalue={String(option.value)}\r\n\t\t\t\tcontrol={\r\n\t\t\t\t\t<Radio\r\n\t\t\t\t\t\tcolor={color}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\tdisabled={disabled || option.disabled}\r\n\t\t\t\t\t\tcheckedIcon={checkedIcon}\r\n\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\tonClick={handleClick}\r\n\t\t\t\t\t\tonFocus={onFocus}\r\n\t\t\t\t\t\tonBlur={onBlur}\r\n\t\t\t\t\t\tslotProps={slotProps?.radio}\r\n\t\t\t\t\t\tslots={slots?.radio}\r\n\t\t\t\t\t\tsx={radioStyles}\r\n\t\t\t\t\t/>\r\n\t\t\t\t}\r\n\t\t\t\tlabel={option.name}\r\n\t\t\t\tlabelPlacement={labelPlacement}\r\n\t\t\t\tdisabled={disabled || option.disabled}\r\n\t\t\t\tsx={labelStyles}\r\n\t\t\t\t{...formControlLabelProps}\r\n\t\t\t\tslotProps={slotProps?.formControlLabel}\r\n\t\t\t\tslots={slots?.formControlLabel}\r\n\t\t\t/>\r\n\t\t);\r\n\r\n\t\treturn (\r\n\t\t\t<FormControl\r\n\t\t\t\tcomponent=\"fieldset\"\r\n\t\t\t\terror={!!error}\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\trequired={required}\r\n\t\t\t\tfullWidth={fullWidth}\r\n\t\t\t\tsx={formControlStyles}\r\n\t\t\t>\r\n\t\t\t\t{label && (\r\n\t\t\t\t\t<FormLabel\r\n\t\t\t\t\t\tcomponent=\"legend\"\r\n\t\t\t\t\t\tsx={formLabelStyles}\r\n\t\t\t\t\t\t{...formLabelProps}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{label}\r\n\t\t\t\t\t</FormLabel>\r\n\t\t\t\t)}\r\n\t\t\t\t<RadioGroup\r\n\t\t\t\t\tname={name}\r\n\t\t\t\t\tvalue={value != null ? String(value) : \"\"}\r\n\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\trow={row}\r\n\t\t\t\t\tref={ref}\r\n\t\t\t\t\tsx={radioGroupStyles}\r\n\t\t\t\t\t{...radioGroupProps}\r\n\t\t\t\t>\r\n\t\t\t\t\t{options &&\r\n\t\t\t\t\t\tArray.isArray(options) &&\r\n\t\t\t\t\t\toptions.map((option, index) =>\r\n\t\t\t\t\t\t\trenderRadio ? renderRadio(option, index) : defaultRenderRadio(option)\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t</RadioGroup>\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<FormHelperText>{helperText ?? (error?.message ? error.message : \"\")}</FormHelperText>\r\n\t\t\t\t)}\r\n\t\t\t\t{!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n\t\t\t</FormControl>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nRadioButtonFieldGroup.displayName = \"RadioButtonFieldGroup\";\r\n\r\nexport default RadioButtonFieldGroup;\r\n","import RadioButtonFieldGroup from \"../FormFields/BoxFields/RadioButtonFieldGroup\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\n\r\nconst FormInputRadioButtonGroup = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\r\n\t\terrors,\r\n\t\toptions = [],\r\n\t\tdefaultValue = \"\",\r\n\t\tonChange,\r\n\t\t...props\r\n\t}: IFormInputFieldsWithOptions) => {\r\n\t\tconst error = useMemo(\r\n\t\t\t() => (errors?.[name] ? { message: String(errors[name]?.message || \"\") } : null),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst helperText = useMemo(\r\n\t\t\t() => (errors?.[name]?.message ? String(errors[name]?.message) : undefined),\r\n\t\t\t[errors, name]\r\n\t\t);\r\n\r\n\t\tconst memoizedOptions = useMemo(() => (Array.isArray(options) ? options : []), [options]);\r\n\r\n\t\treturn (\r\n\t\t\t<Controller\r\n\t\t\t\tname={name}\r\n\t\t\t\tcontrol={control}\r\n\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\trender={({ field }) => {\r\n\t\t\t\t\tconst { size, ...restProps } = props;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<RadioButtonFieldGroup\r\n\t\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t\t\tname={name}\r\n\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\r\n\t\t\t\t\t\t\tonChange={(value) => {\r\n\t\t\t\t\t\t\t\tfield.onChange(value);\r\n\t\t\t\t\t\t\t\tonChange?.(value);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tonBlur={field.onBlur}\r\n\t\t\t\t\t\t\toptions={memoizedOptions}\r\n\t\t\t\t\t\t\tsize={size as any}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={helperText}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nFormInputRadioButtonGroup.displayName = \"FormInputRadioButtonGroup\";\r\n\r\nexport default FormInputRadioButtonGroup;\r\n"],"mappings":"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","names":["import_react","import_jsx_runtime","_a","_b","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","_a","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","extractDigits","formatByPattern","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_icons_material","import_material","import_react","import_jsx_runtime","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","_a","_b","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","_a","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","import_react","_a","_b","value","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","_a","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_icons_material","import_react","import_jsx_runtime","CloudUploadIcon","_a","import_react","import_react_hook_form","import_jsx_runtime","_a","_b","import_material","import_icons_material","import_react","import_jsx_runtime","ClearIcon","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_icons_material","import_x_date_pickers","import_AdapterDateFns","import_react","import_jsx_runtime","ClearIcon","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_x_date_pickers","import_AdapterDateFns","import_react","import_jsx_runtime","import_material","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","t","import_material","import_AdapterDateFns","import_LocalizationProvider","import_react","import_jsx_runtime","import_material","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","t","import_material","import_react","import_jsx_runtime","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","import_react_hook_form","import_react","import_jsx_runtime","_a","_b","import_material","import_react","import_jsx_runtime","_a","import_react_hook_form","import_react","import_jsx_runtime","_a","_b"]}
|