diff --git a/src/components/forms/InputGroup/InputGroup.test.tsx b/src/components/forms/InputGroup/InputGroup.test.tsx
new file mode 100644
index 0000000000..6bfb527739
--- /dev/null
+++ b/src/components/forms/InputGroup/InputGroup.test.tsx
@@ -0,0 +1,31 @@
+import React from 'react'
+import { render } from '@testing-library/react'
+
+import { InputGroup } from './InputGroup'
+
+describe('InputGroup component', () => {
+ it('renders without errors', () => {
+ const { queryByTestId } = render(My Input Group)
+ expect(queryByTestId('inputGroup')).toBeInTheDocument()
+ expect(queryByTestId('inputGroup')).toHaveClass('usa-input-group')
+ })
+
+ it('renders its children', () => {
+ const { queryByText } = render(My Input Group)
+ expect(queryByText('My Input Group')).toBeInTheDocument()
+ })
+
+ it('adds the error class when error is true', () => {
+ const { queryByTestId } = render(
+ My Input Group
+ )
+ expect(queryByTestId('inputGroup')).toHaveClass('usa-input-group--error')
+ })
+
+ it('adds the provided className', () => {
+ const { queryByTestId } = render(
+ My Input Group
+ )
+ expect(queryByTestId('inputGroup')).toHaveClass('my-class')
+ })
+})
diff --git a/src/components/forms/InputGroup/InputGroup.tsx b/src/components/forms/InputGroup/InputGroup.tsx
new file mode 100644
index 0000000000..0c6084c757
--- /dev/null
+++ b/src/components/forms/InputGroup/InputGroup.tsx
@@ -0,0 +1,26 @@
+import React from 'react'
+import classnames from 'classnames'
+
+export interface InputGroupProps {
+ children: React.ReactNode
+ className?: string
+ error?: boolean
+}
+
+export const InputGroup = ({
+ children,
+ className,
+ error,
+}: InputGroupProps): React.ReactElement => {
+ const classes = classnames(
+ 'usa-input-group',
+ { 'usa-input-group--error': error },
+ className
+ )
+
+ return (
+
+ {children}
+
+ )
+}
diff --git a/src/components/forms/InputPrefix/InputPrefix.stories.tsx b/src/components/forms/InputPrefix/InputPrefix.stories.tsx
index 7af89b0e58..e3b64bd3db 100644
--- a/src/components/forms/InputPrefix/InputPrefix.stories.tsx
+++ b/src/components/forms/InputPrefix/InputPrefix.stories.tsx
@@ -2,6 +2,7 @@ import React from 'react'
import { InputPrefix } from './InputPrefix'
import { Icon } from '../../Icon/Icons'
import { TextInput } from '../TextInput/TextInput'
+import { InputGroup } from '../InputGroup/InputGroup'
import { FormGroup } from '../FormGroup/FormGroup'
export default {
@@ -22,29 +23,29 @@ Source: https://designsystem.digital.gov/components/input-prefix-suffix/
export const InputWithTextInputPrefix = (): React.ReactElement => (
-
+
cvc
-
+
)
export const InputWithTextInputPrefixError = (): React.ReactElement => (
-
+
cvc
-
+
)
export const InputWithIconInputPrefix = (): React.ReactElement => (
-
+
-
+
)
diff --git a/src/components/forms/InputSuffix/InputSuffix.stories.tsx b/src/components/forms/InputSuffix/InputSuffix.stories.tsx
index edf4b3169a..acb060ab33 100644
--- a/src/components/forms/InputSuffix/InputSuffix.stories.tsx
+++ b/src/components/forms/InputSuffix/InputSuffix.stories.tsx
@@ -1,5 +1,6 @@
import React from 'react'
import { InputSuffix } from './InputSuffix'
+import { InputGroup } from '../InputGroup/InputGroup'
import { FormGroup } from '../FormGroup/FormGroup'
import { TextInput } from '../TextInput/TextInput'
import { Icon } from '../../Icon/Icons'
@@ -22,18 +23,18 @@ Source: https://designsystem.digital.gov/components/input-prefix-suffix/
export const InputWithIconInputSuffix = (): React.ReactElement => (
-
+
-
+
)
export const InputWithIconInputSuffixError = (): React.ReactElement => (
-
+
(
-
+
)
export const InputWithTextInputSuffix = (): React.ReactElement => (
-
+
lbs.
-
+
)
diff --git a/src/index.ts b/src/index.ts
index 3650efe281..69af332d6e 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -59,6 +59,7 @@ export { FileInput } from './components/forms/FileInput/FileInput'
export type { FileInputRef } from './components/forms/FileInput/FileInput'
export { Form } from './components/forms/Form/Form'
export { FormGroup } from './components/forms/FormGroup/FormGroup'
+export { InputGroup } from './components/forms/InputGroup/InputGroup'
export { InputPrefix } from './components/forms/InputPrefix/InputPrefix'
export { InputSuffix } from './components/forms/InputSuffix/InputSuffix'
export { Label } from './components/forms/Label/Label'