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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/CHANGELOG.md +98 -1
  2. package/README.md +46 -11
  3. package/dist/components/Accordion/Accordion.d.ts +14 -14
  4. package/dist/components/Autosuggest/Autosuggest.stories.d.ts +1 -0
  5. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
  6. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  7. package/dist/components/Button/Button.d.ts +6 -13
  8. package/dist/components/Button/ButtonTypes.d.ts +5 -3
  9. package/dist/components/Card/Card.d.ts +59 -10
  10. package/dist/components/Card/CardTypes.d.ts +19 -0
  11. package/dist/components/CardEdition/CardEdition.d.ts +21 -0
  12. package/dist/components/{StyleGuide/Colors.stories.d.ts → CardEdition/CardEdition.stories.d.ts} +5 -2
  13. package/dist/components/Checkbox/Checkbox.d.ts +21 -16
  14. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
  15. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  16. package/dist/components/DatePicker/DatePicker.d.ts +79 -0
  17. package/dist/components/DatePicker/DatePickerTypes.d.ts +5 -0
  18. package/dist/components/Form/Form.d.ts +16 -8
  19. package/dist/components/Form/FormTypes.d.ts +2 -0
  20. package/dist/components/Grid/GridTypes.d.ts +9 -0
  21. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  22. package/dist/components/Heading/Heading.d.ts +9 -11
  23. package/dist/components/Heading/{HeadingDisplaySizes.d.ts → HeadingTypes.d.ts} +8 -0
  24. package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +2 -1
  25. package/dist/components/Hero/Hero.d.ts +19 -14
  26. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  27. package/dist/components/Icons/Icon.d.ts +13 -16
  28. package/dist/components/Icons/IconSvgs.d.ts +4 -0
  29. package/dist/components/Icons/IconTypes.d.ts +78 -60
  30. package/dist/components/Image/Image.stories.d.ts +2 -1
  31. package/dist/components/Label/Label.d.ts +10 -26
  32. package/dist/components/Link/Link.d.ts +8 -12
  33. package/dist/components/List/List.stories.d.ts +1 -0
  34. package/dist/components/Radio/Radio.d.ts +30 -24
  35. package/dist/components/RadioGroup/RadioGroup.d.ts +40 -0
  36. package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +4 -0
  37. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  38. package/dist/components/Select/Select.d.ts +34 -35
  39. package/dist/components/Select/SelectTypes.d.ts +4 -0
  40. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
  41. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  42. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  43. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  44. package/dist/components/Tabs/Tabs.d.ts +25 -0
  45. package/dist/components/Template/Template.d.ts +91 -0
  46. package/dist/components/Text/Text.d.ts +16 -0
  47. package/dist/components/Text/TextTypes.d.ts +6 -0
  48. package/dist/components/TextInput/TextInput.d.ts +37 -30
  49. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  50. package/dist/design-system-react-components.cjs.development.js +4102 -917
  51. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  52. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  53. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  54. package/dist/design-system-react-components.esm.js +4023 -920
  55. package/dist/design-system-react-components.esm.js.map +1 -1
  56. package/dist/index.d.ts +23 -5
  57. package/dist/resources.scss +133 -24
  58. package/dist/styles.css +1 -1
  59. package/dist/theme/components/accordion.d.ts +25 -0
  60. package/dist/theme/components/breadcrumb.d.ts +90 -0
  61. package/dist/theme/components/button.d.ts +109 -0
  62. package/dist/theme/components/checkbox.d.ts +91 -0
  63. package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
  64. package/dist/theme/components/customRadioGroup.d.ts +18 -0
  65. package/dist/theme/components/global.d.ts +55 -0
  66. package/dist/theme/components/globalMixins.d.ts +15 -0
  67. package/dist/theme/components/heading.d.ts +110 -0
  68. package/dist/theme/components/hero.d.ts +492 -0
  69. package/dist/theme/components/icon.d.ts +13 -0
  70. package/dist/theme/components/label.d.ts +16 -0
  71. package/dist/theme/components/link.d.ts +45 -0
  72. package/dist/theme/components/radio.d.ts +95 -0
  73. package/dist/theme/components/searchBar.d.ts +20 -0
  74. package/dist/theme/components/select.d.ts +58 -0
  75. package/dist/theme/components/statusBadge.d.ts +25 -0
  76. package/dist/theme/components/tabs.d.ts +85 -0
  77. package/dist/theme/components/template.d.ts +105 -0
  78. package/dist/theme/components/text.d.ts +20 -0
  79. package/dist/theme/components/textInput.d.ts +105 -0
  80. package/dist/theme/foundations/breakpoints.d.ts +23 -0
  81. package/dist/theme/foundations/colors.d.ts +3 -0
  82. package/dist/theme/foundations/global.d.ts +23 -0
  83. package/dist/theme/foundations/shadows.d.ts +4 -0
  84. package/dist/theme/foundations/spacing.d.ts +77 -0
  85. package/dist/theme/foundations/typography.d.ts +8 -0
  86. package/dist/theme/index.d.ts +20 -0
  87. package/dist/theme/provider.d.ts +5 -0
  88. package/dist/theme/types.d.ts +1 -0
  89. package/dist/utils/utils.d.ts +6 -0
  90. package/package.json +9 -2
  91. package/src/components/Accordion/Accordion.stories.mdx +233 -33
  92. package/src/components/Accordion/Accordion.test.tsx +135 -19
  93. package/src/components/Accordion/Accordion.tsx +81 -56
  94. package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
  95. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
  96. package/src/components/Autosuggest/_Autosuggest.scss +2 -2
  97. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +57 -56
  98. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
  99. package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
  100. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  101. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
  102. package/src/components/Button/Button.stories.mdx +125 -138
  103. package/src/components/Button/Button.test.tsx +65 -11
  104. package/src/components/Button/Button.tsx +72 -68
  105. package/src/components/Button/ButtonTypes.tsx +4 -2
  106. package/src/components/Button/_Button.scss +7 -92
  107. package/src/components/Button/__snapshots__/Button.test.tsx.snap +58 -3
  108. package/src/components/Card/Card.stories.mdx +694 -0
  109. package/src/components/Card/Card.test.tsx +97 -102
  110. package/src/components/Card/Card.tsx +182 -31
  111. package/src/components/Card/CardTypes.tsx +21 -0
  112. package/src/components/Card/_Card.scss +234 -49
  113. package/src/components/{Card/Card.stories.tsx → CardEdition/CardEdition.stories.tsx} +32 -22
  114. package/src/components/CardEdition/CardEdition.test.tsx +395 -0
  115. package/src/components/CardEdition/CardEdition.tsx +60 -0
  116. package/src/components/CardEdition/_CardEdition.scss +138 -0
  117. package/src/components/Chakra/Box.stories.mdx +57 -0
  118. package/src/components/Chakra/Center.stories.mdx +99 -0
  119. package/src/components/Chakra/Grid.stories.mdx +79 -0
  120. package/src/components/Chakra/Stack.stories.mdx +93 -0
  121. package/src/components/Checkbox/Checkbox.stories.mdx +57 -35
  122. package/src/components/Checkbox/Checkbox.test.tsx +117 -147
  123. package/src/components/Checkbox/Checkbox.tsx +76 -50
  124. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +325 -0
  125. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
  126. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
  127. package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
  128. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  129. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
  130. package/src/components/DatePicker/DatePicker.stories.mdx +284 -0
  131. package/src/components/DatePicker/DatePicker.test.tsx +657 -0
  132. package/src/components/DatePicker/DatePicker.tsx +396 -0
  133. package/src/components/DatePicker/DatePickerTypes.tsx +5 -0
  134. package/src/components/DatePicker/_DatePicker.scss +76 -0
  135. package/src/components/Form/Form.stories.mdx +130 -27
  136. package/src/components/Form/Form.test.tsx +78 -36
  137. package/src/components/Form/Form.tsx +53 -19
  138. package/src/components/Form/FormTypes.tsx +3 -0
  139. package/src/components/Form/__snapshots__/Form.test.tsx.snap +38 -0
  140. package/src/components/Grid/GridTypes.tsx +9 -0
  141. package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
  142. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  143. package/src/components/Grid/SimpleGrid.tsx +37 -0
  144. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  145. package/src/components/Heading/Heading.stories.mdx +63 -33
  146. package/src/components/Heading/Heading.test.tsx +24 -16
  147. package/src/components/Heading/Heading.tsx +54 -38
  148. package/src/components/Heading/{HeadingDisplaySizes.tsx → HeadingTypes.tsx} +9 -0
  149. package/src/components/HelperErrorText/HelperErrorText.stories.tsx +2 -1
  150. package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
  151. package/src/components/Hero/Hero.stories.mdx +195 -85
  152. package/src/components/Hero/Hero.test.tsx +544 -113
  153. package/src/components/Hero/Hero.tsx +80 -93
  154. package/src/components/Hero/HeroTypes.tsx +17 -5
  155. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  156. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +6 -1
  157. package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
  158. package/src/components/Icons/Icon.stories.mdx +89 -74
  159. package/src/components/Icons/Icon.test.tsx +30 -22
  160. package/src/components/Icons/Icon.tsx +63 -61
  161. package/src/components/Icons/IconSvgs.tsx +8 -0
  162. package/src/components/Icons/IconTypes.tsx +80 -60
  163. package/src/components/Image/Image.stories.tsx +2 -1
  164. package/src/components/Input/_Input.scss +2 -2
  165. package/src/components/Label/Label.stories.mdx +77 -0
  166. package/src/components/Label/Label.test.tsx +43 -12
  167. package/src/components/Label/Label.tsx +28 -45
  168. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  169. package/src/components/Link/Link.stories.mdx +47 -41
  170. package/src/components/Link/Link.test.tsx +33 -44
  171. package/src/components/Link/Link.tsx +114 -100
  172. package/src/components/List/List.stories.mdx +7 -3
  173. package/src/components/List/List.stories.tsx +14 -9
  174. package/src/components/List/List.test.tsx +12 -8
  175. package/src/components/List/List.tsx +9 -7
  176. package/src/components/List/_List.scss +3 -3
  177. package/src/components/Modal/Modal.stories.mdx +7 -3
  178. package/src/components/Modal/_Modal.scss +1 -1
  179. package/src/components/Notification/Notification.stories.mdx +99 -65
  180. package/src/components/Notification/Notification.test.tsx +3 -16
  181. package/src/components/Notification/Notification.tsx +12 -12
  182. package/src/components/Notification/_Notification.scss +5 -4
  183. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +1 -1
  184. package/src/components/Pagination/Pagination.stories.mdx +7 -1
  185. package/src/components/Pagination/Pagination.test.tsx +16 -10
  186. package/src/components/Radio/Radio.stories.mdx +57 -46
  187. package/src/components/Radio/Radio.test.tsx +92 -138
  188. package/src/components/Radio/Radio.tsx +70 -69
  189. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +250 -0
  190. package/src/components/RadioGroup/RadioGroup.stories.mdx +247 -0
  191. package/src/components/RadioGroup/RadioGroup.test.tsx +327 -0
  192. package/src/components/RadioGroup/RadioGroup.tsx +154 -0
  193. package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +4 -0
  194. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1101 -0
  195. package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
  196. package/src/components/SearchBar/SearchBar.stories.mdx +196 -224
  197. package/src/components/SearchBar/SearchBar.tsx +151 -46
  198. package/src/components/Select/Select.stories.mdx +193 -168
  199. package/src/components/Select/Select.test.tsx +129 -324
  200. package/src/components/Select/Select.tsx +120 -160
  201. package/src/components/Select/SelectTypes.tsx +4 -0
  202. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +18 -29
  203. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
  204. package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
  205. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  206. package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
  207. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  208. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  209. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  210. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  211. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  212. package/src/components/StyleGuide/Bidirectionality.stories.mdx +112 -90
  213. package/src/components/StyleGuide/Buttons.stories.mdx +98 -100
  214. package/src/components/StyleGuide/Colors.stories.mdx +336 -0
  215. package/src/components/StyleGuide/Forms.stories.mdx +85 -0
  216. package/src/components/StyleGuide/Iconography.stories.mdx +86 -93
  217. package/src/components/StyleGuide/Spacing.stories.mdx +0 -1
  218. package/src/components/StyleGuide/Typography.stories.mdx +164 -166
  219. package/src/components/StyleGuide/UIDocCard.tsx +4 -4
  220. package/src/components/Tabs/Tabs.stories.mdx +221 -0
  221. package/src/components/Tabs/Tabs.test.tsx +264 -0
  222. package/src/components/Tabs/Tabs.tsx +220 -0
  223. package/src/components/Template/Template.stories.mdx +574 -0
  224. package/src/components/Template/Template.test.tsx +124 -0
  225. package/src/components/Template/Template.tsx +226 -0
  226. package/src/components/Text/Text.stories.mdx +70 -0
  227. package/src/components/Text/Text.test.tsx +63 -0
  228. package/src/components/Text/Text.tsx +55 -0
  229. package/src/components/Text/TextTypes.tsx +6 -0
  230. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  231. package/src/components/TextInput/TextInput.stories.mdx +90 -90
  232. package/src/components/TextInput/TextInput.test.tsx +103 -83
  233. package/src/components/TextInput/TextInput.tsx +108 -91
  234. package/src/components/TextInput/TextInputTypes.tsx +6 -0
  235. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +2 -1
  236. package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
  237. package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
  238. package/src/docs/Chakra.stories.mdx +341 -0
  239. package/src/docs/Intro.stories.mdx +31 -24
  240. package/src/index.ts +70 -5
  241. package/src/styles/01-colors/_colors-brand.scss +6 -4
  242. package/src/styles/01-colors/_colors-utility.scss +14 -15
  243. package/src/styles/03-space/_space-inline.scss +47 -7
  244. package/src/styles/03-space/_space-inset.scss +33 -5
  245. package/src/styles/03-space/_space-stack.scss +48 -8
  246. package/src/styles/base/_02-breakpoints.scss +5 -4
  247. package/src/styles/base/_04-base.scss +2 -1
  248. package/src/styles/base/_place-holder.scss +1 -1
  249. package/src/styles/base/_typography.scss +1 -29
  250. package/src/styles.scss +22 -25
  251. package/src/theme/components/accordion.ts +30 -0
  252. package/src/theme/components/breadcrumb.ts +77 -0
  253. package/src/theme/components/button.ts +125 -0
  254. package/src/theme/components/checkbox.ts +107 -0
  255. package/src/theme/components/customCheckboxGroup.ts +12 -0
  256. package/src/theme/components/customRadioGroup.ts +12 -0
  257. package/src/theme/components/global.ts +71 -0
  258. package/src/theme/components/globalMixins.ts +16 -0
  259. package/src/theme/components/heading.ts +72 -0
  260. package/src/theme/components/hero.ts +239 -0
  261. package/src/theme/components/icon.ts +79 -0
  262. package/src/theme/components/label.ts +17 -0
  263. package/src/theme/components/link.ts +47 -0
  264. package/src/theme/components/radio.ts +106 -0
  265. package/src/theme/components/searchBar.ts +21 -0
  266. package/src/theme/components/select.ts +50 -0
  267. package/src/theme/components/statusBadge.ts +27 -0
  268. package/src/theme/components/tabs.ts +79 -0
  269. package/src/theme/components/template.ts +114 -0
  270. package/src/theme/components/text.ts +31 -0
  271. package/src/theme/components/textInput.ts +61 -0
  272. package/src/theme/foundations/breakpoints.ts +24 -0
  273. package/src/theme/foundations/colors.ts +208 -0
  274. package/src/theme/foundations/global.ts +26 -0
  275. package/src/theme/foundations/shadows.ts +5 -0
  276. package/src/theme/foundations/spacing.ts +85 -0
  277. package/src/theme/foundations/typography.ts +35 -0
  278. package/src/theme/index.ts +88 -0
  279. package/src/theme/provider.tsx +9 -0
  280. package/src/theme/types.ts +1 -0
  281. package/src/utils/componentCategories.ts +56 -21
  282. package/src/utils/utils.ts +13 -0
  283. package/dist/components/Accordion/Accordion.stories.d.ts +0 -5
  284. package/dist/components/Card/Card.stories.d.ts +0 -27
  285. package/dist/components/Label/Label.stories.d.ts +0 -12
  286. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  287. package/dist/components/Template/Template.stories.d.ts +0 -29
  288. package/src/components/Accordion/Accordion.stories.tsx +0 -65
  289. package/src/components/Accordion/_Accordion.scss +0 -81
  290. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  291. package/src/components/Checkbox/_Checkbox.scss +0 -97
  292. package/src/components/Form/_Form.scss +0 -28
  293. package/src/components/Heading/_Heading.scss +0 -163
  294. package/src/components/Hero/_Hero.scss +0 -256
  295. package/src/components/Icons/_Icons.scss +0 -116
  296. package/src/components/Label/Label.stories.tsx +0 -30
  297. package/src/components/Label/_Label.scss +0 -22
  298. package/src/components/Link/_Link.scss +0 -73
  299. package/src/components/Radio/_Radio.scss +0 -84
  300. package/src/components/SearchBar/_SearchBar.scss +0 -16
  301. package/src/components/Select/_Select.scss +0 -82
  302. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -33
  303. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  304. package/src/components/StyleGuide/Colors.stories.tsx +0 -288
  305. package/src/components/Template/Template.stories.tsx +0 -85
  306. package/src/components/Template/_Template.scss +0 -63
  307. package/src/components/TextInput/_TextInput.scss +0 -59
@@ -9,9 +9,10 @@ import { withDesign } from "storybook-addon-designs";
9
9
  import { withQuery } from "@storybook/addon-queryparams";
10
10
  import Pagination from "./Pagination";
11
11
  import * as stories from "./Pagination.stories.tsx";
12
+ import { getCategory } from "../../utils/componentCategories";
12
13
 
13
14
  <Meta
14
- title="Pagination"
15
+ title={getCategory("Pagination")}
15
16
  component={Pagination}
16
17
  decorators={[withDesign, withQuery]}
17
18
  argTypes={{
@@ -31,6 +32,11 @@ import * as stories from "./Pagination.stories.tsx";
31
32
 
32
33
  # Pagination
33
34
 
35
+ | Component Version | DS Version |
36
+ | ----------------- | ---------- |
37
+ | Added | `0.0.10` |
38
+ | Latest | `0.22.2` |
39
+
34
40
  <Description of={Pagination} />
35
41
 
36
42
  The `Pagination` component helps navigate between pages of a multi-page
@@ -19,12 +19,12 @@ describe("Pagination with getPageHref", () => {
19
19
  const getPageHref = (page: number) => `page=${page}`;
20
20
 
21
21
  it("Renders a nav element with items and links", () => {
22
- render(
22
+ const { container } = render(
23
23
  <Pagination pageCount={20} currentPage={6} getPageHref={getPageHref} />
24
24
  );
25
25
 
26
26
  expect(screen.getByRole("navigation")).toBeInTheDocument();
27
- expect(screen.getByRole("list")).toBeInTheDocument();
27
+ expect(container.querySelector(".pagination__list")).toBeInTheDocument();
28
28
  // Previous/Next buttons + truncated item list = 11 total items
29
29
  expect(screen.getAllByRole("listitem")).toHaveLength(11);
30
30
  // Each element links to anotherpage.
@@ -53,7 +53,8 @@ describe("Pagination with getPageHref", () => {
53
53
  );
54
54
  const links = screen.getAllByRole("button");
55
55
  expect(links[0]).toHaveAttribute("aria-disabled");
56
- expect(links[0]).toHaveAttribute("class", "link pagination__link disabled");
56
+ const linkClass = links[0].getAttribute("class");
57
+ expect(linkClass).toContain("pagination__link disabled");
57
58
  });
58
59
 
59
60
  it("Next link is disabled when on the last page item", () => {
@@ -62,7 +63,8 @@ describe("Pagination with getPageHref", () => {
62
63
  );
63
64
  const links = screen.getAllByRole("button");
64
65
  expect(links[9]).toHaveAttribute("aria-disabled");
65
- expect(links[9]).toHaveAttribute("class", "link pagination__link disabled");
66
+ const linkClass = links[9].getAttribute("class");
67
+ expect(linkClass).toContain("pagination__link disabled");
66
68
  });
67
69
 
68
70
  it("Current page item has active class", () => {
@@ -70,7 +72,8 @@ describe("Pagination with getPageHref", () => {
70
72
  <Pagination pageCount={11} currentPage={5} getPageHref={getPageHref} />
71
73
  );
72
74
  const links = screen.getAllByRole("button");
73
- expect(links[5]).toHaveAttribute("class", "link pagination__link selected");
75
+ const linkClass = links[5].getAttribute("class");
76
+ expect(linkClass).toContain("pagination__link selected");
74
77
  });
75
78
 
76
79
  it("When pagination has 1 element, pagination is not shown", () => {
@@ -92,7 +95,7 @@ describe("Pagination with changeCallback", () => {
92
95
  const changeCallback = jest.fn();
93
96
 
94
97
  it("Renders a nav element with an unordered list of items", () => {
95
- render(
98
+ const { container } = render(
96
99
  <Pagination
97
100
  pageCount={11}
98
101
  currentPage={6}
@@ -100,7 +103,7 @@ describe("Pagination with changeCallback", () => {
100
103
  />
101
104
  );
102
105
  expect(screen.getByRole("navigation")).toBeInTheDocument();
103
- expect(screen.getByRole("list")).toBeInTheDocument();
106
+ expect(container.querySelector(".pagination__list")).toBeInTheDocument();
104
107
  expect(screen.getAllByRole("listitem")).toHaveLength(11);
105
108
  });
106
109
 
@@ -114,7 +117,8 @@ describe("Pagination with changeCallback", () => {
114
117
  );
115
118
  const links = screen.getAllByRole("button");
116
119
  expect(links[0]).toHaveAttribute("aria-disabled");
117
- expect(links[0]).toHaveAttribute("class", "link pagination__link disabled");
120
+ const linkClass = links[0].getAttribute("class");
121
+ expect(linkClass).toContain("pagination__link disabled");
118
122
  });
119
123
 
120
124
  it("Next link is disabled when on the last page item", () => {
@@ -127,7 +131,8 @@ describe("Pagination with changeCallback", () => {
127
131
  );
128
132
  const links = screen.getAllByRole("button");
129
133
  expect(links[9]).toHaveAttribute("aria-disabled");
130
- expect(links[9]).toHaveAttribute("class", "link pagination__link disabled");
134
+ const linkClass = links[9].getAttribute("class");
135
+ expect(linkClass).toContain("pagination__link disabled");
131
136
  });
132
137
 
133
138
  it("Current page item has active class", () => {
@@ -139,7 +144,8 @@ describe("Pagination with changeCallback", () => {
139
144
  />
140
145
  );
141
146
  const links = screen.getAllByRole("button");
142
- expect(links[5]).toHaveAttribute("class", "link pagination__link selected");
147
+ const linkClass = links[5].getAttribute("class");
148
+ expect(linkClass).toContain("pagination__link selected");
143
149
  });
144
150
 
145
151
  it("When page item is selected, runs the onPageChange callback", () => {
@@ -3,14 +3,14 @@ import {
3
3
  Story,
4
4
  Canvas,
5
5
  ArgsTable,
6
- Preview,
7
6
  Description,
8
- } from "@storybook/addon-docs/blocks";
7
+ } from "@storybook/addon-docs";
9
8
  import { withDesign } from "storybook-addon-designs";
10
- import { getCategory } from "../../utils/componentCategories";
9
+ import { HStack } from "@chakra-ui/react";
11
10
 
11
+ import { getCategory } from "../../utils/componentCategories";
12
+ import DSProvider from "../../theme/provider";
12
13
  import Radio from "./Radio";
13
- import { onChangeDefault } from "./Radio";
14
14
 
15
15
  <Meta
16
16
  title={getCategory("Radio")}
@@ -25,19 +25,28 @@ import { onChangeDefault } from "./Radio";
25
25
  jest: ["Radio.test.tsx"],
26
26
  }}
27
27
  argTypes={{
28
+ className: { table: { disable: true } },
29
+ id: { table: { disable: true } },
30
+ isChecked: { table: { disable: true } },
28
31
  onChange: { table: { disable: true } },
29
- checked: { table: { disable: true } },
30
32
  }}
31
33
  />
32
34
 
33
35
  # Radio
34
36
 
37
+ | Component Version | DS Version |
38
+ | ----------------- | ---------- |
39
+ | Added | `0.22.0` |
40
+ | Latest | `0.25.0` |
41
+
35
42
  <Description of={Radio} />
36
43
 
37
- This component renders a radio button form element. See below for configuration information. Note that the `id` property, while optional, will
38
- cause an accessibility violation if none is present.
44
+ This component renders a radio button form element. Note that all these examples
45
+ show the `Radio` button in isolation. We recommend to always use the `Radio`
46
+ component inside the Design System `RadioGroup` component. The `RadioGroup`
47
+ component will handle all the states and data management.
39
48
 
40
- <Preview withToolbar>
49
+ <Canvas withToolbar>
41
50
  <Story
42
51
  name="Radio"
43
52
  args={{
@@ -45,77 +54,79 @@ cause an accessibility violation if none is present.
45
54
  showLabel: true,
46
55
  id: "test_id",
47
56
  name: "test_name",
57
+ value: "1",
58
+ isDisabled: false,
59
+ isRequired: false,
60
+ isInvalid: false,
61
+ helperText: "This is the helper text!",
62
+ invalidText: "This is the error text :(",
48
63
  }}
49
64
  >
50
65
  {(args) => <Radio {...args} />}
51
66
  </Story>
52
- </Preview>
67
+ </Canvas>
53
68
 
54
69
  <ArgsTable story="Radio" />
55
70
 
56
71
  ## Checked
57
72
 
58
73
  <Canvas>
59
- <Radio
60
- checked
61
- labelText="I am checked"
62
- name="testChecked"
63
- onChange={onChangeDefault}
64
- showLabel={true}
65
- ></Radio>
74
+ <DSProvider>
75
+ <Radio labelText="I am checked" isChecked value="1" />
76
+ </DSProvider>
66
77
  </Canvas>
67
78
 
68
79
  ## Focused
69
80
 
70
81
  <Canvas>
71
- <Radio
72
- name="testFocus"
73
- labelText="Click or tab to the Radio to see its focus state"
74
- showLabel={true}
75
- ></Radio>
82
+ <DSProvider>
83
+ <Radio labelText="Click or tab to the Radio to see its focus state" />
84
+ </DSProvider>
76
85
  </Canvas>
77
86
 
78
87
  ## Errored
79
88
 
80
89
  <Canvas>
81
- <Radio
82
- name="testErrored"
83
- errored
84
- showLabel={true}
85
- labelText="I am in an error state"
86
- ></Radio>
90
+ <DSProvider>
91
+ <HStack>
92
+ <Radio isInvalid labelText="I am in an error state" />
93
+ <Radio isInvalid isChecked labelText="I am checked in an error state" />
94
+ </HStack>
95
+ </DSProvider>
87
96
  </Canvas>
88
97
 
89
98
  ## Disabled
90
99
 
91
100
  <Canvas>
92
- <Radio
93
- name="testDisabled"
94
- disabled
95
- showLabel={true}
96
- labelText="I am disabled"
97
- ></Radio>
101
+ <DSProvider>
102
+ <HStack>
103
+ <Radio isDisabled labelText="I am disabled" />
104
+ <Radio isDisabled isChecked labelText="I am checked and disabled" />
105
+ </HStack>
106
+ </DSProvider>
98
107
  </Canvas>
99
108
 
100
109
  ## Helper Text
101
110
 
102
111
  <Canvas>
103
- <Radio
104
- name="testHelperText"
105
- showLabel={true}
106
- labelText="I have helper text"
107
- helperText="I am the helper text for this Radio"
108
- ></Radio>
112
+ <DSProvider>
113
+ <Radio
114
+ name="testHelperText"
115
+ labelText="I have helper text"
116
+ helperText="I am the helper text for this Radio"
117
+ />
118
+ </DSProvider>
109
119
  </Canvas>
110
120
 
111
121
  ## Error Text
112
122
 
113
123
  <Canvas>
114
- <Radio
115
- name="testErrorText"
116
- showLabel={true}
117
- errored
118
- labelText="I have error text"
119
- errorText="I am the error text for this Radio"
120
- ></Radio>
124
+ <DSProvider>
125
+ <Radio
126
+ name="testErrorText"
127
+ labelText="I have error text"
128
+ invalidText="I am the error text for this Radio"
129
+ isInvalid
130
+ />
131
+ </DSProvider>
121
132
  </Canvas>
@@ -1,203 +1,157 @@
1
1
  import * as React from "react";
2
- import { fireEvent, render, screen } from "@testing-library/react";
2
+ import { render, screen } from "@testing-library/react";
3
3
  import { axe } from "jest-axe";
4
- import userEvent from "@testing-library/user-event";
4
+ import renderer from "react-test-renderer";
5
5
 
6
6
  import * as generateUUID from "../../helpers/generateUUID";
7
7
  import Radio from "./Radio";
8
8
 
9
9
  describe("Radio Accessibility", () => {
10
- it("passes axe accessibility test", async () => {
11
- const { container } = render(
12
- <Radio
13
- id="inputID"
14
- attributes={{ onClick: jest.fn() }}
15
- onChange={jest.fn()}
16
- labelText="Test Label"
17
- showLabel={false}
18
- />
19
- );
10
+ it("passes axe accessibility", async () => {
11
+ const { container } = render(<Radio id="inputID" labelText="Test Label" />);
20
12
  expect(await axe(container)).toHaveNoViolations();
21
13
  });
22
14
  });
23
15
 
24
16
  describe("Radio Button", () => {
25
- let changeHandler;
26
- let clickHander;
27
- let generateUUIDSpy;
28
-
29
- beforeEach(() => {
30
- clickHander = jest.fn();
31
- changeHandler = jest.fn();
32
- generateUUIDSpy = jest.spyOn(generateUUID, "default");
33
- render(
34
- <Radio
35
- id="inputID"
36
- attributes={{ onClick: clickHander }}
37
- onChange={changeHandler}
38
- labelText="Test Label"
39
- showLabel={false}
40
- />
41
- );
42
- });
43
-
44
- it("Renders without crashing", () => {
17
+ it("renders with a radio input and label", () => {
18
+ render(<Radio id="inputID" labelText="Test Label" />);
19
+ expect(screen.getByLabelText("Test Label")).toBeInTheDocument();
45
20
  expect(screen.getByRole("radio")).toBeInTheDocument();
46
21
  });
47
22
 
48
- it("Renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false", () => {
23
+ it("renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false", () => {
24
+ render(<Radio id="inputID" labelText="Test Label" showLabel={false} />);
49
25
  expect(screen.getByLabelText("Test Label")).toHaveAttribute(
50
26
  "aria-label",
51
27
  "Test Label"
52
28
  );
53
29
  });
54
30
 
55
- it("The radio element's ID is set properly using the value passed to it.", () => {
56
- expect(screen.getByRole("radio")).toHaveAttribute("id", "inputID");
57
- });
58
-
59
- it("Allows user to pass in additional attributes", () => {
60
- expect(clickHander).toHaveBeenCalledTimes(0);
61
- userEvent.click(screen.getByRole("radio"));
62
- expect(clickHander).toHaveBeenCalledTimes(1);
63
- });
64
-
65
- // TODO:
66
- // // Click works but it should be onChange.
67
- // it("Changing the value calls the onChange handler", () => {
68
- // expect(changeHandler).toHaveBeenCalledTimes(0);
69
- // console.log(screen.debug());
70
- // fireEvent.change(screen.getByRole("radio"));
71
- // expect(changeHandler).toHaveBeenCalledTimes(1);
72
- // });
73
-
74
- it("Renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false and 'helperText' has been passed", () => {
31
+ it("renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false and 'helperText' has been passed", () => {
75
32
  render(
76
33
  <Radio
77
- //add other props here
78
- id="test_id"
79
- labelText="Hello"
34
+ id="inputID"
35
+ labelText="Test Label"
80
36
  showLabel={false}
81
- helperText="The helper text."
37
+ helperText="This is the helper text."
82
38
  />
83
39
  );
84
40
  expect(
85
- screen.getByLabelText("Hello - The helper text.")
41
+ screen.getByLabelText("Test Label - This is the helper text.")
86
42
  ).toBeInTheDocument();
87
43
  });
88
44
 
89
- it("Renders with label", () => {
90
- render(
45
+ it("renders visible helper or error text", () => {
46
+ const { rerender } = render(
91
47
  <Radio
92
- //add other props here
93
- id="test_id2"
94
- labelText="Hello"
95
- showLabel={true}
48
+ id="inputID"
49
+ labelText="Test Label"
50
+ helperText="This is the helper text."
51
+ invalidText="This is the error text :("
52
+ />
53
+ );
54
+ expect(screen.getByText("This is the helper text.")).toBeVisible();
55
+ expect(
56
+ screen.queryByText("This is the error text :(")
57
+ ).not.toBeInTheDocument();
58
+
59
+ rerender(
60
+ <Radio
61
+ id="inputID"
62
+ labelText="Test Label"
63
+ isInvalid
64
+ helperText="This is the helper text."
65
+ invalidText="This is the error text :("
96
66
  />
97
67
  );
98
- expect(screen.getByText("Hello")).toBeInTheDocument();
99
- expect(screen.getByLabelText("Hello")).not.toHaveAttribute("aria-label");
100
- expect(screen.getByText("Hello")).toHaveAttribute("for", "test_id2");
68
+ expect(screen.getByText("This is the error text :(")).toBeVisible();
69
+ expect(
70
+ screen.queryByText("This is the helper text.")
71
+ ).not.toBeInTheDocument();
101
72
  });
102
73
 
103
- it("Renders with visible helper text", () => {
74
+ it("sets the radio's ID", () => {
75
+ render(<Radio id="inputID" labelText="Test Label" />);
76
+ expect(screen.getByRole("radio")).toHaveAttribute("id", "inputID");
77
+ });
78
+
79
+ it("calls the UUID generation function if no id prop value is passed", () => {
80
+ const generateUUIDSpy = jest.spyOn(generateUUID, "default");
81
+ expect(generateUUIDSpy).toHaveBeenCalledTimes(0);
82
+ render(<Radio labelText="Hello" />);
83
+ expect(generateUUIDSpy).toHaveBeenCalledTimes(1);
84
+ });
85
+
86
+ it("sets the 'checked' attribute", () => {
104
87
  render(
105
88
  <Radio
106
- //add other props here
107
- id="test_id3"
108
- labelText="Hello"
89
+ id="inputID-attributes"
90
+ labelText="onChange test"
109
91
  showLabel={true}
110
- helperText="The visible helper text."
111
- errorText="The error text."
112
- errored={false}
92
+ isChecked
113
93
  />
114
94
  );
115
- expect(screen.getByText("The visible helper text.")).toBeInTheDocument();
116
- expect(screen.queryByText("The error text.")).not.toBeInTheDocument();
95
+ expect(screen.getByRole("radio")).toHaveAttribute("checked");
117
96
  });
118
97
 
119
- it("Renders with visible error text", () => {
98
+ it("sets the 'disabled' attribute", () => {
120
99
  render(
121
100
  <Radio
122
- //add other props here
123
- id="test_id4"
124
- labelText="Hello"
101
+ id="inputID-attributes"
102
+ labelText="onChange test"
125
103
  showLabel={true}
126
- helperText="The helper text."
127
- errorText="The visible error text."
128
- errored={true}
104
+ isDisabled
129
105
  />
130
106
  );
131
- expect(screen.queryByText("The helper text.")).not.toBeInTheDocument();
132
- expect(screen.getByText("The visible error text.")).toBeInTheDocument();
107
+ expect(screen.getByRole("radio")).toHaveAttribute("disabled");
133
108
  });
134
109
 
135
- it("Calls a UUID generation method if no ID is passed as a prop", () => {
136
- render(<Radio labelText="Hello" showLabel={true} />);
137
- expect(generateUUIDSpy).toHaveBeenCalledTimes(1);
138
- });
139
-
140
- it("The 'checked' attribute can set properly", () => {
141
- const onChange = jest.fn();
110
+ it("sets the 'required' attribute", () => {
142
111
  render(
143
112
  <Radio
144
113
  id="inputID-attributes"
145
114
  labelText="onChange test"
146
- showLabel={false}
147
- attributes={{
148
- checked: true,
149
- "aria-checked": true,
150
- onChange,
151
- }}
115
+ showLabel={true}
116
+ isRequired
152
117
  />
153
118
  );
154
-
155
- expect(screen.getByLabelText("onChange test")).toHaveAttribute("checked");
156
- expect(screen.getByLabelText("onChange test")).toHaveAttribute(
157
- "aria-checked"
158
- );
119
+ expect(screen.getByRole("radio")).toHaveAttribute("required");
159
120
  });
160
121
 
161
- // TODO:
162
- // it("Passes the ref to the input element", () => {
163
- // const ref = React.createRef<HTMLInputElement>();
164
- // const container = render(
165
- // <Radio
166
- // id="inputID-attributes"
167
- // ref={ref}
168
- // labelText="Hello"
169
- // showLabel={false}
170
- // />
171
- // );
172
- // expect(container.find("input").instance()).toEqual(ref.current);
173
- // });
174
-
175
- it("Renders HTML attributes passed through the `attributes` prop", () => {
176
- const onChangeSpy = jest.fn();
177
- const onBlurSpy = jest.fn();
122
+ it("sets the error state", () => {
178
123
  render(
179
124
  <Radio
180
125
  id="inputID-attributes"
181
- attributes={{
182
- onChange: onChangeSpy,
183
- onBlur: onBlurSpy,
184
- tabIndex: 0,
185
- }}
186
- labelText="attributes test"
126
+ labelText="onChange test"
187
127
  showLabel={true}
128
+ isInvalid
188
129
  />
189
130
  );
190
- expect(screen.getByLabelText("attributes test")).toHaveAttribute(
191
- "tabIndex",
192
- "0"
193
- );
194
- // TODO:
195
- // Click works but it should be onChange.
196
- // expect(onChangeSpy).toHaveBeenCalledTimes(0);
197
- // userEvent.click(screen.getByLabelText("attributes test"));
198
- // expect(onChangeSpy).toHaveBeenCalledTimes(1);
199
- expect(onBlurSpy).toHaveBeenCalledTimes(0);
200
- fireEvent.blur(screen.getByLabelText("attributes test"));
201
- expect(onBlurSpy).toHaveBeenCalledTimes(1);
131
+ expect(screen.getByRole("radio")).toHaveAttribute("aria-invalid");
132
+ });
133
+
134
+ it("renders the UI snapshot correctly", () => {
135
+ const primary = renderer
136
+ .create(<Radio id="inputID" labelText="Test Label" />)
137
+ .toJSON();
138
+ const isChecked = renderer
139
+ .create(<Radio id="radio-checked" labelText="Test Label" isChecked />)
140
+ .toJSON();
141
+ const isRequired = renderer
142
+ .create(<Radio id="radio-required" labelText="Test Label" isRequired />)
143
+ .toJSON();
144
+ const isInvalid = renderer
145
+ .create(<Radio id="radio-invalid" labelText="Test Label" isInvalid />)
146
+ .toJSON();
147
+ const isDisabled = renderer
148
+ .create(<Radio id="radio-disabled" labelText="Test Label" isDisabled />)
149
+ .toJSON();
150
+
151
+ expect(primary).toMatchSnapshot();
152
+ expect(isChecked).toMatchSnapshot();
153
+ expect(isRequired).toMatchSnapshot();
154
+ expect(isInvalid).toMatchSnapshot();
155
+ expect(isDisabled).toMatchSnapshot();
202
156
  });
203
157
  });