@nypl/design-system-react-components 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/README.md +171 -135
- package/dist/__tests__/mediaMatchMock.d.ts +79 -0
- package/dist/components/Card/Card.d.ts +8 -6
- package/dist/components/Heading/Heading.d.ts +6 -0
- package/dist/components/Icons/Icon.d.ts +1 -1
- package/dist/components/Icons/IconSvgs.d.ts +10 -0
- package/dist/components/Logo/Logo.d.ts +1 -1
- package/dist/components/Logo/LogoSvgs.d.ts +3 -0
- package/dist/components/Slider/Slider.d.ts +1 -2
- package/dist/components/Table/Table.d.ts +3 -2
- package/dist/components/Text/Text.d.ts +6 -0
- package/dist/components/TextInput/TextInput.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +1700 -878
- package/dist/design-system-react-components.cjs.development.js.map +1 -1
- package/dist/design-system-react-components.cjs.production.min.js +1 -1
- package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
- package/dist/design-system-react-components.esm.js +1672 -881
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/{tests → __tests__}/useCarouselStyles.test.d.ts +0 -0
- package/dist/hooks/__tests__/useNYPLBreakpoints.test.d.ts +1 -0
- package/dist/hooks/useNYPLBreakpoints.d.ts +13 -0
- package/dist/index.d.ts +2 -1
- package/dist/resources.scss +0 -4
- package/dist/styles.css +3 -2
- package/dist/theme/components/button.d.ts +7 -2
- package/dist/theme/components/checkbox.d.ts +1 -0
- package/dist/theme/components/customTable.d.ts +522 -34
- package/dist/theme/components/datePicker.d.ts +1 -0
- package/dist/theme/components/global.d.ts +5 -2
- package/dist/theme/components/heading.d.ts +5 -1
- package/dist/theme/components/image.d.ts +18 -0
- package/dist/theme/components/radio.d.ts +9 -0
- package/dist/theme/components/searchBar.d.ts +6 -0
- package/dist/theme/components/select.d.ts +4 -5
- package/dist/theme/components/structuredContent.d.ts +117 -17
- package/dist/theme/components/template.d.ts +4 -1
- package/dist/theme/components/text.d.ts +5 -1
- package/dist/theme/components/textInput.d.ts +4 -0
- package/dist/theme/components/toggle.d.ts +1 -0
- package/dist/theme/provider.d.ts +2 -1
- package/package.json +16 -16
- package/src/__tests__/fileMock.ts +0 -6
- package/src/__tests__/setup.ts +0 -27
- package/src/__tests__/utils/utils.test.ts +0 -18
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +0 -42
- package/src/components/Accordion/Accordion.stories.mdx +0 -333
- package/src/components/Accordion/Accordion.test.tsx +0 -237
- package/src/components/Accordion/Accordion.tsx +0 -137
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +0 -734
- package/src/components/Autosuggest/Autosuggest.stories.mdx +0 -75
- package/src/components/Autosuggest/Autosuggest.stories.tsx +0 -211
- package/src/components/Autosuggest/_Autosuggest.scss +0 -51
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +0 -231
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +0 -144
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -98
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +0 -695
- package/src/components/Button/Button.stories.mdx +0 -320
- package/src/components/Button/Button.test.tsx +0 -184
- package/src/components/Button/Button.tsx +0 -95
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -106
- package/src/components/ButtonGroup/ButtonGroup.stories.mdx +0 -178
- package/src/components/ButtonGroup/ButtonGroup.test.tsx +0 -141
- package/src/components/ButtonGroup/ButtonGroup.tsx +0 -100
- package/src/components/ButtonGroup/__snapshots__/ButtonGroup.test.tsx.snap +0 -117
- package/src/components/Card/Card.stories.mdx +0 -1041
- package/src/components/Card/Card.test.tsx +0 -388
- package/src/components/Card/Card.tsx +0 -346
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +0 -568
- package/src/components/Chakra/Box.stories.mdx +0 -52
- package/src/components/Chakra/Center.stories.mdx +0 -96
- package/src/components/Chakra/Flex.stories.mdx +0 -111
- package/src/components/Chakra/Grid.stories.mdx +0 -89
- package/src/components/Chakra/Stack.stories.mdx +0 -109
- package/src/components/Checkbox/Checkbox.stories.mdx +0 -243
- package/src/components/Checkbox/Checkbox.test.tsx +0 -350
- package/src/components/Checkbox/Checkbox.tsx +0 -152
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +0 -661
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +0 -462
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +0 -492
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +0 -173
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +0 -1842
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +0 -163
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +0 -76
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +0 -103
- package/src/components/DatePicker/DatePicker.stories.mdx +0 -452
- package/src/components/DatePicker/DatePicker.test.tsx +0 -940
- package/src/components/DatePicker/DatePicker.tsx +0 -450
- package/src/components/DatePicker/_DatePicker.scss +0 -100
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +0 -908
- package/src/components/Fieldset/Fieldset.stories.mdx +0 -96
- package/src/components/Fieldset/Fieldset.test.tsx +0 -155
- package/src/components/Fieldset/Fieldset.tsx +0 -55
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +0 -89
- package/src/components/Form/Form.stories.mdx +0 -426
- package/src/components/Form/Form.test.tsx +0 -234
- package/src/components/Form/Form.tsx +0 -124
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -115
- package/src/components/Grid/SimpleGrid.stories.mdx +0 -336
- package/src/components/Grid/SimpleGrid.test.tsx +0 -79
- package/src/components/Grid/SimpleGrid.tsx +0 -49
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +0 -23
- package/src/components/Heading/Heading.stories.mdx +0 -187
- package/src/components/Heading/Heading.test.tsx +0 -171
- package/src/components/Heading/Heading.tsx +0 -104
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +0 -90
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +0 -172
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +0 -114
- package/src/components/HelperErrorText/HelperErrorText.tsx +0 -62
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +0 -93
- package/src/components/Hero/Hero.stories.mdx +0 -378
- package/src/components/Hero/Hero.test.tsx +0 -611
- package/src/components/Hero/Hero.tsx +0 -203
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +0 -379
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +0 -73
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +0 -54
- package/src/components/HorizontalRule/HorizontalRule.tsx +0 -27
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +0 -44
- package/src/components/Icons/Icon.stories.mdx +0 -413
- package/src/components/Icons/Icon.test.tsx +0 -120
- package/src/components/Icons/Icon.tsx +0 -187
- package/src/components/Icons/IconSvgs.tsx +0 -64
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +0 -129
- package/src/components/Image/Image.stories.mdx +0 -332
- package/src/components/Image/Image.test.tsx +0 -155
- package/src/components/Image/Image.tsx +0 -171
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +0 -269
- package/src/components/Label/Label.stories.mdx +0 -100
- package/src/components/Label/Label.test.tsx +0 -116
- package/src/components/Label/Label.tsx +0 -55
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +0 -45
- package/src/components/Link/Link.stories.mdx +0 -249
- package/src/components/Link/Link.test.tsx +0 -224
- package/src/components/Link/Link.tsx +0 -178
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +0 -286
- package/src/components/List/List.stories.mdx +0 -393
- package/src/components/List/List.test.tsx +0 -265
- package/src/components/List/List.tsx +0 -156
- package/src/components/List/__snapshots__/List.test.tsx.snap +0 -213
- package/src/components/Logo/Logo.stories.mdx +0 -295
- package/src/components/Logo/Logo.test.tsx +0 -116
- package/src/components/Logo/Logo.tsx +0 -151
- package/src/components/Logo/LogoSvgs.tsx +0 -90
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +0 -142
- package/src/components/Modal/Modal.stories.mdx +0 -294
- package/src/components/Modal/Modal.test.tsx +0 -157
- package/src/components/Modal/Modal.tsx +0 -154
- package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +0 -25
- package/src/components/Notification/Notification.stories.mdx +0 -358
- package/src/components/Notification/Notification.test.tsx +0 -279
- package/src/components/Notification/Notification.tsx +0 -224
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +0 -525
- package/src/components/Pagination/Pagination.stories.mdx +0 -184
- package/src/components/Pagination/Pagination.test.tsx +0 -419
- package/src/components/Pagination/Pagination.tsx +0 -269
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +0 -544
- package/src/components/Placeholder/Placeholder.tsx +0 -19
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +0 -360
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +0 -298
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +0 -132
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +0 -434
- package/src/components/Radio/Radio.stories.mdx +0 -216
- package/src/components/Radio/Radio.test.tsx +0 -247
- package/src/components/Radio/Radio.tsx +0 -119
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +0 -451
- package/src/components/RadioGroup/RadioGroup.stories.mdx +0 -479
- package/src/components/RadioGroup/RadioGroup.test.tsx +0 -471
- package/src/components/RadioGroup/RadioGroup.tsx +0 -171
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +0 -1550
- package/src/components/SearchBar/SearchBar.stories.mdx +0 -518
- package/src/components/SearchBar/SearchBar.test.tsx +0 -435
- package/src/components/SearchBar/SearchBar.tsx +0 -210
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +0 -1049
- package/src/components/Select/Select.stories.mdx +0 -439
- package/src/components/Select/Select.test.tsx +0 -358
- package/src/components/Select/Select.tsx +0 -183
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +0 -895
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +0 -142
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +0 -116
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +0 -123
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +0 -898
- package/src/components/SkipNavigation/SkipNavigation.stories.mdx +0 -90
- package/src/components/SkipNavigation/SkipNavigation.test.tsx +0 -63
- package/src/components/SkipNavigation/SkipNavigation.tsx +0 -51
- package/src/components/SkipNavigation/__snapshots__/SkipNavigation.test.tsx.snap +0 -130
- package/src/components/Slider/Slider.stories.mdx +0 -628
- package/src/components/Slider/Slider.test.tsx +0 -736
- package/src/components/Slider/Slider.tsx +0 -322
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +0 -2186
- package/src/components/StatusBadge/StatusBadge.stories.mdx +0 -109
- package/src/components/StatusBadge/StatusBadge.test.tsx +0 -70
- package/src/components/StatusBadge/StatusBadge.tsx +0 -35
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +0 -47
- package/src/components/StructuredContent/StructuredContent.stories.mdx +0 -567
- package/src/components/StructuredContent/StructuredContent.test.tsx +0 -435
- package/src/components/StructuredContent/StructuredContent.tsx +0 -139
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +0 -368
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +0 -206
- package/src/components/StyleGuide/Breakpoints.stories.mdx +0 -55
- package/src/components/StyleGuide/Buttons.stories.mdx +0 -194
- package/src/components/StyleGuide/ColorCard.tsx +0 -43
- package/src/components/StyleGuide/Colors.stories.mdx +0 -201
- package/src/components/StyleGuide/DesignTokens.stories.mdx +0 -193
- package/src/components/StyleGuide/Forms.stories.mdx +0 -94
- package/src/components/StyleGuide/Iconography.stories.mdx +0 -142
- package/src/components/StyleGuide/Spacing.stories.mdx +0 -116
- package/src/components/StyleGuide/Typography.stories.mdx +0 -419
- package/src/components/Table/Table.stories.mdx +0 -272
- package/src/components/Table/Table.test.tsx +0 -241
- package/src/components/Table/Table.tsx +0 -152
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +0 -1703
- package/src/components/Tabs/Tabs.stories.mdx +0 -338
- package/src/components/Tabs/Tabs.test.tsx +0 -298
- package/src/components/Tabs/Tabs.tsx +0 -264
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +0 -584
- package/src/components/Template/Template.stories.mdx +0 -695
- package/src/components/Template/Template.test.tsx +0 -309
- package/src/components/Template/Template.tsx +0 -326
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +0 -342
- package/src/components/Text/Text.stories.mdx +0 -103
- package/src/components/Text/Text.test.tsx +0 -63
- package/src/components/Text/Text.tsx +0 -50
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +0 -50
- package/src/components/TextInput/TextInput.stories.mdx +0 -268
- package/src/components/TextInput/TextInput.test.tsx +0 -451
- package/src/components/TextInput/TextInput.tsx +0 -240
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +0 -274
- package/src/components/Toggle/Toggle.stories.mdx +0 -237
- package/src/components/Toggle/Toggle.test.tsx +0 -170
- package/src/components/Toggle/Toggle.tsx +0 -128
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +0 -470
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +0 -212
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +0 -308
- package/src/components/VideoPlayer/VideoPlayer.tsx +0 -188
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +0 -192
- package/src/docs/Chakra.stories.mdx +0 -563
- package/src/docs/Welcome.stories.mdx +0 -148
- package/src/helpers/types.ts +0 -1
- package/src/hooks/tests/useCarouselStyles.test.ts +0 -140
- package/src/hooks/tests/useNYPLTheme.test.tsx +0 -36
- package/src/hooks/useCarouselStyles.stories.mdx +0 -30
- package/src/hooks/useCarouselStyles.ts +0 -35
- package/src/hooks/useNYPLTheme.stories.mdx +0 -98
- package/src/hooks/useNYPLTheme.ts +0 -91
- package/src/hooks/useWindowSize.stories.mdx +0 -23
- package/src/hooks/useWindowSize.ts +0 -40
- package/src/index.ts +0 -136
- package/src/resources.scss +0 -6
- package/src/styles/base/_01-breakpoints.scss +0 -27
- package/src/styles/base/_02-mixins.scss +0 -103
- package/src/styles/base/_place-holder.scss +0 -33
- package/src/styles/space/_space-inline.scss +0 -79
- package/src/styles/space/_space-inset.scss +0 -57
- package/src/styles/space/_space-stack.scss +0 -116
- package/src/styles.scss +0 -23
- package/src/theme/components/accordion.ts +0 -25
- package/src/theme/components/breadcrumb.ts +0 -94
- package/src/theme/components/button.ts +0 -133
- package/src/theme/components/buttonGroup.ts +0 -10
- package/src/theme/components/card.ts +0 -237
- package/src/theme/components/checkbox.ts +0 -110
- package/src/theme/components/checkboxGroup.ts +0 -10
- package/src/theme/components/componentWrapper.ts +0 -14
- package/src/theme/components/customTable.ts +0 -77
- package/src/theme/components/datePicker.ts +0 -17
- package/src/theme/components/fieldset.ts +0 -23
- package/src/theme/components/global.ts +0 -91
- package/src/theme/components/globalMixins.ts +0 -24
- package/src/theme/components/heading.ts +0 -79
- package/src/theme/components/helperErrorText.ts +0 -14
- package/src/theme/components/hero.ts +0 -238
- package/src/theme/components/horizontalRule.ts +0 -17
- package/src/theme/components/icon.ts +0 -88
- package/src/theme/components/image.ts +0 -136
- package/src/theme/components/label.ts +0 -15
- package/src/theme/components/link.ts +0 -63
- package/src/theme/components/list.ts +0 -88
- package/src/theme/components/logo.ts +0 -58
- package/src/theme/components/notification.ts +0 -132
- package/src/theme/components/pagination.ts +0 -17
- package/src/theme/components/progressIndicator.ts +0 -67
- package/src/theme/components/radio.ts +0 -103
- package/src/theme/components/radioGroup.ts +0 -10
- package/src/theme/components/searchBar.ts +0 -19
- package/src/theme/components/select.ts +0 -72
- package/src/theme/components/skeletonLoader.ts +0 -113
- package/src/theme/components/skipNavigation.ts +0 -29
- package/src/theme/components/slider.ts +0 -95
- package/src/theme/components/statusBadge.ts +0 -26
- package/src/theme/components/structuredContent.ts +0 -149
- package/src/theme/components/tabs.ts +0 -109
- package/src/theme/components/template.ts +0 -114
- package/src/theme/components/text.ts +0 -38
- package/src/theme/components/textInput.ts +0 -65
- package/src/theme/components/toggle.ts +0 -109
- package/src/theme/components/videoPlayer.ts +0 -47
- package/src/theme/foundations/breakpoints.ts +0 -24
- package/src/theme/foundations/colors.ts +0 -212
- package/src/theme/foundations/global.ts +0 -43
- package/src/theme/foundations/radii.ts +0 -7
- package/src/theme/foundations/shadows.ts +0 -5
- package/src/theme/foundations/spacing.ts +0 -136
- package/src/theme/foundations/typography.ts +0 -107
- package/src/theme/index.ts +0 -131
- package/src/theme/provider.tsx +0 -9
- package/src/theme/types.ts +0 -1
- package/src/utils/componentCategories.ts +0 -152
- package/src/utils/interfaces.ts +0 -5
- package/src/utils/utils.ts +0 -84
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import { VStack } from "@chakra-ui/react";
|
|
2
|
-
import {
|
|
3
|
-
ArgsTable,
|
|
4
|
-
Canvas,
|
|
5
|
-
Description,
|
|
6
|
-
Meta,
|
|
7
|
-
Story,
|
|
8
|
-
} from "@storybook/addon-docs";
|
|
9
|
-
import { withDesign } from "storybook-addon-designs";
|
|
10
|
-
|
|
11
|
-
import TextInput from "./TextInput";
|
|
12
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
13
|
-
import DSProvider from "../../theme/provider";
|
|
14
|
-
|
|
15
|
-
<Meta
|
|
16
|
-
title={getCategory("TextInput")}
|
|
17
|
-
component={TextInput}
|
|
18
|
-
decorators={[withDesign]}
|
|
19
|
-
parameters={{
|
|
20
|
-
design: {
|
|
21
|
-
type: "figma",
|
|
22
|
-
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
|
|
23
|
-
},
|
|
24
|
-
jest: ["TextInput.test.tsx"],
|
|
25
|
-
}}
|
|
26
|
-
argTypes={{
|
|
27
|
-
id: { control: false },
|
|
28
|
-
isDisabled: { table: { defaultValue: { summary: false } } },
|
|
29
|
-
isInvalid: { table: { defaultValue: { summary: false } } },
|
|
30
|
-
isRequired: { table: { defaultValue: { summary: false } } },
|
|
31
|
-
key: { table: { disable: true } },
|
|
32
|
-
onChange: { control: false },
|
|
33
|
-
ref: { table: { disable: true } },
|
|
34
|
-
showHelperInvalidText: { table: { defaultValue: { summary: true } } },
|
|
35
|
-
showLabel: { table: { defaultValue: { summary: true } } },
|
|
36
|
-
showRequiredLabel: { table: { defaultValue: { summary: true } } },
|
|
37
|
-
step: { table: { defaultValue: { summary: 1 } } },
|
|
38
|
-
textInputType: {
|
|
39
|
-
control: false,
|
|
40
|
-
table: { defaultValue: { summary: "default" } },
|
|
41
|
-
},
|
|
42
|
-
type: {
|
|
43
|
-
table: { defaultValue: { summary: "text" } },
|
|
44
|
-
},
|
|
45
|
-
value: { control: false },
|
|
46
|
-
}}
|
|
47
|
-
/>
|
|
48
|
-
|
|
49
|
-
# TextInput
|
|
50
|
-
|
|
51
|
-
| Component Version | DS Version |
|
|
52
|
-
| ----------------- | ---------- |
|
|
53
|
-
| Added | `0.22.0` |
|
|
54
|
-
| Latest | `1.0.2` |
|
|
55
|
-
|
|
56
|
-
## Table of Contents
|
|
57
|
-
|
|
58
|
-
- [Overview](#overview)
|
|
59
|
-
- [Component Props](#component-props)
|
|
60
|
-
- [Accessibility](#accessibility)
|
|
61
|
-
- [Labelling Variations](#labelling-variations)
|
|
62
|
-
- [HTML in Helper Text](#html-in-helper-text)
|
|
63
|
-
- [Textarea](#textarea)
|
|
64
|
-
|
|
65
|
-
## Overview
|
|
66
|
-
|
|
67
|
-
<Description of={TextInput} />
|
|
68
|
-
|
|
69
|
-
This component renders a text input form element. See below for configuration
|
|
70
|
-
information. For optimal accessibility, the `labelText` property is a required
|
|
71
|
-
prop, regardless of the label visibility. Additionally, while the `id` prop is
|
|
72
|
-
optional, a unique `id` attribute is necessary for accessibility. If the prop
|
|
73
|
-
is left blank, a value will be generated for you.
|
|
74
|
-
|
|
75
|
-
## Component Props
|
|
76
|
-
|
|
77
|
-
<Canvas withToolbar>
|
|
78
|
-
<Story
|
|
79
|
-
name="TextInput with Controls"
|
|
80
|
-
args={{
|
|
81
|
-
className: undefined,
|
|
82
|
-
defaultValue: undefined,
|
|
83
|
-
helperText: "Choose wisely.",
|
|
84
|
-
id: "textInput-id",
|
|
85
|
-
invalidText: "This is error text :(",
|
|
86
|
-
isDisabled: false,
|
|
87
|
-
isInvalid: false,
|
|
88
|
-
isRequired: true,
|
|
89
|
-
labelText: "What is your favorite color?",
|
|
90
|
-
name: undefined,
|
|
91
|
-
onChange: undefined,
|
|
92
|
-
placeholder: "e.g. blue, green, etc.",
|
|
93
|
-
showHelperInvalidText: true,
|
|
94
|
-
showLabel: true,
|
|
95
|
-
showRequiredLabel: true,
|
|
96
|
-
step: 1,
|
|
97
|
-
type: "text",
|
|
98
|
-
value: undefined,
|
|
99
|
-
textInputType: "default",
|
|
100
|
-
}}
|
|
101
|
-
>
|
|
102
|
-
{(args) => <TextInput {...args} />}
|
|
103
|
-
</Story>
|
|
104
|
-
</Canvas>
|
|
105
|
-
|
|
106
|
-
<ArgsTable story="TextInput with Controls" />
|
|
107
|
-
|
|
108
|
-
## Accessibility
|
|
109
|
-
|
|
110
|
-
The `TextInput` component renders an HTML `<input>` element which is accessible
|
|
111
|
-
via keyboard and screen reader. The `aria-required` and `required` attributes are
|
|
112
|
-
set with the `isRequired` prop. The `aria-disabled` and `disabled` attributes are
|
|
113
|
-
set with the `isDisabled` prop. The `aria-invalid` is set with the `isInvalid`
|
|
114
|
-
prop.
|
|
115
|
-
|
|
116
|
-
Internally, a `Label` is associated with the `<input>` element. When `showLabel`
|
|
117
|
-
is set to false, the `<input>` element's `aria-label` attribute is set to the
|
|
118
|
-
required `labelText` value.
|
|
119
|
-
|
|
120
|
-
When the `type` prop is set to `"textarea"`, the `<textarea>` element
|
|
121
|
-
is rendered instead of the `<input>` element. This element follows all the same
|
|
122
|
-
accessibility rules described above.
|
|
123
|
-
|
|
124
|
-
Resources:
|
|
125
|
-
|
|
126
|
-
- [MDN input: The Input (Form Input) element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input)
|
|
127
|
-
- [MDN textarea: The Textarea element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea)
|
|
128
|
-
- [Chakra UI Input](https://chakra-ui.com/docs/components/form/input)
|
|
129
|
-
- [Chakra UI Textarea](https://chakra-ui.com/docs/components/form/textarea)
|
|
130
|
-
|
|
131
|
-
## Labelling Variations
|
|
132
|
-
|
|
133
|
-
A TextInput can be rendered with or without visible labels. When `showLabel` is
|
|
134
|
-
set to `false`, an `aria-label` attribute is added to the input/textarea element
|
|
135
|
-
to maintain accessibility. If the component needs to be required, the
|
|
136
|
-
`showRequiredLabel` prop can be used to show or hide the "(Required)" text
|
|
137
|
-
within the `label` element.
|
|
138
|
-
|
|
139
|
-
<Canvas withToolbar>
|
|
140
|
-
<Story name="Labelling Variations">
|
|
141
|
-
<VStack align="stretch" spacing={12}>
|
|
142
|
-
<TextInput
|
|
143
|
-
helperText="Choose wisely!"
|
|
144
|
-
id="textInput-1"
|
|
145
|
-
labelText="What is your favorite color?"
|
|
146
|
-
placeholder="i.e. blue, green, etc."
|
|
147
|
-
/>
|
|
148
|
-
<TextInput
|
|
149
|
-
id="textInput-2"
|
|
150
|
-
labelText="What is your favorite color?"
|
|
151
|
-
placeholder="i.e. blue, green, etc."
|
|
152
|
-
showLabel={false}
|
|
153
|
-
/>
|
|
154
|
-
<TextInput
|
|
155
|
-
id="textInput-3"
|
|
156
|
-
isRequired
|
|
157
|
-
labelText="What is your favorite color?"
|
|
158
|
-
placeholder="i.e. blue, green, etc."
|
|
159
|
-
/>
|
|
160
|
-
<TextInput
|
|
161
|
-
id="textInput-4"
|
|
162
|
-
isRequired
|
|
163
|
-
labelText="What is your favorite color?"
|
|
164
|
-
placeholder="i.e. blue, green, etc."
|
|
165
|
-
showRequiredLabel={false}
|
|
166
|
-
/>
|
|
167
|
-
<TextInput
|
|
168
|
-
helperText="Choose wisely!"
|
|
169
|
-
id="textInput-5"
|
|
170
|
-
labelText="What is your favorite color?"
|
|
171
|
-
placeholder="i.e. blue, green, etc."
|
|
172
|
-
showLabel={false}
|
|
173
|
-
/>
|
|
174
|
-
</VStack>
|
|
175
|
-
</Story>
|
|
176
|
-
</Canvas>
|
|
177
|
-
|
|
178
|
-
### Errored
|
|
179
|
-
|
|
180
|
-
<Canvas>
|
|
181
|
-
<DSProvider>
|
|
182
|
-
<TextInput
|
|
183
|
-
helperText="Choose wisely!"
|
|
184
|
-
id="errored"
|
|
185
|
-
invalidText="This is error text :("
|
|
186
|
-
isInvalid
|
|
187
|
-
labelText="What is your favorite color?"
|
|
188
|
-
placeholder="i.e. blue, green, etc."
|
|
189
|
-
/>
|
|
190
|
-
</DSProvider>
|
|
191
|
-
</Canvas>
|
|
192
|
-
|
|
193
|
-
### Disabled
|
|
194
|
-
|
|
195
|
-
<Canvas>
|
|
196
|
-
<DSProvider>
|
|
197
|
-
<TextInput
|
|
198
|
-
helperText="Choose wisely!"
|
|
199
|
-
id="disabled"
|
|
200
|
-
isDisabled
|
|
201
|
-
labelText="What is your favorite color?"
|
|
202
|
-
placeholder="i.e. blue, green, etc."
|
|
203
|
-
/>
|
|
204
|
-
</DSProvider>
|
|
205
|
-
</Canvas>
|
|
206
|
-
|
|
207
|
-
## HTML in Helper Text
|
|
208
|
-
|
|
209
|
-
HTML can be passed into the `helperText` prop as a string or HTML.
|
|
210
|
-
|
|
211
|
-
```jsx
|
|
212
|
-
helperText="Choose <b>wisely!</b>"
|
|
213
|
-
// or
|
|
214
|
-
helperText={<>Choose <b>wisely!</b></>}
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
<Canvas>
|
|
218
|
-
<DSProvider>
|
|
219
|
-
<TextInput
|
|
220
|
-
helperText="Choose <b>wisely!</b>"
|
|
221
|
-
id="string"
|
|
222
|
-
labelText="What is your favorite color?"
|
|
223
|
-
placeholder="i.e. blue, green, etc."
|
|
224
|
-
/>
|
|
225
|
-
<br />
|
|
226
|
-
<TextInput
|
|
227
|
-
helperText={
|
|
228
|
-
<>
|
|
229
|
-
Choose <b>wisely!</b>
|
|
230
|
-
</>
|
|
231
|
-
}
|
|
232
|
-
id="jsx"
|
|
233
|
-
labelText="What is your favorite color?"
|
|
234
|
-
placeholder="i.e. blue, green, etc."
|
|
235
|
-
/>
|
|
236
|
-
</DSProvider>
|
|
237
|
-
</Canvas>
|
|
238
|
-
|
|
239
|
-
## Textarea
|
|
240
|
-
|
|
241
|
-
The TextInput component includes a multiline `textarea` form field. To render a
|
|
242
|
-
`textarea` element, pass `"textarea"` for the `type` prop. All the variations
|
|
243
|
-
described above are available for the `textarea` option.
|
|
244
|
-
|
|
245
|
-
<Canvas withToolbar>
|
|
246
|
-
<Story
|
|
247
|
-
name="Textarea"
|
|
248
|
-
args={{
|
|
249
|
-
helperText: "Let it all out.",
|
|
250
|
-
id: "textarea",
|
|
251
|
-
invalidText: "This is error text :(",
|
|
252
|
-
isDisabled: false,
|
|
253
|
-
isInvalid: false,
|
|
254
|
-
isRequired: true,
|
|
255
|
-
labelText: "In less than 500 words, describe your favorite color?",
|
|
256
|
-
placeholder: "Essay question...",
|
|
257
|
-
showLabel: true,
|
|
258
|
-
showRequiredLabel: true,
|
|
259
|
-
type: "textarea",
|
|
260
|
-
}}
|
|
261
|
-
argTypes={{
|
|
262
|
-
type: { control: false },
|
|
263
|
-
textInputType: { control: false },
|
|
264
|
-
}}
|
|
265
|
-
>
|
|
266
|
-
{(args) => <TextInput {...args} />}
|
|
267
|
-
</Story>
|
|
268
|
-
</Canvas>
|
|
@@ -1,451 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { render, RenderResult, screen } from "@testing-library/react";
|
|
3
|
-
import { axe } from "jest-axe";
|
|
4
|
-
import renderer from "react-test-renderer";
|
|
5
|
-
import userEvent from "@testing-library/user-event";
|
|
6
|
-
|
|
7
|
-
import TextInput from "./TextInput";
|
|
8
|
-
|
|
9
|
-
describe("TextInput Accessibility", () => {
|
|
10
|
-
it("passes axe accessibility test for the input element", async () => {
|
|
11
|
-
const { container } = render(
|
|
12
|
-
<TextInput
|
|
13
|
-
id="textInput"
|
|
14
|
-
isRequired
|
|
15
|
-
labelText="Custom input label"
|
|
16
|
-
onChange={jest.fn()}
|
|
17
|
-
placeholder="Input Placeholder"
|
|
18
|
-
type="text"
|
|
19
|
-
/>
|
|
20
|
-
);
|
|
21
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it("passes axe accessibility test for the textarea element", async () => {
|
|
25
|
-
const { container } = render(
|
|
26
|
-
<TextInput
|
|
27
|
-
id="textInput"
|
|
28
|
-
isRequired
|
|
29
|
-
labelText="Custom textarea label"
|
|
30
|
-
onChange={jest.fn()}
|
|
31
|
-
placeholder="Input Placeholder"
|
|
32
|
-
type="textarea"
|
|
33
|
-
/>
|
|
34
|
-
);
|
|
35
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
describe("TextInput", () => {
|
|
40
|
-
let changeHandler: jest.MockedFunction<() => void>;
|
|
41
|
-
let utils: RenderResult;
|
|
42
|
-
|
|
43
|
-
beforeEach(() => {
|
|
44
|
-
changeHandler = jest.fn();
|
|
45
|
-
utils = render(
|
|
46
|
-
<TextInput
|
|
47
|
-
id="myTextInput"
|
|
48
|
-
isRequired
|
|
49
|
-
labelText="Custom Input Label"
|
|
50
|
-
onChange={changeHandler}
|
|
51
|
-
placeholder="Input Placeholder"
|
|
52
|
-
type="text"
|
|
53
|
-
/>
|
|
54
|
-
);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it("renders an input element", () => {
|
|
58
|
-
expect(screen.getByLabelText(/Custom Input Label/i)).toBeInTheDocument();
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it("renders label with label text", () => {
|
|
62
|
-
expect(screen.getByText("Custom Input Label")).toBeInTheDocument();
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it("renders 'Required' along with the label text", () => {
|
|
66
|
-
expect(screen.getByText("Custom Input Label")).toBeInTheDocument();
|
|
67
|
-
expect(screen.getByText(/Required/i)).toBeInTheDocument();
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it("does not render '(Required)' along with the label text", () => {
|
|
71
|
-
utils.rerender(
|
|
72
|
-
<TextInput
|
|
73
|
-
id="myTextInput"
|
|
74
|
-
isRequired
|
|
75
|
-
labelText="Custom Input Label"
|
|
76
|
-
onChange={changeHandler}
|
|
77
|
-
placeholder="Input Placeholder"
|
|
78
|
-
showRequiredLabel={false}
|
|
79
|
-
type="text"
|
|
80
|
-
/>
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
expect(screen.getByText("Custom Input Label")).toBeInTheDocument();
|
|
84
|
-
expect(screen.queryByText(/Required/i)).not.toBeInTheDocument();
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it("renders label's `for` attribute pointing at ID from input", () => {
|
|
88
|
-
expect(screen.getByText(/Custom Input Label/i)).toHaveAttribute(
|
|
89
|
-
"for",
|
|
90
|
-
"myTextInput"
|
|
91
|
-
);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it("renders placeholder text", () => {
|
|
95
|
-
expect(
|
|
96
|
-
screen.getByPlaceholderText("Input Placeholder")
|
|
97
|
-
).toBeInTheDocument();
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it("adds aria-required prop if input is required", () => {
|
|
101
|
-
expect(screen.getByLabelText(/Custom Input Label/i)).toHaveAttribute(
|
|
102
|
-
"aria-required"
|
|
103
|
-
);
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it("changing the value calls the onChange handler", () => {
|
|
107
|
-
expect(changeHandler).toHaveBeenCalledTimes(0);
|
|
108
|
-
userEvent.type(screen.getByLabelText(/Custom Input Label/i), "Hello");
|
|
109
|
-
// Called 5 times because "Hello" has length of 5.
|
|
110
|
-
expect(changeHandler).toHaveBeenCalledTimes(5);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it("logs a warning when there is no `id` passed", () => {
|
|
114
|
-
const warn = jest.spyOn(console, "warn");
|
|
115
|
-
render(
|
|
116
|
-
// @ts-ignore: Typescript complains when a required prop is not passed, but
|
|
117
|
-
// here we don't want to pass the required prop to make sure the warning appears.
|
|
118
|
-
<TextInput labelText="Custom Input Label" />
|
|
119
|
-
);
|
|
120
|
-
expect(warn).toHaveBeenCalledWith(
|
|
121
|
-
"NYPL Reservoir TextInput: This component's required `id` prop was not passed."
|
|
122
|
-
);
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
describe("Renders TextInput with auto-generated ID, hidden label and visible helper text", () => {
|
|
127
|
-
beforeEach(() => {
|
|
128
|
-
render(
|
|
129
|
-
<TextInput
|
|
130
|
-
helperText="Custom Helper Text"
|
|
131
|
-
id="textInput"
|
|
132
|
-
isRequired
|
|
133
|
-
labelText="Custom Input Label"
|
|
134
|
-
placeholder="Input Placeholder"
|
|
135
|
-
showLabel={false}
|
|
136
|
-
type="text"
|
|
137
|
-
/>
|
|
138
|
-
);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
it("renders Input component", () => {
|
|
142
|
-
expect(screen.getByLabelText(/Custom Input Label/i)).toBeInTheDocument();
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it("does not renders Label component", () => {
|
|
146
|
-
expect(screen.queryByText(/Custom Input Label/i)).not.toBeInTheDocument();
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it("renders custom aria-label", () => {
|
|
150
|
-
expect(screen.getByLabelText(/Custom Input Label/i)).toHaveAttribute(
|
|
151
|
-
"aria-label",
|
|
152
|
-
"Custom Input Label - Custom Helper Text"
|
|
153
|
-
);
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
it("renders HelperErrorText component", () => {
|
|
157
|
-
expect(screen.getByText("Custom Helper Text")).toBeInTheDocument();
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
describe("TextInput shows error state", () => {
|
|
162
|
-
let utils: RenderResult;
|
|
163
|
-
|
|
164
|
-
beforeEach(() => {
|
|
165
|
-
utils = render(
|
|
166
|
-
<TextInput
|
|
167
|
-
helperText="Custom Helper Text"
|
|
168
|
-
id="myTextInputError"
|
|
169
|
-
invalidText="Custom Error Text"
|
|
170
|
-
isInvalid
|
|
171
|
-
labelText="Custom Input Label"
|
|
172
|
-
placeholder="Input Placeholder"
|
|
173
|
-
type="text"
|
|
174
|
-
/>
|
|
175
|
-
);
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
it("renders Input component", () => {
|
|
179
|
-
expect(screen.getByLabelText(/Custom Input Label/i)).toBeInTheDocument();
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
it("renders Label component", () => {
|
|
183
|
-
expect(screen.getByText(/Custom Input Label/i)).toBeInTheDocument();
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it("renders HelperErrorText component", () => {
|
|
187
|
-
expect(screen.queryByText("Custom Helper Text")).not.toBeInTheDocument();
|
|
188
|
-
expect(screen.getByText("Custom Error Text")).toBeInTheDocument();
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
it("does not render the invalid text when 'showHelperInvalidText' is set to false", () => {
|
|
192
|
-
utils.rerender(
|
|
193
|
-
<TextInput
|
|
194
|
-
helperText="Custom Helper Text"
|
|
195
|
-
id="myTextInputError"
|
|
196
|
-
invalidText="Custom Error Text"
|
|
197
|
-
isInvalid
|
|
198
|
-
labelText="Custom Input Label"
|
|
199
|
-
placeholder="Input Placeholder"
|
|
200
|
-
showHelperInvalidText={false}
|
|
201
|
-
type="text"
|
|
202
|
-
/>
|
|
203
|
-
);
|
|
204
|
-
expect(screen.queryByText("Custom Helper Text")).not.toBeInTheDocument();
|
|
205
|
-
expect(screen.queryByText("Custom Error Text")).not.toBeInTheDocument();
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
it("input shows error state", () => {
|
|
209
|
-
expect(screen.getByLabelText(/Custom Input Label/i)).toHaveAttribute(
|
|
210
|
-
"aria-invalid"
|
|
211
|
-
);
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
describe("Renders HTML attributes passed", () => {
|
|
216
|
-
const onChangeSpy = jest.fn();
|
|
217
|
-
beforeEach(() => {
|
|
218
|
-
render(
|
|
219
|
-
<TextInput
|
|
220
|
-
id="inputID-attributes"
|
|
221
|
-
labelText="Input Label"
|
|
222
|
-
maxLength={10}
|
|
223
|
-
onChange={onChangeSpy}
|
|
224
|
-
placeholder="Input Placeholder"
|
|
225
|
-
type="text"
|
|
226
|
-
/>
|
|
227
|
-
);
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
it("has a maxlength for the input element", () => {
|
|
231
|
-
expect(screen.getByLabelText(/Input Label/i)).toHaveAttribute(
|
|
232
|
-
"maxLength",
|
|
233
|
-
"10"
|
|
234
|
-
);
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
it("calls the onChange function", () => {
|
|
238
|
-
expect(onChangeSpy).toHaveBeenCalledTimes(0);
|
|
239
|
-
userEvent.type(screen.getByLabelText(/Input Label/i), "Hello");
|
|
240
|
-
expect(onChangeSpy).toHaveBeenCalledTimes(5);
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
// TODO:
|
|
245
|
-
// describe("Forwarding refs", () => {
|
|
246
|
-
// it("Passes the ref to the input element", () => {
|
|
247
|
-
// const ref = React.createRef<TextInputRefType>();
|
|
248
|
-
// const container = render(
|
|
249
|
-
// <TextInput
|
|
250
|
-
// id="inputID-attributes"
|
|
251
|
-
// labelText="Input Label"
|
|
252
|
-
// placeholder={"Input Placeholder"}
|
|
253
|
-
// type="text"
|
|
254
|
-
// ref={ref}
|
|
255
|
-
// />
|
|
256
|
-
// );
|
|
257
|
-
// expect(container.find("input").instance()).toEqual(ref.current);
|
|
258
|
-
// });
|
|
259
|
-
|
|
260
|
-
// it("Passes the ref to the textarea element", () => {
|
|
261
|
-
// const ref = React.createRef<TextInputRefType>();
|
|
262
|
-
// const container = render(
|
|
263
|
-
// <TextInput
|
|
264
|
-
// id="inputID-attributes"
|
|
265
|
-
// labelText="Input Label"
|
|
266
|
-
// placeholder={"Input Placeholder"}
|
|
267
|
-
// type="textarea"
|
|
268
|
-
// ref={ref}
|
|
269
|
-
// />
|
|
270
|
-
// );
|
|
271
|
-
// expect(container.find("textarea").instance()).toEqual(ref.current);
|
|
272
|
-
// });
|
|
273
|
-
// });
|
|
274
|
-
|
|
275
|
-
describe("Hidden input", () => {
|
|
276
|
-
it("renders a hidden type input", () => {
|
|
277
|
-
const utils = render(
|
|
278
|
-
<TextInput
|
|
279
|
-
id="inputID-hidden"
|
|
280
|
-
labelText="Hidden Input Label"
|
|
281
|
-
type="hidden"
|
|
282
|
-
value="hidden"
|
|
283
|
-
/>
|
|
284
|
-
);
|
|
285
|
-
|
|
286
|
-
expect(utils.container.querySelector("#inputID-hidden")).toHaveAttribute(
|
|
287
|
-
"aria-hidden"
|
|
288
|
-
);
|
|
289
|
-
expect(utils.container.querySelector("#inputID-hidden")).toHaveAttribute(
|
|
290
|
-
"value",
|
|
291
|
-
"hidden"
|
|
292
|
-
);
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it("does not show the helper text", () => {
|
|
296
|
-
render(
|
|
297
|
-
<TextInput
|
|
298
|
-
helperText="Helper Text"
|
|
299
|
-
id="inputID-hidden"
|
|
300
|
-
labelText="Hidden Input Label"
|
|
301
|
-
type="hidden"
|
|
302
|
-
value="hidden"
|
|
303
|
-
/>
|
|
304
|
-
);
|
|
305
|
-
|
|
306
|
-
expect(screen.queryByText("Hidden Input Label")).not.toBeInTheDocument();
|
|
307
|
-
expect(screen.queryByText("Helper Text")).not.toBeInTheDocument();
|
|
308
|
-
});
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
describe("Textarea element type", () => {
|
|
312
|
-
beforeEach(() => {
|
|
313
|
-
render(
|
|
314
|
-
<TextInput
|
|
315
|
-
id="myTextarea"
|
|
316
|
-
labelText="Custom textarea Label"
|
|
317
|
-
placeholder="Textarea Placeholder"
|
|
318
|
-
type="textarea"
|
|
319
|
-
/>
|
|
320
|
-
);
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
it("renders a textarea element", () => {
|
|
324
|
-
expect(screen.getByRole("textbox")).toBeInTheDocument();
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
it("renders label with label text", () => {
|
|
328
|
-
expect(screen.getByLabelText(/Custom textarea Label/i)).toBeInTheDocument();
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
describe("UI Snapshots", () => {
|
|
333
|
-
it("renders the text input UI snapshot correctly", () => {
|
|
334
|
-
const required = renderer
|
|
335
|
-
.create(
|
|
336
|
-
<TextInput
|
|
337
|
-
id="myTextInput"
|
|
338
|
-
isRequired
|
|
339
|
-
labelText="Custom Input Label"
|
|
340
|
-
placeholder="Input Placeholder"
|
|
341
|
-
type="text"
|
|
342
|
-
/>
|
|
343
|
-
)
|
|
344
|
-
.toJSON();
|
|
345
|
-
const optional = renderer
|
|
346
|
-
.create(
|
|
347
|
-
<TextInput
|
|
348
|
-
id="myTextInput"
|
|
349
|
-
labelText="Custom Input Label"
|
|
350
|
-
placeholder="Input Placeholder"
|
|
351
|
-
type="text"
|
|
352
|
-
/>
|
|
353
|
-
)
|
|
354
|
-
.toJSON();
|
|
355
|
-
const hiddenLabelText = renderer
|
|
356
|
-
.create(
|
|
357
|
-
<TextInput
|
|
358
|
-
id="myTextInput"
|
|
359
|
-
isRequired
|
|
360
|
-
labelText="Custom Input Label"
|
|
361
|
-
placeholder="Input Placeholder"
|
|
362
|
-
showLabel={false}
|
|
363
|
-
type="text"
|
|
364
|
-
/>
|
|
365
|
-
)
|
|
366
|
-
.toJSON();
|
|
367
|
-
const withHelperText = renderer
|
|
368
|
-
.create(
|
|
369
|
-
<TextInput
|
|
370
|
-
helperText="Custom helper text"
|
|
371
|
-
id="myTextInput"
|
|
372
|
-
isRequired
|
|
373
|
-
labelText="Custom Input Label"
|
|
374
|
-
placeholder="Input Placeholder"
|
|
375
|
-
type="text"
|
|
376
|
-
/>
|
|
377
|
-
)
|
|
378
|
-
.toJSON();
|
|
379
|
-
const errorState = renderer
|
|
380
|
-
.create(
|
|
381
|
-
<TextInput
|
|
382
|
-
id="myTextInput"
|
|
383
|
-
isInvalid
|
|
384
|
-
isRequired
|
|
385
|
-
labelText="Custom Input Label"
|
|
386
|
-
placeholder="Input Placeholder"
|
|
387
|
-
type="text"
|
|
388
|
-
/>
|
|
389
|
-
)
|
|
390
|
-
.toJSON();
|
|
391
|
-
const disabledState = renderer
|
|
392
|
-
.create(
|
|
393
|
-
<TextInput
|
|
394
|
-
id="myTextInput"
|
|
395
|
-
isDisabled
|
|
396
|
-
isRequired
|
|
397
|
-
labelText="Custom Input Label"
|
|
398
|
-
placeholder="Input Placeholder"
|
|
399
|
-
type="text"
|
|
400
|
-
/>
|
|
401
|
-
)
|
|
402
|
-
.toJSON();
|
|
403
|
-
const withChakraProps = renderer
|
|
404
|
-
.create(
|
|
405
|
-
<TextInput
|
|
406
|
-
id="chakra"
|
|
407
|
-
labelText="Custom Input Label"
|
|
408
|
-
placeholder="Input Placeholder"
|
|
409
|
-
type="text"
|
|
410
|
-
p="20px"
|
|
411
|
-
color="ui.error.primary"
|
|
412
|
-
/>
|
|
413
|
-
)
|
|
414
|
-
.toJSON();
|
|
415
|
-
const withOtherProps = renderer
|
|
416
|
-
.create(
|
|
417
|
-
<TextInput
|
|
418
|
-
id="props"
|
|
419
|
-
labelText="Custom Input Label"
|
|
420
|
-
placeholder="Input Placeholder"
|
|
421
|
-
type="text"
|
|
422
|
-
data-testid="props"
|
|
423
|
-
/>
|
|
424
|
-
)
|
|
425
|
-
.toJSON();
|
|
426
|
-
|
|
427
|
-
expect(required).toMatchSnapshot();
|
|
428
|
-
expect(optional).toMatchSnapshot();
|
|
429
|
-
expect(hiddenLabelText).toMatchSnapshot();
|
|
430
|
-
expect(withHelperText).toMatchSnapshot();
|
|
431
|
-
expect(errorState).toMatchSnapshot();
|
|
432
|
-
expect(disabledState).toMatchSnapshot();
|
|
433
|
-
expect(withChakraProps).toMatchSnapshot();
|
|
434
|
-
expect(withOtherProps).toMatchSnapshot();
|
|
435
|
-
});
|
|
436
|
-
|
|
437
|
-
it("renders the textarea UI snapshot correctly", () => {
|
|
438
|
-
const basicTextarea = renderer
|
|
439
|
-
.create(
|
|
440
|
-
<TextInput
|
|
441
|
-
id="myTextarea"
|
|
442
|
-
labelText="Custom textarea Label"
|
|
443
|
-
placeholder="Textarea Placeholder"
|
|
444
|
-
type="textarea"
|
|
445
|
-
/>
|
|
446
|
-
)
|
|
447
|
-
.toJSON();
|
|
448
|
-
|
|
449
|
-
expect(basicTextarea).toMatchSnapshot();
|
|
450
|
-
});
|
|
451
|
-
});
|