@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
@@ -4,7 +4,7 @@ import { axe } from "jest-axe";
4
4
  import userEvent from "@testing-library/user-event";
5
5
  import renderer from "react-test-renderer";
6
6
 
7
- import SearchBar from "./SearchBar";
7
+ import SearchBar, { SelectProps, TextInputProps } from "./SearchBar";
8
8
 
9
9
  const optionsGroup = [
10
10
  "Art",
@@ -18,27 +18,42 @@ const optionsGroup = [
18
18
  "Tools",
19
19
  "Villagers",
20
20
  ];
21
- const selectProps = {
21
+ const selectProps: SelectProps = {
22
22
  name: "selectName",
23
23
  labelText: "Select a category",
24
24
  optionsData: optionsGroup,
25
25
  };
26
- const textInputProps = {
26
+ const textInputProps: TextInputProps = {
27
27
  labelText: "Item Search",
28
28
  name: "textInputName",
29
29
  placeholder: "Item Search",
30
30
  };
31
- const helperErrorText = "Search for items in Animal Crossing New Horizons";
31
+ const labelText = "SearchBar label";
32
+ const helperText = "Search for items in Animal Crossing New Horizons";
32
33
  const invalidText = "Could not find the item :(";
33
34
 
34
35
  describe("SearchBar Accessibility", () => {
35
36
  it("passes axe accessibility test", async () => {
36
37
  const { container } = render(
37
38
  <SearchBar
38
- helperErrorText={helperErrorText}
39
+ helperText={helperText}
39
40
  id="id"
40
41
  invalidText={invalidText}
41
- labelText="Searchbar"
42
+ labelText={labelText}
43
+ onSubmit={jest.fn()}
44
+ textInputProps={textInputProps}
45
+ />
46
+ );
47
+ expect(await axe(container)).toHaveNoViolations();
48
+ });
49
+
50
+ it("passes axe accessibility test with a Select component", async () => {
51
+ const { container } = render(
52
+ <SearchBar
53
+ helperText={helperText}
54
+ id="id"
55
+ invalidText={invalidText}
56
+ labelText={labelText}
42
57
  onSubmit={jest.fn()}
43
58
  selectProps={selectProps}
44
59
  textInputProps={textInputProps}
@@ -52,12 +67,16 @@ describe("SearchBar", () => {
52
67
  const searchBarSubmit = jest.fn();
53
68
  const buttonCallback = jest.fn();
54
69
 
70
+ beforeEach(() => {
71
+ jest.clearAllMocks();
72
+ });
73
+
55
74
  it("renders the basic form", () => {
56
75
  render(
57
76
  <SearchBar
58
- helperErrorText={helperErrorText}
77
+ helperText={helperText}
59
78
  id="id"
60
- labelText="searchbar"
79
+ labelText={labelText}
61
80
  onSubmit={searchBarSubmit}
62
81
  textInputProps={textInputProps}
63
82
  />
@@ -65,7 +84,7 @@ describe("SearchBar", () => {
65
84
  expect(screen.getByRole("search")).toBeInTheDocument();
66
85
  expect(screen.getByRole("search")).toHaveAttribute(
67
86
  "aria-label",
68
- "searchbar"
87
+ `${labelText} - ${helperText}`
69
88
  );
70
89
  expect(screen.getByPlaceholderText("Item Search")).toBeInTheDocument();
71
90
  expect(screen.getByRole("button")).toBeInTheDocument();
@@ -74,9 +93,9 @@ describe("SearchBar", () => {
74
93
  it("renders an optional Select component", () => {
75
94
  render(
76
95
  <SearchBar
77
- helperErrorText={helperErrorText}
96
+ helperText={helperText}
78
97
  id="id"
79
- labelText="searchbar"
98
+ labelText={labelText}
80
99
  onSubmit={searchBarSubmit}
81
100
  selectProps={selectProps}
82
101
  textInputProps={textInputProps}
@@ -89,28 +108,28 @@ describe("SearchBar", () => {
89
108
  it("renders the invalid text in the invalid state", () => {
90
109
  render(
91
110
  <SearchBar
92
- helperErrorText={helperErrorText}
111
+ helperText={helperText}
93
112
  id="id"
94
113
  invalidText={invalidText}
95
114
  isInvalid
96
- labelText="searchbar"
115
+ labelText={labelText}
97
116
  onSubmit={searchBarSubmit}
98
117
  selectProps={selectProps}
99
118
  textInputProps={textInputProps}
100
119
  />
101
120
  );
102
121
  expect(screen.getByText(invalidText)).toBeInTheDocument();
103
- expect(screen.queryByText(helperErrorText)).not.toBeInTheDocument();
122
+ expect(screen.queryByText(helperText)).not.toBeInTheDocument();
104
123
  });
105
124
 
106
125
  it("does not render the default invalid text from the Select or TextInput components", () => {
107
126
  render(
108
127
  <SearchBar
109
- helperErrorText={helperErrorText}
128
+ helperText={helperText}
110
129
  id="id"
111
130
  invalidText={invalidText}
112
131
  isInvalid
113
- labelText="searchbar"
132
+ labelText={labelText}
114
133
  onSubmit={searchBarSubmit}
115
134
  selectProps={selectProps}
116
135
  textInputProps={textInputProps}
@@ -121,38 +140,96 @@ describe("SearchBar", () => {
121
140
  ).not.toBeInTheDocument();
122
141
  });
123
142
 
143
+ it("calls the TextInput onChange callback function", () => {
144
+ textInputProps.onChange = jest.fn();
145
+
146
+ render(
147
+ <SearchBar
148
+ helperText={helperText}
149
+ id="id"
150
+ labelText={labelText}
151
+ onSubmit={searchBarSubmit}
152
+ textInputProps={textInputProps}
153
+ />
154
+ );
155
+ const input = screen.getByLabelText(textInputProps.labelText);
156
+ expect(textInputProps.onChange).toHaveBeenCalledTimes(0);
157
+
158
+ userEvent.type(input, "search!");
159
+
160
+ // Seven times for every letter in the search string
161
+ expect(textInputProps.onChange).toHaveBeenCalledTimes(7);
162
+ });
163
+
164
+ it("calls the Select onChange callback function", () => {
165
+ selectProps.onChange = jest.fn();
166
+
167
+ render(
168
+ <SearchBar
169
+ helperText={helperText}
170
+ id="id"
171
+ labelText={labelText}
172
+ onSubmit={searchBarSubmit}
173
+ selectProps={selectProps}
174
+ textInputProps={textInputProps}
175
+ />
176
+ );
177
+ const select = screen.getByLabelText(selectProps.labelText);
178
+ expect(selectProps.onChange).toHaveBeenCalledTimes(0);
179
+
180
+ userEvent.selectOptions(select, "Flowers");
181
+ expect(selectProps.onChange).toHaveBeenCalledTimes(1);
182
+
183
+ userEvent.selectOptions(select, "Furniture");
184
+ expect(selectProps.onChange).toHaveBeenCalledTimes(2);
185
+ });
186
+
187
+ it("calls the callback function for the Button component ", () => {
188
+ render(
189
+ <SearchBar
190
+ buttonOnClick={buttonCallback}
191
+ helperText={helperText}
192
+ id="id"
193
+ labelText={labelText}
194
+ onSubmit={searchBarSubmit}
195
+ selectProps={selectProps}
196
+ textInputProps={textInputProps}
197
+ />
198
+ );
199
+ expect(buttonCallback).toHaveBeenCalledTimes(0);
200
+ userEvent.click(screen.getByRole("button"));
201
+ expect(buttonCallback).toHaveBeenCalledTimes(1);
202
+ });
203
+
124
204
  it("calls the callback function on submit ", () => {
125
205
  render(
126
206
  <SearchBar
127
- helperErrorText={helperErrorText}
207
+ helperText={helperText}
128
208
  id="id"
129
- labelText="searchBar"
209
+ labelText={labelText}
130
210
  onSubmit={searchBarSubmit}
131
211
  selectProps={selectProps}
132
212
  textInputProps={textInputProps}
133
213
  />
134
214
  );
135
215
  expect(searchBarSubmit).toHaveBeenCalledTimes(0);
136
- expect(buttonCallback).toHaveBeenCalledTimes(0);
137
216
  userEvent.click(screen.getByRole("button"));
138
217
  expect(searchBarSubmit).toHaveBeenCalledTimes(1);
139
- expect(buttonCallback).toHaveBeenCalledTimes(1);
140
218
  });
141
219
 
142
- it("Renders 'required' in the placeholder text", () => {
220
+ it("renders 'required' in the placeholder text", () => {
143
221
  const { rerender } = render(
144
222
  <SearchBar
145
223
  id="requiredState"
146
224
  isDisabled
147
- isRequired
148
- labelText="searchbar"
225
+ labelText={labelText}
149
226
  onSubmit={jest.fn()}
150
227
  textInputProps={textInputProps}
151
228
  />
152
229
  );
153
230
 
154
231
  expect(
155
- screen.getByPlaceholderText("Item Search (Required)")
232
+ screen.queryByPlaceholderText("Item Search (Required)")
156
233
  ).not.toBeInTheDocument();
157
234
 
158
235
  rerender(
@@ -160,7 +237,7 @@ describe("SearchBar", () => {
160
237
  id="requiredState"
161
238
  isDisabled
162
239
  isRequired
163
- labelText="searchbar"
240
+ labelText={labelText}
164
241
  onSubmit={jest.fn()}
165
242
  textInputProps={textInputProps}
166
243
  />
@@ -170,13 +247,14 @@ describe("SearchBar", () => {
170
247
  ).toBeInTheDocument();
171
248
  });
172
249
 
173
- it("Renders the UI snapshot correctly", () => {
250
+ // TODO: Fix the `Select` component before enabling this test
251
+ it.skip("renders the UI snapshot correctly", () => {
174
252
  const basic = renderer
175
253
  .create(
176
254
  <SearchBar
177
- helperErrorText={helperErrorText}
255
+ helperText={helperText}
178
256
  id="basic"
179
- labelText="searchbar"
257
+ labelText={labelText}
180
258
  onSubmit={jest.fn()}
181
259
  textInputProps={textInputProps}
182
260
  />
@@ -185,9 +263,9 @@ describe("SearchBar", () => {
185
263
  const withSelect = renderer
186
264
  .create(
187
265
  <SearchBar
188
- helperErrorText={helperErrorText}
266
+ helperText={helperText}
189
267
  id="withSelect"
190
- labelText="searchbar"
268
+ labelText={labelText}
191
269
  onSubmit={jest.fn()}
192
270
  selectProps={selectProps}
193
271
  textInputProps={textInputProps}
@@ -198,7 +276,7 @@ describe("SearchBar", () => {
198
276
  .create(
199
277
  <SearchBar
200
278
  id="withoutHelperText"
201
- labelText="searchbar"
279
+ labelText={labelText}
202
280
  onSubmit={jest.fn()}
203
281
  textInputProps={textInputProps}
204
282
  />
@@ -209,7 +287,7 @@ describe("SearchBar", () => {
209
287
  <SearchBar
210
288
  id="invalidState"
211
289
  isInvalid
212
- labelText="searchbar"
290
+ labelText={labelText}
213
291
  onSubmit={jest.fn()}
214
292
  textInputProps={textInputProps}
215
293
  />
@@ -220,7 +298,7 @@ describe("SearchBar", () => {
220
298
  <SearchBar
221
299
  id="disabledState"
222
300
  isDisabled
223
- labelText="searchbar"
301
+ labelText={labelText}
224
302
  onSubmit={jest.fn()}
225
303
  textInputProps={textInputProps}
226
304
  />
@@ -232,12 +310,56 @@ describe("SearchBar", () => {
232
310
  id="requiredState"
233
311
  isDisabled
234
312
  isRequired
235
- labelText="searchbar"
313
+ labelText={labelText}
236
314
  onSubmit={jest.fn()}
237
315
  textInputProps={textInputProps}
238
316
  />
239
317
  )
240
318
  .toJSON();
319
+ const noBrandButtonType = renderer
320
+ .create(
321
+ <SearchBar
322
+ id="noBrandButtonType"
323
+ isDisabled
324
+ isRequired
325
+ labelText={labelText}
326
+ noBrandButtonType={true}
327
+ onSubmit={jest.fn()}
328
+ textInputProps={textInputProps}
329
+ />
330
+ )
331
+ .toJSON();
332
+ const withHeading = renderer
333
+ .create(
334
+ <SearchBar
335
+ id="withHeading"
336
+ labelText={labelText}
337
+ onSubmit={jest.fn()}
338
+ headingText="A Heading"
339
+ />
340
+ )
341
+ .toJSON();
342
+ const withDescription = renderer
343
+ .create(
344
+ <SearchBar
345
+ id="withDescription"
346
+ labelText={labelText}
347
+ onSubmit={jest.fn()}
348
+ descriptionText="A description"
349
+ />
350
+ )
351
+ .toJSON();
352
+ const withHeadingAndDescription = renderer
353
+ .create(
354
+ <SearchBar
355
+ id="withHeadingAndDescription"
356
+ labelText={labelText}
357
+ onSubmit={jest.fn()}
358
+ headingText="A Heading"
359
+ descriptionText="A description"
360
+ />
361
+ )
362
+ .toJSON();
241
363
 
242
364
  expect(basic).toMatchSnapshot();
243
365
  expect(withSelect).toMatchSnapshot();
@@ -245,5 +367,9 @@ describe("SearchBar", () => {
245
367
  expect(invalidState).toMatchSnapshot();
246
368
  expect(disabledState).toMatchSnapshot();
247
369
  expect(requiredState).toMatchSnapshot();
370
+ expect(noBrandButtonType).toMatchSnapshot();
371
+ expect(withHeading).toMatchSnapshot();
372
+ expect(withDescription).toMatchSnapshot();
373
+ expect(withHeadingAndDescription).toMatchSnapshot();
248
374
  });
249
375
  });
@@ -1,10 +1,10 @@
1
1
  import {
2
- Meta,
3
- Story,
4
2
  ArgsTable,
5
3
  Canvas,
6
4
  Description,
7
- } from "@storybook/addon-docs/blocks";
5
+ Meta,
6
+ Story,
7
+ } from "@storybook/addon-docs";
8
8
  import { withDesign } from "storybook-addon-designs";
9
9
 
10
10
  import SearchBar from "./SearchBar";
@@ -24,16 +24,34 @@ import DSProvider from "../../theme/provider";
24
24
  jest: ["SearchBar.test.tsx"],
25
25
  }}
26
26
  argTypes={{
27
- action: { table: { disable: true } },
28
- ariaLabel: { table: { disable: true } },
29
- buttonOnClick: { table: { disable: true } },
30
- className: { table: { disable: true } },
31
- id: { table: { disable: true } },
32
- method: { table: { disable: true } },
33
- onSubmit: { table: { disable: true } },
34
- selectProps: { table: { disable: true } },
35
- textInputProps: { table: { disable: true } },
36
- textInputElement: { table: { disable: true } },
27
+ action: { control: false },
28
+ ariaLabel: { control: false },
29
+ buttonOnClick: {
30
+ control: false,
31
+ table: { defaultValue: { summary: "null" } },
32
+ },
33
+ className: { control: false },
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
+ method: { control: false },
45
+ onSubmit: { control: false },
46
+ selectProps: { control: false },
47
+ showHelperText: {
48
+ description: "Only used for Storybook",
49
+ },
50
+ showSelect: {
51
+ description: "Only used for Storybook",
52
+ },
53
+ textInputElement: { control: false },
54
+ textInputProps: { control: false },
37
55
  }}
38
56
  />
39
57
 
@@ -42,7 +60,7 @@ import DSProvider from "../../theme/provider";
42
60
  | Component Version | DS Version |
43
61
  | ----------------- | ---------- |
44
62
  | Added | `0.0.4` |
45
- | Latest | `0.25.6` |
63
+ | Latest | `0.25.10` |
46
64
 
47
65
  <Description of={SearchBar} />
48
66
 
@@ -73,20 +91,30 @@ export const optionsGroup = [
73
91
 
74
92
  <Canvas withToolbar>
75
93
  <Story
76
- name="Basic"
94
+ name="SearchBar with Controls"
77
95
  args={{
78
- helperErrorText: "Search for items in Animal Crossing New Horizons",
96
+ action: undefined,
97
+ buttonOnClick: undefined,
98
+ className: undefined,
99
+ helperText: "Search for items in Animal Crossing New Horizons",
100
+ id: "searchBar-id",
79
101
  invalidText: "Could not find the item :(",
80
102
  isDisabled: false,
81
103
  isInvalid: false,
82
104
  isRequired: false,
105
+ labelText: "SearchBar Label",
106
+ method: undefined,
107
+ noBrandButtonType: false,
108
+ onSubmit: () => {},
109
+ selectProps: undefined,
83
110
  showHelperText: true,
84
111
  showSelect: true,
112
+ textInputElement: undefined,
113
+ textInputProps: undefined,
85
114
  }}
86
115
  >
87
116
  {(args) => (
88
117
  <SearchBar
89
- onSubmit={() => {}}
90
118
  {...args}
91
119
  selectProps={
92
120
  args.showSelect && {
@@ -100,13 +128,13 @@ export const optionsGroup = [
100
128
  name: "textInputName",
101
129
  placeholder: "Item Search",
102
130
  }}
103
- helperErrorText={args.showHelperText && args.helperErrorText}
131
+ helperText={args.showHelperText && args.helperText}
104
132
  />
105
133
  )}
106
134
  </Story>
107
135
  </Canvas>
108
136
 
109
- <ArgsTable story="Basic" />
137
+ <ArgsTable story="SearchBar with Controls" />
110
138
 
111
139
  ## Component Props
112
140
 
@@ -114,14 +142,17 @@ export const optionsGroup = [
114
142
 
115
143
  To render an optional `Select` component, an object must be passed to the
116
144
  `selectProps` prop. It _must_ include `name`, `labelText`, and `optionsData`
117
- properties. The `labelText` value won't be rendered but will be used for its
118
- `aria-label` attribute.
145
+ properties. The `onChange` property is optional. The `labelText` value won't be
146
+ rendered but will be used for its `aria-label` attribute.
119
147
 
120
148
  ```
121
149
  const selectProps = {
122
150
  name: "select-form-name",
123
151
  labelText: "Select a category",
124
152
  optionsData: optionsGroup,
153
+ onChange: (event) => {
154
+ console.log(event.target.value);
155
+ },
125
156
  };
126
157
 
127
158
  // ...
@@ -137,7 +168,7 @@ const selectProps = {
137
168
  To render the `TextInput` component, an object must be passed to the
138
169
  `textInputProps` prop. It _must_ include `labelText`, `name`, and `placeholder`
139
170
  properties. The `labelText` value won't be rendered but will be used for its
140
- `aria-label` attribute. Optional values to pass include `onChange` and `value`.
171
+ `aria-label` attribute. Optional properties to pass include `onChange` and `value`.
141
172
 
142
173
  ```
143
174
  const textInputProps = {
@@ -181,23 +212,54 @@ A `Button` component will automatically be rendered for the `SearchBar`
181
212
  component. If you want to pass a callback function to the `Button`, use the
182
213
  `buttonOnClick` prop.
183
214
 
215
+ It's also possible to render the `ButtonType.NoBrand` variant style when the
216
+ `noBrandButtonType` prop is set to `true`. The `ButtonType.Primary` variant
217
+ style is used by default.
218
+
184
219
  ### HelperErrorText Component
185
220
 
186
- To render the `HelperErrorText` component, pass a string value to the
187
- `helperErrorText` prop. For the invalid state when `isInvalid` is true, pass the
188
- error string in the `invalidText` prop.
221
+ To render the `HelperErrorText` component, pass a string or HTML to the
222
+ `helperText` prop. For the invalid state when `isInvalid` is true, pass the
223
+ error string or HTML in the `invalidText` prop.
189
224
 
190
225
  ```
191
- const helperErrorText = "";
226
+ const helperText = "";
192
227
 
193
228
  // ...
194
229
  <SearchBar
195
230
  onSubmit={() => {}}
196
- helperErrorText="Search for items in Animal Crossing New Horizons"
231
+ helperText="Search for items in <b>Animal Crossing New Horizons</b>."
197
232
  // ...
198
233
  />
199
234
  ```
200
235
 
236
+ <Canvas>
237
+ <DSProvider>
238
+ <SearchBar
239
+ descriptionText="The helper text below contains HTML in a string."
240
+ helperText="Search for items in <b>Animal Crossing New Horizons</b>."
241
+ onSubmit={() => {}}
242
+ textInputProps={{
243
+ labelText: "Item Search",
244
+ name: "textInputName",
245
+ placeholder: "Item Search",
246
+ }}
247
+ />
248
+ <br />
249
+ <SearchBar
250
+ descriptionText="The invalid text below contains HTML in a string."
251
+ isInvalid
252
+ invalidText="Could <b>not</b> find the item <b>:(</b>"
253
+ onSubmit={() => {}}
254
+ textInputProps={{
255
+ labelText: "Item Search",
256
+ name: "textInputName",
257
+ placeholder: "Item Search",
258
+ }}
259
+ />
260
+ </DSProvider>
261
+ </Canvas>
262
+
201
263
  ## Search Autocomplete
202
264
 
203
265
  While the Design System does not implement an `Autosuggest` or `Autocomplete`
@@ -225,7 +287,7 @@ precedence.
225
287
  <SearchBar
226
288
  onSubmit={() => {}}
227
289
  textInputElement={stories.SearchBarExample()}
228
- helperErrorText="Select your home library. Start by typing the name of the library. Try 'ba'."
290
+ helperText="Select your home library. Start by typing the name of the library. Try 'ba'."
229
291
  {...args}
230
292
  />
231
293
  </div>
@@ -253,7 +315,7 @@ handle the error state yourself.
253
315
  name: "textInputName",
254
316
  placeholder: "Item Search",
255
317
  }}
256
- helperErrorText="This is the helper text!"
318
+ helperText="This is the helper text!"
257
319
  invalidText="Could not find the item :("
258
320
  isInvalid
259
321
  />
@@ -269,18 +331,38 @@ handle the disabled state yourself.
269
331
  <Canvas>
270
332
  <DSProvider>
271
333
  <SearchBar
272
- obSubmit={() => {}}
334
+ onSubmit={() => {}}
273
335
  textInputProps={{
274
336
  labelText: "Item Search",
275
337
  name: "textInputName",
276
338
  placeholder: "Item Search",
277
339
  }}
278
- helperErrorText="Reason for disabled state."
340
+ helperText="Reason for disabled state."
279
341
  isDisabled
280
342
  />
281
343
  </DSProvider>
282
344
  </Canvas>
283
345
 
346
+ ### With Heading and Description Text
347
+
348
+ Use the `descriptionText` and `headingText` props to render a heading and
349
+ description above the main `SearchBar` form component.
350
+
351
+ <Canvas>
352
+ <DSProvider>
353
+ <SearchBar
354
+ descriptionText="This is the description for this `SearchBar` instance."
355
+ headingText="Heading for this `SearchBar`"
356
+ onSubmit={() => {}}
357
+ textInputProps={{
358
+ labelText: "Item Search",
359
+ name: "textInputName",
360
+ placeholder: "Item Search",
361
+ }}
362
+ />
363
+ </DSProvider>
364
+ </Canvas>
365
+
284
366
  ### TextInput and onSubmit Values
285
367
 
286
368
  _NOTE: open the browser console to see the values logged in the example below._
@@ -311,7 +393,7 @@ function SearchBarValueExample() {
311
393
  };
312
394
  const onSubmit = (event) => {
313
395
  event.preventDefault();
314
- console.log(`onSubmit Select value: ${event.target.searchName.value}`);
396
+ console.log(`onSubmit Select value: ${event.target.selectName.value}`);
315
397
  console.log(`onSubmit TextInput value ${event.target.textInputName.value}`);
316
398
  };
317
399
  return (
@@ -328,7 +410,7 @@ function SearchBarValueExample() {
328
410
  onChange: textInputOnChange,
329
411
  placeholder: "Item Search",
330
412
  }}
331
- helperErrorText="Search for an item"
413
+ helperText="Search for an item"
332
414
  invalidText="Could not find the item :("
333
415
  />
334
416
  );
@@ -358,7 +440,7 @@ export function SearchBarValueExample() {
358
440
  onChange: textInputOnChange,
359
441
  placeholder: "Item Search",
360
442
  }}
361
- helperErrorText="Search for an item"
443
+ helperText="Search for an item"
362
444
  invalidText="Could not find the item :("
363
445
  />
364
446
  );