Skip to content

Commit 103c3bf

Browse files
authored
feat: add support for className to FormControl.Validation (#5984)
1 parent 36f1007 commit 103c3bf

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

.changeset/fine-bugs-shine.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@primer/react': minor
3+
---
4+
5+
Add support for the `className` prop to `FormControl.Validation`

packages/react/src/FormControl/_FormControlValidation.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@ import {useFormControlContext} from './_FormControlContext'
77
export type FormControlValidationProps = {
88
variant: FormValidationStatus
99
id?: string
10+
className?: string
1011
} & SxProp
1112

1213
const FormControlValidation: React.FC<React.PropsWithChildren<FormControlValidationProps>> = ({
1314
children,
15+
className,
1416
variant,
1517
sx,
1618
id,
1719
}) => {
1820
const {validationMessageId} = useFormControlContext()
1921
return (
20-
<InputValidation validationStatus={variant} id={id || validationMessageId || ''} sx={sx}>
22+
<InputValidation className={className} validationStatus={variant} id={id || validationMessageId || ''} sx={sx}>
2123
{children}
2224
</InputValidation>
2325
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import React from 'react'
2+
import FormControl from '../FormControl'
3+
import {render} from '@testing-library/react'
4+
5+
describe('FormControl.Validation', () => {
6+
it('should provide support for `className` on the outermost element', () => {
7+
const {container} = render(
8+
<FormControl.Validation className="custom-class" variant="success">
9+
Validation message
10+
</FormControl.Validation>,
11+
)
12+
expect(container.firstChild).toHaveClass('custom-class')
13+
})
14+
})

packages/react/src/internal/components/InputValidation.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import Text from '../../Text'
55
import type {SxProp} from '../../sx'
66
import type {FormValidationStatus} from '../../utils/types/FormValidationStatus'
77
import classes from './InputValidation.module.css'
8+
import {clsx} from 'clsx'
89

910
type Props = {
11+
className?: string
1012
id: string
1113
validationStatus?: FormValidationStatus
1214
} & SxProp
@@ -19,7 +21,7 @@ const validationIconMap: Record<
1921
error: AlertFillIcon,
2022
}
2123

22-
const InputValidation: React.FC<React.PropsWithChildren<Props>> = ({children, id, validationStatus, sx}) => {
24+
const InputValidation: React.FC<React.PropsWithChildren<Props>> = ({children, className, id, validationStatus, sx}) => {
2325
const IconComponent = validationStatus ? validationIconMap[validationStatus] : undefined
2426

2527
// TODO: use `text-caption-lineHeight` token as a custom property when it's available
@@ -29,7 +31,7 @@ const InputValidation: React.FC<React.PropsWithChildren<Props>> = ({children, id
2931
const iconBoxMinHeight = iconSize * captionLineHeight
3032

3133
return (
32-
<Text className={classes.InputValidation} data-validation-status={validationStatus} sx={sx}>
34+
<Text className={clsx(className, classes.InputValidation)} data-validation-status={validationStatus} sx={sx}>
3335
{IconComponent ? (
3436
<span
3537
aria-hidden="true"

0 commit comments

Comments
 (0)