@nypl/design-system-react-components 0.25.8 → 0.25.11

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 (282) hide show
  1. package/CHANGELOG.md +110 -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 +0 -21
  19. package/dist/components/Icons/IconTypes.d.ts +0 -23
  20. package/dist/components/Image/Image.d.ts +11 -3
  21. package/dist/components/List/List.d.ts +1 -1
  22. package/dist/components/Logo/Logo.d.ts +28 -0
  23. package/dist/components/Logo/LogoSvgs.d.ts +34 -0
  24. package/dist/components/Logo/LogoTypes.d.ts +46 -0
  25. package/dist/components/Modal/Modal.d.ts +0 -4
  26. package/dist/components/Notification/Notification.d.ts +4 -2
  27. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  28. package/dist/components/Radio/Radio.d.ts +6 -5
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
  30. package/dist/components/SearchBar/SearchBar.d.ts +15 -7
  31. package/dist/components/Select/Select.d.ts +7 -2
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  33. package/dist/components/Slider/Slider.d.ts +3 -2
  34. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  35. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  36. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  37. package/dist/components/Table/Table.d.ts +29 -0
  38. package/dist/components/Template/Template.d.ts +30 -6
  39. package/dist/components/Text/Text.d.ts +2 -2
  40. package/dist/components/TextInput/TextInput.d.ts +4 -3
  41. package/dist/components/Toggle/Toggle.d.ts +3 -2
  42. package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
  43. package/dist/design-system-react-components.cjs.development.js +6721 -5777
  44. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  45. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  46. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  47. package/dist/design-system-react-components.esm.js +6774 -5839
  48. package/dist/design-system-react-components.esm.js.map +1 -1
  49. package/dist/index.d.ts +10 -8
  50. package/dist/resources.scss +0 -2
  51. package/dist/styles.css +2 -2
  52. package/dist/theme/components/breadcrumb.d.ts +1 -1
  53. package/dist/theme/components/button.d.ts +0 -12
  54. package/dist/theme/components/card.d.ts +14 -2
  55. package/dist/theme/components/customTable.d.ts +56 -0
  56. package/dist/theme/components/fieldset.d.ts +2 -2
  57. package/dist/theme/components/global.d.ts +1 -1
  58. package/dist/theme/components/heading.d.ts +4 -0
  59. package/dist/theme/components/label.d.ts +1 -1
  60. package/dist/theme/components/link.d.ts +14 -1
  61. package/dist/theme/components/list.d.ts +0 -2
  62. package/dist/theme/components/logo.d.ts +4 -0
  63. package/dist/theme/components/notification.d.ts +13 -4
  64. package/dist/theme/components/searchBar.d.ts +9 -11
  65. package/dist/theme/components/select.d.ts +1 -0
  66. package/dist/theme/components/structuredContent.d.ts +33 -0
  67. package/dist/theme/components/template.d.ts +10 -10
  68. package/dist/theme/components/textInput.d.ts +4 -0
  69. package/dist/theme/components/toggle.d.ts +8 -5
  70. package/dist/utils/utils.d.ts +10 -0
  71. package/package.json +40 -37
  72. package/src/__tests__/utils/utils.test.ts +23 -1
  73. package/src/components/Accordion/Accordion.stories.mdx +15 -13
  74. package/src/components/Accordion/Accordion.test.tsx +45 -1
  75. package/src/components/Accordion/Accordion.tsx +20 -8
  76. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
  77. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  78. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  79. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  80. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
  81. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +15 -0
  82. package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
  83. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +5 -5
  84. package/src/components/Button/Button.stories.mdx +93 -48
  85. package/src/components/Button/Button.test.tsx +0 -12
  86. package/src/components/Button/Button.tsx +7 -7
  87. package/src/components/Button/ButtonTypes.tsx +0 -1
  88. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  89. package/src/components/Card/Card.stories.mdx +186 -71
  90. package/src/components/Card/Card.test.tsx +45 -22
  91. package/src/components/Card/Card.tsx +21 -6
  92. package/src/components/Card/__snapshots__/Card.test.tsx.snap +9 -3
  93. package/src/components/Chakra/Box.stories.mdx +3 -3
  94. package/src/components/Chakra/Center.stories.mdx +5 -5
  95. package/src/components/Chakra/Flex.stories.mdx +113 -0
  96. package/src/components/Chakra/Grid.stories.mdx +3 -3
  97. package/src/components/Chakra/Stack.stories.mdx +2 -2
  98. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  99. package/src/components/Checkbox/Checkbox.tsx +13 -8
  100. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  101. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  102. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  103. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  104. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  105. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  106. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  107. package/src/components/DatePicker/DatePicker.test.tsx +6 -6
  108. package/src/components/DatePicker/DatePicker.tsx +17 -11
  109. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +50 -24
  110. package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
  111. package/src/components/Fieldset/Fieldset.tsx +2 -4
  112. package/src/components/Form/Form.stories.mdx +75 -49
  113. package/src/components/Form/Form.test.tsx +92 -3
  114. package/src/components/Form/Form.tsx +28 -23
  115. package/src/components/Form/FormTypes.tsx +2 -2
  116. package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
  117. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  118. package/src/components/Heading/Heading.stories.mdx +59 -23
  119. package/src/components/Heading/Heading.test.tsx +82 -18
  120. package/src/components/Heading/Heading.tsx +31 -31
  121. package/src/components/Heading/HeadingTypes.tsx +6 -6
  122. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  123. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  124. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  125. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  126. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  127. package/src/components/Hero/Hero.stories.mdx +72 -53
  128. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
  129. package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
  130. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
  131. package/src/components/Icons/Icon.stories.mdx +78 -77
  132. package/src/components/Icons/Icon.test.tsx +1 -1
  133. package/src/components/Icons/Icon.tsx +5 -6
  134. package/src/components/Icons/IconSvgs.tsx +0 -42
  135. package/src/components/Icons/IconTypes.tsx +0 -24
  136. package/src/components/Image/Image.stories.mdx +66 -18
  137. package/src/components/Image/Image.tsx +21 -10
  138. package/src/components/Label/Label.stories.mdx +20 -19
  139. package/src/components/Link/Link.stories.mdx +102 -51
  140. package/src/components/Link/Link.test.tsx +38 -8
  141. package/src/components/Link/Link.tsx +19 -12
  142. package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
  143. package/src/components/List/List.stories.mdx +60 -29
  144. package/src/components/List/List.test.tsx +1 -1
  145. package/src/components/List/List.tsx +2 -2
  146. package/src/components/List/__snapshots__/List.test.tsx.snap +3 -1
  147. package/src/components/Logo/Logo.stories.mdx +222 -0
  148. package/src/components/Logo/Logo.test.tsx +98 -0
  149. package/src/components/Logo/Logo.tsx +97 -0
  150. package/src/components/Logo/LogoSvgs.tsx +66 -0
  151. package/src/components/Logo/LogoTypes.tsx +48 -0
  152. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  153. package/src/components/Modal/Modal.stories.mdx +20 -5
  154. package/src/components/Modal/Modal.tsx +2 -8
  155. package/src/components/Notification/Notification.stories.mdx +128 -38
  156. package/src/components/Notification/Notification.test.tsx +49 -1
  157. package/src/components/Notification/Notification.tsx +25 -12
  158. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
  159. package/src/components/Pagination/Pagination.stories.mdx +18 -7
  160. package/src/components/Pagination/Pagination.tsx +3 -3
  161. package/src/components/Placeholder/Placeholder.tsx +7 -14
  162. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
  163. package/src/components/Radio/Radio.stories.mdx +39 -19
  164. package/src/components/Radio/Radio.tsx +13 -9
  165. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
  166. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  167. package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
  168. package/src/components/RadioGroup/RadioGroup.tsx +97 -94
  169. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
  170. package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
  171. package/src/components/SearchBar/SearchBar.stories.mdx +115 -33
  172. package/src/components/SearchBar/SearchBar.tsx +72 -51
  173. package/src/components/Select/Select.stories.mdx +48 -14
  174. package/src/components/Select/Select.test.tsx +89 -0
  175. package/src/components/Select/Select.tsx +27 -12
  176. package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
  177. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  178. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  179. package/src/components/Slider/Slider.stories.mdx +72 -22
  180. package/src/components/Slider/Slider.tsx +15 -10
  181. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
  182. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  183. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  184. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  185. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  186. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  187. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  188. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  189. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  190. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  191. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  192. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  193. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  194. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  195. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  196. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  197. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  198. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  199. package/src/components/Table/Table.stories.mdx +165 -0
  200. package/src/components/Table/Table.test.tsx +137 -0
  201. package/src/components/Table/Table.tsx +126 -0
  202. package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
  203. package/src/components/Tabs/Tabs.stories.mdx +20 -14
  204. package/src/components/Tabs/Tabs.test.tsx +21 -5
  205. package/src/components/Tabs/Tabs.tsx +35 -20
  206. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
  207. package/src/components/Template/Template.stories.mdx +132 -48
  208. package/src/components/Template/Template.test.tsx +128 -6
  209. package/src/components/Template/Template.tsx +93 -13
  210. package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
  211. package/src/components/Text/Text.stories.mdx +33 -11
  212. package/src/components/Text/Text.tsx +2 -2
  213. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  214. package/src/components/TextInput/TextInput.test.tsx +96 -0
  215. package/src/components/TextInput/TextInput.tsx +12 -8
  216. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  217. package/src/components/Toggle/Toggle.stories.mdx +33 -9
  218. package/src/components/Toggle/Toggle.tsx +14 -9
  219. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +4 -4
  220. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
  221. package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
  222. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
  223. package/src/docs/Chakra.stories.mdx +5 -8
  224. package/src/docs/Intro.stories.mdx +2 -2
  225. package/src/index.ts +13 -6
  226. package/src/styles/base/_03-base.scss +1 -1
  227. package/src/styles/base/_place-holder.scss +7 -7
  228. package/src/styles.scss +1 -5
  229. package/src/theme/components/breadcrumb.ts +4 -4
  230. package/src/theme/components/button.ts +5 -12
  231. package/src/theme/components/card.ts +5 -2
  232. package/src/theme/components/checkbox.ts +1 -1
  233. package/src/theme/components/customTable.ts +63 -0
  234. package/src/theme/components/datePicker.ts +1 -1
  235. package/src/theme/components/global.ts +7 -7
  236. package/src/theme/components/heading.ts +13 -11
  237. package/src/theme/components/helperErrorText.ts +1 -1
  238. package/src/theme/components/image.ts +1 -1
  239. package/src/theme/components/link.ts +17 -5
  240. package/src/theme/components/list.ts +3 -5
  241. package/src/theme/components/logo.ts +54 -0
  242. package/src/theme/components/notification.ts +19 -9
  243. package/src/theme/components/searchBar.ts +11 -13
  244. package/src/theme/components/select.ts +1 -0
  245. package/src/theme/components/statusBadge.ts +1 -1
  246. package/src/theme/components/structuredContent.ts +74 -0
  247. package/src/theme/components/template.ts +10 -10
  248. package/src/theme/components/text.ts +6 -6
  249. package/src/theme/components/textInput.ts +2 -0
  250. package/src/theme/components/toggle.ts +10 -6
  251. package/src/theme/components/videoPlayer.ts +0 -2
  252. package/src/theme/foundations/global.ts +2 -2
  253. package/src/theme/foundations/typography.ts +84 -12
  254. package/src/theme/index.ts +6 -0
  255. package/src/utils/componentCategories.ts +2 -1
  256. package/src/utils/utils.ts +17 -0
  257. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  258. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  259. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  260. package/dist/components/Input/Input.d.ts +0 -36
  261. package/dist/components/Input/Input.stories.d.ts +0 -29
  262. package/dist/components/Input/InputTypes.d.ts +0 -6
  263. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  264. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  265. package/dist/helpers/getCSSVariable.d.ts +0 -1
  266. package/dist/interfaces.d.ts +0 -3
  267. package/dist/utils/bem.d.ts +0 -1
  268. package/src/__tests__/utils/bem.test.ts +0 -37
  269. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  270. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  271. package/src/components/CardEdition/CardEdition.tsx +0 -60
  272. package/src/components/CardEdition/_CardEdition.scss +0 -137
  273. package/src/components/Input/Input.stories.tsx +0 -133
  274. package/src/components/Input/Input.test.tsx +0 -266
  275. package/src/components/Input/Input.tsx +0 -81
  276. package/src/components/Input/InputTypes.tsx +0 -8
  277. package/src/components/Input/_Input.scss +0 -78
  278. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  279. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  280. package/src/helpers/getCSSVariable.tsx +0 -5
  281. package/src/interfaces.ts +0 -3
  282. 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,12 +91,13 @@ 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,
87
98
  textInputProps,
88
99
  } = props;
89
- const styles = useMultiStyleConfig("SearchBar", { hasSelect: selectProps });
100
+ const styles = useMultiStyleConfig("SearchBar", {});
90
101
  const stateProps = {
91
102
  helperText: "",
92
103
  isDisabled,
@@ -95,19 +106,28 @@ 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
+ additionalStyles={styles.select}
127
+ id={`searchbar-select-${id}`}
110
128
  labelText={selectProps?.labelText}
129
+ name={selectProps?.name}
130
+ onChange={selectProps?.onChange}
111
131
  type={SelectTypes.SearchBar}
112
132
  {...stateProps}
113
133
  >
@@ -121,11 +141,11 @@ export default function SearchBar(props: SearchBarProps) {
121
141
  // Render the `TextInput` component.
122
142
  const textInputNative = textInputProps && (
123
143
  <TextInput
124
- id={generateUUID()}
144
+ id={`searchbar-textinput-${id}`}
125
145
  labelText={textInputProps?.labelText}
126
- placeholder={textInputPlaceholder}
127
- onChange={textInputProps?.onChange}
128
146
  name={textInputProps?.name}
147
+ onChange={textInputProps?.onChange}
148
+ placeholder={textInputPlaceholder}
129
149
  type={TextInputTypes.text}
130
150
  variantType={
131
151
  selectElem
@@ -139,49 +159,50 @@ export default function SearchBar(props: SearchBarProps) {
139
159
  // Render the `Button` component.
140
160
  const buttonElem = (
141
161
  <Button
142
- id={generateUUID()}
143
- buttonType={ButtonTypes.SearchBar}
144
- type="submit"
145
- onClick={buttonOnClick}
162
+ additionalStyles={searchBarButtonStyles}
163
+ buttonType={buttonType}
164
+ id={`searchbar-button-${id}`}
146
165
  isDisabled={isDisabled}
166
+ onClick={buttonOnClick}
167
+ type="submit"
147
168
  >
148
169
  <Icon
170
+ align={IconAlign.Left}
171
+ id={`searchbar-icon-${id}`}
149
172
  name={IconNames.Search}
150
173
  size={IconSizes.Small}
151
- align={IconAlign.Left}
152
174
  />
153
175
  Search
154
176
  </Button>
155
177
  );
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.
178
+ // If a custom input element was passed, use that element
179
+ // instead of the DS `TextInput` component.
164
180
  const textInputElem = textInputElement || textInputNative;
165
181
 
166
182
  return (
167
- <Box
168
- as="form"
183
+ <ComponentWrapper
184
+ descriptionText={descriptionText}
185
+ headingText={headingText}
186
+ helperText={helperText}
169
187
  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}
188
+ invalidText={invalidText}
189
+ isInvalid={isInvalid}
178
190
  >
179
- <Box __css={styles.topRow}>
191
+ <Box
192
+ as="form"
193
+ id={`searchbar-form-${id}`}
194
+ className={className}
195
+ role="search"
196
+ aria-label={finalAriaLabel}
197
+ onSubmit={onSubmit}
198
+ method={method}
199
+ action={action}
200
+ __css={styles}
201
+ >
180
202
  {selectElem}
181
203
  {textInputElem}
182
204
  {buttonElem}
183
205
  </Box>
184
- {helperErrorTextElem}
185
- </Box>
206
+ </ComponentWrapper>
186
207
  );
187
208
  }
@@ -1,18 +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 Select from "./Select";
12
- import Form from "../Form/Form";
13
11
  import Button from "../Button/Button";
12
+ import Form from "../Form/Form";
13
+ import Select from "./Select";
14
+ import { SelectTypes } from "./SelectTypes";
14
15
  import { getCategory } from "../../utils/componentCategories";
15
16
  import DSProvider from "../../theme/provider";
17
+ import { getStorybookEnumValues } from "../../utils/utils";
18
+
19
+ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
16
20
 
17
21
  <Meta
18
22
  title={getCategory("Select")}
@@ -27,10 +31,34 @@ import DSProvider from "../../theme/provider";
27
31
  }}
28
32
  argTypes={{
29
33
  children: { table: { disable: true } },
30
- id: { table: { disable: true } },
31
- name: { table: { disable: true } },
32
- onChange: { table: { disable: true } },
33
- 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 },
34
62
  }}
35
63
  />
36
64
 
@@ -39,7 +67,7 @@ import DSProvider from "../../theme/provider";
39
67
  | Component Version | DS Version |
40
68
  | ----------------- | ---------- |
41
69
  | Added | `0.7.0` |
42
- | Latest | `0.25.8` |
70
+ | Latest | `0.25.11` |
43
71
 
44
72
  <Description of={Select} />
45
73
 
@@ -64,17 +92,23 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
64
92
 
65
93
  <Canvas withToolbar>
66
94
  <Story
67
- name="Select"
95
+ name="Select with Controls"
68
96
  args={{
97
+ className: undefined,
69
98
  helperText: "This is the helper text.",
99
+ id: "select-id",
70
100
  invalidText: "This is the error text :(",
71
101
  isDisabled: false,
72
102
  isInvalid: false,
73
103
  isRequired: false,
74
104
  labelText: "What is your favorite color?",
75
105
  name: "color",
106
+ onChange: undefined,
107
+ showHelperInvalidText: undefined,
76
108
  showLabel: true,
77
109
  showOptReqLabel: true,
110
+ type: SelectTypes.Default,
111
+ value: undefined,
78
112
  }}
79
113
  >
80
114
  {(args) => (
@@ -89,7 +123,7 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
89
123
  </Story>
90
124
  </Canvas>
91
125
 
92
- <ArgsTable story="Select" />
126
+ <ArgsTable story="Select with Controls" />
93
127
 
94
128
  ## Labelling Variations
95
129
 
@@ -1,6 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { render, screen, fireEvent } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
+ import renderer from "react-test-renderer";
4
5
 
5
6
  import Select from "./Select";
6
7
 
@@ -255,4 +256,92 @@ describe("Select", () => {
255
256
  "NYPL DS recommends that <select> fields have no more than 10 options; an auto-complete text input is a good alternative for 11 or more options."
256
257
  );
257
258
  });
259
+
260
+ it("Renders the UI snapshot correctly", () => {
261
+ const siblings = ["Kendall", "Shiv", "Connor", "Roman", "Tom"];
262
+
263
+ const options = siblings.map((sibling) => (
264
+ <option key={sibling}>{sibling}</option>
265
+ ));
266
+
267
+ const primary = renderer
268
+ .create(
269
+ <Select
270
+ id="select"
271
+ labelText="Which Succession sibling are you?"
272
+ name="succession-sibling"
273
+ >
274
+ {options}
275
+ </Select>
276
+ )
277
+ .toJSON();
278
+ const disabled = renderer
279
+ .create(
280
+ <Select
281
+ id="select"
282
+ isDisabled
283
+ labelText="Which Succession sibling are you?"
284
+ name="succession-sibling"
285
+ >
286
+ {options}
287
+ </Select>
288
+ )
289
+ .toJSON();
290
+ const withInvalidText = renderer
291
+ .create(
292
+ <Select
293
+ id="select"
294
+ invalidText="Tom doesn't count as a sibling :(."
295
+ isInvalid
296
+ labelText="Which Succession sibling are you?"
297
+ name="succession-sibling"
298
+ >
299
+ {options}
300
+ </Select>
301
+ )
302
+ .toJSON();
303
+ const withHelperText = renderer
304
+ .create(
305
+ <Select
306
+ helperText="Remember, Logan will judge you no matter who you pick."
307
+ id="select"
308
+ labelText="Which Succession sibling are you?"
309
+ name="succession-sibling"
310
+ >
311
+ {options}
312
+ </Select>
313
+ )
314
+ .toJSON();
315
+ const required = renderer
316
+ .create(
317
+ <Select
318
+ id="select"
319
+ isRequired
320
+ labelText="Which Succession sibling are you?"
321
+ name="succession-sibling"
322
+ >
323
+ {options}
324
+ </Select>
325
+ )
326
+ .toJSON();
327
+ const hasOnChange = renderer
328
+ .create(
329
+ <Select
330
+ id="select"
331
+ labelText="Which Succession sibling are you?"
332
+ name="succession-sibling"
333
+ onChange={jest.fn()}
334
+ >
335
+ {options}
336
+ </Select>
337
+ )
338
+ .toJSON();
339
+
340
+ expect(primary).toMatchSnapshot();
341
+ expect(disabled).toMatchSnapshot();
342
+ expect(withInvalidText).toMatchSnapshot();
343
+ expect(withHelperText).toMatchSnapshot();
344
+ expect(required).toMatchSnapshot();
345
+ expect(hasOnChange).toMatchSnapshot();
346
+ });
258
347
  });
@@ -5,23 +5,27 @@ import {
5
5
  useMultiStyleConfig,
6
6
  } from "@chakra-ui/react";
7
7
 
8
- import Label from "../Label/Label";
9
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
10
- import generateUUID from "../../helpers/generateUUID";
11
- import { IconNames, IconSizes } from "../Icons/IconTypes";
8
+ import HelperErrorText, {
9
+ HelperErrorTextType,
10
+ } from "../HelperErrorText/HelperErrorText";
12
11
  import Icon from "../Icons/Icon";
12
+ import { IconNames, IconSizes } from "../Icons/IconTypes";
13
+ import Label from "../Label/Label";
13
14
  import { SelectTypes } from "./SelectTypes";
15
+ import generateUUID from "../../helpers/generateUUID";
14
16
 
15
17
  export interface SelectProps {
18
+ /** Optionally pass in additional Chakra-based styles. */
19
+ additionalStyles?: { [key: string]: any };
16
20
  /** A class name for the `div` parent element. */
17
21
  className?: string;
18
22
  /** Optional string to populate the `HelperErrorText` for the standard state. */
19
- helperText?: string;
23
+ helperText?: HelperErrorTextType;
20
24
  /** ID that other components can cross reference for accessibility purposes */
21
25
  id?: string;
22
26
  /** Optional string to populate the `HelperErrorText` for the error state
23
27
  * when `isInvalid` is true. */
24
- invalidText?: string;
28
+ invalidText?: HelperErrorTextType;
25
29
  /** Adds the `disabled` and `aria-disabled` attributes to the select when true */
26
30
  isDisabled?: boolean;
27
31
  /** Adds the `aria-invalid` attribute to the select when true. This also makes
@@ -63,6 +67,7 @@ const Select = React.forwardRef<
63
67
  React.PropsWithChildren<SelectProps>
64
68
  >((props: React.PropsWithChildren<SelectProps>, ref?) => {
65
69
  const {
70
+ additionalStyles = {},
66
71
  children,
67
72
  className,
68
73
  helperText,
@@ -87,7 +92,9 @@ const Select = React.forwardRef<
87
92
  const finalInvalidText = invalidText
88
93
  ? invalidText
89
94
  : "There is an error related to this field.";
90
- const footnote = isInvalid ? finalInvalidText : helperText;
95
+ const footnote: HelperErrorTextType = isInvalid
96
+ ? finalInvalidText
97
+ : helperText;
91
98
  // To control the `Select` component, both `onChange` and `value`
92
99
  // must be passed.
93
100
  const controlledProps = onChange ? { onChange, value } : {};
@@ -112,7 +119,7 @@ const Select = React.forwardRef<
112
119
  }
113
120
 
114
121
  return (
115
- <Box className={className} __css={styles}>
122
+ <Box className={className} __css={{ ...styles, ...additionalStyles }}>
116
123
  {showLabel && (
117
124
  <Label
118
125
  id={`${id}-label`}
@@ -133,16 +140,24 @@ const Select = React.forwardRef<
133
140
  ref={ref}
134
141
  {...controlledProps}
135
142
  {...ariaAttributes}
136
- icon={<Icon name={IconNames.Arrow} size={IconSizes.Medium} />}
143
+ icon={
144
+ <Icon
145
+ id={`${id}-icon`}
146
+ name={IconNames.Arrow}
147
+ size={IconSizes.Medium}
148
+ />
149
+ }
137
150
  __css={styles.select}
138
151
  >
139
152
  {children}
140
153
  </ChakraSelect>
141
154
  {footnote && showHelperInvalidText && (
142
155
  <Box __css={styles.helper} aria-disabled={isDisabled}>
143
- <HelperErrorText isInvalid={isInvalid} id={id + `-helperText`}>
144
- {footnote}
145
- </HelperErrorText>
156
+ <HelperErrorText
157
+ id={`${id}-helperText`}
158
+ isInvalid={isInvalid}
159
+ text={footnote}
160
+ />
146
161
  </Box>
147
162
  )}
148
163
  </Box>