@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
@@ -0,0 +1,694 @@
1
+ import {
2
+ Meta,
3
+ Story,
4
+ Canvas,
5
+ ArgsTable,
6
+ Preview,
7
+ Description,
8
+ } from "@storybook/addon-docs/blocks";
9
+ import { withDesign } from "storybook-addon-designs";
10
+ import { action } from "@storybook/addon-actions";
11
+
12
+ import Button from "../Button/Button";
13
+ import { ButtonTypes } from "../Button/ButtonTypes";
14
+ import Card, { CardImage, CardHeading, CardContent, CardActions } from "./Card";
15
+ import { CardImageRatios, CardImageSizes, CardLayouts } from "./CardTypes";
16
+ import Link from "../Link/Link";
17
+ import Heading from "../Heading/Heading";
18
+ import HorizontalRule from "../HorizontalRule/HorizontalRule";
19
+ import { LinkTypes } from "../Link/LinkTypes";
20
+ import { HeadingDisplaySizes, HeadingLevels } from "../Heading/HeadingTypes";
21
+ import Icon from "../Icons/Icon";
22
+ import Image from "../Image/Image";
23
+ import { getCategory } from "../../utils/componentCategories";
24
+
25
+ <Meta
26
+ title={getCategory("Card")}
27
+ component={Card}
28
+ decorators={[withDesign]}
29
+ parameters={{
30
+ design: {
31
+ type: "figma",
32
+ url:
33
+ "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=17167%3A58131",
34
+ },
35
+ }}
36
+ argTypes={{
37
+ blockName: { table: { disable: true } },
38
+ className: { table: { disable: true } },
39
+ modifiers: { table: { disable: true } },
40
+ id: { table: { disable: true } },
41
+ imageComponent: { table: { disable: true } },
42
+ layout: { table: { disable: false } },
43
+ imageSrc: { table: { disable: false } },
44
+ imageAlt: { table: { disable: false } },
45
+ imageSize: { table: { disable: false } },
46
+ imageAspectRatio: { table: { disable: false } },
47
+ imageAtEnd: { table: { disable: false } },
48
+ border: { table: { disable: false } },
49
+ padding: { table: { disable: false } },
50
+ backgroundColor: { control: { type: "color" } },
51
+ foregroundColor: { control: { type: "color" } },
52
+ }}
53
+ />
54
+
55
+ # Card
56
+
57
+ | Component Version | DS Version |
58
+ | ----------------- | ---------- |
59
+ | Added | `0.24.0` |
60
+ | Latest | `0.24.1` |
61
+
62
+ <Description of={Card} />
63
+
64
+ The `Card` component is viewed as a contained, stand-alone element. It is highly configurable and composable. It can be shown with or without an image and the content area is composed using Card-specific child components: `CardHeading`, `CardActions` and `CardContent`. These child components can be arranged in any order and each child component may be used multiple times within the content area. Although a `Card` is a self-contained unit, `Card` components are often grouped together and displayed in some type of grid layout.
65
+
66
+ #### CardHeading
67
+
68
+ The `CardHeading` component mirrors the standard DS `Heading` component and accepts the [same props](https://nypl.github.io/nypl-design-system/storybook-static/?path=/docs/heading--heading-props).
69
+
70
+ #### CardActions
71
+
72
+ The `CardActions` component is used to display "call to action" (CTA) buttons and links for the card. The DS `Button` and `Link` components should be passed as children into the `CardActions` component.
73
+
74
+ #### CardContent
75
+
76
+ The `CardContent` component should be used to display all content other than headings and CTAs.
77
+
78
+ <Preview withToolbar>
79
+ <Story
80
+ name="Card Props"
81
+ args={{
82
+ id: "custom-card",
83
+ layout: CardLayouts.Row,
84
+ imageSrc: "https://placeimg.com/400/300/animals",
85
+ imageAspectRatio: CardImageRatios.ThreeByFour,
86
+ imageAlt: "Alt text",
87
+ }}
88
+ >
89
+ {(args) => (
90
+ <Card {...args}>
91
+ <CardHeading level={HeadingLevels.Two} id="heading1">
92
+ Optional Header
93
+ </CardHeading>
94
+ <CardHeading level={HeadingLevels.Four} id="heading2">
95
+ Sollicitudin Lorem Tortor Purus Ornare
96
+ </CardHeading>
97
+ <CardContent>
98
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
99
+ libero, a pharetra augue. Nullam quis risus eget urna mollis ornare
100
+ vel eu leo. Nulla vitae elit libero, a pharetra augue.
101
+ </CardContent>
102
+ <CardActions topBorder bottomBorder>
103
+ <Button
104
+ onClick={action("clicked")}
105
+ id="button1"
106
+ buttonType={ButtonTypes.Primary}
107
+ type="submit"
108
+ >
109
+ Primary
110
+ </Button>
111
+ <Button
112
+ onClick={action("clicked")}
113
+ id="button2"
114
+ buttonType={ButtonTypes.Secondary}
115
+ type="submit"
116
+ >
117
+ Secondary
118
+ </Button>
119
+ </CardActions>
120
+ <CardActions>
121
+ <Link href="javascript:void(0);">#hash1</Link>,
122
+ <Link href="javascript:void(0);">#hash2</Link>,
123
+ <Link href="javascript:void(0);">#hash3</Link>
124
+ </CardActions>
125
+ </Card>
126
+ )}
127
+ </Story>
128
+ </Preview>
129
+
130
+ <ArgsTable story="Card Props" />
131
+
132
+ ## Image Position
133
+
134
+ By default, the image is always the first element within a `Card`. This means
135
+ the image is at the top of a `Card` with a column layout and on the left side of
136
+ a `Card` with a row layout. However, you can use the `imageAtEnd` prop to override
137
+ the default placement and move the image to the last element within a `Card`.
138
+
139
+ ### Column Cards
140
+
141
+ <Preview>
142
+ <Story name="Card Image Position">
143
+ <div
144
+ style={{
145
+ display: "grid",
146
+ "grid-gap": "2rem",
147
+ "grid-template-columns": "repeat(2, 1fr)",
148
+ }}
149
+ >
150
+ <Card
151
+ imageSrc="https://placeimg.com/400/200/animals"
152
+ imageAlt="Alt text"
153
+ imageAspectRatio={CardImageRatios.TwoByOne}
154
+ >
155
+ <CardHeading level={HeadingLevels.Three} id="heading1">
156
+ Image on Top (default)
157
+ </CardHeading>
158
+ <CardContent>
159
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
160
+ libero, a pharetra augue.
161
+ </CardContent>
162
+ </Card>
163
+ <Card
164
+ imageSrc="https://placeimg.com/410/210/animals"
165
+ imageAlt="Alt text"
166
+ imageAspectRatio={CardImageRatios.TwoByOne}
167
+ imageAtEnd
168
+ >
169
+ <CardHeading level={HeadingLevels.Three} id="heading1">
170
+ Image on Bottom
171
+ </CardHeading>
172
+ <CardContent>
173
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
174
+ libero, a pharetra augue.
175
+ </CardContent>
176
+ </Card>
177
+ </div>
178
+ </Story>
179
+ </Preview>
180
+
181
+ ### Row Cards
182
+
183
+ <Preview>
184
+ <div
185
+ style={{
186
+ display: "grid",
187
+ "grid-gap": "2rem",
188
+ "grid-template-columns": "repeat(1, 1fr)",
189
+ }}
190
+ >
191
+ <Card
192
+ layout={CardLayouts.Row}
193
+ center
194
+ imageSrc="https://placeimg.com/400/200/animals"
195
+ imageAlt="Alt text"
196
+ imageAspectRatio={CardImageRatios.TwoByOne}
197
+ >
198
+ <CardHeading level={HeadingLevels.Four} id="heading1">
199
+ Image on Left (default)
200
+ </CardHeading>
201
+ <CardContent>
202
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Sed
203
+ posuere consectetur est at lobortis. Cras justo odio, dapibus ac
204
+ facilisis in, egestas eget quam.
205
+ </CardContent>
206
+ </Card>
207
+ <Card
208
+ layout={CardLayouts.Row}
209
+ center
210
+ imageSrc="https://placeimg.com/410/210/animals"
211
+ imageAlt="Alt text"
212
+ imageAspectRatio={CardImageRatios.TwoByOne}
213
+ imageAtEnd
214
+ >
215
+ <CardHeading level={HeadingLevels.Four} id="heading2">
216
+ Image on Right
217
+ </CardHeading>
218
+ <CardContent>
219
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Sed
220
+ posuere consectetur est at lobortis. Cras justo odio, dapibus ac
221
+ facilisis in, egestas eget quam.
222
+ </CardContent>
223
+ </Card>
224
+ </div>
225
+ </Preview>
226
+
227
+ ## Image Size
228
+
229
+ By default, the image width is `100%` for a `Card` with a column layout and
230
+ `225px` for a `Card` with a row layout. However, you can use the `imageSize`
231
+ prop to override the default width.
232
+
233
+ ### Column Cards
234
+
235
+ <Preview>
236
+ <Story name="Card Image Size">
237
+ <div
238
+ style={{
239
+ display: "grid",
240
+ "grid-gap": "4rem",
241
+ "grid-template-columns": "repeat(1, 1fr)",
242
+ }}
243
+ >
244
+ <Card
245
+ center
246
+ imageSrc="https://placeimg.com/400/200/animals"
247
+ imageAlt="Alt text"
248
+ imageAspectRatio={CardImageRatios.Square}
249
+ imageSize={CardImageSizes.Small}
250
+ >
251
+ <CardHeading level={HeadingLevels.Three} id="heading1">
252
+ Small Image
253
+ </CardHeading>
254
+ <CardHeading level={HeadingLevels.Five} id="heading2">
255
+ Max-Width: 165px
256
+ </CardHeading>
257
+ <CardContent>
258
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
259
+ libero, a pharetra augue.
260
+ </CardContent>
261
+ </Card>
262
+ <HorizontalRule />
263
+ <Card
264
+ center
265
+ imageSrc="https://placeimg.com/400/200/animals"
266
+ imageAlt="Alt text"
267
+ imageAspectRatio={CardImageRatios.Square}
268
+ imageSize={CardImageSizes.Medium}
269
+ >
270
+ <CardHeading level={HeadingLevels.Three} id="heading1">
271
+ Medium Image
272
+ </CardHeading>
273
+ <CardHeading level={HeadingLevels.Five} id="heading2">
274
+ Max-Width: 225px
275
+ </CardHeading>
276
+ <CardContent>
277
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
278
+ libero, a pharetra augue.
279
+ </CardContent>
280
+ </Card>
281
+ <Card
282
+ center
283
+ imageSrc="https://placeimg.com/410/210/animals"
284
+ imageAlt="Alt text"
285
+ imageAspectRatio={CardImageRatios.Square}
286
+ imageSize={CardImageSizes.Large}
287
+ >
288
+ <CardHeading level={HeadingLevels.Three} id="heading1">
289
+ Large Image
290
+ </CardHeading>
291
+ <CardHeading level={HeadingLevels.Five} id="heading2">
292
+ Max-Width: 360px
293
+ </CardHeading>
294
+ <CardContent>
295
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
296
+ libero, a pharetra augue.
297
+ </CardContent>
298
+ </Card>
299
+ <Card
300
+ center
301
+ imageSrc="https://placeimg.com/410/210/animals"
302
+ imageAlt="Alt text"
303
+ imageAspectRatio={CardImageRatios.Square}
304
+ >
305
+ <CardHeading level={HeadingLevels.Three} id="heading1">
306
+ Default Image
307
+ </CardHeading>
308
+ <CardHeading level={HeadingLevels.Five} id="heading2">
309
+ Width: 100%
310
+ </CardHeading>
311
+ <CardContent>
312
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
313
+ libero, a pharetra augue.
314
+ </CardContent>
315
+ </Card>
316
+ </div>
317
+ </Story>
318
+ </Preview>
319
+
320
+ ### Row Cards
321
+
322
+ <Preview>
323
+ <div
324
+ style={{
325
+ display: "grid",
326
+ "grid-gap": "2rem",
327
+ "grid-template-columns": "repeat(1, 1fr)",
328
+ }}
329
+ >
330
+ <Card
331
+ layout={CardLayouts.Row}
332
+ center
333
+ imageSrc="https://placeimg.com/400/200/animals"
334
+ imageAlt="Alt text"
335
+ imageAspectRatio={CardImageRatios.TwoByOne}
336
+ imageSize={CardImageSizes.Small}
337
+ >
338
+ <CardHeading level={HeadingLevels.Three} id="heading1">
339
+ Small Image
340
+ </CardHeading>
341
+ <CardHeading level={HeadingLevels.Five} id="heading2">
342
+ Max-Width: 165px
343
+ </CardHeading>
344
+ <CardContent>
345
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
346
+ </CardContent>
347
+ </Card>
348
+ <Card
349
+ layout={CardLayouts.Row}
350
+ center
351
+ imageSrc="https://placeimg.com/410/210/animals"
352
+ imageAlt="Alt text"
353
+ imageAspectRatio={CardImageRatios.TwoByOne}
354
+ imageSize={CardImageSizes.Medium}
355
+ >
356
+ <CardHeading level={HeadingLevels.Three} id="heading2">
357
+ Medium Image
358
+ </CardHeading>
359
+ <CardHeading level={HeadingLevels.Five} id="heading2">
360
+ Max-Width: 225px
361
+ </CardHeading>
362
+ <CardContent>
363
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Sed
364
+ posuere consectetur est at lobortis.
365
+ </CardContent>
366
+ </Card>
367
+ <Card
368
+ layout={CardLayouts.Row}
369
+ center
370
+ imageSrc="https://placeimg.com/400/250/animals"
371
+ imageAlt="Alt text"
372
+ imageAspectRatio={CardImageRatios.TwoByOne}
373
+ imageSize={CardImageSizes.Large}
374
+ >
375
+ <CardHeading level={HeadingLevels.Three} id="heading1">
376
+ Large Image
377
+ </CardHeading>
378
+ <CardHeading level={HeadingLevels.Five} id="heading2">
379
+ Max-Width: 360px
380
+ </CardHeading>
381
+ <CardContent>
382
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Sed
383
+ posuere consectetur est at lobortis. Cras justo odio, dapibus ac
384
+ facilisis in, egestas eget quam.
385
+ </CardContent>
386
+ </Card>
387
+ <Card
388
+ layout={CardLayouts.Row}
389
+ center
390
+ imageSrc="https://placeimg.com/450/250/animals"
391
+ imageAlt="Alt text"
392
+ imageAspectRatio={CardImageRatios.TwoByOne}
393
+ >
394
+ <CardHeading level={HeadingLevels.Three} id="heading2">
395
+ Default Image
396
+ </CardHeading>
397
+ <CardHeading level={HeadingLevels.Five} id="heading2">
398
+ Max-Width: 225px
399
+ </CardHeading>
400
+ <CardContent>
401
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Sed
402
+ posuere consectetur est at lobortis. Cras justo odio, dapibus ac
403
+ facilisis in, egestas eget quam.
404
+ </CardContent>
405
+ </Card>
406
+ </div>
407
+ </Preview>
408
+
409
+ ## Cards in a Grid
410
+
411
+ <Preview>
412
+ <Story name="Cards in a Grid">
413
+ <div
414
+ style={{
415
+ display: "grid",
416
+ "grid-gap": "2rem",
417
+ "grid-template-columns": "repeat(3, 1fr)",
418
+ }}
419
+ >
420
+ <Card
421
+ imageSrc="https://placeimg.com/400/200/animals"
422
+ imageAlt="Alt text"
423
+ imageAspectRatio={CardImageRatios.TwoByOne}
424
+ >
425
+ <CardHeading level={HeadingLevels.Three} id="heading1">
426
+ Card Heading
427
+ </CardHeading>
428
+ <CardContent>
429
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
430
+ libero, a pharetra augue.
431
+ </CardContent>
432
+ </Card>
433
+ <Card
434
+ imageSrc="https://placeimg.com/410/210/animals"
435
+ imageAlt="Alt text"
436
+ imageAspectRatio={CardImageRatios.TwoByOne}
437
+ >
438
+ <CardHeading level={HeadingLevels.Three} id="heading1">
439
+ Card Heading
440
+ </CardHeading>
441
+ <CardContent>
442
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
443
+ libero, a pharetra augue.
444
+ </CardContent>
445
+ </Card>
446
+ <Card
447
+ imageSrc="https://placeimg.com/420/220/animals"
448
+ imageAlt="Alt text"
449
+ imageAspectRatio={CardImageRatios.TwoByOne}
450
+ >
451
+ <CardHeading level={HeadingLevels.Three} id="heading1">
452
+ Card Heading
453
+ </CardHeading>
454
+ <CardContent>
455
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
456
+ libero, a pharetra augue.
457
+ </CardContent>
458
+ </Card>
459
+ <Card
460
+ imageSrc="https://placeimg.com/430/230/animals"
461
+ imageAlt="Alt text"
462
+ imageAspectRatio={CardImageRatios.TwoByOne}
463
+ >
464
+ <CardHeading level={HeadingLevels.Three} id="heading1">
465
+ Card Heading
466
+ </CardHeading>
467
+ <CardContent>
468
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
469
+ libero, a pharetra augue.
470
+ </CardContent>
471
+ </Card>
472
+ <Card
473
+ imageSrc="https://placeimg.com/440/240/animals"
474
+ imageAlt="Alt text"
475
+ imageAspectRatio={CardImageRatios.TwoByOne}
476
+ >
477
+ <CardHeading level={HeadingLevels.Three} id="heading1">
478
+ Card Heading
479
+ </CardHeading>
480
+ <CardContent>
481
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
482
+ libero, a pharetra augue.
483
+ </CardContent>
484
+ </Card>
485
+ <Card
486
+ imageSrc="https://placeimg.com/450/250/animals"
487
+ imageAlt="Alt text"
488
+ imageAspectRatio={CardImageRatios.TwoByOne}
489
+ >
490
+ <CardHeading level={HeadingLevels.Three} id="heading1">
491
+ Card Heading
492
+ </CardHeading>
493
+ <CardContent>
494
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
495
+ libero, a pharetra augue.
496
+ </CardContent>
497
+ </Card>
498
+ </div>
499
+ </Story>
500
+ </Preview>
501
+
502
+ ## Cards in a Stack
503
+
504
+ <Preview>
505
+ <Story name="Cards in a Stack">
506
+ <div
507
+ style={{
508
+ display: "grid",
509
+ "grid-gap": "2rem",
510
+ "grid-template-columns": "repeat(1, 1fr)",
511
+ }}
512
+ >
513
+ <Card
514
+ layout={CardLayouts.Row}
515
+ center
516
+ imageSrc="https://placeimg.com/400/200/animals"
517
+ imageAlt="Alt text"
518
+ imageAspectRatio={CardImageRatios.TwoByOne}
519
+ >
520
+ <CardHeading level={HeadingLevels.Four} id="heading1">
521
+ Card Heading
522
+ </CardHeading>
523
+ <CardContent>
524
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
525
+ Sed posuere consectetur est at lobortis. Cras justo odio, dapibus ac
526
+ facilisis in, egestas eget quam.
527
+ </CardContent>
528
+ </Card>
529
+ <Card
530
+ layout={CardLayouts.Row}
531
+ center
532
+ imageSrc="https://placeimg.com/410/210/animals"
533
+ imageAlt="Alt text"
534
+ imageAspectRatio={CardImageRatios.TwoByOne}
535
+ >
536
+ <CardHeading level={HeadingLevels.Four} id="heading2">
537
+ Card Heading
538
+ </CardHeading>
539
+ <CardContent>
540
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
541
+ Sed posuere consectetur est at lobortis. Cras justo odio, dapibus ac
542
+ facilisis in, egestas eget quam.
543
+ </CardContent>
544
+ </Card>
545
+ <Card
546
+ layout={CardLayouts.Row}
547
+ center
548
+ imageSrc="https://placeimg.com/420/220/animals"
549
+ imageAlt="Alt text"
550
+ imageAspectRatio={CardImageRatios.TwoByOne}
551
+ >
552
+ <CardHeading level={HeadingLevels.Four} id="heading3">
553
+ Card Heading
554
+ </CardHeading>
555
+ <CardContent>
556
+ Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
557
+ Sed posuere consectetur est at lobortis. Cras justo odio, dapibus ac
558
+ facilisis in, egestas eget quam.
559
+ </CardContent>
560
+ </Card>
561
+ </div>
562
+ </Story>
563
+ </Preview>
564
+
565
+ ## Custom Image Component
566
+
567
+ Instead of passing a path for the `imageSrc` prop, you can pass a custom image component in using the `imageComponent` prop.
568
+
569
+ <Preview withToolbar>
570
+ <Story name="Custom Image Component">
571
+ <Card
572
+ imageAlt="Alt text"
573
+ imageAspectRatio={CardImageRatios.SixteenByNine}
574
+ imageComponent={
575
+ <Image src="https://placeimg.com/400/400/animals" alt="Alt text" />
576
+ }
577
+ >
578
+ <CardHeading level={HeadingLevels.Two} id="heading1">
579
+ Card Component with Custom Image Component
580
+ </CardHeading>
581
+ <CardHeading level={HeadingLevels.Four} id="heading2">
582
+ Secondary Heading
583
+ </CardHeading>
584
+ <CardContent>
585
+ Nulla vitae elit libero, a pharetra augue. Lorem ipsum dolor sit amet,
586
+ consectetur adipiscing elit. Aenean lacinia bibendum nulla sed
587
+ consectetur. Vestibulum id ligula porta felis euismod semper. Cras justo
588
+ odio, dapibus ac facilisis in, egestas eget quam. Sed posuere
589
+ consectetur est at lobortis.
590
+ </CardContent>
591
+ <CardActions>
592
+ <Link type={LinkTypes.Button} href="blah">
593
+ Reserve
594
+ </Link>
595
+ <Link href="#url" type={LinkTypes.Forwards}>
596
+ View Book Details
597
+ </Link>
598
+ </CardActions>
599
+ </Card>
600
+ </Story>
601
+ </Preview>
602
+
603
+ ## Cards Without Images
604
+
605
+ <Preview>
606
+ <Story name="Cards Without Images">
607
+ <div
608
+ style={{
609
+ display: "grid",
610
+ "grid-gap": "2rem",
611
+ "grid-template-columns": "repeat(3, 1fr)",
612
+ "margin-bottom": "2rem",
613
+ }}
614
+ >
615
+ <Card border>
616
+ <CardHeading level={HeadingLevels.Three} id="heading1">
617
+ Card Heading
618
+ </CardHeading>
619
+ <CardContent>
620
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
621
+ libero, a pharetra augue. Nulla vitae elit libero, a pharetra augue.
622
+ Praesent commodo cursus magna, vel scelerisque nisl.
623
+ </CardContent>
624
+ </Card>
625
+ <Card border>
626
+ <CardHeading level={HeadingLevels.Three} id="heading1">
627
+ Card Heading
628
+ </CardHeading>
629
+ <CardContent>
630
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
631
+ libero, a pharetra augue. Nulla vitae elit libero, a pharetra augue.
632
+ Praesent commodo cursus magna, vel scelerisque nisl.
633
+ </CardContent>
634
+ </Card>
635
+ <Card border>
636
+ <CardHeading level={HeadingLevels.Three} id="heading1">
637
+ Card Heading
638
+ </CardHeading>
639
+ <CardContent>
640
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
641
+ libero, a pharetra augue. Nulla vitae elit libero, a pharetra augue.
642
+ Praesent commodo cursus magna, vel scelerisque nisl.
643
+ </CardContent>
644
+ </Card>
645
+ </div>
646
+ <div
647
+ style={{
648
+ display: "grid",
649
+ "grid-gap": "2rem",
650
+ "grid-template-columns": "repeat(1, 1fr)",
651
+ }}
652
+ >
653
+ <Card layout={CardLayouts.Row} border>
654
+ <CardHeading level={HeadingLevels.Three} id="heading1">
655
+ Card Heading
656
+ </CardHeading>
657
+ <CardContent>
658
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
659
+ libero, a pharetra augue. Vestibulum id ligula porta felis euismod
660
+ semper. Nulla vitae elit libero, a pharetra augue. Nulla vitae elit
661
+ libero, a pharetra augue. Praesent commodo cursus magna, vel
662
+ scelerisque nisl consectetur et. Donec id elit non mi porta gravida at
663
+ eget metus.
664
+ </CardContent>
665
+ </Card>
666
+ <Card layout={CardLayouts.Row} border>
667
+ <CardHeading level={HeadingLevels.Three} id="heading1">
668
+ Card Heading
669
+ </CardHeading>
670
+ <CardContent>
671
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
672
+ libero, a pharetra augue. Vestibulum id ligula porta felis euismod
673
+ semper. Nulla vitae elit libero, a pharetra augue. Nulla vitae elit
674
+ libero, a pharetra augue. Praesent commodo cursus magna, vel
675
+ scelerisque nisl consectetur et. Donec id elit non mi porta gravida at
676
+ eget metus.
677
+ </CardContent>
678
+ </Card>
679
+ <Card layout={CardLayouts.Row} border>
680
+ <CardHeading level={HeadingLevels.Three} id="heading1">
681
+ Card Heading
682
+ </CardHeading>
683
+ <CardContent>
684
+ Vestibulum id ligula porta felis euismod semper. Nulla vitae elit
685
+ libero, a pharetra augue. Vestibulum id ligula porta felis euismod
686
+ semper. Nulla vitae elit libero, a pharetra augue. Nulla vitae elit
687
+ libero, a pharetra augue. Praesent commodo cursus magna, vel
688
+ scelerisque nisl consectetur et. Donec id elit non mi porta gravida at
689
+ eget metus.
690
+ </CardContent>
691
+ </Card>
692
+ </div>
693
+ </Story>
694
+ </Preview>