diff --git a/packages/web-react/src/components/Checkbox/README.md b/packages/web-react/src/components/Checkbox/README.md index d216e5d2c9..eeceb81c82 100644 --- a/packages/web-react/src/components/Checkbox/README.md +++ b/packages/web-react/src/components/Checkbox/README.md @@ -30,18 +30,18 @@ Advanced example usage: | Name | Type | Default | Required | Description | | ----------------- | ---------------------------------------------- | ------- | -------- | ---------------------------------------------------- | | `autoComplete` | `string` | - | ✕ | [Automated assistance in filling][autocomplete-attr] | -| `helperText` | `string` | — | ✕ | Custom helper text | +| `helperText` | `ReactNode` | — | ✕ | Custom helper text | | `id` | `string` | - | ✓ | Input and label identification | | `isDisabled` | `boolean` | - | ✕ | Whether is field disabled | | `isChecked` | `boolean` | - | ✕ | Whether is field checked | | `isItem` | `boolean` | - | ✕ | To render in [Item][item] mode | | `isLabelHidden` | `boolean` | - | ✕ | Whether is label hidden | | `isRequired` | `boolean` | - | ✕ | Whether is field required | -| `label` | `string` | - | ✕ | Label text | +| `label` | `ReactNode` | - | ✕ | Label text | | `name` | `string` | - | ✕ | Input name | | `ref` | `ForwardedRef` | - | ✕ | Input element reference | | `validationState` | [Validation dictionary][dictionary-validation] | - | ✕ | Type of validation state. | -| `validationText` | `string`, `string[]` | - | ✕ | Validation text | +| `validationText` | \[`ReactNode` \| `ReactNode[]`] | - | ✕ | Validation text | | `value` | `string` | - | ✕ | Input value | On top of the API options, the components accept [additional attributes][readme-additional-attributes]. diff --git a/packages/web-react/src/components/Checkbox/__tests__/Checkbox.test.tsx b/packages/web-react/src/components/Checkbox/__tests__/Checkbox.test.tsx index dfcd15c43a..047d0e4077 100644 --- a/packages/web-react/src/components/Checkbox/__tests__/Checkbox.test.tsx +++ b/packages/web-react/src/components/Checkbox/__tests__/Checkbox.test.tsx @@ -28,30 +28,34 @@ describe('Checkbox', () => { requiredPropsTest(Checkbox, 'checkbox', 'id', 'test-checkbox'); it('should have text classname', () => { - const dom = render(); + render(); + + const element = screen.getByRole('checkbox').nextElementSibling; - const element = dom.container.querySelector('label > span') as HTMLElement; expect(element).toHaveClass('Checkbox__text'); }); it('should have label classname', () => { - const dom = render(); + render(); + + const element = screen.getByRole('checkbox').nextElementSibling?.firstChild; - const element = dom.container.querySelector('label > span > span:first-child') as HTMLElement; expect(element).toHaveClass('Checkbox__label'); }); it('should have hidden classname', () => { - const dom = render(); + render(); + + const element = screen.getByRole('checkbox').nextElementSibling?.firstChild; - const element = dom.container.querySelector('label > span > span:first-child') as HTMLElement; expect(element).toHaveClass('Checkbox__label--hidden'); }); it('should have required classname', () => { - const dom = render(); + render(); + + const element = screen.getByRole('checkbox').nextElementSibling?.firstChild; - const element = dom.container.querySelector('label > span > span:first-child') as HTMLElement; expect(element).toHaveClass('Checkbox__label--required'); }); @@ -59,6 +63,7 @@ describe('Checkbox', () => { render(); const element = screen.getByRole('checkbox'); + expect(element).toHaveClass('Checkbox__input'); }); @@ -66,7 +71,26 @@ describe('Checkbox', () => { render(); const element = screen.getByText('text'); + expect(element).toBeInTheDocument(); expect(element).toHaveClass('Checkbox__helperText'); }); + + it('should render label with html tags', () => { + render( + + Label Text + + } + />, + ); + + const element = screen.getByRole('checkbox').nextElementSibling?.firstChild as HTMLElement; + + expect(element).toHaveTextContent('Label Text'); + expect(element.innerHTML).toBe('Label Text'); + }); }); diff --git a/packages/web-react/src/components/Checkbox/demo/CheckboxWithHtmlFormatting.tsx b/packages/web-react/src/components/Checkbox/demo/CheckboxWithHtmlFormatting.tsx new file mode 100644 index 0000000000..0b677779e2 --- /dev/null +++ b/packages/web-react/src/components/Checkbox/demo/CheckboxWithHtmlFormatting.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { Pill } from '../../Pill'; +import Checkbox from '../Checkbox'; + +const CheckboxWithHtmlFormatting = () => ( + + Label with bold text{' '} + + Pill + + + } + validationState="success" + validationText={ + <> + Validation with italic text + + } + helperText={ + <> + Helper text with a link + + } + onChange={() => {}} + /> +); + +export default CheckboxWithHtmlFormatting; diff --git a/packages/web-react/src/components/Checkbox/demo/index.tsx b/packages/web-react/src/components/Checkbox/demo/index.tsx index 9297a6ff3d..d0c212c340 100644 --- a/packages/web-react/src/components/Checkbox/demo/index.tsx +++ b/packages/web-react/src/components/Checkbox/demo/index.tsx @@ -9,6 +9,7 @@ import CheckboxIndeterminate from './CheckboxIndeterminate'; import CheckboxItem from './CheckboxItem'; import CheckboxRequired from './CheckboxRequired'; import CheckboxValidation from './CheckboxValidation'; +import CheckboxWithHtmlFormatting from './CheckboxWithHtmlFormatting'; ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( @@ -33,6 +34,9 @@ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + diff --git a/packages/web-react/src/components/Field/__tests__/HelperText.test.tsx b/packages/web-react/src/components/Field/__tests__/HelperText.test.tsx index da50da3013..b17c92bc2f 100644 --- a/packages/web-react/src/components/Field/__tests__/HelperText.test.tsx +++ b/packages/web-react/src/components/Field/__tests__/HelperText.test.tsx @@ -1,33 +1,54 @@ -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import React from 'react'; import '@testing-library/jest-dom'; import HelperText from '../HelperText'; describe('HelperText', () => { + const helperText = 'Helper Text'; + it('should render helper text', () => { - const dom = render(); + render(); + + const element = screen.getByText(helperText); - const element = dom.container.querySelector('div') as HTMLElement; - expect(element).not.toBeNull(); - expect(element.textContent).toBe('Helper Text'); + expect(element.textContent).toBe(helperText); }); it('should render with custom element type', () => { - const { container } = render(); + render(); + + const element = screen.getByText(helperText); - const element = container.querySelector('span') as HTMLElement; - expect(element).not.toBeNull(); - expect(element.textContent).toBe('Helper Text'); + expect(element.tagName).toBe('SPAN'); }); it('should render with className and id', () => { - const { container } = render( - , + const helperTextId = 'test-helper-text-id'; + const helperTextClass = 'test__helperText'; + + render(); + + const element = screen.getByText(helperText); + + expect(element.getAttribute('id')).toBe(helperTextId); + expect(element).toHaveClass(helperTextClass); + }); + + it('should render with html tags', () => { + render( + + Helper Text + + } + />, ); - const element = container.querySelector('.test__helperText') as HTMLElement; - expect(element).not.toBeNull(); - expect(element.getAttribute('id')).toBe('test-helper-text-id'); - expect(element.textContent).toBe('Helper Text'); + const element = document.querySelector('#test') as HTMLElement; + + expect(element).toHaveTextContent('Helper Text'); + expect(element.innerHTML).toBe('Helper Text'); }); }); diff --git a/packages/web-react/src/components/Field/__tests__/ValidationText.test.tsx b/packages/web-react/src/components/Field/__tests__/ValidationText.test.tsx index c13184cf11..274e2fa94a 100644 --- a/packages/web-react/src/components/Field/__tests__/ValidationText.test.tsx +++ b/packages/web-react/src/components/Field/__tests__/ValidationText.test.tsx @@ -14,6 +14,7 @@ describe('ValidationText', () => { renderValidationText({ validationText: 'validation text' }); const element = screen.getByText('validation text'); + expect(element).toHaveClass('ValidationText__validationText'); expect(element).not.toHaveAttribute('role', A11Y_ALERT_ROLE); }); @@ -51,6 +52,24 @@ describe('ValidationText', () => { expect(screen.getByRole('list').parentElement).toContainHTML('span'); }); + it('should render with html tags', () => { + render( + + validation text + + } + />, + ); + + const element = document.querySelector('#test') as HTMLElement; + + expect(element).toHaveTextContent('validation text'); + expect(element.innerHTML).toBe('validation text'); + }); + describe('when rendering multiple validation texts', () => { beforeEach(() => { renderValidationText({ validationText: ['validation text', 'another validation text'] }); @@ -62,6 +81,7 @@ describe('ValidationText', () => { it('should render correct validation texts for list items', () => { const listItems = screen.getAllByRole('listitem'); + expect(listItems[0]).toHaveTextContent('validation text'); expect(listItems[1]).toHaveTextContent('another validation text'); }); diff --git a/packages/web-react/src/components/FieldGroup/README.md b/packages/web-react/src/components/FieldGroup/README.md index aacf60502b..f6c1c45687 100644 --- a/packages/web-react/src/components/FieldGroup/README.md +++ b/packages/web-react/src/components/FieldGroup/README.md @@ -97,16 +97,16 @@ Validation states can be presented either by adding the `validationState` attrib | Name | Type | Default | Required | Description | | ----------------- | ---------------------------------------------- | ------- | -------- | ---------------------------------------------------------- | | `form` | `string` | `null` | ✕ | Parent form ID | -| `helperText` | `string` | `null` | ✕ | Custom helper text | +| `helperText` | `ReactNode` | `null` | ✕ | Custom helper text | | `id` | `string` | — | ✓ | Group and label identification | | `isDisabled` | `bool` | `false` | ✕ | If true, the group is disabled | | `isFluid` | `bool` | — | ✕ | If true, the element spans to the full width of its parent | | `isLabelHidden` | `bool` | `false` | ✕ | If true, label is hidden | | `isRequired` | `bool` | `false` | ✕ | If true, the group is marked as required | -| `label` | `string` | — | ✓ | Label text | +| `label` | `ReactNode` | — | ✓ | Label text | | `name` | `string` | `null` | ✕ | Group name | | `validationState` | [Validation dictionary][dictionary-validation] | `null` | ✕ | Type of validation state | -| `validationText` | \[`string` \| `string[]`] | `null` | ✕ | Validation text | +| `validationText` | \[`ReactNode` \| `ReactNode[]`] | `null` | ✕ | Validation text | On top of the API options, the components accept [additional attributes][readme-additional-attributes]. If you need more control over the styling of a component, you can use [style props][readme-style-props] diff --git a/packages/web-react/src/components/FieldGroup/__tests__/FieldGroup.test.tsx b/packages/web-react/src/components/FieldGroup/__tests__/FieldGroup.test.tsx index 3ca128da89..38d1b51af6 100644 --- a/packages/web-react/src/components/FieldGroup/__tests__/FieldGroup.test.tsx +++ b/packages/web-react/src/components/FieldGroup/__tests__/FieldGroup.test.tsx @@ -59,49 +59,49 @@ describe('FieldGroup', () => { }); it('should have className isRequired', () => { - const dom = render( + render( {itemList} , ); - const element = dom.container.querySelector('div') as HTMLElement; + const element = screen.getAllByText('Label')[1]; expect(element).toHaveClass('FieldGroup__label--required'); }); it('should have className isDisabled', () => { - const dom = render( + render( {itemList} , ); - const element = dom.container.querySelector('fieldset') as HTMLElement; + const element = screen.getByRole('group'); expect(element).toHaveAttribute('disabled'); }); it('should not have visible label', () => { - const dom = render( + render( {itemList} , ); - const element = dom.container.querySelector('fieldset div') as HTMLElement; + const element = screen.getAllByText('Label')[1]; - expect(element).not.toHaveClass('FieldGroup__label'); + expect(element).toBeUndefined(); }); it('should have className isFluid', () => { - const dom = render( + render( {itemList} , ); - const element = dom.container.querySelector('fieldset') as HTMLElement; + const element = screen.getByRole('group'); expect(element).toHaveClass('FieldGroup--fluid'); }); @@ -130,4 +130,24 @@ describe('FieldGroup', () => { expect(element).toHaveAttribute('id', 'example-field-group__helperText'); }); + + it('should render with html tags', () => { + render( + + Label Text + + } + > + {itemList} + , + ); + + const element = screen.getAllByText('Label')[1]; + + expect(element).toHaveTextContent('Label Text'); + expect(element.innerHTML).toBe('Label Text'); + }); }); diff --git a/packages/web-react/src/components/FileUploader/README.md b/packages/web-react/src/components/FileUploader/README.md index 9743456e15..5a3d62c3be 100644 --- a/packages/web-react/src/components/FileUploader/README.md +++ b/packages/web-react/src/components/FileUploader/README.md @@ -370,7 +370,7 @@ and [escape hatches][readme-escape-hatches]. | -------------------- | ------------------------------------ | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `accept` | `string` | — | ✕ | The accept attribute takes as its value a comma-separated list of one or more file types, or unique file type specifiers, describing which file types to allow. | | `dropZoneRef` | `MutableRefObject` | — | ✕ | Drop zone element reference | -| `helperText` | `string` | — | ✕ | Custom helper text | +| `helperText` | `ReactNode` | — | ✕ | Custom helper text | | `iconName` | `string` | `upload` | ✕ | Icon used in the drop zone | | `id` | `string` | — | ✓ | FileUploaderInput id | | `inputRef` | `MutableRefObject` | — | ✕ | Input element reference | @@ -378,7 +378,7 @@ and [escape hatches][readme-escape-hatches]. | `isLabelHidden` | `bool` | — | ✕ | Whether is input label hidden | | `isMultiple` | `bool` | — | ✕ | When multiple files can be selected at once | | `isRequired` | `bool` | — | ✕ | Whether is field marked as required | -| `label` | `string` | — | ✕ | Field label | +| `label` | `ReactNode` | — | ✕ | Field label | | `labelText` | `string` | — | ✕ | Label for input in Drop zone | | `linkText` | `string` | — | ✕ | Link text in input in Drop zone | | `maxFileSize` | `number` | 1000000 | ✕ | The maximum size of the uploaded file in **bytes**. [Learn how file sizes are calculated](#understanding-file-size-in-bytes). | @@ -387,7 +387,7 @@ and [escape hatches][readme-escape-hatches]. | `onError` | `FileUploaderErrorCallbackType` | — | ✕ | Callback on error condition | | `queueLimitBehavior` | \[`hide` \| `disable` \| `none`] | `none` | ✕ | Input behavior when the file queue is filled | | `validationState` | `ValidationState` | — | ✕ | Validation state | -| `validationText` | \[`string` \| `string[]`] | — | ✕ | Validation status text | +| `validationText` | \[`ReactNode` \| `ReactNode[]`] | — | ✕ | Validation status text | The rest of the properties are created from the default `` element. [More about the element][input-element-docs] diff --git a/packages/web-react/src/components/FileUploader/__tests__/FileUploaderInput.test.tsx b/packages/web-react/src/components/FileUploader/__tests__/FileUploaderInput.test.tsx index 2c65d28591..9e574527c1 100644 --- a/packages/web-react/src/components/FileUploader/__tests__/FileUploaderInput.test.tsx +++ b/packages/web-react/src/components/FileUploader/__tests__/FileUploaderInput.test.tsx @@ -29,4 +29,24 @@ describe('FileUploaderInput', () => { expect(container).not.toContain('has-drag-and-drop'); }); + + it('should render label with html tags', () => { + render( + + Upload File + + } + data-testid="test" + />, + ); + + const element = screen.getAllByTestId('test')[0].firstChild as HTMLElement; + + expect(element).toHaveTextContent('Upload File'); + expect(element.innerHTML).toBe('Upload File'); + }); }); diff --git a/packages/web-react/src/components/Radio/README.md b/packages/web-react/src/components/Radio/README.md index d5246cbc7b..2ec95889d2 100644 --- a/packages/web-react/src/components/Radio/README.md +++ b/packages/web-react/src/components/Radio/README.md @@ -29,17 +29,17 @@ Advanced example usage: | Name | Type | Default | Required | Description | | ----------------- | ---------------------------------------------- | ------- | -------- | ---------------------------------------------------- | -| `autoComplete` | string | - | ✕ | [Automated assistance in filling][autocomplete-attr] | -| `id` | string | - | ✓ | Input and label identification | -| `isDisabled` | boolean | - | ✕ | Whether is field disabled | -| `isChecked` | boolean | - | ✕ | Whether is field checked | -| `isItem` | boolean | - | ✕ | To render in [Item][item] mode | -| `isLabelHidden` | boolean | - | ✕ | Whether is label hidden | -| `label` | string | - | ✕ | Label text | -| `name` | string | - | ✕ | Input name | +| `autoComplete` | `string` | - | ✕ | [Automated assistance in filling][autocomplete-attr] | +| `id` | `string` | - | ✓ | Input and label identification | +| `isDisabled` | `boolean` | - | ✕ | Whether is field disabled | +| `isChecked` | `boolean` | - | ✕ | Whether is field checked | +| `isItem` | `boolean` | - | ✕ | To render in [Item][item] mode | +| `isLabelHidden` | `boolean` | - | ✕ | Whether is label hidden | +| `label` | `ReactNode` | - | ✕ | Label text | +| `name` | `string` | - | ✕ | Input name | | `ref` | `ForwardedRef` | - | ✕ | Input element reference | | `validationState` | [Validation dictionary][dictionary-validation] | - | ✕ | Type of validation state | -| `value` | string | - | ✕ | Input value | +| `value` | `string` | - | ✕ | Input value | On top of the API options, the components accept [additional attributes][readme-additional-attributes]. If you need more control over the styling of a component, you can use [style props][readme-style-props] diff --git a/packages/web-react/src/components/Radio/__tests__/Radio.test.tsx b/packages/web-react/src/components/Radio/__tests__/Radio.test.tsx index 1dc92b3c1b..e72bb1a7a7 100644 --- a/packages/web-react/src/components/Radio/__tests__/Radio.test.tsx +++ b/packages/web-react/src/components/Radio/__tests__/Radio.test.tsx @@ -1,5 +1,5 @@ import '@testing-library/jest-dom'; -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import React from 'react'; import { classNamePrefixProviderTest, @@ -25,30 +25,44 @@ describe('Radio', () => { requiredPropsTest(Radio, 'radio', 'id', 'example-id'); it('should have label classname', () => { - const dom = render(); + render(); - const element = dom.container.querySelector('label > span > span:first-child') as HTMLElement; - expect(element).toHaveClass('Radio__label'); + expect(screen.getByRole('radio').nextElementSibling?.firstChild).toHaveClass('Radio__label'); }); it('should have hidden classname', () => { - const dom = render(); + render(); - const element = dom.container.querySelector('label > span > span:first-child') as HTMLElement; - expect(element).toHaveClass('Radio__label--hidden'); + expect(screen.getByRole('radio').nextElementSibling?.firstChild).toHaveClass('Radio__label--hidden'); }); it('should have input classname', () => { - const dom = render(); + render(); - const element = dom.container.querySelector('input') as HTMLElement; - expect(element).toHaveClass('Radio__input'); + expect(screen.getByRole('radio')).toHaveClass('Radio__input'); }); it('should have helper text', () => { - const dom = render(); + render(); - const element = dom.container.querySelector('.Radio__helperText') as HTMLElement; - expect(element.textContent).toBe('text'); + expect(screen.getByRole('radio').nextElementSibling?.lastChild).toHaveTextContent('text'); + }); + + it('should render label with html tags', () => { + render( + + Radio Label + + } + />, + ); + + const element = screen.getByRole('radio').nextElementSibling?.firstChild as HTMLElement; + + expect(element).toHaveTextContent('Radio Label'); + expect(element.innerHTML).toBe('Radio Label'); }); }); diff --git a/packages/web-react/src/components/Select/README.md b/packages/web-react/src/components/Select/README.md index fd7f15bf12..6c43c3cf7c 100644 --- a/packages/web-react/src/components/Select/README.md +++ b/packages/web-react/src/components/Select/README.md @@ -43,11 +43,11 @@ Advanced example usage: | `isFluid` | `bool` | — | ✕ | Whether is field is fluid | | `isLabelHidden` | `bool` | — | ✕ | Whether is label hidden | | `isRequired` | `bool` | — | ✕ | Whether is field required | -| `label` | `string` | — | ✕ | Label text | +| `label` | `ReactNode` | — | ✕ | Label text | | `name` | `string` | — | ✕ | Select name | | `ref` | `ForwardedRef` | — | ✕ | Select element reference | | `validationState` | [Validation dictionary][dictionary-validation] | — | ✕ | Type of validation state | -| `validationText` | \[`string` \| `string[]`] | — | ✕ | Validation text | +| `validationText` | \[`ReactNode` \| `ReactNode[]`] | — | ✕ | Validation text | On top of the API options, the components accept [additional attributes][readme-additional-attributes]. If you need more control over the styling of a component, you can use [style props][readme-style-props] diff --git a/packages/web-react/src/components/Select/__tests__/Select.test.tsx b/packages/web-react/src/components/Select/__tests__/Select.test.tsx index 6e530e125d..902ba27956 100644 --- a/packages/web-react/src/components/Select/__tests__/Select.test.tsx +++ b/packages/web-react/src/components/Select/__tests__/Select.test.tsx @@ -1,5 +1,5 @@ import '@testing-library/jest-dom'; -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import React from 'react'; import { classNamePrefixProviderTest, @@ -27,68 +27,94 @@ describe('Select', () => { requiredPropsTest(Select, 'combobox', 'id', 'test-select'); it('should have label classname', () => { - const dom = render( + render( , ); - const element = dom.container.querySelector('label') as HTMLElement; + const element = screen.getByText('Label'); + expect(element).toHaveClass('Select__label'); }); it('should have hidden classname', () => { - const dom = render( + render( , ); - const element = dom.container.querySelector('label') as HTMLElement; + const element = screen.getByText('Label'); + expect(element).toHaveClass('Select__label--hidden'); }); it('should have required classname', () => { - const dom = render( + render( , ); - const element = dom.container.querySelector('label') as HTMLElement; + const element = screen.getByText('Label'); + expect(element).toHaveClass('Select__label--required'); }); it('should have input classname', () => { - const dom = render( + render( , ); - const element = dom.container.querySelector('select') as HTMLElement; + const element = screen.getByLabelText('Label'); + expect(element).toHaveClass('Select__input'); }); it('should have helper text', () => { - const dom = render( + render( , ); - const element = dom.container.querySelector('.Select__helperText') as HTMLElement; - expect(element.textContent).toBe('helper text'); + const element = screen.getByText('Label').parentElement?.lastChild; + + expect(element).toHaveTextContent('helper text'); }); it('should have fluid classname', () => { - const dom = render( + render( , ); - const element = dom.container.querySelector('div') as HTMLElement; + const element = screen.getByText('Label').parentElement; + expect(element).toHaveClass('Select--fluid'); }); + + it('should render label with html tags', () => { + render( + , + ); + + const element = screen.getByText('Label').parentElement as HTMLElement; + + expect(element).toHaveTextContent('Select Label'); + expect(element.innerHTML).toBe('Select Label'); + }); }); diff --git a/packages/web-react/src/components/TextArea/README.md b/packages/web-react/src/components/TextArea/README.md index 1c09c3a67f..9dbd2fee26 100644 --- a/packages/web-react/src/components/TextArea/README.md +++ b/packages/web-react/src/components/TextArea/README.md @@ -46,14 +46,14 @@ Example with Auto-Height Adjustment | `isDisabled` | `bool` | — | ✕ | Whether is field disabled | | `isLabelHidden` | `bool` | — | ✕ | Whether is label hidden | | `isRequired` | `bool` | — | ✕ | Whether is field required | -| `label` | `string` | — | ✕ | Label text | +| `label` | `ReactNode` | — | ✕ | Label text | | `maxLength` | `number` | — | ✕ | Maximum number of characters | | `name` | `string` | — | ✕ | Textarea name | | `placeholder` | `string` | — | ✕ | Textarea placeholder | | `ref` | `ForwardedRef` | — | ✕ | Textarea element reference | | `rows` | `number` | — | ✕ | Number of visible rows | | `validationState` | [Validation dictionary][dictionary-validation] | — | ✕ | Type of validation state | -| `validationText` | \[`string` \| `string[]`] | — | ✕ | Validation text | +| `validationText` | \[`ReactNode` \| `ReactNode[]`] | — | ✕ | Validation text | | `value` | `string` | — | ✕ | Textarea value | On top of the API options, the components accept [additional attributes][readme-additional-attributes]. diff --git a/packages/web-react/src/components/TextArea/__tests__/TextArea.test.tsx b/packages/web-react/src/components/TextArea/__tests__/TextArea.test.tsx index a334fba6b0..8a5e46397e 100644 --- a/packages/web-react/src/components/TextArea/__tests__/TextArea.test.tsx +++ b/packages/web-react/src/components/TextArea/__tests__/TextArea.test.tsx @@ -1,5 +1,5 @@ import '@testing-library/jest-dom'; -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import React from 'react'; import { classNamePrefixProviderTest, @@ -25,60 +25,70 @@ describe('TextArea', () => { requiredPropsTest(TextArea, 'textbox', 'id', 'example-id'); it('should have label classname', () => { - const dom = render(