@nypl/design-system-react-components 0.25.7 → 0.25.10

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 (293) hide show
  1. package/CHANGELOG.md +119 -1
  2. package/README.md +1 -1
  3. package/dist/components/Button/Button.d.ts +6 -6
  4. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  5. package/dist/components/Card/Card.d.ts +6 -4
  6. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  7. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  8. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  9. package/dist/components/DatePicker/DatePicker.d.ts +4 -3
  10. package/dist/components/Fieldset/Fieldset.d.ts +1 -3
  11. package/dist/components/Form/Form.d.ts +15 -14
  12. package/dist/components/Form/FormTypes.d.ts +2 -2
  13. package/dist/components/Heading/Heading.d.ts +7 -3
  14. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  15. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  16. package/dist/components/HorizontalRule/HorizontalRule.d.ts +3 -3
  17. package/dist/components/Icons/Icon.d.ts +4 -4
  18. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  19. package/dist/components/Icons/IconTypes.d.ts +1 -23
  20. package/dist/components/Image/Image.d.ts +11 -3
  21. package/dist/components/Image/ImageTypes.d.ts +3 -1
  22. package/dist/components/Link/LinkTypes.d.ts +1 -0
  23. package/dist/components/Logo/Logo.d.ts +28 -0
  24. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  25. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  26. package/dist/components/Modal/Modal.d.ts +0 -4
  27. package/dist/components/Notification/Notification.d.ts +4 -2
  28. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  29. package/dist/components/Radio/Radio.d.ts +6 -5
  30. package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
  31. package/dist/components/SearchBar/SearchBar.d.ts +15 -7
  32. package/dist/components/Select/Select.d.ts +5 -2
  33. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  34. package/dist/components/Slider/Slider.d.ts +3 -2
  35. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  36. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  37. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  38. package/dist/components/Table/Table.d.ts +29 -0
  39. package/dist/components/Template/Template.d.ts +30 -6
  40. package/dist/components/Text/Text.d.ts +2 -2
  41. package/dist/components/TextInput/TextInput.d.ts +4 -3
  42. package/dist/components/Toggle/Toggle.d.ts +48 -0
  43. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  44. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  45. package/dist/design-system-react-components.cjs.development.js +4698 -4405
  46. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  48. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  49. package/dist/design-system-react-components.esm.js +5862 -5573
  50. package/dist/design-system-react-components.esm.js.map +1 -1
  51. package/dist/index.d.ts +13 -8
  52. package/dist/resources.scss +0 -2
  53. package/dist/styles.css +2 -2
  54. package/dist/theme/components/breadcrumb.d.ts +1 -1
  55. package/dist/theme/components/button.d.ts +0 -12
  56. package/dist/theme/components/card.d.ts +14 -2
  57. package/dist/theme/components/customTable.d.ts +56 -0
  58. package/dist/theme/components/fieldset.d.ts +2 -2
  59. package/dist/theme/components/global.d.ts +1 -1
  60. package/dist/theme/components/heading.d.ts +4 -0
  61. package/dist/theme/components/label.d.ts +1 -1
  62. package/dist/theme/components/link.d.ts +14 -1
  63. package/dist/theme/components/list.d.ts +0 -2
  64. package/dist/theme/components/logo.d.ts +4 -0
  65. package/dist/theme/components/notification.d.ts +8 -4
  66. package/dist/theme/components/searchBar.d.ts +7 -13
  67. package/dist/theme/components/select.d.ts +1 -0
  68. package/dist/theme/components/structuredContent.d.ts +33 -0
  69. package/dist/theme/components/template.d.ts +10 -10
  70. package/dist/theme/components/textInput.d.ts +2 -0
  71. package/dist/theme/components/toggle.d.ts +71 -0
  72. package/dist/theme/foundations/spacing.d.ts +2 -0
  73. package/dist/utils/utils.d.ts +10 -0
  74. package/package.json +40 -37
  75. package/src/__tests__/utils/utils.test.ts +23 -1
  76. package/src/components/Accordion/Accordion.stories.mdx +16 -15
  77. package/src/components/Accordion/Accordion.test.tsx +45 -1
  78. package/src/components/Accordion/Accordion.tsx +20 -8
  79. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
  80. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  81. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  82. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  83. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
  84. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +25 -0
  85. package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
  86. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +103 -4
  87. package/src/components/Button/Button.stories.mdx +93 -48
  88. package/src/components/Button/Button.test.tsx +0 -12
  89. package/src/components/Button/Button.tsx +7 -8
  90. package/src/components/Button/ButtonTypes.tsx +0 -1
  91. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  92. package/src/components/Card/Card.stories.mdx +246 -64
  93. package/src/components/Card/Card.test.tsx +45 -22
  94. package/src/components/Card/Card.tsx +30 -14
  95. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  96. package/src/components/Chakra/Box.stories.mdx +3 -3
  97. package/src/components/Chakra/Center.stories.mdx +5 -5
  98. package/src/components/Chakra/Flex.stories.mdx +113 -0
  99. package/src/components/Chakra/Grid.stories.mdx +14 -17
  100. package/src/components/Chakra/Stack.stories.mdx +2 -2
  101. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  102. package/src/components/Checkbox/Checkbox.tsx +13 -8
  103. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  104. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  105. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  106. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  107. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  108. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  109. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  110. package/src/components/DatePicker/DatePicker.test.tsx +14 -12
  111. package/src/components/DatePicker/DatePicker.tsx +13 -10
  112. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  113. package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
  114. package/src/components/Fieldset/Fieldset.tsx +2 -4
  115. package/src/components/Form/Form.stories.mdx +75 -49
  116. package/src/components/Form/Form.test.tsx +92 -3
  117. package/src/components/Form/Form.tsx +28 -23
  118. package/src/components/Form/FormTypes.tsx +2 -2
  119. package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
  120. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  121. package/src/components/Heading/Heading.stories.mdx +59 -23
  122. package/src/components/Heading/Heading.test.tsx +82 -18
  123. package/src/components/Heading/Heading.tsx +31 -31
  124. package/src/components/Heading/HeadingTypes.tsx +6 -6
  125. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  126. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  127. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  128. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  129. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  130. package/src/components/Hero/Hero.stories.mdx +72 -53
  131. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
  132. package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
  133. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
  134. package/src/components/Icons/Icon.stories.mdx +77 -75
  135. package/src/components/Icons/Icon.tsx +4 -5
  136. package/src/components/Icons/IconSvgs.tsx +2 -42
  137. package/src/components/Icons/IconTypes.tsx +1 -24
  138. package/src/components/Image/Image.stories.mdx +214 -104
  139. package/src/components/Image/Image.test.tsx +10 -0
  140. package/src/components/Image/Image.tsx +21 -10
  141. package/src/components/Image/ImageTypes.ts +2 -0
  142. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  143. package/src/components/Label/Label.stories.mdx +21 -20
  144. package/src/components/Link/Link.stories.mdx +103 -53
  145. package/src/components/Link/Link.test.tsx +108 -7
  146. package/src/components/Link/Link.tsx +58 -19
  147. package/src/components/Link/LinkTypes.tsx +1 -0
  148. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  149. package/src/components/List/List.stories.mdx +37 -25
  150. package/src/components/List/List.tsx +1 -1
  151. package/src/components/Logo/Logo.stories.mdx +220 -0
  152. package/src/components/Logo/Logo.test.tsx +98 -0
  153. package/src/components/Logo/Logo.tsx +97 -0
  154. package/src/components/Logo/LogoSvgs.tsx +34 -0
  155. package/src/components/Logo/LogoTypes.tsx +32 -0
  156. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  157. package/src/components/Modal/Modal.stories.mdx +20 -5
  158. package/src/components/Modal/Modal.tsx +2 -8
  159. package/src/components/Notification/Notification.stories.mdx +96 -40
  160. package/src/components/Notification/Notification.test.tsx +62 -16
  161. package/src/components/Notification/Notification.tsx +26 -9
  162. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  163. package/src/components/Pagination/Pagination.stories.mdx +19 -9
  164. package/src/components/Pagination/Pagination.tsx +3 -3
  165. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  166. package/src/components/Placeholder/Placeholder.tsx +7 -14
  167. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  168. package/src/components/Radio/Radio.stories.mdx +39 -19
  169. package/src/components/Radio/Radio.tsx +13 -9
  170. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
  171. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  172. package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
  173. package/src/components/RadioGroup/RadioGroup.tsx +97 -94
  174. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
  175. package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
  176. package/src/components/SearchBar/SearchBar.stories.mdx +116 -34
  177. package/src/components/SearchBar/SearchBar.tsx +70 -50
  178. package/src/components/Select/Select.stories.mdx +177 -66
  179. package/src/components/Select/Select.test.tsx +91 -2
  180. package/src/components/Select/Select.tsx +29 -13
  181. package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
  182. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  183. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  184. package/src/components/Slider/Slider.stories.mdx +74 -23
  185. package/src/components/Slider/Slider.test.tsx +35 -0
  186. package/src/components/Slider/Slider.tsx +22 -11
  187. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
  188. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  189. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  190. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  191. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  192. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  193. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  194. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  195. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  196. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  197. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  198. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  199. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  200. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  201. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  202. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  203. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  204. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  205. package/src/components/Table/Table.stories.mdx +165 -0
  206. package/src/components/Table/Table.test.tsx +137 -0
  207. package/src/components/Table/Table.tsx +126 -0
  208. package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
  209. package/src/components/Tabs/Tabs.stories.mdx +20 -14
  210. package/src/components/Tabs/Tabs.test.tsx +21 -5
  211. package/src/components/Tabs/Tabs.tsx +33 -18
  212. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
  213. package/src/components/Template/Template.stories.mdx +132 -49
  214. package/src/components/Template/Template.test.tsx +128 -6
  215. package/src/components/Template/Template.tsx +93 -13
  216. package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
  217. package/src/components/Text/Text.stories.mdx +33 -11
  218. package/src/components/Text/Text.tsx +2 -2
  219. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  220. package/src/components/TextInput/TextInput.test.tsx +96 -0
  221. package/src/components/TextInput/TextInput.tsx +12 -8
  222. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  223. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  224. package/src/components/Toggle/Toggle.test.tsx +140 -0
  225. package/src/components/Toggle/Toggle.tsx +123 -0
  226. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  227. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  228. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  229. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  230. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  231. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  232. package/src/docs/Chakra.stories.mdx +5 -8
  233. package/src/docs/Intro.stories.mdx +2 -2
  234. package/src/index.ts +19 -6
  235. package/src/styles/base/_03-base.scss +1 -1
  236. package/src/styles/base/_place-holder.scss +7 -7
  237. package/src/styles.scss +1 -5
  238. package/src/theme/components/breadcrumb.ts +5 -5
  239. package/src/theme/components/button.ts +5 -12
  240. package/src/theme/components/card.ts +9 -7
  241. package/src/theme/components/checkbox.ts +1 -1
  242. package/src/theme/components/customTable.ts +63 -0
  243. package/src/theme/components/datePicker.ts +1 -1
  244. package/src/theme/components/global.ts +7 -7
  245. package/src/theme/components/heading.ts +13 -11
  246. package/src/theme/components/helperErrorText.ts +1 -1
  247. package/src/theme/components/icon.ts +2 -2
  248. package/src/theme/components/image.ts +9 -1
  249. package/src/theme/components/link.ts +17 -5
  250. package/src/theme/components/list.ts +1 -3
  251. package/src/theme/components/logo.ts +54 -0
  252. package/src/theme/components/notification.ts +9 -7
  253. package/src/theme/components/searchBar.ts +7 -13
  254. package/src/theme/components/select.ts +1 -0
  255. package/src/theme/components/statusBadge.ts +1 -1
  256. package/src/theme/components/structuredContent.ts +54 -0
  257. package/src/theme/components/template.ts +10 -10
  258. package/src/theme/components/text.ts +6 -6
  259. package/src/theme/components/textInput.ts +1 -0
  260. package/src/theme/components/toggle.ts +69 -0
  261. package/src/theme/components/videoPlayer.ts +0 -2
  262. package/src/theme/foundations/global.ts +2 -2
  263. package/src/theme/foundations/spacing.ts +3 -0
  264. package/src/theme/foundations/typography.ts +84 -12
  265. package/src/theme/index.ts +8 -0
  266. package/src/utils/componentCategories.ts +5 -2
  267. package/src/utils/utils.ts +17 -0
  268. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  269. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  270. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  271. package/dist/components/Input/Input.d.ts +0 -36
  272. package/dist/components/Input/Input.stories.d.ts +0 -29
  273. package/dist/components/Input/InputTypes.d.ts +0 -6
  274. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  275. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  276. package/dist/helpers/getCSSVariable.d.ts +0 -1
  277. package/dist/interfaces.d.ts +0 -3
  278. package/dist/utils/bem.d.ts +0 -1
  279. package/src/__tests__/utils/bem.test.ts +0 -37
  280. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  281. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  282. package/src/components/CardEdition/CardEdition.tsx +0 -60
  283. package/src/components/CardEdition/_CardEdition.scss +0 -137
  284. package/src/components/Input/Input.stories.tsx +0 -133
  285. package/src/components/Input/Input.test.tsx +0 -266
  286. package/src/components/Input/Input.tsx +0 -81
  287. package/src/components/Input/InputTypes.tsx +0 -8
  288. package/src/components/Input/_Input.scss +0 -78
  289. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  290. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  291. package/src/helpers/getCSSVariable.tsx +0 -5
  292. package/src/interfaces.ts +0 -3
  293. package/src/utils/bem.ts +0 -44
@@ -1,24 +1,19 @@
1
- import * as React from "react";
2
1
  import { Box, useMultiStyleConfig } from "@chakra-ui/react";
2
+ import * as React from "react";
3
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
4
  import Button from "../Button/Button";
9
5
  import { ButtonTypes } from "../Button/ButtonTypes";
6
+ import ComponentWrapper from "../ComponentWrapper/ComponentWrapper";
7
+ import { HelperErrorTextType } from "../HelperErrorText/HelperErrorText";
10
8
  import Icon from "../Icons/Icon";
11
9
  import { IconAlign, IconNames, IconSizes } from "../Icons/IconTypes";
12
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
10
+ import Select from "../Select/Select";
13
11
  import { SelectTypes } from "../Select/SelectTypes";
12
+ import TextInput from "../TextInput/TextInput";
13
+ import { TextInputTypes, TextInputVariants } from "../TextInput/TextInputTypes";
14
+ import generateUUID from "../../helpers/generateUUID";
14
15
 
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 {
16
+ interface BaseProps {
22
17
  labelText: string;
23
18
  name: string;
24
19
  onChange?: (
@@ -26,6 +21,12 @@ interface TextInputProps {
26
21
  | React.ChangeEvent<HTMLInputElement>
27
22
  | React.ChangeEvent<HTMLTextAreaElement>
28
23
  ) => void;
24
+ }
25
+ // Internal interfaces that are used only for `SearchBar` props.
26
+ export interface SelectProps extends BaseProps {
27
+ optionsData: string[];
28
+ }
29
+ export interface TextInputProps extends BaseProps {
29
30
  placeholder: string;
30
31
  value?: string;
31
32
  }
@@ -37,13 +38,17 @@ export interface SearchBarProps {
37
38
  buttonOnClick?: (event: React.MouseEvent | React.KeyboardEvent) => void;
38
39
  /** A class name for the `form` element. */
39
40
  className?: string;
41
+ /** Optional string for the SearchBar's description above the component. */
42
+ descriptionText?: string;
43
+ /** Optional string for the SearchBar's heading text above the component. */
44
+ headingText?: string;
40
45
  /** The text to display below the form in a `HelperErrorText` component. */
41
- helperErrorText?: string;
46
+ helperText?: HelperErrorTextType;
42
47
  /** ID that other components can cross reference for accessibility purposes */
43
48
  id?: string;
44
49
  /** Optional string to populate the `HelperErrorText` for the error state
45
50
  * when `isInvalid` is true. */
46
- invalidText?: string;
51
+ invalidText?: HelperErrorTextType;
47
52
  /** Sets children form components in the disabled state. */
48
53
  isDisabled?: boolean;
49
54
  /** Sets children form components in the error state. */
@@ -54,6 +59,9 @@ export interface SearchBarProps {
54
59
  labelText: string;
55
60
  /** Adds 'method' property to the `form` element. */
56
61
  method?: string;
62
+ /** Sets the `Button` variant type to `ButtonTypes.NoBrand` when true;
63
+ * false by default which sets the type to `ButtonTypes.Primary`. */
64
+ noBrandButtonType?: boolean;
57
65
  /** Handler function when the form is submitted. */
58
66
  onSubmit: (event: React.FormEvent) => void;
59
67
  /** Required props to render a `Select` element. */
@@ -73,7 +81,9 @@ export default function SearchBar(props: SearchBarProps) {
73
81
  action,
74
82
  buttonOnClick = null,
75
83
  className,
76
- helperErrorText,
84
+ descriptionText,
85
+ headingText,
86
+ helperText,
77
87
  id = generateUUID(),
78
88
  invalidText,
79
89
  isDisabled = false,
@@ -81,6 +91,7 @@ export default function SearchBar(props: SearchBarProps) {
81
91
  isRequired = false,
82
92
  labelText,
83
93
  method,
94
+ noBrandButtonType = false,
84
95
  onSubmit,
85
96
  selectProps,
86
97
  textInputElement,
@@ -95,19 +106,27 @@ export default function SearchBar(props: SearchBarProps) {
95
106
  showHelperInvalidText: false,
96
107
  showLabel: false,
97
108
  };
98
- const helperErrorTextID = generateUUID();
99
- const ariaDescribedby = helperErrorTextID;
100
- const footnote = isInvalid ? invalidText : helperErrorText;
109
+ const footnote = isInvalid ? invalidText : helperText;
101
110
  const finalAriaLabel = footnote ? `${labelText} - ${footnote}` : labelText;
102
111
  const textInputPlaceholder = `${textInputProps?.placeholder} ${
103
112
  isRequired ? "(Required)" : ""
104
113
  }`;
114
+ const buttonType = noBrandButtonType
115
+ ? ButtonTypes.NoBrand
116
+ : ButtonTypes.Primary;
117
+ const searchBarButtonStyles = {
118
+ borderLeftRadius: "none",
119
+ borderRightRadius: { base: "none", md: "sm" },
120
+ lineHeight: "1.70",
121
+ marginBottom: "auto",
122
+ };
105
123
  // Render the `Select` component.
106
124
  const selectElem = selectProps && (
107
125
  <Select
108
- id={generateUUID()}
109
- name={selectProps?.name}
126
+ id={`searchbar-select-${id}`}
110
127
  labelText={selectProps?.labelText}
128
+ name={selectProps?.name}
129
+ onChange={selectProps?.onChange}
111
130
  type={SelectTypes.SearchBar}
112
131
  {...stateProps}
113
132
  >
@@ -121,11 +140,11 @@ export default function SearchBar(props: SearchBarProps) {
121
140
  // Render the `TextInput` component.
122
141
  const textInputNative = textInputProps && (
123
142
  <TextInput
124
- id={generateUUID()}
143
+ id={`searchbar-textinput-${id}`}
125
144
  labelText={textInputProps?.labelText}
126
- placeholder={textInputPlaceholder}
127
- onChange={textInputProps?.onChange}
128
145
  name={textInputProps?.name}
146
+ onChange={textInputProps?.onChange}
147
+ placeholder={textInputPlaceholder}
129
148
  type={TextInputTypes.text}
130
149
  variantType={
131
150
  selectElem
@@ -139,49 +158,50 @@ export default function SearchBar(props: SearchBarProps) {
139
158
  // Render the `Button` component.
140
159
  const buttonElem = (
141
160
  <Button
142
- id={generateUUID()}
143
- buttonType={ButtonTypes.SearchBar}
144
- type="submit"
145
- onClick={buttonOnClick}
161
+ additionalStyles={searchBarButtonStyles}
162
+ buttonType={buttonType}
163
+ id={`searchbar-button-${id}`}
146
164
  isDisabled={isDisabled}
165
+ onClick={buttonOnClick}
166
+ type="submit"
147
167
  >
148
168
  <Icon
169
+ align={IconAlign.Left}
170
+ id={`searchbar-icon-${id}`}
149
171
  name={IconNames.Search}
150
172
  size={IconSizes.Small}
151
- align={IconAlign.Left}
152
173
  />
153
174
  Search
154
175
  </Button>
155
176
  );
156
- // Render the `HelperErrorText` component.
157
- const helperErrorTextElem = footnote && (
158
- <HelperErrorText id={helperErrorTextID} isInvalid={isInvalid}>
159
- {footnote}
160
- </HelperErrorText>
161
- );
162
- // If a custom input element was passed, use that instead of the
163
- // `TextInput` component.
177
+ // If a custom input element was passed, use that element
178
+ // instead of the DS `TextInput` component.
164
179
  const textInputElem = textInputElement || textInputNative;
165
180
 
166
181
  return (
167
- <Box
168
- as="form"
182
+ <ComponentWrapper
183
+ descriptionText={descriptionText}
184
+ headingText={headingText}
185
+ helperText={helperText}
169
186
  id={id}
170
- className={className}
171
- role="search"
172
- aria-label={finalAriaLabel}
173
- aria-describedby={ariaDescribedby}
174
- onSubmit={onSubmit}
175
- method={method}
176
- action={action}
177
- __css={styles}
187
+ invalidText={invalidText}
188
+ isInvalid={isInvalid}
178
189
  >
179
- <Box __css={styles.topRow}>
190
+ <Box
191
+ as="form"
192
+ id={`searchbar-form-${id}`}
193
+ className={className}
194
+ role="search"
195
+ aria-label={finalAriaLabel}
196
+ onSubmit={onSubmit}
197
+ method={method}
198
+ action={action}
199
+ __css={styles}
200
+ >
180
201
  {selectElem}
181
202
  {textInputElem}
182
203
  {buttonElem}
183
204
  </Box>
184
- {helperErrorTextElem}
185
- </Box>
205
+ </ComponentWrapper>
186
206
  );
187
207
  }
@@ -1,16 +1,22 @@
1
+ import { VStack } from "@chakra-ui/react";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
4
+ Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
10
 
10
- import { VStack } from "@chakra-ui/react";
11
+ import Button from "../Button/Button";
12
+ import Form from "../Form/Form";
11
13
  import Select from "./Select";
14
+ import { SelectTypes } from "./SelectTypes";
12
15
  import { getCategory } from "../../utils/componentCategories";
13
16
  import DSProvider from "../../theme/provider";
17
+ import { getStorybookEnumValues } from "../../utils/utils";
18
+
19
+ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
14
20
 
15
21
  <Meta
16
22
  title={getCategory("Select")}
@@ -19,17 +25,40 @@ import DSProvider from "../../theme/provider";
19
25
  parameters={{
20
26
  design: {
21
27
  type: "figma",
22
- url:
23
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A549",
28
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A549",
24
29
  },
25
30
  jest: ["Select.test.tsx"],
26
31
  }}
27
32
  argTypes={{
28
33
  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
+ id: { control: false },
35
+ isDisabled: {
36
+ table: { defaultValue: { summary: false } },
37
+ },
38
+ isInvalid: {
39
+ table: { defaultValue: { summary: false } },
40
+ },
41
+ isRequired: {
42
+ table: { defaultValue: { summary: false } },
43
+ },
44
+ name: { control: false },
45
+ key: { table: { disable: true } },
46
+ onChange: { control: false },
47
+ ref: { table: { disable: true } },
48
+ showHelperInvalidText: {
49
+ table: { defaultValue: { summary: true } },
50
+ },
51
+ showLabel: {
52
+ table: { defaultValue: { summary: true } },
53
+ },
54
+ showOptReqLabel: {
55
+ table: { defaultValue: { summary: true } },
56
+ },
57
+ type: {
58
+ control: false,
59
+ table: { defaultValue: { summary: "SelectTypes.Default" } },
60
+ },
61
+ value: { control: false },
33
62
  }}
34
63
  />
35
64
 
@@ -38,7 +67,7 @@ import DSProvider from "../../theme/provider";
38
67
  | Component Version | DS Version |
39
68
  | ----------------- | ---------- |
40
69
  | Added | `0.7.0` |
41
- | Latest | `0.25.1` |
70
+ | Latest | `0.25.9` |
42
71
 
43
72
  <Description of={Select} />
44
73
 
@@ -63,17 +92,23 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
63
92
 
64
93
  <Canvas withToolbar>
65
94
  <Story
66
- name="Select"
95
+ name="Select with Controls"
67
96
  args={{
97
+ className: undefined,
68
98
  helperText: "This is the helper text.",
99
+ id: "select-id",
69
100
  invalidText: "This is the error text :(",
70
101
  isDisabled: false,
71
102
  isInvalid: false,
72
103
  isRequired: false,
73
104
  labelText: "What is your favorite color?",
74
105
  name: "color",
106
+ onChange: undefined,
107
+ showHelperInvalidText: undefined,
75
108
  showLabel: true,
76
109
  showOptReqLabel: true,
110
+ type: SelectTypes.Default,
111
+ value: undefined,
77
112
  }}
78
113
  >
79
114
  {(args) => (
@@ -88,7 +123,7 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
88
123
  </Story>
89
124
  </Canvas>
90
125
 
91
- <ArgsTable story="Select" />
126
+ <ArgsTable story="Select with Controls" />
92
127
 
93
128
  ## Labelling Variations
94
129
 
@@ -102,8 +137,8 @@ text within the `label` element.
102
137
  <Story name="Labelling Variations">
103
138
  <VStack align="stretch" spacing={8}>
104
139
  <Select
105
- labelText="What is your favorite color?"
106
140
  helperText="Display the label"
141
+ labelText="What is your favorite color?"
107
142
  name="color"
108
143
  >
109
144
  <option value="red">Red</option>
@@ -113,8 +148,8 @@ text within the `label` element.
113
148
  <option value="white">White</option>
114
149
  </Select>
115
150
  <Select
116
- labelText="What is your favorite color?"
117
151
  helperText="Do not display the label"
152
+ labelText="What is your favorite color?"
118
153
  name="color"
119
154
  showLabel={false}
120
155
  >
@@ -125,10 +160,10 @@ text within the `label` element.
125
160
  <option value="white">White</option>
126
161
  </Select>
127
162
  <Select
128
- labelText="What is your favorite color?"
129
163
  helperText="Display the Required/Optional text"
130
- name="color"
131
164
  isRequired
165
+ labelText="What is your favorite color?"
166
+ name="color"
132
167
  >
133
168
  <option value="red">Red</option>
134
169
  <option value="green">Green</option>
@@ -137,11 +172,11 @@ text within the `label` element.
137
172
  <option value="white">White</option>
138
173
  </Select>
139
174
  <Select
140
- labelText="What is your favorite color?"
141
175
  helperText="Do not display the Required/Optional text"
176
+ isRequired
177
+ labelText="What is your favorite color?"
142
178
  name="color"
143
179
  showOptReqLabel={false}
144
- isRequired
145
180
  >
146
181
  <option value="red">Red</option>
147
182
  <option value="green">Green</option>
@@ -158,11 +193,11 @@ text within the `label` element.
158
193
  <Canvas>
159
194
  <DSProvider>
160
195
  <Select
161
- labelText="What is your favorite color?"
162
196
  helperText="This is the helper text."
163
197
  invalidText="This is the error text :("
164
- name="color"
165
198
  isInvalid
199
+ labelText="What is your favorite color?"
200
+ name="color"
166
201
  >
167
202
  <option value="red">Red</option>
168
203
  <option value="green">Green</option>
@@ -178,11 +213,11 @@ text within the `label` element.
178
213
  <Canvas>
179
214
  <DSProvider>
180
215
  <Select
181
- labelText="What is your favorite color?"
182
216
  helperText="This is the helper text."
183
217
  invalidText="This is the error text :("
184
- name="color"
185
218
  isDisabled
219
+ labelText="What is your favorite color?"
220
+ name="color"
186
221
  >
187
222
  <option value="red">Red</option>
188
223
  <option value="green">Green</option>
@@ -198,57 +233,133 @@ text within the `label` element.
198
233
  ### Controlled Component using `value` and `onChange` props
199
234
 
200
235
  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
236
+ component must be controlled, you can pass and extract the value through the
202
237
  `value` and `onChange` props. This will be called every time a new `option`
203
238
  value is selected.
204
239
 
240
+ Try it out: open up the browser's console to see new values being logged on
241
+ each change.
242
+
205
243
  ```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>;
244
+ export function SelectControlledExample() {
245
+ const [value, setValue] = React.useState();
246
+ const onChange = (e) => {
247
+ // This will return the value selected through the event object.
248
+ console.log(e.target.value);
249
+ setValue(e.target.value);
250
+ };
251
+ return (
252
+ <Select
253
+ helperText="This is the helper text."
254
+ labelText="What is your favorite color?"
255
+ name="color"
256
+ onChange={onChange}
257
+ value={value}
258
+ >
259
+ <option value="red">Red</option>
260
+ <option value="green">Green</option>
261
+ <option value="blue">Blue</option>
262
+ <option value="black">Black</option>
263
+ <option value="white">White</option>
264
+ </Select>
265
+ );
266
+ }
226
267
  ```
227
268
 
269
+ export function SelectControlledExample() {
270
+ const [value, setValue] = React.useState();
271
+ const onChange = (e) => {
272
+ // This will return the value selected through the event object.
273
+ console.log("Controlled value:", e.target.value);
274
+ setValue(e.target.value);
275
+ };
276
+ return (
277
+ <Select
278
+ helperText="This is the helper text."
279
+ labelText="What is your favorite color?"
280
+ name="color"
281
+ onChange={onChange}
282
+ value={value}
283
+ >
284
+ <option value="red">Red</option>
285
+ <option value="green">Green</option>
286
+ <option value="blue">Blue</option>
287
+ <option value="black">Black</option>
288
+ <option value="white">White</option>
289
+ </Select>
290
+ );
291
+ }
292
+
293
+ <Canvas>
294
+ <DSProvider>
295
+ <SelectControlledExample />
296
+ </DSProvider>
297
+ </Canvas>
298
+
228
299
  ### Uncontrolled Component using `ref`s
229
300
 
230
301
  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.
302
+ prop to the DS Select component to get the selected value from the DOM. Note
303
+ that this example uses a `Form` and a `Button` to submit the form, only then
304
+ will the value be available.
232
305
 
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>
306
+ Try it out: open up the browser's console to see new values being logged on
307
+ each change.
247
308
 
248
- // ...
249
- // Get the value through:
250
- const onSubmit = () => {
251
- // ...
252
- const selectValue = selectRef.current.value;
253
- };
309
+ ```jsx
310
+ export function SelectUncontrolledExample() {
311
+ const selectRef = React.createRef();
312
+ const onSubmit = () => {
313
+ const selectValue = selectRef.current.value;
314
+ console.log("Using uncontrolled ref:", selectValue);
315
+ };
316
+ return (
317
+ <Form>
318
+ <Select
319
+ helperText="This is the helper text."
320
+ labelText="What is your favorite color?"
321
+ name="color"
322
+ ref={selectRef}
323
+ >
324
+ <option value="red">Red</option>
325
+ <option value="green">Green</option>
326
+ <option value="blue">Blue</option>
327
+ <option value="black">Black</option>
328
+ <option value="white">White</option>
329
+ </Select>
330
+ <Button onClick={onSubmit}>Submit</Button>
331
+ </Form>
332
+ );
333
+ }
254
334
  ```
335
+
336
+ export function SelectUncontrolledExample() {
337
+ const selectRef = React.createRef();
338
+ const onSubmit = () => {
339
+ const selectValue = selectRef.current.value;
340
+ console.log("Using uncontrolled ref:", selectValue);
341
+ };
342
+ return (
343
+ <Form>
344
+ <Select
345
+ helperText="This is the helper text."
346
+ labelText="What is your favorite color?"
347
+ name="color"
348
+ ref={selectRef}
349
+ >
350
+ <option value="red">Red</option>
351
+ <option value="green">Green</option>
352
+ <option value="blue">Blue</option>
353
+ <option value="black">Black</option>
354
+ <option value="white">White</option>
355
+ </Select>
356
+ <Button onClick={onSubmit}>Submit</Button>
357
+ </Form>
358
+ );
359
+ }
360
+
361
+ <Canvas>
362
+ <DSProvider>
363
+ <SelectUncontrolledExample />
364
+ </DSProvider>
365
+ </Canvas>