@nypl/design-system-react-components 0.25.0 → 0.25.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.
Files changed (392) hide show
  1. package/CHANGELOG.md +142 -1
  2. package/README.md +98 -50
  3. package/dist/components/Accordion/Accordion.d.ts +14 -14
  4. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +15 -14
  5. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  6. package/dist/components/Button/Button.d.ts +13 -8
  7. package/dist/components/Button/ButtonTypes.d.ts +3 -1
  8. package/dist/components/Card/Card.d.ts +36 -52
  9. package/dist/components/Card/CardTypes.d.ts +2 -17
  10. package/dist/components/Checkbox/Checkbox.d.ts +17 -13
  11. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +45 -0
  12. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  13. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
  14. package/dist/components/DatePicker/DatePicker.d.ts +37 -35
  15. package/dist/components/Fieldset/Fieldset.d.ts +25 -0
  16. package/dist/components/Form/Form.d.ts +13 -8
  17. package/dist/components/Form/FormTypes.d.ts +2 -8
  18. package/dist/components/Grid/GridTypes.d.ts +9 -0
  19. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  20. package/dist/components/Heading/Heading.d.ts +4 -4
  21. package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
  22. package/dist/components/Hero/Hero.d.ts +19 -14
  23. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  24. package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
  25. package/dist/components/Icons/Icon.d.ts +19 -14
  26. package/dist/components/Icons/IconSvgs.d.ts +11 -0
  27. package/dist/components/Icons/IconTypes.d.ts +89 -64
  28. package/dist/components/Image/Image.d.ts +19 -9
  29. package/dist/components/Image/ImageTypes.d.ts +20 -0
  30. package/dist/components/Label/Label.d.ts +5 -17
  31. package/dist/components/Link/Link.d.ts +12 -12
  32. package/dist/components/List/List.d.ts +19 -14
  33. package/dist/components/Notification/Notification.d.ts +37 -16
  34. package/dist/components/Pagination/Pagination.d.ts +16 -13
  35. package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
  36. package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
  37. package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
  38. package/dist/components/Radio/Radio.d.ts +2 -0
  39. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
  40. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  41. package/dist/components/Select/Select.d.ts +34 -35
  42. package/dist/components/Select/SelectTypes.d.ts +4 -0
  43. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
  44. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  45. package/dist/components/Slider/Slider.d.ts +57 -0
  46. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  47. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  48. package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
  49. package/dist/components/Tabs/Tabs.d.ts +1 -1
  50. package/dist/components/Template/Template.d.ts +91 -0
  51. package/dist/components/Text/Text.d.ts +16 -0
  52. package/dist/components/Text/TextTypes.d.ts +6 -0
  53. package/dist/components/TextInput/TextInput.d.ts +44 -31
  54. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  55. package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
  56. package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
  57. package/dist/design-system-react-components.cjs.development.js +6473 -2630
  58. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  59. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  60. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  61. package/dist/design-system-react-components.esm.js +6463 -2631
  62. package/dist/design-system-react-components.esm.js.map +1 -1
  63. package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
  64. package/dist/hooks/useCarouselStyles.d.ts +16 -0
  65. package/dist/hooks/useNYPLTheme.d.ts +54 -0
  66. package/dist/hooks/useWindowSize.d.ts +10 -0
  67. package/dist/index.d.ts +19 -7
  68. package/dist/resources.scss +180 -170
  69. package/dist/styles.css +1 -1
  70. package/dist/theme/components/accordion.d.ts +25 -0
  71. package/dist/theme/components/breadcrumb.d.ts +90 -0
  72. package/dist/theme/components/button.d.ts +39 -15
  73. package/dist/theme/components/card.d.ts +168 -0
  74. package/dist/theme/components/checkbox.d.ts +12 -8
  75. package/dist/theme/components/checkboxGroup.d.ts +12 -0
  76. package/dist/theme/components/componentWrapper.d.ts +11 -0
  77. package/dist/theme/components/datePicker.d.ts +16 -0
  78. package/dist/theme/components/fieldset.d.ts +27 -0
  79. package/dist/theme/components/global.d.ts +65 -0
  80. package/dist/theme/components/globalMixins.d.ts +23 -0
  81. package/dist/theme/components/heading.d.ts +55 -20
  82. package/dist/theme/components/helperErrorText.d.ts +10 -0
  83. package/dist/theme/components/hero.d.ts +493 -0
  84. package/dist/theme/components/horizontalRule.d.ts +14 -0
  85. package/dist/theme/components/icon.d.ts +13 -0
  86. package/dist/theme/components/image.d.ts +31 -0
  87. package/dist/theme/components/label.d.ts +18 -0
  88. package/dist/theme/components/link.d.ts +49 -0
  89. package/dist/theme/components/list.d.ts +89 -0
  90. package/dist/theme/components/notification.d.ts +75 -0
  91. package/dist/theme/components/pagination.d.ts +19 -0
  92. package/dist/theme/components/progressIndicator.d.ts +50 -0
  93. package/dist/theme/components/radio.d.ts +8 -7
  94. package/dist/theme/components/radioGroup.d.ts +12 -0
  95. package/dist/theme/components/searchBar.d.ts +20 -0
  96. package/dist/theme/components/select.d.ts +67 -0
  97. package/dist/theme/components/skeletonLoader.d.ts +98 -0
  98. package/dist/theme/components/slider.d.ts +51 -0
  99. package/dist/theme/components/statusBadge.d.ts +25 -0
  100. package/dist/theme/components/tabs.d.ts +63 -12
  101. package/dist/theme/components/template.d.ts +105 -0
  102. package/dist/theme/components/text.d.ts +20 -0
  103. package/dist/theme/components/textInput.d.ts +112 -0
  104. package/dist/theme/components/videoPlayer.d.ts +40 -0
  105. package/dist/theme/foundations/breakpoints.d.ts +8 -8
  106. package/dist/theme/foundations/global.d.ts +8 -0
  107. package/dist/theme/foundations/radii.d.ts +5 -0
  108. package/dist/theme/foundations/shadows.d.ts +4 -0
  109. package/dist/theme/foundations/spacing.d.ts +16 -16
  110. package/dist/utils/utils.d.ts +6 -0
  111. package/package.json +72 -82
  112. package/src/__tests__/setup.ts +2 -2
  113. package/src/components/Accordion/Accordion.stories.mdx +223 -34
  114. package/src/components/Accordion/Accordion.test.tsx +135 -19
  115. package/src/components/Accordion/Accordion.tsx +81 -56
  116. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -4
  117. package/src/components/Autosuggest/Autosuggest.stories.tsx +3 -2
  118. package/src/components/Autosuggest/_Autosuggest.scss +5 -5
  119. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +48 -50
  120. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +54 -25
  121. package/src/components/Breadcrumbs/Breadcrumbs.tsx +75 -73
  122. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  123. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +298 -0
  124. package/src/components/Button/Button.stories.mdx +45 -36
  125. package/src/components/Button/Button.test.tsx +37 -11
  126. package/src/components/Button/Button.tsx +22 -34
  127. package/src/components/Button/ButtonTypes.tsx +2 -0
  128. package/src/components/Button/__snapshots__/Button.test.tsx.snap +50 -8
  129. package/src/components/Card/Card.stories.mdx +314 -273
  130. package/src/components/Card/Card.test.tsx +157 -91
  131. package/src/components/Card/Card.tsx +195 -145
  132. package/src/components/Card/CardTypes.tsx +2 -19
  133. package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
  134. package/src/components/CardEdition/CardEdition.stories.tsx +26 -53
  135. package/src/components/CardEdition/CardEdition.test.tsx +23 -31
  136. package/src/components/CardEdition/_CardEdition.scss +22 -23
  137. package/src/components/Chakra/Box.stories.mdx +15 -16
  138. package/src/components/Chakra/Center.stories.mdx +56 -24
  139. package/src/components/Chakra/Grid.stories.mdx +92 -0
  140. package/src/components/Chakra/Stack.stories.mdx +38 -21
  141. package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
  142. package/src/components/Checkbox/Checkbox.test.tsx +47 -2
  143. package/src/components/Checkbox/Checkbox.tsx +44 -41
  144. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +92 -7
  145. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +329 -0
  146. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +372 -0
  147. package/src/components/CheckboxGroup/CheckboxGroup.tsx +152 -0
  148. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  149. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1326 -0
  150. package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
  151. package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
  152. package/src/components/DatePicker/DatePicker.test.tsx +264 -64
  153. package/src/components/DatePicker/DatePicker.tsx +165 -134
  154. package/src/components/DatePicker/_DatePicker.scss +33 -66
  155. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
  156. package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
  157. package/src/components/Fieldset/Fieldset.test.tsx +125 -0
  158. package/src/components/Fieldset/Fieldset.tsx +52 -0
  159. package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
  160. package/src/components/Form/Form.stories.mdx +70 -27
  161. package/src/components/Form/Form.test.tsx +58 -45
  162. package/src/components/Form/Form.tsx +50 -21
  163. package/src/components/Form/FormTypes.tsx +3 -8
  164. package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
  165. package/src/components/Grid/GridTypes.tsx +9 -0
  166. package/src/components/Grid/SimpleGrid.stories.mdx +268 -0
  167. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  168. package/src/components/Grid/SimpleGrid.tsx +37 -0
  169. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  170. package/src/components/Heading/Heading.stories.mdx +3 -3
  171. package/src/components/Heading/Heading.tsx +12 -6
  172. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
  173. package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
  174. package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
  175. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
  176. package/src/components/Hero/Hero.stories.mdx +198 -121
  177. package/src/components/Hero/Hero.test.tsx +537 -107
  178. package/src/components/Hero/Hero.tsx +79 -92
  179. package/src/components/Hero/HeroTypes.tsx +18 -5
  180. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  181. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
  182. package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
  183. package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
  184. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
  185. package/src/components/Icons/Icon.stories.mdx +94 -77
  186. package/src/components/Icons/Icon.test.tsx +48 -22
  187. package/src/components/Icons/Icon.tsx +78 -61
  188. package/src/components/Icons/IconSvgs.tsx +22 -0
  189. package/src/components/Icons/IconTypes.tsx +91 -64
  190. package/src/components/Image/Image.stories.mdx +220 -0
  191. package/src/components/Image/Image.test.tsx +131 -29
  192. package/src/components/Image/Image.tsx +84 -56
  193. package/src/components/Image/ImageTypes.ts +22 -0
  194. package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
  195. package/src/components/Input/Input.stories.tsx +23 -67
  196. package/src/components/Input/Input.test.tsx +4 -4
  197. package/src/components/Input/_Input.scss +23 -14
  198. package/src/components/Label/Label.stories.mdx +28 -7
  199. package/src/components/Label/Label.test.tsx +43 -12
  200. package/src/components/Label/Label.tsx +21 -34
  201. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  202. package/src/components/Link/Link.stories.mdx +41 -41
  203. package/src/components/Link/Link.test.tsx +33 -44
  204. package/src/components/Link/Link.tsx +117 -100
  205. package/src/components/List/List.stories.mdx +124 -51
  206. package/src/components/List/List.test.tsx +142 -63
  207. package/src/components/List/List.tsx +89 -93
  208. package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
  209. package/src/components/Modal/Modal.stories.mdx +3 -3
  210. package/src/components/Modal/_Modal.scss +2 -2
  211. package/src/components/Notification/Notification.stories.mdx +119 -111
  212. package/src/components/Notification/Notification.test.tsx +102 -126
  213. package/src/components/Notification/Notification.tsx +157 -161
  214. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
  215. package/src/components/Pagination/Pagination.stories.mdx +26 -27
  216. package/src/components/Pagination/Pagination.stories.tsx +11 -16
  217. package/src/components/Pagination/Pagination.test.tsx +276 -140
  218. package/src/components/Pagination/Pagination.tsx +174 -154
  219. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
  220. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
  221. package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
  222. package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
  223. package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
  224. package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
  225. package/src/components/Radio/Radio.test.tsx +20 -4
  226. package/src/components/Radio/Radio.tsx +6 -3
  227. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
  228. package/src/components/RadioGroup/RadioGroup.stories.mdx +4 -5
  229. package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
  230. package/src/components/RadioGroup/RadioGroup.tsx +21 -29
  231. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
  232. package/src/components/SearchBar/SearchBar.Test.tsx +170 -16
  233. package/src/components/SearchBar/SearchBar.stories.mdx +294 -219
  234. package/src/components/SearchBar/SearchBar.tsx +161 -46
  235. package/src/components/Select/Select.stories.mdx +188 -170
  236. package/src/components/Select/Select.test.tsx +132 -375
  237. package/src/components/Select/Select.tsx +121 -165
  238. package/src/components/Select/SelectTypes.tsx +5 -0
  239. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +33 -76
  240. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
  241. package/src/components/SkeletonLoader/SkeletonLoader.tsx +75 -70
  242. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  243. package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
  244. package/src/components/Slider/Slider.stories.mdx +529 -0
  245. package/src/components/Slider/Slider.test.tsx +653 -0
  246. package/src/components/Slider/Slider.tsx +303 -0
  247. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
  248. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  249. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  250. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  251. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  252. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  253. package/src/components/StyleGuide/Bidirectionality.stories.mdx +17 -17
  254. package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
  255. package/src/components/StyleGuide/Buttons.stories.mdx +102 -86
  256. package/src/components/StyleGuide/ColorCard.tsx +46 -0
  257. package/src/components/StyleGuide/Colors.stories.mdx +196 -0
  258. package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
  259. package/src/components/StyleGuide/Forms.stories.mdx +9 -7
  260. package/src/components/StyleGuide/Iconography.stories.mdx +119 -127
  261. package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
  262. package/src/components/StyleGuide/Typography.stories.mdx +202 -189
  263. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  264. package/src/components/Tabs/Tabs.stories.mdx +73 -11
  265. package/src/components/Tabs/Tabs.tsx +88 -67
  266. package/src/components/Template/Template.stories.mdx +572 -0
  267. package/src/components/Template/Template.test.tsx +124 -0
  268. package/src/components/Template/Template.tsx +226 -0
  269. package/src/components/Text/Text.stories.mdx +70 -0
  270. package/src/components/Text/Text.test.tsx +63 -0
  271. package/src/components/Text/Text.tsx +55 -0
  272. package/src/components/Text/TextTypes.tsx +6 -0
  273. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  274. package/src/components/TextInput/TextInput.stories.mdx +89 -90
  275. package/src/components/TextInput/TextInput.test.tsx +84 -85
  276. package/src/components/TextInput/TextInput.tsx +121 -95
  277. package/src/components/TextInput/TextInputTypes.tsx +8 -0
  278. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
  279. package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
  280. package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
  281. package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
  282. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
  283. package/src/docs/Chakra.stories.mdx +246 -65
  284. package/src/docs/Intro.stories.mdx +18 -13
  285. package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
  286. package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
  287. package/src/hooks/useCarouselStyles.ts +34 -0
  288. package/src/hooks/useNYPLTheme.ts +67 -0
  289. package/src/hooks/useWindowSize.ts +40 -0
  290. package/src/index.ts +39 -16
  291. package/src/resources.scss +5 -5
  292. package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
  293. package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
  294. package/src/styles/base/_03-base.scss +25 -0
  295. package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
  296. package/src/styles/base/_place-holder.scss +14 -3
  297. package/src/styles/{03-space → space}/_space-inline.scss +14 -14
  298. package/src/styles/{03-space → space}/_space-inset.scss +10 -10
  299. package/src/styles/space/_space-stack.scss +116 -0
  300. package/src/styles.scss +13 -62
  301. package/src/theme/components/accordion.ts +30 -0
  302. package/src/theme/components/breadcrumb.ts +77 -0
  303. package/src/theme/components/button.ts +91 -71
  304. package/src/theme/components/card.ts +174 -0
  305. package/src/theme/components/checkbox.ts +22 -29
  306. package/src/theme/components/checkboxGroup.ts +8 -0
  307. package/src/theme/components/componentWrapper.ts +10 -0
  308. package/src/theme/components/datePicker.ts +17 -0
  309. package/src/theme/components/fieldset.ts +18 -0
  310. package/src/theme/components/global.ts +82 -0
  311. package/src/theme/components/globalMixins.ts +24 -0
  312. package/src/theme/components/heading.ts +25 -13
  313. package/src/theme/components/helperErrorText.ts +9 -0
  314. package/src/theme/components/hero.ts +240 -0
  315. package/src/theme/components/horizontalRule.ts +13 -0
  316. package/src/theme/components/icon.ts +79 -0
  317. package/src/theme/components/image.ts +116 -0
  318. package/src/theme/components/label.ts +10 -0
  319. package/src/theme/components/link.ts +51 -0
  320. package/src/theme/components/list.ts +73 -0
  321. package/src/theme/components/notification.ts +93 -0
  322. package/src/theme/components/pagination.ts +20 -0
  323. package/src/theme/components/progressIndicator.ts +62 -0
  324. package/src/theme/components/radio.ts +22 -33
  325. package/src/theme/components/radioGroup.ts +8 -0
  326. package/src/theme/components/searchBar.ts +21 -0
  327. package/src/theme/components/select.ts +53 -0
  328. package/src/theme/components/skeletonLoader.ts +107 -0
  329. package/src/theme/components/slider.ts +79 -0
  330. package/src/theme/components/statusBadge.ts +26 -0
  331. package/src/theme/components/tabs.ts +102 -69
  332. package/src/theme/components/template.ts +114 -0
  333. package/src/theme/components/text.ts +31 -0
  334. package/src/theme/components/textInput.ts +62 -0
  335. package/src/theme/components/videoPlayer.ts +49 -0
  336. package/src/theme/foundations/breakpoints.ts +8 -8
  337. package/src/theme/foundations/colors.ts +29 -13
  338. package/src/theme/foundations/global.ts +8 -0
  339. package/src/theme/foundations/radii.ts +6 -0
  340. package/src/theme/foundations/shadows.ts +5 -0
  341. package/src/theme/foundations/spacing.ts +24 -24
  342. package/src/theme/index.ts +74 -13
  343. package/src/utils/componentCategories.ts +12 -5
  344. package/src/utils/utils.ts +13 -0
  345. package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
  346. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
  347. package/dist/components/Image/Image.stories.d.ts +0 -18
  348. package/dist/components/List/List.stories.d.ts +0 -7
  349. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  350. package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
  351. package/dist/components/Template/Template.stories.d.ts +0 -30
  352. package/dist/theme/components/customRadioGroup.d.ts +0 -17
  353. package/src/components/Accordion/Accordion.stories.tsx +0 -66
  354. package/src/components/Accordion/_Accordion.scss +0 -81
  355. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  356. package/src/components/Button/_Button.scss +0 -56
  357. package/src/components/Card/_Card.scss +0 -308
  358. package/src/components/Form/_Form.scss +0 -67
  359. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
  360. package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
  361. package/src/components/Hero/_Hero.scss +0 -256
  362. package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
  363. package/src/components/Icons/_Icons.scss +0 -116
  364. package/src/components/Image/Image.stories.tsx +0 -54
  365. package/src/components/Image/_Image.scss +0 -38
  366. package/src/components/Label/_Label.scss +0 -22
  367. package/src/components/Link/_Link.scss +0 -73
  368. package/src/components/List/List.stories.tsx +0 -139
  369. package/src/components/List/_List.scss +0 -76
  370. package/src/components/Notification/_Notification.scss +0 -110
  371. package/src/components/Pagination/_Pagination.scss +0 -40
  372. package/src/components/SearchBar/_SearchBar.scss +0 -16
  373. package/src/components/Select/_Select.scss +0 -82
  374. package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
  375. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
  376. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  377. package/src/components/StyleGuide/Colors.stories.tsx +0 -289
  378. package/src/components/Template/Template.stories.tsx +0 -86
  379. package/src/components/Template/_Template.scss +0 -63
  380. package/src/components/TextInput/_TextInput.scss +0 -59
  381. package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
  382. package/src/styles/01-colors/_colors-brand.scss +0 -56
  383. package/src/styles/01-colors/_colors-utility.scss +0 -65
  384. package/src/styles/02-typography/_type-scale.css +0 -11
  385. package/src/styles/02-typography/_type-weight.css +0 -7
  386. package/src/styles/02-typography/_typefaces.css +0 -4
  387. package/src/styles/03-space/_space-stack.scss +0 -116
  388. package/src/styles/03-space/_space.css +0 -30
  389. package/src/styles/base/_04-base.scss +0 -19
  390. package/src/styles/base/_card-grid.scss +0 -78
  391. package/src/styles/base/_typography.scss +0 -11
  392. package/src/theme/components/customRadioGroup.ts +0 -18
@@ -1,69 +1,184 @@
1
1
  import * as React from "react";
2
- import bem from "../../utils/bem";
2
+ import { Box, useMultiStyleConfig } from "@chakra-ui/react";
3
+
4
+ import generateUUID from "../../helpers/generateUUID";
5
+ import Select from "../Select/Select";
6
+ import TextInput from "../TextInput/TextInput";
7
+ import { TextInputTypes, TextInputVariants } from "../TextInput/TextInputTypes";
8
+ import Button from "../Button/Button";
9
+ import { ButtonTypes } from "../Button/ButtonTypes";
10
+ import Icon from "../Icons/Icon";
11
+ import { IconAlign, IconNames, IconSizes } from "../Icons/IconTypes";
12
+ import HelperErrorText from "../HelperErrorText/HelperErrorText";
13
+ import { SelectTypes } from "../Select/SelectTypes";
14
+
15
+ // Internal interfaces that are used only for `SearchBar` props.
16
+ interface SelectProps {
17
+ labelText: string;
18
+ name: string;
19
+ optionsData: string[];
20
+ }
21
+ interface TextInputProps {
22
+ labelText: string;
23
+ name: string;
24
+ onChange?: (
25
+ event:
26
+ | React.ChangeEvent<HTMLInputElement>
27
+ | React.ChangeEvent<HTMLTextAreaElement>
28
+ ) => void;
29
+ placeholder: string;
30
+ value?: string;
31
+ }
3
32
 
4
33
  export interface SearchBarProps {
5
- /** Populates aria-label on the form;
6
- * defines a hidden string that labels
7
- * the SearchBar
8
- */
9
- ariaLabel?: string;
10
- /** Populates aria-labelledby on the form;
11
- * defines a visible string that labels
12
- * the SearchBar
13
- */
14
- ariaLabelledBy?: string;
15
- /** Additional attributes passed to the form */
16
- attributes?: { [key: string]: any };
17
- /** BlockName for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
18
- blockName?: string;
19
- /** ClassName that appears in addition to "search-bar" */
20
- className?: string;
21
- /** Adds 'method' property to the form */
22
- method?: string;
23
- /** Adds 'action' property to the form */
34
+ /** Adds 'action' property to the `form` element. */
24
35
  action?: string;
36
+ /** The onClick callback function for the `Button` component. */
37
+ buttonOnClick?: (event: React.MouseEvent | React.KeyboardEvent) => void;
38
+ /** A class name for the `form` element. */
39
+ className?: string;
40
+ /** The text to display below the form in a `HelperErrorText` component. */
41
+ helperErrorText?: string;
25
42
  /** ID that other components can cross reference for accessibility purposes */
26
43
  id?: string;
27
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
28
- modifiers?: string[];
29
- /** Handler on form submit */
44
+ /** Optional string to populate the `HelperErrorText` for the error state
45
+ * when `isInvalid` is true. */
46
+ invalidText?: string;
47
+ /** Sets children form components in the disabled state. */
48
+ isDisabled?: boolean;
49
+ /** Sets children form components in the error state. */
50
+ isInvalid?: boolean;
51
+ /** Sets children form components in the required state. */
52
+ isRequired?: boolean;
53
+ /** Populates the `aria-label` attribute on the form element. */
54
+ labelText: string;
55
+ /** Adds 'method' property to the `form` element. */
56
+ method?: string;
57
+ /** Handler function when the form is submitted. */
30
58
  onSubmit: (event: React.FormEvent) => void;
59
+ /** Required props to render a `Select` element. */
60
+ selectProps?: SelectProps | undefined;
61
+ /** Custom input element to render instead of a `TextInput` element. */
62
+ textInputElement?: JSX.Element;
63
+ /** Required props to render a `TextInput` element. */
64
+ textInputProps?: TextInputProps | undefined;
31
65
  }
32
66
 
33
- /** Renders a wrapper `form` element to be used with `Select` (optional),
34
- * `Input`, and `Button` components together. */
35
- export default function SearchBar(
36
- props: React.PropsWithChildren<SearchBarProps>
37
- ) {
67
+ /**
68
+ * Renders a wrapper `form` element to be used with `Select` (optional),
69
+ * `Input`, and `Button` components together.
70
+ */
71
+ export default function SearchBar(props: SearchBarProps) {
38
72
  const {
39
- ariaLabel,
40
- ariaLabelledBy,
41
- blockName,
42
- children,
73
+ action,
74
+ buttonOnClick = null,
43
75
  className,
44
- id,
45
- modifiers = [],
46
- onSubmit,
47
- attributes,
76
+ helperErrorText,
77
+ id = generateUUID(),
78
+ invalidText,
79
+ isDisabled = false,
80
+ isInvalid = false,
81
+ isRequired = false,
82
+ labelText,
48
83
  method,
49
- action,
84
+ onSubmit,
85
+ selectProps,
86
+ textInputElement,
87
+ textInputProps,
50
88
  } = props;
51
-
52
- const baseClass = "search-bar";
89
+ const styles = useMultiStyleConfig("SearchBar", { hasSelect: selectProps });
90
+ const stateProps = {
91
+ helperText: "",
92
+ isDisabled,
93
+ isInvalid,
94
+ isRequired,
95
+ showHelperInvalidText: false,
96
+ showLabel: false,
97
+ };
98
+ const helperErrorTextID = generateUUID();
99
+ const ariaDescribedby = helperErrorTextID;
100
+ const footnote = isInvalid ? invalidText : helperErrorText;
101
+ const finalAriaLabel = footnote ? `${labelText} - ${footnote}` : labelText;
102
+ // Render the `Select` component.
103
+ const selectElem = selectProps && (
104
+ <Select
105
+ id={generateUUID()}
106
+ name={selectProps?.name}
107
+ labelText={selectProps?.labelText}
108
+ type={SelectTypes.SearchBar}
109
+ {...stateProps}
110
+ >
111
+ {selectProps?.optionsData.map((option) => (
112
+ <option key={option} value={option}>
113
+ {option}
114
+ </option>
115
+ ))}
116
+ </Select>
117
+ );
118
+ // Render the `TextInput` component.
119
+ const textInputNative = textInputProps && (
120
+ <TextInput
121
+ id={generateUUID()}
122
+ labelText={textInputProps?.labelText}
123
+ placeholder={textInputProps?.placeholder}
124
+ onChange={textInputProps?.onChange}
125
+ name={textInputProps?.name}
126
+ type={TextInputTypes.text}
127
+ variantType={
128
+ selectElem
129
+ ? TextInputVariants.SearchBarSelect
130
+ : TextInputVariants.SearchBar
131
+ }
132
+ value={textInputProps?.value}
133
+ {...stateProps}
134
+ />
135
+ );
136
+ // Render the `Button` component.
137
+ const buttonElem = (
138
+ <Button
139
+ id={generateUUID()}
140
+ buttonType={ButtonTypes.SearchBar}
141
+ type="submit"
142
+ onClick={buttonOnClick}
143
+ isDisabled={isDisabled}
144
+ >
145
+ <Icon
146
+ name={IconNames.Search}
147
+ size={IconSizes.Small}
148
+ align={IconAlign.Left}
149
+ />
150
+ Search
151
+ </Button>
152
+ );
153
+ // Render the `HelperErrorText` component.
154
+ const helperErrorTextElem = footnote && (
155
+ <HelperErrorText id={helperErrorTextID} isInvalid={isInvalid}>
156
+ {footnote}
157
+ </HelperErrorText>
158
+ );
159
+ // If a custom input element was passed, use that instead of the
160
+ // `TextInput` component.
161
+ const textInputElem = textInputElement || textInputNative;
53
162
 
54
163
  return (
55
- <form
56
- className={bem(baseClass, modifiers, blockName, [className])}
164
+ <Box
165
+ as="form"
57
166
  id={id}
167
+ className={className}
58
168
  role="search"
59
- aria-label={ariaLabel}
60
- aria-labelledby={ariaLabelledBy}
169
+ aria-label={finalAriaLabel}
170
+ aria-describedby={ariaDescribedby}
61
171
  onSubmit={onSubmit}
62
172
  method={method}
63
173
  action={action}
64
- {...attributes}
174
+ __css={styles}
65
175
  >
66
- {children}
67
- </form>
176
+ <Box __css={styles.topRow}>
177
+ {selectElem}
178
+ {textInputElem}
179
+ {buttonElem}
180
+ </Box>
181
+ {helperErrorTextElem}
182
+ </Box>
68
183
  );
69
184
  }
@@ -3,16 +3,14 @@ import {
3
3
  Story,
4
4
  Canvas,
5
5
  ArgsTable,
6
- Preview,
7
6
  Description,
8
7
  } from "@storybook/addon-docs/blocks";
9
8
  import { withDesign } from "storybook-addon-designs";
10
9
 
10
+ import { VStack } from "@chakra-ui/react";
11
11
  import Select from "./Select";
12
- import Label from "../Label/Label";
13
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
14
- import { action } from "@storybook/addon-actions";
15
12
  import { getCategory } from "../../utils/componentCategories";
13
+ import DSProvider from "../../theme/provider";
16
14
 
17
15
  <Meta
18
16
  title={getCategory("Select")}
@@ -27,10 +25,11 @@ import { getCategory } from "../../utils/componentCategories";
27
25
  jest: ["Select.test.tsx"],
28
26
  }}
29
27
  argTypes={{
30
- blockName: { table: { disable: true } },
31
- className: { table: { disable: true } },
32
- modifiers: { table: { disable: true } },
33
- attributes: { table: { disable: true } },
28
+ children: { table: { disable: true } },
29
+ id: { table: { disable: true } },
30
+ name: { table: { disable: true } },
31
+ onChange: { table: { disable: true } },
32
+ value: { table: { disable: true } },
34
33
  }}
35
34
  />
36
35
 
@@ -39,198 +38,217 @@ import { getCategory } from "../../utils/componentCategories";
39
38
  | Component Version | DS Version |
40
39
  | ----------------- | ---------- |
41
40
  | Added | `0.7.0` |
42
- | Latest | `0.24.0` |
41
+ | Latest | `0.25.1` |
43
42
 
44
43
  <Description of={Select} />
45
44
 
46
- The `Select` component renders a `select` element along with its `option` children. For optimal accessibility, the `labelText` property is a required prop, regardless of the label visibility. Additionally, while the `id` prop is optional, a unique `id` attribute is necessary for accessibility. If the prop is left blank, a value will be generated for you.
47
-
48
- <Preview withToolbar>
45
+ The `Select` component renders a `select` element along with its `option`
46
+ children. For optimal accessibility, the `labelText` property is a required
47
+ prop, regardless of the label visibility. Additionally, while the `id` prop is
48
+ optional, a unique `id` attribute is necessary for accessibility. If the prop
49
+ is left blank, a value will be generated for you.
50
+
51
+ The `Select` component renders all the necessary wrapping and associated text
52
+ elements, but the select options _need_ to be child `<option>` HTML elements.
53
+
54
+ ```jsx
55
+ <Select labelText="What is your favorite color?" name="color">
56
+ <option value="red">Red</option>
57
+ <option value="green">Green</option>
58
+ <option value="blue">Blue</option>
59
+ <option value="black">Black</option>
60
+ <option value="white">White</option>
61
+ </Select>
62
+ ```
63
+
64
+ <Canvas withToolbar>
49
65
  <Story
50
66
  name="Select"
51
67
  args={{
52
- id: "mySelect",
68
+ helperText: "This is the helper text.",
69
+ invalidText: "This is the error text :(",
70
+ isDisabled: false,
71
+ isInvalid: false,
72
+ isRequired: false,
53
73
  labelText: "What is your favorite color?",
74
+ name: "color",
54
75
  showLabel: true,
55
76
  showOptReqLabel: true,
56
- helperText: "Choose wisely.",
57
- invalidText: "Waaaaaaaa!",
58
- errored: false,
59
- required: true,
60
- disabled: false,
61
- selectedOption: "Green",
62
- attributes: {
63
- onFocus: action("focus"),
64
- onBlur: action("blur"),
65
- onChange: action("onChange"),
66
- },
67
- }}
68
- argTypes={{
69
- ariaLabel: { table: { disable: true } },
70
- helperTextId: { table: { disable: true } },
71
- isRequired: { table: { disable: true } },
72
- labelId: { table: { disable: true } },
73
77
  }}
74
78
  >
75
79
  {(args) => (
76
80
  <Select {...args}>
77
- <option aria-selected={true}></option>
78
- <option aria-selected={false}>Red</option>
79
- <option aria-selected={false}>Green</option>
80
- <option aria-selected={false}>Blue</option>
81
- <option aria-selected={false}>Black</option>
82
- <option aria-selected={false}>White</option>
81
+ <option value="red">Red</option>
82
+ <option value="green">Green</option>
83
+ <option value="blue">Blue</option>
84
+ <option value="black">Black</option>
85
+ <option value="white">White</option>
83
86
  </Select>
84
87
  )}
85
88
  </Story>
86
- </Preview>
89
+ </Canvas>
87
90
 
88
91
  <ArgsTable story="Select" />
89
92
 
90
- ### Deprecated Props
91
-
92
- The following props have been deprecated: `ariaLabel`, `helperTextId`, `isRequired` and `labelId`. They are still available to use, but they will be removed in a future release.
93
-
94
93
  ## Labelling Variations
95
94
 
96
- A Select can be rendered with or without visible labels. When `showLabel` is set to `false`, an `aria-label` attribute is added to the select input to maintain accessibility.
97
-
98
- <Preview>
99
- <Story
100
- name="Labelling Variations"
101
- args={{
102
- labelText: "What is your favorite color?",
103
- showLabel: false,
104
- showOptReqLabel: false,
105
- }}
106
- >
107
- {(args) => (
108
- <>
109
- <Select {...args}>
110
- <option aria-selected={true}></option>
111
- <option aria-selected={false}>Red</option>
112
- <option aria-selected={false}>Green</option>
113
- <option aria-selected={false}>Blue</option>
114
- <option aria-selected={false}>Black</option>
115
- <option aria-selected={false}>White</option>
116
- </Select>
117
- </>
118
- )}
119
- </Story>
120
- </Preview>
95
+ A Select can be rendered with or without a visible label. When `showLabel` is
96
+ set to `false`, an `aria-label` attribute is added to the select input to
97
+ maintain accessibility. If the component needs to be required, the
98
+ `showOptReqLabel` prop can be used to show or hide the "Required"/"Optional"
99
+ text within the `label` element.
121
100
 
122
101
  <Canvas>
123
- <Select labelText="What is your favorite color?" showLabel={true}>
124
- <option aria-selected={true}></option>
125
- <option aria-selected={false}>Red</option>
126
- <option aria-selected={false}>Green</option>
127
- <option aria-selected={false}>Blue</option>
128
- <option aria-selected={false}>Black</option>
129
- <option aria-selected={false}>White</option>
130
- </Select>
102
+ <Story name="Labelling Variations">
103
+ <VStack align="stretch" spacing={8}>
104
+ <Select
105
+ labelText="What is your favorite color?"
106
+ helperText="Display the label"
107
+ name="color"
108
+ >
109
+ <option value="red">Red</option>
110
+ <option value="green">Green</option>
111
+ <option value="blue">Blue</option>
112
+ <option value="black">Black</option>
113
+ <option value="white">White</option>
114
+ </Select>
115
+ <Select
116
+ labelText="What is your favorite color?"
117
+ helperText="Do not display the label"
118
+ name="color"
119
+ showLabel={false}
120
+ >
121
+ <option value="red">Red</option>
122
+ <option value="green">Green</option>
123
+ <option value="blue">Blue</option>
124
+ <option value="black">Black</option>
125
+ <option value="white">White</option>
126
+ </Select>
127
+ <Select
128
+ labelText="What is your favorite color?"
129
+ helperText="Display the Required/Optional text"
130
+ name="color"
131
+ isRequired
132
+ >
133
+ <option value="red">Red</option>
134
+ <option value="green">Green</option>
135
+ <option value="blue">Blue</option>
136
+ <option value="black">Black</option>
137
+ <option value="white">White</option>
138
+ </Select>
139
+ <Select
140
+ labelText="What is your favorite color?"
141
+ helperText="Do not display the Required/Optional text"
142
+ name="color"
143
+ showOptReqLabel={false}
144
+ isRequired
145
+ >
146
+ <option value="red">Red</option>
147
+ <option value="green">Green</option>
148
+ <option value="blue">Blue</option>
149
+ <option value="black">Black</option>
150
+ <option value="white">White</option>
151
+ </Select>
152
+ </VStack>
153
+ </Story>
131
154
  </Canvas>
132
155
 
133
- <Canvas>
134
- <Select
135
- labelText="What is your favorite color?"
136
- showLabel={false}
137
- helperText="Choose wisely!"
138
- >
139
- <option aria-selected={true}></option>
140
- <option aria-selected={false}>Red</option>
141
- <option aria-selected={false}>Green</option>
142
- <option aria-selected={false}>Blue</option>
143
- <option aria-selected={false}>Black</option>
144
- <option aria-selected={false}>White</option>
145
- </Select>
146
- </Canvas>
156
+ ## Errored
147
157
 
148
158
  <Canvas>
149
- <Select
150
- labelText="What is your favorite color?"
151
- showLabel={true}
152
- helperText="Choose wisely!"
153
- >
154
- <option aria-selected={true}></option>
155
- <option aria-selected={false}>Red</option>
156
- <option aria-selected={false}>Green</option>
157
- <option aria-selected={false}>Blue</option>
158
- <option aria-selected={false}>Black</option>
159
- <option aria-selected={false}>White</option>
160
- </Select>
159
+ <DSProvider>
160
+ <Select
161
+ labelText="What is your favorite color?"
162
+ helperText="This is the helper text."
163
+ invalidText="This is the error text :("
164
+ name="color"
165
+ isInvalid
166
+ >
167
+ <option value="red">Red</option>
168
+ <option value="green">Green</option>
169
+ <option value="blue">Blue</option>
170
+ <option value="black">Black</option>
171
+ <option value="white">White</option>
172
+ </Select>
173
+ </DSProvider>
161
174
  </Canvas>
162
175
 
163
- <Canvas>
164
- <Select
165
- labelText="What is your favorite color?"
166
- showLabel={false}
167
- helperText="Choose wisely!"
168
- invalidText="Waaaaaa!"
169
- errored={true}
170
- >
171
- <option aria-selected={true}></option>
172
- <option aria-selected={false}>Red</option>
173
- <option aria-selected={false}>Green</option>
174
- <option aria-selected={false}>Blue</option>
175
- <option aria-selected={false}>Black</option>
176
- <option aria-selected={false}>White</option>
177
- </Select>
178
- </Canvas>
176
+ ## Disabled
179
177
 
180
178
  <Canvas>
181
- <Select
182
- labelText="What is your favorite color?"
183
- showLabel={true}
184
- helperText="Choose wisely!"
185
- invalidText="Waaaaaa!"
186
- errored={true}
187
- >
188
- <option aria-selected={true}></option>
189
- <option aria-selected={false}>Red</option>
190
- <option aria-selected={false}>Green</option>
191
- <option aria-selected={false}>Blue</option>
192
- <option aria-selected={false}>Black</option>
193
- <option aria-selected={false}>White</option>
194
- </Select>
179
+ <DSProvider>
180
+ <Select
181
+ labelText="What is your favorite color?"
182
+ helperText="This is the helper text."
183
+ invalidText="This is the error text :("
184
+ name="color"
185
+ isDisabled
186
+ >
187
+ <option value="red">Red</option>
188
+ <option value="green">Green</option>
189
+ <option value="blue">Blue</option>
190
+ <option value="black">Black</option>
191
+ <option value="white">White</option>
192
+ </Select>
193
+ </DSProvider>
195
194
  </Canvas>
196
195
 
197
- ## Deprecated Implementation
198
-
199
- The `ariaLabel`, `helperTextId`, `isRequired` and `labelId` have been deprecated, but they are still available to use until they are removed in a future release. The code below uses all four deprecated props in conjunction with the `Label` and `HelperErrorText` components to render a fully functional and accessible select input.
200
-
201
- <Preview withToolbar>
202
- <Story
203
- name="Deprecated Implementation"
204
- args={{
205
- labelText: "What is your favorite color?",
206
- showLabel: false,
207
- }}
208
- >
209
- {(args) => (
210
- <>
211
- <Label htmlFor="select" optReqFlag="Required" id={"label"}>
212
- Fruit on your island
213
- </Label>
214
- <Select
215
- name="optionalLabelSelect"
216
- id={"select"}
217
- isRequired={false}
218
- ariaLabel="Select Label"
219
- labelId={"label"}
220
- helperTextId={"helperText"}
221
- selectedOption="Option Three"
222
- >
223
- <option aria-selected={true}>Option One</option>
224
- <option aria-selected={false}>Option Two</option>
225
- <option aria-selected={false}>Option Three</option>
226
- <option aria-selected={false}>Option Four</option>
227
- <option aria-selected={false}>Option Five</option>
228
- </Select>
229
- <HelperErrorText isError={false} id={"helperText"}>
230
- Once you pick a fruit for your island it cannot be changed, so choose
231
- wisely!
232
- </HelperErrorText>
233
- </>
234
- )}
235
- </Story>
236
- </Preview>
196
+ ## Getting Select Data Value
197
+
198
+ ### Controlled Component using `value` and `onChange` props
199
+
200
+ If your application uses controlled React components and the DS `Select`
201
+ component must be controlled, you can control and extract the data through the
202
+ `value` and `onChange` props. This will be called every time a new `option`
203
+ value is selected.
204
+
205
+ ```jsx
206
+ const value = "red";
207
+ const onChange = (e) => {
208
+ // This will return the value selected through the event object.
209
+ console.log(e.target.value);
210
+ };
211
+ // ...
212
+
213
+ <Select
214
+ labelText="What is your favorite color?"
215
+ helperText="This is the helper text."
216
+ name="color"
217
+ value={value}
218
+ onChange={onChange}
219
+ >
220
+ <option value="red">Red</option>
221
+ <option value="green">Green</option>
222
+ <option value="blue">Blue</option>
223
+ <option value="black">Black</option>
224
+ <option value="white">White</option>
225
+ </Select>;
226
+ ```
227
+
228
+ ### Uncontrolled Component using `ref`s
229
+
230
+ If your application uses uncontrolled components, you can pass a React `ref`
231
+ prop to the DS Select component to get the selected value from the DOM.
232
+
233
+ ```jsx
234
+ const selectRef = React.createRef<HTMLSelectElement>();
235
+ // ...
236
+ <Select
237
+ labelText="What is your favorite color?"
238
+ helperText="This is the helper text."
239
+ name="color"
240
+ >
241
+ <option value="red">Red</option>
242
+ <option value="green">Green</option>
243
+ <option value="blue">Blue</option>
244
+ <option value="black">Black</option>
245
+ <option value="white">White</option>
246
+ </Select>
247
+
248
+ // ...
249
+ // Get the value through:
250
+ const onSubmit = () => {
251
+ // ...
252
+ const selectValue = selectRef.current.value;
253
+ };
254
+ ```