@nypl/design-system-react-components 0.25.1 → 0.25.5

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.
Files changed (307) hide show
  1. package/CHANGELOG.md +118 -1
  2. package/README.md +98 -50
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
  4. package/dist/components/Button/Button.d.ts +13 -8
  5. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  6. package/dist/components/Card/Card.d.ts +36 -52
  7. package/dist/components/Card/CardTypes.d.ts +0 -15
  8. package/dist/components/Checkbox/Checkbox.d.ts +17 -13
  9. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -2
  10. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
  11. package/dist/components/DatePicker/DatePicker.d.ts +36 -34
  12. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  13. package/dist/components/Heading/Heading.d.ts +4 -4
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
  16. package/dist/components/Icons/Icon.d.ts +8 -0
  17. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  18. package/dist/components/Icons/IconTypes.d.ts +11 -0
  19. package/dist/components/Image/Image.d.ts +19 -9
  20. package/dist/components/Image/ImageTypes.d.ts +20 -0
  21. package/dist/components/Link/Link.d.ts +4 -0
  22. package/dist/components/List/List.d.ts +19 -14
  23. package/dist/components/Notification/Notification.d.ts +37 -16
  24. package/dist/components/Pagination/Pagination.d.ts +16 -13
  25. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  26. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  27. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  28. package/dist/components/Radio/Radio.d.ts +2 -0
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +3 -3
  31. package/dist/components/Select/Select.d.ts +2 -0
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  33. package/dist/components/Slider/Slider.d.ts +57 -0
  34. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  35. package/dist/components/Tabs/Tabs.d.ts +1 -1
  36. package/dist/components/TextInput/TextInput.d.ts +12 -0
  37. package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
  38. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
  39. package/dist/design-system-react-components.cjs.development.js +6131 -3715
  40. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  41. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  43. package/dist/design-system-react-components.esm.js +6124 -3699
  44. package/dist/design-system-react-components.esm.js.map +1 -1
  45. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  46. package/dist/hooks/useCarouselStyles.d.ts +16 -0
  47. package/dist/hooks/useNYPLTheme.d.ts +54 -0
  48. package/dist/hooks/useWindowSize.d.ts +10 -0
  49. package/dist/index.d.ts +13 -8
  50. package/dist/resources.scss +180 -170
  51. package/dist/styles.css +1 -1
  52. package/dist/theme/components/button.d.ts +22 -8
  53. package/dist/theme/components/card.d.ts +168 -0
  54. package/dist/theme/components/checkbox.d.ts +5 -1
  55. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  56. package/dist/theme/components/componentWrapper.d.ts +11 -0
  57. package/dist/theme/components/datePicker.d.ts +16 -0
  58. package/dist/theme/components/fieldset.d.ts +27 -0
  59. package/dist/theme/components/global.d.ts +23 -13
  60. package/dist/theme/components/globalMixins.d.ts +9 -1
  61. package/dist/theme/components/heading.d.ts +5 -0
  62. package/dist/theme/components/helperErrorText.d.ts +10 -0
  63. package/dist/theme/components/hero.d.ts +1 -0
  64. package/dist/theme/components/horizontalRule.d.ts +14 -0
  65. package/dist/theme/components/image.d.ts +31 -0
  66. package/dist/theme/components/label.d.ts +5 -3
  67. package/dist/theme/components/link.d.ts +4 -0
  68. package/dist/theme/components/list.d.ts +89 -0
  69. package/dist/theme/components/notification.d.ts +75 -0
  70. package/dist/theme/components/pagination.d.ts +19 -0
  71. package/dist/theme/components/progressIndicator.d.ts +50 -0
  72. package/dist/theme/components/radioGroup.d.ts +12 -0
  73. package/dist/theme/components/select.d.ts +11 -2
  74. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  75. package/dist/theme/components/slider.d.ts +51 -0
  76. package/dist/theme/components/tabs.d.ts +54 -3
  77. package/dist/theme/components/textInput.d.ts +8 -1
  78. package/dist/theme/components/videoPlayer.d.ts +40 -0
  79. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  80. package/dist/theme/foundations/global.d.ts +6 -1
  81. package/dist/theme/foundations/radii.d.ts +5 -0
  82. package/dist/theme/foundations/spacing.d.ts +16 -16
  83. package/package.json +72 -83
  84. package/src/__tests__/setup.ts +2 -2
  85. package/src/components/Accordion/Accordion.stories.mdx +39 -44
  86. package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
  87. package/src/components/Autosuggest/Autosuggest.stories.tsx +2 -1
  88. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  89. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +14 -10
  90. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +23 -0
  91. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  92. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +199 -1
  93. package/src/components/Button/Button.stories.mdx +15 -10
  94. package/src/components/Button/Button.test.tsx +21 -7
  95. package/src/components/Button/Button.tsx +22 -34
  96. package/src/components/Button/ButtonTypes.tsx +1 -0
  97. package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
  98. package/src/components/Card/Card.stories.mdx +296 -259
  99. package/src/components/Card/Card.test.tsx +156 -84
  100. package/src/components/Card/Card.tsx +195 -145
  101. package/src/components/Card/CardTypes.tsx +0 -17
  102. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  103. package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
  104. package/src/components/CardEdition/_CardEdition.scss +22 -23
  105. package/src/components/Chakra/Box.stories.mdx +15 -16
  106. package/src/components/Chakra/Center.stories.mdx +31 -16
  107. package/src/components/Chakra/Grid.stories.mdx +28 -15
  108. package/src/components/Chakra/Stack.stories.mdx +35 -18
  109. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  110. package/src/components/Checkbox/Checkbox.test.tsx +47 -2
  111. package/src/components/Checkbox/Checkbox.tsx +39 -33
  112. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
  113. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
  114. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +29 -2
  115. package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -18
  116. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +47 -81
  117. package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
  118. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  119. package/src/components/DatePicker/DatePicker.test.tsx +264 -64
  120. package/src/components/DatePicker/DatePicker.tsx +159 -128
  121. package/src/components/DatePicker/_DatePicker.scss +33 -67
  122. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  123. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  124. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  125. package/src/components/Fieldset/Fieldset.tsx +52 -0
  126. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  127. package/src/components/Form/Form.stories.mdx +24 -6
  128. package/src/components/Form/Form.test.tsx +1 -1
  129. package/src/components/Form/Form.tsx +1 -0
  130. package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
  131. package/src/components/Grid/SimpleGrid.test.tsx +4 -4
  132. package/src/components/Heading/Heading.stories.mdx +3 -4
  133. package/src/components/Heading/Heading.tsx +5 -5
  134. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
  135. package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
  136. package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
  137. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
  138. package/src/components/Hero/Hero.stories.mdx +12 -2
  139. package/src/components/Hero/Hero.tsx +1 -1
  140. package/src/components/Hero/HeroTypes.tsx +1 -0
  141. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
  142. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
  143. package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
  144. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
  145. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
  146. package/src/components/Icons/Icon.stories.mdx +12 -4
  147. package/src/components/Icons/Icon.test.tsx +18 -0
  148. package/src/components/Icons/Icon.tsx +16 -1
  149. package/src/components/Icons/IconSvgs.tsx +22 -0
  150. package/src/components/Icons/IconTypes.tsx +11 -0
  151. package/src/components/Image/Image.stories.mdx +220 -0
  152. package/src/components/Image/Image.test.tsx +131 -29
  153. package/src/components/Image/Image.tsx +84 -56
  154. package/src/components/Image/ImageTypes.ts +22 -0
  155. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  156. package/src/components/Input/Input.stories.tsx +23 -67
  157. package/src/components/Input/Input.test.tsx +4 -4
  158. package/src/components/Input/_Input.scss +23 -14
  159. package/src/components/Link/Link.tsx +4 -1
  160. package/src/components/List/List.stories.mdx +124 -49
  161. package/src/components/List/List.test.tsx +142 -63
  162. package/src/components/List/List.tsx +89 -93
  163. package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
  164. package/src/components/Modal/Modal.stories.mdx +3 -3
  165. package/src/components/Modal/_Modal.scss +2 -2
  166. package/src/components/Notification/Notification.stories.mdx +109 -112
  167. package/src/components/Notification/Notification.test.tsx +99 -110
  168. package/src/components/Notification/Notification.tsx +156 -159
  169. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
  170. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  171. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  172. package/src/components/Pagination/Pagination.test.tsx +276 -146
  173. package/src/components/Pagination/Pagination.tsx +174 -154
  174. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  175. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  176. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  177. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  178. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  179. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  180. package/src/components/Radio/Radio.test.tsx +20 -4
  181. package/src/components/Radio/Radio.tsx +6 -3
  182. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  183. package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
  184. package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
  185. package/src/components/RadioGroup/RadioGroup.tsx +19 -19
  186. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
  187. package/src/components/SearchBar/SearchBar.Test.tsx +20 -1
  188. package/src/components/SearchBar/SearchBar.stories.mdx +113 -8
  189. package/src/components/SearchBar/SearchBar.tsx +20 -10
  190. package/src/components/Select/Select.test.tsx +12 -0
  191. package/src/components/Select/Select.tsx +5 -2
  192. package/src/components/Select/SelectTypes.tsx +1 -0
  193. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
  194. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  195. package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
  196. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  197. package/src/components/Slider/Slider.stories.mdx +529 -0
  198. package/src/components/Slider/Slider.test.tsx +653 -0
  199. package/src/components/Slider/Slider.tsx +303 -0
  200. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  201. package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
  202. package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
  203. package/src/components/StyleGuide/Buttons.stories.mdx +89 -73
  204. package/src/components/StyleGuide/ColorCard.tsx +46 -0
  205. package/src/components/StyleGuide/Colors.stories.mdx +171 -311
  206. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  207. package/src/components/StyleGuide/Forms.stories.mdx +9 -7
  208. package/src/components/StyleGuide/Iconography.stories.mdx +85 -91
  209. package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
  210. package/src/components/StyleGuide/Typography.stories.mdx +202 -189
  211. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  212. package/src/components/Tabs/Tabs.stories.mdx +73 -11
  213. package/src/components/Tabs/Tabs.tsx +87 -64
  214. package/src/components/Template/Template.stories.mdx +25 -27
  215. package/src/components/TextInput/TextInput.stories.mdx +1 -1
  216. package/src/components/TextInput/TextInput.test.tsx +22 -2
  217. package/src/components/TextInput/TextInput.tsx +28 -8
  218. package/src/components/TextInput/TextInputTypes.tsx +2 -0
  219. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
  220. package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
  222. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
  223. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
  224. package/src/docs/Chakra.stories.mdx +244 -63
  225. package/src/docs/Intro.stories.mdx +5 -2
  226. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  227. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  228. package/src/hooks/useCarouselStyles.ts +34 -0
  229. package/src/hooks/useNYPLTheme.ts +67 -0
  230. package/src/hooks/useWindowSize.ts +40 -0
  231. package/src/index.ts +22 -19
  232. package/src/resources.scss +5 -5
  233. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  234. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  235. package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
  236. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  237. package/src/styles/base/_place-holder.scss +14 -3
  238. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  239. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  240. package/src/styles/space/_space-stack.scss +116 -0
  241. package/src/styles.scss +13 -60
  242. package/src/theme/components/button.ts +21 -15
  243. package/src/theme/components/card.ts +174 -0
  244. package/src/theme/components/checkbox.ts +8 -3
  245. package/src/theme/components/checkboxGroup.ts +8 -0
  246. package/src/theme/components/componentWrapper.ts +10 -0
  247. package/src/theme/components/datePicker.ts +17 -0
  248. package/src/theme/components/fieldset.ts +18 -0
  249. package/src/theme/components/global.ts +26 -15
  250. package/src/theme/components/globalMixins.ts +9 -1
  251. package/src/theme/components/heading.ts +10 -5
  252. package/src/theme/components/helperErrorText.ts +9 -0
  253. package/src/theme/components/hero.ts +4 -3
  254. package/src/theme/components/horizontalRule.ts +13 -0
  255. package/src/theme/components/icon.ts +9 -9
  256. package/src/theme/components/image.ts +116 -0
  257. package/src/theme/components/label.ts +3 -10
  258. package/src/theme/components/link.ts +5 -1
  259. package/src/theme/components/list.ts +73 -0
  260. package/src/theme/components/notification.ts +93 -0
  261. package/src/theme/components/pagination.ts +20 -0
  262. package/src/theme/components/progressIndicator.ts +62 -0
  263. package/src/theme/components/radio.ts +2 -2
  264. package/src/theme/components/radioGroup.ts +8 -0
  265. package/src/theme/components/select.ts +6 -3
  266. package/src/theme/components/skeletonLoader.ts +107 -0
  267. package/src/theme/components/slider.ts +79 -0
  268. package/src/theme/components/statusBadge.ts +1 -2
  269. package/src/theme/components/tabs.ts +49 -19
  270. package/src/theme/components/template.ts +8 -8
  271. package/src/theme/components/textInput.ts +5 -4
  272. package/src/theme/components/videoPlayer.ts +49 -0
  273. package/src/theme/foundations/breakpoints.ts +8 -8
  274. package/src/theme/foundations/global.ts +6 -1
  275. package/src/theme/foundations/radii.ts +6 -0
  276. package/src/theme/foundations/spacing.ts +24 -24
  277. package/src/theme/index.ts +41 -10
  278. package/src/utils/componentCategories.ts +4 -3
  279. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
  280. package/dist/components/Image/Image.stories.d.ts +0 -18
  281. package/dist/components/List/List.stories.d.ts +0 -7
  282. package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
  283. package/dist/theme/components/customRadioGroup.d.ts +0 -18
  284. package/src/components/Button/_Button.scss +0 -32
  285. package/src/components/Card/_Card.scss +0 -308
  286. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
  287. package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
  288. package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
  289. package/src/components/Image/Image.stories.tsx +0 -54
  290. package/src/components/Image/_Image.scss +0 -38
  291. package/src/components/List/List.stories.tsx +0 -139
  292. package/src/components/List/_List.scss +0 -76
  293. package/src/components/Notification/_Notification.scss +0 -110
  294. package/src/components/Pagination/_Pagination.scss +0 -40
  295. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  296. package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
  297. package/src/styles/01-colors/_colors-brand.scss +0 -62
  298. package/src/styles/01-colors/_colors-utility.scss +0 -67
  299. package/src/styles/02-typography/_type-scale.css +0 -11
  300. package/src/styles/02-typography/_type-weight.css +0 -7
  301. package/src/styles/02-typography/_typefaces.css +0 -4
  302. package/src/styles/03-space/_space-stack.scss +0 -116
  303. package/src/styles/03-space/_space.css +0 -30
  304. package/src/styles/base/_card-grid.scss +0 -78
  305. package/src/styles/base/_typography.scss +0 -11
  306. package/src/theme/components/customCheckboxGroup.ts +0 -12
  307. package/src/theme/components/customRadioGroup.ts +0 -12
@@ -70,12 +70,20 @@ export const animalCrossing = [
70
70
  {
71
71
  label: "Mr. Resetti",
72
72
  content:
73
- "<strong>Mr. Resetti</strong>, full name Sonny Resetti, is a fictional character from the Animal Crossing series of video games by Nintendo. His first appearance was in the Nintendo 64 game Dōbutsu no Mori, released in Europe and North America on the GameCube as Animal Crossing.",
73
+ "<strong>Mr. Resetti</strong>, full name Sonny Resetti, is a fictional " +
74
+ "character from the Animal Crossing series of video games by Nintendo. " +
75
+ "His first appearance was in the Nintendo 64 game Dōbutsu no Mori, " +
76
+ "released in Europe and North America on the GameCube as Animal Crossing.",
74
77
  },
75
78
  {
76
79
  label: "Zucker",
77
80
  content:
78
- "<strong>Zucker</strong> is a lazy octopus villager who first appeared in New Leaf. His Japanese name and general appearance refers to the Japanese snack takoyaki, which is a fried ball of dough commonly filled with minced octopus. His catchphrase is a reference to how he is an underwater animal. He has the same initial phrase as Bertha. He has the nature hobby.",
81
+ "<strong>Zucker</strong> is a lazy octopus villager who first appeared " +
82
+ "in New Leaf. His Japanese name and general appearance refers to the " +
83
+ "Japanese snack takoyaki, which is a fried ball of dough commonly " +
84
+ "filled with minced octopus. His catchphrase is a reference to how he " +
85
+ "is an underwater animal. He has the same initial phrase as Bertha. He " +
86
+ "has the nature hobby.",
79
87
  },
80
88
  ];
81
89
 
@@ -100,8 +108,13 @@ _Note: this is the recommended approach._
100
108
 
101
109
  We recommended passing in the data for the `Tabs` component through the `data`
102
110
  prop. This allows the consumer to pass in well-formed data and always generate
103
- the correct DOM. Internally in the DS `Tabs` component, we map through the data
104
- array and generate the appropriate components needed for the layout.
111
+ the correct DOM.
112
+
113
+ Internally in the DS `Tabs` component:
114
+
115
+ - we map through the data array and generate the appropriate components needed
116
+ for the layout.
117
+ - adds the carousel feature for the mobile view.
105
118
 
106
119
  Note that HTML is allowed in the `content` property in each object as part of the
107
120
  string or as straight HTML.
@@ -122,12 +135,36 @@ const animalCrossing = [
122
135
  content:
123
136
  "<p>Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is ...",
124
137
  },
138
+ {
139
+ label: "Mr. Resetti",
140
+ content:
141
+ "<strong>Mr. Resetti</strong>, full name Sonny Resetti, is a ...",
142
+ },
143
+ {
144
+ label: "Zucker",
145
+ content:
146
+ "<strong>Zucker</strong> is a lazy octopus villager who first ...",
147
+ },
125
148
  ];
126
149
 
127
150
  // ...
128
151
  <Tabs contentData={animalCrossing} />;
129
152
  ```
130
153
 
154
+ ## Responsive Mobile Carousel
155
+
156
+ For both, the `contentData` prop approach and the children component approach
157
+ (described below in this document), the mobile carousel feature is built. This
158
+ adds "previous" and "next" arrows in the tab list for users to scroll through
159
+ all the tabs while the panel stays static.
160
+
161
+ Note that for the children component approach, we expect a `TabList` component
162
+ to be passed or else the mobile carousel will _not_ be built. More on this in
163
+ the [With Children Components](#with-children-components) section.
164
+
165
+ To view and test this in Storybook, go to the "Canvas" tab and change the
166
+ viewport in the Storybook toolbar at the top of the page.
167
+
131
168
  ## With Callback Event Function
132
169
 
133
170
  If you need to keep track of the index of current tab that was selected, pass
@@ -178,7 +215,10 @@ available components, you will probably have to iterate or map through an array
178
215
  to get the desired outcome. The DS `Tabs` component does this internally for
179
216
  you so this should be a last resort option.
180
217
 
181
- Make sure all five components are imported to use this approach.
218
+ Make sure that:
219
+
220
+ - all five components are imported to use this approach.
221
+ - the structure follows the example below for the mobile carousel to render properly.
182
222
 
183
223
  ```jsx
184
224
  import {
@@ -197,11 +237,16 @@ import {
197
237
  <Tab>Tom Nook</Tab>
198
238
  <Tab>Isabelle</Tab>
199
239
  <Tab>K.K. Slider</Tab>
240
+ <Tab>Mr. Resetti</Tab>
241
+ <Tab>Zucker</Tab>
200
242
  </TabList>
201
243
  <TabPanels>
202
244
  <TabPanel>
203
- Tom Nook, known in Japan as Tanukichi, is a fictional character in the
204
- Animal Crossing series who operates the village store.
245
+ <p>
246
+ Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
247
+ character in the Animal Crossing series who operates the village
248
+ store.
249
+ </p>
205
250
  </TabPanel>
206
251
  <TabPanel>
207
252
  Isabelle, known as Shizue in Japan, is a fictional character from the
@@ -210,10 +255,27 @@ import {
210
255
  serves as the secretary to the player character.
211
256
  </TabPanel>
212
257
  <TabPanel>
213
- Totakeke, more commonly known as K.K. Slider or K.K., is a fictional
214
- character within the Animal Crossing franchise. One of the franchise's
215
- most popular characters, he debuted in the title Animal Crossing, and
216
- has appeared in every installment since.
258
+ <p>
259
+ Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is a
260
+ fictional character within the Animal Crossing franchise. One of the
261
+ franchise's most popular characters, he debuted in the title Animal
262
+ Crossing, and has appeared in every installment since.
263
+ </p>
264
+ </TabPanel>
265
+ <TabPanel>
266
+ <strong>Mr. Resetti</strong>, full name Sonny Resetti, is a fictional
267
+ character from the Animal Crossing series of video games by Nintendo.
268
+ His first appearance was in the Nintendo 64 game Dōbutsu no Mori,
269
+ released in Europe and North America on the GameCube as Animal
270
+ Crossing.
271
+ </TabPanel>
272
+ <TabPanel>
273
+ <strong>Zucker</strong> is a lazy octopus villager who first appeared
274
+ in New Leaf. His Japanese name and general appearance refers to the
275
+ Japanese snack takoyaki, which is a fried ball of dough commonly
276
+ filled with minced octopus. His catchphrase is a reference to how he
277
+ is an underwater animal. He has the same initial phrase as Bertha. He
278
+ has the nature hobby.
217
279
  </TabPanel>
218
280
  </TabPanels>
219
281
  </Tabs>
@@ -1,11 +1,11 @@
1
1
  import * as React from "react";
2
2
  import {
3
3
  Box,
4
- Tabs as ChakraTabs,
5
- TabList,
6
4
  Tab,
5
+ TabList,
7
6
  TabPanels,
8
7
  TabPanel,
8
+ Tabs as ChakraTabs,
9
9
  useMultiStyleConfig,
10
10
  } from "@chakra-ui/react";
11
11
 
@@ -14,6 +14,8 @@ import { IconNames, IconRotationTypes, IconSizes } from "../Icons/IconTypes";
14
14
  import Icon from "../Icons/Icon";
15
15
  import { ButtonTypes } from "../Button/ButtonTypes";
16
16
  import Button from "../Button/Button";
17
+ import useCarouselStyles from "../../hooks/useCarouselStyles";
18
+ import useWindowSize from "../../hooks/useWindowSize";
17
19
 
18
20
  // The general shape of the data object for each Tab.
19
21
  export interface TabsContentDataProps {
@@ -44,7 +46,7 @@ const onClickHash = (tabHash) => {
44
46
  };
45
47
 
46
48
  /**
47
- * This returns an object with `Tab` and `TabPanel` components to render in
49
+ * This returns an object with `Tab` and `TabPanel` components to rendered in
48
50
  * `TabList` and `TabPanels` components respectively.
49
51
  */
50
52
  const getElementsFromContentData = (data, useHash) => {
@@ -61,8 +63,7 @@ const getElementsFromContentData = (data, useHash) => {
61
63
  "needed, consider other navigational patterns."
62
64
  );
63
65
  }
64
-
65
- data.map((tab, index) => {
66
+ data.forEach((tab, index) => {
66
67
  let tempPanel;
67
68
  // For URL hash enabled tabs, we need to add a custom `onClick` to handle the URL hash.
68
69
  const tempTab = (
@@ -89,7 +90,10 @@ const getElementsFromContentData = (data, useHash) => {
89
90
  panels.push(tempPanel);
90
91
  });
91
92
 
92
- return { tabs, panels };
93
+ return {
94
+ tabs: <TabList>{tabs}</TabList>,
95
+ panels: <TabPanels>{panels}</TabPanels>,
96
+ };
93
97
  };
94
98
 
95
99
  /**
@@ -104,7 +108,7 @@ const getElementsFromChildren = (children) => {
104
108
  return {};
105
109
  }
106
110
 
107
- children.map((child) => {
111
+ children.forEach((child) => {
108
112
  if (child.type === TabList || child.props.mdxType === "TabList") {
109
113
  tabs.push(child);
110
114
 
@@ -139,9 +143,68 @@ function Tabs(props: React.PropsWithChildren<TabsProps>) {
139
143
  useHash = false,
140
144
  } = props;
141
145
  const styles = useMultiStyleConfig("Tabs", {});
146
+ // Just an estimate of the tab width for the mobile carousel.
147
+ const initTabWidth = 65;
148
+ // An estimate for the tab width for larger device widths.
149
+ const mediumTabWidth = 40;
150
+ const [tabWidth, setTabWidth] = React.useState(initTabWidth);
151
+ const windowDimensions = useWindowSize();
142
152
  const { tabs, panels } = contentData
143
153
  ? getElementsFromContentData(contentData, useHash)
144
154
  : getElementsFromChildren(children);
155
+ // `tabs` is an array for the children component approach but an object for
156
+ // the `contentData` prop approach. We need to get the right props key value
157
+ // to set the carousel's length.
158
+ const tabProps = tabs[0] ? tabs[0]?.props : (tabs as any).props;
159
+ const { prevSlide, nextSlide, carouselStyle, goToStart } = useCarouselStyles(
160
+ tabProps?.children?.length,
161
+ tabWidth
162
+ );
163
+ React.useEffect(() => {
164
+ if (windowDimensions.width > 320) {
165
+ setTabWidth(mediumTabWidth);
166
+ } else {
167
+ setTabWidth(initTabWidth);
168
+ }
169
+ // If we are on larger viewports, reset the carousel so all tabs display.
170
+ if (windowDimensions.width > 600) {
171
+ goToStart();
172
+ }
173
+ }, [goToStart, windowDimensions.width]);
174
+ const previousButton = (
175
+ <Button
176
+ buttonType={ButtonTypes.Primary}
177
+ attributes={{
178
+ "aria-label": "Previous",
179
+ ...styles.buttonArrows,
180
+ left: "0",
181
+ }}
182
+ onClick={prevSlide}
183
+ >
184
+ <Icon
185
+ name={IconNames.Arrow}
186
+ iconRotation={IconRotationTypes.Rotate90}
187
+ size={IconSizes.Small}
188
+ />
189
+ </Button>
190
+ );
191
+ const nextButton = (
192
+ <Button
193
+ buttonType={ButtonTypes.Primary}
194
+ attributes={{
195
+ "aria-label": "Next",
196
+ ...styles.buttonArrows,
197
+ right: "0",
198
+ }}
199
+ onClick={nextSlide}
200
+ >
201
+ <Icon
202
+ name={IconNames.Arrow}
203
+ iconRotation={IconRotationTypes.Rotate270}
204
+ size={IconSizes.Small}
205
+ />
206
+ </Button>
207
+ );
145
208
 
146
209
  if (children && contentData?.length) {
147
210
  console.warn(
@@ -152,67 +215,27 @@ function Tabs(props: React.PropsWithChildren<TabsProps>) {
152
215
  return (
153
216
  <ChakraTabs
154
217
  id={id}
155
- // The following lazy loads each panel whenever it is needed.
156
- isLazy
157
218
  onChange={onChange}
158
219
  defaultIndex={defaultIndex}
159
220
  variant="enclosed"
221
+ // The following lazy loads each panel whenever it is needed.
222
+ isLazy
160
223
  >
161
- {contentData ? (
162
- <>
163
- <Box
164
- __css={styles.tablistWrapper}
165
- sx={{
166
- "&::-webkit-scrollbar": {
167
- display: "none",
168
- },
169
- }}
170
- >
171
- <Button
172
- buttonType={ButtonTypes.Primary}
173
- attributes={{
174
- "aria-label": "Previous",
175
- ...styles.buttonArrows,
176
- }}
177
- >
178
- <Icon
179
- name={IconNames.Arrow}
180
- iconRotation={IconRotationTypes.Rotate90}
181
- size={IconSizes.Small}
182
- />
183
- </Button>
184
- <TabList>{tabs}</TabList>
185
- <Button
186
- buttonType={ButtonTypes.Primary}
187
- attributes={{
188
- "aria-label": "Next",
189
- ...styles.buttonArrows,
190
- }}
191
- >
192
- <Icon
193
- name={IconNames.Arrow}
194
- iconRotation={IconRotationTypes.Rotate270}
195
- size={IconSizes.Small}
196
- />
197
- </Button>
198
- </Box>
199
- <TabPanels>{panels}</TabPanels>
200
- </>
201
- ) : (
202
- <>
203
- <Box
204
- __css={styles.tablistWrapper}
205
- sx={{
206
- "&::-webkit-scrollbar": {
207
- display: "none",
208
- },
209
- }}
210
- >
211
- {tabs}
212
- </Box>
213
- {panels}
214
- </>
215
- )}
224
+ <Box
225
+ __css={styles.tablistWrapper}
226
+ sx={{
227
+ "&::-webkit-scrollbar": {
228
+ display: "none",
229
+ },
230
+ }}
231
+ >
232
+ {previousButton}
233
+ <Box __css={styles.carouselParent}>
234
+ <Box {...carouselStyle}>{tabs}</Box>
235
+ </Box>
236
+ {nextButton}
237
+ </Box>
238
+ {panels}
216
239
  </ChakraTabs>
217
240
  );
218
241
  }
@@ -22,6 +22,7 @@ import Placeholder from "../Placeholder/Placeholder";
22
22
  import Hero from "../Hero/Hero";
23
23
  import { HeroTypes } from "../Hero/HeroTypes";
24
24
  import Image from "../Image/Image";
25
+ import { ImageRatios, ImageSizes } from "../Image/ImageTypes";
25
26
  import Breadcrumbs from "../Breadcrumbs/Breadcrumbs";
26
27
  import HorizontalRule from "../HorizontalRule/HorizontalRule";
27
28
  import Heading from "../Heading/Heading";
@@ -35,13 +36,7 @@ import Form, { FormRow, FormField } from "../Form/Form";
35
36
  import TextInput from "../TextInput/TextInput";
36
37
  import Button from "../Button/Button";
37
38
  import Link from "../Link/Link";
38
- import Card, {
39
- CardImage,
40
- CardHeading,
41
- CardContent,
42
- CardActions,
43
- } from "../Card/Card";
44
- import { CardImageRatios, CardImageSizes } from "../Card/CardTypes";
39
+ import Card, { CardHeading, CardContent, CardActions } from "../Card/Card";
45
40
  import Accordion from "../Accordion/Accordion";
46
41
  import { faqContent } from "../Accordion/Accordion.stories.mdx";
47
42
  import { NotificationTypes } from "../Notification/NotificationTypes";
@@ -452,17 +447,20 @@ This is best viewed in the Storybook "Canvas" and not "Docs" section.
452
447
  </TemplateHeader>
453
448
  <TemplateContent sidebar="right">
454
449
  <TemplateContentTop>
455
- <Notification notificationType={NotificationTypes.Announcement}>
456
- <NotificationHeading>Announcement Notification</NotificationHeading>
457
- <NotificationContent>
458
- This is an "announcement" Notification with a heading. Cras mattis
459
- consectetur purus sit amet fermentum. Maecenas faucibus mollis
460
- interdum. Morbi leo risus, porta ac consectetur ac, vestibulum at
461
- eros. Cum sociis natoque penatibus et magnis dis parturient
462
- montes, nascetur ridiculus mus. Vivamus sagittis lacus vel augue
463
- laoreet rutrum faucibus dolor auctor.
464
- </NotificationContent>
465
- </Notification>
450
+ <Notification
451
+ notificationType={NotificationTypes.Announcement}
452
+ notificationHeading="Announcement Notification"
453
+ notificationContent={
454
+ <>
455
+ This is an "announcement" Notification with a heading. Cras
456
+ mattis consectetur purus sit amet fermentum. Maecenas faucibus
457
+ mollis interdum. Morbi leo risus, porta ac consectetur ac,
458
+ vestibulum at eros. Cum sociis natoque penatibus et magnis dis
459
+ parturient montes, nascetur ridiculus mus. Vivamus sagittis
460
+ lacus vel augue laoreet rutrum faucibus dolor auctor.
461
+ </>
462
+ }
463
+ />
466
464
  </TemplateContentTop>
467
465
  <TemplateContentPrimary>
468
466
  <p>This is the main content!</p>
@@ -506,13 +504,13 @@ This is best viewed in the Storybook "Canvas" and not "Docs" section.
506
504
  center
507
505
  imageSrc="https://placeimg.com/400/200/animals"
508
506
  imageAlt="Alt text"
509
- imageAspectRatio={CardImageRatios.Square}
510
- imageSize={CardImageSizes.Small}
507
+ imageAspectRatio={ImageRatios.Square}
508
+ imageSize={ImageSizes.Small}
511
509
  >
512
- <CardHeading level={HeadingLevels.Three} id="heading1">
510
+ <CardHeading level={HeadingLevels.Two} id="heading1">
513
511
  Small Animal Image
514
512
  </CardHeading>
515
- <CardHeading level={HeadingLevels.Five} id="heading2">
513
+ <CardHeading level={HeadingLevels.Three} id="heading2">
516
514
  Animal info
517
515
  </CardHeading>
518
516
  <CardContent>
@@ -527,12 +525,12 @@ This is best viewed in the Storybook "Canvas" and not "Docs" section.
527
525
  id="custom-card"
528
526
  imageAlt="Alt text"
529
527
  imageSrc="https://cdn-d8.nypl.org/s3fs-public/2020-05/NYPL_MainFacadeRev2Cam2.png"
530
- imageAspectRatio={CardImageRatios.SixteenByNine}
528
+ imageAspectRatio={ImageRatios.SixteenByNine}
531
529
  layout="horizontal"
532
530
  backgroundColor="#616161"
533
531
  foregroundColor="#FFF"
534
532
  >
535
- <CardHeading id="heading1" level={2}>
533
+ <CardHeading id="heading1-footer" level={HeadingLevels.Two}>
536
534
  Footer
537
535
  </CardHeading>
538
536
  <CardContent>
@@ -544,25 +542,25 @@ This is best viewed in the Storybook "Canvas" and not "Docs" section.
544
542
  </CardContent>
545
543
  <CardActions>
546
544
  <Link
547
- href="javascript:void(0);"
548
545
  attributes={{
549
546
  style: { color: "#FFF", textDecoration: "underline" },
550
547
  }}
548
+ href="#"
551
549
  >
552
550
  Facebook
553
551
  </Link>
554
552
  ,<Link
555
- href="javascript:void(0);"
556
553
  attributes={{
557
554
  style: { color: "#FFF", textDecoration: "underline" },
558
555
  }}
556
+ href="#"
559
557
  >
560
558
  Instagram
561
559
  </Link>,<Link
562
- href="javascript:void(0);"
563
560
  attributes={{
564
561
  style: { color: "#FFF", textDecoration: "underline" },
565
562
  }}
563
+ href="#"
566
564
  >
567
565
  Twitter
568
566
  </Link>
@@ -38,7 +38,7 @@ import DSProvider from "../../theme/provider";
38
38
  | Component Version | DS Version |
39
39
  | ----------------- | ---------- |
40
40
  | Added | `0.22.0` |
41
- | Latest | `0.25.1` |
41
+ | Latest | `0.25.4` |
42
42
 
43
43
  <Description of={TextInput} />
44
44
 
@@ -180,18 +180,21 @@ describe("Renders TextInput with auto-generated ID, hidden label and visible hel
180
180
  });
181
181
 
182
182
  describe("TextInput shows error state", () => {
183
+ let rerender;
183
184
  beforeEach(() => {
184
- render(
185
+ const utils = render(
185
186
  <TextInput
186
187
  id="myTextInputError"
187
188
  labelText="Custom Input Label"
188
189
  helperText="Custom Helper Text"
189
190
  invalidText="Custom Error Text"
190
191
  placeholder="Input Placeholder"
191
- isInvalid={true}
192
+ isInvalid
192
193
  type={TextInputTypes.text}
193
194
  />
194
195
  );
196
+
197
+ rerender = utils.rerender;
195
198
  });
196
199
 
197
200
  it("renders Input component", () => {
@@ -207,6 +210,23 @@ describe("TextInput shows error state", () => {
207
210
  expect(screen.getByText("Custom Error Text")).toBeInTheDocument();
208
211
  });
209
212
 
213
+ it("does not render the invalid text when 'showHelperInvalidText' is set to false", () => {
214
+ rerender(
215
+ <TextInput
216
+ id="myTextInputError"
217
+ labelText="Custom Input Label"
218
+ helperText="Custom Helper Text"
219
+ invalidText="Custom Error Text"
220
+ placeholder="Input Placeholder"
221
+ showHelperInvalidText={false}
222
+ type={TextInputTypes.text}
223
+ isInvalid
224
+ />
225
+ );
226
+ expect(screen.queryByText("Custom Helper Text")).not.toBeInTheDocument();
227
+ expect(screen.queryByText("Custom Error Text")).not.toBeInTheDocument();
228
+ });
229
+
210
230
  it("input shows error state", () => {
211
231
  expect(screen.getByLabelText(/Custom Input Label/i)).toHaveAttribute(
212
232
  "aria-invalid"
@@ -16,10 +16,14 @@ import HelperErrorText from "../HelperErrorText/HelperErrorText";
16
16
  import generateUUID from "../../helpers/generateUUID";
17
17
 
18
18
  export interface InputProps {
19
+ /** Optionally pass in additional Chakra-based styles. */
20
+ additionalStyles?: { [key: string]: any };
19
21
  /** Additional attributes to pass to the `<input>` or `<textarea>` element */
20
22
  attributes?: { [key: string]: any };
21
23
  /** A class name for the TextInput parent div. */
22
24
  className?: string;
25
+ /** The starting value of the input field. */
26
+ defaultValue?: string;
23
27
  /** Populates the HelperErrorText for the standard state */
24
28
  helperText?: string;
25
29
  /** ID that other components can cross reference for accessibility purposes */
@@ -35,6 +39,8 @@ export interface InputProps {
35
39
  /** Provides text for a `Label` component if `showLabel` is set to true;
36
40
  * populates an `aria-label` attribute if `showLabel` is set to false. */
37
41
  labelText: string;
42
+ /** Used to reference the input element in forms. */
43
+ name?: string;
38
44
  /** The action to perform on the `input`/`textarea`'s onChange function */
39
45
  onChange?: (
40
46
  event:
@@ -43,12 +49,16 @@ export interface InputProps {
43
49
  ) => void;
44
50
  /** Populates the placeholder for the input/textarea elements */
45
51
  placeholder?: string;
52
+ /** Offers the ability to hide the helper/invalid text. */
53
+ showHelperInvalidText?: boolean;
46
54
  /** Offers the ability to show the label onscreen or hide it. Refer to the
47
55
  * `labelText` property for more information. */
48
56
  showLabel?: boolean;
49
57
  /** Offers the ability to show the "Required"/"Optional" label onscreen or
50
58
  * hide it. True by default. */
51
59
  showOptReqLabel?: boolean;
60
+ /** The amount to increase or decrease when using the number type. */
61
+ step?: number;
52
62
  /** HTML Input types as defined by MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input */
53
63
  type?: TextInputTypes;
54
64
  /** Populates the value of the input/textarea elements */
@@ -71,8 +81,10 @@ export type TextInputRefType = HTMLInputElement & HTMLTextAreaElement;
71
81
  const TextInput = React.forwardRef<TextInputRefType, InputProps>(
72
82
  (props, ref: React.Ref<TextInputRefType>) => {
73
83
  const {
84
+ additionalStyles = {},
74
85
  attributes = {},
75
86
  className,
87
+ defaultValue,
76
88
  helperText,
77
89
  id = generateUUID(),
78
90
  invalidText,
@@ -80,15 +92,19 @@ const TextInput = React.forwardRef<TextInputRefType, InputProps>(
80
92
  isInvalid = false,
81
93
  isRequired = false,
82
94
  labelText,
95
+ name,
83
96
  onChange,
84
97
  placeholder,
98
+ showHelperInvalidText = true,
85
99
  showLabel = true,
86
100
  showOptReqLabel = true,
101
+ step = 1,
87
102
  type = TextInputTypes.text,
88
103
  value,
89
104
  variantType = TextInputVariants.Default,
90
105
  } = props;
91
106
  const styles = useMultiStyleConfig("TextInput", { variant: variantType });
107
+ const finalStyles = { ...styles, ...additionalStyles };
92
108
  const isTextArea = type === TextInputTypes.textarea;
93
109
  const isHidden = type === TextInputTypes.hidden;
94
110
  const optReqFlag = isRequired ? "Required" : "Optional";
@@ -125,33 +141,37 @@ const TextInput = React.forwardRef<TextInputRefType, InputProps>(
125
141
 
126
142
  // When the type is "hidden", the input element needs fewer attributes.
127
143
  options = isHidden
128
- ? { id, "aria-hidden": isHidden, onChange, ref }
144
+ ? { id, "aria-hidden": isHidden, name, onChange, ref }
129
145
  : {
130
- id,
131
146
  "aria-required": isRequired,
147
+ defaultValue,
148
+ id,
132
149
  isDisabled,
133
150
  isRequired,
134
151
  isInvalid,
135
152
  placeholder,
153
+ name,
136
154
  onChange,
137
155
  ref,
156
+ // The `step` attribute is useful for the number type.
157
+ step: type === TextInputTypes.number ? step : null,
138
158
  ...attributes,
139
159
  };
140
160
  // For `input` and `textarea`, all attributes are the same but `input`
141
161
  // also needs `type` and `value` to render correctly.
142
162
  if (!isTextArea) {
143
163
  options = { type, value, ...options } as any;
144
- fieldOutput = <ChakraInput {...options} __css={styles.input} />;
164
+ fieldOutput = <ChakraInput {...options} __css={finalStyles.input} />;
145
165
  } else {
146
166
  fieldOutput = (
147
- <ChakraTextarea {...options} __css={styles.textarea}>
167
+ <ChakraTextarea {...options} __css={finalStyles.textarea}>
148
168
  {value}
149
169
  </ChakraTextarea>
150
170
  );
151
171
  }
152
172
 
153
173
  return (
154
- <Box __css={styles} className={className}>
174
+ <Box __css={finalStyles} className={className}>
155
175
  {labelText && showLabel && !isHidden && (
156
176
  <Label
157
177
  htmlFor={id}
@@ -162,9 +182,9 @@ const TextInput = React.forwardRef<TextInputRefType, InputProps>(
162
182
  </Label>
163
183
  )}
164
184
  {fieldOutput}
165
- {footnote && !isHidden && (
166
- <Box __css={styles.helper} aria-disabled={isDisabled}>
167
- <HelperErrorText isError={isInvalid} id={`${id}-helperText`}>
185
+ {footnote && showHelperInvalidText && !isHidden && (
186
+ <Box __css={finalStyles.helper} aria-disabled={isDisabled}>
187
+ <HelperErrorText isInvalid={isInvalid} id={`${id}-helperText`}>
168
188
  {footnote}
169
189
  </HelperErrorText>
170
190
  </Box>
@@ -11,6 +11,7 @@ export enum TextInputTypes {
11
11
  url = "url",
12
12
  }
13
13
 
14
+ // Only used internally in `TextInput`.
14
15
  export enum TextInputFormats {
15
16
  email = "jdoe@domain.com",
16
17
  hidden = "",
@@ -23,6 +24,7 @@ export enum TextInputFormats {
23
24
  url = "https://domain.com",
24
25
  }
25
26
 
27
+ // Only used internally in `TextInput` and `SearchBar`.
26
28
  export enum TextInputVariants {
27
29
  Default = "default",
28
30
  SearchBar = "searchBar",