@nypl/design-system-react-components 0.25.8 → 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 (250) hide show
  1. package/CHANGELOG.md +45 -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 +3 -2
  10. package/dist/components/Form/Form.d.ts +2 -2
  11. package/dist/components/Heading/Heading.d.ts +7 -3
  12. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  13. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  14. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  15. package/dist/components/Icons/Icon.d.ts +4 -4
  16. package/dist/components/Icons/IconSvgs.d.ts +0 -21
  17. package/dist/components/Icons/IconTypes.d.ts +0 -23
  18. package/dist/components/Image/Image.d.ts +11 -3
  19. package/dist/components/Logo/Logo.d.ts +28 -0
  20. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  21. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  22. package/dist/components/Modal/Modal.d.ts +0 -4
  23. package/dist/components/Notification/Notification.d.ts +2 -2
  24. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  25. package/dist/components/Radio/Radio.d.ts +6 -5
  26. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
  27. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  28. package/dist/components/Select/Select.d.ts +3 -2
  29. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  30. package/dist/components/Slider/Slider.d.ts +3 -2
  31. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  32. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  33. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  34. package/dist/components/Table/Table.d.ts +23 -0
  35. package/dist/components/Template/Template.d.ts +8 -3
  36. package/dist/components/Text/Text.d.ts +2 -2
  37. package/dist/components/TextInput/TextInput.d.ts +4 -3
  38. package/dist/components/Toggle/Toggle.d.ts +3 -2
  39. package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
  40. package/dist/design-system-react-components.cjs.development.js +5630 -5692
  41. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  42. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  43. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  44. package/dist/design-system-react-components.esm.js +4304 -4362
  45. package/dist/design-system-react-components.esm.js.map +1 -1
  46. package/dist/index.d.ts +6 -4
  47. package/dist/styles.css +2 -2
  48. package/dist/theme/components/button.d.ts +0 -12
  49. package/dist/theme/components/card.d.ts +14 -2
  50. package/dist/theme/components/customTable.d.ts +47 -0
  51. package/dist/theme/components/fieldset.d.ts +2 -2
  52. package/dist/theme/components/global.d.ts +1 -1
  53. package/dist/theme/components/heading.d.ts +4 -0
  54. package/dist/theme/components/label.d.ts +1 -1
  55. package/dist/theme/components/link.d.ts +14 -1
  56. package/dist/theme/components/list.d.ts +0 -2
  57. package/dist/theme/components/logo.d.ts +4 -0
  58. package/dist/theme/components/searchBar.d.ts +7 -13
  59. package/dist/theme/components/select.d.ts +1 -0
  60. package/dist/theme/components/structuredContent.d.ts +33 -0
  61. package/dist/theme/components/template.d.ts +10 -10
  62. package/dist/theme/components/textInput.d.ts +2 -0
  63. package/dist/theme/components/toggle.d.ts +8 -5
  64. package/dist/utils/utils.d.ts +10 -0
  65. package/package.json +1 -2
  66. package/src/__tests__/utils/utils.test.ts +23 -1
  67. package/src/components/Accordion/Accordion.stories.mdx +14 -12
  68. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  69. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  70. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  71. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +30 -11
  72. package/src/components/Button/Button.stories.mdx +93 -48
  73. package/src/components/Button/Button.test.tsx +0 -12
  74. package/src/components/Button/Button.tsx +7 -7
  75. package/src/components/Button/ButtonTypes.tsx +0 -1
  76. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  77. package/src/components/Card/Card.stories.mdx +186 -71
  78. package/src/components/Card/Card.test.tsx +45 -22
  79. package/src/components/Card/Card.tsx +17 -5
  80. package/src/components/Card/__snapshots__/Card.test.tsx.snap +8 -2
  81. package/src/components/Chakra/Box.stories.mdx +3 -3
  82. package/src/components/Chakra/Center.stories.mdx +5 -5
  83. package/src/components/Chakra/Grid.stories.mdx +3 -3
  84. package/src/components/Chakra/Stack.stories.mdx +2 -2
  85. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  86. package/src/components/Checkbox/Checkbox.tsx +13 -8
  87. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  88. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  89. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  90. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  91. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  92. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  93. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  94. package/src/components/DatePicker/DatePicker.tsx +10 -6
  95. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +36 -18
  96. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  97. package/src/components/Form/Form.stories.mdx +49 -41
  98. package/src/components/Form/Form.tsx +5 -4
  99. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  100. package/src/components/Heading/Heading.stories.mdx +59 -23
  101. package/src/components/Heading/Heading.test.tsx +82 -18
  102. package/src/components/Heading/Heading.tsx +31 -31
  103. package/src/components/Heading/HeadingTypes.tsx +6 -6
  104. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  105. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  106. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  107. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  108. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  109. package/src/components/Hero/Hero.stories.mdx +72 -53
  110. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  111. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  112. package/src/components/Icons/Icon.stories.mdx +77 -76
  113. package/src/components/Icons/Icon.tsx +4 -5
  114. package/src/components/Icons/IconSvgs.tsx +0 -42
  115. package/src/components/Icons/IconTypes.tsx +0 -24
  116. package/src/components/Image/Image.stories.mdx +66 -18
  117. package/src/components/Image/Image.tsx +21 -10
  118. package/src/components/Label/Label.stories.mdx +20 -19
  119. package/src/components/Link/Link.stories.mdx +102 -51
  120. package/src/components/Link/Link.test.tsx +38 -8
  121. package/src/components/Link/Link.tsx +19 -12
  122. package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
  123. package/src/components/List/List.stories.mdx +36 -24
  124. package/src/components/Logo/Logo.stories.mdx +220 -0
  125. package/src/components/Logo/Logo.test.tsx +98 -0
  126. package/src/components/Logo/Logo.tsx +97 -0
  127. package/src/components/Logo/LogoSvgs.tsx +34 -0
  128. package/src/components/Logo/LogoTypes.tsx +32 -0
  129. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  130. package/src/components/Modal/Modal.stories.mdx +20 -5
  131. package/src/components/Modal/Modal.tsx +2 -8
  132. package/src/components/Notification/Notification.stories.mdx +61 -38
  133. package/src/components/Notification/Notification.tsx +9 -4
  134. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
  135. package/src/components/Pagination/Pagination.stories.mdx +17 -6
  136. package/src/components/Pagination/Pagination.tsx +1 -1
  137. package/src/components/Placeholder/Placeholder.tsx +7 -14
  138. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
  139. package/src/components/Radio/Radio.stories.mdx +39 -19
  140. package/src/components/Radio/Radio.tsx +13 -9
  141. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  142. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  143. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  144. package/src/components/SearchBar/SearchBar.Test.tsx +58 -10
  145. package/src/components/SearchBar/SearchBar.stories.mdx +109 -30
  146. package/src/components/SearchBar/SearchBar.tsx +53 -32
  147. package/src/components/Select/Select.stories.mdx +48 -14
  148. package/src/components/Select/Select.tsx +16 -10
  149. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  150. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  151. package/src/components/Slider/Slider.stories.mdx +72 -22
  152. package/src/components/Slider/Slider.tsx +15 -10
  153. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  154. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  155. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  156. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  157. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  158. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  159. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  160. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  161. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  162. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  163. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  164. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  165. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  166. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  167. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  168. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  169. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  170. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  171. package/src/components/Table/Table.stories.mdx +66 -0
  172. package/src/components/Table/Table.test.tsx +60 -0
  173. package/src/components/Table/Table.tsx +116 -0
  174. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  175. package/src/components/Tabs/Tabs.test.tsx +1 -1
  176. package/src/components/Template/Template.stories.mdx +56 -47
  177. package/src/components/Template/Template.test.tsx +65 -5
  178. package/src/components/Template/Template.tsx +35 -5
  179. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  180. package/src/components/Text/Text.stories.mdx +33 -11
  181. package/src/components/Text/Text.tsx +2 -2
  182. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  183. package/src/components/TextInput/TextInput.test.tsx +96 -0
  184. package/src/components/TextInput/TextInput.tsx +12 -8
  185. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  186. package/src/components/Toggle/Toggle.stories.mdx +33 -9
  187. package/src/components/Toggle/Toggle.tsx +14 -9
  188. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
  189. package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
  190. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
  191. package/src/docs/Chakra.stories.mdx +5 -8
  192. package/src/docs/Intro.stories.mdx +2 -2
  193. package/src/index.ts +5 -4
  194. package/src/styles/base/_03-base.scss +1 -1
  195. package/src/styles/base/_place-holder.scss +7 -7
  196. package/src/styles.scss +1 -5
  197. package/src/theme/components/breadcrumb.ts +3 -3
  198. package/src/theme/components/button.ts +5 -12
  199. package/src/theme/components/card.ts +5 -2
  200. package/src/theme/components/checkbox.ts +1 -1
  201. package/src/theme/components/customTable.ts +50 -0
  202. package/src/theme/components/datePicker.ts +1 -1
  203. package/src/theme/components/global.ts +6 -6
  204. package/src/theme/components/heading.ts +13 -11
  205. package/src/theme/components/helperErrorText.ts +1 -1
  206. package/src/theme/components/image.ts +1 -1
  207. package/src/theme/components/link.ts +17 -5
  208. package/src/theme/components/list.ts +1 -3
  209. package/src/theme/components/logo.ts +54 -0
  210. package/src/theme/components/notification.ts +1 -1
  211. package/src/theme/components/searchBar.ts +7 -13
  212. package/src/theme/components/select.ts +1 -0
  213. package/src/theme/components/statusBadge.ts +1 -1
  214. package/src/theme/components/structuredContent.ts +54 -0
  215. package/src/theme/components/template.ts +10 -10
  216. package/src/theme/components/text.ts +6 -6
  217. package/src/theme/components/textInput.ts +1 -0
  218. package/src/theme/components/toggle.ts +9 -5
  219. package/src/theme/components/videoPlayer.ts +0 -2
  220. package/src/theme/foundations/global.ts +2 -2
  221. package/src/theme/foundations/typography.ts +84 -12
  222. package/src/theme/index.ts +6 -0
  223. package/src/utils/componentCategories.ts +1 -1
  224. package/src/utils/utils.ts +17 -0
  225. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  226. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  227. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  228. package/dist/components/Input/Input.d.ts +0 -36
  229. package/dist/components/Input/Input.stories.d.ts +0 -29
  230. package/dist/components/Input/InputTypes.d.ts +0 -6
  231. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  232. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  233. package/dist/helpers/getCSSVariable.d.ts +0 -1
  234. package/dist/interfaces.d.ts +0 -3
  235. package/dist/utils/bem.d.ts +0 -1
  236. package/src/__tests__/utils/bem.test.ts +0 -37
  237. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  238. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  239. package/src/components/CardEdition/CardEdition.tsx +0 -60
  240. package/src/components/CardEdition/_CardEdition.scss +0 -137
  241. package/src/components/Input/Input.stories.tsx +0 -133
  242. package/src/components/Input/Input.test.tsx +0 -266
  243. package/src/components/Input/Input.tsx +0 -81
  244. package/src/components/Input/InputTypes.tsx +0 -8
  245. package/src/components/Input/_Input.scss +0 -78
  246. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  247. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  248. package/src/helpers/getCSSVariable.tsx +0 -5
  249. package/src/interfaces.ts +0 -3
  250. package/src/utils/bem.ts +0 -44
@@ -1,395 +0,0 @@
1
- import * as React from "react";
2
- import { render, screen } from "@testing-library/react";
3
- import { axe } from "jest-axe";
4
-
5
- import CardEdition from "./CardEdition";
6
- import Link from "../Link/Link";
7
- import { LinkTypes } from "../Link/LinkTypes";
8
- import Heading from "../Heading/Heading";
9
- import { HeadingLevels } from "../Heading/HeadingTypes";
10
- import Image from "../Image/Image";
11
- import Button from "../Button/Button";
12
- import { ButtonTypes } from "../Button/ButtonTypes";
13
- import Icon from "../Icons/Icon";
14
- import { IconRotationTypes, IconNames, IconAlign } from "../Icons/IconTypes";
15
-
16
- describe("CardEdition Accessibility", () => {
17
- const regularCard = (
18
- <CardEdition
19
- id="cardID"
20
- heading={
21
- <Heading
22
- level={HeadingLevels.Three}
23
- id="heading1"
24
- text={"Optional Header"}
25
- />
26
- }
27
- image={<Image src="https://placeimg.com/400/200/arch" alt={""} />}
28
- ctas={
29
- <Button
30
- onClick={function () {
31
- console.log(this);
32
- }}
33
- id="button1"
34
- buttonType={ButtonTypes.Primary}
35
- type="submit"
36
- >
37
- Example CTA
38
- </Button>
39
- }
40
- footer={<>Optional footer</>}
41
- >
42
- middle column content
43
- </CardEdition>
44
- );
45
-
46
- it("passes axe accessibility test", async () => {
47
- const { container } = render(regularCard);
48
- expect(await axe(container)).toHaveNoViolations();
49
- });
50
- });
51
-
52
- describe("CardEdition", () => {
53
- const regularCard = (
54
- <CardEdition
55
- id="cardID"
56
- heading={
57
- <Heading
58
- level={HeadingLevels.Three}
59
- id="heading1"
60
- text={"Optional Header"}
61
- />
62
- }
63
- image={<Image src="https://placeimg.com/400/200/arch" alt={""} />}
64
- ctas={
65
- <Button
66
- onClick={function () {
67
- console.log(this);
68
- }}
69
- id="button1"
70
- buttonType={ButtonTypes.Primary}
71
- type="submit"
72
- >
73
- Example CTA
74
- </Button>
75
- }
76
- footer={<>Optional footer</>}
77
- >
78
- middle column content
79
- </CardEdition>
80
- );
81
-
82
- const cardWithExtendedStyles = (
83
- <CardEdition
84
- id="card#1"
85
- className="edition-card"
86
- heading={
87
- <Heading
88
- level={HeadingLevels.Two}
89
- id="editioncardheading1"
90
- text={"2004 Edition"}
91
- />
92
- }
93
- image={<Image src="https://placeimg.com/300/400/arch" alt={""} />}
94
- ctas={
95
- <div className="edition-card__ctas">
96
- <Link type={LinkTypes.Button} href="blah">
97
- Read Online
98
- </Link>
99
- <div className="edition-card__download">
100
- <Link href="#url" type={LinkTypes.Action}>
101
- <Icon
102
- name={IconNames.Download}
103
- // blockName="more-link"
104
- align={IconAlign.Left}
105
- iconRotation={IconRotationTypes.Rotate0}
106
- />
107
- Download
108
- </Link>
109
- </div>
110
- </div>
111
- }
112
- >
113
- <>
114
- <div>Published in New York by Random House</div>
115
- <div>Written in English</div>
116
- <div>
117
- License: Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
118
- International
119
- </div>
120
- </>
121
- </CardEdition>
122
- );
123
-
124
- const cardWithNoCTAs = (
125
- <CardEdition
126
- id="card#1"
127
- image={<Image src="https://placeimg.com/300/400/arch" alt={""} />}
128
- className="edition-card"
129
- heading={
130
- <Heading
131
- level={HeadingLevels.Two}
132
- id="editioncardheading1"
133
- text={"2004 Edition"}
134
- />
135
- }
136
- >
137
- <>
138
- <div>Published in New York by Random House</div>
139
- <div>Written in English</div>
140
- <div>Under Creative Commons License</div>
141
- </>
142
- </CardEdition>
143
- );
144
-
145
- const cardWithNoContent = (
146
- <CardEdition
147
- id="card#1"
148
- className="edition-card"
149
- image={<Image src="https://placeimg.com/300/400/arch" alt={""} />}
150
- heading={
151
- <Heading
152
- level={HeadingLevels.Two}
153
- id="editioncardheading1"
154
- url="#edition-link"
155
- text={"2004 Edition"}
156
- />
157
- }
158
- ctas={
159
- <div className="edition-card__ctas">
160
- <Link type={LinkTypes.Button} href="blah">
161
- Read Online
162
- </Link>
163
- <div className="edition-card__download">
164
- <Link href="#url" type={LinkTypes.Action}>
165
- <Icon
166
- name={IconNames.Download}
167
- // blockName="more-link"
168
- align={IconAlign.Left}
169
- iconRotation={IconRotationTypes.Rotate0}
170
- />
171
- Download
172
- </Link>
173
- </div>
174
- </div>
175
- }
176
- ></CardEdition>
177
- );
178
-
179
- const cardWithNoImage = (
180
- <CardEdition
181
- id="card#1"
182
- className="edition-card"
183
- heading={
184
- <Heading
185
- level={HeadingLevels.Two}
186
- id="editioncardheading1"
187
- url="#edition-link"
188
- text={"2004 Edition"}
189
- />
190
- }
191
- ctas={
192
- <div className="edition-card__ctas">
193
- <Link type={LinkTypes.Button} href="blah">
194
- Read Online
195
- </Link>
196
- <div className="edition-card__download">
197
- <Link href="#url" type={LinkTypes.Action}>
198
- <Icon
199
- name={IconNames.Download}
200
- align={IconAlign.Left}
201
- iconRotation={IconRotationTypes.Rotate0}
202
- />
203
- Download
204
- </Link>
205
- </div>
206
- </div>
207
- }
208
- >
209
- middle column content
210
- </CardEdition>
211
- );
212
-
213
- const cardWithNoHeader = (
214
- <CardEdition
215
- id="card#1"
216
- className="edition-card"
217
- image={<Image src="https://placeimg.com/300/400/arch" alt={""} />}
218
- ctas={
219
- <div className="edition-card__ctas">
220
- <Link type={LinkTypes.Button} href="blah">
221
- Read Online
222
- </Link>
223
- <div className="edition-card__download">
224
- <Link href="#url" type={LinkTypes.Action}>
225
- <Icon
226
- name={IconNames.Download}
227
- align={IconAlign.Left}
228
- iconRotation={IconRotationTypes.Rotate0}
229
- />
230
- Download
231
- </Link>
232
- </div>
233
- </div>
234
- }
235
- footer={<>Optional footer</>}
236
- >
237
- middle column content
238
- </CardEdition>
239
- );
240
-
241
- const cardWithNoFooter = (
242
- <CardEdition
243
- id="card#1"
244
- className="edition-card"
245
- heading={
246
- <Heading
247
- level={HeadingLevels.Two}
248
- id="editioncardheading1"
249
- url="#edition-link"
250
- text={"2004 Edition"}
251
- />
252
- }
253
- image={<Image src="https://placeimg.com/300/400/arch" alt={""} />}
254
- ctas={
255
- <div className="edition-card__ctas">
256
- <Link type={LinkTypes.Button} href="blah">
257
- Read Online
258
- </Link>
259
- <div className="edition-card__download">
260
- <Link href="#url" type={LinkTypes.Action}>
261
- <Icon
262
- name={IconNames.Download}
263
- align={IconAlign.Left}
264
- iconRotation={IconRotationTypes.Rotate0}
265
- />
266
- Download
267
- </Link>
268
- </div>
269
- </div>
270
- }
271
- >
272
- middle column content
273
- </CardEdition>
274
- );
275
-
276
- it("Generates a Card with a header, footer, image, middle content, and CTAs", () => {
277
- const card = render(regularCard);
278
- expect(
279
- card.container.querySelector(".card-edition__heading")
280
- ).toBeInTheDocument();
281
- expect(
282
- card.container.querySelector(".card-edition__image")
283
- ).toBeInTheDocument();
284
- expect(
285
- card.container.querySelector(".card-edition__content")
286
- ).toBeInTheDocument();
287
- expect(
288
- card.container.querySelector(".card-edition__ctas")
289
- ).toBeInTheDocument();
290
- expect(
291
- card.container.querySelector(".card-edition__footer")
292
- ).toBeInTheDocument();
293
- });
294
-
295
- it("Generates a Card with variable data", () => {
296
- const card = render(cardWithExtendedStyles);
297
- expect(card.container.querySelector("h2")).toBeInTheDocument();
298
- expect(
299
- screen.getByText("Published in New York by Random House")
300
- ).toBeInTheDocument();
301
- expect(screen.getByText("Written in English")).toBeInTheDocument();
302
- expect(
303
- screen.getByText(
304
- "License: Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International"
305
- )
306
- ).toBeInTheDocument();
307
- // expect(screen.findAllByRole("link")).toHaveLength(2);
308
- });
309
-
310
- it("Generates a card without a CTA block if one isn't provided", () => {
311
- const card = render(cardWithNoCTAs);
312
- expect(
313
- card.container.querySelector(".card-edition__heading")
314
- ).toBeInTheDocument();
315
- expect(
316
- card.container.querySelector(".card-edition__image")
317
- ).toBeInTheDocument();
318
- expect(
319
- card.container.querySelector(".card-edition__content")
320
- ).toBeInTheDocument();
321
- expect(
322
- card.container.querySelector(".card-edition__ctas")
323
- ).not.toBeInTheDocument();
324
- });
325
-
326
- it("Generates a card without a content block if one isn't provided", () => {
327
- const card = render(cardWithNoContent);
328
- expect(
329
- card.container.querySelector(".card-edition__heading")
330
- ).toBeInTheDocument();
331
- expect(
332
- card.container.querySelector(".card-edition__image")
333
- ).toBeInTheDocument();
334
- expect(
335
- card.container.querySelector(".card-edition__content")
336
- ).not.toBeInTheDocument();
337
- expect(
338
- card.container.querySelector(".card-edition__ctas")
339
- ).toBeInTheDocument();
340
- });
341
-
342
- it("Generates a card without an image block if no image is provided", () => {
343
- const card = render(cardWithNoImage);
344
- expect(
345
- card.container.querySelector(".card-edition__heading")
346
- ).toBeInTheDocument();
347
- expect(
348
- card.container.querySelector(".card-edition__image")
349
- ).not.toBeInTheDocument();
350
- expect(
351
- card.container.querySelector(".card-edition__content")
352
- ).toBeInTheDocument();
353
- expect(
354
- card.container.querySelector(".card-edition__ctas")
355
- ).toBeInTheDocument();
356
- });
357
-
358
- it("Generates a card without a header block if one isn't provided", () => {
359
- const card = render(cardWithNoHeader);
360
- expect(
361
- card.container.querySelector(".card-edition__heading")
362
- ).not.toBeInTheDocument();
363
- expect(
364
- card.container.querySelector(".card-edition__image")
365
- ).toBeInTheDocument();
366
- expect(
367
- card.container.querySelector(".card-edition__content")
368
- ).toBeInTheDocument();
369
- expect(
370
- card.container.querySelector(".card-edition__ctas")
371
- ).toBeInTheDocument();
372
- expect(
373
- card.container.querySelector(".card-edition__footer")
374
- ).toBeInTheDocument();
375
- });
376
-
377
- it("Generates a card without a footer block if one isn't provided", () => {
378
- const card = render(cardWithNoFooter);
379
- expect(
380
- card.container.querySelector(".card-edition__heading")
381
- ).toBeInTheDocument();
382
- expect(
383
- card.container.querySelector(".card-edition__image")
384
- ).toBeInTheDocument();
385
- expect(
386
- card.container.querySelector(".card-edition__content")
387
- ).toBeInTheDocument();
388
- expect(
389
- card.container.querySelector(".card-edition__ctas")
390
- ).toBeInTheDocument();
391
- expect(
392
- card.container.querySelector(".card-edition__footer")
393
- ).not.toBeInTheDocument();
394
- });
395
- });
@@ -1,60 +0,0 @@
1
- import * as React from "react";
2
- import bem from "../../utils/bem";
3
-
4
- interface CardEditionProps {
5
- /** ClassName that appears in addition to "card" */
6
- className?: string;
7
- /** BlockName for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
8
- blockName?: string;
9
- /** Calls to Action for the card, such as "download" on a card for a book */
10
- ctas?: React.ReactNode;
11
- /** Footer that appears within the card but below the three columns within it */
12
- footer?: React.ReactNode;
13
- /** Heading that appears within the card but above the three columns within it */
14
- heading?: React.ReactNode;
15
- /** ID that other components can cross reference for accessibility purposes */
16
- id?: string;
17
- /** First column within the card */
18
- image?: React.ReactNode;
19
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
20
- modifiers?: string[];
21
- }
22
-
23
- export default function CardEdition(
24
- props: React.PropsWithChildren<CardEditionProps>
25
- ) {
26
- const {
27
- blockName,
28
- children,
29
- className,
30
- ctas,
31
- footer,
32
- heading,
33
- id,
34
- image,
35
- modifiers = [],
36
- } = props;
37
- const baseClass = "card-edition";
38
-
39
- return (
40
- <div className={bem(baseClass, modifiers, blockName, [className])} id={id}>
41
- {heading && (
42
- <div className={bem("heading", modifiers, baseClass)}>{heading}</div>
43
- )}
44
- <div className={bem("columns", modifiers, baseClass)}>
45
- {image && (
46
- <div className={bem("image", modifiers, baseClass)}>{image}</div>
47
- )}
48
- {children && (
49
- <div className={bem("content", modifiers, baseClass)}>{children}</div>
50
- )}
51
- {ctas && (
52
- <div className={bem("ctas", modifiers, baseClass)}>{ctas}</div>
53
- )}
54
- </div>
55
- {footer && (
56
- <div className={bem("footer", modifiers, baseClass)}>{footer}</div>
57
- )}
58
- </div>
59
- );
60
- }
@@ -1,137 +0,0 @@
1
- .card-edition {
2
- margin-bottom: var(--nypl-space-s);
3
-
4
- align-items: flex-start;
5
- border: 1px solid var(--nypl-colors-ui-gray-light-cool);
6
- border-radius: 5px;
7
- display: flex;
8
- flex-flow: column wrap;
9
- padding: var(--nypl-space-s) var(--nypl-space-l);
10
-
11
- &__heading,
12
- &__footer {
13
- flex: 100%;
14
- }
15
-
16
- &__columns {
17
- display: flex;
18
- flex-flow: column wrap;
19
- justify-content: space-between;
20
- width: 100%;
21
-
22
- @include breakpoint($nypl-breakpoint-medium) {
23
- flex-flow: row wrap;
24
- }
25
- }
26
-
27
- &__columns + &__footer {
28
- margin-top: var(--nypl-space-xs);
29
- }
30
-
31
- &__image {
32
- margin-bottom: var(--nypl-space-s);
33
-
34
- align-items: center;
35
- background-color: var(--nypl-colors-ui-gray-x-light-cool);
36
- display: flex;
37
- flex: 0 0 150px;
38
- height: 150px;
39
- justify-content: center;
40
-
41
- .image {
42
- max-height: 100%;
43
- max-width: 100%;
44
- }
45
-
46
- @include breakpoint($nypl-breakpoint-medium) {
47
- margin-bottom: 0;
48
- margin-right: var(--nypl-space-s);
49
-
50
- align-self: center;
51
- width: 150px;
52
- }
53
- }
54
-
55
- &__content {
56
- margin-bottom: var(--nypl-space-s);
57
-
58
- flex: 1 1;
59
-
60
- @include breakpoint($nypl-breakpoint-medium) {
61
- margin-right: var(--nypl-space-s);
62
- margin-bottom: 0;
63
- }
64
- }
65
-
66
- &__ctas {
67
- flex: 0 1 20%;
68
-
69
- @include breakpoint($nypl-breakpoint-medium) {
70
- margin-right: var(--nypl-space-s);
71
- }
72
- }
73
-
74
- &__content + &__ctas {
75
- margin-right: var(--nypl-space-s);
76
- }
77
- }
78
-
79
- // Stories-only styles
80
- .sb-show-main {
81
- .var-docs {
82
- padding: 0 0 var(--nypl-space-s) 0;
83
- }
84
-
85
- .example-card-edition {
86
- .card__content {
87
- > * {
88
- margin-bottom: var(--nypl-space-xxs);
89
- }
90
- }
91
-
92
- .book__callout {
93
- font-size: var(--nypl-fontSizes-1);
94
- font-weight: 400;
95
- line-height: 1.15;
96
- margin: 0 0 0.5em;
97
- width: auto;
98
-
99
- &__link {
100
- color: inherit;
101
-
102
- &:hover {
103
- color: inherit;
104
- }
105
- }
106
-
107
- /* stylelint-disable */
108
- font-style: italic;
109
- font-weight: 300;
110
- /* stylelint-enable */
111
- }
112
-
113
- .card__ctas {
114
- align-items: flex-end;
115
- display: flex;
116
- flex-flow: row wrap;
117
- justify-content: center;
118
- text-align: center;
119
-
120
- .button {
121
- width: 100%;
122
- }
123
-
124
- > * {
125
- margin-bottom: var(--nypl-space-xxs);
126
- }
127
- }
128
-
129
- .book__filetype {
130
- margin-bottom: var(--nypl-space-s);
131
- }
132
-
133
- .book__description {
134
- font-style: italic;
135
- }
136
- }
137
- }