import React, { createContext, useContext, useId } from 'react'; import { Box } from '../Box/Box'; import { useStyles, useTheme } from '../../core'; import { Text } from '../Text/Text'; interface FormControlContextType { id: string; isInvalid?: boolean; isDisabled?: boolean; } const FormControlContext = createContext(null); const useFormControl = () => useContext(FormControlContext); interface FormControlProps extends React.ComponentProps> { isInvalid?: boolean; isDisabled?: boolean; } const FormControlRoot: React.FC & { Label: React.FC>>; HelperText: React.FC>>; ErrorMessage: React.FC>>; Message: React.FC>>; } = ({ isInvalid, isDisabled, ...props }) => { const id = useId(); const context = { id, isInvalid, isDisabled }; const createStyle = useStyles('form-control'); const formControlClass = createStyle({ display: 'flex', flexDirection: 'column', gap: '0.25rem', }); return ( ); }; const Label: React.FC>> = (props) => { const context = useFormControl(); const { theme } = useTheme(); return ( ); }; Label.displayName = 'FormControl.Label'; const HelperText: React.FC>> = (props) => { const context = useFormControl(); const { theme } = useTheme(); return ( ); }; HelperText.displayName = 'FormControl.HelperText'; const ErrorMessage: React.FC>> = (props) => { const context = useFormControl(); if (!context?.isInvalid) return null; return ( ); }; ErrorMessage.displayName = 'FormControl.ErrorMessage'; const Message: React.FC>> = (props) => { const context = useFormControl(); const { theme } = useTheme(); return ( ); }; Message.displayName = 'FormControl.Message'; FormControlRoot.Label = Label; FormControlRoot.HelperText = HelperText; FormControlRoot.ErrorMessage = ErrorMessage; FormControlRoot.Message = Message; export const FormControl = FormControlRoot;