diff --git a/.changeset/sweet-owls-do.md b/.changeset/sweet-owls-do.md new file mode 100644 index 00000000000..0c5a55725bd --- /dev/null +++ b/.changeset/sweet-owls-do.md @@ -0,0 +1,5 @@ +--- +"@primer/react": minor +--- + +chore: add styles to formcontrol and subcomponents diff --git a/packages/react/src/FormControl/FormControl.tsx b/packages/react/src/FormControl/FormControl.tsx index ae6f0ff9400..8dea4aadb0d 100644 --- a/packages/react/src/FormControl/FormControl.tsx +++ b/packages/react/src/FormControl/FormControl.tsx @@ -42,10 +42,11 @@ export type FormControlProps = { */ layout?: 'horizontal' | 'vertical' className?: string + style?: React.CSSProperties } & SxProp const FormControl = React.forwardRef( - ({children, disabled: disabledProp, layout = 'vertical', id: idProp, required, sx, className}, ref) => { + ({children, disabled: disabledProp, layout = 'vertical', id: idProp, required, sx, className, style}, ref) => { const [slots, childrenWithoutSlots] = useSlots(children, { caption: FormControlCaption, label: FormControlLabel, @@ -173,6 +174,7 @@ const FormControl = React.forwardRef( data-has-leading-visual={slots.leadingVisual ? '' : undefined} sx={sx} className={clsx(className, classes.ControlHorizontalLayout)} + style={style} > {InputChildren} @@ -182,6 +184,7 @@ const FormControl = React.forwardRef( data-has-label={!isLabelHidden ? '' : undefined} sx={sx} className={clsx(className, classes.ControlVerticalLayout)} + style={style} > {slots.label} {React.isValidElement(InputComponent) && diff --git a/packages/react/src/FormControl/FormControlCaption.tsx b/packages/react/src/FormControl/FormControlCaption.tsx index 862cdc5533d..292200fea73 100644 --- a/packages/react/src/FormControl/FormControlCaption.tsx +++ b/packages/react/src/FormControl/FormControlCaption.tsx @@ -10,10 +10,11 @@ type FormControlCaptionProps = React.PropsWithChildren< { id?: string className?: string + style?: React.CSSProperties } & SxProp > -function FormControlCaption({id, children, sx, className}: FormControlCaptionProps) { +function FormControlCaption({id, children, sx, className, style}: FormControlCaptionProps) { const {captionId, disabled} = useFormControlContext() return ( @@ -23,6 +24,7 @@ function FormControlCaption({id, children, sx, className}: FormControlCaptionPro className={clsx(className, classes.Caption)} data-control-disabled={disabled ? '' : undefined} sx={sx} + style={style} > {children} diff --git a/packages/react/src/FormControl/FormControlLabel.tsx b/packages/react/src/FormControl/FormControlLabel.tsx index 0ac71b80bd9..ff2a3ffe97c 100644 --- a/packages/react/src/FormControl/FormControlLabel.tsx +++ b/packages/react/src/FormControl/FormControlLabel.tsx @@ -12,6 +12,7 @@ export type Props = { requiredIndicator?: boolean id?: string className?: string + style?: React.CSSProperties } & SxProp const FormControlLabel: React.FC< diff --git a/packages/react/src/FormControl/FormControlLeadingVisual.tsx b/packages/react/src/FormControl/FormControlLeadingVisual.tsx index 3f2a86ef277..a0493309d2b 100644 --- a/packages/react/src/FormControl/FormControlLeadingVisual.tsx +++ b/packages/react/src/FormControl/FormControlLeadingVisual.tsx @@ -5,11 +5,16 @@ import {useFormControlContext} from './_FormControlContext' import styled from 'styled-components' import sx from '../sx' -const FormControlLeadingVisual: React.FC> = ({children, sx}) => { +const FormControlLeadingVisual: React.FC> = ({ + children, + sx, + style, +}) => { const {disabled, captionId} = useFormControlContext() return ( diff --git a/packages/react/src/FormControl/_FormControlValidation.tsx b/packages/react/src/FormControl/_FormControlValidation.tsx index 4c3610128ad..6678eaf8153 100644 --- a/packages/react/src/FormControl/_FormControlValidation.tsx +++ b/packages/react/src/FormControl/_FormControlValidation.tsx @@ -8,6 +8,7 @@ export type FormControlValidationProps = { variant: FormValidationStatus id?: string className?: string + style?: React.CSSProperties } & SxProp const FormControlValidation: React.FC> = ({ @@ -16,10 +17,17 @@ const FormControlValidation: React.FC { const {validationMessageId} = useFormControlContext() return ( - + {children} ) diff --git a/packages/react/src/internal/components/InputValidation.tsx b/packages/react/src/internal/components/InputValidation.tsx index 4dd5bb5bf95..22809a452fa 100644 --- a/packages/react/src/internal/components/InputValidation.tsx +++ b/packages/react/src/internal/components/InputValidation.tsx @@ -11,6 +11,7 @@ type Props = { className?: string id: string validationStatus?: FormValidationStatus + style?: React.CSSProperties } & SxProp const validationIconMap: Record< @@ -21,7 +22,13 @@ const validationIconMap: Record< error: AlertFillIcon, } -const InputValidation: React.FC> = ({children, className, id, validationStatus}) => { +const InputValidation: React.FC> = ({ + children, + className, + id, + validationStatus, + style, +}) => { const IconComponent = validationStatus ? validationIconMap[validationStatus] : undefined // TODO: use `text-caption-lineHeight` token as a custom property when it's available @@ -31,7 +38,7 @@ const InputValidation: React.FC> = ({children, cl const iconBoxMinHeight = iconSize * captionLineHeight return ( - + {IconComponent ? (