@react-solutions/inputs 0.2.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +23 -23
- package/dist/index.d.ts +23 -23
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../lib/pkg/HookFormFields/FormInputTextField.tsx","../lib/pkg/FormFields/TextFields/TextInputField.tsx","../lib/pkg/HookFormFields/FormInputTextArea.tsx","../lib/pkg/HookFormFields/FormInputPasswordField.tsx","../lib/pkg/FormFields/TextFields/PasswordField.tsx","../lib/pkg/HookFormFields/FormInputNumberField.tsx","../lib/pkg/FormFields/TextFields/NumberField.tsx","../lib/pkg/HookFormFields/FormInputTelField.tsx","../lib/pkg/FormFields/TextFields/TelInputField.tsx","../lib/pkg/HookFormFields/FormInputSearchField.tsx","../lib/pkg/FormFields/TextFields/SearchInputField.tsx","../lib/pkg/HookFormFields/FormInputOTPField.tsx","../lib/pkg/FormFields/TextFields/OTPField.tsx","../lib/pkg/HookFormFields/FormInputSelect.tsx","../lib/pkg/FormFields/DropdownFields/SelectInputField.tsx","../lib/pkg/HookFormFields/FormInputMultiSelect.tsx","../lib/pkg/HookFormFields/FormInputAutoComplete.tsx","../lib/pkg/FormFields/DropdownFields/AutoCompleteField.tsx","../lib/pkg/HookFormFields/FormInputMultiAutoComplete.tsx","../lib/pkg/HookFormFields/FormInputColorPicker.tsx","../lib/pkg/FormFields/DropdownFields/ColorPickerField.tsx","../lib/pkg/HookFormFields/FormInputFileUpload.tsx","../lib/pkg/FormFields/DropdownFields/FileUploadField.tsx","../lib/pkg/HookFormFields/FormInputDatePicker.tsx","../lib/pkg/FormFields/DateFields/DatePickerField.tsx","../lib/pkg/HookFormFields/FormInputTimePicker.tsx","../lib/pkg/FormFields/DateFields/TimePickerField.tsx","../lib/pkg/HookFormFields/FormInputTimeClock.tsx","../lib/pkg/FormFields/DateFields/TimeClockField.tsx","../lib/pkg/HookFormFields/FormInputCalender.tsx","../lib/pkg/FormFields/DateFields/DateCalendarField.tsx","../lib/pkg/HookFormFields/FormInputCheckBox.tsx","../lib/pkg/FormFields/BoxFields/CheckBoxField.tsx","../lib/pkg/HookFormFields/FormInputCheckBoxGroup.tsx","../lib/pkg/FormFields/BoxFields/CheckBoxFieldGroup.tsx","../lib/pkg/HookFormFields/FormInputSwitch.tsx","../lib/pkg/FormFields/BoxFields/SwitchField.tsx","../lib/pkg/HookFormFields/FormInputSlider.tsx","../lib/pkg/FormFields/BoxFields/SliderField.tsx","../lib/pkg/HookFormFields/FormInputRadioButton.tsx","../lib/pkg/FormFields/BoxFields/RadioButtonField.tsx","../lib/pkg/HookFormFields/FormInputRadioButtonGroup.tsx","../lib/pkg/FormFields/BoxFields/RadioButtonFieldGroup.tsx","../lib/pkg/FormBuild/Form.tsx","../lib/pkg/FormBuild/HookForm.tsx","../lib/index.ts"],"sourcesContent":["import { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTextField = memo(\r\n\t({ name, label, control, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 { 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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport type { IFormInputTextAreaFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTextArea = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport PasswordField from \"../FormFields/TextFields/PasswordField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputPasswordField = memo(\r\n\t({ name, label, control, size, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 { 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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport NumberField from \"../FormFields/TextFields/NumberField\";\r\nimport type { IFormInputNumberFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputNumberField = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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 { 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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TelInputField from \"../FormFields/TextFields/TelInputField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTelField = memo(\r\n\t({ name, label, control, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 {\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SearchInputField from \"../FormFields/TextFields/SearchInputField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputSearchField = memo(\r\n\t({ name, label, control, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 { 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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport OTPField from \"../FormFields/TextFields/OTPField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputOTPField = memo(\r\n\t({ name, label, control, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputSelect = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => {\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={error?.message}\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 {\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputMultiSelect = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => {\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={error?.message}\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputAutoComplete = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={options}\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={error?.message}\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 {\r\n Autocomplete,\r\n type AutocompleteChangeReason,\r\n type AutocompleteCloseReason,\r\n type AutocompleteInputChangeReason,\r\n type AutocompleteProps,\r\n FormControl,\r\n FormHelperText,\r\n TextField,\r\n type TextFieldProps,\r\n} from '@mui/material';\r\nimport type { FilterOptionsState } from '@mui/material/useAutocomplete';\r\nimport React, { type ForwardedRef, forwardRef, memo, type SyntheticEvent, useCallback } from 'react';\r\n\r\nexport type AutoCompleteOption = {\r\n name: string;\r\n value: string | number;\r\n [key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 T extends AutoCompleteOption = AutoCompleteOption,\r\n Multiple extends boolean = false,\r\n DisableClearable extends boolean = false,\r\n FreeSolo extends boolean = false,\r\n> extends Omit<\r\n AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>,\r\n 'renderInput' | 'options' | 'value' | 'onChange' | 'getOptionLabel' | 'isOptionEqualToValue' | 'renderOption'\r\n > {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the input field */\r\n label?: string;\r\n /** Current selected value */\r\n value: Multiple extends true ? T[] : T | null;\r\n /** Options array to display in dropdown */\r\n options: T[];\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below input */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** TextField variant */\r\n variant?: TextFieldProps['variant'];\r\n /** TextField size */\r\n size?: TextFieldProps['size'];\r\n /** TextField color */\r\n color?: TextFieldProps['color'];\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Custom function to get option label (defaults to option.name) */\r\n getOptionLabel?: (option: T | string) => string;\r\n /** Custom function to check option equality (defaults to comparing option.name) */\r\n isOptionEqualToValue?: (option: T, value: T) => boolean;\r\n /** Custom render function for options */\r\n renderOption?: (\r\n props: React.HTMLAttributes<HTMLLIElement>,\r\n option: T,\r\n state?: { selected: boolean; inputValue: string },\r\n ) => React.ReactNode;\r\n /** Callback fired when the value changes */\r\n onChange?: (\r\n event: SyntheticEvent,\r\n newValue: Multiple extends true ? T[] : T | null,\r\n reason?: AutocompleteChangeReason,\r\n ) => void;\r\n /** Callback fired when input value changes */\r\n onInputChange?: (event: SyntheticEvent, newInputValue: string, reason: AutocompleteInputChangeReason) => void;\r\n /** Callback fired when popup opens */\r\n onOpen?: (event: SyntheticEvent) => void;\r\n /** Callback fired when popup closes */\r\n onClose?: (event: SyntheticEvent, reason: AutocompleteCloseReason) => void;\r\n /** Custom icon for popup indicator */\r\n popupIcon?: React.ReactNode;\r\n /** Custom styles for the TextField */\r\n inputStyles?: TextFieldProps['sx'];\r\n /** Custom styles for the Autocomplete */\r\n autocompleteStyles?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>['sx'];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\r\n /** Whether to show loading state */\r\n loading?: boolean;\r\n /** Text to show when loading */\r\n loadingText?: React.ReactNode;\r\n /** Text to show when no options available */\r\n noOptionsText?: React.ReactNode;\r\n /** Text to show when options are being filtered */\r\n filterText?: string;\r\n /** Custom filter options function */\r\n filterOptions?: (options: T[], state: FilterOptionsState<T>) => T[];\r\n /** Whether to highlight the first option */\r\n autoHighlight?: boolean;\r\n /** Whether to select the first option on highlight */\r\n autoSelect?: boolean;\r\n /** Whether to disable portal rendering */\r\n disablePortal?: boolean;\r\n /** Whether to disable list wrapping */\r\n disableListWrap?: boolean;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>['slots'];\r\n}\r\n\r\nconst AutoCompleteField = memo(\r\n forwardRef<HTMLDivElement, IAutoCompleteInputProps<AutoCompleteOption, boolean, boolean, boolean>>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n onChange,\r\n onInputChange,\r\n onOpen,\r\n onClose,\r\n options,\r\n error,\r\n helperText,\r\n disabled = false,\r\n placeholder,\r\n variant = 'outlined',\r\n size,\r\n color,\r\n fullWidth = true,\r\n required,\r\n getOptionLabel,\r\n isOptionEqualToValue,\r\n renderOption,\r\n popupIcon,\r\n inputStyles,\r\n autocompleteStyles,\r\n formControlStyles,\r\n loading = false,\r\n loadingText = 'Loading...',\r\n noOptionsText = 'No options',\r\n filterOptions,\r\n autoHighlight = true,\r\n autoSelect = false,\r\n disablePortal = false,\r\n disableListWrap = false,\r\n slotProps,\r\n slots,\r\n ...autocompleteProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n\r\n\r\n // Default isOptionEqualToValue function\r\n const defaultIsOptionEqualToValue = useCallback(\r\n (option: AutoCompleteOption, value: AutoCompleteOption): boolean => {\r\n return option?.name === value?.name && option?.value === value?.value;\r\n },\r\n [],\r\n );\r\n\r\n\r\n\r\n // Handle onChange with proper typing\r\n const handleChange = useCallback(\r\n (event: SyntheticEvent, newValue: any, reason?: AutocompleteChangeReason) => {\r\n if (onChange) {\r\n onChange(event, newValue, reason);\r\n }\r\n },\r\n [onChange],\r\n );\r\n\r\n return (\r\n <FormControl fullWidth={fullWidth} error={!!error} sx={formControlStyles}>\r\n <Autocomplete<AutoCompleteOption, boolean, boolean, boolean>\r\n options={options}\r\n value={value as any}\r\n onChange={handleChange}\r\n onInputChange={onInputChange}\r\n onOpen={onOpen}\r\n onClose={onClose}\r\n disabled={disabled}\r\n loading={loading}\r\n loadingText={loadingText}\r\n noOptionsText={noOptionsText}\r\n filterOptions={filterOptions}\r\n autoHighlight={autoHighlight}\r\n autoSelect={autoSelect}\r\n disablePortal={disablePortal}\r\n disableListWrap={disableListWrap}\r\n popupIcon={popupIcon}\r\n slotProps={slotProps}\r\n slots={slots}\r\n sx={autocompleteStyles}\r\n ref={ref}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n name={name}\r\n label={label}\r\n variant={variant}\r\n size={size}\r\n color={color}\r\n placeholder={placeholder}\r\n required={required}\r\n error={!!error}\r\n disabled={disabled}\r\n slotProps={{\r\n input: {\r\n ...params.InputProps,\r\n inputProps: {\r\n ...params.inputProps,\r\n },\r\n },\r\n }}\r\n sx={inputStyles}\r\n helperText={helperText ?? ''}\r\n />\r\n )}\r\n {...autocompleteProps}\r\n />\r\n {error && !helperText && error.message && <FormHelperText>{error.message}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nAutoCompleteField.displayName = 'AutoCompleteField';\r\n\r\nexport default AutoCompleteField;\r\n","import { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputMultiAutoComplete = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => {\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={error?.message}\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport ColorPickerField from \"../FormFields/DropdownFields/ColorPickerField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputColorPicker = memo(\r\n\t({ name, label, control, defaultValue = \"#000000\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 { Box, FormControl, type FormControlProps, InputAdornment, TextField, type TextFieldProps } from '@mui/material';\r\nimport React, {\r\n type ChangeEvent,\r\n type FocusEvent,\r\n type ForwardedRef,\r\n forwardRef,\r\n memo,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\n/**\r\n * RGBA color object\r\n */\r\nexport interface RGBAColor extends RGBColor {\r\n a: number;\r\n}\r\n\r\n/**\r\n * HSL color object\r\n */\r\nexport interface HSLColor {\r\n h: number;\r\n s: number;\r\n l: number;\r\n}\r\n\r\n/**\r\n * HSL color object with alpha\r\n */\r\nexport interface HSLAColor extends HSLColor {\r\n a: number;\r\n}\r\n\r\n/**\r\n * Extended Color Picker Field Props\r\n */\r\nexport interface IColorPickerFieldProps\r\n extends Omit<\r\n TextFieldProps,\r\n 'value' | 'onChange' | 'name' | 'type' | 'error' | 'inputRef' | 'multiline' | 'variant' | 'size'\r\n > {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the color picker field */\r\n label?: string;\r\n /** Current color value (hex string or color object) */\r\n value: string;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below field */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** TextField variant */\r\n variant?: TextFieldProps['variant'];\r\n /** TextField size */\r\n size?: TextFieldProps['size'];\r\n /** TextField color */\r\n color?: TextFieldProps['color'];\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Color format (hex, rgb, rgba, hsl, hsla) */\r\n format?: ColorFormat;\r\n /** Whether to show color preview swatch */\r\n showPreview?: boolean;\r\n /** Whether to show native color input */\r\n showNativeInput?: boolean;\r\n /** Whether to show popover picker */\r\n showPopoverPicker?: boolean;\r\n /** Preset colors to display */\r\n presetColors?: string[];\r\n /** Whether to show preset colors */\r\n showPresetColors?: boolean;\r\n /** Callback fired when the color changes */\r\n onChange?: (value: string) => void;\r\n /** Callback fired when field receives focus */\r\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n /** Callback fired when field loses focus */\r\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n /** Callback fired on Enter key press */\r\n onEnterPress?: (value: string) => void;\r\n /** Custom styles for the color preview swatch */\r\n previewStyles?: React.CSSProperties;\r\n /** Custom styles for FormControl */\r\n formControlStyles?: FormControlProps['sx'];\r\n /** Custom styles for TextField */\r\n inputStyles?: TextFieldProps['sx'];\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: TextFieldProps['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: 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 const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\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 return '#' + [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 return /^#([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 let hex = color.replace('#', '');\r\n if (hex.length === 3) {\r\n hex = hex\r\n .split('')\r\n .map((char) => char + char)\r\n .join('');\r\n }\r\n return '#' + hex;\r\n};\r\n\r\nconst ColorPickerField = memo(\r\n forwardRef<HTMLDivElement, IColorPickerFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n onChange,\r\n onFocus,\r\n onBlur,\r\n onEnterPress,\r\n error,\r\n helperText,\r\n disabled = false,\r\n placeholder = '#000000',\r\n variant = 'outlined',\r\n size,\r\n color = 'primary',\r\n fullWidth = true,\r\n required,\r\n format = 'hex',\r\n showPreview = true,\r\n showNativeInput = true,\r\n showPopoverPicker = true,\r\n presetColors = ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF'],\r\n showPresetColors = false,\r\n previewStyles,\r\n formControlStyles,\r\n inputStyles,\r\n slotProps,\r\n slots,\r\n ...textFieldProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n const [internalValue, setInternalValue] = useState<string>(value || '');\r\n const colorInputRef = useRef<HTMLInputElement | null>(null);\r\n const popoverAnchorRef = useRef<HTMLDivElement | null>(null);\r\n\r\n // Update internal value when prop changes\r\n useEffect(() => {\r\n if (value !== undefined) {\r\n setInternalValue(value || '');\r\n }\r\n }, [value]);\r\n\r\n // Normalize hex value\r\n const normalizedValue = isValidHex(internalValue) ? normalizeHex(internalValue) : internalValue || '';\r\n\r\n // Handle input change\r\n const handleChange = useCallback(\r\n (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\r\n if (disabled) return;\r\n\r\n const newValue = (event.target as HTMLInputElement).value;\r\n setInternalValue(newValue);\r\n\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n },\r\n [onChange],\r\n );\r\n\r\n // Handle native color input change\r\n const handleColorInputChange = useCallback(\r\n (event: ChangeEvent<HTMLInputElement>) => {\r\n if (disabled) return;\r\n event.stopPropagation();\r\n\r\n const newValue = event.target.value;\r\n setInternalValue(newValue);\r\n\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n },\r\n [onChange],\r\n );\r\n\r\n // Handle preview swatch click - directly open native color picker\r\n const handlePreviewClick = useCallback(\r\n (event: React.MouseEvent<HTMLDivElement>) => {\r\n if (disabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Trigger the hidden native color input\r\n if (colorInputRef.current) {\r\n colorInputRef.current.click();\r\n }\r\n },\r\n [disabled, colorInputRef],\r\n );\r\n\r\n // Handle key down\r\n const handleKeyDown = useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === 'Enter' && onEnterPress) {\r\n onEnterPress(normalizedValue);\r\n }\r\n if (textFieldProps.onKeyDown) {\r\n textFieldProps.onKeyDown(event);\r\n }\r\n },\r\n [onEnterPress, normalizedValue, textFieldProps.onKeyDown],\r\n );\r\n\r\n // Memoize preview swatch\r\n const previewSwatch = useMemo(\r\n () => (\r\n <InputAdornment position=\"start\">\r\n <Box\r\n ref={popoverAnchorRef}\r\n onClick={!disabled ? handlePreviewClick : undefined}\r\n sx={{\r\n width: size === 'small' ? 24 : 32,\r\n height: size === 'small' ? 24 : 32,\r\n borderRadius: 1,\r\n border: '1px solid',\r\n borderColor: error ? 'error.main' : 'divider',\r\n backgroundColor: normalizedValue,\r\n cursor: !disabled ? 'pointer' : 'default',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n transition: 'all 0.2s',\r\n '&:hover': {\r\n opacity: !disabled ? 0.8 : 1,\r\n },\r\n ...previewStyles,\r\n }}\r\n title={!disabled ? 'Click to open color picker' : undefined}\r\n />\r\n </InputAdornment>\r\n ),\r\n [popoverAnchorRef, disabled, handlePreviewClick, size, error, normalizedValue, previewStyles],\r\n );\r\n\r\n // Build slotProps for MUI v7\r\n const finalSlotProps = useMemo(\r\n () => ({\r\n ...slotProps,\r\n input: {\r\n ...slotProps?.input,\r\n inputProps: {\r\n ...((slotProps?.input as any)?.inputProps || {}),\r\n },\r\n ...(showPreview && {\r\n startAdornment: previewSwatch,\r\n }),\r\n },\r\n }),\r\n [slotProps, showPreview, previewSwatch],\r\n );\r\n\r\n // Memoize helper text\r\n const displayHelperText = useMemo(\r\n () => helperText ?? (error?.message ? error.message : undefined),\r\n [helperText, error?.message],\r\n );\r\n\r\n return (\r\n <FormControl\r\n error={!!error}\r\n disabled={disabled}\r\n required={required}\r\n fullWidth={fullWidth}\r\n sx={formControlStyles}\r\n >\r\n <TextField\r\n {...textFieldProps}\r\n ref={ref}\r\n name={name}\r\n label={label}\r\n value={normalizedValue}\r\n onChange={handleChange}\r\n onFocus={onFocus}\r\n onBlur={onBlur}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n variant={variant}\r\n size={size}\r\n color={color}\r\n fullWidth={fullWidth}\r\n required={required}\r\n error={!!error}\r\n disabled={disabled}\r\n slotProps={finalSlotProps}\r\n slots={slots}\r\n sx={inputStyles}\r\n helperText={displayHelperText}\r\n />\r\n {/* Hidden native color input - triggered when clicking preview swatch */}\r\n <input\r\n ref={colorInputRef}\r\n type=\"color\"\r\n value={normalizedValue}\r\n onChange={handleColorInputChange}\r\n disabled={disabled}\r\n style={{\r\n position: 'absolute',\r\n width: 0,\r\n height: 0,\r\n opacity: 0,\r\n pointerEvents: 'none',\r\n visibility: 'hidden',\r\n }}\r\n aria-hidden=\"true\"\r\n />\r\n </FormControl>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nColorPickerField.displayName = 'ColorPickerField';\r\n\r\nexport default ColorPickerField;\r\n","import type { TextFieldProps } from \"@mui/material\";\r\nimport { memo, useRef } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport FileUploadField from \"../FormFields/DropdownFields/FileUploadField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputFileUpload = memo(\r\n\t({ name, label, control, size, defaultValue = null, onChange, ...props }: IFormInputFields) => {\r\n\t\tconst fileRef = useRef(null);\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, fieldState: { error } }) => (\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\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\terror={error}\r\n\t\t\t\t\t\thelperText={error?.message}\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 { Clear, CloudUpload as CloudUploadIcon } from '@mui/icons-material';\r\nimport {\r\n type ButtonProps,\r\n FormControl,\r\n FormHelperText,\r\n IconButton,\r\n InputAdornment,\r\n TextField,\r\n type TextFieldProps,\r\n} from '@mui/material';\r\nimport React, { type ChangeEvent, type DragEvent, type ForwardedRef, forwardRef, useRef, useState } from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 extends Omit<TextFieldProps, 'value' | 'onChange' | 'name' | 'type' | 'error' | 'onDrop'> {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the file upload field */\r\n label?: string;\r\n /** Current file value */\r\n value?: File | File[] | { name: string } | null;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below field */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** File types to accept (e.g., \"image/*\", \".pdf,.doc\") */\r\n accept?: string;\r\n /** Whether to allow multiple file selection */\r\n multiple?: boolean;\r\n /** Maximum file size in bytes */\r\n maxSize?: number;\r\n /** Minimum file size in bytes */\r\n minSize?: number;\r\n /** Allowed file types (MIME types or extensions) */\r\n allowedTypes?: string[];\r\n /** Whether to show file preview */\r\n showPreview?: boolean;\r\n /** Whether to enable drag and drop */\r\n enableDragDrop?: boolean;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** TextField variant */\r\n variant?: TextFieldProps['variant'];\r\n /** TextField size */\r\n size?: TextFieldProps['size'];\r\n /** TextField color */\r\n color?: TextFieldProps['color'];\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Upload button text */\r\n buttonText?: string;\r\n /** Upload button variant */\r\n buttonVariant?: ButtonProps['variant'];\r\n /** Upload button color */\r\n buttonColor?: ButtonProps['color'];\r\n /** Upload button size */\r\n buttonSize?: ButtonProps['size'];\r\n /** Custom upload icon */\r\n uploadIcon?: React.ReactNode;\r\n /** Callback fired when file(s) change */\r\n onChange?: (file: File | File[] | undefined) => void;\r\n /** Callback fired when file is selected */\r\n onFileSelect?: (file: File | File[] | undefined) => void;\r\n /** Callback fired when file is removed */\r\n onFileRemove?: () => void;\r\n /** Callback fired on file validation error */\r\n onValidationError?: (error: string) => void;\r\n /** Callback fired when file is dropped (drag and drop) */\r\n onDrop?: (files: FileList) => void;\r\n /** Custom styles for the TextField */\r\n inputStyles?: TextFieldProps['sx'];\r\n /** Custom styles for the Button */\r\n buttonStyles?: ButtonProps['sx'];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\r\n /** Custom styles for the container */\r\n containerStyles?: React.CSSProperties;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: TextFieldProps['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: TextFieldProps['slots'];\r\n}\r\n\r\nconst FileUploadField = forwardRef<HTMLInputElement, IFileUploadFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n onChange,\r\n onFileSelect,\r\n onFileRemove,\r\n onValidationError,\r\n onDrop,\r\n error,\r\n helperText,\r\n disabled = false,\r\n accept,\r\n multiple = false,\r\n maxSize,\r\n minSize,\r\n allowedTypes,\r\n showPreview = true,\r\n enableDragDrop = false,\r\n placeholder = 'No file chosen',\r\n variant = 'outlined',\r\n size,\r\n color,\r\n fullWidth = true,\r\n required,\r\n buttonText = 'Upload',\r\n buttonVariant = 'contained',\r\n buttonColor = 'primary',\r\n buttonSize,\r\n uploadIcon = <CloudUploadIcon />,\r\n inputStyles,\r\n buttonStyles,\r\n formControlStyles,\r\n containerStyles,\r\n slotProps,\r\n slots,\r\n ...textFieldProps\r\n },\r\n ref: ForwardedRef<HTMLInputElement>,\r\n ) => {\r\n const internalRef = useRef<HTMLInputElement | null>(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [, setDragCounter] = useState(0);\r\n\r\n // Get the file input ref (either forwarded ref or internal ref)\r\n const fileInputRef = ref && typeof ref === 'object' && 'current' in ref ? ref : internalRef;\r\n\r\n // Get file name(s) from value\r\n const getFileName = (): string => {\r\n if (!value) return '';\r\n if (value instanceof File) return value.name;\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) return '';\r\n if (value.length === 1) return value[0].name;\r\n return `${value.length} files selected`;\r\n }\r\n if (typeof value === 'object' && 'name' in value) {\r\n return value.name;\r\n }\r\n return '';\r\n };\r\n\r\n // Validate file\r\n const validateFile = (file: File): string | null => {\r\n // Check file size\r\n if (maxSize && file.size > maxSize) {\r\n return `File size exceeds maximum allowed size of ${formatFileSize(maxSize)}`;\r\n }\r\n if (minSize && file.size < minSize) {\r\n return `File size is below minimum required size of ${formatFileSize(minSize)}`;\r\n }\r\n\r\n // Check file type\r\n if (allowedTypes && allowedTypes.length > 0) {\r\n const fileType = file.type || getFileExtension(file.name);\r\n const isAllowed = allowedTypes.some((type) => {\r\n if (type.startsWith('.')) {\r\n return file.name.toLowerCase().endsWith(type.toLowerCase());\r\n }\r\n return fileType.includes(type) || fileType === type;\r\n });\r\n if (!isAllowed) {\r\n return `File type not allowed. Allowed types: ${allowedTypes.join(', ')}`;\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n // Format file size\r\n const formatFileSize = (bytes: number): string => {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\r\n };\r\n\r\n // Get file extension\r\n const getFileExtension = (filename: string): string => {\r\n return filename.slice(((filename.lastIndexOf('.') - 1) >>> 0) + 2);\r\n };\r\n\r\n // Handle file change\r\n const handleFileChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n const files = event.target.files;\r\n if (!files || files.length === 0) {\r\n if (onChange) onChange(undefined);\r\n if (onFileSelect) onFileSelect(undefined);\r\n return;\r\n }\r\n\r\n const fileArray = Array.from(files);\r\n let validFiles: File[] = [];\r\n let hasError = false;\r\n\r\n // Validate each file\r\n for (const file of fileArray) {\r\n const validationError = validateFile(file);\r\n if (validationError) {\r\n hasError = true;\r\n if (onValidationError) {\r\n onValidationError(validationError);\r\n }\r\n } else {\r\n validFiles.push(file);\r\n }\r\n }\r\n\r\n if (validFiles.length > 0) {\r\n const result = multiple ? validFiles : validFiles[0];\r\n if (onChange) onChange(result);\r\n if (onFileSelect) onFileSelect(result);\r\n } else if (hasError && onValidationError) {\r\n // Error already handled\r\n }\r\n };\r\n\r\n // Handle button click\r\n const handleButtonClick = () => {\r\n if (!disabled) {\r\n fileInputRef.current?.click();\r\n }\r\n };\r\n\r\n // Handle file remove\r\n const handleFileRemove = () => {\r\n if (fileInputRef.current) {\r\n fileInputRef.current.value = '';\r\n }\r\n if (onChange) onChange(undefined);\r\n if (onFileRemove) onFileRemove();\r\n };\r\n\r\n // Handle drag and drop\r\n const handleDragEnter = (e: DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setDragCounter((prev) => prev + 1);\r\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\r\n setIsDragging(true);\r\n }\r\n };\r\n\r\n const handleDragLeave = (e: DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setDragCounter((prev) => {\r\n const newCounter = prev - 1;\r\n if (newCounter === 0) {\r\n setIsDragging(false);\r\n }\r\n return newCounter;\r\n });\r\n };\r\n\r\n const handleDragOver = (e: DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n const handleDrop = (e: DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragging(false);\r\n setDragCounter(0);\r\n\r\n if (disabled) return;\r\n\r\n const files = e.dataTransfer.files;\r\n if (files && files.length > 0) {\r\n if (onDrop) {\r\n onDrop(files);\r\n }\r\n // Create a synthetic event to reuse handleFileChange\r\n const syntheticEvent = {\r\n target: { files },\r\n } as ChangeEvent<HTMLInputElement>;\r\n handleFileChange(syntheticEvent);\r\n }\r\n };\r\n\r\n const fileName = getFileName();\r\n const displayValue = showPreview && fileName ? fileName : placeholder;\r\n\r\n return (\r\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\r\n <div\r\n style={containerStyles}\r\n onDragEnter={enableDragDrop ? handleDragEnter : undefined}\r\n onDragLeave={enableDragDrop ? handleDragLeave : undefined}\r\n onDragOver={enableDragDrop ? handleDragOver : undefined}\r\n onDrop={enableDragDrop ? handleDrop : undefined}\r\n >\r\n <input\r\n type=\"file\"\r\n accept={accept}\r\n multiple={multiple}\r\n name={name}\r\n id={name ? `file-upload-${name}` : undefined}\r\n onChange={handleFileChange}\r\n style={{ display: 'none' }}\r\n ref={fileInputRef}\r\n disabled={disabled}\r\n />\r\n <TextField\r\n {...textFieldProps}\r\n label={label}\r\n value={displayValue}\r\n placeholder={placeholder}\r\n variant={variant}\r\n size={size}\r\n color={color}\r\n fullWidth={fullWidth}\r\n required={required}\r\n error={!!error}\r\n disabled={disabled}\r\n name={name}\r\n sx={inputStyles}\r\n slotProps={{\r\n ...slotProps,\r\n input: {\r\n ...slotProps?.input,\r\n readOnly: true,\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n {showPreview && fileName && (\r\n <IconButton onClick={handleFileRemove} disabled={disabled}>\r\n <Clear />\r\n </IconButton>\r\n )}\r\n <IconButton onClick={handleButtonClick} disabled={disabled} sx={buttonStyles}>\r\n {uploadIcon}\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n },\r\n }}\r\n slots={slots}\r\n helperText={helperText ?? (error?.message ? error.message : undefined)}\r\n />\r\n {enableDragDrop && isDragging && (\r\n <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.05)',\r\n border: '2px dashed',\r\n borderColor: 'primary.main',\r\n borderRadius: 4,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 1000,\r\n }}\r\n >\r\n Drop files here\r\n </div>\r\n )}\r\n </div>\r\n {error && !helperText && error.message && <FormHelperText>{error.message}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n);\r\n\r\nFileUploadField.displayName = 'FileUploadField';\r\n\r\nexport default FileUploadField;\r\n","import type { TextFieldProps } from \"@mui/material\";\r\nimport { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport DatePickerField from \"../FormFields/DateFields/DatePickerField\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputDatePicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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\tshouldDisableDate={shouldDisableDate}\r\n\t\t\t\t\t\t\tsize={size as TextFieldProps[\"size\"]}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={error?.message}\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 { Clear as ClearIcon } from '@mui/icons-material';\r\nimport {\r\n Box,\r\n FormControl,\r\n FormHelperText,\r\n FormLabel,\r\n type FormLabelProps,\r\n IconButton,\r\n TextField,\r\n type TextFieldProps,\r\n} from '@mui/material';\r\nimport { DatePicker, type DatePickerProps, LocalizationProvider } from '@mui/x-date-pickers';\r\n// @ts-ignore\r\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\r\nimport React, { type ForwardedRef, forwardRef, useRef } from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 extends Omit<DatePickerProps, 'value' | 'onChange' | 'defaultValue' | 'slots' | 'slotProps' | 'renderInput'> {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the date picker */\r\n label?: string;\r\n title?:boolean;\r\n /** Current selected date value */\r\n value: Date | null;\r\n /** Default date value */\r\n defaultValue?: Date | null;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below field */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Minimum selectable date */\r\n minDate?: Date;\r\n /** Maximum selectable date */\r\n maxDate?: Date;\r\n /** Function to disable specific dates */\r\n shouldDisableDate?: (date: Date) => boolean;\r\n /** Function to disable specific months */\r\n shouldDisableMonth?: (month: Date) => boolean;\r\n /** Function to disable specific years */\r\n shouldDisableYear?: (year: Date) => boolean;\r\n /** TextField size */\r\n size?: TextFieldProps['size'];\r\n /** TextField variant */\r\n variant?: TextFieldProps['variant'];\r\n /** TextField color */\r\n color?: TextFieldProps['color'];\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** Whether the field is read-only */\r\n readOnly?: boolean;\r\n /** Whether to show clear button */\r\n showClearButton?: boolean;\r\n /** Whether to disable past dates */\r\n disablePast?: boolean;\r\n /** Whether to disable future dates */\r\n disableFuture?: boolean;\r\n /** Reference date for the calendar */\r\n referenceDate?: Date;\r\n /** Controlled view state */\r\n view?: 'day' | 'month' | 'year';\r\n /** Format for displaying the date */\r\n format?: string;\r\n /** Whether to open the calendar on focus */\r\n openTo?: 'day' | 'month' | 'year';\r\n /** Custom styles for the DatePicker */\r\n pickerStyles?: DatePickerProps['sx'];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\r\n /** Custom styles for FormLabel */\r\n formLabelStyles?: FormLabelProps['sx'];\r\n /** Custom styles for the container Box */\r\n containerStyles?: React.ComponentProps<typeof Box>['sx'];\r\n /** Custom styles for the TextField */\r\n textFieldStyles?: TextFieldProps['sx'];\r\n /** Callback fired when the date changes */\r\n onChange?: (value: Date | null) => void;\r\n /** Callback fired when the field receives focus */\r\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n /** Callback fired when the field loses focus */\r\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n /** Callback fired when a view change is requested */\r\n onViewChange?: (view: 'day' | 'month' | 'year') => void;\r\n /** Callback fired when a month change is requested */\r\n onMonthChange?: (month: Date) => void;\r\n /** Callback fired when a year change is requested */\r\n onYearChange?: (year: Date) => void;\r\n /** Callback fired when the calendar opens */\r\n onOpen?: () => void;\r\n /** Callback fired when the calendar closes */\r\n onClose?: () => void;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: DatePickerProps['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: DatePickerProps['slots'];\r\n /** Date adapter to use (defaults to AdapterDateFns) */\r\n dateAdapter?: typeof AdapterDateFns;\r\n /** Whether to reduce animations */\r\n reduceAnimations?: boolean;\r\n /** Auto focus the input */\r\n autoFocus?: boolean;\r\n}\r\n\r\nconst DatePickerField = forwardRef<HTMLDivElement, IDatePickerFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onFocus,\r\n onBlur,\r\n onViewChange,\r\n onMonthChange,\r\n onYearChange,\r\n onOpen,\r\n onClose,\r\n error,\r\n helperText,\r\n disabled = false,\r\n fullWidth = true,\r\n required,\r\n minDate,\r\n maxDate,\r\n shouldDisableDate,\r\n shouldDisableMonth,\r\n shouldDisableYear,\r\n size = 'medium',\r\n variant = 'outlined',\r\n color = 'primary',\r\n placeholder,\r\n readOnly = false,\r\n showClearButton = true,\r\n disablePast = false,\r\n disableFuture = false,\r\n referenceDate,\r\n view,\r\n format,\r\n openTo = 'day',\r\n pickerStyles,\r\n formControlStyles,\r\n formLabelStyles,\r\n containerStyles,\r\n textFieldStyles,\r\n slotProps,\r\n slots,\r\n title = false,\r\n dateAdapter = AdapterDateFns,\r\n reduceAnimations = false,\r\n autoFocus = false,\r\n ...datePickerProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n // Handle onChange with proper typing\r\n const handleChange = (newValue: Date | null) => {\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n };\r\n\r\n // Handle clear button click\r\n const handleClear = () => {\r\n if (onChange) {\r\n onChange(null);\r\n }\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n // Default placeholder\r\n const defaultPlaceholder = placeholder || 'MM/DD/YYYY';\r\n\r\n // Merge slotProps with textField configuration\r\n const mergedSlotProps = {\r\n ...slotProps,\r\n textField: {\r\n ...slotProps?.textField,\r\n error: !!error,\r\n size,\r\n variant,\r\n color,\r\n helperText: error ? helperText ?? error.message : helperText,\r\n fullWidth,\r\n placeholder: defaultPlaceholder,\r\n autoFocus,\r\n onFocus,\r\n onBlur,\r\n inputRef: ref || inputRef,\r\n clearable: showClearButton,\r\n showClear: !!value,\r\n onClear: handleClear,\r\n sx: {\r\n ...textFieldStyles,\r\n ...(slotProps?.textField && typeof slotProps.textField === 'object' && 'sx' in slotProps.textField\r\n ? slotProps.textField.sx\r\n : {}),\r\n },\r\n InputProps: {\r\n ...(slotProps?.textField && typeof slotProps.textField === 'object' && 'InputProps' in slotProps.textField\r\n ? slotProps.textField.InputProps\r\n : {}),\r\n },\r\n } as unknown as Partial<TextFieldProps>,\r\n };\r\n\r\n return (\r\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\r\n {label && title &&(\r\n <FormLabel\r\n sx={{\r\n mb: 1,\r\n ...formLabelStyles,\r\n }}\r\n >\r\n {label}\r\n </FormLabel>\r\n )}\r\n <Box\r\n ref={ref}\r\n sx={{\r\n ...containerStyles,\r\n }}\r\n >\r\n <LocalizationProvider dateAdapter={dateAdapter}>\r\n <DatePicker\r\n {...datePickerProps}\r\n name={name}\r\n enableAccessibleFieldDOMStructure={false}\r\n label={label}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleChange}\r\n onViewChange={onViewChange}\r\n onMonthChange={onMonthChange}\r\n onYearChange={onYearChange}\r\n onOpen={onOpen}\r\n onClose={onClose}\r\n disabled={disabled}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n shouldDisableDate={shouldDisableDate}\r\n shouldDisableMonth={shouldDisableMonth}\r\n shouldDisableYear={shouldDisableYear}\r\n disablePast={disablePast}\r\n disableFuture={disableFuture}\r\n referenceDate={referenceDate}\r\n view={view}\r\n format={format}\r\n openTo={openTo}\r\n reduceAnimations={reduceAnimations}\r\n slotProps={mergedSlotProps}\r\n slots={{ ...slots, textField: ActionableTextField }}\r\n sx={pickerStyles}\r\n />\r\n </LocalizationProvider>\r\n </Box>\r\n {!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n);\r\n\r\nconst ActionableTextField = forwardRef((props: any, ref) => {\r\n const { clearable, onClear, showClear, InputProps, slotProps, ...other } = props;\r\n return (\r\n <TextField\r\n {...other}\r\n ref={ref}\r\n slotProps={{\r\n ...slotProps,\r\n input: {\r\n ...InputProps,\r\n ...slotProps?.input,\r\n endAdornment: (\r\n <React.Fragment>\r\n {clearable && showClear && (\r\n <IconButton onClick={onClear} size=\"small\" edge=\"end\" sx={{ marginRight: 0.5 }}>\r\n <ClearIcon fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n {InputProps?.endAdornment}\r\n {slotProps?.input?.endAdornment}\r\n </React.Fragment>\r\n ),\r\n },\r\n }}\r\n />\r\n );\r\n});\r\n\r\nActionableTextField.displayName = 'ActionableDatePickerTextField';\r\n\r\nDatePickerField.displayName = 'DatePickerField';\r\n\r\nexport default DatePickerField;\r\n","import { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TimePickerField from \"../FormFields/DateFields/TimePickerField\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTimePicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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 { Clear as ClearIcon } from '@mui/icons-material';\nimport {\n Box,\n FormControl,\n FormHelperText,\n FormLabel,\n type FormLabelProps,\n IconButton,\n TextField,\n type TextFieldProps,\n} from '@mui/material';\nimport { LocalizationProvider, TimePicker, type TimePickerProps } from '@mui/x-date-pickers';\n// @ts-ignore\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport React, { type ForwardedRef, forwardRef, useRef } from 'react';\n\n/**\n * Error object type\n */\nexport type FieldError = {\n message?: 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 extends Omit<\n TimePickerProps,\n 'value' | 'onChange' | 'defaultValue' | 'slots' | 'slotProps' | 'renderInput' | 'onViewChange'\n > {\n /** Field name for form identification */\n name?: string;\n /** Label text for the time picker */\n label?: string;\n /** Current selected time value */\n value: Date | null;\n /** Default time value */\n defaultValue?: Date | null;\n /** Error object with optional message */\n error?: FieldError;\n /** Helper text to display below field */\n helperText?: string;\n /** Whether the field is disabled */\n disabled?: boolean;\n /** Full width of the field */\n fullWidth?: boolean;\n /** Whether to show title */\n title?: boolean;\n /** Required field indicator */\n required?: boolean;\n /** Minimum selectable time */\n minTime?: Date;\n /** Maximum selectable time */\n maxTime?: Date;\n /** Function to disable specific times */\n shouldDisableTime?: (time: Date, view: 'hours' | 'minutes' | 'seconds') => boolean;\n /** TextField size */\n size?: TextFieldProps['size'];\n /** TextField variant */\n variant?: TextFieldProps['variant'];\n /** TextField color */\n color?: TextFieldProps['color'];\n /** Placeholder text */\n placeholder?: string;\n /** Whether the field is read-only */\n readOnly?: boolean;\n /** Whether to show clear button */\n showClearButton?: boolean;\n /** Whether to disable past times */\n disablePast?: boolean;\n /** Whether to disable future times */\n disableFuture?: boolean;\n /** Whether to use 12-hour format */\n ampm?: boolean;\n /** Available views (hours, minutes, seconds) */\n views?: ('hours' | 'minutes' | 'seconds')[];\n /** Controlled view state */\n view?: 'hours' | 'minutes' | 'seconds';\n /** Default view */\n openTo?: 'hours' | 'minutes' | 'seconds';\n /** Format for displaying the time */\n format?: string;\n /** Custom styles for the TimePicker */\n pickerStyles?: TimePickerProps['sx'];\n /** Custom styles for FormControl */\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\n /** Custom styles for FormLabel */\n formLabelStyles?: FormLabelProps['sx'];\n /** Custom styles for the container Box */\n containerStyles?: React.ComponentProps<typeof Box>['sx'];\n /** Custom styles for the TextField */\n textFieldStyles?: TextFieldProps['sx'];\n /** Callback fired when the time changes */\n onChange?: (value: Date | null) => void;\n /** Callback fired when the field receives focus */\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /** Callback fired when the field loses focus */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /** Callback fired when a view change is requested */\n onViewChange?: (view: 'hours' | 'minutes' | 'seconds' | 'meridiem') => void;\n /** Callback fired when the picker opens */\n onOpen?: () => void;\n /** Callback fired when the picker closes */\n onClose?: () => void;\n /** Custom slot props for MUI v7 */\n slotProps?: TimePickerProps['slotProps'];\n /** Custom slots for MUI v7 */\n slots?: TimePickerProps['slots'];\n /** Date adapter to use (defaults to AdapterDateFns) */\n dateAdapter?: typeof AdapterDateFns;\n /** Auto focus the input */\n autoFocus?: boolean;\n}\n\nconst TimePickerField = forwardRef<HTMLDivElement, ITimePickerFieldProps>(\n (\n {\n name,\n label,\n title,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onViewChange,\n onOpen,\n onClose,\n error,\n helperText,\n disabled = false,\n fullWidth = true,\n required,\n minTime,\n maxTime,\n shouldDisableTime,\n size = 'medium',\n variant = 'outlined',\n color = 'primary',\n placeholder,\n readOnly = false,\n showClearButton = true,\n disablePast = false,\n disableFuture = false,\n ampm = true,\n views,\n view,\n openTo = 'hours',\n format,\n pickerStyles,\n formControlStyles,\n formLabelStyles,\n containerStyles,\n textFieldStyles,\n slotProps,\n slots,\n dateAdapter = AdapterDateFns,\n autoFocus = false,\n ...timePickerProps\n },\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Handle onChange with proper typing\n const handleChange = (newValue: Date | null) => {\n if (onChange) {\n onChange(newValue);\n }\n };\n\n // Handle clear button click\n const handleClear = () => {\n if (onChange) {\n onChange(null);\n }\n if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n // Default placeholder\n const defaultPlaceholder = placeholder || (ampm ? 'hh:mm AM/PM' : 'hh:mm');\n\n // Merge slotProps with textField configuration\n const mergedSlotProps = {\n ...slotProps,\n textField: {\n ...slotProps?.textField,\n error: !!error,\n size,\n variant,\n color,\n helperText: error ? helperText ?? error.message : helperText,\n fullWidth,\n placeholder: defaultPlaceholder,\n autoFocus,\n onFocus,\n onBlur,\n inputRef: ref || inputRef,\n clearable: showClearButton,\n showClear: !!value,\n onClear: handleClear,\n sx: {\n ...textFieldStyles,\n ...(slotProps?.textField && typeof slotProps.textField === 'object' && 'sx' in slotProps.textField\n ? slotProps.textField.sx\n : {}),\n },\n InputProps: {\n ...(slotProps?.textField && typeof slotProps.textField === 'object' && 'InputProps' in slotProps.textField\n ? slotProps.textField.InputProps\n : {}),\n },\n } as unknown as Partial<TextFieldProps>,\n };\n\n return (\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\n {label && title &&(\n <FormLabel\n sx={{\n mb: 1,\n ...formLabelStyles,\n }}\n >\n {label}\n </FormLabel>\n )}\n <Box\n ref={ref}\n sx={{\n ...containerStyles,\n }}\n >\n <LocalizationProvider dateAdapter={dateAdapter}>\n <TimePicker\n {...timePickerProps}\n name={name}\n enableAccessibleFieldDOMStructure={false}\n label={label ? undefined : label}\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n onViewChange={onViewChange}\n onOpen={onOpen}\n onClose={onClose}\n disabled={disabled}\n minTime={minTime}\n maxTime={maxTime}\n shouldDisableTime={shouldDisableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n ampm={ampm}\n views={views}\n view={view}\n openTo={openTo}\n format={format}\n slotProps={mergedSlotProps}\n slots={{ ...slots, textField: ActionableTextField }}\n sx={pickerStyles}\n />\n </LocalizationProvider>\n </Box>\n\n {!error && helperText && <FormHelperText sx={{ margin: '4px' }}>{helperText}</FormHelperText>}\n </FormControl>\n );\n },\n);\nconst ActionableTextField = forwardRef((props: any, ref) => {\n const { clearable, onClear, showClear, InputProps, slotProps, ...other } = props;\n return (\n <TextField\n {...other}\n ref={ref}\n slotProps={{\n ...slotProps,\n input: {\n ...InputProps,\n ...slotProps?.input,\n endAdornment: (\n <React.Fragment>\n {clearable && showClear && (\n <IconButton onClick={onClear} size=\"small\" edge=\"end\" sx={{ marginRight: 0.5 }}>\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n {InputProps?.endAdornment}\n {slotProps?.input?.endAdornment}\n </React.Fragment>\n ),\n },\n }}\n />\n );\n});\nActionableTextField.displayName = 'ActionableTimePickerTextField';\n\nTimePickerField.displayName = 'TimePickerField';\n\nexport default TimePickerField;\n","import { Box, FormLabel } from \"@mui/material\";\r\nimport { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TimeClockField from \"../FormFields/DateFields/TimeClockField\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTimeClock = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => (\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\thelperText={error?.message}\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</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, Button, FormControl, FormHelperText, Stack, type ButtonProps, type FormLabelProps } from '@mui/material';\r\nimport { LocalizationProvider, TimeClock, type TimeClockProps, type TimeView } from '@mui/x-date-pickers';\r\n// @ts-ignore\r\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\r\nimport React, { forwardRef, useState, type ForwardedRef } from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 extends Omit<\r\n TimeClockProps<TimeView>,\r\n 'value' | 'onChange' | 'defaultValue' | 'slots' | 'slotProps' | 'view' | 'onViewChange'\r\n > {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the time clock */\r\n label?: React.ReactNode;\r\n /** Current selected time value */\r\n value: Date | null;\r\n /** Default time value */\r\n defaultValue?: Date | null;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below time clock */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Available views (hours, minutes, seconds) */\r\n views?: TimeView[];\r\n /** Whether to show AM/PM in the clock */\r\n ampmInClock?: boolean;\r\n /** Whether to use 12-hour format */\r\n ampm?: boolean;\r\n /** Whether to disable past times */\r\n disablePast?: boolean;\r\n /** Whether to disable future times */\r\n disableFuture?: boolean;\r\n /** Minimum selectable time */\r\n minTime?: Date;\r\n /** Maximum selectable time */\r\n maxTime?: Date;\r\n /** Function to disable specific times */\r\n shouldDisableTime?: (time: Date, view: TimeView) => boolean;\r\n /** Custom styles for the TimeClock */\r\n clockStyles?: TimeClockProps<TimeView>['sx'];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\r\n /** Custom styles for FormLabel */\r\n formLabelStyles?: FormLabelProps['sx'];\r\n /** Custom styles for the container Box */\r\n containerStyles?: React.ComponentProps<typeof Box>['sx'];\r\n /** Custom styles for the view buttons Stack */\r\n buttonsStackStyles?: React.ComponentProps<typeof Stack>['sx'];\r\n /** Custom styles for view buttons */\r\n buttonStyles?: ButtonProps['sx'];\r\n /** Custom styles for active view button */\r\n activeButtonStyles?: ButtonProps['sx'];\r\n /** Whether to show view selector buttons */\r\n showViewButtons?: boolean;\r\n /** Initial view */\r\n initialView?: TimeView;\r\n /** Controlled view state */\r\n view?: TimeView;\r\n /** Callback fired when the time changes */\r\n onChange?: (value: Date | null) => void;\r\n /** Callback fired when a view change is requested */\r\n onViewChange?: (view: TimeView) => void;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: TimeClockProps<TimeView>['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: TimeClockProps<TimeView>['slots'];\r\n /** Date adapter to use (defaults to AdapterDateFns) */\r\n dateAdapter?: typeof AdapterDateFns;\r\n /** Auto focus */\r\n autoFocus?: boolean;\r\n}\r\n\r\nconst TimeClockField = forwardRef<HTMLDivElement, ITimeClockFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n defaultValue,\r\n onChange,\r\n error,\r\n helperText,\r\n disabled = false,\r\n fullWidth = false,\r\n required,\r\n views = ['hours', 'minutes'],\r\n ampmInClock = false,\r\n ampm = true,\r\n disablePast = false,\r\n disableFuture = false,\r\n minTime,\r\n maxTime,\r\n shouldDisableTime,\r\n clockStyles,\r\n formControlStyles,\r\n formLabelStyles,\r\n containerStyles,\r\n buttonsStackStyles,\r\n buttonStyles,\r\n activeButtonStyles,\r\n showViewButtons = true,\r\n initialView = 'hours',\r\n view: controlledView,\r\n onViewChange: controlledOnViewChange,\r\n slotProps,\r\n slots,\r\n dateAdapter = AdapterDateFns,\r\n autoFocus = false,\r\n ...timeClockProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n // Internal view state (only used if view is not controlled)\r\n const [internalView, setInternalView] = useState<TimeView>(initialView);\r\n\r\n // Use controlled view if provided, otherwise use internal state\r\n const view = controlledView ?? internalView;\r\n const setView = controlledOnViewChange ?? setInternalView;\r\n\r\n // Handle onChange with proper typing\r\n const handleChange = (newValue: Date | null) => {\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n };\r\n\r\n // Handle view change\r\n const handleViewChange = (newView: TimeView) => {\r\n setView(newView);\r\n };\r\n\r\n return (\r\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\r\n <Box\r\n ref={ref}\r\n sx={{\r\n ...containerStyles,\r\n }}\r\n mt={2}\r\n mb={2}\r\n >\r\n {showViewButtons && views && views.length > 1 && (\r\n <Stack\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n spacing={1}\r\n sx={{\r\n ...buttonsStackStyles,\r\n }}\r\n >\r\n {views.map((v) => (\r\n <Button\r\n key={v}\r\n size=\"small\"\r\n variant={view === v ? 'contained' : 'outlined'}\r\n onClick={() => handleViewChange(v)}\r\n disabled={disabled}\r\n sx={\r\n view === v\r\n ? {\r\n ...(buttonStyles as any),\r\n ...(activeButtonStyles as any),\r\n }\r\n : (buttonStyles as any)\r\n }\r\n >\r\n {v}\r\n </Button>\r\n ))}\r\n </Stack>\r\n )}\r\n <LocalizationProvider dateAdapter={dateAdapter}>\r\n <TimeClock\r\n {...timeClockProps}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleChange}\r\n view={view}\r\n onViewChange={handleViewChange}\r\n disabled={disabled}\r\n views={views}\r\n ampmInClock={ampmInClock}\r\n ampm={ampm}\r\n disablePast={disablePast}\r\n disableFuture={disableFuture}\r\n minTime={minTime}\r\n maxTime={maxTime}\r\n shouldDisableTime={shouldDisableTime}\r\n autoFocus={autoFocus}\r\n slotProps={slotProps}\r\n slots={slots}\r\n sx={clockStyles}\r\n />\r\n </LocalizationProvider>\r\n </Box>\r\n {error && (\r\n <FormHelperText sx={{ margin: '4px' }}>{helperText ?? (error?.message ? error.message : '')}</FormHelperText>\r\n )}\r\n {!error && helperText && <FormHelperText sx={{ margin: '4px' }}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n);\r\n\r\nTimeClockField.displayName = 'TimeClockField';\r\n\r\nexport default TimeClockField;\r\n","import { Box, FormLabel } from \"@mui/material\";\r\nimport { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport DateCalendarField from \"../FormFields/DateFields/DateCalendarField\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputCalendar = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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\thelperText={error?.message}\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</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 { Box, FormControl, FormHelperText, type FormLabelProps } from '@mui/material';\r\nimport { DateCalendar, type DateCalendarProps, LocalizationProvider } from '@mui/x-date-pickers';\r\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\r\n\r\nimport React, { type ForwardedRef, forwardRef } from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 extends Omit<DateCalendarProps, 'value' | 'onChange' | 'defaultValue' | 'slots' | 'slotProps'> {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the calendar */\r\n label?: React.ReactNode;\r\n /** Current selected date value */\r\n value: Date | null;\r\n /** Default date value */\r\n defaultValue?: Date | null;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below calendar */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Minimum selectable date */\r\n minDate?: Date;\r\n /** Maximum selectable date */\r\n maxDate?: Date;\r\n /** Function to disable specific dates */\r\n shouldDisableDate?: (date: Date) => boolean;\r\n /** Function to disable specific months */\r\n shouldDisableMonth?: (month: Date) => boolean;\r\n /** Function to disable specific years */\r\n shouldDisableYear?: (year: Date) => boolean;\r\n /** Custom styles for the DateCalendar */\r\n calendarStyles?: DateCalendarProps['sx'];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\r\n /** Custom styles for FormLabel */\r\n formLabelStyles?: FormLabelProps['sx'];\r\n /** Custom styles for the container Box */\r\n containerStyles?: React.ComponentProps<typeof Box>['sx'];\r\n /** Callback fired when the date changes */\r\n onChange?: (value: Date | null) => void;\r\n /** Callback fired when a view change is requested */\r\n onViewChange?: (view: 'day' | 'month' | 'year') => void;\r\n /** Callback fired when a month change is requested */\r\n onMonthChange?: (month: Date) => void;\r\n /** Callback fired when a year change is requested */\r\n onYearChange?: (year: Date) => void;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: DateCalendarProps['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: DateCalendarProps['slots'];\r\n /** Date adapter to use (defaults to AdapterDateFns) */\r\n dateAdapter?: typeof AdapterDateFns;\r\n /** Whether to show days outside current month */\r\n showDaysOutsideCurrentMonth?: boolean;\r\n /** Whether to disable past dates */\r\n disablePast?: boolean;\r\n /** Whether to disable future dates */\r\n disableFuture?: boolean;\r\n /** Reference date for the calendar */\r\n referenceDate?: Date;\r\n /** Controlled view state */\r\n view?: 'day' | 'month' | 'year';\r\n}\r\n\r\nconst DateCalendarField = forwardRef<HTMLDivElement, IDateCalendarFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onViewChange,\r\n onMonthChange,\r\n onYearChange,\r\n error,\r\n helperText,\r\n disabled = false,\r\n fullWidth = false,\r\n required,\r\n minDate,\r\n maxDate,\r\n shouldDisableDate,\r\n shouldDisableMonth,\r\n shouldDisableYear,\r\n calendarStyles,\r\n formControlStyles,\r\n formLabelStyles,\r\n containerStyles,\r\n slotProps,\r\n slots,\r\n dateAdapter = AdapterDateFns,\r\n showDaysOutsideCurrentMonth = false,\r\n disablePast = false,\r\n disableFuture = false,\r\n referenceDate,\r\n view,\r\n ...dateCalendarProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n // Handle onChange with proper typing\r\n const handleChange = (newValue: Date | null) => {\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\r\n <Box\r\n ref={ref}\r\n sx={{\r\n ...containerStyles,\r\n }}\r\n >\r\n <LocalizationProvider dateAdapter={dateAdapter}>\r\n <DateCalendar\r\n {...dateCalendarProps}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleChange}\r\n onViewChange={onViewChange}\r\n onMonthChange={onMonthChange}\r\n onYearChange={onYearChange}\r\n disabled={disabled}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n shouldDisableDate={shouldDisableDate}\r\n shouldDisableMonth={shouldDisableMonth}\r\n shouldDisableYear={shouldDisableYear}\r\n showDaysOutsideCurrentMonth={showDaysOutsideCurrentMonth}\r\n disablePast={disablePast}\r\n disableFuture={disableFuture}\r\n referenceDate={referenceDate}\r\n view={view}\r\n slotProps={slotProps}\r\n slots={slots}\r\n sx={calendarStyles}\r\n />\r\n </LocalizationProvider>\r\n </Box>\r\n {error && (\r\n <FormHelperText sx={{ margin: '4px' }}>{helperText ?? (error?.message ? error.message : '')}</FormHelperText>\r\n )}\r\n {!error && helperText && <FormHelperText sx={{ margin: '4px' }}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n);\r\n\r\nDateCalendarField.displayName = 'DateCalendarField';\r\n\r\nexport default DateCalendarField;\r\n","import { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport CheckBoxField from \"../FormFields/BoxFields/CheckBoxField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputCheckBox = memo(\r\n\t({ name, label, control, defaultValue = false, onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport CheckBoxFieldGroup from \"../FormFields/BoxFields/CheckBoxFieldGroup\";\r\nimport type { IFormInputCheckBoxGroupFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputCheckBoxGroup = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SwitchField from \"../FormFields/BoxFields/SwitchField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputSwitch = memo(\r\n\t({ name, label, control, defaultValue = false, onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SliderField from \"../FormFields/BoxFields/SliderField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputSlider = memo(\r\n\t({ name, label, control, defaultValue = 0, onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport RadioButtonField from \"../FormFields/BoxFields/RadioButtonField\";\r\nimport type { IFormInputRadioFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputRadioButton = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport RadioButtonFieldGroup from \"../FormFields/BoxFields/RadioButtonFieldGroup\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputRadioButtonGroup = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => {\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={error?.message}\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","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","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState } from \"react\";\r\nimport { Box, Paper, Typography, Button, Divider } from \"@mui/material\";\r\n\r\n// Import all FormInputs (not HookFormFields)\r\nimport TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport PasswordField from \"../FormFields/TextFields/PasswordField\";\r\nimport NumberField from \"../FormFields/TextFields/NumberField\";\r\nimport TelInputField from \"../FormFields/TextFields/TelInputField\";\r\nimport SearchInputField from \"../FormFields/TextFields/SearchInputField\";\r\nimport OTPField from \"../FormFields/TextFields/OTPField\";\r\nimport SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport ColorPickerField from \"../FormFields/DropdownFields/ColorPickerField\";\r\nimport FileUploadField from \"../FormFields/DropdownFields/FileUploadField\";\r\nimport DatePickerField from \"../FormFields/DateFields/DatePickerField\";\r\nimport TimePickerField from \"../FormFields/DateFields/TimePickerField\";\r\nimport TimeClockField from \"../FormFields/DateFields/TimeClockField\";\r\nimport DateCalendarField from \"../FormFields/DateFields/DateCalendarField\";\r\nimport CheckBoxField from \"../FormFields/BoxFields/CheckBoxField\";\r\nimport CheckBoxFieldGroup from \"../FormFields/BoxFields/CheckBoxFieldGroup\";\r\nimport SwitchField from \"../FormFields/BoxFields/SwitchField\";\r\nimport SliderField from \"../FormFields/BoxFields/SliderField\";\r\nimport RadioButtonField from \"../FormFields/BoxFields/RadioButtonField\";\r\nimport RadioButtonFieldGroup from \"../FormFields/BoxFields/RadioButtonFieldGroup\";\r\n\r\nimport type { Option } from \"../HookFormFields/types\";\r\n\r\nconst NormalForm = () => {\r\n // Form state\r\n const [formData, setFormData] = useState({\r\n text: \"\",\r\n textarea: \"\",\r\n password: \"\",\r\n number: \"\",\r\n tel: \"\",\r\n search: \"\",\r\n otp: \"\",\r\n select: \"\",\r\n multiselect: [] as (string | number)[],\r\n autocomplete: null as Option | null,\r\n multiautocomplete: [] as Option[],\r\n color: \"#000000\",\r\n file: null as File | File[] | null,\r\n date: null as Date | null,\r\n time: null as Date | null,\r\n timeclock: null as Date | null,\r\n calendar: null as Date | null,\r\n checkbox: false,\r\n checkboxgroup: [] as (string | number)[],\r\n switch: false,\r\n slider: 0,\r\n singleradio: false,\r\n radiogroup: \"\",\r\n });\r\n\r\n const [errors, setErrors] = useState<Record<string, string>>({});\r\n\r\n // Options for dropdowns\r\n const selectOptions: Option[] = [\r\n { name: \"Option 1\", value: \"opt1\" },\r\n { name: \"Option 2\", value: \"opt2\" },\r\n { name: \"Option 3\", value: \"opt3\" },\r\n ];\r\n\r\n const checkboxOptions = [\r\n { value: \"check1\", label: \"Checkbox 1\" },\r\n { value: \"check2\", label: \"Checkbox 2\" },\r\n { value: \"check3\", label: \"Checkbox 3\" },\r\n ];\r\n\r\n const radioOptions = [\r\n { name: \"Radio 1\", value: \"radio1\" },\r\n { name: \"Radio 2\", value: \"radio2\" },\r\n { name: \"Radio 3\", value: \"radio3\" },\r\n ];\r\n\r\n const handleChange = (field: string) => (value: any) => {\r\n setFormData((prev) => ({ ...prev, [field]: value }));\r\n // Clear error when user types\r\n if (errors[field]) {\r\n setErrors((prev) => {\r\n const newErrors = { ...prev };\r\n delete newErrors[field];\r\n return newErrors;\r\n });\r\n }\r\n };\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n console.log(\"Normal Form Data:\", formData);\r\n // Simple validation\r\n const newErrors: Record<string, string> = {};\r\n if (!formData.text) newErrors.text = \"Text is required\";\r\n if (!formData.password) newErrors.password = \"Password is required\";\r\n setErrors(newErrors);\r\n };\r\n\r\n return (\r\n <Paper sx={{ p: 3, maxWidth: 1200, mx: \"auto\" }}>\r\n <Typography variant=\"h4\" gutterBottom>\r\n Normal Form (Direct FormInputs)\r\n </Typography>\r\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\r\n Using FormInputs directly with useState\r\n </Typography>\r\n <Divider sx={{ my: 2 }} />\r\n\r\n <form onSubmit={handleSubmit}>\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: { xs: \"1fr\", md: \"repeat(3, 1fr)\" },\r\n gap: 2,\r\n }}\r\n >\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n {/* Text Inputs */}\r\n <TextInputField\r\n name=\"text\"\r\n label=\"Text Field\"\r\n value={formData.text}\r\n onChange={(e) => handleChange(\"text\")(e.target.value)}\r\n error={errors.text ? { message: errors.text } : null}\r\n />\r\n <PasswordField\r\n name=\"password\"\r\n label=\"Password\"\r\n value={formData.password}\r\n onChange={(e) => handleChange(\"password\")(e.target.value)}\r\n error={errors.password ? { message: errors.password } : null}\r\n />\r\n </Box>\r\n\r\n <TextInputField\r\n name=\"textarea\"\r\n label=\"Text Area\"\r\n value={formData.textarea}\r\n onChange={(e) => handleChange(\"textarea\")(e.target.value)}\r\n multiline\r\n rows={4}\r\n />\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n <NumberField\r\n name=\"number\"\r\n label=\"Number\"\r\n pattern=\"credit-card\"\r\n value={formData.number}\r\n onChange={(e) => handleChange(\"number\")(e.target.value)}\r\n />\r\n <TelInputField\r\n name=\"tel\"\r\n label=\"Telephone\"\r\n pattern=\"XX-XXXX-XXXX\"\r\n value={formData.tel}\r\n onChange={(e) => handleChange(\"tel\")(e.target.value)}\r\n />\r\n </Box>\r\n\r\n <SearchInputField\r\n name=\"search\"\r\n label=\"Search\"\r\n value={formData.search}\r\n onChange={(e) => handleChange(\"search\")(e.target.value)}\r\n />\r\n\r\n <OTPField\r\n name=\"otp\"\r\n value={formData.otp}\r\n onChange={handleChange(\"otp\")}\r\n length={6}\r\n spacing={2}\r\n />\r\n\r\n {/* Dropdowns */}\r\n <SelectInputField\r\n name=\"select\"\r\n label=\"Select\"\r\n value={formData.select}\r\n onChange={(e) => handleChange(\"select\")(e.target.value)}\r\n options={selectOptions}\r\n />\r\n\r\n <SelectInputField\r\n name=\"multiselect\"\r\n label=\"Multi Select\"\r\n value={formData.multiselect}\r\n onChange={(e) => handleChange(\"multiselect\")(e.target.value)}\r\n options={selectOptions}\r\n multiple\r\n />\r\n\r\n <AutoCompleteField\r\n name=\"autocomplete\"\r\n label=\"Autocomplete\"\r\n value={formData.autocomplete}\r\n onChange={(_, newValue) => handleChange(\"autocomplete\")(newValue)}\r\n options={selectOptions}\r\n />\r\n\r\n <AutoCompleteField\r\n name=\"multiautocomplete\"\r\n label=\"Multi Autocomplete\"\r\n value={formData.multiautocomplete}\r\n onChange={(_, newValue) =>\r\n handleChange(\"multiautocomplete\")(newValue)\r\n }\r\n options={selectOptions}\r\n multiple\r\n />\r\n\r\n <ColorPickerField\r\n name=\"color\"\r\n label=\"Color Picker\"\r\n value={formData.color}\r\n onChange={handleChange(\"color\")}\r\n />\r\n\r\n <FileUploadField\r\n name=\"file\"\r\n label=\"File Upload\"\r\n value={formData.file}\r\n onChange={handleChange(\"file\")}\r\n />\r\n\r\n {/* Date/Time */}\r\n <DatePickerField\r\n name=\"date\"\r\n value={formData.date}\r\n onChange={handleChange(\"date\")}\r\n />\r\n <Box>\r\n <TimePickerField\r\n name=\"time\"\r\n value={formData.time}\r\n onChange={handleChange(\"time\")}\r\n />\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: { md: \"1fr 1fr\" },\r\n gap: 2,\r\n mt: 2,\r\n }}\r\n >\r\n <CheckBoxFieldGroup\r\n name=\"checkboxgroup\"\r\n label=\"Checkbox Group\"\r\n value={formData.checkboxgroup}\r\n onChange={handleChange(\"checkboxgroup\")}\r\n options={checkboxOptions}\r\n />\r\n <RadioButtonFieldGroup\r\n name=\"radiogroup\"\r\n label=\"Radio Group\"\r\n value={formData.radiogroup}\r\n onChange={handleChange(\"radiogroup\")}\r\n options={radioOptions}\r\n />\r\n </Box>\r\n <Box sx={{ display: \"flex\", gap: 2, mt: 2 }}>\r\n <CheckBoxField\r\n name=\"checkbox\"\r\n label=\"Checkbox\"\r\n value={formData.checkbox}\r\n onChange={handleChange(\"checkbox\")}\r\n />\r\n\r\n <RadioButtonField\r\n name=\"singleradio\"\r\n label=\"Radio\"\r\n value={formData.singleradio}\r\n onChange={handleChange(\"singleradio\")}\r\n />\r\n <SwitchField\r\n name=\"switch\"\r\n label=\"Switch\"\r\n value={formData.switch}\r\n onChange={handleChange(\"switch\")}\r\n />\r\n </Box>\r\n </Box>\r\n <Box\r\n sx={{ border: 1, borderColor: \"grey.300\", borderRadius: 1, p: 2 }}\r\n >\r\n <TimeClockField\r\n name=\"timeclock\"\r\n label=\"Time Clock\"\r\n value={formData.timeclock}\r\n onChange={handleChange(\"timeclock\")}\r\n />\r\n </Box>\r\n\r\n <Box\r\n sx={{ border: 1, borderColor: \"grey.300\", borderRadius: 1, p: 2 }}\r\n >\r\n <DateCalendarField\r\n name=\"calendar\"\r\n label=\"Calendar\"\r\n value={formData.calendar}\r\n onChange={handleChange(\"calendar\")}\r\n />\r\n </Box>\r\n\r\n {/* Box Inputs */}\r\n\r\n <SliderField\r\n name=\"slider\"\r\n label=\"Slider\"\r\n value={formData.slider}\r\n onChange={handleChange(\"slider\")}\r\n min={0}\r\n max={100}\r\n />\r\n\r\n <Box\r\n sx={{\r\n gridColumn: { xs: \"1\", md: \"1 / -1\" },\r\n display: \"flex\",\r\n gap: 2,\r\n justifyContent: \"flex-end\",\r\n }}\r\n >\r\n <Button\r\n variant=\"outlined\"\r\n onClick={() =>\r\n setFormData({\r\n text: \"\",\r\n textarea: \"\",\r\n password: \"\",\r\n number: \"\",\r\n tel: \"\",\r\n search: \"\",\r\n otp: \"\",\r\n select: \"\",\r\n multiselect: [],\r\n autocomplete: null,\r\n multiautocomplete: [],\r\n color: \"#000000\",\r\n file: null,\r\n date: null,\r\n time: null,\r\n timeclock: null,\r\n calendar: null,\r\n checkbox: false,\r\n checkboxgroup: [],\r\n switch: false,\r\n slider: 0,\r\n singleradio: false,\r\n radiogroup: \"\",\r\n })\r\n }\r\n >\r\n Reset\r\n </Button>\r\n <Button type=\"submit\" variant=\"contained\">\r\n Submit\r\n </Button>\r\n </Box>\r\n </Box>\r\n </form>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default NormalForm;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// import { zodResolver } from '@hookform/resolvers/zod';\r\nimport { Box, Button, Divider, Paper, Typography } from \"@mui/material\";\r\nimport { useForm, type Control } from \"react-hook-form\";\r\nimport React from \"react\";\r\n// import * as z from 'zod';\r\nimport {\r\n\tFormInputAutoComplete,\r\n\tFormInputCalendar,\r\n\tFormInputCheckBox,\r\n\tFormInputCheckBoxGroup,\r\n\tFormInputColorPicker,\r\n\tFormInputDatePicker,\r\n\tFormInputFileUpload,\r\n\tFormInputMultiAutoComplete,\r\n\tFormInputMultiSelect,\r\n\tFormInputNumberField,\r\n\tFormInputOTPField,\r\n\tFormInputPasswordField,\r\n\tFormInputRadioButtonGroup,\r\n\tFormInputSearchField,\r\n\tFormInputSelect,\r\n\tFormInputSingleRadio,\r\n\tFormInputSlider,\r\n\tFormInputSwitch,\r\n\tFormInputTelField,\r\n\tFormInputTextArea,\r\n\tFormInputTextField,\r\n\tFormInputTimeClock,\r\n\tFormInputTimePicker,\r\n} from \"../HookFormFields\";\r\n\r\ninterface FormData {\r\n\ttext: string;\r\n\ttextarea: string;\r\n\tpassword: string;\r\n\tnumber: string;\r\n\ttel: string;\r\n\tsearch: string;\r\n\totp: string;\r\n\tselect: string;\r\n\tmultiselect: (string | number)[];\r\n\tautocomplete: any;\r\n\tmultiautocomplete: any[];\r\n\tcolor: string;\r\n\tfile: File | File[] | null;\r\n\tdate: Date | null;\r\n\ttime: Date | null;\r\n\ttimeclock: Date | null;\r\n\tcalendar: Date | null;\r\n\tcheckbox: boolean;\r\n\tcheckboxgroup: (string | number)[];\r\n\tswitch: boolean;\r\n\tslider: number;\r\n\tsingleradio: boolean;\r\n\tradiogroup: string;\r\n}\r\n\r\ntype FormControl = {\r\n\tcontrol: Control<any>;\r\n\thandleSubmit: (e: (data: FormData) => void) => (e?: any) => Promise<void>;\r\n\tformState: {\r\n\t\terrors: Record<string, any>;\r\n\t};\r\n\treset: () => void;\r\n};\r\nconst size = \"small\";\r\n\r\n// const schema = z.object({\r\n// text: z.string().min(3, { message: 'Text must be at least 3 characters' }),\r\n// textarea: z.string().min(10, { message: 'Description must be at least 10 characters' }),\r\n// password: z.string().min(6, { message: 'Password must be at least 6 characters' }),\r\n// number: z.string().min(1, { message: 'Number is required' }),\r\n// tel: z.string().min(10, { message: 'Phone number must be at least 10 characters' }),\r\n// search: z.string().min(3, { message: 'Search term must be at least 3 characters' }),\r\n// otp: z.string().min(4, { message: 'OTP must be at least 4 characters' }),\r\n// select: z.string().min(1, { message: 'Please select an option' }),\r\n// multiselect: z.array(z.union([z.string(), z.number()])).min(1, { message: 'Select at least one option' }),\r\n// autocomplete: z.any().refine((val) => val, { message: 'Please select an option' }),\r\n// multiautocomplete: z.array(z.any()).min(1, { message: 'Select at least one option' }),\r\n// color: z.string().min(1, { message: 'Color is required' }),\r\n// file: z.any().refine((val) => val, { message: 'File is required' }),\r\n// date: z\r\n// .date()\r\n// .nullable()\r\n// .refine((val) => val !== null, { message: 'Date is required' }),\r\n// time: z\r\n// .date()\r\n// .nullable()\r\n// .refine((val) => val !== null, { message: 'Time is required' }),\r\n// timeclock: z\r\n// .date()\r\n// .nullable()\r\n// .refine((val) => val !== null, { message: 'Time is required' }),\r\n// calendar: z\r\n// .date()\r\n// .nullable()\r\n// .refine((val) => val !== null, { message: 'Date is required' }),\r\n// checkbox: z.boolean().refine((val) => val === true, { message: 'Must be checked' }),\r\n// checkboxgroup: z.array(z.union([z.string(), z.number()])).min(1, { message: 'Select at least one option' }),\r\n// switch: z.boolean().refine((val) => val === true, { message: 'Must be switched on' }),\r\n// slider: z.number().min(1, { message: 'Value must be greater than 0' }),\r\n// singleradio: z.boolean().refine((val) => val === true, { message: 'Must be selected' }),\r\n// radiogroup: z.string().min(1, { message: 'Please select an option' }),\r\n// });\r\n\r\nconst ReactHookForm = () => {\r\n\tconst {\r\n\t\tcontrol,\r\n\t\thandleSubmit,\r\n\t\tformState: { errors },\r\n\t\treset,\r\n\t}: FormControl = useForm<any>({\r\n\t\tdefaultValues: {\r\n\t\t\ttext: \"\",\r\n\t\t\ttextarea: \"\",\r\n\t\t\tpassword: \"\",\r\n\t\t\tnumber: \"\",\r\n\t\t\ttel: \"\",\r\n\t\t\tsearch: \"\",\r\n\t\t\totp: \"\",\r\n\t\t\tselect: \"\",\r\n\t\t\tmultiselect: [],\r\n\t\t\tautocomplete: null,\r\n\t\t\tmultiautocomplete: [],\r\n\t\t\tcolor: \"\",\r\n\t\t\tfile: null,\r\n\t\t\tdate: null,\r\n\t\t\ttime: null,\r\n\t\t\ttimeclock: null,\r\n\t\t\tcalendar: null,\r\n\t\t\tcheckbox: false,\r\n\t\t\tcheckboxgroup: [],\r\n\t\t\tswitch: false,\r\n\t\t\tslider: 0,\r\n\t\t\tsingleradio: false,\r\n\t\t\tradiogroup: \"\",\r\n\t\t},\r\n\t\t// resolver: zodResolver(schema),\r\n\t});\r\n\r\n\t// Options for dropdowns\r\n\tconst selectOptions = [\r\n\t\t{ name: \"Option 1\", value: \"opt1\" },\r\n\t\t{ name: \"Option 2\", value: \"opt2\" },\r\n\t\t{ name: \"Option 3\", value: \"opt3\" },\r\n\t];\r\n\r\n\tconst checkboxOptions = [\r\n\t\t{ name: \"Checkbox 1\", value: \"check1\" },\r\n\t\t{ name: \"Checkbox 2\", value: \"check2\" },\r\n\t\t{ name: \"Checkbox 3\", value: \"check3\" },\r\n\t];\r\n\r\n\tconst radioOptions = [\r\n\t\t{ name: \"Radio 1\", value: \"radio1\" },\r\n\t\t{ name: \"Radio 2\", value: \"radio2\" },\r\n\t\t{ name: \"Radio 3\", value: \"radio3\" },\r\n\t];\r\n\r\n\tconst onSubmit = (data: FormData) => {\r\n\t\tconsole.log(\"React Hook Form Data:\", data);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Paper sx={{ p: 3, maxWidth: 1200, mx: \"auto\" }}>\r\n\t\t\t<Typography\r\n\t\t\t\tvariant=\"h4\"\r\n\t\t\t\tgutterBottom\r\n\t\t\t>\r\n\t\t\t\tReact Hook Form (HookFormFields)\r\n\t\t\t</Typography>\r\n\t\t\t<Typography\r\n\t\t\t\tvariant=\"body2\"\r\n\t\t\t\tcolor=\"text.secondary\"\r\n\t\t\t\tgutterBottom\r\n\t\t\t>\r\n\t\t\t\tUsing HookFormFields with react-hook-form\r\n\t\t\t</Typography>\r\n\t\t\t<Divider sx={{ my: 2 }} />\r\n\r\n\t\t\t<form onSubmit={handleSubmit(onSubmit)}>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr\", md: \"repeat(3, 1fr)\" },\r\n\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n\t\t\t\t\t\t{/* Text Inputs */}\r\n\t\t\t\t\t\t<FormInputTextField\r\n\t\t\t\t\t\t\tname=\"text\"\r\n\t\t\t\t\t\t\tlabel=\"Text Field\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<FormInputPasswordField\r\n\t\t\t\t\t\t\tname=\"password\"\r\n\t\t\t\t\t\t\tlabel=\"Password\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<FormInputTextArea\r\n\t\t\t\t\t\tname=\"textarea\"\r\n\t\t\t\t\t\tlabel=\"Text Area\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\trows={4}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n\t\t\t\t\t\t<FormInputNumberField\r\n\t\t\t\t\t\t\tname=\"number\"\r\n\t\t\t\t\t\t\tlabel=\"Number\"\r\n\t\t\t\t\t\t\tpattern=\"zip-code\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t\t<FormInputTelField\r\n\t\t\t\t\t\t\tname=\"tel\"\r\n\t\t\t\t\t\t\tlabel=\"Telephone\"\r\n\t\t\t\t\t\t\tpattern=\"XX-XXX-XXXXXX-X-XX\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<FormInputSearchField\r\n\t\t\t\t\t\tname=\"search\"\r\n\t\t\t\t\t\tlabel=\"Search\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputOTPField\r\n\t\t\t\t\t\tname=\"otp\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tspacing={2}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{/* Dropdowns */}\r\n\t\t\t\t\t<FormInputSelect\r\n\t\t\t\t\t\tname=\"select\"\r\n\t\t\t\t\t\tlabel=\"Select\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\toptions={selectOptions}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputMultiSelect\r\n\t\t\t\t\t\tname=\"multiselect\"\r\n\t\t\t\t\t\tlabel=\"Multi Select\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\toptions={selectOptions}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputAutoComplete\r\n\t\t\t\t\t\tname=\"autocomplete\"\r\n\t\t\t\t\t\tlabel=\"Autocomplete\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\toptions={selectOptions}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputMultiAutoComplete\r\n\t\t\t\t\t\tname=\"multiautocomplete\"\r\n\t\t\t\t\t\tlabel=\"Multi Autocomplete\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\toptions={selectOptions}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputColorPicker\r\n\t\t\t\t\t\tname=\"color\"\r\n\t\t\t\t\t\tlabel=\"Color Picker\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputFileUpload\r\n\t\t\t\t\t\tname=\"file\"\r\n\t\t\t\t\t\tlabel=\"File Upload\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{/* Date/Time */}\r\n\t\t\t\t\t<FormInputDatePicker\r\n\t\t\t\t\t\tname=\"date\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<FormInputTimePicker\r\n\t\t\t\t\t\t\tname=\"time\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\tgridTemplateColumns: { md: \"1fr 1fr\" },\r\n\t\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\t\tmt: 2,\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<FormInputCheckBoxGroup\r\n\t\t\t\t\t\t\t\tname=\"checkboxgroup\"\r\n\t\t\t\t\t\t\t\tlabel=\"Select Options\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\toptions={checkboxOptions}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<FormInputRadioButtonGroup\r\n\t\t\t\t\t\t\t\tname=\"radiogroup\"\r\n\t\t\t\t\t\t\t\tlabel=\"Radio Group\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\toptions={radioOptions}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 2, mt: 2 }}>\r\n\t\t\t\t\t\t\t<FormInputCheckBox\r\n\t\t\t\t\t\t\t\tname=\"checkbox\"\r\n\t\t\t\t\t\t\t\tlabel=\"Checkbox\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<FormInputSingleRadio\r\n\t\t\t\t\t\t\t\tname=\"singleradio\"\r\n\t\t\t\t\t\t\t\tlabel=\"Radio\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<FormInputSwitch\r\n\t\t\t\t\t\t\t\tname=\"switch\"\r\n\t\t\t\t\t\t\t\tlabel=\"Switch\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ border: 1, borderColor: \"grey.300\", borderRadius: 1, p: 2 }}>\r\n\t\t\t\t\t\t<FormInputTimeClock\r\n\t\t\t\t\t\t\tname=\"timeclock\"\r\n\t\t\t\t\t\t\tlabel=\"Time Clock\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ border: 1, borderColor: \"grey.300\", borderRadius: 1, p: 2 }}>\r\n\t\t\t\t\t\t<FormInputCalendar\r\n\t\t\t\t\t\t\tname=\"calendar\"\r\n\t\t\t\t\t\t\tlabel=\"Calendar\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t{/* Box Inputs */}\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<FormInputSlider\r\n\t\t\t\t\t\t\tname=\"slider\"\r\n\t\t\t\t\t\t\tlabel=\"Slider\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tgridColumn: { xs: \"1\", md: \"1 / -1\" },\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\tjustifyContent: \"flex-end\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={() => reset()}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tReset\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tSubmit\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t</form>\r\n\t\t</Paper>\r\n\t);\r\n};\r\n\r\nexport default ReactHookForm;\r\n","// HookFormFields Imports\r\nimport {\r\n\tFormInputTextField,\r\n\tFormInputTextArea,\r\n\tFormInputPasswordField,\r\n\tFormInputNumberField,\r\n\tFormInputTelField,\r\n\tFormInputSearchField,\r\n\tFormInputOTPField,\r\n\tFormInputSelect,\r\n\tFormInputMultiSelect,\r\n\tFormInputAutoComplete,\r\n\tFormInputMultiAutoComplete,\r\n\tFormInputColorPicker,\r\n\tFormInputFileUpload,\r\n\tFormInputDatePicker,\r\n\tFormInputTimePicker,\r\n\tFormInputTimeClock,\r\n\tFormInputCalendar,\r\n\tFormInputCheckBox,\r\n\tFormInputCheckBoxGroup,\r\n\tFormInputSwitch,\r\n\tFormInputSlider,\r\n\tFormInputSingleRadio,\r\n\tFormInputRadioButtonGroup,\r\n} from \"./pkg/HookFormFields\";\r\n\r\nimport type {\r\n\tIFormInputFields,\r\n\tIFormInputFieldsWithOptions,\r\n\tIFormInputDateFields,\r\n\tIFormInputNumberFields,\r\n\tIFormInputTextAreaFields,\r\n\tIFormInputRadioFields,\r\n\tIFormInputCheckBoxGroupFields,\r\n\tOption,\r\n} from \"./pkg/HookFormFields\";\r\n\r\n// FormFields Imports\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\n\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\n\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\n\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\nimport NormalForm from \"./pkg/FormBuild/Form\";\r\nimport ReactHookForm from \"./pkg/FormBuild/HookForm\";\r\n\r\nexport { NormalForm as DemoForm, ReactHookForm as DemoHookForm };\r\n// Named Exports\r\nexport {\r\n\t// HookFormFields\r\n\tFormInputTextField,\r\n\tFormInputTextArea,\r\n\tFormInputPasswordField,\r\n\tFormInputNumberField,\r\n\tFormInputTelField,\r\n\tFormInputSearchField,\r\n\tFormInputOTPField,\r\n\tFormInputSelect,\r\n\tFormInputMultiSelect,\r\n\tFormInputAutoComplete,\r\n\tFormInputMultiAutoComplete,\r\n\tFormInputColorPicker,\r\n\tFormInputFileUpload,\r\n\tFormInputDatePicker,\r\n\tFormInputTimePicker,\r\n\tFormInputTimeClock,\r\n\tFormInputCalendar,\r\n\tFormInputCheckBox,\r\n\tFormInputCheckBoxGroup,\r\n\tFormInputSwitch,\r\n\tFormInputSlider,\r\n\tFormInputSingleRadio,\r\n\tFormInputRadioButtonGroup,\r\n\t// FormFields\r\n\tTextInputField,\r\n\tPasswordField,\r\n\tNumberField,\r\n\tTelInputField,\r\n\tSearchInputField,\r\n\tOTPField,\r\n\tSelectInputField,\r\n\tAutoCompleteField,\r\n\tColorPickerField,\r\n\tFileUploadField,\r\n\tDatePickerField,\r\n\tTimePickerField,\r\n\tTimeClockField,\r\n\tDateCalendarField,\r\n\tCheckBoxField,\r\n\tCheckBoxFieldGroup,\r\n\tRadioButtonField,\r\n\tRadioButtonFieldGroup,\r\n\tSwitchField,\r\n\tSliderField,\r\n};\r\n\r\n// Type Exports\r\nexport type {\r\n\tIFormInputFields,\r\n\tIFormInputFieldsWithOptions,\r\n\tIFormInputDateFields,\r\n\tIFormInputNumberFields,\r\n\tIFormInputTextAreaFields,\r\n\tIFormInputRadioFields,\r\n\tIFormInputCheckBoxGroupFields,\r\n\tOption,\r\n};\r\n\r\n// Default Export\r\nconst FormFields = {\r\n\t// HookFormFields\r\n\tFormInputTextField,\r\n\tFormInputTextArea,\r\n\tFormInputPasswordField,\r\n\tFormInputNumberField,\r\n\tFormInputTelField,\r\n\tFormInputSearchField,\r\n\tFormInputOTPField,\r\n\tFormInputSelect,\r\n\tFormInputMultiSelect,\r\n\tFormInputAutoComplete,\r\n\tFormInputMultiAutoComplete,\r\n\tFormInputColorPicker,\r\n\tFormInputFileUpload,\r\n\tFormInputDatePicker,\r\n\tFormInputTimePicker,\r\n\tFormInputTimeClock,\r\n\tFormInputCalendar,\r\n\tFormInputCheckBox,\r\n\tFormInputCheckBoxGroup,\r\n\tFormInputSwitch,\r\n\tFormInputSlider,\r\n\tFormInputSingleRadio,\r\n\tFormInputRadioButtonGroup,\r\n\t// FormFields\r\n\tTextInputField,\r\n\tPasswordField,\r\n\tNumberField,\r\n\tTelInputField,\r\n\tSearchInputField,\r\n\tOTPField,\r\n\tSelectInputField,\r\n\tAutoCompleteField,\r\n\tColorPickerField,\r\n\tFileUploadField,\r\n\tDatePickerField,\r\n\tTimePickerField,\r\n\tTimeClockField,\r\n\tDateCalendarField,\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"],"mappings":"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,EAEAF,GAACuB,GAAA,CACA,KAAK,MACL,QAASnB,EACT,QAAS,EACT,KAAMF,GACP,EAGAF,GAACwB,GAAA,CACA,KAAK,SACL,MAAM,SACN,QAASpB,EACT,QAASK,EACT,KAAMP,GACP,EAEAF,GAACyB,GAAA,CACA,KAAK,cACL,MAAM,eACN,QAASrB,EACT,QAASK,EACT,KAAMP,GACP,EAEAF,GAAC0B,GAAA,CACA,KAAK,eACL,MAAM,eACN,QAAStB,EACT,QAASK,EACT,KAAMP,GACP,EAEAF,GAAC2B,GAAA,CACA,KAAK,oBACL,MAAM,qBACN,QAASvB,EACT,QAASK,EACT,KAAMP,GACP,EAEAF,GAAC4B,GAAA,CACA,KAAK,QACL,MAAM,eACN,QAASxB,EACT,KAAMF,GACP,EAEAF,GAAC6B,GAAA,CACA,KAAK,OACL,MAAM,cACN,QAASzB,EACT,KAAMF,GACP,EAGAF,GAAC8B,GAAA,CACA,KAAK,OACL,QAAS1B,EACT,KAAMF,GACP,EAEAD,GAACe,GAAA,CACA,UAAAhB,GAAC+B,GAAA,CACA,KAAK,OACL,QAAS3B,EACT,KAAMF,GACP,EACAD,GAACe,GAAA,CACA,GAAI,CACH,QAAS,OACT,oBAAqB,CAAE,GAAI,SAAU,EACrC,IAAK,EACL,GAAI,CACL,EAEA,UAAAhB,GAACgC,GAAA,CACA,KAAK,gBACL,MAAM,iBACN,QAAS5B,EACT,QAASM,EACT,KAAMR,GACP,EACAF,GAACiC,GAAA,CACA,KAAK,aACL,MAAM,cACN,QAAS7B,EACT,QAASO,EACT,KAAMT,GACP,GACD,EACAD,GAACe,GAAA,CAAI,GAAI,CAAE,QAAS,OAAQ,IAAK,EAAG,GAAI,CAAE,EACzC,UAAAhB,GAACkC,GAAA,CACA,KAAK,WACL,MAAM,WACN,QAAS9B,EACT,KAAMF,GACP,EACAF,GAACmC,GAAA,CACA,KAAK,cACL,MAAM,QACN,QAAS/B,EACT,KAAMF,GACP,EACAF,GAACoC,GAAA,CACA,KAAK,SACL,MAAM,SACN,QAAShC,EACT,KAAMF,GACP,GACD,GACD,EACAF,GAACgB,GAAA,CAAI,GAAI,CAAE,OAAQ,EAAG,YAAa,WAAY,aAAc,EAAG,EAAG,CAAE,EACpE,SAAAhB,GAACqC,GAAA,CACA,KAAK,YACL,MAAM,aACN,QAASjC,EACT,KAAMF,GACP,EACD,EACAF,GAACgB,GAAA,CAAI,GAAI,CAAE,OAAQ,EAAG,YAAa,WAAY,aAAc,EAAG,EAAG,CAAE,EACpE,SAAAhB,GAACsC,GAAA,CACA,KAAK,WACL,MAAM,WACN,QAASlC,EACT,KAAMF,GACP,EACD,EAEAF,GAACgB,GAAA,CACA,SAAAhB,GAACuC,GAAA,CACA,KAAK,SACL,MAAM,SACN,QAASnC,EACT,KAAMF,GACP,EACD,EACAD,GAACe,GAAA,CACA,GAAI,CACH,WAAY,CAAE,GAAI,IAAK,GAAI,QAAS,EACpC,QAAS,OACT,IAAK,EACL,eAAgB,UACjB,EAEA,UAAAhB,GAACwC,GAAA,CACA,QAAQ,WACR,QAAS,IAAMjC,EAAM,EACrB,iBAED,EACAP,GAACwC,GAAA,CACA,KAAK,SACL,QAAQ,YACR,kBAED,GACD,GACD,EACD,GACD,CAEF,EAEOC,GAAQtC,GC9Qf,IAAMuC,GAAa,CAElB,mBAAAC,GACA,kBAAAC,GACA,uBAAAC,GACA,qBAAAC,GACA,kBAAAC,GACA,qBAAAC,GACA,kBAAAC,GACA,gBAAAC,GACA,qBAAAC,GACA,sBAAAC,GACA,2BAAAC,GACA,qBAAAC,GACA,oBAAAC,GACA,oBAAAC,GACA,oBAAAC,GACA,mBAAAC,GACA,kBAAAC,GACA,kBAAAC,GACA,uBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,qBAAAC,GACA,0BAAAC,GAEA,eAAAC,GACA,cAAAC,GACA,YAAAC,GACA,cAAAC,GACA,iBAAAC,GACA,SAAAC,GACA,iBAAAC,GACA,kBAAAC,GACA,iBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,eAAAC,GACA,kBAAAC,GACA,cAAAC,GACA,mBAAAC,GACA,iBAAAC,GACA,sBAAAC,GACA,YAAAC,GACA,YAAAC,EACD,EAEOC,GAAQ5C","names":["memo","Controller","FormControl","InputAdornment","TextField","forwardRef","memo","useCallback","useMemo","jsx","TextInputField","memo","forwardRef","_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","useCallback","event","inputProps","useMemo","__spreadValues","startAdornmentElement","InputAdornment","endAdornmentElement","finalSlotProps","__spreadProps","finalInputStyles","displayHelperText","FormControl","TextField","TextInputField_default","jsx","FormInputTextField","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","TextInputField_default","__spreadProps","__spreadValues","e","FormInputTextField_default","memo","Controller","jsx","FormInputTextArea","memo","_a","_b","name","label","control","rows","minRows","maxRows","resize","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","TextInputField_default","__spreadProps","__spreadValues","e","FormInputTextArea_default","memo","Controller","Visibility","VisibilityOff","FormControl","FormHelperText","IconButton","InputAdornment","TextField","forwardRef","useState","memo","useCallback","useMemo","jsx","jsxs","calculatePasswordStrength","password","strength","getPasswordStrengthColor","PasswordField","memo","forwardRef","_a","ref","_b","name","label","value","onChange","onFocus","onBlur","onVisibilityToggle","error","helperText","disabled","placeholder","variant","size","color","fullWidth","required","showPasswordStrength","minLength","maxLength","defaultShowPassword","visibilityIcon","Visibility","visibilityOffIcon","VisibilityOff","iconButtonProps","getPasswordStrength","inputStyles","formControlStyles","slotProps","slots","textFieldProps","__objRest","showPassword","setShowPassword","useState","togglePasswordVisibility","useCallback","prev","newVisibility","passwordStrength","useMemo","getStrengthIndicator","strengthColor","strengthText","handleChange","event","newValue","endAdornmentElement","InputAdornment","IconButton","__spreadProps","__spreadValues","e","finalSlotProps","displayHelperText","FormControl","TextField","FormHelperText","PasswordField_default","jsx","FormInputPasswordField","memo","_a","_b","name","label","control","size","defaultValue","onChange","props","__objRest","Controller","field","error","sizeProp","restProps","PasswordField_default","__spreadProps","__spreadValues","e","FormInputPasswordField_default","memo","Controller","FormControl","InputAdornment","TextField","forwardRef","useState","useEffect","useCallback","memo","useMemo","jsx","extractDigits","value","formatByPattern","digits","pattern","formatted","digitIndex","i","generatePlaceholderFromPattern","formatPhoneNumber","numbers","formatCreditCard","_a","formatCurrency","allowDecimals","parts","formatSSN","formatZipCode","formatPercentage","NumberField","memo","forwardRef","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","useState","isPatternString","activePatternString","activePatternType","formatValue","useCallback","inputValue","useEffect","prev","isValidInput","key","maxDigits","testValue","handleChange","event","formattedValue","digitsOnly","syntheticEvent","__spreadProps","__spreadValues","handlePaste","pastedText","limitedDigits","handleKeyDown","input","currentValue","inputProps","useMemo","startAdornmentElement","InputAdornment","endAdornmentElement","finalSlotProps","inputType","displayPlaceholder","displayHelperText","FormControl","TextField","NumberField_default","jsx","FormInputNumberField","memo","_a","_b","name","label","control","pattern","min","max","step","allowDecimals","decimalPlaces","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","NumberField_default","__spreadProps","__spreadValues","e","FormInputNumberField_default","memo","Controller","FormControl","InputAdornment","TextField","forwardRef","useState","useEffect","useRef","memo","useCallback","useMemo","jsx","extractDigits","value","formatByPattern","digits","pattern","formatted","digitIndex","i","generatePlaceholder","TeliField","memo","forwardRef","_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","useState","inputRef","useRef","calculatedMaxLength","useEffect","prev","cursorPosition","handleChange","useCallback","event","inputValue","limitedDigits","formattedValue","syntheticEvent","__spreadProps","__spreadValues","handlePaste","pastedText","handleKeyDown","key","isNumber","isAllowedKey","inputProps","useMemo","finalStartAdornment","InputAdornment","endAdornmentElement","finalSlotProps","displayPlaceholder","displayHelperText","FormControl","TextField","TelInputField_default","jsx","FormInputTelField","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","TelInputField_default","__spreadProps","__spreadValues","e","FormInputTelField_default","memo","Controller","Close","Search","FormControl","IconButton","InputAdornment","TextField","forwardRef","useEffect","useRef","memo","useCallback","useMemo","jsx","jsxs","SearchField","memo","forwardRef","_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","useRef","throttleTimerRef","lastThrottleCallRef","useEffect","debouncedSearch","useCallback","searchVal","throttledSearch","now","timeSinceLastCall","handleChange","event","newValue","handleClear","handleSearch","handleKeyDown","endAdornment","useMemo","InputAdornment","IconButton","__spreadProps","__spreadValues","Close","Search","displayHelperText","FormControl","TextField","SearchInputField_default","jsx","FormInputSearchField","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","SearchInputField_default","__spreadProps","__spreadValues","e","FormInputSearchField_default","memo","Controller","FormControl","FormHelperText","TextField","Box","forwardRef","useState","useRef","useEffect","jsx","jsxs","OTPField","forwardRef","_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","useState","inputRefs","useRef","lastSentValueRef","isInternalUpdateRef","otpValuesRef","inputSessionActiveRef","inputSessionTimeoutRef","useEffect","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","FormControl","Box","__spreadValues","otpValue","TextField","el","e","__spreadProps","FormHelperText","OTPField_default","jsx","FormInputOTPField","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","OTPField_default","__spreadProps","__spreadValues","value","FormInputOTPField_default","memo","useMemo","Controller","FormControl","FormHelperText","InputLabel","MenuItem","Select","forwardRef","jsx","jsxs","SelectInputField","forwardRef","_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","MenuItem","handleChange","event","child","labelId","selectId","FormControl","InputLabel","Select","__spreadProps","__spreadValues","FormHelperText","SelectInputField_default","jsx","FormInputSelect","memo","_a","_b","name","label","control","options","defaultValue","onChange","props","__objRest","memoizedOptions","useMemo","Controller","field","error","size","restProps","SelectInputField_default","__spreadProps","__spreadValues","e","FormInputSelect_default","memo","useMemo","Controller","jsx","FormInputMultiSelect","memo","_a","_b","name","label","control","options","defaultValue","onChange","props","__objRest","memoizedOptions","useMemo","Controller","field","error","size","restProps","fieldValue","SelectInputField_default","__spreadProps","__spreadValues","e","FormInputMultiSelect_default","memo","Controller","Autocomplete","FormControl","FormHelperText","TextField","forwardRef","memo","useCallback","jsx","jsxs","AutoCompleteField","memo","forwardRef","_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","defaultIsOptionEqualToValue","useCallback","option","handleChange","event","newValue","reason","FormControl","Autocomplete","__spreadValues","params","TextField","__spreadProps","FormHelperText","AutoCompleteField_default","jsx","FormInputAutoComplete","memo","_a","_b","name","label","control","options","disabled","placeholder","defaultValue","onChange","props","__objRest","Controller","field","error","value","onBlur","size","restProps","AutoCompleteField_default","__spreadProps","__spreadValues","_","newValue","FormInputAutoComplete_default","memo","useMemo","Controller","jsx","FormInputMultiAutoComplete","memo","_a","_b","name","label","control","options","disabled","placeholder","defaultValue","onChange","props","__objRest","memoizedOptions","useMemo","Controller","field","error","value","onBlur","size","restProps","fieldValue","AutoCompleteField_default","__spreadProps","__spreadValues","_","newValue","FormInputMultiAutoComplete_default","memo","Controller","Box","FormControl","InputAdornment","TextField","forwardRef","memo","useCallback","useEffect","useMemo","useRef","useState","jsx","jsxs","isValidHex","color","normalizeHex","hex","char","ColorPickerField","memo","forwardRef","_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","useState","colorInputRef","useRef","popoverAnchorRef","useEffect","normalizedValue","handleChange","useCallback","event","newValue","handleColorInputChange","handlePreviewClick","handleKeyDown","previewSwatch","useMemo","jsx","InputAdornment","Box","__spreadValues","finalSlotProps","__spreadProps","displayHelperText","jsxs","FormControl","TextField","ColorPickerField_default","jsx","FormInputColorPicker","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","ColorPickerField_default","__spreadProps","__spreadValues","color","FormInputColorPicker_default","memo","useRef","Controller","Clear","CloudUploadIcon","FormControl","FormHelperText","IconButton","InputAdornment","TextField","forwardRef","useRef","useState","jsx","jsxs","FileUploadField","forwardRef","_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","useRef","isDragging","setIsDragging","useState","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","FormControl","TextField","__spreadProps","__spreadValues","InputAdornment","IconButton","Clear","FormHelperText","FileUploadField_default","jsx","FormInputFileUpload","memo","_a","_b","name","label","control","size","defaultValue","onChange","props","__objRest","fileRef","useRef","Controller","field","error","FileUploadField_default","__spreadProps","__spreadValues","files","FormInputFileUpload_default","memo","Controller","ClearIcon","Box","FormControl","FormHelperText","FormLabel","IconButton","TextField","DatePicker","LocalizationProvider","AdapterDateFns","React","forwardRef","useRef","jsx","jsxs","DatePickerField","forwardRef","_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","title","dateAdapter","AdapterDateFns","reduceAnimations","autoFocus","datePickerProps","__objRest","inputRef","useRef","handleChange","newValue","handleClear","defaultPlaceholder","mergedSlotProps","__spreadProps","__spreadValues","FormControl","FormLabel","Box","LocalizationProvider","DatePicker","ActionableTextField","FormHelperText","props","clearable","onClear","showClear","InputProps","other","TextField","React","IconButton","ClearIcon","DatePickerField_default","jsx","FormInputDatePicker","memo","_a","_b","name","label","control","size","readOnly","shouldDisableDate","disabled","placeholder","defaultValue","onChange","props","__objRest","Controller","field","error","views","ampm","ampmInClock","timezone","restProps","DatePickerField_default","__spreadProps","__spreadValues","newValue","FormInputDatePicker_default","memo","Controller","ClearIcon","Box","FormControl","FormHelperText","FormLabel","IconButton","TextField","LocalizationProvider","TimePicker","AdapterDateFns","React","forwardRef","useRef","jsx","jsxs","TimePickerField","forwardRef","_a","ref","_b","name","label","title","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","AdapterDateFns","autoFocus","timePickerProps","__objRest","inputRef","useRef","handleChange","newValue","handleClear","defaultPlaceholder","mergedSlotProps","__spreadProps","__spreadValues","FormControl","FormLabel","Box","LocalizationProvider","TimePicker","ActionableTextField","FormHelperText","props","clearable","onClear","showClear","InputProps","other","TextField","React","IconButton","ClearIcon","TimePickerField_default","jsx","FormInputTimePicker","memo","_a","_b","name","label","control","ampm","timezone","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","TimePickerField_default","__spreadProps","__spreadValues","newValue","FormInputTimePicker_default","Box","FormLabel","memo","useMemo","Controller","Box","Button","FormControl","FormHelperText","Stack","LocalizationProvider","TimeClock","AdapterDateFns","forwardRef","useState","jsx","jsxs","TimeClockField","forwardRef","_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","AdapterDateFns","autoFocus","timeClockProps","__objRest","internalView","setInternalView","useState","view","setView","handleChange","newValue","handleViewChange","newView","FormControl","Box","__spreadValues","Stack","v","Button","LocalizationProvider","TimeClock","__spreadProps","FormHelperText","TimeClockField_default","jsx","jsxs","FormInputTimeClock","memo","_a","_b","name","label","control","readOnly","disabled","ampm","views","ampmInClock","disablePast","defaultValue","onChange","props","__objRest","ampmValue","useMemo","Box","t","FormLabel","Controller","field","error","TimeClockField_default","__spreadProps","__spreadValues","newValue","FormInputTimeClock_default","Box","FormLabel","memo","Controller","Box","FormControl","FormHelperText","DateCalendar","LocalizationProvider","AdapterDateFns","forwardRef","jsx","jsxs","DateCalendarField","forwardRef","_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","AdapterDateFns","showDaysOutsideCurrentMonth","disablePast","disableFuture","referenceDate","view","dateCalendarProps","__objRest","handleChange","newValue","FormControl","Box","__spreadValues","LocalizationProvider","DateCalendar","__spreadProps","FormHelperText","DateCalendarField_default","jsx","jsxs","FormInputCalendar","memo","_a","_b","name","label","control","readOnly","disabled","defaultValue","onChange","props","__objRest","Box","t","FormLabel","Controller","field","error","views","restProps","DateCalendarField_default","__spreadProps","__spreadValues","newValue","FormInputCalender_default","memo","Controller","Checkbox","FormControl","FormControlLabel","FormHelperText","forwardRef","jsx","jsxs","CheckboxField","forwardRef","_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","FormControl","FormControlLabel","Checkbox","__spreadProps","__spreadValues","FormHelperText","CheckBoxField_default","jsx","FormInputCheckBox","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","CheckBoxField_default","__spreadProps","__spreadValues","checked","FormInputCheckBox_default","memo","useMemo","Controller","FormControl","FormHelperText","FormLabel","Checkbox","FormControlLabel","Box","forwardRef","jsx","jsxs","CheckboxFieldGroup","forwardRef","_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","FormControlLabel","__spreadValues","Checkbox","FormControl","__spreadProps","FormLabel","Box","changeHandler","FormHelperText","CheckBoxFieldGroup_default","jsx","FormInputCheckBoxGroup","memo","_a","_b","name","label","control","options","defaultValue","onChange","row","color","labelPlacement","props","__objRest","checkboxOptions","useMemo","option","Controller","field","error","size","restProps","fieldValue","CheckBoxFieldGroup_default","__spreadProps","__spreadValues","value","FormInputCheckBoxGroup_default","memo","Controller","FormControl","FormControlLabel","FormHelperText","Switch","forwardRef","jsx","jsxs","SwitchField","forwardRef","_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","Switch","__spreadProps","__spreadValues","FormControl","FormControlLabel","FormHelperText","SwitchField_default","jsx","FormInputSwitch","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","SwitchField_default","__spreadProps","__spreadValues","checked","FormInputSwitch_default","memo","Controller","FormControl","FormHelperText","FormLabel","Slider","forwardRef","jsx","jsxs","SliderField","forwardRef","_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","FormControl","__spreadValues","FormLabel","__spreadProps","Slider","FormHelperText","SliderField_default","jsx","FormInputSlider","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","SliderField_default","__spreadProps","__spreadValues","value","FormInputSlider_default","memo","Controller","FormControl","FormControlLabel","FormHelperText","Radio","forwardRef","jsx","jsxs","RadioButtonField","forwardRef","_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","FormControl","FormControlLabel","__spreadValues","Radio","__spreadProps","FormHelperText","RadioButtonField_default","jsx","FormInputRadioButton","memo","_a","_b","name","label","control","checked","defaultValue","onChange","color","labelPlacement","props","__objRest","Controller","field","error","size","restProps","RadioButtonField_default","__spreadProps","__spreadValues","checkedValue","FormInputRadioButton_default","memo","useMemo","Controller","FormControl","FormControlLabel","FormHelperText","FormLabel","Radio","RadioGroup","forwardRef","jsx","jsxs","RadioButtonFieldGroup","forwardRef","_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","FormControlLabel","__spreadProps","__spreadValues","Radio","FormControl","FormLabel","RadioGroup","index","FormHelperText","RadioButtonFieldGroup_default","jsx","FormInputRadioButtonGroup","memo","_a","_b","name","label","control","options","defaultValue","onChange","props","__objRest","memoizedOptions","useMemo","Controller","field","error","size","restProps","RadioButtonFieldGroup_default","__spreadProps","__spreadValues","value","FormInputRadioButtonGroup_default","useState","Box","Paper","Typography","Button","Divider","jsx","jsxs","NormalForm","formData","setFormData","useState","errors","setErrors","selectOptions","checkboxOptions","radioOptions","handleChange","field","value","prev","__spreadProps","__spreadValues","newErrors","Paper","Typography","Divider","e","Box","TextInputField_default","PasswordField_default","NumberField_default","TelInputField_default","SearchInputField_default","OTPField_default","SelectInputField_default","AutoCompleteField_default","_","newValue","ColorPickerField_default","FileUploadField_default","DatePickerField_default","TimePickerField_default","CheckBoxFieldGroup_default","RadioButtonFieldGroup_default","CheckBoxField_default","RadioButtonField_default","SwitchField_default","TimeClockField_default","DateCalendarField_default","SliderField_default","Button","Form_default","Box","Button","Divider","Paper","Typography","useForm","jsx","jsxs","size","ReactHookForm","control","handleSubmit","errors","reset","useForm","selectOptions","checkboxOptions","radioOptions","Paper","Typography","Divider","data","Box","FormInputTextField_default","FormInputPasswordField_default","FormInputTextArea_default","FormInputNumberField_default","FormInputTelField_default","FormInputSearchField_default","FormInputOTPField_default","FormInputSelect_default","FormInputMultiSelect_default","FormInputAutoComplete_default","FormInputMultiAutoComplete_default","FormInputColorPicker_default","FormInputFileUpload_default","FormInputDatePicker_default","FormInputTimePicker_default","FormInputCheckBoxGroup_default","FormInputRadioButtonGroup_default","FormInputCheckBox_default","FormInputRadioButton_default","FormInputSwitch_default","FormInputTimeClock_default","FormInputCalender_default","FormInputSlider_default","Button","HookForm_default","FormFields","FormInputTextField_default","FormInputTextArea_default","FormInputPasswordField_default","FormInputNumberField_default","FormInputTelField_default","FormInputSearchField_default","FormInputOTPField_default","FormInputSelect_default","FormInputMultiSelect_default","FormInputAutoComplete_default","FormInputMultiAutoComplete_default","FormInputColorPicker_default","FormInputFileUpload_default","FormInputDatePicker_default","FormInputTimePicker_default","FormInputTimeClock_default","FormInputCalender_default","FormInputCheckBox_default","FormInputCheckBoxGroup_default","FormInputSwitch_default","FormInputSlider_default","FormInputRadioButton_default","FormInputRadioButtonGroup_default","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/pkg/HookFormFields/FormInputTextField.tsx","../lib/pkg/FormFields/TextFields/TextInputField.tsx","../lib/pkg/HookFormFields/FormInputTextArea.tsx","../lib/pkg/HookFormFields/FormInputPasswordField.tsx","../lib/pkg/FormFields/TextFields/PasswordField.tsx","../lib/pkg/HookFormFields/FormInputNumberField.tsx","../lib/pkg/FormFields/TextFields/NumberField.tsx","../lib/pkg/HookFormFields/FormInputTelField.tsx","../lib/pkg/FormFields/TextFields/TelInputField.tsx","../lib/pkg/HookFormFields/FormInputSearchField.tsx","../lib/pkg/FormFields/TextFields/SearchInputField.tsx","../lib/pkg/HookFormFields/FormInputOTPField.tsx","../lib/pkg/FormFields/TextFields/OTPField.tsx","../lib/pkg/HookFormFields/FormInputSelect.tsx","../lib/pkg/FormFields/DropdownFields/SelectInputField.tsx","../lib/pkg/HookFormFields/FormInputMultiSelect.tsx","../lib/pkg/HookFormFields/FormInputAutoComplete.tsx","../lib/pkg/FormFields/DropdownFields/AutoCompleteField.tsx","../lib/pkg/HookFormFields/FormInputMultiAutoComplete.tsx","../lib/pkg/HookFormFields/FormInputColorPicker.tsx","../lib/pkg/FormFields/DropdownFields/ColorPickerField.tsx","../lib/pkg/HookFormFields/FormInputFileUpload.tsx","../lib/pkg/FormFields/DropdownFields/FileUploadField.tsx","../lib/pkg/HookFormFields/FormInputDatePicker.tsx","../lib/pkg/FormFields/DateFields/DatePickerField.tsx","../lib/pkg/HookFormFields/FormInputTimePicker.tsx","../lib/pkg/FormFields/DateFields/TimePickerField.tsx","../lib/pkg/HookFormFields/FormInputTimeClock.tsx","../lib/pkg/FormFields/DateFields/TimeClockField.tsx","../lib/pkg/HookFormFields/FormInputCalender.tsx","../lib/pkg/FormFields/DateFields/DateCalendarField.tsx","../lib/pkg/HookFormFields/FormInputCheckBox.tsx","../lib/pkg/FormFields/BoxFields/CheckBoxField.tsx","../lib/pkg/HookFormFields/FormInputCheckBoxGroup.tsx","../lib/pkg/FormFields/BoxFields/CheckBoxFieldGroup.tsx","../lib/pkg/HookFormFields/FormInputSwitch.tsx","../lib/pkg/FormFields/BoxFields/SwitchField.tsx","../lib/pkg/HookFormFields/FormInputSlider.tsx","../lib/pkg/FormFields/BoxFields/SliderField.tsx","../lib/pkg/HookFormFields/FormInputRadioButton.tsx","../lib/pkg/FormFields/BoxFields/RadioButtonField.tsx","../lib/pkg/HookFormFields/FormInputRadioButtonGroup.tsx","../lib/pkg/FormFields/BoxFields/RadioButtonFieldGroup.tsx","../lib/pkg/FormBuild/Form.tsx","../lib/pkg/FormBuild/HookForm.tsx","../lib/index.ts"],"sourcesContent":["import { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTextField = memo(\r\n\t({ name, label, control, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 { 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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport type { IFormInputTextAreaFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTextArea = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport PasswordField from \"../FormFields/TextFields/PasswordField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputPasswordField = memo(\r\n\t({ name, label, control, size, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 { 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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport NumberField from \"../FormFields/TextFields/NumberField\";\r\nimport type { IFormInputNumberFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputNumberField = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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 { 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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TelInputField from \"../FormFields/TextFields/TelInputField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTelField = memo(\r\n\t({ name, label, control, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 {\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SearchInputField from \"../FormFields/TextFields/SearchInputField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputSearchField = memo(\r\n\t({ name, label, control, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 { 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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport OTPField from \"../FormFields/TextFields/OTPField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputOTPField = memo(\r\n\t({ name, label, control, defaultValue = \"\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputSelect = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => {\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={error?.message}\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 {\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputMultiSelect = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => {\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={error?.message}\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputAutoComplete = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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\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={options}\r\n\t\t\t\t\t\t\tvalue={value ?? null}\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={error?.message}\r\n\t\t\t\t\t\t\t{...restProps}\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/>\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 {\r\n Autocomplete,\r\n type AutocompleteChangeReason,\r\n type AutocompleteCloseReason,\r\n type AutocompleteInputChangeReason,\r\n type AutocompleteProps,\r\n FormControl,\r\n FormHelperText,\r\n TextField,\r\n type TextFieldProps,\r\n} from \"@mui/material\";\r\nimport type { FilterOptionsState } from \"@mui/material/useAutocomplete\";\r\nimport React, { type ForwardedRef, forwardRef, memo, type SyntheticEvent, useCallback } from \"react\";\r\n\r\nexport type AutoCompleteOption = {\r\n name: string;\r\n value: string | number;\r\n [key: string]: unknown;\r\n};\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 T extends AutoCompleteOption = AutoCompleteOption,\r\n Multiple extends boolean = false,\r\n DisableClearable extends boolean = false,\r\n FreeSolo extends boolean = false,\r\n> extends Omit<\r\n AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>,\r\n \"renderInput\" | \"options\" | \"value\" | \"onChange\" | \"getOptionLabel\" | \"isOptionEqualToValue\" | \"renderOption\"\r\n > {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the input field */\r\n label?: string;\r\n /** Current selected value */\r\n value: Multiple extends true ? T[] : T | null;\r\n /** Options array to display in dropdown */\r\n options: T[];\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below input */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** TextField variant */\r\n variant?: TextFieldProps[\"variant\"];\r\n /** TextField size */\r\n size?: TextFieldProps[\"size\"];\r\n /** TextField color */\r\n color?: TextFieldProps[\"color\"];\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Custom function to get option label (defaults to option.name) */\r\n getOptionLabel?: (option: T | string) => string;\r\n /** Custom function to check option equality (defaults to comparing option.name) */\r\n isOptionEqualToValue?: (option: T, value: T) => boolean;\r\n /** Custom render function for options */\r\n renderOption?: (\r\n props: React.HTMLAttributes<HTMLLIElement>,\r\n option: T,\r\n state?: { selected: boolean; inputValue: string },\r\n ) => React.ReactNode;\r\n /** Callback fired when the value changes */\r\n onChange?: (\r\n event: SyntheticEvent,\r\n newValue: Multiple extends true ? T[] : T | null,\r\n reason?: AutocompleteChangeReason,\r\n ) => void;\r\n /** Callback fired when input value changes */\r\n onInputChange?: (event: SyntheticEvent, newInputValue: string, reason: AutocompleteInputChangeReason) => void;\r\n /** Callback fired when popup opens */\r\n onOpen?: (event: SyntheticEvent) => void;\r\n /** Callback fired when popup closes */\r\n onClose?: (event: SyntheticEvent, reason: AutocompleteCloseReason) => void;\r\n /** Custom icon for popup indicator */\r\n popupIcon?: React.ReactNode;\r\n /** Custom styles for the TextField */\r\n inputStyles?: TextFieldProps[\"sx\"];\r\n /** Custom styles for the Autocomplete */\r\n autocompleteStyles?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"sx\"];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n /** Whether to show loading state */\r\n loading?: boolean;\r\n /** Text to show when loading */\r\n loadingText?: React.ReactNode;\r\n /** Text to show when no options available */\r\n noOptionsText?: React.ReactNode;\r\n /** Text to show when options are being filtered */\r\n filterText?: string;\r\n /** Custom filter options function */\r\n filterOptions?: (options: T[], state: FilterOptionsState<T>) => T[];\r\n /** Whether to highlight the first option */\r\n autoHighlight?: boolean;\r\n /** Whether to select the first option on highlight */\r\n autoSelect?: boolean;\r\n /** Whether to disable portal rendering */\r\n disablePortal?: boolean;\r\n /** Whether to disable list wrapping */\r\n disableListWrap?: boolean;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"slotProps\"];\r\n /** Custom slots for MUI v7 */\r\n slots?: AutocompleteProps<T, Multiple, DisableClearable, FreeSolo>[\"slots\"];\r\n}\r\n\r\nconst AutoCompleteField = memo(\r\n forwardRef<HTMLDivElement, IAutoCompleteInputProps<AutoCompleteOption, boolean, boolean, boolean>>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n onChange,\r\n onInputChange,\r\n onOpen,\r\n onClose,\r\n options,\r\n error,\r\n helperText,\r\n disabled = false,\r\n placeholder,\r\n variant = \"outlined\",\r\n size,\r\n color,\r\n fullWidth = true,\r\n required,\r\n getOptionLabel,\r\n isOptionEqualToValue,\r\n renderOption,\r\n popupIcon,\r\n inputStyles,\r\n autocompleteStyles,\r\n formControlStyles,\r\n loading = false,\r\n loadingText = \"Loading...\",\r\n noOptionsText = \"No options\",\r\n filterOptions,\r\n autoHighlight = true,\r\n autoSelect = false,\r\n disablePortal = false,\r\n disableListWrap = false,\r\n slotProps,\r\n slots,\r\n ...autocompleteProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n // Default getOptionLabel function\r\n const defaultGetOptionLabel = useCallback((option: AutoCompleteOption | string): string => {\r\n if (typeof option === \"string\") return option;\r\n return option?.name ?? String(option?.value ?? \"\");\r\n }, []);\r\n\r\n // Default isOptionEqualToValue function\r\n const defaultIsOptionEqualToValue = useCallback(\r\n (option: AutoCompleteOption, value: AutoCompleteOption): boolean => {\r\n return option?.name === value?.name && option?.value === value?.value;\r\n },\r\n [],\r\n );\r\n\r\n // Handle onChange with proper typing\r\n const handleChange = useCallback(\r\n (event: SyntheticEvent, newValue: any, reason?: AutocompleteChangeReason) => {\r\n if (onChange) {\r\n onChange(event, newValue, reason);\r\n }\r\n },\r\n [onChange],\r\n );\r\n\r\n return (\r\n <FormControl fullWidth={fullWidth} error={!!error} sx={formControlStyles}>\r\n <Autocomplete<AutoCompleteOption, boolean, boolean, boolean>\r\n options={options}\r\n value={value as any}\r\n onChange={handleChange}\r\n onInputChange={onInputChange}\r\n onOpen={onOpen}\r\n onClose={onClose}\r\n getOptionLabel={getOptionLabel ? getOptionLabel : defaultGetOptionLabel}\r\n isOptionEqualToValue={isOptionEqualToValue ? isOptionEqualToValue : defaultIsOptionEqualToValue}\r\n disabled={disabled}\r\n loading={loading}\r\n loadingText={loadingText}\r\n noOptionsText={noOptionsText}\r\n filterOptions={filterOptions}\r\n autoHighlight={autoHighlight}\r\n autoSelect={autoSelect}\r\n disablePortal={disablePortal}\r\n disableListWrap={disableListWrap}\r\n popupIcon={popupIcon}\r\n slotProps={slotProps}\r\n slots={slots}\r\n sx={autocompleteStyles}\r\n ref={ref}\r\n {...autocompleteProps}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n name={name}\r\n label={label}\r\n variant={variant}\r\n size={size}\r\n color={color}\r\n placeholder={placeholder}\r\n required={required}\r\n error={!!error}\r\n disabled={disabled}\r\n slotProps={{\r\n input: {\r\n ...params.InputProps,\r\n inputProps: {\r\n ...params.inputProps,\r\n },\r\n },\r\n }}\r\n sx={inputStyles}\r\n helperText={helperText ?? \"\"}\r\n />\r\n )}\r\n />\r\n {error && !helperText && error.message && <FormHelperText>{error.message}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nAutoCompleteField.displayName = \"AutoCompleteField\";\r\n\r\nexport default AutoCompleteField;\r\n","import { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputMultiAutoComplete = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => {\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={error?.message}\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport ColorPickerField from \"../FormFields/DropdownFields/ColorPickerField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputColorPicker = memo(\r\n\t({ name, label, control, defaultValue = \"#000000\", onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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 { Box, FormControl, type FormControlProps, InputAdornment, TextField, type TextFieldProps } from '@mui/material';\r\nimport React, {\r\n type ChangeEvent,\r\n type FocusEvent,\r\n type ForwardedRef,\r\n forwardRef,\r\n memo,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\n/**\r\n * RGBA color object\r\n */\r\nexport interface RGBAColor extends RGBColor {\r\n a: number;\r\n}\r\n\r\n/**\r\n * HSL color object\r\n */\r\nexport interface HSLColor {\r\n h: number;\r\n s: number;\r\n l: number;\r\n}\r\n\r\n/**\r\n * HSL color object with alpha\r\n */\r\nexport interface HSLAColor extends HSLColor {\r\n a: number;\r\n}\r\n\r\n/**\r\n * Extended Color Picker Field Props\r\n */\r\nexport interface IColorPickerFieldProps\r\n extends Omit<\r\n TextFieldProps,\r\n 'value' | 'onChange' | 'name' | 'type' | 'error' | 'inputRef' | 'multiline' | 'variant' | 'size'\r\n > {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the color picker field */\r\n label?: string;\r\n /** Current color value (hex string or color object) */\r\n value: string;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below field */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** TextField variant */\r\n variant?: TextFieldProps['variant'];\r\n /** TextField size */\r\n size?: TextFieldProps['size'];\r\n /** TextField color */\r\n color?: TextFieldProps['color'];\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Color format (hex, rgb, rgba, hsl, hsla) */\r\n format?: ColorFormat;\r\n /** Whether to show color preview swatch */\r\n showPreview?: boolean;\r\n /** Whether to show native color input */\r\n showNativeInput?: boolean;\r\n /** Whether to show popover picker */\r\n showPopoverPicker?: boolean;\r\n /** Preset colors to display */\r\n presetColors?: string[];\r\n /** Whether to show preset colors */\r\n showPresetColors?: boolean;\r\n /** Callback fired when the color changes */\r\n onChange?: (value: string) => void;\r\n /** Callback fired when field receives focus */\r\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\r\n /** Callback fired when field loses focus */\r\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\r\n /** Callback fired on Enter key press */\r\n onEnterPress?: (value: string) => void;\r\n /** Custom styles for the color preview swatch */\r\n previewStyles?: React.CSSProperties;\r\n /** Custom styles for FormControl */\r\n formControlStyles?: FormControlProps['sx'];\r\n /** Custom styles for TextField */\r\n inputStyles?: TextFieldProps['sx'];\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: TextFieldProps['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: 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 const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\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 return '#' + [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 return /^#([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 let hex = color.replace('#', '');\r\n if (hex.length === 3) {\r\n hex = hex\r\n .split('')\r\n .map((char) => char + char)\r\n .join('');\r\n }\r\n return '#' + hex;\r\n};\r\n\r\nconst ColorPickerField = memo(\r\n forwardRef<HTMLDivElement, IColorPickerFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n onChange,\r\n onFocus,\r\n onBlur,\r\n onEnterPress,\r\n error,\r\n helperText,\r\n disabled = false,\r\n placeholder = '#000000',\r\n variant = 'outlined',\r\n size,\r\n color = 'primary',\r\n fullWidth = true,\r\n required,\r\n format = 'hex',\r\n showPreview = true,\r\n showNativeInput = true,\r\n showPopoverPicker = true,\r\n presetColors = ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF'],\r\n showPresetColors = false,\r\n previewStyles,\r\n formControlStyles,\r\n inputStyles,\r\n slotProps,\r\n slots,\r\n ...textFieldProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n const [internalValue, setInternalValue] = useState<string>(value || '');\r\n const colorInputRef = useRef<HTMLInputElement | null>(null);\r\n const popoverAnchorRef = useRef<HTMLDivElement | null>(null);\r\n\r\n // Update internal value when prop changes\r\n useEffect(() => {\r\n if (value !== undefined) {\r\n setInternalValue(value || '');\r\n }\r\n }, [value]);\r\n\r\n // Normalize hex value\r\n const normalizedValue = isValidHex(internalValue) ? normalizeHex(internalValue) : internalValue || '';\r\n\r\n // Handle input change\r\n const handleChange = useCallback(\r\n (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\r\n if (disabled) return;\r\n\r\n const newValue = (event.target as HTMLInputElement).value;\r\n setInternalValue(newValue);\r\n\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n },\r\n [onChange],\r\n );\r\n\r\n // Handle native color input change\r\n const handleColorInputChange = useCallback(\r\n (event: ChangeEvent<HTMLInputElement>) => {\r\n if (disabled) return;\r\n event.stopPropagation();\r\n\r\n const newValue = event.target.value;\r\n setInternalValue(newValue);\r\n\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n },\r\n [onChange],\r\n );\r\n\r\n // Handle preview swatch click - directly open native color picker\r\n const handlePreviewClick = useCallback(\r\n (event: React.MouseEvent<HTMLDivElement>) => {\r\n if (disabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Trigger the hidden native color input\r\n if (colorInputRef.current) {\r\n colorInputRef.current.click();\r\n }\r\n },\r\n [disabled, colorInputRef],\r\n );\r\n\r\n // Handle key down\r\n const handleKeyDown = useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === 'Enter' && onEnterPress) {\r\n onEnterPress(normalizedValue);\r\n }\r\n if (textFieldProps.onKeyDown) {\r\n textFieldProps.onKeyDown(event);\r\n }\r\n },\r\n [onEnterPress, normalizedValue, textFieldProps.onKeyDown],\r\n );\r\n\r\n // Memoize preview swatch\r\n const previewSwatch = useMemo(\r\n () => (\r\n <InputAdornment position=\"start\">\r\n <Box\r\n ref={popoverAnchorRef}\r\n onClick={!disabled ? handlePreviewClick : undefined}\r\n sx={{\r\n width: size === 'small' ? 24 : 32,\r\n height: size === 'small' ? 24 : 32,\r\n borderRadius: 1,\r\n border: '1px solid',\r\n borderColor: error ? 'error.main' : 'divider',\r\n backgroundColor: normalizedValue,\r\n cursor: !disabled ? 'pointer' : 'default',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n transition: 'all 0.2s',\r\n '&:hover': {\r\n opacity: !disabled ? 0.8 : 1,\r\n },\r\n ...previewStyles,\r\n }}\r\n title={!disabled ? 'Click to open color picker' : undefined}\r\n />\r\n </InputAdornment>\r\n ),\r\n [popoverAnchorRef, disabled, handlePreviewClick, size, error, normalizedValue, previewStyles],\r\n );\r\n\r\n // Build slotProps for MUI v7\r\n const finalSlotProps = useMemo(\r\n () => ({\r\n ...slotProps,\r\n input: {\r\n ...slotProps?.input,\r\n inputProps: {\r\n ...((slotProps?.input as any)?.inputProps || {}),\r\n },\r\n ...(showPreview && {\r\n startAdornment: previewSwatch,\r\n }),\r\n },\r\n }),\r\n [slotProps, showPreview, previewSwatch],\r\n );\r\n\r\n // Memoize helper text\r\n const displayHelperText = useMemo(\r\n () => helperText ?? (error?.message ? error.message : undefined),\r\n [helperText, error?.message],\r\n );\r\n\r\n return (\r\n <FormControl\r\n error={!!error}\r\n disabled={disabled}\r\n required={required}\r\n fullWidth={fullWidth}\r\n sx={formControlStyles}\r\n >\r\n <TextField\r\n {...textFieldProps}\r\n ref={ref}\r\n name={name}\r\n label={label}\r\n value={normalizedValue}\r\n onChange={handleChange}\r\n onFocus={onFocus}\r\n onBlur={onBlur}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n variant={variant}\r\n size={size}\r\n color={color}\r\n fullWidth={fullWidth}\r\n required={required}\r\n error={!!error}\r\n disabled={disabled}\r\n slotProps={finalSlotProps}\r\n slots={slots}\r\n sx={inputStyles}\r\n helperText={displayHelperText}\r\n />\r\n {/* Hidden native color input - triggered when clicking preview swatch */}\r\n <input\r\n ref={colorInputRef}\r\n type=\"color\"\r\n value={normalizedValue}\r\n onChange={handleColorInputChange}\r\n disabled={disabled}\r\n style={{\r\n position: 'absolute',\r\n width: 0,\r\n height: 0,\r\n opacity: 0,\r\n pointerEvents: 'none',\r\n visibility: 'hidden',\r\n }}\r\n aria-hidden=\"true\"\r\n />\r\n </FormControl>\r\n );\r\n },\r\n ),\r\n);\r\n\r\nColorPickerField.displayName = 'ColorPickerField';\r\n\r\nexport default ColorPickerField;\r\n","import type { TextFieldProps } from \"@mui/material\";\r\nimport { memo, useRef } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport FileUploadField from \"../FormFields/DropdownFields/FileUploadField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputFileUpload = memo(\r\n\t({ name, label, control, size, defaultValue = null, onChange, ...props }: IFormInputFields) => {\r\n\t\tconst fileRef = useRef(null);\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, fieldState: { error } }) => (\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\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\terror={error}\r\n\t\t\t\t\t\thelperText={error?.message}\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 { Clear, CloudUpload as CloudUploadIcon } from '@mui/icons-material';\r\nimport {\r\n type ButtonProps,\r\n FormControl,\r\n FormHelperText,\r\n IconButton,\r\n InputAdornment,\r\n TextField,\r\n type TextFieldProps,\r\n} from '@mui/material';\r\nimport React, { type ChangeEvent, type DragEvent, type ForwardedRef, forwardRef, useRef, useState } from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 extends Omit<TextFieldProps, 'value' | 'onChange' | 'name' | 'type' | 'error' | 'onDrop'> {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the file upload field */\r\n label?: string;\r\n /** Current file value */\r\n value?: File | File[] | { name: string } | null;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below field */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** File types to accept (e.g., \"image/*\", \".pdf,.doc\") */\r\n accept?: string;\r\n /** Whether to allow multiple file selection */\r\n multiple?: boolean;\r\n /** Maximum file size in bytes */\r\n maxSize?: number;\r\n /** Minimum file size in bytes */\r\n minSize?: number;\r\n /** Allowed file types (MIME types or extensions) */\r\n allowedTypes?: string[];\r\n /** Whether to show file preview */\r\n showPreview?: boolean;\r\n /** Whether to enable drag and drop */\r\n enableDragDrop?: boolean;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** TextField variant */\r\n variant?: TextFieldProps['variant'];\r\n /** TextField size */\r\n size?: TextFieldProps['size'];\r\n /** TextField color */\r\n color?: TextFieldProps['color'];\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Upload button text */\r\n buttonText?: string;\r\n /** Upload button variant */\r\n buttonVariant?: ButtonProps['variant'];\r\n /** Upload button color */\r\n buttonColor?: ButtonProps['color'];\r\n /** Upload button size */\r\n buttonSize?: ButtonProps['size'];\r\n /** Custom upload icon */\r\n uploadIcon?: React.ReactNode;\r\n /** Callback fired when file(s) change */\r\n onChange?: (file: File | File[] | undefined) => void;\r\n /** Callback fired when file is selected */\r\n onFileSelect?: (file: File | File[] | undefined) => void;\r\n /** Callback fired when file is removed */\r\n onFileRemove?: () => void;\r\n /** Callback fired on file validation error */\r\n onValidationError?: (error: string) => void;\r\n /** Callback fired when file is dropped (drag and drop) */\r\n onDrop?: (files: FileList) => void;\r\n /** Custom styles for the TextField */\r\n inputStyles?: TextFieldProps['sx'];\r\n /** Custom styles for the Button */\r\n buttonStyles?: ButtonProps['sx'];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\r\n /** Custom styles for the container */\r\n containerStyles?: React.CSSProperties;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: TextFieldProps['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: TextFieldProps['slots'];\r\n}\r\n\r\nconst FileUploadField = forwardRef<HTMLInputElement, IFileUploadFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n onChange,\r\n onFileSelect,\r\n onFileRemove,\r\n onValidationError,\r\n onDrop,\r\n error,\r\n helperText,\r\n disabled = false,\r\n accept,\r\n multiple = false,\r\n maxSize,\r\n minSize,\r\n allowedTypes,\r\n showPreview = true,\r\n enableDragDrop = false,\r\n placeholder = 'No file chosen',\r\n variant = 'outlined',\r\n size,\r\n color,\r\n fullWidth = true,\r\n required,\r\n buttonText = 'Upload',\r\n buttonVariant = 'contained',\r\n buttonColor = 'primary',\r\n buttonSize,\r\n uploadIcon = <CloudUploadIcon />,\r\n inputStyles,\r\n buttonStyles,\r\n formControlStyles,\r\n containerStyles,\r\n slotProps,\r\n slots,\r\n ...textFieldProps\r\n },\r\n ref: ForwardedRef<HTMLInputElement>,\r\n ) => {\r\n const internalRef = useRef<HTMLInputElement | null>(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [, setDragCounter] = useState(0);\r\n\r\n // Get the file input ref (either forwarded ref or internal ref)\r\n const fileInputRef = ref && typeof ref === 'object' && 'current' in ref ? ref : internalRef;\r\n\r\n // Get file name(s) from value\r\n const getFileName = (): string => {\r\n if (!value) return '';\r\n if (value instanceof File) return value.name;\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) return '';\r\n if (value.length === 1) return value[0].name;\r\n return `${value.length} files selected`;\r\n }\r\n if (typeof value === 'object' && 'name' in value) {\r\n return value.name;\r\n }\r\n return '';\r\n };\r\n\r\n // Validate file\r\n const validateFile = (file: File): string | null => {\r\n // Check file size\r\n if (maxSize && file.size > maxSize) {\r\n return `File size exceeds maximum allowed size of ${formatFileSize(maxSize)}`;\r\n }\r\n if (minSize && file.size < minSize) {\r\n return `File size is below minimum required size of ${formatFileSize(minSize)}`;\r\n }\r\n\r\n // Check file type\r\n if (allowedTypes && allowedTypes.length > 0) {\r\n const fileType = file.type || getFileExtension(file.name);\r\n const isAllowed = allowedTypes.some((type) => {\r\n if (type.startsWith('.')) {\r\n return file.name.toLowerCase().endsWith(type.toLowerCase());\r\n }\r\n return fileType.includes(type) || fileType === type;\r\n });\r\n if (!isAllowed) {\r\n return `File type not allowed. Allowed types: ${allowedTypes.join(', ')}`;\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n // Format file size\r\n const formatFileSize = (bytes: number): string => {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\r\n };\r\n\r\n // Get file extension\r\n const getFileExtension = (filename: string): string => {\r\n return filename.slice(((filename.lastIndexOf('.') - 1) >>> 0) + 2);\r\n };\r\n\r\n // Handle file change\r\n const handleFileChange = (event: ChangeEvent<HTMLInputElement>) => {\r\n const files = event.target.files;\r\n if (!files || files.length === 0) {\r\n if (onChange) onChange(undefined);\r\n if (onFileSelect) onFileSelect(undefined);\r\n return;\r\n }\r\n\r\n const fileArray = Array.from(files);\r\n let validFiles: File[] = [];\r\n let hasError = false;\r\n\r\n // Validate each file\r\n for (const file of fileArray) {\r\n const validationError = validateFile(file);\r\n if (validationError) {\r\n hasError = true;\r\n if (onValidationError) {\r\n onValidationError(validationError);\r\n }\r\n } else {\r\n validFiles.push(file);\r\n }\r\n }\r\n\r\n if (validFiles.length > 0) {\r\n const result = multiple ? validFiles : validFiles[0];\r\n if (onChange) onChange(result);\r\n if (onFileSelect) onFileSelect(result);\r\n } else if (hasError && onValidationError) {\r\n // Error already handled\r\n }\r\n };\r\n\r\n // Handle button click\r\n const handleButtonClick = () => {\r\n if (!disabled) {\r\n fileInputRef.current?.click();\r\n }\r\n };\r\n\r\n // Handle file remove\r\n const handleFileRemove = () => {\r\n if (fileInputRef.current) {\r\n fileInputRef.current.value = '';\r\n }\r\n if (onChange) onChange(undefined);\r\n if (onFileRemove) onFileRemove();\r\n };\r\n\r\n // Handle drag and drop\r\n const handleDragEnter = (e: DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setDragCounter((prev) => prev + 1);\r\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\r\n setIsDragging(true);\r\n }\r\n };\r\n\r\n const handleDragLeave = (e: DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setDragCounter((prev) => {\r\n const newCounter = prev - 1;\r\n if (newCounter === 0) {\r\n setIsDragging(false);\r\n }\r\n return newCounter;\r\n });\r\n };\r\n\r\n const handleDragOver = (e: DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n const handleDrop = (e: DragEvent<HTMLDivElement>) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsDragging(false);\r\n setDragCounter(0);\r\n\r\n if (disabled) return;\r\n\r\n const files = e.dataTransfer.files;\r\n if (files && files.length > 0) {\r\n if (onDrop) {\r\n onDrop(files);\r\n }\r\n // Create a synthetic event to reuse handleFileChange\r\n const syntheticEvent = {\r\n target: { files },\r\n } as ChangeEvent<HTMLInputElement>;\r\n handleFileChange(syntheticEvent);\r\n }\r\n };\r\n\r\n const fileName = getFileName();\r\n const displayValue = showPreview && fileName ? fileName : placeholder;\r\n\r\n return (\r\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\r\n <div\r\n style={containerStyles}\r\n onDragEnter={enableDragDrop ? handleDragEnter : undefined}\r\n onDragLeave={enableDragDrop ? handleDragLeave : undefined}\r\n onDragOver={enableDragDrop ? handleDragOver : undefined}\r\n onDrop={enableDragDrop ? handleDrop : undefined}\r\n >\r\n <input\r\n type=\"file\"\r\n accept={accept}\r\n multiple={multiple}\r\n name={name}\r\n id={name ? `file-upload-${name}` : undefined}\r\n onChange={handleFileChange}\r\n style={{ display: 'none' }}\r\n ref={fileInputRef}\r\n disabled={disabled}\r\n />\r\n <TextField\r\n {...textFieldProps}\r\n label={label}\r\n value={displayValue}\r\n placeholder={placeholder}\r\n variant={variant}\r\n size={size}\r\n color={color}\r\n fullWidth={fullWidth}\r\n required={required}\r\n error={!!error}\r\n disabled={disabled}\r\n name={name}\r\n sx={inputStyles}\r\n slotProps={{\r\n ...slotProps,\r\n input: {\r\n ...slotProps?.input,\r\n readOnly: true,\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n {showPreview && fileName && (\r\n <IconButton onClick={handleFileRemove} disabled={disabled}>\r\n <Clear />\r\n </IconButton>\r\n )}\r\n <IconButton onClick={handleButtonClick} disabled={disabled} sx={buttonStyles}>\r\n {uploadIcon}\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n },\r\n }}\r\n slots={slots}\r\n helperText={helperText ?? (error?.message ? error.message : undefined)}\r\n />\r\n {enableDragDrop && isDragging && (\r\n <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.05)',\r\n border: '2px dashed',\r\n borderColor: 'primary.main',\r\n borderRadius: 4,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 1000,\r\n }}\r\n >\r\n Drop files here\r\n </div>\r\n )}\r\n </div>\r\n {error && !helperText && error.message && <FormHelperText>{error.message}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n);\r\n\r\nFileUploadField.displayName = 'FileUploadField';\r\n\r\nexport default FileUploadField;\r\n","import type { TextFieldProps } from \"@mui/material\";\r\nimport { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport DatePickerField from \"../FormFields/DateFields/DatePickerField\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputDatePicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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\tshouldDisableDate={shouldDisableDate}\r\n\t\t\t\t\t\t\tsize={size as TextFieldProps[\"size\"]}\r\n\t\t\t\t\t\t\terror={error}\r\n\t\t\t\t\t\t\thelperText={error?.message}\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 { Clear as ClearIcon } from \"@mui/icons-material\";\r\nimport {\r\n Box,\r\n FormControl,\r\n FormHelperText,\r\n FormLabel,\r\n type FormLabelProps,\r\n IconButton,\r\n TextField,\r\n type TextFieldProps,\r\n} from \"@mui/material\";\r\nimport { DatePicker, type DatePickerProps, LocalizationProvider } from \"@mui/x-date-pickers\";\r\n// @ts-ignore\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport React, { type ForwardedRef, forwardRef, useRef } from \"react\";\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 extends Omit<DatePickerProps, \"value\" | \"onChange\" | \"defaultValue\" | \"slots\" | \"slotProps\" | \"renderInput\"> {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the date picker */\r\n label?: string;\r\n title?: boolean;\r\n /** Current selected date value */\r\n value: Date | null;\r\n /** Default date value */\r\n defaultValue?: Date | null;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below field */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Minimum selectable date */\r\n minDate?: Date;\r\n /** Maximum selectable date */\r\n maxDate?: Date;\r\n /** Function to disable specific dates */\r\n shouldDisableDate?: (date: Date) => boolean;\r\n /** Function to disable specific months */\r\n shouldDisableMonth?: (month: Date) => boolean;\r\n /** Function to disable specific years */\r\n shouldDisableYear?: (year: Date) => boolean;\r\n /** TextField size */\r\n size?: TextFieldProps[\"size\"];\r\n /** TextField variant */\r\n variant?: TextFieldProps[\"variant\"];\r\n /** TextField color */\r\n color?: TextFieldProps[\"color\"];\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** Whether the field is read-only */\r\n readOnly?: boolean;\r\n /** Whether to show clear button */\r\n showClearButton?: boolean;\r\n /** Whether to disable past dates */\r\n disablePast?: boolean;\r\n /** Whether to disable future dates */\r\n disableFuture?: boolean;\r\n /** Reference date for the calendar */\r\n referenceDate?: Date;\r\n /** Controlled view state */\r\n view?: \"day\" | \"month\" | \"year\";\r\n /** Format for displaying the date */\r\n format?: string;\r\n /** Whether to open the calendar on focus */\r\n openTo?: \"day\" | \"month\" | \"year\";\r\n /** Custom styles for the DatePicker */\r\n pickerStyles?: DatePickerProps[\"sx\"];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>[\"sx\"];\r\n /** Custom styles for FormLabel */\r\n formLabelStyles?: FormLabelProps[\"sx\"];\r\n /** Custom styles for the container Box */\r\n containerStyles?: React.ComponentProps<typeof Box>[\"sx\"];\r\n /** Custom styles for the TextField */\r\n textFieldStyles?: TextFieldProps[\"sx\"];\r\n /** Callback fired when the date changes */\r\n onChange?: (value: Date | null) => void;\r\n /** Callback fired when the field receives focus */\r\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n /** Callback fired when the field loses focus */\r\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\r\n /** Callback fired when a view change is requested */\r\n onViewChange?: (view: \"day\" | \"month\" | \"year\") => void;\r\n /** Callback fired when a month change is requested */\r\n onMonthChange?: (month: Date) => void;\r\n /** Callback fired when a year change is requested */\r\n onYearChange?: (year: Date) => void;\r\n /** Callback fired when the calendar opens */\r\n onOpen?: () => void;\r\n /** Callback fired when the calendar closes */\r\n onClose?: () => void;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: DatePickerProps[\"slotProps\"];\r\n /** Custom slots for MUI v7 */\r\n slots?: DatePickerProps[\"slots\"];\r\n /** Date adapter to use (defaults to AdapterDateFns) */\r\n dateAdapter?: typeof AdapterDateFns;\r\n /** Whether to reduce animations */\r\n reduceAnimations?: boolean;\r\n /** Auto focus the input */\r\n autoFocus?: boolean;\r\n}\r\n\r\nconst DatePickerField = forwardRef<HTMLDivElement, IDatePickerFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onFocus,\r\n onBlur,\r\n onViewChange,\r\n onMonthChange,\r\n onYearChange,\r\n onOpen,\r\n onClose,\r\n error,\r\n helperText,\r\n disabled = false,\r\n fullWidth = true,\r\n required,\r\n minDate,\r\n maxDate,\r\n shouldDisableDate,\r\n shouldDisableMonth,\r\n shouldDisableYear,\r\n size = \"medium\",\r\n variant = \"outlined\",\r\n color = \"primary\",\r\n placeholder,\r\n readOnly = false,\r\n showClearButton = true,\r\n disablePast = false,\r\n disableFuture = false,\r\n referenceDate,\r\n view,\r\n format,\r\n openTo = \"day\",\r\n pickerStyles,\r\n formControlStyles,\r\n formLabelStyles,\r\n containerStyles,\r\n textFieldStyles,\r\n slotProps,\r\n slots,\r\n title = false,\r\n dateAdapter = AdapterDateFns,\r\n reduceAnimations = false,\r\n autoFocus = false,\r\n ...datePickerProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n\r\n // Handle onChange with proper typing\r\n const handleChange = (newValue: Date | null) => {\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n };\r\n\r\n // Handle clear button click\r\n const handleClear = () => {\r\n if (onChange) {\r\n onChange(null);\r\n }\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n // Default placeholder\r\n const defaultPlaceholder = placeholder || \"MM/DD/YYYY\";\r\n\r\n // Merge slotProps with textField configuration\r\n const mergedSlotProps = {\r\n ...slotProps,\r\n textField: {\r\n ...slotProps?.textField,\r\n error: !!error,\r\n size,\r\n variant,\r\n color,\r\n helperText: error ? helperText ?? error.message : helperText,\r\n fullWidth,\r\n placeholder: defaultPlaceholder,\r\n autoFocus,\r\n onFocus,\r\n onBlur,\r\n inputRef: ref || inputRef,\r\n clearable: showClearButton,\r\n showClear: !!value,\r\n onClear: handleClear,\r\n sx: {\r\n ...textFieldStyles,\r\n ...(slotProps?.textField && typeof slotProps.textField === \"object\" && \"sx\" in slotProps.textField\r\n ? slotProps.textField.sx\r\n : {}),\r\n },\r\n InputProps: {\r\n ...(slotProps?.textField && typeof slotProps.textField === \"object\" && \"InputProps\" in slotProps.textField\r\n ? slotProps.textField.InputProps\r\n : {}),\r\n },\r\n } as unknown as Partial<TextFieldProps>,\r\n };\r\n\r\n return (\r\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\r\n {label && title && (\r\n <FormLabel\r\n sx={{\r\n mb: 1,\r\n ...formLabelStyles,\r\n }}\r\n >\r\n {label}\r\n </FormLabel>\r\n )}\r\n <Box\r\n ref={ref}\r\n sx={{\r\n ...containerStyles,\r\n }}\r\n >\r\n <LocalizationProvider dateAdapter={dateAdapter}>\r\n <DatePicker\r\n {...datePickerProps}\r\n name={name}\r\n enableAccessibleFieldDOMStructure={false}\r\n label={label}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleChange}\r\n onViewChange={onViewChange}\r\n onMonthChange={onMonthChange}\r\n onYearChange={onYearChange}\r\n onOpen={onOpen}\r\n onClose={onClose}\r\n disabled={disabled}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n shouldDisableDate={shouldDisableDate}\r\n shouldDisableMonth={shouldDisableMonth}\r\n shouldDisableYear={shouldDisableYear}\r\n disablePast={disablePast}\r\n disableFuture={disableFuture}\r\n referenceDate={referenceDate}\r\n view={view}\r\n format={format}\r\n openTo={openTo}\r\n reduceAnimations={reduceAnimations}\r\n slotProps={mergedSlotProps}\r\n slots={{ ...slots, textField: ActionableTextField }}\r\n sx={pickerStyles}\r\n />\r\n </LocalizationProvider>\r\n </Box>\r\n {!error && helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n);\r\n\r\nconst ActionableTextField = forwardRef((props: any, ref) => {\r\n const { clearable, onClear, showClear, InputProps, slotProps, ...other } = props;\r\n return (\r\n <TextField\r\n {...other}\r\n ref={ref}\r\n slotProps={{\r\n ...slotProps,\r\n input: {\r\n ...InputProps,\r\n ...slotProps?.input,\r\n endAdornment: (\r\n <React.Fragment>\r\n {clearable && showClear && (\r\n <IconButton onClick={onClear} size=\"small\" edge=\"end\" sx={{ marginRight: 0.5 }}>\r\n <ClearIcon fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n {InputProps?.endAdornment}\r\n {slotProps?.input?.endAdornment}\r\n </React.Fragment>\r\n ),\r\n },\r\n }}\r\n />\r\n );\r\n});\r\n\r\nActionableTextField.displayName = \"ActionableDatePickerTextField\";\r\n\r\nDatePickerField.displayName = \"DatePickerField\";\r\n\r\nexport default DatePickerField;\r\n","import { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TimePickerField from \"../FormFields/DateFields/TimePickerField\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTimePicker = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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 { Clear as ClearIcon } from '@mui/icons-material';\nimport {\n Box,\n FormControl,\n FormHelperText,\n FormLabel,\n type FormLabelProps,\n IconButton,\n TextField,\n type TextFieldProps,\n} from '@mui/material';\nimport { LocalizationProvider, TimePicker, type TimePickerProps } from '@mui/x-date-pickers';\n// @ts-ignore\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport React, { type ForwardedRef, forwardRef, useRef } from 'react';\n\n/**\n * Error object type\n */\nexport type FieldError = {\n message?: 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 extends Omit<\n TimePickerProps,\n 'value' | 'onChange' | 'defaultValue' | 'slots' | 'slotProps' | 'renderInput' | 'onViewChange'\n > {\n /** Field name for form identification */\n name?: string;\n /** Label text for the time picker */\n label?: string;\n /** Current selected time value */\n value: Date | null;\n /** Default time value */\n defaultValue?: Date | null;\n /** Error object with optional message */\n error?: FieldError;\n /** Helper text to display below field */\n helperText?: string;\n /** Whether the field is disabled */\n disabled?: boolean;\n /** Full width of the field */\n fullWidth?: boolean;\n /** Whether to show title */\n title?: boolean;\n /** Required field indicator */\n required?: boolean;\n /** Minimum selectable time */\n minTime?: Date;\n /** Maximum selectable time */\n maxTime?: Date;\n /** Function to disable specific times */\n shouldDisableTime?: (time: Date, view: 'hours' | 'minutes' | 'seconds') => boolean;\n /** TextField size */\n size?: TextFieldProps['size'];\n /** TextField variant */\n variant?: TextFieldProps['variant'];\n /** TextField color */\n color?: TextFieldProps['color'];\n /** Placeholder text */\n placeholder?: string;\n /** Whether the field is read-only */\n readOnly?: boolean;\n /** Whether to show clear button */\n showClearButton?: boolean;\n /** Whether to disable past times */\n disablePast?: boolean;\n /** Whether to disable future times */\n disableFuture?: boolean;\n /** Whether to use 12-hour format */\n ampm?: boolean;\n /** Available views (hours, minutes, seconds) */\n views?: ('hours' | 'minutes' | 'seconds')[];\n /** Controlled view state */\n view?: 'hours' | 'minutes' | 'seconds';\n /** Default view */\n openTo?: 'hours' | 'minutes' | 'seconds';\n /** Format for displaying the time */\n format?: string;\n /** Custom styles for the TimePicker */\n pickerStyles?: TimePickerProps['sx'];\n /** Custom styles for FormControl */\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\n /** Custom styles for FormLabel */\n formLabelStyles?: FormLabelProps['sx'];\n /** Custom styles for the container Box */\n containerStyles?: React.ComponentProps<typeof Box>['sx'];\n /** Custom styles for the TextField */\n textFieldStyles?: TextFieldProps['sx'];\n /** Callback fired when the time changes */\n onChange?: (value: Date | null) => void;\n /** Callback fired when the field receives focus */\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /** Callback fired when the field loses focus */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /** Callback fired when a view change is requested */\n onViewChange?: (view: 'hours' | 'minutes' | 'seconds' | 'meridiem') => void;\n /** Callback fired when the picker opens */\n onOpen?: () => void;\n /** Callback fired when the picker closes */\n onClose?: () => void;\n /** Custom slot props for MUI v7 */\n slotProps?: TimePickerProps['slotProps'];\n /** Custom slots for MUI v7 */\n slots?: TimePickerProps['slots'];\n /** Date adapter to use (defaults to AdapterDateFns) */\n dateAdapter?: typeof AdapterDateFns;\n /** Auto focus the input */\n autoFocus?: boolean;\n}\n\nconst TimePickerField = forwardRef<HTMLDivElement, ITimePickerFieldProps>(\n (\n {\n name,\n label,\n title,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onViewChange,\n onOpen,\n onClose,\n error,\n helperText,\n disabled = false,\n fullWidth = true,\n required,\n minTime,\n maxTime,\n shouldDisableTime,\n size = 'medium',\n variant = 'outlined',\n color = 'primary',\n placeholder,\n readOnly = false,\n showClearButton = true,\n disablePast = false,\n disableFuture = false,\n ampm = true,\n views,\n view,\n openTo = 'hours',\n format,\n pickerStyles,\n formControlStyles,\n formLabelStyles,\n containerStyles,\n textFieldStyles,\n slotProps,\n slots,\n dateAdapter = AdapterDateFns,\n autoFocus = false,\n ...timePickerProps\n },\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Handle onChange with proper typing\n const handleChange = (newValue: Date | null) => {\n if (onChange) {\n onChange(newValue);\n }\n };\n\n // Handle clear button click\n const handleClear = () => {\n if (onChange) {\n onChange(null);\n }\n if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n // Default placeholder\n const defaultPlaceholder = placeholder || (ampm ? 'hh:mm AM/PM' : 'hh:mm');\n\n // Merge slotProps with textField configuration\n const mergedSlotProps = {\n ...slotProps,\n textField: {\n ...slotProps?.textField,\n error: !!error,\n size,\n variant,\n color,\n helperText: error ? helperText ?? error.message : helperText,\n fullWidth,\n placeholder: defaultPlaceholder,\n autoFocus,\n onFocus,\n onBlur,\n inputRef: ref || inputRef,\n clearable: showClearButton,\n showClear: !!value,\n onClear: handleClear,\n sx: {\n ...textFieldStyles,\n ...(slotProps?.textField && typeof slotProps.textField === 'object' && 'sx' in slotProps.textField\n ? slotProps.textField.sx\n : {}),\n },\n InputProps: {\n ...(slotProps?.textField && typeof slotProps.textField === 'object' && 'InputProps' in slotProps.textField\n ? slotProps.textField.InputProps\n : {}),\n },\n } as unknown as Partial<TextFieldProps>,\n };\n\n return (\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\n {label && title &&(\n <FormLabel\n sx={{\n mb: 1,\n ...formLabelStyles,\n }}\n >\n {label}\n </FormLabel>\n )}\n <Box\n ref={ref}\n sx={{\n ...containerStyles,\n }}\n >\n <LocalizationProvider dateAdapter={dateAdapter}>\n <TimePicker\n {...timePickerProps}\n name={name}\n enableAccessibleFieldDOMStructure={false}\n label={label ? undefined : label}\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n onViewChange={onViewChange}\n onOpen={onOpen}\n onClose={onClose}\n disabled={disabled}\n minTime={minTime}\n maxTime={maxTime}\n shouldDisableTime={shouldDisableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n ampm={ampm}\n views={views}\n view={view}\n openTo={openTo}\n format={format}\n slotProps={mergedSlotProps}\n slots={{ ...slots, textField: ActionableTextField }}\n sx={pickerStyles}\n />\n </LocalizationProvider>\n </Box>\n\n {!error && helperText && <FormHelperText sx={{ margin: '4px' }}>{helperText}</FormHelperText>}\n </FormControl>\n );\n },\n);\nconst ActionableTextField = forwardRef((props: any, ref) => {\n const { clearable, onClear, showClear, InputProps, slotProps, ...other } = props;\n return (\n <TextField\n {...other}\n ref={ref}\n slotProps={{\n ...slotProps,\n input: {\n ...InputProps,\n ...slotProps?.input,\n endAdornment: (\n <React.Fragment>\n {clearable && showClear && (\n <IconButton onClick={onClear} size=\"small\" edge=\"end\" sx={{ marginRight: 0.5 }}>\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n {InputProps?.endAdornment}\n {slotProps?.input?.endAdornment}\n </React.Fragment>\n ),\n },\n }}\n />\n );\n});\nActionableTextField.displayName = 'ActionableTimePickerTextField';\n\nTimePickerField.displayName = 'TimePickerField';\n\nexport default TimePickerField;\n","import { Box, FormLabel } from \"@mui/material\";\r\nimport { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport TimeClockField from \"../FormFields/DateFields/TimeClockField\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputTimeClock = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => (\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\thelperText={error?.message}\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</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, Button, FormControl, FormHelperText, Stack, type ButtonProps, type FormLabelProps } from '@mui/material';\r\nimport { LocalizationProvider, TimeClock, type TimeClockProps, type TimeView } from '@mui/x-date-pickers';\r\n// @ts-ignore\r\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\r\nimport React, { forwardRef, useState, type ForwardedRef } from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 extends Omit<\r\n TimeClockProps<TimeView>,\r\n 'value' | 'onChange' | 'defaultValue' | 'slots' | 'slotProps' | 'view' | 'onViewChange'\r\n > {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the time clock */\r\n label?: React.ReactNode;\r\n /** Current selected time value */\r\n value: Date | null;\r\n /** Default time value */\r\n defaultValue?: Date | null;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below time clock */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Available views (hours, minutes, seconds) */\r\n views?: TimeView[];\r\n /** Whether to show AM/PM in the clock */\r\n ampmInClock?: boolean;\r\n /** Whether to use 12-hour format */\r\n ampm?: boolean;\r\n /** Whether to disable past times */\r\n disablePast?: boolean;\r\n /** Whether to disable future times */\r\n disableFuture?: boolean;\r\n /** Minimum selectable time */\r\n minTime?: Date;\r\n /** Maximum selectable time */\r\n maxTime?: Date;\r\n /** Function to disable specific times */\r\n shouldDisableTime?: (time: Date, view: TimeView) => boolean;\r\n /** Custom styles for the TimeClock */\r\n clockStyles?: TimeClockProps<TimeView>['sx'];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\r\n /** Custom styles for FormLabel */\r\n formLabelStyles?: FormLabelProps['sx'];\r\n /** Custom styles for the container Box */\r\n containerStyles?: React.ComponentProps<typeof Box>['sx'];\r\n /** Custom styles for the view buttons Stack */\r\n buttonsStackStyles?: React.ComponentProps<typeof Stack>['sx'];\r\n /** Custom styles for view buttons */\r\n buttonStyles?: ButtonProps['sx'];\r\n /** Custom styles for active view button */\r\n activeButtonStyles?: ButtonProps['sx'];\r\n /** Whether to show view selector buttons */\r\n showViewButtons?: boolean;\r\n /** Initial view */\r\n initialView?: TimeView;\r\n /** Controlled view state */\r\n view?: TimeView;\r\n /** Callback fired when the time changes */\r\n onChange?: (value: Date | null) => void;\r\n /** Callback fired when a view change is requested */\r\n onViewChange?: (view: TimeView) => void;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: TimeClockProps<TimeView>['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: TimeClockProps<TimeView>['slots'];\r\n /** Date adapter to use (defaults to AdapterDateFns) */\r\n dateAdapter?: typeof AdapterDateFns;\r\n /** Auto focus */\r\n autoFocus?: boolean;\r\n}\r\n\r\nconst TimeClockField = forwardRef<HTMLDivElement, ITimeClockFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n defaultValue,\r\n onChange,\r\n error,\r\n helperText,\r\n disabled = false,\r\n fullWidth = false,\r\n required,\r\n views = ['hours', 'minutes'],\r\n ampmInClock = false,\r\n ampm = true,\r\n disablePast = false,\r\n disableFuture = false,\r\n minTime,\r\n maxTime,\r\n shouldDisableTime,\r\n clockStyles,\r\n formControlStyles,\r\n formLabelStyles,\r\n containerStyles,\r\n buttonsStackStyles,\r\n buttonStyles,\r\n activeButtonStyles,\r\n showViewButtons = true,\r\n initialView = 'hours',\r\n view: controlledView,\r\n onViewChange: controlledOnViewChange,\r\n slotProps,\r\n slots,\r\n dateAdapter = AdapterDateFns,\r\n autoFocus = false,\r\n ...timeClockProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n // Internal view state (only used if view is not controlled)\r\n const [internalView, setInternalView] = useState<TimeView>(initialView);\r\n\r\n // Use controlled view if provided, otherwise use internal state\r\n const view = controlledView ?? internalView;\r\n const setView = controlledOnViewChange ?? setInternalView;\r\n\r\n // Handle onChange with proper typing\r\n const handleChange = (newValue: Date | null) => {\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n };\r\n\r\n // Handle view change\r\n const handleViewChange = (newView: TimeView) => {\r\n setView(newView);\r\n };\r\n\r\n return (\r\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\r\n <Box\r\n ref={ref}\r\n sx={{\r\n ...containerStyles,\r\n }}\r\n mt={2}\r\n mb={2}\r\n >\r\n {showViewButtons && views && views.length > 1 && (\r\n <Stack\r\n direction=\"row\"\r\n justifyContent=\"center\"\r\n spacing={1}\r\n sx={{\r\n ...buttonsStackStyles,\r\n }}\r\n >\r\n {views.map((v) => (\r\n <Button\r\n key={v}\r\n size=\"small\"\r\n variant={view === v ? 'contained' : 'outlined'}\r\n onClick={() => handleViewChange(v)}\r\n disabled={disabled}\r\n sx={\r\n view === v\r\n ? {\r\n ...(buttonStyles as any),\r\n ...(activeButtonStyles as any),\r\n }\r\n : (buttonStyles as any)\r\n }\r\n >\r\n {v}\r\n </Button>\r\n ))}\r\n </Stack>\r\n )}\r\n <LocalizationProvider dateAdapter={dateAdapter}>\r\n <TimeClock\r\n {...timeClockProps}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleChange}\r\n view={view}\r\n onViewChange={handleViewChange}\r\n disabled={disabled}\r\n views={views}\r\n ampmInClock={ampmInClock}\r\n ampm={ampm}\r\n disablePast={disablePast}\r\n disableFuture={disableFuture}\r\n minTime={minTime}\r\n maxTime={maxTime}\r\n shouldDisableTime={shouldDisableTime}\r\n autoFocus={autoFocus}\r\n slotProps={slotProps}\r\n slots={slots}\r\n sx={clockStyles}\r\n />\r\n </LocalizationProvider>\r\n </Box>\r\n {error && (\r\n <FormHelperText sx={{ margin: '4px' }}>{helperText ?? (error?.message ? error.message : '')}</FormHelperText>\r\n )}\r\n {!error && helperText && <FormHelperText sx={{ margin: '4px' }}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n);\r\n\r\nTimeClockField.displayName = 'TimeClockField';\r\n\r\nexport default TimeClockField;\r\n","import { Box, FormLabel } from \"@mui/material\";\r\nimport { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport DateCalendarField from \"../FormFields/DateFields/DateCalendarField\";\r\nimport type { IFormInputDateFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputCalendar = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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\thelperText={error?.message}\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</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 { Box, FormControl, FormHelperText, type FormLabelProps } from '@mui/material';\r\nimport { DateCalendar, type DateCalendarProps, LocalizationProvider } from '@mui/x-date-pickers';\r\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\r\n\r\nimport React, { type ForwardedRef, forwardRef } from 'react';\r\n\r\n/**\r\n * Error object type\r\n */\r\nexport type FieldError = {\r\n message?: 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 extends Omit<DateCalendarProps, 'value' | 'onChange' | 'defaultValue' | 'slots' | 'slotProps'> {\r\n /** Field name for form identification */\r\n name?: string;\r\n /** Label text for the calendar */\r\n label?: React.ReactNode;\r\n /** Current selected date value */\r\n value: Date | null;\r\n /** Default date value */\r\n defaultValue?: Date | null;\r\n /** Error object with optional message */\r\n error?: FieldError;\r\n /** Helper text to display below calendar */\r\n helperText?: string;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Full width of the field */\r\n fullWidth?: boolean;\r\n /** Required field indicator */\r\n required?: boolean;\r\n /** Minimum selectable date */\r\n minDate?: Date;\r\n /** Maximum selectable date */\r\n maxDate?: Date;\r\n /** Function to disable specific dates */\r\n shouldDisableDate?: (date: Date) => boolean;\r\n /** Function to disable specific months */\r\n shouldDisableMonth?: (month: Date) => boolean;\r\n /** Function to disable specific years */\r\n shouldDisableYear?: (year: Date) => boolean;\r\n /** Custom styles for the DateCalendar */\r\n calendarStyles?: DateCalendarProps['sx'];\r\n /** Custom styles for FormControl */\r\n formControlStyles?: React.ComponentProps<typeof FormControl>['sx'];\r\n /** Custom styles for FormLabel */\r\n formLabelStyles?: FormLabelProps['sx'];\r\n /** Custom styles for the container Box */\r\n containerStyles?: React.ComponentProps<typeof Box>['sx'];\r\n /** Callback fired when the date changes */\r\n onChange?: (value: Date | null) => void;\r\n /** Callback fired when a view change is requested */\r\n onViewChange?: (view: 'day' | 'month' | 'year') => void;\r\n /** Callback fired when a month change is requested */\r\n onMonthChange?: (month: Date) => void;\r\n /** Callback fired when a year change is requested */\r\n onYearChange?: (year: Date) => void;\r\n /** Custom slot props for MUI v7 */\r\n slotProps?: DateCalendarProps['slotProps'];\r\n /** Custom slots for MUI v7 */\r\n slots?: DateCalendarProps['slots'];\r\n /** Date adapter to use (defaults to AdapterDateFns) */\r\n dateAdapter?: typeof AdapterDateFns;\r\n /** Whether to show days outside current month */\r\n showDaysOutsideCurrentMonth?: boolean;\r\n /** Whether to disable past dates */\r\n disablePast?: boolean;\r\n /** Whether to disable future dates */\r\n disableFuture?: boolean;\r\n /** Reference date for the calendar */\r\n referenceDate?: Date;\r\n /** Controlled view state */\r\n view?: 'day' | 'month' | 'year';\r\n}\r\n\r\nconst DateCalendarField = forwardRef<HTMLDivElement, IDateCalendarFieldProps>(\r\n (\r\n {\r\n name,\r\n label,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onViewChange,\r\n onMonthChange,\r\n onYearChange,\r\n error,\r\n helperText,\r\n disabled = false,\r\n fullWidth = false,\r\n required,\r\n minDate,\r\n maxDate,\r\n shouldDisableDate,\r\n shouldDisableMonth,\r\n shouldDisableYear,\r\n calendarStyles,\r\n formControlStyles,\r\n formLabelStyles,\r\n containerStyles,\r\n slotProps,\r\n slots,\r\n dateAdapter = AdapterDateFns,\r\n showDaysOutsideCurrentMonth = false,\r\n disablePast = false,\r\n disableFuture = false,\r\n referenceDate,\r\n view,\r\n ...dateCalendarProps\r\n },\r\n ref: ForwardedRef<HTMLDivElement>,\r\n ) => {\r\n // Handle onChange with proper typing\r\n const handleChange = (newValue: Date | null) => {\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <FormControl error={!!error} disabled={disabled} required={required} fullWidth={fullWidth} sx={formControlStyles}>\r\n <Box\r\n ref={ref}\r\n sx={{\r\n ...containerStyles,\r\n }}\r\n >\r\n <LocalizationProvider dateAdapter={dateAdapter}>\r\n <DateCalendar\r\n {...dateCalendarProps}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleChange}\r\n onViewChange={onViewChange}\r\n onMonthChange={onMonthChange}\r\n onYearChange={onYearChange}\r\n disabled={disabled}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n shouldDisableDate={shouldDisableDate}\r\n shouldDisableMonth={shouldDisableMonth}\r\n shouldDisableYear={shouldDisableYear}\r\n showDaysOutsideCurrentMonth={showDaysOutsideCurrentMonth}\r\n disablePast={disablePast}\r\n disableFuture={disableFuture}\r\n referenceDate={referenceDate}\r\n view={view}\r\n slotProps={slotProps}\r\n slots={slots}\r\n sx={calendarStyles}\r\n />\r\n </LocalizationProvider>\r\n </Box>\r\n {error && (\r\n <FormHelperText sx={{ margin: '4px' }}>{helperText ?? (error?.message ? error.message : '')}</FormHelperText>\r\n )}\r\n {!error && helperText && <FormHelperText sx={{ margin: '4px' }}>{helperText}</FormHelperText>}\r\n </FormControl>\r\n );\r\n },\r\n);\r\n\r\nDateCalendarField.displayName = 'DateCalendarField';\r\n\r\nexport default DateCalendarField;\r\n","import { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport CheckBoxField from \"../FormFields/BoxFields/CheckBoxField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputCheckBox = memo(\r\n\t({ name, label, control, defaultValue = false, onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport CheckBoxFieldGroup from \"../FormFields/BoxFields/CheckBoxFieldGroup\";\r\nimport type { IFormInputCheckBoxGroupFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputCheckBoxGroup = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SwitchField from \"../FormFields/BoxFields/SwitchField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputSwitch = memo(\r\n\t({ name, label, control, defaultValue = false, onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport SliderField from \"../FormFields/BoxFields/SliderField\";\r\nimport type { IFormInputFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputSlider = memo(\r\n\t({ name, label, control, defaultValue = 0, onChange, ...props }: IFormInputFields) => {\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport RadioButtonField from \"../FormFields/BoxFields/RadioButtonField\";\r\nimport type { IFormInputRadioFields } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputRadioButton = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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\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, fieldState: { error } }) => {\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={error?.message}\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\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 { memo, useMemo } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport RadioButtonFieldGroup from \"../FormFields/BoxFields/RadioButtonFieldGroup\";\r\nimport type { IFormInputFieldsWithOptions } from \"./types\";\r\nimport React from \"react\";\r\nconst FormInputRadioButtonGroup = memo(\r\n\t({\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tcontrol,\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 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, fieldState: { error } }) => {\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={error?.message}\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","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","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState } from \"react\";\r\nimport { Box, Paper, Typography, Button, Divider } from \"@mui/material\";\r\n\r\n// Import all FormInputs (not HookFormFields)\r\nimport TextInputField from \"../FormFields/TextFields/TextInputField\";\r\nimport PasswordField from \"../FormFields/TextFields/PasswordField\";\r\nimport NumberField from \"../FormFields/TextFields/NumberField\";\r\nimport TelInputField from \"../FormFields/TextFields/TelInputField\";\r\nimport SearchInputField from \"../FormFields/TextFields/SearchInputField\";\r\nimport OTPField from \"../FormFields/TextFields/OTPField\";\r\nimport SelectInputField from \"../FormFields/DropdownFields/SelectInputField\";\r\nimport AutoCompleteField from \"../FormFields/DropdownFields/AutoCompleteField\";\r\nimport ColorPickerField from \"../FormFields/DropdownFields/ColorPickerField\";\r\nimport FileUploadField from \"../FormFields/DropdownFields/FileUploadField\";\r\nimport DatePickerField from \"../FormFields/DateFields/DatePickerField\";\r\nimport TimePickerField from \"../FormFields/DateFields/TimePickerField\";\r\nimport TimeClockField from \"../FormFields/DateFields/TimeClockField\";\r\nimport DateCalendarField from \"../FormFields/DateFields/DateCalendarField\";\r\nimport CheckBoxField from \"../FormFields/BoxFields/CheckBoxField\";\r\nimport CheckBoxFieldGroup from \"../FormFields/BoxFields/CheckBoxFieldGroup\";\r\nimport SwitchField from \"../FormFields/BoxFields/SwitchField\";\r\nimport SliderField from \"../FormFields/BoxFields/SliderField\";\r\nimport RadioButtonField from \"../FormFields/BoxFields/RadioButtonField\";\r\nimport RadioButtonFieldGroup from \"../FormFields/BoxFields/RadioButtonFieldGroup\";\r\n\r\nimport type { Option } from \"../HookFormFields/types\";\r\n\r\nconst NormalForm = () => {\r\n // Form state\r\n const [formData, setFormData] = useState({\r\n text: \"\",\r\n textarea: \"\",\r\n password: \"\",\r\n number: \"\",\r\n tel: \"\",\r\n search: \"\",\r\n otp: \"\",\r\n select: \"\",\r\n multiselect: [] as (string | number)[],\r\n autocomplete: null as Option | null,\r\n multiautocomplete: [] as Option[],\r\n color: \"#000000\",\r\n file: null as File | File[] | null,\r\n date: null as Date | null,\r\n time: null as Date | null,\r\n timeclock: null as Date | null,\r\n calendar: null as Date | null,\r\n checkbox: false,\r\n checkboxgroup: [] as (string | number)[],\r\n switch: false,\r\n slider: 0,\r\n singleradio: false,\r\n radiogroup: \"\",\r\n });\r\n\r\n const [errors, setErrors] = useState<Record<string, string>>({});\r\n\r\n // Options for dropdowns\r\n const selectOptions: Option[] = [\r\n { name: \"Option 1\", value: \"opt1\" },\r\n { name: \"Option 2\", value: \"opt2\" },\r\n { name: \"Option 3\", value: \"opt3\" },\r\n ];\r\n\r\n const checkboxOptions = [\r\n { value: \"check1\", label: \"Checkbox 1\" },\r\n { value: \"check2\", label: \"Checkbox 2\" },\r\n { value: \"check3\", label: \"Checkbox 3\" },\r\n ];\r\n\r\n const radioOptions = [\r\n { name: \"Radio 1\", value: \"radio1\" },\r\n { name: \"Radio 2\", value: \"radio2\" },\r\n { name: \"Radio 3\", value: \"radio3\" },\r\n ];\r\n\r\n const handleChange = (field: string) => (value: any) => {\r\n setFormData((prev) => ({ ...prev, [field]: value }));\r\n // Clear error when user types\r\n if (errors[field]) {\r\n setErrors((prev) => {\r\n const newErrors = { ...prev };\r\n delete newErrors[field];\r\n return newErrors;\r\n });\r\n }\r\n };\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n console.log(\"Normal Form Data:\", formData);\r\n // Simple validation\r\n const newErrors: Record<string, string> = {};\r\n if (!formData.text) newErrors.text = \"Text is required\";\r\n if (!formData.password) newErrors.password = \"Password is required\";\r\n setErrors(newErrors);\r\n };\r\n\r\n return (\r\n <Paper sx={{ p: 3, maxWidth: 1200, mx: \"auto\" }}>\r\n <Typography variant=\"h4\" gutterBottom>\r\n Normal Form (Direct FormInputs)\r\n </Typography>\r\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\r\n Using FormInputs directly with useState\r\n </Typography>\r\n <Divider sx={{ my: 2 }} />\r\n\r\n <form onSubmit={handleSubmit}>\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: { xs: \"1fr\", md: \"repeat(3, 1fr)\" },\r\n gap: 2,\r\n }}\r\n >\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n {/* Text Inputs */}\r\n <TextInputField\r\n name=\"text\"\r\n label=\"Text Field\"\r\n value={formData.text}\r\n onChange={(e) => handleChange(\"text\")(e.target.value)}\r\n error={errors.text ? { message: errors.text } : null}\r\n />\r\n <PasswordField\r\n name=\"password\"\r\n label=\"Password\"\r\n value={formData.password}\r\n onChange={(e) => handleChange(\"password\")(e.target.value)}\r\n error={errors.password ? { message: errors.password } : null}\r\n />\r\n </Box>\r\n\r\n <TextInputField\r\n name=\"textarea\"\r\n label=\"Text Area\"\r\n value={formData.textarea}\r\n onChange={(e) => handleChange(\"textarea\")(e.target.value)}\r\n multiline\r\n rows={4}\r\n />\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n <NumberField\r\n name=\"number\"\r\n label=\"Number\"\r\n pattern=\"credit-card\"\r\n value={formData.number}\r\n onChange={(e) => handleChange(\"number\")(e.target.value)}\r\n />\r\n <TelInputField\r\n name=\"tel\"\r\n label=\"Telephone\"\r\n pattern=\"XX-XXXX-XXXX\"\r\n value={formData.tel}\r\n onChange={(e) => handleChange(\"tel\")(e.target.value)}\r\n />\r\n </Box>\r\n\r\n <SearchInputField\r\n name=\"search\"\r\n label=\"Search\"\r\n value={formData.search}\r\n onChange={(e) => handleChange(\"search\")(e.target.value)}\r\n />\r\n\r\n <OTPField\r\n name=\"otp\"\r\n value={formData.otp}\r\n onChange={handleChange(\"otp\")}\r\n length={6}\r\n spacing={2}\r\n />\r\n\r\n {/* Dropdowns */}\r\n <SelectInputField\r\n name=\"select\"\r\n label=\"Select\"\r\n value={formData.select}\r\n onChange={(e) => handleChange(\"select\")(e.target.value)}\r\n options={selectOptions}\r\n />\r\n\r\n <SelectInputField\r\n name=\"multiselect\"\r\n label=\"Multi Select\"\r\n value={formData.multiselect}\r\n onChange={(e) => handleChange(\"multiselect\")(e.target.value)}\r\n options={selectOptions}\r\n multiple\r\n />\r\n\r\n <AutoCompleteField\r\n name=\"autocomplete\"\r\n label=\"Autocomplete\"\r\n value={formData.autocomplete}\r\n onChange={(_, newValue) => handleChange(\"autocomplete\")(newValue)}\r\n options={selectOptions}\r\n />\r\n\r\n <AutoCompleteField\r\n name=\"multiautocomplete\"\r\n label=\"Multi Autocomplete\"\r\n value={formData.multiautocomplete}\r\n onChange={(_, newValue) =>\r\n handleChange(\"multiautocomplete\")(newValue)\r\n }\r\n options={selectOptions}\r\n multiple\r\n />\r\n\r\n <ColorPickerField\r\n name=\"color\"\r\n label=\"Color Picker\"\r\n value={formData.color}\r\n onChange={handleChange(\"color\")}\r\n />\r\n\r\n <FileUploadField\r\n name=\"file\"\r\n label=\"File Upload\"\r\n value={formData.file}\r\n onChange={handleChange(\"file\")}\r\n />\r\n\r\n {/* Date/Time */}\r\n <DatePickerField\r\n name=\"date\"\r\n value={formData.date}\r\n onChange={handleChange(\"date\")}\r\n />\r\n <Box>\r\n <TimePickerField\r\n name=\"time\"\r\n value={formData.time}\r\n onChange={handleChange(\"time\")}\r\n />\r\n <Box\r\n sx={{\r\n display: \"grid\",\r\n gridTemplateColumns: { md: \"1fr 1fr\" },\r\n gap: 2,\r\n mt: 2,\r\n }}\r\n >\r\n <CheckBoxFieldGroup\r\n name=\"checkboxgroup\"\r\n label=\"Checkbox Group\"\r\n value={formData.checkboxgroup}\r\n onChange={handleChange(\"checkboxgroup\")}\r\n options={checkboxOptions}\r\n />\r\n <RadioButtonFieldGroup\r\n name=\"radiogroup\"\r\n label=\"Radio Group\"\r\n value={formData.radiogroup}\r\n onChange={handleChange(\"radiogroup\")}\r\n options={radioOptions}\r\n />\r\n </Box>\r\n <Box sx={{ display: \"flex\", gap: 2, mt: 2 }}>\r\n <CheckBoxField\r\n name=\"checkbox\"\r\n label=\"Checkbox\"\r\n value={formData.checkbox}\r\n onChange={handleChange(\"checkbox\")}\r\n />\r\n\r\n <RadioButtonField\r\n name=\"singleradio\"\r\n label=\"Radio\"\r\n value={formData.singleradio}\r\n onChange={handleChange(\"singleradio\")}\r\n />\r\n <SwitchField\r\n name=\"switch\"\r\n label=\"Switch\"\r\n value={formData.switch}\r\n onChange={handleChange(\"switch\")}\r\n />\r\n </Box>\r\n </Box>\r\n <Box\r\n sx={{ border: 1, borderColor: \"grey.300\", borderRadius: 1, p: 2 }}\r\n >\r\n <TimeClockField\r\n name=\"timeclock\"\r\n label=\"Time Clock\"\r\n value={formData.timeclock}\r\n onChange={handleChange(\"timeclock\")}\r\n />\r\n </Box>\r\n\r\n <Box\r\n sx={{ border: 1, borderColor: \"grey.300\", borderRadius: 1, p: 2 }}\r\n >\r\n <DateCalendarField\r\n name=\"calendar\"\r\n label=\"Calendar\"\r\n value={formData.calendar}\r\n onChange={handleChange(\"calendar\")}\r\n />\r\n </Box>\r\n\r\n {/* Box Inputs */}\r\n\r\n <SliderField\r\n name=\"slider\"\r\n label=\"Slider\"\r\n value={formData.slider}\r\n onChange={handleChange(\"slider\")}\r\n min={0}\r\n max={100}\r\n />\r\n\r\n <Box\r\n sx={{\r\n gridColumn: { xs: \"1\", md: \"1 / -1\" },\r\n display: \"flex\",\r\n gap: 2,\r\n justifyContent: \"flex-end\",\r\n }}\r\n >\r\n <Button\r\n variant=\"outlined\"\r\n onClick={() =>\r\n setFormData({\r\n text: \"\",\r\n textarea: \"\",\r\n password: \"\",\r\n number: \"\",\r\n tel: \"\",\r\n search: \"\",\r\n otp: \"\",\r\n select: \"\",\r\n multiselect: [],\r\n autocomplete: null,\r\n multiautocomplete: [],\r\n color: \"#000000\",\r\n file: null,\r\n date: null,\r\n time: null,\r\n timeclock: null,\r\n calendar: null,\r\n checkbox: false,\r\n checkboxgroup: [],\r\n switch: false,\r\n slider: 0,\r\n singleradio: false,\r\n radiogroup: \"\",\r\n })\r\n }\r\n >\r\n Reset\r\n </Button>\r\n <Button type=\"submit\" variant=\"contained\">\r\n Submit\r\n </Button>\r\n </Box>\r\n </Box>\r\n </form>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default NormalForm;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// import { zodResolver } from '@hookform/resolvers/zod';\r\nimport { Box, Button, Divider, Paper, Typography } from \"@mui/material\";\r\nimport { useForm, type Control } from \"react-hook-form\";\r\nimport React from \"react\";\r\n// import * as z from 'zod';\r\nimport {\r\n\tFormInputAutoComplete,\r\n\tFormInputCalendar,\r\n\tFormInputCheckBox,\r\n\tFormInputCheckBoxGroup,\r\n\tFormInputColorPicker,\r\n\tFormInputDatePicker,\r\n\tFormInputFileUpload,\r\n\tFormInputMultiAutoComplete,\r\n\tFormInputMultiSelect,\r\n\tFormInputNumberField,\r\n\tFormInputOTPField,\r\n\tFormInputPasswordField,\r\n\tFormInputRadioButtonGroup,\r\n\tFormInputSearchField,\r\n\tFormInputSelect,\r\n\tFormInputSingleRadio,\r\n\tFormInputSlider,\r\n\tFormInputSwitch,\r\n\tFormInputTelField,\r\n\tFormInputTextArea,\r\n\tFormInputTextField,\r\n\tFormInputTimeClock,\r\n\tFormInputTimePicker,\r\n} from \"../HookFormFields\";\r\n\r\ninterface FormData {\r\n\ttext: string;\r\n\ttextarea: string;\r\n\tpassword: string;\r\n\tnumber: string;\r\n\ttel: string;\r\n\tsearch: string;\r\n\totp: string;\r\n\tselect: string;\r\n\tmultiselect: (string | number)[];\r\n\tautocomplete: any;\r\n\tmultiautocomplete: any[];\r\n\tcolor: string;\r\n\tfile: File | File[] | null;\r\n\tdate: Date | null;\r\n\ttime: Date | null;\r\n\ttimeclock: Date | null;\r\n\tcalendar: Date | null;\r\n\tcheckbox: boolean;\r\n\tcheckboxgroup: (string | number)[];\r\n\tswitch: boolean;\r\n\tslider: number;\r\n\tsingleradio: boolean;\r\n\tradiogroup: string;\r\n}\r\n\r\ntype FormControl = {\r\n\tcontrol: Control<any>;\r\n\thandleSubmit: (e: (data: FormData) => void) => (e?: any) => Promise<void>;\r\n\tformState: {\r\n\t\terrors: Record<string, any>;\r\n\t};\r\n\treset: () => void;\r\n};\r\nconst size = \"small\";\r\n\r\n// const schema = z.object({\r\n// text: z.string().min(3, { message: 'Text must be at least 3 characters' }),\r\n// textarea: z.string().min(10, { message: 'Description must be at least 10 characters' }),\r\n// password: z.string().min(6, { message: 'Password must be at least 6 characters' }),\r\n// number: z.string().min(1, { message: 'Number is required' }),\r\n// tel: z.string().min(10, { message: 'Phone number must be at least 10 characters' }),\r\n// search: z.string().min(3, { message: 'Search term must be at least 3 characters' }),\r\n// otp: z.string().min(4, { message: 'OTP must be at least 4 characters' }),\r\n// select: z.string().min(1, { message: 'Please select an option' }),\r\n// multiselect: z.array(z.union([z.string(), z.number()])).min(1, { message: 'Select at least one option' }),\r\n// autocomplete: z.any().refine((val) => val, { message: 'Please select an option' }),\r\n// multiautocomplete: z.array(z.any()).min(1, { message: 'Select at least one option' }),\r\n// color: z.string().min(1, { message: 'Color is required' }),\r\n// file: z.any().refine((val) => val, { message: 'File is required' }),\r\n// date: z\r\n// .date()\r\n// .nullable()\r\n// .refine((val) => val !== null, { message: 'Date is required' }),\r\n// time: z\r\n// .date()\r\n// .nullable()\r\n// .refine((val) => val !== null, { message: 'Time is required' }),\r\n// timeclock: z\r\n// .date()\r\n// .nullable()\r\n// .refine((val) => val !== null, { message: 'Time is required' }),\r\n// calendar: z\r\n// .date()\r\n// .nullable()\r\n// .refine((val) => val !== null, { message: 'Date is required' }),\r\n// checkbox: z.boolean().refine((val) => val === true, { message: 'Must be checked' }),\r\n// checkboxgroup: z.array(z.union([z.string(), z.number()])).min(1, { message: 'Select at least one option' }),\r\n// switch: z.boolean().refine((val) => val === true, { message: 'Must be switched on' }),\r\n// slider: z.number().min(1, { message: 'Value must be greater than 0' }),\r\n// singleradio: z.boolean().refine((val) => val === true, { message: 'Must be selected' }),\r\n// radiogroup: z.string().min(1, { message: 'Please select an option' }),\r\n// });\r\n\r\nconst ReactHookForm = () => {\r\n\tconst {\r\n\t\tcontrol,\r\n\t\thandleSubmit,\r\n\t\tformState: { errors },\r\n\t\treset,\r\n\t}: FormControl = useForm<any>({\r\n\t\tdefaultValues: {\r\n\t\t\ttext: \"\",\r\n\t\t\ttextarea: \"\",\r\n\t\t\tpassword: \"\",\r\n\t\t\tnumber: \"\",\r\n\t\t\ttel: \"\",\r\n\t\t\tsearch: \"\",\r\n\t\t\totp: \"\",\r\n\t\t\tselect: \"\",\r\n\t\t\tmultiselect: [],\r\n\t\t\tautocomplete: null,\r\n\t\t\tmultiautocomplete: [],\r\n\t\t\tcolor: \"\",\r\n\t\t\tfile: null,\r\n\t\t\tdate: null,\r\n\t\t\ttime: null,\r\n\t\t\ttimeclock: null,\r\n\t\t\tcalendar: null,\r\n\t\t\tcheckbox: false,\r\n\t\t\tcheckboxgroup: [],\r\n\t\t\tswitch: false,\r\n\t\t\tslider: 0,\r\n\t\t\tsingleradio: false,\r\n\t\t\tradiogroup: \"\",\r\n\t\t},\r\n\t\t// resolver: zodResolver(schema),\r\n\t});\r\n\r\n\t// Options for dropdowns\r\n\tconst selectOptions = [\r\n\t\t{ name: \"Option 1\", value: \"opt1\" },\r\n\t\t{ name: \"Option 2\", value: \"opt2\" },\r\n\t\t{ name: \"Option 3\", value: \"opt3\" },\r\n\t];\r\n\r\n\tconst checkboxOptions = [\r\n\t\t{ name: \"Checkbox 1\", value: \"check1\" },\r\n\t\t{ name: \"Checkbox 2\", value: \"check2\" },\r\n\t\t{ name: \"Checkbox 3\", value: \"check3\" },\r\n\t];\r\n\r\n\tconst radioOptions = [\r\n\t\t{ name: \"Radio 1\", value: \"radio1\" },\r\n\t\t{ name: \"Radio 2\", value: \"radio2\" },\r\n\t\t{ name: \"Radio 3\", value: \"radio3\" },\r\n\t];\r\n\r\n\tconst onSubmit = (data: FormData) => {\r\n\t\tconsole.log(\"React Hook Form Data:\", data);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Paper sx={{ p: 3, maxWidth: 1200, mx: \"auto\" }}>\r\n\t\t\t<Typography\r\n\t\t\t\tvariant=\"h4\"\r\n\t\t\t\tgutterBottom\r\n\t\t\t>\r\n\t\t\t\tReact Hook Form (HookFormFields)\r\n\t\t\t</Typography>\r\n\t\t\t<Typography\r\n\t\t\t\tvariant=\"body2\"\r\n\t\t\t\tcolor=\"text.secondary\"\r\n\t\t\t\tgutterBottom\r\n\t\t\t>\r\n\t\t\t\tUsing HookFormFields with react-hook-form\r\n\t\t\t</Typography>\r\n\t\t\t<Divider sx={{ my: 2 }} />\r\n\r\n\t\t\t<form onSubmit={handleSubmit(onSubmit)}>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr\", md: \"repeat(3, 1fr)\" },\r\n\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n\t\t\t\t\t\t{/* Text Inputs */}\r\n\t\t\t\t\t\t<FormInputTextField\r\n\t\t\t\t\t\t\tname=\"text\"\r\n\t\t\t\t\t\t\tlabel=\"Text Field\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<FormInputPasswordField\r\n\t\t\t\t\t\t\tname=\"password\"\r\n\t\t\t\t\t\t\tlabel=\"Password\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<FormInputTextArea\r\n\t\t\t\t\t\tname=\"textarea\"\r\n\t\t\t\t\t\tlabel=\"Text Area\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\trows={4}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n\t\t\t\t\t\t<FormInputNumberField\r\n\t\t\t\t\t\t\tname=\"number\"\r\n\t\t\t\t\t\t\tlabel=\"Number\"\r\n\t\t\t\t\t\t\tpattern=\"zip-code\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t\t<FormInputTelField\r\n\t\t\t\t\t\t\tname=\"tel\"\r\n\t\t\t\t\t\t\tlabel=\"Telephone\"\r\n\t\t\t\t\t\t\tpattern=\"XX-XXX-XXXXXX-X-XX\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<FormInputSearchField\r\n\t\t\t\t\t\tname=\"search\"\r\n\t\t\t\t\t\tlabel=\"Search\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputOTPField\r\n\t\t\t\t\t\tname=\"otp\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tspacing={2}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{/* Dropdowns */}\r\n\t\t\t\t\t<FormInputSelect\r\n\t\t\t\t\t\tname=\"select\"\r\n\t\t\t\t\t\tlabel=\"Select\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\toptions={selectOptions}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputMultiSelect\r\n\t\t\t\t\t\tname=\"multiselect\"\r\n\t\t\t\t\t\tlabel=\"Multi Select\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\toptions={selectOptions}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputAutoComplete\r\n\t\t\t\t\t\tname=\"autocomplete\"\r\n\t\t\t\t\t\tlabel=\"Autocomplete\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\toptions={selectOptions}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputMultiAutoComplete\r\n\t\t\t\t\t\tname=\"multiautocomplete\"\r\n\t\t\t\t\t\tlabel=\"Multi Autocomplete\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\toptions={selectOptions}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputColorPicker\r\n\t\t\t\t\t\tname=\"color\"\r\n\t\t\t\t\t\tlabel=\"Color Picker\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<FormInputFileUpload\r\n\t\t\t\t\t\tname=\"file\"\r\n\t\t\t\t\t\tlabel=\"File Upload\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{/* Date/Time */}\r\n\t\t\t\t\t<FormInputDatePicker\r\n\t\t\t\t\t\tname=\"date\"\r\n\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<FormInputTimePicker\r\n\t\t\t\t\t\t\tname=\"time\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\tgridTemplateColumns: { md: \"1fr 1fr\" },\r\n\t\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\t\tmt: 2,\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<FormInputCheckBoxGroup\r\n\t\t\t\t\t\t\t\tname=\"checkboxgroup\"\r\n\t\t\t\t\t\t\t\tlabel=\"Select Options\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\toptions={checkboxOptions}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<FormInputRadioButtonGroup\r\n\t\t\t\t\t\t\t\tname=\"radiogroup\"\r\n\t\t\t\t\t\t\t\tlabel=\"Radio Group\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\toptions={radioOptions}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 2, mt: 2 }}>\r\n\t\t\t\t\t\t\t<FormInputCheckBox\r\n\t\t\t\t\t\t\t\tname=\"checkbox\"\r\n\t\t\t\t\t\t\t\tlabel=\"Checkbox\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<FormInputSingleRadio\r\n\t\t\t\t\t\t\t\tname=\"singleradio\"\r\n\t\t\t\t\t\t\t\tlabel=\"Radio\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<FormInputSwitch\r\n\t\t\t\t\t\t\t\tname=\"switch\"\r\n\t\t\t\t\t\t\t\tlabel=\"Switch\"\r\n\t\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ border: 1, borderColor: \"grey.300\", borderRadius: 1, p: 2 }}>\r\n\t\t\t\t\t\t<FormInputTimeClock\r\n\t\t\t\t\t\t\tname=\"timeclock\"\r\n\t\t\t\t\t\t\tlabel=\"Time Clock\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ border: 1, borderColor: \"grey.300\", borderRadius: 1, p: 2 }}>\r\n\t\t\t\t\t\t<FormInputCalendar\r\n\t\t\t\t\t\t\tname=\"calendar\"\r\n\t\t\t\t\t\t\tlabel=\"Calendar\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t{/* Box Inputs */}\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<FormInputSlider\r\n\t\t\t\t\t\t\tname=\"slider\"\r\n\t\t\t\t\t\t\tlabel=\"Slider\"\r\n\t\t\t\t\t\t\tcontrol={control}\r\n\t\t\t\t\t\t\tsize={size}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tgridColumn: { xs: \"1\", md: \"1 / -1\" },\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\tjustifyContent: \"flex-end\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={() => reset()}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tReset\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tSubmit\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t</form>\r\n\t\t</Paper>\r\n\t);\r\n};\r\n\r\nexport default ReactHookForm;\r\n","// HookFormFields Imports\r\nimport {\r\n\tFormInputTextField,\r\n\tFormInputTextArea,\r\n\tFormInputPasswordField,\r\n\tFormInputNumberField,\r\n\tFormInputTelField,\r\n\tFormInputSearchField,\r\n\tFormInputOTPField,\r\n\tFormInputSelect,\r\n\tFormInputMultiSelect,\r\n\tFormInputAutoComplete,\r\n\tFormInputMultiAutoComplete,\r\n\tFormInputColorPicker,\r\n\tFormInputFileUpload,\r\n\tFormInputDatePicker,\r\n\tFormInputTimePicker,\r\n\tFormInputTimeClock,\r\n\tFormInputCalendar,\r\n\tFormInputCheckBox,\r\n\tFormInputCheckBoxGroup,\r\n\tFormInputSwitch,\r\n\tFormInputSlider,\r\n\tFormInputSingleRadio,\r\n\tFormInputRadioButtonGroup,\r\n} from \"./pkg/HookFormFields\";\r\n\r\nimport type {\r\n\tIFormInputFields,\r\n\tIFormInputFieldsWithOptions,\r\n\tIFormInputDateFields,\r\n\tIFormInputNumberFields,\r\n\tIFormInputTextAreaFields,\r\n\tIFormInputRadioFields,\r\n\tIFormInputCheckBoxGroupFields,\r\n\tOption,\r\n} from \"./pkg/HookFormFields\";\r\n\r\n// FormFields Imports\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\n\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\n\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\n\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\nimport NormalForm from \"./pkg/FormBuild/Form\";\r\nimport ReactHookForm from \"./pkg/FormBuild/HookForm\";\r\n\r\nexport { NormalForm as DemoForm, ReactHookForm as DemoHookForm };\r\n// Named Exports\r\nexport {\r\n\t// HookFormFields\r\n\tFormInputTextField,\r\n\tFormInputTextArea,\r\n\tFormInputPasswordField,\r\n\tFormInputNumberField,\r\n\tFormInputTelField,\r\n\tFormInputSearchField,\r\n\tFormInputOTPField,\r\n\tFormInputSelect,\r\n\tFormInputMultiSelect,\r\n\tFormInputAutoComplete,\r\n\tFormInputMultiAutoComplete,\r\n\tFormInputColorPicker,\r\n\tFormInputFileUpload,\r\n\tFormInputDatePicker,\r\n\tFormInputTimePicker,\r\n\tFormInputTimeClock,\r\n\tFormInputCalendar,\r\n\tFormInputCheckBox,\r\n\tFormInputCheckBoxGroup,\r\n\tFormInputSwitch,\r\n\tFormInputSlider,\r\n\tFormInputSingleRadio,\r\n\tFormInputRadioButtonGroup,\r\n\t// FormFields\r\n\tTextInputField,\r\n\tPasswordField,\r\n\tNumberField,\r\n\tTelInputField,\r\n\tSearchInputField,\r\n\tOTPField,\r\n\tSelectInputField,\r\n\tAutoCompleteField,\r\n\tColorPickerField,\r\n\tFileUploadField,\r\n\tDatePickerField,\r\n\tTimePickerField,\r\n\tTimeClockField,\r\n\tDateCalendarField,\r\n\tCheckBoxField,\r\n\tCheckBoxFieldGroup,\r\n\tRadioButtonField,\r\n\tRadioButtonFieldGroup,\r\n\tSwitchField,\r\n\tSliderField,\r\n};\r\n\r\n// Type Exports\r\nexport type {\r\n\tIFormInputFields,\r\n\tIFormInputFieldsWithOptions,\r\n\tIFormInputDateFields,\r\n\tIFormInputNumberFields,\r\n\tIFormInputTextAreaFields,\r\n\tIFormInputRadioFields,\r\n\tIFormInputCheckBoxGroupFields,\r\n\tOption,\r\n};\r\n\r\n// Default Export\r\nconst FormFields = {\r\n\t// HookFormFields\r\n\tFormInputTextField,\r\n\tFormInputTextArea,\r\n\tFormInputPasswordField,\r\n\tFormInputNumberField,\r\n\tFormInputTelField,\r\n\tFormInputSearchField,\r\n\tFormInputOTPField,\r\n\tFormInputSelect,\r\n\tFormInputMultiSelect,\r\n\tFormInputAutoComplete,\r\n\tFormInputMultiAutoComplete,\r\n\tFormInputColorPicker,\r\n\tFormInputFileUpload,\r\n\tFormInputDatePicker,\r\n\tFormInputTimePicker,\r\n\tFormInputTimeClock,\r\n\tFormInputCalendar,\r\n\tFormInputCheckBox,\r\n\tFormInputCheckBoxGroup,\r\n\tFormInputSwitch,\r\n\tFormInputSlider,\r\n\tFormInputSingleRadio,\r\n\tFormInputRadioButtonGroup,\r\n\t// FormFields\r\n\tTextInputField,\r\n\tPasswordField,\r\n\tNumberField,\r\n\tTelInputField,\r\n\tSearchInputField,\r\n\tOTPField,\r\n\tSelectInputField,\r\n\tAutoCompleteField,\r\n\tColorPickerField,\r\n\tFileUploadField,\r\n\tDatePickerField,\r\n\tTimePickerField,\r\n\tTimeClockField,\r\n\tDateCalendarField,\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"],"mappings":"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AQ,cAAe,SAAU,IAAK,GAAI,EAC7D,UAAAhB,GAACoB,GAAA,CACA,KAAK,SACL,MAAM,SACN,QAAQ,WACR,QAAShB,EACT,KAAMF,GACP,EAEAF,GAACqB,GAAA,CACA,KAAK,MACL,MAAM,YACN,QAAQ,qBACR,QAASjB,EACT,KAAMF,GACP,GACD,EACAF,GAACsB,GAAA,CACA,KAAK,SACL,MAAM,SACN,QAASlB,EACT,KAAMF,GACP,EAEAF,GAACuB,GAAA,CACA,KAAK,MACL,QAASnB,EACT,QAAS,EACT,KAAMF,GACP,EAGAF,GAACwB,GAAA,CACA,KAAK,SACL,MAAM,SACN,QAASpB,EACT,QAASK,EACT,KAAMP,GACP,EAEAF,GAACyB,GAAA,CACA,KAAK,cACL,MAAM,eACN,QAASrB,EACT,QAASK,EACT,KAAMP,GACP,EAEAF,GAAC0B,GAAA,CACA,KAAK,eACL,MAAM,eACN,QAAStB,EACT,QAASK,EACT,KAAMP,GACP,EAEAF,GAAC2B,GAAA,CACA,KAAK,oBACL,MAAM,qBACN,QAASvB,EACT,QAASK,EACT,KAAMP,GACP,EAEAF,GAAC4B,GAAA,CACA,KAAK,QACL,MAAM,eACN,QAASxB,EACT,KAAMF,GACP,EAEAF,GAAC6B,GAAA,CACA,KAAK,OACL,MAAM,cACN,QAASzB,EACT,KAAMF,GACP,EAGAF,GAAC8B,GAAA,CACA,KAAK,OACL,QAAS1B,EACT,KAAMF,GACP,EAEAD,GAACe,GAAA,CACA,UAAAhB,GAAC+B,GAAA,CACA,KAAK,OACL,QAAS3B,EACT,KAAMF,GACP,EACAD,GAACe,GAAA,CACA,GAAI,CACH,QAAS,OACT,oBAAqB,CAAE,GAAI,SAAU,EACrC,IAAK,EACL,GAAI,CACL,EAEA,UAAAhB,GAACgC,GAAA,CACA,KAAK,gBACL,MAAM,iBACN,QAAS5B,EACT,QAASM,EACT,KAAMR,GACP,EACAF,GAACiC,GAAA,CACA,KAAK,aACL,MAAM,cACN,QAAS7B,EACT,QAASO,EACT,KAAMT,GACP,GACD,EACAD,GAACe,GAAA,CAAI,GAAI,CAAE,QAAS,OAAQ,IAAK,EAAG,GAAI,CAAE,EACzC,UAAAhB,GAACkC,GAAA,CACA,KAAK,WACL,MAAM,WACN,QAAS9B,EACT,KAAMF,GACP,EACAF,GAACmC,GAAA,CACA,KAAK,cACL,MAAM,QACN,QAAS/B,EACT,KAAMF,GACP,EACAF,GAACoC,GAAA,CACA,KAAK,SACL,MAAM,SACN,QAAShC,EACT,KAAMF,GACP,GACD,GACD,EACAF,GAACgB,GAAA,CAAI,GAAI,CAAE,OAAQ,EAAG,YAAa,WAAY,aAAc,EAAG,EAAG,CAAE,EACpE,SAAAhB,GAACqC,GAAA,CACA,KAAK,YACL,MAAM,aACN,QAASjC,EACT,KAAMF,GACP,EACD,EACAF,GAACgB,GAAA,CAAI,GAAI,CAAE,OAAQ,EAAG,YAAa,WAAY,aAAc,EAAG,EAAG,CAAE,EACpE,SAAAhB,GAACsC,GAAA,CACA,KAAK,WACL,MAAM,WACN,QAASlC,EACT,KAAMF,GACP,EACD,EAEAF,GAACgB,GAAA,CACA,SAAAhB,GAACuC,GAAA,CACA,KAAK,SACL,MAAM,SACN,QAASnC,EACT,KAAMF,GACP,EACD,EACAD,GAACe,GAAA,CACA,GAAI,CACH,WAAY,CAAE,GAAI,IAAK,GAAI,QAAS,EACpC,QAAS,OACT,IAAK,EACL,eAAgB,UACjB,EAEA,UAAAhB,GAACwC,GAAA,CACA,QAAQ,WACR,QAAS,IAAMjC,EAAM,EACrB,iBAED,EACAP,GAACwC,GAAA,CACA,KAAK,SACL,QAAQ,YACR,kBAED,GACD,GACD,EACD,GACD,CAEF,EAEOC,GAAQtC,GC9Qf,IAAMuC,GAAa,CAElB,mBAAAC,GACA,kBAAAC,GACA,uBAAAC,GACA,qBAAAC,GACA,kBAAAC,GACA,qBAAAC,GACA,kBAAAC,GACA,gBAAAC,GACA,qBAAAC,GACA,sBAAAC,GACA,2BAAAC,GACA,qBAAAC,GACA,oBAAAC,GACA,oBAAAC,GACA,oBAAAC,GACA,mBAAAC,GACA,kBAAAC,GACA,kBAAAC,GACA,uBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,qBAAAC,GACA,0BAAAC,GAEA,eAAAC,GACA,cAAAC,GACA,YAAAC,GACA,cAAAC,GACA,iBAAAC,GACA,SAAAC,GACA,iBAAAC,GACA,kBAAAC,GACA,iBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,gBAAAC,GACA,eAAAC,GACA,kBAAAC,GACA,cAAAC,GACA,mBAAAC,GACA,iBAAAC,GACA,sBAAAC,GACA,YAAAC,GACA,YAAAC,EACD,EAEOC,GAAQ5C","names":["memo","Controller","FormControl","InputAdornment","TextField","forwardRef","memo","useCallback","useMemo","jsx","TextInputField","memo","forwardRef","_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","useCallback","event","inputProps","useMemo","__spreadValues","startAdornmentElement","InputAdornment","endAdornmentElement","finalSlotProps","__spreadProps","finalInputStyles","displayHelperText","FormControl","TextField","TextInputField_default","jsx","FormInputTextField","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","TextInputField_default","__spreadProps","__spreadValues","e","FormInputTextField_default","memo","Controller","jsx","FormInputTextArea","memo","_a","_b","name","label","control","rows","minRows","maxRows","resize","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","TextInputField_default","__spreadProps","__spreadValues","e","FormInputTextArea_default","memo","Controller","Visibility","VisibilityOff","FormControl","FormHelperText","IconButton","InputAdornment","TextField","forwardRef","useState","memo","useCallback","useMemo","jsx","jsxs","calculatePasswordStrength","password","strength","getPasswordStrengthColor","PasswordField","memo","forwardRef","_a","ref","_b","name","label","value","onChange","onFocus","onBlur","onVisibilityToggle","error","helperText","disabled","placeholder","variant","size","color","fullWidth","required","showPasswordStrength","minLength","maxLength","defaultShowPassword","visibilityIcon","Visibility","visibilityOffIcon","VisibilityOff","iconButtonProps","getPasswordStrength","inputStyles","formControlStyles","slotProps","slots","textFieldProps","__objRest","showPassword","setShowPassword","useState","togglePasswordVisibility","useCallback","prev","newVisibility","passwordStrength","useMemo","getStrengthIndicator","strengthColor","strengthText","handleChange","event","newValue","endAdornmentElement","InputAdornment","IconButton","__spreadProps","__spreadValues","e","finalSlotProps","displayHelperText","FormControl","TextField","FormHelperText","PasswordField_default","jsx","FormInputPasswordField","memo","_a","_b","name","label","control","size","defaultValue","onChange","props","__objRest","Controller","field","error","sizeProp","restProps","PasswordField_default","__spreadProps","__spreadValues","e","FormInputPasswordField_default","memo","Controller","FormControl","InputAdornment","TextField","forwardRef","useState","useEffect","useCallback","memo","useMemo","jsx","extractDigits","value","formatByPattern","digits","pattern","formatted","digitIndex","i","generatePlaceholderFromPattern","formatPhoneNumber","numbers","formatCreditCard","_a","formatCurrency","allowDecimals","parts","formatSSN","formatZipCode","formatPercentage","NumberField","memo","forwardRef","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","useState","isPatternString","activePatternString","activePatternType","formatValue","useCallback","inputValue","useEffect","prev","isValidInput","key","maxDigits","testValue","handleChange","event","formattedValue","digitsOnly","syntheticEvent","__spreadProps","__spreadValues","handlePaste","pastedText","limitedDigits","handleKeyDown","input","currentValue","inputProps","useMemo","startAdornmentElement","InputAdornment","endAdornmentElement","finalSlotProps","inputType","displayPlaceholder","displayHelperText","FormControl","TextField","NumberField_default","jsx","FormInputNumberField","memo","_a","_b","name","label","control","pattern","min","max","step","allowDecimals","decimalPlaces","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","NumberField_default","__spreadProps","__spreadValues","e","FormInputNumberField_default","memo","Controller","FormControl","InputAdornment","TextField","forwardRef","useState","useEffect","useRef","memo","useCallback","useMemo","jsx","extractDigits","value","formatByPattern","digits","pattern","formatted","digitIndex","i","generatePlaceholder","TeliField","memo","forwardRef","_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","useState","inputRef","useRef","calculatedMaxLength","useEffect","prev","cursorPosition","handleChange","useCallback","event","inputValue","limitedDigits","formattedValue","syntheticEvent","__spreadProps","__spreadValues","handlePaste","pastedText","handleKeyDown","key","isNumber","isAllowedKey","inputProps","useMemo","finalStartAdornment","InputAdornment","endAdornmentElement","finalSlotProps","displayPlaceholder","displayHelperText","FormControl","TextField","TelInputField_default","jsx","FormInputTelField","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","TelInputField_default","__spreadProps","__spreadValues","e","FormInputTelField_default","memo","Controller","Close","Search","FormControl","IconButton","InputAdornment","TextField","forwardRef","useEffect","useRef","memo","useCallback","useMemo","jsx","jsxs","SearchField","memo","forwardRef","_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","useRef","throttleTimerRef","lastThrottleCallRef","useEffect","debouncedSearch","useCallback","searchVal","throttledSearch","now","timeSinceLastCall","handleChange","event","newValue","handleClear","handleSearch","handleKeyDown","endAdornment","useMemo","InputAdornment","IconButton","__spreadProps","__spreadValues","Close","Search","displayHelperText","FormControl","TextField","SearchInputField_default","jsx","FormInputSearchField","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","SearchInputField_default","__spreadProps","__spreadValues","e","FormInputSearchField_default","memo","Controller","FormControl","FormHelperText","TextField","Box","forwardRef","useState","useRef","useEffect","jsx","jsxs","OTPField","forwardRef","_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","useState","inputRefs","useRef","lastSentValueRef","isInternalUpdateRef","otpValuesRef","inputSessionActiveRef","inputSessionTimeoutRef","useEffect","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","FormControl","Box","__spreadValues","otpValue","TextField","el","e","__spreadProps","FormHelperText","OTPField_default","jsx","FormInputOTPField","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","OTPField_default","__spreadProps","__spreadValues","value","FormInputOTPField_default","memo","useMemo","Controller","FormControl","FormHelperText","InputLabel","MenuItem","Select","forwardRef","jsx","jsxs","SelectInputField","forwardRef","_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","MenuItem","handleChange","event","child","labelId","selectId","FormControl","InputLabel","Select","__spreadProps","__spreadValues","FormHelperText","SelectInputField_default","jsx","FormInputSelect","memo","_a","_b","name","label","control","options","defaultValue","onChange","props","__objRest","memoizedOptions","useMemo","Controller","field","error","size","restProps","SelectInputField_default","__spreadProps","__spreadValues","e","FormInputSelect_default","memo","useMemo","Controller","jsx","FormInputMultiSelect","memo","_a","_b","name","label","control","options","defaultValue","onChange","props","__objRest","memoizedOptions","useMemo","Controller","field","error","size","restProps","fieldValue","SelectInputField_default","__spreadProps","__spreadValues","e","FormInputMultiSelect_default","memo","Controller","Autocomplete","FormControl","FormHelperText","TextField","forwardRef","memo","useCallback","jsx","jsxs","AutoCompleteField","memo","forwardRef","_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","useCallback","option","defaultIsOptionEqualToValue","handleChange","event","newValue","reason","FormControl","Autocomplete","__spreadProps","__spreadValues","params","TextField","FormHelperText","AutoCompleteField_default","jsx","FormInputAutoComplete","memo","_a","_b","name","label","control","options","disabled","placeholder","defaultValue","onChange","props","__objRest","Controller","field","error","value","onBlur","size","restProps","AutoCompleteField_default","__spreadProps","__spreadValues","_","newValue","FormInputAutoComplete_default","memo","useMemo","Controller","jsx","FormInputMultiAutoComplete","memo","_a","_b","name","label","control","options","disabled","placeholder","defaultValue","onChange","props","__objRest","memoizedOptions","useMemo","Controller","field","error","value","onBlur","size","restProps","fieldValue","AutoCompleteField_default","__spreadProps","__spreadValues","_","newValue","FormInputMultiAutoComplete_default","memo","Controller","Box","FormControl","InputAdornment","TextField","forwardRef","memo","useCallback","useEffect","useMemo","useRef","useState","jsx","jsxs","isValidHex","color","normalizeHex","hex","char","ColorPickerField","memo","forwardRef","_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","useState","colorInputRef","useRef","popoverAnchorRef","useEffect","normalizedValue","handleChange","useCallback","event","newValue","handleColorInputChange","handlePreviewClick","handleKeyDown","previewSwatch","useMemo","jsx","InputAdornment","Box","__spreadValues","finalSlotProps","__spreadProps","displayHelperText","jsxs","FormControl","TextField","ColorPickerField_default","jsx","FormInputColorPicker","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","ColorPickerField_default","__spreadProps","__spreadValues","color","FormInputColorPicker_default","memo","useRef","Controller","Clear","CloudUploadIcon","FormControl","FormHelperText","IconButton","InputAdornment","TextField","forwardRef","useRef","useState","jsx","jsxs","FileUploadField","forwardRef","_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","useRef","isDragging","setIsDragging","useState","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","FormControl","TextField","__spreadProps","__spreadValues","InputAdornment","IconButton","Clear","FormHelperText","FileUploadField_default","jsx","FormInputFileUpload","memo","_a","_b","name","label","control","size","defaultValue","onChange","props","__objRest","fileRef","useRef","Controller","field","error","FileUploadField_default","__spreadProps","__spreadValues","files","FormInputFileUpload_default","memo","Controller","ClearIcon","Box","FormControl","FormHelperText","FormLabel","IconButton","TextField","DatePicker","LocalizationProvider","AdapterDateFns","React","forwardRef","useRef","jsx","jsxs","DatePickerField","forwardRef","_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","title","dateAdapter","AdapterDateFns","reduceAnimations","autoFocus","datePickerProps","__objRest","inputRef","useRef","handleChange","newValue","handleClear","defaultPlaceholder","mergedSlotProps","__spreadProps","__spreadValues","FormControl","FormLabel","Box","LocalizationProvider","DatePicker","ActionableTextField","FormHelperText","props","clearable","onClear","showClear","InputProps","other","TextField","React","IconButton","ClearIcon","DatePickerField_default","jsx","FormInputDatePicker","memo","_a","_b","name","label","control","size","readOnly","shouldDisableDate","disabled","placeholder","defaultValue","onChange","props","__objRest","Controller","field","error","views","ampm","ampmInClock","timezone","restProps","DatePickerField_default","__spreadProps","__spreadValues","newValue","FormInputDatePicker_default","memo","Controller","ClearIcon","Box","FormControl","FormHelperText","FormLabel","IconButton","TextField","LocalizationProvider","TimePicker","AdapterDateFns","React","forwardRef","useRef","jsx","jsxs","TimePickerField","forwardRef","_a","ref","_b","name","label","title","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","AdapterDateFns","autoFocus","timePickerProps","__objRest","inputRef","useRef","handleChange","newValue","handleClear","defaultPlaceholder","mergedSlotProps","__spreadProps","__spreadValues","FormControl","FormLabel","Box","LocalizationProvider","TimePicker","ActionableTextField","FormHelperText","props","clearable","onClear","showClear","InputProps","other","TextField","React","IconButton","ClearIcon","TimePickerField_default","jsx","FormInputTimePicker","memo","_a","_b","name","label","control","ampm","timezone","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","TimePickerField_default","__spreadProps","__spreadValues","newValue","FormInputTimePicker_default","Box","FormLabel","memo","useMemo","Controller","Box","Button","FormControl","FormHelperText","Stack","LocalizationProvider","TimeClock","AdapterDateFns","forwardRef","useState","jsx","jsxs","TimeClockField","forwardRef","_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","AdapterDateFns","autoFocus","timeClockProps","__objRest","internalView","setInternalView","useState","view","setView","handleChange","newValue","handleViewChange","newView","FormControl","Box","__spreadValues","Stack","v","Button","LocalizationProvider","TimeClock","__spreadProps","FormHelperText","TimeClockField_default","jsx","jsxs","FormInputTimeClock","memo","_a","_b","name","label","control","readOnly","disabled","ampm","views","ampmInClock","disablePast","defaultValue","onChange","props","__objRest","ampmValue","useMemo","Box","t","FormLabel","Controller","field","error","TimeClockField_default","__spreadProps","__spreadValues","newValue","FormInputTimeClock_default","Box","FormLabel","memo","Controller","Box","FormControl","FormHelperText","DateCalendar","LocalizationProvider","AdapterDateFns","forwardRef","jsx","jsxs","DateCalendarField","forwardRef","_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","AdapterDateFns","showDaysOutsideCurrentMonth","disablePast","disableFuture","referenceDate","view","dateCalendarProps","__objRest","handleChange","newValue","FormControl","Box","__spreadValues","LocalizationProvider","DateCalendar","__spreadProps","FormHelperText","DateCalendarField_default","jsx","jsxs","FormInputCalendar","memo","_a","_b","name","label","control","readOnly","disabled","defaultValue","onChange","props","__objRest","Box","t","FormLabel","Controller","field","error","views","restProps","DateCalendarField_default","__spreadProps","__spreadValues","newValue","FormInputCalender_default","memo","Controller","Checkbox","FormControl","FormControlLabel","FormHelperText","forwardRef","jsx","jsxs","CheckboxField","forwardRef","_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","FormControl","FormControlLabel","Checkbox","__spreadProps","__spreadValues","FormHelperText","CheckBoxField_default","jsx","FormInputCheckBox","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","CheckBoxField_default","__spreadProps","__spreadValues","checked","FormInputCheckBox_default","memo","useMemo","Controller","FormControl","FormHelperText","FormLabel","Checkbox","FormControlLabel","Box","forwardRef","jsx","jsxs","CheckboxFieldGroup","forwardRef","_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","FormControlLabel","__spreadValues","Checkbox","FormControl","__spreadProps","FormLabel","Box","changeHandler","FormHelperText","CheckBoxFieldGroup_default","jsx","FormInputCheckBoxGroup","memo","_a","_b","name","label","control","options","defaultValue","onChange","row","color","labelPlacement","props","__objRest","checkboxOptions","useMemo","option","Controller","field","error","size","restProps","fieldValue","CheckBoxFieldGroup_default","__spreadProps","__spreadValues","value","FormInputCheckBoxGroup_default","memo","Controller","FormControl","FormControlLabel","FormHelperText","Switch","forwardRef","jsx","jsxs","SwitchField","forwardRef","_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","Switch","__spreadProps","__spreadValues","FormControl","FormControlLabel","FormHelperText","SwitchField_default","jsx","FormInputSwitch","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","SwitchField_default","__spreadProps","__spreadValues","checked","FormInputSwitch_default","memo","Controller","FormControl","FormHelperText","FormLabel","Slider","forwardRef","jsx","jsxs","SliderField","forwardRef","_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","FormControl","__spreadValues","FormLabel","__spreadProps","Slider","FormHelperText","SliderField_default","jsx","FormInputSlider","memo","_a","_b","name","label","control","defaultValue","onChange","props","__objRest","Controller","field","error","size","restProps","SliderField_default","__spreadProps","__spreadValues","value","FormInputSlider_default","memo","Controller","FormControl","FormControlLabel","FormHelperText","Radio","forwardRef","jsx","jsxs","RadioButtonField","forwardRef","_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","FormControl","FormControlLabel","__spreadValues","Radio","__spreadProps","FormHelperText","RadioButtonField_default","jsx","FormInputRadioButton","memo","_a","_b","name","label","control","checked","defaultValue","onChange","color","labelPlacement","props","__objRest","Controller","field","error","size","restProps","RadioButtonField_default","__spreadProps","__spreadValues","checkedValue","FormInputRadioButton_default","memo","useMemo","Controller","FormControl","FormControlLabel","FormHelperText","FormLabel","Radio","RadioGroup","forwardRef","jsx","jsxs","RadioButtonFieldGroup","forwardRef","_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","FormControlLabel","__spreadProps","__spreadValues","Radio","FormControl","FormLabel","RadioGroup","index","FormHelperText","RadioButtonFieldGroup_default","jsx","FormInputRadioButtonGroup","memo","_a","_b","name","label","control","options","defaultValue","onChange","props","__objRest","memoizedOptions","useMemo","Controller","field","error","size","restProps","RadioButtonFieldGroup_default","__spreadProps","__spreadValues","value","FormInputRadioButtonGroup_default","useState","Box","Paper","Typography","Button","Divider","jsx","jsxs","NormalForm","formData","setFormData","useState","errors","setErrors","selectOptions","checkboxOptions","radioOptions","handleChange","field","value","prev","__spreadProps","__spreadValues","newErrors","Paper","Typography","Divider","e","Box","TextInputField_default","PasswordField_default","NumberField_default","TelInputField_default","SearchInputField_default","OTPField_default","SelectInputField_default","AutoCompleteField_default","_","newValue","ColorPickerField_default","FileUploadField_default","DatePickerField_default","TimePickerField_default","CheckBoxFieldGroup_default","RadioButtonFieldGroup_default","CheckBoxField_default","RadioButtonField_default","SwitchField_default","TimeClockField_default","DateCalendarField_default","SliderField_default","Button","Form_default","Box","Button","Divider","Paper","Typography","useForm","jsx","jsxs","size","ReactHookForm","control","handleSubmit","errors","reset","useForm","selectOptions","checkboxOptions","radioOptions","Paper","Typography","Divider","data","Box","FormInputTextField_default","FormInputPasswordField_default","FormInputTextArea_default","FormInputNumberField_default","FormInputTelField_default","FormInputSearchField_default","FormInputOTPField_default","FormInputSelect_default","FormInputMultiSelect_default","FormInputAutoComplete_default","FormInputMultiAutoComplete_default","FormInputColorPicker_default","FormInputFileUpload_default","FormInputDatePicker_default","FormInputTimePicker_default","FormInputCheckBoxGroup_default","FormInputRadioButtonGroup_default","FormInputCheckBox_default","FormInputRadioButton_default","FormInputSwitch_default","FormInputTimeClock_default","FormInputCalender_default","FormInputSlider_default","Button","HookForm_default","FormFields","FormInputTextField_default","FormInputTextArea_default","FormInputPasswordField_default","FormInputNumberField_default","FormInputTelField_default","FormInputSearchField_default","FormInputOTPField_default","FormInputSelect_default","FormInputMultiSelect_default","FormInputAutoComplete_default","FormInputMultiAutoComplete_default","FormInputColorPicker_default","FormInputFileUpload_default","FormInputDatePicker_default","FormInputTimePicker_default","FormInputTimeClock_default","FormInputCalender_default","FormInputCheckBox_default","FormInputCheckBoxGroup_default","FormInputSwitch_default","FormInputSlider_default","FormInputRadioButton_default","FormInputRadioButtonGroup_default","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"]}
|