@nypl/design-system-react-components 0.25.5 → 0.25.9

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 (275) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/README.md +1 -1
  3. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
  4. package/dist/components/Button/Button.d.ts +6 -6
  5. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  6. package/dist/components/Card/Card.d.ts +6 -4
  7. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  10. package/dist/components/DatePicker/DatePicker.d.ts +3 -2
  11. package/dist/components/Form/Form.d.ts +2 -2
  12. package/dist/components/Heading/Heading.d.ts +7 -3
  13. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  16. package/dist/components/Icons/Icon.d.ts +4 -4
  17. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  18. package/dist/components/Icons/IconTypes.d.ts +1 -23
  19. package/dist/components/Image/Image.d.ts +11 -3
  20. package/dist/components/Image/ImageTypes.d.ts +3 -1
  21. package/dist/components/Link/LinkTypes.d.ts +1 -0
  22. package/dist/components/Logo/Logo.d.ts +28 -0
  23. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  24. package/dist/components/Logo/LogoTypes.d.ts +30 -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 +3 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  31. package/dist/components/Select/Select.d.ts +5 -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 +23 -0
  38. package/dist/components/Template/Template.d.ts +8 -3
  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 +48 -0
  42. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  43. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  44. package/dist/design-system-react-components.cjs.development.js +5989 -5490
  45. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  46. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  48. package/dist/design-system-react-components.esm.js +6057 -5551
  49. package/dist/design-system-react-components.esm.js.map +1 -1
  50. package/dist/index.d.ts +11 -4
  51. package/dist/styles.css +2 -2
  52. package/dist/theme/components/breadcrumb.d.ts +9 -0
  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 +47 -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 +8 -4
  64. package/dist/theme/components/searchBar.d.ts +7 -13
  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 +2 -0
  69. package/dist/theme/components/toggle.d.ts +71 -0
  70. package/dist/theme/foundations/spacing.d.ts +2 -0
  71. package/dist/utils/utils.d.ts +10 -0
  72. package/package.json +2 -3
  73. package/src/__tests__/utils/utils.test.ts +23 -1
  74. package/src/components/Accordion/Accordion.stories.mdx +15 -14
  75. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  76. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  77. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  78. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +50 -14
  79. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +20 -0
  80. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
  81. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +198 -0
  82. package/src/components/Button/Button.stories.mdx +93 -48
  83. package/src/components/Button/Button.test.tsx +0 -12
  84. package/src/components/Button/Button.tsx +7 -8
  85. package/src/components/Button/ButtonTypes.tsx +0 -1
  86. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  87. package/src/components/Card/Card.stories.mdx +246 -64
  88. package/src/components/Card/Card.test.tsx +45 -22
  89. package/src/components/Card/Card.tsx +26 -13
  90. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  91. package/src/components/Chakra/Box.stories.mdx +3 -3
  92. package/src/components/Chakra/Center.stories.mdx +5 -5
  93. package/src/components/Chakra/Grid.stories.mdx +14 -17
  94. package/src/components/Chakra/Stack.stories.mdx +2 -2
  95. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  96. package/src/components/Checkbox/Checkbox.tsx +13 -8
  97. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  98. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  99. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  100. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  101. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  102. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  103. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  104. package/src/components/DatePicker/DatePicker.test.tsx +8 -6
  105. package/src/components/DatePicker/DatePicker.tsx +10 -6
  106. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  107. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  108. package/src/components/Form/Form.stories.mdx +49 -41
  109. package/src/components/Form/Form.tsx +5 -4
  110. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  111. package/src/components/Heading/Heading.stories.mdx +59 -23
  112. package/src/components/Heading/Heading.test.tsx +82 -18
  113. package/src/components/Heading/Heading.tsx +31 -31
  114. package/src/components/Heading/HeadingTypes.tsx +6 -6
  115. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  116. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  117. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  118. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  119. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  120. package/src/components/Hero/Hero.stories.mdx +72 -53
  121. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  122. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  123. package/src/components/Icons/Icon.stories.mdx +77 -75
  124. package/src/components/Icons/Icon.tsx +4 -5
  125. package/src/components/Icons/IconSvgs.tsx +2 -42
  126. package/src/components/Icons/IconTypes.tsx +1 -24
  127. package/src/components/Image/Image.stories.mdx +214 -104
  128. package/src/components/Image/Image.test.tsx +10 -0
  129. package/src/components/Image/Image.tsx +21 -10
  130. package/src/components/Image/ImageTypes.ts +2 -0
  131. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  132. package/src/components/Label/Label.stories.mdx +21 -20
  133. package/src/components/Link/Link.stories.mdx +103 -53
  134. package/src/components/Link/Link.test.tsx +108 -7
  135. package/src/components/Link/Link.tsx +58 -19
  136. package/src/components/Link/LinkTypes.tsx +1 -0
  137. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  138. package/src/components/List/List.stories.mdx +36 -24
  139. package/src/components/Logo/Logo.stories.mdx +220 -0
  140. package/src/components/Logo/Logo.test.tsx +98 -0
  141. package/src/components/Logo/Logo.tsx +97 -0
  142. package/src/components/Logo/LogoSvgs.tsx +34 -0
  143. package/src/components/Logo/LogoTypes.tsx +32 -0
  144. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  145. package/src/components/Modal/Modal.stories.mdx +20 -5
  146. package/src/components/Modal/Modal.tsx +2 -8
  147. package/src/components/Notification/Notification.stories.mdx +96 -40
  148. package/src/components/Notification/Notification.test.tsx +62 -16
  149. package/src/components/Notification/Notification.tsx +26 -9
  150. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  151. package/src/components/Pagination/Pagination.stories.mdx +18 -8
  152. package/src/components/Pagination/Pagination.tsx +1 -1
  153. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  154. package/src/components/Placeholder/Placeholder.tsx +7 -14
  155. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  156. package/src/components/Radio/Radio.stories.mdx +39 -19
  157. package/src/components/Radio/Radio.tsx +13 -9
  158. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  159. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  160. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  161. package/src/components/SearchBar/SearchBar.Test.tsx +114 -22
  162. package/src/components/SearchBar/SearchBar.stories.mdx +111 -33
  163. package/src/components/SearchBar/SearchBar.tsx +57 -33
  164. package/src/components/Select/Select.stories.mdx +177 -66
  165. package/src/components/Select/Select.test.tsx +2 -2
  166. package/src/components/Select/Select.tsx +22 -12
  167. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  168. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  169. package/src/components/Slider/Slider.stories.mdx +74 -23
  170. package/src/components/Slider/Slider.test.tsx +35 -0
  171. package/src/components/Slider/Slider.tsx +22 -11
  172. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  173. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  174. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  175. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  176. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  177. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  178. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  179. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  180. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  181. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  182. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  183. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  184. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  185. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  186. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  187. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  188. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  189. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  190. package/src/components/Table/Table.stories.mdx +66 -0
  191. package/src/components/Table/Table.test.tsx +60 -0
  192. package/src/components/Table/Table.tsx +116 -0
  193. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  194. package/src/components/Tabs/Tabs.test.tsx +1 -1
  195. package/src/components/Template/Template.stories.mdx +57 -49
  196. package/src/components/Template/Template.test.tsx +65 -5
  197. package/src/components/Template/Template.tsx +35 -5
  198. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  199. package/src/components/Text/Text.stories.mdx +33 -11
  200. package/src/components/Text/Text.tsx +2 -2
  201. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  202. package/src/components/TextInput/TextInput.test.tsx +96 -0
  203. package/src/components/TextInput/TextInput.tsx +12 -8
  204. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  205. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  206. package/src/components/Toggle/Toggle.test.tsx +140 -0
  207. package/src/components/Toggle/Toggle.tsx +123 -0
  208. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  209. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  210. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  211. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  212. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  213. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  214. package/src/docs/Chakra.stories.mdx +5 -8
  215. package/src/docs/Intro.stories.mdx +2 -2
  216. package/src/index.ts +13 -4
  217. package/src/styles/base/_03-base.scss +1 -1
  218. package/src/styles/base/_place-holder.scss +7 -7
  219. package/src/styles.scss +1 -5
  220. package/src/theme/components/breadcrumb.ts +14 -4
  221. package/src/theme/components/button.ts +5 -12
  222. package/src/theme/components/card.ts +9 -7
  223. package/src/theme/components/checkbox.ts +1 -1
  224. package/src/theme/components/customTable.ts +50 -0
  225. package/src/theme/components/datePicker.ts +1 -1
  226. package/src/theme/components/global.ts +7 -7
  227. package/src/theme/components/heading.ts +13 -11
  228. package/src/theme/components/helperErrorText.ts +1 -1
  229. package/src/theme/components/icon.ts +2 -2
  230. package/src/theme/components/image.ts +9 -1
  231. package/src/theme/components/link.ts +17 -5
  232. package/src/theme/components/list.ts +1 -3
  233. package/src/theme/components/logo.ts +54 -0
  234. package/src/theme/components/notification.ts +9 -7
  235. package/src/theme/components/searchBar.ts +7 -13
  236. package/src/theme/components/select.ts +1 -0
  237. package/src/theme/components/statusBadge.ts +1 -1
  238. package/src/theme/components/structuredContent.ts +54 -0
  239. package/src/theme/components/template.ts +10 -10
  240. package/src/theme/components/text.ts +6 -6
  241. package/src/theme/components/textInput.ts +1 -0
  242. package/src/theme/components/toggle.ts +69 -0
  243. package/src/theme/components/videoPlayer.ts +0 -2
  244. package/src/theme/foundations/global.ts +2 -2
  245. package/src/theme/foundations/spacing.ts +3 -0
  246. package/src/theme/foundations/typography.ts +84 -12
  247. package/src/theme/index.ts +8 -0
  248. package/src/utils/componentCategories.ts +4 -2
  249. package/src/utils/utils.ts +17 -0
  250. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  251. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  252. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  253. package/dist/components/Input/Input.d.ts +0 -36
  254. package/dist/components/Input/Input.stories.d.ts +0 -29
  255. package/dist/components/Input/InputTypes.d.ts +0 -6
  256. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  257. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  258. package/dist/helpers/getCSSVariable.d.ts +0 -1
  259. package/dist/interfaces.d.ts +0 -3
  260. package/dist/utils/bem.d.ts +0 -1
  261. package/src/__tests__/utils/bem.test.ts +0 -37
  262. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  263. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  264. package/src/components/CardEdition/CardEdition.tsx +0 -60
  265. package/src/components/CardEdition/_CardEdition.scss +0 -137
  266. package/src/components/Input/Input.stories.tsx +0 -133
  267. package/src/components/Input/Input.test.tsx +0 -266
  268. package/src/components/Input/Input.tsx +0 -81
  269. package/src/components/Input/InputTypes.tsx +0 -8
  270. package/src/components/Input/_Input.scss +0 -78
  271. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  272. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  273. package/src/helpers/getCSSVariable.tsx +0 -5
  274. package/src/interfaces.ts +0 -3
  275. package/src/utils/bem.ts +0 -44
@@ -54,6 +54,22 @@ exports[`Image Renders the UI snapshot correctly 5`] = `
54
54
  `;
55
55
 
56
56
  exports[`Image Renders the UI snapshot correctly 6`] = `
57
+ <img
58
+ alt=""
59
+ className="css-0"
60
+ src="test.png"
61
+ />
62
+ `;
63
+
64
+ exports[`Image Renders the UI snapshot correctly 7`] = `
65
+ <img
66
+ alt=""
67
+ className="css-0"
68
+ src="test.png"
69
+ />
70
+ `;
71
+
72
+ exports[`Image Renders the UI snapshot correctly 8`] = `
57
73
  <div
58
74
  className="the-wrap css-0"
59
75
  >
@@ -69,7 +85,7 @@ exports[`Image Renders the UI snapshot correctly 6`] = `
69
85
  </div>
70
86
  `;
71
87
 
72
- exports[`Image Renders the UI snapshot correctly 7`] = `
88
+ exports[`Image Renders the UI snapshot correctly 9`] = `
73
89
  <div
74
90
  className="the-wrap css-0"
75
91
  >
@@ -85,7 +101,7 @@ exports[`Image Renders the UI snapshot correctly 7`] = `
85
101
  </div>
86
102
  `;
87
103
 
88
- exports[`Image Renders the UI snapshot correctly 8`] = `
104
+ exports[`Image Renders the UI snapshot correctly 10`] = `
89
105
  <img
90
106
  alt=""
91
107
  className="css-0"
@@ -93,7 +109,7 @@ exports[`Image Renders the UI snapshot correctly 8`] = `
93
109
  />
94
110
  `;
95
111
 
96
- exports[`Image Renders the UI snapshot correctly 9`] = `
112
+ exports[`Image Renders the UI snapshot correctly 11`] = `
97
113
  <div
98
114
  className="the-wrap css-0"
99
115
  >
@@ -109,7 +125,7 @@ exports[`Image Renders the UI snapshot correctly 9`] = `
109
125
  </div>
110
126
  `;
111
127
 
112
- exports[`Image Renders the UI snapshot correctly 10`] = `
128
+ exports[`Image Renders the UI snapshot correctly 12`] = `
113
129
  <div
114
130
  className="the-wrap css-0"
115
131
  >
@@ -125,7 +141,7 @@ exports[`Image Renders the UI snapshot correctly 10`] = `
125
141
  </div>
126
142
  `;
127
143
 
128
- exports[`Image Renders the UI snapshot correctly 11`] = `
144
+ exports[`Image Renders the UI snapshot correctly 13`] = `
129
145
  <div
130
146
  className="the-wrap css-0"
131
147
  >
@@ -141,7 +157,7 @@ exports[`Image Renders the UI snapshot correctly 11`] = `
141
157
  </div>
142
158
  `;
143
159
 
144
- exports[`Image Renders the UI snapshot correctly 12`] = `
160
+ exports[`Image Renders the UI snapshot correctly 14`] = `
145
161
  <div
146
162
  className="the-wrap css-0"
147
163
  >
@@ -157,7 +173,7 @@ exports[`Image Renders the UI snapshot correctly 12`] = `
157
173
  </div>
158
174
  `;
159
175
 
160
- exports[`Image Renders the UI snapshot correctly 13`] = `
176
+ exports[`Image Renders the UI snapshot correctly 15`] = `
161
177
  <div
162
178
  className="the-wrap css-0"
163
179
  >
@@ -173,7 +189,7 @@ exports[`Image Renders the UI snapshot correctly 13`] = `
173
189
  </div>
174
190
  `;
175
191
 
176
- exports[`Image Renders the UI snapshot correctly 14`] = `
192
+ exports[`Image Renders the UI snapshot correctly 16`] = `
177
193
  <div
178
194
  className="the-wrap css-0"
179
195
  >
@@ -1,11 +1,11 @@
1
+ import { Box } 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";
8
- import { Box } from "@chakra-ui/react";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
9
9
 
10
10
  import Label from "./Label";
11
11
  import { getCategory } from "../../utils/componentCategories";
@@ -17,8 +17,15 @@ import { getCategory } from "../../utils/componentCategories";
17
17
  jest: ["Label.test.tsx"],
18
18
  }}
19
19
  argTypes={{
20
- className: { table: { disable: true } },
21
- id: { table: { disable: true } },
20
+ className: { control: false },
21
+ id: { control: false },
22
+ optReqFlag: {
23
+ control: { type: "select" },
24
+ options: ["Required", "Optional", ""],
25
+ },
26
+ text: {
27
+ description: "Only used for Storybook",
28
+ },
22
29
  }}
23
30
  />
24
31
 
@@ -27,32 +34,26 @@ import { getCategory } from "../../utils/componentCategories";
27
34
  | Component Version | DS Version |
28
35
  | ----------------- | ---------- |
29
36
  | Added | `0.0.10` |
30
- | Latest | `0.25.1` |
37
+ | Latest | `0.25.8` |
31
38
 
32
39
  <Description of={Label} />
33
40
 
34
41
  <Canvas>
35
42
  <Story
36
- name="Label"
43
+ name="Label with Controls"
37
44
  args={{
38
- text: "A label for a villager.",
39
- optReqFlag: "Required",
45
+ className: undefined,
40
46
  htmlFor: "id-of-input-element",
41
- }}
42
- argTypes={{
43
- optReqFlag: {
44
- control: {
45
- type: "select",
46
- },
47
- options: ["Required", "Optional", ""],
48
- },
47
+ id: "label-id",
48
+ optReqFlag: "Required",
49
+ text: "A label for a villager.",
49
50
  }}
50
51
  >
51
52
  {(args) => <Label {...args}>{args.text}</Label>}
52
53
  </Story>
53
54
  </Canvas>
54
55
 
55
- <ArgsTable story="Label" />
56
+ <ArgsTable story="Label with Controls" />
56
57
 
57
58
  ## Required/Optional helper text
58
59
 
@@ -1,23 +1,26 @@
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";
8
- import { withDesign } from "storybook-addon-designs";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
9
9
  import {
10
10
  BrowserRouter as Router,
11
11
  Link as ReactRouterLink,
12
12
  } from "react-router-dom";
13
- import { VStack } from "@chakra-ui/react";
13
+ import { withDesign } from "storybook-addon-designs";
14
14
 
15
15
  import Link from "./Link";
16
16
  import { LinkTypes } from "./LinkTypes";
17
17
  import Icon from "../Icons/Icon";
18
- import { IconAlign, IconSizes } from "../Icons/IconTypes";
18
+ import { IconAlign, IconNames, IconSizes } from "../Icons/IconTypes";
19
19
  import { getCategory } from "../../utils/componentCategories";
20
20
  import DSProvider from "../../theme/provider";
21
+ import { getStorybookEnumValues } from "../../utils/utils";
22
+
23
+ export const enumValues = getStorybookEnumValues(LinkTypes, "LinkTypes");
21
24
 
22
25
  <Meta
23
26
  title={getCategory("Link")}
@@ -26,19 +29,20 @@ import DSProvider from "../../theme/provider";
26
29
  parameters={{
27
30
  design: {
28
31
  type: "figma",
29
- url:
30
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36854%3A24387",
32
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36854%3A24387",
31
33
  },
32
34
  jest: ["Link.test.tsx"],
33
35
  }}
34
36
  argTypes={{
35
- attributes: { table: { disable: true } },
37
+ additionalStyles: { control: false },
38
+ attributes: { control: false },
36
39
  children: { table: { disable: true } },
40
+ key: { table: { disable: true } },
41
+ ref: { table: { disable: true } },
37
42
  type: {
38
- control: {
39
- type: "select",
40
- },
41
- options: LinkTypes,
43
+ control: { type: "select" },
44
+ table: { defaultValue: { summary: "LinkTypes.Default" } },
45
+ options: enumValues.options,
42
46
  },
43
47
  }}
44
48
  />
@@ -48,29 +52,34 @@ import DSProvider from "../../theme/provider";
48
52
  | Component Version | DS Version |
49
53
  | ----------------- | ---------- |
50
54
  | Added | `0.0.4` |
51
- | Latest | `0.25.1` |
55
+ | Latest | `0.25.9` |
52
56
 
53
57
  <Description of={Link} />
54
58
 
55
59
  <Canvas withToolbar>
56
60
  <Story
57
- name="Basic"
61
+ name="Link with Controls"
58
62
  args={{
59
- id: "nypl-link",
60
- type: LinkTypes.Action,
61
- href: "https://nypl.org",
62
- className: "custom-class",
63
+ additionalStyles: undefined,
63
64
  attributes: {
64
65
  rel: "nofollow",
65
66
  onClick: (e) => e.preventDefault(),
66
67
  },
68
+ className: "custom-class",
69
+ href: "https://nypl.org",
70
+ id: "nypl-link",
71
+ type: "LinkTypes.Action",
67
72
  }}
68
73
  >
69
- {(args) => <Link {...args}>Link</Link>}
74
+ {(args) => (
75
+ <Link {...args} type={enumValues.getValue(args.type)}>
76
+ Link
77
+ </Link>
78
+ )}
70
79
  </Story>
71
80
  </Canvas>
72
81
 
73
- <ArgsTable story="Basic" />
82
+ <ArgsTable story="Link with Controls" />
74
83
 
75
84
  ## Links With Icons
76
85
 
@@ -90,12 +99,20 @@ links with icons. Icons can be rendered to the left or right of the link text.
90
99
  Clock Link
91
100
  </Link>
92
101
  <Link type={LinkTypes.Action} href="#passed-in-link">
93
- <Icon name="check" align={IconAlign.Left} size={IconSizes.Small} />
102
+ <Icon
103
+ name={IconNames.Check}
104
+ align={IconAlign.Left}
105
+ size={IconSizes.Small}
106
+ />
94
107
  Check Link
95
108
  </Link>
96
109
  <Link type={LinkTypes.Action} href="#passed-in-link-right">
97
110
  Check Link Right
98
- <Icon name="check" align={IconAlign.Right} size={IconSizes.Small} />
111
+ <Icon
112
+ name={IconNames.Check}
113
+ align={IconAlign.Right}
114
+ size={IconSizes.Small}
115
+ />
99
116
  </Link>
100
117
  </VStack>
101
118
  </Story>
@@ -103,8 +120,29 @@ links with icons. Icons can be rendered to the left or right of the link text.
103
120
 
104
121
  ## Anchor Element Rendering
105
122
 
106
- `Link` can wrap an existing `<a>` tag or it can use the `href` prop to generate
107
- an `<a>` tag.
123
+ `Link` can wrap an existing `<a>` element (and `Icon` component) or it
124
+ can use the `href` prop to generate an `<a>` element.
125
+
126
+ ```jsx
127
+ // Existing anchor element
128
+ <Link type={LinkTypes.Action}>
129
+ <a href="#existing-anchor-tag">link</a>
130
+ </Link>
131
+
132
+ // Also works with an icon component. Make sure to wrap the icon and anchor
133
+ // in a single element for this pattern.
134
+ <Link type={LinkTypes.Action}>
135
+ <>
136
+ <Icon name={IconNames.Check} align={IconAlign.Left} size={IconSizes.Small} />
137
+ <a href="#existing-anchor-tag">check link</a>
138
+ </>
139
+ </Link>
140
+
141
+ // Otherwise, the `href` prop will generate an `<a>` tag.
142
+ <Link type={LinkTypes.Action} href="#passed-in-link">
143
+ link
144
+ </Link>
145
+ ```
108
146
 
109
147
  <Canvas>
110
148
  <Story name="Anchor Element Rendering">
@@ -113,11 +151,23 @@ an `<a>` tag.
113
151
  <Link type={LinkTypes.Action}>
114
152
  <a href="#existing-anchor-tag">link</a>
115
153
  </Link>{" "}
116
- with the &lt;a&gt; tag as a child of the Link component. And this is a{" "}
154
+ with the &lt;a&gt; element as a child of the `Link` component. This is a{" "}
117
155
  <Link type={LinkTypes.Action} href="#passed-in-link">
118
156
  link
119
157
  </Link>{" "}
120
- where the Link component uses the `href` prop and has a string-only child.
158
+ where the `Link` component uses the `href` prop and has a string-only
159
+ child. Finally, this is a{" "}
160
+ <Link type={LinkTypes.Action}>
161
+ <>
162
+ <Icon
163
+ name={IconNames.Check}
164
+ align={IconAlign.Left}
165
+ size={IconSizes.Small}
166
+ />
167
+ <a href="#existing-anchor-tag">link</a>
168
+ </>
169
+ </Link>{" "}
170
+ with a check icon.
121
171
  </>
122
172
  </Story>
123
173
  </Canvas>
@@ -145,9 +195,11 @@ an `<a>` tag.
145
195
 
146
196
  The Design System's `Link` component should wrap around `react-router`'s own
147
197
  `Link` component. To avoid name conflicts, rename either the Design System's
148
- or `react-router`'s `Link` component.
198
+ or `react-router`'s `Link` component. Any of the following patterns are valid.
149
199
 
150
200
  ```jsx
201
+ // In this first example, React Router's `Link` component
202
+ // is renamed as `ReactRouterLink`.
151
203
  import {
152
204
  BrowserRouter as Router,
153
205
  Link as ReactRouterLink,
@@ -158,8 +210,9 @@ import { Link, LinkTypes } from "@nypl/design-system-react-components";
158
210
  <ReactRouterLink to="#">Next Page</ReactRouterLink>
159
211
  </Link>;
160
212
 
161
- // or
162
-
213
+ // In this second example, React Router's `Link` component
214
+ // is not renamed but the DS's `Link` component is renamed
215
+ // to `DSLink`.
163
216
  import { BrowserRouter, Link } from "react-router-dom";
164
217
  import {
165
218
  Link as DSLink,
@@ -170,8 +223,9 @@ import {
170
223
  <Link to="#">Next Page</Link>
171
224
  </DSLink>;
172
225
 
173
- // or
174
-
226
+ // In this third example, React Router's `Link` component
227
+ // is not renamed and the DS's `Link` component is
228
+ // imported and rendered as `DS.Link`.
175
229
  import { BrowserRouter, Link } from "react-router-dom";
176
230
  import DS from "@nypl/design-system-react-components";
177
231
 
@@ -201,34 +255,30 @@ pages in a NextJS app.
201
255
  ```jsx
202
256
  import { Link, LinkTypes } from "@nypl/design-system-react-components";
203
257
 
204
- /* This is just an example wrapper that works similarly to NextJS' `Link`
258
+ /**
259
+ * This is just an example wrapper that works similarly to NextJS' `Link`
205
260
  * component. In real life, NextJS's `Link` component will pass down the
206
261
  * `href` and `passHref` props and a `ref` to make routing functional.
207
262
  */
208
- export const NextJsLink = (props: HTMLAnchorElement) => (
209
- <div>
210
- {React.cloneElement(
211
- props.children,
212
- { ...props },
213
- props.children.props.children
214
- )}
215
- </div>
216
- );
217
-
263
+ export const NextJsLink = (props: HTMLAnchorElement) =>
264
+ React.cloneElement(
265
+ props.children,
266
+ { ...props },
267
+ props.children.props.children
268
+ );
269
+
270
+ // Note that NextJS' `href` and `passHref` props are required.
218
271
  <NextJsLink href="#" passHref>
219
272
  <Link type={LinkTypes.Action}>Next Page</Link>
220
273
  </NextJsLink>;
221
274
  ```
222
275
 
223
- export const NextJsLink = (props) => (
224
- <div>
225
- {React.cloneElement(
226
- props.children,
227
- { ...props },
228
- props.children.props.children
229
- )}
230
- </div>
231
- );
276
+ export const NextJsLink = (props) =>
277
+ React.cloneElement(
278
+ props.children,
279
+ { ...props },
280
+ props.children.props.children
281
+ );
232
282
 
233
283
  <Canvas>
234
284
  <DSProvider>
@@ -1,15 +1,21 @@
1
- import * as React from "react";
2
1
  import { render, screen } from "@testing-library/react";
3
2
  import { axe } from "jest-axe";
4
-
5
- import Link from "./Link";
6
- import { LinkTypes } from "./LinkTypes";
3
+ import * as React from "react";
7
4
  import {
8
5
  BrowserRouter as Router,
9
6
  Link as ReactRouterLink,
10
7
  } from "react-router-dom";
8
+ import renderer from "react-test-renderer";
9
+
10
+ import Link from "./Link";
11
+ import { LinkTypes } from "./LinkTypes";
11
12
  import Icon from "../Icons/Icon";
12
- import { IconRotationTypes, IconNames, IconAlign } from "../Icons/IconTypes";
13
+ import {
14
+ IconAlign,
15
+ IconNames,
16
+ IconRotationTypes,
17
+ IconSizes,
18
+ } from "../Icons/IconTypes";
13
19
 
14
20
  describe("Link Accessibility", () => {
15
21
  it("passes axe accessibility test for children component", async () => {
@@ -120,11 +126,11 @@ describe("Link", () => {
120
126
 
121
127
  it("throws an error if text is passed but no url is passed", () => {
122
128
  expect(() => render(<Link>Test</Link>)).toThrowError(
123
- "Link needs prop 'href'"
129
+ "`Link` needs the `href` prop."
124
130
  );
125
131
  });
126
132
 
127
- it("throws an error if more than one child is passed", () => {
133
+ it("throws an error if more than one child element is passed", () => {
128
134
  expect(() =>
129
135
  render(
130
136
  <Link>
@@ -139,6 +145,101 @@ describe("Link", () => {
139
145
  ).toThrowError("Please pass only one child into `Link`.");
140
146
  });
141
147
 
148
+ it("renders the UI snapshot correctly", () => {
149
+ const standard = renderer
150
+ .create(
151
+ <Link href="#passed-in-link" id="standard-link" type={LinkTypes.Action}>
152
+ Standard
153
+ </Link>
154
+ )
155
+ .toJSON();
156
+ const typeForwards = renderer
157
+ .create(
158
+ <Link
159
+ href="#passed-in-link"
160
+ id="forwards-link"
161
+ type={LinkTypes.Forwards}
162
+ >
163
+ Forwards
164
+ </Link>
165
+ )
166
+ .toJSON();
167
+ const typeBackwards = renderer
168
+ .create(
169
+ <Link
170
+ href="#passed-in-link"
171
+ id="backwards-link"
172
+ type={LinkTypes.Backwards}
173
+ >
174
+ Backwards
175
+ </Link>
176
+ )
177
+ .toJSON();
178
+ const typeExternal = renderer
179
+ .create(
180
+ <Link
181
+ href="#passed-in-link"
182
+ id="external-link"
183
+ type={LinkTypes.External}
184
+ >
185
+ External
186
+ </Link>
187
+ )
188
+ .toJSON();
189
+ const typeButton = renderer
190
+ .create(
191
+ <Link href="#passed-in-link" id="button-link" type={LinkTypes.Button}>
192
+ Button
193
+ </Link>
194
+ )
195
+ .toJSON();
196
+ const withIconChild = renderer
197
+ .create(
198
+ <Link href="#passed-in-link" id="icon-link" type={LinkTypes.Action}>
199
+ <Icon
200
+ align={IconAlign.Left}
201
+ className="more-link"
202
+ iconRotation={IconRotationTypes.Rotate0}
203
+ id="link-icon"
204
+ name={IconNames.Download}
205
+ />
206
+ Download
207
+ </Link>
208
+ )
209
+ .toJSON();
210
+ const withAchorChild = renderer
211
+ .create(
212
+ <Link id="anchor-link" type={LinkTypes.Action}>
213
+ <a href="#existing-anchor-tag">check link</a>
214
+ </Link>
215
+ )
216
+ .toJSON();
217
+ const withAchorChildAndIcon = renderer
218
+ .create(
219
+ <Link id="anchor-icon-link" type={LinkTypes.Action}>
220
+ <>
221
+ <Icon
222
+ align={IconAlign.Left}
223
+ id="link-icon"
224
+ name={IconNames.Check}
225
+ size={IconSizes.Small}
226
+ />
227
+ <a href="#existing-anchor-tag">check link</a>
228
+ </>
229
+ </Link>
230
+ )
231
+ .toJSON();
232
+
233
+ expect(standard).toMatchSnapshot();
234
+ expect(typeForwards).toMatchSnapshot();
235
+ expect(typeBackwards).toMatchSnapshot();
236
+ expect(typeExternal).toMatchSnapshot();
237
+ expect(typeButton).toMatchSnapshot();
238
+ expect(withIconChild).toMatchSnapshot();
239
+ expect(withAchorChild).toMatchSnapshot();
240
+ expect(withAchorChildAndIcon).toMatchSnapshot();
241
+ });
242
+
142
243
  // TODO:
143
244
  // it("Passes the ref to the input element", () => {
144
245
  // const ref = React.createRef<HTMLAnchorElement>();